{
  "version": 3,
  "sources": ["../../../../../shared/node_modules/jquery/dist/jquery.js", "../../../../../shared/node_modules/popper.js/src/utils/isBrowser.js", "../../../../../shared/node_modules/popper.js/src/utils/debounce.js", "../../../../../shared/node_modules/popper.js/src/utils/isFunction.js", "../../../../../shared/node_modules/popper.js/src/utils/getStyleComputedProperty.js", "../../../../../shared/node_modules/popper.js/src/utils/getParentNode.js", "../../../../../shared/node_modules/popper.js/src/utils/getScrollParent.js", "../../../../../shared/node_modules/popper.js/src/utils/getReferenceNode.js", "../../../../../shared/node_modules/popper.js/src/utils/isIE.js", "../../../../../shared/node_modules/popper.js/src/utils/getOffsetParent.js", "../../../../../shared/node_modules/popper.js/src/utils/isOffsetContainer.js", "../../../../../shared/node_modules/popper.js/src/utils/getRoot.js", "../../../../../shared/node_modules/popper.js/src/utils/findCommonOffsetParent.js", "../../../../../shared/node_modules/popper.js/src/utils/getScroll.js", "../../../../../shared/node_modules/popper.js/src/utils/includeScroll.js", "../../../../../shared/node_modules/popper.js/src/utils/getBordersSize.js", "../../../../../shared/node_modules/popper.js/src/utils/getWindowSizes.js", "../../../../../shared/node_modules/popper.js/src/utils/getClientRect.js", "../../../../../shared/node_modules/popper.js/src/utils/getBoundingClientRect.js", "../../../../../shared/node_modules/popper.js/src/utils/getOffsetRectRelativeToArbitraryNode.js", "../../../../../shared/node_modules/popper.js/src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js", "../../../../../shared/node_modules/popper.js/src/utils/isFixed.js", "../../../../../shared/node_modules/popper.js/src/utils/getFixedPositionOffsetParent.js", "../../../../../shared/node_modules/popper.js/src/utils/getBoundaries.js", "../../../../../shared/node_modules/popper.js/src/utils/computeAutoPlacement.js", "../../../../../shared/node_modules/popper.js/src/utils/getReferenceOffsets.js", "../../../../../shared/node_modules/popper.js/src/utils/getOuterSizes.js", "../../../../../shared/node_modules/popper.js/src/utils/getOppositePlacement.js", "../../../../../shared/node_modules/popper.js/src/utils/getPopperOffsets.js", "../../../../../shared/node_modules/popper.js/src/utils/find.js", "../../../../../shared/node_modules/popper.js/src/utils/findIndex.js", "../../../../../shared/node_modules/popper.js/src/utils/runModifiers.js", "../../../../../shared/node_modules/popper.js/src/methods/update.js", "../../../../../shared/node_modules/popper.js/src/utils/isModifierEnabled.js", "../../../../../shared/node_modules/popper.js/src/utils/getSupportedPropertyName.js", "../../../../../shared/node_modules/popper.js/src/methods/destroy.js", "../../../../../shared/node_modules/popper.js/src/utils/getWindow.js", "../../../../../shared/node_modules/popper.js/src/utils/setupEventListeners.js", "../../../../../shared/node_modules/popper.js/src/methods/enableEventListeners.js", "../../../../../shared/node_modules/popper.js/src/utils/removeEventListeners.js", "../../../../../shared/node_modules/popper.js/src/methods/disableEventListeners.js", "../../../../../shared/node_modules/popper.js/src/utils/isNumeric.js", "../../../../../shared/node_modules/popper.js/src/utils/setStyles.js", "../../../../../shared/node_modules/popper.js/src/utils/setAttributes.js", "../../../../../shared/node_modules/popper.js/src/modifiers/applyStyle.js", "../../../../../shared/node_modules/popper.js/src/utils/getRoundedOffsets.js", "../../../../../shared/node_modules/popper.js/src/modifiers/computeStyle.js", "../../../../../shared/node_modules/popper.js/src/utils/isModifierRequired.js", "../../../../../shared/node_modules/popper.js/src/modifiers/arrow.js", "../../../../../shared/node_modules/popper.js/src/utils/getOppositeVariation.js", "../../../../../shared/node_modules/popper.js/src/methods/placements.js", "../../../../../shared/node_modules/popper.js/src/utils/clockwise.js", "../../../../../shared/node_modules/popper.js/src/modifiers/flip.js", "../../../../../shared/node_modules/popper.js/src/modifiers/keepTogether.js", "../../../../../shared/node_modules/popper.js/src/modifiers/offset.js", "../../../../../shared/node_modules/popper.js/src/modifiers/preventOverflow.js", "../../../../../shared/node_modules/popper.js/src/modifiers/shift.js", "../../../../../shared/node_modules/popper.js/src/modifiers/hide.js", "../../../../../shared/node_modules/popper.js/src/modifiers/inner.js", "../../../../../shared/node_modules/popper.js/src/modifiers/index.js", "../../../../../shared/node_modules/popper.js/src/methods/defaults.js", "../../../../../shared/node_modules/popper.js/src/index.js", "../../../../../shared/node_modules/bootstrap/js/src/util.js", "../../../../../shared/node_modules/bootstrap/js/src/alert.js", "../../../../../shared/node_modules/bootstrap/js/src/button.js", "../../../../../shared/node_modules/bootstrap/js/src/carousel.js", "../../../../../shared/node_modules/bootstrap/js/src/collapse.js", "../../../../../shared/node_modules/bootstrap/js/src/dropdown.js", "../../../../../shared/node_modules/bootstrap/js/src/modal.js", "../../../../../shared/node_modules/bootstrap/js/src/tools/sanitizer.js", "../../../../../shared/node_modules/bootstrap/js/src/tooltip.js", "../../../../../shared/node_modules/bootstrap/js/src/popover.js", "../../../../../shared/node_modules/bootstrap/js/src/scrollspy.js", "../../../../../shared/node_modules/bootstrap/js/src/tab.js", "../../../../../shared/node_modules/bootstrap/js/src/toast.js", "../../../../../shared/node_modules/rails-ujs/lib/assets/compiled/rails-ujs.js", "../../../../../shared/node_modules/tinymce/tinymce.js", "../../../../../shared/node_modules/tinymce/plugins/lists/plugin.js", "../../../../../shared/node_modules/moment/moment.js", "../../../../../shared/node_modules/fullcalendar/dist/fullcalendar.js", "../../../../../shared/node_modules/fullcalendar/dist/locale/nl.js", "../../../../../shared/node_modules/bootstrap-datetime-picker/js/bootstrap-datetimepicker.js", "../../javascript/dashboard/jquery.js", "../../javascript/packs/application.js", "../../../../../shared/node_modules/datatables.net-bs4/js/dataTables.bootstrap4.mjs", "../../../../../shared/node_modules/datatables.net/js/jquery.dataTables.mjs", "../../javascript/dashboard/datatables.js", "../../javascript/dashboard/tinymce.js", "../../../../../shared/node_modules/tinymce/themes/modern/theme.js", "../../../../../shared/node_modules/tinymce/plugins/lists/index.js", "../../../../../shared/node_modules/tinymce-i18n/langs/nl.js", "../../javascript/dashboard/calendar.js", "../../javascript/dashboard/datetimepicker.js", "../../../../../shared/node_modules/bootstrap-datetime-picker/js/locales/bootstrap-datetimepicker.nl.js", "../../javascript/dashboard/timer.js", "../../javascript/dashboard/invoices.js", "../../javascript/dashboard/care/vitals.js", "../../javascript/dashboard/care/reports.js"],
  "sourcesContent": ["/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\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} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\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}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\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\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\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\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\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\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\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\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\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\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\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} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\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\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\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\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\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\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\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\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\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\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, trac-12537)\n\t//   .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\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\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\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\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\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\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\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} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\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\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\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\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n", "export default typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n", "import isBrowser from './isBrowser';\n\nconst timeoutDuration = (function(){\n  const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n  for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      return 1;\n    }\n  }\n  return 0;\n}());\n\nexport function microtaskDebounce(fn) {\n  let called = false\n  return () => {\n    if (called) {\n      return\n    }\n    called = true\n    window.Promise.resolve().then(() => {\n      called = false\n      fn()\n    })\n  }\n}\n\nexport function taskDebounce(fn) {\n  let scheduled = false;\n  return () => {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(() => {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n  ? microtaskDebounce\n  : taskDebounce);\n", "/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n  const getType = {};\n  return (\n    functionToCheck &&\n    getType.toString.call(functionToCheck) === '[object Function]'\n  );\n}\n", "/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  const window = element.ownerDocument.defaultView;\n  const css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n", "/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n", "import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body\n  }\n\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body\n    case '#document':\n      return element.body\n  }\n\n  // Firefox want us to check `-x` and `-y` variations as well\n  const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n", "/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nexport default function getReferenceNode(reference) {\n  return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n", "import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n  if (version === 10) {\n    return isIE10;\n  }\n  return isIE11 || isIE10;\n}\n", "import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  const noOffsetParent = isIE(10) ? document.body : null;\n\n  // NOTE: 1 DOM access here\n  let offsetParent = element.offsetParent || null;\n  // Skip hidden elements which don't have an offsetParent\n  while (offsetParent === noOffsetParent && element.nextElementSibling) {\n    offsetParent = (element = element.nextElementSibling).offsetParent;\n  }\n\n  const nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return element ? element.ownerDocument.documentElement : document.documentElement;\n  }\n\n  // .offsetParent will return the closest TH, TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n  if (\n    ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n    getStyleComputedProperty(offsetParent, 'position') === 'static'\n  ) {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n", "import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n  const { nodeName } = element;\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return (\n    nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n  );\n}\n", "/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n", "import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  }\n\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  const order =\n    element1.compareDocumentPosition(element2) &\n    Node.DOCUMENT_POSITION_FOLLOWING;\n  const start = order ? element1 : element2;\n  const end = order ? element2 : element1;\n\n  // Get common ancestor container\n  const range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  const { commonAncestorContainer } = range;\n\n  // Both nodes are inside #document\n  if (\n    (element1 !== commonAncestorContainer &&\n      element2 !== commonAncestorContainer) ||\n    start.contains(end)\n  ) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  }\n\n  // one of the nodes is inside shadowDOM, find which one\n  const element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n", "/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n  const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  const nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    const html = element.ownerDocument.documentElement;\n    const scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n", "import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n  const scrollTop = getScroll(element, 'top');\n  const scrollLeft = getScroll(element, 'left');\n  const modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n", "/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n  const sideA = axis === 'x' ? 'Left' : 'Top';\n  const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n  return (\n    parseFloat(styles[`border${sideA}Width`]) +\n    parseFloat(styles[`border${sideB}Width`])\n  );\n}\n", "import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(\n    body[`offset${axis}`],\n    body[`scroll${axis}`],\n    html[`client${axis}`],\n    html[`offset${axis}`],\n    html[`scroll${axis}`],\n    isIE(10)\n      ? (parseInt(html[`offset${axis}`]) + \n      parseInt(computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`]) + \n      parseInt(computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]))\n    : 0 \n  );\n}\n\nexport default function getWindowSizes(document) {\n  const body = document.body;\n  const html = document.documentElement;\n  const computedStyle = isIE(10) && getComputedStyle(html);\n\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle),\n  };\n}\n", "/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n  return {\n    ...offsets,\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height,\n  };\n}\n", "import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n  let rect = {};\n\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  try {\n    if (isIE(10)) {\n      rect = element.getBoundingClientRect();\n      const scrollTop = getScroll(element, 'top');\n      const scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    }\n    else {\n      rect = element.getBoundingClientRect();\n    }\n  }\n  catch(e){}\n\n  const result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top,\n  };\n\n  // subtract scrollbar size from sizes\n  const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  const width =\n    sizes.width || element.clientWidth || result.width;\n  const height =\n    sizes.height || element.clientHeight || result.height;\n\n  let horizScrollbar = element.offsetWidth - width;\n  let vertScrollbar = element.offsetHeight - height;\n\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    const styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n", "import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n  const isIE10 = runIsIE(10);\n  const isHTML = parent.nodeName === 'HTML';\n  const childrenRect = getBoundingClientRect(children);\n  const parentRect = getBoundingClientRect(parent);\n  const scrollParent = getScrollParent(children);\n\n  const styles = getStyleComputedProperty(parent);\n  const borderTopWidth = parseFloat(styles.borderTopWidth);\n  const borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n  // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n  if(fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\n  let offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height,\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (!isIE10 && isHTML) {\n    const marginTop = parseFloat(styles.marginTop);\n    const marginLeft = parseFloat(styles.marginLeft);\n\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft;\n\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (\n    isIE10 && !fixedPosition\n      ? parent.contains(scrollParent)\n      : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n  ) {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n", "import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n  const html = element.ownerDocument.documentElement;\n  const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  const width = Math.max(html.clientWidth, window.innerWidth || 0);\n  const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n  const scrollTop = !excludeScroll ? getScroll(html) : 0;\n  const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n  const offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width,\n    height,\n  };\n\n  return getClientRect(offset);\n}\n", "import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n  const nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  const parentNode = getParentNode(element);\n  if (!parentNode) {\n    return false;\n  }\n  return isFixed(parentNode);\n}\n", "import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n   if (!element || !element.parentElement || isIE()) {\n    return document.documentElement;\n  }\n  let el = element.parentElement;\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n  return el || document.documentElement;\n\n}\n", "import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getReferenceNode from './getReferenceNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n  popper,\n  reference,\n  padding,\n  boundariesElement,\n  fixedPosition = false\n) {\n  // NOTE: 1 DOM access here\n\n  let boundaries = { top: 0, left: 0 };\n  const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n  // Handle viewport case\n  if (boundariesElement === 'viewport' ) {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  }\n\n  else {\n    // Handle other cases based on DOM element used as boundaries\n    let boundariesNode;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = popper.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    const offsets = getOffsetRectRelativeToArbitraryNode(\n      boundariesNode,\n      offsetParent,\n      fixedPosition\n    );\n\n    // In case of HTML, we need a different computation\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      const { height, width } = getWindowSizes(popper.ownerDocument);\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n\n  // Add paddings\n  padding = padding || 0;\n  const isPaddingNumber = typeof padding === 'number';\n  boundaries.left += isPaddingNumber ? padding : padding.left || 0; \n  boundaries.top += isPaddingNumber ? padding : padding.top || 0; \n  boundaries.right -= isPaddingNumber ? padding : padding.right || 0; \n  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; \n\n  return boundaries;\n}\n", "import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n  return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n  placement,\n  refRect,\n  popper,\n  reference,\n  boundariesElement,\n  padding = 0\n) {\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  const boundaries = getBoundaries(\n    popper,\n    reference,\n    padding,\n    boundariesElement\n  );\n\n  const rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top,\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height,\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom,\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height,\n    },\n  };\n\n  const sortedAreas = Object.keys(rects)\n    .map(key => ({\n      key,\n      ...rects[key],\n      area: getArea(rects[key]),\n    }))\n    .sort((a, b) => b.area - a.area);\n\n  const filteredAreas = sortedAreas.filter(\n    ({ width, height }) =>\n      width >= popper.clientWidth && height >= popper.clientHeight\n  );\n\n  const computedPlacement = filteredAreas.length > 0\n    ? filteredAreas[0].key\n    : sortedAreas[0].key;\n\n  const variation = placement.split('-')[1];\n\n  return computedPlacement + (variation ? `-${variation}` : '');\n}\n", "import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\nimport getReferenceNode from './getReferenceNode';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n  const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n", "/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n  const window = element.ownerDocument.defaultView;\n  const styles = window.getComputedStyle(element);\n  const x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n  const y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n  const result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x,\n  };\n  return result;\n}\n", "/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n  const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n  return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n", "import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0];\n\n  // Get popper node sizes\n  const popperRect = getOuterSizes(popper);\n\n  // Add position, width and height to our offsets object\n  const popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height,\n  };\n\n  // depending by the popper placement we have to compute its offsets slightly differently\n  const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  const mainSide = isHoriz ? 'top' : 'left';\n  const secondarySide = isHoriz ? 'left' : 'top';\n  const measurement = isHoriz ? 'height' : 'width';\n  const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n  popperOffsets[mainSide] =\n    referenceOffsets[mainSide] +\n    referenceOffsets[measurement] / 2 -\n    popperRect[measurement] / 2;\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] =\n      referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] =\n      referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n", "/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  }\n\n  // use `filter` to obtain the same behavior of `find`\n  return arr.filter(check)[0];\n}\n", "import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(cur => cur[prop] === value);\n  }\n\n  // use `find` + `indexOf` if `findIndex` isn't supported\n  const match = find(arr, obj => obj[prop] === value);\n  return arr.indexOf(match);\n}\n", "import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n  const modifiersToRun = ends === undefined\n    ? modifiers\n    : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n  modifiersToRun.forEach(modifier => {\n    if (modifier['function']) { // eslint-disable-line dot-notation\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n    const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n\n      data = fn(data, modifier);\n    }\n  });\n\n  return data;\n}\n", "import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  let data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {},\n  };\n\n  // compute reference element offsets\n  data.offsets.reference = getReferenceOffsets(\n    this.state,\n    this.popper,\n    this.reference,\n    this.options.positionFixed\n  );\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  data.placement = computeAutoPlacement(\n    this.options.placement,\n    data.offsets.reference,\n    this.popper,\n    this.reference,\n    this.options.modifiers.flip.boundariesElement,\n    this.options.modifiers.flip.padding\n  );\n\n  // store the computed placement inside `originalPlacement`\n  data.originalPlacement = data.placement;\n\n  data.positionFixed = this.options.positionFixed;\n\n  // compute the popper offsets\n  data.offsets.popper = getPopperOffsets(\n    this.popper,\n    data.offsets.reference,\n    data.placement\n  );\n\n  data.offsets.popper.position = this.options.positionFixed\n    ? 'fixed'\n    : 'absolute';\n\n  // run the modifiers\n  data = runModifiers(this.modifiers, data);\n\n  // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n", "/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(\n    ({ name, enabled }) => enabled && name === modifierName\n  );\n}\n", "/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n  const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (let i = 0; i < prefixes.length; i++) {\n    const prefix = prefixes[i];\n    const toCheck = prefix ? `${prefix}${upperProp}` : property;\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n  return null;\n}\n", "import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n  this.state.isDestroyed = true;\n\n  // touch DOM only if `applyStyle` modifier is enabled\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style.left = '';\n    this.popper.style.right = '';\n    this.popper.style.bottom = '';\n    this.popper.style.willChange = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners();\n\n  // remove the popper if user explicitly asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n  return this;\n}\n", "/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n  const ownerDocument = element.ownerDocument;\n  return ownerDocument ? ownerDocument.defaultView : window;\n}\n", "import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  const isBody = scrollParent.nodeName === 'BODY';\n  const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n  target.addEventListener(event, callback, { passive: true });\n\n  if (!isBody) {\n    attachToScrollParents(\n      getScrollParent(target.parentNode),\n      event,\n      callback,\n      scrollParents\n    );\n  }\n  scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n  reference,\n  options,\n  state,\n  updateBound\n) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n  // Scroll event listener on scroll parents\n  const scrollElement = getScrollParent(reference);\n  attachToScrollParents(\n    scrollElement,\n    'scroll',\n    state.updateBound,\n    state.scrollParents\n  );\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n\n  return state;\n}\n", "import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(\n      this.reference,\n      this.options,\n      this.state,\n      this.scheduleUpdate\n    );\n  }\n}\n", "import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound);\n\n  // Remove scroll event listener on scroll parents\n  state.scrollParents.forEach(target => {\n    target.removeEventListener('scroll', state.updateBound);\n  });\n\n  // Reset state\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n", "import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n", "/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n", "import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n  Object.keys(styles).forEach(prop => {\n    let unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (\n      ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n        -1 &&\n      isNumeric(styles[prop])\n    ) {\n      unit = 'px';\n    }\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n", "/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function(prop) {\n    const value = attributes[prop];\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n", "import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles);\n\n  // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n  setAttributes(data.instance.popper, data.attributes);\n\n  // if arrowElement is defined and arrowStyles has some properties\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n  reference,\n  popper,\n  options,\n  modifierOptions,\n  state\n) {\n  // compute reference element offsets\n  const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  const placement = computeAutoPlacement(\n    options.placement,\n    referenceOffsets,\n    popper,\n    reference,\n    options.modifiers.flip.boundariesElement,\n    options.modifiers.flip.padding\n  );\n\n  popper.setAttribute('x-placement', placement);\n\n  // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n  return options;\n}\n", "/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nexport default function getRoundedOffsets(data, shouldRound) {\n  const { popper, reference } = data.offsets;\n  const { round, floor } = Math;\n  const noRound = v => v;\n  \n  const referenceWidth = round(reference.width);\n  const popperWidth = round(popper.width);\n  \n  const isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n  const isVariation = data.placement.indexOf('-') !== -1;\n  const sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n  const bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n  const horizontalToInteger = !shouldRound\n    ? noRound\n    : isVertical || isVariation || sameWidthParity\n    ? round\n    : floor;\n  const verticalToInteger = !shouldRound ? noRound : round;\n\n  return {\n    left: horizontalToInteger(\n      bothOddWidth && !isVariation && shouldRound\n        ? popper.left - 1\n        : popper.left\n    ),\n    top: verticalToInteger(popper.top),\n    bottom: verticalToInteger(popper.bottom),\n    right: horizontalToInteger(popper.right),\n  };\n}\n", "import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\nimport getRoundedOffsets from '../utils/getRoundedOffsets';\nimport isBrowser from '../utils/isBrowser';\n\nconst isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n  const { x, y } = options;\n  const { popper } = data.offsets;\n\n  // Remove this legacy support in Popper.js v2\n  const legacyGpuAccelerationOption = find(\n    data.instance.modifiers,\n    modifier => modifier.name === 'applyStyle'\n  ).gpuAcceleration;\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn(\n      'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n    );\n  }\n  const gpuAcceleration =\n    legacyGpuAccelerationOption !== undefined\n      ? legacyGpuAccelerationOption\n      : options.gpuAcceleration;\n\n  const offsetParent = getOffsetParent(data.instance.popper);\n  const offsetParentRect = getBoundingClientRect(offsetParent);\n\n  // Styles\n  const styles = {\n    position: popper.position,\n  };\n\n  const offsets = getRoundedOffsets(\n    data,\n    window.devicePixelRatio < 2 || !isFirefox\n  );\n\n  const sideA = x === 'bottom' ? 'top' : 'bottom';\n  const sideB = y === 'right' ? 'left' : 'right';\n\n  // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n  const prefixedProperty = getSupportedPropertyName('transform');\n\n  // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n  let left, top;\n  if (sideA === 'bottom') {\n    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n    // and not the bottom of the html element\n    if (offsetParent.nodeName === 'HTML') {\n      top = -offsetParent.clientHeight + offsets.bottom;\n    } else {\n      top = -offsetParentRect.height + offsets.bottom;\n    }\n  } else {\n    top = offsets.top;\n  }\n  if (sideB === 'right') {\n    if (offsetParent.nodeName === 'HTML') {\n      left = -offsetParent.clientWidth + offsets.right;\n    } else {\n      left = -offsetParentRect.width + offsets.right;\n    }\n  } else {\n    left = offsets.left;\n  }\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    const invertTop = sideA === 'bottom' ? -1 : 1;\n    const invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = `${sideA}, ${sideB}`;\n  }\n\n  // Attributes\n  const attributes = {\n    'x-placement': data.placement,\n  };\n\n  // Update `data` attributes, styles and arrowStyles\n  data.attributes = { ...attributes, ...data.attributes };\n  data.styles = { ...styles, ...data.styles };\n  data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n  return data;\n}\n", "import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n  modifiers,\n  requestingName,\n  requestedName\n) {\n  const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n  const isRequired =\n    !!requesting &&\n    modifiers.some(modifier => {\n      return (\n        modifier.name === requestedName &&\n        modifier.enabled &&\n        modifier.order < requesting.order\n      );\n    });\n\n  if (!isRequired) {\n    const requesting = `\\`${requestingName}\\``;\n    const requested = `\\`${requestedName}\\``;\n    console.warn(\n      `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n    );\n  }\n  return isRequired;\n}\n", "import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n  // arrow depends on keepTogether in order to work\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  let arrowElement = options.element;\n\n  // if arrowElement is a string, suppose it's a CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement);\n\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn(\n        'WARNING: `arrow.element` must be child of its popper element!'\n      );\n      return data;\n    }\n  }\n\n  const placement = data.placement.split('-')[0];\n  const { popper, reference } = data.offsets;\n  const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n  const len = isVertical ? 'height' : 'width';\n  const sideCapitalized = isVertical ? 'Top' : 'Left';\n  const side = sideCapitalized.toLowerCase();\n  const altSide = isVertical ? 'left' : 'top';\n  const opSide = isVertical ? 'bottom' : 'right';\n  const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n  //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n\n  // top/left side\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -=\n      popper[side] - (reference[opSide] - arrowElementSize);\n  }\n  // bottom/right side\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] +=\n      reference[side] + arrowElementSize - popper[opSide];\n  }\n  data.offsets.popper = getClientRect(data.offsets.popper);\n\n  // compute center of the popper\n  const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n  // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n  const css = getStyleComputedProperty(data.instance.popper);\n  const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`]);\n  const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`]);\n  let sideValue =\n    center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n  // prevent arrowElement from being placed not contiguously to its popper\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = {\n    [side]: Math.round(sideValue),\n    [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n  };\n\n  return data;\n}\n", "/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n  return variation;\n}\n", "/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n  'auto-start',\n  'auto',\n  'auto-end',\n  'top-start',\n  'top',\n  'top-end',\n  'right-start',\n  'right',\n  'right-end',\n  'bottom-end',\n  'bottom',\n  'bottom-start',\n  'left-end',\n  'left',\n  'left-start',\n];\n", "import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n  const index = validPlacements.indexOf(placement);\n  const arr = validPlacements\n    .slice(index + 1)\n    .concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n", "import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  const boundaries = getBoundaries(\n    data.instance.popper,\n    data.instance.reference,\n    options.padding,\n    options.boundariesElement,\n    data.positionFixed\n  );\n\n  let placement = data.placement.split('-')[0];\n  let placementOpposite = getOppositePlacement(placement);\n  let variation = data.placement.split('-')[1] || '';\n\n  let flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach((step, index) => {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n\n    const popperOffsets = data.offsets.popper;\n    const refOffsets = data.offsets.reference;\n\n    // using floor because the reference offsets may contain decimals we are not going to consider here\n    const floor = Math.floor;\n    const overlapsRef =\n      (placement === 'left' &&\n        floor(popperOffsets.right) > floor(refOffsets.left)) ||\n      (placement === 'right' &&\n        floor(popperOffsets.left) < floor(refOffsets.right)) ||\n      (placement === 'top' &&\n        floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n      (placement === 'bottom' &&\n        floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n    const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    const overflowsBottom =\n      floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n    const overflowsBoundaries =\n      (placement === 'left' && overflowsLeft) ||\n      (placement === 'right' && overflowsRight) ||\n      (placement === 'top' && overflowsTop) ||\n      (placement === 'bottom' && overflowsBottom);\n\n    // flip the variation if required\n    const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n    // flips variation if reference element overflows boundaries\n    const flippedVariationByRef =\n      !!options.flipVariations &&\n      ((isVertical && variation === 'start' && overflowsLeft) ||\n        (isVertical && variation === 'end' && overflowsRight) ||\n        (!isVertical && variation === 'start' && overflowsTop) ||\n        (!isVertical && variation === 'end' && overflowsBottom));\n\n    // flips variation if popper content overflows boundaries\n    const flippedVariationByContent =\n      !!options.flipVariationsByContent &&\n      ((isVertical && variation === 'start' && overflowsRight) ||\n        (isVertical && variation === 'end' && overflowsLeft) ||\n        (!isVertical && variation === 'start' && overflowsBottom) ||\n        (!isVertical && variation === 'end' && overflowsTop));\n\n    const flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : '');\n\n      // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n      data.offsets.popper = {\n        ...data.offsets.popper,\n        ...getPopperOffsets(\n          data.instance.popper,\n          data.offsets.reference,\n          data.placement\n        ),\n      };\n\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n", "/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n  const { popper, reference } = data.offsets;\n  const placement = data.placement.split('-')[0];\n  const floor = Math.floor;\n  const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  const side = isVertical ? 'right' : 'bottom';\n  const opSide = isVertical ? 'left' : 'top';\n  const measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] =\n      floor(reference[opSide]) - popper[measurement];\n  }\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n", "import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  const value = +split[1];\n  const unit = split[2];\n\n  // If it's not a number it's an operator, I guess\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    let element;\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    const rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    let size;\n    if (unit === 'vh') {\n      size = Math.max(\n        document.documentElement.clientHeight,\n        window.innerHeight || 0\n      );\n    } else {\n      size = Math.max(\n        document.documentElement.clientWidth,\n        window.innerWidth || 0\n      );\n    }\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n  offset,\n  popperOffsets,\n  referenceOffsets,\n  basePlacement\n) {\n  const offsets = [0, 0];\n\n  // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n  const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n  // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n  const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n  // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n  const divider = fragments.indexOf(\n    find(fragments, frag => frag.search(/,|\\s/) !== -1)\n  );\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn(\n      'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n    );\n  }\n\n  // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n  const splitRegex = /\\s*,\\s*|\\s+/;\n  let ops = divider !== -1\n    ? [\n        fragments\n          .slice(0, divider)\n          .concat([fragments[divider].split(splitRegex)[0]]),\n        [fragments[divider].split(splitRegex)[1]].concat(\n          fragments.slice(divider + 1)\n        ),\n      ]\n    : [fragments];\n\n  // Convert the values with units to absolute pixels to allow our computations\n  ops = ops.map((op, index) => {\n    // Most of the units rely on the orientation of the popper\n    const measurement = (index === 1 ? !useHeight : useHeight)\n      ? 'height'\n      : 'width';\n    let mergeWithPrevious = false;\n    return (\n      op\n        // This aggregates any `+` or `-` sign that aren't considered operators\n        // e.g.: 10 + +5 => [10, +, +5]\n        .reduce((a, b) => {\n          if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n            a[a.length - 1] = b;\n            mergeWithPrevious = true;\n            return a;\n          } else if (mergeWithPrevious) {\n            a[a.length - 1] += b;\n            mergeWithPrevious = false;\n            return a;\n          } else {\n            return a.concat(b);\n          }\n        }, [])\n        // Here we convert the string values into number values (in px)\n        .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n    );\n  });\n\n  // Loop trough the offsets arrays and execute the operations\n  ops.forEach((op, index) => {\n    op.forEach((frag, index2) => {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n  const { placement, offsets: { popper, reference } } = data;\n  const basePlacement = placement.split('-')[0];\n\n  let offsets;\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n", "import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n  let boundariesElement =\n    options.boundariesElement || getOffsetParent(data.instance.popper);\n\n  // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  }\n\n  // NOTE: DOM access here\n  // resets the popper's position so that the document size can be calculated excluding\n  // the size of the popper element itself\n  const transformProp = getSupportedPropertyName('transform');\n  const popperStyles = data.instance.popper.style; // assignment to help minification\n  const { top, left, [transformProp]: transform } = popperStyles;\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n\n  const boundaries = getBoundaries(\n    data.instance.popper,\n    data.instance.reference,\n    options.padding,\n    boundariesElement,\n    data.positionFixed\n  );\n\n  // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n\n  options.boundaries = boundaries;\n\n  const order = options.priority;\n  let popper = data.offsets.popper;\n\n  const check = {\n    primary(placement) {\n      let value = popper[placement];\n      if (\n        popper[placement] < boundaries[placement] &&\n        !options.escapeWithReference\n      ) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n      return { [placement]: value };\n    },\n    secondary(placement) {\n      const mainSide = placement === 'right' ? 'left' : 'top';\n      let value = popper[mainSide];\n      if (\n        popper[placement] > boundaries[placement] &&\n        !options.escapeWithReference\n      ) {\n        value = Math.min(\n          popper[mainSide],\n          boundaries[placement] -\n            (placement === 'right' ? popper.width : popper.height)\n        );\n      }\n      return { [mainSide]: value };\n    },\n  };\n\n  order.forEach(placement => {\n    const side =\n      ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = { ...popper, ...check[side](placement) };\n  });\n\n  data.offsets.popper = popper;\n\n  return data;\n}\n", "/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n  const placement = data.placement;\n  const basePlacement = placement.split('-')[0];\n  const shiftvariation = placement.split('-')[1];\n\n  // if shift shiftvariation is specified, run the modifier\n  if (shiftvariation) {\n    const { reference, popper } = data.offsets;\n    const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    const side = isVertical ? 'left' : 'top';\n    const measurement = isVertical ? 'width' : 'height';\n\n    const shiftOffsets = {\n      start: { [side]: reference[side] },\n      end: {\n        [side]: reference[side] + reference[measurement] - popper[measurement],\n      },\n    };\n\n    data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n  }\n\n  return data;\n}\n", "import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  const refRect = data.offsets.reference;\n  const bound = find(\n    data.instance.modifiers,\n    modifier => modifier.name === 'preventOverflow'\n  ).boundaries;\n\n  if (\n    refRect.bottom < bound.top ||\n    refRect.left > bound.right ||\n    refRect.top > bound.bottom ||\n    refRect.right < bound.left\n  ) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n", "import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n  const placement = data.placement;\n  const basePlacement = placement.split('-')[0];\n  const { popper, reference } = data.offsets;\n  const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n  const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n  popper[isHoriz ? 'left' : 'top'] =\n    reference[basePlacement] -\n    (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n\n  return data;\n}\n", "import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: shift,\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unit-less, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the `height`.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: offset,\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0,\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * A scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper. This makes sure the popper always has a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent',\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near each other\n   * without leaving any gap between the two. Especially useful when the arrow is\n   * enabled and you want to ensure that it points to its reference element.\n   * It cares only about the first axis. You can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: keepTogether,\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjunction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: arrow,\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]',\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: flip,\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations)\n     */\n    behavior: 'flip',\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position.\n     * The popper will never be placed outside of the defined boundaries\n     * (except if `keepTogether` is enabled)\n     */\n    boundariesElement: 'viewport',\n    /**\n     * @prop {Boolean} flipVariations=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the reference element overlaps its boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariations: false,\n    /**\n     * @prop {Boolean} flipVariationsByContent=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the popper element overlaps its reference boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariationsByContent: false,\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n    /** @prop {ModifierFn} */\n    fn: inner,\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: hide,\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: true,\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right',\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define your own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: undefined,\n  },\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n", "import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n  /**\n   * Popper's placement.\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Set this to true if you want popper to position it self in 'fixed' mode\n   * @prop {Boolean} positionFixed=false\n   */\n  positionFixed: false,\n\n  /**\n   * Whether events (resize, scroll) are initially enabled.\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: () => {},\n\n  /**\n   * Callback called when the popper is updated. This callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: () => {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js.\n   * @prop {modifiers}\n   */\n  modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n", "// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {Element|referenceObject} reference - The reference element used to position the popper\n   * @param {Element} popper - The HTML / XML element used as the popper\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  constructor(reference, popper, options = {}) {\n    // make update() debounced, so that it only runs at most once-per-tick\n    this.update = debounce(this.update.bind(this));\n\n    // with {} we create a new object with the options inside it\n    this.options = { ...Popper.Defaults, ...options };\n\n    // init state\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: [],\n    };\n\n    // get reference and popper elements (allow jQuery wrappers)\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper;\n\n    // Deep merge modifiers options\n    this.options.modifiers = {};\n    Object.keys({\n      ...Popper.Defaults.modifiers,\n      ...options.modifiers,\n    }).forEach(name => {\n      this.options.modifiers[name] = {\n        // If it's a built-in modifier, use it as base\n        ...(Popper.Defaults.modifiers[name] || {}),\n        // If there are custom options, override and merge with default ones\n        ...(options.modifiers ? options.modifiers[name] : {}),\n      };\n    });\n\n    // Refactoring modifiers' list (Object => Array)\n    this.modifiers = Object.keys(this.options.modifiers)\n      .map(name => ({\n        name,\n        ...this.options.modifiers[name],\n      }))\n      // sort the modifiers by order\n      .sort((a, b) => a.order - b.order);\n\n    // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n    this.modifiers.forEach(modifierOptions => {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(\n          this.reference,\n          this.popper,\n          this.options,\n          modifierOptions,\n          this.state\n        );\n      }\n    });\n\n    // fire the first update to position the popper in the right place\n    this.update();\n\n    const eventsEnabled = this.options.eventsEnabled;\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  }\n\n  // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n  update() {\n    return update.call(this);\n  }\n  destroy() {\n    return destroy.call(this);\n  }\n  enableEventListeners() {\n    return enableEventListeners.call(this);\n  }\n  disableEventListeners() {\n    return disableEventListeners.call(this);\n  }\n\n  /**\n   * Schedules an update. It will run on the next UI update available.\n   * @method scheduleUpdate\n   * @memberof Popper\n   */\n  scheduleUpdate = () => requestAnimationFrame(this.update);\n\n  /**\n   * Collection of utilities useful when writing custom modifiers.\n   * Starting from version 1.7, this method is available only if you\n   * include `popper-utils.js` before `popper.js`.\n   *\n   * **DEPRECATION**: This way to access PopperUtils is deprecated\n   * and will be removed in v2! Use the PopperUtils module directly instead.\n   * Due to the high instability of the methods contained in Utils, we can't\n   * guarantee them to follow semver. Use them at your own risk!\n   * @static\n   * @private\n   * @type {Object}\n   * @deprecated since version 1.8\n   * @member Utils\n   * @memberof Popper\n   */\n  static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n  static placements = placements;\n\n  static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Private TransitionEnd Helpers\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n  if (obj === null || typeof obj === 'undefined') {\n    return `${obj}`\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n  return {\n    bindType: TRANSITION_END,\n    delegateType: TRANSITION_END,\n    handle(event) {\n      if ($(event.target).is(this)) {\n        return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n      }\n\n      return undefined\n    }\n  }\n}\n\nfunction transitionEndEmulator(duration) {\n  let called = false\n\n  $(this).one(Util.TRANSITION_END, () => {\n    called = true\n  })\n\n  setTimeout(() => {\n    if (!called) {\n      Util.triggerTransitionEnd(this)\n    }\n  }, duration)\n\n  return this\n}\n\nfunction setTransitionEndSupport() {\n  $.fn.emulateTransitionEnd = transitionEndEmulator\n  $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * Public Util API\n */\n\nconst Util = {\n  TRANSITION_END: 'bsTransitionEnd',\n\n  getUID(prefix) {\n    do {\n      // eslint-disable-next-line no-bitwise\n      prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n    } while (document.getElementById(prefix))\n\n    return prefix\n  },\n\n  getSelectorFromElement(element) {\n    let selector = element.getAttribute('data-target')\n\n    if (!selector || selector === '#') {\n      const hrefAttr = element.getAttribute('href')\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n    }\n\n    try {\n      return document.querySelector(selector) ? selector : null\n    } catch (_) {\n      return null\n    }\n  },\n\n  getTransitionDurationFromElement(element) {\n    if (!element) {\n      return 0\n    }\n\n    // Get transition-duration of the element\n    let transitionDuration = $(element).css('transition-duration')\n    let transitionDelay = $(element).css('transition-delay')\n\n    const floatTransitionDuration = parseFloat(transitionDuration)\n    const floatTransitionDelay = parseFloat(transitionDelay)\n\n    // Return 0 if element or transition duration is not found\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0\n    }\n\n    // If multiple durations are defined, take the first\n    transitionDuration = transitionDuration.split(',')[0]\n    transitionDelay = transitionDelay.split(',')[0]\n\n    return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n  },\n\n  reflow(element) {\n    return element.offsetHeight\n  },\n\n  triggerTransitionEnd(element) {\n    $(element).trigger(TRANSITION_END)\n  },\n\n  supportsTransitionEnd() {\n    return Boolean(TRANSITION_END)\n  },\n\n  isElement(obj) {\n    return (obj[0] || obj).nodeType\n  },\n\n  typeCheckConfig(componentName, config, configTypes) {\n    for (const property in configTypes) {\n      if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n        const expectedTypes = configTypes[property]\n        const value = config[property]\n        const valueType = value && Util.isElement(value) ?\n          'element' : toType(value)\n\n        if (!new RegExp(expectedTypes).test(valueType)) {\n          throw new Error(\n            `${componentName.toUpperCase()}: ` +\n            `Option \"${property}\" provided type \"${valueType}\" ` +\n            `but expected type \"${expectedTypes}\".`)\n        }\n      }\n    }\n  },\n\n  findShadowRoot(element) {\n    if (!document.documentElement.attachShadow) {\n      return null\n    }\n\n    // Can find the shadow root otherwise it'll return the document\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode()\n      return root instanceof ShadowRoot ? root : null\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element\n    }\n\n    // when we don't find a shadow root\n    if (!element.parentNode) {\n      return null\n    }\n\n    return Util.findShadowRoot(element.parentNode)\n  },\n\n  jQueryDetection() {\n    if (typeof $ === 'undefined') {\n      throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n    }\n\n    const version = $.fn.jquery.split(' ')[0].split('.')\n    const minMajor = 1\n    const ltMajor = 2\n    const minMinor = 9\n    const minPatch = 1\n    const maxMajor = 4\n\n    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n      throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n    }\n  }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\n/**\n * Class definition\n */\n\nclass Alert {\n  constructor(element) {\n    this._element = element\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  // Public\n  close(element) {\n    let rootElement = this._element\n    if (element) {\n      rootElement = this._getRootElement(element)\n    }\n\n    const customEvent = this._triggerCloseEvent(rootElement)\n\n    if (customEvent.isDefaultPrevented()) {\n      return\n    }\n\n    this._removeElement(rootElement)\n  }\n\n  dispose() {\n    $.removeData(this._element, DATA_KEY)\n    this._element = null\n  }\n\n  // Private\n  _getRootElement(element) {\n    const selector = Util.getSelectorFromElement(element)\n    let parent = false\n\n    if (selector) {\n      parent = document.querySelector(selector)\n    }\n\n    if (!parent) {\n      parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n    }\n\n    return parent\n  }\n\n  _triggerCloseEvent(element) {\n    const closeEvent = $.Event(EVENT_CLOSE)\n\n    $(element).trigger(closeEvent)\n    return closeEvent\n  }\n\n  _removeElement(element) {\n    $(element).removeClass(CLASS_NAME_SHOW)\n\n    if (!$(element).hasClass(CLASS_NAME_FADE)) {\n      this._destroyElement(element)\n      return\n    }\n\n    const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n    $(element)\n      .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n      .emulateTransitionEnd(transitionDuration)\n  }\n\n  _destroyElement(element) {\n    $(element)\n      .detach()\n      .trigger(EVENT_CLOSED)\n      .remove()\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      const $element = $(this)\n      let data = $element.data(DATA_KEY)\n\n      if (!data) {\n        data = new Alert(this)\n        $element.data(DATA_KEY, data)\n      }\n\n      if (config === 'close') {\n        data[config](this)\n      }\n    })\n  }\n\n  static _handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault()\n      }\n\n      alertInstance.close(this)\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(\n  EVENT_CLICK_DATA_API,\n  SELECTOR_DISMISS,\n  Alert._handleDismiss(new Alert())\n)\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Alert._jQueryInterface\n}\n\nexport default Alert\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n                          `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\n/**\n * Class definition\n */\n\nclass Button {\n  constructor(element) {\n    this._element = element\n    this.shouldAvoidTriggerChange = false\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  // Public\n  toggle() {\n    let triggerChangeEvent = true\n    let addAriaPressed = true\n    const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n    if (rootElement) {\n      const input = this._element.querySelector(SELECTOR_INPUT)\n\n      if (input) {\n        if (input.type === 'radio') {\n          if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n            triggerChangeEvent = false\n          } else {\n            const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n            if (activeElement) {\n              $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n            }\n          }\n        }\n\n        if (triggerChangeEvent) {\n          // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n          if (input.type === 'checkbox' || input.type === 'radio') {\n            input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n          }\n\n          if (!this.shouldAvoidTriggerChange) {\n            $(input).trigger('change')\n          }\n        }\n\n        input.focus()\n        addAriaPressed = false\n      }\n    }\n\n    if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n      if (addAriaPressed) {\n        this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n      }\n\n      if (triggerChangeEvent) {\n        $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n      }\n    }\n  }\n\n  dispose() {\n    $.removeData(this._element, DATA_KEY)\n    this._element = null\n  }\n\n  // Static\n  static _jQueryInterface(config, avoidTriggerChange) {\n    return this.each(function () {\n      const $element = $(this)\n      let data = $element.data(DATA_KEY)\n\n      if (!data) {\n        data = new Button(this)\n        $element.data(DATA_KEY, data)\n      }\n\n      data.shouldAvoidTriggerChange = avoidTriggerChange\n\n      if (config === 'toggle') {\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n  .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n    let button = event.target\n    const initialButton = button\n\n    if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n      button = $(button).closest(SELECTOR_BUTTON)[0]\n    }\n\n    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n      event.preventDefault() // work around Firefox bug #1540995\n    } else {\n      const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n        event.preventDefault() // work around Firefox bug #1540995\n        return\n      }\n\n      if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n        Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n      }\n    }\n  })\n  .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n    const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n    $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n  })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n  // ensure correct active class is set to match the controls' actual values/states\n\n  // find all checkboxes/readio buttons inside data-toggle groups\n  let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n  for (let i = 0, len = buttons.length; i < len; i++) {\n    const button = buttons[i]\n    const input = button.querySelector(SELECTOR_INPUT)\n    if (input.checked || input.hasAttribute('checked')) {\n      button.classList.add(CLASS_NAME_ACTIVE)\n    } else {\n      button.classList.remove(CLASS_NAME_ACTIVE)\n    }\n  }\n\n  // find all button toggles\n  buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n  for (let i = 0, len = buttons.length; i < len; i++) {\n    const button = buttons[i]\n    if (button.getAttribute('aria-pressed') === 'true') {\n      button.classList.add(CLASS_NAME_ACTIVE)\n    } else {\n      button.classList.remove(CLASS_NAME_ACTIVE)\n    }\n  }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Button._jQueryInterface\n}\n\nexport default Button\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n}\n\nconst DefaultType = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n}\n\nconst PointerType = {\n  TOUCH: 'touch',\n  PEN: 'pen'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel {\n  constructor(element, config) {\n    this._items = null\n    this._interval = null\n    this._activeElement = null\n    this._isPaused = false\n    this._isSliding = false\n    this.touchTimeout = null\n    this.touchStartX = 0\n    this.touchDeltaX = 0\n\n    this._config = this._getConfig(config)\n    this._element = element\n    this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n    this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  // Public\n  next() {\n    if (!this._isSliding) {\n      this._slide(DIRECTION_NEXT)\n    }\n  }\n\n  nextWhenVisible() {\n    const $element = $(this._element)\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden &&\n      ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n      this.next()\n    }\n  }\n\n  prev() {\n    if (!this._isSliding) {\n      this._slide(DIRECTION_PREV)\n    }\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true\n    }\n\n    if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n      Util.triggerTransitionEnd(this._element)\n      this.cycle(true)\n    }\n\n    clearInterval(this._interval)\n    this._interval = null\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval)\n      this._interval = null\n    }\n\n    if (this._config.interval && !this._isPaused) {\n      this._updateInterval()\n\n      this._interval = setInterval(\n        (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n        this._config.interval\n      )\n    }\n  }\n\n  to(index) {\n    this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n    const activeIndex = this._getItemIndex(this._activeElement)\n\n    if (index > this._items.length - 1 || index < 0) {\n      return\n    }\n\n    if (this._isSliding) {\n      $(this._element).one(EVENT_SLID, () => this.to(index))\n      return\n    }\n\n    if (activeIndex === index) {\n      this.pause()\n      this.cycle()\n      return\n    }\n\n    const direction = index > activeIndex ?\n      DIRECTION_NEXT :\n      DIRECTION_PREV\n\n    this._slide(direction, this._items[index])\n  }\n\n  dispose() {\n    $(this._element).off(EVENT_KEY)\n    $.removeData(this._element, DATA_KEY)\n\n    this._items = null\n    this._config = null\n    this._element = null\n    this._interval = null\n    this._isPaused = null\n    this._isSliding = null\n    this._activeElement = null\n    this._indicatorsElement = null\n  }\n\n  // Private\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...config\n    }\n    Util.typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX)\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return\n    }\n\n    const direction = absDeltax / this.touchDeltaX\n\n    this.touchDeltaX = 0\n\n    // swipe left\n    if (direction > 0) {\n      this.prev()\n    }\n\n    // swipe right\n    if (direction < 0) {\n      this.next()\n    }\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n    }\n\n    if (this._config.pause === 'hover') {\n      $(this._element)\n        .on(EVENT_MOUSEENTER, event => this.pause(event))\n        .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n    }\n\n    if (this._config.touch) {\n      this._addTouchEventListeners()\n    }\n  }\n\n  _addTouchEventListeners() {\n    if (!this._touchSupported) {\n      return\n    }\n\n    const start = event => {\n      if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n        this.touchStartX = event.originalEvent.clientX\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.originalEvent.touches[0].clientX\n      }\n    }\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ?\n        0 :\n        event.originalEvent.touches[0].clientX - this.touchStartX\n    }\n\n    const end = event => {\n      if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n        this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n      }\n\n      this._handleSwipe()\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n\n        this.pause()\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout)\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n      }\n    }\n\n    $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n      .on(EVENT_DRAG_START, e => e.preventDefault())\n\n    if (this._pointerEvent) {\n      $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n      $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n    } else {\n      $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n      $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n      $(this._element).on(EVENT_TOUCHEND, event => end(event))\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return\n    }\n\n    switch (event.which) {\n      case ARROW_LEFT_KEYCODE:\n        event.preventDefault()\n        this.prev()\n        break\n      case ARROW_RIGHT_KEYCODE:\n        event.preventDefault()\n        this.next()\n        break\n      default:\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ?\n      [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n      []\n    return this._items.indexOf(element)\n  }\n\n  _getItemByDirection(direction, activeElement) {\n    const isNextDirection = direction === DIRECTION_NEXT\n    const isPrevDirection = direction === DIRECTION_PREV\n    const activeIndex = this._getItemIndex(activeElement)\n    const lastItemIndex = this._items.length - 1\n    const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n                            isNextDirection && activeIndex === lastItemIndex\n\n    if (isGoingToWrap && !this._config.wrap) {\n      return activeElement\n    }\n\n    const delta = direction === DIRECTION_PREV ? -1 : 1\n    const itemIndex = (activeIndex + delta) % this._items.length\n\n    return itemIndex === -1 ?\n      this._items[this._items.length - 1] : this._items[itemIndex]\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget)\n    const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n    const slideEvent = $.Event(EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    })\n\n    $(this._element).trigger(slideEvent)\n\n    return slideEvent\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n      $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n      const nextIndicator = this._indicatorsElement.children[\n        this._getItemIndex(element)\n      ]\n\n      if (nextIndicator) {\n        $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n    if (!element) {\n      return\n    }\n\n    const elementInterval = parseInt(element.getAttribute('data-interval'), 10)\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n      this._config.interval = elementInterval\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval\n    }\n  }\n\n  _slide(direction, element) {\n    const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n    const activeElementIndex = this._getItemIndex(activeElement)\n    const nextElement = element || activeElement &&\n      this._getItemByDirection(direction, activeElement)\n    const nextElementIndex = this._getItemIndex(nextElement)\n    const isCycling = Boolean(this._interval)\n\n    let directionalClassName\n    let orderClassName\n    let eventDirectionName\n\n    if (direction === DIRECTION_NEXT) {\n      directionalClassName = CLASS_NAME_LEFT\n      orderClassName = CLASS_NAME_NEXT\n      eventDirectionName = DIRECTION_LEFT\n    } else {\n      directionalClassName = CLASS_NAME_RIGHT\n      orderClassName = CLASS_NAME_PREV\n      eventDirectionName = DIRECTION_RIGHT\n    }\n\n    if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n      this._isSliding = false\n      return\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n    if (slideEvent.isDefaultPrevented()) {\n      return\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return\n    }\n\n    this._isSliding = true\n\n    if (isCycling) {\n      this.pause()\n    }\n\n    this._setActiveIndicatorElement(nextElement)\n    this._activeElement = nextElement\n\n    const slidEvent = $.Event(EVENT_SLID, {\n      relatedTarget: nextElement,\n      direction: eventDirectionName,\n      from: activeElementIndex,\n      to: nextElementIndex\n    })\n\n    if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n      $(nextElement).addClass(orderClassName)\n\n      Util.reflow(nextElement)\n\n      $(activeElement).addClass(directionalClassName)\n      $(nextElement).addClass(directionalClassName)\n\n      const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n      $(activeElement)\n        .one(Util.TRANSITION_END, () => {\n          $(nextElement)\n            .removeClass(`${directionalClassName} ${orderClassName}`)\n            .addClass(CLASS_NAME_ACTIVE)\n\n          $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n          this._isSliding = false\n\n          setTimeout(() => $(this._element).trigger(slidEvent), 0)\n        })\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n      $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n      this._isSliding = false\n      $(this._element).trigger(slidEvent)\n    }\n\n    if (isCycling) {\n      this.cycle()\n    }\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      let data = $(this).data(DATA_KEY)\n      let _config = {\n        ...Default,\n        ...$(this).data()\n      }\n\n      if (typeof config === 'object') {\n        _config = {\n          ..._config,\n          ...config\n        }\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide\n\n      if (!data) {\n        data = new Carousel(this, _config)\n        $(this).data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'number') {\n        data.to(config)\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`)\n        }\n\n        data[action]()\n      } else if (_config.interval && _config.ride) {\n        data.pause()\n        data.cycle()\n      }\n    })\n  }\n\n  static _dataApiClickHandler(event) {\n    const selector = Util.getSelectorFromElement(this)\n\n    if (!selector) {\n      return\n    }\n\n    const target = $(selector)[0]\n\n    if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n      return\n    }\n\n    const config = {\n      ...$(target).data(),\n      ...$(this).data()\n    }\n    const slideIndex = this.getAttribute('data-slide-to')\n\n    if (slideIndex) {\n      config.interval = false\n    }\n\n    Carousel._jQueryInterface.call($(target), config)\n\n    if (slideIndex) {\n      $(target).data(DATA_KEY).to(slideIndex)\n    }\n\n    event.preventDefault()\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n  const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    const $carousel = $(carousels[i])\n    Carousel._jQueryInterface.call($carousel, $carousel.data())\n  }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Carousel._jQueryInterface\n}\n\nexport default Carousel\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\nconst Default = {\n  toggle: true,\n  parent: ''\n}\n\nconst DefaultType = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse {\n  constructor(element, config) {\n    this._isTransitioning = false\n    this._element = element\n    this._config = this._getConfig(config)\n    this._triggerArray = [].slice.call(document.querySelectorAll(\n      `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n      `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n    ))\n\n    const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i]\n      const selector = Util.getSelectorFromElement(elem)\n      const filterElement = [].slice.call(document.querySelectorAll(selector))\n        .filter(foundElem => foundElem === element)\n\n      if (selector !== null && filterElement.length > 0) {\n        this._selector = selector\n        this._triggerArray.push(elem)\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n    }\n\n    if (this._config.toggle) {\n      this.toggle()\n    }\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  // Public\n  toggle() {\n    if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n      this.hide()\n    } else {\n      this.show()\n    }\n  }\n\n  show() {\n    if (this._isTransitioning ||\n      $(this._element).hasClass(CLASS_NAME_SHOW)) {\n      return\n    }\n\n    let actives\n    let activesData\n\n    if (this._parent) {\n      actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n        .filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === this._config.parent\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE)\n        })\n\n      if (actives.length === 0) {\n        actives = null\n      }\n    }\n\n    if (actives) {\n      activesData = $(actives).not(this._selector).data(DATA_KEY)\n      if (activesData && activesData._isTransitioning) {\n        return\n      }\n    }\n\n    const startEvent = $.Event(EVENT_SHOW)\n    $(this._element).trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) {\n      return\n    }\n\n    if (actives) {\n      Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n      if (!activesData) {\n        $(actives).data(DATA_KEY, null)\n      }\n    }\n\n    const dimension = this._getDimension()\n\n    $(this._element)\n      .removeClass(CLASS_NAME_COLLAPSE)\n      .addClass(CLASS_NAME_COLLAPSING)\n\n    this._element.style[dimension] = 0\n\n    if (this._triggerArray.length) {\n      $(this._triggerArray)\n        .removeClass(CLASS_NAME_COLLAPSED)\n        .attr('aria-expanded', true)\n    }\n\n    this.setTransitioning(true)\n\n    const complete = () => {\n      $(this._element)\n        .removeClass(CLASS_NAME_COLLAPSING)\n        .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n      this._element.style[dimension] = ''\n\n      this.setTransitioning(false)\n\n      $(this._element).trigger(EVENT_SHOWN)\n    }\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n    const scrollSize = `scroll${capitalizedDimension}`\n    const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n    $(this._element)\n      .one(Util.TRANSITION_END, complete)\n      .emulateTransitionEnd(transitionDuration)\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`\n  }\n\n  hide() {\n    if (this._isTransitioning ||\n      !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n      return\n    }\n\n    const startEvent = $.Event(EVENT_HIDE)\n    $(this._element).trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) {\n      return\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n    Util.reflow(this._element)\n\n    $(this._element)\n      .addClass(CLASS_NAME_COLLAPSING)\n      .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n    const triggerArrayLength = this._triggerArray.length\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i]\n        const selector = Util.getSelectorFromElement(trigger)\n\n        if (selector !== null) {\n          const $elem = $([].slice.call(document.querySelectorAll(selector)))\n          if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n            $(trigger).addClass(CLASS_NAME_COLLAPSED)\n              .attr('aria-expanded', false)\n          }\n        }\n      }\n    }\n\n    this.setTransitioning(true)\n\n    const complete = () => {\n      this.setTransitioning(false)\n      $(this._element)\n        .removeClass(CLASS_NAME_COLLAPSING)\n        .addClass(CLASS_NAME_COLLAPSE)\n        .trigger(EVENT_HIDDEN)\n    }\n\n    this._element.style[dimension] = ''\n    const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n    $(this._element)\n      .one(Util.TRANSITION_END, complete)\n      .emulateTransitionEnd(transitionDuration)\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning\n  }\n\n  dispose() {\n    $.removeData(this._element, DATA_KEY)\n\n    this._config = null\n    this._parent = null\n    this._element = null\n    this._triggerArray = null\n    this._isTransitioning = null\n  }\n\n  // Private\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...config\n    }\n    config.toggle = Boolean(config.toggle) // Coerce string values\n    Util.typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _getDimension() {\n    const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n    return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n  }\n\n  _getParent() {\n    let parent\n\n    if (Util.isElement(this._config.parent)) {\n      parent = this._config.parent\n\n      // It's a jQuery object\n      if (typeof this._config.parent.jquery !== 'undefined') {\n        parent = this._config.parent[0]\n      }\n    } else {\n      parent = document.querySelector(this._config.parent)\n    }\n\n    const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n    const children = [].slice.call(parent.querySelectorAll(selector))\n\n    $(children).each((i, element) => {\n      this._addAriaAndCollapsedClass(\n        Collapse._getTargetFromElement(element),\n        [element]\n      )\n    })\n\n    return parent\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n    if (triggerArray.length) {\n      $(triggerArray)\n        .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n        .attr('aria-expanded', isOpen)\n    }\n  }\n\n  // Static\n  static _getTargetFromElement(element) {\n    const selector = Util.getSelectorFromElement(element)\n    return selector ? document.querySelector(selector) : null\n  }\n\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      const $element = $(this)\n      let data = $element.data(DATA_KEY)\n      const _config = {\n        ...Default,\n        ...$element.data(),\n        ...(typeof config === 'object' && config ? config : {})\n      }\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false\n      }\n\n      if (!data) {\n        data = new Collapse(this, _config)\n        $element.data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.currentTarget.tagName === 'A') {\n    event.preventDefault()\n  }\n\n  const $trigger = $(this)\n  const selector = Util.getSelectorFromElement(this)\n  const selectors = [].slice.call(document.querySelectorAll(selector))\n\n  $(selectors).each(function () {\n    const $target = $(this)\n    const data = $target.data(DATA_KEY)\n    const config = data ? 'toggle' : $trigger.data()\n    Collapse._jQueryInterface.call($target, config)\n  })\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Collapse._jQueryInterface\n}\n\nexport default Collapse\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n  offset: 0,\n  flip: true,\n  boundary: 'scrollParent',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null\n}\n\nconst DefaultType = {\n  offset: '(number|string|function)',\n  flip: 'boolean',\n  boundary: '(string|element)',\n  reference: '(string|element)',\n  display: 'string',\n  popperConfig: '(null|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown {\n  constructor(element, config) {\n    this._element = element\n    this._popper = null\n    this._config = this._getConfig(config)\n    this._menu = this._getMenuElement()\n    this._inNavbar = this._detectNavbar()\n\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  // Public\n  toggle() {\n    if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n      return\n    }\n\n    const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n    Dropdown._clearMenus()\n\n    if (isActive) {\n      return\n    }\n\n    this.show(true)\n  }\n\n  show(usePopper = false) {\n    if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n    const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n    const parent = Dropdown._getParentFromElement(this._element)\n\n    $(parent).trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented()) {\n      return\n    }\n\n    // Totally disable Popper for Dropdowns in Navbar\n    if (!this._inNavbar && usePopper) {\n      // Check for Popper dependency\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n      }\n\n      let referenceElement = this._element\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent\n      } else if (Util.isElement(this._config.reference)) {\n        referenceElement = this._config.reference\n\n        // Check if it's jQuery element\n        if (typeof this._config.reference.jquery !== 'undefined') {\n          referenceElement = this._config.reference[0]\n        }\n      }\n\n      // If boundary is not `scrollParent`, then set position to `static`\n      // to allow the menu to \"escape\" the scroll parent's boundaries\n      // https://github.com/twbs/bootstrap/issues/24251\n      if (this._config.boundary !== 'scrollParent') {\n        $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n      }\n\n      this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n    }\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement &&\n        $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n      $(document.body).children().on('mouseover', null, $.noop)\n    }\n\n    this._element.focus()\n    this._element.setAttribute('aria-expanded', true)\n\n    $(this._menu).toggleClass(CLASS_NAME_SHOW)\n    $(parent)\n      .toggleClass(CLASS_NAME_SHOW)\n      .trigger($.Event(EVENT_SHOWN, relatedTarget))\n  }\n\n  hide() {\n    if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n    const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n    const parent = Dropdown._getParentFromElement(this._element)\n\n    $(parent).trigger(hideEvent)\n\n    if (hideEvent.isDefaultPrevented()) {\n      return\n    }\n\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    $(this._menu).toggleClass(CLASS_NAME_SHOW)\n    $(parent)\n      .toggleClass(CLASS_NAME_SHOW)\n      .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n  }\n\n  dispose() {\n    $.removeData(this._element, DATA_KEY)\n    $(this._element).off(EVENT_KEY)\n    this._element = null\n    this._menu = null\n    if (this._popper !== null) {\n      this._popper.destroy()\n      this._popper = null\n    }\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar()\n    if (this._popper !== null) {\n      this._popper.scheduleUpdate()\n    }\n  }\n\n  // Private\n  _addEventListeners() {\n    $(this._element).on(EVENT_CLICK, event => {\n      event.preventDefault()\n      event.stopPropagation()\n      this.toggle()\n    })\n  }\n\n  _getConfig(config) {\n    config = {\n      ...this.constructor.Default,\n      ...$(this._element).data(),\n      ...config\n    }\n\n    Util.typeCheckConfig(\n      NAME,\n      config,\n      this.constructor.DefaultType\n    )\n\n    return config\n  }\n\n  _getMenuElement() {\n    if (!this._menu) {\n      const parent = Dropdown._getParentFromElement(this._element)\n\n      if (parent) {\n        this._menu = parent.querySelector(SELECTOR_MENU)\n      }\n    }\n\n    return this._menu\n  }\n\n  _getPlacement() {\n    const $parentDropdown = $(this._element.parentNode)\n    let placement = PLACEMENT_BOTTOM\n\n    // Handle dropup\n    if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n      placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n        PLACEMENT_TOPEND :\n        PLACEMENT_TOP\n    } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n      placement = PLACEMENT_RIGHT\n    } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n      placement = PLACEMENT_LEFT\n    } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n      placement = PLACEMENT_BOTTOMEND\n    }\n\n    return placement\n  }\n\n  _detectNavbar() {\n    return $(this._element).closest('.navbar').length > 0\n  }\n\n  _getOffset() {\n    const offset = {}\n\n    if (typeof this._config.offset === 'function') {\n      offset.fn = data => {\n        data.offsets = {\n          ...data.offsets,\n          ...this._config.offset(data.offsets, this._element)\n        }\n\n        return data\n      }\n    } else {\n      offset.offset = this._config.offset\n    }\n\n    return offset\n  }\n\n  _getPopperConfig() {\n    const popperConfig = {\n      placement: this._getPlacement(),\n      modifiers: {\n        offset: this._getOffset(),\n        flip: {\n          enabled: this._config.flip\n        },\n        preventOverflow: {\n          boundariesElement: this._config.boundary\n        }\n      }\n    }\n\n    // Disable Popper if we have a static display\n    if (this._config.display === 'static') {\n      popperConfig.modifiers.applyStyle = {\n        enabled: false\n      }\n    }\n\n    return {\n      ...popperConfig,\n      ...this._config.popperConfig\n    }\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      let data = $(this).data(DATA_KEY)\n      const _config = typeof config === 'object' ? config : null\n\n      if (!data) {\n        data = new Dropdown(this, _config)\n        $(this).data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n\n  static _clearMenus(event) {\n    if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n      event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n      return\n    }\n\n    const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const parent = Dropdown._getParentFromElement(toggles[i])\n      const context = $(toggles[i]).data(DATA_KEY)\n      const relatedTarget = {\n        relatedTarget: toggles[i]\n      }\n\n      if (event && event.type === 'click') {\n        relatedTarget.clickEvent = event\n      }\n\n      if (!context) {\n        continue\n      }\n\n      const dropdownMenu = context._menu\n      if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n        continue\n      }\n\n      if (event && (event.type === 'click' &&\n          /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n          $.contains(parent, event.target)) {\n        continue\n      }\n\n      const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n      $(parent).trigger(hideEvent)\n      if (hideEvent.isDefaultPrevented()) {\n        continue\n      }\n\n      // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop)\n      }\n\n      toggles[i].setAttribute('aria-expanded', 'false')\n\n      if (context._popper) {\n        context._popper.destroy()\n      }\n\n      $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n      $(parent)\n        .removeClass(CLASS_NAME_SHOW)\n        .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n    }\n  }\n\n  static _getParentFromElement(element) {\n    let parent\n    const selector = Util.getSelectorFromElement(element)\n\n    if (selector) {\n      parent = document.querySelector(selector)\n    }\n\n    return parent || element.parentNode\n  }\n\n  // eslint-disable-next-line complexity\n  static _dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ?\n      event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n      (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n        $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n      return\n    }\n\n    if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n      return\n    }\n\n    const parent = Dropdown._getParentFromElement(this)\n    const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n    if (!isActive && event.which === ESCAPE_KEYCODE) {\n      return\n    }\n\n    event.preventDefault()\n    event.stopPropagation()\n\n    if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n      if (event.which === ESCAPE_KEYCODE) {\n        $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n      }\n\n      $(this).trigger('click')\n      return\n    }\n\n    const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n      .filter(item => $(item).is(':visible'))\n\n    if (items.length === 0) {\n      return\n    }\n\n    let index = items.indexOf(event.target)\n\n    if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n      index--\n    }\n\n    if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n      index++\n    }\n\n    if (index < 0) {\n      index = 0\n    }\n\n    items[index].focus()\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n  .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n  .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n  .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n  .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    event.preventDefault()\n    event.stopPropagation()\n    Dropdown._jQueryInterface.call($(this), 'toggle')\n  })\n  .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n    e.stopPropagation()\n  })\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  focus: true,\n  show: true\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean',\n  show: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal {\n  constructor(element, config) {\n    this._config = this._getConfig(config)\n    this._element = element\n    this._dialog = element.querySelector(SELECTOR_DIALOG)\n    this._backdrop = null\n    this._isShown = false\n    this._isBodyOverflowing = false\n    this._ignoreBackdropClick = false\n    this._isTransitioning = false\n    this._scrollbarWidth = 0\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const showEvent = $.Event(EVENT_SHOW, {\n      relatedTarget\n    })\n\n    $(this._element).trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented()) {\n      return\n    }\n\n    this._isShown = true\n\n    if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n      this._isTransitioning = true\n    }\n\n    this._checkScrollbar()\n    this._setScrollbar()\n\n    this._adjustDialog()\n\n    this._setEscapeEvent()\n    this._setResizeEvent()\n\n    $(this._element).on(\n      EVENT_CLICK_DISMISS,\n      SELECTOR_DATA_DISMISS,\n      event => this.hide(event)\n    )\n\n    $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n      $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n        if ($(event.target).is(this._element)) {\n          this._ignoreBackdropClick = true\n        }\n      })\n    })\n\n    this._showBackdrop(() => this._showElement(relatedTarget))\n  }\n\n  hide(event) {\n    if (event) {\n      event.preventDefault()\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const hideEvent = $.Event(EVENT_HIDE)\n\n    $(this._element).trigger(hideEvent)\n\n    if (!this._isShown || hideEvent.isDefaultPrevented()) {\n      return\n    }\n\n    this._isShown = false\n    const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n    if (transition) {\n      this._isTransitioning = true\n    }\n\n    this._setEscapeEvent()\n    this._setResizeEvent()\n\n    $(document).off(EVENT_FOCUSIN)\n\n    $(this._element).removeClass(CLASS_NAME_SHOW)\n\n    $(this._element).off(EVENT_CLICK_DISMISS)\n    $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n    if (transition) {\n      const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n      $(this._element)\n        .one(Util.TRANSITION_END, event => this._hideModal(event))\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      this._hideModal()\n    }\n  }\n\n  dispose() {\n    [window, this._element, this._dialog]\n      .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n    $(document).off(EVENT_FOCUSIN)\n\n    $.removeData(this._element, DATA_KEY)\n\n    this._config = null\n    this._element = null\n    this._dialog = null\n    this._backdrop = null\n    this._isShown = null\n    this._isBodyOverflowing = null\n    this._ignoreBackdropClick = null\n    this._isTransitioning = null\n    this._scrollbarWidth = null\n  }\n\n  handleUpdate() {\n    this._adjustDialog()\n  }\n\n  // Private\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...config\n    }\n    Util.typeCheckConfig(NAME, config, DefaultType)\n    return config\n  }\n\n  _triggerBackdropTransition() {\n    const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n    $(this._element).trigger(hideEventPrevented)\n    if (hideEventPrevented.isDefaultPrevented()) {\n      return\n    }\n\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden'\n    }\n\n    this._element.classList.add(CLASS_NAME_STATIC)\n\n    const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n    $(this._element).off(Util.TRANSITION_END)\n\n    $(this._element).one(Util.TRANSITION_END, () => {\n      this._element.classList.remove(CLASS_NAME_STATIC)\n      if (!isModalOverflowing) {\n        $(this._element).one(Util.TRANSITION_END, () => {\n          this._element.style.overflowY = ''\n        })\n          .emulateTransitionEnd(this._element, modalTransitionDuration)\n      }\n    })\n      .emulateTransitionEnd(modalTransitionDuration)\n    this._element.focus()\n  }\n\n  _showElement(relatedTarget) {\n    const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n    const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n    if (!this._element.parentNode ||\n        this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element)\n    }\n\n    this._element.style.display = 'block'\n    this._element.removeAttribute('aria-hidden')\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n\n    if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n      modalBody.scrollTop = 0\n    } else {\n      this._element.scrollTop = 0\n    }\n\n    if (transition) {\n      Util.reflow(this._element)\n    }\n\n    $(this._element).addClass(CLASS_NAME_SHOW)\n\n    if (this._config.focus) {\n      this._enforceFocus()\n    }\n\n    const shownEvent = $.Event(EVENT_SHOWN, {\n      relatedTarget\n    })\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus()\n      }\n\n      this._isTransitioning = false\n      $(this._element).trigger(shownEvent)\n    }\n\n    if (transition) {\n      const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n      $(this._dialog)\n        .one(Util.TRANSITION_END, transitionComplete)\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      transitionComplete()\n    }\n  }\n\n  _enforceFocus() {\n    $(document)\n      .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n      .on(EVENT_FOCUSIN, event => {\n        if (document !== event.target &&\n            this._element !== event.target &&\n            $(this._element).has(event.target).length === 0) {\n          this._element.focus()\n        }\n      })\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n          event.preventDefault()\n          this.hide()\n        } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n          this._triggerBackdropTransition()\n        }\n      })\n    } else if (!this._isShown) {\n      $(this._element).off(EVENT_KEYDOWN_DISMISS)\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n    } else {\n      $(window).off(EVENT_RESIZE)\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none'\n    this._element.setAttribute('aria-hidden', true)\n    this._element.removeAttribute('aria-modal')\n    this._element.removeAttribute('role')\n    this._isTransitioning = false\n    this._showBackdrop(() => {\n      $(document.body).removeClass(CLASS_NAME_OPEN)\n      this._resetAdjustments()\n      this._resetScrollbar()\n      $(this._element).trigger(EVENT_HIDDEN)\n    })\n  }\n\n  _removeBackdrop() {\n    if (this._backdrop) {\n      $(this._backdrop).remove()\n      this._backdrop = null\n    }\n  }\n\n  _showBackdrop(callback) {\n    const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n      CLASS_NAME_FADE : ''\n\n    if (this._isShown && this._config.backdrop) {\n      this._backdrop = document.createElement('div')\n      this._backdrop.className = CLASS_NAME_BACKDROP\n\n      if (animate) {\n        this._backdrop.classList.add(animate)\n      }\n\n      $(this._backdrop).appendTo(document.body)\n\n      $(this._element).on(EVENT_CLICK_DISMISS, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false\n          return\n        }\n\n        if (event.target !== event.currentTarget) {\n          return\n        }\n\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition()\n        } else {\n          this.hide()\n        }\n      })\n\n      if (animate) {\n        Util.reflow(this._backdrop)\n      }\n\n      $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n      if (!callback) {\n        return\n      }\n\n      if (!animate) {\n        callback()\n        return\n      }\n\n      const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n      $(this._backdrop)\n        .one(Util.TRANSITION_END, callback)\n        .emulateTransitionEnd(backdropTransitionDuration)\n    } else if (!this._isShown && this._backdrop) {\n      $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n      const callbackRemove = () => {\n        this._removeBackdrop()\n        if (callback) {\n          callback()\n        }\n      }\n\n      if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n        const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n        $(this._backdrop)\n          .one(Util.TRANSITION_END, callbackRemove)\n          .emulateTransitionEnd(backdropTransitionDuration)\n      } else {\n        callbackRemove()\n      }\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // todo (fat): these should probably be refactored out of modal.js\n  // ----------------------------------------------------------------------\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n    if (!this._isBodyOverflowing && isModalOverflowing) {\n      this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n    }\n\n    if (this._isBodyOverflowing && !isModalOverflowing) {\n      this._element.style.paddingRight = `${this._scrollbarWidth}px`\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = ''\n    this._element.style.paddingRight = ''\n  }\n\n  _checkScrollbar() {\n    const rect = document.body.getBoundingClientRect()\n    this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n    this._scrollbarWidth = this._getScrollbarWidth()\n  }\n\n  _setScrollbar() {\n    if (this._isBodyOverflowing) {\n      // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n      //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n      const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n      const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n      // Adjust fixed content padding\n      $(fixedContent).each((index, element) => {\n        const actualPadding = element.style.paddingRight\n        const calculatedPadding = $(element).css('padding-right')\n        $(element)\n          .data('padding-right', actualPadding)\n          .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n      })\n\n      // Adjust sticky content margin\n      $(stickyContent).each((index, element) => {\n        const actualMargin = element.style.marginRight\n        const calculatedMargin = $(element).css('margin-right')\n        $(element)\n          .data('margin-right', actualMargin)\n          .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n      })\n\n      // Adjust body padding\n      const actualPadding = document.body.style.paddingRight\n      const calculatedPadding = $(document.body).css('padding-right')\n      $(document.body)\n        .data('padding-right', actualPadding)\n        .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n    }\n\n    $(document.body).addClass(CLASS_NAME_OPEN)\n  }\n\n  _resetScrollbar() {\n    // Restore fixed content padding\n    const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n    $(fixedContent).each((index, element) => {\n      const padding = $(element).data('padding-right')\n      $(element).removeData('padding-right')\n      element.style.paddingRight = padding ? padding : ''\n    })\n\n    // Restore sticky content\n    const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n    $(elements).each((index, element) => {\n      const margin = $(element).data('margin-right')\n      if (typeof margin !== 'undefined') {\n        $(element).css('margin-right', margin).removeData('margin-right')\n      }\n    })\n\n    // Restore body padding\n    const padding = $(document.body).data('padding-right')\n    $(document.body).removeData('padding-right')\n    document.body.style.paddingRight = padding ? padding : ''\n  }\n\n  _getScrollbarWidth() { // thx d.walsh\n    const scrollDiv = document.createElement('div')\n    scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n    document.body.appendChild(scrollDiv)\n    const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n    document.body.removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n  // Static\n  static _jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      let data = $(this).data(DATA_KEY)\n      const _config = {\n        ...Default,\n        ...$(this).data(),\n        ...(typeof config === 'object' && config ? config : {})\n      }\n\n      if (!data) {\n        data = new Modal(this, _config)\n        $(this).data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config](relatedTarget)\n      } else if (_config.show) {\n        data.show(relatedTarget)\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  let target\n  const selector = Util.getSelectorFromElement(this)\n\n  if (selector) {\n    target = document.querySelector(selector)\n  }\n\n  const config = $(target).data(DATA_KEY) ?\n    'toggle' : {\n      ...$(target).data(),\n      ...$(this).data()\n    }\n\n  if (this.tagName === 'A' || this.tagName === 'AREA') {\n    event.preventDefault()\n  }\n\n  const $target = $(target).one(EVENT_SHOW, showEvent => {\n    if (showEvent.isDefaultPrevented()) {\n      // Only register focus restorer if modal will actually get shown\n      return\n    }\n\n    $target.one(EVENT_HIDDEN, () => {\n      if ($(this).is(':visible')) {\n        this.focus()\n      }\n    })\n  })\n\n  Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Modal._jQueryInterface\n}\n\nexport default Modal\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n  const attrName = attr.nodeName.toLowerCase()\n\n  if (allowedAttributeList.indexOf(attrName) !== -1) {\n    if (uriAttrs.indexOf(attrName) !== -1) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue))\n    }\n\n    return true\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n  // Check if a regular expression validates the attribute.\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true\n    }\n  }\n\n  return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n  if (unsafeHtml.length === 0) {\n    return unsafeHtml\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml)\n  }\n\n  const domParser = new window.DOMParser()\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n  const whitelistKeys = Object.keys(whiteList)\n  const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i]\n    const elName = el.nodeName.toLowerCase()\n\n    if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n      el.parentNode.removeChild(el)\n\n      continue\n    }\n\n    const attributeList = [].slice.call(el.attributes)\n    // eslint-disable-next-line unicorn/prefer-spread\n    const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, whitelistedAttributes)) {\n        el.removeAttribute(attr.nodeName)\n      }\n    })\n  }\n\n  return createdDocument.body.innerHTML\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultWhitelist, sanitizeHtml } from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: 'right',\n  BOTTOM: 'bottom',\n  LEFT: 'left'\n}\n\nconst Default = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' +\n                    '<div class=\"arrow\"></div>' +\n                    '<div class=\"tooltip-inner\"></div></div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: 0,\n  container: false,\n  fallbackPlacement: 'flip',\n  boundary: 'scrollParent',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  whiteList: DefaultWhitelist,\n  popperConfig: null\n}\n\nconst DefaultType = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(number|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacement: '(string|array)',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  whiteList: 'object',\n  popperConfig: '(null|object)'\n}\n\nconst Event = {\n  HIDE: `hide${EVENT_KEY}`,\n  HIDDEN: `hidden${EVENT_KEY}`,\n  SHOW: `show${EVENT_KEY}`,\n  SHOWN: `shown${EVENT_KEY}`,\n  INSERTED: `inserted${EVENT_KEY}`,\n  CLICK: `click${EVENT_KEY}`,\n  FOCUSIN: `focusin${EVENT_KEY}`,\n  FOCUSOUT: `focusout${EVENT_KEY}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n    }\n\n    // Private\n    this._isEnabled = true\n    this._timeout = 0\n    this._hoverState = ''\n    this._activeTrigger = {}\n    this._popper = null\n\n    // Protected\n    this.element = element\n    this.config = this._getConfig(config)\n    this.tip = null\n\n    this._setListeners()\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  static get DATA_KEY() {\n    return DATA_KEY\n  }\n\n  static get Event() {\n    return Event\n  }\n\n  static get EVENT_KEY() {\n    return EVENT_KEY\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true\n  }\n\n  disable() {\n    this._isEnabled = false\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return\n    }\n\n    if (event) {\n      const dataKey = this.constructor.DATA_KEY\n      let context = $(event.currentTarget).data(dataKey)\n\n      if (!context) {\n        context = new this.constructor(\n          event.currentTarget,\n          this._getDelegateConfig()\n        )\n        $(event.currentTarget).data(dataKey, context)\n      }\n\n      context._activeTrigger.click = !context._activeTrigger.click\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context)\n      } else {\n        context._leave(null, context)\n      }\n    } else {\n      if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n        this._leave(null, this)\n        return\n      }\n\n      this._enter(null, this)\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout)\n\n    $.removeData(this.element, this.constructor.DATA_KEY)\n\n    $(this.element).off(this.constructor.EVENT_KEY)\n    $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n    if (this.tip) {\n      $(this.tip).remove()\n    }\n\n    this._isEnabled = null\n    this._timeout = null\n    this._hoverState = null\n    this._activeTrigger = null\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    this._popper = null\n    this.element = null\n    this.config = null\n    this.tip = null\n  }\n\n  show() {\n    if ($(this.element).css('display') === 'none') {\n      throw new Error('Please use show on visible elements')\n    }\n\n    const showEvent = $.Event(this.constructor.Event.SHOW)\n    if (this.isWithContent() && this._isEnabled) {\n      $(this.element).trigger(showEvent)\n\n      const shadowRoot = Util.findShadowRoot(this.element)\n      const isInTheDom = $.contains(\n        shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n        this.element\n      )\n\n      if (showEvent.isDefaultPrevented() || !isInTheDom) {\n        return\n      }\n\n      const tip = this.getTipElement()\n      const tipId = Util.getUID(this.constructor.NAME)\n\n      tip.setAttribute('id', tipId)\n      this.element.setAttribute('aria-describedby', tipId)\n\n      this.setContent()\n\n      if (this.config.animation) {\n        $(tip).addClass(CLASS_NAME_FADE)\n      }\n\n      const placement = typeof this.config.placement === 'function' ?\n        this.config.placement.call(this, tip, this.element) :\n        this.config.placement\n\n      const attachment = this._getAttachment(placement)\n      this.addAttachmentClass(attachment)\n\n      const container = this._getContainer()\n      $(tip).data(this.constructor.DATA_KEY, this)\n\n      if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n        $(tip).appendTo(container)\n      }\n\n      $(this.element).trigger(this.constructor.Event.INSERTED)\n\n      this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n      $(tip).addClass(CLASS_NAME_SHOW)\n      $(tip).addClass(this.config.customClass)\n\n      // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().on('mouseover', null, $.noop)\n      }\n\n      const complete = () => {\n        if (this.config.animation) {\n          this._fixTransition()\n        }\n\n        const prevHoverState = this._hoverState\n        this._hoverState = null\n\n        $(this.element).trigger(this.constructor.Event.SHOWN)\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this)\n        }\n      }\n\n      if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n        const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n        $(this.tip)\n          .one(Util.TRANSITION_END, complete)\n          .emulateTransitionEnd(transitionDuration)\n      } else {\n        complete()\n      }\n    }\n  }\n\n  hide(callback) {\n    const tip = this.getTipElement()\n    const hideEvent = $.Event(this.constructor.Event.HIDE)\n    const complete = () => {\n      if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n        tip.parentNode.removeChild(tip)\n      }\n\n      this._cleanTipClass()\n      this.element.removeAttribute('aria-describedby')\n      $(this.element).trigger(this.constructor.Event.HIDDEN)\n      if (this._popper !== null) {\n        this._popper.destroy()\n      }\n\n      if (callback) {\n        callback()\n      }\n    }\n\n    $(this.element).trigger(hideEvent)\n\n    if (hideEvent.isDefaultPrevented()) {\n      return\n    }\n\n    $(tip).removeClass(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      $(document.body).children().off('mouseover', null, $.noop)\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false\n    this._activeTrigger[TRIGGER_FOCUS] = false\n    this._activeTrigger[TRIGGER_HOVER] = false\n\n    if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n      const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n      $(tip)\n        .one(Util.TRANSITION_END, complete)\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      complete()\n    }\n\n    this._hoverState = ''\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.scheduleUpdate()\n    }\n  }\n\n  // Protected\n  isWithContent() {\n    return Boolean(this.getTitle())\n  }\n\n  addAttachmentClass(attachment) {\n    $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n  }\n\n  getTipElement() {\n    this.tip = this.tip || $(this.config.template)[0]\n    return this.tip\n  }\n\n  setContent() {\n    const tip = this.getTipElement()\n    this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n    $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n  }\n\n  setElementContent($element, content) {\n    if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n      // Content is a DOM node or a jQuery\n      if (this.config.html) {\n        if (!$(content).parent().is($element)) {\n          $element.empty().append(content)\n        }\n      } else {\n        $element.text($(content).text())\n      }\n\n      return\n    }\n\n    if (this.config.html) {\n      if (this.config.sanitize) {\n        content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n      }\n\n      $element.html(content)\n    } else {\n      $element.text(content)\n    }\n  }\n\n  getTitle() {\n    let title = this.element.getAttribute('data-original-title')\n\n    if (!title) {\n      title = typeof this.config.title === 'function' ?\n        this.config.title.call(this.element) :\n        this.config.title\n    }\n\n    return title\n  }\n\n  // Private\n  _getPopperConfig(attachment) {\n    const defaultBsConfig = {\n      placement: attachment,\n      modifiers: {\n        offset: this._getOffset(),\n        flip: {\n          behavior: this.config.fallbackPlacement\n        },\n        arrow: {\n          element: SELECTOR_ARROW\n        },\n        preventOverflow: {\n          boundariesElement: this.config.boundary\n        }\n      },\n      onCreate: data => {\n        if (data.originalPlacement !== data.placement) {\n          this._handlePopperPlacementChange(data)\n        }\n      },\n      onUpdate: data => this._handlePopperPlacementChange(data)\n    }\n\n    return {\n      ...defaultBsConfig,\n      ...this.config.popperConfig\n    }\n  }\n\n  _getOffset() {\n    const offset = {}\n\n    if (typeof this.config.offset === 'function') {\n      offset.fn = data => {\n        data.offsets = {\n          ...data.offsets,\n          ...this.config.offset(data.offsets, this.element)\n        }\n\n        return data\n      }\n    } else {\n      offset.offset = this.config.offset\n    }\n\n    return offset\n  }\n\n  _getContainer() {\n    if (this.config.container === false) {\n      return document.body\n    }\n\n    if (Util.isElement(this.config.container)) {\n      return $(this.config.container)\n    }\n\n    return $(document).find(this.config.container)\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()]\n  }\n\n  _setListeners() {\n    const triggers = this.config.trigger.split(' ')\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        $(this.element).on(\n          this.constructor.Event.CLICK,\n          this.config.selector,\n          event => this.toggle(event)\n        )\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ?\n          this.constructor.Event.MOUSEENTER :\n          this.constructor.Event.FOCUSIN\n        const eventOut = trigger === TRIGGER_HOVER ?\n          this.constructor.Event.MOUSELEAVE :\n          this.constructor.Event.FOCUSOUT\n\n        $(this.element)\n          .on(eventIn, this.config.selector, event => this._enter(event))\n          .on(eventOut, this.config.selector, event => this._leave(event))\n      }\n    })\n\n    this._hideModalHandler = () => {\n      if (this.element) {\n        this.hide()\n      }\n    }\n\n    $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n    if (this.config.selector) {\n      this.config = {\n        ...this.config,\n        trigger: 'manual',\n        selector: ''\n      }\n    } else {\n      this._fixTitle()\n    }\n  }\n\n  _fixTitle() {\n    const titleType = typeof this.element.getAttribute('data-original-title')\n\n    if (this.element.getAttribute('title') || titleType !== 'string') {\n      this.element.setAttribute(\n        'data-original-title',\n        this.element.getAttribute('title') || ''\n      )\n\n      this.element.setAttribute('title', '')\n    }\n  }\n\n  _enter(event, context) {\n    const dataKey = this.constructor.DATA_KEY\n    context = context || $(event.currentTarget).data(dataKey)\n\n    if (!context) {\n      context = new this.constructor(\n        event.currentTarget,\n        this._getDelegateConfig()\n      )\n      $(event.currentTarget).data(dataKey, context)\n    }\n\n    if (event) {\n      context._activeTrigger[\n        event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n      ] = true\n    }\n\n    if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW\n      return\n    }\n\n    clearTimeout(context._timeout)\n\n    context._hoverState = HOVER_STATE_SHOW\n\n    if (!context.config.delay || !context.config.delay.show) {\n      context.show()\n      return\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show()\n      }\n    }, context.config.delay.show)\n  }\n\n  _leave(event, context) {\n    const dataKey = this.constructor.DATA_KEY\n    context = context || $(event.currentTarget).data(dataKey)\n\n    if (!context) {\n      context = new this.constructor(\n        event.currentTarget,\n        this._getDelegateConfig()\n      )\n      $(event.currentTarget).data(dataKey, context)\n    }\n\n    if (event) {\n      context._activeTrigger[\n        event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n      ] = false\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return\n    }\n\n    clearTimeout(context._timeout)\n\n    context._hoverState = HOVER_STATE_OUT\n\n    if (!context.config.delay || !context.config.delay.hide) {\n      context.hide()\n      return\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide()\n      }\n    }, context.config.delay.hide)\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  _getConfig(config) {\n    const dataAttributes = $(this.element).data()\n\n    Object.keys(dataAttributes)\n      .forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr]\n        }\n      })\n\n    config = {\n      ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    }\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      }\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString()\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString()\n    }\n\n    Util.typeCheckConfig(\n      NAME,\n      config,\n      this.constructor.DefaultType\n    )\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n    }\n\n    return config\n  }\n\n  _getDelegateConfig() {\n    const config = {}\n\n    if (this.config) {\n      for (const key in this.config) {\n        if (this.constructor.Default[key] !== this.config[key]) {\n          config[key] = this.config[key]\n        }\n      }\n    }\n\n    return config\n  }\n\n  _cleanTipClass() {\n    const $tip = $(this.getTipElement())\n    const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n    if (tabClass !== null && tabClass.length) {\n      $tip.removeClass(tabClass.join(''))\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    this.tip = popperData.instance.popper\n    this._cleanTipClass()\n    this.addAttachmentClass(this._getAttachment(popperData.placement))\n  }\n\n  _fixTransition() {\n    const tip = this.getTipElement()\n    const initConfigAnimation = this.config.animation\n\n    if (tip.getAttribute('x-placement') !== null) {\n      return\n    }\n\n    $(tip).removeClass(CLASS_NAME_FADE)\n    this.config.animation = false\n    this.hide()\n    this.show()\n    this.config.animation = initConfigAnimation\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      const $element = $(this)\n      let data = $element.data(DATA_KEY)\n      const _config = typeof config === 'object' && config\n\n      if (!data && /dispose|hide/.test(config)) {\n        return\n      }\n\n      if (!data) {\n        data = new Tooltip(this, _config)\n        $element.data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n  ...Tooltip.Default,\n  placement: 'right',\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' +\n              '<div class=\"arrow\"></div>' +\n              '<h3 class=\"popover-header\"></h3>' +\n              '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n}\n\nconst Event = {\n  HIDE: `hide${EVENT_KEY}`,\n  HIDDEN: `hidden${EVENT_KEY}`,\n  SHOW: `show${EVENT_KEY}`,\n  SHOWN: `shown${EVENT_KEY}`,\n  INSERTED: `inserted${EVENT_KEY}`,\n  CLICK: `click${EVENT_KEY}`,\n  FOCUSIN: `focusin${EVENT_KEY}`,\n  FOCUSOUT: `focusout${EVENT_KEY}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  static get DATA_KEY() {\n    return DATA_KEY\n  }\n\n  static get Event() {\n    return Event\n  }\n\n  static get EVENT_KEY() {\n    return EVENT_KEY\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  // Overrides\n  isWithContent() {\n    return this.getTitle() || this._getContent()\n  }\n\n  addAttachmentClass(attachment) {\n    $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n  }\n\n  getTipElement() {\n    this.tip = this.tip || $(this.config.template)[0]\n    return this.tip\n  }\n\n  setContent() {\n    const $tip = $(this.getTipElement())\n\n    // We use append for html objects to maintain js events\n    this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n    let content = this._getContent()\n    if (typeof content === 'function') {\n      content = content.call(this.element)\n    }\n\n    this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n    $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n  }\n\n  // Private\n  _getContent() {\n    return this.element.getAttribute('data-content') ||\n      this.config.content\n  }\n\n  _cleanTipClass() {\n    const $tip = $(this.getTipElement())\n    const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n    if (tabClass !== null && tabClass.length > 0) {\n      $tip.removeClass(tabClass.join(''))\n    }\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      let data = $(this).data(DATA_KEY)\n      const _config = typeof config === 'object' ? config : null\n\n      if (!data && /dispose|hide/.test(config)) {\n        return\n      }\n\n      if (!data) {\n        data = new Popover(this, _config)\n        $(this).data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Popover._jQueryInterface\n}\n\nexport default Popover\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n}\n\nconst DefaultType = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy {\n  constructor(element, config) {\n    this._element = element\n    this._scrollElement = element.tagName === 'BODY' ? window : element\n    this._config = this._getConfig(config)\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n                          `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n                          `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n    this._offsets = []\n    this._targets = []\n    this._activeTarget = null\n    this._scrollHeight = 0\n\n    $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n    this.refresh()\n    this._process()\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  // Public\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ?\n      METHOD_OFFSET : METHOD_POSITION\n\n    const offsetMethod = this._config.method === 'auto' ?\n      autoMethod : this._config.method\n\n    const offsetBase = offsetMethod === METHOD_POSITION ?\n      this._getScrollTop() : 0\n\n    this._offsets = []\n    this._targets = []\n\n    this._scrollHeight = this._getScrollHeight()\n\n    const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n    targets\n      .map(element => {\n        let target\n        const targetSelector = Util.getSelectorFromElement(element)\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector)\n        }\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect()\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [\n              $(target)[offsetMethod]().top + offsetBase,\n              targetSelector\n            ]\n          }\n        }\n\n        return null\n      })\n      .filter(Boolean)\n      .sort((a, b) => a[0] - b[0])\n      .forEach(item => {\n        this._offsets.push(item[0])\n        this._targets.push(item[1])\n      })\n  }\n\n  dispose() {\n    $.removeData(this._element, DATA_KEY)\n    $(this._scrollElement).off(EVENT_KEY)\n\n    this._element = null\n    this._scrollElement = null\n    this._config = null\n    this._selector = null\n    this._offsets = null\n    this._targets = null\n    this._activeTarget = null\n    this._scrollHeight = null\n  }\n\n  // Private\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...(typeof config === 'object' && config ? config : {})\n    }\n\n    if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n      let id = $(config.target).attr('id')\n      if (!id) {\n        id = Util.getUID(NAME)\n        $(config.target).attr('id', id)\n      }\n\n      config.target = `#${id}`\n    }\n\n    Util.typeCheckConfig(NAME, config, DefaultType)\n\n    return config\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ?\n      this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(\n      document.body.scrollHeight,\n      document.documentElement.scrollHeight\n    )\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ?\n      window.innerHeight : this._scrollElement.getBoundingClientRect().height\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset\n    const scrollHeight = this._getScrollHeight()\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1]\n\n      if (this._activeTarget !== target) {\n        this._activate(target)\n      }\n\n      return\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null\n      this._clear()\n      return\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] &&\n          scrollTop >= this._offsets[i] &&\n          (typeof this._offsets[i + 1] === 'undefined' ||\n              scrollTop < this._offsets[i + 1])\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i])\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target\n\n    this._clear()\n\n    const queries = this._selector\n      .split(',')\n      .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n    const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n    if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n      $link.closest(SELECTOR_DROPDOWN)\n        .find(SELECTOR_DROPDOWN_TOGGLE)\n        .addClass(CLASS_NAME_ACTIVE)\n      $link.addClass(CLASS_NAME_ACTIVE)\n    } else {\n      // Set triggered link as active\n      $link.addClass(CLASS_NAME_ACTIVE)\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      $link.parents(SELECTOR_NAV_LIST_GROUP)\n        .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n        .addClass(CLASS_NAME_ACTIVE)\n      // Handle special case when .nav-link is inside .nav-item\n      $link.parents(SELECTOR_NAV_LIST_GROUP)\n        .prev(SELECTOR_NAV_ITEMS)\n        .children(SELECTOR_NAV_LINKS)\n        .addClass(CLASS_NAME_ACTIVE)\n    }\n\n    $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n      relatedTarget: target\n    })\n  }\n\n  _clear() {\n    [].slice.call(document.querySelectorAll(this._selector))\n      .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n      .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      let data = $(this).data(DATA_KEY)\n      const _config = typeof config === 'object' && config\n\n      if (!data) {\n        data = new ScrollSpy(this, _config)\n        $(this).data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n  const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n  const scrollSpysLength = scrollSpys.length\n\n  for (let i = scrollSpysLength; i--;) {\n    const $spy = $(scrollSpys[i])\n    ScrollSpy._jQueryInterface.call($spy, $spy.data())\n  }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * Class definition\n */\n\nclass Tab {\n  constructor(element) {\n    this._element = element\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  // Public\n  show() {\n    if (this._element.parentNode &&\n        this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n        $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n        $(this._element).hasClass(CLASS_NAME_DISABLED) ||\n        this._element.hasAttribute('disabled')) {\n      return\n    }\n\n    let target\n    let previous\n    const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n    const selector = Util.getSelectorFromElement(this._element)\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n      previous = $.makeArray($(listElement).find(itemSelector))\n      previous = previous[previous.length - 1]\n    }\n\n    const hideEvent = $.Event(EVENT_HIDE, {\n      relatedTarget: this._element\n    })\n\n    const showEvent = $.Event(EVENT_SHOW, {\n      relatedTarget: previous\n    })\n\n    if (previous) {\n      $(previous).trigger(hideEvent)\n    }\n\n    $(this._element).trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() ||\n        hideEvent.isDefaultPrevented()) {\n      return\n    }\n\n    if (selector) {\n      target = document.querySelector(selector)\n    }\n\n    this._activate(\n      this._element,\n      listElement\n    )\n\n    const complete = () => {\n      const hiddenEvent = $.Event(EVENT_HIDDEN, {\n        relatedTarget: this._element\n      })\n\n      const shownEvent = $.Event(EVENT_SHOWN, {\n        relatedTarget: previous\n      })\n\n      $(previous).trigger(hiddenEvent)\n      $(this._element).trigger(shownEvent)\n    }\n\n    if (target) {\n      this._activate(target, target.parentNode, complete)\n    } else {\n      complete()\n    }\n  }\n\n  dispose() {\n    $.removeData(this._element, DATA_KEY)\n    this._element = null\n  }\n\n  // Private\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n      $(container).find(SELECTOR_ACTIVE_UL) :\n      $(container).children(SELECTOR_ACTIVE)\n\n    const active = activeElements[0]\n    const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n    const complete = () => this._transitionComplete(\n      element,\n      active,\n      callback\n    )\n\n    if (active && isTransitioning) {\n      const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n      $(active)\n        .removeClass(CLASS_NAME_SHOW)\n        .one(Util.TRANSITION_END, complete)\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      complete()\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      $(active).removeClass(CLASS_NAME_ACTIVE)\n\n      const dropdownChild = $(active.parentNode).find(\n        SELECTOR_DROPDOWN_ACTIVE_CHILD\n      )[0]\n\n      if (dropdownChild) {\n        $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false)\n      }\n    }\n\n    $(element).addClass(CLASS_NAME_ACTIVE)\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true)\n    }\n\n    Util.reflow(element)\n\n    if (element.classList.contains(CLASS_NAME_FADE)) {\n      element.classList.add(CLASS_NAME_SHOW)\n    }\n\n    let parent = element.parentNode\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode\n    }\n\n    if (parent && $(parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n      if (dropdownElement) {\n        const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n        $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n      }\n\n      element.setAttribute('aria-expanded', true)\n    }\n\n    if (callback) {\n      callback()\n    }\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      const $this = $(this)\n      let data = $this.data(DATA_KEY)\n\n      if (!data) {\n        data = new Tab(this)\n        $this.data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n  .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    event.preventDefault()\n    Tab._jQueryInterface.call($(this), 'show')\n  })\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Tab._jQueryInterface\n}\n\nexport default Tab\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 500\n}\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n}\n\n/**\n * Class definition\n */\n\nclass Toast {\n  constructor(element, config) {\n    this._element = element\n    this._config = this._getConfig(config)\n    this._timeout = null\n    this._setListeners()\n  }\n\n  // Getters\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get Default() {\n    return Default\n  }\n\n  // Public\n  show() {\n    const showEvent = $.Event(EVENT_SHOW)\n\n    $(this._element).trigger(showEvent)\n    if (showEvent.isDefaultPrevented()) {\n      return\n    }\n\n    this._clearTimeout()\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE)\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      this._element.classList.add(CLASS_NAME_SHOW)\n\n      $(this._element).trigger(EVENT_SHOWN)\n\n      if (this._config.autohide) {\n        this._timeout = setTimeout(() => {\n          this.hide()\n        }, this._config.delay)\n      }\n    }\n\n    this._element.classList.remove(CLASS_NAME_HIDE)\n    Util.reflow(this._element)\n    this._element.classList.add(CLASS_NAME_SHOWING)\n    if (this._config.animation) {\n      const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n      $(this._element)\n        .one(Util.TRANSITION_END, complete)\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      complete()\n    }\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return\n    }\n\n    const hideEvent = $.Event(EVENT_HIDE)\n\n    $(this._element).trigger(hideEvent)\n    if (hideEvent.isDefaultPrevented()) {\n      return\n    }\n\n    this._close()\n  }\n\n  dispose() {\n    this._clearTimeout()\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW)\n    }\n\n    $(this._element).off(EVENT_CLICK_DISMISS)\n\n    $.removeData(this._element, DATA_KEY)\n    this._element = null\n    this._config = null\n  }\n\n  // Private\n  _getConfig(config) {\n    config = {\n      ...Default,\n      ...$(this._element).data(),\n      ...(typeof config === 'object' && config ? config : {})\n    }\n\n    Util.typeCheckConfig(\n      NAME,\n      config,\n      this.constructor.DefaultType\n    )\n\n    return config\n  }\n\n  _setListeners() {\n    $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n  }\n\n  _close() {\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE)\n      $(this._element).trigger(EVENT_HIDDEN)\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n    if (this._config.animation) {\n      const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n      $(this._element)\n        .one(Util.TRANSITION_END, complete)\n        .emulateTransitionEnd(transitionDuration)\n    } else {\n      complete()\n    }\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout)\n    this._timeout = null\n  }\n\n  // Static\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      const $element = $(this)\n      let data = $element.data(DATA_KEY)\n      const _config = typeof config === 'object' && config\n\n      if (!data) {\n        data = new Toast(this, _config)\n        $element.data(DATA_KEY, data)\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config](this)\n      }\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n  $.fn[NAME] = JQUERY_NO_CONFLICT\n  return Toast._jQueryInterface\n}\n\nexport default Toast\n", "/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */;\n\n(function() {\n  var context = this;\n\n  (function() {\n    (function() {\n      this.Rails = {\n        linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n        buttonClickSelector: {\n          selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n          exclude: 'form button'\n        },\n        inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n        formSubmitSelector: 'form',\n        formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n        formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n        formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n        fileInputSelector: 'input[name][type=file]:not([disabled])',\n        linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n        buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n      };\n\n    }).call(this);\n  }).call(context);\n\n  var Rails = context.Rails;\n\n  (function() {\n    (function() {\n      var nonce;\n\n      nonce = null;\n\n      Rails.loadCSPNonce = function() {\n        var ref;\n        return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n      };\n\n      Rails.cspNonce = function() {\n        return nonce != null ? nonce : Rails.loadCSPNonce();\n      };\n\n    }).call(this);\n    (function() {\n      var expando, m;\n\n      m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n      Rails.matches = function(element, selector) {\n        if (selector.exclude != null) {\n          return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n        } else {\n          return m.call(element, selector);\n        }\n      };\n\n      expando = '_ujsData';\n\n      Rails.getData = function(element, key) {\n        var ref;\n        return (ref = element[expando]) != null ? ref[key] : void 0;\n      };\n\n      Rails.setData = function(element, key, value) {\n        if (element[expando] == null) {\n          element[expando] = {};\n        }\n        return element[expando][key] = value;\n      };\n\n      Rails.$ = function(selector) {\n        return Array.prototype.slice.call(document.querySelectorAll(selector));\n      };\n\n    }).call(this);\n    (function() {\n      var $, csrfParam, csrfToken;\n\n      $ = Rails.$;\n\n      csrfToken = Rails.csrfToken = function() {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-token]');\n        return meta && meta.content;\n      };\n\n      csrfParam = Rails.csrfParam = function() {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-param]');\n        return meta && meta.content;\n      };\n\n      Rails.CSRFProtection = function(xhr) {\n        var token;\n        token = csrfToken();\n        if (token != null) {\n          return xhr.setRequestHeader('X-CSRF-Token', token);\n        }\n      };\n\n      Rails.refreshCSRFTokens = function() {\n        var param, token;\n        token = csrfToken();\n        param = csrfParam();\n        if ((token != null) && (param != null)) {\n          return $('form input[name=\"' + param + '\"]').forEach(function(input) {\n            return input.value = token;\n          });\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var CustomEvent, fire, matches, preventDefault;\n\n      matches = Rails.matches;\n\n      CustomEvent = window.CustomEvent;\n\n      if (typeof CustomEvent !== 'function') {\n        CustomEvent = function(event, params) {\n          var evt;\n          evt = document.createEvent('CustomEvent');\n          evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n          return evt;\n        };\n        CustomEvent.prototype = window.Event.prototype;\n        preventDefault = CustomEvent.prototype.preventDefault;\n        CustomEvent.prototype.preventDefault = function() {\n          var result;\n          result = preventDefault.call(this);\n          if (this.cancelable && !this.defaultPrevented) {\n            Object.defineProperty(this, 'defaultPrevented', {\n              get: function() {\n                return true;\n              }\n            });\n          }\n          return result;\n        };\n      }\n\n      fire = Rails.fire = function(obj, name, data) {\n        var event;\n        event = new CustomEvent(name, {\n          bubbles: true,\n          cancelable: true,\n          detail: data\n        });\n        obj.dispatchEvent(event);\n        return !event.defaultPrevented;\n      };\n\n      Rails.stopEverything = function(e) {\n        fire(e.target, 'ujs:everythingStopped');\n        e.preventDefault();\n        e.stopPropagation();\n        return e.stopImmediatePropagation();\n      };\n\n      Rails.delegate = function(element, selector, eventType, handler) {\n        return element.addEventListener(eventType, function(e) {\n          var target;\n          target = e.target;\n          while (!(!(target instanceof Element) || matches(target, selector))) {\n            target = target.parentNode;\n          }\n          if (target instanceof Element && handler.call(target, e) === false) {\n            e.preventDefault();\n            return e.stopPropagation();\n          }\n        });\n      };\n\n    }).call(this);\n    (function() {\n      var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n\n      cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n\n      AcceptHeaders = {\n        '*': '*/*',\n        text: 'text/plain',\n        html: 'text/html',\n        xml: 'application/xml, text/xml',\n        json: 'application/json, text/javascript',\n        script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n      };\n\n      Rails.ajax = function(options) {\n        var xhr;\n        options = prepareOptions(options);\n        xhr = createXHR(options, function() {\n          var ref, response;\n          response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n          if (Math.floor(xhr.status / 100) === 2) {\n            if (typeof options.success === \"function\") {\n              options.success(response, xhr.statusText, xhr);\n            }\n          } else {\n            if (typeof options.error === \"function\") {\n              options.error(response, xhr.statusText, xhr);\n            }\n          }\n          return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n        });\n        if ((options.beforeSend != null) && !options.beforeSend(xhr, options)) {\n          return false;\n        }\n        if (xhr.readyState === XMLHttpRequest.OPENED) {\n          return xhr.send(options.data);\n        }\n      };\n\n      prepareOptions = function(options) {\n        options.url = options.url || location.href;\n        options.type = options.type.toUpperCase();\n        if (options.type === 'GET' && options.data) {\n          if (options.url.indexOf('?') < 0) {\n            options.url += '?' + options.data;\n          } else {\n            options.url += '&' + options.data;\n          }\n        }\n        if (AcceptHeaders[options.dataType] == null) {\n          options.dataType = '*';\n        }\n        options.accept = AcceptHeaders[options.dataType];\n        if (options.dataType !== '*') {\n          options.accept += ', */*; q=0.01';\n        }\n        return options;\n      };\n\n      createXHR = function(options, done) {\n        var xhr;\n        xhr = new XMLHttpRequest();\n        xhr.open(options.type, options.url, true);\n        xhr.setRequestHeader('Accept', options.accept);\n        if (typeof options.data === 'string') {\n          xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n        }\n        if (!options.crossDomain) {\n          xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n          CSRFProtection(xhr);\n        }\n        xhr.withCredentials = !!options.withCredentials;\n        xhr.onreadystatechange = function() {\n          if (xhr.readyState === XMLHttpRequest.DONE) {\n            return done(xhr);\n          }\n        };\n        return xhr;\n      };\n\n      processResponse = function(response, type) {\n        var parser, script;\n        if (typeof response === 'string' && typeof type === 'string') {\n          if (type.match(/\\bjson\\b/)) {\n            try {\n              response = JSON.parse(response);\n            } catch (error) {}\n          } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n            script = document.createElement('script');\n            script.setAttribute('nonce', cspNonce());\n            script.text = response;\n            document.head.appendChild(script).parentNode.removeChild(script);\n          } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n            parser = new DOMParser();\n            type = type.replace(/;.+/, '');\n            try {\n              response = parser.parseFromString(response, type);\n            } catch (error) {}\n          }\n        }\n        return response;\n      };\n\n      Rails.href = function(element) {\n        return element.href;\n      };\n\n      Rails.isCrossDomain = function(url) {\n        var e, originAnchor, urlAnchor;\n        originAnchor = document.createElement('a');\n        originAnchor.href = location.href;\n        urlAnchor = document.createElement('a');\n        try {\n          urlAnchor.href = url;\n          return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) || (originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host));\n        } catch (error) {\n          e = error;\n          return true;\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var matches, toArray;\n\n      matches = Rails.matches;\n\n      toArray = function(e) {\n        return Array.prototype.slice.call(e);\n      };\n\n      Rails.serializeElement = function(element, additionalParam) {\n        var inputs, params;\n        inputs = [element];\n        if (matches(element, 'form')) {\n          inputs = toArray(element.elements);\n        }\n        params = [];\n        inputs.forEach(function(input) {\n          if (!input.name || input.disabled) {\n            return;\n          }\n          if (matches(input, 'select')) {\n            return toArray(input.options).forEach(function(option) {\n              if (option.selected) {\n                return params.push({\n                  name: input.name,\n                  value: option.value\n                });\n              }\n            });\n          } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n            return params.push({\n              name: input.name,\n              value: input.value\n            });\n          }\n        });\n        if (additionalParam) {\n          params.push(additionalParam);\n        }\n        return params.map(function(param) {\n          if (param.name != null) {\n            return (encodeURIComponent(param.name)) + \"=\" + (encodeURIComponent(param.value));\n          } else {\n            return param;\n          }\n        }).join('&');\n      };\n\n      Rails.formElements = function(form, selector) {\n        if (matches(form, 'form')) {\n          return toArray(form.elements).filter(function(el) {\n            return matches(el, selector);\n          });\n        } else {\n          return toArray(form.querySelectorAll(selector));\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var allowAction, fire, stopEverything;\n\n      fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n      Rails.handleConfirm = function(e) {\n        if (!allowAction(this)) {\n          return stopEverything(e);\n        }\n      };\n\n      allowAction = function(element) {\n        var answer, callback, message;\n        message = element.getAttribute('data-confirm');\n        if (!message) {\n          return true;\n        }\n        answer = false;\n        if (fire(element, 'confirm')) {\n          try {\n            answer = confirm(message);\n          } catch (error) {}\n          callback = fire(element, 'confirm:complete', [answer]);\n        }\n        return answer && callback;\n      };\n\n    }).call(this);\n    (function() {\n      var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, matches, setData, stopEverything;\n\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n      Rails.handleDisabledElement = function(e) {\n        var element;\n        element = this;\n        if (element.disabled) {\n          return stopEverything(e);\n        }\n      };\n\n      Rails.enableElement = function(e) {\n        var element;\n        element = e instanceof Event ? e.target : e;\n        if (matches(element, Rails.linkDisableSelector)) {\n          return enableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n          return enableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return enableFormElements(element);\n        }\n      };\n\n      Rails.disableElement = function(e) {\n        var element;\n        element = e instanceof Event ? e.target : e;\n        if (matches(element, Rails.linkDisableSelector)) {\n          return disableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n          return disableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return disableFormElements(element);\n        }\n      };\n\n      disableLinkElement = function(element) {\n        var replacement;\n        replacement = element.getAttribute('data-disable-with');\n        if (replacement != null) {\n          setData(element, 'ujs:enable-with', element.innerHTML);\n          element.innerHTML = replacement;\n        }\n        element.addEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableLinkElement = function(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n        if (originalText != null) {\n          element.innerHTML = originalText;\n          setData(element, 'ujs:enable-with', null);\n        }\n        element.removeEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', null);\n      };\n\n      disableFormElements = function(form) {\n        return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n      };\n\n      disableFormElement = function(element) {\n        var replacement;\n        replacement = element.getAttribute('data-disable-with');\n        if (replacement != null) {\n          if (matches(element, 'button')) {\n            setData(element, 'ujs:enable-with', element.innerHTML);\n            element.innerHTML = replacement;\n          } else {\n            setData(element, 'ujs:enable-with', element.value);\n            element.value = replacement;\n          }\n        }\n        element.disabled = true;\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableFormElements = function(form) {\n        return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n      };\n\n      enableFormElement = function(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n        if (originalText != null) {\n          if (matches(element, 'button')) {\n            element.innerHTML = originalText;\n          } else {\n            element.value = originalText;\n          }\n          setData(element, 'ujs:enable-with', null);\n        }\n        element.disabled = false;\n        return setData(element, 'ujs:disabled', null);\n      };\n\n    }).call(this);\n    (function() {\n      var stopEverything;\n\n      stopEverything = Rails.stopEverything;\n\n      Rails.handleMethod = function(e) {\n        var csrfParam, csrfToken, form, formContent, href, link, method;\n        link = this;\n        method = link.getAttribute('data-method');\n        if (!method) {\n          return;\n        }\n        href = Rails.href(link);\n        csrfToken = Rails.csrfToken();\n        csrfParam = Rails.csrfParam();\n        form = document.createElement('form');\n        formContent = \"<input name='_method' value='\" + method + \"' type='hidden' />\";\n        if ((csrfParam != null) && (csrfToken != null) && !Rails.isCrossDomain(href)) {\n          formContent += \"<input name='\" + csrfParam + \"' value='\" + csrfToken + \"' type='hidden' />\";\n        }\n        formContent += '<input type=\"submit\" />';\n        form.method = 'post';\n        form.action = href;\n        form.target = link.target;\n        form.innerHTML = formContent;\n        form.style.display = 'none';\n        document.body.appendChild(form);\n        form.querySelector('[type=\"submit\"]').click();\n        return stopEverything(e);\n      };\n\n    }).call(this);\n    (function() {\n      var ajax, fire, getData, isCrossDomain, isRemote, matches, serializeElement, setData, stopEverything,\n        slice = [].slice;\n\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n      isRemote = function(element) {\n        var value;\n        value = element.getAttribute('data-remote');\n        return (value != null) && value !== 'false';\n      };\n\n      Rails.handleRemote = function(e) {\n        var button, data, dataType, element, method, url, withCredentials;\n        element = this;\n        if (!isRemote(element)) {\n          return true;\n        }\n        if (!fire(element, 'ajax:before')) {\n          fire(element, 'ajax:stopped');\n          return false;\n        }\n        withCredentials = element.getAttribute('data-with-credentials');\n        dataType = element.getAttribute('data-type') || 'script';\n        if (matches(element, Rails.formSubmitSelector)) {\n          button = getData(element, 'ujs:submit-button');\n          method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n          url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n          if (method.toUpperCase() === 'GET') {\n            url = url.replace(/\\?.*$/, '');\n          }\n          if (element.enctype === 'multipart/form-data') {\n            data = new FormData(element);\n            if (button != null) {\n              data.append(button.name, button.value);\n            }\n          } else {\n            data = serializeElement(element, button);\n          }\n          setData(element, 'ujs:submit-button', null);\n          setData(element, 'ujs:submit-button-formmethod', null);\n          setData(element, 'ujs:submit-button-formaction', null);\n        } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n          method = element.getAttribute('data-method');\n          url = element.getAttribute('data-url');\n          data = serializeElement(element, element.getAttribute('data-params'));\n        } else {\n          method = element.getAttribute('data-method');\n          url = Rails.href(element);\n          data = element.getAttribute('data-params');\n        }\n        ajax({\n          type: method || 'GET',\n          url: url,\n          data: data,\n          dataType: dataType,\n          beforeSend: function(xhr, options) {\n            if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n              return fire(element, 'ajax:send', [xhr]);\n            } else {\n              fire(element, 'ajax:stopped');\n              return false;\n            }\n          },\n          success: function() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:success', args);\n          },\n          error: function() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:error', args);\n          },\n          complete: function() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:complete', args);\n          },\n          crossDomain: isCrossDomain(url),\n          withCredentials: (withCredentials != null) && withCredentials !== 'false'\n        });\n        return stopEverything(e);\n      };\n\n      Rails.formSubmitButtonClick = function(e) {\n        var button, form;\n        button = this;\n        form = button.form;\n        if (!form) {\n          return;\n        }\n        if (button.name) {\n          setData(form, 'ujs:submit-button', {\n            name: button.name,\n            value: button.value\n          });\n        }\n        setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n        setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n        return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n      };\n\n      Rails.preventInsignificantClick = function(e) {\n        var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n        link = this;\n        method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n        data = link.getAttribute('data-params');\n        metaClick = e.metaKey || e.ctrlKey;\n        insignificantMetaClick = metaClick && method === 'GET' && !data;\n        nonPrimaryMouseClick = (e.button != null) && e.button !== 0;\n        if (nonPrimaryMouseClick || insignificantMetaClick) {\n          return e.stopImmediatePropagation();\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n\n      fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n      if ((typeof jQuery !== \"undefined\" && jQuery !== null) && (jQuery.ajax != null)) {\n        if (jQuery.rails) {\n          throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n        }\n        jQuery.rails = Rails;\n        jQuery.ajaxPrefilter(function(options, originalOptions, xhr) {\n          if (!options.crossDomain) {\n            return CSRFProtection(xhr);\n          }\n        });\n      }\n\n      Rails.start = function() {\n        if (window._rails_loaded) {\n          throw new Error('rails-ujs has already been loaded!');\n        }\n        window.addEventListener('pageshow', function() {\n          $(Rails.formEnableSelector).forEach(function(el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n          return $(Rails.linkDisableSelector).forEach(function(el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n        });\n        delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.linkClickSelector, 'click', disableElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n        delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n        delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n        delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n        delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n        delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', function(e) {\n          return setTimeout((function() {\n            return disableElement(e);\n          }), 13);\n        });\n        delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n        delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n        document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n        document.addEventListener('DOMContentLoaded', loadCSPNonce);\n        return window._rails_loaded = true;\n      };\n\n      if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n        Rails.start();\n      }\n\n    }).call(this);\n  }).call(this);\n\n  if (typeof module === \"object\" && module.exports) {\n    module.exports = Rails;\n  } else if (typeof define === \"function\" && define.amd) {\n    define(Rails);\n  }\n}).call(this);\n", "// 4.9.11 (2020-07-13)\n(function () {\n(function (domGlobals) {\n    'use strict';\n\n    var noop = function () {\n    };\n    var compose = function (fa, fb) {\n      return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        return fa(fb.apply(null, args));\n      };\n    };\n    var constant = function (value) {\n      return function () {\n        return value;\n      };\n    };\n    var identity = function (x) {\n      return x;\n    };\n    function curry(fn) {\n      var initialArgs = [];\n      for (var _i = 1; _i < arguments.length; _i++) {\n        initialArgs[_i - 1] = arguments[_i];\n      }\n      return function () {\n        var restArgs = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          restArgs[_i] = arguments[_i];\n        }\n        var all = initialArgs.concat(restArgs);\n        return fn.apply(null, all);\n      };\n    }\n    var not = function (f) {\n      return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        return !f.apply(null, args);\n      };\n    };\n    var die = function (msg) {\n      return function () {\n        throw new Error(msg);\n      };\n    };\n    var never = constant(false);\n    var always = constant(true);\n\n    var none = function () {\n      return NONE;\n    };\n    var NONE = function () {\n      var eq = function (o) {\n        return o.isNone();\n      };\n      var call = function (thunk) {\n        return thunk();\n      };\n      var id = function (n) {\n        return n;\n      };\n      var me = {\n        fold: function (n, s) {\n          return n();\n        },\n        is: never,\n        isSome: never,\n        isNone: always,\n        getOr: id,\n        getOrThunk: call,\n        getOrDie: function (msg) {\n          throw new Error(msg || 'error: getOrDie called on none.');\n        },\n        getOrNull: constant(null),\n        getOrUndefined: constant(undefined),\n        or: id,\n        orThunk: call,\n        map: none,\n        each: noop,\n        bind: none,\n        exists: never,\n        forall: always,\n        filter: none,\n        equals: eq,\n        equals_: eq,\n        toArray: function () {\n          return [];\n        },\n        toString: constant('none()')\n      };\n      if (Object.freeze) {\n        Object.freeze(me);\n      }\n      return me;\n    }();\n    var some = function (a) {\n      var constant_a = constant(a);\n      var self = function () {\n        return me;\n      };\n      var bind = function (f) {\n        return f(a);\n      };\n      var me = {\n        fold: function (n, s) {\n          return s(a);\n        },\n        is: function (v) {\n          return a === v;\n        },\n        isSome: always,\n        isNone: never,\n        getOr: constant_a,\n        getOrThunk: constant_a,\n        getOrDie: constant_a,\n        getOrNull: constant_a,\n        getOrUndefined: constant_a,\n        or: self,\n        orThunk: self,\n        map: function (f) {\n          return some(f(a));\n        },\n        each: function (f) {\n          f(a);\n        },\n        bind: bind,\n        exists: bind,\n        forall: bind,\n        filter: function (f) {\n          return f(a) ? me : NONE;\n        },\n        toArray: function () {\n          return [a];\n        },\n        toString: function () {\n          return 'some(' + a + ')';\n        },\n        equals: function (o) {\n          return o.is(a);\n        },\n        equals_: function (o, elementEq) {\n          return o.fold(never, function (b) {\n            return elementEq(a, b);\n          });\n        }\n      };\n      return me;\n    };\n    var from = function (value) {\n      return value === null || value === undefined ? NONE : some(value);\n    };\n    var Option = {\n      some: some,\n      none: none,\n      from: from\n    };\n\n    var typeOf = function (x) {\n      if (x === null) {\n        return 'null';\n      }\n      var t = typeof x;\n      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n        return 'array';\n      }\n      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n        return 'string';\n      }\n      return t;\n    };\n    var isType = function (type) {\n      return function (value) {\n        return typeOf(value) === type;\n      };\n    };\n    var isString = isType('string');\n    var isObject = isType('object');\n    var isArray = isType('array');\n    var isNull = isType('null');\n    var isBoolean = isType('boolean');\n    var isFunction = isType('function');\n    var isNumber = isType('number');\n\n    var nativeSlice = Array.prototype.slice;\n    var nativeIndexOf = Array.prototype.indexOf;\n    var nativePush = Array.prototype.push;\n    var rawIndexOf = function (ts, t) {\n      return nativeIndexOf.call(ts, t);\n    };\n    var indexOf = function (xs, x) {\n      var r = rawIndexOf(xs, x);\n      return r === -1 ? Option.none() : Option.some(r);\n    };\n    var contains = function (xs, x) {\n      return rawIndexOf(xs, x) > -1;\n    };\n    var exists = function (xs, pred) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    var map = function (xs, f) {\n      var len = xs.length;\n      var r = new Array(len);\n      for (var i = 0; i < len; i++) {\n        var x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    var each = function (xs, f) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        f(x, i);\n      }\n    };\n    var eachr = function (xs, f) {\n      for (var i = xs.length - 1; i >= 0; i--) {\n        var x = xs[i];\n        f(x, i);\n      }\n    };\n    var partition = function (xs, pred) {\n      var pass = [];\n      var fail = [];\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        var arr = pred(x, i) ? pass : fail;\n        arr.push(x);\n      }\n      return {\n        pass: pass,\n        fail: fail\n      };\n    };\n    var filter = function (xs, pred) {\n      var r = [];\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    var foldr = function (xs, f, acc) {\n      eachr(xs, function (x) {\n        acc = f(acc, x);\n      });\n      return acc;\n    };\n    var foldl = function (xs, f, acc) {\n      each(xs, function (x) {\n        acc = f(acc, x);\n      });\n      return acc;\n    };\n    var find = function (xs, pred) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          return Option.some(x);\n        }\n      }\n      return Option.none();\n    };\n    var findIndex = function (xs, pred) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          return Option.some(i);\n        }\n      }\n      return Option.none();\n    };\n    var flatten = function (xs) {\n      var r = [];\n      for (var i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    var bind = function (xs, f) {\n      var output = map(xs, f);\n      return flatten(output);\n    };\n    var forall = function (xs, pred) {\n      for (var i = 0, len = xs.length; i < len; ++i) {\n        var x = xs[i];\n        if (pred(x, i) !== true) {\n          return false;\n        }\n      }\n      return true;\n    };\n    var reverse = function (xs) {\n      var r = nativeSlice.call(xs, 0);\n      r.reverse();\n      return r;\n    };\n    var difference = function (a1, a2) {\n      return filter(a1, function (x) {\n        return !contains(a2, x);\n      });\n    };\n    var mapToObject = function (xs, f) {\n      var r = {};\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        r[String(x)] = f(x, i);\n      }\n      return r;\n    };\n    var sort = function (xs, comparator) {\n      var copy = nativeSlice.call(xs, 0);\n      copy.sort(comparator);\n      return copy;\n    };\n    var head = function (xs) {\n      return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n    };\n    var last = function (xs) {\n      return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n    };\n    var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n      return nativeSlice.call(x);\n    };\n\n    var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n    var path = function (parts, scope) {\n      var o = scope !== undefined && scope !== null ? scope : Global;\n      for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n        o = o[parts[i]];\n      }\n      return o;\n    };\n    var resolve = function (p, scope) {\n      var parts = p.split('.');\n      return path(parts, scope);\n    };\n\n    var unsafe = function (name, scope) {\n      return resolve(name, scope);\n    };\n    var getOrDie = function (name, scope) {\n      var actual = unsafe(name, scope);\n      if (actual === undefined || actual === null) {\n        throw new Error(name + ' not available on this browser');\n      }\n      return actual;\n    };\n    var Global$1 = { getOrDie: getOrDie };\n\n    var url = function () {\n      return Global$1.getOrDie('URL');\n    };\n    var createObjectURL = function (blob) {\n      return url().createObjectURL(blob);\n    };\n    var revokeObjectURL = function (u) {\n      url().revokeObjectURL(u);\n    };\n    var URL = {\n      createObjectURL: createObjectURL,\n      revokeObjectURL: revokeObjectURL\n    };\n\n    var nav = domGlobals.navigator, userAgent = nav.userAgent;\n    var opera, webkit, ie, ie11, ie12, gecko, mac, iDevice, android, fileApi, phone, tablet, windowsPhone;\n    var matchMediaQuery = function (query) {\n      return 'matchMedia' in domGlobals.window ? domGlobals.matchMedia(query).matches : false;\n    };\n    opera = false;\n    android = /Android/.test(userAgent);\n    webkit = /WebKit/.test(userAgent);\n    ie = !webkit && !opera && /MSIE/gi.test(userAgent) && /Explorer/gi.test(nav.appName);\n    ie = ie && /MSIE (\\w+)\\./.exec(userAgent)[1];\n    ie11 = userAgent.indexOf('Trident/') !== -1 && (userAgent.indexOf('rv:') !== -1 || nav.appName.indexOf('Netscape') !== -1) ? 11 : false;\n    ie12 = userAgent.indexOf('Edge/') !== -1 && !ie && !ie11 ? 12 : false;\n    ie = ie || ie11 || ie12;\n    gecko = !webkit && !ie11 && /Gecko/.test(userAgent);\n    mac = userAgent.indexOf('Mac') !== -1;\n    iDevice = /(iPad|iPhone)/.test(userAgent);\n    fileApi = 'FormData' in domGlobals.window && 'FileReader' in domGlobals.window && 'URL' in domGlobals.window && !!URL.createObjectURL;\n    phone = matchMediaQuery('only screen and (max-device-width: 480px)') && (android || iDevice);\n    tablet = matchMediaQuery('only screen and (min-width: 800px)') && (android || iDevice);\n    windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n    if (ie12) {\n      webkit = false;\n    }\n    var contentEditable = !iDevice || fileApi || parseInt(userAgent.match(/AppleWebKit\\/(\\d*)/)[1], 10) >= 534;\n    var Env = {\n      opera: opera,\n      webkit: webkit,\n      ie: ie,\n      gecko: gecko,\n      mac: mac,\n      iOS: iDevice,\n      android: android,\n      contentEditable: contentEditable,\n      transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n      caretAfter: ie !== 8,\n      range: domGlobals.window.getSelection && 'Range' in domGlobals.window,\n      documentMode: ie && !ie12 ? domGlobals.document.documentMode || 7 : 10,\n      fileApi: fileApi,\n      ceFalse: ie === false || ie > 8,\n      cacheSuffix: null,\n      container: null,\n      overrideViewPort: null,\n      experimentalShadowDom: false,\n      canHaveCSP: ie === false || ie > 11,\n      desktop: !phone && !tablet,\n      windowsPhone: windowsPhone\n    };\n\n    var promise = function () {\n      function bind(fn, thisArg) {\n        return function () {\n          fn.apply(thisArg, arguments);\n        };\n      }\n      var isArray = Array.isArray || function (value) {\n        return Object.prototype.toString.call(value) === '[object Array]';\n      };\n      var Promise = function (fn) {\n        if (typeof this !== 'object') {\n          throw new TypeError('Promises must be constructed via new');\n        }\n        if (typeof fn !== 'function') {\n          throw new TypeError('not a function');\n        }\n        this._state = null;\n        this._value = null;\n        this._deferreds = [];\n        doResolve(fn, bind(resolve, this), bind(reject, this));\n      };\n      var asap = Promise.immediateFn || typeof setImmediate === 'function' && setImmediate || function (fn) {\n        setTimeout(fn, 1);\n      };\n      function handle(deferred) {\n        var me = this;\n        if (this._state === null) {\n          this._deferreds.push(deferred);\n          return;\n        }\n        asap(function () {\n          var cb = me._state ? deferred.onFulfilled : deferred.onRejected;\n          if (cb === null) {\n            (me._state ? deferred.resolve : deferred.reject)(me._value);\n            return;\n          }\n          var ret;\n          try {\n            ret = cb(me._value);\n          } catch (e) {\n            deferred.reject(e);\n            return;\n          }\n          deferred.resolve(ret);\n        });\n      }\n      function resolve(newValue) {\n        try {\n          if (newValue === this) {\n            throw new TypeError('A promise cannot be resolved with itself.');\n          }\n          if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n            var then = newValue.then;\n            if (typeof then === 'function') {\n              doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));\n              return;\n            }\n          }\n          this._state = true;\n          this._value = newValue;\n          finale.call(this);\n        } catch (e) {\n          reject.call(this, e);\n        }\n      }\n      function reject(newValue) {\n        this._state = false;\n        this._value = newValue;\n        finale.call(this);\n      }\n      function finale() {\n        for (var i = 0, len = this._deferreds.length; i < len; i++) {\n          handle.call(this, this._deferreds[i]);\n        }\n        this._deferreds = null;\n      }\n      function Handler(onFulfilled, onRejected, resolve, reject) {\n        this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n        this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n        this.resolve = resolve;\n        this.reject = reject;\n      }\n      function doResolve(fn, onFulfilled, onRejected) {\n        var done = false;\n        try {\n          fn(function (value) {\n            if (done) {\n              return;\n            }\n            done = true;\n            onFulfilled(value);\n          }, function (reason) {\n            if (done) {\n              return;\n            }\n            done = true;\n            onRejected(reason);\n          });\n        } catch (ex) {\n          if (done) {\n            return;\n          }\n          done = true;\n          onRejected(ex);\n        }\n      }\n      Promise.prototype.catch = function (onRejected) {\n        return this.then(null, onRejected);\n      };\n      Promise.prototype.then = function (onFulfilled, onRejected) {\n        var me = this;\n        return new Promise(function (resolve, reject) {\n          handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));\n        });\n      };\n      Promise.all = function () {\n        var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);\n        return new Promise(function (resolve, reject) {\n          if (args.length === 0) {\n            return resolve([]);\n          }\n          var remaining = args.length;\n          function res(i, val) {\n            try {\n              if (val && (typeof val === 'object' || typeof val === 'function')) {\n                var then = val.then;\n                if (typeof then === 'function') {\n                  then.call(val, function (val) {\n                    res(i, val);\n                  }, reject);\n                  return;\n                }\n              }\n              args[i] = val;\n              if (--remaining === 0) {\n                resolve(args);\n              }\n            } catch (ex) {\n              reject(ex);\n            }\n          }\n          for (var i = 0; i < args.length; i++) {\n            res(i, args[i]);\n          }\n        });\n      };\n      Promise.resolve = function (value) {\n        if (value && typeof value === 'object' && value.constructor === Promise) {\n          return value;\n        }\n        return new Promise(function (resolve) {\n          resolve(value);\n        });\n      };\n      Promise.reject = function (value) {\n        return new Promise(function (resolve, reject) {\n          reject(value);\n        });\n      };\n      Promise.race = function (values) {\n        return new Promise(function (resolve, reject) {\n          for (var i = 0, len = values.length; i < len; i++) {\n            values[i].then(resolve, reject);\n          }\n        });\n      };\n      return Promise;\n    };\n    var promiseObj = window.Promise ? window.Promise : promise();\n\n    var requestAnimationFramePromise;\n    var requestAnimationFrame = function (callback, element) {\n      var i, requestAnimationFrameFunc = domGlobals.window.requestAnimationFrame;\n      var vendors = [\n        'ms',\n        'moz',\n        'webkit'\n      ];\n      var featurefill = function (callback) {\n        domGlobals.window.setTimeout(callback, 0);\n      };\n      for (i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) {\n        requestAnimationFrameFunc = domGlobals.window[vendors[i] + 'RequestAnimationFrame'];\n      }\n      if (!requestAnimationFrameFunc) {\n        requestAnimationFrameFunc = featurefill;\n      }\n      requestAnimationFrameFunc(callback, element);\n    };\n    var wrappedSetTimeout = function (callback, time) {\n      if (typeof time !== 'number') {\n        time = 0;\n      }\n      return setTimeout(callback, time);\n    };\n    var wrappedSetInterval = function (callback, time) {\n      if (typeof time !== 'number') {\n        time = 1;\n      }\n      return setInterval(callback, time);\n    };\n    var wrappedClearTimeout = function (id) {\n      return clearTimeout(id);\n    };\n    var wrappedClearInterval = function (id) {\n      return clearInterval(id);\n    };\n    var debounce = function (callback, time) {\n      var timer, func;\n      func = function () {\n        var args = arguments;\n        clearTimeout(timer);\n        timer = wrappedSetTimeout(function () {\n          callback.apply(this, args);\n        }, time);\n      };\n      func.stop = function () {\n        clearTimeout(timer);\n      };\n      return func;\n    };\n    var Delay = {\n      requestAnimationFrame: function (callback, element) {\n        if (requestAnimationFramePromise) {\n          requestAnimationFramePromise.then(callback);\n          return;\n        }\n        requestAnimationFramePromise = new promiseObj(function (resolve) {\n          if (!element) {\n            element = domGlobals.document.body;\n          }\n          requestAnimationFrame(resolve, element);\n        }).then(callback);\n      },\n      setTimeout: wrappedSetTimeout,\n      setInterval: wrappedSetInterval,\n      setEditorTimeout: function (editor, callback, time) {\n        return wrappedSetTimeout(function () {\n          if (!editor.removed) {\n            callback();\n          }\n        }, time);\n      },\n      setEditorInterval: function (editor, callback, time) {\n        var timer;\n        timer = wrappedSetInterval(function () {\n          if (!editor.removed) {\n            callback();\n          } else {\n            clearInterval(timer);\n          }\n        }, time);\n        return timer;\n      },\n      debounce: debounce,\n      throttle: debounce,\n      clearInterval: wrappedClearInterval,\n      clearTimeout: wrappedClearTimeout\n    };\n\n    var eventExpandoPrefix = 'mce-data-';\n    var mouseEventRe = /^(?:mouse|contextmenu)|click/;\n    var deprecated = {\n      keyLocation: 1,\n      layerX: 1,\n      layerY: 1,\n      returnValue: 1,\n      webkitMovementX: 1,\n      webkitMovementY: 1,\n      keyIdentifier: 1\n    };\n    var hasIsDefaultPrevented = function (event) {\n      return event.isDefaultPrevented === returnTrue || event.isDefaultPrevented === returnFalse;\n    };\n    var returnFalse = function () {\n      return false;\n    };\n    var returnTrue = function () {\n      return true;\n    };\n    var addEvent = function (target, name, callback, capture) {\n      if (target.addEventListener) {\n        target.addEventListener(name, callback, capture || false);\n      } else if (target.attachEvent) {\n        target.attachEvent('on' + name, callback);\n      }\n    };\n    var removeEvent = function (target, name, callback, capture) {\n      if (target.removeEventListener) {\n        target.removeEventListener(name, callback, capture || false);\n      } else if (target.detachEvent) {\n        target.detachEvent('on' + name, callback);\n      }\n    };\n    var getTargetFromShadowDom = function (event, defaultTarget) {\n      if (event.composedPath) {\n        var composedPath = event.composedPath();\n        if (composedPath && composedPath.length > 0) {\n          return composedPath[0];\n        }\n      }\n      return defaultTarget;\n    };\n    var fix = function (originalEvent, data) {\n      var name;\n      var event = data || {};\n      for (name in originalEvent) {\n        if (!deprecated[name]) {\n          event[name] = originalEvent[name];\n        }\n      }\n      if (!event.target) {\n        event.target = event.srcElement || domGlobals.document;\n      }\n      if (Env.experimentalShadowDom) {\n        event.target = getTargetFromShadowDom(originalEvent, event.target);\n      }\n      if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) {\n        var eventDoc = event.target.ownerDocument || domGlobals.document;\n        var doc = eventDoc.documentElement;\n        var body = eventDoc.body;\n        event.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n        event.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n      }\n      event.preventDefault = function () {\n        event.isDefaultPrevented = returnTrue;\n        if (originalEvent) {\n          if (originalEvent.preventDefault) {\n            originalEvent.preventDefault();\n          } else {\n            originalEvent.returnValue = false;\n          }\n        }\n      };\n      event.stopPropagation = function () {\n        event.isPropagationStopped = returnTrue;\n        if (originalEvent) {\n          if (originalEvent.stopPropagation) {\n            originalEvent.stopPropagation();\n          } else {\n            originalEvent.cancelBubble = true;\n          }\n        }\n      };\n      event.stopImmediatePropagation = function () {\n        event.isImmediatePropagationStopped = returnTrue;\n        event.stopPropagation();\n      };\n      if (hasIsDefaultPrevented(event) === false) {\n        event.isDefaultPrevented = returnFalse;\n        event.isPropagationStopped = returnFalse;\n        event.isImmediatePropagationStopped = returnFalse;\n      }\n      if (typeof event.metaKey === 'undefined') {\n        event.metaKey = false;\n      }\n      return event;\n    };\n    var bindOnReady = function (win, callback, eventUtils) {\n      var doc = win.document, event = { type: 'ready' };\n      if (eventUtils.domLoaded) {\n        callback(event);\n        return;\n      }\n      var isDocReady = function () {\n        return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n      };\n      var readyHandler = function () {\n        if (!eventUtils.domLoaded) {\n          eventUtils.domLoaded = true;\n          callback(event);\n        }\n      };\n      var waitForDomLoaded = function () {\n        if (isDocReady()) {\n          removeEvent(doc, 'readystatechange', waitForDomLoaded);\n          readyHandler();\n        }\n      };\n      var tryScroll = function () {\n        try {\n          doc.documentElement.doScroll('left');\n        } catch (ex) {\n          Delay.setTimeout(tryScroll);\n          return;\n        }\n        readyHandler();\n      };\n      if (doc.addEventListener && !(Env.ie && Env.ie < 11)) {\n        if (isDocReady()) {\n          readyHandler();\n        } else {\n          addEvent(win, 'DOMContentLoaded', readyHandler);\n        }\n      } else {\n        addEvent(doc, 'readystatechange', waitForDomLoaded);\n        if (doc.documentElement.doScroll && win.self === win.top) {\n          tryScroll();\n        }\n      }\n      addEvent(win, 'load', readyHandler);\n    };\n    var EventUtils = function () {\n      var self = this;\n      var events = {}, count, expando, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave;\n      expando = eventExpandoPrefix + (+new Date()).toString(32);\n      hasMouseEnterLeave = 'onmouseenter' in domGlobals.document.documentElement;\n      hasFocusIn = 'onfocusin' in domGlobals.document.documentElement;\n      mouseEnterLeave = {\n        mouseenter: 'mouseover',\n        mouseleave: 'mouseout'\n      };\n      count = 1;\n      self.domLoaded = false;\n      self.events = events;\n      var executeHandlers = function (evt, id) {\n        var callbackList, i, l, callback;\n        var container = events[id];\n        callbackList = container && container[evt.type];\n        if (callbackList) {\n          for (i = 0, l = callbackList.length; i < l; i++) {\n            callback = callbackList[i];\n            if (callback && callback.func.call(callback.scope, evt) === false) {\n              evt.preventDefault();\n            }\n            if (evt.isImmediatePropagationStopped()) {\n              return;\n            }\n          }\n        }\n      };\n      self.bind = function (target, names, callback, scope) {\n        var id, callbackList, i, name, fakeName, nativeHandler, capture;\n        var win = domGlobals.window;\n        var defaultNativeHandler = function (evt) {\n          executeHandlers(fix(evt || win.event), id);\n        };\n        if (!target || target.nodeType === 3 || target.nodeType === 8) {\n          return;\n        }\n        if (!target[expando]) {\n          id = count++;\n          target[expando] = id;\n          events[id] = {};\n        } else {\n          id = target[expando];\n        }\n        scope = scope || target;\n        names = names.split(' ');\n        i = names.length;\n        while (i--) {\n          name = names[i];\n          nativeHandler = defaultNativeHandler;\n          fakeName = capture = false;\n          if (name === 'DOMContentLoaded') {\n            name = 'ready';\n          }\n          if (self.domLoaded && name === 'ready' && target.readyState === 'complete') {\n            callback.call(scope, fix({ type: name }));\n            continue;\n          }\n          if (!hasMouseEnterLeave) {\n            fakeName = mouseEnterLeave[name];\n            if (fakeName) {\n              nativeHandler = function (evt) {\n                var current, related;\n                current = evt.currentTarget;\n                related = evt.relatedTarget;\n                if (related && current.contains) {\n                  related = current.contains(related);\n                } else {\n                  while (related && related !== current) {\n                    related = related.parentNode;\n                  }\n                }\n                if (!related) {\n                  evt = fix(evt || win.event);\n                  evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter';\n                  evt.target = current;\n                  executeHandlers(evt, id);\n                }\n              };\n            }\n          }\n          if (!hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n            capture = true;\n            fakeName = name === 'focusin' ? 'focus' : 'blur';\n            nativeHandler = function (evt) {\n              evt = fix(evt || win.event);\n              evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';\n              executeHandlers(evt, id);\n            };\n          }\n          callbackList = events[id][name];\n          if (!callbackList) {\n            events[id][name] = callbackList = [{\n                func: callback,\n                scope: scope\n              }];\n            callbackList.fakeName = fakeName;\n            callbackList.capture = capture;\n            callbackList.nativeHandler = nativeHandler;\n            if (name === 'ready') {\n              bindOnReady(target, nativeHandler, self);\n            } else {\n              addEvent(target, fakeName || name, nativeHandler, capture);\n            }\n          } else {\n            if (name === 'ready' && self.domLoaded) {\n              callback({ type: name });\n            } else {\n              callbackList.push({\n                func: callback,\n                scope: scope\n              });\n            }\n          }\n        }\n        target = callbackList = 0;\n        return callback;\n      };\n      self.unbind = function (target, names, callback) {\n        var id, callbackList, i, ci, name, eventMap;\n        if (!target || target.nodeType === 3 || target.nodeType === 8) {\n          return self;\n        }\n        id = target[expando];\n        if (id) {\n          eventMap = events[id];\n          if (names) {\n            names = names.split(' ');\n            i = names.length;\n            while (i--) {\n              name = names[i];\n              callbackList = eventMap[name];\n              if (callbackList) {\n                if (callback) {\n                  ci = callbackList.length;\n                  while (ci--) {\n                    if (callbackList[ci].func === callback) {\n                      var nativeHandler = callbackList.nativeHandler;\n                      var fakeName = callbackList.fakeName, capture = callbackList.capture;\n                      callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n                      callbackList.nativeHandler = nativeHandler;\n                      callbackList.fakeName = fakeName;\n                      callbackList.capture = capture;\n                      eventMap[name] = callbackList;\n                    }\n                  }\n                }\n                if (!callback || callbackList.length === 0) {\n                  delete eventMap[name];\n                  removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n                }\n              }\n            }\n          } else {\n            for (name in eventMap) {\n              callbackList = eventMap[name];\n              removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n            }\n            eventMap = {};\n          }\n          for (name in eventMap) {\n            return self;\n          }\n          delete events[id];\n          try {\n            delete target[expando];\n          } catch (ex) {\n            target[expando] = null;\n          }\n        }\n        return self;\n      };\n      self.fire = function (target, name, args) {\n        var id;\n        if (!target || target.nodeType === 3 || target.nodeType === 8) {\n          return self;\n        }\n        args = fix(null, args);\n        args.type = name;\n        args.target = target;\n        do {\n          id = target[expando];\n          if (id) {\n            executeHandlers(args, id);\n          }\n          target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n        } while (target && !args.isPropagationStopped());\n        return self;\n      };\n      self.clean = function (target) {\n        var i, children;\n        var unbind = self.unbind;\n        if (!target || target.nodeType === 3 || target.nodeType === 8) {\n          return self;\n        }\n        if (target[expando]) {\n          unbind(target);\n        }\n        if (!target.getElementsByTagName) {\n          target = target.document;\n        }\n        if (target && target.getElementsByTagName) {\n          unbind(target);\n          children = target.getElementsByTagName('*');\n          i = children.length;\n          while (i--) {\n            target = children[i];\n            if (target[expando]) {\n              unbind(target);\n            }\n          }\n        }\n        return self;\n      };\n      self.destroy = function () {\n        events = {};\n      };\n      self.cancel = function (e) {\n        if (e) {\n          e.preventDefault();\n          e.stopImmediatePropagation();\n        }\n        return false;\n      };\n    };\n    EventUtils.Event = new EventUtils();\n    EventUtils.Event.bind(domGlobals.window, 'ready', function () {\n    });\n\n    var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains$1, expando = 'sizzle' + -new Date(), preferredDoc = domGlobals.window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function (a, b) {\n        if (a === b) {\n          hasDuplicate = true;\n        }\n        return 0;\n      }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, indexOf$1 = arr.indexOf || function (elem) {\n        var i = 0, len = this.length;\n        for (; i < len; i++) {\n          if (this[i] === elem) {\n            return i;\n          }\n        }\n        return -1;\n      }, booleans = 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped', whitespace = '[\\\\x20\\\\t\\\\r\\\\n\\\\f]', identifier = '(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+', attributes = '\\\\[' + whitespace + '*(' + identifier + ')(?:' + whitespace + '*([*^$|!~]?=)' + whitespace + '*(?:\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\"|(' + identifier + '))|)' + whitespace + '*\\\\]', pseudos = ':(' + identifier + ')(?:\\\\((' + '(\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\")|' + '((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|' + attributes + ')*)|' + '.*' + ')\\\\)|)', rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)' + whitespace + '+$', 'g'), rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*'), rcombinators = new RegExp('^' + whitespace + '*([>+~]|' + whitespace + ')' + whitespace + '*'), rattributeQuotes = new RegExp('=' + whitespace + '*([^\\\\]\\'\"]*?)' + whitespace + '*\\\\]', 'g'), rpseudo = new RegExp(pseudos), ridentifier = new RegExp('^' + identifier + '$'), matchExpr = {\n        ID: new RegExp('^#(' + identifier + ')'),\n        CLASS: new RegExp('^\\\\.(' + identifier + ')'),\n        TAG: new RegExp('^(' + identifier + '|[*])'),\n        ATTR: new RegExp('^' + attributes),\n        PSEUDO: new RegExp('^' + pseudos),\n        CHILD: new RegExp('^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(' + whitespace + '*(even|odd|(([+-]|)(\\\\d*)n|)' + whitespace + '*(?:([+-]|)' + whitespace + '*(\\\\d+)|))' + whitespace + '*\\\\)|)', 'i'),\n        bool: new RegExp('^(?:' + booleans + ')$', 'i'),\n        needsContext: new RegExp('^' + whitespace + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(' + whitespace + '*((?:-\\\\d)?\\\\d*)' + whitespace + '*\\\\)|)(?=[^-]|$)', 'i')\n      }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\\d$/i, rnative = /^[^{]+\\{\\s*\\[native \\w/, rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\\\/g, runescape = new RegExp('\\\\\\\\([\\\\da-f]{1,6}' + whitespace + '?|(' + whitespace + ')|.)', 'ig'), funescape = function (_, escaped, escapedWhitespace) {\n        var high = '0x' + escaped - 65536;\n        return high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);\n      };\n    try {\n      push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);\n      arr[preferredDoc.childNodes.length].nodeType;\n    } catch (e) {\n      push = {\n        apply: arr.length ? function (target, els) {\n          push_native.apply(target, slice.call(els));\n        } : function (target, els) {\n          var j = target.length, i = 0;\n          while (target[j++] = els[i++]) {\n          }\n          target.length = j - 1;\n        }\n      };\n    }\n    var Sizzle = function (selector, context, results, seed) {\n      var match, elem, m, nodeType, i, groups, old, nid, newContext, newSelector;\n      if ((context ? context.ownerDocument || context : preferredDoc) !== document) {\n        setDocument(context);\n      }\n      context = context || document;\n      results = results || [];\n      if (!selector || typeof selector !== 'string') {\n        return results;\n      }\n      if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) {\n        return [];\n      }\n      if (documentIsHTML && !seed) {\n        if (match = rquickExpr.exec(selector)) {\n          if (m = match[1]) {\n            if (nodeType === 9) {\n              elem = context.getElementById(m);\n              if (elem && elem.parentNode) {\n                if (elem.id === m) {\n                  results.push(elem);\n                  return results;\n                }\n              } else {\n                return results;\n              }\n            } else {\n              if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains$1(context, elem) && elem.id === m) {\n                results.push(elem);\n                return results;\n              }\n            }\n          } else if (match[2]) {\n            push.apply(results, context.getElementsByTagName(selector));\n            return results;\n          } else if ((m = match[3]) && support.getElementsByClassName) {\n            push.apply(results, context.getElementsByClassName(m));\n            return results;\n          }\n        }\n        if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) {\n          nid = old = expando;\n          newContext = context;\n          newSelector = nodeType === 9 && selector;\n          if (nodeType === 1 && context.nodeName.toLowerCase() !== 'object') {\n            groups = tokenize(selector);\n            if (old = context.getAttribute('id')) {\n              nid = old.replace(rescape, '\\\\$&');\n            } else {\n              context.setAttribute('id', nid);\n            }\n            nid = '[id=\\'' + nid + '\\'] ';\n            i = groups.length;\n            while (i--) {\n              groups[i] = nid + toSelector(groups[i]);\n            }\n            newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n            newSelector = groups.join(',');\n          }\n          if (newSelector) {\n            try {\n              push.apply(results, newContext.querySelectorAll(newSelector));\n              return results;\n            } catch (qsaError) {\n            } finally {\n              if (!old) {\n                context.removeAttribute('id');\n              }\n            }\n          }\n        }\n      }\n      return select(selector.replace(rtrim, '$1'), context, results, seed);\n    };\n    function createCache() {\n      var keys = [];\n      function cache(key, value) {\n        if (keys.push(key + ' ') > Expr.cacheLength) {\n          delete cache[keys.shift()];\n        }\n        return cache[key + ' '] = value;\n      }\n      return cache;\n    }\n    function markFunction(fn) {\n      fn[expando] = true;\n      return fn;\n    }\n    function siblingCheck(a, b) {\n      var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE);\n      if (diff) {\n        return diff;\n      }\n      if (cur) {\n        while (cur = cur.nextSibling) {\n          if (cur === b) {\n            return -1;\n          }\n        }\n      }\n      return a ? 1 : -1;\n    }\n    function createInputPseudo(type) {\n      return function (elem) {\n        var name = elem.nodeName.toLowerCase();\n        return name === 'input' && elem.type === type;\n      };\n    }\n    function createButtonPseudo(type) {\n      return function (elem) {\n        var name = elem.nodeName.toLowerCase();\n        return (name === 'input' || name === 'button') && elem.type === type;\n      };\n    }\n    function createPositionalPseudo(fn) {\n      return markFunction(function (argument) {\n        argument = +argument;\n        return markFunction(function (seed, matches) {\n          var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;\n          while (i--) {\n            if (seed[j = matchIndexes[i]]) {\n              seed[j] = !(matches[j] = seed[j]);\n            }\n          }\n        });\n      });\n    }\n    function testContext(context) {\n      return context && typeof context.getElementsByTagName !== strundefined && context;\n    }\n    support = Sizzle.support = {};\n    isXML = Sizzle.isXML = function (elem) {\n      var documentElement = elem && (elem.ownerDocument || elem).documentElement;\n      return documentElement ? documentElement.nodeName !== 'HTML' : false;\n    };\n    setDocument = Sizzle.setDocument = function (node) {\n      var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView;\n      function getTop(win) {\n        try {\n          return win.top;\n        } catch (ex) {\n        }\n        return null;\n      }\n      if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {\n        return document;\n      }\n      document = doc;\n      docElem = doc.documentElement;\n      documentIsHTML = !isXML(doc);\n      if (parent && parent !== getTop(parent)) {\n        if (parent.addEventListener) {\n          parent.addEventListener('unload', function () {\n            setDocument();\n          }, false);\n        } else if (parent.attachEvent) {\n          parent.attachEvent('onunload', function () {\n            setDocument();\n          });\n        }\n      }\n      support.attributes = true;\n      support.getElementsByTagName = true;\n      support.getElementsByClassName = rnative.test(doc.getElementsByClassName);\n      support.getById = true;\n      Expr.find.ID = function (id, context) {\n        if (typeof context.getElementById !== strundefined && documentIsHTML) {\n          var m = context.getElementById(id);\n          return m && m.parentNode ? [m] : [];\n        }\n      };\n      Expr.filter.ID = function (id) {\n        var attrId = id.replace(runescape, funescape);\n        return function (elem) {\n          return elem.getAttribute('id') === attrId;\n        };\n      };\n      Expr.find.TAG = support.getElementsByTagName ? function (tag, context) {\n        if (typeof context.getElementsByTagName !== strundefined) {\n          return context.getElementsByTagName(tag);\n        }\n      } : function (tag, context) {\n        var elem, tmp = [], i = 0, results = context.getElementsByTagName(tag);\n        if (tag === '*') {\n          while (elem = results[i++]) {\n            if (elem.nodeType === 1) {\n              tmp.push(elem);\n            }\n          }\n          return tmp;\n        }\n        return results;\n      };\n      Expr.find.CLASS = support.getElementsByClassName && function (className, context) {\n        if (documentIsHTML) {\n          return context.getElementsByClassName(className);\n        }\n      };\n      rbuggyMatches = [];\n      rbuggyQSA = [];\n      support.disconnectedMatch = true;\n      rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join('|'));\n      rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join('|'));\n      hasCompare = rnative.test(docElem.compareDocumentPosition);\n      contains$1 = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n        var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode;\n        return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n      } : function (a, b) {\n        if (b) {\n          while (b = b.parentNode) {\n            if (b === a) {\n              return true;\n            }\n          }\n        }\n        return false;\n      };\n      sortOrder = hasCompare ? function (a, b) {\n        if (a === b) {\n          hasDuplicate = true;\n          return 0;\n        }\n        var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n        if (compare) {\n          return compare;\n        }\n        compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1;\n        if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n          if (a === doc || a.ownerDocument === preferredDoc && contains$1(preferredDoc, a)) {\n            return -1;\n          }\n          if (b === doc || b.ownerDocument === preferredDoc && contains$1(preferredDoc, b)) {\n            return 1;\n          }\n          return sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.call(sortInput, b) : 0;\n        }\n        return compare & 4 ? -1 : 1;\n      } : function (a, b) {\n        if (a === b) {\n          hasDuplicate = true;\n          return 0;\n        }\n        var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [a], bp = [b];\n        if (!aup || !bup) {\n          return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.call(sortInput, b) : 0;\n        } else if (aup === bup) {\n          return siblingCheck(a, b);\n        }\n        cur = a;\n        while (cur = cur.parentNode) {\n          ap.unshift(cur);\n        }\n        cur = b;\n        while (cur = cur.parentNode) {\n          bp.unshift(cur);\n        }\n        while (ap[i] === bp[i]) {\n          i++;\n        }\n        return i ? siblingCheck(ap[i], bp[i]) : ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\n      };\n      return doc;\n    };\n    Sizzle.matches = function (expr, elements) {\n      return Sizzle(expr, null, null, elements);\n    };\n    Sizzle.matchesSelector = function (elem, expr) {\n      if ((elem.ownerDocument || elem) !== document) {\n        setDocument(elem);\n      }\n      expr = expr.replace(rattributeQuotes, '=\\'$1\\']');\n      if (support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n        try {\n          var ret = matches.call(elem, expr);\n          if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) {\n            return ret;\n          }\n        } catch (e) {\n        }\n      }\n      return Sizzle(expr, document, null, [elem]).length > 0;\n    };\n    Sizzle.contains = function (context, elem) {\n      if ((context.ownerDocument || context) !== document) {\n        setDocument(context);\n      }\n      return contains$1(context, elem);\n    };\n    Sizzle.attr = function (elem, name) {\n      if ((elem.ownerDocument || elem) !== document) {\n        setDocument(elem);\n      }\n      var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n      return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n    };\n    Sizzle.error = function (msg) {\n      throw new Error('Syntax error, unrecognized expression: ' + msg);\n    };\n    Sizzle.uniqueSort = function (results) {\n      var elem, duplicates = [], j = 0, i = 0;\n      hasDuplicate = !support.detectDuplicates;\n      sortInput = !support.sortStable && results.slice(0);\n      results.sort(sortOrder);\n      if (hasDuplicate) {\n        while (elem = results[i++]) {\n          if (elem === results[i]) {\n            j = duplicates.push(i);\n          }\n        }\n        while (j--) {\n          results.splice(duplicates[j], 1);\n        }\n      }\n      sortInput = null;\n      return results;\n    };\n    getText = Sizzle.getText = function (elem) {\n      var node, ret = '', i = 0, nodeType = elem.nodeType;\n      if (!nodeType) {\n        while (node = elem[i++]) {\n          ret += getText(node);\n        }\n      } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n        if (typeof elem.textContent === 'string') {\n          return elem.textContent;\n        } else {\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n            ret += getText(elem);\n          }\n        }\n      } else if (nodeType === 3 || nodeType === 4) {\n        return elem.nodeValue;\n      }\n      return ret;\n    };\n    Expr = Sizzle.selectors = {\n      cacheLength: 50,\n      createPseudo: markFunction,\n      match: matchExpr,\n      attrHandle: {},\n      find: {},\n      relative: {\n        '>': {\n          dir: 'parentNode',\n          first: true\n        },\n        ' ': { dir: 'parentNode' },\n        '+': {\n          dir: 'previousSibling',\n          first: true\n        },\n        '~': { dir: 'previousSibling' }\n      },\n      preFilter: {\n        ATTR: function (match) {\n          match[1] = match[1].replace(runescape, funescape);\n          match[3] = (match[3] || match[4] || match[5] || '').replace(runescape, funescape);\n          if (match[2] === '~=') {\n            match[3] = ' ' + match[3] + ' ';\n          }\n          return match.slice(0, 4);\n        },\n        CHILD: function (match) {\n          match[1] = match[1].toLowerCase();\n          if (match[1].slice(0, 3) === 'nth') {\n            if (!match[3]) {\n              Sizzle.error(match[0]);\n            }\n            match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === 'even' || match[3] === 'odd'));\n            match[5] = +(match[7] + match[8] || match[3] === 'odd');\n          } else if (match[3]) {\n            Sizzle.error(match[0]);\n          }\n          return match;\n        },\n        PSEUDO: function (match) {\n          var excess, unquoted = !match[6] && match[2];\n          if (matchExpr.CHILD.test(match[0])) {\n            return null;\n          }\n          if (match[3]) {\n            match[2] = match[4] || match[5] || '';\n          } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) {\n            match[0] = match[0].slice(0, excess);\n            match[2] = unquoted.slice(0, excess);\n          }\n          return match.slice(0, 3);\n        }\n      },\n      filter: {\n        TAG: function (nodeNameSelector) {\n          var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n          return nodeNameSelector === '*' ? function () {\n            return true;\n          } : function (elem) {\n            return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n          };\n        },\n        CLASS: function (className) {\n          var pattern = classCache[className + ' '];\n          return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) {\n            return pattern.test(typeof elem.className === 'string' && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute('class') || '');\n          });\n        },\n        ATTR: function (name, operator, check) {\n          return function (elem) {\n            var result = Sizzle.attr(elem, name);\n            if (result == null) {\n              return operator === '!=';\n            }\n            if (!operator) {\n              return true;\n            }\n            result += '';\n            return operator === '=' ? result === check : operator === '!=' ? result !== check : operator === '^=' ? check && result.indexOf(check) === 0 : operator === '*=' ? check && result.indexOf(check) > -1 : operator === '$=' ? check && result.slice(-check.length) === check : operator === '~=' ? (' ' + result + ' ').indexOf(check) > -1 : operator === '|=' ? result === check || result.slice(0, check.length + 1) === check + '-' : false;\n          };\n        },\n        CHILD: function (type, what, argument, first, last) {\n          var simple = type.slice(0, 3) !== 'nth', forward = type.slice(-4) !== 'last', ofType = what === 'of-type';\n          return first === 1 && last === 0 ? function (elem) {\n            return !!elem.parentNode;\n          } : function (elem, context, xml) {\n            var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? 'nextSibling' : 'previousSibling', parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;\n            if (parent) {\n              if (simple) {\n                while (dir) {\n                  node = elem;\n                  while (node = node[dir]) {\n                    if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n                      return false;\n                    }\n                  }\n                  start = dir = type === 'only' && !start && 'nextSibling';\n                }\n                return true;\n              }\n              start = [forward ? parent.firstChild : parent.lastChild];\n              if (forward && useCache) {\n                outerCache = parent[expando] || (parent[expando] = {});\n                cache = outerCache[type] || [];\n                nodeIndex = cache[0] === dirruns && cache[1];\n                diff = cache[0] === dirruns && cache[2];\n                node = nodeIndex && parent.childNodes[nodeIndex];\n                while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n                  if (node.nodeType === 1 && ++diff && node === elem) {\n                    outerCache[type] = [\n                      dirruns,\n                      nodeIndex,\n                      diff\n                    ];\n                    break;\n                  }\n                }\n              } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) {\n                diff = cache[1];\n              } else {\n                while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n                  if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n                    if (useCache) {\n                      (node[expando] || (node[expando] = {}))[type] = [\n                        dirruns,\n                        diff\n                      ];\n                    }\n                    if (node === elem) {\n                      break;\n                    }\n                  }\n                }\n              }\n              diff -= last;\n              return diff === first || diff % first === 0 && diff / first >= 0;\n            }\n          };\n        },\n        PSEUDO: function (pseudo, argument) {\n          var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo);\n          if (fn[expando]) {\n            return fn(argument);\n          }\n          if (fn.length > 1) {\n            args = [\n              pseudo,\n              pseudo,\n              '',\n              argument\n            ];\n            return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n              var idx, matched = fn(seed, argument), i = matched.length;\n              while (i--) {\n                idx = indexOf$1.call(seed, matched[i]);\n                seed[idx] = !(matches[idx] = matched[i]);\n              }\n            }) : function (elem) {\n              return fn(elem, 0, args);\n            };\n          }\n          return fn;\n        }\n      },\n      pseudos: {\n        not: markFunction(function (selector) {\n          var input = [], results = [], matcher = compile(selector.replace(rtrim, '$1'));\n          return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\n            var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;\n            while (i--) {\n              if (elem = unmatched[i]) {\n                seed[i] = !(matches[i] = elem);\n              }\n            }\n          }) : function (elem, context, xml) {\n            input[0] = elem;\n            matcher(input, null, xml, results);\n            return !results.pop();\n          };\n        }),\n        has: markFunction(function (selector) {\n          return function (elem) {\n            return Sizzle(selector, elem).length > 0;\n          };\n        }),\n        contains: markFunction(function (text) {\n          text = text.replace(runescape, funescape);\n          return function (elem) {\n            return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;\n          };\n        }),\n        lang: markFunction(function (lang) {\n          if (!ridentifier.test(lang || '')) {\n            Sizzle.error('unsupported lang: ' + lang);\n          }\n          lang = lang.replace(runescape, funescape).toLowerCase();\n          return function (elem) {\n            var elemLang;\n            do {\n              if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute('xml:lang') || elem.getAttribute('lang')) {\n                elemLang = elemLang.toLowerCase();\n                return elemLang === lang || elemLang.indexOf(lang + '-') === 0;\n              }\n            } while ((elem = elem.parentNode) && elem.nodeType === 1);\n            return false;\n          };\n        }),\n        target: function (elem) {\n          var hash = domGlobals.window.location && domGlobals.window.location.hash;\n          return hash && hash.slice(1) === elem.id;\n        },\n        root: function (elem) {\n          return elem === docElem;\n        },\n        focus: function (elem) {\n          return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n        },\n        enabled: function (elem) {\n          return elem.disabled === false;\n        },\n        disabled: function (elem) {\n          return elem.disabled === true;\n        },\n        checked: function (elem) {\n          var nodeName = elem.nodeName.toLowerCase();\n          return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected;\n        },\n        selected: function (elem) {\n          if (elem.parentNode) {\n            elem.parentNode.selectedIndex;\n          }\n          return elem.selected === true;\n        },\n        empty: function (elem) {\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n            if (elem.nodeType < 6) {\n              return false;\n            }\n          }\n          return true;\n        },\n        parent: function (elem) {\n          return !Expr.pseudos.empty(elem);\n        },\n        header: function (elem) {\n          return rheader.test(elem.nodeName);\n        },\n        input: function (elem) {\n          return rinputs.test(elem.nodeName);\n        },\n        button: function (elem) {\n          var name = elem.nodeName.toLowerCase();\n          return name === 'input' && elem.type === 'button' || name === 'button';\n        },\n        text: function (elem) {\n          var attr;\n          return elem.nodeName.toLowerCase() === 'input' && elem.type === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === 'text');\n        },\n        first: createPositionalPseudo(function () {\n          return [0];\n        }),\n        last: createPositionalPseudo(function (matchIndexes, length) {\n          return [length - 1];\n        }),\n        eq: createPositionalPseudo(function (matchIndexes, length, argument) {\n          return [argument < 0 ? argument + length : argument];\n        }),\n        even: createPositionalPseudo(function (matchIndexes, length) {\n          var i = 0;\n          for (; i < length; i += 2) {\n            matchIndexes.push(i);\n          }\n          return matchIndexes;\n        }),\n        odd: createPositionalPseudo(function (matchIndexes, length) {\n          var i = 1;\n          for (; i < length; i += 2) {\n            matchIndexes.push(i);\n          }\n          return matchIndexes;\n        }),\n        lt: createPositionalPseudo(function (matchIndexes, length, argument) {\n          var i = argument < 0 ? argument + length : argument;\n          for (; --i >= 0;) {\n            matchIndexes.push(i);\n          }\n          return matchIndexes;\n        }),\n        gt: createPositionalPseudo(function (matchIndexes, length, argument) {\n          var i = argument < 0 ? argument + length : argument;\n          for (; ++i < length;) {\n            matchIndexes.push(i);\n          }\n          return matchIndexes;\n        })\n      }\n    };\n    Expr.pseudos.nth = Expr.pseudos.eq;\n    for (i in {\n        radio: true,\n        checkbox: true,\n        file: true,\n        password: true,\n        image: true\n      }) {\n      Expr.pseudos[i] = createInputPseudo(i);\n    }\n    for (i in {\n        submit: true,\n        reset: true\n      }) {\n      Expr.pseudos[i] = createButtonPseudo(i);\n    }\n    function setFilters() {\n    }\n    setFilters.prototype = Expr.filters = Expr.pseudos;\n    Expr.setFilters = new setFilters();\n    tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n      var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + ' '];\n      if (cached) {\n        return parseOnly ? 0 : cached.slice(0);\n      }\n      soFar = selector;\n      groups = [];\n      preFilters = Expr.preFilter;\n      while (soFar) {\n        if (!matched || (match = rcomma.exec(soFar))) {\n          if (match) {\n            soFar = soFar.slice(match[0].length) || soFar;\n          }\n          groups.push(tokens = []);\n        }\n        matched = false;\n        if (match = rcombinators.exec(soFar)) {\n          matched = match.shift();\n          tokens.push({\n            value: matched,\n            type: match[0].replace(rtrim, ' ')\n          });\n          soFar = soFar.slice(matched.length);\n        }\n        for (type in Expr.filter) {\n          if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n            matched = match.shift();\n            tokens.push({\n              value: matched,\n              type: type,\n              matches: match\n            });\n            soFar = soFar.slice(matched.length);\n          }\n        }\n        if (!matched) {\n          break;\n        }\n      }\n      return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);\n    };\n    function toSelector(tokens) {\n      var i = 0, len = tokens.length, selector = '';\n      for (; i < len; i++) {\n        selector += tokens[i].value;\n      }\n      return selector;\n    }\n    function addCombinator(matcher, combinator, base) {\n      var dir = combinator.dir, checkNonElements = base && dir === 'parentNode', doneName = done++;\n      return combinator.first ? function (elem, context, xml) {\n        while (elem = elem[dir]) {\n          if (elem.nodeType === 1 || checkNonElements) {\n            return matcher(elem, context, xml);\n          }\n        }\n      } : function (elem, context, xml) {\n        var oldCache, outerCache, newCache = [\n            dirruns,\n            doneName\n          ];\n        if (xml) {\n          while (elem = elem[dir]) {\n            if (elem.nodeType === 1 || checkNonElements) {\n              if (matcher(elem, context, xml)) {\n                return true;\n              }\n            }\n          }\n        } else {\n          while (elem = elem[dir]) {\n            if (elem.nodeType === 1 || checkNonElements) {\n              outerCache = elem[expando] || (elem[expando] = {});\n              if ((oldCache = outerCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n                return newCache[2] = oldCache[2];\n              } else {\n                outerCache[dir] = newCache;\n                if (newCache[2] = matcher(elem, context, xml)) {\n                  return true;\n                }\n              }\n            }\n          }\n        }\n      };\n    }\n    function elementMatcher(matchers) {\n      return matchers.length > 1 ? function (elem, context, xml) {\n        var i = matchers.length;\n        while (i--) {\n          if (!matchers[i](elem, context, xml)) {\n            return false;\n          }\n        }\n        return true;\n      } : matchers[0];\n    }\n    function multipleContexts(selector, contexts, results) {\n      var i = 0, len = contexts.length;\n      for (; i < len; i++) {\n        Sizzle(selector, contexts[i], results);\n      }\n      return results;\n    }\n    function condense(unmatched, map, filter, context, xml) {\n      var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;\n      for (; i < len; i++) {\n        if (elem = unmatched[i]) {\n          if (!filter || filter(elem, context, xml)) {\n            newUnmatched.push(elem);\n            if (mapped) {\n              map.push(i);\n            }\n          }\n        }\n      }\n      return newUnmatched;\n    }\n    function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n      if (postFilter && !postFilter[expando]) {\n        postFilter = setMatcher(postFilter);\n      }\n      if (postFinder && !postFinder[expando]) {\n        postFinder = setMatcher(postFinder, postSelector);\n      }\n      return markFunction(function (seed, results, context, xml) {\n        var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || '*', context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn;\n        if (matcher) {\n          matcher(matcherIn, matcherOut, context, xml);\n        }\n        if (postFilter) {\n          temp = condense(matcherOut, postMap);\n          postFilter(temp, [], context, xml);\n          i = temp.length;\n          while (i--) {\n            if (elem = temp[i]) {\n              matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n            }\n          }\n        }\n        if (seed) {\n          if (postFinder || preFilter) {\n            if (postFinder) {\n              temp = [];\n              i = matcherOut.length;\n              while (i--) {\n                if (elem = matcherOut[i]) {\n                  temp.push(matcherIn[i] = elem);\n                }\n              }\n              postFinder(null, matcherOut = [], temp, xml);\n            }\n            i = matcherOut.length;\n            while (i--) {\n              if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf$1.call(seed, elem) : preMap[i]) > -1) {\n                seed[temp] = !(results[temp] = elem);\n              }\n            }\n          }\n        } else {\n          matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n          if (postFinder) {\n            postFinder(null, results, matcherOut, xml);\n          } else {\n            push.apply(results, matcherOut);\n          }\n        }\n      });\n    }\n    function matcherFromTokens(tokens) {\n      var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[' '], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function (elem) {\n          return elem === checkContext;\n        }, implicitRelative, true), matchAnyContext = addCombinator(function (elem) {\n          return indexOf$1.call(checkContext, elem) > -1;\n        }, implicitRelative, true), matchers = [function (elem, context, xml) {\n            return !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\n          }];\n      for (; i < len; i++) {\n        if (matcher = Expr.relative[tokens[i].type]) {\n          matchers = [addCombinator(elementMatcher(matchers), matcher)];\n        } else {\n          matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n          if (matcher[expando]) {\n            j = ++i;\n            for (; j < len; j++) {\n              if (Expr.relative[tokens[j].type]) {\n                break;\n              }\n            }\n            return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === ' ' ? '*' : '' })).replace(rtrim, '$1'), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n          }\n          matchers.push(matcher);\n        }\n      }\n      return elementMatcher(matchers);\n    }\n    function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n      var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function (seed, context, xml, results, outermost) {\n          var elem, j, matcher, matchedCount = 0, i = '0', unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG('*', outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;\n          if (outermost) {\n            outermostContext = context !== document && context;\n          }\n          for (; i !== len && (elem = elems[i]) != null; i++) {\n            if (byElement && elem) {\n              j = 0;\n              while (matcher = elementMatchers[j++]) {\n                if (matcher(elem, context, xml)) {\n                  results.push(elem);\n                  break;\n                }\n              }\n              if (outermost) {\n                dirruns = dirrunsUnique;\n              }\n            }\n            if (bySet) {\n              if (elem = !matcher && elem) {\n                matchedCount--;\n              }\n              if (seed) {\n                unmatched.push(elem);\n              }\n            }\n          }\n          matchedCount += i;\n          if (bySet && i !== matchedCount) {\n            j = 0;\n            while (matcher = setMatchers[j++]) {\n              matcher(unmatched, setMatched, context, xml);\n            }\n            if (seed) {\n              if (matchedCount > 0) {\n                while (i--) {\n                  if (!(unmatched[i] || setMatched[i])) {\n                    setMatched[i] = pop.call(results);\n                  }\n                }\n              }\n              setMatched = condense(setMatched);\n            }\n            push.apply(results, setMatched);\n            if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n              Sizzle.uniqueSort(results);\n            }\n          }\n          if (outermost) {\n            dirruns = dirrunsUnique;\n            outermostContext = contextBackup;\n          }\n          return unmatched;\n        };\n      return bySet ? markFunction(superMatcher) : superMatcher;\n    }\n    compile = Sizzle.compile = function (selector, match) {\n      var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + ' '];\n      if (!cached) {\n        if (!match) {\n          match = tokenize(selector);\n        }\n        i = match.length;\n        while (i--) {\n          cached = matcherFromTokens(match[i]);\n          if (cached[expando]) {\n            setMatchers.push(cached);\n          } else {\n            elementMatchers.push(cached);\n          }\n        }\n        cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));\n        cached.selector = selector;\n      }\n      return cached;\n    };\n    select = Sizzle.select = function (selector, context, results, seed) {\n      var i, tokens, token, type, find, compiled = typeof selector === 'function' && selector, match = !seed && tokenize(selector = compiled.selector || selector);\n      results = results || [];\n      if (match.length === 1) {\n        tokens = match[0] = match[0].slice(0);\n        if (tokens.length > 2 && (token = tokens[0]).type === 'ID' && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n          context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0];\n          if (!context) {\n            return results;\n          } else if (compiled) {\n            context = context.parentNode;\n          }\n          selector = selector.slice(tokens.shift().value.length);\n        }\n        i = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n        while (i--) {\n          token = tokens[i];\n          if (Expr.relative[type = token.type]) {\n            break;\n          }\n          if (find = Expr.find[type]) {\n            if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n              tokens.splice(i, 1);\n              selector = seed.length && toSelector(tokens);\n              if (!selector) {\n                push.apply(results, seed);\n                return results;\n              }\n              break;\n            }\n          }\n        }\n      }\n      (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, rsibling.test(selector) && testContext(context.parentNode) || context);\n      return results;\n    };\n    support.sortStable = expando.split('').sort(sortOrder).join('') === expando;\n    support.detectDuplicates = !!hasDuplicate;\n    setDocument();\n    support.sortDetached = true;\n\n    var isArray$1 = Array.isArray;\n    var toArray = function (obj) {\n      var array = obj, i, l;\n      if (!isArray$1(obj)) {\n        array = [];\n        for (i = 0, l = obj.length; i < l; i++) {\n          array[i] = obj[i];\n        }\n      }\n      return array;\n    };\n    var each$1 = function (o, cb, s) {\n      var n, l;\n      if (!o) {\n        return 0;\n      }\n      s = s || o;\n      if (o.length !== undefined) {\n        for (n = 0, l = o.length; n < l; n++) {\n          if (cb.call(s, o[n], n, o) === false) {\n            return 0;\n          }\n        }\n      } else {\n        for (n in o) {\n          if (o.hasOwnProperty(n)) {\n            if (cb.call(s, o[n], n, o) === false) {\n              return 0;\n            }\n          }\n        }\n      }\n      return 1;\n    };\n    var map$1 = function (array, callback) {\n      var out = [];\n      each$1(array, function (item, index) {\n        out.push(callback(item, index, array));\n      });\n      return out;\n    };\n    var filter$1 = function (a, f) {\n      var o = [];\n      each$1(a, function (v, index) {\n        if (!f || f(v, index, a)) {\n          o.push(v);\n        }\n      });\n      return o;\n    };\n    var indexOf$2 = function (a, v) {\n      var i, l;\n      if (a) {\n        for (i = 0, l = a.length; i < l; i++) {\n          if (a[i] === v) {\n            return i;\n          }\n        }\n      }\n      return -1;\n    };\n    var reduce = function (collection, iteratee, accumulator, thisArg) {\n      var i = 0;\n      if (arguments.length < 3) {\n        accumulator = collection[0];\n      }\n      for (; i < collection.length; i++) {\n        accumulator = iteratee.call(thisArg, accumulator, collection[i], i);\n      }\n      return accumulator;\n    };\n    var findIndex$1 = function (array, predicate, thisArg) {\n      var i, l;\n      for (i = 0, l = array.length; i < l; i++) {\n        if (predicate.call(thisArg, array[i], i, array)) {\n          return i;\n        }\n      }\n      return -1;\n    };\n    var find$1 = function (array, predicate, thisArg) {\n      var idx = findIndex$1(array, predicate, thisArg);\n      if (idx !== -1) {\n        return array[idx];\n      }\n      return undefined;\n    };\n    var last$1 = function (collection) {\n      return collection[collection.length - 1];\n    };\n    var ArrUtils = {\n      isArray: isArray$1,\n      toArray: toArray,\n      each: each$1,\n      map: map$1,\n      filter: filter$1,\n      indexOf: indexOf$2,\n      reduce: reduce,\n      findIndex: findIndex$1,\n      find: find$1,\n      last: last$1\n    };\n\n    var whiteSpaceRegExp = /^\\s*|\\s*$/g;\n    var trim = function (str) {\n      return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');\n    };\n    var is = function (obj, type) {\n      if (!type) {\n        return obj !== undefined;\n      }\n      if (type === 'array' && ArrUtils.isArray(obj)) {\n        return true;\n      }\n      return typeof obj === type;\n    };\n    var makeMap = function (items, delim, map) {\n      var i;\n      items = items || [];\n      delim = delim || ',';\n      if (typeof items === 'string') {\n        items = items.split(delim);\n      }\n      map = map || {};\n      i = items.length;\n      while (i--) {\n        map[items[i]] = {};\n      }\n      return map;\n    };\n    var hasOwnProperty = function (obj, prop) {\n      return Object.prototype.hasOwnProperty.call(obj, prop);\n    };\n    var create = function (s, p, root) {\n      var self = this;\n      var sp, ns, cn, scn, c, de = 0;\n      s = /^((static) )?([\\w.]+)(:([\\w.]+))?/.exec(s);\n      cn = s[3].match(/(^|\\.)(\\w+)$/i)[2];\n      ns = self.createNS(s[3].replace(/\\.\\w+$/, ''), root);\n      if (ns[cn]) {\n        return;\n      }\n      if (s[2] === 'static') {\n        ns[cn] = p;\n        if (this.onCreate) {\n          this.onCreate(s[2], s[3], ns[cn]);\n        }\n        return;\n      }\n      if (!p[cn]) {\n        p[cn] = function () {\n        };\n        de = 1;\n      }\n      ns[cn] = p[cn];\n      self.extend(ns[cn].prototype, p);\n      if (s[5]) {\n        sp = self.resolve(s[5]).prototype;\n        scn = s[5].match(/\\.(\\w+)$/i)[1];\n        c = ns[cn];\n        if (de) {\n          ns[cn] = function () {\n            return sp[scn].apply(this, arguments);\n          };\n        } else {\n          ns[cn] = function () {\n            this.parent = sp[scn];\n            return c.apply(this, arguments);\n          };\n        }\n        ns[cn].prototype[cn] = ns[cn];\n        self.each(sp, function (f, n) {\n          ns[cn].prototype[n] = sp[n];\n        });\n        self.each(p, function (f, n) {\n          if (sp[n]) {\n            ns[cn].prototype[n] = function () {\n              this.parent = sp[n];\n              return f.apply(this, arguments);\n            };\n          } else {\n            if (n !== cn) {\n              ns[cn].prototype[n] = f;\n            }\n          }\n        });\n      }\n      self.each(p.static, function (f, n) {\n        ns[cn][n] = f;\n      });\n    };\n    var extend = function (obj, ext) {\n      var x = [];\n      for (var _i = 2; _i < arguments.length; _i++) {\n        x[_i - 2] = arguments[_i];\n      }\n      var i, l, name;\n      var args = arguments;\n      var value;\n      for (i = 1, l = args.length; i < l; i++) {\n        ext = args[i];\n        for (name in ext) {\n          if (ext.hasOwnProperty(name)) {\n            value = ext[name];\n            if (value !== undefined) {\n              obj[name] = value;\n            }\n          }\n        }\n      }\n      return obj;\n    };\n    var walk = function (o, f, n, s) {\n      s = s || this;\n      if (o) {\n        if (n) {\n          o = o[n];\n        }\n        ArrUtils.each(o, function (o, i) {\n          if (f.call(s, o, i, n) === false) {\n            return false;\n          }\n          walk(o, f, n, s);\n        });\n      }\n    };\n    var createNS = function (n, o) {\n      var i, v;\n      o = o || domGlobals.window;\n      n = n.split('.');\n      for (i = 0; i < n.length; i++) {\n        v = n[i];\n        if (!o[v]) {\n          o[v] = {};\n        }\n        o = o[v];\n      }\n      return o;\n    };\n    var resolve$1 = function (n, o) {\n      var i, l;\n      o = o || domGlobals.window;\n      n = n.split('.');\n      for (i = 0, l = n.length; i < l; i++) {\n        o = o[n[i]];\n        if (!o) {\n          break;\n        }\n      }\n      return o;\n    };\n    var explode = function (s, d) {\n      if (!s || is(s, 'array')) {\n        return s;\n      }\n      return ArrUtils.map(s.split(d || ','), trim);\n    };\n    var _addCacheSuffix = function (url) {\n      var cacheSuffix = Env.cacheSuffix;\n      if (cacheSuffix) {\n        url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n      }\n      return url;\n    };\n    var Tools = {\n      trim: trim,\n      isArray: ArrUtils.isArray,\n      is: is,\n      toArray: ArrUtils.toArray,\n      makeMap: makeMap,\n      each: ArrUtils.each,\n      map: ArrUtils.map,\n      grep: ArrUtils.filter,\n      inArray: ArrUtils.indexOf,\n      hasOwn: hasOwnProperty,\n      extend: extend,\n      create: create,\n      walk: walk,\n      createNS: createNS,\n      resolve: resolve$1,\n      explode: explode,\n      _addCacheSuffix: _addCacheSuffix\n    };\n\n    var doc = domGlobals.document, push$1 = Array.prototype.push, slice$1 = Array.prototype.slice;\n    var rquickExpr$1 = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/;\n    var Event = EventUtils.Event;\n    var skipUniques = Tools.makeMap('children,contents,next,prev');\n    var isDefined = function (obj) {\n      return typeof obj !== 'undefined';\n    };\n    var isString$1 = function (obj) {\n      return typeof obj === 'string';\n    };\n    var isWindow = function (obj) {\n      return obj && obj === obj.window;\n    };\n    var createFragment = function (html, fragDoc) {\n      var frag, node, container;\n      fragDoc = fragDoc || doc;\n      container = fragDoc.createElement('div');\n      frag = fragDoc.createDocumentFragment();\n      container.innerHTML = html;\n      while (node = container.firstChild) {\n        frag.appendChild(node);\n      }\n      return frag;\n    };\n    var domManipulate = function (targetNodes, sourceItem, callback, reverse) {\n      var i;\n      if (isString$1(sourceItem)) {\n        sourceItem = createFragment(sourceItem, getElementDocument(targetNodes[0]));\n      } else if (sourceItem.length && !sourceItem.nodeType) {\n        sourceItem = DomQuery.makeArray(sourceItem);\n        if (reverse) {\n          for (i = sourceItem.length - 1; i >= 0; i--) {\n            domManipulate(targetNodes, sourceItem[i], callback, reverse);\n          }\n        } else {\n          for (i = 0; i < sourceItem.length; i++) {\n            domManipulate(targetNodes, sourceItem[i], callback, reverse);\n          }\n        }\n        return targetNodes;\n      }\n      if (sourceItem.nodeType) {\n        i = targetNodes.length;\n        while (i--) {\n          callback.call(targetNodes[i], sourceItem);\n        }\n      }\n      return targetNodes;\n    };\n    var hasClass = function (node, className) {\n      return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;\n    };\n    var wrap = function (elements, wrapper, all) {\n      var lastParent, newWrapper;\n      wrapper = DomQuery(wrapper)[0];\n      elements.each(function () {\n        var self = this;\n        if (!all || lastParent !== self.parentNode) {\n          lastParent = self.parentNode;\n          newWrapper = wrapper.cloneNode(false);\n          self.parentNode.insertBefore(newWrapper, self);\n          newWrapper.appendChild(self);\n        } else {\n          newWrapper.appendChild(self);\n        }\n      });\n      return elements;\n    };\n    var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');\n    var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' ');\n    var propFix = {\n      for: 'htmlFor',\n      class: 'className',\n      readonly: 'readOnly'\n    };\n    var cssFix = { float: 'cssFloat' };\n    var attrHooks = {}, cssHooks = {};\n    var DomQuery = function (selector, context) {\n      return new DomQuery.fn.init(selector, context);\n    };\n    var inArray = function (item, array) {\n      var i;\n      if (array.indexOf) {\n        return array.indexOf(item);\n      }\n      i = array.length;\n      while (i--) {\n        if (array[i] === item) {\n          return i;\n        }\n      }\n      return -1;\n    };\n    var whiteSpaceRegExp$1 = /^\\s*|\\s*$/g;\n    var trim$1 = function (str) {\n      return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\n    };\n    var each$2 = function (obj, callback) {\n      var length, key, i, value;\n      if (obj) {\n        length = obj.length;\n        if (length === undefined) {\n          for (key in obj) {\n            if (obj.hasOwnProperty(key)) {\n              value = obj[key];\n              if (callback.call(value, key, value) === false) {\n                break;\n              }\n            }\n          }\n        } else {\n          for (i = 0; i < length; i++) {\n            value = obj[i];\n            if (callback.call(value, i, value) === false) {\n              break;\n            }\n          }\n        }\n      }\n      return obj;\n    };\n    var grep = function (array, callback) {\n      var out = [];\n      each$2(array, function (i, item) {\n        if (callback(item, i)) {\n          out.push(item);\n        }\n      });\n      return out;\n    };\n    var getElementDocument = function (element) {\n      if (!element) {\n        return doc;\n      }\n      if (element.nodeType === 9) {\n        return element;\n      }\n      return element.ownerDocument;\n    };\n    DomQuery.fn = DomQuery.prototype = {\n      constructor: DomQuery,\n      selector: '',\n      context: null,\n      length: 0,\n      init: function (selector, context) {\n        var self = this;\n        var match, node;\n        if (!selector) {\n          return self;\n        }\n        if (selector.nodeType) {\n          self.context = self[0] = selector;\n          self.length = 1;\n          return self;\n        }\n        if (context && context.nodeType) {\n          self.context = context;\n        } else {\n          if (context) {\n            return DomQuery(selector).attr(context);\n          }\n          self.context = context = domGlobals.document;\n        }\n        if (isString$1(selector)) {\n          self.selector = selector;\n          if (selector.charAt(0) === '<' && selector.charAt(selector.length - 1) === '>' && selector.length >= 3) {\n            match = [\n              null,\n              selector,\n              null\n            ];\n          } else {\n            match = rquickExpr$1.exec(selector);\n          }\n          if (match) {\n            if (match[1]) {\n              node = createFragment(selector, getElementDocument(context)).firstChild;\n              while (node) {\n                push$1.call(self, node);\n                node = node.nextSibling;\n              }\n            } else {\n              node = getElementDocument(context).getElementById(match[2]);\n              if (!node) {\n                return self;\n              }\n              if (node.id !== match[2]) {\n                return self.find(selector);\n              }\n              self.length = 1;\n              self[0] = node;\n            }\n          } else {\n            return DomQuery(context).find(selector);\n          }\n        } else {\n          this.add(selector, false);\n        }\n        return self;\n      },\n      toArray: function () {\n        return Tools.toArray(this);\n      },\n      add: function (items, sort) {\n        var self = this;\n        var nodes, i;\n        if (isString$1(items)) {\n          return self.add(DomQuery(items));\n        }\n        if (sort !== false) {\n          nodes = DomQuery.unique(self.toArray().concat(DomQuery.makeArray(items)));\n          self.length = nodes.length;\n          for (i = 0; i < nodes.length; i++) {\n            self[i] = nodes[i];\n          }\n        } else {\n          push$1.apply(self, DomQuery.makeArray(items));\n        }\n        return self;\n      },\n      attr: function (name, value) {\n        var self = this;\n        var hook;\n        if (typeof name === 'object') {\n          each$2(name, function (name, value) {\n            self.attr(name, value);\n          });\n        } else if (isDefined(value)) {\n          this.each(function () {\n            var hook;\n            if (this.nodeType === 1) {\n              hook = attrHooks[name];\n              if (hook && hook.set) {\n                hook.set(this, value);\n                return;\n              }\n              if (value === null) {\n                this.removeAttribute(name, 2);\n              } else {\n                this.setAttribute(name, value, 2);\n              }\n            }\n          });\n        } else {\n          if (self[0] && self[0].nodeType === 1) {\n            hook = attrHooks[name];\n            if (hook && hook.get) {\n              return hook.get(self[0], name);\n            }\n            if (booleanMap[name]) {\n              return self.prop(name) ? name : undefined;\n            }\n            value = self[0].getAttribute(name, 2);\n            if (value === null) {\n              value = undefined;\n            }\n          }\n          return value;\n        }\n        return self;\n      },\n      removeAttr: function (name) {\n        return this.attr(name, null);\n      },\n      prop: function (name, value) {\n        var self = this;\n        name = propFix[name] || name;\n        if (typeof name === 'object') {\n          each$2(name, function (name, value) {\n            self.prop(name, value);\n          });\n        } else if (isDefined(value)) {\n          this.each(function () {\n            if (this.nodeType === 1) {\n              this[name] = value;\n            }\n          });\n        } else {\n          if (self[0] && self[0].nodeType && name in self[0]) {\n            return self[0][name];\n          }\n          return value;\n        }\n        return self;\n      },\n      css: function (name, value) {\n        var self = this;\n        var elm, hook;\n        var camel = function (name) {\n          return name.replace(/-(\\D)/g, function (a, b) {\n            return b.toUpperCase();\n          });\n        };\n        var dashed = function (name) {\n          return name.replace(/[A-Z]/g, function (a) {\n            return '-' + a;\n          });\n        };\n        if (typeof name === 'object') {\n          each$2(name, function (name, value) {\n            self.css(name, value);\n          });\n        } else {\n          if (isDefined(value)) {\n            name = camel(name);\n            if (typeof value === 'number' && !numericCssMap[name]) {\n              value = value.toString() + 'px';\n            }\n            self.each(function () {\n              var style = this.style;\n              hook = cssHooks[name];\n              if (hook && hook.set) {\n                hook.set(this, value);\n                return;\n              }\n              try {\n                this.style[cssFix[name] || name] = value;\n              } catch (ex) {\n              }\n              if (value === null || value === '') {\n                if (style.removeProperty) {\n                  style.removeProperty(dashed(name));\n                } else {\n                  style.removeAttribute(name);\n                }\n              }\n            });\n          } else {\n            elm = self[0];\n            hook = cssHooks[name];\n            if (hook && hook.get) {\n              return hook.get(elm);\n            }\n            if (elm.ownerDocument.defaultView) {\n              try {\n                return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name));\n              } catch (ex) {\n                return undefined;\n              }\n            } else if (elm.currentStyle) {\n              return elm.currentStyle[camel(name)];\n            } else {\n              return '';\n            }\n          }\n        }\n        return self;\n      },\n      remove: function () {\n        var self = this;\n        var node, i = this.length;\n        while (i--) {\n          node = self[i];\n          Event.clean(node);\n          if (node.parentNode) {\n            node.parentNode.removeChild(node);\n          }\n        }\n        return this;\n      },\n      empty: function () {\n        var self = this;\n        var node, i = this.length;\n        while (i--) {\n          node = self[i];\n          while (node.firstChild) {\n            node.removeChild(node.firstChild);\n          }\n        }\n        return this;\n      },\n      html: function (value) {\n        var self = this;\n        var i;\n        if (isDefined(value)) {\n          i = self.length;\n          try {\n            while (i--) {\n              self[i].innerHTML = value;\n            }\n          } catch (ex) {\n            DomQuery(self[i]).empty().append(value);\n          }\n          return self;\n        }\n        return self[0] ? self[0].innerHTML : '';\n      },\n      text: function (value) {\n        var self = this;\n        var i;\n        if (isDefined(value)) {\n          i = self.length;\n          while (i--) {\n            if ('innerText' in self[i]) {\n              self[i].innerText = value;\n            } else {\n              self[0].textContent = value;\n            }\n          }\n          return self;\n        }\n        return self[0] ? self[0].innerText || self[0].textContent : '';\n      },\n      append: function () {\n        return domManipulate(this, arguments, function (node) {\n          if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n            this.appendChild(node);\n          }\n        });\n      },\n      prepend: function () {\n        return domManipulate(this, arguments, function (node) {\n          if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n            this.insertBefore(node, this.firstChild);\n          }\n        }, true);\n      },\n      before: function () {\n        var self = this;\n        if (self[0] && self[0].parentNode) {\n          return domManipulate(self, arguments, function (node) {\n            this.parentNode.insertBefore(node, this);\n          });\n        }\n        return self;\n      },\n      after: function () {\n        var self = this;\n        if (self[0] && self[0].parentNode) {\n          return domManipulate(self, arguments, function (node) {\n            this.parentNode.insertBefore(node, this.nextSibling);\n          }, true);\n        }\n        return self;\n      },\n      appendTo: function (val) {\n        DomQuery(val).append(this);\n        return this;\n      },\n      prependTo: function (val) {\n        DomQuery(val).prepend(this);\n        return this;\n      },\n      replaceWith: function (content) {\n        return this.before(content).remove();\n      },\n      wrap: function (content) {\n        return wrap(this, content);\n      },\n      wrapAll: function (content) {\n        return wrap(this, content, true);\n      },\n      wrapInner: function (content) {\n        this.each(function () {\n          DomQuery(this).contents().wrapAll(content);\n        });\n        return this;\n      },\n      unwrap: function () {\n        return this.parent().each(function () {\n          DomQuery(this).replaceWith(this.childNodes);\n        });\n      },\n      clone: function () {\n        var result = [];\n        this.each(function () {\n          result.push(this.cloneNode(true));\n        });\n        return DomQuery(result);\n      },\n      addClass: function (className) {\n        return this.toggleClass(className, true);\n      },\n      removeClass: function (className) {\n        return this.toggleClass(className, false);\n      },\n      toggleClass: function (className, state) {\n        var self = this;\n        if (typeof className !== 'string') {\n          return self;\n        }\n        if (className.indexOf(' ') !== -1) {\n          each$2(className.split(' '), function () {\n            self.toggleClass(this, state);\n          });\n        } else {\n          self.each(function (index, node) {\n            var existingClassName, classState;\n            classState = hasClass(node, className);\n            if (classState !== state) {\n              existingClassName = node.className;\n              if (classState) {\n                node.className = trim$1((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' '));\n              } else {\n                node.className += existingClassName ? ' ' + className : className;\n              }\n            }\n          });\n        }\n        return self;\n      },\n      hasClass: function (className) {\n        return hasClass(this[0], className);\n      },\n      each: function (callback) {\n        return each$2(this, callback);\n      },\n      on: function (name, callback) {\n        return this.each(function () {\n          Event.bind(this, name, callback);\n        });\n      },\n      off: function (name, callback) {\n        return this.each(function () {\n          Event.unbind(this, name, callback);\n        });\n      },\n      trigger: function (name) {\n        return this.each(function () {\n          if (typeof name === 'object') {\n            Event.fire(this, name.type, name);\n          } else {\n            Event.fire(this, name);\n          }\n        });\n      },\n      show: function () {\n        return this.css('display', '');\n      },\n      hide: function () {\n        return this.css('display', 'none');\n      },\n      slice: function () {\n        return new DomQuery(slice$1.apply(this, arguments));\n      },\n      eq: function (index) {\n        return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n      },\n      first: function () {\n        return this.eq(0);\n      },\n      last: function () {\n        return this.eq(-1);\n      },\n      find: function (selector) {\n        var i, l;\n        var ret = [];\n        for (i = 0, l = this.length; i < l; i++) {\n          DomQuery.find(selector, this[i], ret);\n        }\n        return DomQuery(ret);\n      },\n      filter: function (selector) {\n        if (typeof selector === 'function') {\n          return DomQuery(grep(this.toArray(), function (item, i) {\n            return selector(i, item);\n          }));\n        }\n        return DomQuery(DomQuery.filter(selector, this.toArray()));\n      },\n      closest: function (selector) {\n        var result = [];\n        if (selector instanceof DomQuery) {\n          selector = selector[0];\n        }\n        this.each(function (i, node) {\n          while (node) {\n            if (typeof selector === 'string' && DomQuery(node).is(selector)) {\n              result.push(node);\n              break;\n            } else if (node === selector) {\n              result.push(node);\n              break;\n            }\n            node = node.parentNode;\n          }\n        });\n        return DomQuery(result);\n      },\n      offset: function (offset) {\n        var elm, doc, docElm;\n        var x = 0, y = 0, pos;\n        if (!offset) {\n          elm = this[0];\n          if (elm) {\n            doc = elm.ownerDocument;\n            docElm = doc.documentElement;\n            if (elm.getBoundingClientRect) {\n              pos = elm.getBoundingClientRect();\n              x = pos.left + (docElm.scrollLeft || doc.body.scrollLeft) - docElm.clientLeft;\n              y = pos.top + (docElm.scrollTop || doc.body.scrollTop) - docElm.clientTop;\n            }\n          }\n          return {\n            left: x,\n            top: y\n          };\n        }\n        return this.css(offset);\n      },\n      push: push$1,\n      sort: [].sort,\n      splice: [].splice\n    };\n    Tools.extend(DomQuery, {\n      extend: Tools.extend,\n      makeArray: function (object) {\n        if (isWindow(object) || object.nodeType) {\n          return [object];\n        }\n        return Tools.toArray(object);\n      },\n      inArray: inArray,\n      isArray: Tools.isArray,\n      each: each$2,\n      trim: trim$1,\n      grep: grep,\n      find: Sizzle,\n      expr: Sizzle.selectors,\n      unique: Sizzle.uniqueSort,\n      text: Sizzle.getText,\n      contains: Sizzle.contains,\n      filter: function (expr, elems, not) {\n        var i = elems.length;\n        if (not) {\n          expr = ':not(' + expr + ')';\n        }\n        while (i--) {\n          if (elems[i].nodeType !== 1) {\n            elems.splice(i, 1);\n          }\n        }\n        if (elems.length === 1) {\n          elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [];\n        } else {\n          elems = DomQuery.find.matches(expr, elems);\n        }\n        return elems;\n      }\n    });\n    var dir = function (el, prop, until) {\n      var matched = [];\n      var cur = el[prop];\n      if (typeof until !== 'string' && until instanceof DomQuery) {\n        until = until[0];\n      }\n      while (cur && cur.nodeType !== 9) {\n        if (until !== undefined) {\n          if (cur === until) {\n            break;\n          }\n          if (typeof until === 'string' && DomQuery(cur).is(until)) {\n            break;\n          }\n        }\n        if (cur.nodeType === 1) {\n          matched.push(cur);\n        }\n        cur = cur[prop];\n      }\n      return matched;\n    };\n    var sibling = function (node, siblingName, nodeType, until) {\n      var result = [];\n      if (until instanceof DomQuery) {\n        until = until[0];\n      }\n      for (; node; node = node[siblingName]) {\n        if (nodeType && node.nodeType !== nodeType) {\n          continue;\n        }\n        if (until !== undefined) {\n          if (node === until) {\n            break;\n          }\n          if (typeof until === 'string' && DomQuery(node).is(until)) {\n            break;\n          }\n        }\n        result.push(node);\n      }\n      return result;\n    };\n    var firstSibling = function (node, siblingName, nodeType) {\n      for (node = node[siblingName]; node; node = node[siblingName]) {\n        if (node.nodeType === nodeType) {\n          return node;\n        }\n      }\n      return null;\n    };\n    each$2({\n      parent: function (node) {\n        var parent = node.parentNode;\n        return parent && parent.nodeType !== 11 ? parent : null;\n      },\n      parents: function (node) {\n        return dir(node, 'parentNode');\n      },\n      next: function (node) {\n        return firstSibling(node, 'nextSibling', 1);\n      },\n      prev: function (node) {\n        return firstSibling(node, 'previousSibling', 1);\n      },\n      children: function (node) {\n        return sibling(node.firstChild, 'nextSibling', 1);\n      },\n      contents: function (node) {\n        return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);\n      }\n    }, function (name, fn) {\n      DomQuery.fn[name] = function (selector) {\n        var self = this;\n        var result = [];\n        self.each(function () {\n          var nodes = fn.call(result, this, selector, result);\n          if (nodes) {\n            if (DomQuery.isArray(nodes)) {\n              result.push.apply(result, nodes);\n            } else {\n              result.push(nodes);\n            }\n          }\n        });\n        if (this.length > 1) {\n          if (!skipUniques[name]) {\n            result = DomQuery.unique(result);\n          }\n          if (name.indexOf('parents') === 0) {\n            result = result.reverse();\n          }\n        }\n        result = DomQuery(result);\n        if (selector) {\n          return result.filter(selector);\n        }\n        return result;\n      };\n    });\n    each$2({\n      parentsUntil: function (node, until) {\n        return dir(node, 'parentNode', until);\n      },\n      nextUntil: function (node, until) {\n        return sibling(node, 'nextSibling', 1, until).slice(1);\n      },\n      prevUntil: function (node, until) {\n        return sibling(node, 'previousSibling', 1, until).slice(1);\n      }\n    }, function (name, fn) {\n      DomQuery.fn[name] = function (selector, filter) {\n        var self = this;\n        var result = [];\n        self.each(function () {\n          var nodes = fn.call(result, this, selector, result);\n          if (nodes) {\n            if (DomQuery.isArray(nodes)) {\n              result.push.apply(result, nodes);\n            } else {\n              result.push(nodes);\n            }\n          }\n        });\n        if (this.length > 1) {\n          result = DomQuery.unique(result);\n          if (name.indexOf('parents') === 0 || name === 'prevUntil') {\n            result = result.reverse();\n          }\n        }\n        result = DomQuery(result);\n        if (filter) {\n          return result.filter(filter);\n        }\n        return result;\n      };\n    });\n    DomQuery.fn.is = function (selector) {\n      return !!selector && this.filter(selector).length > 0;\n    };\n    DomQuery.fn.init.prototype = DomQuery.fn;\n    DomQuery.overrideDefaults = function (callback) {\n      var defaults;\n      var sub = function (selector, context) {\n        defaults = defaults || callback();\n        if (arguments.length === 0) {\n          selector = defaults.element;\n        }\n        if (!context) {\n          context = defaults.context;\n        }\n        return new sub.fn.init(selector, context);\n      };\n      DomQuery.extend(sub, this);\n      return sub;\n    };\n    var appendHooks = function (targetHooks, prop, hooks) {\n      each$2(hooks, function (name, func) {\n        targetHooks[name] = targetHooks[name] || {};\n        targetHooks[name][prop] = func;\n      });\n    };\n    if (Env.ie && Env.ie < 8) {\n      appendHooks(attrHooks, 'get', {\n        maxlength: function (elm) {\n          var value = elm.maxLength;\n          if (value === 2147483647) {\n            return undefined;\n          }\n          return value;\n        },\n        size: function (elm) {\n          var value = elm.size;\n          if (value === 20) {\n            return undefined;\n          }\n          return value;\n        },\n        class: function (elm) {\n          return elm.className;\n        },\n        style: function (elm) {\n          var value = elm.style.cssText;\n          if (value.length === 0) {\n            return undefined;\n          }\n          return value;\n        }\n      });\n      appendHooks(attrHooks, 'set', {\n        class: function (elm, value) {\n          elm.className = value;\n        },\n        style: function (elm, value) {\n          elm.style.cssText = value;\n        }\n      });\n    }\n    if (Env.ie && Env.ie < 9) {\n      cssFix.float = 'styleFloat';\n      appendHooks(cssHooks, 'set', {\n        opacity: function (elm, value) {\n          var style = elm.style;\n          if (value === null || value === '') {\n            style.removeAttribute('filter');\n          } else {\n            style.zoom = 1;\n            style.filter = 'alpha(opacity=' + value * 100 + ')';\n          }\n        }\n      });\n    }\n    DomQuery.attrHooks = attrHooks;\n    DomQuery.cssHooks = cssHooks;\n\n    var cached = function (f) {\n      var called = false;\n      var r;\n      return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        if (!called) {\n          called = true;\n          r = f.apply(null, args);\n        }\n        return r;\n      };\n    };\n\n    var firstMatch = function (regexes, s) {\n      for (var i = 0; i < regexes.length; i++) {\n        var x = regexes[i];\n        if (x.test(s)) {\n          return x;\n        }\n      }\n      return undefined;\n    };\n    var find$2 = function (regexes, agent) {\n      var r = firstMatch(regexes, agent);\n      if (!r) {\n        return {\n          major: 0,\n          minor: 0\n        };\n      }\n      var group = function (i) {\n        return Number(agent.replace(r, '$' + i));\n      };\n      return nu(group(1), group(2));\n    };\n    var detect = function (versionRegexes, agent) {\n      var cleanedAgent = String(agent).toLowerCase();\n      if (versionRegexes.length === 0) {\n        return unknown();\n      }\n      return find$2(versionRegexes, cleanedAgent);\n    };\n    var unknown = function () {\n      return nu(0, 0);\n    };\n    var nu = function (major, minor) {\n      return {\n        major: major,\n        minor: minor\n      };\n    };\n    var Version = {\n      nu: nu,\n      detect: detect,\n      unknown: unknown\n    };\n\n    var edge = 'Edge';\n    var chrome = 'Chrome';\n    var ie$1 = 'IE';\n    var opera$1 = 'Opera';\n    var firefox = 'Firefox';\n    var safari = 'Safari';\n    var isBrowser = function (name, current) {\n      return function () {\n        return current === name;\n      };\n    };\n    var unknown$1 = function () {\n      return nu$1({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    var nu$1 = function (info) {\n      var current = info.current;\n      var version = info.version;\n      return {\n        current: current,\n        version: version,\n        isEdge: isBrowser(edge, current),\n        isChrome: isBrowser(chrome, current),\n        isIE: isBrowser(ie$1, current),\n        isOpera: isBrowser(opera$1, current),\n        isFirefox: isBrowser(firefox, current),\n        isSafari: isBrowser(safari, current)\n      };\n    };\n    var Browser = {\n      unknown: unknown$1,\n      nu: nu$1,\n      edge: constant(edge),\n      chrome: constant(chrome),\n      ie: constant(ie$1),\n      opera: constant(opera$1),\n      firefox: constant(firefox),\n      safari: constant(safari)\n    };\n\n    var windows = 'Windows';\n    var ios = 'iOS';\n    var android$1 = 'Android';\n    var linux = 'Linux';\n    var osx = 'OSX';\n    var solaris = 'Solaris';\n    var freebsd = 'FreeBSD';\n    var isOS = function (name, current) {\n      return function () {\n        return current === name;\n      };\n    };\n    var unknown$2 = function () {\n      return nu$2({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    var nu$2 = function (info) {\n      var current = info.current;\n      var version = info.version;\n      return {\n        current: current,\n        version: version,\n        isWindows: isOS(windows, current),\n        isiOS: isOS(ios, current),\n        isAndroid: isOS(android$1, current),\n        isOSX: isOS(osx, current),\n        isLinux: isOS(linux, current),\n        isSolaris: isOS(solaris, current),\n        isFreeBSD: isOS(freebsd, current)\n      };\n    };\n    var OperatingSystem = {\n      unknown: unknown$2,\n      nu: nu$2,\n      windows: constant(windows),\n      ios: constant(ios),\n      android: constant(android$1),\n      linux: constant(linux),\n      osx: constant(osx),\n      solaris: constant(solaris),\n      freebsd: constant(freebsd)\n    };\n\n    var DeviceType = function (os, browser, userAgent) {\n      var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n      var isiPhone = os.isiOS() && !isiPad;\n      var isAndroid3 = os.isAndroid() && os.version.major === 3;\n      var isAndroid4 = os.isAndroid() && os.version.major === 4;\n      var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n      var isTouch = os.isiOS() || os.isAndroid();\n      var isPhone = isTouch && !isTablet;\n      var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n      return {\n        isiPad: constant(isiPad),\n        isiPhone: constant(isiPhone),\n        isTablet: constant(isTablet),\n        isPhone: constant(isPhone),\n        isTouch: constant(isTouch),\n        isAndroid: os.isAndroid,\n        isiOS: os.isiOS,\n        isWebView: constant(iOSwebview)\n      };\n    };\n\n    var detect$1 = function (candidates, userAgent) {\n      var agent = String(userAgent).toLowerCase();\n      return find(candidates, function (candidate) {\n        return candidate.search(agent);\n      });\n    };\n    var detectBrowser = function (browsers, userAgent) {\n      return detect$1(browsers, userAgent).map(function (browser) {\n        var version = Version.detect(browser.versionRegexes, userAgent);\n        return {\n          current: browser.name,\n          version: version\n        };\n      });\n    };\n    var detectOs = function (oses, userAgent) {\n      return detect$1(oses, userAgent).map(function (os) {\n        var version = Version.detect(os.versionRegexes, userAgent);\n        return {\n          current: os.name,\n          version: version\n        };\n      });\n    };\n    var UaString = {\n      detectBrowser: detectBrowser,\n      detectOs: detectOs\n    };\n\n    var contains$2 = function (str, substr) {\n      return str.indexOf(substr) !== -1;\n    };\n    var trim$2 = function (str) {\n      return str.replace(/^\\s+|\\s+$/g, '');\n    };\n    var lTrim = function (str) {\n      return str.replace(/^\\s+/g, '');\n    };\n    var rTrim = function (str) {\n      return str.replace(/\\s+$/g, '');\n    };\n\n    var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n    var checkContains = function (target) {\n      return function (uastring) {\n        return contains$2(uastring, target);\n      };\n    };\n    var browsers = [\n      {\n        name: 'Edge',\n        versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n        search: function (uastring) {\n          return contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');\n        }\n      },\n      {\n        name: 'Chrome',\n        versionRegexes: [\n          /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n          normalVersionRegex\n        ],\n        search: function (uastring) {\n          return contains$2(uastring, 'chrome') && !contains$2(uastring, 'chromeframe');\n        }\n      },\n      {\n        name: 'IE',\n        versionRegexes: [\n          /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*?rv:([0-9]+)\\.([0-9]+).*/\n        ],\n        search: function (uastring) {\n          return contains$2(uastring, 'msie') || contains$2(uastring, 'trident');\n        }\n      },\n      {\n        name: 'Opera',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n        ],\n        search: checkContains('opera')\n      },\n      {\n        name: 'Firefox',\n        versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n        search: checkContains('firefox')\n      },\n      {\n        name: 'Safari',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\n        ],\n        search: function (uastring) {\n          return (contains$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(uastring, 'applewebkit');\n        }\n      }\n    ];\n    var oses = [\n      {\n        name: 'Windows',\n        search: checkContains('win'),\n        versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'iOS',\n        search: function (uastring) {\n          return contains$2(uastring, 'iphone') || contains$2(uastring, 'ipad');\n        },\n        versionRegexes: [\n          /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n        ]\n      },\n      {\n        name: 'Android',\n        search: checkContains('android'),\n        versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'OSX',\n        search: checkContains('os x'),\n        versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n      },\n      {\n        name: 'Linux',\n        search: checkContains('linux'),\n        versionRegexes: []\n      },\n      {\n        name: 'Solaris',\n        search: checkContains('sunos'),\n        versionRegexes: []\n      },\n      {\n        name: 'FreeBSD',\n        search: checkContains('freebsd'),\n        versionRegexes: []\n      }\n    ];\n    var PlatformInfo = {\n      browsers: constant(browsers),\n      oses: constant(oses)\n    };\n\n    var detect$2 = function (userAgent) {\n      var browsers = PlatformInfo.browsers();\n      var oses = PlatformInfo.oses();\n      var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n      var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n      var deviceType = DeviceType(os, browser, userAgent);\n      return {\n        browser: browser,\n        os: os,\n        deviceType: deviceType\n      };\n    };\n    var PlatformDetection = { detect: detect$2 };\n\n    var detect$3 = cached(function () {\n      var userAgent = domGlobals.navigator.userAgent;\n      return PlatformDetection.detect(userAgent);\n    });\n    var PlatformDetection$1 = { detect: detect$3 };\n\n    var fromHtml = function (html, scope) {\n      var doc = scope || domGlobals.document;\n      var div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        domGlobals.console.error('HTML does not have a single root node', html);\n        throw new Error('HTML must have a single root node');\n      }\n      return fromDom(div.childNodes[0]);\n    };\n    var fromTag = function (tag, scope) {\n      var doc = scope || domGlobals.document;\n      var node = doc.createElement(tag);\n      return fromDom(node);\n    };\n    var fromText = function (text, scope) {\n      var doc = scope || domGlobals.document;\n      var node = doc.createTextNode(text);\n      return fromDom(node);\n    };\n    var fromDom = function (node) {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: constant(node) };\n    };\n    var fromPoint = function (docElm, x, y) {\n      var doc = docElm.dom();\n      return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n    };\n    var Element = {\n      fromHtml: fromHtml,\n      fromTag: fromTag,\n      fromText: fromText,\n      fromDom: fromDom,\n      fromPoint: fromPoint\n    };\n\n    var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n    var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n    var COMMENT = domGlobals.Node.COMMENT_NODE;\n    var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n    var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n    var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n    var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n    var TEXT = domGlobals.Node.TEXT_NODE;\n    var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n    var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n    var ENTITY = domGlobals.Node.ENTITY_NODE;\n    var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n    var name = function (element) {\n      var r = element.dom().nodeName;\n      return r.toLowerCase();\n    };\n    var type = function (element) {\n      return element.dom().nodeType;\n    };\n    var isType$1 = function (t) {\n      return function (element) {\n        return type(element) === t;\n      };\n    };\n    var isElement = isType$1(ELEMENT);\n    var isText = isType$1(TEXT);\n\n    var keys = Object.keys;\n    var hasOwnProperty$1 = Object.hasOwnProperty;\n    var each$3 = function (obj, f) {\n      var props = keys(obj);\n      for (var k = 0, len = props.length; k < len; k++) {\n        var i = props[k];\n        var x = obj[i];\n        f(x, i);\n      }\n    };\n    var map$2 = function (obj, f) {\n      return tupleMap(obj, function (x, i) {\n        return {\n          k: i,\n          v: f(x, i)\n        };\n      });\n    };\n    var tupleMap = function (obj, f) {\n      var r = {};\n      each$3(obj, function (x, i) {\n        var tuple = f(x, i);\n        r[tuple.k] = tuple.v;\n      });\n      return r;\n    };\n    var bifilter = function (obj, pred) {\n      var t = {};\n      var f = {};\n      each$3(obj, function (x, i) {\n        var branch = pred(x, i) ? t : f;\n        branch[i] = x;\n      });\n      return {\n        t: t,\n        f: f\n      };\n    };\n    var has = function (obj, key) {\n      return hasOwnProperty$1.call(obj, key);\n    };\n\n    var isSupported = function (dom) {\n      return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n    };\n\n    var inBody = function (element) {\n      var dom = isText(element) ? element.dom().parentNode : element.dom();\n      return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\n    };\n\n    var rawSet = function (dom, key, value) {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    var set = function (element, key, value) {\n      rawSet(element.dom(), key, value);\n    };\n    var setAll = function (element, attrs) {\n      var dom = element.dom();\n      each$3(attrs, function (v, k) {\n        rawSet(dom, k, v);\n      });\n    };\n    var get = function (element, key) {\n      var v = element.dom().getAttribute(key);\n      return v === null ? undefined : v;\n    };\n    var has$1 = function (element, key) {\n      var dom = element.dom();\n      return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n    };\n    var remove = function (element, key) {\n      element.dom().removeAttribute(key);\n    };\n\n    var internalSet = function (dom, property, value) {\n      if (!isString(value)) {\n        domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n        throw new Error('CSS value must be a string: ' + value);\n      }\n      if (isSupported(dom)) {\n        dom.style.setProperty(property, value);\n      }\n    };\n    var setAll$1 = function (element, css) {\n      var dom = element.dom();\n      each$3(css, function (v, k) {\n        internalSet(dom, k, v);\n      });\n    };\n    var get$1 = function (element, property) {\n      var dom = element.dom();\n      var styles = domGlobals.window.getComputedStyle(dom);\n      var r = styles.getPropertyValue(property);\n      var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n      return v === null ? undefined : v;\n    };\n    var getUnsafeProperty = function (dom, property) {\n      return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n    };\n    var getRaw = function (element, property) {\n      var dom = element.dom();\n      var raw = getUnsafeProperty(dom, property);\n      return Option.from(raw).filter(function (r) {\n        return r.length > 0;\n      });\n    };\n    var getAllRaw = function (element) {\n      var css = {};\n      var dom = element.dom();\n      if (isSupported(dom)) {\n        for (var i = 0; i < dom.style.length; i++) {\n          var ruleName = dom.style.item(i);\n          css[ruleName] = dom.style[ruleName];\n        }\n      }\n      return css;\n    };\n\n    var Immutable = function () {\n      var fields = [];\n      for (var _i = 0; _i < arguments.length; _i++) {\n        fields[_i] = arguments[_i];\n      }\n      return function () {\n        var values = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          values[_i] = arguments[_i];\n        }\n        if (fields.length !== values.length) {\n          throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n        }\n        var struct = {};\n        each(fields, function (name, i) {\n          struct[name] = constant(values[i]);\n        });\n        return struct;\n      };\n    };\n\n    var toArray$1 = function (target, f) {\n      var r = [];\n      var recurse = function (e) {\n        r.push(e);\n        return f(e);\n      };\n      var cur = f(target);\n      do {\n        cur = cur.bind(recurse);\n      } while (cur.isSome());\n      return r;\n    };\n    var Recurse = { toArray: toArray$1 };\n\n    var node = function () {\n      var f = Global$1.getOrDie('Node');\n      return f;\n    };\n    var compareDocumentPosition = function (a, b, match) {\n      return (a.compareDocumentPosition(b) & match) !== 0;\n    };\n    var documentPositionPreceding = function (a, b) {\n      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n    };\n    var documentPositionContainedBy = function (a, b) {\n      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n    };\n    var Node = {\n      documentPositionPreceding: documentPositionPreceding,\n      documentPositionContainedBy: documentPositionContainedBy\n    };\n\n    var ELEMENT$1 = ELEMENT;\n    var DOCUMENT$1 = DOCUMENT;\n    var is$1 = function (element, selector) {\n      var dom = element.dom();\n      if (dom.nodeType !== ELEMENT$1) {\n        return false;\n      } else {\n        var elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n    var bypassSelector = function (dom) {\n      return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n    };\n    var all = function (selector, scope) {\n      var base = scope === undefined ? domGlobals.document : scope.dom();\n      return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n    };\n    var one = function (selector, scope) {\n      var base = scope === undefined ? domGlobals.document : scope.dom();\n      return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n    };\n\n    var eq = function (e1, e2) {\n      return e1.dom() === e2.dom();\n    };\n    var regularContains = function (e1, e2) {\n      var d1 = e1.dom();\n      var d2 = e2.dom();\n      return d1 === d2 ? false : d1.contains(d2);\n    };\n    var ieContains = function (e1, e2) {\n      return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n    };\n    var browser = PlatformDetection$1.detect().browser;\n    var contains$3 = browser.isIE() ? ieContains : regularContains;\n\n    var owner = function (element) {\n      return Element.fromDom(element.dom().ownerDocument);\n    };\n    var documentElement = function (element) {\n      return Element.fromDom(element.dom().ownerDocument.documentElement);\n    };\n    var defaultView = function (element) {\n      return Element.fromDom(element.dom().ownerDocument.defaultView);\n    };\n    var parent = function (element) {\n      return Option.from(element.dom().parentNode).map(Element.fromDom);\n    };\n    var parents = function (element, isRoot) {\n      var stop = isFunction(isRoot) ? isRoot : never;\n      var dom = element.dom();\n      var ret = [];\n      while (dom.parentNode !== null && dom.parentNode !== undefined) {\n        var rawParent = dom.parentNode;\n        var p = Element.fromDom(rawParent);\n        ret.push(p);\n        if (stop(p) === true) {\n          break;\n        } else {\n          dom = rawParent;\n        }\n      }\n      return ret;\n    };\n    var prevSibling = function (element) {\n      return Option.from(element.dom().previousSibling).map(Element.fromDom);\n    };\n    var nextSibling = function (element) {\n      return Option.from(element.dom().nextSibling).map(Element.fromDom);\n    };\n    var prevSiblings = function (element) {\n      return reverse(Recurse.toArray(element, prevSibling));\n    };\n    var nextSiblings = function (element) {\n      return Recurse.toArray(element, nextSibling);\n    };\n    var children = function (element) {\n      return map(element.dom().childNodes, Element.fromDom);\n    };\n    var child = function (element, index) {\n      var cs = element.dom().childNodes;\n      return Option.from(cs[index]).map(Element.fromDom);\n    };\n    var firstChild = function (element) {\n      return child(element, 0);\n    };\n    var lastChild = function (element) {\n      return child(element, element.dom().childNodes.length - 1);\n    };\n    var childNodesCount = function (element) {\n      return element.dom().childNodes.length;\n    };\n    var spot = Immutable('element', 'offset');\n\n    var browser$1 = PlatformDetection$1.detect().browser;\n    var firstElement = function (nodes) {\n      return find(nodes, isElement);\n    };\n    var getTableCaptionDeltaY = function (elm) {\n      if (browser$1.isFirefox() && name(elm) === 'table') {\n        return firstElement(children(elm)).filter(function (elm) {\n          return name(elm) === 'caption';\n        }).bind(function (caption) {\n          return firstElement(nextSiblings(caption)).map(function (body) {\n            var bodyTop = body.dom().offsetTop;\n            var captionTop = caption.dom().offsetTop;\n            var captionHeight = caption.dom().offsetHeight;\n            return bodyTop <= captionTop ? -captionHeight : 0;\n          });\n        }).getOr(0);\n      } else {\n        return 0;\n      }\n    };\n    var getPos = function (body, elm, rootElm) {\n      var x = 0, y = 0, offsetParent;\n      var doc = body.ownerDocument;\n      var pos;\n      rootElm = rootElm ? rootElm : body;\n      if (elm) {\n        if (rootElm === body && elm.getBoundingClientRect && get$1(Element.fromDom(body), 'position') === 'static') {\n          pos = elm.getBoundingClientRect();\n          x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft;\n          y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop;\n          return {\n            x: x,\n            y: y\n          };\n        }\n        offsetParent = elm;\n        while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) {\n          x += offsetParent.offsetLeft || 0;\n          y += offsetParent.offsetTop || 0;\n          offsetParent = offsetParent.offsetParent;\n        }\n        offsetParent = elm.parentNode;\n        while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) {\n          x -= offsetParent.scrollLeft || 0;\n          y -= offsetParent.scrollTop || 0;\n          offsetParent = offsetParent.parentNode;\n        }\n        y += getTableCaptionDeltaY(Element.fromDom(elm));\n      }\n      return {\n        x: x,\n        y: y\n      };\n    };\n    var Position = { getPos: getPos };\n\n    var exports$1 = {}, module$1 = { exports: exports$1 };\n    (function (define, exports, module, require) {\n      (function (f) {\n        if (typeof exports === 'object' && typeof module !== 'undefined') {\n          module.exports = f();\n        } else if (typeof define === 'function' && define.amd) {\n          define([], f);\n        } else {\n          var g;\n          if (typeof window !== 'undefined') {\n            g = window;\n          } else if (typeof global !== 'undefined') {\n            g = global;\n          } else if (typeof self !== 'undefined') {\n            g = self;\n          } else {\n            g = this;\n          }\n          g.EphoxContactWrapper = f();\n        }\n      }(function () {\n        return function () {\n          function r(e, n, t) {\n            function o(i, f) {\n              if (!n[i]) {\n                if (!e[i]) {\n                  var c = 'function' == typeof require && require;\n                  if (!f && c)\n                    return c(i, !0);\n                  if (u)\n                    return u(i, !0);\n                  var a = new Error('Cannot find module \\'' + i + '\\'');\n                  throw a.code = 'MODULE_NOT_FOUND', a;\n                }\n                var p = n[i] = { exports: {} };\n                e[i][0].call(p.exports, function (r) {\n                  var n = e[i][1][r];\n                  return o(n || r);\n                }, p, p.exports, r, e, n, t);\n              }\n              return n[i].exports;\n            }\n            for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)\n              o(t[i]);\n            return o;\n          }\n          return r;\n        }()({\n          1: [\n            function (require, module, exports) {\n              var process = module.exports = {};\n              var cachedSetTimeout;\n              var cachedClearTimeout;\n              function defaultSetTimout() {\n                throw new Error('setTimeout has not been defined');\n              }\n              function defaultClearTimeout() {\n                throw new Error('clearTimeout has not been defined');\n              }\n              (function () {\n                try {\n                  if (typeof setTimeout === 'function') {\n                    cachedSetTimeout = setTimeout;\n                  } else {\n                    cachedSetTimeout = defaultSetTimout;\n                  }\n                } catch (e) {\n                  cachedSetTimeout = defaultSetTimout;\n                }\n                try {\n                  if (typeof clearTimeout === 'function') {\n                    cachedClearTimeout = clearTimeout;\n                  } else {\n                    cachedClearTimeout = defaultClearTimeout;\n                  }\n                } catch (e) {\n                  cachedClearTimeout = defaultClearTimeout;\n                }\n              }());\n              function runTimeout(fun) {\n                if (cachedSetTimeout === setTimeout) {\n                  return setTimeout(fun, 0);\n                }\n                if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n                  cachedSetTimeout = setTimeout;\n                  return setTimeout(fun, 0);\n                }\n                try {\n                  return cachedSetTimeout(fun, 0);\n                } catch (e) {\n                  try {\n                    return cachedSetTimeout.call(null, fun, 0);\n                  } catch (e) {\n                    return cachedSetTimeout.call(this, fun, 0);\n                  }\n                }\n              }\n              function runClearTimeout(marker) {\n                if (cachedClearTimeout === clearTimeout) {\n                  return clearTimeout(marker);\n                }\n                if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n                  cachedClearTimeout = clearTimeout;\n                  return clearTimeout(marker);\n                }\n                try {\n                  return cachedClearTimeout(marker);\n                } catch (e) {\n                  try {\n                    return cachedClearTimeout.call(null, marker);\n                  } catch (e) {\n                    return cachedClearTimeout.call(this, marker);\n                  }\n                }\n              }\n              var queue = [];\n              var draining = false;\n              var currentQueue;\n              var queueIndex = -1;\n              function cleanUpNextTick() {\n                if (!draining || !currentQueue) {\n                  return;\n                }\n                draining = false;\n                if (currentQueue.length) {\n                  queue = currentQueue.concat(queue);\n                } else {\n                  queueIndex = -1;\n                }\n                if (queue.length) {\n                  drainQueue();\n                }\n              }\n              function drainQueue() {\n                if (draining) {\n                  return;\n                }\n                var timeout = runTimeout(cleanUpNextTick);\n                draining = true;\n                var len = queue.length;\n                while (len) {\n                  currentQueue = queue;\n                  queue = [];\n                  while (++queueIndex < len) {\n                    if (currentQueue) {\n                      currentQueue[queueIndex].run();\n                    }\n                  }\n                  queueIndex = -1;\n                  len = queue.length;\n                }\n                currentQueue = null;\n                draining = false;\n                runClearTimeout(timeout);\n              }\n              process.nextTick = function (fun) {\n                var args = new Array(arguments.length - 1);\n                if (arguments.length > 1) {\n                  for (var i = 1; i < arguments.length; i++) {\n                    args[i - 1] = arguments[i];\n                  }\n                }\n                queue.push(new Item(fun, args));\n                if (queue.length === 1 && !draining) {\n                  runTimeout(drainQueue);\n                }\n              };\n              function Item(fun, array) {\n                this.fun = fun;\n                this.array = array;\n              }\n              Item.prototype.run = function () {\n                this.fun.apply(null, this.array);\n              };\n              process.title = 'browser';\n              process.browser = true;\n              process.env = {};\n              process.argv = [];\n              process.version = '';\n              process.versions = {};\n              function noop() {\n              }\n              process.on = noop;\n              process.addListener = noop;\n              process.once = noop;\n              process.off = noop;\n              process.removeListener = noop;\n              process.removeAllListeners = noop;\n              process.emit = noop;\n              process.prependListener = noop;\n              process.prependOnceListener = noop;\n              process.listeners = function (name) {\n                return [];\n              };\n              process.binding = function (name) {\n                throw new Error('process.binding is not supported');\n              };\n              process.cwd = function () {\n                return '/';\n              };\n              process.chdir = function (dir) {\n                throw new Error('process.chdir is not supported');\n              };\n              process.umask = function () {\n                return 0;\n              };\n            },\n            {}\n          ],\n          2: [\n            function (require, module, exports) {\n              (function (setImmediate) {\n                (function (root) {\n                  var setTimeoutFunc = setTimeout;\n                  function noop() {\n                  }\n                  function bind(fn, thisArg) {\n                    return function () {\n                      fn.apply(thisArg, arguments);\n                    };\n                  }\n                  function Promise(fn) {\n                    if (typeof this !== 'object')\n                      throw new TypeError('Promises must be constructed via new');\n                    if (typeof fn !== 'function')\n                      throw new TypeError('not a function');\n                    this._state = 0;\n                    this._handled = false;\n                    this._value = undefined;\n                    this._deferreds = [];\n                    doResolve(fn, this);\n                  }\n                  function handle(self, deferred) {\n                    while (self._state === 3) {\n                      self = self._value;\n                    }\n                    if (self._state === 0) {\n                      self._deferreds.push(deferred);\n                      return;\n                    }\n                    self._handled = true;\n                    Promise._immediateFn(function () {\n                      var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n                      if (cb === null) {\n                        (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n                        return;\n                      }\n                      var ret;\n                      try {\n                        ret = cb(self._value);\n                      } catch (e) {\n                        reject(deferred.promise, e);\n                        return;\n                      }\n                      resolve(deferred.promise, ret);\n                    });\n                  }\n                  function resolve(self, newValue) {\n                    try {\n                      if (newValue === self)\n                        throw new TypeError('A promise cannot be resolved with itself.');\n                      if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n                        var then = newValue.then;\n                        if (newValue instanceof Promise) {\n                          self._state = 3;\n                          self._value = newValue;\n                          finale(self);\n                          return;\n                        } else if (typeof then === 'function') {\n                          doResolve(bind(then, newValue), self);\n                          return;\n                        }\n                      }\n                      self._state = 1;\n                      self._value = newValue;\n                      finale(self);\n                    } catch (e) {\n                      reject(self, e);\n                    }\n                  }\n                  function reject(self, newValue) {\n                    self._state = 2;\n                    self._value = newValue;\n                    finale(self);\n                  }\n                  function finale(self) {\n                    if (self._state === 2 && self._deferreds.length === 0) {\n                      Promise._immediateFn(function () {\n                        if (!self._handled) {\n                          Promise._unhandledRejectionFn(self._value);\n                        }\n                      });\n                    }\n                    for (var i = 0, len = self._deferreds.length; i < len; i++) {\n                      handle(self, self._deferreds[i]);\n                    }\n                    self._deferreds = null;\n                  }\n                  function Handler(onFulfilled, onRejected, promise) {\n                    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n                    this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n                    this.promise = promise;\n                  }\n                  function doResolve(fn, self) {\n                    var done = false;\n                    try {\n                      fn(function (value) {\n                        if (done)\n                          return;\n                        done = true;\n                        resolve(self, value);\n                      }, function (reason) {\n                        if (done)\n                          return;\n                        done = true;\n                        reject(self, reason);\n                      });\n                    } catch (ex) {\n                      if (done)\n                        return;\n                      done = true;\n                      reject(self, ex);\n                    }\n                  }\n                  Promise.prototype['catch'] = function (onRejected) {\n                    return this.then(null, onRejected);\n                  };\n                  Promise.prototype.then = function (onFulfilled, onRejected) {\n                    var prom = new this.constructor(noop);\n                    handle(this, new Handler(onFulfilled, onRejected, prom));\n                    return prom;\n                  };\n                  Promise.all = function (arr) {\n                    var args = Array.prototype.slice.call(arr);\n                    return new Promise(function (resolve, reject) {\n                      if (args.length === 0)\n                        return resolve([]);\n                      var remaining = args.length;\n                      function res(i, val) {\n                        try {\n                          if (val && (typeof val === 'object' || typeof val === 'function')) {\n                            var then = val.then;\n                            if (typeof then === 'function') {\n                              then.call(val, function (val) {\n                                res(i, val);\n                              }, reject);\n                              return;\n                            }\n                          }\n                          args[i] = val;\n                          if (--remaining === 0) {\n                            resolve(args);\n                          }\n                        } catch (ex) {\n                          reject(ex);\n                        }\n                      }\n                      for (var i = 0; i < args.length; i++) {\n                        res(i, args[i]);\n                      }\n                    });\n                  };\n                  Promise.resolve = function (value) {\n                    if (value && typeof value === 'object' && value.constructor === Promise) {\n                      return value;\n                    }\n                    return new Promise(function (resolve) {\n                      resolve(value);\n                    });\n                  };\n                  Promise.reject = function (value) {\n                    return new Promise(function (resolve, reject) {\n                      reject(value);\n                    });\n                  };\n                  Promise.race = function (values) {\n                    return new Promise(function (resolve, reject) {\n                      for (var i = 0, len = values.length; i < len; i++) {\n                        values[i].then(resolve, reject);\n                      }\n                    });\n                  };\n                  Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\n                    setImmediate(fn);\n                  } : function (fn) {\n                    setTimeoutFunc(fn, 0);\n                  };\n                  Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n                    if (typeof console !== 'undefined' && console) {\n                      console.warn('Possible Unhandled Promise Rejection:', err);\n                    }\n                  };\n                  Promise._setImmediateFn = function _setImmediateFn(fn) {\n                    Promise._immediateFn = fn;\n                  };\n                  Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n                    Promise._unhandledRejectionFn = fn;\n                  };\n                  if (typeof module !== 'undefined' && module.exports) {\n                    module.exports = Promise;\n                  } else if (!root.Promise) {\n                    root.Promise = Promise;\n                  }\n                }(this));\n              }.call(this, require('timers').setImmediate));\n            },\n            { 'timers': 3 }\n          ],\n          3: [\n            function (require, module, exports) {\n              (function (setImmediate, clearImmediate) {\n                var nextTick = require('process/browser.js').nextTick;\n                var apply = Function.prototype.apply;\n                var slice = Array.prototype.slice;\n                var immediateIds = {};\n                var nextImmediateId = 0;\n                exports.setTimeout = function () {\n                  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n                };\n                exports.setInterval = function () {\n                  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n                };\n                exports.clearTimeout = exports.clearInterval = function (timeout) {\n                  timeout.close();\n                };\n                function Timeout(id, clearFn) {\n                  this._id = id;\n                  this._clearFn = clearFn;\n                }\n                Timeout.prototype.unref = Timeout.prototype.ref = function () {\n                };\n                Timeout.prototype.close = function () {\n                  this._clearFn.call(window, this._id);\n                };\n                exports.enroll = function (item, msecs) {\n                  clearTimeout(item._idleTimeoutId);\n                  item._idleTimeout = msecs;\n                };\n                exports.unenroll = function (item) {\n                  clearTimeout(item._idleTimeoutId);\n                  item._idleTimeout = -1;\n                };\n                exports._unrefActive = exports.active = function (item) {\n                  clearTimeout(item._idleTimeoutId);\n                  var msecs = item._idleTimeout;\n                  if (msecs >= 0) {\n                    item._idleTimeoutId = setTimeout(function onTimeout() {\n                      if (item._onTimeout)\n                        item._onTimeout();\n                    }, msecs);\n                  }\n                };\n                exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {\n                  var id = nextImmediateId++;\n                  var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n                  immediateIds[id] = true;\n                  nextTick(function onNextTick() {\n                    if (immediateIds[id]) {\n                      if (args) {\n                        fn.apply(null, args);\n                      } else {\n                        fn.call(null);\n                      }\n                      exports.clearImmediate(id);\n                    }\n                  });\n                  return id;\n                };\n                exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {\n                  delete immediateIds[id];\n                };\n              }.call(this, require('timers').setImmediate, require('timers').clearImmediate));\n            },\n            {\n              'process/browser.js': 1,\n              'timers': 3\n            }\n          ],\n          4: [\n            function (require, module, exports) {\n              var promisePolyfill = require('promise-polyfill');\n              var Global = function () {\n                if (typeof window !== 'undefined') {\n                  return window;\n                } else {\n                  return Function('return this;')();\n                }\n              }();\n              module.exports = { boltExport: Global.Promise || promisePolyfill };\n            },\n            { 'promise-polyfill': 2 }\n          ]\n        }, {}, [4])(4);\n      }));\n    }(undefined, exports$1, module$1, undefined));\n    var Promise = module$1.exports.boltExport;\n\n    var nu$3 = function (baseFn) {\n      var data = Option.none();\n      var callbacks = [];\n      var map = function (f) {\n        return nu$3(function (nCallback) {\n          get(function (data) {\n            nCallback(f(data));\n          });\n        });\n      };\n      var get = function (nCallback) {\n        if (isReady()) {\n          call(nCallback);\n        } else {\n          callbacks.push(nCallback);\n        }\n      };\n      var set = function (x) {\n        data = Option.some(x);\n        run(callbacks);\n        callbacks = [];\n      };\n      var isReady = function () {\n        return data.isSome();\n      };\n      var run = function (cbs) {\n        each(cbs, call);\n      };\n      var call = function (cb) {\n        data.each(function (x) {\n          domGlobals.setTimeout(function () {\n            cb(x);\n          }, 0);\n        });\n      };\n      baseFn(set);\n      return {\n        get: get,\n        map: map,\n        isReady: isReady\n      };\n    };\n    var pure = function (a) {\n      return nu$3(function (callback) {\n        callback(a);\n      });\n    };\n    var LazyValue = {\n      nu: nu$3,\n      pure: pure\n    };\n\n    var errorReporter = function (err) {\n      domGlobals.setTimeout(function () {\n        throw err;\n      }, 0);\n    };\n    var make = function (run) {\n      var get = function (callback) {\n        run().then(callback, errorReporter);\n      };\n      var map = function (fab) {\n        return make(function () {\n          return run().then(fab);\n        });\n      };\n      var bind = function (aFutureB) {\n        return make(function () {\n          return run().then(function (v) {\n            return aFutureB(v).toPromise();\n          });\n        });\n      };\n      var anonBind = function (futureB) {\n        return make(function () {\n          return run().then(function () {\n            return futureB.toPromise();\n          });\n        });\n      };\n      var toLazy = function () {\n        return LazyValue.nu(get);\n      };\n      var toCached = function () {\n        var cache = null;\n        return make(function () {\n          if (cache === null) {\n            cache = run();\n          }\n          return cache;\n        });\n      };\n      var toPromise = run;\n      return {\n        map: map,\n        bind: bind,\n        anonBind: anonBind,\n        toLazy: toLazy,\n        toCached: toCached,\n        toPromise: toPromise,\n        get: get\n      };\n    };\n    var nu$4 = function (baseFn) {\n      return make(function () {\n        return new Promise(baseFn);\n      });\n    };\n    var pure$1 = function (a) {\n      return make(function () {\n        return Promise.resolve(a);\n      });\n    };\n    var Future = {\n      nu: nu$4,\n      pure: pure$1\n    };\n\n    var par = function (asyncValues, nu) {\n      return nu(function (callback) {\n        var r = [];\n        var count = 0;\n        var cb = function (i) {\n          return function (value) {\n            r[i] = value;\n            count++;\n            if (count >= asyncValues.length) {\n              callback(r);\n            }\n          };\n        };\n        if (asyncValues.length === 0) {\n          callback([]);\n        } else {\n          each(asyncValues, function (asyncValue, i) {\n            asyncValue.get(cb(i));\n          });\n        }\n      });\n    };\n\n    var par$1 = function (futures) {\n      return par(futures, Future.nu);\n    };\n\n    var value = function (o) {\n      var is = function (v) {\n        return o === v;\n      };\n      var or = function (opt) {\n        return value(o);\n      };\n      var orThunk = function (f) {\n        return value(o);\n      };\n      var map = function (f) {\n        return value(f(o));\n      };\n      var mapError = function (f) {\n        return value(o);\n      };\n      var each = function (f) {\n        f(o);\n      };\n      var bind = function (f) {\n        return f(o);\n      };\n      var fold = function (_, onValue) {\n        return onValue(o);\n      };\n      var exists = function (f) {\n        return f(o);\n      };\n      var forall = function (f) {\n        return f(o);\n      };\n      var toOption = function () {\n        return Option.some(o);\n      };\n      return {\n        is: is,\n        isValue: always,\n        isError: never,\n        getOr: constant(o),\n        getOrThunk: constant(o),\n        getOrDie: constant(o),\n        or: or,\n        orThunk: orThunk,\n        fold: fold,\n        map: map,\n        mapError: mapError,\n        each: each,\n        bind: bind,\n        exists: exists,\n        forall: forall,\n        toOption: toOption\n      };\n    };\n    var error = function (message) {\n      var getOrThunk = function (f) {\n        return f();\n      };\n      var getOrDie = function () {\n        return die(String(message))();\n      };\n      var or = function (opt) {\n        return opt;\n      };\n      var orThunk = function (f) {\n        return f();\n      };\n      var map = function (f) {\n        return error(message);\n      };\n      var mapError = function (f) {\n        return error(f(message));\n      };\n      var bind = function (f) {\n        return error(message);\n      };\n      var fold = function (onError, _) {\n        return onError(message);\n      };\n      return {\n        is: never,\n        isValue: never,\n        isError: always,\n        getOr: identity,\n        getOrThunk: getOrThunk,\n        getOrDie: getOrDie,\n        or: or,\n        orThunk: orThunk,\n        fold: fold,\n        map: map,\n        mapError: mapError,\n        each: noop,\n        bind: bind,\n        exists: never,\n        forall: always,\n        toOption: Option.none\n      };\n    };\n    var fromOption = function (opt, err) {\n      return opt.fold(function () {\n        return error(err);\n      }, value);\n    };\n    var Result = {\n      value: value,\n      error: error,\n      fromOption: fromOption\n    };\n\n    function StyleSheetLoader(document, settings) {\n      if (settings === void 0) {\n        settings = {};\n      }\n      var idCount = 0;\n      var loadedStates = {};\n      var maxLoadTime;\n      maxLoadTime = settings.maxLoadTime || 5000;\n      var appendToHead = function (node) {\n        document.getElementsByTagName('head')[0].appendChild(node);\n      };\n      var load = function (url, loadedCallback, errorCallback) {\n        var link, style, startTime, state;\n        var passed = function () {\n          var callbacks = state.passed;\n          var i = callbacks.length;\n          while (i--) {\n            callbacks[i]();\n          }\n          state.status = 2;\n          state.passed = [];\n          state.failed = [];\n        };\n        var failed = function () {\n          var callbacks = state.failed;\n          var i = callbacks.length;\n          while (i--) {\n            callbacks[i]();\n          }\n          state.status = 3;\n          state.passed = [];\n          state.failed = [];\n        };\n        var isOldWebKit = function () {\n          var webKitChunks = domGlobals.navigator.userAgent.match(/WebKit\\/(\\d*)/);\n          return !!(webKitChunks && parseInt(webKitChunks[1], 10) < 536);\n        };\n        var wait = function (testCallback, waitCallback) {\n          if (!testCallback()) {\n            if (new Date().getTime() - startTime < maxLoadTime) {\n              Delay.setTimeout(waitCallback);\n            } else {\n              failed();\n            }\n          }\n        };\n        var waitForWebKitLinkLoaded = function () {\n          wait(function () {\n            var styleSheets = document.styleSheets;\n            var styleSheet, i = styleSheets.length, owner;\n            while (i--) {\n              styleSheet = styleSheets[i];\n              owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement;\n              if (owner && owner.id === link.id) {\n                passed();\n                return true;\n              }\n            }\n          }, waitForWebKitLinkLoaded);\n        };\n        var waitForGeckoLinkLoaded = function () {\n          wait(function () {\n            try {\n              var cssRules = style.sheet.cssRules;\n              passed();\n              return !!cssRules;\n            } catch (ex) {\n            }\n          }, waitForGeckoLinkLoaded);\n        };\n        url = Tools._addCacheSuffix(url);\n        if (!loadedStates[url]) {\n          state = {\n            passed: [],\n            failed: []\n          };\n          loadedStates[url] = state;\n        } else {\n          state = loadedStates[url];\n        }\n        if (loadedCallback) {\n          state.passed.push(loadedCallback);\n        }\n        if (errorCallback) {\n          state.failed.push(errorCallback);\n        }\n        if (state.status === 1) {\n          return;\n        }\n        if (state.status === 2) {\n          passed();\n          return;\n        }\n        if (state.status === 3) {\n          failed();\n          return;\n        }\n        state.status = 1;\n        link = document.createElement('link');\n        link.rel = 'stylesheet';\n        link.type = 'text/css';\n        link.id = 'u' + idCount++;\n        link.async = false;\n        link.defer = false;\n        startTime = new Date().getTime();\n        if (settings.contentCssCors) {\n          link.crossOrigin = 'anonymous';\n        }\n        if ('onload' in link && !isOldWebKit()) {\n          link.onload = waitForWebKitLinkLoaded;\n          link.onerror = failed;\n        } else {\n          if (domGlobals.navigator.userAgent.indexOf('Firefox') > 0) {\n            style = document.createElement('style');\n            style.textContent = '@import \"' + url + '\"';\n            waitForGeckoLinkLoaded();\n            appendToHead(style);\n            return;\n          }\n          waitForWebKitLinkLoaded();\n        }\n        appendToHead(link);\n        link.href = url;\n      };\n      var loadF = function (url) {\n        return Future.nu(function (resolve) {\n          load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));\n        });\n      };\n      var unbox = function (result) {\n        return result.fold(identity, identity);\n      };\n      var loadAll = function (urls, success, failure) {\n        par$1(map(urls, loadF)).get(function (result) {\n          var parts = partition(result, function (r) {\n            return r.isValue();\n          });\n          if (parts.fail.length > 0) {\n            failure(parts.fail.map(unbox));\n          } else {\n            success(parts.pass.map(unbox));\n          }\n        });\n      };\n      return {\n        load: load,\n        loadAll: loadAll\n      };\n    }\n\n    function TreeWalker (startNode, rootNode) {\n      var node = startNode;\n      var findSibling = function (node, startName, siblingName, shallow) {\n        var sibling, parent;\n        if (node) {\n          if (!shallow && node[startName]) {\n            return node[startName];\n          }\n          if (node !== rootNode) {\n            sibling = node[siblingName];\n            if (sibling) {\n              return sibling;\n            }\n            for (parent = node.parentNode; parent && parent !== rootNode; parent = parent.parentNode) {\n              sibling = parent[siblingName];\n              if (sibling) {\n                return sibling;\n              }\n            }\n          }\n        }\n      };\n      var findPreviousNode = function (node, startName, siblingName, shallow) {\n        var sibling, parent, child;\n        if (node) {\n          sibling = node[siblingName];\n          if (rootNode && sibling === rootNode) {\n            return;\n          }\n          if (sibling) {\n            if (!shallow) {\n              for (child = sibling[startName]; child; child = child[startName]) {\n                if (!child[startName]) {\n                  return child;\n                }\n              }\n            }\n            return sibling;\n          }\n          parent = node.parentNode;\n          if (parent && parent !== rootNode) {\n            return parent;\n          }\n        }\n      };\n      this.current = function () {\n        return node;\n      };\n      this.next = function (shallow) {\n        node = findSibling(node, 'firstChild', 'nextSibling', shallow);\n        return node;\n      };\n      this.prev = function (shallow) {\n        node = findSibling(node, 'lastChild', 'previousSibling', shallow);\n        return node;\n      };\n      this.prev2 = function (shallow) {\n        node = findPreviousNode(node, 'lastChild', 'previousSibling', shallow);\n        return node;\n      };\n    }\n\n    var blocks = [\n      'article',\n      'aside',\n      'details',\n      'div',\n      'dt',\n      'figcaption',\n      'footer',\n      'form',\n      'fieldset',\n      'header',\n      'hgroup',\n      'html',\n      'main',\n      'nav',\n      'section',\n      'summary',\n      'body',\n      'p',\n      'dl',\n      'multicol',\n      'dd',\n      'figure',\n      'address',\n      'center',\n      'blockquote',\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'listing',\n      'xmp',\n      'pre',\n      'plaintext',\n      'menu',\n      'dir',\n      'ul',\n      'ol',\n      'li',\n      'hr',\n      'table',\n      'tbody',\n      'thead',\n      'tfoot',\n      'th',\n      'tr',\n      'td',\n      'caption'\n    ];\n    var voids = [\n      'area',\n      'base',\n      'basefont',\n      'br',\n      'col',\n      'frame',\n      'hr',\n      'img',\n      'input',\n      'isindex',\n      'link',\n      'meta',\n      'param',\n      'embed',\n      'source',\n      'wbr',\n      'track'\n    ];\n    var tableCells = [\n      'td',\n      'th'\n    ];\n    var tableSections = [\n      'thead',\n      'tbody',\n      'tfoot'\n    ];\n    var textBlocks = [\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'p',\n      'div',\n      'address',\n      'pre',\n      'form',\n      'blockquote',\n      'center',\n      'dir',\n      'fieldset',\n      'header',\n      'footer',\n      'article',\n      'section',\n      'hgroup',\n      'aside',\n      'nav',\n      'figure'\n    ];\n    var headings = [\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6'\n    ];\n    var listItems = [\n      'li',\n      'dd',\n      'dt'\n    ];\n    var lists = [\n      'ul',\n      'ol',\n      'dl'\n    ];\n    var wsElements = [\n      'pre',\n      'script',\n      'textarea',\n      'style'\n    ];\n    var lazyLookup = function (items) {\n      var lookup;\n      return function (node) {\n        lookup = lookup ? lookup : mapToObject(items, constant(true));\n        return lookup.hasOwnProperty(name(node));\n      };\n    };\n    var isHeading = lazyLookup(headings);\n    var isBlock = lazyLookup(blocks);\n    var isInline = function (node) {\n      return isElement(node) && !isBlock(node);\n    };\n    var isBr = function (node) {\n      return isElement(node) && name(node) === 'br';\n    };\n    var isTextBlock = lazyLookup(textBlocks);\n    var isList = lazyLookup(lists);\n    var isListItem = lazyLookup(listItems);\n    var isVoid = lazyLookup(voids);\n    var isTableSection = lazyLookup(tableSections);\n    var isTableCell = lazyLookup(tableCells);\n    var isWsPreserveElement = lazyLookup(wsElements);\n\n    var isNodeType = function (type) {\n      return function (node) {\n        return !!node && node.nodeType === type;\n      };\n    };\n    var isRestrictedNode = function (node) {\n      return !!node && !Object.getPrototypeOf(node);\n    };\n    var isElement$1 = isNodeType(1);\n    var matchNodeNames = function (names) {\n      var items = names.toLowerCase().split(' ');\n      return function (node) {\n        var i, name;\n        if (node && node.nodeType) {\n          name = node.nodeName.toLowerCase();\n          for (i = 0; i < items.length; i++) {\n            if (name === items[i]) {\n              return true;\n            }\n          }\n        }\n        return false;\n      };\n    };\n    var matchStyleValues = function (name, values) {\n      var items = values.toLowerCase().split(' ');\n      return function (node) {\n        var i, cssValue;\n        if (isElement$1(node)) {\n          for (i = 0; i < items.length; i++) {\n            var computed = node.ownerDocument.defaultView.getComputedStyle(node, null);\n            cssValue = computed ? computed.getPropertyValue(name) : null;\n            if (cssValue === items[i]) {\n              return true;\n            }\n          }\n        }\n        return false;\n      };\n    };\n    var hasPropValue = function (propName, propValue) {\n      return function (node) {\n        return isElement$1(node) && node[propName] === propValue;\n      };\n    };\n    var hasAttribute = function (attrName, attrValue) {\n      return function (node) {\n        return isElement$1(node) && node.hasAttribute(attrName);\n      };\n    };\n    var hasAttributeValue = function (attrName, attrValue) {\n      return function (node) {\n        return isElement$1(node) && node.getAttribute(attrName) === attrValue;\n      };\n    };\n    var isBogus = function (node) {\n      return isElement$1(node) && node.hasAttribute('data-mce-bogus');\n    };\n    var isBogusAll = function (node) {\n      return isElement$1(node) && node.getAttribute('data-mce-bogus') === 'all';\n    };\n    var isTable = function (node) {\n      return isElement$1(node) && node.tagName === 'TABLE';\n    };\n    var hasContentEditableState = function (value) {\n      return function (node) {\n        if (isElement$1(node)) {\n          if (node.contentEditable === value) {\n            return true;\n          }\n          if (node.getAttribute('data-mce-contenteditable') === value) {\n            return true;\n          }\n        }\n        return false;\n      };\n    };\n    var isText$1 = isNodeType(3);\n    var isComment = isNodeType(8);\n    var isDocument = isNodeType(9);\n    var isDocumentFragment = isNodeType(11);\n    var isBr$1 = matchNodeNames('br');\n    var isContentEditableTrue = hasContentEditableState('true');\n    var isContentEditableFalse = hasContentEditableState('false');\n    var NodeType = {\n      isText: isText$1,\n      isElement: isElement$1,\n      isComment: isComment,\n      isDocument: isDocument,\n      isDocumentFragment: isDocumentFragment,\n      isBr: isBr$1,\n      isContentEditableTrue: isContentEditableTrue,\n      isContentEditableFalse: isContentEditableFalse,\n      isRestrictedNode: isRestrictedNode,\n      matchNodeNames: matchNodeNames,\n      hasPropValue: hasPropValue,\n      hasAttribute: hasAttribute,\n      hasAttributeValue: hasAttributeValue,\n      matchStyleValues: matchStyleValues,\n      isBogus: isBogus,\n      isBogusAll: isBogusAll,\n      isTable: isTable\n    };\n\n    var surroundedBySpans = function (node) {\n      var previousIsSpan = node.previousSibling && node.previousSibling.nodeName === 'SPAN';\n      var nextIsSpan = node.nextSibling && node.nextSibling.nodeName === 'SPAN';\n      return previousIsSpan && nextIsSpan;\n    };\n    var isBookmarkNode = function (node) {\n      return node && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n    };\n    var trimNode = function (dom, node) {\n      var i, children = node.childNodes;\n      if (NodeType.isElement(node) && isBookmarkNode(node)) {\n        return;\n      }\n      for (i = children.length - 1; i >= 0; i--) {\n        trimNode(dom, children[i]);\n      }\n      if (NodeType.isDocument(node) === false) {\n        if (NodeType.isText(node) && node.nodeValue.length > 0) {\n          var trimmedLength = Tools.trim(node.nodeValue).length;\n          if (dom.isBlock(node.parentNode) || trimmedLength > 0) {\n            return;\n          }\n          if (trimmedLength === 0 && surroundedBySpans(node)) {\n            return;\n          }\n        } else if (NodeType.isElement(node)) {\n          children = node.childNodes;\n          if (children.length === 1 && isBookmarkNode(children[0])) {\n            node.parentNode.insertBefore(children[0], node);\n          }\n          if (children.length || isVoid(Element.fromDom(node))) {\n            return;\n          }\n        }\n        dom.remove(node);\n      }\n      return node;\n    };\n    var TrimNode = { trimNode: trimNode };\n\n    var makeMap$1 = Tools.makeMap;\n    var namedEntities, baseEntities, reverseEntities;\n    var attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n    var textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n    var rawCharsRegExp = /[<>&\\\"\\']/g;\n    var entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n    var asciiMap = {\n      128: '\\u20AC',\n      130: '\\u201A',\n      131: '\\u0192',\n      132: '\\u201E',\n      133: '\\u2026',\n      134: '\\u2020',\n      135: '\\u2021',\n      136: '\\u02c6',\n      137: '\\u2030',\n      138: '\\u0160',\n      139: '\\u2039',\n      140: '\\u0152',\n      142: '\\u017d',\n      145: '\\u2018',\n      146: '\\u2019',\n      147: '\\u201C',\n      148: '\\u201D',\n      149: '\\u2022',\n      150: '\\u2013',\n      151: '\\u2014',\n      152: '\\u02DC',\n      153: '\\u2122',\n      154: '\\u0161',\n      155: '\\u203A',\n      156: '\\u0153',\n      158: '\\u017e',\n      159: '\\u0178'\n    };\n    baseEntities = {\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '&': '&amp;',\n      '`': '&#96;'\n    };\n    reverseEntities = {\n      '&lt;': '<',\n      '&gt;': '>',\n      '&amp;': '&',\n      '&quot;': '\"',\n      '&apos;': '\\''\n    };\n    var nativeDecode = function (text) {\n      var elm;\n      elm = Element.fromTag('div').dom();\n      elm.innerHTML = text;\n      return elm.textContent || elm.innerText || text;\n    };\n    var buildEntitiesLookup = function (items, radix) {\n      var i, chr, entity;\n      var lookup = {};\n      if (items) {\n        items = items.split(',');\n        radix = radix || 10;\n        for (i = 0; i < items.length; i += 2) {\n          chr = String.fromCharCode(parseInt(items[i], radix));\n          if (!baseEntities[chr]) {\n            entity = '&' + items[i + 1] + ';';\n            lookup[chr] = entity;\n            lookup[entity] = chr;\n          }\n        }\n        return lookup;\n      }\n    };\n    namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);\n    var encodeRaw = function (text, attr) {\n      return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n        return baseEntities[chr] || chr;\n      });\n    };\n    var encodeAllRaw = function (text) {\n      return ('' + text).replace(rawCharsRegExp, function (chr) {\n        return baseEntities[chr] || chr;\n      });\n    };\n    var encodeNumeric = function (text, attr) {\n      return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n        if (chr.length > 1) {\n          return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n        }\n        return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\n      });\n    };\n    var encodeNamed = function (text, attr, entities) {\n      entities = entities || namedEntities;\n      return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n        return baseEntities[chr] || entities[chr] || chr;\n      });\n    };\n    var getEncodeFunc = function (name, entities) {\n      var entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n      var encodeNamedAndNumeric = function (text, attr) {\n        return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n          if (baseEntities[chr] !== undefined) {\n            return baseEntities[chr];\n          }\n          if (entitiesMap[chr] !== undefined) {\n            return entitiesMap[chr];\n          }\n          if (chr.length > 1) {\n            return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n          }\n          return '&#' + chr.charCodeAt(0) + ';';\n        });\n      };\n      var encodeCustomNamed = function (text, attr) {\n        return encodeNamed(text, attr, entitiesMap);\n      };\n      var nameMap = makeMap$1(name.replace(/\\+/g, ','));\n      if (nameMap.named && nameMap.numeric) {\n        return encodeNamedAndNumeric;\n      }\n      if (nameMap.named) {\n        if (entities) {\n          return encodeCustomNamed;\n        }\n        return encodeNamed;\n      }\n      if (nameMap.numeric) {\n        return encodeNumeric;\n      }\n      return encodeRaw;\n    };\n    var decode = function (text) {\n      return text.replace(entityRegExp, function (all, numeric) {\n        if (numeric) {\n          if (numeric.charAt(0).toLowerCase() === 'x') {\n            numeric = parseInt(numeric.substr(1), 16);\n          } else {\n            numeric = parseInt(numeric, 10);\n          }\n          if (numeric > 65535) {\n            numeric -= 65536;\n            return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\n          }\n          return asciiMap[numeric] || String.fromCharCode(numeric);\n        }\n        return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\n      });\n    };\n    var Entities = {\n      encodeRaw: encodeRaw,\n      encodeAllRaw: encodeAllRaw,\n      encodeNumeric: encodeNumeric,\n      encodeNamed: encodeNamed,\n      getEncodeFunc: getEncodeFunc,\n      decode: decode\n    };\n\n    var mapCache = {}, dummyObj = {};\n    var makeMap$2 = Tools.makeMap, each$4 = Tools.each, extend$1 = Tools.extend, explode$1 = Tools.explode, inArray$1 = Tools.inArray;\n    var split = function (items, delim) {\n      items = Tools.trim(items);\n      return items ? items.split(delim || ' ') : [];\n    };\n    var compileSchema = function (type) {\n      var schema = {};\n      var globalAttributes, blockContent;\n      var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent;\n      var add = function (name, attributes, children) {\n        var ni, attributesOrder, element;\n        var arrayToMap = function (array, obj) {\n          var map = {};\n          var i, l;\n          for (i = 0, l = array.length; i < l; i++) {\n            map[array[i]] = obj || {};\n          }\n          return map;\n        };\n        children = children || [];\n        attributes = attributes || '';\n        if (typeof children === 'string') {\n          children = split(children);\n        }\n        name = split(name);\n        ni = name.length;\n        while (ni--) {\n          attributesOrder = split([\n            globalAttributes,\n            attributes\n          ].join(' '));\n          element = {\n            attributes: arrayToMap(attributesOrder),\n            attributesOrder: attributesOrder,\n            children: arrayToMap(children, dummyObj)\n          };\n          schema[name[ni]] = element;\n        }\n      };\n      var addAttrs = function (name, attributes) {\n        var ni, schemaItem, i, l;\n        name = split(name);\n        ni = name.length;\n        attributes = split(attributes);\n        while (ni--) {\n          schemaItem = schema[name[ni]];\n          for (i = 0, l = attributes.length; i < l; i++) {\n            schemaItem.attributes[attributes[i]] = {};\n            schemaItem.attributesOrder.push(attributes[i]);\n          }\n        }\n      };\n      if (mapCache[type]) {\n        return mapCache[type];\n      }\n      globalAttributes = 'id accesskey class dir lang style tabindex title role';\n      blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\n      phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment';\n      if (type !== 'html4') {\n        globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate';\n        blockContent += ' article aside details dialog figure main header footer hgroup section nav';\n        phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen';\n      }\n      if (type !== 'html5-strict') {\n        globalAttributes += ' xml:lang';\n        html4PhrasingContent = 'acronym applet basefont big font strike tt';\n        phrasingContent = [\n          phrasingContent,\n          html4PhrasingContent\n        ].join(' ');\n        each$4(split(html4PhrasingContent), function (name) {\n          add(name, '', phrasingContent);\n        });\n        html4BlockContent = 'center dir isindex noframes';\n        blockContent = [\n          blockContent,\n          html4BlockContent\n        ].join(' ');\n        flowContent = [\n          blockContent,\n          phrasingContent\n        ].join(' ');\n        each$4(split(html4BlockContent), function (name) {\n          add(name, '', flowContent);\n        });\n      }\n      flowContent = flowContent || [\n        blockContent,\n        phrasingContent\n      ].join(' ');\n      add('html', 'manifest', 'head body');\n      add('head', '', 'base command link meta noscript script style title');\n      add('title hr noscript br');\n      add('base', 'href target');\n      add('link', 'href rel media hreflang type sizes hreflang');\n      add('meta', 'name http-equiv content charset');\n      add('style', 'media type scoped');\n      add('script', 'src async defer type charset');\n      add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent);\n      add('address dt dd div caption', '', flowContent);\n      add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent);\n      add('blockquote', 'cite', flowContent);\n      add('ol', 'reversed start type', 'li');\n      add('ul', '', 'li');\n      add('li', 'value', flowContent);\n      add('dl', '', 'dt dd');\n      add('a', 'href target rel media hreflang type', phrasingContent);\n      add('q', 'cite', phrasingContent);\n      add('ins del', 'cite datetime', flowContent);\n      add('img', 'src sizes srcset alt usemap ismap width height');\n      add('iframe', 'src name width height', flowContent);\n      add('embed', 'src type width height');\n      add('object', 'data type typemustmatch name usemap form width height', [\n        flowContent,\n        'param'\n      ].join(' '));\n      add('param', 'name value');\n      add('map', 'name', [\n        flowContent,\n        'area'\n      ].join(' '));\n      add('area', 'alt coords shape href target rel media hreflang type');\n      add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : ''));\n      add('colgroup', 'span', 'col');\n      add('col', 'span');\n      add('tbody thead tfoot', '', 'tr');\n      add('tr', '', 'td th');\n      add('td', 'colspan rowspan headers', flowContent);\n      add('th', 'colspan rowspan headers scope abbr', flowContent);\n      add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent);\n      add('fieldset', 'disabled form name', [\n        flowContent,\n        'legend'\n      ].join(' '));\n      add('label', 'form for', phrasingContent);\n      add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width');\n      add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent);\n      add('select', 'disabled form multiple name required size', 'option optgroup');\n      add('optgroup', 'disabled label', 'option');\n      add('option', 'disabled label selected value');\n      add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap');\n      add('menu', 'type label', [\n        flowContent,\n        'li'\n      ].join(' '));\n      add('noscript', '', flowContent);\n      if (type !== 'html4') {\n        add('wbr');\n        add('ruby', '', [\n          phrasingContent,\n          'rt rp'\n        ].join(' '));\n        add('figcaption', '', flowContent);\n        add('mark rt rp summary bdi', '', phrasingContent);\n        add('canvas', 'width height', flowContent);\n        add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [\n          flowContent,\n          'track source'\n        ].join(' '));\n        add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [\n          flowContent,\n          'track source'\n        ].join(' '));\n        add('picture', '', 'img source');\n        add('source', 'src srcset type media sizes');\n        add('track', 'kind src srclang label default');\n        add('datalist', '', [\n          phrasingContent,\n          'option'\n        ].join(' '));\n        add('article section nav aside main header footer', '', flowContent);\n        add('hgroup', '', 'h1 h2 h3 h4 h5 h6');\n        add('figure', '', [\n          flowContent,\n          'figcaption'\n        ].join(' '));\n        add('time', 'datetime', phrasingContent);\n        add('dialog', 'open', flowContent);\n        add('command', 'type label icon disabled checked radiogroup command');\n        add('output', 'for form name', phrasingContent);\n        add('progress', 'value max', phrasingContent);\n        add('meter', 'value min max low high optimum', phrasingContent);\n        add('details', 'open', [\n          flowContent,\n          'summary'\n        ].join(' '));\n        add('keygen', 'autofocus challenge disabled form keytype name');\n      }\n      if (type !== 'html5-strict') {\n        addAttrs('script', 'language xml:space');\n        addAttrs('style', 'xml:space');\n        addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace');\n        addAttrs('embed', 'align name hspace vspace');\n        addAttrs('param', 'valuetype type');\n        addAttrs('a', 'charset name rev shape coords');\n        addAttrs('br', 'clear');\n        addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace');\n        addAttrs('img', 'name longdesc align border hspace vspace');\n        addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align');\n        addAttrs('font basefont', 'size color face');\n        addAttrs('input', 'usemap align');\n        addAttrs('select', 'onchange');\n        addAttrs('textarea');\n        addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align');\n        addAttrs('ul', 'type compact');\n        addAttrs('li', 'type');\n        addAttrs('ol dl menu dir', 'compact');\n        addAttrs('pre', 'width xml:space');\n        addAttrs('hr', 'align noshade size width');\n        addAttrs('isindex', 'prompt');\n        addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor');\n        addAttrs('col', 'width align char charoff valign');\n        addAttrs('colgroup', 'width align char charoff valign');\n        addAttrs('thead', 'align char charoff valign');\n        addAttrs('tr', 'align char charoff valign bgcolor');\n        addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height');\n        addAttrs('form', 'accept');\n        addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height');\n        addAttrs('tfoot', 'align char charoff valign');\n        addAttrs('tbody', 'align char charoff valign');\n        addAttrs('area', 'nohref');\n        addAttrs('body', 'background bgcolor text link vlink alink');\n      }\n      if (type !== 'html4') {\n        addAttrs('input button select textarea', 'autofocus');\n        addAttrs('input textarea', 'placeholder');\n        addAttrs('a', 'download');\n        addAttrs('link script img', 'crossorigin');\n        addAttrs('iframe', 'sandbox seamless allowfullscreen');\n      }\n      each$4(split('a form meter progress dfn'), function (name) {\n        if (schema[name]) {\n          delete schema[name].children[name];\n        }\n      });\n      delete schema.caption.children.table;\n      delete schema.script;\n      mapCache[type] = schema;\n      return schema;\n    };\n    var compileElementMap = function (value, mode) {\n      var styles;\n      if (value) {\n        styles = {};\n        if (typeof value === 'string') {\n          value = { '*': value };\n        }\n        each$4(value, function (value, key) {\n          styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$1(value, /[, ]/);\n        });\n      }\n      return styles;\n    };\n    function Schema(settings) {\n      var elements = {};\n      var children = {};\n      var patternElements = [];\n      var validStyles;\n      var invalidStyles;\n      var schemaItems;\n      var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, validClasses;\n      var blockElementsMap, nonEmptyElementsMap, moveCaretBeforeOnEnterElementsMap, textBlockElementsMap, textInlineElementsMap;\n      var customElementsMap = {}, specialElements = {};\n      var createLookupTable = function (option, defaultValue, extendWith) {\n        var value = settings[option];\n        if (!value) {\n          value = mapCache[option];\n          if (!value) {\n            value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n            value = extend$1(value, extendWith);\n            mapCache[option] = value;\n          }\n        } else {\n          value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n        }\n        return value;\n      };\n      settings = settings || {};\n      schemaItems = compileSchema(settings.schema);\n      if (settings.verify_html === false) {\n        settings.valid_elements = '*[*]';\n      }\n      validStyles = compileElementMap(settings.valid_styles);\n      invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n      validClasses = compileElementMap(settings.valid_classes, 'map');\n      whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n      selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n      shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n      boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');\n      nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object ' + 'script pre code', shortEndedElementsMap);\n      moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', 'table', nonEmptyElementsMap);\n      textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\n      blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap);\n      textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');\n      each$4((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) {\n        specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi');\n      });\n      var patternToRegExp = function (str) {\n        return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n      };\n      var addValidElements = function (validElements) {\n        var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, key, value;\n        var elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)\\])?$/, attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;\n        if (validElements) {\n          validElements = split(validElements, ',');\n          if (elements['@']) {\n            globalAttributes = elements['@'].attributes;\n            globalAttributesOrder = elements['@'].attributesOrder;\n          }\n          for (ei = 0, el = validElements.length; ei < el; ei++) {\n            matches = elementRuleRegExp.exec(validElements[ei]);\n            if (matches) {\n              prefix = matches[1];\n              elementName = matches[2];\n              outputName = matches[3];\n              attrData = matches[5];\n              attributes = {};\n              attributesOrder = [];\n              element = {\n                attributes: attributes,\n                attributesOrder: attributesOrder\n              };\n              if (prefix === '#') {\n                element.paddEmpty = true;\n              }\n              if (prefix === '-') {\n                element.removeEmpty = true;\n              }\n              if (matches[4] === '!') {\n                element.removeEmptyAttrs = true;\n              }\n              if (globalAttributes) {\n                for (key in globalAttributes) {\n                  attributes[key] = globalAttributes[key];\n                }\n                attributesOrder.push.apply(attributesOrder, globalAttributesOrder);\n              }\n              if (attrData) {\n                attrData = split(attrData, '|');\n                for (ai = 0, al = attrData.length; ai < al; ai++) {\n                  matches = attrRuleRegExp.exec(attrData[ai]);\n                  if (matches) {\n                    attr = {};\n                    attrType = matches[1];\n                    attrName = matches[2].replace(/[\\\\:]:/g, ':');\n                    prefix = matches[3];\n                    value = matches[4];\n                    if (attrType === '!') {\n                      element.attributesRequired = element.attributesRequired || [];\n                      element.attributesRequired.push(attrName);\n                      attr.required = true;\n                    }\n                    if (attrType === '-') {\n                      delete attributes[attrName];\n                      attributesOrder.splice(inArray$1(attributesOrder, attrName), 1);\n                      continue;\n                    }\n                    if (prefix) {\n                      if (prefix === '=') {\n                        element.attributesDefault = element.attributesDefault || [];\n                        element.attributesDefault.push({\n                          name: attrName,\n                          value: value\n                        });\n                        attr.defaultValue = value;\n                      }\n                      if (prefix === ':') {\n                        element.attributesForced = element.attributesForced || [];\n                        element.attributesForced.push({\n                          name: attrName,\n                          value: value\n                        });\n                        attr.forcedValue = value;\n                      }\n                      if (prefix === '<') {\n                        attr.validValues = makeMap$2(value, '?');\n                      }\n                    }\n                    if (hasPatternsRegExp.test(attrName)) {\n                      element.attributePatterns = element.attributePatterns || [];\n                      attr.pattern = patternToRegExp(attrName);\n                      element.attributePatterns.push(attr);\n                    } else {\n                      if (!attributes[attrName]) {\n                        attributesOrder.push(attrName);\n                      }\n                      attributes[attrName] = attr;\n                    }\n                  }\n                }\n              }\n              if (!globalAttributes && elementName === '@') {\n                globalAttributes = attributes;\n                globalAttributesOrder = attributesOrder;\n              }\n              if (outputName) {\n                element.outputName = elementName;\n                elements[outputName] = element;\n              }\n              if (hasPatternsRegExp.test(elementName)) {\n                element.pattern = patternToRegExp(elementName);\n                patternElements.push(element);\n              } else {\n                elements[elementName] = element;\n              }\n            }\n          }\n        }\n      };\n      var setValidElements = function (validElements) {\n        elements = {};\n        patternElements = [];\n        addValidElements(validElements);\n        each$4(schemaItems, function (element, name) {\n          children[name] = element.children;\n        });\n      };\n      var addCustomElements = function (customElements) {\n        var customElementRegExp = /^(~)?(.+)$/;\n        if (customElements) {\n          mapCache.text_block_elements = mapCache.block_elements = null;\n          each$4(split(customElements, ','), function (rule) {\n            var matches = customElementRegExp.exec(rule), inline = matches[1] === '~', cloneName = inline ? 'span' : 'div', name = matches[2];\n            children[name] = children[cloneName];\n            customElementsMap[name] = cloneName;\n            if (!inline) {\n              blockElementsMap[name.toUpperCase()] = {};\n              blockElementsMap[name] = {};\n            }\n            if (!elements[name]) {\n              var customRule = elements[cloneName];\n              customRule = extend$1({}, customRule);\n              delete customRule.removeEmptyAttrs;\n              delete customRule.removeEmpty;\n              elements[name] = customRule;\n            }\n            each$4(children, function (element, elmName) {\n              if (element[cloneName]) {\n                children[elmName] = element = extend$1({}, children[elmName]);\n                element[name] = element[cloneName];\n              }\n            });\n          });\n        }\n      };\n      var addValidChildren = function (validChildren) {\n        var childRuleRegExp = /^([+\\-]?)(\\w+)\\[([^\\]]+)\\]$/;\n        mapCache[settings.schema] = null;\n        if (validChildren) {\n          each$4(split(validChildren, ','), function (rule) {\n            var matches = childRuleRegExp.exec(rule);\n            var parent, prefix;\n            if (matches) {\n              prefix = matches[1];\n              if (prefix) {\n                parent = children[matches[2]];\n              } else {\n                parent = children[matches[2]] = { '#comment': {} };\n              }\n              parent = children[matches[2]];\n              each$4(split(matches[3], '|'), function (child) {\n                if (prefix === '-') {\n                  delete parent[child];\n                } else {\n                  parent[child] = {};\n                }\n              });\n            }\n          });\n        }\n      };\n      var getElementRule = function (name) {\n        var element = elements[name], i;\n        if (element) {\n          return element;\n        }\n        i = patternElements.length;\n        while (i--) {\n          element = patternElements[i];\n          if (element.pattern.test(name)) {\n            return element;\n          }\n        }\n      };\n      if (!settings.valid_elements) {\n        each$4(schemaItems, function (element, name) {\n          elements[name] = {\n            attributes: element.attributes,\n            attributesOrder: element.attributesOrder\n          };\n          children[name] = element.children;\n        });\n        if (settings.schema !== 'html5') {\n          each$4(split('strong/b em/i'), function (item) {\n            item = split(item, '/');\n            elements[item[1]].outputName = item[0];\n          });\n        }\n        each$4(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function (name) {\n          if (elements[name]) {\n            elements[name].removeEmpty = true;\n          }\n        });\n        each$4(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {\n          elements[name].paddEmpty = true;\n        });\n        each$4(split('span'), function (name) {\n          elements[name].removeEmptyAttrs = true;\n        });\n      } else {\n        setValidElements(settings.valid_elements);\n      }\n      addCustomElements(settings.custom_elements);\n      addValidChildren(settings.valid_children);\n      addValidElements(settings.extended_valid_elements);\n      addValidChildren('+ol[ul|ol],+ul[ul|ol]');\n      each$4({\n        dd: 'dl',\n        dt: 'dl',\n        li: 'ul ol',\n        td: 'tr',\n        th: 'tr',\n        tr: 'tbody thead tfoot',\n        tbody: 'table',\n        thead: 'table',\n        tfoot: 'table',\n        legend: 'fieldset',\n        area: 'map',\n        param: 'video audio object'\n      }, function (parents, item) {\n        if (elements[item]) {\n          elements[item].parentsRequired = split(parents);\n        }\n      });\n      if (settings.invalid_elements) {\n        each$4(explode$1(settings.invalid_elements), function (item) {\n          if (elements[item]) {\n            delete elements[item];\n          }\n        });\n      }\n      if (!getElementRule('span')) {\n        addValidElements('span[!data-mce-type|*]');\n      }\n      var getValidStyles = function () {\n        return validStyles;\n      };\n      var getInvalidStyles = function () {\n        return invalidStyles;\n      };\n      var getValidClasses = function () {\n        return validClasses;\n      };\n      var getBoolAttrs = function () {\n        return boolAttrMap;\n      };\n      var getBlockElements = function () {\n        return blockElementsMap;\n      };\n      var getTextBlockElements = function () {\n        return textBlockElementsMap;\n      };\n      var getTextInlineElements = function () {\n        return textInlineElementsMap;\n      };\n      var getShortEndedElements = function () {\n        return shortEndedElementsMap;\n      };\n      var getSelfClosingElements = function () {\n        return selfClosingElementsMap;\n      };\n      var getNonEmptyElements = function () {\n        return nonEmptyElementsMap;\n      };\n      var getMoveCaretBeforeOnEnterElements = function () {\n        return moveCaretBeforeOnEnterElementsMap;\n      };\n      var getWhiteSpaceElements = function () {\n        return whiteSpaceElementsMap;\n      };\n      var getSpecialElements = function () {\n        return specialElements;\n      };\n      var isValidChild = function (name, child) {\n        var parent = children[name.toLowerCase()];\n        return !!(parent && parent[child.toLowerCase()]);\n      };\n      var isValid = function (name, attr) {\n        var attrPatterns, i;\n        var rule = getElementRule(name);\n        if (rule) {\n          if (attr) {\n            if (rule.attributes[attr]) {\n              return true;\n            }\n            attrPatterns = rule.attributePatterns;\n            if (attrPatterns) {\n              i = attrPatterns.length;\n              while (i--) {\n                if (attrPatterns[i].pattern.test(name)) {\n                  return true;\n                }\n              }\n            }\n          } else {\n            return true;\n          }\n        }\n        return false;\n      };\n      var getCustomElements = function () {\n        return customElementsMap;\n      };\n      return {\n        children: children,\n        elements: elements,\n        getValidStyles: getValidStyles,\n        getValidClasses: getValidClasses,\n        getBlockElements: getBlockElements,\n        getInvalidStyles: getInvalidStyles,\n        getShortEndedElements: getShortEndedElements,\n        getTextBlockElements: getTextBlockElements,\n        getTextInlineElements: getTextInlineElements,\n        getBoolAttrs: getBoolAttrs,\n        getElementRule: getElementRule,\n        getSelfClosingElements: getSelfClosingElements,\n        getNonEmptyElements: getNonEmptyElements,\n        getMoveCaretBeforeOnEnterElements: getMoveCaretBeforeOnEnterElements,\n        getWhiteSpaceElements: getWhiteSpaceElements,\n        getSpecialElements: getSpecialElements,\n        isValidChild: isValidChild,\n        isValid: isValid,\n        getCustomElements: getCustomElements,\n        addValidElements: addValidElements,\n        setValidElements: setValidElements,\n        addCustomElements: addCustomElements,\n        addValidChildren: addValidChildren\n      };\n    }\n\n    var toHex = function (match, r, g, b) {\n      var hex = function (val) {\n        val = parseInt(val, 10).toString(16);\n        return val.length > 1 ? val : '0' + val;\n      };\n      return '#' + hex(r) + hex(g) + hex(b);\n    };\n    function Styles(settings, schema) {\n      var rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n      var urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n      var styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n      var trimRightRegExp = /\\s+$/;\n      var i;\n      var encodingLookup = {};\n      var encodingItems;\n      var validStyles;\n      var invalidStyles;\n      var invisibleChar = '\\uFEFF';\n      settings = settings || {};\n      if (schema) {\n        validStyles = schema.getValidStyles();\n        invalidStyles = schema.getInvalidStyles();\n      }\n      encodingItems = ('\\\\\" \\\\\\' \\\\; \\\\: ; : ' + invisibleChar).split(' ');\n      for (i = 0; i < encodingItems.length; i++) {\n        encodingLookup[encodingItems[i]] = invisibleChar + i;\n        encodingLookup[invisibleChar + i] = encodingItems[i];\n      }\n      return {\n        toHex: function (color) {\n          return color.replace(rgbRegExp, toHex);\n        },\n        parse: function (css) {\n          var styles = {};\n          var matches, name, value, isEncoded;\n          var urlConverter = settings.url_converter;\n          var urlConverterScope = settings.url_converter_scope || this;\n          var compress = function (prefix, suffix, noJoin) {\n            var top, right, bottom, left;\n            top = styles[prefix + '-top' + suffix];\n            if (!top) {\n              return;\n            }\n            right = styles[prefix + '-right' + suffix];\n            if (!right) {\n              return;\n            }\n            bottom = styles[prefix + '-bottom' + suffix];\n            if (!bottom) {\n              return;\n            }\n            left = styles[prefix + '-left' + suffix];\n            if (!left) {\n              return;\n            }\n            var box = [\n              top,\n              right,\n              bottom,\n              left\n            ];\n            i = box.length - 1;\n            while (i--) {\n              if (box[i] !== box[i + 1]) {\n                break;\n              }\n            }\n            if (i > -1 && noJoin) {\n              return;\n            }\n            styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\n            delete styles[prefix + '-top' + suffix];\n            delete styles[prefix + '-right' + suffix];\n            delete styles[prefix + '-bottom' + suffix];\n            delete styles[prefix + '-left' + suffix];\n          };\n          var canCompress = function (key) {\n            var value = styles[key], i;\n            if (!value) {\n              return;\n            }\n            value = value.split(' ');\n            i = value.length;\n            while (i--) {\n              if (value[i] !== value[0]) {\n                return false;\n              }\n            }\n            styles[key] = value[0];\n            return true;\n          };\n          var compress2 = function (target, a, b, c) {\n            if (!canCompress(a)) {\n              return;\n            }\n            if (!canCompress(b)) {\n              return;\n            }\n            if (!canCompress(c)) {\n              return;\n            }\n            styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\n            delete styles[a];\n            delete styles[b];\n            delete styles[c];\n          };\n          var encode = function (str) {\n            isEncoded = true;\n            return encodingLookup[str];\n          };\n          var decode = function (str, keepSlashes) {\n            if (isEncoded) {\n              str = str.replace(/\\uFEFF[0-9]/g, function (str) {\n                return encodingLookup[str];\n              });\n            }\n            if (!keepSlashes) {\n              str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n            }\n            return str;\n          };\n          var decodeSingleHexSequence = function (escSeq) {\n            return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n          };\n          var decodeHexSequences = function (value) {\n            return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n          };\n          var processUrl = function (match, url, url2, url3, str, str2) {\n            str = str || str2;\n            if (str) {\n              str = decode(str);\n              return '\\'' + str.replace(/\\'/g, '\\\\\\'') + '\\'';\n            }\n            url = decode(url || url2 || url3);\n            if (!settings.allow_script_urls) {\n              var scriptUrl = url.replace(/[\\s\\r\\n]+/g, '');\n              if (/(java|vb)script:/i.test(scriptUrl)) {\n                return '';\n              }\n              if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n                return '';\n              }\n            }\n            if (urlConverter) {\n              url = urlConverter.call(urlConverterScope, url, 'style');\n            }\n            return 'url(\\'' + url.replace(/\\'/g, '\\\\\\'') + '\\')';\n          };\n          if (css) {\n            css = css.replace(/[\\u0000-\\u001F]/g, '');\n            css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, function (str) {\n              return str.replace(/[;:]/g, encode);\n            });\n            while (matches = styleRegExp.exec(css)) {\n              styleRegExp.lastIndex = matches.index + matches[0].length;\n              name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n              value = matches[2].replace(trimRightRegExp, '');\n              if (name && value) {\n                name = decodeHexSequences(name);\n                value = decodeHexSequences(value);\n                if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n                  continue;\n                }\n                if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n                  continue;\n                }\n                if (name === 'font-weight' && value === '700') {\n                  value = 'bold';\n                } else if (name === 'color' || name === 'background-color') {\n                  value = value.toLowerCase();\n                }\n                value = value.replace(rgbRegExp, toHex);\n                value = value.replace(urlOrStrRegExp, processUrl);\n                styles[name] = isEncoded ? decode(value, true) : value;\n              }\n            }\n            compress('border', '', true);\n            compress('border', '-width');\n            compress('border', '-color');\n            compress('border', '-style');\n            compress('padding', '');\n            compress('margin', '');\n            compress2('border', 'border-width', 'border-style', 'border-color');\n            if (styles.border === 'medium none') {\n              delete styles.border;\n            }\n            if (styles['border-image'] === 'none') {\n              delete styles['border-image'];\n            }\n          }\n          return styles;\n        },\n        serialize: function (styles, elementName) {\n          var css = '', name, value;\n          var serializeStyles = function (name) {\n            var styleList, i, l, value;\n            styleList = validStyles[name];\n            if (styleList) {\n              for (i = 0, l = styleList.length; i < l; i++) {\n                name = styleList[i];\n                value = styles[name];\n                if (value) {\n                  css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n                }\n              }\n            }\n          };\n          var isValid = function (name, elementName) {\n            var styleMap;\n            styleMap = invalidStyles['*'];\n            if (styleMap && styleMap[name]) {\n              return false;\n            }\n            styleMap = invalidStyles[elementName];\n            if (styleMap && styleMap[name]) {\n              return false;\n            }\n            return true;\n          };\n          if (elementName && validStyles) {\n            serializeStyles('*');\n            serializeStyles(elementName);\n          } else {\n            for (name in styles) {\n              value = styles[name];\n              if (value && (!invalidStyles || isValid(name, elementName))) {\n                css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n              }\n            }\n          }\n          return css;\n        }\n      };\n    }\n\n    var each$5 = Tools.each;\n    var grep$1 = Tools.grep;\n    var isIE = Env.ie;\n    var simpleSelectorRe = /^([a-z0-9],?)+$/i;\n    var whiteSpaceRegExp$2 = /^[ \\t\\r\\n]*$/;\n    var setupAttrHooks = function (styles, settings, getContext) {\n      var attrHooks = {};\n      var keepValues = settings.keep_values;\n      var keepUrlHook = {\n        set: function ($elm, value, name) {\n          if (settings.url_converter) {\n            value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name, $elm[0]);\n          }\n          $elm.attr('data-mce-' + name, value).attr(name, value);\n        },\n        get: function ($elm, name) {\n          return $elm.attr('data-mce-' + name) || $elm.attr(name);\n        }\n      };\n      attrHooks = {\n        style: {\n          set: function ($elm, value) {\n            if (value !== null && typeof value === 'object') {\n              $elm.css(value);\n              return;\n            }\n            if (keepValues) {\n              $elm.attr('data-mce-style', value);\n            }\n            $elm.attr('style', value);\n          },\n          get: function ($elm) {\n            var value = $elm.attr('data-mce-style') || $elm.attr('style');\n            value = styles.serialize(styles.parse(value), $elm[0].nodeName);\n            return value;\n          }\n        }\n      };\n      if (keepValues) {\n        attrHooks.href = attrHooks.src = keepUrlHook;\n      }\n      return attrHooks;\n    };\n    var updateInternalStyleAttr = function (styles, $elm) {\n      var rawValue = $elm.attr('style');\n      var value = styles.serialize(styles.parse(rawValue), $elm[0].nodeName);\n      if (!value) {\n        value = null;\n      }\n      $elm.attr('data-mce-style', value);\n    };\n    var findNodeIndex = function (node, normalized) {\n      var idx = 0, lastNodeType, nodeType;\n      if (node) {\n        for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {\n          nodeType = node.nodeType;\n          if (normalized && nodeType === 3) {\n            if (nodeType === lastNodeType || !node.nodeValue.length) {\n              continue;\n            }\n          }\n          idx++;\n          lastNodeType = nodeType;\n        }\n      }\n      return idx;\n    };\n    function DOMUtils(doc, settings) {\n      var _this = this;\n      if (settings === void 0) {\n        settings = {};\n      }\n      var attrHooks;\n      var addedStyles = {};\n      var win = domGlobals.window;\n      var files = {};\n      var counter = 0;\n      var stdMode = true;\n      var boxModel = true;\n      var styleSheetLoader = StyleSheetLoader(doc, { contentCssCors: settings.contentCssCors });\n      var boundEvents = [];\n      var schema = settings.schema ? settings.schema : Schema({});\n      var styles = Styles({\n        url_converter: settings.url_converter,\n        url_converter_scope: settings.url_converter_scope\n      }, settings.schema);\n      var events = settings.ownEvents ? new EventUtils(settings.proxy) : EventUtils.Event;\n      var blockElementsMap = schema.getBlockElements();\n      var $ = DomQuery.overrideDefaults(function () {\n        return {\n          context: doc,\n          element: self.getRoot()\n        };\n      });\n      var isBlock = function (node) {\n        if (typeof node === 'string') {\n          return !!blockElementsMap[node];\n        } else if (node) {\n          var type = node.nodeType;\n          if (type) {\n            return !!(type === 1 && blockElementsMap[node.nodeName]);\n          }\n        }\n        return false;\n      };\n      var get = function (elm) {\n        if (elm && doc && typeof elm === 'string') {\n          var node = doc.getElementById(elm);\n          if (node && node.id !== elm) {\n            return doc.getElementsByName(elm)[1];\n          } else {\n            return node;\n          }\n        }\n        return elm;\n      };\n      var $$ = function (elm) {\n        if (typeof elm === 'string') {\n          elm = get(elm);\n        }\n        return $(elm);\n      };\n      var getAttrib = function (elm, name, defaultVal) {\n        var hook, value;\n        var $elm = $$(elm);\n        if ($elm.length) {\n          hook = attrHooks[name];\n          if (hook && hook.get) {\n            value = hook.get($elm, name);\n          } else {\n            value = $elm.attr(name);\n          }\n        }\n        if (typeof value === 'undefined') {\n          value = defaultVal || '';\n        }\n        return value;\n      };\n      var getAttribs = function (elm) {\n        var node = get(elm);\n        if (!node) {\n          return [];\n        }\n        return node.attributes;\n      };\n      var setAttrib = function (elm, name, value) {\n        var originalValue, hook;\n        if (value === '') {\n          value = null;\n        }\n        var $elm = $$(elm);\n        originalValue = $elm.attr(name);\n        if (!$elm.length) {\n          return;\n        }\n        hook = attrHooks[name];\n        if (hook && hook.set) {\n          hook.set($elm, value, name);\n        } else {\n          $elm.attr(name, value);\n        }\n        if (originalValue !== value && settings.onSetAttrib) {\n          settings.onSetAttrib({\n            attrElm: $elm,\n            attrName: name,\n            attrValue: value\n          });\n        }\n      };\n      var clone = function (node, deep) {\n        if (!isIE || node.nodeType !== 1 || deep) {\n          return node.cloneNode(deep);\n        }\n        if (!deep) {\n          var clone_1 = doc.createElement(node.nodeName);\n          each$5(getAttribs(node), function (attr) {\n            setAttrib(clone_1, attr.nodeName, getAttrib(node, attr.nodeName));\n          });\n          return clone_1;\n        }\n        return null;\n      };\n      var getRoot = function () {\n        return settings.root_element || doc.body;\n      };\n      var getViewPort = function (argWin) {\n        var actWin = !argWin ? win : argWin;\n        var doc = actWin.document;\n        var rootElm =  doc.documentElement ;\n        return {\n          x: actWin.pageXOffset || rootElm.scrollLeft,\n          y: actWin.pageYOffset || rootElm.scrollTop,\n          w: actWin.innerWidth || rootElm.clientWidth,\n          h: actWin.innerHeight || rootElm.clientHeight\n        };\n      };\n      var getPos = function (elm, rootElm) {\n        return Position.getPos(doc.body, get(elm), rootElm);\n      };\n      var setStyle = function (elm, name, value) {\n        var $elm = $$(elm).css(name, value);\n        if (settings.update_styles) {\n          updateInternalStyleAttr(styles, $elm);\n        }\n      };\n      var setStyles = function (elm, stylesArg) {\n        var $elm = $$(elm).css(stylesArg);\n        if (settings.update_styles) {\n          updateInternalStyleAttr(styles, $elm);\n        }\n      };\n      var getStyle = function (elm, name, computed) {\n        var $elm = $$(elm);\n        if (computed) {\n          return $elm.css(name);\n        }\n        name = name.replace(/-(\\D)/g, function (a, b) {\n          return b.toUpperCase();\n        });\n        if (name === 'float') {\n          name = Env.ie && Env.ie < 12 ? 'styleFloat' : 'cssFloat';\n        }\n        return $elm[0] && $elm[0].style ? $elm[0].style[name] : undefined;\n      };\n      var getSize = function (elm) {\n        var w, h;\n        elm = get(elm);\n        w = getStyle(elm, 'width');\n        h = getStyle(elm, 'height');\n        if (w.indexOf('px') === -1) {\n          w = 0;\n        }\n        if (h.indexOf('px') === -1) {\n          h = 0;\n        }\n        return {\n          w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth,\n          h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight\n        };\n      };\n      var getRect = function (elm) {\n        var pos, size;\n        elm = get(elm);\n        pos = getPos(elm);\n        size = getSize(elm);\n        return {\n          x: pos.x,\n          y: pos.y,\n          w: size.w,\n          h: size.h\n        };\n      };\n      var is = function (elm, selector) {\n        var i;\n        if (!elm) {\n          return false;\n        }\n        if (!Array.isArray(elm)) {\n          if (selector === '*') {\n            return elm.nodeType === 1;\n          }\n          if (simpleSelectorRe.test(selector)) {\n            var selectors = selector.toLowerCase().split(/,/);\n            var elmName = elm.nodeName.toLowerCase();\n            for (i = selectors.length - 1; i >= 0; i--) {\n              if (selectors[i] === elmName) {\n                return true;\n              }\n            }\n            return false;\n          }\n          if (elm.nodeType && elm.nodeType !== 1) {\n            return false;\n          }\n        }\n        var elms = !Array.isArray(elm) ? [elm] : elm;\n        return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0;\n      };\n      var getParents = function (elm, selector, root, collect) {\n        var result = [];\n        var selectorVal;\n        var node = get(elm);\n        collect = collect === undefined;\n        root = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n        if (Tools.is(selector, 'string')) {\n          selectorVal = selector;\n          if (selector === '*') {\n            selector = function (node) {\n              return node.nodeType === 1;\n            };\n          } else {\n            selector = function (node) {\n              return is(node, selectorVal);\n            };\n          }\n        }\n        while (node) {\n          if (node === root || !node.nodeType || node.nodeType === 9) {\n            break;\n          }\n          if (!selector || typeof selector === 'function' && selector(node)) {\n            if (collect) {\n              result.push(node);\n            } else {\n              return [node];\n            }\n          }\n          node = node.parentNode;\n        }\n        return collect ? result : null;\n      };\n      var getParent = function (node, selector, root) {\n        var parents = getParents(node, selector, root, false);\n        return parents && parents.length > 0 ? parents[0] : null;\n      };\n      var _findSib = function (node, selector, name) {\n        var func = selector;\n        if (node) {\n          if (typeof selector === 'string') {\n            func = function (node) {\n              return is(node, selector);\n            };\n          }\n          for (node = node[name]; node; node = node[name]) {\n            if (typeof func === 'function' && func(node)) {\n              return node;\n            }\n          }\n        }\n        return null;\n      };\n      var getNext = function (node, selector) {\n        return _findSib(node, selector, 'nextSibling');\n      };\n      var getPrev = function (node, selector) {\n        return _findSib(node, selector, 'previousSibling');\n      };\n      var select = function (selector, scope) {\n        return Sizzle(selector, get(scope) || settings.root_element || doc, []);\n      };\n      var run = function (elm, func, scope) {\n        var result;\n        var node = typeof elm === 'string' ? get(elm) : elm;\n        if (!node) {\n          return false;\n        }\n        if (Tools.isArray(node) && (node.length || node.length === 0)) {\n          result = [];\n          each$5(node, function (elm, i) {\n            if (elm) {\n              if (typeof elm === 'string') {\n                elm = get(elm);\n              }\n              result.push(func.call(scope, elm, i));\n            }\n          });\n          return result;\n        }\n        var context = scope ? scope : _this;\n        return func.call(context, node);\n      };\n      var setAttribs = function (elm, attrs) {\n        $$(elm).each(function (i, node) {\n          each$5(attrs, function (value, name) {\n            setAttrib(node, name, value);\n          });\n        });\n      };\n      var setHTML = function (elm, html) {\n        var $elm = $$(elm);\n        if (isIE) {\n          $elm.each(function (i, target) {\n            if (target.canHaveHTML === false) {\n              return;\n            }\n            while (target.firstChild) {\n              target.removeChild(target.firstChild);\n            }\n            try {\n              target.innerHTML = '<br>' + html;\n              target.removeChild(target.firstChild);\n            } catch (ex) {\n              DomQuery('<div></div>').html('<br>' + html).contents().slice(1).appendTo(target);\n            }\n            return html;\n          });\n        } else {\n          $elm.html(html);\n        }\n      };\n      var add = function (parentElm, name, attrs, html, create) {\n        return run(parentElm, function (parentElm) {\n          var newElm = typeof name === 'string' ? doc.createElement(name) : name;\n          setAttribs(newElm, attrs);\n          if (html) {\n            if (typeof html !== 'string' && html.nodeType) {\n              newElm.appendChild(html);\n            } else if (typeof html === 'string') {\n              setHTML(newElm, html);\n            }\n          }\n          return !create ? parentElm.appendChild(newElm) : newElm;\n        });\n      };\n      var create = function (name, attrs, html) {\n        return add(doc.createElement(name), name, attrs, html, true);\n      };\n      var decode = Entities.decode;\n      var encode = Entities.encodeAllRaw;\n      var createHTML = function (name, attrs, html) {\n        var outHtml = '', key;\n        outHtml += '<' + name;\n        for (key in attrs) {\n          if (attrs.hasOwnProperty(key) && attrs[key] !== null && typeof attrs[key] !== 'undefined') {\n            outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n          }\n        }\n        if (typeof html !== 'undefined') {\n          return outHtml + '>' + html + '</' + name + '>';\n        }\n        return outHtml + ' />';\n      };\n      var createFragment = function (html) {\n        var node;\n        var container = doc.createElement('div');\n        var frag = doc.createDocumentFragment();\n        frag.appendChild(container);\n        if (html) {\n          container.innerHTML = html;\n        }\n        while (node = container.firstChild) {\n          frag.appendChild(node);\n        }\n        frag.removeChild(container);\n        return frag;\n      };\n      var remove = function (node, keepChildren) {\n        var $node = $$(node);\n        if (keepChildren) {\n          $node.each(function () {\n            var child;\n            while (child = this.firstChild) {\n              if (child.nodeType === 3 && child.data.length === 0) {\n                this.removeChild(child);\n              } else {\n                this.parentNode.insertBefore(child, this);\n              }\n            }\n          }).remove();\n        } else {\n          $node.remove();\n        }\n        return $node.length > 1 ? $node.toArray() : $node[0];\n      };\n      var removeAllAttribs = function (e) {\n        return run(e, function (e) {\n          var i;\n          var attrs = e.attributes;\n          for (i = attrs.length - 1; i >= 0; i--) {\n            e.removeAttributeNode(attrs.item(i));\n          }\n        });\n      };\n      var parseStyle = function (cssText) {\n        return styles.parse(cssText);\n      };\n      var serializeStyle = function (stylesArg, name) {\n        return styles.serialize(stylesArg, name);\n      };\n      var addStyle = function (cssText) {\n        var head, styleElm;\n        if (self !== DOMUtils.DOM && doc === domGlobals.document) {\n          if (addedStyles[cssText]) {\n            return;\n          }\n          addedStyles[cssText] = true;\n        }\n        styleElm = doc.getElementById('mceDefaultStyles');\n        if (!styleElm) {\n          styleElm = doc.createElement('style');\n          styleElm.id = 'mceDefaultStyles';\n          styleElm.type = 'text/css';\n          head = doc.getElementsByTagName('head')[0];\n          if (head.firstChild) {\n            head.insertBefore(styleElm, head.firstChild);\n          } else {\n            head.appendChild(styleElm);\n          }\n        }\n        if (styleElm.styleSheet) {\n          styleElm.styleSheet.cssText += cssText;\n        } else {\n          styleElm.appendChild(doc.createTextNode(cssText));\n        }\n      };\n      var loadCSS = function (url) {\n        var head;\n        if (self !== DOMUtils.DOM && doc === domGlobals.document) {\n          DOMUtils.DOM.loadCSS(url);\n          return;\n        }\n        if (!url) {\n          url = '';\n        }\n        head = doc.getElementsByTagName('head')[0];\n        each$5(url.split(','), function (url) {\n          var link;\n          url = Tools._addCacheSuffix(url);\n          if (files[url]) {\n            return;\n          }\n          files[url] = true;\n          link = create('link', {\n            rel: 'stylesheet',\n            href: url\n          });\n          head.appendChild(link);\n        });\n      };\n      var toggleClass = function (elm, cls, state) {\n        $$(elm).toggleClass(cls, state).each(function () {\n          if (this.className === '') {\n            DomQuery(this).attr('class', null);\n          }\n        });\n      };\n      var addClass = function (elm, cls) {\n        $$(elm).addClass(cls);\n      };\n      var removeClass = function (elm, cls) {\n        toggleClass(elm, cls, false);\n      };\n      var hasClass = function (elm, cls) {\n        return $$(elm).hasClass(cls);\n      };\n      var show = function (elm) {\n        $$(elm).show();\n      };\n      var hide = function (elm) {\n        $$(elm).hide();\n      };\n      var isHidden = function (elm) {\n        return $$(elm).css('display') === 'none';\n      };\n      var uniqueId = function (prefix) {\n        return (!prefix ? 'mce_' : prefix) + counter++;\n      };\n      var getOuterHTML = function (elm) {\n        var node = typeof elm === 'string' ? get(elm) : elm;\n        return NodeType.isElement(node) ? node.outerHTML : DomQuery('<div></div>').append(DomQuery(node).clone()).html();\n      };\n      var setOuterHTML = function (elm, html) {\n        $$(elm).each(function () {\n          try {\n            if ('outerHTML' in this) {\n              this.outerHTML = html;\n              return;\n            }\n          } catch (ex) {\n          }\n          remove(DomQuery(this).html(html), true);\n        });\n      };\n      var insertAfter = function (node, reference) {\n        var referenceNode = get(reference);\n        return run(node, function (node) {\n          var parent, nextSibling;\n          parent = referenceNode.parentNode;\n          nextSibling = referenceNode.nextSibling;\n          if (nextSibling) {\n            parent.insertBefore(node, nextSibling);\n          } else {\n            parent.appendChild(node);\n          }\n          return node;\n        });\n      };\n      var replace = function (newElm, oldElm, keepChildren) {\n        return run(oldElm, function (oldElm) {\n          if (Tools.is(oldElm, 'array')) {\n            newElm = newElm.cloneNode(true);\n          }\n          if (keepChildren) {\n            each$5(grep$1(oldElm.childNodes), function (node) {\n              newElm.appendChild(node);\n            });\n          }\n          return oldElm.parentNode.replaceChild(newElm, oldElm);\n        });\n      };\n      var rename = function (elm, name) {\n        var newElm;\n        if (elm.nodeName !== name.toUpperCase()) {\n          newElm = create(name);\n          each$5(getAttribs(elm), function (attrNode) {\n            setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n          });\n          replace(newElm, elm, true);\n        }\n        return newElm || elm;\n      };\n      var findCommonAncestor = function (a, b) {\n        var ps = a, pe;\n        while (ps) {\n          pe = b;\n          while (pe && ps !== pe) {\n            pe = pe.parentNode;\n          }\n          if (ps === pe) {\n            break;\n          }\n          ps = ps.parentNode;\n        }\n        if (!ps && a.ownerDocument) {\n          return a.ownerDocument.documentElement;\n        }\n        return ps;\n      };\n      var toHex = function (rgbVal) {\n        return styles.toHex(Tools.trim(rgbVal));\n      };\n      var isEmpty = function (node, elements) {\n        var i, attributes, type, whitespace, walker, name, brCount = 0;\n        node = node.firstChild;\n        if (node) {\n          walker = new TreeWalker(node, node.parentNode);\n          elements = elements || (schema ? schema.getNonEmptyElements() : null);\n          whitespace = schema ? schema.getWhiteSpaceElements() : {};\n          do {\n            type = node.nodeType;\n            if (NodeType.isElement(node)) {\n              var bogusVal = node.getAttribute('data-mce-bogus');\n              if (bogusVal) {\n                node = walker.next(bogusVal === 'all');\n                continue;\n              }\n              name = node.nodeName.toLowerCase();\n              if (elements && elements[name]) {\n                if (name === 'br') {\n                  brCount++;\n                  node = walker.next();\n                  continue;\n                }\n                return false;\n              }\n              attributes = getAttribs(node);\n              i = attributes.length;\n              while (i--) {\n                name = attributes[i].nodeName;\n                if (name === 'name' || name === 'data-mce-bookmark') {\n                  return false;\n                }\n              }\n            }\n            if (type === 8) {\n              return false;\n            }\n            if (type === 3 && !whiteSpaceRegExp$2.test(node.nodeValue)) {\n              return false;\n            }\n            if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && whiteSpaceRegExp$2.test(node.nodeValue)) {\n              return false;\n            }\n            node = walker.next();\n          } while (node);\n        }\n        return brCount <= 1;\n      };\n      var createRng = function () {\n        return doc.createRange();\n      };\n      var split = function (parentElm, splitElm, replacementElm) {\n        var r = createRng(), bef, aft, pa;\n        if (parentElm && splitElm) {\n          r.setStart(parentElm.parentNode, findNodeIndex(parentElm));\n          r.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n          bef = r.extractContents();\n          r = createRng();\n          r.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n          r.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);\n          aft = r.extractContents();\n          pa = parentElm.parentNode;\n          pa.insertBefore(TrimNode.trimNode(self, bef), parentElm);\n          if (replacementElm) {\n            pa.insertBefore(replacementElm, parentElm);\n          } else {\n            pa.insertBefore(splitElm, parentElm);\n          }\n          pa.insertBefore(TrimNode.trimNode(self, aft), parentElm);\n          remove(parentElm);\n          return replacementElm || splitElm;\n        }\n      };\n      var bind = function (target, name, func, scope) {\n        if (Tools.isArray(target)) {\n          var i = target.length;\n          while (i--) {\n            target[i] = bind(target[i], name, func, scope);\n          }\n          return target;\n        }\n        if (settings.collect && (target === doc || target === win)) {\n          boundEvents.push([\n            target,\n            name,\n            func,\n            scope\n          ]);\n        }\n        return events.bind(target, name, func, scope || self);\n      };\n      var unbind = function (target, name, func) {\n        var i;\n        if (Tools.isArray(target)) {\n          i = target.length;\n          while (i--) {\n            target[i] = unbind(target[i], name, func);\n          }\n          return target;\n        }\n        if (boundEvents && (target === doc || target === win)) {\n          i = boundEvents.length;\n          while (i--) {\n            var item = boundEvents[i];\n            if (target === item[0] && (!name || name === item[1]) && (!func || func === item[2])) {\n              events.unbind(item[0], item[1], item[2]);\n            }\n          }\n        }\n        return events.unbind(target, name, func);\n      };\n      var fire = function (target, name, evt) {\n        return events.fire(target, name, evt);\n      };\n      var getContentEditable = function (node) {\n        if (node && NodeType.isElement(node)) {\n          var contentEditable = node.getAttribute('data-mce-contenteditable');\n          if (contentEditable && contentEditable !== 'inherit') {\n            return contentEditable;\n          }\n          return node.contentEditable !== 'inherit' ? node.contentEditable : null;\n        } else {\n          return null;\n        }\n      };\n      var getContentEditableParent = function (node) {\n        var root = getRoot();\n        var state = null;\n        for (; node && node !== root; node = node.parentNode) {\n          state = getContentEditable(node);\n          if (state !== null) {\n            break;\n          }\n        }\n        return state;\n      };\n      var destroy = function () {\n        if (boundEvents) {\n          var i = boundEvents.length;\n          while (i--) {\n            var item = boundEvents[i];\n            events.unbind(item[0], item[1], item[2]);\n          }\n        }\n        if (Sizzle.setDocument) {\n          Sizzle.setDocument();\n        }\n      };\n      var isChildOf = function (node, parent) {\n        while (node) {\n          if (parent === node) {\n            return true;\n          }\n          node = node.parentNode;\n        }\n        return false;\n      };\n      var dumpRng = function (r) {\n        return 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n      };\n      var self = {\n        doc: doc,\n        settings: settings,\n        win: win,\n        files: files,\n        stdMode: stdMode,\n        boxModel: boxModel,\n        styleSheetLoader: styleSheetLoader,\n        boundEvents: boundEvents,\n        styles: styles,\n        schema: schema,\n        events: events,\n        isBlock: isBlock,\n        $: $,\n        $$: $$,\n        root: null,\n        clone: clone,\n        getRoot: getRoot,\n        getViewPort: getViewPort,\n        getRect: getRect,\n        getSize: getSize,\n        getParent: getParent,\n        getParents: getParents,\n        get: get,\n        getNext: getNext,\n        getPrev: getPrev,\n        select: select,\n        is: is,\n        add: add,\n        create: create,\n        createHTML: createHTML,\n        createFragment: createFragment,\n        remove: remove,\n        setStyle: setStyle,\n        getStyle: getStyle,\n        setStyles: setStyles,\n        removeAllAttribs: removeAllAttribs,\n        setAttrib: setAttrib,\n        setAttribs: setAttribs,\n        getAttrib: getAttrib,\n        getPos: getPos,\n        parseStyle: parseStyle,\n        serializeStyle: serializeStyle,\n        addStyle: addStyle,\n        loadCSS: loadCSS,\n        addClass: addClass,\n        removeClass: removeClass,\n        hasClass: hasClass,\n        toggleClass: toggleClass,\n        show: show,\n        hide: hide,\n        isHidden: isHidden,\n        uniqueId: uniqueId,\n        setHTML: setHTML,\n        getOuterHTML: getOuterHTML,\n        setOuterHTML: setOuterHTML,\n        decode: decode,\n        encode: encode,\n        insertAfter: insertAfter,\n        replace: replace,\n        rename: rename,\n        findCommonAncestor: findCommonAncestor,\n        toHex: toHex,\n        run: run,\n        getAttribs: getAttribs,\n        isEmpty: isEmpty,\n        createRng: createRng,\n        nodeIndex: findNodeIndex,\n        split: split,\n        bind: bind,\n        unbind: unbind,\n        fire: fire,\n        getContentEditable: getContentEditable,\n        getContentEditableParent: getContentEditableParent,\n        destroy: destroy,\n        isChildOf: isChildOf,\n        dumpRng: dumpRng\n      };\n      attrHooks = setupAttrHooks(styles, settings, function () {\n        return self;\n      });\n      return self;\n    }\n    (function (DOMUtils) {\n      DOMUtils.DOM = DOMUtils(domGlobals.document);\n      DOMUtils.nodeIndex = findNodeIndex;\n    }(DOMUtils || (DOMUtils = {})));\n    var DOMUtils$1 = DOMUtils;\n\n    var DOM = DOMUtils$1.DOM;\n    var each$6 = Tools.each, grep$2 = Tools.grep;\n    var isFunction$1 = function (f) {\n      return typeof f === 'function';\n    };\n    var ScriptLoader = function () {\n      var QUEUED = 0;\n      var LOADING = 1;\n      var LOADED = 2;\n      var FAILED = 3;\n      var states = {};\n      var queue = [];\n      var scriptLoadedCallbacks = {};\n      var queueLoadedCallbacks = [];\n      var loading = 0;\n      var loadScript = function (url, success, failure) {\n        var dom = DOM;\n        var elm, id;\n        var done = function () {\n          dom.remove(id);\n          if (elm) {\n            elm.onreadystatechange = elm.onload = elm = null;\n          }\n          success();\n        };\n        var error = function () {\n          if (isFunction$1(failure)) {\n            failure();\n          } else {\n            if (typeof console !== 'undefined' && console.log) {\n              console.log('Failed to load script: ' + url);\n            }\n          }\n        };\n        id = dom.uniqueId();\n        elm = domGlobals.document.createElement('script');\n        elm.id = id;\n        elm.type = 'text/javascript';\n        elm.src = Tools._addCacheSuffix(url);\n        elm.onload = done;\n        elm.onerror = error;\n        (domGlobals.document.getElementsByTagName('head')[0] || domGlobals.document.body).appendChild(elm);\n      };\n      this.isDone = function (url) {\n        return states[url] === LOADED;\n      };\n      this.markDone = function (url) {\n        states[url] = LOADED;\n      };\n      this.add = this.load = function (url, success, scope, failure) {\n        var state = states[url];\n        if (state === undefined) {\n          queue.push(url);\n          states[url] = QUEUED;\n        }\n        if (success) {\n          if (!scriptLoadedCallbacks[url]) {\n            scriptLoadedCallbacks[url] = [];\n          }\n          scriptLoadedCallbacks[url].push({\n            success: success,\n            failure: failure,\n            scope: scope || this\n          });\n        }\n      };\n      this.remove = function (url) {\n        delete states[url];\n        delete scriptLoadedCallbacks[url];\n      };\n      this.loadQueue = function (success, scope, failure) {\n        this.loadScripts(queue, success, scope, failure);\n      };\n      this.loadScripts = function (scripts, success, scope, failure) {\n        var loadScripts;\n        var failures = [];\n        var execCallbacks = function (name, url) {\n          each$6(scriptLoadedCallbacks[url], function (callback) {\n            if (isFunction$1(callback[name])) {\n              callback[name].call(callback.scope);\n            }\n          });\n          scriptLoadedCallbacks[url] = undefined;\n        };\n        queueLoadedCallbacks.push({\n          success: success,\n          failure: failure,\n          scope: scope || this\n        });\n        loadScripts = function () {\n          var loadingScripts = grep$2(scripts);\n          scripts.length = 0;\n          each$6(loadingScripts, function (url) {\n            if (states[url] === LOADED) {\n              execCallbacks('success', url);\n              return;\n            }\n            if (states[url] === FAILED) {\n              execCallbacks('failure', url);\n              return;\n            }\n            if (states[url] !== LOADING) {\n              states[url] = LOADING;\n              loading++;\n              loadScript(url, function () {\n                states[url] = LOADED;\n                loading--;\n                execCallbacks('success', url);\n                loadScripts();\n              }, function () {\n                states[url] = FAILED;\n                loading--;\n                failures.push(url);\n                execCallbacks('failure', url);\n                loadScripts();\n              });\n            }\n          });\n          if (!loading) {\n            var notifyCallbacks = queueLoadedCallbacks.slice(0);\n            queueLoadedCallbacks.length = 0;\n            each$6(notifyCallbacks, function (callback) {\n              if (failures.length === 0) {\n                if (isFunction$1(callback.success)) {\n                  callback.success.call(callback.scope);\n                }\n              } else {\n                if (isFunction$1(callback.failure)) {\n                  callback.failure.call(callback.scope, failures);\n                }\n              }\n            });\n          }\n        };\n        loadScripts();\n      };\n    };\n    ScriptLoader.ScriptLoader = new ScriptLoader();\n\n    var each$7 = Tools.each;\n    function AddOnManager() {\n      var _this = this;\n      var items = [];\n      var urls = {};\n      var lookup = {};\n      var _listeners = [];\n      var get = function (name) {\n        if (lookup[name]) {\n          return lookup[name].instance;\n        }\n        return undefined;\n      };\n      var dependencies = function (name) {\n        var result;\n        if (lookup[name]) {\n          result = lookup[name].dependencies;\n        }\n        return result || [];\n      };\n      var requireLangPack = function (name, languages) {\n        var language = AddOnManager.language;\n        if (language && AddOnManager.languageLoad !== false) {\n          if (languages) {\n            languages = ',' + languages + ',';\n            if (languages.indexOf(',' + language.substr(0, 2) + ',') !== -1) {\n              language = language.substr(0, 2);\n            } else if (languages.indexOf(',' + language + ',') === -1) {\n              return;\n            }\n          }\n          ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n        }\n      };\n      var add = function (id, addOn, dependencies) {\n        items.push(addOn);\n        lookup[id] = {\n          instance: addOn,\n          dependencies: dependencies\n        };\n        var result = partition(_listeners, function (listener) {\n          return listener.name === id;\n        });\n        _listeners = result.fail;\n        each$7(result.pass, function (listener) {\n          listener.callback();\n        });\n        return addOn;\n      };\n      var remove = function (name) {\n        delete urls[name];\n        delete lookup[name];\n      };\n      var createUrl = function (baseUrl, dep) {\n        if (typeof dep === 'object') {\n          return dep;\n        }\n        return typeof baseUrl === 'string' ? {\n          prefix: '',\n          resource: dep,\n          suffix: ''\n        } : {\n          prefix: baseUrl.prefix,\n          resource: dep,\n          suffix: baseUrl.suffix\n        };\n      };\n      var addComponents = function (pluginName, scripts) {\n        var pluginUrl = _this.urls[pluginName];\n        each$7(scripts, function (script) {\n          ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script);\n        });\n      };\n      var loadDependencies = function (name, addOnUrl, success, scope) {\n        var deps = dependencies(name);\n        each$7(deps, function (dep) {\n          var newUrl = createUrl(addOnUrl, dep);\n          load(newUrl.resource, newUrl, undefined, undefined);\n        });\n        if (success) {\n          if (scope) {\n            success.call(scope);\n          } else {\n            success.call(ScriptLoader);\n          }\n        }\n      };\n      var load = function (name, addOnUrl, success, scope, failure) {\n        if (urls[name]) {\n          return;\n        }\n        var urlString = typeof addOnUrl === 'string' ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix;\n        if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) {\n          urlString = AddOnManager.baseURL + '/' + urlString;\n        }\n        urls[name] = urlString.substring(0, urlString.lastIndexOf('/'));\n        if (lookup[name]) {\n          loadDependencies(name, addOnUrl, success, scope);\n        } else {\n          ScriptLoader.ScriptLoader.add(urlString, function () {\n            return loadDependencies(name, addOnUrl, success, scope);\n          }, scope, failure);\n        }\n      };\n      var waitFor = function (name, callback) {\n        if (lookup.hasOwnProperty(name)) {\n          callback();\n        } else {\n          _listeners.push({\n            name: name,\n            callback: callback\n          });\n        }\n      };\n      return {\n        items: items,\n        urls: urls,\n        lookup: lookup,\n        _listeners: _listeners,\n        get: get,\n        dependencies: dependencies,\n        requireLangPack: requireLangPack,\n        add: add,\n        remove: remove,\n        createUrl: createUrl,\n        addComponents: addComponents,\n        load: load,\n        waitFor: waitFor\n      };\n    }\n    (function (AddOnManager) {\n      AddOnManager.PluginManager = AddOnManager();\n      AddOnManager.ThemeManager = AddOnManager();\n    }(AddOnManager || (AddOnManager = {})));\n\n    var before = function (marker, element) {\n      var parent$1 = parent(marker);\n      parent$1.each(function (v) {\n        v.dom().insertBefore(element.dom(), marker.dom());\n      });\n    };\n    var after = function (marker, element) {\n      var sibling = nextSibling(marker);\n      sibling.fold(function () {\n        var parent$1 = parent(marker);\n        parent$1.each(function (v) {\n          append(v, element);\n        });\n      }, function (v) {\n        before(v, element);\n      });\n    };\n    var prepend = function (parent, element) {\n      var firstChild$1 = firstChild(parent);\n      firstChild$1.fold(function () {\n        append(parent, element);\n      }, function (v) {\n        parent.dom().insertBefore(element.dom(), v.dom());\n      });\n    };\n    var append = function (parent, element) {\n      parent.dom().appendChild(element.dom());\n    };\n    var wrap$1 = function (element, wrapper) {\n      before(element, wrapper);\n      append(wrapper, element);\n    };\n\n    var before$1 = function (marker, elements) {\n      each(elements, function (x) {\n        before(marker, x);\n      });\n    };\n    var append$1 = function (parent, elements) {\n      each(elements, function (x) {\n        append(parent, x);\n      });\n    };\n\n    var empty = function (element) {\n      element.dom().textContent = '';\n      each(children(element), function (rogue) {\n        remove$1(rogue);\n      });\n    };\n    var remove$1 = function (element) {\n      var dom = element.dom();\n      if (dom.parentNode !== null) {\n        dom.parentNode.removeChild(dom);\n      }\n    };\n    var unwrap = function (wrapper) {\n      var children$1 = children(wrapper);\n      if (children$1.length > 0) {\n        before$1(wrapper, children$1);\n      }\n      remove$1(wrapper);\n    };\n\n    var first = function (fn, rate) {\n      var timer = null;\n      var cancel = function () {\n        if (timer !== null) {\n          domGlobals.clearTimeout(timer);\n          timer = null;\n        }\n      };\n      var throttle = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        if (timer === null) {\n          timer = domGlobals.setTimeout(function () {\n            fn.apply(null, args);\n            timer = null;\n          }, rate);\n        }\n      };\n      return {\n        cancel: cancel,\n        throttle: throttle\n      };\n    };\n    var last$2 = function (fn, rate) {\n      var timer = null;\n      var cancel = function () {\n        if (timer !== null) {\n          domGlobals.clearTimeout(timer);\n          timer = null;\n        }\n      };\n      var throttle = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        if (timer !== null) {\n          domGlobals.clearTimeout(timer);\n        }\n        timer = domGlobals.setTimeout(function () {\n          fn.apply(null, args);\n          timer = null;\n        }, rate);\n      };\n      return {\n        cancel: cancel,\n        throttle: throttle\n      };\n    };\n\n    var Cell = function (initial) {\n      var value = initial;\n      var get = function () {\n        return value;\n      };\n      var set = function (v) {\n        value = v;\n      };\n      var clone = function () {\n        return Cell(get());\n      };\n      return {\n        get: get,\n        set: set,\n        clone: clone\n      };\n    };\n\n    var read = function (element, attr) {\n      var value = get(element, attr);\n      return value === undefined || value === '' ? [] : value.split(' ');\n    };\n    var add = function (element, attr, id) {\n      var old = read(element, attr);\n      var nu = old.concat([id]);\n      set(element, attr, nu.join(' '));\n      return true;\n    };\n    var remove$2 = function (element, attr, id) {\n      var nu = filter(read(element, attr), function (v) {\n        return v !== id;\n      });\n      if (nu.length > 0) {\n        set(element, attr, nu.join(' '));\n      } else {\n        remove(element, attr);\n      }\n      return false;\n    };\n\n    var supports = function (element) {\n      return element.dom().classList !== undefined;\n    };\n    var get$2 = function (element) {\n      return read(element, 'class');\n    };\n    var add$1 = function (element, clazz) {\n      return add(element, 'class', clazz);\n    };\n    var remove$3 = function (element, clazz) {\n      return remove$2(element, 'class', clazz);\n    };\n\n    var add$2 = function (element, clazz) {\n      if (supports(element)) {\n        element.dom().classList.add(clazz);\n      } else {\n        add$1(element, clazz);\n      }\n    };\n    var cleanClass = function (element) {\n      var classList = supports(element) ? element.dom().classList : get$2(element);\n      if (classList.length === 0) {\n        remove(element, 'class');\n      }\n    };\n    var remove$4 = function (element, clazz) {\n      if (supports(element)) {\n        var classList = element.dom().classList;\n        classList.remove(clazz);\n      } else {\n        remove$3(element, clazz);\n      }\n      cleanClass(element);\n    };\n    var has$2 = function (element, clazz) {\n      return supports(element) && element.dom().classList.contains(clazz);\n    };\n\n    var descendants = function (scope, predicate) {\n      var result = [];\n      each(children(scope), function (x) {\n        if (predicate(x)) {\n          result = result.concat([x]);\n        }\n        result = result.concat(descendants(x, predicate));\n      });\n      return result;\n    };\n\n    var descendants$1 = function (scope, selector) {\n      return all(selector, scope);\n    };\n\n    function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n      return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\n    }\n\n    var ancestor = function (scope, predicate, isRoot) {\n      var element = scope.dom();\n      var stop = isFunction(isRoot) ? isRoot : constant(false);\n      while (element.parentNode) {\n        element = element.parentNode;\n        var el = Element.fromDom(element);\n        if (predicate(el)) {\n          return Option.some(el);\n        } else if (stop(el)) {\n          break;\n        }\n      }\n      return Option.none();\n    };\n    var closest = function (scope, predicate, isRoot) {\n      var is = function (s, test) {\n        return test(s);\n      };\n      return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\n    };\n\n    var ancestor$1 = function (scope, selector, isRoot) {\n      return ancestor(scope, function (e) {\n        return is$1(e, selector);\n      }, isRoot);\n    };\n    var descendant = function (scope, selector) {\n      return one(selector, scope);\n    };\n    var closest$1 = function (scope, selector, isRoot) {\n      return ClosestOrAncestor(is$1, ancestor$1, scope, selector, isRoot);\n    };\n\n    var annotation = constant('mce-annotation');\n    var dataAnnotation = constant('data-mce-annotation');\n    var dataAnnotationId = constant('data-mce-annotation-uid');\n\n    var identify = function (editor, annotationName) {\n      var rng = editor.selection.getRng();\n      var start = Element.fromDom(rng.startContainer);\n      var root = Element.fromDom(editor.getBody());\n      var selector = annotationName.fold(function () {\n        return '.' + annotation();\n      }, function (an) {\n        return '[' + dataAnnotation() + '=\"' + an + '\"]';\n      });\n      var newStart = child(start, rng.startOffset).getOr(start);\n      var closest = closest$1(newStart, selector, function (n) {\n        return eq(n, root);\n      });\n      var getAttr = function (c, property) {\n        if (has$1(c, property)) {\n          return Option.some(get(c, property));\n        } else {\n          return Option.none();\n        }\n      };\n      return closest.bind(function (c) {\n        return getAttr(c, '' + dataAnnotationId()).bind(function (uid) {\n          return getAttr(c, '' + dataAnnotation()).map(function (name) {\n            var elements = findMarkers(editor, uid);\n            return {\n              uid: uid,\n              name: name,\n              elements: elements\n            };\n          });\n        });\n      });\n    };\n    var isAnnotation = function (elem) {\n      return isElement(elem) && has$2(elem, annotation());\n    };\n    var findMarkers = function (editor, uid) {\n      var body = Element.fromDom(editor.getBody());\n      return descendants$1(body, '[' + dataAnnotationId() + '=\"' + uid + '\"]');\n    };\n    var findAll = function (editor, name) {\n      var body = Element.fromDom(editor.getBody());\n      var markers = descendants$1(body, '[' + dataAnnotation() + '=\"' + name + '\"]');\n      var directory = {};\n      each(markers, function (m) {\n        var uid = get(m, dataAnnotationId());\n        var nodesAlready = directory.hasOwnProperty(uid) ? directory[uid] : [];\n        directory[uid] = nodesAlready.concat([m]);\n      });\n      return directory;\n    };\n\n    var setup = function (editor, registry) {\n      var changeCallbacks = Cell({});\n      var initData = function () {\n        return {\n          listeners: [],\n          previous: Cell(Option.none())\n        };\n      };\n      var withCallbacks = function (name, f) {\n        updateCallbacks(name, function (data) {\n          f(data);\n          return data;\n        });\n      };\n      var updateCallbacks = function (name, f) {\n        var callbackMap = changeCallbacks.get();\n        var data = callbackMap.hasOwnProperty(name) ? callbackMap[name] : initData();\n        var outputData = f(data);\n        callbackMap[name] = outputData;\n        changeCallbacks.set(callbackMap);\n      };\n      var fireCallbacks = function (name, uid, elements) {\n        withCallbacks(name, function (data) {\n          each(data.listeners, function (f) {\n            return f(true, name, {\n              uid: uid,\n              nodes: map(elements, function (elem) {\n                return elem.dom();\n              })\n            });\n          });\n        });\n      };\n      var fireNoAnnotation = function (name) {\n        withCallbacks(name, function (data) {\n          each(data.listeners, function (f) {\n            return f(false, name);\n          });\n        });\n      };\n      var onNodeChange = last$2(function () {\n        var callbackMap = changeCallbacks.get();\n        var annotations = sort(keys(callbackMap));\n        each(annotations, function (name) {\n          updateCallbacks(name, function (data) {\n            var prev = data.previous.get();\n            identify(editor, Option.some(name)).fold(function () {\n              if (prev.isSome()) {\n                fireNoAnnotation(name);\n                data.previous.set(Option.none());\n              }\n            }, function (_a) {\n              var uid = _a.uid, name = _a.name, elements = _a.elements;\n              if (!prev.is(uid)) {\n                fireCallbacks(name, uid, elements);\n                data.previous.set(Option.some(uid));\n              }\n            });\n            return {\n              previous: data.previous,\n              listeners: data.listeners\n            };\n          });\n        });\n      }, 30);\n      editor.on('remove', function () {\n        onNodeChange.cancel();\n      });\n      editor.on('nodeChange', function () {\n        onNodeChange.throttle();\n      });\n      var addListener = function (name, f) {\n        updateCallbacks(name, function (data) {\n          return {\n            previous: data.previous,\n            listeners: data.listeners.concat([f])\n          };\n        });\n      };\n      return { addListener: addListener };\n    };\n\n    var setup$1 = function (editor, registry) {\n      var identifyParserNode = function (span) {\n        var optAnnotation = Option.from(span.attributes.map[dataAnnotation()]);\n        return optAnnotation.bind(registry.lookup);\n      };\n      editor.on('init', function () {\n        editor.serializer.addNodeFilter('span', function (spans) {\n          each(spans, function (span) {\n            identifyParserNode(span).each(function (settings) {\n              if (settings.persistent === false) {\n                span.unwrap();\n              }\n            });\n          });\n        });\n      });\n    };\n\n    var create$1 = function () {\n      var annotations = {};\n      var register = function (name, settings) {\n        annotations[name] = {\n          name: name,\n          settings: settings\n        };\n      };\n      var lookup = function (name) {\n        return annotations.hasOwnProperty(name) ? Option.from(annotations[name]).map(function (a) {\n          return a.settings;\n        }) : Option.none();\n      };\n      return {\n        register: register,\n        lookup: lookup\n      };\n    };\n\n    var __assign = function () {\n      __assign = Object.assign || function __assign(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s)\n            if (Object.prototype.hasOwnProperty.call(s, p))\n              t[p] = s[p];\n        }\n        return t;\n      };\n      return __assign.apply(this, arguments);\n    };\n    function __rest(s, e) {\n      var t = {};\n      for (var p in s)\n        if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n          t[p] = s[p];\n      if (s != null && typeof Object.getOwnPropertySymbols === 'function')\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n            t[p[i]] = s[p[i]];\n        }\n      return t;\n    }\n    function __spreadArrays() {\n      for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n        s += arguments[i].length;\n      for (var r = Array(s), k = 0, i = 0; i < il; i++)\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n      return r;\n    }\n\n    var unique = 0;\n    var generate = function (prefix) {\n      var date = new Date();\n      var time = date.getTime();\n      var random = Math.floor(Math.random() * 1000000000);\n      unique++;\n      return prefix + '_' + random + unique + String(time);\n    };\n\n    var add$3 = function (element, classes) {\n      each(classes, function (x) {\n        add$2(element, x);\n      });\n    };\n\n    var clone = function (original, isDeep) {\n      return Element.fromDom(original.dom().cloneNode(isDeep));\n    };\n    var shallow = function (original) {\n      return clone(original, false);\n    };\n    var deep = function (original) {\n      return clone(original, true);\n    };\n\n    var fromHtml$1 = function (html, scope) {\n      var doc = scope || domGlobals.document;\n      var div = doc.createElement('div');\n      div.innerHTML = html;\n      return children(Element.fromDom(div));\n    };\n\n    var get$3 = function (element) {\n      return element.dom().innerHTML;\n    };\n    var set$1 = function (element, content) {\n      var owner$1 = owner(element);\n      var docDom = owner$1.dom();\n      var fragment = Element.fromDom(docDom.createDocumentFragment());\n      var contentElements = fromHtml$1(content, docDom);\n      append$1(fragment, contentElements);\n      empty(element);\n      append(element, fragment);\n    };\n\n    var ZWSP = '\\uFEFF';\n    var isZwsp = function (chr) {\n      return chr === ZWSP;\n    };\n    var trim$3 = function (text) {\n      return text.replace(new RegExp(ZWSP, 'g'), '');\n    };\n    var Zwsp = {\n      isZwsp: isZwsp,\n      ZWSP: ZWSP,\n      trim: trim$3\n    };\n\n    var isElement$2 = NodeType.isElement;\n    var isText$2 = NodeType.isText;\n    var isCaretContainerBlock = function (node) {\n      if (isText$2(node)) {\n        node = node.parentNode;\n      }\n      return isElement$2(node) && node.hasAttribute('data-mce-caret');\n    };\n    var isCaretContainerInline = function (node) {\n      return isText$2(node) && Zwsp.isZwsp(node.data);\n    };\n    var isCaretContainer = function (node) {\n      return isCaretContainerBlock(node) || isCaretContainerInline(node);\n    };\n    var hasContent = function (node) {\n      return node.firstChild !== node.lastChild || !NodeType.isBr(node.firstChild);\n    };\n    var insertInline = function (node, before) {\n      var doc, sibling, textNode, parentNode;\n      doc = node.ownerDocument;\n      textNode = doc.createTextNode(Zwsp.ZWSP);\n      parentNode = node.parentNode;\n      if (!before) {\n        sibling = node.nextSibling;\n        if (isText$2(sibling)) {\n          if (isCaretContainer(sibling)) {\n            return sibling;\n          }\n          if (startsWithCaretContainer(sibling)) {\n            sibling.splitText(1);\n            return sibling;\n          }\n        }\n        if (node.nextSibling) {\n          parentNode.insertBefore(textNode, node.nextSibling);\n        } else {\n          parentNode.appendChild(textNode);\n        }\n      } else {\n        sibling = node.previousSibling;\n        if (isText$2(sibling)) {\n          if (isCaretContainer(sibling)) {\n            return sibling;\n          }\n          if (endsWithCaretContainer(sibling)) {\n            return sibling.splitText(sibling.data.length - 1);\n          }\n        }\n        parentNode.insertBefore(textNode, node);\n      }\n      return textNode;\n    };\n    var isBeforeInline = function (pos) {\n      var container = pos.container();\n      if (!pos || !NodeType.isText(container)) {\n        return false;\n      }\n      return container.data.charAt(pos.offset()) === Zwsp.ZWSP || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n    };\n    var isAfterInline = function (pos) {\n      var container = pos.container();\n      if (!pos || !NodeType.isText(container)) {\n        return false;\n      }\n      return container.data.charAt(pos.offset() - 1) === Zwsp.ZWSP || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n    };\n    var createBogusBr = function () {\n      var br = domGlobals.document.createElement('br');\n      br.setAttribute('data-mce-bogus', '1');\n      return br;\n    };\n    var insertBlock = function (blockName, node, before) {\n      var doc, blockNode, parentNode;\n      doc = node.ownerDocument;\n      blockNode = doc.createElement(blockName);\n      blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n      blockNode.setAttribute('data-mce-bogus', 'all');\n      blockNode.appendChild(createBogusBr());\n      parentNode = node.parentNode;\n      if (!before) {\n        if (node.nextSibling) {\n          parentNode.insertBefore(blockNode, node.nextSibling);\n        } else {\n          parentNode.appendChild(blockNode);\n        }\n      } else {\n        parentNode.insertBefore(blockNode, node);\n      }\n      return blockNode;\n    };\n    var startsWithCaretContainer = function (node) {\n      return isText$2(node) && node.data[0] === Zwsp.ZWSP;\n    };\n    var endsWithCaretContainer = function (node) {\n      return isText$2(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;\n    };\n    var trimBogusBr = function (elm) {\n      var brs = elm.getElementsByTagName('br');\n      var lastBr = brs[brs.length - 1];\n      if (NodeType.isBogus(lastBr)) {\n        lastBr.parentNode.removeChild(lastBr);\n      }\n    };\n    var showCaretContainerBlock = function (caretContainer) {\n      if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) {\n        trimBogusBr(caretContainer);\n        caretContainer.removeAttribute('data-mce-caret');\n        caretContainer.removeAttribute('data-mce-bogus');\n        caretContainer.removeAttribute('style');\n        caretContainer.removeAttribute('_moz_abspos');\n        return caretContainer;\n      }\n      return null;\n    };\n    var isRangeInCaretContainerBlock = function (range) {\n      return isCaretContainerBlock(range.startContainer);\n    };\n\n    var isContentEditableTrue$1 = NodeType.isContentEditableTrue;\n    var isContentEditableFalse$1 = NodeType.isContentEditableFalse;\n    var isBr$2 = NodeType.isBr;\n    var isText$3 = NodeType.isText;\n    var isInvalidTextElement = NodeType.matchNodeNames('script style textarea');\n    var isAtomicInline = NodeType.matchNodeNames('img input textarea hr iframe video audio object');\n    var isTable$1 = NodeType.matchNodeNames('table');\n    var isCaretContainer$1 = isCaretContainer;\n    var isCaretCandidate = function (node) {\n      if (isCaretContainer$1(node)) {\n        return false;\n      }\n      if (isText$3(node)) {\n        if (isInvalidTextElement(node.parentNode)) {\n          return false;\n        }\n        return true;\n      }\n      return isAtomicInline(node) || isBr$2(node) || isTable$1(node) || isNonUiContentEditableFalse(node);\n    };\n    var isUnselectable = function (node) {\n      return NodeType.isElement(node) && node.getAttribute('unselectable') === 'true';\n    };\n    var isNonUiContentEditableFalse = function (node) {\n      return isUnselectable(node) === false && isContentEditableFalse$1(node);\n    };\n    var isInEditable = function (node, root) {\n      for (node = node.parentNode; node && node !== root; node = node.parentNode) {\n        if (isNonUiContentEditableFalse(node)) {\n          return false;\n        }\n        if (isContentEditableTrue$1(node)) {\n          return true;\n        }\n      }\n      return true;\n    };\n    var isAtomicContentEditableFalse = function (node) {\n      if (!isNonUiContentEditableFalse(node)) {\n        return false;\n      }\n      return foldl(from$1(node.getElementsByTagName('*')), function (result, elm) {\n        return result || isContentEditableTrue$1(elm);\n      }, false) !== true;\n    };\n    var isAtomic = function (node) {\n      return isAtomicInline(node) || isAtomicContentEditableFalse(node);\n    };\n    var isEditableCaretCandidate = function (node, root) {\n      return isCaretCandidate(node) && isInEditable(node, root);\n    };\n\n    var round = Math.round;\n    var clone$1 = function (rect) {\n      if (!rect) {\n        return {\n          left: 0,\n          top: 0,\n          bottom: 0,\n          right: 0,\n          width: 0,\n          height: 0\n        };\n      }\n      return {\n        left: round(rect.left),\n        top: round(rect.top),\n        bottom: round(rect.bottom),\n        right: round(rect.right),\n        width: round(rect.width),\n        height: round(rect.height)\n      };\n    };\n    var collapse = function (rect, toStart) {\n      rect = clone$1(rect);\n      if (toStart) {\n        rect.right = rect.left;\n      } else {\n        rect.left = rect.left + rect.width;\n        rect.right = rect.left;\n      }\n      rect.width = 0;\n      return rect;\n    };\n    var isEqual = function (rect1, rect2) {\n      return rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n    };\n    var isValidOverflow = function (overflowY, rect1, rect2) {\n      return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n    };\n    var isAbove = function (rect1, rect2) {\n      var halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\n      if (rect1.bottom - halfHeight < rect2.top) {\n        return true;\n      }\n      if (rect1.top > rect2.bottom) {\n        return false;\n      }\n      return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\n    };\n    var isBelow = function (rect1, rect2) {\n      if (rect1.top > rect2.bottom) {\n        return true;\n      }\n      if (rect1.bottom < rect2.top) {\n        return false;\n      }\n      return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2);\n    };\n    var containsXY = function (rect, clientX, clientY) {\n      return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n    };\n    var overflowX = function (outer, inner) {\n      if (inner.left > outer.left && inner.right < outer.right) {\n        return 0;\n      } else {\n        return inner.left < outer.left ? inner.left - outer.left : inner.right - outer.right;\n      }\n    };\n    var overflowY = function (outer, inner) {\n      if (inner.top > outer.top && inner.bottom < outer.bottom) {\n        return 0;\n      } else {\n        return inner.top < outer.top ? inner.top - outer.top : inner.bottom - outer.bottom;\n      }\n    };\n    var getOverflow = function (outer, inner) {\n      return {\n        x: overflowX(outer, inner),\n        y: overflowY(outer, inner)\n      };\n    };\n\n    var getSelectedNode = function (range) {\n      var startContainer = range.startContainer, startOffset = range.startOffset;\n      if (startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n        return startContainer.childNodes[startOffset];\n      }\n      return null;\n    };\n    var getNode = function (container, offset) {\n      if (container.nodeType === 1 && container.hasChildNodes()) {\n        if (offset >= container.childNodes.length) {\n          offset = container.childNodes.length - 1;\n        }\n        container = container.childNodes[offset];\n      }\n      return container;\n    };\n\n    var extendingChars = new RegExp('[\\u0300-\\u036f\\u0483-\\u0487\\u0488-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u0610-\\u061a' + '\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7-\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0' + '\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e3-\\u0902\\u093a\\u093c' + '\\u0941-\\u0948\\u094d\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2-\\u09e3' + '\\u0a01-\\u0a02\\u0a3c\\u0a41-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70-\\u0a71\\u0a75\\u0a81-\\u0a82\\u0abc' + '\\u0ac1-\\u0ac5\\u0ac7-\\u0ac8\\u0acd\\u0ae2-\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57' + '\\u0b62-\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c00\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56' + '\\u0c62-\\u0c63\\u0c81\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc-\\u0ccd\\u0cd5-\\u0cd6\\u0ce2-\\u0ce3\\u0d01\\u0d3e\\u0d41-\\u0d44' + '\\u0d4d\\u0d57\\u0d62-\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9' + '\\u0ebb-\\u0ebc\\u0ec8-\\u0ecd\\u0f18-\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97' + '\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039-\\u103a\\u103d-\\u103e\\u1058-\\u1059\\u105e-\\u1060\\u1071-\\u1074' + '\\u1082\\u1085-\\u1086\\u108d\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17b4-\\u17b5' + '\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193b\\u1a17-\\u1a18' + '\\u1a1b\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1ab0-\\u1abd\\u1ABE\\u1b00-\\u1b03\\u1b34' + '\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80-\\u1b81\\u1ba2-\\u1ba5\\u1ba8-\\u1ba9\\u1bab-\\u1bad\\u1be6\\u1be8-\\u1be9' + '\\u1bed\\u1bef-\\u1bf1\\u1c2c-\\u1c33\\u1c36-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1cf4\\u1cf8-\\u1cf9' + '\\u1dc0-\\u1df5\\u1dfc-\\u1dff\\u200c-\\u200d\\u20d0-\\u20dc\\u20DD-\\u20E0\\u20e1\\u20E2-\\u20E4\\u20e5-\\u20f0\\u2cef-\\u2cf1' + '\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302d\\u302e-\\u302f\\u3099-\\u309a\\ua66f\\uA670-\\uA672\\ua674-\\ua67d\\ua69e-\\ua69f\\ua6f0-\\ua6f1' + '\\ua802\\ua806\\ua80b\\ua825-\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc' + '\\ua9e5\\uaa29-\\uaa2e\\uaa31-\\uaa32\\uaa35-\\uaa36\\uaa43\\uaa4c\\uaa7c\\uaab0\\uaab2-\\uaab4\\uaab7-\\uaab8\\uaabe-\\uaabf\\uaac1' + '\\uaaec-\\uaaed\\uaaf6\\uabe5\\uabe8\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\uff9e-\\uff9f]');\n    var isExtendingChar = function (ch) {\n      return typeof ch === 'string' && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n    };\n\n    var lift2 = function (oa, ob, f) {\n      return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\n    };\n    var lift3 = function (oa, ob, oc, f) {\n      return oa.isSome() && ob.isSome() && oc.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Option.none();\n    };\n\n    var slice$2 = [].slice;\n    var or = function () {\n      var x = [];\n      for (var _i = 0; _i < arguments.length; _i++) {\n        x[_i] = arguments[_i];\n      }\n      var args = slice$2.call(arguments);\n      return function (x) {\n        for (var i = 0; i < args.length; i++) {\n          if (args[i](x)) {\n            return true;\n          }\n        }\n        return false;\n      };\n    };\n    var and = function () {\n      var x = [];\n      for (var _i = 0; _i < arguments.length; _i++) {\n        x[_i] = arguments[_i];\n      }\n      var args = slice$2.call(arguments);\n      return function (x) {\n        for (var i = 0; i < args.length; i++) {\n          if (!args[i](x)) {\n            return false;\n          }\n        }\n        return true;\n      };\n    };\n    var Predicate = {\n      and: and,\n      or: or\n    };\n\n    var isElement$3 = NodeType.isElement;\n    var isCaretCandidate$1 = isCaretCandidate;\n    var isBlock$1 = NodeType.matchStyleValues('display', 'block table');\n    var isFloated = NodeType.matchStyleValues('float', 'left right');\n    var isValidElementCaretCandidate = Predicate.and(isElement$3, isCaretCandidate$1, not(isFloated));\n    var isNotPre = not(NodeType.matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n    var isText$4 = NodeType.isText;\n    var isBr$3 = NodeType.isBr;\n    var nodeIndex = DOMUtils$1.nodeIndex;\n    var resolveIndex = getNode;\n    var createRange = function (doc) {\n      return 'createRange' in doc ? doc.createRange() : DOMUtils$1.DOM.createRng();\n    };\n    var isWhiteSpace = function (chr) {\n      return chr && /[\\r\\n\\t ]/.test(chr);\n    };\n    var isRange = function (rng) {\n      return !!rng.setStart && !!rng.setEnd;\n    };\n    var isHiddenWhiteSpaceRange = function (range) {\n      var container = range.startContainer;\n      var offset = range.startOffset;\n      var text;\n      if (isWhiteSpace(range.toString()) && isNotPre(container.parentNode) && NodeType.isText(container)) {\n        text = container.data;\n        if (isWhiteSpace(text[offset - 1]) || isWhiteSpace(text[offset + 1])) {\n          return true;\n        }\n      }\n      return false;\n    };\n    var getBrClientRect = function (brNode) {\n      var doc = brNode.ownerDocument;\n      var rng = createRange(doc);\n      var nbsp = doc.createTextNode('\\xA0');\n      var parentNode = brNode.parentNode;\n      var clientRect;\n      parentNode.insertBefore(nbsp, brNode);\n      rng.setStart(nbsp, 0);\n      rng.setEnd(nbsp, 1);\n      clientRect = clone$1(rng.getBoundingClientRect());\n      parentNode.removeChild(nbsp);\n      return clientRect;\n    };\n    var getBoundingClientRectWebKitText = function (rng) {\n      var sc = rng.startContainer;\n      var ec = rng.endContainer;\n      var so = rng.startOffset;\n      var eo = rng.endOffset;\n      if (sc === ec && NodeType.isText(ec) && so === 0 && eo === 1) {\n        var newRng = rng.cloneRange();\n        newRng.setEndAfter(ec);\n        return getBoundingClientRect(newRng);\n      } else {\n        return null;\n      }\n    };\n    var isZeroRect = function (r) {\n      return r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n    };\n    var getBoundingClientRect = function (item) {\n      var clientRect, clientRects;\n      clientRects = item.getClientRects();\n      if (clientRects.length > 0) {\n        clientRect = clone$1(clientRects[0]);\n      } else {\n        clientRect = clone$1(item.getBoundingClientRect());\n      }\n      if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\n        return getBrClientRect(item);\n      }\n      if (isZeroRect(clientRect) && isRange(item)) {\n        return getBoundingClientRectWebKitText(item);\n      }\n      return clientRect;\n    };\n    var collapseAndInflateWidth = function (clientRect, toStart) {\n      var newClientRect = collapse(clientRect, toStart);\n      newClientRect.width = 1;\n      newClientRect.right = newClientRect.left + 1;\n      return newClientRect;\n    };\n    var getCaretPositionClientRects = function (caretPosition) {\n      var clientRects = [];\n      var beforeNode, node;\n      var addUniqueAndValidRect = function (clientRect) {\n        if (clientRect.height === 0) {\n          return;\n        }\n        if (clientRects.length > 0) {\n          if (isEqual(clientRect, clientRects[clientRects.length - 1])) {\n            return;\n          }\n        }\n        clientRects.push(clientRect);\n      };\n      var addCharacterOffset = function (container, offset) {\n        var range = createRange(container.ownerDocument);\n        if (offset < container.data.length) {\n          if (isExtendingChar(container.data[offset])) {\n            return clientRects;\n          }\n          if (isExtendingChar(container.data[offset - 1])) {\n            range.setStart(container, offset);\n            range.setEnd(container, offset + 1);\n            if (!isHiddenWhiteSpaceRange(range)) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));\n              return clientRects;\n            }\n          }\n        }\n        if (offset > 0) {\n          range.setStart(container, offset - 1);\n          range.setEnd(container, offset);\n          if (!isHiddenWhiteSpaceRange(range)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));\n          }\n        }\n        if (offset < container.data.length) {\n          range.setStart(container, offset);\n          range.setEnd(container, offset + 1);\n          if (!isHiddenWhiteSpaceRange(range)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), true));\n          }\n        }\n      };\n      if (isText$4(caretPosition.container())) {\n        addCharacterOffset(caretPosition.container(), caretPosition.offset());\n        return clientRects;\n      }\n      if (isElement$3(caretPosition.container())) {\n        if (caretPosition.isAtEnd()) {\n          node = resolveIndex(caretPosition.container(), caretPosition.offset());\n          if (isText$4(node)) {\n            addCharacterOffset(node, node.data.length);\n          }\n          if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\n          }\n        } else {\n          node = resolveIndex(caretPosition.container(), caretPosition.offset());\n          if (isText$4(node)) {\n            addCharacterOffset(node, 0);\n          }\n          if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\n            return clientRects;\n          }\n          beforeNode = resolveIndex(caretPosition.container(), caretPosition.offset() - 1);\n          if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) {\n            if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\n              addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(beforeNode), false));\n            }\n          }\n          if (isValidElementCaretCandidate(node)) {\n            addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), true));\n          }\n        }\n      }\n      return clientRects;\n    };\n    function CaretPosition(container, offset, clientRects) {\n      var isAtStart = function () {\n        if (isText$4(container)) {\n          return offset === 0;\n        }\n        return offset === 0;\n      };\n      var isAtEnd = function () {\n        if (isText$4(container)) {\n          return offset >= container.data.length;\n        }\n        return offset >= container.childNodes.length;\n      };\n      var toRange = function () {\n        var range;\n        range = createRange(container.ownerDocument);\n        range.setStart(container, offset);\n        range.setEnd(container, offset);\n        return range;\n      };\n      var getClientRects = function () {\n        if (!clientRects) {\n          clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n        }\n        return clientRects;\n      };\n      var isVisible = function () {\n        return getClientRects().length > 0;\n      };\n      var isEqual = function (caretPosition) {\n        return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n      };\n      var getNode = function (before) {\n        return resolveIndex(container, before ? offset - 1 : offset);\n      };\n      return {\n        container: constant(container),\n        offset: constant(offset),\n        toRange: toRange,\n        getClientRects: getClientRects,\n        isVisible: isVisible,\n        isAtStart: isAtStart,\n        isAtEnd: isAtEnd,\n        isEqual: isEqual,\n        getNode: getNode\n      };\n    }\n    (function (CaretPosition) {\n      CaretPosition.fromRangeStart = function (range) {\n        return CaretPosition(range.startContainer, range.startOffset);\n      };\n      CaretPosition.fromRangeEnd = function (range) {\n        return CaretPosition(range.endContainer, range.endOffset);\n      };\n      CaretPosition.after = function (node) {\n        return CaretPosition(node.parentNode, nodeIndex(node) + 1);\n      };\n      CaretPosition.before = function (node) {\n        return CaretPosition(node.parentNode, nodeIndex(node));\n      };\n      CaretPosition.isAbove = function (pos1, pos2) {\n        return lift2(head(pos2.getClientRects()), last(pos1.getClientRects()), isAbove).getOr(false);\n      };\n      CaretPosition.isBelow = function (pos1, pos2) {\n        return lift2(last(pos2.getClientRects()), head(pos1.getClientRects()), isBelow).getOr(false);\n      };\n      CaretPosition.isAtStart = function (pos) {\n        return pos ? pos.isAtStart() : false;\n      };\n      CaretPosition.isAtEnd = function (pos) {\n        return pos ? pos.isAtEnd() : false;\n      };\n      CaretPosition.isTextPosition = function (pos) {\n        return pos ? NodeType.isText(pos.container()) : false;\n      };\n      CaretPosition.isElementPosition = function (pos) {\n        return CaretPosition.isTextPosition(pos) === false;\n      };\n    }(CaretPosition || (CaretPosition = {})));\n    var CaretPosition$1 = CaretPosition;\n\n    var isText$5 = NodeType.isText;\n    var isBogus$1 = NodeType.isBogus;\n    var nodeIndex$1 = DOMUtils$1.nodeIndex;\n    var normalizedParent = function (node) {\n      var parentNode = node.parentNode;\n      if (isBogus$1(parentNode)) {\n        return normalizedParent(parentNode);\n      }\n      return parentNode;\n    };\n    var getChildNodes = function (node) {\n      if (!node) {\n        return [];\n      }\n      return ArrUtils.reduce(node.childNodes, function (result, node) {\n        if (isBogus$1(node) && node.nodeName !== 'BR') {\n          result = result.concat(getChildNodes(node));\n        } else {\n          result.push(node);\n        }\n        return result;\n      }, []);\n    };\n    var normalizedTextOffset = function (node, offset) {\n      while (node = node.previousSibling) {\n        if (!isText$5(node)) {\n          break;\n        }\n        offset += node.data.length;\n      }\n      return offset;\n    };\n    var equal = function (a) {\n      return function (b) {\n        return a === b;\n      };\n    };\n    var normalizedNodeIndex = function (node) {\n      var nodes, index, numTextFragments;\n      nodes = getChildNodes(normalizedParent(node));\n      index = ArrUtils.findIndex(nodes, equal(node), node);\n      nodes = nodes.slice(0, index + 1);\n      numTextFragments = ArrUtils.reduce(nodes, function (result, node, i) {\n        if (isText$5(node) && isText$5(nodes[i - 1])) {\n          result++;\n        }\n        return result;\n      }, 0);\n      nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(node.nodeName));\n      index = ArrUtils.findIndex(nodes, equal(node), node);\n      return index - numTextFragments;\n    };\n    var createPathItem = function (node) {\n      var name;\n      if (isText$5(node)) {\n        name = 'text()';\n      } else {\n        name = node.nodeName.toLowerCase();\n      }\n      return name + '[' + normalizedNodeIndex(node) + ']';\n    };\n    var parentsUntil = function (root, node, predicate) {\n      var parents = [];\n      for (node = node.parentNode; node !== root; node = node.parentNode) {\n        if (predicate && predicate(node)) {\n          break;\n        }\n        parents.push(node);\n      }\n      return parents;\n    };\n    var create$2 = function (root, caretPosition) {\n      var container, offset, path = [], outputOffset, childNodes, parents;\n      container = caretPosition.container();\n      offset = caretPosition.offset();\n      if (isText$5(container)) {\n        outputOffset = normalizedTextOffset(container, offset);\n      } else {\n        childNodes = container.childNodes;\n        if (offset >= childNodes.length) {\n          outputOffset = 'after';\n          offset = childNodes.length - 1;\n        } else {\n          outputOffset = 'before';\n        }\n        container = childNodes[offset];\n      }\n      path.push(createPathItem(container));\n      parents = parentsUntil(root, container);\n      parents = ArrUtils.filter(parents, not(NodeType.isBogus));\n      path = path.concat(ArrUtils.map(parents, function (node) {\n        return createPathItem(node);\n      }));\n      return path.reverse().join('/') + ',' + outputOffset;\n    };\n    var resolvePathItem = function (node, name, index) {\n      var nodes = getChildNodes(node);\n      nodes = ArrUtils.filter(nodes, function (node, index) {\n        return !isText$5(node) || !isText$5(nodes[index - 1]);\n      });\n      nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(name));\n      return nodes[index];\n    };\n    var findTextPosition = function (container, offset) {\n      var node = container, targetOffset = 0, dataLen;\n      while (isText$5(node)) {\n        dataLen = node.data.length;\n        if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n          container = node;\n          offset = offset - targetOffset;\n          break;\n        }\n        if (!isText$5(node.nextSibling)) {\n          container = node;\n          offset = dataLen;\n          break;\n        }\n        targetOffset += dataLen;\n        node = node.nextSibling;\n      }\n      if (isText$5(container) && offset > container.data.length) {\n        offset = container.data.length;\n      }\n      return CaretPosition$1(container, offset);\n    };\n    var resolve$2 = function (root, path) {\n      var parts, container, offset;\n      if (!path) {\n        return null;\n      }\n      parts = path.split(',');\n      path = parts[0].split('/');\n      offset = parts.length > 1 ? parts[1] : 'before';\n      container = ArrUtils.reduce(path, function (result, value) {\n        value = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value);\n        if (!value) {\n          return null;\n        }\n        if (value[1] === 'text()') {\n          value[1] = '#text';\n        }\n        return resolvePathItem(result, value[1], parseInt(value[2], 10));\n      }, root);\n      if (!container) {\n        return null;\n      }\n      if (!isText$5(container)) {\n        if (offset === 'after') {\n          offset = nodeIndex$1(container) + 1;\n        } else {\n          offset = nodeIndex$1(container);\n        }\n        return CaretPosition$1(container.parentNode, offset);\n      }\n      return findTextPosition(container, parseInt(offset, 10));\n    };\n\n    var trimEmptyTextNode = function (dom, node) {\n      if (NodeType.isText(node) && node.data.length === 0) {\n        dom.remove(node);\n      }\n    };\n    var insertNode = function (dom, rng, node) {\n      rng.insertNode(node);\n      trimEmptyTextNode(dom, node.previousSibling);\n      trimEmptyTextNode(dom, node.nextSibling);\n    };\n    var insertFragment = function (dom, rng, frag) {\n      var firstChild = Option.from(frag.firstChild);\n      var lastChild = Option.from(frag.lastChild);\n      rng.insertNode(frag);\n      firstChild.each(function (child) {\n        return trimEmptyTextNode(dom, child.previousSibling);\n      });\n      lastChild.each(function (child) {\n        return trimEmptyTextNode(dom, child.nextSibling);\n      });\n    };\n    var rangeInsertNode = function (dom, rng, node) {\n      if (NodeType.isDocumentFragment(node)) {\n        insertFragment(dom, rng, node);\n      } else {\n        insertNode(dom, rng, node);\n      }\n    };\n\n    var isContentEditableFalse$2 = NodeType.isContentEditableFalse;\n    var getNormalizedTextOffset = function (trim, container, offset) {\n      var node, trimmedOffset;\n      trimmedOffset = trim(container.data.slice(0, offset)).length;\n      for (node = container.previousSibling; node && NodeType.isText(node); node = node.previousSibling) {\n        trimmedOffset += trim(node.data).length;\n      }\n      return trimmedOffset;\n    };\n    var getPoint = function (dom, trim, normalized, rng, start) {\n      var container = rng[start ? 'startContainer' : 'endContainer'];\n      var offset = rng[start ? 'startOffset' : 'endOffset'];\n      var point = [];\n      var childNodes, after = 0;\n      var root = dom.getRoot();\n      if (NodeType.isText(container)) {\n        point.push(normalized ? getNormalizedTextOffset(trim, container, offset) : offset);\n      } else {\n        childNodes = container.childNodes;\n        if (offset >= childNodes.length && childNodes.length) {\n          after = 1;\n          offset = Math.max(0, childNodes.length - 1);\n        }\n        point.push(dom.nodeIndex(childNodes[offset], normalized) + after);\n      }\n      for (; container && container !== root; container = container.parentNode) {\n        point.push(dom.nodeIndex(container, normalized));\n      }\n      return point;\n    };\n    var getLocation = function (trim, selection, normalized, rng) {\n      var dom = selection.dom, bookmark = {};\n      bookmark.start = getPoint(dom, trim, normalized, rng, true);\n      if (!selection.isCollapsed()) {\n        bookmark.end = getPoint(dom, trim, normalized, rng, false);\n      }\n      return bookmark;\n    };\n    var findIndex$2 = function (dom, name, element) {\n      var count = 0;\n      Tools.each(dom.select(name), function (node) {\n        if (node.getAttribute('data-mce-bogus') === 'all') {\n          return;\n        }\n        if (node === element) {\n          return false;\n        }\n        count++;\n      });\n      return count;\n    };\n    var moveEndPoint = function (rng, start) {\n      var container, offset, childNodes;\n      var prefix = start ? 'start' : 'end';\n      container = rng[prefix + 'Container'];\n      offset = rng[prefix + 'Offset'];\n      if (NodeType.isElement(container) && container.nodeName === 'TR') {\n        childNodes = container.childNodes;\n        container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\n        if (container) {\n          offset = start ? 0 : container.childNodes.length;\n          rng['set' + (start ? 'Start' : 'End')](container, offset);\n        }\n      }\n    };\n    var normalizeTableCellSelection = function (rng) {\n      moveEndPoint(rng, true);\n      moveEndPoint(rng, false);\n      return rng;\n    };\n    var findSibling = function (node, offset) {\n      var sibling;\n      if (NodeType.isElement(node)) {\n        node = getNode(node, offset);\n        if (isContentEditableFalse$2(node)) {\n          return node;\n        }\n      }\n      if (isCaretContainer(node)) {\n        if (NodeType.isText(node) && isCaretContainerBlock(node)) {\n          node = node.parentNode;\n        }\n        sibling = node.previousSibling;\n        if (isContentEditableFalse$2(sibling)) {\n          return sibling;\n        }\n        sibling = node.nextSibling;\n        if (isContentEditableFalse$2(sibling)) {\n          return sibling;\n        }\n      }\n    };\n    var findAdjacentContentEditableFalseElm = function (rng) {\n      return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n    };\n    var getOffsetBookmark = function (trim, normalized, selection) {\n      var element = selection.getNode();\n      var name = element ? element.nodeName : null;\n      var rng = selection.getRng();\n      if (isContentEditableFalse$2(element) || name === 'IMG') {\n        return {\n          name: name,\n          index: findIndex$2(selection.dom, name, element)\n        };\n      }\n      var sibling = findAdjacentContentEditableFalseElm(rng);\n      if (sibling) {\n        name = sibling.tagName;\n        return {\n          name: name,\n          index: findIndex$2(selection.dom, name, sibling)\n        };\n      }\n      return getLocation(trim, selection, normalized, rng);\n    };\n    var getCaretBookmark = function (selection) {\n      var rng = selection.getRng();\n      return {\n        start: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeStart(rng)),\n        end: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeEnd(rng))\n      };\n    };\n    var getRangeBookmark = function (selection) {\n      return { rng: selection.getRng() };\n    };\n    var createBookmarkSpan = function (dom, id, filled) {\n      var args = {\n        'data-mce-type': 'bookmark',\n        'id': id,\n        'style': 'overflow:hidden;line-height:0px'\n      };\n      return filled ? dom.create('span', args, '&#xFEFF;') : dom.create('span', args);\n    };\n    var getPersistentBookmark = function (selection, filled) {\n      var dom = selection.dom;\n      var rng = selection.getRng();\n      var id = dom.uniqueId();\n      var collapsed = selection.isCollapsed();\n      var element = selection.getNode();\n      var name = element.nodeName;\n      if (name === 'IMG') {\n        return {\n          name: name,\n          index: findIndex$2(dom, name, element)\n        };\n      }\n      var rng2 = normalizeTableCellSelection(rng.cloneRange());\n      if (!collapsed) {\n        rng2.collapse(false);\n        var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n        rangeInsertNode(dom, rng2, endBookmarkNode);\n      }\n      rng = normalizeTableCellSelection(rng);\n      rng.collapse(true);\n      var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n      rangeInsertNode(dom, rng, startBookmarkNode);\n      selection.moveToBookmark({\n        id: id,\n        keep: 1\n      });\n      return { id: id };\n    };\n    var getBookmark = function (selection, type, normalized) {\n      if (type === 2) {\n        return getOffsetBookmark(Zwsp.trim, normalized, selection);\n      } else if (type === 3) {\n        return getCaretBookmark(selection);\n      } else if (type) {\n        return getRangeBookmark(selection);\n      } else {\n        return getPersistentBookmark(selection, false);\n      }\n    };\n    var GetBookmark = {\n      getBookmark: getBookmark,\n      getUndoBookmark: curry(getOffsetBookmark, identity, true),\n      getPersistentBookmark: getPersistentBookmark\n    };\n\n    var CARET_ID = '_mce_caret';\n    var isCaretNode = function (node) {\n      return NodeType.isElement(node) && node.id === CARET_ID;\n    };\n    var getParentCaretContainer = function (body, node) {\n      while (node && node !== body) {\n        if (node.id === CARET_ID) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n\n    var isElement$4 = NodeType.isElement;\n    var isText$6 = NodeType.isText;\n    var removeNode = function (node) {\n      var parentNode = node.parentNode;\n      if (parentNode) {\n        parentNode.removeChild(node);\n      }\n    };\n    var getNodeValue = function (node) {\n      try {\n        return node.nodeValue;\n      } catch (ex) {\n        return '';\n      }\n    };\n    var setNodeValue = function (node, text) {\n      if (text.length === 0) {\n        removeNode(node);\n      } else {\n        node.nodeValue = text;\n      }\n    };\n    var trimCount = function (text) {\n      var trimmedText = Zwsp.trim(text);\n      return {\n        count: text.length - trimmedText.length,\n        text: trimmedText\n      };\n    };\n    var removeUnchanged = function (caretContainer, pos) {\n      remove$5(caretContainer);\n      return pos;\n    };\n    var removeTextAndReposition = function (caretContainer, pos) {\n      var before = trimCount(caretContainer.data.substr(0, pos.offset()));\n      var after = trimCount(caretContainer.data.substr(pos.offset()));\n      var text = before.text + after.text;\n      if (text.length > 0) {\n        setNodeValue(caretContainer, text);\n        return CaretPosition$1(caretContainer, pos.offset() - before.count);\n      } else {\n        return pos;\n      }\n    };\n    var removeElementAndReposition = function (caretContainer, pos) {\n      var parentNode = pos.container();\n      var newPosition = indexOf(from$1(parentNode.childNodes), caretContainer).map(function (index) {\n        return index < pos.offset() ? CaretPosition$1(parentNode, pos.offset() - 1) : pos;\n      }).getOr(pos);\n      remove$5(caretContainer);\n      return newPosition;\n    };\n    var removeTextCaretContainer = function (caretContainer, pos) {\n      return isText$6(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n    };\n    var removeElementCaretContainer = function (caretContainer, pos) {\n      return pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n    };\n    var removeAndReposition = function (container, pos) {\n      return CaretPosition$1.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n    };\n    var remove$5 = function (caretContainerNode) {\n      if (isElement$4(caretContainerNode) && isCaretContainer(caretContainerNode)) {\n        if (hasContent(caretContainerNode)) {\n          caretContainerNode.removeAttribute('data-mce-caret');\n        } else {\n          removeNode(caretContainerNode);\n        }\n      }\n      if (isText$6(caretContainerNode)) {\n        var text = Zwsp.trim(getNodeValue(caretContainerNode));\n        setNodeValue(caretContainerNode, text);\n      }\n    };\n    var CaretContainerRemove = {\n      removeAndReposition: removeAndReposition,\n      remove: remove$5\n    };\n\n    var browser$2 = PlatformDetection$1.detect().browser;\n    var isContentEditableFalse$3 = NodeType.isContentEditableFalse;\n    var isTableCell$1 = function (node) {\n      return NodeType.isElement(node) && /^(TD|TH)$/i.test(node.tagName);\n    };\n    var getAbsoluteClientRect = function (root, element, before) {\n      var clientRect = collapse(element.getBoundingClientRect(), before);\n      var docElm, scrollX, scrollY, margin, rootRect;\n      if (root.tagName === 'BODY') {\n        docElm = root.ownerDocument.documentElement;\n        scrollX = root.scrollLeft || docElm.scrollLeft;\n        scrollY = root.scrollTop || docElm.scrollTop;\n      } else {\n        rootRect = root.getBoundingClientRect();\n        scrollX = root.scrollLeft - rootRect.left;\n        scrollY = root.scrollTop - rootRect.top;\n      }\n      clientRect.left += scrollX;\n      clientRect.right += scrollX;\n      clientRect.top += scrollY;\n      clientRect.bottom += scrollY;\n      clientRect.width = 1;\n      margin = element.offsetWidth - element.clientWidth;\n      if (margin > 0) {\n        if (before) {\n          margin *= -1;\n        }\n        clientRect.left += margin;\n        clientRect.right += margin;\n      }\n      return clientRect;\n    };\n    var trimInlineCaretContainers = function (root) {\n      var contentEditableFalseNodes, node, sibling, i, data;\n      contentEditableFalseNodes = DomQuery('*[contentEditable=false]', root);\n      for (i = 0; i < contentEditableFalseNodes.length; i++) {\n        node = contentEditableFalseNodes[i];\n        sibling = node.previousSibling;\n        if (endsWithCaretContainer(sibling)) {\n          data = sibling.data;\n          if (data.length === 1) {\n            sibling.parentNode.removeChild(sibling);\n          } else {\n            sibling.deleteData(data.length - 1, 1);\n          }\n        }\n        sibling = node.nextSibling;\n        if (startsWithCaretContainer(sibling)) {\n          data = sibling.data;\n          if (data.length === 1) {\n            sibling.parentNode.removeChild(sibling);\n          } else {\n            sibling.deleteData(0, 1);\n          }\n        }\n      }\n    };\n    var FakeCaret = function (root, isBlock, hasFocus) {\n      var lastVisualCaret = Cell(Option.none());\n      var cursorInterval, caretContainerNode;\n      var show = function (before, element) {\n        var clientRect, rng;\n        hide();\n        if (isTableCell$1(element)) {\n          return null;\n        }\n        if (isBlock(element)) {\n          caretContainerNode = insertBlock('p', element, before);\n          clientRect = getAbsoluteClientRect(root, element, before);\n          DomQuery(caretContainerNode).css('top', clientRect.top);\n          var caret = DomQuery('<div class=\"mce-visual-caret\" data-mce-bogus=\"all\"></div>').css(clientRect).appendTo(root)[0];\n          lastVisualCaret.set(Option.some({\n            caret: caret,\n            element: element,\n            before: before\n          }));\n          lastVisualCaret.get().each(function (caretState) {\n            if (before) {\n              DomQuery(caretState.caret).addClass('mce-visual-caret-before');\n            }\n          });\n          startBlink();\n          rng = element.ownerDocument.createRange();\n          rng.setStart(caretContainerNode, 0);\n          rng.setEnd(caretContainerNode, 0);\n        } else {\n          caretContainerNode = insertInline(element, before);\n          rng = element.ownerDocument.createRange();\n          if (isContentEditableFalse$3(caretContainerNode.nextSibling)) {\n            rng.setStart(caretContainerNode, 0);\n            rng.setEnd(caretContainerNode, 0);\n          } else {\n            rng.setStart(caretContainerNode, 1);\n            rng.setEnd(caretContainerNode, 1);\n          }\n          return rng;\n        }\n        return rng;\n      };\n      var hide = function () {\n        trimInlineCaretContainers(root);\n        if (caretContainerNode) {\n          CaretContainerRemove.remove(caretContainerNode);\n          caretContainerNode = null;\n        }\n        lastVisualCaret.get().each(function (caretState) {\n          DomQuery(caretState.caret).remove();\n          lastVisualCaret.set(Option.none());\n        });\n        clearInterval(cursorInterval);\n      };\n      var startBlink = function () {\n        cursorInterval = Delay.setInterval(function () {\n          if (hasFocus()) {\n            DomQuery('div.mce-visual-caret', root).toggleClass('mce-visual-caret-hidden');\n          } else {\n            DomQuery('div.mce-visual-caret', root).addClass('mce-visual-caret-hidden');\n          }\n        }, 500);\n      };\n      var reposition = function () {\n        lastVisualCaret.get().each(function (caretState) {\n          var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n          DomQuery(caretState.caret).css(clientRect);\n        });\n      };\n      var destroy = function () {\n        return Delay.clearInterval(cursorInterval);\n      };\n      var getCss = function () {\n        return '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}';\n      };\n      return {\n        show: show,\n        hide: hide,\n        getCss: getCss,\n        reposition: reposition,\n        destroy: destroy\n      };\n    };\n    var isFakeCaretTableBrowser = function () {\n      return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox();\n    };\n    var isFakeCaretTarget = function (node) {\n      return isContentEditableFalse$3(node) || NodeType.isTable(node) && isFakeCaretTableBrowser();\n    };\n\n    var isContentEditableFalse$4 = NodeType.isContentEditableFalse;\n    var isBlockLike = NodeType.matchStyleValues('display', 'block table table-cell table-caption list-item');\n    var isCaretContainer$2 = isCaretContainer;\n    var isCaretContainerBlock$1 = isCaretContainerBlock;\n    var isElement$5 = NodeType.isElement;\n    var isCaretCandidate$2 = isCaretCandidate;\n    var isForwards = function (direction) {\n      return direction > 0;\n    };\n    var isBackwards = function (direction) {\n      return direction < 0;\n    };\n    var skipCaretContainers = function (walk, shallow) {\n      var node;\n      while (node = walk(shallow)) {\n        if (!isCaretContainerBlock$1(node)) {\n          return node;\n        }\n      }\n      return null;\n    };\n    var findNode = function (node, direction, predicateFn, rootNode, shallow) {\n      var walker = new TreeWalker(node, rootNode);\n      if (isBackwards(direction)) {\n        if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {\n          node = skipCaretContainers(walker.prev, true);\n          if (predicateFn(node)) {\n            return node;\n          }\n        }\n        while (node = skipCaretContainers(walker.prev, shallow)) {\n          if (predicateFn(node)) {\n            return node;\n          }\n        }\n      }\n      if (isForwards(direction)) {\n        if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {\n          node = skipCaretContainers(walker.next, true);\n          if (predicateFn(node)) {\n            return node;\n          }\n        }\n        while (node = skipCaretContainers(walker.next, shallow)) {\n          if (predicateFn(node)) {\n            return node;\n          }\n        }\n      }\n      return null;\n    };\n    var getParentBlock = function (node, rootNode) {\n      while (node && node !== rootNode) {\n        if (isBlockLike(node)) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    var isInSameBlock = function (caretPosition1, caretPosition2, rootNode) {\n      return getParentBlock(caretPosition1.container(), rootNode) === getParentBlock(caretPosition2.container(), rootNode);\n    };\n    var getChildNodeAtRelativeOffset = function (relativeOffset, caretPosition) {\n      var container, offset;\n      if (!caretPosition) {\n        return null;\n      }\n      container = caretPosition.container();\n      offset = caretPosition.offset();\n      if (!isElement$5(container)) {\n        return null;\n      }\n      return container.childNodes[offset + relativeOffset];\n    };\n    var beforeAfter = function (before, node) {\n      var range = node.ownerDocument.createRange();\n      if (before) {\n        range.setStartBefore(node);\n        range.setEndBefore(node);\n      } else {\n        range.setStartAfter(node);\n        range.setEndAfter(node);\n      }\n      return range;\n    };\n    var isNodesInSameBlock = function (root, node1, node2) {\n      return getParentBlock(node1, root) === getParentBlock(node2, root);\n    };\n    var lean = function (left, root, node) {\n      var sibling, siblingName;\n      if (left) {\n        siblingName = 'previousSibling';\n      } else {\n        siblingName = 'nextSibling';\n      }\n      while (node && node !== root) {\n        sibling = node[siblingName];\n        if (isCaretContainer$2(sibling)) {\n          sibling = sibling[siblingName];\n        }\n        if (isContentEditableFalse$4(sibling)) {\n          if (isNodesInSameBlock(root, sibling, node)) {\n            return sibling;\n          }\n          break;\n        }\n        if (isCaretCandidate$2(sibling)) {\n          break;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    var before$2 = curry(beforeAfter, true);\n    var after$1 = curry(beforeAfter, false);\n    var normalizeRange = function (direction, root, range) {\n      var node, container, offset, location;\n      var leanLeft = curry(lean, true, root);\n      var leanRight = curry(lean, false, root);\n      container = range.startContainer;\n      offset = range.startOffset;\n      if (isCaretContainerBlock(container)) {\n        if (!isElement$5(container)) {\n          container = container.parentNode;\n        }\n        location = container.getAttribute('data-mce-caret');\n        if (location === 'before') {\n          node = container.nextSibling;\n          if (isFakeCaretTarget(node)) {\n            return before$2(node);\n          }\n        }\n        if (location === 'after') {\n          node = container.previousSibling;\n          if (isFakeCaretTarget(node)) {\n            return after$1(node);\n          }\n        }\n      }\n      if (!range.collapsed) {\n        return range;\n      }\n      if (NodeType.isText(container)) {\n        if (isCaretContainer$2(container)) {\n          if (direction === 1) {\n            node = leanRight(container);\n            if (node) {\n              return before$2(node);\n            }\n            node = leanLeft(container);\n            if (node) {\n              return after$1(node);\n            }\n          }\n          if (direction === -1) {\n            node = leanLeft(container);\n            if (node) {\n              return after$1(node);\n            }\n            node = leanRight(container);\n            if (node) {\n              return before$2(node);\n            }\n          }\n          return range;\n        }\n        if (endsWithCaretContainer(container) && offset >= container.data.length - 1) {\n          if (direction === 1) {\n            node = leanRight(container);\n            if (node) {\n              return before$2(node);\n            }\n          }\n          return range;\n        }\n        if (startsWithCaretContainer(container) && offset <= 1) {\n          if (direction === -1) {\n            node = leanLeft(container);\n            if (node) {\n              return after$1(node);\n            }\n          }\n          return range;\n        }\n        if (offset === container.data.length) {\n          node = leanRight(container);\n          if (node) {\n            return before$2(node);\n          }\n          return range;\n        }\n        if (offset === 0) {\n          node = leanLeft(container);\n          if (node) {\n            return after$1(node);\n          }\n          return range;\n        }\n      }\n      return range;\n    };\n    var getRelativeCefElm = function (forward, caretPosition) {\n      return Option.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$4);\n    };\n    var getNormalizedRangeEndPoint = function (direction, root, range) {\n      var normalizedRange = normalizeRange(direction, root, range);\n      if (direction === -1) {\n        return CaretPosition.fromRangeStart(normalizedRange);\n      }\n      return CaretPosition.fromRangeEnd(normalizedRange);\n    };\n    var getElementFromPosition = function (pos) {\n      return Option.from(pos.getNode()).map(Element.fromDom);\n    };\n    var getElementFromPrevPosition = function (pos) {\n      return Option.from(pos.getNode(true)).map(Element.fromDom);\n    };\n    var getVisualCaretPosition = function (walkFn, caretPosition) {\n      while (caretPosition = walkFn(caretPosition)) {\n        if (caretPosition.isVisible()) {\n          return caretPosition;\n        }\n      }\n      return caretPosition;\n    };\n    var isMoveInsideSameBlock = function (from, to) {\n      var inSameBlock = isInSameBlock(from, to);\n      if (!inSameBlock && NodeType.isBr(from.getNode())) {\n        return true;\n      }\n      return inSameBlock;\n    };\n\n    var HDirection;\n    (function (HDirection) {\n      HDirection[HDirection['Backwards'] = -1] = 'Backwards';\n      HDirection[HDirection['Forwards'] = 1] = 'Forwards';\n    }(HDirection || (HDirection = {})));\n    var isContentEditableFalse$5 = NodeType.isContentEditableFalse;\n    var isText$7 = NodeType.isText;\n    var isElement$6 = NodeType.isElement;\n    var isBr$4 = NodeType.isBr;\n    var isCaretCandidate$3 = isCaretCandidate;\n    var isAtomic$1 = isAtomic;\n    var isEditableCaretCandidate$1 = isEditableCaretCandidate;\n    var getParents = function (node, root) {\n      var parents = [];\n      while (node && node !== root) {\n        parents.push(node);\n        node = node.parentNode;\n      }\n      return parents;\n    };\n    var nodeAtIndex = function (container, offset) {\n      if (container.hasChildNodes() && offset < container.childNodes.length) {\n        return container.childNodes[offset];\n      }\n      return null;\n    };\n    var getCaretCandidatePosition = function (direction, node) {\n      if (isForwards(direction)) {\n        if (isCaretCandidate$3(node.previousSibling) && !isText$7(node.previousSibling)) {\n          return CaretPosition$1.before(node);\n        }\n        if (isText$7(node)) {\n          return CaretPosition$1(node, 0);\n        }\n      }\n      if (isBackwards(direction)) {\n        if (isCaretCandidate$3(node.nextSibling) && !isText$7(node.nextSibling)) {\n          return CaretPosition$1.after(node);\n        }\n        if (isText$7(node)) {\n          return CaretPosition$1(node, node.data.length);\n        }\n      }\n      if (isBackwards(direction)) {\n        if (isBr$4(node)) {\n          return CaretPosition$1.before(node);\n        }\n        return CaretPosition$1.after(node);\n      }\n      return CaretPosition$1.before(node);\n    };\n    var moveForwardFromBr = function (root, nextNode) {\n      var nextSibling = nextNode.nextSibling;\n      if (nextSibling && isCaretCandidate$3(nextSibling)) {\n        if (isText$7(nextSibling)) {\n          return CaretPosition$1(nextSibling, 0);\n        } else {\n          return CaretPosition$1.before(nextSibling);\n        }\n      } else {\n        return findCaretPosition(HDirection.Forwards, CaretPosition$1.after(nextNode), root);\n      }\n    };\n    var findCaretPosition = function (direction, startPos, root) {\n      var node, nextNode, innerNode;\n      var rootContentEditableFalseElm, caretPosition;\n      if (!isElement$6(root) || !startPos) {\n        return null;\n      }\n      if (startPos.isEqual(CaretPosition$1.after(root)) && root.lastChild) {\n        caretPosition = CaretPosition$1.after(root.lastChild);\n        if (isBackwards(direction) && isCaretCandidate$3(root.lastChild) && isElement$6(root.lastChild)) {\n          return isBr$4(root.lastChild) ? CaretPosition$1.before(root.lastChild) : caretPosition;\n        }\n      } else {\n        caretPosition = startPos;\n      }\n      var container = caretPosition.container();\n      var offset = caretPosition.offset();\n      if (isText$7(container)) {\n        if (isBackwards(direction) && offset > 0) {\n          return CaretPosition$1(container, --offset);\n        }\n        if (isForwards(direction) && offset < container.length) {\n          return CaretPosition$1(container, ++offset);\n        }\n        node = container;\n      } else {\n        if (isBackwards(direction) && offset > 0) {\n          nextNode = nodeAtIndex(container, offset - 1);\n          if (isCaretCandidate$3(nextNode)) {\n            if (!isAtomic$1(nextNode)) {\n              innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);\n              if (innerNode) {\n                if (isText$7(innerNode)) {\n                  return CaretPosition$1(innerNode, innerNode.data.length);\n                }\n                return CaretPosition$1.after(innerNode);\n              }\n            }\n            if (isText$7(nextNode)) {\n              return CaretPosition$1(nextNode, nextNode.data.length);\n            }\n            return CaretPosition$1.before(nextNode);\n          }\n        }\n        if (isForwards(direction) && offset < container.childNodes.length) {\n          nextNode = nodeAtIndex(container, offset);\n          if (isCaretCandidate$3(nextNode)) {\n            if (isBr$4(nextNode)) {\n              return moveForwardFromBr(root, nextNode);\n            }\n            if (!isAtomic$1(nextNode)) {\n              innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);\n              if (innerNode) {\n                if (isText$7(innerNode)) {\n                  return CaretPosition$1(innerNode, 0);\n                }\n                return CaretPosition$1.before(innerNode);\n              }\n            }\n            if (isText$7(nextNode)) {\n              return CaretPosition$1(nextNode, 0);\n            }\n            return CaretPosition$1.after(nextNode);\n          }\n        }\n        node = nextNode ? nextNode : caretPosition.getNode();\n      }\n      if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {\n        node = findNode(node, direction, constant(true), root, true);\n        if (isEditableCaretCandidate$1(node, root)) {\n          return getCaretCandidatePosition(direction, node);\n        }\n      }\n      nextNode = findNode(node, direction, isEditableCaretCandidate$1, root);\n      rootContentEditableFalseElm = ArrUtils.last(filter(getParents(container, root), isContentEditableFalse$5));\n      if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n        if (isForwards(direction)) {\n          caretPosition = CaretPosition$1.after(rootContentEditableFalseElm);\n        } else {\n          caretPosition = CaretPosition$1.before(rootContentEditableFalseElm);\n        }\n        return caretPosition;\n      }\n      if (nextNode) {\n        return getCaretCandidatePosition(direction, nextNode);\n      }\n      return null;\n    };\n    var CaretWalker = function (root) {\n      return {\n        next: function (caretPosition) {\n          return findCaretPosition(HDirection.Forwards, caretPosition, root);\n        },\n        prev: function (caretPosition) {\n          return findCaretPosition(HDirection.Backwards, caretPosition, root);\n        }\n      };\n    };\n\n    var walkToPositionIn = function (forward, root, start) {\n      var position = forward ? CaretPosition$1.before(start) : CaretPosition$1.after(start);\n      return fromPosition(forward, root, position);\n    };\n    var afterElement = function (node) {\n      return NodeType.isBr(node) ? CaretPosition$1.before(node) : CaretPosition$1.after(node);\n    };\n    var isBeforeOrStart = function (position) {\n      if (CaretPosition$1.isTextPosition(position)) {\n        return position.offset() === 0;\n      } else {\n        return isCaretCandidate(position.getNode());\n      }\n    };\n    var isAfterOrEnd = function (position) {\n      if (CaretPosition$1.isTextPosition(position)) {\n        var container = position.container();\n        return position.offset() === container.data.length;\n      } else {\n        return isCaretCandidate(position.getNode(true));\n      }\n    };\n    var isBeforeAfterSameElement = function (from, to) {\n      return !CaretPosition$1.isTextPosition(from) && !CaretPosition$1.isTextPosition(to) && from.getNode() === to.getNode(true);\n    };\n    var isAtBr = function (position) {\n      return !CaretPosition$1.isTextPosition(position) && NodeType.isBr(position.getNode());\n    };\n    var shouldSkipPosition = function (forward, from, to) {\n      if (forward) {\n        return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\n      } else {\n        return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\n      }\n    };\n    var fromPosition = function (forward, root, pos) {\n      var walker = CaretWalker(root);\n      return Option.from(forward ? walker.next(pos) : walker.prev(pos));\n    };\n    var navigate = function (forward, root, from) {\n      return fromPosition(forward, root, from).bind(function (to) {\n        if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\n          return fromPosition(forward, root, to);\n        } else {\n          return Option.some(to);\n        }\n      });\n    };\n    var navigateIgnore = function (forward, root, from, ignoreFilter) {\n      return navigate(forward, root, from).bind(function (pos) {\n        return ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Option.some(pos);\n      });\n    };\n    var positionIn = function (forward, element) {\n      var startNode = forward ? element.firstChild : element.lastChild;\n      if (NodeType.isText(startNode)) {\n        return Option.some(CaretPosition$1(startNode, forward ? 0 : startNode.data.length));\n      } else if (startNode) {\n        if (isCaretCandidate(startNode)) {\n          return Option.some(forward ? CaretPosition$1.before(startNode) : afterElement(startNode));\n        } else {\n          return walkToPositionIn(forward, element, startNode);\n        }\n      } else {\n        return Option.none();\n      }\n    };\n    var nextPosition = curry(fromPosition, true);\n    var prevPosition = curry(fromPosition, false);\n    var CaretFinder = {\n      fromPosition: fromPosition,\n      nextPosition: nextPosition,\n      prevPosition: prevPosition,\n      navigate: navigate,\n      navigateIgnore: navigateIgnore,\n      positionIn: positionIn,\n      firstPositionIn: curry(positionIn, true),\n      lastPositionIn: curry(positionIn, false)\n    };\n\n    var isStringPathBookmark = function (bookmark) {\n      return typeof bookmark.start === 'string';\n    };\n    var isRangeBookmark = function (bookmark) {\n      return bookmark.hasOwnProperty('rng');\n    };\n    var isIdBookmark = function (bookmark) {\n      return bookmark.hasOwnProperty('id');\n    };\n    var isIndexBookmark = function (bookmark) {\n      return bookmark.hasOwnProperty('name');\n    };\n    var isPathBookmark = function (bookmark) {\n      return Tools.isArray(bookmark.start);\n    };\n\n    var addBogus = function (dom, node) {\n      if (NodeType.isElement(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) {\n        node.innerHTML = '<br data-mce-bogus=\"1\" />';\n      }\n      return node;\n    };\n    var resolveCaretPositionBookmark = function (dom, bookmark) {\n      var rng, pos;\n      rng = dom.createRng();\n      pos = resolve$2(dom.getRoot(), bookmark.start);\n      rng.setStart(pos.container(), pos.offset());\n      pos = resolve$2(dom.getRoot(), bookmark.end);\n      rng.setEnd(pos.container(), pos.offset());\n      return rng;\n    };\n    var insertZwsp = function (node, rng) {\n      var textNode = node.ownerDocument.createTextNode(Zwsp.ZWSP);\n      node.appendChild(textNode);\n      rng.setStart(textNode, 0);\n      rng.setEnd(textNode, 0);\n    };\n    var isEmpty = function (node) {\n      return node.hasChildNodes() === false;\n    };\n    var tryFindRangePosition = function (node, rng) {\n      return CaretFinder.lastPositionIn(node).fold(function () {\n        return false;\n      }, function (pos) {\n        rng.setStart(pos.container(), pos.offset());\n        rng.setEnd(pos.container(), pos.offset());\n        return true;\n      });\n    };\n    var padEmptyCaretContainer = function (root, node, rng) {\n      if (isEmpty(node) && getParentCaretContainer(root, node)) {\n        insertZwsp(node, rng);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    var setEndPoint = function (dom, start, bookmark, rng) {\n      var point = bookmark[start ? 'start' : 'end'];\n      var i, node, offset, children;\n      var root = dom.getRoot();\n      if (point) {\n        offset = point[0];\n        for (node = root, i = point.length - 1; i >= 1; i--) {\n          children = node.childNodes;\n          if (padEmptyCaretContainer(root, node, rng)) {\n            return true;\n          }\n          if (point[i] > children.length - 1) {\n            if (padEmptyCaretContainer(root, node, rng)) {\n              return true;\n            }\n            return tryFindRangePosition(node, rng);\n          }\n          node = children[point[i]];\n        }\n        if (node.nodeType === 3) {\n          offset = Math.min(point[0], node.nodeValue.length);\n        }\n        if (node.nodeType === 1) {\n          offset = Math.min(point[0], node.childNodes.length);\n        }\n        if (start) {\n          rng.setStart(node, offset);\n        } else {\n          rng.setEnd(node, offset);\n        }\n      }\n      return true;\n    };\n    var isValidTextNode = function (node) {\n      return NodeType.isText(node) && node.data.length > 0;\n    };\n    var restoreEndPoint = function (dom, suffix, bookmark) {\n      var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev;\n      var keep = bookmark.keep;\n      var container, offset;\n      if (marker) {\n        node = marker.parentNode;\n        if (suffix === 'start') {\n          if (!keep) {\n            idx = dom.nodeIndex(marker);\n          } else {\n            if (marker.hasChildNodes()) {\n              node = marker.firstChild;\n              idx = 1;\n            } else if (isValidTextNode(marker.nextSibling)) {\n              node = marker.nextSibling;\n              idx = 0;\n            } else if (isValidTextNode(marker.previousSibling)) {\n              node = marker.previousSibling;\n              idx = marker.previousSibling.data.length;\n            } else {\n              node = marker.parentNode;\n              idx = dom.nodeIndex(marker) + 1;\n            }\n          }\n          container = node;\n          offset = idx;\n        } else {\n          if (!keep) {\n            idx = dom.nodeIndex(marker);\n          } else {\n            if (marker.hasChildNodes()) {\n              node = marker.firstChild;\n              idx = 1;\n            } else if (isValidTextNode(marker.previousSibling)) {\n              node = marker.previousSibling;\n              idx = marker.previousSibling.data.length;\n            } else {\n              node = marker.parentNode;\n              idx = dom.nodeIndex(marker);\n            }\n          }\n          container = node;\n          offset = idx;\n        }\n        if (!keep) {\n          prev = marker.previousSibling;\n          next = marker.nextSibling;\n          Tools.each(Tools.grep(marker.childNodes), function (node) {\n            if (NodeType.isText(node)) {\n              node.nodeValue = node.nodeValue.replace(/\\uFEFF/g, '');\n            }\n          });\n          while (marker = dom.get(bookmark.id + '_' + suffix)) {\n            dom.remove(marker, true);\n          }\n          if (prev && next && prev.nodeType === next.nodeType && NodeType.isText(prev) && !Env.opera) {\n            idx = prev.nodeValue.length;\n            prev.appendData(next.nodeValue);\n            dom.remove(next);\n            if (suffix === 'start') {\n              container = prev;\n              offset = idx;\n            } else {\n              container = prev;\n              offset = idx;\n            }\n          }\n        }\n        return Option.some(CaretPosition$1(container, offset));\n      } else {\n        return Option.none();\n      }\n    };\n    var alt = function (o1, o2) {\n      return o1.isSome() ? o1 : o2;\n    };\n    var resolvePaths = function (dom, bookmark) {\n      var rng = dom.createRng();\n      if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {\n        return Option.some(rng);\n      } else {\n        return Option.none();\n      }\n    };\n    var resolveId = function (dom, bookmark) {\n      var startPos = restoreEndPoint(dom, 'start', bookmark);\n      var endPos = restoreEndPoint(dom, 'end', bookmark);\n      return lift2(startPos, alt(endPos, startPos), function (spos, epos) {\n        var rng = dom.createRng();\n        rng.setStart(addBogus(dom, spos.container()), spos.offset());\n        rng.setEnd(addBogus(dom, epos.container()), epos.offset());\n        return rng;\n      });\n    };\n    var resolveIndex$1 = function (dom, bookmark) {\n      return Option.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {\n        var rng = dom.createRng();\n        rng.selectNode(elm);\n        return rng;\n      });\n    };\n    var resolve$3 = function (selection, bookmark) {\n      var dom = selection.dom;\n      if (bookmark) {\n        if (isPathBookmark(bookmark)) {\n          return resolvePaths(dom, bookmark);\n        } else if (isStringPathBookmark(bookmark)) {\n          return Option.some(resolveCaretPositionBookmark(dom, bookmark));\n        } else if (isIdBookmark(bookmark)) {\n          return resolveId(dom, bookmark);\n        } else if (isIndexBookmark(bookmark)) {\n          return resolveIndex$1(dom, bookmark);\n        } else if (isRangeBookmark(bookmark)) {\n          return Option.some(bookmark.rng);\n        }\n      }\n      return Option.none();\n    };\n    var ResolveBookmark = { resolve: resolve$3 };\n\n    var getBookmark$1 = function (selection, type, normalized) {\n      return GetBookmark.getBookmark(selection, type, normalized);\n    };\n    var moveToBookmark = function (selection, bookmark) {\n      ResolveBookmark.resolve(selection, bookmark).each(function (rng) {\n        selection.setRng(rng);\n      });\n    };\n    var isBookmarkNode$1 = function (node) {\n      return NodeType.isElement(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n    };\n    var Bookmarks = {\n      getBookmark: getBookmark$1,\n      moveToBookmark: moveToBookmark,\n      isBookmarkNode: isBookmarkNode$1\n    };\n\n    var isInlineBlock = function (node) {\n      return node && /^(IMG)$/.test(node.nodeName);\n    };\n    var moveStart = function (dom, selection, rng) {\n      var offset = rng.startOffset;\n      var container = rng.startContainer, walker, node, nodes;\n      if (rng.startContainer === rng.endContainer) {\n        if (isInlineBlock(rng.startContainer.childNodes[rng.startOffset])) {\n          return;\n        }\n      }\n      if (container.nodeType === 1) {\n        nodes = container.childNodes;\n        if (offset < nodes.length) {\n          container = nodes[offset];\n          walker = new TreeWalker(container, dom.getParent(container, dom.isBlock));\n        } else {\n          container = nodes[nodes.length - 1];\n          walker = new TreeWalker(container, dom.getParent(container, dom.isBlock));\n          walker.next(true);\n        }\n        for (node = walker.current(); node; node = walker.next()) {\n          if (node.nodeType === 3 && !isWhiteSpaceNode(node)) {\n            rng.setStart(node, 0);\n            selection.setRng(rng);\n            return;\n          }\n        }\n      }\n    };\n    var getNonWhiteSpaceSibling = function (node, next, inc) {\n      if (node) {\n        next = next ? 'nextSibling' : 'previousSibling';\n        for (node = inc ? node : node[next]; node; node = node[next]) {\n          if (node.nodeType === 1 || !isWhiteSpaceNode(node)) {\n            return node;\n          }\n        }\n      }\n    };\n    var isTextBlock$1 = function (editor, name) {\n      if (name.nodeType) {\n        name = name.nodeName;\n      }\n      return !!editor.schema.getTextBlockElements()[name.toLowerCase()];\n    };\n    var isValid = function (ed, parent, child) {\n      return ed.schema.isValidChild(parent, child);\n    };\n    var isWhiteSpaceNode = function (node) {\n      return node && node.nodeType === 3 && /^([\\t \\r\\n]+|)$/.test(node.nodeValue);\n    };\n    var replaceVars = function (value, vars) {\n      if (typeof value !== 'string') {\n        value = value(vars);\n      } else if (vars) {\n        value = value.replace(/%(\\w+)/g, function (str, name) {\n          return vars[name] || str;\n        });\n      }\n      return value;\n    };\n    var isEq = function (str1, str2) {\n      str1 = str1 || '';\n      str2 = str2 || '';\n      str1 = '' + (str1.nodeName || str1);\n      str2 = '' + (str2.nodeName || str2);\n      return str1.toLowerCase() === str2.toLowerCase();\n    };\n    var normalizeStyleValue = function (dom, value, name) {\n      if (name === 'color' || name === 'backgroundColor') {\n        value = dom.toHex(value);\n      }\n      if (name === 'fontWeight' && value === 700) {\n        value = 'bold';\n      }\n      if (name === 'fontFamily') {\n        value = value.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n      }\n      return '' + value;\n    };\n    var getStyle = function (dom, node, name) {\n      return normalizeStyleValue(dom, dom.getStyle(node, name), name);\n    };\n    var getTextDecoration = function (dom, node) {\n      var decoration;\n      dom.getParent(node, function (n) {\n        decoration = dom.getStyle(n, 'text-decoration');\n        return decoration && decoration !== 'none';\n      });\n      return decoration;\n    };\n    var getParents$1 = function (dom, node, selector) {\n      return dom.getParents(node, selector, dom.getRoot());\n    };\n    var FormatUtils = {\n      isInlineBlock: isInlineBlock,\n      moveStart: moveStart,\n      getNonWhiteSpaceSibling: getNonWhiteSpaceSibling,\n      isTextBlock: isTextBlock$1,\n      isValid: isValid,\n      isWhiteSpaceNode: isWhiteSpaceNode,\n      replaceVars: replaceVars,\n      isEq: isEq,\n      normalizeStyleValue: normalizeStyleValue,\n      getStyle: getStyle,\n      getTextDecoration: getTextDecoration,\n      getParents: getParents$1\n    };\n\n    var isBookmarkNode$2 = Bookmarks.isBookmarkNode;\n    var getParents$2 = FormatUtils.getParents, isWhiteSpaceNode$1 = FormatUtils.isWhiteSpaceNode, isTextBlock$2 = FormatUtils.isTextBlock;\n    var findLeaf = function (node, offset) {\n      if (typeof offset === 'undefined') {\n        offset = node.nodeType === 3 ? node.length : node.childNodes.length;\n      }\n      while (node && node.hasChildNodes()) {\n        node = node.childNodes[offset];\n        if (node) {\n          offset = node.nodeType === 3 ? node.length : node.childNodes.length;\n        }\n      }\n      return {\n        node: node,\n        offset: offset\n      };\n    };\n    var excludeTrailingWhitespace = function (endContainer, endOffset) {\n      var leaf = findLeaf(endContainer, endOffset);\n      if (leaf.node) {\n        while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) {\n          leaf = findLeaf(leaf.node.previousSibling);\n        }\n        if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {\n          if (leaf.offset > 1) {\n            endContainer = leaf.node;\n            endContainer.splitText(leaf.offset - 1);\n          }\n        }\n      }\n      return endContainer;\n    };\n    var isBogusBr = function (node) {\n      return node.nodeName === 'BR' && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n    };\n    var findParentContentEditable = function (dom, node) {\n      var parent = node;\n      while (parent) {\n        if (parent.nodeType === 1 && dom.getContentEditable(parent)) {\n          return dom.getContentEditable(parent) === 'false' ? parent : node;\n        }\n        parent = parent.parentNode;\n      }\n      return node;\n    };\n    var findSpace = function (start, remove, node, offset) {\n      var pos, pos2;\n      var str = node.nodeValue;\n      if (typeof offset === 'undefined') {\n        offset = start ? str.length : 0;\n      }\n      if (start) {\n        pos = str.lastIndexOf(' ', offset);\n        pos2 = str.lastIndexOf('\\xA0', offset);\n        pos = pos > pos2 ? pos : pos2;\n        if (pos !== -1 && !remove && (pos < offset || !start) && pos <= str.length) {\n          pos++;\n        }\n      } else {\n        pos = str.indexOf(' ', offset);\n        pos2 = str.indexOf('\\xA0', offset);\n        pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;\n      }\n      return pos;\n    };\n    var findWordEndPoint = function (dom, body, container, offset, start, remove) {\n      var walker, node, pos, lastTextNode;\n      if (container.nodeType === 3) {\n        pos = findSpace(start, remove, container, offset);\n        if (pos !== -1) {\n          return {\n            container: container,\n            offset: pos\n          };\n        }\n        lastTextNode = container;\n      }\n      walker = new TreeWalker(container, dom.getParent(container, dom.isBlock) || body);\n      while (node = walker[start ? 'prev' : 'next']()) {\n        if (node.nodeType === 3 && !isBookmarkNode$2(node.parentNode)) {\n          lastTextNode = node;\n          pos = findSpace(start, remove, node);\n          if (pos !== -1) {\n            return {\n              container: node,\n              offset: pos\n            };\n          }\n        } else if (dom.isBlock(node) || FormatUtils.isEq(node, 'BR')) {\n          break;\n        }\n      }\n      if (lastTextNode) {\n        if (start) {\n          offset = 0;\n        } else {\n          offset = lastTextNode.length;\n        }\n        return {\n          container: lastTextNode,\n          offset: offset\n        };\n      }\n    };\n    var findSelectorEndPoint = function (dom, format, rng, container, siblingName) {\n      var parents, i, y, curFormat;\n      if (container.nodeType === 3 && container.nodeValue.length === 0 && container[siblingName]) {\n        container = container[siblingName];\n      }\n      parents = getParents$2(dom, container);\n      for (i = 0; i < parents.length; i++) {\n        for (y = 0; y < format.length; y++) {\n          curFormat = format[y];\n          if ('collapsed' in curFormat && curFormat.collapsed !== rng.collapsed) {\n            continue;\n          }\n          if (dom.is(parents[i], curFormat.selector)) {\n            return parents[i];\n          }\n        }\n      }\n      return container;\n    };\n    var findBlockEndPoint = function (editor, format, container, siblingName) {\n      var node;\n      var dom = editor.dom;\n      var root = dom.getRoot();\n      if (!format[0].wrapper) {\n        node = dom.getParent(container, format[0].block, root);\n      }\n      if (!node) {\n        var scopeRoot = dom.getParent(container, 'LI,TD,TH');\n        node = dom.getParent(container.nodeType === 3 ? container.parentNode : container, function (node) {\n          return node !== root && isTextBlock$2(editor, node);\n        }, scopeRoot);\n      }\n      if (node && format[0].wrapper) {\n        node = getParents$2(dom, node, 'ul,ol').reverse()[0] || node;\n      }\n      if (!node) {\n        node = container;\n        while (node[siblingName] && !dom.isBlock(node[siblingName])) {\n          node = node[siblingName];\n          if (FormatUtils.isEq(node, 'br')) {\n            break;\n          }\n        }\n      }\n      return node || container;\n    };\n    var findParentContainer = function (dom, format, startContainer, startOffset, endContainer, endOffset, start) {\n      var container, parent, sibling, siblingName, root;\n      container = parent = start ? startContainer : endContainer;\n      siblingName = start ? 'previousSibling' : 'nextSibling';\n      root = dom.getRoot();\n      if (container.nodeType === 3 && !isWhiteSpaceNode$1(container)) {\n        if (start ? startOffset > 0 : endOffset < container.nodeValue.length) {\n          return container;\n        }\n      }\n      while (true) {\n        if (!format[0].block_expand && dom.isBlock(parent)) {\n          return parent;\n        }\n        for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n          if (!isBookmarkNode$2(sibling) && !isWhiteSpaceNode$1(sibling) && !isBogusBr(sibling)) {\n            return parent;\n          }\n        }\n        if (parent === root || parent.parentNode === root) {\n          container = parent;\n          break;\n        }\n        parent = parent.parentNode;\n      }\n      return container;\n    };\n    var expandRng = function (editor, rng, format, remove) {\n      var endPoint, startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n      var dom = editor.dom;\n      if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\n        startContainer = getNode(startContainer, startOffset);\n        if (startContainer.nodeType === 3) {\n          startOffset = 0;\n        }\n      }\n      if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {\n        endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n        if (endContainer.nodeType === 3) {\n          endOffset = endContainer.nodeValue.length;\n        }\n      }\n      startContainer = findParentContentEditable(dom, startContainer);\n      endContainer = findParentContentEditable(dom, endContainer);\n      if (isBookmarkNode$2(startContainer.parentNode) || isBookmarkNode$2(startContainer)) {\n        startContainer = isBookmarkNode$2(startContainer) ? startContainer : startContainer.parentNode;\n        if (rng.collapsed) {\n          startContainer = startContainer.previousSibling || startContainer;\n        } else {\n          startContainer = startContainer.nextSibling || startContainer;\n        }\n        if (startContainer.nodeType === 3) {\n          startOffset = rng.collapsed ? startContainer.length : 0;\n        }\n      }\n      if (isBookmarkNode$2(endContainer.parentNode) || isBookmarkNode$2(endContainer)) {\n        endContainer = isBookmarkNode$2(endContainer) ? endContainer : endContainer.parentNode;\n        if (rng.collapsed) {\n          endContainer = endContainer.nextSibling || endContainer;\n        } else {\n          endContainer = endContainer.previousSibling || endContainer;\n        }\n        if (endContainer.nodeType === 3) {\n          endOffset = rng.collapsed ? 0 : endContainer.length;\n        }\n      }\n      if (rng.collapsed) {\n        endPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, remove);\n        if (endPoint) {\n          startContainer = endPoint.container;\n          startOffset = endPoint.offset;\n        }\n        endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, remove);\n        if (endPoint) {\n          endContainer = endPoint.container;\n          endOffset = endPoint.offset;\n        }\n      }\n      if (format[0].inline) {\n        endContainer = remove ? endContainer : excludeTrailingWhitespace(endContainer, endOffset);\n      }\n      if (format[0].inline || format[0].block_expand) {\n        if (!format[0].inline || (startContainer.nodeType !== 3 || startOffset === 0)) {\n          startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\n        }\n        if (!format[0].inline || (endContainer.nodeType !== 3 || endOffset === endContainer.nodeValue.length)) {\n          endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);\n        }\n      }\n      if (format[0].selector && format[0].expand !== false && !format[0].inline) {\n        startContainer = findSelectorEndPoint(dom, format, rng, startContainer, 'previousSibling');\n        endContainer = findSelectorEndPoint(dom, format, rng, endContainer, 'nextSibling');\n      }\n      if (format[0].block || format[0].selector) {\n        startContainer = findBlockEndPoint(editor, format, startContainer, 'previousSibling');\n        endContainer = findBlockEndPoint(editor, format, endContainer, 'nextSibling');\n        if (format[0].block) {\n          if (!dom.isBlock(startContainer)) {\n            startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\n          }\n          if (!dom.isBlock(endContainer)) {\n            endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);\n          }\n        }\n      }\n      if (startContainer.nodeType === 1) {\n        startOffset = dom.nodeIndex(startContainer);\n        startContainer = startContainer.parentNode;\n      }\n      if (endContainer.nodeType === 1) {\n        endOffset = dom.nodeIndex(endContainer) + 1;\n        endContainer = endContainer.parentNode;\n      }\n      return {\n        startContainer: startContainer,\n        startOffset: startOffset,\n        endContainer: endContainer,\n        endOffset: endOffset\n      };\n    };\n    var ExpandRange = { expandRng: expandRng };\n\n    var each$8 = Tools.each;\n    var getEndChild = function (container, index) {\n      var childNodes = container.childNodes;\n      index--;\n      if (index > childNodes.length - 1) {\n        index = childNodes.length - 1;\n      } else if (index < 0) {\n        index = 0;\n      }\n      return childNodes[index] || container;\n    };\n    var walk$1 = function (dom, rng, callback) {\n      var startContainer = rng.startContainer;\n      var startOffset = rng.startOffset;\n      var endContainer = rng.endContainer;\n      var endOffset = rng.endOffset;\n      var ancestor;\n      var startPoint;\n      var endPoint;\n      var node;\n      var parent;\n      var siblings;\n      var nodes;\n      nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');\n      if (nodes.length > 0) {\n        each$8(nodes, function (node) {\n          callback([node]);\n        });\n        return;\n      }\n      var exclude = function (nodes) {\n        var node;\n        node = nodes[0];\n        if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) {\n          nodes.splice(0, 1);\n        }\n        node = nodes[nodes.length - 1];\n        if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) {\n          nodes.splice(nodes.length - 1, 1);\n        }\n        return nodes;\n      };\n      var collectSiblings = function (node, name, endNode) {\n        var siblings = [];\n        for (; node && node !== endNode; node = node[name]) {\n          siblings.push(node);\n        }\n        return siblings;\n      };\n      var findEndPoint = function (node, root) {\n        do {\n          if (node.parentNode === root) {\n            return node;\n          }\n          node = node.parentNode;\n        } while (node);\n      };\n      var walkBoundary = function (startNode, endNode, next) {\n        var siblingName = next ? 'nextSibling' : 'previousSibling';\n        for (node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {\n          parent = node.parentNode;\n          siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n          if (siblings.length) {\n            if (!next) {\n              siblings.reverse();\n            }\n            callback(exclude(siblings));\n          }\n        }\n      };\n      if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\n        startContainer = startContainer.childNodes[startOffset];\n      }\n      if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {\n        endContainer = getEndChild(endContainer, endOffset);\n      }\n      if (startContainer === endContainer) {\n        return callback(exclude([startContainer]));\n      }\n      ancestor = dom.findCommonAncestor(startContainer, endContainer);\n      for (node = startContainer; node; node = node.parentNode) {\n        if (node === endContainer) {\n          return walkBoundary(startContainer, ancestor, true);\n        }\n        if (node === ancestor) {\n          break;\n        }\n      }\n      for (node = endContainer; node; node = node.parentNode) {\n        if (node === startContainer) {\n          return walkBoundary(endContainer, ancestor);\n        }\n        if (node === ancestor) {\n          break;\n        }\n      }\n      startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n      endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n      walkBoundary(startContainer, startPoint, true);\n      siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\n      if (siblings.length) {\n        callback(exclude(siblings));\n      }\n      walkBoundary(endContainer, endPoint);\n    };\n    var RangeWalk = { walk: walk$1 };\n\n    var zeroWidth = function () {\n      return '\\uFEFF';\n    };\n\n    function NodeValue (is, name) {\n      var get = function (element) {\n        if (!is(element)) {\n          throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n        }\n        return getOption(element).getOr('');\n      };\n      var getOption = function (element) {\n        return is(element) ? Option.from(element.dom().nodeValue) : Option.none();\n      };\n      var set = function (element, value) {\n        if (!is(element)) {\n          throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n        }\n        element.dom().nodeValue = value;\n      };\n      return {\n        get: get,\n        getOption: getOption,\n        set: set\n      };\n    }\n\n    var api = NodeValue(isText, 'text');\n    var get$4 = function (element) {\n      return api.get(element);\n    };\n\n    var isZeroWidth = function (elem) {\n      return isText(elem) && get$4(elem) === zeroWidth();\n    };\n    var context = function (editor, elem, wrapName, nodeName) {\n      return parent(elem).fold(function () {\n        return 'skipping';\n      }, function (parent) {\n        if (nodeName === 'br' || isZeroWidth(elem)) {\n          return 'valid';\n        } else if (isAnnotation(elem)) {\n          return 'existing';\n        } else if (isCaretNode(elem)) {\n          return 'caret';\n        } else if (!FormatUtils.isValid(editor, wrapName, nodeName) || !FormatUtils.isValid(editor, name(parent), wrapName)) {\n          return 'invalid-child';\n        } else {\n          return 'valid';\n        }\n      });\n    };\n\n    var shouldApplyToTrailingSpaces = function (rng) {\n      return rng.startContainer.nodeType === 3 && rng.startContainer.nodeValue.length >= rng.startOffset && rng.startContainer.nodeValue[rng.startOffset] === '\\xA0';\n    };\n    var applyWordGrab = function (editor, rng) {\n      var r = ExpandRange.expandRng(editor, rng, [{ inline: true }], shouldApplyToTrailingSpaces(rng));\n      rng.setStart(r.startContainer, r.startOffset);\n      rng.setEnd(r.endContainer, r.endOffset);\n      editor.selection.setRng(rng);\n    };\n    var makeAnnotation = function (eDoc, _a, annotationName, decorate) {\n      var _b = _a.uid, uid = _b === void 0 ? generate('mce-annotation') : _b, data = __rest(_a, ['uid']);\n      var master = Element.fromTag('span', eDoc);\n      add$2(master, annotation());\n      set(master, '' + dataAnnotationId(), uid);\n      set(master, '' + dataAnnotation(), annotationName);\n      var _c = decorate(uid, data), _d = _c.attributes, attributes = _d === void 0 ? {} : _d, _e = _c.classes, classes = _e === void 0 ? [] : _e;\n      setAll(master, attributes);\n      add$3(master, classes);\n      return master;\n    };\n    var annotate = function (editor, rng, annotationName, decorate, data) {\n      var newWrappers = [];\n      var master = makeAnnotation(editor.getDoc(), data, annotationName, decorate);\n      var wrapper = Cell(Option.none());\n      var finishWrapper = function () {\n        wrapper.set(Option.none());\n      };\n      var getOrOpenWrapper = function () {\n        return wrapper.get().getOrThunk(function () {\n          var nu = shallow(master);\n          newWrappers.push(nu);\n          wrapper.set(Option.some(nu));\n          return nu;\n        });\n      };\n      var processElements = function (elems) {\n        each(elems, processElement);\n      };\n      var processElement = function (elem) {\n        var ctx = context(editor, elem, 'span', name(elem));\n        switch (ctx) {\n        case 'invalid-child': {\n            finishWrapper();\n            var children$1 = children(elem);\n            processElements(children$1);\n            finishWrapper();\n            break;\n          }\n        case 'valid': {\n            var w = getOrOpenWrapper();\n            wrap$1(elem, w);\n            break;\n          }\n        case 'skipping':\n        case 'existing':\n        case 'caret':\n        }\n      };\n      var processNodes = function (nodes) {\n        var elems = map(nodes, Element.fromDom);\n        processElements(elems);\n      };\n      RangeWalk.walk(editor.dom, rng, function (nodes) {\n        finishWrapper();\n        processNodes(nodes);\n      });\n      return newWrappers;\n    };\n    var annotateWithBookmark = function (editor, name, settings, data) {\n      editor.undoManager.transact(function () {\n        var initialRng = editor.selection.getRng();\n        if (initialRng.collapsed) {\n          applyWordGrab(editor, initialRng);\n        }\n        if (editor.selection.getRng().collapsed) {\n          var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate);\n          set$1(wrapper, '\\xA0');\n          editor.selection.getRng().insertNode(wrapper.dom());\n          editor.selection.select(wrapper.dom());\n        } else {\n          var bookmark = GetBookmark.getPersistentBookmark(editor.selection, false);\n          var rng = editor.selection.getRng();\n          annotate(editor, rng, name, settings.decorate, data);\n          editor.selection.moveToBookmark(bookmark);\n        }\n      });\n    };\n\n    function Annotator (editor) {\n      var registry = create$1();\n      setup$1(editor, registry);\n      var changes = setup(editor);\n      return {\n        register: function (name, settings) {\n          registry.register(name, settings);\n        },\n        annotate: function (name, data) {\n          registry.lookup(name).each(function (settings) {\n            annotateWithBookmark(editor, name, settings, data);\n          });\n        },\n        annotationChanged: function (name, callback) {\n          changes.addListener(name, callback);\n        },\n        remove: function (name) {\n          identify(editor, Option.some(name)).each(function (_a) {\n            var elements = _a.elements;\n            each(elements, unwrap);\n          });\n        },\n        getAll: function (name) {\n          var directory = findAll(editor, name);\n          return map$2(directory, function (elems) {\n            return map(elems, function (elem) {\n              return elem.dom();\n            });\n          });\n        }\n      };\n    }\n\n    var hasOnlyOneChild = function (node) {\n      return node.firstChild && node.firstChild === node.lastChild;\n    };\n    var isPaddingNode = function (node) {\n      return node.name === 'br' || node.value === '\\xA0';\n    };\n    var isPaddedEmptyBlock = function (schema, node) {\n      var blockElements = schema.getBlockElements();\n      return blockElements[node.name] && hasOnlyOneChild(node) && isPaddingNode(node.firstChild);\n    };\n    var isEmptyFragmentElement = function (schema, node) {\n      var nonEmptyElements = schema.getNonEmptyElements();\n      return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n    };\n    var isListFragment = function (schema, fragment) {\n      var firstChild = fragment.firstChild;\n      var lastChild = fragment.lastChild;\n      if (firstChild && firstChild.name === 'meta') {\n        firstChild = firstChild.next;\n      }\n      if (lastChild && lastChild.attr('id') === 'mce_marker') {\n        lastChild = lastChild.prev;\n      }\n      if (isEmptyFragmentElement(schema, lastChild)) {\n        lastChild = lastChild.prev;\n      }\n      if (!firstChild || firstChild !== lastChild) {\n        return false;\n      }\n      return firstChild.name === 'ul' || firstChild.name === 'ol';\n    };\n    var cleanupDomFragment = function (domFragment) {\n      var firstChild = domFragment.firstChild;\n      var lastChild = domFragment.lastChild;\n      if (firstChild && firstChild.nodeName === 'META') {\n        firstChild.parentNode.removeChild(firstChild);\n      }\n      if (lastChild && lastChild.id === 'mce_marker') {\n        lastChild.parentNode.removeChild(lastChild);\n      }\n      return domFragment;\n    };\n    var toDomFragment = function (dom, serializer, fragment) {\n      var html = serializer.serialize(fragment);\n      var domFragment = dom.createFragment(html);\n      return cleanupDomFragment(domFragment);\n    };\n    var listItems$1 = function (elm) {\n      return Tools.grep(elm.childNodes, function (child) {\n        return child.nodeName === 'LI';\n      });\n    };\n    var isPadding = function (node) {\n      return node.data === '\\xA0' || NodeType.isBr(node);\n    };\n    var isListItemPadded = function (node) {\n      return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild);\n    };\n    var isEmptyOrPadded = function (elm) {\n      return !elm.firstChild || isListItemPadded(elm);\n    };\n    var trimListItems = function (elms) {\n      return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n    };\n    var getParentLi = function (dom, node) {\n      var parentBlock = dom.getParent(node, dom.isBlock);\n      return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n    };\n    var isParentBlockLi = function (dom, node) {\n      return !!getParentLi(dom, node);\n    };\n    var getSplit = function (parentNode, rng) {\n      var beforeRng = rng.cloneRange();\n      var afterRng = rng.cloneRange();\n      beforeRng.setStartBefore(parentNode);\n      afterRng.setEndAfter(parentNode);\n      return [\n        beforeRng.cloneContents(),\n        afterRng.cloneContents()\n      ];\n    };\n    var findFirstIn = function (node, rootNode) {\n      var caretPos = CaretPosition$1.before(node);\n      var caretWalker = CaretWalker(rootNode);\n      var newCaretPos = caretWalker.next(caretPos);\n      return newCaretPos ? newCaretPos.toRange() : null;\n    };\n    var findLastOf = function (node, rootNode) {\n      var caretPos = CaretPosition$1.after(node);\n      var caretWalker = CaretWalker(rootNode);\n      var newCaretPos = caretWalker.prev(caretPos);\n      return newCaretPos ? newCaretPos.toRange() : null;\n    };\n    var insertMiddle = function (target, elms, rootNode, rng) {\n      var parts = getSplit(target, rng);\n      var parentElm = target.parentNode;\n      parentElm.insertBefore(parts[0], target);\n      Tools.each(elms, function (li) {\n        parentElm.insertBefore(li, target);\n      });\n      parentElm.insertBefore(parts[1], target);\n      parentElm.removeChild(target);\n      return findLastOf(elms[elms.length - 1], rootNode);\n    };\n    var insertBefore = function (target, elms, rootNode) {\n      var parentElm = target.parentNode;\n      Tools.each(elms, function (elm) {\n        parentElm.insertBefore(elm, target);\n      });\n      return findFirstIn(target, rootNode);\n    };\n    var insertAfter = function (target, elms, rootNode, dom) {\n      dom.insertAfter(elms.reverse(), target);\n      return findLastOf(elms[0], rootNode);\n    };\n    var insertAtCaret = function (serializer, dom, rng, fragment) {\n      var domFragment = toDomFragment(dom, serializer, fragment);\n      var liTarget = getParentLi(dom, rng.startContainer);\n      var liElms = trimListItems(listItems$1(domFragment.firstChild));\n      var BEGINNING = 1, END = 2;\n      var rootNode = dom.getRoot();\n      var isAt = function (location) {\n        var caretPos = CaretPosition$1.fromRangeStart(rng);\n        var caretWalker = CaretWalker(dom.getRoot());\n        var newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n        return newPos ? getParentLi(dom, newPos.getNode()) !== liTarget : true;\n      };\n      if (isAt(BEGINNING)) {\n        return insertBefore(liTarget, liElms, rootNode);\n      } else if (isAt(END)) {\n        return insertAfter(liTarget, liElms, rootNode, dom);\n      }\n      return insertMiddle(liTarget, liElms, rootNode, rng);\n    };\n    var InsertList = {\n      isListFragment: isListFragment,\n      insertAtCaret: insertAtCaret,\n      isParentBlockLi: isParentBlockLi,\n      trimListItems: trimListItems,\n      listItems: listItems$1\n    };\n\n    var each$9 = Tools.each;\n    var ElementUtils = function (dom) {\n      this.compare = function (node1, node2) {\n        if (node1.nodeName !== node2.nodeName) {\n          return false;\n        }\n        var getAttribs = function (node) {\n          var attribs = {};\n          each$9(dom.getAttribs(node), function (attr) {\n            var name = attr.nodeName.toLowerCase();\n            if (name.indexOf('_') !== 0 && name !== 'style' && name.indexOf('data-') !== 0) {\n              attribs[name] = dom.getAttrib(node, name);\n            }\n          });\n          return attribs;\n        };\n        var compareObjects = function (obj1, obj2) {\n          var value, name;\n          for (name in obj1) {\n            if (obj1.hasOwnProperty(name)) {\n              value = obj2[name];\n              if (typeof value === 'undefined') {\n                return false;\n              }\n              if (obj1[name] !== value) {\n                return false;\n              }\n              delete obj2[name];\n            }\n          }\n          for (name in obj2) {\n            if (obj2.hasOwnProperty(name)) {\n              return false;\n            }\n          }\n          return true;\n        };\n        if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n          return false;\n        }\n        if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\n          return false;\n        }\n        return !Bookmarks.isBookmarkNode(node1) && !Bookmarks.isBookmarkNode(node2);\n      };\n    };\n\n    var getLastChildren = function (elm) {\n      var children = [];\n      var rawNode = elm.dom();\n      while (rawNode) {\n        children.push(Element.fromDom(rawNode));\n        rawNode = rawNode.lastChild;\n      }\n      return children;\n    };\n    var removeTrailingBr = function (elm) {\n      var allBrs = descendants$1(elm, 'br');\n      var brs = filter(getLastChildren(elm).slice(-1), isBr);\n      if (allBrs.length === brs.length) {\n        each(brs, remove$1);\n      }\n    };\n    var fillWithPaddingBr = function (elm) {\n      empty(elm);\n      append(elm, Element.fromHtml('<br data-mce-bogus=\"1\">'));\n    };\n    var isPaddingContents = function (elm) {\n      return isText(elm) ? get$4(elm) === '\\xA0' : isBr(elm);\n    };\n    var isPaddedElement = function (elm) {\n      return filter(children(elm), isPaddingContents).length === 1;\n    };\n    var trimBlockTrailingBr = function (elm) {\n      lastChild(elm).each(function (lastChild) {\n        prevSibling(lastChild).each(function (lastChildPrevSibling) {\n          if (isBlock(elm) && isBr(lastChild) && isBlock(lastChildPrevSibling)) {\n            remove$1(lastChild);\n          }\n        });\n      });\n    };\n    var PaddingBr = {\n      removeTrailingBr: removeTrailingBr,\n      fillWithPaddingBr: fillWithPaddingBr,\n      isPaddedElement: isPaddedElement,\n      trimBlockTrailingBr: trimBlockTrailingBr\n    };\n\n    var makeMap$3 = Tools.makeMap;\n    function Writer (settings) {\n      var html = [];\n      var indent, indentBefore, indentAfter, encode, htmlOutput;\n      settings = settings || {};\n      indent = settings.indent;\n      indentBefore = makeMap$3(settings.indent_before || '');\n      indentAfter = makeMap$3(settings.indent_after || '');\n      encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n      htmlOutput = settings.element_format === 'html';\n      return {\n        start: function (name, attrs, empty) {\n          var i, l, attr, value;\n          if (indent && indentBefore[name] && html.length > 0) {\n            value = html[html.length - 1];\n            if (value.length > 0 && value !== '\\n') {\n              html.push('\\n');\n            }\n          }\n          html.push('<', name);\n          if (attrs) {\n            for (i = 0, l = attrs.length; i < l; i++) {\n              attr = attrs[i];\n              html.push(' ', attr.name, '=\"', encode(attr.value, true), '\"');\n            }\n          }\n          if (!empty || htmlOutput) {\n            html[html.length] = '>';\n          } else {\n            html[html.length] = ' />';\n          }\n          if (empty && indent && indentAfter[name] && html.length > 0) {\n            value = html[html.length - 1];\n            if (value.length > 0 && value !== '\\n') {\n              html.push('\\n');\n            }\n          }\n        },\n        end: function (name) {\n          var value;\n          html.push('</', name, '>');\n          if (indent && indentAfter[name] && html.length > 0) {\n            value = html[html.length - 1];\n            if (value.length > 0 && value !== '\\n') {\n              html.push('\\n');\n            }\n          }\n        },\n        text: function (text, raw) {\n          if (text.length > 0) {\n            html[html.length] = raw ? text : encode(text);\n          }\n        },\n        cdata: function (text) {\n          html.push('<![CDATA[', text, ']]>');\n        },\n        comment: function (text) {\n          html.push('<!--', text, '-->');\n        },\n        pi: function (name, text) {\n          if (text) {\n            html.push('<?', name, ' ', encode(text), '?>');\n          } else {\n            html.push('<?', name, '?>');\n          }\n          if (indent) {\n            html.push('\\n');\n          }\n        },\n        doctype: function (text) {\n          html.push('<!DOCTYPE', text, '>', indent ? '\\n' : '');\n        },\n        reset: function () {\n          html.length = 0;\n        },\n        getContent: function () {\n          return html.join('').replace(/\\n$/, '');\n        }\n      };\n    }\n\n    function HtmlSerializer (settings, schema) {\n      if (schema === void 0) {\n        schema = Schema();\n      }\n      var writer = Writer(settings);\n      settings = settings || {};\n      settings.validate = 'validate' in settings ? settings.validate : true;\n      var serialize = function (node) {\n        var handlers, validate;\n        validate = settings.validate;\n        handlers = {\n          3: function (node) {\n            writer.text(node.value, node.raw);\n          },\n          8: function (node) {\n            writer.comment(node.value);\n          },\n          7: function (node) {\n            writer.pi(node.name, node.value);\n          },\n          10: function (node) {\n            writer.doctype(node.value);\n          },\n          4: function (node) {\n            writer.cdata(node.value);\n          },\n          11: function (node) {\n            if (node = node.firstChild) {\n              do {\n                walk(node);\n              } while (node = node.next);\n            }\n          }\n        };\n        writer.reset();\n        var walk = function (node) {\n          var handler = handlers[node.type];\n          var name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule;\n          if (!handler) {\n            name = node.name;\n            isEmpty = node.shortEnded;\n            attrs = node.attributes;\n            if (validate && attrs && attrs.length > 1) {\n              sortedAttrs = [];\n              sortedAttrs.map = {};\n              elementRule = schema.getElementRule(node.name);\n              if (elementRule) {\n                for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n                  attrName = elementRule.attributesOrder[i];\n                  if (attrName in attrs.map) {\n                    attrValue = attrs.map[attrName];\n                    sortedAttrs.map[attrName] = attrValue;\n                    sortedAttrs.push({\n                      name: attrName,\n                      value: attrValue\n                    });\n                  }\n                }\n                for (i = 0, l = attrs.length; i < l; i++) {\n                  attrName = attrs[i].name;\n                  if (!(attrName in sortedAttrs.map)) {\n                    attrValue = attrs.map[attrName];\n                    sortedAttrs.map[attrName] = attrValue;\n                    sortedAttrs.push({\n                      name: attrName,\n                      value: attrValue\n                    });\n                  }\n                }\n                attrs = sortedAttrs;\n              }\n            }\n            writer.start(node.name, attrs, isEmpty);\n            if (!isEmpty) {\n              if (node = node.firstChild) {\n                do {\n                  walk(node);\n                } while (node = node.next);\n              }\n              writer.end(name);\n            }\n          } else {\n            handler(node);\n          }\n        };\n        if (node.type === 1 && !settings.inner) {\n          walk(node);\n        } else {\n          handlers[11](node);\n        }\n        return writer.getContent();\n      };\n      return { serialize: serialize };\n    }\n\n    var createRange$1 = function (sc, so, ec, eo) {\n      var rng = domGlobals.document.createRange();\n      rng.setStart(sc, so);\n      rng.setEnd(ec, eo);\n      return rng;\n    };\n    var normalizeBlockSelectionRange = function (rng) {\n      var startPos = CaretPosition$1.fromRangeStart(rng);\n      var endPos = CaretPosition$1.fromRangeEnd(rng);\n      var rootNode = rng.commonAncestorContainer;\n      return CaretFinder.fromPosition(false, rootNode, endPos).map(function (newEndPos) {\n        if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n          return createRange$1(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n        } else {\n          return rng;\n        }\n      }).getOr(rng);\n    };\n    var normalize = function (rng) {\n      return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n    };\n    var RangeNormalizer = { normalize: normalize };\n\n    var isAfterNbsp = function (container, offset) {\n      return NodeType.isText(container) && container.nodeValue[offset - 1] === '\\xA0';\n    };\n    var trimOrPadLeftRight = function (rng, html) {\n      var container, offset;\n      container = rng.startContainer;\n      offset = rng.startOffset;\n      var hasSiblingText = function (siblingName) {\n        return container[siblingName] && container[siblingName].nodeType === 3;\n      };\n      if (container.nodeType === 3) {\n        if (offset > 0) {\n          html = html.replace(/^&nbsp;/, ' ');\n        } else if (!hasSiblingText('previousSibling')) {\n          html = html.replace(/^ /, '&nbsp;');\n        }\n        if (offset < container.length) {\n          html = html.replace(/&nbsp;(<br>|)$/, ' ');\n        } else if (!hasSiblingText('nextSibling')) {\n          html = html.replace(/(&nbsp;| )(<br>|)$/, '&nbsp;');\n        }\n      }\n      return html;\n    };\n    var trimNbspAfterDeleteAndPadValue = function (rng, value) {\n      var container, offset;\n      container = rng.startContainer;\n      offset = rng.startOffset;\n      if (container.nodeType === 3 && rng.collapsed) {\n        if (container.data[offset] === '\\xA0') {\n          container.deleteData(offset, 1);\n          if (!/[\\u00a0| ]$/.test(value)) {\n            value += ' ';\n          }\n        } else if (container.data[offset - 1] === '\\xA0') {\n          container.deleteData(offset - 1, 1);\n          if (!/[\\u00a0| ]$/.test(value)) {\n            value = ' ' + value;\n          }\n        }\n      }\n      return value;\n    };\n\n    var isTableCell$2 = NodeType.matchNodeNames('td th');\n    var selectionSetContent = function (editor, content) {\n      var rng = editor.selection.getRng();\n      var container = rng.startContainer;\n      var offset = rng.startOffset;\n      if (rng.collapsed && isAfterNbsp(container, offset) && NodeType.isText(container)) {\n        container.insertData(offset - 1, ' ');\n        container.deleteData(offset, 1);\n        rng.setStart(container, offset);\n        rng.setEnd(container, offset);\n        editor.selection.setRng(rng);\n      }\n      editor.selection.setContent(content);\n    };\n    var validInsertion = function (editor, value, parentNode) {\n      if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n        parentNode.parentNode.insertBefore(editor.dom.createFragment(value), parentNode);\n      } else {\n        var node = parentNode.firstChild;\n        var node2 = parentNode.lastChild;\n        if (!node || node === node2 && node.nodeName === 'BR') {\n          editor.dom.setHTML(parentNode, value);\n        } else {\n          selectionSetContent(editor, value);\n        }\n      }\n    };\n    var trimBrsFromTableCell = function (dom, elm) {\n      Option.from(dom.getParent(elm, 'td,th')).map(Element.fromDom).each(PaddingBr.trimBlockTrailingBr);\n    };\n    var reduceInlineTextElements = function (editor, merge) {\n      var textInlineElements = editor.schema.getTextInlineElements();\n      var dom = editor.dom;\n      if (merge) {\n        var root_1 = editor.getBody(), elementUtils_1 = new ElementUtils(dom);\n        Tools.each(dom.select('*[data-mce-fragment]'), function (node) {\n          for (var testNode = node.parentNode; testNode && testNode !== root_1; testNode = testNode.parentNode) {\n            if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils_1.compare(testNode, node)) {\n              dom.remove(node, true);\n            }\n          }\n        });\n      }\n    };\n    var markFragmentElements = function (fragment) {\n      var node = fragment;\n      while (node = node.walk()) {\n        if (node.type === 1) {\n          node.attr('data-mce-fragment', '1');\n        }\n      }\n    };\n    var umarkFragmentElements = function (elm) {\n      Tools.each(elm.getElementsByTagName('*'), function (elm) {\n        elm.removeAttribute('data-mce-fragment');\n      });\n    };\n    var isPartOfFragment = function (node) {\n      return !!node.getAttribute('data-mce-fragment');\n    };\n    var canHaveChildren = function (editor, node) {\n      return node && !editor.schema.getShortEndedElements()[node.nodeName];\n    };\n    var moveSelectionToMarker = function (editor, marker) {\n      var parentEditableFalseElm, parentBlock, nextRng;\n      var dom = editor.dom, selection = editor.selection;\n      var node, node2;\n      var getContentEditableFalseParent = function (node) {\n        var root = editor.getBody();\n        for (; node && node !== root; node = node.parentNode) {\n          if (editor.dom.getContentEditable(node) === 'false') {\n            return node;\n          }\n        }\n        return null;\n      };\n      if (!marker) {\n        return;\n      }\n      editor.selection.scrollIntoView(marker);\n      parentEditableFalseElm = getContentEditableFalseParent(marker);\n      if (parentEditableFalseElm) {\n        dom.remove(marker);\n        selection.select(parentEditableFalseElm);\n        return;\n      }\n      var rng = dom.createRng();\n      node = marker.previousSibling;\n      if (node && node.nodeType === 3) {\n        rng.setStart(node, node.nodeValue.length);\n        if (!Env.ie) {\n          node2 = marker.nextSibling;\n          if (node2 && node2.nodeType === 3) {\n            node.appendData(node2.data);\n            node2.parentNode.removeChild(node2);\n          }\n        }\n      } else {\n        rng.setStartBefore(marker);\n        rng.setEndBefore(marker);\n      }\n      var findNextCaretRng = function (rng) {\n        var caretPos = CaretPosition$1.fromRangeStart(rng);\n        var caretWalker = CaretWalker(editor.getBody());\n        caretPos = caretWalker.next(caretPos);\n        if (caretPos) {\n          return caretPos.toRange();\n        }\n      };\n      parentBlock = dom.getParent(marker, dom.isBlock);\n      dom.remove(marker);\n      if (parentBlock && dom.isEmpty(parentBlock)) {\n        editor.$(parentBlock).empty();\n        rng.setStart(parentBlock, 0);\n        rng.setEnd(parentBlock, 0);\n        if (!isTableCell$2(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n          rng = nextRng;\n          dom.remove(parentBlock);\n        } else {\n          dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' }));\n        }\n      }\n      selection.setRng(rng);\n    };\n    var insertHtmlAtCaret = function (editor, value, details) {\n      var parser, serializer, parentNode, rootNode, fragment, args;\n      var marker, rng, node, bookmarkHtml, merge;\n      var selection = editor.selection, dom = editor.dom;\n      if (/^ | $/.test(value)) {\n        value = trimOrPadLeftRight(selection.getRng(), value);\n      }\n      parser = editor.parser;\n      merge = details.merge;\n      serializer = HtmlSerializer({ validate: editor.settings.validate }, editor.schema);\n      bookmarkHtml = '<span id=\"mce_marker\" data-mce-type=\"bookmark\">&#xFEFF;&#x200B;</span>';\n      args = {\n        content: value,\n        format: 'html',\n        selection: true,\n        paste: details.paste\n      };\n      args = editor.fire('BeforeSetContent', args);\n      if (args.isDefaultPrevented()) {\n        editor.fire('SetContent', {\n          content: args.content,\n          format: 'html',\n          selection: true,\n          paste: details.paste\n        });\n        return;\n      }\n      value = args.content;\n      if (value.indexOf('{$caret}') === -1) {\n        value += '{$caret}';\n      }\n      value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n      rng = selection.getRng();\n      var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null);\n      var body = editor.getBody();\n      if (caretElement === body && selection.isCollapsed()) {\n        if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\n          rng = dom.createRng();\n          rng.setStart(body.firstChild, 0);\n          rng.setEnd(body.firstChild, 0);\n          selection.setRng(rng);\n        }\n      }\n      if (!selection.isCollapsed()) {\n        editor.selection.setRng(RangeNormalizer.normalize(editor.selection.getRng()));\n        editor.getDoc().execCommand('Delete', false, null);\n        value = trimNbspAfterDeleteAndPadValue(editor.selection.getRng(), value);\n      }\n      parentNode = selection.getNode();\n      var parserArgs = {\n        context: parentNode.nodeName.toLowerCase(),\n        data: details.data,\n        insert: true\n      };\n      fragment = parser.parse(value, parserArgs);\n      if (details.paste === true && InsertList.isListFragment(editor.schema, fragment) && InsertList.isParentBlockLi(dom, parentNode)) {\n        rng = InsertList.insertAtCaret(serializer, dom, editor.selection.getRng(), fragment);\n        editor.selection.setRng(rng);\n        editor.fire('SetContent', args);\n        return;\n      }\n      markFragmentElements(fragment);\n      node = fragment.lastChild;\n      if (node.attr('id') === 'mce_marker') {\n        marker = node;\n        for (node = node.prev; node; node = node.walk(true)) {\n          if (node.type === 3 || !dom.isBlock(node.name)) {\n            if (editor.schema.isValidChild(node.parent.name, 'span')) {\n              node.parent.insert(marker, node, node.name === 'br');\n            }\n            break;\n          }\n        }\n      }\n      editor._selectionOverrides.showBlockCaretContainer(parentNode);\n      if (!parserArgs.invalid) {\n        value = serializer.serialize(fragment);\n        validInsertion(editor, value, parentNode);\n      } else {\n        selectionSetContent(editor, bookmarkHtml);\n        parentNode = selection.getNode();\n        rootNode = editor.getBody();\n        if (parentNode.nodeType === 9) {\n          parentNode = node = rootNode;\n        } else {\n          node = parentNode;\n        }\n        while (node !== rootNode) {\n          parentNode = node;\n          node = node.parentNode;\n        }\n        value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n        value = serializer.serialize(parser.parse(value.replace(/<span (id=\"mce_marker\"|id=mce_marker).+?<\\/span>/i, function () {\n          return serializer.serialize(fragment);\n        })));\n        if (parentNode === rootNode) {\n          dom.setHTML(rootNode, value);\n        } else {\n          dom.setOuterHTML(parentNode, value);\n        }\n      }\n      reduceInlineTextElements(editor, merge);\n      moveSelectionToMarker(editor, dom.get('mce_marker'));\n      umarkFragmentElements(editor.getBody());\n      trimBrsFromTableCell(editor.dom, editor.selection.getStart());\n      editor.fire('SetContent', args);\n      editor.addVisual();\n    };\n    var processValue = function (value) {\n      var details;\n      if (typeof value !== 'string') {\n        details = Tools.extend({\n          paste: value.paste,\n          data: { paste: value.paste }\n        }, value);\n        return {\n          content: value.content,\n          details: details\n        };\n      }\n      return {\n        content: value,\n        details: {}\n      };\n    };\n    var insertAtCaret$1 = function (editor, value) {\n      var result = processValue(value);\n      insertHtmlAtCaret(editor, result.content, result.details);\n    };\n    var InsertContent = { insertAtCaret: insertAtCaret$1 };\n\n    var strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n    var hasStrongRtl = function (text) {\n      return strongRtl.test(text);\n    };\n\n    var getBodySetting = function (editor, name, defaultValue) {\n      var value = editor.getParam(name, defaultValue);\n      if (value.indexOf('=') !== -1) {\n        var bodyObj = editor.getParam(name, '', 'hash');\n        return bodyObj.hasOwnProperty(editor.id) ? bodyObj[editor.id] : defaultValue;\n      } else {\n        return value;\n      }\n    };\n    var getIframeAttrs = function (editor) {\n      return editor.getParam('iframe_attrs', {});\n    };\n    var getDocType = function (editor) {\n      return editor.getParam('doctype', '<!DOCTYPE html>');\n    };\n    var getDocumentBaseUrl = function (editor) {\n      return editor.getParam('document_base_url', '');\n    };\n    var getBodyId = function (editor) {\n      return getBodySetting(editor, 'body_id', 'tinymce');\n    };\n    var getBodyClass = function (editor) {\n      return getBodySetting(editor, 'body_class', '');\n    };\n    var getContentSecurityPolicy = function (editor) {\n      return editor.getParam('content_security_policy', '');\n    };\n    var shouldPutBrInPre = function (editor) {\n      return editor.getParam('br_in_pre', true);\n    };\n    var getForcedRootBlock = function (editor) {\n      if (editor.getParam('force_p_newlines', false)) {\n        return 'p';\n      }\n      var block = editor.getParam('forced_root_block', 'p');\n      return block === false ? '' : block;\n    };\n    var getForcedRootBlockAttrs = function (editor) {\n      return editor.getParam('forced_root_block_attrs', {});\n    };\n    var getBrNewLineSelector = function (editor) {\n      return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption');\n    };\n    var getNoNewLineSelector = function (editor) {\n      return editor.getParam('no_newline_selector', '');\n    };\n    var shouldKeepStyles = function (editor) {\n      return editor.getParam('keep_styles', true);\n    };\n    var shouldEndContainerOnEmptyBlock = function (editor) {\n      return editor.getParam('end_container_on_empty_block', false);\n    };\n    var getFontStyleValues = function (editor) {\n      return Tools.explode(editor.getParam('font_size_style_values', ''));\n    };\n    var getFontSizeClasses = function (editor) {\n      return Tools.explode(editor.getParam('font_size_classes', ''));\n    };\n    var getImagesDataImgFilter = function (editor) {\n      return editor.getParam('images_dataimg_filter', constant(true), 'function');\n    };\n    var isAutomaticUploadsEnabled = function (editor) {\n      return editor.getParam('automatic_uploads', true, 'boolean');\n    };\n    var shouldReuseFileName = function (editor) {\n      return editor.getParam('images_reuse_filename', false, 'boolean');\n    };\n    var shouldReplaceBlobUris = function (editor) {\n      return editor.getParam('images_replace_blob_uris', true, 'boolean');\n    };\n    var getImageUploadUrl = function (editor) {\n      return editor.getParam('images_upload_url', '', 'string');\n    };\n    var getImageUploadBasePath = function (editor) {\n      return editor.getParam('images_upload_base_path', '', 'string');\n    };\n    var getImagesUploadCredentials = function (editor) {\n      return editor.getParam('images_upload_credentials', false, 'boolean');\n    };\n    var getImagesUploadHandler = function (editor) {\n      return editor.getParam('images_upload_handler', null, 'function');\n    };\n    var shouldUseContentCssCors = function (editor) {\n      return editor.getParam('content_css_cors', false, 'boolean');\n    };\n    var getInlineBoundarySelector = function (editor) {\n      return editor.getParam('inline_boundaries_selector', 'a[href],code,.mce-annotation', 'string');\n    };\n    var Settings = {\n      getIframeAttrs: getIframeAttrs,\n      getDocType: getDocType,\n      getDocumentBaseUrl: getDocumentBaseUrl,\n      getBodyId: getBodyId,\n      getBodyClass: getBodyClass,\n      getContentSecurityPolicy: getContentSecurityPolicy,\n      shouldPutBrInPre: shouldPutBrInPre,\n      getForcedRootBlock: getForcedRootBlock,\n      getForcedRootBlockAttrs: getForcedRootBlockAttrs,\n      getBrNewLineSelector: getBrNewLineSelector,\n      getNoNewLineSelector: getNoNewLineSelector,\n      shouldKeepStyles: shouldKeepStyles,\n      shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock,\n      getFontStyleValues: getFontStyleValues,\n      getFontSizeClasses: getFontSizeClasses,\n      getImagesDataImgFilter: getImagesDataImgFilter,\n      isAutomaticUploadsEnabled: isAutomaticUploadsEnabled,\n      shouldReuseFileName: shouldReuseFileName,\n      shouldReplaceBlobUris: shouldReplaceBlobUris,\n      getImageUploadUrl: getImageUploadUrl,\n      getImageUploadBasePath: getImageUploadBasePath,\n      getImagesUploadCredentials: getImagesUploadCredentials,\n      getImagesUploadHandler: getImagesUploadHandler,\n      shouldUseContentCssCors: shouldUseContentCssCors,\n      getInlineBoundarySelector: getInlineBoundarySelector\n    };\n\n    var isInlineTarget = function (editor, elm) {\n      return is$1(Element.fromDom(elm), Settings.getInlineBoundarySelector(editor));\n    };\n    var isRtl = function (element) {\n      return DOMUtils$1.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);\n    };\n    var findInlineParents = function (isInlineTarget, rootNode, pos) {\n      return filter(DOMUtils$1.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n    };\n    var findRootInline = function (isInlineTarget, rootNode, pos) {\n      var parents = findInlineParents(isInlineTarget, rootNode, pos);\n      return Option.from(parents[parents.length - 1]);\n    };\n    var hasSameParentBlock = function (rootNode, node1, node2) {\n      var block1 = getParentBlock(node1, rootNode);\n      var block2 = getParentBlock(node2, rootNode);\n      return block1 && block1 === block2;\n    };\n    var isAtZwsp = function (pos) {\n      return isBeforeInline(pos) || isAfterInline(pos);\n    };\n    var normalizePosition = function (forward, pos) {\n      if (!pos) {\n        return pos;\n      }\n      var container = pos.container(), offset = pos.offset();\n      if (forward) {\n        if (isCaretContainerInline(container)) {\n          if (NodeType.isText(container.nextSibling)) {\n            return CaretPosition$1(container.nextSibling, 0);\n          } else {\n            return CaretPosition$1.after(container);\n          }\n        } else {\n          return isBeforeInline(pos) ? CaretPosition$1(container, offset + 1) : pos;\n        }\n      } else {\n        if (isCaretContainerInline(container)) {\n          if (NodeType.isText(container.previousSibling)) {\n            return CaretPosition$1(container.previousSibling, container.previousSibling.data.length);\n          } else {\n            return CaretPosition$1.before(container);\n          }\n        } else {\n          return isAfterInline(pos) ? CaretPosition$1(container, offset - 1) : pos;\n        }\n      }\n    };\n    var normalizeForwards = curry(normalizePosition, true);\n    var normalizeBackwards = curry(normalizePosition, false);\n    var InlineUtils = {\n      isInlineTarget: isInlineTarget,\n      findRootInline: findRootInline,\n      isRtl: isRtl,\n      isAtZwsp: isAtZwsp,\n      normalizePosition: normalizePosition,\n      normalizeForwards: normalizeForwards,\n      normalizeBackwards: normalizeBackwards,\n      hasSameParentBlock: hasSameParentBlock\n    };\n\n    var isBeforeRoot = function (rootNode) {\n      return function (elm) {\n        return eq(rootNode, Element.fromDom(elm.dom().parentNode));\n      };\n    };\n    var getParentBlock$1 = function (rootNode, elm) {\n      return contains$3(rootNode, elm) ? closest(elm, function (element) {\n        return isTextBlock(element) || isListItem(element);\n      }, isBeforeRoot(rootNode)) : Option.none();\n    };\n    var placeCaretInEmptyBody = function (editor) {\n      var body = editor.getBody();\n      var node = body.firstChild && editor.dom.isBlock(body.firstChild) ? body.firstChild : body;\n      editor.selection.setCursorLocation(node, 0);\n    };\n    var paddEmptyBody = function (editor) {\n      if (editor.dom.isEmpty(editor.getBody())) {\n        editor.setContent('');\n        placeCaretInEmptyBody(editor);\n      }\n    };\n    var willDeleteLastPositionInElement = function (forward, fromPos, elm) {\n      return lift2(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {\n        var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);\n        var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);\n        var normalizedFromPos = InlineUtils.normalizePosition(false, fromPos);\n        if (forward) {\n          return CaretFinder.nextPosition(elm, normalizedFromPos).map(function (nextPos) {\n            return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);\n          }).getOr(false);\n        } else {\n          return CaretFinder.prevPosition(elm, normalizedFromPos).map(function (prevPos) {\n            return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);\n          }).getOr(false);\n        }\n      }).getOr(true);\n    };\n    var DeleteUtils = {\n      getParentBlock: getParentBlock$1,\n      paddEmptyBody: paddEmptyBody,\n      willDeleteLastPositionInElement: willDeleteLastPositionInElement\n    };\n\n    var ancestor$2 = function (scope, selector, isRoot) {\n      return ancestor$1(scope, selector, isRoot).isSome();\n    };\n\n    var hasWhitespacePreserveParent = function (rootNode, node) {\n      var rootElement = Element.fromDom(rootNode);\n      var startNode = Element.fromDom(node);\n      return ancestor$2(startNode, 'pre,code', curry(eq, rootElement));\n    };\n    var isWhitespace = function (rootNode, node) {\n      return NodeType.isText(node) && /^[ \\t\\r\\n]*$/.test(node.data) && hasWhitespacePreserveParent(rootNode, node) === false;\n    };\n    var isNamedAnchor = function (node) {\n      return NodeType.isElement(node) && node.nodeName === 'A' && node.hasAttribute('name');\n    };\n    var isContent = function (rootNode, node) {\n      return isCaretCandidate(node) && isWhitespace(rootNode, node) === false || isNamedAnchor(node) || isBookmark(node);\n    };\n    var isBookmark = NodeType.hasAttribute('data-mce-bookmark');\n    var isBogus$2 = NodeType.hasAttribute('data-mce-bogus');\n    var isBogusAll$1 = NodeType.hasAttributeValue('data-mce-bogus', 'all');\n    var isEmptyNode = function (targetNode) {\n      var walker, node, brCount = 0;\n      if (isContent(targetNode, targetNode)) {\n        return false;\n      } else {\n        node = targetNode.firstChild;\n        if (!node) {\n          return true;\n        }\n        walker = new TreeWalker(node, targetNode);\n        do {\n          if (isBogusAll$1(node)) {\n            node = walker.next(true);\n            continue;\n          }\n          if (isBogus$2(node)) {\n            node = walker.next();\n            continue;\n          }\n          if (NodeType.isBr(node)) {\n            brCount++;\n            node = walker.next();\n            continue;\n          }\n          if (isContent(targetNode, node)) {\n            return false;\n          }\n          node = walker.next();\n        } while (node);\n        return brCount <= 1;\n      }\n    };\n    var isEmpty$1 = function (elm) {\n      return isEmptyNode(elm.dom());\n    };\n    var Empty = { isEmpty: isEmpty$1 };\n\n    var BlockPosition = Immutable('block', 'position');\n    var BlockBoundary = Immutable('from', 'to');\n    var getBlockPosition = function (rootNode, pos) {\n      var rootElm = Element.fromDom(rootNode);\n      var containerElm = Element.fromDom(pos.container());\n      return DeleteUtils.getParentBlock(rootElm, containerElm).map(function (block) {\n        return BlockPosition(block, pos);\n      });\n    };\n    var isDifferentBlocks = function (blockBoundary) {\n      return eq(blockBoundary.from().block(), blockBoundary.to().block()) === false;\n    };\n    var hasSameParent = function (blockBoundary) {\n      return parent(blockBoundary.from().block()).bind(function (parent1) {\n        return parent(blockBoundary.to().block()).filter(function (parent2) {\n          return eq(parent1, parent2);\n        });\n      }).isSome();\n    };\n    var isEditable = function (blockBoundary) {\n      return NodeType.isContentEditableFalse(blockBoundary.from().block().dom()) === false && NodeType.isContentEditableFalse(blockBoundary.to().block().dom()) === false;\n    };\n    var skipLastBr = function (rootNode, forward, blockPosition) {\n      if (NodeType.isBr(blockPosition.position().getNode()) && Empty.isEmpty(blockPosition.block()) === false) {\n        return CaretFinder.positionIn(false, blockPosition.block().dom()).bind(function (lastPositionInBlock) {\n          if (lastPositionInBlock.isEqual(blockPosition.position())) {\n            return CaretFinder.fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {\n              return getBlockPosition(rootNode, to);\n            });\n          } else {\n            return Option.some(blockPosition);\n          }\n        }).getOr(blockPosition);\n      } else {\n        return blockPosition;\n      }\n    };\n    var readFromRange = function (rootNode, forward, rng) {\n      var fromBlockPos = getBlockPosition(rootNode, CaretPosition$1.fromRangeStart(rng));\n      var toBlockPos = fromBlockPos.bind(function (blockPos) {\n        return CaretFinder.fromPosition(forward, rootNode, blockPos.position()).bind(function (to) {\n          return getBlockPosition(rootNode, to).map(function (blockPos) {\n            return skipLastBr(rootNode, forward, blockPos);\n          });\n        });\n      });\n      return lift2(fromBlockPos, toBlockPos, BlockBoundary).filter(function (blockBoundary) {\n        return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary);\n      });\n    };\n    var read$1 = function (rootNode, forward, rng) {\n      return rng.collapsed ? readFromRange(rootNode, forward, rng) : Option.none();\n    };\n    var BlockMergeBoundary = { read: read$1 };\n\n    var dropLast = function (xs) {\n      return xs.slice(0, -1);\n    };\n    var parentsUntil$1 = function (start, root, predicate) {\n      if (contains$3(root, start)) {\n        return dropLast(parents(start, function (elm) {\n          return predicate(elm) || eq(elm, root);\n        }));\n      } else {\n        return [];\n      }\n    };\n    var parents$1 = function (start, root) {\n      return parentsUntil$1(start, root, constant(false));\n    };\n    var parentsAndSelf = function (start, root) {\n      return [start].concat(parents$1(start, root));\n    };\n    var Parents = {\n      parentsUntil: parentsUntil$1,\n      parents: parents$1,\n      parentsAndSelf: parentsAndSelf\n    };\n\n    var getChildrenUntilBlockBoundary = function (block) {\n      var children$1 = children(block);\n      return findIndex(children$1, isBlock).fold(function () {\n        return children$1;\n      }, function (index) {\n        return children$1.slice(0, index);\n      });\n    };\n    var extractChildren = function (block) {\n      var children = getChildrenUntilBlockBoundary(block);\n      each(children, remove$1);\n      return children;\n    };\n    var removeEmptyRoot = function (rootNode, block) {\n      var parents = Parents.parentsAndSelf(block, rootNode);\n      return find(parents.reverse(), Empty.isEmpty).each(remove$1);\n    };\n    var isEmptyBefore = function (el) {\n      return filter(prevSiblings(el), function (el) {\n        return !Empty.isEmpty(el);\n      }).length === 0;\n    };\n    var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {\n      if (Empty.isEmpty(toBlock)) {\n        PaddingBr.fillWithPaddingBr(toBlock);\n        return CaretFinder.firstPositionIn(toBlock.dom());\n      }\n      if (isEmptyBefore(insertionPoint) && Empty.isEmpty(fromBlock)) {\n        before(insertionPoint, Element.fromTag('br'));\n      }\n      var position = CaretFinder.prevPosition(toBlock.dom(), CaretPosition$1.before(insertionPoint.dom()));\n      each(extractChildren(fromBlock), function (child) {\n        before(insertionPoint, child);\n      });\n      removeEmptyRoot(rootNode, fromBlock);\n      return position;\n    };\n    var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) {\n      if (Empty.isEmpty(toBlock)) {\n        remove$1(toBlock);\n        if (Empty.isEmpty(fromBlock)) {\n          PaddingBr.fillWithPaddingBr(fromBlock);\n        }\n        return CaretFinder.firstPositionIn(fromBlock.dom());\n      }\n      var position = CaretFinder.lastPositionIn(toBlock.dom());\n      each(extractChildren(fromBlock), function (child) {\n        append(toBlock, child);\n      });\n      removeEmptyRoot(rootNode, fromBlock);\n      return position;\n    };\n    var findInsertionPoint = function (toBlock, block) {\n      var parentsAndSelf = Parents.parentsAndSelf(block, toBlock);\n      return Option.from(parentsAndSelf[parentsAndSelf.length - 1]);\n    };\n    var getInsertionPoint = function (fromBlock, toBlock) {\n      return contains$3(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Option.none();\n    };\n    var trimBr = function (first, block) {\n      CaretFinder.positionIn(first, block.dom()).map(function (position) {\n        return position.getNode();\n      }).map(Element.fromDom).filter(isBr).each(remove$1);\n    };\n    var mergeBlockInto = function (rootNode, fromBlock, toBlock) {\n      trimBr(true, fromBlock);\n      trimBr(false, toBlock);\n      return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock), curry(nestedBlockMerge, rootNode, fromBlock, toBlock));\n    };\n    var mergeBlocks = function (rootNode, forward, block1, block2) {\n      return forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2);\n    };\n    var MergeBlocks = { mergeBlocks: mergeBlocks };\n\n    var backspaceDelete = function (editor, forward) {\n      var position;\n      var rootNode = Element.fromDom(editor.getBody());\n      position = BlockMergeBoundary.read(rootNode.dom(), forward, editor.selection.getRng()).bind(function (blockBoundary) {\n        return MergeBlocks.mergeBlocks(rootNode, forward, blockBoundary.from().block(), blockBoundary.to().block());\n      });\n      position.each(function (pos) {\n        editor.selection.setRng(pos.toRange());\n      });\n      return position.isSome();\n    };\n    var BlockBoundaryDelete = { backspaceDelete: backspaceDelete };\n\n    var deleteRangeMergeBlocks = function (rootNode, selection) {\n      var rng = selection.getRng();\n      return lift2(DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.startContainer)), DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.endContainer)), function (block1, block2) {\n        if (eq(block1, block2) === false) {\n          rng.deleteContents();\n          MergeBlocks.mergeBlocks(rootNode, true, block1, block2).each(function (pos) {\n            selection.setRng(pos.toRange());\n          });\n          return true;\n        } else {\n          return false;\n        }\n      }).getOr(false);\n    };\n    var isRawNodeInTable = function (root, rawNode) {\n      var node = Element.fromDom(rawNode);\n      var isRoot = curry(eq, root);\n      return ancestor(node, isTableCell, isRoot).isSome();\n    };\n    var isSelectionInTable = function (root, rng) {\n      return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\n    };\n    var isEverythingSelected = function (root, rng) {\n      var noPrevious = CaretFinder.prevPosition(root.dom(), CaretPosition$1.fromRangeStart(rng)).isNone();\n      var noNext = CaretFinder.nextPosition(root.dom(), CaretPosition$1.fromRangeEnd(rng)).isNone();\n      return !isSelectionInTable(root, rng) && noPrevious && noNext;\n    };\n    var emptyEditor = function (editor) {\n      editor.setContent('');\n      editor.selection.setCursorLocation();\n      return true;\n    };\n    var deleteRange = function (editor) {\n      var rootNode = Element.fromDom(editor.getBody());\n      var rng = editor.selection.getRng();\n      return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);\n    };\n    var backspaceDelete$1 = function (editor, forward) {\n      return editor.selection.isCollapsed() ? false : deleteRange(editor);\n    };\n    var BlockRangeDelete = { backspaceDelete: backspaceDelete$1 };\n\n    var generate$1 = function (cases) {\n      if (!isArray(cases)) {\n        throw new Error('cases must be an array');\n      }\n      if (cases.length === 0) {\n        throw new Error('there must be at least one case');\n      }\n      var constructors = [];\n      var adt = {};\n      each(cases, function (acase, count) {\n        var keys$1 = keys(acase);\n        if (keys$1.length !== 1) {\n          throw new Error('one and only one name per case');\n        }\n        var key = keys$1[0];\n        var value = acase[key];\n        if (adt[key] !== undefined) {\n          throw new Error('duplicate key detected:' + key);\n        } else if (key === 'cata') {\n          throw new Error('cannot have a case named cata (sorry)');\n        } else if (!isArray(value)) {\n          throw new Error('case arguments must be an array');\n        }\n        constructors.push(key);\n        adt[key] = function () {\n          var argLength = arguments.length;\n          if (argLength !== value.length) {\n            throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n          }\n          var args = new Array(argLength);\n          for (var i = 0; i < args.length; i++) {\n            args[i] = arguments[i];\n          }\n          var match = function (branches) {\n            var branchKeys = keys(branches);\n            if (constructors.length !== branchKeys.length) {\n              throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n            }\n            var allReqd = forall(constructors, function (reqKey) {\n              return contains(branchKeys, reqKey);\n            });\n            if (!allReqd) {\n              throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n            }\n            return branches[key].apply(null, args);\n          };\n          return {\n            fold: function () {\n              if (arguments.length !== cases.length) {\n                throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\n              }\n              var target = arguments[count];\n              return target.apply(null, args);\n            },\n            match: match,\n            log: function (label) {\n              domGlobals.console.log(label, {\n                constructors: constructors,\n                constructor: key,\n                params: args\n              });\n            }\n          };\n        };\n      });\n      return adt;\n    };\n    var Adt = { generate: generate$1 };\n\n    var isBr$5 = function (pos) {\n      return getElementFromPosition(pos).exists(isBr);\n    };\n    var findBr = function (forward, root, pos) {\n      var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n      var scope = head(parentBlocks).getOr(root);\n      return CaretFinder.fromPosition(forward, scope.dom(), pos).filter(isBr$5);\n    };\n    var isBeforeBr = function (root, pos) {\n      return getElementFromPosition(pos).exists(isBr) || findBr(true, root, pos).isSome();\n    };\n    var isAfterBr = function (root, pos) {\n      return getElementFromPrevPosition(pos).exists(isBr) || findBr(false, root, pos).isSome();\n    };\n    var findPreviousBr = curry(findBr, false);\n    var findNextBr = curry(findBr, true);\n\n    var is$2 = function (expected) {\n      return function (actual) {\n        return expected === actual;\n      };\n    };\n    var isNbsp = is$2('\\xA0');\n    var isWhiteSpace$1 = function (chr) {\n      return /^[\\r\\n\\t ]$/.test(chr);\n    };\n    var isContent$1 = function (chr) {\n      return !isWhiteSpace$1(chr) && !isNbsp(chr);\n    };\n\n    var isChar = function (forward, predicate, pos) {\n      return Option.from(pos.container()).filter(NodeType.isText).exists(function (text) {\n        var delta = forward ? 0 : -1;\n        return predicate(text.data.charAt(pos.offset() + delta));\n      });\n    };\n    var isBeforeSpace = curry(isChar, true, isWhiteSpace$1);\n    var isAfterSpace = curry(isChar, false, isWhiteSpace$1);\n    var isEmptyText = function (pos) {\n      var container = pos.container();\n      return NodeType.isText(container) && container.data.length === 0;\n    };\n    var isNextToContentEditableFalse = function (relativeOffset, caretPosition) {\n      var node = getChildNodeAtRelativeOffset(relativeOffset, caretPosition);\n      return NodeType.isContentEditableFalse(node) && !NodeType.isBogusAll(node);\n    };\n    var isBeforeContentEditableFalse = curry(isNextToContentEditableFalse, 0);\n    var isAfterContentEditableFalse = curry(isNextToContentEditableFalse, -1);\n    var isNextToTable = function (relativeOffset, caretPosition) {\n      return NodeType.isTable(getChildNodeAtRelativeOffset(relativeOffset, caretPosition));\n    };\n    var isBeforeTable = curry(isNextToTable, 0);\n    var isAfterTable = curry(isNextToTable, -1);\n\n    var isCompoundElement = function (node) {\n      return isTableCell(Element.fromDom(node)) || isListItem(Element.fromDom(node));\n    };\n    var DeleteAction = Adt.generate([\n      { remove: ['element'] },\n      { moveToElement: ['element'] },\n      { moveToPosition: ['position'] }\n    ]);\n    var isAtContentEditableBlockCaret = function (forward, from) {\n      var elm = from.getNode(forward === false);\n      var caretLocation = forward ? 'after' : 'before';\n      return NodeType.isElement(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n    };\n    var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {\n      var inSameBlock = function (elm) {\n        return isInline(Element.fromDom(elm)) && !isInSameBlock(from, to, root);\n      };\n      return getRelativeCefElm(!forward, from).fold(function () {\n        return getRelativeCefElm(forward, to).fold(constant(false), inSameBlock);\n      }, inSameBlock);\n    };\n    var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {\n      var toCefElm = to.getNode(forward === false);\n      return DeleteUtils.getParentBlock(Element.fromDom(root), Element.fromDom(from.getNode())).map(function (blockElm) {\n        return Empty.isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom()) : DeleteAction.moveToElement(toCefElm);\n      }).orThunk(function () {\n        return Option.some(DeleteAction.moveToElement(toCefElm));\n      });\n    };\n    var findCefPosition = function (root, forward, from) {\n      return CaretFinder.fromPosition(forward, root, from).bind(function (to) {\n        if (isCompoundElement(to.getNode())) {\n          return Option.none();\n        } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {\n          return Option.none();\n        } else if (forward && NodeType.isContentEditableFalse(to.getNode())) {\n          return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n        } else if (forward === false && NodeType.isContentEditableFalse(to.getNode(true))) {\n          return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n        } else if (forward && isAfterContentEditableFalse(from)) {\n          return Option.some(DeleteAction.moveToPosition(to));\n        } else if (forward === false && isBeforeContentEditableFalse(from)) {\n          return Option.some(DeleteAction.moveToPosition(to));\n        } else {\n          return Option.none();\n        }\n      });\n    };\n    var getContentEditableBlockAction = function (forward, elm) {\n      if (forward && NodeType.isContentEditableFalse(elm.nextSibling)) {\n        return Option.some(DeleteAction.moveToElement(elm.nextSibling));\n      } else if (forward === false && NodeType.isContentEditableFalse(elm.previousSibling)) {\n        return Option.some(DeleteAction.moveToElement(elm.previousSibling));\n      } else {\n        return Option.none();\n      }\n    };\n    var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {\n      return deleteAction.fold(function (elm) {\n        return Option.some(DeleteAction.remove(elm));\n      }, function (elm) {\n        return Option.some(DeleteAction.moveToElement(elm));\n      }, function (to) {\n        if (isInSameBlock(from, to, root)) {\n          return Option.none();\n        } else {\n          return Option.some(DeleteAction.moveToPosition(to));\n        }\n      });\n    };\n    var getContentEditableAction = function (root, forward, from) {\n      if (isAtContentEditableBlockCaret(forward, from)) {\n        return getContentEditableBlockAction(forward, from.getNode(forward === false)).fold(function () {\n          return findCefPosition(root, forward, from);\n        }, Option.some);\n      } else {\n        return findCefPosition(root, forward, from).bind(function (deleteAction) {\n          return skipMoveToActionFromInlineCefToContent(root, from, deleteAction);\n        });\n      }\n    };\n    var read$2 = function (root, forward, rng) {\n      var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\n      var from = CaretPosition$1.fromRangeStart(normalizedRange);\n      var rootElement = Element.fromDom(root);\n      if (forward === false && isAfterContentEditableFalse(from)) {\n        return Option.some(DeleteAction.remove(from.getNode(true)));\n      } else if (forward && isBeforeContentEditableFalse(from)) {\n        return Option.some(DeleteAction.remove(from.getNode()));\n      } else if (forward === false && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from)) {\n        return findPreviousBr(rootElement, from).map(function (br) {\n          return DeleteAction.remove(br.getNode());\n        });\n      } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr(rootElement, from)) {\n        return findNextBr(rootElement, from).map(function (br) {\n          return DeleteAction.remove(br.getNode());\n        });\n      } else {\n        return getContentEditableAction(root, forward, from);\n      }\n    };\n\n    var isCollapsibleWhitespace = function (c) {\n      return ' \\f\\n\\r\\t\\x0B'.indexOf(c) !== -1;\n    };\n    var normalizeContent = function (content, isStartOfContent, isEndOfContent) {\n      var result = foldl(content.split(''), function (acc, c) {\n        if (isCollapsibleWhitespace(c) || c === '\\xA0') {\n          if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) {\n            return {\n              previousCharIsSpace: false,\n              str: acc.str + '\\xA0'\n            };\n          } else {\n            return {\n              previousCharIsSpace: true,\n              str: acc.str + ' '\n            };\n          }\n        } else {\n          return {\n            previousCharIsSpace: false,\n            str: acc.str + c\n          };\n        }\n      }, {\n        previousCharIsSpace: false,\n        str: ''\n      });\n      return result.str;\n    };\n    var normalize$1 = function (node, offset, count) {\n      if (count === 0) {\n        return;\n      }\n      var whitespace = node.data.slice(offset, offset + count);\n      var isEndOfContent = offset + count >= node.data.length;\n      var isStartOfContent = offset === 0;\n      node.replaceData(offset, count, normalizeContent(whitespace, isStartOfContent, isEndOfContent));\n    };\n    var normalizeWhitespaceAfter = function (node, offset) {\n      var content = node.data.slice(offset);\n      var whitespaceCount = content.length - lTrim(content).length;\n      return normalize$1(node, offset, whitespaceCount);\n    };\n    var normalizeWhitespaceBefore = function (node, offset) {\n      var content = node.data.slice(0, offset);\n      var whitespaceCount = content.length - rTrim(content).length;\n      return normalize$1(node, offset - whitespaceCount, whitespaceCount);\n    };\n    var mergeTextNodes = function (prevNode, nextNode, normalizeWhitespace) {\n      var whitespaceOffset = rTrim(prevNode.data).length;\n      prevNode.appendData(nextNode.data);\n      remove$1(Element.fromDom(nextNode));\n      if (normalizeWhitespace) {\n        normalizeWhitespaceAfter(prevNode, whitespaceOffset);\n      }\n      return prevNode;\n    };\n\n    var needsReposition = function (pos, elm) {\n      var container = pos.container();\n      var offset = pos.offset();\n      return CaretPosition$1.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition$1.before(elm).offset();\n    };\n    var reposition = function (elm, pos) {\n      return needsReposition(pos, elm) ? CaretPosition$1(pos.container(), pos.offset() - 1) : pos;\n    };\n    var beforeOrStartOf = function (node) {\n      return NodeType.isText(node) ? CaretPosition$1(node, 0) : CaretPosition$1.before(node);\n    };\n    var afterOrEndOf = function (node) {\n      return NodeType.isText(node) ? CaretPosition$1(node, node.data.length) : CaretPosition$1.after(node);\n    };\n    var getPreviousSiblingCaretPosition = function (elm) {\n      if (isCaretCandidate(elm.previousSibling)) {\n        return Option.some(afterOrEndOf(elm.previousSibling));\n      } else {\n        return elm.previousSibling ? CaretFinder.lastPositionIn(elm.previousSibling) : Option.none();\n      }\n    };\n    var getNextSiblingCaretPosition = function (elm) {\n      if (isCaretCandidate(elm.nextSibling)) {\n        return Option.some(beforeOrStartOf(elm.nextSibling));\n      } else {\n        return elm.nextSibling ? CaretFinder.firstPositionIn(elm.nextSibling) : Option.none();\n      }\n    };\n    var findCaretPositionBackwardsFromElm = function (rootElement, elm) {\n      var startPosition = CaretPosition$1.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);\n      return CaretFinder.prevPosition(rootElement, startPosition).fold(function () {\n        return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm));\n      }, Option.some);\n    };\n    var findCaretPositionForwardsFromElm = function (rootElement, elm) {\n      return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm)).fold(function () {\n        return CaretFinder.prevPosition(rootElement, CaretPosition$1.before(elm));\n      }, Option.some);\n    };\n    var findCaretPositionBackwards = function (rootElement, elm) {\n      return getPreviousSiblingCaretPosition(elm).orThunk(function () {\n        return getNextSiblingCaretPosition(elm);\n      }).orThunk(function () {\n        return findCaretPositionBackwardsFromElm(rootElement, elm);\n      });\n    };\n    var findCaretPositionForward = function (rootElement, elm) {\n      return getNextSiblingCaretPosition(elm).orThunk(function () {\n        return getPreviousSiblingCaretPosition(elm);\n      }).orThunk(function () {\n        return findCaretPositionForwardsFromElm(rootElement, elm);\n      });\n    };\n    var findCaretPosition$1 = function (forward, rootElement, elm) {\n      return forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n    };\n    var findCaretPosOutsideElmAfterDelete = function (forward, rootElement, elm) {\n      return findCaretPosition$1(forward, rootElement, elm).map(curry(reposition, elm));\n    };\n    var setSelection = function (editor, forward, pos) {\n      pos.fold(function () {\n        editor.focus();\n      }, function (pos) {\n        editor.selection.setRng(pos.toRange(), forward);\n      });\n    };\n    var eqRawNode = function (rawNode) {\n      return function (elm) {\n        return elm.dom() === rawNode;\n      };\n    };\n    var isBlock$2 = function (editor, elm) {\n      return elm && editor.schema.getBlockElements().hasOwnProperty(name(elm));\n    };\n    var paddEmptyBlock = function (elm) {\n      if (Empty.isEmpty(elm)) {\n        var br = Element.fromHtml('<br data-mce-bogus=\"1\">');\n        empty(elm);\n        append(elm, br);\n        return Option.some(CaretPosition$1.before(br.dom()));\n      } else {\n        return Option.none();\n      }\n    };\n    var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) {\n      var prevTextOpt = prevSibling(elm).filter(isText);\n      var nextTextOpt = nextSibling(elm).filter(isText);\n      remove$1(elm);\n      return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, function (prev, next, pos) {\n        var prevNode = prev.dom(), nextNode = next.dom();\n        var offset = prevNode.data.length;\n        mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\n        return pos.container() === nextNode ? CaretPosition$1(prevNode, offset) : pos;\n      }).orThunk(function () {\n        if (normalizeWhitespace) {\n          prevTextOpt.each(function (elm) {\n            return normalizeWhitespaceBefore(elm.dom(), elm.dom().length);\n          });\n          nextTextOpt.each(function (elm) {\n            return normalizeWhitespaceAfter(elm.dom(), 0);\n          });\n        }\n        return afterDeletePosOpt;\n      });\n    };\n    var isInlineElement = function (editor, element) {\n      return has(editor.schema.getTextInlineElements(), name(element));\n    };\n    var deleteElement = function (editor, forward, elm, moveCaret) {\n      if (moveCaret === void 0) {\n        moveCaret = true;\n      }\n      var afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom());\n      var parentBlock = ancestor(elm, curry(isBlock$2, editor), eqRawNode(editor.getBody()));\n      var normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm));\n      if (editor.dom.isEmpty(editor.getBody())) {\n        editor.setContent('');\n        editor.selection.setCursorLocation();\n      } else {\n        parentBlock.bind(paddEmptyBlock).fold(function () {\n          if (moveCaret) {\n            setSelection(editor, forward, normalizedAfterDeletePos);\n          }\n        }, function (paddPos) {\n          if (moveCaret) {\n            setSelection(editor, forward, Option.some(paddPos));\n          }\n        });\n      }\n    };\n    var DeleteElement = { deleteElement: deleteElement };\n\n    var deleteElement$1 = function (editor, forward) {\n      return function (element) {\n        editor._selectionOverrides.hideFakeCaret();\n        DeleteElement.deleteElement(editor, forward, Element.fromDom(element));\n        return true;\n      };\n    };\n    var moveToElement = function (editor, forward) {\n      return function (element) {\n        var pos = forward ? CaretPosition$1.before(element) : CaretPosition$1.after(element);\n        editor.selection.setRng(pos.toRange());\n        return true;\n      };\n    };\n    var moveToPosition = function (editor) {\n      return function (pos) {\n        editor.selection.setRng(pos.toRange());\n        return true;\n      };\n    };\n    var backspaceDeleteCaret = function (editor, forward) {\n      var result = read$2(editor.getBody(), forward, editor.selection.getRng()).map(function (deleteAction) {\n        return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));\n      });\n      return result.getOr(false);\n    };\n    var deleteOffscreenSelection = function (rootElement) {\n      each(descendants$1(rootElement, '.mce-offscreen-selection'), remove$1);\n    };\n    var backspaceDeleteRange = function (editor, forward) {\n      var selectedElement = editor.selection.getNode();\n      if (NodeType.isContentEditableFalse(selectedElement)) {\n        deleteOffscreenSelection(Element.fromDom(editor.getBody()));\n        DeleteElement.deleteElement(editor, forward, Element.fromDom(editor.selection.getNode()));\n        DeleteUtils.paddEmptyBody(editor);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    var getContentEditableRoot = function (root, node) {\n      while (node && node !== root) {\n        if (NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node)) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    var paddEmptyElement = function (editor) {\n      var br;\n      var ceRoot = getContentEditableRoot(editor.getBody(), editor.selection.getNode());\n      if (NodeType.isContentEditableTrue(ceRoot) && editor.dom.isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) {\n        br = editor.dom.create('br', { 'data-mce-bogus': '1' });\n        editor.dom.setHTML(ceRoot, '');\n        ceRoot.appendChild(br);\n        editor.selection.setRng(CaretPosition$1.before(br).toRange());\n      }\n      return true;\n    };\n    var backspaceDelete$2 = function (editor, forward) {\n      if (editor.selection.isCollapsed()) {\n        return backspaceDeleteCaret(editor, forward);\n      } else {\n        return backspaceDeleteRange(editor, forward);\n      }\n    };\n    var CefDelete = {\n      backspaceDelete: backspaceDelete$2,\n      paddEmptyElement: paddEmptyElement\n    };\n\n    var isText$8 = NodeType.isText;\n    var startsWithCaretContainer$1 = function (node) {\n      return isText$8(node) && node.data[0] === Zwsp.ZWSP;\n    };\n    var endsWithCaretContainer$1 = function (node) {\n      return isText$8(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;\n    };\n    var createZwsp = function (node) {\n      return node.ownerDocument.createTextNode(Zwsp.ZWSP);\n    };\n    var insertBefore$1 = function (node) {\n      if (isText$8(node.previousSibling)) {\n        if (endsWithCaretContainer$1(node.previousSibling)) {\n          return node.previousSibling;\n        } else {\n          node.previousSibling.appendData(Zwsp.ZWSP);\n          return node.previousSibling;\n        }\n      } else if (isText$8(node)) {\n        if (startsWithCaretContainer$1(node)) {\n          return node;\n        } else {\n          node.insertData(0, Zwsp.ZWSP);\n          return node;\n        }\n      } else {\n        var newNode = createZwsp(node);\n        node.parentNode.insertBefore(newNode, node);\n        return newNode;\n      }\n    };\n    var insertAfter$1 = function (node) {\n      if (isText$8(node.nextSibling)) {\n        if (startsWithCaretContainer$1(node.nextSibling)) {\n          return node.nextSibling;\n        } else {\n          node.nextSibling.insertData(0, Zwsp.ZWSP);\n          return node.nextSibling;\n        }\n      } else if (isText$8(node)) {\n        if (endsWithCaretContainer$1(node)) {\n          return node;\n        } else {\n          node.appendData(Zwsp.ZWSP);\n          return node;\n        }\n      } else {\n        var newNode = createZwsp(node);\n        if (node.nextSibling) {\n          node.parentNode.insertBefore(newNode, node.nextSibling);\n        } else {\n          node.parentNode.appendChild(newNode);\n        }\n        return newNode;\n      }\n    };\n    var insertInline$1 = function (before, node) {\n      return before ? insertBefore$1(node) : insertAfter$1(node);\n    };\n    var insertInlineBefore = curry(insertInline$1, true);\n    var insertInlineAfter = curry(insertInline$1, false);\n\n    var insertInlinePos = function (pos, before) {\n      if (NodeType.isText(pos.container())) {\n        return insertInline$1(before, pos.container());\n      } else {\n        return insertInline$1(before, pos.getNode());\n      }\n    };\n    var isPosCaretContainer = function (pos, caret) {\n      var caretNode = caret.get();\n      return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n    };\n    var renderCaret = function (caret, location) {\n      return location.fold(function (element) {\n        CaretContainerRemove.remove(caret.get());\n        var text = insertInlineBefore(element);\n        caret.set(text);\n        return Option.some(CaretPosition$1(text, text.length - 1));\n      }, function (element) {\n        return CaretFinder.firstPositionIn(element).map(function (pos) {\n          if (!isPosCaretContainer(pos, caret)) {\n            CaretContainerRemove.remove(caret.get());\n            var text = insertInlinePos(pos, true);\n            caret.set(text);\n            return CaretPosition$1(text, 1);\n          } else {\n            return CaretPosition$1(caret.get(), 1);\n          }\n        });\n      }, function (element) {\n        return CaretFinder.lastPositionIn(element).map(function (pos) {\n          if (!isPosCaretContainer(pos, caret)) {\n            CaretContainerRemove.remove(caret.get());\n            var text = insertInlinePos(pos, false);\n            caret.set(text);\n            return CaretPosition$1(text, text.length - 1);\n          } else {\n            return CaretPosition$1(caret.get(), caret.get().length - 1);\n          }\n        });\n      }, function (element) {\n        CaretContainerRemove.remove(caret.get());\n        var text = insertInlineAfter(element);\n        caret.set(text);\n        return Option.some(CaretPosition$1(text, 1));\n      });\n    };\n    var BoundaryCaret = { renderCaret: renderCaret };\n\n    var evaluateUntil = function (fns, args) {\n      for (var i = 0; i < fns.length; i++) {\n        var result = fns[i].apply(null, args);\n        if (result.isSome()) {\n          return result;\n        }\n      }\n      return Option.none();\n    };\n    var LazyEvaluator = { evaluateUntil: evaluateUntil };\n\n    var Location = Adt.generate([\n      { before: ['element'] },\n      { start: ['element'] },\n      { end: ['element'] },\n      { after: ['element'] }\n    ]);\n    var rescope = function (rootNode, node) {\n      var parentBlock = getParentBlock(node, rootNode);\n      return parentBlock ? parentBlock : rootNode;\n    };\n    var before$3 = function (isInlineTarget, rootNode, pos) {\n      var nPos = InlineUtils.normalizeForwards(pos);\n      var scope = rescope(rootNode, nPos.container());\n      return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {\n        return CaretFinder.nextPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {\n          return Location.before(inline);\n        });\n      }, Option.none);\n    };\n    var isNotInsideFormatCaretContainer = function (rootNode, elm) {\n      return getParentCaretContainer(rootNode, elm) === null;\n    };\n    var findInsideRootInline = function (isInlineTarget, rootNode, pos) {\n      return InlineUtils.findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n    };\n    var start = function (isInlineTarget, rootNode, pos) {\n      var nPos = InlineUtils.normalizeBackwards(pos);\n      return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n        var prevPos = CaretFinder.prevPosition(inline, nPos);\n        return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none();\n      });\n    };\n    var end = function (isInlineTarget, rootNode, pos) {\n      var nPos = InlineUtils.normalizeForwards(pos);\n      return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n        var nextPos = CaretFinder.nextPosition(inline, nPos);\n        return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none();\n      });\n    };\n    var after$2 = function (isInlineTarget, rootNode, pos) {\n      var nPos = InlineUtils.normalizeBackwards(pos);\n      var scope = rescope(rootNode, nPos.container());\n      return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {\n        return CaretFinder.prevPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {\n          return Location.after(inline);\n        });\n      }, Option.none);\n    };\n    var isValidLocation = function (location) {\n      return InlineUtils.isRtl(getElement(location)) === false;\n    };\n    var readLocation = function (isInlineTarget, rootNode, pos) {\n      var location = LazyEvaluator.evaluateUntil([\n        before$3,\n        start,\n        end,\n        after$2\n      ], [\n        isInlineTarget,\n        rootNode,\n        pos\n      ]);\n      return location.filter(isValidLocation);\n    };\n    var getElement = function (location) {\n      return location.fold(identity, identity, identity, identity);\n    };\n    var getName = function (location) {\n      return location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n    };\n    var outside = function (location) {\n      return location.fold(Location.before, Location.before, Location.after, Location.after);\n    };\n    var inside = function (location) {\n      return location.fold(Location.start, Location.start, Location.end, Location.end);\n    };\n    var isEq$1 = function (location1, location2) {\n      return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n    };\n    var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {\n      return lift2(InlineUtils.findRootInline(isInlineTarget, rootNode, from), InlineUtils.findRootInline(isInlineTarget, rootNode, to), function (fromInline, toInline) {\n        if (fromInline !== toInline && InlineUtils.hasSameParentBlock(rootNode, fromInline, toInline)) {\n          return Location.after(forward ? fromInline : toInline);\n        } else {\n          return location;\n        }\n      }).getOr(location);\n    };\n    var skipNoMovement = function (fromLocation, toLocation) {\n      return fromLocation.fold(constant(true), function (fromLocation) {\n        return !isEq$1(fromLocation, toLocation);\n      });\n    };\n    var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {\n      var from = InlineUtils.normalizePosition(forward, pos);\n      var to = CaretFinder.fromPosition(forward, rootNode, from).map(curry(InlineUtils.normalizePosition, forward));\n      var location = to.fold(function () {\n        return fromLocation.map(outside);\n      }, function (to) {\n        return readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation));\n      });\n      return location.filter(isValidLocation);\n    };\n    var findLocationSimple = function (forward, location) {\n      if (forward) {\n        return location.fold(compose(Option.some, Location.start), Option.none, compose(Option.some, Location.after), Option.none);\n      } else {\n        return location.fold(Option.none, compose(Option.some, Location.before), Option.none, compose(Option.some, Location.end));\n      }\n    };\n    var findLocation = function (forward, isInlineTarget, rootNode, pos) {\n      var from = InlineUtils.normalizePosition(forward, pos);\n      var fromLocation = readLocation(isInlineTarget, rootNode, from);\n      return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(function () {\n        return findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos);\n      });\n    };\n    var BoundaryLocation = {\n      readLocation: readLocation,\n      findLocation: findLocation,\n      prevLocation: curry(findLocation, false),\n      nextLocation: curry(findLocation, true),\n      getElement: getElement,\n      outside: outside,\n      inside: inside\n    };\n\n    var hasSelectionModifyApi = function (editor) {\n      return isFunction(editor.selection.getSel().modify);\n    };\n    var moveRel = function (forward, selection, pos) {\n      var delta = forward ? 1 : -1;\n      selection.setRng(CaretPosition$1(pos.container(), pos.offset() + delta).toRange());\n      selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word');\n      return true;\n    };\n    var moveByWord = function (forward, editor) {\n      var rng = editor.selection.getRng();\n      var pos = forward ? CaretPosition$1.fromRangeEnd(rng) : CaretPosition$1.fromRangeStart(rng);\n      if (!hasSelectionModifyApi(editor)) {\n        return false;\n      } else if (forward && isBeforeInline(pos)) {\n        return moveRel(true, editor.selection, pos);\n      } else if (!forward && isAfterInline(pos)) {\n        return moveRel(false, editor.selection, pos);\n      } else {\n        return false;\n      }\n    };\n    var WordSelection = {\n      hasSelectionModifyApi: hasSelectionModifyApi,\n      moveByWord: moveByWord\n    };\n\n    var setCaretPosition = function (editor, pos) {\n      var rng = editor.dom.createRng();\n      rng.setStart(pos.container(), pos.offset());\n      rng.setEnd(pos.container(), pos.offset());\n      editor.selection.setRng(rng);\n    };\n    var isFeatureEnabled = function (editor) {\n      return editor.settings.inline_boundaries !== false;\n    };\n    var setSelected = function (state, elm) {\n      if (state) {\n        elm.setAttribute('data-mce-selected', 'inline-boundary');\n      } else {\n        elm.removeAttribute('data-mce-selected');\n      }\n    };\n    var renderCaretLocation = function (editor, caret, location) {\n      return BoundaryCaret.renderCaret(caret, location).map(function (pos) {\n        setCaretPosition(editor, pos);\n        return location;\n      });\n    };\n    var findLocation$1 = function (editor, caret, forward) {\n      var rootNode = editor.getBody();\n      var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n      var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n      var location = BoundaryLocation.findLocation(forward, isInlineTarget, rootNode, from);\n      return location.bind(function (location) {\n        return renderCaretLocation(editor, caret, location);\n      });\n    };\n    var toggleInlines = function (isInlineTarget, dom, elms) {\n      var selectedInlines = filter(dom.select('*[data-mce-selected=\"inline-boundary\"]'), isInlineTarget);\n      var targetInlines = filter(elms, isInlineTarget);\n      each(difference(selectedInlines, targetInlines), curry(setSelected, false));\n      each(difference(targetInlines, selectedInlines), curry(setSelected, true));\n    };\n    var safeRemoveCaretContainer = function (editor, caret) {\n      if (editor.selection.isCollapsed() && editor.composing !== true && caret.get()) {\n        var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n        if (CaretPosition$1.isTextPosition(pos) && InlineUtils.isAtZwsp(pos) === false) {\n          setCaretPosition(editor, CaretContainerRemove.removeAndReposition(caret.get(), pos));\n          caret.set(null);\n        }\n      }\n    };\n    var renderInsideInlineCaret = function (isInlineTarget, editor, caret, elms) {\n      if (editor.selection.isCollapsed()) {\n        var inlines = filter(elms, isInlineTarget);\n        each(inlines, function (inline) {\n          var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n          BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {\n            return renderCaretLocation(editor, caret, location);\n          });\n        });\n      }\n    };\n    var move = function (editor, caret, forward) {\n      return function () {\n        return isFeatureEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false;\n      };\n    };\n    var moveWord = function (forward, editor, caret) {\n      return function () {\n        return isFeatureEnabled(editor) ? WordSelection.moveByWord(forward, editor) : false;\n      };\n    };\n    var setupSelectedState = function (editor) {\n      var caret = Cell(null);\n      var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n      editor.on('NodeChange', function (e) {\n        if (isFeatureEnabled(editor)) {\n          toggleInlines(isInlineTarget, editor.dom, e.parents);\n          safeRemoveCaretContainer(editor, caret);\n          renderInsideInlineCaret(isInlineTarget, editor, caret, e.parents);\n        }\n      });\n      return caret;\n    };\n    var moveNextWord = curry(moveWord, true);\n    var movePrevWord = curry(moveWord, false);\n    var BoundarySelection = {\n      move: move,\n      moveNextWord: moveNextWord,\n      movePrevWord: movePrevWord,\n      setupSelectedState: setupSelectedState,\n      setCaretPosition: setCaretPosition\n    };\n\n    var isFeatureEnabled$1 = function (editor) {\n      return editor.settings.inline_boundaries !== false;\n    };\n    var rangeFromPositions = function (from, to) {\n      var range = domGlobals.document.createRange();\n      range.setStart(from.container(), from.offset());\n      range.setEnd(to.container(), to.offset());\n      return range;\n    };\n    var hasOnlyTwoOrLessPositionsLeft = function (elm) {\n      return lift2(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {\n        var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);\n        var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);\n        return CaretFinder.nextPosition(elm, normalizedFirstPos).map(function (pos) {\n          return pos.isEqual(normalizedLastPos);\n        }).getOr(true);\n      }).getOr(true);\n    };\n    var setCaretLocation = function (editor, caret) {\n      return function (location) {\n        return BoundaryCaret.renderCaret(caret, location).map(function (pos) {\n          BoundarySelection.setCaretPosition(editor, pos);\n          return true;\n        }).getOr(false);\n      };\n    };\n    var deleteFromTo = function (editor, caret, from, to) {\n      var rootNode = editor.getBody();\n      var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n      editor.undoManager.ignore(function () {\n        editor.selection.setRng(rangeFromPositions(from, to));\n        editor.execCommand('Delete');\n        BoundaryLocation.readLocation(isInlineTarget, rootNode, CaretPosition$1.fromRangeStart(editor.selection.getRng())).map(BoundaryLocation.inside).map(setCaretLocation(editor, caret));\n      });\n      editor.nodeChanged();\n    };\n    var rescope$1 = function (rootNode, node) {\n      var parentBlock = getParentBlock(node, rootNode);\n      return parentBlock ? parentBlock : rootNode;\n    };\n    var backspaceDeleteCollapsed = function (editor, caret, forward, from) {\n      var rootNode = rescope$1(editor.getBody(), from.container());\n      var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n      var fromLocation = BoundaryLocation.readLocation(isInlineTarget, rootNode, from);\n      return fromLocation.bind(function (location) {\n        if (forward) {\n          return location.fold(constant(Option.some(BoundaryLocation.inside(location))), Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none);\n        } else {\n          return location.fold(Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none, constant(Option.some(BoundaryLocation.inside(location))));\n        }\n      }).map(setCaretLocation(editor, caret)).getOrThunk(function () {\n        var toPosition = CaretFinder.navigate(forward, rootNode, from);\n        var toLocation = toPosition.bind(function (pos) {\n          return BoundaryLocation.readLocation(isInlineTarget, rootNode, pos);\n        });\n        if (fromLocation.isSome() && toLocation.isSome()) {\n          return InlineUtils.findRootInline(isInlineTarget, rootNode, from).map(function (elm) {\n            if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n              DeleteElement.deleteElement(editor, forward, Element.fromDom(elm));\n              return true;\n            } else {\n              return false;\n            }\n          }).getOr(false);\n        } else {\n          return toLocation.bind(function (_) {\n            return toPosition.map(function (to) {\n              if (forward) {\n                deleteFromTo(editor, caret, from, to);\n              } else {\n                deleteFromTo(editor, caret, to, from);\n              }\n              return true;\n            });\n          }).getOr(false);\n        }\n      });\n    };\n    var backspaceDelete$3 = function (editor, caret, forward) {\n      if (editor.selection.isCollapsed() && isFeatureEnabled$1(editor)) {\n        var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n        return backspaceDeleteCollapsed(editor, caret, forward, from);\n      }\n      return false;\n    };\n    var InlineBoundaryDelete = { backspaceDelete: backspaceDelete$3 };\n\n    var tableCellRng = Immutable('start', 'end');\n    var tableSelection = Immutable('rng', 'table', 'cells');\n    var deleteAction = Adt.generate([\n      { removeTable: ['element'] },\n      { emptyCells: ['cells'] }\n    ]);\n    var isRootFromElement = function (root) {\n      return curry(eq, root);\n    };\n    var getClosestCell = function (container, isRoot) {\n      return closest$1(Element.fromDom(container), 'td,th', isRoot);\n    };\n    var getClosestTable = function (cell, isRoot) {\n      return ancestor$1(cell, 'table', isRoot);\n    };\n    var isExpandedCellRng = function (cellRng) {\n      return eq(cellRng.start(), cellRng.end()) === false;\n    };\n    var getTableFromCellRng = function (cellRng, isRoot) {\n      return getClosestTable(cellRng.start(), isRoot).bind(function (startParentTable) {\n        return getClosestTable(cellRng.end(), isRoot).bind(function (endParentTable) {\n          return eq(startParentTable, endParentTable) ? Option.some(startParentTable) : Option.none();\n        });\n      });\n    };\n    var getTableCells = function (table) {\n      return descendants$1(table, 'td,th');\n    };\n    var getCellRangeFromStartTable = function (cellRng, isRoot) {\n      return getClosestTable(cellRng.start(), isRoot).bind(function (table) {\n        return last(getTableCells(table)).map(function (endCell) {\n          return tableCellRng(cellRng.start(), endCell);\n        });\n      });\n    };\n    var partialSelection = function (isRoot, rng) {\n      var startCell = getClosestCell(rng.startContainer, isRoot);\n      var endCell = getClosestCell(rng.endContainer, isRoot);\n      return rng.collapsed ? Option.none() : lift2(startCell, endCell, tableCellRng).fold(function () {\n        return startCell.fold(function () {\n          return endCell.bind(function (endCell) {\n            return getClosestTable(endCell, isRoot).bind(function (table) {\n              return head(getTableCells(table)).map(function (startCell) {\n                return tableCellRng(startCell, endCell);\n              });\n            });\n          });\n        }, function (startCell) {\n          return getClosestTable(startCell, isRoot).bind(function (table) {\n            return last(getTableCells(table)).map(function (endCell) {\n              return tableCellRng(startCell, endCell);\n            });\n          });\n        });\n      }, function (cellRng) {\n        return isWithinSameTable(isRoot, cellRng) ? Option.none() : getCellRangeFromStartTable(cellRng, isRoot);\n      });\n    };\n    var isWithinSameTable = function (isRoot, cellRng) {\n      return getTableFromCellRng(cellRng, isRoot).isSome();\n    };\n    var getCellRng = function (rng, isRoot) {\n      var startCell = getClosestCell(rng.startContainer, isRoot);\n      var endCell = getClosestCell(rng.endContainer, isRoot);\n      return lift2(startCell, endCell, tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) {\n        return isWithinSameTable(isRoot, cellRng);\n      }).orThunk(function () {\n        return partialSelection(isRoot, rng);\n      });\n    };\n    var getTableSelectionFromCellRng = function (cellRng, isRoot) {\n      return getTableFromCellRng(cellRng, isRoot).map(function (table) {\n        return tableSelection(cellRng, table, getTableCells(table));\n      });\n    };\n    var getTableSelectionFromRng = function (root, rng) {\n      var isRoot = isRootFromElement(root);\n      return getCellRng(rng, isRoot).bind(function (cellRng) {\n        return getTableSelectionFromCellRng(cellRng, isRoot);\n      });\n    };\n    var getCellIndex = function (cells, cell) {\n      return findIndex(cells, function (x) {\n        return eq(x, cell);\n      });\n    };\n    var getSelectedCells = function (tableSelection) {\n      return lift2(getCellIndex(tableSelection.cells(), tableSelection.rng().start()), getCellIndex(tableSelection.cells(), tableSelection.rng().end()), function (startIndex, endIndex) {\n        return tableSelection.cells().slice(startIndex, endIndex + 1);\n      });\n    };\n    var getAction = function (tableSelection) {\n      return getSelectedCells(tableSelection).map(function (selected) {\n        var cells = tableSelection.cells();\n        return selected.length === cells.length ? deleteAction.removeTable(tableSelection.table()) : deleteAction.emptyCells(selected);\n      });\n    };\n    var getActionFromCells = function (cells) {\n      return deleteAction.emptyCells(cells);\n    };\n    var getActionFromRange = function (root, rng) {\n      return getTableSelectionFromRng(root, rng).bind(getAction);\n    };\n    var TableDeleteAction = {\n      getActionFromRange: getActionFromRange,\n      getActionFromCells: getActionFromCells\n    };\n\n    var getRanges = function (selection) {\n      var ranges = [];\n      if (selection) {\n        for (var i = 0; i < selection.rangeCount; i++) {\n          ranges.push(selection.getRangeAt(i));\n        }\n      }\n      return ranges;\n    };\n    var getSelectedNodes = function (ranges) {\n      return bind(ranges, function (range) {\n        var node = getSelectedNode(range);\n        return node ? [Element.fromDom(node)] : [];\n      });\n    };\n    var hasMultipleRanges = function (selection) {\n      return getRanges(selection).length > 1;\n    };\n    var MultiRange = {\n      getRanges: getRanges,\n      getSelectedNodes: getSelectedNodes,\n      hasMultipleRanges: hasMultipleRanges\n    };\n\n    var getCellsFromRanges = function (ranges) {\n      return filter(MultiRange.getSelectedNodes(ranges), isTableCell);\n    };\n    var getCellsFromElement = function (elm) {\n      var selectedCells = descendants$1(elm, 'td[data-mce-selected],th[data-mce-selected]');\n      return selectedCells;\n    };\n    var getCellsFromElementOrRanges = function (ranges, element) {\n      var selectedCells = getCellsFromElement(element);\n      var rangeCells = getCellsFromRanges(ranges);\n      return selectedCells.length > 0 ? selectedCells : rangeCells;\n    };\n    var getCellsFromEditor = function (editor) {\n      return getCellsFromElementOrRanges(MultiRange.getRanges(editor.selection.getSel()), Element.fromDom(editor.getBody()));\n    };\n    var TableCellSelection = {\n      getCellsFromRanges: getCellsFromRanges,\n      getCellsFromElement: getCellsFromElement,\n      getCellsFromElementOrRanges: getCellsFromElementOrRanges,\n      getCellsFromEditor: getCellsFromEditor\n    };\n\n    var emptyCells = function (editor, cells) {\n      each(cells, PaddingBr.fillWithPaddingBr);\n      editor.selection.setCursorLocation(cells[0].dom(), 0);\n      return true;\n    };\n    var deleteTableElement = function (editor, table) {\n      DeleteElement.deleteElement(editor, false, table);\n      return true;\n    };\n    var deleteCellRange = function (editor, rootElm, rng) {\n      return TableDeleteAction.getActionFromRange(rootElm, rng).map(function (action) {\n        return action.fold(curry(deleteTableElement, editor), curry(emptyCells, editor));\n      });\n    };\n    var deleteCaptionRange = function (editor, caption) {\n      return emptyElement(editor, caption);\n    };\n    var deleteTableRange = function (editor, rootElm, rng, startElm) {\n      return getParentCaption(rootElm, startElm).fold(function () {\n        return deleteCellRange(editor, rootElm, rng);\n      }, function (caption) {\n        return deleteCaptionRange(editor, caption);\n      }).getOr(false);\n    };\n    var deleteRange$1 = function (editor, startElm) {\n      var rootNode = Element.fromDom(editor.getBody());\n      var rng = editor.selection.getRng();\n      var selectedCells = TableCellSelection.getCellsFromEditor(editor);\n      return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm);\n    };\n    var getParentCell = function (rootElm, elm) {\n      return find(Parents.parentsAndSelf(elm, rootElm), isTableCell);\n    };\n    var getParentCaption = function (rootElm, elm) {\n      return find(Parents.parentsAndSelf(elm, rootElm), function (elm) {\n        return name(elm) === 'caption';\n      });\n    };\n    var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {\n      return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {\n        return getParentCell(rootElm, Element.fromDom(to.getNode())).map(function (toCell) {\n          return eq(toCell, fromCell) === false;\n        });\n      });\n    };\n    var emptyElement = function (editor, elm) {\n      PaddingBr.fillWithPaddingBr(elm);\n      editor.selection.setCursorLocation(elm.dom(), 0);\n      return Option.some(true);\n    };\n    var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {\n      return CaretFinder.firstPositionIn(fromCaption.dom()).bind(function (first) {\n        return CaretFinder.lastPositionIn(fromCaption.dom()).map(function (last) {\n          return forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first);\n        });\n      }).getOr(true);\n    };\n    var emptyCaretCaption = function (editor, elm) {\n      return emptyElement(editor, elm);\n    };\n    var validateCaretCaption = function (rootElm, fromCaption, to) {\n      return getParentCaption(rootElm, Element.fromDom(to.getNode())).map(function (toCaption) {\n        return eq(toCaption, fromCaption) === false;\n      });\n    };\n    var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {\n      return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {\n        return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);\n      }).or(Option.some(true));\n    };\n    var deleteCaretCells = function (editor, forward, rootElm, startElm) {\n      var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n      return getParentCell(rootElm, startElm).bind(function (fromCell) {\n        return Empty.isEmpty(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);\n      });\n    };\n    var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {\n      var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n      return Empty.isEmpty(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n    };\n    var deleteCaret = function (editor, forward, startElm) {\n      var rootElm = Element.fromDom(editor.getBody());\n      return getParentCaption(rootElm, startElm).fold(function () {\n        return deleteCaretCells(editor, forward, rootElm, startElm);\n      }, function (fromCaption) {\n        return deleteCaretCaption(editor, forward, rootElm, fromCaption);\n      }).getOr(false);\n    };\n    var backspaceDelete$4 = function (editor, forward) {\n      var startElm = Element.fromDom(editor.selection.getStart(true));\n      var cells = TableCellSelection.getCellsFromEditor(editor);\n      return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret(editor, forward, startElm) : deleteRange$1(editor, startElm);\n    };\n    var TableDelete = { backspaceDelete: backspaceDelete$4 };\n\n    var isEq$2 = FormatUtils.isEq;\n    var matchesUnInheritedFormatSelector = function (ed, node, name) {\n      var formatList = ed.formatter.get(name);\n      if (formatList) {\n        for (var i = 0; i < formatList.length; i++) {\n          if (formatList[i].inherit === false && ed.dom.is(node, formatList[i].selector)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n    var matchParents = function (editor, node, name, vars) {\n      var root = editor.dom.getRoot();\n      if (node === root) {\n        return false;\n      }\n      node = editor.dom.getParent(node, function (node) {\n        if (matchesUnInheritedFormatSelector(editor, node, name)) {\n          return true;\n        }\n        return node.parentNode === root || !!matchNode(editor, node, name, vars, true);\n      });\n      return matchNode(editor, node, name, vars);\n    };\n    var matchName = function (dom, node, format) {\n      if (isEq$2(node, format.inline)) {\n        return true;\n      }\n      if (isEq$2(node, format.block)) {\n        return true;\n      }\n      if (format.selector) {\n        return node.nodeType === 1 && dom.is(node, format.selector);\n      }\n    };\n    var matchItems = function (dom, node, format, itemName, similar, vars) {\n      var key, value;\n      var items = format[itemName];\n      var i;\n      if (format.onmatch) {\n        return format.onmatch(node, format, itemName);\n      }\n      if (items) {\n        if (typeof items.length === 'undefined') {\n          for (key in items) {\n            if (items.hasOwnProperty(key)) {\n              if (itemName === 'attributes') {\n                value = dom.getAttrib(node, key);\n              } else {\n                value = FormatUtils.getStyle(dom, node, key);\n              }\n              if (similar && !value && !format.exact) {\n                return;\n              }\n              if ((!similar || format.exact) && !isEq$2(value, FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(items[key], vars), key))) {\n                return;\n              }\n            }\n          }\n        } else {\n          for (i = 0; i < items.length; i++) {\n            if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : FormatUtils.getStyle(dom, node, items[i])) {\n              return format;\n            }\n          }\n        }\n      }\n      return format;\n    };\n    var matchNode = function (ed, node, name, vars, similar) {\n      var formatList = ed.formatter.get(name);\n      var format, i, x, classes;\n      var dom = ed.dom;\n      if (formatList && node) {\n        for (i = 0; i < formatList.length; i++) {\n          format = formatList[i];\n          if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n            if (classes = format.classes) {\n              for (x = 0; x < classes.length; x++) {\n                if (!ed.dom.hasClass(node, classes[x])) {\n                  return;\n                }\n              }\n            }\n            return format;\n          }\n        }\n      }\n    };\n    var match = function (editor, name, vars, node) {\n      var startNode;\n      if (node) {\n        return matchParents(editor, node, name, vars);\n      }\n      node = editor.selection.getNode();\n      if (matchParents(editor, node, name, vars)) {\n        return true;\n      }\n      startNode = editor.selection.getStart();\n      if (startNode !== node) {\n        if (matchParents(editor, startNode, name, vars)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    var matchAll = function (editor, names, vars) {\n      var startElement;\n      var matchedFormatNames = [];\n      var checkedMap = {};\n      startElement = editor.selection.getStart();\n      editor.dom.getParent(startElement, function (node) {\n        var i, name;\n        for (i = 0; i < names.length; i++) {\n          name = names[i];\n          if (!checkedMap[name] && matchNode(editor, node, name, vars)) {\n            checkedMap[name] = true;\n            matchedFormatNames.push(name);\n          }\n        }\n      }, editor.dom.getRoot());\n      return matchedFormatNames;\n    };\n    var canApply = function (editor, name) {\n      var formatList = editor.formatter.get(name);\n      var startNode, parents, i, x, selector;\n      var dom = editor.dom;\n      if (formatList) {\n        startNode = editor.selection.getStart();\n        parents = FormatUtils.getParents(dom, startNode);\n        for (x = formatList.length - 1; x >= 0; x--) {\n          selector = formatList[x].selector;\n          if (!selector || formatList[x].defaultBlock) {\n            return true;\n          }\n          for (i = parents.length - 1; i >= 0; i--) {\n            if (dom.is(parents[i], selector)) {\n              return true;\n            }\n          }\n        }\n      }\n      return false;\n    };\n    var MatchFormat = {\n      matchNode: matchNode,\n      matchName: matchName,\n      match: match,\n      matchAll: matchAll,\n      canApply: canApply,\n      matchesUnInheritedFormatSelector: matchesUnInheritedFormatSelector\n    };\n\n    var splitText = function (node, offset) {\n      return node.splitText(offset);\n    };\n    var split$1 = function (rng) {\n      var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n      if (startContainer === endContainer && NodeType.isText(startContainer)) {\n        if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n          endContainer = splitText(startContainer, startOffset);\n          startContainer = endContainer.previousSibling;\n          if (endOffset > startOffset) {\n            endOffset = endOffset - startOffset;\n            startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;\n            endOffset = endContainer.nodeValue.length;\n            startOffset = 0;\n          } else {\n            endOffset = 0;\n          }\n        }\n      } else {\n        if (NodeType.isText(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n          startContainer = splitText(startContainer, startOffset);\n          startOffset = 0;\n        }\n        if (NodeType.isText(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) {\n          endContainer = splitText(endContainer, endOffset).previousSibling;\n          endOffset = endContainer.nodeValue.length;\n        }\n      }\n      return {\n        startContainer: startContainer,\n        startOffset: startOffset,\n        endContainer: endContainer,\n        endOffset: endOffset\n      };\n    };\n    var SplitRange = { split: split$1 };\n\n    var ZWSP$1 = Zwsp.ZWSP, CARET_ID$1 = '_mce_caret';\n    var importNode = function (ownerDocument, node) {\n      return ownerDocument.importNode(node, true);\n    };\n    var getEmptyCaretContainers = function (node) {\n      var nodes = [];\n      while (node) {\n        if (node.nodeType === 3 && node.nodeValue !== ZWSP$1 || node.childNodes.length > 1) {\n          return [];\n        }\n        if (node.nodeType === 1) {\n          nodes.push(node);\n        }\n        node = node.firstChild;\n      }\n      return nodes;\n    };\n    var isCaretContainerEmpty = function (node) {\n      return getEmptyCaretContainers(node).length > 0;\n    };\n    var findFirstTextNode = function (node) {\n      var walker;\n      if (node) {\n        walker = new TreeWalker(node, node);\n        for (node = walker.current(); node; node = walker.next()) {\n          if (node.nodeType === 3) {\n            return node;\n          }\n        }\n      }\n      return null;\n    };\n    var createCaretContainer = function (fill) {\n      var caretContainer = Element.fromTag('span');\n      setAll(caretContainer, {\n        'id': CARET_ID$1,\n        'data-mce-bogus': '1',\n        'data-mce-type': 'format-caret'\n      });\n      if (fill) {\n        append(caretContainer, Element.fromText(ZWSP$1));\n      }\n      return caretContainer;\n    };\n    var trimZwspFromCaretContainer = function (caretContainerNode) {\n      var textNode = findFirstTextNode(caretContainerNode);\n      if (textNode && textNode.nodeValue.charAt(0) === ZWSP$1) {\n        textNode.deleteData(0, 1);\n      }\n      return textNode;\n    };\n    var removeCaretContainerNode = function (editor, node, moveCaret) {\n      if (moveCaret === void 0) {\n        moveCaret = true;\n      }\n      var dom = editor.dom, selection = editor.selection;\n      if (isCaretContainerEmpty(node)) {\n        DeleteElement.deleteElement(editor, false, Element.fromDom(node), moveCaret);\n      } else {\n        var rng = selection.getRng();\n        var block = dom.getParent(node, dom.isBlock);\n        var textNode = trimZwspFromCaretContainer(node);\n        if (rng.startContainer === textNode && rng.startOffset > 0) {\n          rng.setStart(textNode, rng.startOffset - 1);\n        }\n        if (rng.endContainer === textNode && rng.endOffset > 0) {\n          rng.setEnd(textNode, rng.endOffset - 1);\n        }\n        dom.remove(node, true);\n        if (block && dom.isEmpty(block)) {\n          PaddingBr.fillWithPaddingBr(Element.fromDom(block));\n        }\n        selection.setRng(rng);\n      }\n    };\n    var removeCaretContainer = function (editor, node, moveCaret) {\n      if (moveCaret === void 0) {\n        moveCaret = true;\n      }\n      var dom = editor.dom, selection = editor.selection;\n      if (!node) {\n        node = getParentCaretContainer(editor.getBody(), selection.getStart());\n        if (!node) {\n          while (node = dom.get(CARET_ID$1)) {\n            removeCaretContainerNode(editor, node, false);\n          }\n        }\n      } else {\n        removeCaretContainerNode(editor, node, moveCaret);\n      }\n    };\n    var insertCaretContainerNode = function (editor, caretContainer, formatNode) {\n      var dom = editor.dom, block = dom.getParent(formatNode, curry(FormatUtils.isTextBlock, editor));\n      if (block && dom.isEmpty(block)) {\n        formatNode.parentNode.replaceChild(caretContainer, formatNode);\n      } else {\n        PaddingBr.removeTrailingBr(Element.fromDom(formatNode));\n        if (dom.isEmpty(formatNode)) {\n          formatNode.parentNode.replaceChild(caretContainer, formatNode);\n        } else {\n          dom.insertAfter(caretContainer, formatNode);\n        }\n      }\n    };\n    var appendNode = function (parentNode, node) {\n      parentNode.appendChild(node);\n      return node;\n    };\n    var insertFormatNodesIntoCaretContainer = function (formatNodes, caretContainer) {\n      var innerMostFormatNode = foldr(formatNodes, function (parentNode, formatNode) {\n        return appendNode(parentNode, formatNode.cloneNode(false));\n      }, caretContainer);\n      return appendNode(innerMostFormatNode, innerMostFormatNode.ownerDocument.createTextNode(ZWSP$1));\n    };\n    var applyCaretFormat = function (editor, name, vars) {\n      var rng, caretContainer, textNode, offset, bookmark, container, text;\n      var selection = editor.selection;\n      rng = selection.getRng(true);\n      offset = rng.startOffset;\n      container = rng.startContainer;\n      text = container.nodeValue;\n      caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n      if (caretContainer) {\n        textNode = findFirstTextNode(caretContainer);\n      }\n      var wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n      if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\n        bookmark = selection.getBookmark();\n        rng.collapse(true);\n        rng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name));\n        rng = SplitRange.split(rng);\n        editor.formatter.apply(name, vars, rng);\n        selection.moveToBookmark(bookmark);\n      } else {\n        if (!caretContainer || textNode.nodeValue !== ZWSP$1) {\n          caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom());\n          textNode = caretContainer.firstChild;\n          rng.insertNode(caretContainer);\n          offset = 1;\n          editor.formatter.apply(name, vars, caretContainer);\n        } else {\n          editor.formatter.apply(name, vars, caretContainer);\n        }\n        selection.setCursorLocation(textNode, offset);\n      }\n    };\n    var removeCaretFormat = function (editor, name, vars, similar) {\n      var dom = editor.dom, selection = editor.selection;\n      var container, offset, bookmark;\n      var hasContentAfter, node, formatNode;\n      var parents = [], rng = selection.getRng();\n      var caretContainer;\n      container = rng.startContainer;\n      offset = rng.startOffset;\n      node = container;\n      if (container.nodeType === 3) {\n        if (offset !== container.nodeValue.length) {\n          hasContentAfter = true;\n        }\n        node = node.parentNode;\n      }\n      while (node) {\n        if (MatchFormat.matchNode(editor, node, name, vars, similar)) {\n          formatNode = node;\n          break;\n        }\n        if (node.nextSibling) {\n          hasContentAfter = true;\n        }\n        parents.push(node);\n        node = node.parentNode;\n      }\n      if (!formatNode) {\n        return;\n      }\n      if (hasContentAfter) {\n        bookmark = selection.getBookmark();\n        rng.collapse(true);\n        var expandedRng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name), true);\n        expandedRng = SplitRange.split(expandedRng);\n        editor.formatter.remove(name, vars, expandedRng);\n        selection.moveToBookmark(bookmark);\n      } else {\n        caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n        var newCaretContainer = createCaretContainer(false).dom();\n        var caretNode = insertFormatNodesIntoCaretContainer(parents, newCaretContainer);\n        if (caretContainer) {\n          insertCaretContainerNode(editor, newCaretContainer, caretContainer);\n        } else {\n          insertCaretContainerNode(editor, newCaretContainer, formatNode);\n        }\n        removeCaretContainerNode(editor, caretContainer, false);\n        selection.setCursorLocation(caretNode, 1);\n        if (dom.isEmpty(formatNode)) {\n          dom.remove(formatNode);\n        }\n      }\n    };\n    var disableCaretContainer = function (editor, keyCode) {\n      var selection = editor.selection, body = editor.getBody();\n      removeCaretContainer(editor, null, false);\n      if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP$1) {\n        removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n      }\n      if (keyCode === 37 || keyCode === 39) {\n        removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n      }\n    };\n    var setup$2 = function (editor) {\n      editor.on('mouseup keydown', function (e) {\n        disableCaretContainer(editor, e.keyCode);\n      });\n    };\n    var replaceWithCaretFormat = function (targetNode, formatNodes) {\n      var caretContainer = createCaretContainer(false);\n      var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom());\n      before(Element.fromDom(targetNode), caretContainer);\n      remove$1(Element.fromDom(targetNode));\n      return CaretPosition$1(innerMost, 0);\n    };\n    var isFormatElement = function (editor, element) {\n      var inlineElements = editor.schema.getTextInlineElements();\n      return inlineElements.hasOwnProperty(name(element)) && !isCaretNode(element.dom()) && !NodeType.isBogus(element.dom());\n    };\n    var isEmptyCaretFormatElement = function (element) {\n      return isCaretNode(element.dom()) && isCaretContainerEmpty(element.dom());\n    };\n\n    var getParentInlines = function (rootElm, startElm) {\n      var parents = Parents.parentsAndSelf(startElm, rootElm);\n      return findIndex(parents, isBlock).fold(constant(parents), function (index) {\n        return parents.slice(0, index);\n      });\n    };\n    var hasOnlyOneChild$1 = function (elm) {\n      return children(elm).length === 1;\n    };\n    var deleteLastPosition = function (forward, editor, target, parentInlines) {\n      var isFormatElement$1 = curry(isFormatElement, editor);\n      var formatNodes = map(filter(parentInlines, isFormatElement$1), function (elm) {\n        return elm.dom();\n      });\n      if (formatNodes.length === 0) {\n        DeleteElement.deleteElement(editor, forward, target);\n      } else {\n        var pos = replaceWithCaretFormat(target.dom(), formatNodes);\n        editor.selection.setRng(pos.toRange());\n      }\n    };\n    var deleteCaret$1 = function (editor, forward) {\n      var rootElm = Element.fromDom(editor.getBody());\n      var startElm = Element.fromDom(editor.selection.getStart());\n      var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild$1);\n      return last(parentInlines).map(function (target) {\n        var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n        if (DeleteUtils.willDeleteLastPositionInElement(forward, fromPos, target.dom()) && !isEmptyCaretFormatElement(target)) {\n          deleteLastPosition(forward, editor, target, parentInlines);\n          return true;\n        } else {\n          return false;\n        }\n      }).getOr(false);\n    };\n    var backspaceDelete$5 = function (editor, forward) {\n      return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;\n    };\n    var InlineFormatDelete = { backspaceDelete: backspaceDelete$5 };\n\n    var getPos$1 = function (elm) {\n      var x = 0, y = 0;\n      var offsetParent = elm;\n      while (offsetParent && offsetParent.nodeType) {\n        x += offsetParent.offsetLeft || 0;\n        y += offsetParent.offsetTop || 0;\n        offsetParent = offsetParent.offsetParent;\n      }\n      return {\n        x: x,\n        y: y\n      };\n    };\n    var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {\n      var scrollEvent = {\n        elm: elm,\n        alignToTop: alignToTop\n      };\n      editor.fire('scrollIntoView', scrollEvent);\n      return scrollEvent.isDefaultPrevented();\n    };\n    var scrollElementIntoView = function (editor, elm, alignToTop) {\n      var y, viewPort;\n      var dom = editor.dom;\n      var root = dom.getRoot();\n      var viewPortY, viewPortH, offsetY = 0;\n      if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {\n        return;\n      }\n      if (!NodeType.isElement(elm)) {\n        return;\n      }\n      if (alignToTop === false) {\n        offsetY = elm.offsetHeight;\n      }\n      if (root.nodeName !== 'BODY') {\n        var scrollContainer = editor.selection.getScrollContainer();\n        if (scrollContainer) {\n          y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;\n          viewPortH = scrollContainer.clientHeight;\n          viewPortY = scrollContainer.scrollTop;\n          if (y < viewPortY || y + 25 > viewPortY + viewPortH) {\n            scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;\n          }\n          return;\n        }\n      }\n      viewPort = dom.getViewPort(editor.getWin());\n      y = dom.getPos(elm).y + offsetY;\n      viewPortY = viewPort.y;\n      viewPortH = viewPort.h;\n      if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {\n        editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);\n      }\n    };\n    var getViewPortRect = function (editor) {\n      if (editor.inline) {\n        return editor.getBody().getBoundingClientRect();\n      } else {\n        var win = editor.getWin();\n        return {\n          left: 0,\n          right: win.innerWidth,\n          top: 0,\n          bottom: win.innerHeight,\n          width: win.innerWidth,\n          height: win.innerHeight\n        };\n      }\n    };\n    var scrollBy = function (editor, dx, dy) {\n      if (editor.inline) {\n        editor.getBody().scrollLeft += dx;\n        editor.getBody().scrollTop += dy;\n      } else {\n        editor.getWin().scrollBy(dx, dy);\n      }\n    };\n    var scrollRangeIntoView = function (editor, rng) {\n      head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {\n        var bodyRect = getViewPortRect(editor);\n        var overflow = getOverflow(bodyRect, rngRect);\n        var margin = 4;\n        var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;\n        var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;\n        scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);\n      });\n    };\n    var ScrollIntoView = {\n      scrollElementIntoView: scrollElementIntoView,\n      scrollRangeIntoView: scrollRangeIntoView\n    };\n\n    var isContentEditableTrue$2 = NodeType.isContentEditableTrue;\n    var isContentEditableFalse$6 = NodeType.isContentEditableFalse;\n    var showCaret = function (direction, editor, node, before, scrollIntoView) {\n      return editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView);\n    };\n    var getNodeRange = function (node) {\n      var rng = node.ownerDocument.createRange();\n      rng.selectNode(node);\n      return rng;\n    };\n    var selectNode = function (editor, node) {\n      var e = editor.fire('BeforeObjectSelected', { target: node });\n      if (e.isDefaultPrevented()) {\n        return null;\n      }\n      return getNodeRange(node);\n    };\n    var renderCaretAtRange = function (editor, range, scrollIntoView) {\n      var normalizedRange = normalizeRange(1, editor.getBody(), range);\n      var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange);\n      var caretPositionNode = caretPosition.getNode();\n      if (isContentEditableFalse$6(caretPositionNode)) {\n        return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n      }\n      var caretPositionBeforeNode = caretPosition.getNode(true);\n      if (isContentEditableFalse$6(caretPositionBeforeNode)) {\n        return showCaret(1, editor, caretPositionBeforeNode, false, false);\n      }\n      var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {\n        return isContentEditableFalse$6(node) || isContentEditableTrue$2(node);\n      });\n      if (isContentEditableFalse$6(ceRoot)) {\n        return showCaret(1, editor, ceRoot, false, scrollIntoView);\n      }\n      return null;\n    };\n    var renderRangeCaret = function (editor, range, scrollIntoView) {\n      if (!range || !range.collapsed) {\n        return range;\n      }\n      var caretRange = renderCaretAtRange(editor, range, scrollIntoView);\n      if (caretRange) {\n        return caretRange;\n      }\n      return range;\n    };\n    var moveToRange = function (editor, rng) {\n      editor.selection.setRng(rng);\n      ScrollIntoView.scrollRangeIntoView(editor, editor.selection.getRng());\n    };\n\n    var trimEmptyTextNode$1 = function (dom, node) {\n      if (NodeType.isText(node) && node.data.length === 0) {\n        dom.remove(node);\n      }\n    };\n    var deleteContentAndShowCaret = function (editor, range, node, direction, forward, peekCaretPosition) {\n      var caretRange = showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true);\n      if (range.collapsed) {\n        var deleteRange = range.cloneRange();\n        if (forward) {\n          deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset);\n        } else {\n          deleteRange.setStart(caretRange.endContainer, caretRange.endOffset);\n        }\n        deleteRange.deleteContents();\n      } else {\n        range.deleteContents();\n      }\n      editor.selection.setRng(caretRange);\n      trimEmptyTextNode$1(editor.dom, node);\n      return true;\n    };\n    var deleteCefBoundaryText = function (editor, forward) {\n      var range = editor.selection.getRng();\n      if (!NodeType.isText(range.commonAncestorContainer)) {\n        return false;\n      }\n      var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      var caretWalker = CaretWalker(editor.getBody());\n      var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n      var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n      var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;\n      var isBeforeContentEditableFalseFn = forward ? isBeforeContentEditableFalse : isAfterContentEditableFalse;\n      var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n      var nextCaretPosition = InlineUtils.normalizePosition(forward, getNextPosFn(caretPosition));\n      if (!nextCaretPosition) {\n        return false;\n      } else if (isBeforeContentEditableFalseFn(nextCaretPosition)) {\n        return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, nextCaretPosition);\n      }\n      var peekCaretPosition = getNextPosFn(nextCaretPosition);\n      if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) {\n        if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n          return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition);\n        }\n      }\n      return false;\n    };\n    var backspaceDelete$6 = function (editor, forward) {\n      return deleteCefBoundaryText(editor, forward);\n    };\n    var CefBoundaryDelete = { backspaceDelete: backspaceDelete$6 };\n\n    var nativeCommand = function (editor, command) {\n      editor.getDoc().execCommand(command, false, null);\n    };\n    var deleteCommand = function (editor) {\n      if (CefDelete.backspaceDelete(editor, false)) {\n        return;\n      } else if (CefBoundaryDelete.backspaceDelete(editor, false)) {\n        return;\n      } else if (InlineBoundaryDelete.backspaceDelete(editor, false)) {\n        return;\n      } else if (BlockBoundaryDelete.backspaceDelete(editor, false)) {\n        return;\n      } else if (TableDelete.backspaceDelete(editor)) {\n        return;\n      } else if (BlockRangeDelete.backspaceDelete(editor, false)) {\n        return;\n      } else if (InlineFormatDelete.backspaceDelete(editor, false)) {\n        return;\n      } else {\n        nativeCommand(editor, 'Delete');\n        DeleteUtils.paddEmptyBody(editor);\n      }\n    };\n    var forwardDeleteCommand = function (editor) {\n      if (CefDelete.backspaceDelete(editor, true)) {\n        return;\n      } else if (CefBoundaryDelete.backspaceDelete(editor, true)) {\n        return;\n      } else if (InlineBoundaryDelete.backspaceDelete(editor, true)) {\n        return;\n      } else if (BlockBoundaryDelete.backspaceDelete(editor, true)) {\n        return;\n      } else if (TableDelete.backspaceDelete(editor)) {\n        return;\n      } else if (BlockRangeDelete.backspaceDelete(editor, true)) {\n        return;\n      } else if (InlineFormatDelete.backspaceDelete(editor, true)) {\n        return;\n      } else {\n        nativeCommand(editor, 'ForwardDelete');\n      }\n    };\n    var DeleteCommands = {\n      deleteCommand: deleteCommand,\n      forwardDeleteCommand: forwardDeleteCommand\n    };\n\n    var getSpecifiedFontProp = function (propName, rootElm, elm) {\n      var getProperty = function (elm) {\n        return getRaw(elm, propName);\n      };\n      var isRoot = function (elm) {\n        return eq(Element.fromDom(rootElm), elm);\n      };\n      return closest(Element.fromDom(elm), function (elm) {\n        return getProperty(elm).isSome();\n      }, isRoot).bind(getProperty);\n    };\n    var round$1 = function (number, precision) {\n      var factor = Math.pow(10, precision);\n      return Math.round(number * factor) / factor;\n    };\n    var toPt = function (fontSize, precision) {\n      if (/[0-9.]+px$/.test(fontSize)) {\n        return round$1(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n      }\n      return fontSize;\n    };\n    var normalizeFontFamily = function (fontFamily) {\n      return fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n    };\n    var getComputedFontProp = function (propName, elm) {\n      return Option.from(DOMUtils$1.DOM.getStyle(elm, propName, true));\n    };\n    var getFontProp = function (propName) {\n      return function (rootElm, elm) {\n        return Option.from(elm).map(Element.fromDom).filter(isElement).bind(function (element) {\n          return getSpecifiedFontProp(propName, rootElm, element.dom()).or(getComputedFontProp(propName, element.dom()));\n        }).getOr('');\n      };\n    };\n    var FontInfo = {\n      getFontSize: getFontProp('font-size'),\n      getFontFamily: compose(normalizeFontFamily, getFontProp('font-family')),\n      toPt: toPt\n    };\n\n    var findFirstCaretElement = function (editor) {\n      return CaretFinder.firstPositionIn(editor.getBody()).map(function (caret) {\n        var container = caret.container();\n        return NodeType.isText(container) ? container.parentNode : container;\n      });\n    };\n    var isRangeAtStartOfNode = function (rng, root) {\n      return rng.startContainer === root && rng.startOffset === 0;\n    };\n    var getCaretElement = function (editor) {\n      return Option.from(editor.selection.getRng()).bind(function (rng) {\n        var root = editor.getBody();\n        return isRangeAtStartOfNode(rng, root) ? Option.none() : Option.from(editor.selection.getStart(true));\n      });\n    };\n    var fromFontSizeNumber = function (editor, value) {\n      if (/^[0-9\\.]+$/.test(value)) {\n        var fontSizeNumber = parseInt(value, 10);\n        if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n          var fontSizes = Settings.getFontStyleValues(editor);\n          var fontClasses = Settings.getFontSizeClasses(editor);\n          if (fontClasses) {\n            return fontClasses[fontSizeNumber - 1] || value;\n          } else {\n            return fontSizes[fontSizeNumber - 1] || value;\n          }\n        } else {\n          return value;\n        }\n      } else {\n        return value;\n      }\n    };\n    var fontNameAction = function (editor, value) {\n      editor.formatter.toggle('fontname', { value: fromFontSizeNumber(editor, value) });\n      editor.nodeChanged();\n    };\n    var fontNameQuery = function (editor) {\n      return getCaretElement(editor).fold(function () {\n        return findFirstCaretElement(editor).map(function (caretElement) {\n          return FontInfo.getFontFamily(editor.getBody(), caretElement);\n        }).getOr('');\n      }, function (caretElement) {\n        return FontInfo.getFontFamily(editor.getBody(), caretElement);\n      });\n    };\n    var fontSizeAction = function (editor, value) {\n      editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n      editor.nodeChanged();\n    };\n    var fontSizeQuery = function (editor) {\n      return getCaretElement(editor).fold(function () {\n        return findFirstCaretElement(editor).map(function (caretElement) {\n          return FontInfo.getFontSize(editor.getBody(), caretElement);\n        }).getOr('');\n      }, function (caretElement) {\n        return FontInfo.getFontSize(editor.getBody(), caretElement);\n      });\n    };\n\n    var isEq$3 = function (rng1, rng2) {\n      return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n    };\n    var RangeCompare = { isEq: isEq$3 };\n\n    var findParent = function (node, rootNode, predicate) {\n      while (node && node !== rootNode) {\n        if (predicate(node)) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    var hasParent = function (node, rootNode, predicate) {\n      return findParent(node, rootNode, predicate) !== null;\n    };\n    var hasParentWithName = function (node, rootNode, name) {\n      return hasParent(node, rootNode, function (node) {\n        return node.nodeName === name;\n      });\n    };\n    var isTable$2 = function (node) {\n      return node && node.nodeName === 'TABLE';\n    };\n    var isTableCell$3 = function (node) {\n      return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n    };\n    var isCeFalseCaretContainer = function (node, rootNode) {\n      return isCaretContainer(node) && hasParent(node, rootNode, isCaretNode) === false;\n    };\n    var hasBrBeforeAfter = function (dom, node, left) {\n      var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());\n      while (node = walker[left ? 'prev' : 'next']()) {\n        if (NodeType.isBr(node)) {\n          return true;\n        }\n      }\n    };\n    var isPrevNode = function (node, name) {\n      return node.previousSibling && node.previousSibling.nodeName === name;\n    };\n    var hasContentEditableFalseParent = function (body, node) {\n      while (node && node !== body) {\n        if (NodeType.isContentEditableFalse(node)) {\n          return true;\n        }\n        node = node.parentNode;\n      }\n      return false;\n    };\n    var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {\n      var walker, lastInlineElement, parentBlockContainer;\n      var body = dom.getRoot();\n      var node;\n      var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n      parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;\n      if (left && NodeType.isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n        return Option.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));\n      }\n      walker = new TreeWalker(startNode, parentBlockContainer);\n      while (node = walker[left ? 'prev' : 'next']()) {\n        if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\n          return Option.none();\n        }\n        if (NodeType.isText(node) && node.nodeValue.length > 0) {\n          if (hasParentWithName(node, body, 'A') === false) {\n            return Option.some(CaretPosition(node, left ? node.nodeValue.length : 0));\n          }\n          return Option.none();\n        }\n        if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n          return Option.none();\n        }\n        lastInlineElement = node;\n      }\n      if (collapsed && lastInlineElement) {\n        return Option.some(CaretPosition(lastInlineElement, 0));\n      }\n      return Option.none();\n    };\n    var normalizeEndPoint = function (dom, collapsed, start, rng) {\n      var container, offset, walker;\n      var body = dom.getRoot();\n      var node, nonEmptyElementsMap;\n      var directionLeft, isAfterNode, normalized = false;\n      container = rng[(start ? 'start' : 'end') + 'Container'];\n      offset = rng[(start ? 'start' : 'end') + 'Offset'];\n      isAfterNode = NodeType.isElement(container) && offset === container.childNodes.length;\n      nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n      directionLeft = start;\n      if (isCaretContainer(container)) {\n        return Option.none();\n      }\n      if (NodeType.isElement(container) && offset > container.childNodes.length - 1) {\n        directionLeft = false;\n      }\n      if (NodeType.isDocument(container)) {\n        container = body;\n        offset = 0;\n      }\n      if (container === body) {\n        if (directionLeft) {\n          node = container.childNodes[offset > 0 ? offset - 1 : 0];\n          if (node) {\n            if (isCaretContainer(node)) {\n              return Option.none();\n            }\n            if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {\n              return Option.none();\n            }\n          }\n        }\n        if (container.hasChildNodes()) {\n          offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\n          container = container.childNodes[offset];\n          offset = NodeType.isText(container) && isAfterNode ? container.data.length : 0;\n          if (!collapsed && container === body.lastChild && isTable$2(container)) {\n            return Option.none();\n          }\n          if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) {\n            return Option.none();\n          }\n          if (container.hasChildNodes() && isTable$2(container) === false) {\n            node = container;\n            walker = new TreeWalker(container, body);\n            do {\n              if (NodeType.isContentEditableFalse(node) || isCaretContainer(node)) {\n                normalized = false;\n                break;\n              }\n              if (NodeType.isText(node) && node.nodeValue.length > 0) {\n                offset = directionLeft ? 0 : node.nodeValue.length;\n                container = node;\n                normalized = true;\n                break;\n              }\n              if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$3(node)) {\n                offset = dom.nodeIndex(node);\n                container = node.parentNode;\n                if (!directionLeft) {\n                  offset++;\n                }\n                normalized = true;\n                break;\n              }\n            } while (node = directionLeft ? walker.next() : walker.prev());\n          }\n        }\n      }\n      if (collapsed) {\n        if (NodeType.isText(container) && offset === 0) {\n          findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {\n            container = pos.container();\n            offset = pos.offset();\n            normalized = true;\n          });\n        }\n        if (NodeType.isElement(container)) {\n          node = container.childNodes[offset];\n          if (!node) {\n            node = container.childNodes[offset - 1];\n          }\n          if (node && NodeType.isBr(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n            findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(function (pos) {\n              container = pos.container();\n              offset = pos.offset();\n              normalized = true;\n            });\n          }\n        }\n      }\n      if (directionLeft && !collapsed && NodeType.isText(container) && offset === container.nodeValue.length) {\n        findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {\n          container = pos.container();\n          offset = pos.offset();\n          normalized = true;\n        });\n      }\n      return normalized ? Option.some(CaretPosition(container, offset)) : Option.none();\n    };\n    var normalize$2 = function (dom, rng) {\n      var collapsed = rng.collapsed, normRng = rng.cloneRange();\n      var startPos = CaretPosition.fromRangeStart(rng);\n      normalizeEndPoint(dom, collapsed, true, normRng).each(function (pos) {\n        if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\n          normRng.setStart(pos.container(), pos.offset());\n        }\n      });\n      if (!collapsed) {\n        normalizeEndPoint(dom, collapsed, false, normRng).each(function (pos) {\n          normRng.setEnd(pos.container(), pos.offset());\n        });\n      }\n      if (collapsed) {\n        normRng.collapse(true);\n      }\n      return RangeCompare.isEq(rng, normRng) ? Option.none() : Option.some(normRng);\n    };\n    var NormalizeRange = { normalize: normalize$2 };\n\n    var hasRightSideContent = function (schema, container, parentBlock) {\n      var walker = new TreeWalker(container, parentBlock);\n      var node;\n      var nonEmptyElementsMap = schema.getNonEmptyElements();\n      while (node = walker.next()) {\n        if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {\n          return true;\n        }\n      }\n    };\n    var scrollToBr = function (dom, selection, brElm) {\n      var marker = dom.create('span', {}, '&nbsp;');\n      brElm.parentNode.insertBefore(marker, brElm);\n      selection.scrollIntoView(marker);\n      dom.remove(marker);\n    };\n    var moveSelectionToBr = function (dom, selection, brElm, extraBr) {\n      var rng = dom.createRng();\n      if (!extraBr) {\n        rng.setStartAfter(brElm);\n        rng.setEndAfter(brElm);\n      } else {\n        rng.setStartBefore(brElm);\n        rng.setEndBefore(brElm);\n      }\n      selection.setRng(rng);\n    };\n    var insertBrAtCaret = function (editor, evt) {\n      var selection = editor.selection;\n      var dom = editor.dom;\n      var rng = selection.getRng();\n      var brElm;\n      var extraBr;\n      NormalizeRange.normalize(dom, rng).each(function (normRng) {\n        rng.setStart(normRng.startContainer, normRng.startOffset);\n        rng.setEnd(normRng.endContainer, normRng.endOffset);\n      });\n      var offset = rng.startOffset;\n      var container = rng.startContainer;\n      if (container.nodeType === 1 && container.hasChildNodes()) {\n        var isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n        if (isAfterLastNodeInContainer && container.nodeType === 3) {\n          offset = container.nodeValue.length;\n        } else {\n          offset = 0;\n        }\n      }\n      var parentBlock = dom.getParent(container, dom.isBlock);\n      var containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n      var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n      var isControlKey = evt && evt.ctrlKey;\n      if (containerBlockName === 'LI' && !isControlKey) {\n        parentBlock = containerBlock;\n      }\n      if (container && container.nodeType === 3 && offset >= container.nodeValue.length) {\n        if (!hasRightSideContent(editor.schema, container, parentBlock)) {\n          brElm = dom.create('br');\n          rng.insertNode(brElm);\n          rng.setStartAfter(brElm);\n          rng.setEndAfter(brElm);\n          extraBr = true;\n        }\n      }\n      brElm = dom.create('br');\n      rangeInsertNode(dom, rng, brElm);\n      scrollToBr(dom, selection, brElm);\n      moveSelectionToBr(dom, selection, brElm, extraBr);\n      editor.undoManager.add();\n    };\n    var insertBrBefore = function (editor, inline) {\n      var br = Element.fromTag('br');\n      before(Element.fromDom(inline), br);\n      editor.undoManager.add();\n    };\n    var insertBrAfter = function (editor, inline) {\n      if (!hasBrAfter(editor.getBody(), inline)) {\n        after(Element.fromDom(inline), Element.fromTag('br'));\n      }\n      var br = Element.fromTag('br');\n      after(Element.fromDom(inline), br);\n      scrollToBr(editor.dom, editor.selection, br.dom());\n      moveSelectionToBr(editor.dom, editor.selection, br.dom(), false);\n      editor.undoManager.add();\n    };\n    var isBeforeBr$1 = function (pos) {\n      return NodeType.isBr(pos.getNode());\n    };\n    var hasBrAfter = function (rootNode, startNode) {\n      if (isBeforeBr$1(CaretPosition$1.after(startNode))) {\n        return true;\n      } else {\n        return CaretFinder.nextPosition(rootNode, CaretPosition$1.after(startNode)).map(function (pos) {\n          return NodeType.isBr(pos.getNode());\n        }).getOr(false);\n      }\n    };\n    var isAnchorLink = function (elm) {\n      return elm && elm.nodeName === 'A' && 'href' in elm;\n    };\n    var isInsideAnchor = function (location) {\n      return location.fold(constant(false), isAnchorLink, isAnchorLink, constant(false));\n    };\n    var readInlineAnchorLocation = function (editor) {\n      var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n      var position = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n      return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), position).filter(isInsideAnchor);\n    };\n    var insertBrOutsideAnchor = function (editor, location) {\n      location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n    };\n    var insert = function (editor, evt) {\n      var anchorLocation = readInlineAnchorLocation(editor);\n      if (anchorLocation.isSome()) {\n        anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n      } else {\n        insertBrAtCaret(editor, evt);\n      }\n    };\n    var InsertBr = { insert: insert };\n\n    var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\n    var SimRange = { create: create$3 };\n\n    var adt = Adt.generate([\n      { before: ['element'] },\n      {\n        on: [\n          'element',\n          'offset'\n        ]\n      },\n      { after: ['element'] }\n    ]);\n    var cata = function (subject, onBefore, onOn, onAfter) {\n      return subject.fold(onBefore, onOn, onAfter);\n    };\n    var getStart = function (situ) {\n      return situ.fold(identity, identity, identity);\n    };\n    var before$4 = adt.before;\n    var on = adt.on;\n    var after$3 = adt.after;\n    var Situ = {\n      before: before$4,\n      on: on,\n      after: after$3,\n      cata: cata,\n      getStart: getStart\n    };\n\n    var adt$1 = Adt.generate([\n      { domRange: ['rng'] },\n      {\n        relative: [\n          'startSitu',\n          'finishSitu'\n        ]\n      },\n      {\n        exact: [\n          'start',\n          'soffset',\n          'finish',\n          'foffset'\n        ]\n      }\n    ]);\n    var exactFromRange = function (simRange) {\n      return adt$1.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());\n    };\n    var getStart$1 = function (selection) {\n      return selection.match({\n        domRange: function (rng) {\n          return Element.fromDom(rng.startContainer);\n        },\n        relative: function (startSitu, finishSitu) {\n          return Situ.getStart(startSitu);\n        },\n        exact: function (start, soffset, finish, foffset) {\n          return start;\n        }\n      });\n    };\n    var domRange = adt$1.domRange;\n    var relative = adt$1.relative;\n    var exact = adt$1.exact;\n    var getWin = function (selection) {\n      var start = getStart$1(selection);\n      return defaultView(start);\n    };\n    var range = SimRange.create;\n    var Selection = {\n      domRange: domRange,\n      relative: relative,\n      exact: exact,\n      exactFromRange: exactFromRange,\n      getWin: getWin,\n      range: range\n    };\n\n    var browser$3 = PlatformDetection$1.detect().browser;\n    var clamp = function (offset, element) {\n      var max = isText(element) ? get$4(element).length : children(element).length + 1;\n      if (offset > max) {\n        return max;\n      } else if (offset < 0) {\n        return 0;\n      }\n      return offset;\n    };\n    var normalizeRng = function (rng) {\n      return Selection.range(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish()));\n    };\n    var isOrContains = function (root, elm) {\n      return !NodeType.isRestrictedNode(elm.dom()) && (contains$3(root, elm) || eq(root, elm));\n    };\n    var isRngInRoot = function (root) {\n      return function (rng) {\n        return isOrContains(root, rng.start()) && isOrContains(root, rng.finish());\n      };\n    };\n    var shouldStore = function (editor) {\n      return editor.inline === true || browser$3.isIE();\n    };\n    var nativeRangeToSelectionRange = function (r) {\n      return Selection.range(Element.fromDom(r.startContainer), r.startOffset, Element.fromDom(r.endContainer), r.endOffset);\n    };\n    var readRange = function (win) {\n      var selection = win.getSelection();\n      var rng = !selection || selection.rangeCount === 0 ? Option.none() : Option.from(selection.getRangeAt(0));\n      return rng.map(nativeRangeToSelectionRange);\n    };\n    var getBookmark$2 = function (root) {\n      var win = defaultView(root);\n      return readRange(win.dom()).filter(isRngInRoot(root));\n    };\n    var validate = function (root, bookmark) {\n      return Option.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n    };\n    var bookmarkToNativeRng = function (bookmark) {\n      var rng = domGlobals.document.createRange();\n      try {\n        rng.setStart(bookmark.start().dom(), bookmark.soffset());\n        rng.setEnd(bookmark.finish().dom(), bookmark.foffset());\n        return Option.some(rng);\n      } catch (_) {\n        return Option.none();\n      }\n    };\n    var store = function (editor) {\n      var newBookmark = shouldStore(editor) ? getBookmark$2(Element.fromDom(editor.getBody())) : Option.none();\n      editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n    };\n    var storeNative = function (editor, rng) {\n      var root = Element.fromDom(editor.getBody());\n      var range = shouldStore(editor) ? Option.from(rng) : Option.none();\n      var newBookmark = range.map(nativeRangeToSelectionRange).filter(isRngInRoot(root));\n      editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n    };\n    var getRng = function (editor) {\n      var bookmark = editor.bookmark ? editor.bookmark : Option.none();\n      return bookmark.bind(curry(validate, Element.fromDom(editor.getBody()))).bind(bookmarkToNativeRng);\n    };\n    var restore = function (editor) {\n      getRng(editor).each(function (rng) {\n        editor.selection.setRng(rng);\n      });\n    };\n    var SelectionBookmark = {\n      store: store,\n      storeNative: storeNative,\n      readRange: readRange,\n      restore: restore,\n      getRng: getRng,\n      getBookmark: getBookmark$2,\n      validate: validate\n    };\n\n    var indentElement = function (dom, command, useMargin, value, unit, element) {\n      if (dom.getContentEditable(element) === 'false') {\n        return;\n      }\n      var indentStyleName = useMargin ? 'margin' : 'padding';\n      indentStyleName = element.nodeName === 'TABLE' ? 'margin' : indentStyleName;\n      indentStyleName += dom.getStyle(element, 'direction', true) === 'rtl' ? 'Right' : 'Left';\n      if (command === 'outdent') {\n        var styleValue = Math.max(0, parseInt(element.style[indentStyleName] || 0, 10) - value);\n        dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n      } else {\n        var styleValue = parseInt(element.style[indentStyleName] || 0, 10) + value + unit;\n        dom.setStyle(element, indentStyleName, styleValue);\n      }\n    };\n    var isListComponent = function (el) {\n      return isList(el) || isListItem(el);\n    };\n    var parentIsListComponent = function (el) {\n      return parent(el).map(isListComponent).getOr(false);\n    };\n    var getBlocksToIndent = function (editor) {\n      return filter(map(editor.selection.getSelectedBlocks(), Element.fromDom), function (el) {\n        return !isListComponent(el) && !parentIsListComponent(el);\n      });\n    };\n    var handle = function (editor, command) {\n      var settings = editor.settings, dom = editor.dom, selection = editor.selection, formatter = editor.formatter;\n      var indentUnit = /[a-z%]+$/i.exec(settings.indentation)[0];\n      var indentValue = parseInt(settings.indentation, 10);\n      var useMargin = editor.getParam('indent_use_margin', false);\n      if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {\n        if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) {\n          formatter.apply('div');\n        }\n      }\n      each(getBlocksToIndent(editor), function (block) {\n        indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom());\n      });\n    };\n\n    var each$a = Tools.each, extend$2 = Tools.extend;\n    var map$3 = Tools.map, inArray$2 = Tools.inArray;\n    function EditorCommands (editor) {\n      var dom, selection, formatter;\n      var commands = {\n        state: {},\n        exec: {},\n        value: {}\n      };\n      var settings = editor.settings, bookmark;\n      editor.on('PreInit', function () {\n        dom = editor.dom;\n        selection = editor.selection;\n        settings = editor.settings;\n        formatter = editor.formatter;\n      });\n      var execCommand = function (command, ui, value, args) {\n        var func, customCommand, state = false;\n        if (editor.removed) {\n          return;\n        }\n        if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {\n          editor.focus();\n        } else {\n          SelectionBookmark.restore(editor);\n        }\n        args = editor.fire('BeforeExecCommand', {\n          command: command,\n          ui: ui,\n          value: value\n        });\n        if (args.isDefaultPrevented()) {\n          return false;\n        }\n        customCommand = command.toLowerCase();\n        if (func = commands.exec[customCommand]) {\n          func(customCommand, ui, value);\n          editor.fire('ExecCommand', {\n            command: command,\n            ui: ui,\n            value: value\n          });\n          return true;\n        }\n        each$a(editor.plugins, function (p) {\n          if (p.execCommand && p.execCommand(command, ui, value)) {\n            editor.fire('ExecCommand', {\n              command: command,\n              ui: ui,\n              value: value\n            });\n            state = true;\n            return false;\n          }\n        });\n        if (state) {\n          return state;\n        }\n        if (editor.theme && editor.theme.execCommand && editor.theme.execCommand(command, ui, value)) {\n          editor.fire('ExecCommand', {\n            command: command,\n            ui: ui,\n            value: value\n          });\n          return true;\n        }\n        try {\n          state = editor.getDoc().execCommand(command, ui, value);\n        } catch (ex) {\n        }\n        if (state) {\n          editor.fire('ExecCommand', {\n            command: command,\n            ui: ui,\n            value: value\n          });\n          return true;\n        }\n        return false;\n      };\n      var queryCommandState = function (command) {\n        var func;\n        if (editor.quirks.isHidden() || editor.removed) {\n          return;\n        }\n        command = command.toLowerCase();\n        if (func = commands.state[command]) {\n          return func(command);\n        }\n        try {\n          return editor.getDoc().queryCommandState(command);\n        } catch (ex) {\n        }\n        return false;\n      };\n      var queryCommandValue = function (command) {\n        var func;\n        if (editor.quirks.isHidden() || editor.removed) {\n          return;\n        }\n        command = command.toLowerCase();\n        if (func = commands.value[command]) {\n          return func(command);\n        }\n        try {\n          return editor.getDoc().queryCommandValue(command);\n        } catch (ex) {\n        }\n      };\n      var addCommands = function (commandList, type) {\n        type = type || 'exec';\n        each$a(commandList, function (callback, command) {\n          each$a(command.toLowerCase().split(','), function (command) {\n            commands[type][command] = callback;\n          });\n        });\n      };\n      var addCommand = function (command, callback, scope) {\n        command = command.toLowerCase();\n        commands.exec[command] = function (command, ui, value, args) {\n          return callback.call(scope || editor, ui, value, args);\n        };\n      };\n      var queryCommandSupported = function (command) {\n        command = command.toLowerCase();\n        if (commands.exec[command]) {\n          return true;\n        }\n        try {\n          return editor.getDoc().queryCommandSupported(command);\n        } catch (ex) {\n        }\n        return false;\n      };\n      var addQueryStateHandler = function (command, callback, scope) {\n        command = command.toLowerCase();\n        commands.state[command] = function () {\n          return callback.call(scope || editor);\n        };\n      };\n      var addQueryValueHandler = function (command, callback, scope) {\n        command = command.toLowerCase();\n        commands.value[command] = function () {\n          return callback.call(scope || editor);\n        };\n      };\n      var hasCustomCommand = function (command) {\n        command = command.toLowerCase();\n        return !!commands.exec[command];\n      };\n      extend$2(this, {\n        execCommand: execCommand,\n        queryCommandState: queryCommandState,\n        queryCommandValue: queryCommandValue,\n        queryCommandSupported: queryCommandSupported,\n        addCommands: addCommands,\n        addCommand: addCommand,\n        addQueryStateHandler: addQueryStateHandler,\n        addQueryValueHandler: addQueryValueHandler,\n        hasCustomCommand: hasCustomCommand\n      });\n      var execNativeCommand = function (command, ui, value) {\n        if (ui === undefined) {\n          ui = false;\n        }\n        if (value === undefined) {\n          value = null;\n        }\n        return editor.getDoc().execCommand(command, ui, value);\n      };\n      var isFormatMatch = function (name) {\n        return formatter.match(name);\n      };\n      var toggleFormat = function (name, value) {\n        formatter.toggle(name, value ? { value: value } : undefined);\n        editor.nodeChanged();\n      };\n      var storeSelection = function (type) {\n        bookmark = selection.getBookmark(type);\n      };\n      var restoreSelection = function () {\n        selection.moveToBookmark(bookmark);\n      };\n      addCommands({\n        'mceResetDesignMode,mceBeginUndoLevel': function () {\n        },\n        'mceEndUndoLevel,mceAddUndoLevel': function () {\n          editor.undoManager.add();\n        },\n        'Cut,Copy,Paste': function (command) {\n          var doc = editor.getDoc();\n          var failed;\n          try {\n            execNativeCommand(command);\n          } catch (ex) {\n            failed = true;\n          }\n          if (command === 'paste' && !doc.queryCommandEnabled(command)) {\n            failed = true;\n          }\n          if (failed || !doc.queryCommandSupported(command)) {\n            var msg = editor.translate('Your browser doesn\\'t support direct access to the clipboard. ' + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.');\n            if (Env.mac) {\n              msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n            }\n            editor.notificationManager.open({\n              text: msg,\n              type: 'error'\n            });\n          }\n        },\n        'unlink': function () {\n          if (selection.isCollapsed()) {\n            var elm = editor.dom.getParent(editor.selection.getStart(), 'a');\n            if (elm) {\n              editor.dom.remove(elm, true);\n            }\n            return;\n          }\n          formatter.remove('link');\n        },\n        'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) {\n          var align = command.substring(7);\n          if (align === 'full') {\n            align = 'justify';\n          }\n          each$a('left,center,right,justify'.split(','), function (name) {\n            if (align !== name) {\n              formatter.remove('align' + name);\n            }\n          });\n          if (align !== 'none') {\n            toggleFormat('align' + align);\n          }\n        },\n        'InsertUnorderedList,InsertOrderedList': function (command) {\n          var listElm, listParent;\n          execNativeCommand(command);\n          listElm = dom.getParent(selection.getNode(), 'ol,ul');\n          if (listElm) {\n            listParent = listElm.parentNode;\n            if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n              storeSelection();\n              dom.split(listParent, listElm);\n              restoreSelection();\n            }\n          }\n        },\n        'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n          toggleFormat(command);\n        },\n        'ForeColor,HiliteColor': function (command, ui, value) {\n          toggleFormat(command, value);\n        },\n        'FontName': function (command, ui, value) {\n          fontNameAction(editor, value);\n        },\n        'FontSize': function (command, ui, value) {\n          fontSizeAction(editor, value);\n        },\n        'RemoveFormat': function (command) {\n          formatter.remove(command);\n        },\n        'mceBlockQuote': function () {\n          toggleFormat('blockquote');\n        },\n        'FormatBlock': function (command, ui, value) {\n          return toggleFormat(value || 'p');\n        },\n        'mceCleanup': function () {\n          var bookmark = selection.getBookmark();\n          editor.setContent(editor.getContent());\n          selection.moveToBookmark(bookmark);\n        },\n        'mceRemoveNode': function (command, ui, value) {\n          var node = value || selection.getNode();\n          if (node !== editor.getBody()) {\n            storeSelection();\n            editor.dom.remove(node, true);\n            restoreSelection();\n          }\n        },\n        'mceSelectNodeDepth': function (command, ui, value) {\n          var counter = 0;\n          dom.getParent(selection.getNode(), function (node) {\n            if (node.nodeType === 1 && counter++ === value) {\n              selection.select(node);\n              return false;\n            }\n          }, editor.getBody());\n        },\n        'mceSelectNode': function (command, ui, value) {\n          selection.select(value);\n        },\n        'mceInsertContent': function (command, ui, value) {\n          InsertContent.insertAtCaret(editor, value);\n        },\n        'mceInsertRawHTML': function (command, ui, value) {\n          selection.setContent('tiny_mce_marker');\n          var content = editor.getContent();\n          editor.setContent(content.replace(/tiny_mce_marker/g, function () {\n            return value;\n          }));\n        },\n        'mceToggleFormat': function (command, ui, value) {\n          toggleFormat(value);\n        },\n        'mceSetContent': function (command, ui, value) {\n          editor.setContent(value);\n        },\n        'Indent,Outdent': function (command) {\n          handle(editor, command);\n        },\n        'mceRepaint': function () {\n        },\n        'InsertHorizontalRule': function () {\n          editor.execCommand('mceInsertContent', false, '<hr />');\n        },\n        'mceToggleVisualAid': function () {\n          editor.hasVisual = !editor.hasVisual;\n          editor.addVisual();\n        },\n        'mceReplaceContent': function (command, ui, value) {\n          editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, selection.getContent({ format: 'text' })));\n        },\n        'mceInsertLink': function (command, ui, value) {\n          var anchor;\n          if (typeof value === 'string') {\n            value = { href: value };\n          }\n          anchor = dom.getParent(selection.getNode(), 'a');\n          value.href = value.href.replace(' ', '%20');\n          if (!anchor || !value.href) {\n            formatter.remove('link');\n          }\n          if (value.href) {\n            formatter.apply('link', value, anchor);\n          }\n        },\n        'selectAll': function () {\n          var editingHost = dom.getParent(selection.getStart(), NodeType.isContentEditableTrue);\n          if (editingHost) {\n            var rng = dom.createRng();\n            rng.selectNodeContents(editingHost);\n            selection.setRng(rng);\n          }\n        },\n        'delete': function () {\n          DeleteCommands.deleteCommand(editor);\n        },\n        'forwardDelete': function () {\n          DeleteCommands.forwardDeleteCommand(editor);\n        },\n        'mceNewDocument': function () {\n          editor.setContent('');\n        },\n        'InsertLineBreak': function (command, ui, value) {\n          InsertBr.insert(editor, value);\n          return true;\n        }\n      });\n      var alignStates = function (name) {\n        return function () {\n          var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks();\n          var matches = map$3(nodes, function (node) {\n            return !!formatter.matchNode(node, name);\n          });\n          return inArray$2(matches, true) !== -1;\n        };\n      };\n      addCommands({\n        'JustifyLeft': alignStates('alignleft'),\n        'JustifyCenter': alignStates('aligncenter'),\n        'JustifyRight': alignStates('alignright'),\n        'JustifyFull': alignStates('alignjustify'),\n        'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n          return isFormatMatch(command);\n        },\n        'mceBlockQuote': function () {\n          return isFormatMatch('blockquote');\n        },\n        'Outdent': function () {\n          var node;\n          if (settings.inline_styles) {\n            if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {\n              return true;\n            }\n            if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {\n              return true;\n            }\n          }\n          return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || !settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE');\n        },\n        'InsertUnorderedList,InsertOrderedList': function (command) {\n          var list = dom.getParent(selection.getNode(), 'ul,ol');\n          return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');\n        }\n      }, 'state');\n      addCommands({\n        Undo: function () {\n          editor.undoManager.undo();\n        },\n        Redo: function () {\n          editor.undoManager.redo();\n        }\n      });\n      addQueryValueHandler('FontName', function () {\n        return fontNameQuery(editor);\n      }, this);\n      addQueryValueHandler('FontSize', function () {\n        return fontSizeQuery(editor);\n      }, this);\n    }\n\n    var nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend', ' ');\n    var Dispatcher = function (settings) {\n      var self = this;\n      var scope, bindings = {}, toggleEvent;\n      var returnFalse = function () {\n        return false;\n      };\n      var returnTrue = function () {\n        return true;\n      };\n      settings = settings || {};\n      scope = settings.scope || self;\n      toggleEvent = settings.toggleEvent || returnFalse;\n      var fire = function (name, args) {\n        var handlers, i, l, callback;\n        name = name.toLowerCase();\n        args = args || {};\n        args.type = name;\n        if (!args.target) {\n          args.target = scope;\n        }\n        if (!args.preventDefault) {\n          args.preventDefault = function () {\n            args.isDefaultPrevented = returnTrue;\n          };\n          args.stopPropagation = function () {\n            args.isPropagationStopped = returnTrue;\n          };\n          args.stopImmediatePropagation = function () {\n            args.isImmediatePropagationStopped = returnTrue;\n          };\n          args.isDefaultPrevented = returnFalse;\n          args.isPropagationStopped = returnFalse;\n          args.isImmediatePropagationStopped = returnFalse;\n        }\n        if (settings.beforeFire) {\n          settings.beforeFire(args);\n        }\n        handlers = bindings[name];\n        if (handlers) {\n          for (i = 0, l = handlers.length; i < l; i++) {\n            callback = handlers[i];\n            if (callback.once) {\n              off(name, callback.func);\n            }\n            if (args.isImmediatePropagationStopped()) {\n              args.stopPropagation();\n              return args;\n            }\n            if (callback.func.call(scope, args) === false) {\n              args.preventDefault();\n              return args;\n            }\n          }\n        }\n        return args;\n      };\n      var on = function (name, callback, prepend, extra) {\n        var handlers, names, i;\n        if (callback === false) {\n          callback = returnFalse;\n        }\n        if (callback) {\n          callback = { func: callback };\n          if (extra) {\n            Tools.extend(callback, extra);\n          }\n          names = name.toLowerCase().split(' ');\n          i = names.length;\n          while (i--) {\n            name = names[i];\n            handlers = bindings[name];\n            if (!handlers) {\n              handlers = bindings[name] = [];\n              toggleEvent(name, true);\n            }\n            if (prepend) {\n              handlers.unshift(callback);\n            } else {\n              handlers.push(callback);\n            }\n          }\n        }\n        return self;\n      };\n      var off = function (name, callback) {\n        var i, handlers, bindingName, names, hi;\n        if (name) {\n          names = name.toLowerCase().split(' ');\n          i = names.length;\n          while (i--) {\n            name = names[i];\n            handlers = bindings[name];\n            if (!name) {\n              for (bindingName in bindings) {\n                toggleEvent(bindingName, false);\n                delete bindings[bindingName];\n              }\n              return self;\n            }\n            if (handlers) {\n              if (!callback) {\n                handlers.length = 0;\n              } else {\n                hi = handlers.length;\n                while (hi--) {\n                  if (handlers[hi].func === callback) {\n                    handlers = handlers.slice(0, hi).concat(handlers.slice(hi + 1));\n                    bindings[name] = handlers;\n                  }\n                }\n              }\n              if (!handlers.length) {\n                toggleEvent(name, false);\n                delete bindings[name];\n              }\n            }\n          }\n        } else {\n          for (name in bindings) {\n            toggleEvent(name, false);\n          }\n          bindings = {};\n        }\n        return self;\n      };\n      var once = function (name, callback, prepend) {\n        return on(name, callback, prepend, { once: true });\n      };\n      var has = function (name) {\n        name = name.toLowerCase();\n        return !(!bindings[name] || bindings[name].length === 0);\n      };\n      self.fire = fire;\n      self.on = on;\n      self.off = off;\n      self.once = once;\n      self.has = has;\n    };\n    Dispatcher.isNative = function (name) {\n      return !!nativeEvents[name.toLowerCase()];\n    };\n\n    var getEventDispatcher = function (obj) {\n      if (!obj._eventDispatcher) {\n        obj._eventDispatcher = new Dispatcher({\n          scope: obj,\n          toggleEvent: function (name, state) {\n            if (Dispatcher.isNative(name) && obj.toggleNativeEvent) {\n              obj.toggleNativeEvent(name, state);\n            }\n          }\n        });\n      }\n      return obj._eventDispatcher;\n    };\n    var Observable = {\n      fire: function (name, args, bubble) {\n        var self = this;\n        if (self.removed && name !== 'remove' && name !== 'detach') {\n          return args;\n        }\n        args = getEventDispatcher(self).fire(name, args, bubble);\n        if (bubble !== false && self.parent) {\n          var parent = self.parent();\n          while (parent && !args.isPropagationStopped()) {\n            parent.fire(name, args, false);\n            parent = parent.parent();\n          }\n        }\n        return args;\n      },\n      on: function (name, callback, prepend) {\n        return getEventDispatcher(this).on(name, callback, prepend);\n      },\n      off: function (name, callback) {\n        return getEventDispatcher(this).off(name, callback);\n      },\n      once: function (name, callback) {\n        return getEventDispatcher(this).once(name, callback);\n      },\n      hasEventListeners: function (name) {\n        return getEventDispatcher(this).has(name);\n      }\n    };\n\n    var firePreProcess = function (editor, args) {\n      return editor.fire('PreProcess', args);\n    };\n    var firePostProcess = function (editor, args) {\n      return editor.fire('PostProcess', args);\n    };\n    var fireRemove = function (editor) {\n      return editor.fire('remove');\n    };\n    var fireDetach = function (editor) {\n      return editor.fire('detach');\n    };\n    var fireSwitchMode = function (editor, mode) {\n      return editor.fire('SwitchMode', { mode: mode });\n    };\n    var fireObjectResizeStart = function (editor, target, width, height) {\n      editor.fire('ObjectResizeStart', {\n        target: target,\n        width: width,\n        height: height\n      });\n    };\n    var fireObjectResized = function (editor, target, width, height) {\n      editor.fire('ObjectResized', {\n        target: target,\n        width: width,\n        height: height\n      });\n    };\n    var Events = {\n      firePreProcess: firePreProcess,\n      firePostProcess: firePostProcess,\n      fireRemove: fireRemove,\n      fireDetach: fireDetach,\n      fireSwitchMode: fireSwitchMode,\n      fireObjectResizeStart: fireObjectResizeStart,\n      fireObjectResized: fireObjectResized\n    };\n\n    var setEditorCommandState = function (editor, cmd, state) {\n      try {\n        editor.getDoc().execCommand(cmd, false, state);\n      } catch (ex) {\n      }\n    };\n    var toggleClass = function (elm, cls, state) {\n      if (has$2(elm, cls) && state === false) {\n        remove$4(elm, cls);\n      } else if (state) {\n        add$2(elm, cls);\n      }\n    };\n    var toggleReadOnly = function (editor, state) {\n      toggleClass(Element.fromDom(editor.getBody()), 'mce-content-readonly', state);\n      if (state) {\n        editor.selection.controlSelection.hideResizeRect();\n        editor.readonly = true;\n        editor.getBody().contentEditable = 'false';\n      } else {\n        editor.readonly = false;\n        editor.getBody().contentEditable = 'true';\n        setEditorCommandState(editor, 'StyleWithCSS', false);\n        setEditorCommandState(editor, 'enableInlineTableEditing', false);\n        setEditorCommandState(editor, 'enableObjectResizing', false);\n        editor.focus();\n        editor.nodeChanged();\n      }\n    };\n    var setMode = function (editor, mode) {\n      if (mode === getMode(editor)) {\n        return;\n      }\n      if (editor.initialized) {\n        toggleReadOnly(editor, mode === 'readonly');\n      } else {\n        editor.on('init', function () {\n          toggleReadOnly(editor, mode === 'readonly');\n        });\n      }\n      Events.fireSwitchMode(editor, mode);\n    };\n    var getMode = function (editor) {\n      return editor.readonly ? 'readonly' : 'design';\n    };\n    var isReadOnly = function (editor) {\n      return editor.readonly === true;\n    };\n\n    var DOM$1 = DOMUtils$1.DOM;\n    var customEventRootDelegates;\n    var getEventTarget = function (editor, eventName) {\n      if (eventName === 'selectionchange') {\n        return editor.getDoc();\n      }\n      if (!editor.inline && /^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(eventName)) {\n        return editor.getDoc().documentElement;\n      }\n      if (editor.settings.event_root) {\n        if (!editor.eventRoot) {\n          editor.eventRoot = DOM$1.select(editor.settings.event_root)[0];\n        }\n        return editor.eventRoot;\n      }\n      return editor.getBody();\n    };\n    var isListening = function (editor) {\n      return !editor.hidden && !editor.readonly;\n    };\n    var fireEvent = function (editor, eventName, e) {\n      if (isListening(editor)) {\n        editor.fire(eventName, e);\n      } else if (isReadOnly(editor)) {\n        e.preventDefault();\n      }\n    };\n    var bindEventDelegate = function (editor, eventName) {\n      var eventRootElm, delegate;\n      if (!editor.delegates) {\n        editor.delegates = {};\n      }\n      if (editor.delegates[eventName] || editor.removed) {\n        return;\n      }\n      eventRootElm = getEventTarget(editor, eventName);\n      if (editor.settings.event_root) {\n        if (!customEventRootDelegates) {\n          customEventRootDelegates = {};\n          editor.editorManager.on('removeEditor', function () {\n            var name;\n            if (!editor.editorManager.activeEditor) {\n              if (customEventRootDelegates) {\n                for (name in customEventRootDelegates) {\n                  editor.dom.unbind(getEventTarget(editor, name));\n                }\n                customEventRootDelegates = null;\n              }\n            }\n          });\n        }\n        if (customEventRootDelegates[eventName]) {\n          return;\n        }\n        delegate = function (e) {\n          var target = e.target;\n          var editors = editor.editorManager.get();\n          var i = editors.length;\n          while (i--) {\n            var body = editors[i].getBody();\n            if (body === target || DOM$1.isChildOf(target, body)) {\n              fireEvent(editors[i], eventName, e);\n            }\n          }\n        };\n        customEventRootDelegates[eventName] = delegate;\n        DOM$1.bind(eventRootElm, eventName, delegate);\n      } else {\n        delegate = function (e) {\n          fireEvent(editor, eventName, e);\n        };\n        DOM$1.bind(eventRootElm, eventName, delegate);\n        editor.delegates[eventName] = delegate;\n      }\n    };\n    var EditorObservable = {\n      bindPendingEventDelegates: function () {\n        var self = this;\n        Tools.each(self._pendingNativeEvents, function (name) {\n          bindEventDelegate(self, name);\n        });\n      },\n      toggleNativeEvent: function (name, state) {\n        var self = this;\n        if (name === 'focus' || name === 'blur') {\n          return;\n        }\n        if (state) {\n          if (self.initialized) {\n            bindEventDelegate(self, name);\n          } else {\n            if (!self._pendingNativeEvents) {\n              self._pendingNativeEvents = [name];\n            } else {\n              self._pendingNativeEvents.push(name);\n            }\n          }\n        } else if (self.initialized) {\n          self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n          delete self.delegates[name];\n        }\n      },\n      unbindAllNativeEvents: function () {\n        var self = this;\n        var body = self.getBody();\n        var dom = self.dom;\n        var name;\n        if (self.delegates) {\n          for (name in self.delegates) {\n            self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n          }\n          delete self.delegates;\n        }\n        if (!self.inline && body && dom) {\n          body.onload = null;\n          dom.unbind(self.getWin());\n          dom.unbind(self.getDoc());\n        }\n        if (dom) {\n          dom.unbind(body);\n          dom.unbind(self.getContainer());\n        }\n      }\n    };\n    EditorObservable = Tools.extend({}, Observable, EditorObservable);\n    var EditorObservable$1 = EditorObservable;\n\n    var sectionResult = Immutable('sections', 'settings');\n    var detection = PlatformDetection$1.detect();\n    var isTouch = detection.deviceType.isTouch();\n    var mobilePlugins = [\n      'lists',\n      'autolink',\n      'autosave'\n    ];\n    var defaultMobileSettings = { theme: 'mobile' };\n    var normalizePlugins = function (plugins) {\n      var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;\n      var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim$2);\n      return filter(trimmedPlugins, function (item) {\n        return item.length > 0;\n      });\n    };\n    var filterMobilePlugins = function (plugins) {\n      return filter(plugins, curry(contains, mobilePlugins));\n    };\n    var extractSections = function (keys, settings) {\n      var result = bifilter(settings, function (value, key) {\n        return contains(keys, key);\n      });\n      return sectionResult(result.t, result.f);\n    };\n    var getSection = function (sectionResult, name, defaults) {\n      var sections = sectionResult.sections();\n      var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {};\n      return Tools.extend({}, defaults, sectionSettings);\n    };\n    var hasSection = function (sectionResult, name) {\n      return sectionResult.sections().hasOwnProperty(name);\n    };\n    var getDefaultSettings = function (id, documentBaseUrl, editor) {\n      return {\n        id: id,\n        theme: 'modern',\n        delta_width: 0,\n        delta_height: 0,\n        popup_css: '',\n        plugins: '',\n        document_base_url: documentBaseUrl,\n        add_form_submit_trigger: true,\n        submit_patch: true,\n        add_unload_trigger: true,\n        convert_urls: true,\n        relative_urls: true,\n        remove_script_host: true,\n        object_resizing: true,\n        doctype: '<!DOCTYPE html>',\n        visual: true,\n        font_size_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large',\n        font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',\n        forced_root_block: 'p',\n        hidden_input: true,\n        render_ui: true,\n        indentation: '40px',\n        inline_styles: true,\n        convert_fonts_to_spans: true,\n        indent: 'simple',\n        indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\n        indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\n        entity_encoding: 'named',\n        url_converter: editor.convertURL,\n        url_converter_scope: editor,\n        ie7_compat: true\n      };\n    };\n    var getExternalPlugins = function (overrideSettings, settings) {\n      var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};\n      if (overrideSettings && overrideSettings.external_plugins) {\n        return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);\n      } else {\n        return userDefinedExternalPlugins;\n      }\n    };\n    var combinePlugins = function (forcedPlugins, plugins) {\n      return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));\n    };\n    var processPlugins = function (isTouchDevice, sectionResult, defaultOverrideSettings, settings) {\n      var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);\n      var plugins = normalizePlugins(settings.plugins);\n      var platformPlugins = isTouchDevice && hasSection(sectionResult, 'mobile') ? filterMobilePlugins(plugins) : plugins;\n      var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n      return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });\n    };\n    var isOnMobile = function (isTouchDevice, sectionResult) {\n      var isInline = sectionResult.settings().inline;\n      return isTouchDevice && hasSection(sectionResult, 'mobile') && !isInline;\n    };\n    var combineSettings = function (isTouchDevice, defaultSettings, defaultOverrideSettings, settings) {\n      var sectionResult = extractSections(['mobile'], settings);\n      var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isTouchDevice, sectionResult) ? getSection(sectionResult, 'mobile', defaultMobileSettings) : {}, {\n        validate: true,\n        content_editable: sectionResult.settings().inline,\n        external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())\n      });\n      return processPlugins(isTouchDevice, sectionResult, defaultOverrideSettings, extendedSettings);\n    };\n    var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {\n      var defaultSettings = getDefaultSettings(id, documentBaseUrl, editor);\n      return combineSettings(isTouch, defaultSettings, defaultOverrideSettings, settings);\n    };\n    var getFiltered = function (predicate, editor, name) {\n      return Option.from(editor.settings[name]).filter(predicate);\n    };\n    var getParamObject = function (value) {\n      var output = {};\n      if (typeof value === 'string') {\n        each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function (val) {\n          var arr = val.split('=');\n          if (arr.length > 1) {\n            output[Tools.trim(arr[0])] = Tools.trim(arr[1]);\n          } else {\n            output[Tools.trim(arr[0])] = Tools.trim(arr);\n          }\n        });\n      } else {\n        output = value;\n      }\n      return output;\n    };\n    var isArrayOf = function (p) {\n      return function (a) {\n        return isArray(a) && forall(a, p);\n      };\n    };\n    var getParam = function (editor, name, defaultVal, type) {\n      var value = name in editor.settings ? editor.settings[name] : defaultVal;\n      if (type === 'hash') {\n        return getParamObject(value);\n      } else if (type === 'string') {\n        return getFiltered(isString, editor, name).getOr(defaultVal);\n      } else if (type === 'number') {\n        return getFiltered(isNumber, editor, name).getOr(defaultVal);\n      } else if (type === 'boolean') {\n        return getFiltered(isBoolean, editor, name).getOr(defaultVal);\n      } else if (type === 'object') {\n        return getFiltered(isObject, editor, name).getOr(defaultVal);\n      } else if (type === 'array') {\n        return getFiltered(isArray, editor, name).getOr(defaultVal);\n      } else if (type === 'string[]') {\n        return getFiltered(isArrayOf(isString), editor, name).getOr(defaultVal);\n      } else if (type === 'function') {\n        return getFiltered(isFunction, editor, name).getOr(defaultVal);\n      } else {\n        return value;\n      }\n    };\n\n    var each$b = Tools.each, explode$2 = Tools.explode;\n    var keyCodeLookup = {\n      f1: 112,\n      f2: 113,\n      f3: 114,\n      f4: 115,\n      f5: 116,\n      f6: 117,\n      f7: 118,\n      f8: 119,\n      f9: 120,\n      f10: 121,\n      f11: 122,\n      f12: 123\n    };\n    var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n    function Shortcuts (editor) {\n      var self = this;\n      var shortcuts = {};\n      var pendingPatterns = [];\n      var parseShortcut = function (pattern) {\n        var id, key;\n        var shortcut = {};\n        each$b(explode$2(pattern, '+'), function (value) {\n          if (value in modifierNames) {\n            shortcut[value] = true;\n          } else {\n            if (/^[0-9]{2,}$/.test(value)) {\n              shortcut.keyCode = parseInt(value, 10);\n            } else {\n              shortcut.charCode = value.charCodeAt(0);\n              shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\n            }\n          }\n        });\n        id = [shortcut.keyCode];\n        for (key in modifierNames) {\n          if (shortcut[key]) {\n            id.push(key);\n          } else {\n            shortcut[key] = false;\n          }\n        }\n        shortcut.id = id.join(',');\n        if (shortcut.access) {\n          shortcut.alt = true;\n          if (Env.mac) {\n            shortcut.ctrl = true;\n          } else {\n            shortcut.shift = true;\n          }\n        }\n        if (shortcut.meta) {\n          if (Env.mac) {\n            shortcut.meta = true;\n          } else {\n            shortcut.ctrl = true;\n            shortcut.meta = false;\n          }\n        }\n        return shortcut;\n      };\n      var createShortcut = function (pattern, desc, cmdFunc, scope) {\n        var shortcuts;\n        shortcuts = Tools.map(explode$2(pattern, '>'), parseShortcut);\n        shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n          func: cmdFunc,\n          scope: scope || editor\n        });\n        return Tools.extend(shortcuts[0], {\n          desc: editor.translate(desc),\n          subpatterns: shortcuts.slice(1)\n        });\n      };\n      var hasModifier = function (e) {\n        return e.altKey || e.ctrlKey || e.metaKey;\n      };\n      var isFunctionKey = function (e) {\n        return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n      };\n      var matchShortcut = function (e, shortcut) {\n        if (!shortcut) {\n          return false;\n        }\n        if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) {\n          return false;\n        }\n        if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) {\n          return false;\n        }\n        if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) {\n          e.preventDefault();\n          return true;\n        }\n        return false;\n      };\n      var executeShortcutAction = function (shortcut) {\n        return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n      };\n      editor.on('keyup keypress keydown', function (e) {\n        if ((hasModifier(e) || isFunctionKey(e)) && !e.isDefaultPrevented()) {\n          each$b(shortcuts, function (shortcut) {\n            if (matchShortcut(e, shortcut)) {\n              pendingPatterns = shortcut.subpatterns.slice(0);\n              if (e.type === 'keydown') {\n                executeShortcutAction(shortcut);\n              }\n              return true;\n            }\n          });\n          if (matchShortcut(e, pendingPatterns[0])) {\n            if (pendingPatterns.length === 1) {\n              if (e.type === 'keydown') {\n                executeShortcutAction(pendingPatterns[0]);\n              }\n            }\n            pendingPatterns.shift();\n          }\n        }\n      });\n      self.add = function (pattern, desc, cmdFunc, scope) {\n        var cmd;\n        cmd = cmdFunc;\n        if (typeof cmdFunc === 'string') {\n          cmdFunc = function () {\n            editor.execCommand(cmd, false, null);\n          };\n        } else if (Tools.isArray(cmd)) {\n          cmdFunc = function () {\n            editor.execCommand(cmd[0], cmd[1], cmd[2]);\n          };\n        }\n        each$b(explode$2(Tools.trim(pattern.toLowerCase())), function (pattern) {\n          var shortcut = createShortcut(pattern, desc, cmdFunc, scope);\n          shortcuts[shortcut.id] = shortcut;\n        });\n        return true;\n      };\n      self.remove = function (pattern) {\n        var shortcut = createShortcut(pattern);\n        if (shortcuts[shortcut.id]) {\n          delete shortcuts[shortcut.id];\n          return true;\n        }\n        return false;\n      };\n    }\n\n    var hasFocus = function (element) {\n      var doc = owner(element).dom();\n      return element.dom() === doc.activeElement;\n    };\n    var active = function (_doc) {\n      var doc = _doc !== undefined ? _doc.dom() : domGlobals.document;\n      return Option.from(doc.activeElement).map(Element.fromDom);\n    };\n    var search = function (element) {\n      return active(owner(element)).filter(function (e) {\n        return element.dom().contains(e.dom());\n      });\n    };\n\n    var getContentEditableHost = function (editor, node) {\n      return editor.dom.getParent(node, function (node) {\n        return editor.dom.getContentEditable(node) === 'true';\n      });\n    };\n    var getCollapsedNode = function (rng) {\n      return rng.collapsed ? Option.from(getNode(rng.startContainer, rng.startOffset)).map(Element.fromDom) : Option.none();\n    };\n    var getFocusInElement = function (root, rng) {\n      return getCollapsedNode(rng).bind(function (node) {\n        if (isTableSection(node)) {\n          return Option.some(node);\n        } else if (contains$3(root, node) === false) {\n          return Option.some(root);\n        } else {\n          return Option.none();\n        }\n      });\n    };\n    var normalizeSelection = function (editor, rng) {\n      getFocusInElement(Element.fromDom(editor.getBody()), rng).bind(function (elm) {\n        return CaretFinder.firstPositionIn(elm.dom());\n      }).fold(function () {\n        editor.selection.normalize();\n        return;\n      }, function (caretPos) {\n        return editor.selection.setRng(caretPos.toRange());\n      });\n    };\n    var focusBody = function (body) {\n      if (body.setActive) {\n        try {\n          body.setActive();\n        } catch (ex) {\n          body.focus();\n        }\n      } else {\n        body.focus();\n      }\n    };\n    var hasElementFocus = function (elm) {\n      return hasFocus(elm) || search(elm).isSome();\n    };\n    var hasIframeFocus = function (editor) {\n      return editor.iframeElement && hasFocus(Element.fromDom(editor.iframeElement));\n    };\n    var hasInlineFocus = function (editor) {\n      var rawBody = editor.getBody();\n      return rawBody && hasElementFocus(Element.fromDom(rawBody));\n    };\n    var hasFocus$1 = function (editor) {\n      return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n    };\n    var focusEditor = function (editor) {\n      var selection = editor.selection, contentEditable = editor.settings.content_editable;\n      var body = editor.getBody();\n      var rng = selection.getRng();\n      editor.quirks.refreshContentEditable();\n      var contentEditableHost = getContentEditableHost(editor, selection.getNode());\n      if (editor.$.contains(body, contentEditableHost)) {\n        focusBody(contentEditableHost);\n        normalizeSelection(editor, rng);\n        activateEditor(editor);\n        return;\n      }\n      if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {\n        SelectionBookmark.getRng(editor).each(function (bookmarkRng) {\n          editor.selection.setRng(bookmarkRng);\n          rng = bookmarkRng;\n        });\n      }\n      if (!contentEditable) {\n        if (!Env.opera) {\n          focusBody(body);\n        }\n        editor.getWin().focus();\n      }\n      if (Env.gecko || contentEditable) {\n        focusBody(body);\n        normalizeSelection(editor, rng);\n      }\n      activateEditor(editor);\n    };\n    var activateEditor = function (editor) {\n      return editor.editorManager.setActive(editor);\n    };\n    var focus = function (editor, skipFocus) {\n      if (editor.removed) {\n        return;\n      }\n      skipFocus ? activateEditor(editor) : focusEditor(editor);\n    };\n    var EditorFocus = {\n      focus: focus,\n      hasFocus: hasFocus$1\n    };\n\n    var getProp = function (propName, elm) {\n      var rawElm = elm.dom();\n      return rawElm[propName];\n    };\n    var getComputedSizeProp = function (propName, elm) {\n      return parseInt(get$1(elm, propName), 10);\n    };\n    var getClientWidth = curry(getProp, 'clientWidth');\n    var getClientHeight = curry(getProp, 'clientHeight');\n    var getMarginTop = curry(getComputedSizeProp, 'margin-top');\n    var getMarginLeft = curry(getComputedSizeProp, 'margin-left');\n    var getBoundingClientRect$1 = function (elm) {\n      return elm.dom().getBoundingClientRect();\n    };\n    var isInsideElementContentArea = function (bodyElm, clientX, clientY) {\n      var clientWidth = getClientWidth(bodyElm);\n      var clientHeight = getClientHeight(bodyElm);\n      return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n    };\n    var transpose = function (inline, elm, clientX, clientY) {\n      var clientRect = getBoundingClientRect$1(elm);\n      var deltaX = inline ? clientRect.left + elm.dom().clientLeft + getMarginLeft(elm) : 0;\n      var deltaY = inline ? clientRect.top + elm.dom().clientTop + getMarginTop(elm) : 0;\n      var x = clientX - deltaX;\n      var y = clientY - deltaY;\n      return {\n        x: x,\n        y: y\n      };\n    };\n    var isXYInContentArea = function (editor, clientX, clientY) {\n      var bodyElm = Element.fromDom(editor.getBody());\n      var targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n      var transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n      return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n    };\n    var fromDomSafe = function (node) {\n      return Option.from(node).map(Element.fromDom);\n    };\n    var isEditorAttachedToDom = function (editor) {\n      var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n      return fromDomSafe(rawContainer).map(function (container) {\n        return contains$3(owner(container), container);\n      }).getOr(false);\n    };\n    var EditorView = {\n      isXYInContentArea: isXYInContentArea,\n      isEditorAttachedToDom: isEditorAttachedToDom\n    };\n\n    function NotificationManagerImpl () {\n      var unimplemented = function () {\n        throw new Error('Theme did not provide a NotificationManager implementation.');\n      };\n      return {\n        open: unimplemented,\n        close: unimplemented,\n        reposition: unimplemented,\n        getArgs: unimplemented\n      };\n    }\n\n    function NotificationManager (editor) {\n      var notifications = [];\n      var getImplementation = function () {\n        var theme = editor.theme;\n        return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\n      };\n      var getTopNotification = function () {\n        return Option.from(notifications[0]);\n      };\n      var isEqual = function (a, b) {\n        return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\n      };\n      var reposition = function () {\n        if (notifications.length > 0) {\n          getImplementation().reposition(notifications);\n        }\n      };\n      var addNotification = function (notification) {\n        notifications.push(notification);\n      };\n      var closeNotification = function (notification) {\n        findIndex(notifications, function (otherNotification) {\n          return otherNotification === notification;\n        }).each(function (index) {\n          notifications.splice(index, 1);\n        });\n      };\n      var open = function (args) {\n        if (editor.removed || !EditorView.isEditorAttachedToDom(editor)) {\n          return;\n        }\n        return find(notifications, function (notification) {\n          return isEqual(getImplementation().getArgs(notification), args);\n        }).getOrThunk(function () {\n          editor.editorManager.setActive(editor);\n          var notification = getImplementation().open(args, function () {\n            closeNotification(notification);\n            reposition();\n          });\n          addNotification(notification);\n          reposition();\n          return notification;\n        });\n      };\n      var close = function () {\n        getTopNotification().each(function (notification) {\n          getImplementation().close(notification);\n          closeNotification(notification);\n          reposition();\n        });\n      };\n      var getNotifications = function () {\n        return notifications;\n      };\n      var registerEvents = function (editor) {\n        editor.on('SkinLoaded', function () {\n          var serviceMessage = editor.settings.service_message;\n          if (serviceMessage) {\n            open({\n              text: serviceMessage,\n              type: 'warning',\n              timeout: 0,\n              icon: ''\n            });\n          }\n        });\n        editor.on('ResizeEditor ResizeWindow', function () {\n          Delay.requestAnimationFrame(reposition);\n        });\n        editor.on('remove', function () {\n          each(notifications.slice(), function (notification) {\n            getImplementation().close(notification);\n          });\n        });\n      };\n      registerEvents(editor);\n      return {\n        open: open,\n        close: close,\n        getNotifications: getNotifications\n      };\n    }\n\n    function WindowManagerImpl () {\n      var unimplemented = function () {\n        throw new Error('Theme did not provide a WindowManager implementation.');\n      };\n      return {\n        open: unimplemented,\n        alert: unimplemented,\n        confirm: unimplemented,\n        close: unimplemented,\n        getParams: unimplemented,\n        setParams: unimplemented\n      };\n    }\n\n    function WindowManager (editor) {\n      var windows = [];\n      var getImplementation = function () {\n        var theme = editor.theme;\n        return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\n      };\n      var funcBind = function (scope, f) {\n        return function () {\n          return f ? f.apply(scope, arguments) : undefined;\n        };\n      };\n      var fireOpenEvent = function (win) {\n        editor.fire('OpenWindow', { win: win });\n      };\n      var fireCloseEvent = function (win) {\n        editor.fire('CloseWindow', { win: win });\n      };\n      var addWindow = function (win) {\n        windows.push(win);\n        fireOpenEvent(win);\n      };\n      var closeWindow = function (win) {\n        findIndex(windows, function (otherWindow) {\n          return otherWindow === win;\n        }).each(function (index) {\n          windows.splice(index, 1);\n          fireCloseEvent(win);\n          if (windows.length === 0) {\n            editor.focus();\n          }\n        });\n      };\n      var getTopWindow = function () {\n        return Option.from(windows[windows.length - 1]);\n      };\n      var open = function (args, params) {\n        editor.editorManager.setActive(editor);\n        SelectionBookmark.store(editor);\n        var win = getImplementation().open(args, params, closeWindow);\n        addWindow(win);\n        return win;\n      };\n      var alert = function (message, callback, scope) {\n        var win = getImplementation().alert(message, funcBind(scope ? scope : this, callback), closeWindow);\n        addWindow(win);\n      };\n      var confirm = function (message, callback, scope) {\n        var win = getImplementation().confirm(message, funcBind(scope ? scope : this, callback), closeWindow);\n        addWindow(win);\n      };\n      var close = function () {\n        getTopWindow().each(function (win) {\n          getImplementation().close(win);\n          closeWindow(win);\n        });\n      };\n      var getParams = function () {\n        return getTopWindow().map(getImplementation().getParams).getOr(null);\n      };\n      var setParams = function (params) {\n        getTopWindow().each(function (win) {\n          getImplementation().setParams(win, params);\n        });\n      };\n      var getWindows = function () {\n        return windows;\n      };\n      editor.on('remove', function () {\n        each(windows.slice(0), function (win) {\n          getImplementation().close(win);\n        });\n      });\n      return {\n        windows: windows,\n        open: open,\n        alert: alert,\n        confirm: confirm,\n        close: close,\n        getParams: getParams,\n        setParams: setParams,\n        getWindows: getWindows\n      };\n    }\n\n    var data = {};\n    var code = 'en';\n    var I18n = {\n      setCode: function (newCode) {\n        if (newCode) {\n          code = newCode;\n          this.rtl = this.data[newCode] ? this.data[newCode]._dir === 'rtl' : false;\n        }\n      },\n      getCode: function () {\n        return code;\n      },\n      rtl: false,\n      add: function (code, items) {\n        var langData = data[code];\n        if (!langData) {\n          data[code] = langData = {};\n        }\n        for (var name in items) {\n          langData[name] = items[name];\n        }\n        this.setCode(code);\n      },\n      translate: function (text) {\n        var langData = data[code] || {};\n        var toString = function (obj) {\n          if (Tools.is(obj, 'function')) {\n            return Object.prototype.toString.call(obj);\n          }\n          return !isEmpty(obj) ? '' + obj : '';\n        };\n        var isEmpty = function (text) {\n          return text === '' || text === null || Tools.is(text, 'undefined');\n        };\n        var getLangData = function (text) {\n          text = toString(text);\n          return Tools.hasOwn(langData, text) ? toString(langData[text]) : text;\n        };\n        if (isEmpty(text)) {\n          return '';\n        }\n        if (Tools.is(text, 'object') && Tools.hasOwn(text, 'raw')) {\n          return toString(text.raw);\n        }\n        if (Tools.is(text, 'array')) {\n          var values_1 = text.slice(1);\n          text = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, function ($1, $2) {\n            return Tools.hasOwn(values_1, $2) ? toString(values_1[$2]) : $1;\n          });\n        }\n        return getLangData(text).replace(/{context:\\w+}$/, '');\n      },\n      data: data\n    };\n\n    var PluginManager = AddOnManager.PluginManager;\n    var resolvePluginName = function (targetUrl, suffix) {\n      for (var name in PluginManager.urls) {\n        var matchUrl = PluginManager.urls[name] + '/plugin' + suffix + '.js';\n        if (matchUrl === targetUrl) {\n          return name;\n        }\n      }\n      return null;\n    };\n    var pluginUrlToMessage = function (editor, url) {\n      var plugin = resolvePluginName(url, editor.suffix);\n      return plugin ? I18n.translate([\n        'Failed to load plugin: {0} from url {1}',\n        plugin,\n        url\n      ]) : I18n.translate([\n        'Failed to load plugin url: {0}',\n        url\n      ]);\n    };\n    var displayNotification = function (editor, message) {\n      editor.notificationManager.open({\n        type: 'error',\n        text: message\n      });\n    };\n    var displayError = function (editor, message) {\n      if (editor._skinLoaded) {\n        displayNotification(editor, message);\n      } else {\n        editor.on('SkinLoaded', function () {\n          displayNotification(editor, message);\n        });\n      }\n    };\n    var uploadError = function (editor, message) {\n      displayError(editor, I18n.translate([\n        'Failed to upload image: {0}',\n        message\n      ]));\n    };\n    var pluginLoadError = function (editor, url) {\n      displayError(editor, pluginUrlToMessage(editor, url));\n    };\n    var pluginInitError = function (editor, name, err) {\n      var message = I18n.translate([\n        'Failed to initialize plugin: {0}',\n        name\n      ]);\n      initError(message, err);\n      displayError(editor, message);\n    };\n    var initError = function (message) {\n      var x = [];\n      for (var _i = 1; _i < arguments.length; _i++) {\n        x[_i - 1] = arguments[_i];\n      }\n      var console = domGlobals.window.console;\n      if (console) {\n        if (console.error) {\n          console.error.apply(console, arguments);\n        } else {\n          console.log.apply(console, arguments);\n        }\n      }\n    };\n    var ErrorReporter = {\n      pluginLoadError: pluginLoadError,\n      pluginInitError: pluginInitError,\n      uploadError: uploadError,\n      displayError: displayError,\n      initError: initError\n    };\n\n    var PluginManager$1 = AddOnManager.PluginManager;\n\n    var ThemeManager = AddOnManager.ThemeManager;\n\n    function XMLHttpRequest () {\n      var f = Global$1.getOrDie('XMLHttpRequest');\n      return new f();\n    }\n\n    function Uploader (uploadStatus, settings) {\n      var pendingPromises = {};\n      var pathJoin = function (path1, path2) {\n        if (path1) {\n          return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n        }\n        return path2;\n      };\n      var defaultHandler = function (blobInfo, success, failure, progress) {\n        var xhr, formData;\n        xhr = XMLHttpRequest();\n        xhr.open('POST', settings.url);\n        xhr.withCredentials = settings.credentials;\n        xhr.upload.onprogress = function (e) {\n          progress(e.loaded / e.total * 100);\n        };\n        xhr.onerror = function () {\n          failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n        };\n        xhr.onload = function () {\n          var json;\n          if (xhr.status < 200 || xhr.status >= 300) {\n            failure('HTTP Error: ' + xhr.status);\n            return;\n          }\n          json = JSON.parse(xhr.responseText);\n          if (!json || typeof json.location !== 'string') {\n            failure('Invalid JSON: ' + xhr.responseText);\n            return;\n          }\n          success(pathJoin(settings.basePath, json.location));\n        };\n        formData = new domGlobals.FormData();\n        formData.append('file', blobInfo.blob(), blobInfo.filename());\n        xhr.send(formData);\n      };\n      var noUpload = function () {\n        return new promiseObj(function (resolve) {\n          resolve([]);\n        });\n      };\n      var handlerSuccess = function (blobInfo, url) {\n        return {\n          url: url,\n          blobInfo: blobInfo,\n          status: true\n        };\n      };\n      var handlerFailure = function (blobInfo, error) {\n        return {\n          url: '',\n          blobInfo: blobInfo,\n          status: false,\n          error: error\n        };\n      };\n      var resolvePending = function (blobUri, result) {\n        Tools.each(pendingPromises[blobUri], function (resolve) {\n          resolve(result);\n        });\n        delete pendingPromises[blobUri];\n      };\n      var uploadBlobInfo = function (blobInfo, handler, openNotification) {\n        uploadStatus.markPending(blobInfo.blobUri());\n        return new promiseObj(function (resolve) {\n          var notification, progress;\n          var noop = function () {\n          };\n          try {\n            var closeNotification_1 = function () {\n              if (notification) {\n                notification.close();\n                progress = noop;\n              }\n            };\n            var success = function (url) {\n              closeNotification_1();\n              uploadStatus.markUploaded(blobInfo.blobUri(), url);\n              resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\n              resolve(handlerSuccess(blobInfo, url));\n            };\n            var failure = function (error) {\n              closeNotification_1();\n              uploadStatus.removeFailed(blobInfo.blobUri());\n              resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));\n              resolve(handlerFailure(blobInfo, error));\n            };\n            progress = function (percent) {\n              if (percent < 0 || percent > 100) {\n                return;\n              }\n              if (!notification) {\n                notification = openNotification();\n              }\n              notification.progressBar.value(percent);\n            };\n            handler(blobInfo, success, failure, progress);\n          } catch (ex) {\n            resolve(handlerFailure(blobInfo, ex.message));\n          }\n        });\n      };\n      var isDefaultHandler = function (handler) {\n        return handler === defaultHandler;\n      };\n      var pendingUploadBlobInfo = function (blobInfo) {\n        var blobUri = blobInfo.blobUri();\n        return new promiseObj(function (resolve) {\n          pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n          pendingPromises[blobUri].push(resolve);\n        });\n      };\n      var uploadBlobs = function (blobInfos, openNotification) {\n        blobInfos = Tools.grep(blobInfos, function (blobInfo) {\n          return !uploadStatus.isUploaded(blobInfo.blobUri());\n        });\n        return promiseObj.all(Tools.map(blobInfos, function (blobInfo) {\n          return uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, settings.handler, openNotification);\n        }));\n      };\n      var upload = function (blobInfos, openNotification) {\n        return !settings.url && isDefaultHandler(settings.handler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\n      };\n      if (isFunction(settings.handler) === false) {\n        settings.handler = defaultHandler;\n      }\n      return { upload: upload };\n    }\n\n    function FileReader () {\n      var f = Global$1.getOrDie('FileReader');\n      return new f();\n    }\n\n    function Uint8Array (arr) {\n      var f = Global$1.getOrDie('Uint8Array');\n      return new f(arr);\n    }\n\n    var requestAnimationFrame$1 = function (callback) {\n      var f = Global$1.getOrDie('requestAnimationFrame');\n      f(callback);\n    };\n    var atob = function (base64) {\n      var f = Global$1.getOrDie('atob');\n      return f(base64);\n    };\n    var Window = {\n      atob: atob,\n      requestAnimationFrame: requestAnimationFrame$1\n    };\n\n    var blobUriToBlob = function (url) {\n      return new promiseObj(function (resolve, reject) {\n        var rejectWithError = function () {\n          reject('Cannot convert ' + url + ' to Blob. Resource might not exist or is inaccessible.');\n        };\n        try {\n          var xhr = XMLHttpRequest();\n          xhr.open('GET', url, true);\n          xhr.responseType = 'blob';\n          xhr.onload = function () {\n            if (this.status === 200) {\n              resolve(this.response);\n            } else {\n              rejectWithError();\n            }\n          };\n          xhr.onerror = rejectWithError;\n          xhr.send();\n        } catch (ex) {\n          rejectWithError();\n        }\n      });\n    };\n    var parseDataUri = function (uri) {\n      var type, matches;\n      var uriParts = decodeURIComponent(uri).split(',');\n      matches = /data:([^;]+)/.exec(uriParts[0]);\n      if (matches) {\n        type = matches[1];\n      }\n      return {\n        type: type,\n        data: uriParts[1]\n      };\n    };\n    var dataUriToBlob = function (uri) {\n      return new promiseObj(function (resolve) {\n        var str, arr, i;\n        var uriParts = parseDataUri(uri);\n        try {\n          str = Window.atob(uriParts.data);\n        } catch (e) {\n          resolve(new domGlobals.Blob([]));\n          return;\n        }\n        arr = Uint8Array(str.length);\n        for (i = 0; i < arr.length; i++) {\n          arr[i] = str.charCodeAt(i);\n        }\n        resolve(new domGlobals.Blob([arr], { type: uriParts.type }));\n      });\n    };\n    var uriToBlob = function (url) {\n      if (url.indexOf('blob:') === 0) {\n        return blobUriToBlob(url);\n      }\n      if (url.indexOf('data:') === 0) {\n        return dataUriToBlob(url);\n      }\n      return null;\n    };\n    var blobToDataUri = function (blob) {\n      return new promiseObj(function (resolve) {\n        var reader = FileReader();\n        reader.onloadend = function () {\n          resolve(reader.result);\n        };\n        reader.readAsDataURL(blob);\n      });\n    };\n    var Conversions = {\n      uriToBlob: uriToBlob,\n      blobToDataUri: blobToDataUri,\n      parseDataUri: parseDataUri\n    };\n\n    var count = 0;\n    var uniqueId = function (prefix) {\n      return (prefix || 'blobid') + count++;\n    };\n    var imageToBlobInfo = function (blobCache, img, resolve, reject) {\n      var base64, blobInfo;\n      if (img.src.indexOf('blob:') === 0) {\n        blobInfo = blobCache.getByUri(img.src);\n        if (blobInfo) {\n          resolve({\n            image: img,\n            blobInfo: blobInfo\n          });\n        } else {\n          Conversions.uriToBlob(img.src).then(function (blob) {\n            Conversions.blobToDataUri(blob).then(function (dataUri) {\n              base64 = Conversions.parseDataUri(dataUri).data;\n              blobInfo = blobCache.create(uniqueId(), blob, base64);\n              blobCache.add(blobInfo);\n              resolve({\n                image: img,\n                blobInfo: blobInfo\n              });\n            });\n          }, function (err) {\n            reject(err);\n          });\n        }\n        return;\n      }\n      base64 = Conversions.parseDataUri(img.src).data;\n      blobInfo = blobCache.findFirst(function (cachedBlobInfo) {\n        return cachedBlobInfo.base64() === base64;\n      });\n      if (blobInfo) {\n        resolve({\n          image: img,\n          blobInfo: blobInfo\n        });\n      } else {\n        Conversions.uriToBlob(img.src).then(function (blob) {\n          blobInfo = blobCache.create(uniqueId(), blob, base64);\n          blobCache.add(blobInfo);\n          resolve({\n            image: img,\n            blobInfo: blobInfo\n          });\n        }, function (err) {\n          reject(err);\n        });\n      }\n    };\n    var getAllImages = function (elm) {\n      return elm ? from$1(elm.getElementsByTagName('img')) : [];\n    };\n    function ImageScanner (uploadStatus, blobCache) {\n      var cachedPromises = {};\n      var findAll = function (elm, predicate) {\n        var images;\n        if (!predicate) {\n          predicate = constant(true);\n        }\n        images = filter(getAllImages(elm), function (img) {\n          var src = img.src;\n          if (!Env.fileApi) {\n            return false;\n          }\n          if (img.hasAttribute('data-mce-bogus')) {\n            return false;\n          }\n          if (img.hasAttribute('data-mce-placeholder')) {\n            return false;\n          }\n          if (!src || src === Env.transparentSrc) {\n            return false;\n          }\n          if (src.indexOf('blob:') === 0) {\n            return !uploadStatus.isUploaded(src) && predicate(img);\n          }\n          if (src.indexOf('data:') === 0) {\n            return predicate(img);\n          }\n          return false;\n        });\n        var promises = map(images, function (img) {\n          if (cachedPromises[img.src]) {\n            return new promiseObj(function (resolve) {\n              cachedPromises[img.src].then(function (imageInfo) {\n                if (typeof imageInfo === 'string') {\n                  return imageInfo;\n                }\n                resolve({\n                  image: img,\n                  blobInfo: imageInfo.blobInfo\n                });\n              });\n            });\n          }\n          var newPromise = new promiseObj(function (resolve, reject) {\n            imageToBlobInfo(blobCache, img, resolve, reject);\n          }).then(function (result) {\n            delete cachedPromises[result.image.src];\n            return result;\n          }).catch(function (error) {\n            delete cachedPromises[img.src];\n            return error;\n          });\n          cachedPromises[img.src] = newPromise;\n          return newPromise;\n        });\n        return promiseObj.all(promises);\n      };\n      return { findAll: findAll };\n    }\n\n    var count$1 = 0;\n    var seed = function () {\n      var rnd = function () {\n        return Math.round(Math.random() * 4294967295).toString(36);\n      };\n      var now = new Date().getTime();\n      return 's' + now.toString(36) + rnd() + rnd() + rnd();\n    };\n    var uuid = function (prefix) {\n      return prefix + count$1++ + seed();\n    };\n    var Uuid = { uuid: uuid };\n\n    function BlobCache () {\n      var cache = [];\n      var mimeToExt = function (mime) {\n        var mimes = {\n          'image/jpeg': 'jpg',\n          'image/jpg': 'jpg',\n          'image/gif': 'gif',\n          'image/png': 'png'\n        };\n        return mimes[mime.toLowerCase()] || 'dat';\n      };\n      var create = function (o, blob, base64, filename) {\n        if (isString(o)) {\n          var id = o;\n          return toBlobInfo({\n            id: id,\n            name: filename,\n            blob: blob,\n            base64: base64\n          });\n        } else if (isObject(o)) {\n          return toBlobInfo(o);\n        } else {\n          throw new Error('Unknown input type');\n        }\n      };\n      var toBlobInfo = function (o) {\n        var id, name;\n        if (!o.blob || !o.base64) {\n          throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');\n        }\n        id = o.id || Uuid.uuid('blobid');\n        name = o.name || id;\n        return {\n          id: constant(id),\n          name: constant(name),\n          filename: constant(name + '.' + mimeToExt(o.blob.type)),\n          blob: constant(o.blob),\n          base64: constant(o.base64),\n          blobUri: constant(o.blobUri || URL.createObjectURL(o.blob)),\n          uri: constant(o.uri)\n        };\n      };\n      var add = function (blobInfo) {\n        if (!get(blobInfo.id())) {\n          cache.push(blobInfo);\n        }\n      };\n      var get = function (id) {\n        return findFirst(function (cachedBlobInfo) {\n          return cachedBlobInfo.id() === id;\n        });\n      };\n      var findFirst = function (predicate) {\n        return filter(cache, predicate)[0];\n      };\n      var getByUri = function (blobUri) {\n        return findFirst(function (blobInfo) {\n          return blobInfo.blobUri() === blobUri;\n        });\n      };\n      var removeByUri = function (blobUri) {\n        cache = filter(cache, function (blobInfo) {\n          if (blobInfo.blobUri() === blobUri) {\n            URL.revokeObjectURL(blobInfo.blobUri());\n            return false;\n          }\n          return true;\n        });\n      };\n      var destroy = function () {\n        each(cache, function (cachedBlobInfo) {\n          URL.revokeObjectURL(cachedBlobInfo.blobUri());\n        });\n        cache = [];\n      };\n      return {\n        create: create,\n        add: add,\n        get: get,\n        getByUri: getByUri,\n        findFirst: findFirst,\n        removeByUri: removeByUri,\n        destroy: destroy\n      };\n    }\n\n    function UploadStatus () {\n      var PENDING = 1, UPLOADED = 2;\n      var blobUriStatuses = {};\n      var createStatus = function (status, resultUri) {\n        return {\n          status: status,\n          resultUri: resultUri\n        };\n      };\n      var hasBlobUri = function (blobUri) {\n        return blobUri in blobUriStatuses;\n      };\n      var getResultUri = function (blobUri) {\n        var result = blobUriStatuses[blobUri];\n        return result ? result.resultUri : null;\n      };\n      var isPending = function (blobUri) {\n        return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n      };\n      var isUploaded = function (blobUri) {\n        return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n      };\n      var markPending = function (blobUri) {\n        blobUriStatuses[blobUri] = createStatus(PENDING, null);\n      };\n      var markUploaded = function (blobUri, resultUri) {\n        blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n      };\n      var removeFailed = function (blobUri) {\n        delete blobUriStatuses[blobUri];\n      };\n      var destroy = function () {\n        blobUriStatuses = {};\n      };\n      return {\n        hasBlobUri: hasBlobUri,\n        getResultUri: getResultUri,\n        isPending: isPending,\n        isUploaded: isUploaded,\n        markPending: markPending,\n        markUploaded: markUploaded,\n        removeFailed: removeFailed,\n        destroy: destroy\n      };\n    }\n\n    function EditorUpload (editor) {\n      var blobCache = BlobCache();\n      var uploader, imageScanner;\n      var uploadStatus = UploadStatus();\n      var urlFilters = [];\n      var aliveGuard = function (callback) {\n        return function (result) {\n          if (editor.selection) {\n            return callback(result);\n          }\n          return [];\n        };\n      };\n      var cacheInvalidator = function () {\n        return '?' + new Date().getTime();\n      };\n      var replaceString = function (content, search, replace) {\n        var index = 0;\n        do {\n          index = content.indexOf(search, index);\n          if (index !== -1) {\n            content = content.substring(0, index) + replace + content.substr(index + search.length);\n            index += replace.length - search.length + 1;\n          }\n        } while (index !== -1);\n        return content;\n      };\n      var replaceImageUrl = function (content, targetUrl, replacementUrl) {\n        content = replaceString(content, 'src=\"' + targetUrl + '\"', 'src=\"' + replacementUrl + '\"');\n        content = replaceString(content, 'data-mce-src=\"' + targetUrl + '\"', 'data-mce-src=\"' + replacementUrl + '\"');\n        return content;\n      };\n      var replaceUrlInUndoStack = function (targetUrl, replacementUrl) {\n        each(editor.undoManager.data, function (level) {\n          if (level.type === 'fragmented') {\n            level.fragments = map(level.fragments, function (fragment) {\n              return replaceImageUrl(fragment, targetUrl, replacementUrl);\n            });\n          } else {\n            level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\n          }\n        });\n      };\n      var openNotification = function () {\n        return editor.notificationManager.open({\n          text: editor.translate('Image uploading...'),\n          type: 'info',\n          timeout: -1,\n          progressBar: true\n        });\n      };\n      var replaceImageUri = function (image, resultUri) {\n        blobCache.removeByUri(image.src);\n        replaceUrlInUndoStack(image.src, resultUri);\n        editor.$(image).attr({\n          'src': Settings.shouldReuseFileName(editor) ? resultUri + cacheInvalidator() : resultUri,\n          'data-mce-src': editor.convertURL(resultUri, 'src')\n        });\n      };\n      var uploadImages = function (callback) {\n        if (!uploader) {\n          uploader = Uploader(uploadStatus, {\n            url: Settings.getImageUploadUrl(editor),\n            basePath: Settings.getImageUploadBasePath(editor),\n            credentials: Settings.getImagesUploadCredentials(editor),\n            handler: Settings.getImagesUploadHandler(editor)\n          });\n        }\n        return scanForImages().then(aliveGuard(function (imageInfos) {\n          var blobInfos;\n          blobInfos = map(imageInfos, function (imageInfo) {\n            return imageInfo.blobInfo;\n          });\n          return uploader.upload(blobInfos, openNotification).then(aliveGuard(function (result) {\n            var filteredResult = map(result, function (uploadInfo, index) {\n              var image = imageInfos[index].image;\n              if (uploadInfo.status && Settings.shouldReplaceBlobUris(editor)) {\n                replaceImageUri(image, uploadInfo.url);\n              } else if (uploadInfo.error) {\n                ErrorReporter.uploadError(editor, uploadInfo.error);\n              }\n              return {\n                element: image,\n                status: uploadInfo.status\n              };\n            });\n            if (callback) {\n              callback(filteredResult);\n            }\n            return filteredResult;\n          }));\n        }));\n      };\n      var uploadImagesAuto = function (callback) {\n        if (Settings.isAutomaticUploadsEnabled(editor)) {\n          return uploadImages(callback);\n        }\n      };\n      var isValidDataUriImage = function (imgElm) {\n        if (forall(urlFilters, function (filter) {\n            return filter(imgElm);\n          }) === false) {\n          return false;\n        }\n        if (imgElm.getAttribute('src').indexOf('data:') === 0) {\n          var dataImgFilter = Settings.getImagesDataImgFilter(editor);\n          return dataImgFilter(imgElm);\n        }\n        return true;\n      };\n      var addFilter = function (filter) {\n        urlFilters.push(filter);\n      };\n      var scanForImages = function () {\n        if (!imageScanner) {\n          imageScanner = ImageScanner(uploadStatus, blobCache);\n        }\n        return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(function (result) {\n          result = filter(result, function (resultItem) {\n            if (typeof resultItem === 'string') {\n              ErrorReporter.displayError(editor, resultItem);\n              return false;\n            }\n            return true;\n          });\n          each(result, function (resultItem) {\n            replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\n            resultItem.image.src = resultItem.blobInfo.blobUri();\n            resultItem.image.removeAttribute('data-mce-src');\n          });\n          return result;\n        }));\n      };\n      var destroy = function () {\n        blobCache.destroy();\n        uploadStatus.destroy();\n        imageScanner = uploader = null;\n      };\n      var replaceBlobUris = function (content) {\n        return content.replace(/src=\"(blob:[^\"]+)\"/g, function (match, blobUri) {\n          var resultUri = uploadStatus.getResultUri(blobUri);\n          if (resultUri) {\n            return 'src=\"' + resultUri + '\"';\n          }\n          var blobInfo = blobCache.getByUri(blobUri);\n          if (!blobInfo) {\n            blobInfo = foldl(editor.editorManager.get(), function (result, editor) {\n              return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n            }, null);\n          }\n          if (blobInfo) {\n            var blob = blobInfo.blob();\n            return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n          }\n          return match;\n        });\n      };\n      editor.on('setContent', function () {\n        if (Settings.isAutomaticUploadsEnabled(editor)) {\n          uploadImagesAuto();\n        } else {\n          scanForImages();\n        }\n      });\n      editor.on('RawSaveContent', function (e) {\n        e.content = replaceBlobUris(e.content);\n      });\n      editor.on('getContent', function (e) {\n        if (e.source_view || e.format === 'raw') {\n          return;\n        }\n        e.content = replaceBlobUris(e.content);\n      });\n      editor.on('PostRender', function () {\n        editor.parser.addNodeFilter('img', function (images) {\n          each(images, function (img) {\n            var src = img.attr('src');\n            if (blobCache.getByUri(src)) {\n              return;\n            }\n            var resultUri = uploadStatus.getResultUri(src);\n            if (resultUri) {\n              img.attr('src', resultUri);\n            }\n          });\n        });\n      });\n      return {\n        blobCache: blobCache,\n        addFilter: addFilter,\n        uploadImages: uploadImages,\n        uploadImagesAuto: uploadImagesAuto,\n        scanForImages: scanForImages,\n        destroy: destroy\n      };\n    }\n\n    var isBlockElement = function (blockElements, node) {\n      return blockElements.hasOwnProperty(node.nodeName);\n    };\n    var isValidTarget = function (blockElements, node) {\n      if (NodeType.isText(node)) {\n        return true;\n      } else if (NodeType.isElement(node)) {\n        return !isBlockElement(blockElements, node) && !Bookmarks.isBookmarkNode(node);\n      } else {\n        return false;\n      }\n    };\n    var hasBlockParent = function (blockElements, root, node) {\n      return exists(Parents.parents(Element.fromDom(node), Element.fromDom(root)), function (elm) {\n        return isBlockElement(blockElements, elm.dom());\n      });\n    };\n    var shouldRemoveTextNode = function (blockElements, node) {\n      if (NodeType.isText(node)) {\n        if (node.nodeValue.length === 0) {\n          return true;\n        } else if (/^\\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) {\n          return true;\n        }\n      }\n      return false;\n    };\n    var addRootBlocks = function (editor) {\n      var settings = editor.settings, dom = editor.dom, selection = editor.selection;\n      var schema = editor.schema, blockElements = schema.getBlockElements();\n      var node = selection.getStart();\n      var rootNode = editor.getBody();\n      var rng;\n      var startContainer, startOffset, endContainer, endOffset, rootBlockNode;\n      var tempNode, wrapped, restoreSelection;\n      var rootNodeName, forcedRootBlock;\n      forcedRootBlock = settings.forced_root_block;\n      if (!node || !NodeType.isElement(node) || !forcedRootBlock) {\n        return;\n      }\n      rootNodeName = rootNode.nodeName.toLowerCase();\n      if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {\n        return;\n      }\n      rng = selection.getRng();\n      startContainer = rng.startContainer;\n      startOffset = rng.startOffset;\n      endContainer = rng.endContainer;\n      endOffset = rng.endOffset;\n      restoreSelection = EditorFocus.hasFocus(editor);\n      node = rootNode.firstChild;\n      while (node) {\n        if (isValidTarget(blockElements, node)) {\n          if (shouldRemoveTextNode(blockElements, node)) {\n            tempNode = node;\n            node = node.nextSibling;\n            dom.remove(tempNode);\n            continue;\n          }\n          if (!rootBlockNode) {\n            rootBlockNode = dom.create(forcedRootBlock, editor.settings.forced_root_block_attrs);\n            node.parentNode.insertBefore(rootBlockNode, node);\n            wrapped = true;\n          }\n          tempNode = node;\n          node = node.nextSibling;\n          rootBlockNode.appendChild(tempNode);\n        } else {\n          rootBlockNode = null;\n          node = node.nextSibling;\n        }\n      }\n      if (wrapped && restoreSelection) {\n        rng.setStart(startContainer, startOffset);\n        rng.setEnd(endContainer, endOffset);\n        selection.setRng(rng);\n        editor.nodeChanged();\n      }\n    };\n    var setup$3 = function (editor) {\n      if (editor.settings.forced_root_block) {\n        editor.on('NodeChange', curry(addRootBlocks, editor));\n      }\n    };\n    var ForceBlocks = { setup: setup$3 };\n\n    var getStartNode = function (rng) {\n      var sc = rng.startContainer, so = rng.startOffset;\n      if (NodeType.isText(sc)) {\n        return so === 0 ? Option.some(Element.fromDom(sc)) : Option.none();\n      } else {\n        return Option.from(sc.childNodes[so]).map(Element.fromDom);\n      }\n    };\n    var getEndNode = function (rng) {\n      var ec = rng.endContainer, eo = rng.endOffset;\n      if (NodeType.isText(ec)) {\n        return eo === ec.data.length ? Option.some(Element.fromDom(ec)) : Option.none();\n      } else {\n        return Option.from(ec.childNodes[eo - 1]).map(Element.fromDom);\n      }\n    };\n    var getFirstChildren = function (node) {\n      return firstChild(node).fold(constant([node]), function (child) {\n        return [node].concat(getFirstChildren(child));\n      });\n    };\n    var getLastChildren$1 = function (node) {\n      return lastChild(node).fold(constant([node]), function (child) {\n        if (name(child) === 'br') {\n          return prevSibling(child).map(function (sibling) {\n            return [node].concat(getLastChildren$1(sibling));\n          }).getOr([]);\n        } else {\n          return [node].concat(getLastChildren$1(child));\n        }\n      });\n    };\n    var hasAllContentsSelected = function (elm, rng) {\n      return lift2(getStartNode(rng), getEndNode(rng), function (startNode, endNode) {\n        var start = find(getFirstChildren(elm), curry(eq, startNode));\n        var end = find(getLastChildren$1(elm), curry(eq, endNode));\n        return start.isSome() && end.isSome();\n      }).getOr(false);\n    };\n    var moveEndPoint$1 = function (dom, rng, node, start) {\n      var root = node, walker = new TreeWalker(node, root);\n      var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n      do {\n        if (node.nodeType === 3 && Tools.trim(node.nodeValue).length !== 0) {\n          if (start) {\n            rng.setStart(node, 0);\n          } else {\n            rng.setEnd(node, node.nodeValue.length);\n          }\n          return;\n        }\n        if (nonEmptyElementsMap[node.nodeName] && !/^(TD|TH)$/.test(node.nodeName)) {\n          if (start) {\n            rng.setStartBefore(node);\n          } else {\n            if (node.nodeName === 'BR') {\n              rng.setEndBefore(node);\n            } else {\n              rng.setEndAfter(node);\n            }\n          }\n          return;\n        }\n        if (Env.ie && Env.ie < 11 && dom.isBlock(node) && dom.isEmpty(node)) {\n          if (start) {\n            rng.setStart(node, 0);\n          } else {\n            rng.setEnd(node, 0);\n          }\n          return;\n        }\n      } while (node = start ? walker.next() : walker.prev());\n      if (root.nodeName === 'BODY') {\n        if (start) {\n          rng.setStart(root, 0);\n        } else {\n          rng.setEnd(root, root.childNodes.length);\n        }\n      }\n    };\n    var hasAnyRanges = function (editor) {\n      var sel = editor.selection.getSel();\n      return sel && sel.rangeCount > 0;\n    };\n\n    function NodeChange (editor) {\n      var lastRng, lastPath = [];\n      var isSameElementPath = function (startElm) {\n        var i, currentPath;\n        currentPath = editor.$(startElm).parentsUntil(editor.getBody()).add(startElm);\n        if (currentPath.length === lastPath.length) {\n          for (i = currentPath.length; i >= 0; i--) {\n            if (currentPath[i] !== lastPath[i]) {\n              break;\n            }\n          }\n          if (i === -1) {\n            lastPath = currentPath;\n            return true;\n          }\n        }\n        lastPath = currentPath;\n        return false;\n      };\n      if (!('onselectionchange' in editor.getDoc())) {\n        editor.on('NodeChange Click MouseUp KeyUp Focus', function (e) {\n          var nativeRng, fakeRng;\n          nativeRng = editor.selection.getRng();\n          fakeRng = {\n            startContainer: nativeRng.startContainer,\n            startOffset: nativeRng.startOffset,\n            endContainer: nativeRng.endContainer,\n            endOffset: nativeRng.endOffset\n          };\n          if (e.type === 'nodechange' || !RangeCompare.isEq(fakeRng, lastRng)) {\n            editor.fire('SelectionChange');\n          }\n          lastRng = fakeRng;\n        });\n      }\n      editor.on('contextmenu', function () {\n        editor.fire('SelectionChange');\n      });\n      editor.on('SelectionChange', function () {\n        var startElm = editor.selection.getStart(true);\n        if (!startElm || !Env.range && editor.selection.isCollapsed()) {\n          return;\n        }\n        if (hasAnyRanges(editor) && !isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\n          editor.nodeChanged({ selectionChange: true });\n        }\n      });\n      editor.on('MouseUp', function (e) {\n        if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n          if (editor.selection.getNode().nodeName === 'IMG') {\n            Delay.setEditorTimeout(editor, function () {\n              editor.nodeChanged();\n            });\n          } else {\n            editor.nodeChanged();\n          }\n        }\n      });\n      this.nodeChanged = function (args) {\n        var selection = editor.selection;\n        var node, parents, root;\n        if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.readonly) {\n          root = editor.getBody();\n          node = selection.getStart(true) || root;\n          if (node.ownerDocument !== editor.getDoc() || !editor.dom.isChildOf(node, root)) {\n            node = root;\n          }\n          parents = [];\n          editor.dom.getParent(node, function (node) {\n            if (node === root) {\n              return true;\n            }\n            parents.push(node);\n          });\n          args = args || {};\n          args.element = node;\n          args.parents = parents;\n          editor.fire('NodeChange', args);\n        }\n      };\n    }\n\n    var VK = {\n      BACKSPACE: 8,\n      DELETE: 46,\n      DOWN: 40,\n      ENTER: 13,\n      LEFT: 37,\n      RIGHT: 39,\n      SPACEBAR: 32,\n      TAB: 9,\n      UP: 38,\n      END: 35,\n      HOME: 36,\n      modifierPressed: function (e) {\n        return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e);\n      },\n      metaKeyPressed: function (e) {\n        return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;\n      }\n    };\n\n    var getNodeClientRects = function (node) {\n      var toArrayWithNode = function (clientRects) {\n        return map(clientRects, function (clientRect) {\n          clientRect = clone$1(clientRect);\n          clientRect.node = node;\n          return clientRect;\n        });\n      };\n      if (NodeType.isElement(node)) {\n        return toArrayWithNode(node.getClientRects());\n      }\n      if (NodeType.isText(node)) {\n        var rng = node.ownerDocument.createRange();\n        rng.setStart(node, 0);\n        rng.setEnd(node, node.data.length);\n        return toArrayWithNode(rng.getClientRects());\n      }\n    };\n    var getClientRects = function (node) {\n      return foldl(node, function (result, node) {\n        return result.concat(getNodeClientRects(node));\n      }, []);\n    };\n\n    var VDirection;\n    (function (VDirection) {\n      VDirection[VDirection['Up'] = -1] = 'Up';\n      VDirection[VDirection['Down'] = 1] = 'Down';\n    }(VDirection || (VDirection = {})));\n    var findUntil = function (direction, root, predicateFn, node) {\n      while (node = findNode(node, direction, isEditableCaretCandidate, root)) {\n        if (predicateFn(node)) {\n          return;\n        }\n      }\n    };\n    var walkUntil = function (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) {\n      var line = 0, node;\n      var result = [];\n      var targetClientRect;\n      var add = function (node) {\n        var i, clientRect, clientRects;\n        clientRects = getClientRects([node]);\n        if (direction === -1) {\n          clientRects = clientRects.reverse();\n        }\n        for (i = 0; i < clientRects.length; i++) {\n          clientRect = clientRects[i];\n          if (isBeflowFn(clientRect, targetClientRect)) {\n            continue;\n          }\n          if (result.length > 0 && isAboveFn(clientRect, ArrUtils.last(result))) {\n            line++;\n          }\n          clientRect.line = line;\n          if (predicateFn(clientRect)) {\n            return true;\n          }\n          result.push(clientRect);\n        }\n      };\n      targetClientRect = ArrUtils.last(caretPosition.getClientRects());\n      if (!targetClientRect) {\n        return result;\n      }\n      node = caretPosition.getNode();\n      add(node);\n      findUntil(direction, root, add, node);\n      return result;\n    };\n    var aboveLineNumber = function (lineNumber, clientRect) {\n      return clientRect.line > lineNumber;\n    };\n    var isLineNumber = function (lineNumber, clientRect) {\n      return clientRect.line === lineNumber;\n    };\n    var upUntil = curry(walkUntil, VDirection.Up, isAbove, isBelow);\n    var downUntil = curry(walkUntil, VDirection.Down, isBelow, isAbove);\n    var positionsUntil = function (direction, root, predicateFn, node) {\n      var caretWalker = CaretWalker(root);\n      var walkFn, isBelowFn, isAboveFn, caretPosition;\n      var result = [];\n      var line = 0, clientRect, targetClientRect;\n      var getClientRect = function (caretPosition) {\n        if (direction === 1) {\n          return ArrUtils.last(caretPosition.getClientRects());\n        }\n        return ArrUtils.last(caretPosition.getClientRects());\n      };\n      if (direction === 1) {\n        walkFn = caretWalker.next;\n        isBelowFn = isBelow;\n        isAboveFn = isAbove;\n        caretPosition = CaretPosition$1.after(node);\n      } else {\n        walkFn = caretWalker.prev;\n        isBelowFn = isAbove;\n        isAboveFn = isBelow;\n        caretPosition = CaretPosition$1.before(node);\n      }\n      targetClientRect = getClientRect(caretPosition);\n      do {\n        if (!caretPosition.isVisible()) {\n          continue;\n        }\n        clientRect = getClientRect(caretPosition);\n        if (isAboveFn(clientRect, targetClientRect)) {\n          continue;\n        }\n        if (result.length > 0 && isBelowFn(clientRect, ArrUtils.last(result))) {\n          line++;\n        }\n        clientRect = clone$1(clientRect);\n        clientRect.position = caretPosition;\n        clientRect.line = line;\n        if (predicateFn(clientRect)) {\n          return result;\n        }\n        result.push(clientRect);\n      } while (caretPosition = walkFn(caretPosition));\n      return result;\n    };\n    var isAboveLine = function (lineNumber) {\n      return function (clientRect) {\n        return aboveLineNumber(lineNumber, clientRect);\n      };\n    };\n    var isLine = function (lineNumber) {\n      return function (clientRect) {\n        return isLineNumber(lineNumber, clientRect);\n      };\n    };\n\n    var isContentEditableFalse$7 = NodeType.isContentEditableFalse;\n    var findNode$1 = findNode;\n    var distanceToRectLeft = function (clientRect, clientX) {\n      return Math.abs(clientRect.left - clientX);\n    };\n    var distanceToRectRight = function (clientRect, clientX) {\n      return Math.abs(clientRect.right - clientX);\n    };\n    var isInside = function (clientX, clientRect) {\n      return clientX >= clientRect.left && clientX <= clientRect.right;\n    };\n    var findClosestClientRect = function (clientRects, clientX) {\n      return ArrUtils.reduce(clientRects, function (oldClientRect, clientRect) {\n        var oldDistance, newDistance;\n        oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));\n        newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));\n        if (isInside(clientX, clientRect)) {\n          return clientRect;\n        }\n        if (isInside(clientX, oldClientRect)) {\n          return oldClientRect;\n        }\n        if (newDistance === oldDistance && isContentEditableFalse$7(clientRect.node)) {\n          return clientRect;\n        }\n        if (newDistance < oldDistance) {\n          return clientRect;\n        }\n        return oldClientRect;\n      });\n    };\n    var walkUntil$1 = function (direction, root, predicateFn, node) {\n      while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) {\n        if (predicateFn(node)) {\n          return;\n        }\n      }\n    };\n    var findLineNodeRects = function (root, targetNodeRect) {\n      var clientRects = [];\n      var collect = function (checkPosFn, node) {\n        var lineRects;\n        lineRects = filter(getClientRects([node]), function (clientRect) {\n          return !checkPosFn(clientRect, targetNodeRect);\n        });\n        clientRects = clientRects.concat(lineRects);\n        return lineRects.length === 0;\n      };\n      clientRects.push(targetNodeRect);\n      walkUntil$1(VDirection.Up, root, curry(collect, isAbove), targetNodeRect.node);\n      walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node);\n      return clientRects;\n    };\n    var getFakeCaretTargets = function (root) {\n      return filter(from$1(root.getElementsByTagName('*')), isFakeCaretTarget);\n    };\n    var caretInfo = function (clientRect, clientX) {\n      return {\n        node: clientRect.node,\n        before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)\n      };\n    };\n    var closestCaret = function (root, clientX, clientY) {\n      var closestNodeRect;\n      var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root));\n      var targetNodeRects = filter(contentEditableFalseNodeRects, function (rect) {\n        return clientY >= rect.top && clientY <= rect.bottom;\n      });\n      closestNodeRect = findClosestClientRect(targetNodeRects, clientX);\n      if (closestNodeRect) {\n        closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX);\n        if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {\n          return caretInfo(closestNodeRect, clientX);\n        }\n      }\n      return null;\n    };\n\n    var isXYWithinRange = function (clientX, clientY, range) {\n      if (range.collapsed) {\n        return false;\n      }\n      if (Env.ie && Env.ie <= 11 && range.startOffset === range.endOffset - 1 && range.startContainer === range.endContainer) {\n        var elm = range.startContainer.childNodes[range.startOffset];\n        if (NodeType.isElement(elm)) {\n          return exists(elm.getClientRects(), function (rect) {\n            return containsXY(rect, clientX, clientY);\n          });\n        }\n      }\n      return exists(range.getClientRects(), function (rect) {\n        return containsXY(rect, clientX, clientY);\n      });\n    };\n    var RangePoint = { isXYWithinRange: isXYWithinRange };\n\n    var getAbsolutePosition = function (elm) {\n      var doc, docElem, win, clientRect;\n      clientRect = elm.getBoundingClientRect();\n      doc = elm.ownerDocument;\n      docElem = doc.documentElement;\n      win = doc.defaultView;\n      return {\n        top: clientRect.top + win.pageYOffset - docElem.clientTop,\n        left: clientRect.left + win.pageXOffset - docElem.clientLeft\n      };\n    };\n    var getBodyPosition = function (editor) {\n      return editor.inline ? getAbsolutePosition(editor.getBody()) : {\n        left: 0,\n        top: 0\n      };\n    };\n    var getScrollPosition = function (editor) {\n      var body = editor.getBody();\n      return editor.inline ? {\n        left: body.scrollLeft,\n        top: body.scrollTop\n      } : {\n        left: 0,\n        top: 0\n      };\n    };\n    var getBodyScroll = function (editor) {\n      var body = editor.getBody(), docElm = editor.getDoc().documentElement;\n      var inlineScroll = {\n        left: body.scrollLeft,\n        top: body.scrollTop\n      };\n      var iframeScroll = {\n        left: body.scrollLeft || docElm.scrollLeft,\n        top: body.scrollTop || docElm.scrollTop\n      };\n      return editor.inline ? inlineScroll : iframeScroll;\n    };\n    var getMousePosition = function (editor, event) {\n      if (event.target.ownerDocument !== editor.getDoc()) {\n        var iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n        var scrollPosition = getBodyScroll(editor);\n        return {\n          left: event.pageX - iframePosition.left + scrollPosition.left,\n          top: event.pageY - iframePosition.top + scrollPosition.top\n        };\n      }\n      return {\n        left: event.pageX,\n        top: event.pageY\n      };\n    };\n    var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) {\n      return {\n        pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n        pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n      };\n    };\n    var calc = function (editor, event) {\n      return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n    };\n    var MousePosition = { calc: calc };\n\n    var isContentEditableFalse$8 = NodeType.isContentEditableFalse, isContentEditableTrue$3 = NodeType.isContentEditableTrue;\n    var isDraggable = function (rootElm, elm) {\n      return isContentEditableFalse$8(elm) && elm !== rootElm;\n    };\n    var isValidDropTarget = function (editor, targetElement, dragElement) {\n      if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n        return false;\n      }\n      if (isContentEditableFalse$8(targetElement)) {\n        return false;\n      }\n      return true;\n    };\n    var cloneElement = function (elm) {\n      var cloneElm = elm.cloneNode(true);\n      cloneElm.removeAttribute('data-mce-selected');\n      return cloneElm;\n    };\n    var createGhost = function (editor, elm, width, height) {\n      var clonedElm = elm.cloneNode(true);\n      editor.dom.setStyles(clonedElm, {\n        width: width,\n        height: height\n      });\n      editor.dom.setAttrib(clonedElm, 'data-mce-selected', null);\n      var ghostElm = editor.dom.create('div', {\n        'class': 'mce-drag-container',\n        'data-mce-bogus': 'all',\n        'unselectable': 'on',\n        'contenteditable': 'false'\n      });\n      editor.dom.setStyles(ghostElm, {\n        position: 'absolute',\n        opacity: 0.5,\n        overflow: 'hidden',\n        border: 0,\n        padding: 0,\n        margin: 0,\n        width: width,\n        height: height\n      });\n      editor.dom.setStyles(clonedElm, {\n        margin: 0,\n        boxSizing: 'border-box'\n      });\n      ghostElm.appendChild(clonedElm);\n      return ghostElm;\n    };\n    var appendGhostToBody = function (ghostElm, bodyElm) {\n      if (ghostElm.parentNode !== bodyElm) {\n        bodyElm.appendChild(ghostElm);\n      }\n    };\n    var moveGhost = function (ghostElm, position, width, height, maxX, maxY) {\n      var overflowX = 0, overflowY = 0;\n      ghostElm.style.left = position.pageX + 'px';\n      ghostElm.style.top = position.pageY + 'px';\n      if (position.pageX + width > maxX) {\n        overflowX = position.pageX + width - maxX;\n      }\n      if (position.pageY + height > maxY) {\n        overflowY = position.pageY + height - maxY;\n      }\n      ghostElm.style.width = width - overflowX + 'px';\n      ghostElm.style.height = height - overflowY + 'px';\n    };\n    var removeElement = function (elm) {\n      if (elm && elm.parentNode) {\n        elm.parentNode.removeChild(elm);\n      }\n    };\n    var isLeftMouseButtonPressed = function (e) {\n      return e.button === 0;\n    };\n    var hasDraggableElement = function (state) {\n      return state.element;\n    };\n    var applyRelPos = function (state, position) {\n      return {\n        pageX: position.pageX - state.relX,\n        pageY: position.pageY + 5\n      };\n    };\n    var start$1 = function (state, editor) {\n      return function (e) {\n        if (isLeftMouseButtonPressed(e)) {\n          var ceElm = find(editor.dom.getParents(e.target), Predicate.or(isContentEditableFalse$8, isContentEditableTrue$3)).getOr(null);\n          if (isDraggable(editor.getBody(), ceElm)) {\n            var elmPos = editor.dom.getPos(ceElm);\n            var bodyElm = editor.getBody();\n            var docElm = editor.getDoc().documentElement;\n            state.element = ceElm;\n            state.screenX = e.screenX;\n            state.screenY = e.screenY;\n            state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2;\n            state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2;\n            state.relX = e.pageX - elmPos.x;\n            state.relY = e.pageY - elmPos.y;\n            state.width = ceElm.offsetWidth;\n            state.height = ceElm.offsetHeight;\n            state.ghost = createGhost(editor, ceElm, state.width, state.height);\n          }\n        }\n      };\n    };\n    var move$1 = function (state, editor) {\n      var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {\n        editor._selectionOverrides.hideFakeCaret();\n        editor.selection.placeCaretAt(clientX, clientY);\n      }, 0);\n      return function (e) {\n        var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n        if (hasDraggableElement(state) && !state.dragging && movement > 10) {\n          var args = editor.fire('dragstart', { target: state.element });\n          if (args.isDefaultPrevented()) {\n            return;\n          }\n          state.dragging = true;\n          editor.focus();\n        }\n        if (state.dragging) {\n          var targetPos = applyRelPos(state, MousePosition.calc(editor, e));\n          appendGhostToBody(state.ghost, editor.getBody());\n          moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY);\n          throttledPlaceCaretAt(e.clientX, e.clientY);\n        }\n      };\n    };\n    var getRawTarget = function (selection) {\n      var rng = selection.getSel().getRangeAt(0);\n      var startContainer = rng.startContainer;\n      return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;\n    };\n    var drop = function (state, editor) {\n      return function (e) {\n        if (state.dragging) {\n          if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n            var targetClone_1 = cloneElement(state.element);\n            var args = editor.fire('drop', {\n              targetClone: targetClone_1,\n              clientX: e.clientX,\n              clientY: e.clientY\n            });\n            if (!args.isDefaultPrevented()) {\n              targetClone_1 = args.targetClone;\n              editor.undoManager.transact(function () {\n                removeElement(state.element);\n                editor.insertContent(editor.dom.getOuterHTML(targetClone_1));\n                editor._selectionOverrides.hideFakeCaret();\n              });\n            }\n          }\n        }\n        removeDragState(state);\n      };\n    };\n    var stop = function (state, editor) {\n      return function () {\n        if (state.dragging) {\n          editor.fire('dragend');\n        }\n        removeDragState(state);\n      };\n    };\n    var removeDragState = function (state) {\n      state.dragging = false;\n      state.element = null;\n      removeElement(state.ghost);\n    };\n    var bindFakeDragEvents = function (editor) {\n      var state = {};\n      var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument;\n      pageDom = DOMUtils$1.DOM;\n      rootDocument = domGlobals.document;\n      dragStartHandler = start$1(state, editor);\n      dragHandler = move$1(state, editor);\n      dropHandler = drop(state, editor);\n      dragEndHandler = stop(state, editor);\n      editor.on('mousedown', dragStartHandler);\n      editor.on('mousemove', dragHandler);\n      editor.on('mouseup', dropHandler);\n      pageDom.bind(rootDocument, 'mousemove', dragHandler);\n      pageDom.bind(rootDocument, 'mouseup', dragEndHandler);\n      editor.on('remove', function () {\n        pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n        pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n      });\n    };\n    var blockIeDrop = function (editor) {\n      editor.on('drop', function (e) {\n        var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null;\n        if (isContentEditableFalse$8(realTarget) || isContentEditableFalse$8(editor.dom.getContentEditableParent(realTarget))) {\n          e.preventDefault();\n        }\n      });\n    };\n    var init = function (editor) {\n      bindFakeDragEvents(editor);\n      blockIeDrop(editor);\n    };\n    var DragDropOverrides = { init: init };\n\n    var setup$4 = function (editor) {\n      var renderFocusCaret = first(function () {\n        if (!editor.removed) {\n          var rng = editor.selection.getRng();\n          if (rng.collapsed) {\n            var caretRange = renderRangeCaret(editor, editor.selection.getRng(), false);\n            editor.selection.setRng(caretRange);\n          }\n        }\n      }, 0);\n      editor.on('focus', function () {\n        renderFocusCaret.throttle();\n      });\n      editor.on('blur', function () {\n        renderFocusCaret.cancel();\n      });\n    };\n    var CefFocus = { setup: setup$4 };\n\n    var isContentEditableTrue$4 = NodeType.isContentEditableTrue;\n    var isContentEditableFalse$9 = NodeType.isContentEditableFalse;\n    var getContentEditableRoot$1 = function (editor, node) {\n      var root = editor.getBody();\n      while (node && node !== root) {\n        if (isContentEditableTrue$4(node) || isContentEditableFalse$9(node)) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    var SelectionOverrides = function (editor) {\n      var isBlock = function (node) {\n        return editor.dom.isBlock(node);\n      };\n      var rootNode = editor.getBody();\n      var fakeCaret = FakeCaret(editor.getBody(), isBlock, function () {\n        return EditorFocus.hasFocus(editor);\n      });\n      var realSelectionId = 'sel-' + editor.dom.uniqueId();\n      var selectedContentEditableNode;\n      var isFakeSelectionElement = function (elm) {\n        return editor.dom.hasClass(elm, 'mce-offscreen-selection');\n      };\n      var getRealSelectionElement = function () {\n        var container = editor.dom.get(realSelectionId);\n        return container ? container.getElementsByTagName('*')[0] : container;\n      };\n      var setRange = function (range) {\n        if (range) {\n          editor.selection.setRng(range);\n        }\n      };\n      var getRange = function () {\n        return editor.selection.getRng();\n      };\n      var showCaret = function (direction, node, before, scrollIntoView) {\n        if (scrollIntoView === void 0) {\n          scrollIntoView = true;\n        }\n        var e;\n        e = editor.fire('ShowCaret', {\n          target: node,\n          direction: direction,\n          before: before\n        });\n        if (e.isDefaultPrevented()) {\n          return null;\n        }\n        if (scrollIntoView) {\n          editor.selection.scrollIntoView(node, direction === -1);\n        }\n        return fakeCaret.show(before, node);\n      };\n      var getNormalizedRangeEndPoint = function (direction, range) {\n        range = normalizeRange(direction, rootNode, range);\n        if (direction === -1) {\n          return CaretPosition$1.fromRangeStart(range);\n        }\n        return CaretPosition$1.fromRangeEnd(range);\n      };\n      var showBlockCaretContainer = function (blockCaretContainer) {\n        if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n          showCaretContainerBlock(blockCaretContainer);\n          setRange(getRange());\n          editor.selection.scrollIntoView(blockCaretContainer[0]);\n        }\n      };\n      var registerEvents = function () {\n        editor.on('mouseup', function (e) {\n          var range = getRange();\n          if (range.collapsed && EditorView.isXYInContentArea(editor, e.clientX, e.clientY)) {\n            setRange(renderCaretAtRange(editor, range, false));\n          }\n        });\n        editor.on('click', function (e) {\n          var contentEditableRoot;\n          contentEditableRoot = getContentEditableRoot$1(editor, e.target);\n          if (contentEditableRoot) {\n            if (isContentEditableFalse$9(contentEditableRoot)) {\n              e.preventDefault();\n              editor.focus();\n            }\n            if (isContentEditableTrue$4(contentEditableRoot)) {\n              if (editor.dom.isChildOf(contentEditableRoot, editor.selection.getNode())) {\n                removeContentEditableSelection();\n              }\n            }\n          }\n        });\n        editor.on('blur NewBlock', function () {\n          removeContentEditableSelection();\n        });\n        editor.on('ResizeWindow FullscreenStateChanged', function () {\n          return fakeCaret.reposition();\n        });\n        var handleTouchSelect = function (editor) {\n          var moved = false;\n          editor.on('touchstart', function () {\n            moved = false;\n          });\n          editor.on('touchmove', function () {\n            moved = true;\n          });\n          editor.on('touchend', function (e) {\n            var contentEditableRoot = getContentEditableRoot$1(editor, e.target);\n            if (isContentEditableFalse$9(contentEditableRoot)) {\n              if (!moved) {\n                e.preventDefault();\n                setContentEditableSelection(selectNode(editor, contentEditableRoot));\n              }\n            }\n          });\n        };\n        var hasNormalCaretPosition = function (elm) {\n          var caretWalker = CaretWalker(elm);\n          if (!elm.firstChild) {\n            return false;\n          }\n          var startPos = CaretPosition$1.before(elm.firstChild);\n          var newPos = caretWalker.next(startPos);\n          return newPos && !isBeforeContentEditableFalse(newPos) && !isAfterContentEditableFalse(newPos);\n        };\n        var isInSameBlock = function (node1, node2) {\n          var block1 = editor.dom.getParent(node1, editor.dom.isBlock);\n          var block2 = editor.dom.getParent(node2, editor.dom.isBlock);\n          return block1 === block2;\n        };\n        var hasBetterMouseTarget = function (targetNode, caretNode) {\n          var targetBlock = editor.dom.getParent(targetNode, editor.dom.isBlock);\n          var caretBlock = editor.dom.getParent(caretNode, editor.dom.isBlock);\n          if (targetBlock && editor.dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$9(getContentEditableRoot$1(editor, targetBlock)) === false) {\n            return true;\n          }\n          return targetBlock && !isInSameBlock(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);\n        };\n        handleTouchSelect(editor);\n        editor.on('mousedown', function (e) {\n          var contentEditableRoot;\n          var targetElm = e.target;\n          if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !editor.dom.isChildOf(targetElm, rootNode)) {\n            return;\n          }\n          if (EditorView.isXYInContentArea(editor, e.clientX, e.clientY) === false) {\n            return;\n          }\n          contentEditableRoot = getContentEditableRoot$1(editor, targetElm);\n          if (contentEditableRoot) {\n            if (isContentEditableFalse$9(contentEditableRoot)) {\n              e.preventDefault();\n              setContentEditableSelection(selectNode(editor, contentEditableRoot));\n            } else {\n              removeContentEditableSelection();\n              if (!(isContentEditableTrue$4(contentEditableRoot) && e.shiftKey) && !RangePoint.isXYWithinRange(e.clientX, e.clientY, editor.selection.getRng())) {\n                hideFakeCaret();\n                editor.selection.placeCaretAt(e.clientX, e.clientY);\n              }\n            }\n          } else if (isFakeCaretTarget(targetElm) === false) {\n            removeContentEditableSelection();\n            hideFakeCaret();\n            var caretInfo = closestCaret(rootNode, e.clientX, e.clientY);\n            if (caretInfo) {\n              if (!hasBetterMouseTarget(e.target, caretInfo.node)) {\n                e.preventDefault();\n                var range = showCaret(1, caretInfo.node, caretInfo.before, false);\n                editor.getBody().focus();\n                setRange(range);\n              }\n            }\n          }\n        });\n        editor.on('keypress', function (e) {\n          if (VK.modifierPressed(e)) {\n            return;\n          }\n          switch (e.keyCode) {\n          default:\n            if (isContentEditableFalse$9(editor.selection.getNode())) {\n              e.preventDefault();\n            }\n            break;\n          }\n        });\n        editor.on('getSelectionRange', function (e) {\n          var rng = e.range;\n          if (selectedContentEditableNode) {\n            if (!selectedContentEditableNode.parentNode) {\n              selectedContentEditableNode = null;\n              return;\n            }\n            rng = rng.cloneRange();\n            rng.selectNode(selectedContentEditableNode);\n            e.range = rng;\n          }\n        });\n        editor.on('setSelectionRange', function (e) {\n          e.range = normalizeShortEndedElementSelection(e.range);\n          var rng = setContentEditableSelection(e.range, e.forward);\n          if (rng) {\n            e.range = rng;\n          }\n        });\n        var isPasteBin = function (node) {\n          return node.id === 'mcepastebin';\n        };\n        editor.on('AfterSetSelectionRange', function (e) {\n          var rng = e.range;\n          if (!isRangeInCaretContainer(rng) && !isPasteBin(rng.startContainer.parentNode)) {\n            hideFakeCaret();\n          }\n          if (!isFakeSelectionElement(rng.startContainer.parentNode)) {\n            removeContentEditableSelection();\n          }\n        });\n        editor.on('copy', function (e) {\n          var clipboardData = e.clipboardData;\n          if (!e.isDefaultPrevented() && e.clipboardData && !Env.ie) {\n            var realSelectionElement = getRealSelectionElement();\n            if (realSelectionElement) {\n              e.preventDefault();\n              clipboardData.clearData();\n              clipboardData.setData('text/html', realSelectionElement.outerHTML);\n              clipboardData.setData('text/plain', realSelectionElement.outerText);\n            }\n          }\n        });\n        DragDropOverrides.init(editor);\n        CefFocus.setup(editor);\n      };\n      var addCss = function () {\n        var styles = editor.contentStyles, rootClass = '.mce-content-body';\n        styles.push(fakeCaret.getCss());\n        styles.push(rootClass + ' .mce-offscreen-selection {' + 'position: absolute;' + 'left: -9999999999px;' + 'max-width: 1000000px;' + '}' + rootClass + ' *[contentEditable=false] {' + 'cursor: default;' + '}' + rootClass + ' *[contentEditable=true] {' + 'cursor: text;' + '}');\n      };\n      var isWithinCaretContainer = function (node) {\n        return isCaretContainer(node) || startsWithCaretContainer(node) || endsWithCaretContainer(node);\n      };\n      var isRangeInCaretContainer = function (rng) {\n        return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n      };\n      var normalizeShortEndedElementSelection = function (rng) {\n        var shortEndedElements = editor.schema.getShortEndedElements();\n        var newRng = editor.dom.createRng();\n        var startContainer = rng.startContainer;\n        var startOffset = rng.startOffset;\n        var endContainer = rng.endContainer;\n        var endOffset = rng.endOffset;\n        if (has(shortEndedElements, startContainer.nodeName.toLowerCase())) {\n          if (startOffset === 0) {\n            newRng.setStartBefore(startContainer);\n          } else {\n            newRng.setStartAfter(startContainer);\n          }\n        } else {\n          newRng.setStart(startContainer, startOffset);\n        }\n        if (has(shortEndedElements, endContainer.nodeName.toLowerCase())) {\n          if (endOffset === 0) {\n            newRng.setEndBefore(endContainer);\n          } else {\n            newRng.setEndAfter(endContainer);\n          }\n        } else {\n          newRng.setEnd(endContainer, endOffset);\n        }\n        return newRng;\n      };\n      var setContentEditableSelection = function (range, forward) {\n        var node;\n        var $ = editor.$;\n        var dom = editor.dom;\n        var $realSelectionContainer, sel, startContainer, startOffset, endOffset, e, caretPosition, targetClone, origTargetClone;\n        if (!range) {\n          return null;\n        }\n        if (range.collapsed) {\n          if (!isRangeInCaretContainer(range)) {\n            if (forward === false) {\n              caretPosition = getNormalizedRangeEndPoint(-1, range);\n              if (isFakeCaretTarget(caretPosition.getNode(true))) {\n                return showCaret(-1, caretPosition.getNode(true), false, false);\n              }\n              if (isFakeCaretTarget(caretPosition.getNode())) {\n                return showCaret(-1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);\n              }\n            } else {\n              caretPosition = getNormalizedRangeEndPoint(1, range);\n              if (isFakeCaretTarget(caretPosition.getNode())) {\n                return showCaret(1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);\n              }\n              if (isFakeCaretTarget(caretPosition.getNode(true))) {\n                return showCaret(1, caretPosition.getNode(true), false, false);\n              }\n            }\n          }\n          return null;\n        }\n        startContainer = range.startContainer;\n        startOffset = range.startOffset;\n        endOffset = range.endOffset;\n        if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$9(startContainer.parentNode)) {\n          startContainer = startContainer.parentNode;\n          startOffset = dom.nodeIndex(startContainer);\n          startContainer = startContainer.parentNode;\n        }\n        if (startContainer.nodeType !== 1) {\n          return null;\n        }\n        if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n          node = startContainer.childNodes[startOffset];\n        }\n        if (!isContentEditableFalse$9(node)) {\n          return null;\n        }\n        targetClone = origTargetClone = node.cloneNode(true);\n        e = editor.fire('ObjectSelected', {\n          target: node,\n          targetClone: targetClone\n        });\n        if (e.isDefaultPrevented()) {\n          return null;\n        }\n        $realSelectionContainer = descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {\n          return $([]);\n        }, function (elm) {\n          return $([elm.dom()]);\n        });\n        targetClone = e.targetClone;\n        if ($realSelectionContainer.length === 0) {\n          $realSelectionContainer = $('<div data-mce-bogus=\"all\" class=\"mce-offscreen-selection\"></div>').attr('id', realSelectionId);\n          $realSelectionContainer.appendTo(editor.getBody());\n        }\n        range = editor.dom.createRng();\n        if (targetClone === origTargetClone && Env.ie) {\n          $realSelectionContainer.empty().append('<p style=\"font-size: 0\" data-mce-bogus=\"all\">\\xA0</p>').append(targetClone);\n          range.setStartAfter($realSelectionContainer[0].firstChild.firstChild);\n          range.setEndAfter(targetClone);\n        } else {\n          $realSelectionContainer.empty().append('\\xA0').append(targetClone).append('\\xA0');\n          range.setStart($realSelectionContainer[0].firstChild, 1);\n          range.setEnd($realSelectionContainer[0].lastChild, 0);\n        }\n        $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });\n        $realSelectionContainer[0].focus();\n        sel = editor.selection.getSel();\n        sel.removeAllRanges();\n        sel.addRange(range);\n        each(descendants$1(Element.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {\n          remove(elm, 'data-mce-selected');\n        });\n        node.setAttribute('data-mce-selected', '1');\n        selectedContentEditableNode = node;\n        hideFakeCaret();\n        return range;\n      };\n      var removeContentEditableSelection = function () {\n        if (selectedContentEditableNode) {\n          selectedContentEditableNode.removeAttribute('data-mce-selected');\n          descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$1);\n          selectedContentEditableNode = null;\n        }\n        descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$1);\n        selectedContentEditableNode = null;\n      };\n      var destroy = function () {\n        fakeCaret.destroy();\n        selectedContentEditableNode = null;\n      };\n      var hideFakeCaret = function () {\n        fakeCaret.hide();\n      };\n      if (Env.ceFalse) {\n        registerEvents();\n        addCss();\n      }\n      return {\n        showCaret: showCaret,\n        showBlockCaretContainer: showBlockCaretContainer,\n        hideFakeCaret: hideFakeCaret,\n        destroy: destroy\n      };\n    };\n\n    var isValidPrefixAttrName = function (name) {\n      return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;\n    };\n    var trimComments = function (text) {\n      var sanitizedText = text;\n      while (/<!--|--!?>/g.test(sanitizedText)) {\n        sanitizedText = sanitizedText.replace(/<!--|--!?>/g, '');\n      }\n      return sanitizedText;\n    };\n    var isInvalidUri = function (settings, uri) {\n      if (settings.allow_html_data_urls) {\n        return false;\n      } else if (/^data:image\\//i.test(uri)) {\n        return settings.allow_svg_data_urls === false && /^data:image\\/svg\\+xml/i.test(uri);\n      } else {\n        return /^data:/i.test(uri);\n      }\n    };\n    var findEndTagIndex = function (schema, html, startIndex) {\n      var count = 1, index, matches, tokenRegExp, shortEndedElements;\n      shortEndedElements = schema.getShortEndedElements();\n      tokenRegExp = /<([!?\\/])?([A-Za-z0-9\\-_\\:\\.]+)((?:\\s+[^\"\\'>]+(?:(?:\"[^\"]*\")|(?:\\'[^\\']*\\')|[^>]*))*|\\/|\\s+)>/g;\n      tokenRegExp.lastIndex = index = startIndex;\n      while (matches = tokenRegExp.exec(html)) {\n        index = tokenRegExp.lastIndex;\n        if (matches[1] === '/') {\n          count--;\n        } else if (!matches[1]) {\n          if (matches[2] in shortEndedElements) {\n            continue;\n          }\n          count++;\n        }\n        if (count === 0) {\n          break;\n        }\n      }\n      return index;\n    };\n    var checkBogusAttribute = function (regExp, attrString) {\n      var matches = regExp.exec(attrString);\n      if (matches) {\n        var name = matches[1];\n        var value = matches[2];\n        return typeof name === 'string' && name.toLowerCase() === 'data-mce-bogus' ? value : null;\n      } else {\n        return null;\n      }\n    };\n    function SaxParser(settings, schema) {\n      if (schema === void 0) {\n        schema = Schema();\n      }\n      var noop = function () {\n      };\n      settings = settings || {};\n      if (settings.fix_self_closing !== false) {\n        settings.fix_self_closing = true;\n      }\n      var comment = settings.comment ? settings.comment : noop;\n      var cdata = settings.cdata ? settings.cdata : noop;\n      var text = settings.text ? settings.text : noop;\n      var start = settings.start ? settings.start : noop;\n      var end = settings.end ? settings.end : noop;\n      var pi = settings.pi ? settings.pi : noop;\n      var doctype = settings.doctype ? settings.doctype : noop;\n      var parse = function (html) {\n        var matches, index = 0, value, endRegExp;\n        var stack = [];\n        var attrList, i, textData, name;\n        var isInternalElement, removeInternalElements, shortEndedElements, fillAttrsMap, isShortEnded;\n        var validate, elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;\n        var attributesRequired, attributesDefault, attributesForced, processHtml;\n        var anyAttributesRequired, selfClosing, tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0;\n        var decode = Entities.decode;\n        var fixSelfClosing;\n        var filteredUrlAttrs = Tools.makeMap('src,href,data,background,formaction,poster,xlink:href');\n        var scriptUriRegExp = /((java|vb)script|mhtml):/i;\n        var processEndTag = function (name) {\n          var pos, i;\n          pos = stack.length;\n          while (pos--) {\n            if (stack[pos].name === name) {\n              break;\n            }\n          }\n          if (pos >= 0) {\n            for (i = stack.length - 1; i >= pos; i--) {\n              name = stack[i];\n              if (name.valid) {\n                end(name.name);\n              }\n            }\n            stack.length = pos;\n          }\n        };\n        var parseAttribute = function (match, name, value, val2, val3) {\n          var attrRule, i;\n          var trimRegExp = /[\\s\\u0000-\\u001F]+/g;\n          name = name.toLowerCase();\n          value = name in fillAttrsMap ? name : decode(value || val2 || val3 || '');\n          if (validate && !isInternalElement && isValidPrefixAttrName(name) === false) {\n            attrRule = validAttributesMap[name];\n            if (!attrRule && validAttributePatterns) {\n              i = validAttributePatterns.length;\n              while (i--) {\n                attrRule = validAttributePatterns[i];\n                if (attrRule.pattern.test(name)) {\n                  break;\n                }\n              }\n              if (i === -1) {\n                attrRule = null;\n              }\n            }\n            if (!attrRule) {\n              return;\n            }\n            if (attrRule.validValues && !(value in attrRule.validValues)) {\n              return;\n            }\n          }\n          if (filteredUrlAttrs[name] && !settings.allow_script_urls) {\n            var uri = value.replace(trimRegExp, '');\n            try {\n              uri = decodeURIComponent(uri);\n            } catch (ex) {\n              uri = unescape(uri);\n            }\n            if (scriptUriRegExp.test(uri)) {\n              return;\n            }\n            if (isInvalidUri(settings, uri)) {\n              return;\n            }\n          }\n          if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) {\n            return;\n          }\n          attrList.map[name] = value;\n          attrList.push({\n            name: name,\n            value: value\n          });\n        };\n        tokenRegExp = new RegExp('<(?:' + '(?:!--([\\\\w\\\\W]*?)--!?>)|' + '(?:!\\\\[CDATA\\\\[([\\\\w\\\\W]*?)\\\\]\\\\]>)|' + '(?:!DOCTYPE([\\\\w\\\\W]*?)>)|' + '(?:\\\\?([^\\\\s\\\\/<>]+) ?([\\\\w\\\\W]*?)[?/]>)|' + '(?:\\\\/([A-Za-z][A-Za-z0-9\\\\-_\\\\:\\\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\\\-_\\\\:\\\\.]*)((?:\\\\s+[^\"\\'>]+(?:(?:\"[^\"]*\")|(?:\\'[^\\']*\\')|[^>]*))*|\\\\/|\\\\s+)>)' + ')', 'g');\n        attrRegExp = /([\\w:\\-]+)(?:\\s*=\\s*(?:(?:\\\"((?:[^\\\"])*)\\\")|(?:\\'((?:[^\\'])*)\\')|([^>\\s]+)))?/g;\n        shortEndedElements = schema.getShortEndedElements();\n        selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();\n        fillAttrsMap = schema.getBoolAttrs();\n        validate = settings.validate;\n        removeInternalElements = settings.remove_internals;\n        fixSelfClosing = settings.fix_self_closing;\n        specialElements = schema.getSpecialElements();\n        processHtml = html + '>';\n        while (matches = tokenRegExp.exec(processHtml)) {\n          if (index < matches.index) {\n            text(decode(html.substr(index, matches.index - index)));\n          }\n          if (value = matches[6]) {\n            value = value.toLowerCase();\n            if (value.charAt(0) === ':') {\n              value = value.substr(1);\n            }\n            processEndTag(value);\n          } else if (value = matches[7]) {\n            if (matches.index + matches[0].length > html.length) {\n              text(decode(html.substr(matches.index)));\n              index = matches.index + matches[0].length;\n              continue;\n            }\n            value = value.toLowerCase();\n            if (value.charAt(0) === ':') {\n              value = value.substr(1);\n            }\n            isShortEnded = value in shortEndedElements;\n            if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) {\n              processEndTag(value);\n            }\n            var bogusValue = checkBogusAttribute(attrRegExp, matches[8]);\n            if (bogusValue !== null) {\n              if (bogusValue === 'all') {\n                index = findEndTagIndex(schema, html, tokenRegExp.lastIndex);\n                tokenRegExp.lastIndex = index;\n                continue;\n              }\n              isValidElement = false;\n            }\n            if (!validate || (elementRule = schema.getElementRule(value))) {\n              isValidElement = true;\n              if (validate) {\n                validAttributesMap = elementRule.attributes;\n                validAttributePatterns = elementRule.attributePatterns;\n              }\n              if (attribsValue = matches[8]) {\n                isInternalElement = attribsValue.indexOf('data-mce-type') !== -1;\n                if (isInternalElement && removeInternalElements) {\n                  isValidElement = false;\n                }\n                attrList = [];\n                attrList.map = {};\n                attribsValue.replace(attrRegExp, parseAttribute);\n              } else {\n                attrList = [];\n                attrList.map = {};\n              }\n              if (validate && !isInternalElement) {\n                attributesRequired = elementRule.attributesRequired;\n                attributesDefault = elementRule.attributesDefault;\n                attributesForced = elementRule.attributesForced;\n                anyAttributesRequired = elementRule.removeEmptyAttrs;\n                if (anyAttributesRequired && !attrList.length) {\n                  isValidElement = false;\n                }\n                if (attributesForced) {\n                  i = attributesForced.length;\n                  while (i--) {\n                    attr = attributesForced[i];\n                    name = attr.name;\n                    attrValue = attr.value;\n                    if (attrValue === '{$uid}') {\n                      attrValue = 'mce_' + idCount++;\n                    }\n                    attrList.map[name] = attrValue;\n                    attrList.push({\n                      name: name,\n                      value: attrValue\n                    });\n                  }\n                }\n                if (attributesDefault) {\n                  i = attributesDefault.length;\n                  while (i--) {\n                    attr = attributesDefault[i];\n                    name = attr.name;\n                    if (!(name in attrList.map)) {\n                      attrValue = attr.value;\n                      if (attrValue === '{$uid}') {\n                        attrValue = 'mce_' + idCount++;\n                      }\n                      attrList.map[name] = attrValue;\n                      attrList.push({\n                        name: name,\n                        value: attrValue\n                      });\n                    }\n                  }\n                }\n                if (attributesRequired) {\n                  i = attributesRequired.length;\n                  while (i--) {\n                    if (attributesRequired[i] in attrList.map) {\n                      break;\n                    }\n                  }\n                  if (i === -1) {\n                    isValidElement = false;\n                  }\n                }\n                if (attr = attrList.map['data-mce-bogus']) {\n                  if (attr === 'all') {\n                    index = findEndTagIndex(schema, html, tokenRegExp.lastIndex);\n                    tokenRegExp.lastIndex = index;\n                    continue;\n                  }\n                  isValidElement = false;\n                }\n              }\n              if (isValidElement) {\n                start(value, attrList, isShortEnded);\n              }\n            } else {\n              isValidElement = false;\n            }\n            if (endRegExp = specialElements[value]) {\n              endRegExp.lastIndex = index = matches.index + matches[0].length;\n              if (matches = endRegExp.exec(html)) {\n                if (isValidElement) {\n                  textData = html.substr(index, matches.index - index);\n                }\n                index = matches.index + matches[0].length;\n              } else {\n                textData = html.substr(index);\n                index = html.length;\n              }\n              if (isValidElement) {\n                if (textData.length > 0) {\n                  text(textData, true);\n                }\n                end(value);\n              }\n              tokenRegExp.lastIndex = index;\n              continue;\n            }\n            if (!isShortEnded) {\n              if (!attribsValue || attribsValue.indexOf('/') !== attribsValue.length - 1) {\n                stack.push({\n                  name: value,\n                  valid: isValidElement\n                });\n              } else if (isValidElement) {\n                end(value);\n              }\n            }\n          } else if (value = matches[1]) {\n            if (value.charAt(0) === '>') {\n              value = ' ' + value;\n            }\n            if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') {\n              value = ' ' + value;\n            }\n            comment(value);\n          } else if (value = matches[2]) {\n            cdata(trimComments(value));\n          } else if (value = matches[3]) {\n            doctype(value);\n          } else if (value = matches[4]) {\n            pi(value, matches[5]);\n          }\n          index = matches.index + matches[0].length;\n        }\n        if (index < html.length) {\n          text(decode(html.substr(index)));\n        }\n        for (i = stack.length - 1; i >= 0; i--) {\n          value = stack[i];\n          if (value.valid) {\n            end(value.name);\n          }\n        }\n      };\n      return { parse: parse };\n    }\n    (function (SaxParser) {\n      SaxParser.findEndTag = findEndTagIndex;\n    }(SaxParser || (SaxParser = {})));\n    var SaxParser$1 = SaxParser;\n\n    var trimHtml = function (tempAttrs, html) {\n      var trimContentRegExp = new RegExp(['\\\\s?(' + tempAttrs.join('|') + ')=\"[^\"]+\"'].join('|'), 'gi');\n      return html.replace(trimContentRegExp, '');\n    };\n    var trimInternal = function (serializer, html) {\n      var content = html;\n      var bogusAllRegExp = /<(\\w+) [^>]*data-mce-bogus=\"all\"[^>]*>/g;\n      var endTagIndex, index, matchLength, matches, shortEndedElements;\n      var schema = serializer.schema;\n      content = trimHtml(serializer.getTempAttrs(), content);\n      shortEndedElements = schema.getShortEndedElements();\n      while (matches = bogusAllRegExp.exec(content)) {\n        index = bogusAllRegExp.lastIndex;\n        matchLength = matches[0].length;\n        if (shortEndedElements[matches[1]]) {\n          endTagIndex = index;\n        } else {\n          endTagIndex = SaxParser$1.findEndTag(schema, content, index);\n        }\n        content = content.substring(0, index - matchLength) + content.substring(endTagIndex);\n        bogusAllRegExp.lastIndex = index - matchLength;\n      }\n      return Zwsp.trim(content);\n    };\n    var trimExternal = trimInternal;\n    var TrimHtml = {\n      trimExternal: trimExternal,\n      trimInternal: trimInternal\n    };\n\n    var KEEP = 0, INSERT = 1, DELETE = 2;\n    var diff = function (left, right) {\n      var size = left.length + right.length + 2;\n      var vDown = new Array(size);\n      var vUp = new Array(size);\n      var snake = function (start, end, diag) {\n        return {\n          start: start,\n          end: end,\n          diag: diag\n        };\n      };\n      var buildScript = function (start1, end1, start2, end2, script) {\n        var middle = getMiddleSnake(start1, end1, start2, end2);\n        if (middle === null || middle.start === end1 && middle.diag === end1 - end2 || middle.end === start1 && middle.diag === start1 - start2) {\n          var i = start1;\n          var j = start2;\n          while (i < end1 || j < end2) {\n            if (i < end1 && j < end2 && left[i] === right[j]) {\n              script.push([\n                KEEP,\n                left[i]\n              ]);\n              ++i;\n              ++j;\n            } else {\n              if (end1 - start1 > end2 - start2) {\n                script.push([\n                  DELETE,\n                  left[i]\n                ]);\n                ++i;\n              } else {\n                script.push([\n                  INSERT,\n                  right[j]\n                ]);\n                ++j;\n              }\n            }\n          }\n        } else {\n          buildScript(start1, middle.start, start2, middle.start - middle.diag, script);\n          for (var i2 = middle.start; i2 < middle.end; ++i2) {\n            script.push([\n              KEEP,\n              left[i2]\n            ]);\n          }\n          buildScript(middle.end, end1, middle.end - middle.diag, end2, script);\n        }\n      };\n      var buildSnake = function (start, diag, end1, end2) {\n        var end = start;\n        while (end - diag < end2 && end < end1 && left[end] === right[end - diag]) {\n          ++end;\n        }\n        return snake(start, end, diag);\n      };\n      var getMiddleSnake = function (start1, end1, start2, end2) {\n        var m = end1 - start1;\n        var n = end2 - start2;\n        if (m === 0 || n === 0) {\n          return null;\n        }\n        var delta = m - n;\n        var sum = n + m;\n        var offset = (sum % 2 === 0 ? sum : sum + 1) / 2;\n        vDown[1 + offset] = start1;\n        vUp[1 + offset] = end1 + 1;\n        var d, k, i, x, y;\n        for (d = 0; d <= offset; ++d) {\n          for (k = -d; k <= d; k += 2) {\n            i = k + offset;\n            if (k === -d || k !== d && vDown[i - 1] < vDown[i + 1]) {\n              vDown[i] = vDown[i + 1];\n            } else {\n              vDown[i] = vDown[i - 1] + 1;\n            }\n            x = vDown[i];\n            y = x - start1 + start2 - k;\n            while (x < end1 && y < end2 && left[x] === right[y]) {\n              vDown[i] = ++x;\n              ++y;\n            }\n            if (delta % 2 !== 0 && delta - d <= k && k <= delta + d) {\n              if (vUp[i - delta] <= vDown[i]) {\n                return buildSnake(vUp[i - delta], k + start1 - start2, end1, end2);\n              }\n            }\n          }\n          for (k = delta - d; k <= delta + d; k += 2) {\n            i = k + offset - delta;\n            if (k === delta - d || k !== delta + d && vUp[i + 1] <= vUp[i - 1]) {\n              vUp[i] = vUp[i + 1] - 1;\n            } else {\n              vUp[i] = vUp[i - 1];\n            }\n            x = vUp[i] - 1;\n            y = x - start1 + start2 - k;\n            while (x >= start1 && y >= start2 && left[x] === right[y]) {\n              vUp[i] = x--;\n              y--;\n            }\n            if (delta % 2 === 0 && -d <= k && k <= d) {\n              if (vUp[i] <= vDown[i + delta]) {\n                return buildSnake(vUp[i], k + start1 - start2, end1, end2);\n              }\n            }\n          }\n        }\n      };\n      var script = [];\n      buildScript(0, left.length, 0, right.length, script);\n      return script;\n    };\n    var Diff = {\n      KEEP: KEEP,\n      DELETE: DELETE,\n      INSERT: INSERT,\n      diff: diff\n    };\n\n    var getOuterHtml = function (elm) {\n      if (NodeType.isElement(elm)) {\n        return elm.outerHTML;\n      } else if (NodeType.isText(elm)) {\n        return Entities.encodeRaw(elm.data, false);\n      } else if (NodeType.isComment(elm)) {\n        return '<!--' + elm.data + '-->';\n      }\n      return '';\n    };\n    var createFragment$1 = function (html) {\n      var frag, node, container;\n      container = domGlobals.document.createElement('div');\n      frag = domGlobals.document.createDocumentFragment();\n      if (html) {\n        container.innerHTML = html;\n      }\n      while (node = container.firstChild) {\n        frag.appendChild(node);\n      }\n      return frag;\n    };\n    var insertAt = function (elm, html, index) {\n      var fragment = createFragment$1(html);\n      if (elm.hasChildNodes() && index < elm.childNodes.length) {\n        var target = elm.childNodes[index];\n        target.parentNode.insertBefore(fragment, target);\n      } else {\n        elm.appendChild(fragment);\n      }\n    };\n    var removeAt = function (elm, index) {\n      if (elm.hasChildNodes() && index < elm.childNodes.length) {\n        var target = elm.childNodes[index];\n        target.parentNode.removeChild(target);\n      }\n    };\n    var applyDiff = function (diff, elm) {\n      var index = 0;\n      each(diff, function (action) {\n        if (action[0] === Diff.KEEP) {\n          index++;\n        } else if (action[0] === Diff.INSERT) {\n          insertAt(elm, action[1], index);\n          index++;\n        } else if (action[0] === Diff.DELETE) {\n          removeAt(elm, index);\n        }\n      });\n    };\n    var read$3 = function (elm) {\n      return filter(map(from$1(elm.childNodes), getOuterHtml), function (item) {\n        return item.length > 0;\n      });\n    };\n    var write = function (fragments, elm) {\n      var currentFragments = map(from$1(elm.childNodes), getOuterHtml);\n      applyDiff(Diff.diff(currentFragments, fragments), elm);\n      return elm;\n    };\n    var Fragments = {\n      read: read$3,\n      write: write\n    };\n\n    var undoLevelDocument = Cell(Option.none());\n    var lazyTempDocument = function () {\n      return undoLevelDocument.get().getOrThunk(function () {\n        var doc = domGlobals.document.implementation.createHTMLDocument('undo');\n        undoLevelDocument.set(Option.some(doc));\n        return doc;\n      });\n    };\n    var hasIframes = function (html) {\n      return html.indexOf('</iframe>') !== -1;\n    };\n    var createFragmentedLevel = function (fragments) {\n      return {\n        type: 'fragmented',\n        fragments: fragments,\n        content: '',\n        bookmark: null,\n        beforeBookmark: null\n      };\n    };\n    var createCompleteLevel = function (content) {\n      return {\n        type: 'complete',\n        fragments: null,\n        content: content,\n        bookmark: null,\n        beforeBookmark: null\n      };\n    };\n    var createFromEditor = function (editor) {\n      var fragments, content, trimmedFragments;\n      fragments = Fragments.read(editor.getBody());\n      trimmedFragments = bind(fragments, function (html) {\n        var trimmed = TrimHtml.trimInternal(editor.serializer, html);\n        return trimmed.length > 0 ? [trimmed] : [];\n      });\n      content = trimmedFragments.join('');\n      return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);\n    };\n    var applyToEditor = function (editor, level, before) {\n      if (level.type === 'fragmented') {\n        Fragments.write(level.fragments, editor.getBody());\n      } else {\n        editor.setContent(level.content, { format: 'raw' });\n      }\n      editor.selection.moveToBookmark(before ? level.beforeBookmark : level.bookmark);\n    };\n    var getLevelContent = function (level) {\n      return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n    };\n    var getCleanLevelContent = function (level) {\n      var elm = Element.fromTag('body', lazyTempDocument());\n      set$1(elm, getLevelContent(level));\n      each(descendants$1(elm, '*[data-mce-bogus]'), unwrap);\n      return get$3(elm);\n    };\n    var hasEqualContent = function (level1, level2) {\n      return getLevelContent(level1) === getLevelContent(level2);\n    };\n    var hasEqualCleanedContent = function (level1, level2) {\n      return getCleanLevelContent(level1) === getCleanLevelContent(level2);\n    };\n    var isEq$4 = function (level1, level2) {\n      if (!level1 || !level2) {\n        return false;\n      } else if (hasEqualContent(level1, level2)) {\n        return true;\n      } else {\n        return hasEqualCleanedContent(level1, level2);\n      }\n    };\n    var Levels = {\n      createFragmentedLevel: createFragmentedLevel,\n      createCompleteLevel: createCompleteLevel,\n      createFromEditor: createFromEditor,\n      applyToEditor: applyToEditor,\n      isEq: isEq$4\n    };\n\n    function UndoManager (editor) {\n      var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, locks = 0;\n      var isUnlocked = function () {\n        return locks === 0;\n      };\n      var setTyping = function (typing) {\n        if (isUnlocked()) {\n          self.typing = typing;\n        }\n      };\n      var setDirty = function (state) {\n        editor.setDirty(state);\n      };\n      var addNonTypingUndoLevel = function (e) {\n        setTyping(false);\n        self.add({}, e);\n      };\n      var endTyping = function () {\n        if (self.typing) {\n          setTyping(false);\n          self.add();\n        }\n      };\n      editor.on('init', function () {\n        self.add();\n      });\n      editor.on('BeforeExecCommand', function (e) {\n        var cmd = e.command;\n        if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {\n          endTyping();\n          self.beforeChange();\n        }\n      });\n      editor.on('ExecCommand', function (e) {\n        var cmd = e.command;\n        if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {\n          addNonTypingUndoLevel(e);\n        }\n      });\n      editor.on('ObjectResizeStart Cut', function () {\n        self.beforeChange();\n      });\n      editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n      editor.on('DragEnd', addNonTypingUndoLevel);\n      editor.on('KeyUp', function (e) {\n        var keyCode = e.keyCode;\n        if (e.isDefaultPrevented()) {\n          return;\n        }\n        if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey) {\n          addNonTypingUndoLevel();\n          editor.nodeChanged();\n        }\n        if (keyCode === 46 || keyCode === 8) {\n          editor.nodeChanged();\n        }\n        if (isFirstTypedCharacter && self.typing && Levels.isEq(Levels.createFromEditor(editor), data[0]) === false) {\n          if (editor.isDirty() === false) {\n            setDirty(true);\n            editor.fire('change', {\n              level: data[0],\n              lastLevel: null\n            });\n          }\n          editor.fire('TypingUndo');\n          isFirstTypedCharacter = false;\n          editor.nodeChanged();\n        }\n      });\n      editor.on('KeyDown', function (e) {\n        var keyCode = e.keyCode;\n        if (e.isDefaultPrevented()) {\n          return;\n        }\n        if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\n          if (self.typing) {\n            addNonTypingUndoLevel(e);\n          }\n          return;\n        }\n        var modKey = e.ctrlKey && !e.altKey || e.metaKey;\n        if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !self.typing && !modKey) {\n          self.beforeChange();\n          setTyping(true);\n          self.add({}, e);\n          isFirstTypedCharacter = true;\n        }\n      });\n      editor.on('MouseDown', function (e) {\n        if (self.typing) {\n          addNonTypingUndoLevel(e);\n        }\n      });\n      var isInsertReplacementText = function (event) {\n        return event.inputType === 'insertReplacementText';\n      };\n      var isInsertTextDataNull = function (event) {\n        return event.inputType === 'insertText' && event.data === null;\n      };\n      editor.on('input', function (e) {\n        if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e))) {\n          addNonTypingUndoLevel(e);\n        }\n      });\n      editor.addShortcut('meta+z', '', 'Undo');\n      editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n      editor.on('AddUndo Undo Redo ClearUndos', function (e) {\n        if (!e.isDefaultPrevented()) {\n          editor.nodeChanged();\n        }\n      });\n      self = {\n        data: data,\n        typing: false,\n        beforeChange: function () {\n          if (isUnlocked()) {\n            beforeBookmark = GetBookmark.getUndoBookmark(editor.selection);\n          }\n        },\n        add: function (level, event) {\n          var i;\n          var settings = editor.settings;\n          var lastLevel, currentLevel;\n          currentLevel = Levels.createFromEditor(editor);\n          level = level || {};\n          level = Tools.extend(level, currentLevel);\n          if (isUnlocked() === false || editor.removed) {\n            return null;\n          }\n          lastLevel = data[index];\n          if (editor.fire('BeforeAddUndo', {\n              level: level,\n              lastLevel: lastLevel,\n              originalEvent: event\n            }).isDefaultPrevented()) {\n            return null;\n          }\n          if (lastLevel && Levels.isEq(lastLevel, level)) {\n            return null;\n          }\n          if (data[index]) {\n            data[index].beforeBookmark = beforeBookmark;\n          }\n          if (settings.custom_undo_redo_levels) {\n            if (data.length > settings.custom_undo_redo_levels) {\n              for (i = 0; i < data.length - 1; i++) {\n                data[i] = data[i + 1];\n              }\n              data.length--;\n              index = data.length;\n            }\n          }\n          level.bookmark = GetBookmark.getUndoBookmark(editor.selection);\n          if (index < data.length - 1) {\n            data.length = index + 1;\n          }\n          data.push(level);\n          index = data.length - 1;\n          var args = {\n            level: level,\n            lastLevel: lastLevel,\n            originalEvent: event\n          };\n          editor.fire('AddUndo', args);\n          if (index > 0) {\n            setDirty(true);\n            editor.fire('change', args);\n          }\n          return level;\n        },\n        undo: function () {\n          var level;\n          if (self.typing) {\n            self.add();\n            self.typing = false;\n            setTyping(false);\n          }\n          if (index > 0) {\n            level = data[--index];\n            Levels.applyToEditor(editor, level, true);\n            setDirty(true);\n            editor.fire('undo', { level: level });\n          }\n          return level;\n        },\n        redo: function () {\n          var level;\n          if (index < data.length - 1) {\n            level = data[++index];\n            Levels.applyToEditor(editor, level, false);\n            setDirty(true);\n            editor.fire('redo', { level: level });\n          }\n          return level;\n        },\n        clear: function () {\n          data = [];\n          index = 0;\n          self.typing = false;\n          self.data = data;\n          editor.fire('ClearUndos');\n        },\n        hasUndo: function () {\n          return index > 0 || self.typing && data[0] && !Levels.isEq(Levels.createFromEditor(editor), data[0]);\n        },\n        hasRedo: function () {\n          return index < data.length - 1 && !self.typing;\n        },\n        transact: function (callback) {\n          endTyping();\n          self.beforeChange();\n          self.ignore(callback);\n          return self.add();\n        },\n        ignore: function (callback) {\n          try {\n            locks++;\n            callback();\n          } finally {\n            locks--;\n          }\n        },\n        extra: function (callback1, callback2) {\n          var lastLevel, bookmark;\n          if (self.transact(callback1)) {\n            bookmark = data[index].bookmark;\n            lastLevel = data[index - 1];\n            Levels.applyToEditor(editor, lastLevel, true);\n            if (self.transact(callback2)) {\n              data[index - 1].beforeBookmark = bookmark;\n            }\n          }\n        }\n      };\n      return self;\n    }\n\n    var postProcessHooks = {}, filter$2 = ArrUtils.filter, each$c = ArrUtils.each;\n    var addPostProcessHook = function (name, hook) {\n      var hooks = postProcessHooks[name];\n      if (!hooks) {\n        postProcessHooks[name] = hooks = [];\n      }\n      postProcessHooks[name].push(hook);\n    };\n    var postProcess = function (name, editor) {\n      each$c(postProcessHooks[name], function (hook) {\n        hook(editor);\n      });\n    };\n    addPostProcessHook('pre', function (editor) {\n      var rng = editor.selection.getRng();\n      var isPre, blocks;\n      var hasPreSibling = function (pre) {\n        return isPre(pre.previousSibling) && ArrUtils.indexOf(blocks, pre.previousSibling) !== -1;\n      };\n      var joinPre = function (pre1, pre2) {\n        DomQuery(pre2).remove();\n        DomQuery(pre1).append('<br><br>').append(pre2.childNodes);\n      };\n      isPre = NodeType.matchNodeNames('pre');\n      if (!rng.collapsed) {\n        blocks = editor.selection.getSelectedBlocks();\n        each$c(filter$2(filter$2(blocks, isPre), hasPreSibling), function (pre) {\n          joinPre(pre.previousSibling, pre);\n        });\n      }\n    });\n    var Hooks = { postProcess: postProcess };\n\n    var MCE_ATTR_RE = /^(src|href|style)$/;\n    var each$d = Tools.each;\n    var isEq$5 = FormatUtils.isEq;\n    var isTableCell$4 = function (node) {\n      return /^(TH|TD)$/.test(node.nodeName);\n    };\n    var isChildOfInlineParent = function (dom, node, parent) {\n      return dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n    };\n    var getContainer = function (ed, rng, start) {\n      var container, offset, lastIdx;\n      container = rng[start ? 'startContainer' : 'endContainer'];\n      offset = rng[start ? 'startOffset' : 'endOffset'];\n      if (NodeType.isElement(container)) {\n        lastIdx = container.childNodes.length - 1;\n        if (!start && offset) {\n          offset--;\n        }\n        container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n      }\n      if (NodeType.isText(container) && start && offset >= container.nodeValue.length) {\n        container = new TreeWalker(container, ed.getBody()).next() || container;\n      }\n      if (NodeType.isText(container) && !start && offset === 0) {\n        container = new TreeWalker(container, ed.getBody()).prev() || container;\n      }\n      return container;\n    };\n    var wrap$2 = function (dom, node, name, attrs) {\n      var wrapper = dom.create(name, attrs);\n      node.parentNode.insertBefore(wrapper, node);\n      wrapper.appendChild(node);\n      return wrapper;\n    };\n    var wrapWithSiblings = function (dom, node, next, name, attrs) {\n      var start = Element.fromDom(node);\n      var wrapper = Element.fromDom(dom.create(name, attrs));\n      var siblings = next ? nextSiblings(start) : prevSiblings(start);\n      append$1(wrapper, siblings);\n      if (next) {\n        before(start, wrapper);\n        prepend(wrapper, start);\n      } else {\n        after(start, wrapper);\n        append(wrapper, start);\n      }\n      return wrapper.dom();\n    };\n    var matchName$1 = function (dom, node, format) {\n      if (isEq$5(node, format.inline)) {\n        return true;\n      }\n      if (isEq$5(node, format.block)) {\n        return true;\n      }\n      if (format.selector) {\n        return NodeType.isElement(node) && dom.is(node, format.selector);\n      }\n    };\n    var isColorFormatAndAnchor = function (node, format) {\n      return format.links && node.tagName === 'A';\n    };\n    var find$3 = function (dom, node, next, inc) {\n      node = FormatUtils.getNonWhiteSpaceSibling(node, next, inc);\n      return !node || (node.nodeName === 'BR' || dom.isBlock(node));\n    };\n    var removeNode$1 = function (ed, node, format) {\n      var parentNode = node.parentNode;\n      var rootBlockElm;\n      var dom = ed.dom, forcedRootBlock = ed.settings.forced_root_block;\n      if (format.block) {\n        if (!forcedRootBlock) {\n          if (dom.isBlock(node) && !dom.isBlock(parentNode)) {\n            if (!find$3(dom, node, false) && !find$3(dom, node.firstChild, true, 1)) {\n              node.insertBefore(dom.create('br'), node.firstChild);\n            }\n            if (!find$3(dom, node, true) && !find$3(dom, node.lastChild, false, 1)) {\n              node.appendChild(dom.create('br'));\n            }\n          }\n        } else {\n          if (parentNode === dom.getRoot()) {\n            if (!format.list_block || !isEq$5(node, format.list_block)) {\n              each$d(Tools.grep(node.childNodes), function (node) {\n                if (FormatUtils.isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n                  if (!rootBlockElm) {\n                    rootBlockElm = wrap$2(dom, node, forcedRootBlock);\n                    dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs);\n                  } else {\n                    rootBlockElm.appendChild(node);\n                  }\n                } else {\n                  rootBlockElm = 0;\n                }\n              });\n            }\n          }\n        }\n      }\n      if (format.selector && format.inline && !isEq$5(format.inline, node)) {\n        return;\n      }\n      dom.remove(node, 1);\n    };\n    var removeFormat = function (ed, format, vars, node, compareNode) {\n      var i, attrs, stylesModified;\n      var dom = ed.dom;\n      if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n        return false;\n      }\n      if (format.remove !== 'all') {\n        each$d(format.styles, function (value, name) {\n          value = FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(value, vars), name);\n          if (typeof name === 'number') {\n            name = value;\n            compareNode = 0;\n          }\n          if (format.remove_similar || (!compareNode || isEq$5(FormatUtils.getStyle(dom, compareNode, name), value))) {\n            dom.setStyle(node, name, '');\n          }\n          stylesModified = 1;\n        });\n        if (stylesModified && dom.getAttrib(node, 'style') === '') {\n          node.removeAttribute('style');\n          node.removeAttribute('data-mce-style');\n        }\n        each$d(format.attributes, function (value, name) {\n          var valueOut;\n          value = FormatUtils.replaceVars(value, vars);\n          if (typeof name === 'number') {\n            name = value;\n            compareNode = 0;\n          }\n          if (!compareNode || isEq$5(dom.getAttrib(compareNode, name), value)) {\n            if (name === 'class') {\n              value = dom.getAttrib(node, name);\n              if (value) {\n                valueOut = '';\n                each$d(value.split(/\\s+/), function (cls) {\n                  if (/mce\\-\\w+/.test(cls)) {\n                    valueOut += (valueOut ? ' ' : '') + cls;\n                  }\n                });\n                if (valueOut) {\n                  dom.setAttrib(node, name, valueOut);\n                  return;\n                }\n              }\n            }\n            if (name === 'class') {\n              node.removeAttribute('className');\n            }\n            if (MCE_ATTR_RE.test(name)) {\n              node.removeAttribute('data-mce-' + name);\n            }\n            node.removeAttribute(name);\n          }\n        });\n        each$d(format.classes, function (value) {\n          value = FormatUtils.replaceVars(value, vars);\n          if (!compareNode || dom.hasClass(compareNode, value)) {\n            dom.removeClass(node, value);\n          }\n        });\n        attrs = dom.getAttribs(node);\n        for (i = 0; i < attrs.length; i++) {\n          var attrName = attrs[i].nodeName;\n          if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {\n            return false;\n          }\n        }\n      }\n      if (format.remove !== 'none') {\n        removeNode$1(ed, node, format);\n        return true;\n      }\n    };\n    var findFormatRoot = function (editor, container, name, vars, similar) {\n      var formatRoot;\n      each$d(FormatUtils.getParents(editor.dom, container.parentNode).reverse(), function (parent) {\n        var format;\n        if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {\n          format = MatchFormat.matchNode(editor, parent, name, vars, similar);\n          if (format && format.split !== false) {\n            formatRoot = parent;\n          }\n        }\n      });\n      return formatRoot;\n    };\n    var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {\n      var parent, clone, lastClone, firstClone, i, formatRootParent;\n      var dom = editor.dom;\n      if (formatRoot) {\n        formatRootParent = formatRoot.parentNode;\n        for (parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {\n          clone = dom.clone(parent, false);\n          for (i = 0; i < formatList.length; i++) {\n            if (removeFormat(editor, formatList[i], vars, clone, clone)) {\n              clone = 0;\n              break;\n            }\n          }\n          if (clone) {\n            if (lastClone) {\n              clone.appendChild(lastClone);\n            }\n            if (!firstClone) {\n              firstClone = clone;\n            }\n            lastClone = clone;\n          }\n        }\n        if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\n          container = dom.split(formatRoot, container);\n        }\n        if (lastClone) {\n          target.parentNode.insertBefore(lastClone, target);\n          firstClone.appendChild(target);\n        }\n      }\n      return container;\n    };\n    var remove$6 = function (ed, name, vars, node, similar) {\n      var formatList = ed.formatter.get(name), format = formatList[0];\n      var bookmark, rng, contentEditable = true;\n      var dom = ed.dom;\n      var selection = ed.selection;\n      var splitToFormatRoot = function (container) {\n        var formatRoot = findFormatRoot(ed, container, name, vars, similar);\n        return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n      };\n      var isRemoveBookmarkNode = function (node) {\n        return Bookmarks.isBookmarkNode(node) && NodeType.isElement(node) && (node.id === '_start' || node.id === '_end');\n      };\n      var process = function (node) {\n        var children, i, l, lastContentEditable, hasContentEditableState;\n        if (NodeType.isElement(node) && dom.getContentEditable(node)) {\n          lastContentEditable = contentEditable;\n          contentEditable = dom.getContentEditable(node) === 'true';\n          hasContentEditableState = true;\n        }\n        children = Tools.grep(node.childNodes);\n        if (contentEditable && !hasContentEditableState) {\n          for (i = 0, l = formatList.length; i < l; i++) {\n            if (removeFormat(ed, formatList[i], vars, node, node)) {\n              break;\n            }\n          }\n        }\n        if (format.deep) {\n          if (children.length) {\n            for (i = 0, l = children.length; i < l; i++) {\n              process(children[i]);\n            }\n            if (hasContentEditableState) {\n              contentEditable = lastContentEditable;\n            }\n          }\n        }\n      };\n      var unwrap = function (start) {\n        var node = dom.get(start ? '_start' : '_end');\n        var out = node[start ? 'firstChild' : 'lastChild'];\n        if (isRemoveBookmarkNode(out)) {\n          out = out[start ? 'firstChild' : 'lastChild'];\n        }\n        if (NodeType.isText(out) && out.data.length === 0) {\n          out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling;\n        }\n        dom.remove(node, true);\n        return out;\n      };\n      var removeRngStyle = function (rng) {\n        var startContainer, endContainer;\n        var commonAncestorContainer = rng.commonAncestorContainer;\n        rng = ExpandRange.expandRng(ed, rng, formatList, true);\n        if (format.split) {\n          rng = SplitRange.split(rng);\n          startContainer = getContainer(ed, rng, true);\n          endContainer = getContainer(ed, rng);\n          if (startContainer !== endContainer) {\n            if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {\n              if (startContainer.nodeName === 'TR') {\n                startContainer = startContainer.firstChild.firstChild || startContainer;\n              } else {\n                startContainer = startContainer.firstChild || startContainer;\n              }\n            }\n            if (commonAncestorContainer && /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && isTableCell$4(endContainer) && endContainer.firstChild) {\n              endContainer = endContainer.firstChild || endContainer;\n            }\n            if (isChildOfInlineParent(dom, startContainer, endContainer)) {\n              var marker = Option.from(startContainer.firstChild).getOr(startContainer);\n              splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', {\n                'id': '_start',\n                'data-mce-type': 'bookmark'\n              }));\n              unwrap(true);\n              return;\n            }\n            if (isChildOfInlineParent(dom, endContainer, startContainer)) {\n              var marker = Option.from(endContainer.lastChild).getOr(endContainer);\n              splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', {\n                'id': '_end',\n                'data-mce-type': 'bookmark'\n              }));\n              unwrap(false);\n              return;\n            }\n            startContainer = wrap$2(dom, startContainer, 'span', {\n              'id': '_start',\n              'data-mce-type': 'bookmark'\n            });\n            endContainer = wrap$2(dom, endContainer, 'span', {\n              'id': '_end',\n              'data-mce-type': 'bookmark'\n            });\n            splitToFormatRoot(startContainer);\n            splitToFormatRoot(endContainer);\n            startContainer = unwrap(true);\n            endContainer = unwrap();\n          } else {\n            startContainer = endContainer = splitToFormatRoot(startContainer);\n          }\n          rng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n          rng.startOffset = dom.nodeIndex(startContainer);\n          rng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n          rng.endOffset = dom.nodeIndex(endContainer) + 1;\n        }\n        RangeWalk.walk(dom, rng, function (nodes) {\n          each$d(nodes, function (node) {\n            process(node);\n            if (NodeType.isElement(node) && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && FormatUtils.getTextDecoration(dom, node.parentNode) === 'underline') {\n              removeFormat(ed, {\n                deep: false,\n                exact: true,\n                inline: 'span',\n                styles: { textDecoration: 'underline' }\n              }, null, node);\n            }\n          });\n        });\n      };\n      if (node) {\n        if (node.nodeType) {\n          rng = dom.createRng();\n          rng.setStartBefore(node);\n          rng.setEndAfter(node);\n          removeRngStyle(rng);\n        } else {\n          removeRngStyle(node);\n        }\n        return;\n      }\n      if (dom.getContentEditable(selection.getNode()) === 'false') {\n        node = selection.getNode();\n        for (var i = 0, l = formatList.length; i < l; i++) {\n          if (formatList[i].ceFalseOverride) {\n            if (removeFormat(ed, formatList[i], vars, node, node)) {\n              break;\n            }\n          }\n        }\n        return;\n      }\n      if (!selection.isCollapsed() || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {\n        bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);\n        removeRngStyle(selection.getRng());\n        selection.moveToBookmark(bookmark);\n        if (format.inline && MatchFormat.match(ed, name, vars, selection.getStart())) {\n          FormatUtils.moveStart(dom, selection, selection.getRng());\n        }\n        ed.nodeChanged();\n      } else {\n        removeCaretFormat(ed, name, vars, similar);\n      }\n    };\n    var RemoveFormat = {\n      removeFormat: removeFormat,\n      remove: remove$6\n    };\n\n    var each$e = Tools.each;\n    var isElementNode = function (node) {\n      return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);\n    };\n    var findElementSibling = function (node, siblingName) {\n      var sibling;\n      for (sibling = node; sibling; sibling = sibling[siblingName]) {\n        if (sibling.nodeType === 3 && sibling.nodeValue.length !== 0) {\n          return node;\n        }\n        if (sibling.nodeType === 1 && !Bookmarks.isBookmarkNode(sibling)) {\n          return sibling;\n        }\n      }\n      return node;\n    };\n    var mergeSiblingsNodes = function (dom, prev, next) {\n      var sibling, tmpSibling;\n      var elementUtils = new ElementUtils(dom);\n      if (prev && next) {\n        prev = findElementSibling(prev, 'previousSibling');\n        next = findElementSibling(next, 'nextSibling');\n        if (elementUtils.compare(prev, next)) {\n          for (sibling = prev.nextSibling; sibling && sibling !== next;) {\n            tmpSibling = sibling;\n            sibling = sibling.nextSibling;\n            prev.appendChild(tmpSibling);\n          }\n          dom.remove(next);\n          Tools.each(Tools.grep(next.childNodes), function (node) {\n            prev.appendChild(node);\n          });\n          return prev;\n        }\n      }\n      return next;\n    };\n    var processChildElements = function (node, filter, process) {\n      each$e(node.childNodes, function (node) {\n        if (isElementNode(node)) {\n          if (filter(node)) {\n            process(node);\n          }\n          if (node.hasChildNodes()) {\n            processChildElements(node, filter, process);\n          }\n        }\n      });\n    };\n    var hasStyle = function (dom, name) {\n      return curry(function (name, node) {\n        return !!(node && FormatUtils.getStyle(dom, node, name));\n      }, name);\n    };\n    var applyStyle = function (dom, name, value) {\n      return curry(function (name, value, node) {\n        dom.setStyle(node, name, value);\n        if (node.getAttribute('style') === '') {\n          node.removeAttribute('style');\n        }\n        unwrapEmptySpan(dom, node);\n      }, name, value);\n    };\n    var unwrapEmptySpan = function (dom, node) {\n      if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n        dom.remove(node, true);\n      }\n    };\n    var processUnderlineAndColor = function (dom, node) {\n      var textDecoration;\n      if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {\n        textDecoration = FormatUtils.getTextDecoration(dom, node.parentNode);\n        if (dom.getStyle(node, 'color') && textDecoration) {\n          dom.setStyle(node, 'text-decoration', textDecoration);\n        } else if (dom.getStyle(node, 'text-decoration') === textDecoration) {\n          dom.setStyle(node, 'text-decoration', null);\n        }\n      }\n    };\n    var mergeUnderlineAndColor = function (dom, format, vars, node) {\n      if (format.styles.color || format.styles.textDecoration) {\n        Tools.walk(node, curry(processUnderlineAndColor, dom), 'childNodes');\n        processUnderlineAndColor(dom, node);\n      }\n    };\n    var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {\n      if (format.styles && format.styles.backgroundColor) {\n        processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', FormatUtils.replaceVars(format.styles.backgroundColor, vars)));\n      }\n    };\n    var mergeSubSup = function (dom, format, vars, node) {\n      if (format.inline === 'sub' || format.inline === 'sup') {\n        processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'fontSize', ''));\n        dom.remove(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), true);\n      }\n    };\n    var mergeSiblings = function (dom, format, vars, node) {\n      if (node && format.merge_siblings !== false) {\n        node = mergeSiblingsNodes(dom, FormatUtils.getNonWhiteSpaceSibling(node), node);\n        node = mergeSiblingsNodes(dom, node, FormatUtils.getNonWhiteSpaceSibling(node, true));\n      }\n    };\n    var clearChildStyles = function (dom, format, node) {\n      if (format.clear_child_styles) {\n        var selector = format.links ? '*:not(a)' : '*';\n        each$e(dom.select(selector, node), function (node) {\n          if (isElementNode(node)) {\n            each$e(format.styles, function (value, name) {\n              dom.setStyle(node, name, '');\n            });\n          }\n        });\n      }\n    };\n    var mergeWithChildren = function (editor, formatList, vars, node) {\n      each$e(formatList, function (format) {\n        each$e(editor.dom.select(format.inline, node), function (child) {\n          if (!isElementNode(child)) {\n            return;\n          }\n          RemoveFormat.removeFormat(editor, format, vars, child, format.exact ? child : null);\n        });\n        clearChildStyles(editor.dom, format, node);\n      });\n    };\n    var mergeWithParents = function (editor, format, name, vars, node) {\n      if (MatchFormat.matchNode(editor, node.parentNode, name, vars)) {\n        if (RemoveFormat.removeFormat(editor, format, vars, node)) {\n          return;\n        }\n      }\n      if (format.merge_with_parents) {\n        editor.dom.getParent(node.parentNode, function (parent) {\n          if (MatchFormat.matchNode(editor, parent, name, vars)) {\n            RemoveFormat.removeFormat(editor, format, vars, node);\n            return true;\n          }\n        });\n      }\n    };\n    var MergeFormats = {\n      mergeWithChildren: mergeWithChildren,\n      mergeUnderlineAndColor: mergeUnderlineAndColor,\n      mergeBackgroundColorAndFontSize: mergeBackgroundColorAndFontSize,\n      mergeSubSup: mergeSubSup,\n      mergeSiblings: mergeSiblings,\n      mergeWithParents: mergeWithParents\n    };\n\n    var each$f = Tools.each;\n    var isElementNode$1 = function (node) {\n      return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);\n    };\n    var applyFormat = function (ed, name, vars, node) {\n      var formatList = ed.formatter.get(name);\n      var format = formatList[0];\n      var bookmark, rng;\n      var isCollapsed = !node && ed.selection.isCollapsed();\n      var dom = ed.dom, selection = ed.selection;\n      var setElementFormat = function (elm, fmt) {\n        fmt = fmt || format;\n        if (elm) {\n          if (fmt.onformat) {\n            fmt.onformat(elm, fmt, vars, node);\n          }\n          each$f(fmt.styles, function (value, name) {\n            dom.setStyle(elm, name, FormatUtils.replaceVars(value, vars));\n          });\n          if (fmt.styles) {\n            var styleVal = dom.getAttrib(elm, 'style');\n            if (styleVal) {\n              elm.setAttribute('data-mce-style', styleVal);\n            }\n          }\n          each$f(fmt.attributes, function (value, name) {\n            dom.setAttrib(elm, name, FormatUtils.replaceVars(value, vars));\n          });\n          each$f(fmt.classes, function (value) {\n            value = FormatUtils.replaceVars(value, vars);\n            if (!dom.hasClass(elm, value)) {\n              dom.addClass(elm, value);\n            }\n          });\n        }\n      };\n      var applyNodeStyle = function (formatList, node) {\n        var found = false;\n        if (!format.selector) {\n          return false;\n        }\n        each$f(formatList, function (format) {\n          if ('collapsed' in format && format.collapsed !== isCollapsed) {\n            return;\n          }\n          if (dom.is(node, format.selector) && !isCaretNode(node)) {\n            setElementFormat(node, format);\n            found = true;\n            return false;\n          }\n        });\n        return found;\n      };\n      var applyRngStyle = function (dom, rng, bookmark, nodeSpecific) {\n        var newWrappers = [];\n        var wrapName, wrapElm, contentEditable = true;\n        wrapName = format.inline || format.block;\n        wrapElm = dom.create(wrapName);\n        setElementFormat(wrapElm);\n        RangeWalk.walk(dom, rng, function (nodes) {\n          var currentWrapElm;\n          var process = function (node) {\n            var nodeName, parentName, hasContentEditableState, lastContentEditable;\n            lastContentEditable = contentEditable;\n            nodeName = node.nodeName.toLowerCase();\n            parentName = node.parentNode.nodeName.toLowerCase();\n            if (node.nodeType === 1 && dom.getContentEditable(node)) {\n              lastContentEditable = contentEditable;\n              contentEditable = dom.getContentEditable(node) === 'true';\n              hasContentEditableState = true;\n            }\n            if (FormatUtils.isEq(nodeName, 'br')) {\n              currentWrapElm = 0;\n              if (format.block) {\n                dom.remove(node);\n              }\n              return;\n            }\n            if (format.wrapper && MatchFormat.matchNode(ed, node, name, vars)) {\n              currentWrapElm = 0;\n              return;\n            }\n            if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && FormatUtils.isTextBlock(ed, nodeName) && FormatUtils.isValid(ed, parentName, wrapName)) {\n              node = dom.rename(node, wrapName);\n              setElementFormat(node);\n              newWrappers.push(node);\n              currentWrapElm = 0;\n              return;\n            }\n            if (format.selector) {\n              var found = applyNodeStyle(formatList, node);\n              if (!format.inline || found) {\n                currentWrapElm = 0;\n                return;\n              }\n            }\n            if (contentEditable && !hasContentEditableState && FormatUtils.isValid(ed, wrapName, nodeName) && FormatUtils.isValid(ed, parentName, wrapName) && !(!nodeSpecific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node) && (!format.inline || !dom.isBlock(node))) {\n              if (!currentWrapElm) {\n                currentWrapElm = dom.clone(wrapElm, false);\n                node.parentNode.insertBefore(currentWrapElm, node);\n                newWrappers.push(currentWrapElm);\n              }\n              currentWrapElm.appendChild(node);\n            } else {\n              currentWrapElm = 0;\n              each$f(Tools.grep(node.childNodes), process);\n              if (hasContentEditableState) {\n                contentEditable = lastContentEditable;\n              }\n              currentWrapElm = 0;\n            }\n          };\n          each$f(nodes, process);\n        });\n        if (format.links === true) {\n          each$f(newWrappers, function (node) {\n            var process = function (node) {\n              if (node.nodeName === 'A') {\n                setElementFormat(node, format);\n              }\n              each$f(Tools.grep(node.childNodes), process);\n            };\n            process(node);\n          });\n        }\n        each$f(newWrappers, function (node) {\n          var childCount;\n          var getChildCount = function (node) {\n            var count = 0;\n            each$f(node.childNodes, function (node) {\n              if (!FormatUtils.isWhiteSpaceNode(node) && !Bookmarks.isBookmarkNode(node)) {\n                count++;\n              }\n            });\n            return count;\n          };\n          var getChildElementNode = function (root) {\n            var child = false;\n            each$f(root.childNodes, function (node) {\n              if (isElementNode$1(node)) {\n                child = node;\n                return false;\n              }\n            });\n            return child;\n          };\n          var mergeStyles = function (node) {\n            var child, clone;\n            child = getChildElementNode(node);\n            if (child && !Bookmarks.isBookmarkNode(child) && MatchFormat.matchName(dom, child, format)) {\n              clone = dom.clone(child, false);\n              setElementFormat(clone);\n              dom.replace(clone, node, true);\n              dom.remove(child, 1);\n            }\n            return clone || node;\n          };\n          childCount = getChildCount(node);\n          if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n            dom.remove(node, 1);\n            return;\n          }\n          if (format.inline || format.wrapper) {\n            if (!format.exact && childCount === 1) {\n              node = mergeStyles(node);\n            }\n            MergeFormats.mergeWithChildren(ed, formatList, vars, node);\n            MergeFormats.mergeWithParents(ed, format, name, vars, node);\n            MergeFormats.mergeBackgroundColorAndFontSize(dom, format, vars, node);\n            MergeFormats.mergeSubSup(dom, format, vars, node);\n            MergeFormats.mergeSiblings(dom, format, vars, node);\n          }\n        });\n      };\n      if (dom.getContentEditable(selection.getNode()) === 'false') {\n        node = selection.getNode();\n        for (var i = 0, l = formatList.length; i < l; i++) {\n          if (formatList[i].ceFalseOverride && dom.is(node, formatList[i].selector)) {\n            setElementFormat(node, formatList[i]);\n            return;\n          }\n        }\n        return;\n      }\n      if (format) {\n        if (node) {\n          if (node.nodeType) {\n            if (!applyNodeStyle(formatList, node)) {\n              rng = dom.createRng();\n              rng.setStartBefore(node);\n              rng.setEndAfter(node);\n              applyRngStyle(dom, ExpandRange.expandRng(ed, rng, formatList), null, true);\n            }\n          } else {\n            applyRngStyle(dom, node, null, true);\n          }\n        } else {\n          if (!isCollapsed || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {\n            var curSelNode = ed.selection.getNode();\n            if (!ed.settings.forced_root_block && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {\n              applyFormat(ed, formatList[0].defaultBlock);\n            }\n            ed.selection.setRng(RangeNormalizer.normalize(ed.selection.getRng()));\n            bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);\n            applyRngStyle(dom, ExpandRange.expandRng(ed, selection.getRng(), formatList));\n            if (format.styles) {\n              MergeFormats.mergeUnderlineAndColor(dom, format, vars, curSelNode);\n            }\n            selection.moveToBookmark(bookmark);\n            FormatUtils.moveStart(dom, selection, selection.getRng());\n            ed.nodeChanged();\n          } else {\n            applyCaretFormat(ed, name, vars);\n          }\n        }\n        Hooks.postProcess(name, ed);\n      }\n    };\n    var ApplyFormat = { applyFormat: applyFormat };\n\n    var each$g = Tools.each;\n    var setup$5 = function (formatChangeData, editor) {\n      var currentFormats = {};\n      formatChangeData.set({});\n      editor.on('NodeChange', function (e) {\n        var parents = FormatUtils.getParents(editor.dom, e.element);\n        var matchedFormats = {};\n        parents = Tools.grep(parents, function (node) {\n          return node.nodeType === 1 && !node.getAttribute('data-mce-bogus');\n        });\n        each$g(formatChangeData.get(), function (callbacks, format) {\n          each$g(parents, function (node) {\n            if (editor.formatter.matchNode(node, format, {}, callbacks.similar)) {\n              if (!currentFormats[format]) {\n                each$g(callbacks, function (callback) {\n                  callback(true, {\n                    node: node,\n                    format: format,\n                    parents: parents\n                  });\n                });\n                currentFormats[format] = callbacks;\n              }\n              matchedFormats[format] = callbacks;\n              return false;\n            }\n            if (MatchFormat.matchesUnInheritedFormatSelector(editor, node, format)) {\n              return false;\n            }\n          });\n        });\n        each$g(currentFormats, function (callbacks, format) {\n          if (!matchedFormats[format]) {\n            delete currentFormats[format];\n            each$g(callbacks, function (callback) {\n              callback(false, {\n                node: e.element,\n                format: format,\n                parents: parents\n              });\n            });\n          }\n        });\n      });\n    };\n    var addListeners = function (formatChangeData, formats, callback, similar) {\n      var formatChangeItems = formatChangeData.get();\n      each$g(formats.split(','), function (format) {\n        if (!formatChangeItems[format]) {\n          formatChangeItems[format] = [];\n          formatChangeItems[format].similar = similar;\n        }\n        formatChangeItems[format].push(callback);\n      });\n      formatChangeData.set(formatChangeItems);\n    };\n    var formatChanged = function (editor, formatChangeState, formats, callback, similar) {\n      if (formatChangeState.get() === null) {\n        setup$5(formatChangeState, editor);\n      }\n      addListeners(formatChangeState, formats, callback, similar);\n    };\n    var FormatChanged = { formatChanged: formatChanged };\n\n    var get$5 = function (dom) {\n      var formats = {\n        valigntop: [{\n            selector: 'td,th',\n            styles: { verticalAlign: 'top' }\n          }],\n        valignmiddle: [{\n            selector: 'td,th',\n            styles: { verticalAlign: 'middle' }\n          }],\n        valignbottom: [{\n            selector: 'td,th',\n            styles: { verticalAlign: 'bottom' }\n          }],\n        alignleft: [\n          {\n            selector: 'figure.image',\n            collapsed: false,\n            classes: 'align-left',\n            ceFalseOverride: true,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n            styles: { textAlign: 'left' },\n            inherit: false,\n            preview: false,\n            defaultBlock: 'div'\n          },\n          {\n            selector: 'img,table',\n            collapsed: false,\n            styles: { float: 'left' },\n            preview: 'font-family font-size'\n          }\n        ],\n        aligncenter: [\n          {\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n            styles: { textAlign: 'center' },\n            inherit: false,\n            preview: 'font-family font-size',\n            defaultBlock: 'div'\n          },\n          {\n            selector: 'figure.image',\n            collapsed: false,\n            classes: 'align-center',\n            ceFalseOverride: true,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'img',\n            collapsed: false,\n            styles: {\n              display: 'block',\n              marginLeft: 'auto',\n              marginRight: 'auto'\n            },\n            preview: false\n          },\n          {\n            selector: 'table',\n            collapsed: false,\n            styles: {\n              marginLeft: 'auto',\n              marginRight: 'auto'\n            },\n            preview: 'font-family font-size'\n          }\n        ],\n        alignright: [\n          {\n            selector: 'figure.image',\n            collapsed: false,\n            classes: 'align-right',\n            ceFalseOverride: true,\n            preview: 'font-family font-size'\n          },\n          {\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n            styles: { textAlign: 'right' },\n            inherit: false,\n            preview: 'font-family font-size',\n            defaultBlock: 'div'\n          },\n          {\n            selector: 'img,table',\n            collapsed: false,\n            styles: { float: 'right' },\n            preview: 'font-family font-size'\n          }\n        ],\n        alignjustify: [{\n            selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n            styles: { textAlign: 'justify' },\n            inherit: false,\n            defaultBlock: 'div',\n            preview: 'font-family font-size'\n          }],\n        bold: [\n          {\n            inline: 'strong',\n            remove: 'all'\n          },\n          {\n            inline: 'span',\n            styles: { fontWeight: 'bold' }\n          },\n          {\n            inline: 'b',\n            remove: 'all'\n          }\n        ],\n        italic: [\n          {\n            inline: 'em',\n            remove: 'all'\n          },\n          {\n            inline: 'span',\n            styles: { fontStyle: 'italic' }\n          },\n          {\n            inline: 'i',\n            remove: 'all'\n          }\n        ],\n        underline: [\n          {\n            inline: 'span',\n            styles: { textDecoration: 'underline' },\n            exact: true\n          },\n          {\n            inline: 'u',\n            remove: 'all'\n          }\n        ],\n        strikethrough: [\n          {\n            inline: 'span',\n            styles: { textDecoration: 'line-through' },\n            exact: true\n          },\n          {\n            inline: 'strike',\n            remove: 'all'\n          }\n        ],\n        forecolor: {\n          inline: 'span',\n          styles: { color: '%value' },\n          links: true,\n          remove_similar: true,\n          clear_child_styles: true\n        },\n        hilitecolor: {\n          inline: 'span',\n          styles: { backgroundColor: '%value' },\n          links: true,\n          remove_similar: true,\n          clear_child_styles: true\n        },\n        fontname: {\n          inline: 'span',\n          toggle: false,\n          styles: { fontFamily: '%value' },\n          clear_child_styles: true\n        },\n        fontsize: {\n          inline: 'span',\n          toggle: false,\n          styles: { fontSize: '%value' },\n          clear_child_styles: true\n        },\n        fontsize_class: {\n          inline: 'span',\n          attributes: { class: '%value' }\n        },\n        blockquote: {\n          block: 'blockquote',\n          wrapper: 1,\n          remove: 'all'\n        },\n        subscript: { inline: 'sub' },\n        superscript: { inline: 'sup' },\n        code: { inline: 'code' },\n        link: {\n          inline: 'a',\n          selector: 'a',\n          remove: 'all',\n          split: true,\n          deep: true,\n          onmatch: function () {\n            return true;\n          },\n          onformat: function (elm, fmt, vars) {\n            Tools.each(vars, function (value, key) {\n              dom.setAttrib(elm, key, value);\n            });\n          }\n        },\n        removeformat: [\n          {\n            selector: 'b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins',\n            remove: 'all',\n            split: true,\n            expand: false,\n            block_expand: true,\n            deep: true\n          },\n          {\n            selector: 'span',\n            attributes: [\n              'style',\n              'class'\n            ],\n            remove: 'empty',\n            split: true,\n            expand: false,\n            deep: true\n          },\n          {\n            selector: '*',\n            attributes: [\n              'style',\n              'class'\n            ],\n            split: false,\n            expand: false,\n            deep: true\n          }\n        ]\n      };\n      Tools.each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\\s/), function (name) {\n        formats[name] = {\n          block: name,\n          remove: 'all'\n        };\n      });\n      return formats;\n    };\n    var DefaultFormats = { get: get$5 };\n\n    function FormatRegistry (editor) {\n      var formats = {};\n      var get = function (name) {\n        return name ? formats[name] : formats;\n      };\n      var register = function (name, format) {\n        if (name) {\n          if (typeof name !== 'string') {\n            Tools.each(name, function (format, name) {\n              register(name, format);\n            });\n          } else {\n            format = format.length ? format : [format];\n            Tools.each(format, function (format) {\n              if (typeof format.deep === 'undefined') {\n                format.deep = !format.selector;\n              }\n              if (typeof format.split === 'undefined') {\n                format.split = !format.selector || format.inline;\n              }\n              if (typeof format.remove === 'undefined' && format.selector && !format.inline) {\n                format.remove = 'none';\n              }\n              if (format.selector && format.inline) {\n                format.mixed = true;\n                format.block_expand = true;\n              }\n              if (typeof format.classes === 'string') {\n                format.classes = format.classes.split(/\\s+/);\n              }\n            });\n            formats[name] = format;\n          }\n        }\n      };\n      var unregister = function (name) {\n        if (name && formats[name]) {\n          delete formats[name];\n        }\n        return formats;\n      };\n      register(DefaultFormats.get(editor.dom));\n      register(editor.settings.formats);\n      return {\n        get: get,\n        register: register,\n        unregister: unregister\n      };\n    }\n\n    var each$h = Tools.each;\n    var dom = DOMUtils$1.DOM;\n    var parsedSelectorToHtml = function (ancestry, editor) {\n      var elm, item, fragment;\n      var schema = editor && editor.schema || Schema({});\n      var decorate = function (elm, item) {\n        if (item.classes.length) {\n          dom.addClass(elm, item.classes.join(' '));\n        }\n        dom.setAttribs(elm, item.attrs);\n      };\n      var createElement = function (sItem) {\n        var elm;\n        item = typeof sItem === 'string' ? {\n          name: sItem,\n          classes: [],\n          attrs: {}\n        } : sItem;\n        elm = dom.create(item.name);\n        decorate(elm, item);\n        return elm;\n      };\n      var getRequiredParent = function (elm, candidate) {\n        var name = typeof elm !== 'string' ? elm.nodeName.toLowerCase() : elm;\n        var elmRule = schema.getElementRule(name);\n        var parentsRequired = elmRule && elmRule.parentsRequired;\n        if (parentsRequired && parentsRequired.length) {\n          return candidate && Tools.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0];\n        } else {\n          return false;\n        }\n      };\n      var wrapInHtml = function (elm, ancestry, siblings) {\n        var parent, parentCandidate, parentRequired;\n        var ancestor = ancestry.length > 0 && ancestry[0];\n        var ancestorName = ancestor && ancestor.name;\n        parentRequired = getRequiredParent(elm, ancestorName);\n        if (parentRequired) {\n          if (ancestorName === parentRequired) {\n            parentCandidate = ancestry[0];\n            ancestry = ancestry.slice(1);\n          } else {\n            parentCandidate = parentRequired;\n          }\n        } else if (ancestor) {\n          parentCandidate = ancestry[0];\n          ancestry = ancestry.slice(1);\n        } else if (!siblings) {\n          return elm;\n        }\n        if (parentCandidate) {\n          parent = createElement(parentCandidate);\n          parent.appendChild(elm);\n        }\n        if (siblings) {\n          if (!parent) {\n            parent = dom.create('div');\n            parent.appendChild(elm);\n          }\n          Tools.each(siblings, function (sibling) {\n            var siblingElm = createElement(sibling);\n            parent.insertBefore(siblingElm, elm);\n          });\n        }\n        return wrapInHtml(parent, ancestry, parentCandidate && parentCandidate.siblings);\n      };\n      if (ancestry && ancestry.length) {\n        item = ancestry[0];\n        elm = createElement(item);\n        fragment = dom.create('div');\n        fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), item.siblings));\n        return fragment;\n      } else {\n        return '';\n      }\n    };\n    var selectorToHtml = function (selector, editor) {\n      return parsedSelectorToHtml(parseSelector(selector), editor);\n    };\n    var parseSelectorItem = function (item) {\n      var tagName;\n      var obj = {\n        classes: [],\n        attrs: {}\n      };\n      item = obj.selector = Tools.trim(item);\n      if (item !== '*') {\n        tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, function ($0, $1, $2, $3, $4) {\n          switch ($1) {\n          case '#':\n            obj.attrs.id = $2;\n            break;\n          case '.':\n            obj.classes.push($2);\n            break;\n          case ':':\n            if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) {\n              obj.attrs[$2] = $2;\n            }\n            break;\n          }\n          if ($3 === '[') {\n            var m = $4.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);\n            if (m) {\n              obj.attrs[m[1]] = m[2];\n            }\n          }\n          return '';\n        });\n      }\n      obj.name = tagName || 'div';\n      return obj;\n    };\n    var parseSelector = function (selector) {\n      if (!selector || typeof selector !== 'string') {\n        return [];\n      }\n      selector = selector.split(/\\s*,\\s*/)[0];\n      selector = selector.replace(/\\s*(~\\+|~|\\+|>)\\s*/g, '$1');\n      return Tools.map(selector.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/), function (item) {\n        var siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n        var obj = siblings.pop();\n        if (siblings.length) {\n          obj.siblings = siblings;\n        }\n        return obj;\n      }).reverse();\n    };\n    var getCssText = function (editor, format) {\n      var name, previewFrag, previewElm, items;\n      var previewCss = '', parentFontSize, previewStyles;\n      previewStyles = editor.settings.preview_styles;\n      if (previewStyles === false) {\n        return '';\n      }\n      if (typeof previewStyles !== 'string') {\n        previewStyles = 'font-family font-size font-weight font-style text-decoration ' + 'text-transform color background-color border border-radius outline text-shadow';\n      }\n      var removeVars = function (val) {\n        return val.replace(/%(\\w+)/g, '');\n      };\n      if (typeof format === 'string') {\n        format = editor.formatter.get(format);\n        if (!format) {\n          return;\n        }\n        format = format[0];\n      }\n      if ('preview' in format) {\n        previewStyles = format.preview;\n        if (previewStyles === false) {\n          return '';\n        }\n      }\n      name = format.block || format.inline || 'span';\n      items = parseSelector(format.selector);\n      if (items.length) {\n        if (!items[0].name) {\n          items[0].name = name;\n        }\n        name = format.selector;\n        previewFrag = parsedSelectorToHtml(items, editor);\n      } else {\n        previewFrag = parsedSelectorToHtml([name], editor);\n      }\n      previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n      each$h(format.styles, function (value, name) {\n        value = removeVars(value);\n        if (value) {\n          dom.setStyle(previewElm, name, value);\n        }\n      });\n      each$h(format.attributes, function (value, name) {\n        value = removeVars(value);\n        if (value) {\n          dom.setAttrib(previewElm, name, value);\n        }\n      });\n      each$h(format.classes, function (value) {\n        value = removeVars(value);\n        if (!dom.hasClass(previewElm, value)) {\n          dom.addClass(previewElm, value);\n        }\n      });\n      editor.fire('PreviewFormats');\n      dom.setStyles(previewFrag, {\n        position: 'absolute',\n        left: -65535\n      });\n      editor.getBody().appendChild(previewFrag);\n      parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true);\n      parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0;\n      each$h(previewStyles.split(' '), function (name) {\n        var value = dom.getStyle(previewElm, name, true);\n        if (name === 'background-color' && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value)) {\n          value = dom.getStyle(editor.getBody(), name, true);\n          if (dom.toHex(value).toLowerCase() === '#ffffff') {\n            return;\n          }\n        }\n        if (name === 'color') {\n          if (dom.toHex(value).toLowerCase() === '#000000') {\n            return;\n          }\n        }\n        if (name === 'font-size') {\n          if (/em|%$/.test(value)) {\n            if (parentFontSize === 0) {\n              return;\n            }\n            var numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1);\n            value = numValue * parentFontSize + 'px';\n          }\n        }\n        if (name === 'border' && value) {\n          previewCss += 'padding:0 2px;';\n        }\n        previewCss += name + ':' + value + ';';\n      });\n      editor.fire('AfterPreviewFormats');\n      dom.remove(previewFrag);\n      return previewCss;\n    };\n    var Preview = {\n      getCssText: getCssText,\n      parseSelector: parseSelector,\n      selectorToHtml: selectorToHtml\n    };\n\n    var toggle = function (editor, formats, name, vars, node) {\n      var fmt = formats.get(name);\n      if (MatchFormat.match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n        RemoveFormat.remove(editor, name, vars, node);\n      } else {\n        ApplyFormat.applyFormat(editor, name, vars, node);\n      }\n    };\n    var ToggleFormat = { toggle: toggle };\n\n    var setup$6 = function (editor) {\n      editor.addShortcut('meta+b', '', 'Bold');\n      editor.addShortcut('meta+i', '', 'Italic');\n      editor.addShortcut('meta+u', '', 'Underline');\n      for (var i = 1; i <= 6; i++) {\n        editor.addShortcut('access+' + i, '', [\n          'FormatBlock',\n          false,\n          'h' + i\n        ]);\n      }\n      editor.addShortcut('access+7', '', [\n        'FormatBlock',\n        false,\n        'p'\n      ]);\n      editor.addShortcut('access+8', '', [\n        'FormatBlock',\n        false,\n        'div'\n      ]);\n      editor.addShortcut('access+9', '', [\n        'FormatBlock',\n        false,\n        'address'\n      ]);\n    };\n    var FormatShortcuts = { setup: setup$6 };\n\n    function Formatter (editor) {\n      var formats = FormatRegistry(editor);\n      var formatChangeState = Cell(null);\n      FormatShortcuts.setup(editor);\n      setup$2(editor);\n      return {\n        get: formats.get,\n        register: formats.register,\n        unregister: formats.unregister,\n        apply: curry(ApplyFormat.applyFormat, editor),\n        remove: curry(RemoveFormat.remove, editor),\n        toggle: curry(ToggleFormat.toggle, editor, formats),\n        match: curry(MatchFormat.match, editor),\n        matchAll: curry(MatchFormat.matchAll, editor),\n        matchNode: curry(MatchFormat.matchNode, editor),\n        canApply: curry(MatchFormat.canApply, editor),\n        formatChanged: curry(FormatChanged.formatChanged, editor, formatChangeState),\n        getCssText: curry(Preview.getCssText, editor)\n      };\n    }\n\n    var hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n    var shallow$1 = function (old, nu) {\n      return nu;\n    };\n    var baseMerge = function (merger) {\n      return function () {\n        var objects = new Array(arguments.length);\n        for (var i = 0; i < objects.length; i++) {\n          objects[i] = arguments[i];\n        }\n        if (objects.length === 0) {\n          throw new Error('Can\\'t merge zero objects');\n        }\n        var ret = {};\n        for (var j = 0; j < objects.length; j++) {\n          var curObject = objects[j];\n          for (var key in curObject) {\n            if (hasOwnProperty$2.call(curObject, key)) {\n              ret[key] = merger(ret[key], curObject[key]);\n            }\n          }\n        }\n        return ret;\n      };\n    };\n    var merge = baseMerge(shallow$1);\n\n    var register = function (htmlParser, settings, dom) {\n      htmlParser.addAttributeFilter('data-mce-tabindex', function (nodes, name) {\n        var i = nodes.length, node;\n        while (i--) {\n          node = nodes[i];\n          node.attr('tabindex', node.attributes.map['data-mce-tabindex']);\n          node.attr(name, null);\n        }\n      });\n      htmlParser.addAttributeFilter('src,href,style', function (nodes, name) {\n        var i = nodes.length, node, value;\n        var internalName = 'data-mce-' + name;\n        var urlConverter = settings.url_converter;\n        var urlConverterScope = settings.url_converter_scope;\n        while (i--) {\n          node = nodes[i];\n          value = node.attributes.map[internalName];\n          if (value !== undefined) {\n            node.attr(name, value.length > 0 ? value : null);\n            node.attr(internalName, null);\n          } else {\n            value = node.attributes.map[name];\n            if (name === 'style') {\n              value = dom.serializeStyle(dom.parseStyle(value), node.name);\n            } else if (urlConverter) {\n              value = urlConverter.call(urlConverterScope, value, name, node.name);\n            }\n            node.attr(name, value.length > 0 ? value : null);\n          }\n        }\n      });\n      htmlParser.addAttributeFilter('class', function (nodes) {\n        var i = nodes.length, node, value;\n        while (i--) {\n          node = nodes[i];\n          value = node.attr('class');\n          if (value) {\n            value = node.attr('class').replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g, '');\n            node.attr('class', value.length > 0 ? value : null);\n          }\n        }\n      });\n      htmlParser.addAttributeFilter('data-mce-type', function (nodes, name, args) {\n        var i = nodes.length, node;\n        while (i--) {\n          node = nodes[i];\n          if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) {\n            var hasChildren = Option.from(node.firstChild).exists(function (firstChild) {\n              return !Zwsp.isZwsp(firstChild.value);\n            });\n            if (hasChildren) {\n              node.unwrap();\n            } else {\n              node.remove();\n            }\n          }\n        }\n      });\n      htmlParser.addNodeFilter('noscript', function (nodes) {\n        var i = nodes.length, node;\n        while (i--) {\n          node = nodes[i].firstChild;\n          if (node) {\n            node.value = Entities.decode(node.value);\n          }\n        }\n      });\n      htmlParser.addNodeFilter('script,style', function (nodes, name) {\n        var i = nodes.length, node, value, type;\n        var trim = function (value) {\n          return value.replace(/(<!--\\[CDATA\\[|\\]\\]-->)/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*((<!--)?(\\s*\\/\\/)?\\s*<!\\[CDATA\\[|(<!--\\s*)?\\/\\*\\s*<!\\[CDATA\\[\\s*\\*\\/|(\\/\\/)?\\s*<!--|\\/\\*\\s*<!--\\s*\\*\\/)\\s*[\\r\\n]*/gi, '').replace(/\\s*(\\/\\*\\s*\\]\\]>\\s*\\*\\/(-->)?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, '');\n        };\n        while (i--) {\n          node = nodes[i];\n          value = node.firstChild ? node.firstChild.value : '';\n          if (name === 'script') {\n            type = node.attr('type');\n            if (type) {\n              node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\\-/, ''));\n            }\n            if (settings.element_format === 'xhtml' && value.length > 0) {\n              node.firstChild.value = '// <![CDATA[\\n' + trim(value) + '\\n// ]]>';\n            }\n          } else {\n            if (settings.element_format === 'xhtml' && value.length > 0) {\n              node.firstChild.value = '<!--\\n' + trim(value) + '\\n-->';\n            }\n          }\n        }\n      });\n      htmlParser.addNodeFilter('#comment', function (nodes) {\n        var i = nodes.length, node;\n        while (i--) {\n          node = nodes[i];\n          if (node.value.indexOf('[CDATA[') === 0) {\n            node.name = '#cdata';\n            node.type = 4;\n            node.value = node.value.replace(/^\\[CDATA\\[|\\]\\]$/g, '');\n          } else if (node.value.indexOf('mce:protected ') === 0) {\n            node.name = '#text';\n            node.type = 3;\n            node.raw = true;\n            node.value = unescape(node.value).substr(14);\n          }\n        }\n      });\n      htmlParser.addNodeFilter('xml:namespace,input', function (nodes, name) {\n        var i = nodes.length, node;\n        while (i--) {\n          node = nodes[i];\n          if (node.type === 7) {\n            node.remove();\n          } else if (node.type === 1) {\n            if (name === 'input' && !('type' in node.attributes.map)) {\n              node.attr('type', 'text');\n            }\n          }\n        }\n      });\n      htmlParser.addAttributeFilter('data-mce-type', function (nodes) {\n        each(nodes, function (node) {\n          if (node.attr('data-mce-type') === 'format-caret') {\n            if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\n              node.remove();\n            } else {\n              node.unwrap();\n            }\n          }\n        });\n      });\n      htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,' + 'data-mce-type,data-mce-resize', function (nodes, name) {\n        var i = nodes.length;\n        while (i--) {\n          nodes[i].attr(name, null);\n        }\n      });\n    };\n    var trimTrailingBr = function (rootNode) {\n      var brNode1, brNode2;\n      var isBr = function (node) {\n        return node && node.name === 'br';\n      };\n      brNode1 = rootNode.lastChild;\n      if (isBr(brNode1)) {\n        brNode2 = brNode1.prev;\n        if (isBr(brNode2)) {\n          brNode1.remove();\n          brNode2.remove();\n        }\n      }\n    };\n    var DomSerializerFilters = {\n      register: register,\n      trimTrailingBr: trimTrailingBr\n    };\n\n    var preProcess = function (editor, node, args) {\n      var impl, doc, oldDoc;\n      var dom = editor.dom;\n      node = node.cloneNode(true);\n      impl = domGlobals.document.implementation;\n      if (impl.createHTMLDocument) {\n        doc = impl.createHTMLDocument('');\n        Tools.each(node.nodeName === 'BODY' ? node.childNodes : [node], function (node) {\n          doc.body.appendChild(doc.importNode(node, true));\n        });\n        if (node.nodeName !== 'BODY') {\n          node = doc.body.firstChild;\n        } else {\n          node = doc.body;\n        }\n        oldDoc = dom.doc;\n        dom.doc = doc;\n      }\n      Events.firePreProcess(editor, merge(args, { node: node }));\n      if (oldDoc) {\n        dom.doc = oldDoc;\n      }\n      return node;\n    };\n    var shouldFireEvent = function (editor, args) {\n      return editor && editor.hasEventListeners('PreProcess') && !args.no_events;\n    };\n    var process = function (editor, node, args) {\n      return shouldFireEvent(editor, args) ? preProcess(editor, node, args) : node;\n    };\n    var DomSerializerPreProcess = { process: process };\n\n    var removeAttrs = function (node, names) {\n      each(names, function (name) {\n        node.attr(name, null);\n      });\n    };\n    var addFontToSpansFilter = function (domParser, styles, fontSizes) {\n      domParser.addNodeFilter('font', function (nodes) {\n        each(nodes, function (node) {\n          var props = styles.parse(node.attr('style'));\n          var color = node.attr('color');\n          var face = node.attr('face');\n          var size = node.attr('size');\n          if (color) {\n            props.color = color;\n          }\n          if (face) {\n            props['font-family'] = face;\n          }\n          if (size) {\n            props['font-size'] = fontSizes[parseInt(node.attr('size'), 10) - 1];\n          }\n          node.name = 'span';\n          node.attr('style', styles.serialize(props));\n          removeAttrs(node, [\n            'color',\n            'face',\n            'size'\n          ]);\n        });\n      });\n    };\n    var addStrikeToSpanFilter = function (domParser, styles) {\n      domParser.addNodeFilter('strike', function (nodes) {\n        each(nodes, function (node) {\n          var props = styles.parse(node.attr('style'));\n          props['text-decoration'] = 'line-through';\n          node.name = 'span';\n          node.attr('style', styles.serialize(props));\n        });\n      });\n    };\n    var addFilters = function (domParser, settings) {\n      var styles = Styles();\n      if (settings.convert_fonts_to_spans) {\n        addFontToSpansFilter(domParser, styles, Tools.explode(settings.font_size_legacy_values));\n      }\n      addStrikeToSpanFilter(domParser, styles);\n    };\n    var register$1 = function (domParser, settings) {\n      if (settings.inline_styles) {\n        addFilters(domParser, settings);\n      }\n    };\n    var LegacyFilter = { register: register$1 };\n\n    var whiteSpaceRegExp$3 = /^[ \\t\\r\\n]*$/;\n    var typeLookup = {\n      '#text': 3,\n      '#comment': 8,\n      '#cdata': 4,\n      '#pi': 7,\n      '#doctype': 10,\n      '#document-fragment': 11\n    };\n    var walk$2 = function (node, root, prev) {\n      var sibling;\n      var parent;\n      var startName = prev ? 'lastChild' : 'firstChild';\n      var siblingName = prev ? 'prev' : 'next';\n      if (node[startName]) {\n        return node[startName];\n      }\n      if (node !== root) {\n        sibling = node[siblingName];\n        if (sibling) {\n          return sibling;\n        }\n        for (parent = node.parent; parent && parent !== root; parent = parent.parent) {\n          sibling = parent[siblingName];\n          if (sibling) {\n            return sibling;\n          }\n        }\n      }\n    };\n    var Node$1 = function () {\n      function Node(name, type) {\n        this.name = name;\n        this.type = type;\n        if (type === 1) {\n          this.attributes = [];\n          this.attributes.map = {};\n        }\n      }\n      Node.create = function (name, attrs) {\n        var node, attrName;\n        node = new Node(name, typeLookup[name] || 1);\n        if (attrs) {\n          for (attrName in attrs) {\n            node.attr(attrName, attrs[attrName]);\n          }\n        }\n        return node;\n      };\n      Node.prototype.replace = function (node) {\n        var self = this;\n        if (node.parent) {\n          node.remove();\n        }\n        self.insert(node, self);\n        self.remove();\n        return self;\n      };\n      Node.prototype.attr = function (name, value) {\n        var self = this;\n        var attrs, i;\n        if (typeof name !== 'string') {\n          for (i in name) {\n            self.attr(i, name[i]);\n          }\n          return self;\n        }\n        if (attrs = self.attributes) {\n          if (value !== undefined) {\n            if (value === null) {\n              if (name in attrs.map) {\n                delete attrs.map[name];\n                i = attrs.length;\n                while (i--) {\n                  if (attrs[i].name === name) {\n                    attrs = attrs.splice(i, 1);\n                    return self;\n                  }\n                }\n              }\n              return self;\n            }\n            if (name in attrs.map) {\n              i = attrs.length;\n              while (i--) {\n                if (attrs[i].name === name) {\n                  attrs[i].value = value;\n                  break;\n                }\n              }\n            } else {\n              attrs.push({\n                name: name,\n                value: value\n              });\n            }\n            attrs.map[name] = value;\n            return self;\n          }\n          return attrs.map[name];\n        }\n      };\n      Node.prototype.clone = function () {\n        var self = this;\n        var clone = new Node(self.name, self.type);\n        var i, l, selfAttrs, selfAttr, cloneAttrs;\n        if (selfAttrs = self.attributes) {\n          cloneAttrs = [];\n          cloneAttrs.map = {};\n          for (i = 0, l = selfAttrs.length; i < l; i++) {\n            selfAttr = selfAttrs[i];\n            if (selfAttr.name !== 'id') {\n              cloneAttrs[cloneAttrs.length] = {\n                name: selfAttr.name,\n                value: selfAttr.value\n              };\n              cloneAttrs.map[selfAttr.name] = selfAttr.value;\n            }\n          }\n          clone.attributes = cloneAttrs;\n        }\n        clone.value = self.value;\n        clone.shortEnded = self.shortEnded;\n        return clone;\n      };\n      Node.prototype.wrap = function (wrapper) {\n        var self = this;\n        self.parent.insert(wrapper, self);\n        wrapper.append(self);\n        return self;\n      };\n      Node.prototype.unwrap = function () {\n        var self = this;\n        var node, next;\n        for (node = self.firstChild; node;) {\n          next = node.next;\n          self.insert(node, self, true);\n          node = next;\n        }\n        self.remove();\n      };\n      Node.prototype.remove = function () {\n        var self = this, parent = self.parent, next = self.next, prev = self.prev;\n        if (parent) {\n          if (parent.firstChild === self) {\n            parent.firstChild = next;\n            if (next) {\n              next.prev = null;\n            }\n          } else {\n            prev.next = next;\n          }\n          if (parent.lastChild === self) {\n            parent.lastChild = prev;\n            if (prev) {\n              prev.next = null;\n            }\n          } else {\n            next.prev = prev;\n          }\n          self.parent = self.next = self.prev = null;\n        }\n        return self;\n      };\n      Node.prototype.append = function (node) {\n        var self = this;\n        var last;\n        if (node.parent) {\n          node.remove();\n        }\n        last = self.lastChild;\n        if (last) {\n          last.next = node;\n          node.prev = last;\n          self.lastChild = node;\n        } else {\n          self.lastChild = self.firstChild = node;\n        }\n        node.parent = self;\n        return node;\n      };\n      Node.prototype.insert = function (node, refNode, before) {\n        var parent;\n        if (node.parent) {\n          node.remove();\n        }\n        parent = refNode.parent || this;\n        if (before) {\n          if (refNode === parent.firstChild) {\n            parent.firstChild = node;\n          } else {\n            refNode.prev.next = node;\n          }\n          node.prev = refNode.prev;\n          node.next = refNode;\n          refNode.prev = node;\n        } else {\n          if (refNode === parent.lastChild) {\n            parent.lastChild = node;\n          } else {\n            refNode.next.prev = node;\n          }\n          node.next = refNode.next;\n          node.prev = refNode;\n          refNode.next = node;\n        }\n        node.parent = parent;\n        return node;\n      };\n      Node.prototype.getAll = function (name) {\n        var self = this;\n        var node;\n        var collection = [];\n        for (node = self.firstChild; node; node = walk$2(node, self)) {\n          if (node.name === name) {\n            collection.push(node);\n          }\n        }\n        return collection;\n      };\n      Node.prototype.empty = function () {\n        var self = this;\n        var nodes, i, node;\n        if (self.firstChild) {\n          nodes = [];\n          for (node = self.firstChild; node; node = walk$2(node, self)) {\n            nodes.push(node);\n          }\n          i = nodes.length;\n          while (i--) {\n            node = nodes[i];\n            node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\n          }\n        }\n        self.firstChild = self.lastChild = null;\n        return self;\n      };\n      Node.prototype.isEmpty = function (elements, whitespace, predicate) {\n        var self = this;\n        var node = self.firstChild, i, name;\n        whitespace = whitespace || {};\n        if (node) {\n          do {\n            if (node.type === 1) {\n              if (node.attributes.map['data-mce-bogus']) {\n                continue;\n              }\n              if (elements[node.name]) {\n                return false;\n              }\n              i = node.attributes.length;\n              while (i--) {\n                name = node.attributes[i].name;\n                if (name === 'name' || name.indexOf('data-mce-bookmark') === 0) {\n                  return false;\n                }\n              }\n            }\n            if (node.type === 8) {\n              return false;\n            }\n            if (node.type === 3 && !whiteSpaceRegExp$3.test(node.value)) {\n              return false;\n            }\n            if (node.type === 3 && node.parent && whitespace[node.parent.name] && whiteSpaceRegExp$3.test(node.value)) {\n              return false;\n            }\n            if (predicate && predicate(node)) {\n              return false;\n            }\n          } while (node = walk$2(node, self));\n        }\n        return true;\n      };\n      Node.prototype.walk = function (prev) {\n        return walk$2(this, null, prev);\n      };\n      return Node;\n    }();\n\n    var paddEmptyNode = function (settings, args, blockElements, node) {\n      var brPreferred = settings.padd_empty_with_br || args.insert;\n      if (brPreferred && blockElements[node.name]) {\n        node.empty().append(new Node$1('br', 1)).shortEnded = true;\n      } else {\n        node.empty().append(new Node$1('#text', 3)).value = '\\xA0';\n      }\n    };\n    var isPaddedWithNbsp = function (node) {\n      return hasOnlyChild(node, '#text') && node.firstChild.value === '\\xA0';\n    };\n    var hasOnlyChild = function (node, name) {\n      return node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name;\n    };\n    var isPadded = function (schema, node) {\n      var rule = schema.getElementRule(node.name);\n      return rule && rule.paddEmpty;\n    };\n    var isEmpty$2 = function (schema, nonEmptyElements, whitespaceElements, node) {\n      return node.isEmpty(nonEmptyElements, whitespaceElements, function (node) {\n        return isPadded(schema, node);\n      });\n    };\n    var isLineBreakNode = function (node, blockElements) {\n      return node && (blockElements[node.name] || node.name === 'br');\n    };\n\n    var register$2 = function (parser, settings) {\n      var schema = parser.schema;\n      if (settings.remove_trailing_brs) {\n        parser.addNodeFilter('br', function (nodes, _, args) {\n          var i;\n          var l = nodes.length;\n          var node;\n          var blockElements = Tools.extend({}, schema.getBlockElements());\n          var nonEmptyElements = schema.getNonEmptyElements();\n          var parent, lastParent, prev, prevName;\n          var whiteSpaceElements = schema.getWhiteSpaceElements();\n          var elementRule, textNode;\n          blockElements.body = 1;\n          for (i = 0; i < l; i++) {\n            node = nodes[i];\n            parent = node.parent;\n            if (blockElements[node.parent.name] && node === parent.lastChild) {\n              prev = node.prev;\n              while (prev) {\n                prevName = prev.name;\n                if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') {\n                  if (prevName !== 'br') {\n                    break;\n                  }\n                  if (prevName === 'br') {\n                    node = null;\n                    break;\n                  }\n                }\n                prev = prev.prev;\n              }\n              if (node) {\n                node.remove();\n                if (isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, parent)) {\n                  elementRule = schema.getElementRule(parent.name);\n                  if (elementRule) {\n                    if (elementRule.removeEmpty) {\n                      parent.remove();\n                    } else if (elementRule.paddEmpty) {\n                      paddEmptyNode(settings, args, blockElements, parent);\n                    }\n                  }\n                }\n              }\n            } else {\n              lastParent = node;\n              while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) {\n                lastParent = parent;\n                if (blockElements[parent.name]) {\n                  break;\n                }\n                parent = parent.parent;\n              }\n              if (lastParent === parent && settings.padd_empty_with_br !== true) {\n                textNode = new Node$1('#text', 3);\n                textNode.value = '\\xA0';\n                node.replace(textNode);\n              }\n            }\n          }\n        });\n      }\n      parser.addAttributeFilter('href', function (nodes) {\n        var i = nodes.length, node;\n        var appendRel = function (rel) {\n          var parts = rel.split(' ').filter(function (p) {\n            return p.length > 0;\n          });\n          return parts.concat(['noopener']).sort().join(' ');\n        };\n        var addNoOpener = function (rel) {\n          var newRel = rel ? Tools.trim(rel) : '';\n          if (!/\\b(noopener)\\b/g.test(newRel)) {\n            return appendRel(newRel);\n          } else {\n            return newRel;\n          }\n        };\n        if (!settings.allow_unsafe_link_target) {\n          while (i--) {\n            node = nodes[i];\n            if (node.name === 'a' && node.attr('target') === '_blank') {\n              node.attr('rel', addNoOpener(node.attr('rel')));\n            }\n          }\n        }\n      });\n      if (!settings.allow_html_in_named_anchor) {\n        parser.addAttributeFilter('id,name', function (nodes) {\n          var i = nodes.length, sibling, prevSibling, parent, node;\n          while (i--) {\n            node = nodes[i];\n            if (node.name === 'a' && node.firstChild && !node.attr('href')) {\n              parent = node.parent;\n              sibling = node.lastChild;\n              do {\n                prevSibling = sibling.prev;\n                parent.insert(sibling, node);\n                sibling = prevSibling;\n              } while (sibling);\n            }\n          }\n        });\n      }\n      if (settings.fix_list_elements) {\n        parser.addNodeFilter('ul,ol', function (nodes) {\n          var i = nodes.length, node, parentNode;\n          while (i--) {\n            node = nodes[i];\n            parentNode = node.parent;\n            if (parentNode.name === 'ul' || parentNode.name === 'ol') {\n              if (node.prev && node.prev.name === 'li') {\n                node.prev.append(node);\n              } else {\n                var li = new Node$1('li', 1);\n                li.attr('style', 'list-style-type: none');\n                node.wrap(li);\n              }\n            }\n          }\n        });\n      }\n      if (settings.validate && schema.getValidClasses()) {\n        parser.addAttributeFilter('class', function (nodes) {\n          var i = nodes.length, node, classList, ci, className, classValue;\n          var validClasses = schema.getValidClasses();\n          var validClassesMap, valid;\n          while (i--) {\n            node = nodes[i];\n            classList = node.attr('class').split(' ');\n            classValue = '';\n            for (ci = 0; ci < classList.length; ci++) {\n              className = classList[ci];\n              valid = false;\n              validClassesMap = validClasses['*'];\n              if (validClassesMap && validClassesMap[className]) {\n                valid = true;\n              }\n              validClassesMap = validClasses[node.name];\n              if (!valid && validClassesMap && validClassesMap[className]) {\n                valid = true;\n              }\n              if (valid) {\n                if (classValue) {\n                  classValue += ' ';\n                }\n                classValue += className;\n              }\n            }\n            if (!classValue.length) {\n              classValue = null;\n            }\n            node.attr('class', classValue);\n          }\n        });\n      }\n    };\n\n    var makeMap$4 = Tools.makeMap, each$i = Tools.each, explode$3 = Tools.explode, extend$3 = Tools.extend;\n    function DomParser (settings, schema) {\n      if (schema === void 0) {\n        schema = Schema();\n      }\n      var nodeFilters = {};\n      var attributeFilters = [];\n      var matchedNodes = {};\n      var matchedAttributes = {};\n      settings = settings || {};\n      settings.validate = 'validate' in settings ? settings.validate : true;\n      settings.root_name = settings.root_name || 'body';\n      var fixInvalidChildren = function (nodes) {\n        var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i;\n        var nonEmptyElements, whitespaceElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode;\n        nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table');\n        nonEmptyElements = schema.getNonEmptyElements();\n        whitespaceElements = schema.getWhiteSpaceElements();\n        textBlockElements = schema.getTextBlockElements();\n        specialElements = schema.getSpecialElements();\n        for (ni = 0; ni < nodes.length; ni++) {\n          node = nodes[ni];\n          if (!node.parent || node.fixed) {\n            continue;\n          }\n          if (textBlockElements[node.name] && node.parent.name === 'li') {\n            sibling = node.next;\n            while (sibling) {\n              if (textBlockElements[sibling.name]) {\n                sibling.name = 'li';\n                sibling.fixed = true;\n                node.parent.insert(sibling, node.parent);\n              } else {\n                break;\n              }\n              sibling = sibling.next;\n            }\n            node.unwrap(node);\n            continue;\n          }\n          parents = [node];\n          for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent) {\n            parents.push(parent);\n          }\n          if (parent && parents.length > 1) {\n            parents.reverse();\n            newParent = currentNode = filterNode(parents[0].clone());\n            for (i = 0; i < parents.length - 1; i++) {\n              if (schema.isValidChild(currentNode.name, parents[i].name)) {\n                tempNode = filterNode(parents[i].clone());\n                currentNode.append(tempNode);\n              } else {\n                tempNode = currentNode;\n              }\n              for (childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n                nextNode = childNode.next;\n                tempNode.append(childNode);\n                childNode = nextNode;\n              }\n              currentNode = tempNode;\n            }\n            if (!isEmpty$2(schema, nonEmptyElements, whitespaceElements, newParent)) {\n              parent.insert(newParent, parents[0], true);\n              parent.insert(node, newParent);\n            } else {\n              parent.insert(node, parents[0], true);\n            }\n            parent = parents[0];\n            if (isEmpty$2(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\n              parent.empty().remove();\n            }\n          } else if (node.parent) {\n            if (node.name === 'li') {\n              sibling = node.prev;\n              if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\n                sibling.append(node);\n                continue;\n              }\n              sibling = node.next;\n              if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\n                sibling.insert(node, sibling.firstChild, true);\n                continue;\n              }\n              node.wrap(filterNode(new Node$1('ul', 1)));\n              continue;\n            }\n            if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n              node.wrap(filterNode(new Node$1('div', 1)));\n            } else {\n              if (specialElements[node.name]) {\n                node.empty().remove();\n              } else {\n                node.unwrap();\n              }\n            }\n          }\n        }\n      };\n      var filterNode = function (node) {\n        var i, name, list;\n        name = node.name;\n        if (name in nodeFilters) {\n          list = matchedNodes[name];\n          if (list) {\n            list.push(node);\n          } else {\n            matchedNodes[name] = [node];\n          }\n        }\n        i = attributeFilters.length;\n        while (i--) {\n          name = attributeFilters[i].name;\n          if (name in node.attributes.map) {\n            list = matchedAttributes[name];\n            if (list) {\n              list.push(node);\n            } else {\n              matchedAttributes[name] = [node];\n            }\n          }\n        }\n        return node;\n      };\n      var addNodeFilter = function (name, callback) {\n        each$i(explode$3(name), function (name) {\n          var list = nodeFilters[name];\n          if (!list) {\n            nodeFilters[name] = list = [];\n          }\n          list.push(callback);\n        });\n      };\n      var getNodeFilters = function () {\n        var out = [];\n        for (var name in nodeFilters) {\n          if (nodeFilters.hasOwnProperty(name)) {\n            out.push({\n              name: name,\n              callbacks: nodeFilters[name]\n            });\n          }\n        }\n        return out;\n      };\n      var addAttributeFilter = function (name, callback) {\n        each$i(explode$3(name), function (name) {\n          var i;\n          for (i = 0; i < attributeFilters.length; i++) {\n            if (attributeFilters[i].name === name) {\n              attributeFilters[i].callbacks.push(callback);\n              return;\n            }\n          }\n          attributeFilters.push({\n            name: name,\n            callbacks: [callback]\n          });\n        });\n      };\n      var getAttributeFilters = function () {\n        return [].concat(attributeFilters);\n      };\n      var parse = function (html, args) {\n        var parser, nodes, i, l, fi, fl, list, name;\n        var blockElements;\n        var invalidChildren = [];\n        var isInWhiteSpacePreservedElement;\n        var node;\n        args = args || {};\n        matchedNodes = {};\n        matchedAttributes = {};\n        blockElements = extend$3(makeMap$4('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n        var nonEmptyElements = schema.getNonEmptyElements();\n        var children = schema.children;\n        var validate = settings.validate;\n        var rootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;\n        var whiteSpaceElements = schema.getWhiteSpaceElements();\n        var startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n        var endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n        var allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n        var isAllWhiteSpaceRegExp = /^[ \\t\\r\\n]+$/;\n        isInWhiteSpacePreservedElement = whiteSpaceElements.hasOwnProperty(args.context) || whiteSpaceElements.hasOwnProperty(settings.root_name);\n        var addRootBlocks = function () {\n          var node = rootNode.firstChild, next, rootBlockNode;\n          var trim = function (rootBlockNode) {\n            if (rootBlockNode) {\n              node = rootBlockNode.firstChild;\n              if (node && node.type === 3) {\n                node.value = node.value.replace(startWhiteSpaceRegExp, '');\n              }\n              node = rootBlockNode.lastChild;\n              if (node && node.type === 3) {\n                node.value = node.value.replace(endWhiteSpaceRegExp, '');\n              }\n            }\n          };\n          if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n            return;\n          }\n          while (node) {\n            next = node.next;\n            if (node.type === 3 || node.type === 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type')) {\n              if (!rootBlockNode) {\n                rootBlockNode = createNode(rootBlockName, 1);\n                rootBlockNode.attr(settings.forced_root_block_attrs);\n                rootNode.insert(rootBlockNode, node);\n                rootBlockNode.append(node);\n              } else {\n                rootBlockNode.append(node);\n              }\n            } else {\n              trim(rootBlockNode);\n              rootBlockNode = null;\n            }\n            node = next;\n          }\n          trim(rootBlockNode);\n        };\n        var createNode = function (name, type) {\n          var node = new Node$1(name, type);\n          var list;\n          if (name in nodeFilters) {\n            list = matchedNodes[name];\n            if (list) {\n              list.push(node);\n            } else {\n              matchedNodes[name] = [node];\n            }\n          }\n          return node;\n        };\n        var removeWhitespaceBefore = function (node) {\n          var textNode, textNodeNext, textVal, sibling;\n          var blockElements = schema.getBlockElements();\n          for (textNode = node.prev; textNode && textNode.type === 3;) {\n            textVal = textNode.value.replace(endWhiteSpaceRegExp, '');\n            if (textVal.length > 0) {\n              textNode.value = textVal;\n              return;\n            }\n            textNodeNext = textNode.next;\n            if (textNodeNext) {\n              if (textNodeNext.type === 3 && textNodeNext.value.length) {\n                textNode = textNode.prev;\n                continue;\n              }\n              if (!blockElements[textNodeNext.name] && textNodeNext.name !== 'script' && textNodeNext.name !== 'style') {\n                textNode = textNode.prev;\n                continue;\n              }\n            }\n            sibling = textNode.prev;\n            textNode.remove();\n            textNode = sibling;\n          }\n        };\n        var cloneAndExcludeBlocks = function (input) {\n          var name;\n          var output = {};\n          for (name in input) {\n            if (name !== 'li' && name !== 'p') {\n              output[name] = input[name];\n            }\n          }\n          return output;\n        };\n        parser = SaxParser$1({\n          validate: validate,\n          allow_script_urls: settings.allow_script_urls,\n          allow_conditional_comments: settings.allow_conditional_comments,\n          self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()),\n          cdata: function (text) {\n            node.append(createNode('#cdata', 4)).value = text;\n          },\n          text: function (text, raw) {\n            var textNode;\n            if (!isInWhiteSpacePreservedElement) {\n              text = text.replace(allWhiteSpaceRegExp, ' ');\n              if (isLineBreakNode(node.lastChild, blockElements)) {\n                text = text.replace(startWhiteSpaceRegExp, '');\n              }\n            }\n            if (text.length !== 0) {\n              textNode = createNode('#text', 3);\n              textNode.raw = !!raw;\n              node.append(textNode).value = text;\n            }\n          },\n          comment: function (text) {\n            node.append(createNode('#comment', 8)).value = text;\n          },\n          pi: function (name, text) {\n            node.append(createNode(name, 7)).value = text;\n            removeWhitespaceBefore(node);\n          },\n          doctype: function (text) {\n            var newNode;\n            newNode = node.append(createNode('#doctype', 10));\n            newNode.value = text;\n            removeWhitespaceBefore(node);\n          },\n          start: function (name, attrs, empty) {\n            var newNode, attrFiltersLen, elementRule, attrName, parent;\n            elementRule = validate ? schema.getElementRule(name) : {};\n            if (elementRule) {\n              newNode = createNode(elementRule.outputName || name, 1);\n              newNode.attributes = attrs;\n              newNode.shortEnded = empty;\n              node.append(newNode);\n              parent = children[node.name];\n              if (parent && children[newNode.name] && !parent[newNode.name]) {\n                invalidChildren.push(newNode);\n              }\n              attrFiltersLen = attributeFilters.length;\n              while (attrFiltersLen--) {\n                attrName = attributeFilters[attrFiltersLen].name;\n                if (attrName in attrs.map) {\n                  list = matchedAttributes[attrName];\n                  if (list) {\n                    list.push(newNode);\n                  } else {\n                    matchedAttributes[attrName] = [newNode];\n                  }\n                }\n              }\n              if (blockElements[name]) {\n                removeWhitespaceBefore(newNode);\n              }\n              if (!empty) {\n                node = newNode;\n              }\n              if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n                isInWhiteSpacePreservedElement = true;\n              }\n            }\n          },\n          end: function (name) {\n            var textNode, elementRule, text, sibling, tempNode;\n            elementRule = validate ? schema.getElementRule(name) : {};\n            if (elementRule) {\n              if (blockElements[name]) {\n                if (!isInWhiteSpacePreservedElement) {\n                  textNode = node.firstChild;\n                  if (textNode && textNode.type === 3) {\n                    text = textNode.value.replace(startWhiteSpaceRegExp, '');\n                    if (text.length > 0) {\n                      textNode.value = text;\n                      textNode = textNode.next;\n                    } else {\n                      sibling = textNode.next;\n                      textNode.remove();\n                      textNode = sibling;\n                      while (textNode && textNode.type === 3) {\n                        text = textNode.value;\n                        sibling = textNode.next;\n                        if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n                          textNode.remove();\n                          textNode = sibling;\n                        }\n                        textNode = sibling;\n                      }\n                    }\n                  }\n                  textNode = node.lastChild;\n                  if (textNode && textNode.type === 3) {\n                    text = textNode.value.replace(endWhiteSpaceRegExp, '');\n                    if (text.length > 0) {\n                      textNode.value = text;\n                      textNode = textNode.prev;\n                    } else {\n                      sibling = textNode.prev;\n                      textNode.remove();\n                      textNode = sibling;\n                      while (textNode && textNode.type === 3) {\n                        text = textNode.value;\n                        sibling = textNode.prev;\n                        if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n                          textNode.remove();\n                          textNode = sibling;\n                        }\n                        textNode = sibling;\n                      }\n                    }\n                  }\n                }\n              }\n              if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n                isInWhiteSpacePreservedElement = false;\n              }\n              if (elementRule.removeEmpty && isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node)) {\n                if (!node.attributes.map.name && !node.attr('id')) {\n                  tempNode = node.parent;\n                  if (blockElements[node.name]) {\n                    node.empty().remove();\n                  } else {\n                    node.unwrap();\n                  }\n                  node = tempNode;\n                  return;\n                }\n              }\n              if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node))) {\n                paddEmptyNode(settings, args, blockElements, node);\n              }\n              node = node.parent;\n            }\n          }\n        }, schema);\n        var rootNode = node = new Node$1(args.context || settings.root_name, 11);\n        parser.parse(html);\n        if (validate && invalidChildren.length) {\n          if (!args.context) {\n            fixInvalidChildren(invalidChildren);\n          } else {\n            args.invalid = true;\n          }\n        }\n        if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n          addRootBlocks();\n        }\n        if (!args.invalid) {\n          for (name in matchedNodes) {\n            list = nodeFilters[name];\n            nodes = matchedNodes[name];\n            fi = nodes.length;\n            while (fi--) {\n              if (!nodes[fi].parent) {\n                nodes.splice(fi, 1);\n              }\n            }\n            for (i = 0, l = list.length; i < l; i++) {\n              list[i](nodes, name, args);\n            }\n          }\n          for (i = 0, l = attributeFilters.length; i < l; i++) {\n            list = attributeFilters[i];\n            if (list.name in matchedAttributes) {\n              nodes = matchedAttributes[list.name];\n              fi = nodes.length;\n              while (fi--) {\n                if (!nodes[fi].parent) {\n                  nodes.splice(fi, 1);\n                }\n              }\n              for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) {\n                list.callbacks[fi](nodes, list.name, args);\n              }\n            }\n          }\n        }\n        return rootNode;\n      };\n      var exports = {\n        schema: schema,\n        addAttributeFilter: addAttributeFilter,\n        getAttributeFilters: getAttributeFilters,\n        addNodeFilter: addNodeFilter,\n        getNodeFilters: getNodeFilters,\n        filterNode: filterNode,\n        parse: parse\n      };\n      register$2(exports, settings);\n      LegacyFilter.register(exports, settings);\n      return exports;\n    }\n\n    var addTempAttr = function (htmlParser, tempAttrs, name) {\n      if (Tools.inArray(tempAttrs, name) === -1) {\n        htmlParser.addAttributeFilter(name, function (nodes, name) {\n          var i = nodes.length;\n          while (i--) {\n            nodes[i].attr(name, null);\n          }\n        });\n        tempAttrs.push(name);\n      }\n    };\n    var postProcess$1 = function (editor, args, content) {\n      if (!args.no_events && editor) {\n        var outArgs = Events.firePostProcess(editor, merge(args, { content: content }));\n        return outArgs.content;\n      } else {\n        return content;\n      }\n    };\n    var getHtmlFromNode = function (dom, node, args) {\n      var html = Zwsp.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n      return args.selection || isWsPreserveElement(Element.fromDom(node)) ? html : Tools.trim(html);\n    };\n    var parseHtml = function (htmlParser, html, args) {\n      var parserArgs = args.selection ? merge({ forced_root_block: false }, args) : args;\n      var rootNode = htmlParser.parse(html, parserArgs);\n      DomSerializerFilters.trimTrailingBr(rootNode);\n      return rootNode;\n    };\n    var serializeNode = function (settings, schema, node) {\n      var htmlSerializer = HtmlSerializer(settings, schema);\n      return htmlSerializer.serialize(node);\n    };\n    var toHtml = function (editor, settings, schema, rootNode, args) {\n      var content = serializeNode(settings, schema, rootNode);\n      return postProcess$1(editor, args, content);\n    };\n    function DomSerializer (settings, editor) {\n      var dom, schema, htmlParser;\n      var tempAttrs = ['data-mce-selected'];\n      dom = editor && editor.dom ? editor.dom : DOMUtils$1.DOM;\n      schema = editor && editor.schema ? editor.schema : Schema(settings);\n      settings.entity_encoding = settings.entity_encoding || 'named';\n      settings.remove_trailing_brs = 'remove_trailing_brs' in settings ? settings.remove_trailing_brs : true;\n      htmlParser = DomParser(settings, schema);\n      DomSerializerFilters.register(htmlParser, settings, dom);\n      var serialize = function (node, parserArgs) {\n        var args = merge({ format: 'html' }, parserArgs ? parserArgs : {});\n        var targetNode = DomSerializerPreProcess.process(editor, node, args);\n        var html = getHtmlFromNode(dom, targetNode, args);\n        var rootNode = parseHtml(htmlParser, html, args);\n        return args.format === 'tree' ? rootNode : toHtml(editor, settings, schema, rootNode, args);\n      };\n      return {\n        schema: schema,\n        addNodeFilter: htmlParser.addNodeFilter,\n        addAttributeFilter: htmlParser.addAttributeFilter,\n        serialize: serialize,\n        addRules: function (rules) {\n          schema.addValidElements(rules);\n        },\n        setRules: function (rules) {\n          schema.setValidElements(rules);\n        },\n        addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\n        getTempAttrs: function () {\n          return tempAttrs;\n        }\n      };\n    }\n\n    function DomSerializer$1 (settings, editor) {\n      var domSerializer = DomSerializer(settings, editor);\n      return {\n        schema: domSerializer.schema,\n        addNodeFilter: domSerializer.addNodeFilter,\n        addAttributeFilter: domSerializer.addAttributeFilter,\n        serialize: domSerializer.serialize,\n        addRules: domSerializer.addRules,\n        setRules: domSerializer.setRules,\n        addTempAttr: domSerializer.addTempAttr,\n        getTempAttrs: domSerializer.getTempAttrs\n      };\n    }\n\n    function BookmarkManager(selection) {\n      return {\n        getBookmark: curry(Bookmarks.getBookmark, selection),\n        moveToBookmark: curry(Bookmarks.moveToBookmark, selection)\n      };\n    }\n    (function (BookmarkManager) {\n      BookmarkManager.isBookmarkNode = Bookmarks.isBookmarkNode;\n    }(BookmarkManager || (BookmarkManager = {})));\n    var BookmarkManager$1 = BookmarkManager;\n\n    var isContentEditableFalse$a = NodeType.isContentEditableFalse;\n    var isContentEditableTrue$5 = NodeType.isContentEditableTrue;\n    var getContentEditableRoot$2 = function (root, node) {\n      while (node && node !== root) {\n        if (isContentEditableTrue$5(node) || isContentEditableFalse$a(node)) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    var ControlSelection = function (selection, editor) {\n      var dom = editor.dom, each = Tools.each;\n      var selectedElm, selectedElmGhost, resizeHelper, resizeHandles, selectedHandle;\n      var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n      var width, height;\n      var editableDoc = editor.getDoc(), rootDocument = domGlobals.document;\n      var abs = Math.abs, round = Math.round, rootElement = editor.getBody();\n      var startScrollWidth, startScrollHeight;\n      resizeHandles = {\n        nw: [\n          0,\n          0,\n          -1,\n          -1\n        ],\n        ne: [\n          1,\n          0,\n          1,\n          -1\n        ],\n        se: [\n          1,\n          1,\n          1,\n          1\n        ],\n        sw: [\n          0,\n          1,\n          -1,\n          1\n        ]\n      };\n      var rootClass = '.mce-content-body';\n      editor.contentStyles.push(rootClass + ' div.mce-resizehandle {' + 'position: absolute;' + 'border: 1px solid black;' + 'box-sizing: content-box;' + 'background: #FFF;' + 'width: 7px;' + 'height: 7px;' + 'z-index: 10000' + '}' + rootClass + ' .mce-resizehandle:hover {' + 'background: #000' + '}' + rootClass + ' img[data-mce-selected],' + rootClass + ' hr[data-mce-selected] {' + 'outline: 1px solid black;' + 'resize: none' + '}' + rootClass + ' .mce-clonedresizable {' + 'position: absolute;' + (Env.gecko ? '' : 'outline: 1px dashed black;') + 'opacity: .5;' + 'filter: alpha(opacity=50);' + 'z-index: 10000' + '}' + rootClass + ' .mce-resize-helper {' + 'background: #555;' + 'background: rgba(0,0,0,0.75);' + 'border-radius: 3px;' + 'border: 1px;' + 'color: white;' + 'display: none;' + 'font-family: sans-serif;' + 'font-size: 12px;' + 'white-space: nowrap;' + 'line-height: 14px;' + 'margin: 5px 10px;' + 'padding: 5px;' + 'position: absolute;' + 'z-index: 10001' + '}');\n      var isImage = function (elm) {\n        return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));\n      };\n      var isEventOnImageOutsideRange = function (evt, range) {\n        return isImage(evt.target) && !RangePoint.isXYWithinRange(evt.clientX, evt.clientY, range);\n      };\n      var contextMenuSelectImage = function (evt) {\n        var target = evt.target;\n        if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n          editor.selection.select(target);\n        }\n      };\n      var getResizeTarget = function (elm) {\n        return editor.dom.is(elm, 'figure.image') ? elm.querySelector('img') : elm;\n      };\n      var isResizable = function (elm) {\n        var selector = editor.settings.object_resizing;\n        if (selector === false || Env.iOS) {\n          return false;\n        }\n        if (typeof selector !== 'string') {\n          selector = 'table,img,figure.image,div';\n        }\n        if (elm.getAttribute('data-mce-resize') === 'false') {\n          return false;\n        }\n        if (elm === editor.getBody()) {\n          return false;\n        }\n        return is$1(Element.fromDom(elm), selector);\n      };\n      var resizeGhostElement = function (e) {\n        var deltaX, deltaY, proportional;\n        var resizeHelperX, resizeHelperY;\n        deltaX = e.screenX - startX;\n        deltaY = e.screenY - startY;\n        width = deltaX * selectedHandle[2] + startW;\n        height = deltaY * selectedHandle[3] + startH;\n        width = width < 5 ? 5 : width;\n        height = height < 5 ? 5 : height;\n        if (isImage(selectedElm) && editor.settings.resize_img_proportional !== false) {\n          proportional = !VK.modifierPressed(e);\n        } else {\n          proportional = VK.modifierPressed(e) || isImage(selectedElm) && selectedHandle[2] * selectedHandle[3] !== 0;\n        }\n        if (proportional) {\n          if (abs(deltaX) > abs(deltaY)) {\n            height = round(width * ratio);\n            width = round(height / ratio);\n          } else {\n            width = round(height / ratio);\n            height = round(width * ratio);\n          }\n        }\n        dom.setStyles(getResizeTarget(selectedElmGhost), {\n          width: width,\n          height: height\n        });\n        resizeHelperX = selectedHandle.startPos.x + deltaX;\n        resizeHelperY = selectedHandle.startPos.y + deltaY;\n        resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n        resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n        dom.setStyles(resizeHelper, {\n          left: resizeHelperX,\n          top: resizeHelperY,\n          display: 'block'\n        });\n        resizeHelper.innerHTML = width + ' &times; ' + height;\n        if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n          dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\n        }\n        if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n          dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\n        }\n        deltaX = rootElement.scrollWidth - startScrollWidth;\n        deltaY = rootElement.scrollHeight - startScrollHeight;\n        if (deltaX + deltaY !== 0) {\n          dom.setStyles(resizeHelper, {\n            left: resizeHelperX - deltaX,\n            top: resizeHelperY - deltaY\n          });\n        }\n        if (!resizeStarted) {\n          Events.fireObjectResizeStart(editor, selectedElm, startW, startH);\n          resizeStarted = true;\n        }\n      };\n      var endGhostResize = function () {\n        resizeStarted = false;\n        var setSizeProp = function (name, value) {\n          if (value) {\n            if (selectedElm.style[name] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name)) {\n              dom.setStyle(getResizeTarget(selectedElm), name, value);\n            } else {\n              dom.setAttrib(getResizeTarget(selectedElm), name, value);\n            }\n          }\n        };\n        setSizeProp('width', width);\n        setSizeProp('height', height);\n        dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n        dom.unbind(editableDoc, 'mouseup', endGhostResize);\n        if (rootDocument !== editableDoc) {\n          dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n          dom.unbind(rootDocument, 'mouseup', endGhostResize);\n        }\n        dom.remove(selectedElmGhost);\n        dom.remove(resizeHelper);\n        showResizeRect(selectedElm);\n        Events.fireObjectResized(editor, selectedElm, width, height);\n        dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n        editor.nodeChanged();\n      };\n      var showResizeRect = function (targetElm) {\n        var position, targetWidth, targetHeight, e, rect;\n        hideResizeRect();\n        unbindResizeHandleEvents();\n        position = dom.getPos(targetElm, rootElement);\n        selectedElmX = position.x;\n        selectedElmY = position.y;\n        rect = targetElm.getBoundingClientRect();\n        targetWidth = rect.width || rect.right - rect.left;\n        targetHeight = rect.height || rect.bottom - rect.top;\n        if (selectedElm !== targetElm) {\n          selectedElm = targetElm;\n          width = height = 0;\n        }\n        e = editor.fire('ObjectSelected', { target: targetElm });\n        if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n          each(resizeHandles, function (handle, name) {\n            var handleElm;\n            var startDrag = function (e) {\n              startX = e.screenX;\n              startY = e.screenY;\n              startW = getResizeTarget(selectedElm).clientWidth;\n              startH = getResizeTarget(selectedElm).clientHeight;\n              ratio = startH / startW;\n              selectedHandle = handle;\n              handle.startPos = {\n                x: targetWidth * handle[0] + selectedElmX,\n                y: targetHeight * handle[1] + selectedElmY\n              };\n              startScrollWidth = rootElement.scrollWidth;\n              startScrollHeight = rootElement.scrollHeight;\n              selectedElmGhost = selectedElm.cloneNode(true);\n              dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n              dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n              selectedElmGhost.contentEditable = false;\n              selectedElmGhost.unSelectabe = true;\n              dom.setStyles(selectedElmGhost, {\n                left: selectedElmX,\n                top: selectedElmY,\n                margin: 0\n              });\n              selectedElmGhost.removeAttribute('data-mce-selected');\n              rootElement.appendChild(selectedElmGhost);\n              dom.bind(editableDoc, 'mousemove', resizeGhostElement);\n              dom.bind(editableDoc, 'mouseup', endGhostResize);\n              if (rootDocument !== editableDoc) {\n                dom.bind(rootDocument, 'mousemove', resizeGhostElement);\n                dom.bind(rootDocument, 'mouseup', endGhostResize);\n              }\n              resizeHelper = dom.add(rootElement, 'div', {\n                'class': 'mce-resize-helper',\n                'data-mce-bogus': 'all'\n              }, startW + ' &times; ' + startH);\n            };\n            handleElm = dom.get('mceResizeHandle' + name);\n            if (handleElm) {\n              dom.remove(handleElm);\n            }\n            handleElm = dom.add(rootElement, 'div', {\n              'id': 'mceResizeHandle' + name,\n              'data-mce-bogus': 'all',\n              'class': 'mce-resizehandle',\n              'unselectable': true,\n              'style': 'cursor:' + name + '-resize; margin:0; padding:0'\n            });\n            if (Env.ie === 11) {\n              handleElm.contentEditable = false;\n            }\n            dom.bind(handleElm, 'mousedown', function (e) {\n              e.stopImmediatePropagation();\n              e.preventDefault();\n              startDrag(e);\n            });\n            handle.elm = handleElm;\n            dom.setStyles(handleElm, {\n              left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2,\n              top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2\n            });\n          });\n        } else {\n          hideResizeRect();\n        }\n        selectedElm.setAttribute('data-mce-selected', '1');\n      };\n      var hideResizeRect = function () {\n        var name, handleElm;\n        unbindResizeHandleEvents();\n        if (selectedElm) {\n          selectedElm.removeAttribute('data-mce-selected');\n        }\n        for (name in resizeHandles) {\n          handleElm = dom.get('mceResizeHandle' + name);\n          if (handleElm) {\n            dom.unbind(handleElm);\n            dom.remove(handleElm);\n          }\n        }\n      };\n      var updateResizeRect = function (e) {\n        var startElm, controlElm;\n        var isChildOrEqual = function (node, parent) {\n          if (node) {\n            do {\n              if (node === parent) {\n                return true;\n              }\n            } while (node = node.parentNode);\n          }\n        };\n        if (resizeStarted || editor.removed) {\n          return;\n        }\n        each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {\n          img.removeAttribute('data-mce-selected');\n        });\n        controlElm = e.type === 'mousedown' ? e.target : selection.getNode();\n        controlElm = dom.$(controlElm).closest('table,img,figure.image,hr')[0];\n        if (isChildOrEqual(controlElm, rootElement)) {\n          disableGeckoResize();\n          startElm = selection.getStart(true);\n          if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n            showResizeRect(controlElm);\n            return;\n          }\n        }\n        hideResizeRect();\n      };\n      var isWithinContentEditableFalse = function (elm) {\n        return isContentEditableFalse$a(getContentEditableRoot$2(editor.getBody(), elm));\n      };\n      var unbindResizeHandleEvents = function () {\n        for (var name in resizeHandles) {\n          var handle = resizeHandles[name];\n          if (handle.elm) {\n            dom.unbind(handle.elm);\n            delete handle.elm;\n          }\n        }\n      };\n      var disableGeckoResize = function () {\n        try {\n          editor.getDoc().execCommand('enableObjectResizing', false, false);\n        } catch (ex) {\n        }\n      };\n      editor.on('init', function () {\n        disableGeckoResize();\n        if (Env.ie && Env.ie >= 11) {\n          editor.on('mousedown click', function (e) {\n            var target = e.target, nodeName = target.nodeName;\n            if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName) && !isWithinContentEditableFalse(target)) {\n              if (e.button !== 2) {\n                editor.selection.select(target, nodeName === 'TABLE');\n              }\n              if (e.type === 'mousedown') {\n                editor.nodeChanged();\n              }\n            }\n          });\n          editor.dom.bind(rootElement, 'mscontrolselect', function (e) {\n            var delayedSelect = function (node) {\n              Delay.setEditorTimeout(editor, function () {\n                editor.selection.select(node);\n              });\n            };\n            if (isWithinContentEditableFalse(e.target)) {\n              e.preventDefault();\n              delayedSelect(e.target);\n              return;\n            }\n            if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) {\n              e.preventDefault();\n              if (e.target.tagName === 'IMG') {\n                delayedSelect(e.target);\n              }\n            }\n          });\n        }\n        var throttledUpdateResizeRect = Delay.throttle(function (e) {\n          if (!editor.composing) {\n            updateResizeRect(e);\n          }\n        });\n        editor.on('nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged', throttledUpdateResizeRect);\n        editor.on('keyup compositionend', function (e) {\n          if (selectedElm && selectedElm.nodeName === 'TABLE') {\n            throttledUpdateResizeRect(e);\n          }\n        });\n        editor.on('hide blur', hideResizeRect);\n        editor.on('contextmenu', contextMenuSelectImage);\n      });\n      editor.on('remove', unbindResizeHandleEvents);\n      var destroy = function () {\n        selectedElm = selectedElmGhost = null;\n      };\n      return {\n        isResizable: isResizable,\n        showResizeRect: showResizeRect,\n        hideResizeRect: hideResizeRect,\n        updateResizeRect: updateResizeRect,\n        destroy: destroy\n      };\n    };\n\n    var hasCeProperty = function (node) {\n      return NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node);\n    };\n    var findParent$1 = function (node, rootNode, predicate) {\n      while (node && node !== rootNode) {\n        if (predicate(node)) {\n          return node;\n        }\n        node = node.parentNode;\n      }\n      return null;\n    };\n    var findClosestIeRange = function (clientX, clientY, doc) {\n      var element, rng, rects;\n      element = doc.elementFromPoint(clientX, clientY);\n      rng = doc.body.createTextRange();\n      if (!element || element.tagName === 'HTML') {\n        element = doc.body;\n      }\n      rng.moveToElementText(element);\n      rects = Tools.toArray(rng.getClientRects());\n      rects = rects.sort(function (a, b) {\n        a = Math.abs(Math.max(a.top - clientY, a.bottom - clientY));\n        b = Math.abs(Math.max(b.top - clientY, b.bottom - clientY));\n        return a - b;\n      });\n      if (rects.length > 0) {\n        clientY = (rects[0].bottom + rects[0].top) / 2;\n        try {\n          rng.moveToPoint(clientX, clientY);\n          rng.collapse(true);\n          return rng;\n        } catch (ex) {\n        }\n      }\n      return null;\n    };\n    var moveOutOfContentEditableFalse = function (rng, rootNode) {\n      var parentElement = rng && rng.parentElement ? rng.parentElement() : null;\n      return NodeType.isContentEditableFalse(findParent$1(parentElement, rootNode, hasCeProperty)) ? null : rng;\n    };\n    var fromPoint$1 = function (clientX, clientY, doc) {\n      var rng, point;\n      var pointDoc = doc;\n      if (pointDoc.caretPositionFromPoint) {\n        point = pointDoc.caretPositionFromPoint(clientX, clientY);\n        if (point) {\n          rng = doc.createRange();\n          rng.setStart(point.offsetNode, point.offset);\n          rng.collapse(true);\n        }\n      } else if (doc.caretRangeFromPoint) {\n        rng = doc.caretRangeFromPoint(clientX, clientY);\n      } else if (pointDoc.body.createTextRange) {\n        rng = pointDoc.body.createTextRange();\n        try {\n          rng.moveToPoint(clientX, clientY);\n          rng.collapse(true);\n        } catch (ex) {\n          rng = findClosestIeRange(clientX, clientY, doc);\n        }\n        return moveOutOfContentEditableFalse(rng, doc.body);\n      }\n      return rng;\n    };\n    var CaretRangeFromPoint = { fromPoint: fromPoint$1 };\n\n    var processRanges = function (editor, ranges) {\n      return map(ranges, function (range) {\n        var evt = editor.fire('GetSelectionRange', { range: range });\n        return evt.range !== range ? evt.range : range;\n      });\n    };\n    var EventProcessRanges = { processRanges: processRanges };\n\n    var fromElements = function (elements, scope) {\n      var doc = scope || domGlobals.document;\n      var fragment = doc.createDocumentFragment();\n      each(elements, function (element) {\n        fragment.appendChild(element.dom());\n      });\n      return Element.fromDom(fragment);\n    };\n\n    var tableModel = Immutable('element', 'width', 'rows');\n    var tableRow = Immutable('element', 'cells');\n    var cellPosition = Immutable('x', 'y');\n    var getSpan = function (td, key) {\n      var value = parseInt(get(td, key), 10);\n      return isNaN(value) ? 1 : value;\n    };\n    var fillout = function (table, x, y, tr, td) {\n      var rowspan = getSpan(td, 'rowspan');\n      var colspan = getSpan(td, 'colspan');\n      var rows = table.rows();\n      for (var y2 = y; y2 < y + rowspan; y2++) {\n        if (!rows[y2]) {\n          rows[y2] = tableRow(deep(tr), []);\n        }\n        for (var x2 = x; x2 < x + colspan; x2++) {\n          var cells = rows[y2].cells();\n          cells[x2] = y2 === y && x2 === x ? td : shallow(td);\n        }\n      }\n    };\n    var cellExists = function (table, x, y) {\n      var rows = table.rows();\n      var cells = rows[y] ? rows[y].cells() : [];\n      return !!cells[x];\n    };\n    var skipCellsX = function (table, x, y) {\n      while (cellExists(table, x, y)) {\n        x++;\n      }\n      return x;\n    };\n    var getWidth = function (rows) {\n      return foldl(rows, function (acc, row) {\n        return row.cells().length > acc ? row.cells().length : acc;\n      }, 0);\n    };\n    var findElementPos = function (table, element) {\n      var rows = table.rows();\n      for (var y = 0; y < rows.length; y++) {\n        var cells = rows[y].cells();\n        for (var x = 0; x < cells.length; x++) {\n          if (eq(cells[x], element)) {\n            return Option.some(cellPosition(x, y));\n          }\n        }\n      }\n      return Option.none();\n    };\n    var extractRows = function (table, sx, sy, ex, ey) {\n      var newRows = [];\n      var rows = table.rows();\n      for (var y = sy; y <= ey; y++) {\n        var cells = rows[y].cells();\n        var slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1);\n        newRows.push(tableRow(rows[y].element(), slice));\n      }\n      return newRows;\n    };\n    var subTable = function (table, startPos, endPos) {\n      var sx = startPos.x(), sy = startPos.y();\n      var ex = endPos.x(), ey = endPos.y();\n      var newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy);\n      return tableModel(table.element(), getWidth(newRows), newRows);\n    };\n    var createDomTable = function (table, rows) {\n      var tableElement = shallow(table.element());\n      var tableBody = Element.fromTag('tbody');\n      append$1(tableBody, rows);\n      append(tableElement, tableBody);\n      return tableElement;\n    };\n    var modelRowsToDomRows = function (table) {\n      return map(table.rows(), function (row) {\n        var cells = map(row.cells(), function (cell) {\n          var td = deep(cell);\n          remove(td, 'colspan');\n          remove(td, 'rowspan');\n          return td;\n        });\n        var tr = shallow(row.element());\n        append$1(tr, cells);\n        return tr;\n      });\n    };\n    var fromDom$1 = function (tableElm) {\n      var table = tableModel(shallow(tableElm), 0, []);\n      each(descendants$1(tableElm, 'tr'), function (tr, y) {\n        each(descendants$1(tr, 'td,th'), function (td, x) {\n          fillout(table, skipCellsX(table, x, y), y, tr, td);\n        });\n      });\n      return tableModel(table.element(), getWidth(table.rows()), table.rows());\n    };\n    var toDom = function (table) {\n      return createDomTable(table, modelRowsToDomRows(table));\n    };\n    var subsection = function (table, startElement, endElement) {\n      return findElementPos(table, startElement).bind(function (startPos) {\n        return findElementPos(table, endElement).map(function (endPos) {\n          return subTable(table, startPos, endPos);\n        });\n      });\n    };\n    var SimpleTableModel = {\n      fromDom: fromDom$1,\n      toDom: toDom,\n      subsection: subsection\n    };\n\n    var findParentListContainer = function (parents) {\n      return find(parents, function (elm) {\n        return name(elm) === 'ul' || name(elm) === 'ol';\n      });\n    };\n    var getFullySelectedListWrappers = function (parents, rng) {\n      return find(parents, function (elm) {\n        return name(elm) === 'li' && hasAllContentsSelected(elm, rng);\n      }).fold(constant([]), function (li) {\n        return findParentListContainer(parents).map(function (listCont) {\n          return [\n            Element.fromTag('li'),\n            Element.fromTag(name(listCont))\n          ];\n        }).getOr([]);\n      });\n    };\n    var wrap$3 = function (innerElm, elms) {\n      var wrapped = foldl(elms, function (acc, elm) {\n        append(elm, acc);\n        return elm;\n      }, innerElm);\n      return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n    };\n    var directListWrappers = function (commonAnchorContainer) {\n      if (isListItem(commonAnchorContainer)) {\n        return parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) {\n          return [\n            commonAnchorContainer,\n            listElm\n          ];\n        });\n      } else {\n        return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n      }\n    };\n    var getWrapElements = function (rootNode, rng) {\n      var commonAnchorContainer = Element.fromDom(rng.commonAncestorContainer);\n      var parents = Parents.parentsAndSelf(commonAnchorContainer, rootNode);\n      var wrapElements = filter(parents, function (elm) {\n        return isInline(elm) || isHeading(elm);\n      });\n      var listWrappers = getFullySelectedListWrappers(parents, rng);\n      var allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n      return map(allWrappers, shallow);\n    };\n    var emptyFragment = function () {\n      return fromElements([]);\n    };\n    var getFragmentFromRange = function (rootNode, rng) {\n      return wrap$3(Element.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\n    };\n    var getParentTable = function (rootElm, cell) {\n      return ancestor$1(cell, 'table', curry(eq, rootElm));\n    };\n    var getTableFragment = function (rootNode, selectedTableCells) {\n      return getParentTable(rootNode, selectedTableCells[0]).bind(function (tableElm) {\n        var firstCell = selectedTableCells[0];\n        var lastCell = selectedTableCells[selectedTableCells.length - 1];\n        var fullTableModel = SimpleTableModel.fromDom(tableElm);\n        return SimpleTableModel.subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {\n          return fromElements([SimpleTableModel.toDom(sectionedTableModel)]);\n        });\n      }).getOrThunk(emptyFragment);\n    };\n    var getSelectionFragment = function (rootNode, ranges) {\n      return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);\n    };\n    var read$4 = function (rootNode, ranges) {\n      var selectedCells = TableCellSelection.getCellsFromElementOrRanges(ranges, rootNode);\n      return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\n    };\n    var FragmentReader = { read: read$4 };\n\n    var getTextContent = function (editor) {\n      return Option.from(editor.selection.getRng()).map(function (rng) {\n        var bin = editor.dom.add(editor.getBody(), 'div', {\n          'data-mce-bogus': 'all',\n          'style': 'overflow: hidden; opacity: 0;'\n        }, rng.cloneContents());\n        var text = Zwsp.trim(bin.innerText);\n        editor.dom.remove(bin);\n        return text;\n      }).getOr('');\n    };\n    var getHtmlContent = function (editor, args) {\n      var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n      var sel = editor.selection.getSel();\n      var fragment;\n      var ranges = EventProcessRanges.processRanges(editor, MultiRange.getRanges(sel));\n      fragment = args.contextual ? FragmentReader.read(Element.fromDom(editor.getBody()), ranges).dom() : rng.cloneContents();\n      if (fragment) {\n        tmpElm.appendChild(fragment);\n      }\n      return editor.selection.serializer.serialize(tmpElm, args);\n    };\n    var getContent = function (editor, args) {\n      if (args === void 0) {\n        args = {};\n      }\n      args.get = true;\n      args.format = args.format || 'html';\n      args.selection = true;\n      args = editor.fire('BeforeGetContent', args);\n      if (args.isDefaultPrevented()) {\n        editor.fire('GetContent', args);\n        return args.content;\n      }\n      if (args.format === 'text') {\n        return getTextContent(editor);\n      } else {\n        args.getInner = true;\n        var content = getHtmlContent(editor, args);\n        if (args.format === 'tree') {\n          return content;\n        } else {\n          args.content = editor.selection.isCollapsed() ? '' : content;\n          editor.fire('GetContent', args);\n          return args.content;\n        }\n      }\n    };\n    var GetSelectionContent = { getContent: getContent };\n\n    var setupArgs = function (args, content) {\n      return __assign(__assign({ format: 'html' }, args), {\n        set: true,\n        selection: true,\n        content: content\n      });\n    };\n    var cleanContent = function (editor, args) {\n      if (args.format !== 'raw') {\n        var node = editor.parser.parse(args.content, __assign({\n          isRootContent: true,\n          forced_root_block: false\n        }, args));\n        return HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(node);\n      } else {\n        return args.content;\n      }\n    };\n    var setContent = function (editor, content, args) {\n      var contentArgs = setupArgs(args, content);\n      var rng = editor.selection.getRng(), caretNode;\n      var doc = editor.getDoc();\n      var frag, temp;\n      if (!contentArgs.no_events) {\n        contentArgs = editor.fire('BeforeSetContent', contentArgs);\n        if (contentArgs.isDefaultPrevented()) {\n          editor.fire('SetContent', contentArgs);\n          return;\n        }\n      }\n      content = cleanContent(editor, contentArgs);\n      if (rng.insertNode) {\n        content += '<span id=\"__caret\">_</span>';\n        if (rng.startContainer === doc && rng.endContainer === doc) {\n          doc.body.innerHTML = content;\n        } else {\n          rng.deleteContents();\n          if (doc.body.childNodes.length === 0) {\n            doc.body.innerHTML = content;\n          } else {\n            if (rng.createContextualFragment) {\n              rng.insertNode(rng.createContextualFragment(content));\n            } else {\n              frag = doc.createDocumentFragment();\n              temp = doc.createElement('div');\n              frag.appendChild(temp);\n              temp.outerHTML = content;\n              rng.insertNode(frag);\n            }\n          }\n        }\n        caretNode = editor.dom.get('__caret');\n        rng = doc.createRange();\n        rng.setStartBefore(caretNode);\n        rng.setEndBefore(caretNode);\n        editor.selection.setRng(rng);\n        editor.dom.remove('__caret');\n        try {\n          editor.selection.setRng(rng);\n        } catch (ex) {\n        }\n      } else {\n        var anyRng = rng;\n        if (anyRng.item) {\n          doc.execCommand('Delete', false, null);\n          anyRng = editor.selection.getRng();\n        }\n        if (/^\\s+/.test(content)) {\n          anyRng.pasteHTML('<span id=\"__mce_tmp\">_</span>' + content);\n          editor.dom.remove('__mce_tmp');\n        } else {\n          anyRng.pasteHTML(content);\n        }\n      }\n      if (!contentArgs.no_events) {\n        editor.fire('SetContent', contentArgs);\n      }\n    };\n    var SetSelectionContent = { setContent: setContent };\n\n    var getEndpointElement = function (root, rng, start, real, resolve) {\n      var container = start ? rng.startContainer : rng.endContainer;\n      var offset = start ? rng.startOffset : rng.endOffset;\n      return Option.from(container).map(Element.fromDom).map(function (elm) {\n        return !real || !rng.collapsed ? child(elm, resolve(elm, offset)).getOr(elm) : elm;\n      }).bind(function (elm) {\n        return isElement(elm) ? Option.some(elm) : parent(elm);\n      }).map(function (elm) {\n        return elm.dom();\n      }).getOr(root);\n    };\n    var getStart$2 = function (root, rng, real) {\n      return getEndpointElement(root, rng, true, real, function (elm, offset) {\n        return Math.min(childNodesCount(elm), offset);\n      });\n    };\n    var getEnd = function (root, rng, real) {\n      return getEndpointElement(root, rng, false, real, function (elm, offset) {\n        return offset > 0 ? offset - 1 : offset;\n      });\n    };\n    var skipEmptyTextNodes = function (node, forwards) {\n      var orig = node;\n      while (node && NodeType.isText(node) && node.length === 0) {\n        node = forwards ? node.nextSibling : node.previousSibling;\n      }\n      return node || orig;\n    };\n    var getNode$1 = function (root, rng) {\n      var elm, startContainer, endContainer, startOffset, endOffset;\n      if (!rng) {\n        return root;\n      }\n      startContainer = rng.startContainer;\n      endContainer = rng.endContainer;\n      startOffset = rng.startOffset;\n      endOffset = rng.endOffset;\n      elm = rng.commonAncestorContainer;\n      if (!rng.collapsed) {\n        if (startContainer === endContainer) {\n          if (endOffset - startOffset < 2) {\n            if (startContainer.hasChildNodes()) {\n              elm = startContainer.childNodes[startOffset];\n            }\n          }\n        }\n        if (startContainer.nodeType === 3 && endContainer.nodeType === 3) {\n          if (startContainer.length === startOffset) {\n            startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\n          } else {\n            startContainer = startContainer.parentNode;\n          }\n          if (endOffset === 0) {\n            endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\n          } else {\n            endContainer = endContainer.parentNode;\n          }\n          if (startContainer && startContainer === endContainer) {\n            return startContainer;\n          }\n        }\n      }\n      if (elm && elm.nodeType === 3) {\n        return elm.parentNode;\n      }\n      return elm;\n    };\n    var getSelectedBlocks = function (dom, rng, startElm, endElm) {\n      var node, root;\n      var selectedBlocks = [];\n      root = dom.getRoot();\n      startElm = dom.getParent(startElm || getStart$2(root, rng, rng.collapsed), dom.isBlock);\n      endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);\n      if (startElm && startElm !== root) {\n        selectedBlocks.push(startElm);\n      }\n      if (startElm && endElm && startElm !== endElm) {\n        node = startElm;\n        var walker = new TreeWalker(startElm, root);\n        while ((node = walker.next()) && node !== endElm) {\n          if (dom.isBlock(node)) {\n            selectedBlocks.push(node);\n          }\n        }\n      }\n      if (endElm && startElm !== endElm && endElm !== root) {\n        selectedBlocks.push(endElm);\n      }\n      return selectedBlocks;\n    };\n    var select$1 = function (dom, node, content) {\n      return Option.from(node).map(function (node) {\n        var idx = dom.nodeIndex(node);\n        var rng = dom.createRng();\n        rng.setStart(node.parentNode, idx);\n        rng.setEnd(node.parentNode, idx + 1);\n        if (content) {\n          moveEndPoint$1(dom, rng, node, true);\n          moveEndPoint$1(dom, rng, node, false);\n        }\n        return rng;\n      });\n    };\n\n    var each$j = Tools.each;\n    var isNativeIeSelection = function (rng) {\n      return !!rng.select;\n    };\n    var isAttachedToDom = function (node) {\n      return !!(node && node.ownerDocument) && contains$3(Element.fromDom(node.ownerDocument), Element.fromDom(node));\n    };\n    var isValidRange = function (rng) {\n      if (!rng) {\n        return false;\n      } else if (isNativeIeSelection(rng)) {\n        return true;\n      } else {\n        return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n      }\n    };\n    var Selection$1 = function (dom, win, serializer, editor) {\n      var bookmarkManager, controlSelection;\n      var selectedRange, explicitRange, selectorChangedData;\n      var setCursorLocation = function (node, offset) {\n        var rng = dom.createRng();\n        if (!node) {\n          moveEndPoint$1(dom, rng, editor.getBody(), true);\n          setRng(rng);\n        } else {\n          rng.setStart(node, offset);\n          rng.setEnd(node, offset);\n          setRng(rng);\n          collapse(false);\n        }\n      };\n      var getContent = function (args) {\n        return GetSelectionContent.getContent(editor, args);\n      };\n      var setContent = function (content, args) {\n        return SetSelectionContent.setContent(editor, content, args);\n      };\n      var getStart = function (real) {\n        return getStart$2(editor.getBody(), getRng(), real);\n      };\n      var getEnd$1 = function (real) {\n        return getEnd(editor.getBody(), getRng(), real);\n      };\n      var getBookmark = function (type, normalized) {\n        return bookmarkManager.getBookmark(type, normalized);\n      };\n      var moveToBookmark = function (bookmark) {\n        return bookmarkManager.moveToBookmark(bookmark);\n      };\n      var select = function (node, content) {\n        select$1(dom, node, content).each(setRng);\n        return node;\n      };\n      var isCollapsed = function () {\n        var rng = getRng(), sel = getSel();\n        if (!rng || rng.item) {\n          return false;\n        }\n        if (rng.compareEndPoints) {\n          return rng.compareEndPoints('StartToEnd', rng) === 0;\n        }\n        return !sel || rng.collapsed;\n      };\n      var collapse = function (toStart) {\n        var rng = getRng();\n        rng.collapse(!!toStart);\n        setRng(rng);\n      };\n      var getSel = function () {\n        return win.getSelection ? win.getSelection() : win.document.selection;\n      };\n      var getRng = function () {\n        var selection, rng, elm, doc;\n        var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {\n          try {\n            return sourceRange.compareBoundaryPoints(how, destinationRange);\n          } catch (ex) {\n            return -1;\n          }\n        };\n        if (!win) {\n          return null;\n        }\n        doc = win.document;\n        if (typeof doc === 'undefined' || doc === null) {\n          return null;\n        }\n        if (editor.bookmark !== undefined && EditorFocus.hasFocus(editor) === false) {\n          var bookmark = SelectionBookmark.getRng(editor);\n          if (bookmark.isSome()) {\n            return bookmark.map(function (r) {\n              return EventProcessRanges.processRanges(editor, [r])[0];\n            }).getOr(doc.createRange());\n          }\n        }\n        try {\n          if ((selection = getSel()) && !NodeType.isRestrictedNode(selection.anchorNode)) {\n            if (selection.rangeCount > 0) {\n              rng = selection.getRangeAt(0);\n            } else {\n              rng = selection.createRange ? selection.createRange() : doc.createRange();\n            }\n          }\n        } catch (ex) {\n        }\n        rng = EventProcessRanges.processRanges(editor, [rng])[0];\n        if (!rng) {\n          rng = doc.createRange ? doc.createRange() : doc.body.createTextRange();\n        }\n        if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) {\n          elm = dom.getRoot();\n          rng.setStart(elm, 0);\n          rng.setEnd(elm, 0);\n        }\n        if (selectedRange && explicitRange) {\n          if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\n            rng = explicitRange;\n          } else {\n            selectedRange = null;\n            explicitRange = null;\n          }\n        }\n        return rng;\n      };\n      var setRng = function (rng, forward) {\n        var sel, node, evt;\n        if (!isValidRange(rng)) {\n          return;\n        }\n        var ieRange = isNativeIeSelection(rng) ? rng : null;\n        if (ieRange) {\n          explicitRange = null;\n          try {\n            ieRange.select();\n          } catch (ex) {\n          }\n          return;\n        }\n        sel = getSel();\n        evt = editor.fire('SetSelectionRange', {\n          range: rng,\n          forward: forward\n        });\n        rng = evt.range;\n        if (sel) {\n          explicitRange = rng;\n          try {\n            sel.removeAllRanges();\n            sel.addRange(rng);\n          } catch (ex) {\n          }\n          if (forward === false && sel.extend) {\n            sel.collapse(rng.endContainer, rng.endOffset);\n            sel.extend(rng.startContainer, rng.startOffset);\n          }\n          selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n        }\n        if (!rng.collapsed && rng.startContainer === rng.endContainer && sel.setBaseAndExtent && !Env.ie) {\n          if (rng.endOffset - rng.startOffset < 2) {\n            if (rng.startContainer.hasChildNodes()) {\n              node = rng.startContainer.childNodes[rng.startOffset];\n              if (node && node.tagName === 'IMG') {\n                sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n                if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n                  sel.setBaseAndExtent(node, 0, node, 1);\n                }\n              }\n            }\n          }\n        }\n        editor.fire('AfterSetSelectionRange', {\n          range: rng,\n          forward: forward\n        });\n      };\n      var setNode = function (elm) {\n        setContent(dom.getOuterHTML(elm));\n        return elm;\n      };\n      var getNode = function () {\n        return getNode$1(editor.getBody(), getRng());\n      };\n      var getSelectedBlocks$1 = function (startElm, endElm) {\n        return getSelectedBlocks(dom, getRng(), startElm, endElm);\n      };\n      var isForward = function () {\n        var sel = getSel();\n        var anchorRange, focusRange;\n        if (!sel || !sel.anchorNode || !sel.focusNode) {\n          return true;\n        }\n        anchorRange = dom.createRng();\n        anchorRange.setStart(sel.anchorNode, sel.anchorOffset);\n        anchorRange.collapse(true);\n        focusRange = dom.createRng();\n        focusRange.setStart(sel.focusNode, sel.focusOffset);\n        focusRange.collapse(true);\n        return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n      };\n      var normalize = function () {\n        var rng = getRng();\n        var sel = getSel();\n        if (!MultiRange.hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n          var normRng = NormalizeRange.normalize(dom, rng);\n          normRng.each(function (normRng) {\n            setRng(normRng, isForward());\n          });\n          return normRng.getOr(rng);\n        }\n        return rng;\n      };\n      var selectorChanged = function (selector, callback) {\n        var currentSelectors;\n        if (!selectorChangedData) {\n          selectorChangedData = {};\n          currentSelectors = {};\n          editor.on('NodeChange', function (e) {\n            var node = e.element, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {};\n            each$j(selectorChangedData, function (callbacks, selector) {\n              each$j(parents, function (node) {\n                if (dom.is(node, selector)) {\n                  if (!currentSelectors[selector]) {\n                    each$j(callbacks, function (callback) {\n                      callback(true, {\n                        node: node,\n                        selector: selector,\n                        parents: parents\n                      });\n                    });\n                    currentSelectors[selector] = callbacks;\n                  }\n                  matchedSelectors[selector] = callbacks;\n                  return false;\n                }\n              });\n            });\n            each$j(currentSelectors, function (callbacks, selector) {\n              if (!matchedSelectors[selector]) {\n                delete currentSelectors[selector];\n                each$j(callbacks, function (callback) {\n                  callback(false, {\n                    node: node,\n                    selector: selector,\n                    parents: parents\n                  });\n                });\n              }\n            });\n          });\n        }\n        if (!selectorChangedData[selector]) {\n          selectorChangedData[selector] = [];\n        }\n        selectorChangedData[selector].push(callback);\n        return exports;\n      };\n      var getScrollContainer = function () {\n        var scrollContainer;\n        var node = dom.getRoot();\n        while (node && node.nodeName !== 'BODY') {\n          if (node.scrollHeight > node.clientHeight) {\n            scrollContainer = node;\n            break;\n          }\n          node = node.parentNode;\n        }\n        return scrollContainer;\n      };\n      var scrollIntoView = function (elm, alignToTop) {\n        return ScrollIntoView.scrollElementIntoView(editor, elm, alignToTop);\n      };\n      var placeCaretAt = function (clientX, clientY) {\n        return setRng(CaretRangeFromPoint.fromPoint(clientX, clientY, editor.getDoc()));\n      };\n      var getBoundingClientRect = function () {\n        var rng = getRng();\n        return rng.collapsed ? CaretPosition$1.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n      };\n      var destroy = function () {\n        win = selectedRange = explicitRange = null;\n        controlSelection.destroy();\n      };\n      var exports = {\n        bookmarkManager: null,\n        controlSelection: null,\n        dom: dom,\n        win: win,\n        serializer: serializer,\n        editor: editor,\n        collapse: collapse,\n        setCursorLocation: setCursorLocation,\n        getContent: getContent,\n        setContent: setContent,\n        getBookmark: getBookmark,\n        moveToBookmark: moveToBookmark,\n        select: select,\n        isCollapsed: isCollapsed,\n        isForward: isForward,\n        setNode: setNode,\n        getNode: getNode,\n        getSel: getSel,\n        setRng: setRng,\n        getRng: getRng,\n        getStart: getStart,\n        getEnd: getEnd$1,\n        getSelectedBlocks: getSelectedBlocks$1,\n        normalize: normalize,\n        selectorChanged: selectorChanged,\n        getScrollContainer: getScrollContainer,\n        scrollIntoView: scrollIntoView,\n        placeCaretAt: placeCaretAt,\n        getBoundingClientRect: getBoundingClientRect,\n        destroy: destroy\n      };\n      bookmarkManager = BookmarkManager$1(exports);\n      controlSelection = ControlSelection(exports, editor);\n      exports.bookmarkManager = bookmarkManager;\n      exports.controlSelection = controlSelection;\n      return exports;\n    };\n\n    var BreakType;\n    (function (BreakType) {\n      BreakType[BreakType['Br'] = 0] = 'Br';\n      BreakType[BreakType['Block'] = 1] = 'Block';\n      BreakType[BreakType['Wrap'] = 2] = 'Wrap';\n      BreakType[BreakType['Eol'] = 3] = 'Eol';\n    }(BreakType || (BreakType = {})));\n    var flip = function (direction, positions) {\n      return direction === HDirection.Backwards ? positions.reverse() : positions;\n    };\n    var walk$3 = function (direction, caretWalker, pos) {\n      return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n    };\n    var getBreakType = function (scope, direction, currentPos, nextPos) {\n      if (NodeType.isBr(nextPos.getNode(direction === HDirection.Forwards))) {\n        return BreakType.Br;\n      } else if (isInSameBlock(currentPos, nextPos) === false) {\n        return BreakType.Block;\n      } else {\n        return BreakType.Wrap;\n      }\n    };\n    var getPositionsUntil = function (predicate, direction, scope, start) {\n      var caretWalker = CaretWalker(scope);\n      var currentPos = start, nextPos;\n      var positions = [];\n      while (currentPos) {\n        nextPos = walk$3(direction, caretWalker, currentPos);\n        if (!nextPos) {\n          break;\n        }\n        if (NodeType.isBr(nextPos.getNode(false))) {\n          if (direction === HDirection.Forwards) {\n            return {\n              positions: flip(direction, positions).concat([nextPos]),\n              breakType: BreakType.Br,\n              breakAt: Option.some(nextPos)\n            };\n          } else {\n            return {\n              positions: flip(direction, positions),\n              breakType: BreakType.Br,\n              breakAt: Option.some(nextPos)\n            };\n          }\n        }\n        if (!nextPos.isVisible()) {\n          currentPos = nextPos;\n          continue;\n        }\n        if (predicate(currentPos, nextPos)) {\n          var breakType = getBreakType(scope, direction, currentPos, nextPos);\n          return {\n            positions: flip(direction, positions),\n            breakType: breakType,\n            breakAt: Option.some(nextPos)\n          };\n        }\n        positions.push(nextPos);\n        currentPos = nextPos;\n      }\n      return {\n        positions: flip(direction, positions),\n        breakType: BreakType.Eol,\n        breakAt: Option.none()\n      };\n    };\n    var getAdjacentLinePositions = function (direction, getPositionsUntilBreak, scope, start) {\n      return getPositionsUntilBreak(scope, start).breakAt.map(function (pos) {\n        var positions = getPositionsUntilBreak(scope, pos).positions;\n        return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n      }).getOr([]);\n    };\n    var findClosestHorizontalPositionFromPoint = function (positions, x) {\n      return foldl(positions, function (acc, newPos) {\n        return acc.fold(function () {\n          return Option.some(newPos);\n        }, function (lastPos) {\n          return lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), function (lastRect, newRect) {\n            var lastDist = Math.abs(x - lastRect.left);\n            var newDist = Math.abs(x - newRect.left);\n            return newDist <= lastDist ? newPos : lastPos;\n          }).or(acc);\n        });\n      }, Option.none());\n    };\n    var findClosestHorizontalPosition = function (positions, pos) {\n      return head(pos.getClientRects()).bind(function (targetRect) {\n        return findClosestHorizontalPositionFromPoint(positions, targetRect.left);\n      });\n    };\n    var getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n    var getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n    var isAtFirstLine = function (scope, pos) {\n      return getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n    };\n    var isAtLastLine = function (scope, pos) {\n      return getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n    };\n    var getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n    var getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n    var getFirstLinePositions = function (scope) {\n      return CaretFinder.firstPositionIn(scope).map(function (pos) {\n        return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);\n      }).getOr([]);\n    };\n    var getLastLinePositions = function (scope) {\n      return CaretFinder.lastPositionIn(scope).map(function (pos) {\n        return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);\n      }).getOr([]);\n    };\n\n    var isContentEditableFalse$b = NodeType.isContentEditableFalse;\n    var getSelectedNode$1 = getSelectedNode;\n    var moveToCeFalseHorizontally = function (direction, editor, getNextPosFn, range) {\n      var forwards = direction === HDirection.Forwards;\n      var isBeforeContentEditableFalseFn = forwards ? isBeforeContentEditableFalse : isAfterContentEditableFalse;\n      if (!range.collapsed) {\n        var node = getSelectedNode$1(range);\n        if (isContentEditableFalse$b(node)) {\n          return showCaret(direction, editor, node, direction === HDirection.Backwards, true);\n        }\n      }\n      var rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n      var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n      if (isBeforeContentEditableFalseFn(caretPosition)) {\n        return selectNode(editor, caretPosition.getNode(!forwards));\n      }\n      var nextCaretPosition = InlineUtils.normalizePosition(forwards, getNextPosFn(caretPosition));\n      if (!nextCaretPosition) {\n        if (rangeIsInContainerBlock) {\n          return range;\n        }\n        return null;\n      }\n      if (isBeforeContentEditableFalseFn(nextCaretPosition)) {\n        return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, true);\n      }\n      var peekCaretPosition = getNextPosFn(nextCaretPosition);\n      if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) {\n        if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n          return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, true);\n        }\n      }\n      if (rangeIsInContainerBlock) {\n        return renderRangeCaret(editor, nextCaretPosition.toRange(), true);\n      }\n      return null;\n    };\n    var moveToCeFalseVertically = function (direction, editor, walkerFn, range) {\n      var caretPosition, linePositions, nextLinePositions;\n      var closestNextLineRect, caretClientRect, clientX;\n      var dist1, dist2, contentEditableFalseNode;\n      contentEditableFalseNode = getSelectedNode$1(range);\n      caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n      linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);\n      nextLinePositions = filter(linePositions, isLine(1));\n      caretClientRect = ArrUtils.last(caretPosition.getClientRects());\n      if (isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition)) {\n        contentEditableFalseNode = caretPosition.getNode();\n      }\n      if (isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition)) {\n        contentEditableFalseNode = caretPosition.getNode(true);\n      }\n      if (!caretClientRect) {\n        return null;\n      }\n      clientX = caretClientRect.left;\n      closestNextLineRect = findClosestClientRect(nextLinePositions, clientX);\n      if (closestNextLineRect) {\n        if (isContentEditableFalse$b(closestNextLineRect.node)) {\n          dist1 = Math.abs(clientX - closestNextLineRect.left);\n          dist2 = Math.abs(clientX - closestNextLineRect.right);\n          return showCaret(direction, editor, closestNextLineRect.node, dist1 < dist2, true);\n        }\n      }\n      if (contentEditableFalseNode) {\n        var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), contentEditableFalseNode);\n        closestNextLineRect = findClosestClientRect(filter(caretPositions, isLine(1)), clientX);\n        if (closestNextLineRect) {\n          return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);\n        }\n        closestNextLineRect = ArrUtils.last(filter(caretPositions, isLine(0)));\n        if (closestNextLineRect) {\n          return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);\n        }\n      }\n    };\n    var createTextBlock = function (editor) {\n      var textBlock = editor.dom.create(Settings.getForcedRootBlock(editor));\n      if (!Env.ie || Env.ie >= 11) {\n        textBlock.innerHTML = '<br data-mce-bogus=\"1\">';\n      }\n      return textBlock;\n    };\n    var exitPreBlock = function (editor, direction, range) {\n      var pre, caretPos, newBlock;\n      var caretWalker = CaretWalker(editor.getBody());\n      var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n      var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n      if (range.collapsed && editor.settings.forced_root_block) {\n        pre = editor.dom.getParent(range.startContainer, 'PRE');\n        if (!pre) {\n          return;\n        }\n        if (direction === 1) {\n          caretPos = getNextVisualCaretPosition(CaretPosition$1.fromRangeStart(range));\n        } else {\n          caretPos = getPrevVisualCaretPosition(CaretPosition$1.fromRangeStart(range));\n        }\n        if (!caretPos) {\n          newBlock = createTextBlock(editor);\n          if (direction === 1) {\n            editor.$(pre).after(newBlock);\n          } else {\n            editor.$(pre).before(newBlock);\n          }\n          editor.selection.select(newBlock, true);\n          editor.selection.collapse();\n        }\n      }\n    };\n    var getHorizontalRange = function (editor, forward) {\n      var caretWalker = CaretWalker(editor.getBody());\n      var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n      var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n      var newRange;\n      var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n      var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;\n      var range = editor.selection.getRng();\n      newRange = moveToCeFalseHorizontally(direction, editor, getNextPosFn, range);\n      if (newRange) {\n        return newRange;\n      }\n      newRange = exitPreBlock(editor, direction, range);\n      if (newRange) {\n        return newRange;\n      }\n      return null;\n    };\n    var getVerticalRange = function (editor, down) {\n      var newRange;\n      var direction = down ? 1 : -1;\n      var walkerFn = down ? downUntil : upUntil;\n      var range = editor.selection.getRng();\n      newRange = moveToCeFalseVertically(direction, editor, walkerFn, range);\n      if (newRange) {\n        return newRange;\n      }\n      newRange = exitPreBlock(editor, direction, range);\n      if (newRange) {\n        return newRange;\n      }\n      return null;\n    };\n    var moveH = function (editor, forward) {\n      return function () {\n        var newRng = getHorizontalRange(editor, forward);\n        if (newRng) {\n          moveToRange(editor, newRng);\n          return true;\n        } else {\n          return false;\n        }\n      };\n    };\n    var moveV = function (editor, down) {\n      return function () {\n        var newRng = getVerticalRange(editor, down);\n        if (newRng) {\n          moveToRange(editor, newRng);\n          return true;\n        } else {\n          return false;\n        }\n      };\n    };\n    var isCefPosition = function (forward) {\n      return function (pos) {\n        return forward ? isAfterContentEditableFalse(pos) : isBeforeContentEditableFalse(pos);\n      };\n    };\n    var moveToLineEndPoint = function (editor, forward) {\n      return function () {\n        var from = forward ? CaretPosition$1.fromRangeEnd(editor.selection.getRng()) : CaretPosition$1.fromRangeStart(editor.selection.getRng());\n        var result = forward ? getPositionsUntilNextLine(editor.getBody(), from) : getPositionsUntilPreviousLine(editor.getBody(), from);\n        var to = forward ? last(result.positions) : head(result.positions);\n        return to.filter(isCefPosition(forward)).fold(constant(false), function (pos) {\n          editor.selection.setRng(pos.toRange());\n          return true;\n        });\n      };\n    };\n\n    var deflate = function (rect, delta) {\n      return {\n        left: rect.left - delta,\n        top: rect.top - delta,\n        right: rect.right + delta * 2,\n        bottom: rect.bottom + delta * 2,\n        width: rect.width + delta,\n        height: rect.height + delta\n      };\n    };\n    var getCorners = function (getYAxisValue, tds) {\n      return bind(tds, function (td) {\n        var rect = deflate(clone$1(td.getBoundingClientRect()), -1);\n        return [\n          {\n            x: rect.left,\n            y: getYAxisValue(rect),\n            cell: td\n          },\n          {\n            x: rect.right,\n            y: getYAxisValue(rect),\n            cell: td\n          }\n        ];\n      });\n    };\n    var findClosestCorner = function (corners, x, y) {\n      return foldl(corners, function (acc, newCorner) {\n        return acc.fold(function () {\n          return Option.some(newCorner);\n        }, function (oldCorner) {\n          var oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\n          var newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\n          return Option.some(newDist < oldDist ? newCorner : oldCorner);\n        });\n      }, Option.none());\n    };\n    var getClosestCell$1 = function (getYAxisValue, isTargetCorner, table, x, y) {\n      var cells = descendants$1(Element.fromDom(table), 'td,th,caption').map(function (e) {\n        return e.dom();\n      });\n      var corners = filter(getCorners(getYAxisValue, cells), function (corner) {\n        return isTargetCorner(corner, y);\n      });\n      return findClosestCorner(corners, x, y).map(function (corner) {\n        return corner.cell;\n      });\n    };\n    var getBottomValue = function (rect) {\n      return rect.bottom;\n    };\n    var getTopValue = function (rect) {\n      return rect.top;\n    };\n    var isAbove$1 = function (corner, y) {\n      return corner.y < y;\n    };\n    var isBelow$1 = function (corner, y) {\n      return corner.y > y;\n    };\n    var getClosestCellAbove = curry(getClosestCell$1, getBottomValue, isAbove$1);\n    var getClosestCellBelow = curry(getClosestCell$1, getTopValue, isBelow$1);\n    var findClosestPositionInAboveCell = function (table, pos) {\n      return head(pos.getClientRects()).bind(function (rect) {\n        return getClosestCellAbove(table, rect.left, rect.top);\n      }).bind(function (cell) {\n        return findClosestHorizontalPosition(getLastLinePositions(cell), pos);\n      });\n    };\n    var findClosestPositionInBelowCell = function (table, pos) {\n      return last(pos.getClientRects()).bind(function (rect) {\n        return getClosestCellBelow(table, rect.left, rect.top);\n      }).bind(function (cell) {\n        return findClosestHorizontalPosition(getFirstLinePositions(cell), pos);\n      });\n    };\n\n    var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {\n      return lineInfo.breakAt.map(function (breakPos) {\n        return getPositionsUntil(scope, breakPos).breakAt.isSome();\n      }).getOr(false);\n    };\n    var startsWithWrapBreak = function (lineInfo) {\n      return lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n    };\n    var startsWithBrBreak = function (lineInfo) {\n      return lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n    };\n    var isAtTableCellLine = function (getPositionsUntil, scope, pos) {\n      var lineInfo = getPositionsUntil(scope, pos);\n      if (startsWithWrapBreak(lineInfo) || !NodeType.isBr(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n        return !hasNextBreak(getPositionsUntil, scope, lineInfo);\n      } else {\n        return lineInfo.breakAt.isNone();\n      }\n    };\n    var isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n    var isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n    var isCaretAtStartOrEndOfTable = function (forward, rng, table) {\n      var caretPos = CaretPosition$1.fromRangeStart(rng);\n      return CaretFinder.positionIn(!forward, table).map(function (pos) {\n        return pos.isEqual(caretPos);\n      }).getOr(false);\n    };\n    var navigateHorizontally = function (editor, forward, table, td) {\n      var rng = editor.selection.getRng();\n      var direction = forward ? 1 : -1;\n      if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\n        var newRng = showCaret(direction, editor, table, !forward, true);\n        moveToRange(editor, newRng);\n        return true;\n      }\n      return false;\n    };\n    var getClosestAbovePosition = function (root, table, start) {\n      return findClosestPositionInAboveCell(table, start).orThunk(function () {\n        return head(start.getClientRects()).bind(function (rect) {\n          return findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition$1.before(table)), rect.left);\n        });\n      }).getOr(CaretPosition$1.before(table));\n    };\n    var getClosestBelowPosition = function (root, table, start) {\n      return findClosestPositionInBelowCell(table, start).orThunk(function () {\n        return head(start.getClientRects()).bind(function (rect) {\n          return findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition$1.after(table)), rect.left);\n        });\n      }).getOr(CaretPosition$1.after(table));\n    };\n    var getTable = function (previous, pos) {\n      var node = pos.getNode(previous);\n      return NodeType.isElement(node) && node.nodeName === 'TABLE' ? Option.some(node) : Option.none();\n    };\n    var renderBlock = function (down, editor, table, pos) {\n      var forcedRootBlock = Settings.getForcedRootBlock(editor);\n      if (forcedRootBlock) {\n        editor.undoManager.transact(function () {\n          var element = Element.fromTag(forcedRootBlock);\n          setAll(element, Settings.getForcedRootBlockAttrs(editor));\n          append(element, Element.fromTag('br'));\n          if (down) {\n            after(Element.fromDom(table), element);\n          } else {\n            before(Element.fromDom(table), element);\n          }\n          var rng = editor.dom.createRng();\n          rng.setStart(element.dom(), 0);\n          rng.setEnd(element.dom(), 0);\n          moveToRange(editor, rng);\n        });\n      } else {\n        moveToRange(editor, pos.toRange());\n      }\n    };\n    var moveCaret = function (editor, down, pos) {\n      var table = down ? getTable(true, pos) : getTable(false, pos);\n      var last = down === false;\n      table.fold(function () {\n        return moveToRange(editor, pos.toRange());\n      }, function (table) {\n        return CaretFinder.positionIn(last, editor.getBody()).filter(function (lastPos) {\n          return lastPos.isEqual(pos);\n        }).fold(function () {\n          return moveToRange(editor, pos.toRange());\n        }, function (_) {\n          return renderBlock(down, editor, table, pos);\n        });\n      });\n    };\n    var navigateVertically = function (editor, down, table, td) {\n      var rng = editor.selection.getRng();\n      var pos = CaretPosition$1.fromRangeStart(rng);\n      var root = editor.getBody();\n      if (!down && isAtFirstTableCellLine(td, pos)) {\n        var newPos = getClosestAbovePosition(root, table, pos);\n        moveCaret(editor, down, newPos);\n        return true;\n      } else if (down && isAtLastTableCellLine(td, pos)) {\n        var newPos = getClosestBelowPosition(root, table, pos);\n        moveCaret(editor, down, newPos);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    var moveH$1 = function (editor, forward) {\n      return function () {\n        return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n          return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {\n            return navigateHorizontally(editor, forward, table);\n          });\n        }).getOr(false);\n      };\n    };\n    var moveV$1 = function (editor, forward) {\n      return function () {\n        return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n          return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {\n            return navigateVertically(editor, forward, table, td);\n          });\n        }).getOr(false);\n      };\n    };\n\n    var isTarget = function (node) {\n      return contains(['figcaption'], name(node));\n    };\n    var rangeBefore = function (target) {\n      var rng = domGlobals.document.createRange();\n      rng.setStartBefore(target.dom());\n      rng.setEndBefore(target.dom());\n      return rng;\n    };\n    var insertElement = function (root, elm, forward) {\n      if (forward) {\n        append(root, elm);\n      } else {\n        prepend(root, elm);\n      }\n    };\n    var insertBr = function (root, forward) {\n      var br = Element.fromTag('br');\n      insertElement(root, br, forward);\n      return rangeBefore(br);\n    };\n    var insertBlock$1 = function (root, forward, blockName, attrs) {\n      var block = Element.fromTag(blockName);\n      var br = Element.fromTag('br');\n      setAll(block, attrs);\n      append(block, br);\n      insertElement(root, block, forward);\n      return rangeBefore(br);\n    };\n    var insertEmptyLine = function (root, rootBlockName, attrs, forward) {\n      if (rootBlockName === '') {\n        return insertBr(root, forward);\n      } else {\n        return insertBlock$1(root, forward, rootBlockName, attrs);\n      }\n    };\n    var getClosestTargetBlock = function (pos, root) {\n      var isRoot = curry(eq, root);\n      return closest(Element.fromDom(pos.container()), isBlock, isRoot).filter(isTarget);\n    };\n    var isAtFirstOrLastLine = function (root, forward, pos) {\n      return forward ? isAtLastLine(root.dom(), pos) : isAtFirstLine(root.dom(), pos);\n    };\n    var moveCaretToNewEmptyLine = function (editor, forward) {\n      var root = Element.fromDom(editor.getBody());\n      var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n      var rootBlock = Settings.getForcedRootBlock(editor);\n      var rootBlockAttrs = Settings.getForcedRootBlockAttrs(editor);\n      return getClosestTargetBlock(pos, root).exists(function () {\n        if (isAtFirstOrLastLine(root, forward, pos)) {\n          var rng = insertEmptyLine(root, rootBlock, rootBlockAttrs, forward);\n          editor.selection.setRng(rng);\n          return true;\n        } else {\n          return false;\n        }\n      });\n    };\n    var moveV$2 = function (editor, forward) {\n      return function () {\n        if (editor.selection.isCollapsed()) {\n          return moveCaretToNewEmptyLine(editor, forward);\n        } else {\n          return false;\n        }\n      };\n    };\n\n    var defaultPatterns = function (patterns) {\n      return map(patterns, function (pattern) {\n        return merge({\n          shiftKey: false,\n          altKey: false,\n          ctrlKey: false,\n          metaKey: false,\n          keyCode: 0,\n          action: noop\n        }, pattern);\n      });\n    };\n    var matchesEvent = function (pattern, evt) {\n      return evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n    };\n    var match$1 = function (patterns, evt) {\n      return bind(defaultPatterns(patterns), function (pattern) {\n        return matchesEvent(pattern, evt) ? [pattern] : [];\n      });\n    };\n    var action = function (f) {\n      var x = [];\n      for (var _i = 1; _i < arguments.length; _i++) {\n        x[_i - 1] = arguments[_i];\n      }\n      var args = Array.prototype.slice.call(arguments, 1);\n      return function () {\n        return f.apply(null, args);\n      };\n    };\n    var execute = function (patterns, evt) {\n      return find(match$1(patterns, evt), function (pattern) {\n        return pattern.action();\n      });\n    };\n    var MatchKeys = {\n      match: match$1,\n      action: action,\n      execute: execute\n    };\n\n    var executeKeydownOverride = function (editor, caret, evt) {\n      var os = PlatformDetection$1.detect().os;\n      MatchKeys.execute([\n        {\n          keyCode: VK.RIGHT,\n          action: moveH(editor, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: moveH(editor, false)\n        },\n        {\n          keyCode: VK.UP,\n          action: moveV(editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: moveV(editor, true)\n        },\n        {\n          keyCode: VK.RIGHT,\n          action: moveH$1(editor, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: moveH$1(editor, false)\n        },\n        {\n          keyCode: VK.UP,\n          action: moveV$1(editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: moveV$1(editor, true)\n        },\n        {\n          keyCode: VK.RIGHT,\n          action: BoundarySelection.move(editor, caret, true)\n        },\n        {\n          keyCode: VK.LEFT,\n          action: BoundarySelection.move(editor, caret, false)\n        },\n        {\n          keyCode: VK.RIGHT,\n          ctrlKey: !os.isOSX(),\n          altKey: os.isOSX(),\n          action: BoundarySelection.moveNextWord(editor, caret)\n        },\n        {\n          keyCode: VK.LEFT,\n          ctrlKey: !os.isOSX(),\n          altKey: os.isOSX(),\n          action: BoundarySelection.movePrevWord(editor, caret)\n        },\n        {\n          keyCode: VK.UP,\n          action: moveV$2(editor, false)\n        },\n        {\n          keyCode: VK.DOWN,\n          action: moveV$2(editor, true)\n        }\n      ], evt).each(function (_) {\n        evt.preventDefault();\n      });\n    };\n    var setup$7 = function (editor, caret) {\n      editor.on('keydown', function (evt) {\n        if (evt.isDefaultPrevented() === false) {\n          executeKeydownOverride(editor, caret, evt);\n        }\n      });\n    };\n    var ArrowKeys = { setup: setup$7 };\n\n    var executeKeydownOverride$1 = function (editor, caret, evt) {\n      MatchKeys.execute([\n        {\n          keyCode: VK.BACKSPACE,\n          action: MatchKeys.action(CefDelete.backspaceDelete, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: MatchKeys.action(CefDelete.backspaceDelete, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: MatchKeys.action(TableDelete.backspaceDelete, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: MatchKeys.action(TableDelete.backspaceDelete, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, true)\n        },\n        {\n          keyCode: VK.BACKSPACE,\n          action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, false)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, true)\n        }\n      ], evt).each(function (_) {\n        evt.preventDefault();\n      });\n    };\n    var executeKeyupOverride = function (editor, evt) {\n      MatchKeys.execute([\n        {\n          keyCode: VK.BACKSPACE,\n          action: MatchKeys.action(CefDelete.paddEmptyElement, editor)\n        },\n        {\n          keyCode: VK.DELETE,\n          action: MatchKeys.action(CefDelete.paddEmptyElement, editor)\n        }\n      ], evt);\n    };\n    var setup$8 = function (editor, caret) {\n      editor.on('keydown', function (evt) {\n        if (evt.isDefaultPrevented() === false) {\n          executeKeydownOverride$1(editor, caret, evt);\n        }\n      });\n      editor.on('keyup', function (evt) {\n        if (evt.isDefaultPrevented() === false) {\n          executeKeyupOverride(editor, evt);\n        }\n      });\n    };\n    var DeleteBackspaceKeys = { setup: setup$8 };\n\n    var firstNonWhiteSpaceNodeSibling = function (node) {\n      while (node) {\n        if (node.nodeType === 1 || node.nodeType === 3 && node.data && /[\\r\\n\\s]/.test(node.data)) {\n          return node;\n        }\n        node = node.nextSibling;\n      }\n    };\n    var moveToCaretPosition = function (editor, root) {\n      var walker, node, rng, lastNode = root, tempElm;\n      var dom = editor.dom;\n      var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n      if (!root) {\n        return;\n      }\n      if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n        var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);\n        if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {\n          root.insertBefore(dom.doc.createTextNode('\\xA0'), root.firstChild);\n        }\n      }\n      rng = dom.createRng();\n      root.normalize();\n      if (root.hasChildNodes()) {\n        walker = new TreeWalker(root, root);\n        while (node = walker.current()) {\n          if (NodeType.isText(node)) {\n            rng.setStart(node, 0);\n            rng.setEnd(node, 0);\n            break;\n          }\n          if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\n            rng.setStartBefore(node);\n            rng.setEndBefore(node);\n            break;\n          }\n          lastNode = node;\n          node = walker.next();\n        }\n        if (!node) {\n          rng.setStart(lastNode, 0);\n          rng.setEnd(lastNode, 0);\n        }\n      } else {\n        if (NodeType.isBr(root)) {\n          if (root.nextSibling && dom.isBlock(root.nextSibling)) {\n            rng.setStartBefore(root);\n            rng.setEndBefore(root);\n          } else {\n            rng.setStartAfter(root);\n            rng.setEndAfter(root);\n          }\n        } else {\n          rng.setStart(root, 0);\n          rng.setEnd(root, 0);\n        }\n      }\n      editor.selection.setRng(rng);\n      dom.remove(tempElm);\n      editor.selection.scrollIntoView(root);\n    };\n    var getEditableRoot = function (dom, node) {\n      var root = dom.getRoot();\n      var parent, editableRoot;\n      parent = node;\n      while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n        if (dom.getContentEditable(parent) === 'true') {\n          editableRoot = parent;\n        }\n        parent = parent.parentNode;\n      }\n      return parent !== root ? editableRoot : root;\n    };\n    var getParentBlock$2 = function (editor) {\n      return Option.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n    };\n    var getParentBlockName = function (editor) {\n      return getParentBlock$2(editor).fold(constant(''), function (parentBlock) {\n        return parentBlock.nodeName.toUpperCase();\n      });\n    };\n    var isListItemParentBlock = function (editor) {\n      return getParentBlock$2(editor).filter(function (elm) {\n        return isListItem(Element.fromDom(elm));\n      }).isSome();\n    };\n    var NewLineUtils = {\n      moveToCaretPosition: moveToCaretPosition,\n      getEditableRoot: getEditableRoot,\n      getParentBlock: getParentBlock$2,\n      getParentBlockName: getParentBlockName,\n      isListItemParentBlock: isListItemParentBlock\n    };\n\n    var hasFirstChild = function (elm, name) {\n      return elm.firstChild && elm.firstChild.nodeName === name;\n    };\n    var hasParent$1 = function (elm, parentName) {\n      return elm && elm.parentNode && elm.parentNode.nodeName === parentName;\n    };\n    var isListBlock = function (elm) {\n      return elm && /^(OL|UL|LI)$/.test(elm.nodeName);\n    };\n    var isNestedList = function (elm) {\n      return isListBlock(elm) && isListBlock(elm.parentNode);\n    };\n    var getContainerBlock = function (containerBlock) {\n      var containerBlockParent = containerBlock.parentNode;\n      if (/^(LI|DT|DD)$/.test(containerBlockParent.nodeName)) {\n        return containerBlockParent;\n      }\n      return containerBlock;\n    };\n    var isFirstOrLastLi = function (containerBlock, parentBlock, first) {\n      var node = containerBlock[first ? 'firstChild' : 'lastChild'];\n      while (node) {\n        if (NodeType.isElement(node)) {\n          break;\n        }\n        node = node[first ? 'nextSibling' : 'previousSibling'];\n      }\n      return node === parentBlock;\n    };\n    var insert$1 = function (editor, createNewBlock, containerBlock, parentBlock, newBlockName) {\n      var dom = editor.dom;\n      var rng = editor.selection.getRng();\n      if (containerBlock === editor.getBody()) {\n        return;\n      }\n      if (isNestedList(containerBlock)) {\n        newBlockName = 'LI';\n      }\n      var newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR');\n      if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n        if (hasParent$1(containerBlock, 'LI')) {\n          dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n        } else {\n          dom.replace(newBlock, containerBlock);\n        }\n      } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) {\n        if (hasParent$1(containerBlock, 'LI')) {\n          dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n          newBlock.appendChild(dom.doc.createTextNode(' '));\n          newBlock.appendChild(containerBlock);\n        } else {\n          containerBlock.parentNode.insertBefore(newBlock, containerBlock);\n        }\n      } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\n        dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n      } else {\n        containerBlock = getContainerBlock(containerBlock);\n        var tmpRng = rng.cloneRange();\n        tmpRng.setStartAfter(parentBlock);\n        tmpRng.setEndAfter(containerBlock);\n        var fragment = tmpRng.extractContents();\n        if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) {\n          newBlock = fragment.firstChild;\n          dom.insertAfter(fragment, containerBlock);\n        } else {\n          dom.insertAfter(fragment, containerBlock);\n          dom.insertAfter(newBlock, containerBlock);\n        }\n      }\n      dom.remove(parentBlock);\n      NewLineUtils.moveToCaretPosition(editor, newBlock);\n    };\n    var InsertLi = { insert: insert$1 };\n\n    var trimZwsp = function (fragment) {\n      each(descendants(Element.fromDom(fragment), isText), function (text) {\n        var rawNode = text.dom();\n        rawNode.nodeValue = Zwsp.trim(rawNode.nodeValue);\n      });\n    };\n    var isEmptyAnchor = function (dom, elm) {\n      return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n    };\n    var isTableCell$5 = function (node) {\n      return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n    };\n    var emptyBlock = function (elm) {\n      elm.innerHTML = '<br data-mce-bogus=\"1\">';\n    };\n    var containerAndSiblingName = function (container, nodeName) {\n      return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n    };\n    var canSplitBlock = function (dom, node) {\n      return node && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.getContentEditable(node) !== 'true';\n    };\n    var trimInlineElementsOnLeftSideOfBlock = function (dom, nonEmptyElementsMap, block) {\n      var node = block;\n      var firstChilds = [];\n      var i;\n      if (!node) {\n        return;\n      }\n      while (node = node.firstChild) {\n        if (dom.isBlock(node)) {\n          return;\n        }\n        if (NodeType.isElement(node) && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n          firstChilds.push(node);\n        }\n      }\n      i = firstChilds.length;\n      while (i--) {\n        node = firstChilds[i];\n        if (!node.hasChildNodes() || node.firstChild === node.lastChild && node.firstChild.nodeValue === '') {\n          dom.remove(node);\n        } else {\n          if (isEmptyAnchor(dom, node)) {\n            dom.remove(node);\n          }\n        }\n      }\n    };\n    var normalizeZwspOffset = function (start, container, offset) {\n      if (NodeType.isText(container) === false) {\n        return offset;\n      } else if (start) {\n        return offset === 1 && container.data.charAt(offset - 1) === Zwsp.ZWSP ? 0 : offset;\n      } else {\n        return offset === container.data.length - 1 && container.data.charAt(offset) === Zwsp.ZWSP ? container.data.length : offset;\n      }\n    };\n    var includeZwspInRange = function (rng) {\n      var newRng = rng.cloneRange();\n      newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\n      newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\n      return newRng;\n    };\n    var trimLeadingLineBreaks = function (node) {\n      do {\n        if (NodeType.isText(node)) {\n          node.nodeValue = node.nodeValue.replace(/^[\\r\\n]+/, '');\n        }\n        node = node.firstChild;\n      } while (node);\n    };\n    var getEditableRoot$1 = function (dom, node) {\n      var root = dom.getRoot();\n      var parent, editableRoot;\n      parent = node;\n      while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n        if (dom.getContentEditable(parent) === 'true') {\n          editableRoot = parent;\n        }\n        parent = parent.parentNode;\n      }\n      return parent !== root ? editableRoot : root;\n    };\n    var applyAttributes = function (editor, node, forcedRootBlockAttrs) {\n      Option.from(forcedRootBlockAttrs.style).map(editor.dom.parseStyle).each(function (attrStyles) {\n        var currentStyles = getAllRaw(Element.fromDom(node));\n        var newStyles = __assign(__assign({}, currentStyles), attrStyles);\n        editor.dom.setStyles(node, newStyles);\n      });\n      var attrClassesOpt = Option.from(forcedRootBlockAttrs.class).map(function (attrClasses) {\n        return attrClasses.split(/\\s+/);\n      });\n      var currentClassesOpt = Option.from(node.className).map(function (currentClasses) {\n        return filter(currentClasses.split(/\\s+/), function (clazz) {\n          return clazz !== '';\n        });\n      });\n      lift2(attrClassesOpt, currentClassesOpt, function (attrClasses, currentClasses) {\n        var filteredClasses = filter(currentClasses, function (clazz) {\n          return !contains(attrClasses, clazz);\n        });\n        var newClasses = __spreadArrays(attrClasses, filteredClasses);\n        editor.dom.setAttrib(node, 'class', newClasses.join(' '));\n      });\n      var appliedAttrs = [\n        'style',\n        'class'\n      ];\n      var remainingAttrs = bifilter(forcedRootBlockAttrs, function (_, attrs) {\n        return !contains(appliedAttrs, attrs);\n      }).t;\n      editor.dom.setAttribs(node, remainingAttrs);\n    };\n    var setForcedBlockAttrs = function (editor, node) {\n      var forcedRootBlockName = Settings.getForcedRootBlock(editor);\n      if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n        var forcedRootBlockAttrs = Settings.getForcedRootBlockAttrs(editor);\n        applyAttributes(editor, node, forcedRootBlockAttrs);\n      }\n    };\n    var wrapSelfAndSiblingsInDefaultBlock = function (editor, newBlockName, rng, container, offset) {\n      var newBlock, parentBlock, startNode, node, next, rootBlockName;\n      var blockName = newBlockName || 'P';\n      var dom = editor.dom, editableRoot = getEditableRoot$1(dom, container);\n      parentBlock = dom.getParent(container, dom.isBlock);\n      if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n        parentBlock = parentBlock || editableRoot;\n        if (parentBlock === editor.getBody() || isTableCell$5(parentBlock)) {\n          rootBlockName = parentBlock.nodeName.toLowerCase();\n        } else {\n          rootBlockName = parentBlock.parentNode.nodeName.toLowerCase();\n        }\n        if (!parentBlock.hasChildNodes()) {\n          newBlock = dom.create(blockName);\n          setForcedBlockAttrs(editor, newBlock);\n          parentBlock.appendChild(newBlock);\n          rng.setStart(newBlock, 0);\n          rng.setEnd(newBlock, 0);\n          return newBlock;\n        }\n        node = container;\n        while (node.parentNode !== parentBlock) {\n          node = node.parentNode;\n        }\n        while (node && !dom.isBlock(node)) {\n          startNode = node;\n          node = node.previousSibling;\n        }\n        if (startNode && editor.schema.isValidChild(rootBlockName, blockName.toLowerCase())) {\n          newBlock = dom.create(blockName);\n          setForcedBlockAttrs(editor, newBlock);\n          startNode.parentNode.insertBefore(newBlock, startNode);\n          node = startNode;\n          while (node && !dom.isBlock(node)) {\n            next = node.nextSibling;\n            newBlock.appendChild(node);\n            node = next;\n          }\n          rng.setStart(container, offset);\n          rng.setEnd(container, offset);\n        }\n      }\n      return container;\n    };\n    var addBrToBlockIfNeeded = function (dom, block) {\n      var lastChild;\n      block.normalize();\n      lastChild = block.lastChild;\n      if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n        dom.add(block, 'br');\n      }\n    };\n    var insert$2 = function (editor, evt) {\n      var tmpRng, editableRoot, container, offset, parentBlock, shiftKey;\n      var newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer;\n      var dom = editor.dom;\n      var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n      var rng = editor.selection.getRng();\n      var createNewBlock = function (name) {\n        var node = container, block, clonedNode, caretNode;\n        var textInlineElements = schema.getTextInlineElements();\n        if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n          block = dom.create(name || newBlockName);\n        } else {\n          block = parentBlock.cloneNode(false);\n        }\n        caretNode = block;\n        if (Settings.shouldKeepStyles(editor) === false) {\n          dom.setAttrib(block, 'style', null);\n          dom.setAttrib(block, 'class', null);\n        } else {\n          do {\n            if (textInlineElements[node.nodeName]) {\n              if (isCaretNode(node) || Bookmarks.isBookmarkNode(node)) {\n                continue;\n              }\n              clonedNode = node.cloneNode(false);\n              dom.setAttrib(clonedNode, 'id', '');\n              if (block.hasChildNodes()) {\n                clonedNode.appendChild(block.firstChild);\n                block.appendChild(clonedNode);\n              } else {\n                caretNode = clonedNode;\n                block.appendChild(clonedNode);\n              }\n            }\n          } while ((node = node.parentNode) && node !== editableRoot);\n        }\n        setForcedBlockAttrs(editor, block);\n        emptyBlock(caretNode);\n        return block;\n      };\n      var isCaretAtStartOrEndOfBlock = function (start) {\n        var walker, node, name, normalizedOffset;\n        normalizedOffset = normalizeZwspOffset(start, container, offset);\n        if (NodeType.isText(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {\n          return false;\n        }\n        if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {\n          return true;\n        }\n        if (start && NodeType.isElement(container) && container === parentBlock.firstChild) {\n          return true;\n        }\n        if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {\n          return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n        }\n        walker = new TreeWalker(container, parentBlock);\n        if (NodeType.isText(container)) {\n          if (start && normalizedOffset === 0) {\n            walker.prev();\n          } else if (!start && normalizedOffset === container.nodeValue.length) {\n            walker.next();\n          }\n        }\n        while (node = walker.current()) {\n          if (NodeType.isElement(node)) {\n            if (!node.getAttribute('data-mce-bogus')) {\n              name = node.nodeName.toLowerCase();\n              if (nonEmptyElementsMap[name] && name !== 'br') {\n                return false;\n              }\n            }\n          } else if (NodeType.isText(node) && !/^[ \\t\\r\\n]*$/.test(node.nodeValue)) {\n            return false;\n          }\n          if (start) {\n            walker.prev();\n          } else {\n            walker.next();\n          }\n        }\n        return true;\n      };\n      var insertNewBlockAfter = function () {\n        if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n          newBlock = createNewBlock(newBlockName);\n        } else {\n          newBlock = createNewBlock();\n        }\n        if (Settings.shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {\n          newBlock = dom.split(containerBlock, parentBlock);\n        } else {\n          dom.insertAfter(newBlock, parentBlock);\n        }\n        NewLineUtils.moveToCaretPosition(editor, newBlock);\n      };\n      NormalizeRange.normalize(dom, rng).each(function (normRng) {\n        rng.setStart(normRng.startContainer, normRng.startOffset);\n        rng.setEnd(normRng.endContainer, normRng.endOffset);\n      });\n      container = rng.startContainer;\n      offset = rng.startOffset;\n      newBlockName = Settings.getForcedRootBlock(editor);\n      shiftKey = evt.shiftKey;\n      if (NodeType.isElement(container) && container.hasChildNodes()) {\n        isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n        if (isAfterLastNodeInContainer && NodeType.isText(container)) {\n          offset = container.nodeValue.length;\n        } else {\n          offset = 0;\n        }\n      }\n      editableRoot = getEditableRoot$1(dom, container);\n      if (!editableRoot) {\n        return;\n      }\n      if (newBlockName && !shiftKey || !newBlockName && shiftKey) {\n        container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n      }\n      parentBlock = dom.getParent(container, dom.isBlock);\n      containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n      parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n      containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n      if (containerBlockName === 'LI' && !evt.ctrlKey) {\n        parentBlock = containerBlock;\n        containerBlock = containerBlock.parentNode;\n        parentBlockName = containerBlockName;\n      }\n      if (/^(LI|DT|DD)$/.test(parentBlockName)) {\n        if (dom.isEmpty(parentBlock)) {\n          InsertLi.insert(editor, createNewBlock, containerBlock, parentBlock, newBlockName);\n          return;\n        }\n      }\n      if (newBlockName && parentBlock === editor.getBody()) {\n        return;\n      }\n      newBlockName = newBlockName || 'P';\n      if (isCaretContainerBlock(parentBlock)) {\n        newBlock = showCaretContainerBlock(parentBlock);\n        if (dom.isEmpty(parentBlock)) {\n          emptyBlock(parentBlock);\n        }\n        setForcedBlockAttrs(editor, newBlock);\n        NewLineUtils.moveToCaretPosition(editor, newBlock);\n      } else if (isCaretAtStartOrEndOfBlock()) {\n        insertNewBlockAfter();\n      } else if (isCaretAtStartOrEndOfBlock(true)) {\n        newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);\n        NewLineUtils.moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock);\n      } else {\n        tmpRng = includeZwspInRange(rng).cloneRange();\n        tmpRng.setEndAfter(parentBlock);\n        fragment = tmpRng.extractContents();\n        trimZwsp(fragment);\n        trimLeadingLineBreaks(fragment);\n        newBlock = fragment.firstChild;\n        dom.insertAfter(fragment, parentBlock);\n        trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock);\n        addBrToBlockIfNeeded(dom, parentBlock);\n        if (dom.isEmpty(parentBlock)) {\n          emptyBlock(parentBlock);\n        }\n        newBlock.normalize();\n        if (dom.isEmpty(newBlock)) {\n          dom.remove(newBlock);\n          insertNewBlockAfter();\n        } else {\n          setForcedBlockAttrs(editor, newBlock);\n          NewLineUtils.moveToCaretPosition(editor, newBlock);\n        }\n      }\n      dom.setAttrib(newBlock, 'id', '');\n      editor.fire('NewBlock', { newBlock: newBlock });\n    };\n    var InsertBlock = { insert: insert$2 };\n\n    var matchesSelector = function (editor, selector) {\n      return NewLineUtils.getParentBlock(editor).filter(function (parentBlock) {\n        return selector.length > 0 && is$1(Element.fromDom(parentBlock), selector);\n      }).isSome();\n    };\n    var shouldInsertBr = function (editor) {\n      return matchesSelector(editor, Settings.getBrNewLineSelector(editor));\n    };\n    var shouldBlockNewLine = function (editor) {\n      return matchesSelector(editor, Settings.getNoNewLineSelector(editor));\n    };\n    var ContextSelectors = {\n      shouldInsertBr: shouldInsertBr,\n      shouldBlockNewLine: shouldBlockNewLine\n    };\n\n    var newLineAction = Adt.generate([\n      { br: [] },\n      { block: [] },\n      { none: [] }\n    ]);\n    var shouldBlockNewLine$1 = function (editor, shiftKey) {\n      return ContextSelectors.shouldBlockNewLine(editor);\n    };\n    var isBrMode = function (requiredState) {\n      return function (editor, shiftKey) {\n        var brMode = Settings.getForcedRootBlock(editor) === '';\n        return brMode === requiredState;\n      };\n    };\n    var inListBlock = function (requiredState) {\n      return function (editor, shiftKey) {\n        return NewLineUtils.isListItemParentBlock(editor) === requiredState;\n      };\n    };\n    var inBlock = function (blockName, requiredState) {\n      return function (editor, shiftKey) {\n        var state = NewLineUtils.getParentBlockName(editor) === blockName.toUpperCase();\n        return state === requiredState;\n      };\n    };\n    var inPreBlock = function (requiredState) {\n      return inBlock('pre', requiredState);\n    };\n    var inSummaryBlock = function () {\n      return inBlock('summary', true);\n    };\n    var shouldPutBrInPre$1 = function (requiredState) {\n      return function (editor, shiftKey) {\n        return Settings.shouldPutBrInPre(editor) === requiredState;\n      };\n    };\n    var inBrContext = function (editor, shiftKey) {\n      return ContextSelectors.shouldInsertBr(editor);\n    };\n    var hasShiftKey = function (editor, shiftKey) {\n      return shiftKey;\n    };\n    var canInsertIntoEditableRoot = function (editor) {\n      var forcedRootBlock = Settings.getForcedRootBlock(editor);\n      var rootEditable = NewLineUtils.getEditableRoot(editor.dom, editor.selection.getStart());\n      return rootEditable && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock ? forcedRootBlock : 'P');\n    };\n    var match$2 = function (predicates, action) {\n      return function (editor, shiftKey) {\n        var isMatch = foldl(predicates, function (res, p) {\n          return res && p(editor, shiftKey);\n        }, true);\n        return isMatch ? Option.some(action) : Option.none();\n      };\n    };\n    var getAction$1 = function (editor, evt) {\n      return LazyEvaluator.evaluateUntil([\n        match$2([shouldBlockNewLine$1], newLineAction.none()),\n        match$2([inSummaryBlock()], newLineAction.br()),\n        match$2([\n          inPreBlock(true),\n          shouldPutBrInPre$1(false),\n          hasShiftKey\n        ], newLineAction.br()),\n        match$2([\n          inPreBlock(true),\n          shouldPutBrInPre$1(false)\n        ], newLineAction.block()),\n        match$2([\n          inPreBlock(true),\n          shouldPutBrInPre$1(true),\n          hasShiftKey\n        ], newLineAction.block()),\n        match$2([\n          inPreBlock(true),\n          shouldPutBrInPre$1(true)\n        ], newLineAction.br()),\n        match$2([\n          inListBlock(true),\n          hasShiftKey\n        ], newLineAction.br()),\n        match$2([inListBlock(true)], newLineAction.block()),\n        match$2([\n          isBrMode(true),\n          hasShiftKey,\n          canInsertIntoEditableRoot\n        ], newLineAction.block()),\n        match$2([isBrMode(true)], newLineAction.br()),\n        match$2([inBrContext], newLineAction.br()),\n        match$2([\n          isBrMode(false),\n          hasShiftKey\n        ], newLineAction.br()),\n        match$2([canInsertIntoEditableRoot], newLineAction.block())\n      ], [\n        editor,\n        evt.shiftKey\n      ]).getOr(newLineAction.none());\n    };\n    var NewLineAction = { getAction: getAction$1 };\n\n    var insert$3 = function (editor, evt) {\n      NewLineAction.getAction(editor, evt).fold(function () {\n        InsertBr.insert(editor, evt);\n      }, function () {\n        InsertBlock.insert(editor, evt);\n      }, noop);\n    };\n    var InsertNewLine = { insert: insert$3 };\n\n    var endTypingLevel = function (undoManager) {\n      if (undoManager.typing) {\n        undoManager.typing = false;\n        undoManager.add();\n      }\n    };\n    var handleEnterKeyEvent = function (editor, event) {\n      if (event.isDefaultPrevented()) {\n        return;\n      }\n      event.preventDefault();\n      endTypingLevel(editor.undoManager);\n      editor.undoManager.transact(function () {\n        if (editor.selection.isCollapsed() === false) {\n          editor.execCommand('Delete');\n        }\n        InsertNewLine.insert(editor, event);\n      });\n    };\n    var setup$9 = function (editor) {\n      editor.on('keydown', function (event) {\n        if (event.keyCode === VK.ENTER) {\n          handleEnterKeyEvent(editor, event);\n        }\n      });\n    };\n    var EnterKey = { setup: setup$9 };\n\n    var insertTextAtPosition = function (text, pos) {\n      var container = pos.container();\n      var offset = pos.offset();\n      if (NodeType.isText(container)) {\n        container.insertData(offset, text);\n        return Option.some(CaretPosition(container, offset + text.length));\n      } else {\n        return getElementFromPosition(pos).map(function (elm) {\n          var textNode = Element.fromText(text);\n          if (pos.isAtEnd()) {\n            after(elm, textNode);\n          } else {\n            before(elm, textNode);\n          }\n          return CaretPosition(textNode.dom(), text.length);\n        });\n      }\n    };\n    var insertNbspAtPosition = curry(insertTextAtPosition, '\\xA0');\n    var insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\n    var navigateIgnoreEmptyTextNodes = function (forward, root, from) {\n      return CaretFinder.navigateIgnore(forward, root, from, isEmptyText);\n    };\n    var getClosestBlock = function (root, pos) {\n      return find(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n    };\n    var isAtBeforeAfterBlockBoundary = function (forward, root, pos) {\n      return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) {\n        return getClosestBlock(root, pos).fold(function () {\n          return isInSameBlock(newPos, pos, root.dom()) === false;\n        }, function (fromBlock) {\n          return isInSameBlock(newPos, pos, root.dom()) === false && contains$3(fromBlock, Element.fromDom(newPos.container()));\n        });\n      });\n    };\n    var isAtBlockBoundary = function (forward, root, pos) {\n      return getClosestBlock(root, pos).fold(function () {\n        return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) {\n          return isInSameBlock(newPos, pos, root.dom()) === false;\n        });\n      }, function (parent) {\n        return navigateIgnoreEmptyTextNodes(forward, parent.dom(), pos).isNone();\n      });\n    };\n    var isAtStartOfBlock = curry(isAtBlockBoundary, false);\n    var isAtEndOfBlock = curry(isAtBlockBoundary, true);\n    var isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n    var isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n    var nbsp = '\\xA0';\n    var isInMiddleOfText = function (pos) {\n      return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n    };\n    var getClosestBlock$1 = function (root, pos) {\n      var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n      return head(parentBlocks).getOr(root);\n    };\n    var hasSpaceBefore = function (root, pos) {\n      if (isInMiddleOfText(pos)) {\n        return isAfterSpace(pos);\n      } else {\n        return isAfterSpace(pos) || CaretFinder.prevPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isAfterSpace);\n      }\n    };\n    var hasSpaceAfter = function (root, pos) {\n      if (isInMiddleOfText(pos)) {\n        return isBeforeSpace(pos);\n      } else {\n        return isBeforeSpace(pos) || CaretFinder.nextPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isBeforeSpace);\n      }\n    };\n    var isPreValue = function (value) {\n      return contains([\n        'pre',\n        'pre-wrap'\n      ], value);\n    };\n    var isInPre = function (pos) {\n      return getElementFromPosition(pos).bind(function (elm) {\n        return closest(elm, isElement);\n      }).exists(function (elm) {\n        return isPreValue(get$1(elm, 'white-space'));\n      });\n    };\n    var isAtBeginningOfBody = function (root, pos) {\n      return CaretFinder.prevPosition(root.dom(), pos).isNone();\n    };\n    var isAtEndOfBody = function (root, pos) {\n      return CaretFinder.nextPosition(root.dom(), pos).isNone();\n    };\n    var isAtLineBoundary = function (root, pos) {\n      return isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr(root, pos);\n    };\n    var needsToHaveNbsp = function (root, pos) {\n      if (isInPre(pos)) {\n        return false;\n      } else {\n        return isAtLineBoundary(root, pos) || hasSpaceBefore(root, pos) || hasSpaceAfter(root, pos);\n      }\n    };\n    var needsToBeNbspLeft = function (root, pos) {\n      if (isInPre(pos)) {\n        return false;\n      } else {\n        return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos);\n      }\n    };\n    var leanRight = function (pos) {\n      var container = pos.container();\n      var offset = pos.offset();\n      if (NodeType.isText(container) && offset < container.data.length) {\n        return CaretPosition(container, offset + 1);\n      } else {\n        return pos;\n      }\n    };\n    var needsToBeNbspRight = function (root, pos) {\n      var afterPos = leanRight(pos);\n      if (isInPre(afterPos)) {\n        return false;\n      } else {\n        return isAtEndOfBlock(root, afterPos) || isAfterBlock(root, afterPos) || isBeforeBr(root, afterPos) || hasSpaceAfter(root, afterPos);\n      }\n    };\n    var needsToBeNbsp = function (root, pos) {\n      return needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, pos);\n    };\n    var isNbspAt = function (text, offset) {\n      return isNbsp(text.charAt(offset));\n    };\n    var hasNbsp = function (pos) {\n      var container = pos.container();\n      return NodeType.isText(container) && contains$2(container.data, nbsp);\n    };\n    var normalizeNbspMiddle = function (text) {\n      var chars = text.split('');\n      return map(chars, function (chr, i) {\n        if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent$1(chars[i - 1]) && isContent$1(chars[i + 1])) {\n          return ' ';\n        } else {\n          return chr;\n        }\n      }).join('');\n    };\n    var normalizeNbspAtStart = function (root, node) {\n      var text = node.data;\n      var firstPos = CaretPosition(node, 0);\n      if (isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) {\n        node.data = ' ' + text.slice(1);\n        return true;\n      } else {\n        return false;\n      }\n    };\n    var normalizeNbspInMiddleOfTextNode = function (node) {\n      var text = node.data;\n      var newText = normalizeNbspMiddle(text);\n      if (newText !== text) {\n        node.data = newText;\n        return true;\n      } else {\n        return false;\n      }\n    };\n    var normalizeNbspAtEnd = function (root, node) {\n      var text = node.data;\n      var lastPos = CaretPosition(node, text.length - 1);\n      if (isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) {\n        node.data = text.slice(0, -1) + ' ';\n        return true;\n      } else {\n        return false;\n      }\n    };\n    var normalizeNbsps = function (root, pos) {\n      return Option.some(pos).filter(hasNbsp).bind(function (pos) {\n        var container = pos.container();\n        var normalized = normalizeNbspAtStart(root, container) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container);\n        return normalized ? Option.some(pos) : Option.none();\n      });\n    };\n    var normalizeNbspsInEditor = function (editor) {\n      var root = Element.fromDom(editor.getBody());\n      if (editor.selection.isCollapsed()) {\n        normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) {\n          editor.selection.setRng(pos.toRange());\n        });\n      }\n    };\n\n    var locationToCaretPosition = function (root) {\n      return function (location) {\n        return location.fold(function (element) {\n          return CaretFinder.prevPosition(root.dom(), CaretPosition$1.before(element));\n        }, function (element) {\n          return CaretFinder.firstPositionIn(element);\n        }, function (element) {\n          return CaretFinder.lastPositionIn(element);\n        }, function (element) {\n          return CaretFinder.nextPosition(root.dom(), CaretPosition$1.after(element));\n        });\n      };\n    };\n    var insertInlineBoundarySpaceOrNbsp = function (root, pos) {\n      return function (checkPos) {\n        return needsToHaveNbsp(root, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n      };\n    };\n    var setSelection$1 = function (editor) {\n      return function (pos) {\n        editor.selection.setRng(pos.toRange());\n        editor.nodeChanged();\n        return true;\n      };\n    };\n    var insertSpaceOrNbspAtSelection = function (editor) {\n      var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n      var root = Element.fromDom(editor.getBody());\n      if (editor.selection.isCollapsed()) {\n        var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n        var caretPosition = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n        return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection$1(editor));\n      } else {\n        return false;\n      }\n    };\n\n    var executeKeydownOverride$2 = function (editor, evt) {\n      MatchKeys.execute([{\n          keyCode: VK.SPACEBAR,\n          action: MatchKeys.action(insertSpaceOrNbspAtSelection, editor)\n        }], evt).each(function (_) {\n        evt.preventDefault();\n      });\n    };\n    var setup$a = function (editor) {\n      editor.on('keydown', function (evt) {\n        if (evt.isDefaultPrevented() === false) {\n          executeKeydownOverride$2(editor, evt);\n        }\n      });\n    };\n    var SpaceKey = { setup: setup$a };\n\n    var findBlockCaretContainer = function (editor) {\n      return descendant(Element.fromDom(editor.getBody()), '*[data-mce-caret]').fold(constant(null), function (elm) {\n        return elm.dom();\n      });\n    };\n    var removeIeControlRect = function (editor) {\n      editor.selection.setRng(editor.selection.getRng());\n    };\n    var showBlockCaretContainer = function (editor, blockCaretContainer) {\n      if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n        showCaretContainerBlock(blockCaretContainer);\n        removeIeControlRect(editor);\n        editor.selection.scrollIntoView(blockCaretContainer);\n      }\n    };\n    var handleBlockContainer = function (editor, e) {\n      var blockCaretContainer = findBlockCaretContainer(editor);\n      if (!blockCaretContainer) {\n        return;\n      }\n      if (e.type === 'compositionstart') {\n        e.preventDefault();\n        e.stopPropagation();\n        showBlockCaretContainer(editor, blockCaretContainer);\n        return;\n      }\n      if (hasContent(blockCaretContainer)) {\n        showBlockCaretContainer(editor, blockCaretContainer);\n        editor.undoManager.add();\n      }\n    };\n    var setup$b = function (editor) {\n      editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n    };\n    var CaretContainerInput = { setup: setup$b };\n\n    var browser$4 = PlatformDetection$1.detect().browser;\n    var setupIeInput = function (editor) {\n      var keypressThrotter = first(function () {\n        if (!editor.composing) {\n          normalizeNbspsInEditor(editor);\n        }\n      }, 0);\n      if (browser$4.isIE()) {\n        editor.on('keypress', function (e) {\n          keypressThrotter.throttle();\n        });\n        editor.on('remove', function (e) {\n          keypressThrotter.cancel();\n        });\n      }\n    };\n    var setup$c = function (editor) {\n      setupIeInput(editor);\n      editor.on('input', function (e) {\n        if (e.isComposing === false) {\n          normalizeNbspsInEditor(editor);\n        }\n      });\n    };\n\n    var executeKeydownOverride$3 = function (editor, evt) {\n      MatchKeys.execute([\n        {\n          keyCode: VK.END,\n          action: moveToLineEndPoint(editor, true)\n        },\n        {\n          keyCode: VK.HOME,\n          action: moveToLineEndPoint(editor, false)\n        }\n      ], evt).each(function (_) {\n        evt.preventDefault();\n      });\n    };\n    var setup$d = function (editor) {\n      editor.on('keydown', function (evt) {\n        if (evt.isDefaultPrevented() === false) {\n          executeKeydownOverride$3(editor, evt);\n        }\n      });\n    };\n    var HomeEndKeys = { setup: setup$d };\n\n    var setup$e = function (editor) {\n      var caret = BoundarySelection.setupSelectedState(editor);\n      CaretContainerInput.setup(editor);\n      ArrowKeys.setup(editor, caret);\n      DeleteBackspaceKeys.setup(editor, caret);\n      EnterKey.setup(editor);\n      SpaceKey.setup(editor);\n      setup$c(editor);\n      HomeEndKeys.setup(editor);\n    };\n    var KeyboardOverrides = { setup: setup$e };\n\n    function Quirks (editor) {\n      var each = Tools.each;\n      var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, settings = editor.settings, parser = editor.parser;\n      var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit;\n      var mceInternalUrlPrefix = 'data:text/mce-internal,';\n      var mceInternalDataType = isIE ? 'Text' : 'URL';\n      var setEditorCommandState = function (cmd, state) {\n        try {\n          editor.getDoc().execCommand(cmd, false, state);\n        } catch (ex) {\n        }\n      };\n      var isDefaultPrevented = function (e) {\n        return e.isDefaultPrevented();\n      };\n      var setMceInternalContent = function (e) {\n        var selectionHtml, internalContent;\n        if (e.dataTransfer) {\n          if (editor.selection.isCollapsed() && e.target.tagName === 'IMG') {\n            selection.select(e.target);\n          }\n          selectionHtml = editor.selection.getContent();\n          if (selectionHtml.length > 0) {\n            internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml);\n            e.dataTransfer.setData(mceInternalDataType, internalContent);\n          }\n        }\n      };\n      var getMceInternalContent = function (e) {\n        var internalContent;\n        if (e.dataTransfer) {\n          internalContent = e.dataTransfer.getData(mceInternalDataType);\n          if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) {\n            internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(',');\n            return {\n              id: unescape(internalContent[0]),\n              html: unescape(internalContent[1])\n            };\n          }\n        }\n        return null;\n      };\n      var insertClipboardContents = function (content, internal) {\n        if (editor.queryCommandSupported('mceInsertClipboardContent')) {\n          editor.execCommand('mceInsertClipboardContent', false, {\n            content: content,\n            internal: internal\n          });\n        } else {\n          editor.execCommand('mceInsertContent', false, content);\n        }\n      };\n      var emptyEditorWhenDeleting = function () {\n        var serializeRng = function (rng) {\n          var body = dom.create('body');\n          var contents = rng.cloneContents();\n          body.appendChild(contents);\n          return selection.serializer.serialize(body, { format: 'html' });\n        };\n        var allContentsSelected = function (rng) {\n          var selection = serializeRng(rng);\n          var allRng = dom.createRng();\n          allRng.selectNode(editor.getBody());\n          var allSelection = serializeRng(allRng);\n          return selection === allSelection;\n        };\n        editor.on('keydown', function (e) {\n          var keyCode = e.keyCode;\n          var isCollapsed, body;\n          if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE)) {\n            isCollapsed = editor.selection.isCollapsed();\n            body = editor.getBody();\n            if (isCollapsed && !dom.isEmpty(body)) {\n              return;\n            }\n            if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n              return;\n            }\n            e.preventDefault();\n            editor.setContent('');\n            if (body.firstChild && dom.isBlock(body.firstChild)) {\n              editor.selection.setCursorLocation(body.firstChild, 0);\n            } else {\n              editor.selection.setCursorLocation(body, 0);\n            }\n            editor.nodeChanged();\n          }\n        });\n      };\n      var selectAll = function () {\n        editor.shortcuts.add('meta+a', null, 'SelectAll');\n      };\n      var inputMethodFocus = function () {\n        if (!editor.settings.content_editable) {\n          dom.bind(editor.getDoc(), 'mousedown mouseup', function (e) {\n            var rng;\n            if (e.target === editor.getDoc().documentElement) {\n              rng = selection.getRng();\n              editor.getBody().focus();\n              if (e.type === 'mousedown') {\n                if (isCaretContainer(rng.startContainer)) {\n                  return;\n                }\n                selection.placeCaretAt(e.clientX, e.clientY);\n              } else {\n                selection.setRng(rng);\n              }\n            }\n          });\n        }\n      };\n      var removeHrOnBackspace = function () {\n        editor.on('keydown', function (e) {\n          if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n            if (!editor.getBody().getElementsByTagName('hr').length) {\n              return;\n            }\n            if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n              var node = selection.getNode();\n              var previousSibling = node.previousSibling;\n              if (node.nodeName === 'HR') {\n                dom.remove(node);\n                e.preventDefault();\n                return;\n              }\n              if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') {\n                dom.remove(previousSibling);\n                e.preventDefault();\n              }\n            }\n          }\n        });\n      };\n      var focusBody = function () {\n        if (!domGlobals.Range.prototype.getClientRects) {\n          editor.on('mousedown', function (e) {\n            if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n              var body_1 = editor.getBody();\n              body_1.blur();\n              Delay.setEditorTimeout(editor, function () {\n                body_1.focus();\n              });\n            }\n          });\n        }\n      };\n      var selectControlElements = function () {\n        editor.on('click', function (e) {\n          var target = e.target;\n          if (/^(IMG|HR)$/.test(target.nodeName) && dom.getContentEditableParent(target) !== 'false') {\n            e.preventDefault();\n            editor.selection.select(target);\n            editor.nodeChanged();\n          }\n          if (target.nodeName === 'A' && dom.hasClass(target, 'mce-item-anchor')) {\n            e.preventDefault();\n            selection.select(target);\n          }\n        });\n      };\n      var removeStylesWhenDeletingAcrossBlockElements = function () {\n        var getAttributeApplyFunction = function () {\n          var template = dom.getAttribs(selection.getStart().cloneNode(false));\n          return function () {\n            var target = selection.getStart();\n            if (target !== editor.getBody()) {\n              dom.setAttrib(target, 'style', null);\n              each(template, function (attr) {\n                target.setAttributeNode(attr.cloneNode(true));\n              });\n            }\n          };\n        };\n        var isSelectionAcrossElements = function () {\n          return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n        };\n        editor.on('keypress', function (e) {\n          var applyAttributes;\n          if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n            applyAttributes = getAttributeApplyFunction();\n            editor.getDoc().execCommand('delete', false, null);\n            applyAttributes();\n            e.preventDefault();\n            return false;\n          }\n        });\n        dom.bind(editor.getDoc(), 'cut', function (e) {\n          var applyAttributes;\n          if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n            applyAttributes = getAttributeApplyFunction();\n            Delay.setEditorTimeout(editor, function () {\n              applyAttributes();\n            });\n          }\n        });\n      };\n      var disableBackspaceIntoATable = function () {\n        editor.on('keydown', function (e) {\n          if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n            if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n              var previousSibling = selection.getNode().previousSibling;\n              if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n                e.preventDefault();\n                return false;\n              }\n            }\n          }\n        });\n      };\n      var removeBlockQuoteOnBackSpace = function () {\n        editor.on('keydown', function (e) {\n          var rng, container, offset, root, parent;\n          if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n            return;\n          }\n          rng = selection.getRng();\n          container = rng.startContainer;\n          offset = rng.startOffset;\n          root = dom.getRoot();\n          parent = container;\n          if (!rng.collapsed || offset !== 0) {\n            return;\n          }\n          while (parent && parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n            parent = parent.parentNode;\n          }\n          if (parent.tagName === 'BLOCKQUOTE') {\n            editor.formatter.toggle('blockquote', null, parent);\n            rng = dom.createRng();\n            rng.setStart(container, 0);\n            rng.setEnd(container, 0);\n            selection.setRng(rng);\n          }\n        });\n      };\n      var setGeckoEditingOptions = function () {\n        var setOpts = function () {\n          setEditorCommandState('StyleWithCSS', false);\n          setEditorCommandState('enableInlineTableEditing', false);\n          if (!settings.object_resizing) {\n            setEditorCommandState('enableObjectResizing', false);\n          }\n        };\n        if (!settings.readonly) {\n          editor.on('BeforeExecCommand MouseDown', setOpts);\n        }\n      };\n      var addBrAfterLastLinks = function () {\n        var fixLinks = function () {\n          each(dom.select('a'), function (node) {\n            var parentNode = node.parentNode;\n            var root = dom.getRoot();\n            if (parentNode.lastChild === node) {\n              while (parentNode && !dom.isBlock(parentNode)) {\n                if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {\n                  return;\n                }\n                parentNode = parentNode.parentNode;\n              }\n              dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\n            }\n          });\n        };\n        editor.on('SetContent ExecCommand', function (e) {\n          if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n            fixLinks();\n          }\n        });\n      };\n      var setDefaultBlockType = function () {\n        if (settings.forced_root_block) {\n          editor.on('init', function () {\n            setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block);\n          });\n        }\n      };\n      var normalizeSelection = function () {\n        editor.on('keyup focusin mouseup', function (e) {\n          if (!VK.modifierPressed(e)) {\n            selection.normalize();\n          }\n        }, true);\n      };\n      var showBrokenImageIcon = function () {\n        editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n      };\n      var restoreFocusOnKeyDown = function () {\n        if (!editor.inline) {\n          editor.on('keydown', function () {\n            if (domGlobals.document.activeElement === domGlobals.document.body) {\n              editor.getWin().focus();\n            }\n          });\n        }\n      };\n      var bodyHeight = function () {\n        if (!editor.inline) {\n          editor.contentStyles.push('body {min-height: 150px}');\n          editor.on('click', function (e) {\n            var rng;\n            if (e.target.nodeName === 'HTML') {\n              if (Env.ie > 11) {\n                editor.getBody().focus();\n                return;\n              }\n              rng = editor.selection.getRng();\n              editor.getBody().focus();\n              editor.selection.setRng(rng);\n              editor.selection.normalize();\n              editor.nodeChanged();\n            }\n          });\n        }\n      };\n      var blockCmdArrowNavigation = function () {\n        if (Env.mac) {\n          editor.on('keydown', function (e) {\n            if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n              e.preventDefault();\n              editor.selection.getSel().modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n            }\n          });\n        }\n      };\n      var disableAutoUrlDetect = function () {\n        setEditorCommandState('AutoUrlDetect', false);\n      };\n      var tapLinksAndImages = function () {\n        editor.on('click', function (e) {\n          var elm = e.target;\n          do {\n            if (elm.tagName === 'A') {\n              e.preventDefault();\n              return;\n            }\n          } while (elm = elm.parentNode);\n        });\n        editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');\n      };\n      var blockFormSubmitInsideEditor = function () {\n        editor.on('init', function () {\n          editor.dom.bind(editor.getBody(), 'submit', function (e) {\n            e.preventDefault();\n          });\n        });\n      };\n      var removeAppleInterchangeBrs = function () {\n        parser.addNodeFilter('br', function (nodes) {\n          var i = nodes.length;\n          while (i--) {\n            if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n              nodes[i].remove();\n            }\n          }\n        });\n      };\n      var ieInternalDragAndDrop = function () {\n        editor.on('dragstart', function (e) {\n          setMceInternalContent(e);\n        });\n        editor.on('drop', function (e) {\n          if (!isDefaultPrevented(e)) {\n            var internalContent = getMceInternalContent(e);\n            if (internalContent && internalContent.id !== editor.id) {\n              e.preventDefault();\n              var rng = CaretRangeFromPoint.fromPoint(e.x, e.y, editor.getDoc());\n              selection.setRng(rng);\n              insertClipboardContents(internalContent.html, true);\n            }\n          }\n        });\n      };\n      var refreshContentEditable = function () {\n      };\n      var isHidden = function () {\n        var sel;\n        if (!isGecko || editor.removed) {\n          return 0;\n        }\n        sel = editor.selection.getSel();\n        return !sel || !sel.rangeCount || sel.rangeCount === 0;\n      };\n      removeBlockQuoteOnBackSpace();\n      emptyEditorWhenDeleting();\n      if (!Env.windowsPhone) {\n        normalizeSelection();\n      }\n      if (isWebKit) {\n        inputMethodFocus();\n        selectControlElements();\n        setDefaultBlockType();\n        blockFormSubmitInsideEditor();\n        disableBackspaceIntoATable();\n        removeAppleInterchangeBrs();\n        if (Env.iOS) {\n          restoreFocusOnKeyDown();\n          bodyHeight();\n          tapLinksAndImages();\n        } else {\n          selectAll();\n        }\n      }\n      if (Env.ie >= 11) {\n        bodyHeight();\n        disableBackspaceIntoATable();\n      }\n      if (Env.ie) {\n        selectAll();\n        disableAutoUrlDetect();\n        ieInternalDragAndDrop();\n      }\n      if (isGecko) {\n        removeHrOnBackspace();\n        focusBody();\n        removeStylesWhenDeletingAcrossBlockElements();\n        setGeckoEditingOptions();\n        addBrAfterLastLinks();\n        showBrokenImageIcon();\n        blockCmdArrowNavigation();\n        disableBackspaceIntoATable();\n      }\n      return {\n        refreshContentEditable: refreshContentEditable,\n        isHidden: isHidden\n      };\n    }\n\n    var isTextBlockNode = function (node) {\n      return NodeType.isElement(node) && isTextBlock(Element.fromDom(node));\n    };\n    var normalizeSelection$1 = function (editor) {\n      var rng = editor.selection.getRng();\n      var startPos = CaretPosition.fromRangeStart(rng);\n      var endPos = CaretPosition.fromRangeEnd(rng);\n      if (CaretPosition.isElementPosition(startPos)) {\n        var container = startPos.container();\n        if (isTextBlockNode(container)) {\n          CaretFinder.firstPositionIn(container).each(function (pos) {\n            return rng.setStart(pos.container(), pos.offset());\n          });\n        }\n      }\n      if (CaretPosition.isElementPosition(endPos)) {\n        var container = startPos.container();\n        if (isTextBlockNode(container)) {\n          CaretFinder.lastPositionIn(container).each(function (pos) {\n            return rng.setEnd(pos.container(), pos.offset());\n          });\n        }\n      }\n      editor.selection.setRng(RangeNormalizer.normalize(rng));\n    };\n    var setup$f = function (editor) {\n      editor.on('click', function (e) {\n        if (e.detail >= 3) {\n          normalizeSelection$1(editor);\n        }\n      });\n    };\n\n    var preventSummaryToggle = function (editor) {\n      editor.on('click', function (e) {\n        if (editor.dom.getParent(e.target, 'details')) {\n          e.preventDefault();\n        }\n      });\n    };\n    var filterDetails = function (editor) {\n      editor.parser.addNodeFilter('details', function (elms) {\n        each(elms, function (details) {\n          details.attr('data-mce-open', details.attr('open'));\n          details.attr('open', 'open');\n        });\n      });\n      editor.serializer.addNodeFilter('details', function (elms) {\n        each(elms, function (details) {\n          var open = details.attr('data-mce-open');\n          details.attr('open', isString(open) ? open : null);\n          details.attr('data-mce-open', null);\n        });\n      });\n    };\n    var setup$g = function (editor) {\n      preventSummaryToggle(editor);\n      filterDetails(editor);\n    };\n\n    var DOM$2 = DOMUtils$1.DOM;\n    var appendStyle = function (editor, text) {\n      var head = Element.fromDom(editor.getDoc().head);\n      var tag = Element.fromTag('style');\n      set(tag, 'type', 'text/css');\n      append(tag, Element.fromText(text));\n      append(head, tag);\n    };\n    var createParser = function (editor) {\n      var parser = DomParser(editor.settings, editor.schema);\n      parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name) {\n        var i = nodes.length, node;\n        var dom = editor.dom;\n        var value, internalName;\n        while (i--) {\n          node = nodes[i];\n          value = node.attr(name);\n          internalName = 'data-mce-' + name;\n          if (!node.attributes.map[internalName]) {\n            if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\n              continue;\n            }\n            if (name === 'style') {\n              value = dom.serializeStyle(dom.parseStyle(value), node.name);\n              if (!value.length) {\n                value = null;\n              }\n              node.attr(internalName, value);\n              node.attr(name, value);\n            } else if (name === 'tabindex') {\n              node.attr(internalName, value);\n              node.attr(name, null);\n            } else {\n              node.attr(internalName, editor.convertURL(value, name, node.name));\n            }\n          }\n        }\n      });\n      parser.addNodeFilter('script', function (nodes) {\n        var i = nodes.length, node, type;\n        while (i--) {\n          node = nodes[i];\n          type = node.attr('type') || 'no/type';\n          if (type.indexOf('mce-') !== 0) {\n            node.attr('type', 'mce-' + type);\n          }\n        }\n      });\n      parser.addNodeFilter('#cdata', function (nodes) {\n        var i = nodes.length, node;\n        while (i--) {\n          node = nodes[i];\n          node.type = 8;\n          node.name = '#comment';\n          node.value = '[CDATA[' + node.value + ']]';\n        }\n      });\n      parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {\n        var i = nodes.length, node;\n        var nonEmptyElements = editor.schema.getNonEmptyElements();\n        while (i--) {\n          node = nodes[i];\n          if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n            node.append(new Node$1('br', 1)).shortEnded = true;\n          }\n        }\n      });\n      return parser;\n    };\n    var autoFocus = function (editor) {\n      if (editor.settings.auto_focus) {\n        Delay.setEditorTimeout(editor, function () {\n          var focusEditor;\n          if (editor.settings.auto_focus === true) {\n            focusEditor = editor;\n          } else {\n            focusEditor = editor.editorManager.get(editor.settings.auto_focus);\n          }\n          if (!focusEditor.destroyed) {\n            focusEditor.focus();\n          }\n        }, 100);\n      }\n    };\n    var initEditor = function (editor) {\n      editor.bindPendingEventDelegates();\n      editor.initialized = true;\n      editor.fire('init');\n      editor.focus(true);\n      editor.nodeChanged({ initial: true });\n      editor.execCallback('init_instance_callback', editor);\n      autoFocus(editor);\n    };\n    var getStyleSheetLoader = function (editor) {\n      return editor.inline ? DOM$2.styleSheetLoader : editor.dom.styleSheetLoader;\n    };\n    var initContentBody = function (editor, skipWrite) {\n      var settings = editor.settings;\n      var targetElm = editor.getElement();\n      var doc = editor.getDoc(), body, contentCssText;\n      if (!settings.inline) {\n        editor.getElement().style.visibility = editor.orgVisibility;\n      }\n      if (!skipWrite && !settings.content_editable) {\n        doc.open();\n        doc.write(editor.iframeHTML);\n        doc.close();\n      }\n      if (settings.content_editable) {\n        editor.on('remove', function () {\n          var bodyEl = this.getBody();\n          DOM$2.removeClass(bodyEl, 'mce-content-body');\n          DOM$2.removeClass(bodyEl, 'mce-edit-focus');\n          DOM$2.setAttrib(bodyEl, 'contentEditable', null);\n        });\n        DOM$2.addClass(targetElm, 'mce-content-body');\n        editor.contentDocument = doc = settings.content_document || domGlobals.document;\n        editor.contentWindow = settings.content_window || domGlobals.window;\n        editor.bodyElement = targetElm;\n        settings.content_document = settings.content_window = null;\n        settings.root_name = targetElm.nodeName.toLowerCase();\n      }\n      body = editor.getBody();\n      body.disabled = true;\n      editor.readonly = settings.readonly;\n      if (!editor.readonly) {\n        if (editor.inline && DOM$2.getStyle(body, 'position', true) === 'static') {\n          body.style.position = 'relative';\n        }\n        body.contentEditable = editor.getParam('content_editable_state', true);\n      }\n      body.disabled = false;\n      editor.editorUpload = EditorUpload(editor);\n      editor.schema = Schema(settings);\n      editor.dom = DOMUtils$1(doc, {\n        keep_values: true,\n        url_converter: editor.convertURL,\n        url_converter_scope: editor,\n        hex_colors: settings.force_hex_style_colors,\n        class_filter: settings.class_filter,\n        update_styles: true,\n        root_element: editor.inline ? editor.getBody() : null,\n        collect: settings.content_editable,\n        schema: editor.schema,\n        contentCssCors: Settings.shouldUseContentCssCors(editor),\n        onSetAttrib: function (e) {\n          editor.fire('SetAttrib', e);\n        }\n      });\n      editor.parser = createParser(editor);\n      editor.serializer = DomSerializer$1(settings, editor);\n      editor.selection = Selection$1(editor.dom, editor.getWin(), editor.serializer, editor);\n      editor.annotator = Annotator(editor);\n      editor.formatter = Formatter(editor);\n      editor.undoManager = UndoManager(editor);\n      editor._nodeChangeDispatcher = new NodeChange(editor);\n      editor._selectionOverrides = SelectionOverrides(editor);\n      setup$g(editor);\n      setup$f(editor);\n      KeyboardOverrides.setup(editor);\n      ForceBlocks.setup(editor);\n      editor.fire('PreInit');\n      if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {\n        doc.body.spellcheck = false;\n        DOM$2.setAttrib(body, 'spellcheck', 'false');\n      }\n      editor.quirks = Quirks(editor);\n      editor.fire('PostRender');\n      if (settings.directionality) {\n        body.dir = settings.directionality;\n      }\n      if (settings.nowrap) {\n        body.style.whiteSpace = 'nowrap';\n      }\n      if (settings.protect) {\n        editor.on('BeforeSetContent', function (e) {\n          Tools.each(settings.protect, function (pattern) {\n            e.content = e.content.replace(pattern, function (str) {\n              return '<!--mce:protected ' + escape(str) + '-->';\n            });\n          });\n        });\n      }\n      editor.on('SetContent', function () {\n        editor.addVisual(editor.getBody());\n      });\n      editor.load({\n        initial: true,\n        format: 'html'\n      });\n      editor.startContent = editor.getContent({ format: 'raw' });\n      editor.on('compositionstart compositionend', function (e) {\n        editor.composing = e.type === 'compositionstart';\n      });\n      if (editor.contentStyles.length > 0) {\n        contentCssText = '';\n        Tools.each(editor.contentStyles, function (style) {\n          contentCssText += style + '\\r\\n';\n        });\n        editor.dom.addStyle(contentCssText);\n      }\n      getStyleSheetLoader(editor).loadAll(editor.contentCSS, function (_) {\n        initEditor(editor);\n      }, function (urls) {\n        initEditor(editor);\n      });\n      if (settings.content_style) {\n        appendStyle(editor, settings.content_style);\n      }\n    };\n    var InitContentBody = { initContentBody: initContentBody };\n\n    var DOM$3 = DOMUtils$1.DOM;\n    var relaxDomain = function (editor, ifr) {\n      if (domGlobals.document.domain !== domGlobals.window.location.hostname && Env.ie && Env.ie < 12) {\n        var bodyUuid = Uuid.uuid('mce');\n        editor[bodyUuid] = function () {\n          InitContentBody.initContentBody(editor);\n        };\n        var domainRelaxUrl = 'javascript:(function(){' + 'document.open();document.domain=\"' + domGlobals.document.domain + '\";' + 'var ed = window.parent.tinymce.get(\"' + editor.id + '\");document.write(ed.iframeHTML);' + 'document.close();ed.' + bodyUuid + '(true);})()';\n        DOM$3.setAttrib(ifr, 'src', domainRelaxUrl);\n        return true;\n      }\n      return false;\n    };\n    var normalizeHeight = function (height) {\n      var normalizedHeight = typeof height === 'number' ? height + 'px' : height;\n      return normalizedHeight ? normalizedHeight : '';\n    };\n    var createIframeElement = function (id, title, height, customAttrs) {\n      var iframe = Element.fromTag('iframe');\n      setAll(iframe, customAttrs);\n      setAll(iframe, {\n        id: id + '_ifr',\n        frameBorder: '0',\n        allowTransparency: 'true',\n        title: title\n      });\n      setAll$1(iframe, {\n        width: '100%',\n        height: normalizeHeight(height),\n        display: 'block'\n      });\n      return iframe;\n    };\n    var getIframeHtml = function (editor) {\n      var bodyId, bodyClass, iframeHTML;\n      iframeHTML = Settings.getDocType(editor) + '<html><head>';\n      if (Settings.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n        iframeHTML += '<base href=\"' + editor.documentBaseURI.getURI() + '\" />';\n      }\n      iframeHTML += '<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />';\n      bodyId = Settings.getBodyId(editor);\n      bodyClass = Settings.getBodyClass(editor);\n      if (Settings.getContentSecurityPolicy(editor)) {\n        iframeHTML += '<meta http-equiv=\"Content-Security-Policy\" content=\"' + Settings.getContentSecurityPolicy(editor) + '\" />';\n      }\n      iframeHTML += '</head><body id=\"' + bodyId + '\" class=\"mce-content-body ' + bodyClass + '\" data-id=\"' + editor.id + '\"><br></body></html>';\n      return iframeHTML;\n    };\n    var createIframe = function (editor, o) {\n      var title = editor.editorManager.translate('Rich Text Area. Press ALT-F9 for menu. ' + 'Press ALT-F10 for toolbar. Press ALT-0 for help');\n      var ifr = createIframeElement(editor.id, title, o.height, Settings.getIframeAttrs(editor)).dom();\n      ifr.onload = function () {\n        ifr.onload = null;\n        editor.fire('load');\n      };\n      var isDomainRelaxed = relaxDomain(editor, ifr);\n      editor.contentAreaContainer = o.iframeContainer;\n      editor.iframeElement = ifr;\n      editor.iframeHTML = getIframeHtml(editor);\n      DOM$3.add(o.iframeContainer, ifr);\n      return isDomainRelaxed;\n    };\n    var init$1 = function (editor, boxInfo) {\n      var isDomainRelaxed = createIframe(editor, boxInfo);\n      if (boxInfo.editorContainer) {\n        DOM$3.get(boxInfo.editorContainer).style.display = editor.orgDisplay;\n        editor.hidden = DOM$3.isHidden(boxInfo.editorContainer);\n      }\n      editor.getElement().style.display = 'none';\n      DOM$3.setAttrib(editor.id, 'aria-hidden', 'true');\n      if (!isDomainRelaxed) {\n        InitContentBody.initContentBody(editor);\n      }\n    };\n    var InitIframe = { init: init$1 };\n\n    var DOM$4 = DOMUtils$1.DOM;\n    var initPlugin = function (editor, initializedPlugins, plugin) {\n      var Plugin = PluginManager$1.get(plugin);\n      var pluginUrl = PluginManager$1.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n      plugin = Tools.trim(plugin);\n      if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n        Tools.each(PluginManager$1.dependencies(plugin), function (dep) {\n          initPlugin(editor, initializedPlugins, dep);\n        });\n        if (editor.plugins[plugin]) {\n          return;\n        }\n        try {\n          var pluginInstance = new Plugin(editor, pluginUrl, editor.$);\n          editor.plugins[plugin] = pluginInstance;\n          if (pluginInstance.init) {\n            pluginInstance.init(editor, pluginUrl);\n            initializedPlugins.push(plugin);\n          }\n        } catch (e) {\n          ErrorReporter.pluginInitError(editor, plugin, e);\n        }\n      }\n    };\n    var trimLegacyPrefix = function (name) {\n      return name.replace(/^\\-/, '');\n    };\n    var initPlugins = function (editor) {\n      var initializedPlugins = [];\n      Tools.each(editor.settings.plugins.split(/[ ,]/), function (name) {\n        initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n      });\n    };\n    var initTheme = function (editor) {\n      var Theme;\n      var theme = editor.settings.theme;\n      if (isString(theme)) {\n        editor.settings.theme = trimLegacyPrefix(theme);\n        Theme = ThemeManager.get(theme);\n        editor.theme = new Theme(editor, ThemeManager.urls[theme]);\n        if (editor.theme.init) {\n          editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''), editor.$);\n        }\n      } else {\n        editor.theme = {};\n      }\n    };\n    var renderFromLoadedTheme = function (editor) {\n      var w, h, minHeight, re, info;\n      var settings = editor.settings;\n      var elm = editor.getElement();\n      w = settings.width || DOM$4.getStyle(elm, 'width') || '100%';\n      h = settings.height || DOM$4.getStyle(elm, 'height') || elm.offsetHeight;\n      minHeight = settings.min_height || 100;\n      re = /^[0-9\\.]+(|px)$/i;\n      if (re.test('' + w)) {\n        w = Math.max(parseInt(w, 10), 100);\n      }\n      if (re.test('' + h)) {\n        h = Math.max(parseInt(h, 10), minHeight);\n      }\n      info = editor.theme.renderUI({\n        targetNode: elm,\n        width: w,\n        height: h,\n        deltaWidth: settings.delta_width,\n        deltaHeight: settings.delta_height\n      });\n      if (!settings.content_editable) {\n        h = (info.iframeHeight || h) + (typeof h === 'number' ? info.deltaHeight || 0 : '');\n        if (h < minHeight) {\n          h = minHeight;\n        }\n      }\n      info.height = h;\n      return info;\n    };\n    var renderFromThemeFunc = function (editor) {\n      var info;\n      var elm = editor.getElement();\n      info = editor.settings.theme(editor, elm);\n      if (info.editorContainer.nodeType) {\n        info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\n      }\n      if (info.iframeContainer && info.iframeContainer.nodeType) {\n        info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\n      }\n      info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n      return info;\n    };\n    var createThemeFalseResult = function (element) {\n      return {\n        editorContainer: element,\n        iframeContainer: element\n      };\n    };\n    var renderThemeFalseIframe = function (targetElement) {\n      var iframeContainer = DOM$4.create('div');\n      DOM$4.insertAfter(iframeContainer, targetElement);\n      return createThemeFalseResult(iframeContainer);\n    };\n    var renderThemeFalse = function (editor) {\n      var targetElement = editor.getElement();\n      return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n    };\n    var renderThemeUi = function (editor) {\n      var settings = editor.settings, elm = editor.getElement();\n      editor.orgDisplay = elm.style.display;\n      if (isString(settings.theme)) {\n        return renderFromLoadedTheme(editor);\n      } else if (isFunction(settings.theme)) {\n        return renderFromThemeFunc(editor);\n      } else {\n        return renderThemeFalse(editor);\n      }\n    };\n    var init$2 = function (editor) {\n      var settings = editor.settings;\n      var elm = editor.getElement();\n      var boxInfo;\n      editor.rtl = settings.rtl_ui || editor.editorManager.i18n.rtl;\n      editor.editorManager.i18n.setCode(settings.language);\n      settings.aria_label = settings.aria_label || DOM$4.getAttrib(elm, 'aria-label', editor.getLang('aria.rich_text_area'));\n      editor.fire('ScriptsLoaded');\n      initTheme(editor);\n      initPlugins(editor);\n      boxInfo = renderThemeUi(editor);\n      editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;\n      if (settings.content_css) {\n        Tools.each(Tools.explode(settings.content_css), function (u) {\n          editor.contentCSS.push(editor.documentBaseURI.toAbsolute(u));\n        });\n      }\n      if (settings.content_editable) {\n        return InitContentBody.initContentBody(editor);\n      } else {\n        return InitIframe.init(editor, boxInfo);\n      }\n    };\n    var Init = { init: init$2 };\n\n    var DOM$5 = DOMUtils$1.DOM;\n    var hasSkipLoadPrefix = function (name) {\n      return name.charAt(0) === '-';\n    };\n    var loadLanguage = function (scriptLoader, editor) {\n      var settings = editor.settings;\n      if (settings.language && settings.language !== 'en' && !settings.language_url) {\n        settings.language_url = editor.editorManager.baseURL + '/langs/' + settings.language + '.js';\n      }\n      if (settings.language_url && !editor.editorManager.i18n.data[settings.language]) {\n        scriptLoader.add(settings.language_url);\n      }\n    };\n    var loadTheme = function (scriptLoader, editor, suffix, callback) {\n      var settings = editor.settings, theme = settings.theme;\n      if (isString(theme)) {\n        if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) {\n          var themeUrl = settings.theme_url;\n          if (themeUrl) {\n            ThemeManager.load(theme, editor.documentBaseURI.toAbsolute(themeUrl));\n          } else {\n            ThemeManager.load(theme, 'themes/' + theme + '/theme' + suffix + '.js');\n          }\n        }\n        scriptLoader.loadQueue(function () {\n          ThemeManager.waitFor(theme, callback);\n        });\n      } else {\n        callback();\n      }\n    };\n    var loadPlugins = function (settings, suffix) {\n      if (Tools.isArray(settings.plugins)) {\n        settings.plugins = settings.plugins.join(' ');\n      }\n      Tools.each(settings.external_plugins, function (url, name) {\n        PluginManager$1.load(name, url);\n        settings.plugins += ' ' + name;\n      });\n      Tools.each(settings.plugins.split(/[ ,]/), function (plugin) {\n        plugin = Tools.trim(plugin);\n        if (plugin && !PluginManager$1.urls[plugin]) {\n          if (hasSkipLoadPrefix(plugin)) {\n            plugin = plugin.substr(1, plugin.length);\n            var dependencies = PluginManager$1.dependencies(plugin);\n            Tools.each(dependencies, function (dep) {\n              var defaultSettings = {\n                prefix: 'plugins/',\n                resource: dep,\n                suffix: '/plugin' + suffix + '.js'\n              };\n              dep = PluginManager$1.createUrl(defaultSettings, dep);\n              PluginManager$1.load(dep.resource, dep);\n            });\n          } else {\n            PluginManager$1.load(plugin, {\n              prefix: 'plugins/',\n              resource: plugin,\n              suffix: '/plugin' + suffix + '.js'\n            });\n          }\n        }\n      });\n    };\n    var loadScripts = function (editor, suffix) {\n      var scriptLoader = ScriptLoader.ScriptLoader;\n      loadTheme(scriptLoader, editor, suffix, function () {\n        loadLanguage(scriptLoader, editor);\n        loadPlugins(editor.settings, suffix);\n        scriptLoader.loadQueue(function () {\n          if (!editor.removed) {\n            Init.init(editor);\n          }\n        }, editor, function (urls) {\n          ErrorReporter.pluginLoadError(editor, urls[0]);\n          if (!editor.removed) {\n            Init.init(editor);\n          }\n        });\n      });\n    };\n    var render = function (editor) {\n      var settings = editor.settings, id = editor.id;\n      var readyHandler = function () {\n        DOM$5.unbind(domGlobals.window, 'ready', readyHandler);\n        editor.render();\n      };\n      if (!EventUtils.Event.domLoaded) {\n        DOM$5.bind(domGlobals.window, 'ready', readyHandler);\n        return;\n      }\n      if (!editor.getElement()) {\n        return;\n      }\n      if (!Env.contentEditable) {\n        return;\n      }\n      if (!settings.inline) {\n        editor.orgVisibility = editor.getElement().style.visibility;\n        editor.getElement().style.visibility = 'hidden';\n      } else {\n        editor.inline = true;\n      }\n      var form = editor.getElement().form || DOM$5.getParent(id, 'form');\n      if (form) {\n        editor.formElement = form;\n        if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(editor.getElement().nodeName)) {\n          DOM$5.insertAfter(DOM$5.create('input', {\n            type: 'hidden',\n            name: id\n          }), id);\n          editor.hasHiddenInput = true;\n        }\n        editor.formEventDelegate = function (e) {\n          editor.fire(e.type, e);\n        };\n        DOM$5.bind(form, 'submit reset', editor.formEventDelegate);\n        editor.on('reset', function () {\n          editor.setContent(editor.startContent, { format: 'raw' });\n        });\n        if (settings.submit_patch && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n          form._mceOldSubmit = form.submit;\n          form.submit = function () {\n            editor.editorManager.triggerSave();\n            editor.setDirty(false);\n            return form._mceOldSubmit(form);\n          };\n        }\n      }\n      editor.windowManager = WindowManager(editor);\n      editor.notificationManager = NotificationManager(editor);\n      if (settings.encoding === 'xml') {\n        editor.on('GetContent', function (e) {\n          if (e.save) {\n            e.content = DOM$5.encode(e.content);\n          }\n        });\n      }\n      if (settings.add_form_submit_trigger) {\n        editor.on('submit', function () {\n          if (editor.initialized) {\n            editor.save();\n          }\n        });\n      }\n      if (settings.add_unload_trigger) {\n        editor._beforeUnload = function () {\n          if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n            editor.save({\n              format: 'raw',\n              no_events: true,\n              set_dirty: false\n            });\n          }\n        };\n        editor.editorManager.on('BeforeUnload', editor._beforeUnload);\n      }\n      editor.editorManager.add(editor);\n      loadScripts(editor, editor.suffix);\n    };\n    var Render = { render: render };\n\n    var add$4 = function (editor, name, settings) {\n      var sidebars = editor.sidebars ? editor.sidebars : [];\n      sidebars.push({\n        name: name,\n        settings: settings\n      });\n      editor.sidebars = sidebars;\n    };\n    var Sidebar = { add: add$4 };\n\n    var each$k = Tools.each, trim$4 = Tools.trim;\n    var queryParts = 'source protocol authority userInfo user password host port relative path directory file query anchor'.split(' ');\n    var DEFAULT_PORTS = {\n      ftp: 21,\n      http: 80,\n      https: 443,\n      mailto: 25\n    };\n    var URI = function (url, settings) {\n      var self = this;\n      var baseUri, baseUrl;\n      url = trim$4(url);\n      settings = self.settings = settings || {};\n      baseUri = settings.base_uri;\n      if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n        self.source = url;\n        return;\n      }\n      var isProtocolRelative = url.indexOf('//') === 0;\n      if (url.indexOf('/') === 0 && !isProtocolRelative) {\n        url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\n      }\n      if (!/^[\\w\\-]*:?\\/\\//.test(url)) {\n        baseUrl = settings.base_uri ? settings.base_uri.path : new URI(domGlobals.document.location.href).directory;\n        if (settings.base_uri.protocol == '') {\n          url = '//mce_host' + self.toAbsPath(baseUrl, url);\n        } else {\n          url = /([^#?]*)([#?]?.*)/.exec(url);\n          url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, url[1]) + url[2];\n        }\n      }\n      url = url.replace(/@@/g, '(mce_at)');\n      url = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n      each$k(queryParts, function (v, i) {\n        var part = url[i];\n        if (part) {\n          part = part.replace(/\\(mce_at\\)/g, '@@');\n        }\n        self[v] = part;\n      });\n      if (baseUri) {\n        if (!self.protocol) {\n          self.protocol = baseUri.protocol;\n        }\n        if (!self.userInfo) {\n          self.userInfo = baseUri.userInfo;\n        }\n        if (!self.port && self.host === 'mce_host') {\n          self.port = baseUri.port;\n        }\n        if (!self.host || self.host === 'mce_host') {\n          self.host = baseUri.host;\n        }\n        self.source = '';\n      }\n      if (isProtocolRelative) {\n        self.protocol = '';\n      }\n    };\n    URI.prototype = {\n      setPath: function (path) {\n        var self = this;\n        path = /^(.*?)\\/?(\\w+)?$/.exec(path);\n        self.path = path[0];\n        self.directory = path[1];\n        self.file = path[2];\n        self.source = '';\n        self.getURI();\n      },\n      toRelative: function (uri) {\n        var self = this;\n        var output;\n        if (uri === './') {\n          return uri;\n        }\n        uri = new URI(uri, { base_uri: self });\n        if (uri.host !== 'mce_host' && self.host !== uri.host && uri.host || self.port !== uri.port || self.protocol !== uri.protocol && uri.protocol !== '') {\n          return uri.getURI();\n        }\n        var tu = self.getURI(), uu = uri.getURI();\n        if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {\n          return tu;\n        }\n        output = self.toRelPath(self.path, uri.path);\n        if (uri.query) {\n          output += '?' + uri.query;\n        }\n        if (uri.anchor) {\n          output += '#' + uri.anchor;\n        }\n        return output;\n      },\n      toAbsolute: function (uri, noHost) {\n        uri = new URI(uri, { base_uri: this });\n        return uri.getURI(noHost && this.isSameOrigin(uri));\n      },\n      isSameOrigin: function (uri) {\n        if (this.host == uri.host && this.protocol == uri.protocol) {\n          if (this.port == uri.port) {\n            return true;\n          }\n          var defaultPort = DEFAULT_PORTS[this.protocol];\n          if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n            return true;\n          }\n        }\n        return false;\n      },\n      toRelPath: function (base, path) {\n        var items, breakPoint = 0, out = '', i, l;\n        base = base.substring(0, base.lastIndexOf('/'));\n        base = base.split('/');\n        items = path.split('/');\n        if (base.length >= items.length) {\n          for (i = 0, l = base.length; i < l; i++) {\n            if (i >= items.length || base[i] !== items[i]) {\n              breakPoint = i + 1;\n              break;\n            }\n          }\n        }\n        if (base.length < items.length) {\n          for (i = 0, l = items.length; i < l; i++) {\n            if (i >= base.length || base[i] !== items[i]) {\n              breakPoint = i + 1;\n              break;\n            }\n          }\n        }\n        if (breakPoint === 1) {\n          return path;\n        }\n        for (i = 0, l = base.length - (breakPoint - 1); i < l; i++) {\n          out += '../';\n        }\n        for (i = breakPoint - 1, l = items.length; i < l; i++) {\n          if (i !== breakPoint - 1) {\n            out += '/' + items[i];\n          } else {\n            out += items[i];\n          }\n        }\n        return out;\n      },\n      toAbsPath: function (base, path) {\n        var i, nb = 0, o = [], tr, outPath;\n        tr = /\\/$/.test(path) ? '/' : '';\n        base = base.split('/');\n        path = path.split('/');\n        each$k(base, function (k) {\n          if (k) {\n            o.push(k);\n          }\n        });\n        base = o;\n        for (i = path.length - 1, o = []; i >= 0; i--) {\n          if (path[i].length === 0 || path[i] === '.') {\n            continue;\n          }\n          if (path[i] === '..') {\n            nb++;\n            continue;\n          }\n          if (nb > 0) {\n            nb--;\n            continue;\n          }\n          o.push(path[i]);\n        }\n        i = base.length - nb;\n        if (i <= 0) {\n          outPath = o.reverse().join('/');\n        } else {\n          outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');\n        }\n        if (outPath.indexOf('/') !== 0) {\n          outPath = '/' + outPath;\n        }\n        if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {\n          outPath += tr;\n        }\n        return outPath;\n      },\n      getURI: function (noProtoHost) {\n        var s;\n        var self = this;\n        if (!self.source || noProtoHost) {\n          s = '';\n          if (!noProtoHost) {\n            if (self.protocol) {\n              s += self.protocol + '://';\n            } else {\n              s += '//';\n            }\n            if (self.userInfo) {\n              s += self.userInfo + '@';\n            }\n            if (self.host) {\n              s += self.host;\n            }\n            if (self.port) {\n              s += ':' + self.port;\n            }\n          }\n          if (self.path) {\n            s += self.path;\n          }\n          if (self.query) {\n            s += '?' + self.query;\n          }\n          if (self.anchor) {\n            s += '#' + self.anchor;\n          }\n          self.source = s;\n        }\n        return self.source;\n      }\n    };\n    URI.parseDataUri = function (uri) {\n      var type, matches;\n      uri = decodeURIComponent(uri).split(',');\n      matches = /data:([^;]+)/.exec(uri[0]);\n      if (matches) {\n        type = matches[1];\n      }\n      return {\n        type: type,\n        data: uri[1]\n      };\n    };\n    URI.getDocumentBaseUrl = function (loc) {\n      var baseUrl;\n      if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\n        baseUrl = loc.href;\n      } else {\n        baseUrl = loc.protocol + '//' + loc.host + loc.pathname;\n      }\n      if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(baseUrl)) {\n        baseUrl = baseUrl.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n        if (!/[\\/\\\\]$/.test(baseUrl)) {\n          baseUrl += '/';\n        }\n      }\n      return baseUrl;\n    };\n\n    var defaultFormat = 'html';\n    var trimEmptyContents = function (editor, html) {\n      var blockName = Settings.getForcedRootBlock(editor);\n      var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>(&nbsp;|&#160;|\\\\s|\\xA0|<br \\\\/>|)<\\\\/' + blockName + '>[\\r\\n]*|<br \\\\/>[\\r\\n]*)$');\n      return html.replace(emptyRegExp, '');\n    };\n    var getContentFromBody = function (editor, args, body) {\n      var content;\n      args.format = args.format ? args.format : defaultFormat;\n      args.get = true;\n      args.getInner = true;\n      if (!args.no_events) {\n        editor.fire('BeforeGetContent', args);\n      }\n      if (args.format === 'raw') {\n        content = Tools.trim(TrimHtml.trimExternal(editor.serializer, body.innerHTML));\n      } else if (args.format === 'text') {\n        content = Zwsp.trim(body.innerText || body.textContent);\n      } else if (args.format === 'tree') {\n        return editor.serializer.serialize(body, args);\n      } else {\n        content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\n      }\n      if (args.format !== 'text' && !isWsPreserveElement(Element.fromDom(body))) {\n        args.content = Tools.trim(content);\n      } else {\n        args.content = content;\n      }\n      if (!args.no_events) {\n        editor.fire('GetContent', args);\n      }\n      return args.content;\n    };\n    var getContent$1 = function (editor, args) {\n      if (args === void 0) {\n        args = {};\n      }\n      return Option.from(editor.getBody()).fold(constant(args.format === 'tree' ? new Node$1('body', 11) : ''), function (body) {\n        return getContentFromBody(editor, args, body);\n      });\n    };\n\n    var traverse = function (node, fn) {\n      fn(node);\n      if (node.firstChild) {\n        traverse(node.firstChild, fn);\n      }\n      if (node.next) {\n        traverse(node.next, fn);\n      }\n    };\n    var findMatchingNodes = function (nodeFilters, attributeFilters, node) {\n      var nodeMatches = {};\n      var attrMatches = {};\n      var matches = [];\n      if (node.firstChild) {\n        traverse(node.firstChild, function (node) {\n          each(nodeFilters, function (filter) {\n            if (filter.name === node.name) {\n              if (nodeMatches[filter.name]) {\n                nodeMatches[filter.name].nodes.push(node);\n              } else {\n                nodeMatches[filter.name] = {\n                  filter: filter,\n                  nodes: [node]\n                };\n              }\n            }\n          });\n          each(attributeFilters, function (filter) {\n            if (typeof node.attr(filter.name) === 'string') {\n              if (attrMatches[filter.name]) {\n                attrMatches[filter.name].nodes.push(node);\n              } else {\n                attrMatches[filter.name] = {\n                  filter: filter,\n                  nodes: [node]\n                };\n              }\n            }\n          });\n        });\n      }\n      for (var name in nodeMatches) {\n        if (nodeMatches.hasOwnProperty(name)) {\n          matches.push(nodeMatches[name]);\n        }\n      }\n      for (var name in attrMatches) {\n        if (attrMatches.hasOwnProperty(name)) {\n          matches.push(attrMatches[name]);\n        }\n      }\n      return matches;\n    };\n    var filter$3 = function (nodeFilters, attributeFilters, node) {\n      var matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n      each(matches, function (match) {\n        each(match.filter.callbacks, function (callback) {\n          callback(match.nodes, match.filter.name, {});\n        });\n      });\n    };\n\n    var defaultFormat$1 = 'html';\n    var isTreeNode = function (content) {\n      return content instanceof Node$1;\n    };\n    var moveSelection = function (editor) {\n      if (EditorFocus.hasFocus(editor)) {\n        CaretFinder.firstPositionIn(editor.getBody()).each(function (pos) {\n          var node = pos.getNode();\n          var caretPos = NodeType.isTable(node) ? CaretFinder.firstPositionIn(node).getOr(pos) : pos;\n          editor.selection.setRng(caretPos.toRange());\n        });\n      }\n    };\n    var setEditorHtml = function (editor, html) {\n      editor.dom.setHTML(editor.getBody(), html);\n      moveSelection(editor);\n    };\n    var setContentString = function (editor, body, content, args) {\n      var forcedRootBlockName, padd;\n      if (content.length === 0 || /^\\s+$/.test(content)) {\n        padd = '<br data-mce-bogus=\"1\">';\n        if (body.nodeName === 'TABLE') {\n          content = '<tr><td>' + padd + '</td></tr>';\n        } else if (/^(UL|OL)$/.test(body.nodeName)) {\n          content = '<li>' + padd + '</li>';\n        }\n        forcedRootBlockName = Settings.getForcedRootBlock(editor);\n        if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n          content = padd;\n          content = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs, content);\n        } else if (!content) {\n          content = '<br data-mce-bogus=\"1\">';\n        }\n        setEditorHtml(editor, content);\n        editor.fire('SetContent', args);\n      } else {\n        if (args.format !== 'raw') {\n          content = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, {\n            isRootContent: true,\n            insert: true\n          }));\n        }\n        args.content = isWsPreserveElement(Element.fromDom(body)) ? content : Tools.trim(content);\n        setEditorHtml(editor, args.content);\n        if (!args.no_events) {\n          editor.fire('SetContent', args);\n        }\n      }\n      return args.content;\n    };\n    var setContentTree = function (editor, body, content, args) {\n      filter$3(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n      var html = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(content);\n      args.content = isWsPreserveElement(Element.fromDom(body)) ? html : Tools.trim(html);\n      setEditorHtml(editor, args.content);\n      if (!args.no_events) {\n        editor.fire('SetContent', args);\n      }\n      return content;\n    };\n    var setContent$1 = function (editor, content, args) {\n      if (args === void 0) {\n        args = {};\n      }\n      args.format = args.format ? args.format : defaultFormat$1;\n      args.set = true;\n      args.content = isTreeNode(content) ? '' : content;\n      if (!isTreeNode(content) && !args.no_events) {\n        editor.fire('BeforeSetContent', args);\n        content = args.content;\n      }\n      return Option.from(editor.getBody()).fold(constant(content), function (body) {\n        return isTreeNode(content) ? setContentTree(editor, body, content, args) : setContentString(editor, body, content, args);\n      });\n    };\n\n    var DOM$6 = DOMUtils$1.DOM;\n    var restoreOriginalStyles = function (editor) {\n      DOM$6.setStyle(editor.id, 'display', editor.orgDisplay);\n    };\n    var safeDestroy = function (x) {\n      return Option.from(x).each(function (x) {\n        return x.destroy();\n      });\n    };\n    var clearDomReferences = function (editor) {\n      editor.contentAreaContainer = editor.formElement = editor.container = editor.editorContainer = null;\n      editor.bodyElement = editor.contentDocument = editor.contentWindow = null;\n      editor.iframeElement = editor.targetElm = null;\n      if (editor.selection) {\n        editor.selection = editor.selection.win = editor.selection.dom = editor.selection.dom.doc = null;\n      }\n    };\n    var restoreForm = function (editor) {\n      var form = editor.formElement;\n      if (form) {\n        if (form._mceOldSubmit) {\n          form.submit = form._mceOldSubmit;\n          form._mceOldSubmit = null;\n        }\n        DOM$6.unbind(form, 'submit reset', editor.formEventDelegate);\n      }\n    };\n    var remove$7 = function (editor) {\n      if (!editor.removed) {\n        var _selectionOverrides = editor._selectionOverrides, editorUpload = editor.editorUpload;\n        var body = editor.getBody();\n        var element = editor.getElement();\n        if (body) {\n          editor.save({ is_removing: true });\n        }\n        editor.removed = true;\n        editor.unbindAllNativeEvents();\n        if (editor.hasHiddenInput && element) {\n          DOM$6.remove(element.nextSibling);\n        }\n        Events.fireRemove(editor);\n        editor.editorManager.remove(editor);\n        if (!editor.inline && body) {\n          restoreOriginalStyles(editor);\n        }\n        Events.fireDetach(editor);\n        DOM$6.remove(editor.getContainer());\n        safeDestroy(_selectionOverrides);\n        safeDestroy(editorUpload);\n        editor.destroy();\n      }\n    };\n    var destroy = function (editor, automatic) {\n      var selection = editor.selection, dom = editor.dom;\n      if (editor.destroyed) {\n        return;\n      }\n      if (!automatic && !editor.removed) {\n        editor.remove();\n        return;\n      }\n      if (!automatic) {\n        editor.editorManager.off('beforeunload', editor._beforeUnload);\n        if (editor.theme && editor.theme.destroy) {\n          editor.theme.destroy();\n        }\n        safeDestroy(selection);\n        safeDestroy(dom);\n      }\n      restoreForm(editor);\n      clearDomReferences(editor);\n      editor.destroyed = true;\n    };\n\n    var DOM$7 = DOMUtils$1.DOM;\n    var extend$4 = Tools.extend, each$l = Tools.each;\n    var resolve$4 = Tools.resolve;\n    var ie$2 = Env.ie;\n    var Editor = function (id, settings, editorManager) {\n      var self = this;\n      var documentBaseUrl = self.documentBaseUrl = editorManager.documentBaseURL;\n      var baseUri = editorManager.baseURI;\n      settings = getEditorSettings(self, id, documentBaseUrl, editorManager.defaultSettings, settings);\n      self.settings = settings;\n      AddOnManager.language = settings.language || 'en';\n      AddOnManager.languageLoad = settings.language_load;\n      AddOnManager.baseURL = editorManager.baseURL;\n      self.id = id;\n      self.setDirty(false);\n      self.plugins = {};\n      self.documentBaseURI = new URI(settings.document_base_url, { base_uri: baseUri });\n      self.baseURI = baseUri;\n      self.contentCSS = [];\n      self.contentStyles = [];\n      self.shortcuts = new Shortcuts(self);\n      self.loadedCSS = {};\n      self.editorCommands = new EditorCommands(self);\n      self.suffix = editorManager.suffix;\n      self.editorManager = editorManager;\n      self.inline = settings.inline;\n      self.buttons = {};\n      self.menuItems = {};\n      if (settings.cache_suffix) {\n        Env.cacheSuffix = settings.cache_suffix.replace(/^[\\?\\&]+/, '');\n      }\n      if (settings.override_viewport === false) {\n        Env.overrideViewPort = false;\n      }\n      editorManager.fire('SetupEditor', { editor: self });\n      self.execCallback('setup', self);\n      self.$ = DomQuery.overrideDefaults(function () {\n        return {\n          context: self.inline ? self.getBody() : self.getDoc(),\n          element: self.getBody()\n        };\n      });\n    };\n    Editor.prototype = {\n      render: function () {\n        Render.render(this);\n      },\n      focus: function (skipFocus) {\n        EditorFocus.focus(this, skipFocus);\n      },\n      hasFocus: function () {\n        return EditorFocus.hasFocus(this);\n      },\n      execCallback: function (name) {\n        var x = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n          x[_i - 1] = arguments[_i];\n        }\n        var self = this;\n        var callback = self.settings[name], scope;\n        if (!callback) {\n          return;\n        }\n        if (self.callbackLookup && (scope = self.callbackLookup[name])) {\n          callback = scope.func;\n          scope = scope.scope;\n        }\n        if (typeof callback === 'string') {\n          scope = callback.replace(/\\.\\w+$/, '');\n          scope = scope ? resolve$4(scope) : 0;\n          callback = resolve$4(callback);\n          self.callbackLookup = self.callbackLookup || {};\n          self.callbackLookup[name] = {\n            func: callback,\n            scope: scope\n          };\n        }\n        return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1));\n      },\n      translate: function (text) {\n        if (text && Tools.is(text, 'string')) {\n          var lang_1 = this.settings.language || 'en', i18n_1 = this.editorManager.i18n;\n          text = i18n_1.data[lang_1 + '.' + text] || text.replace(/\\{\\#([^\\}]+)\\}/g, function (a, b) {\n            return i18n_1.data[lang_1 + '.' + b] || '{#' + b + '}';\n          });\n        }\n        return this.editorManager.translate(text);\n      },\n      getLang: function (name, defaultVal) {\n        return this.editorManager.i18n.data[(this.settings.language || 'en') + '.' + name] || (defaultVal !== undefined ? defaultVal : '{#' + name + '}');\n      },\n      getParam: function (name, defaultVal, type) {\n        return getParam(this, name, defaultVal, type);\n      },\n      nodeChanged: function (args) {\n        this._nodeChangeDispatcher.nodeChanged(args);\n      },\n      addButton: function (name, settings) {\n        var self = this;\n        if (settings.cmd) {\n          settings.onclick = function () {\n            self.execCommand(settings.cmd);\n          };\n        }\n        if (settings.stateSelector && typeof settings.active === 'undefined') {\n          settings.active = false;\n        }\n        if (!settings.text && !settings.icon) {\n          settings.icon = name;\n        }\n        settings.tooltip = settings.tooltip || settings.title;\n        self.buttons[name] = settings;\n      },\n      addSidebar: function (name, settings) {\n        return Sidebar.add(this, name, settings);\n      },\n      addMenuItem: function (name, settings) {\n        var self = this;\n        if (settings.cmd) {\n          settings.onclick = function () {\n            self.execCommand(settings.cmd);\n          };\n        }\n        self.menuItems[name] = settings;\n      },\n      addContextToolbar: function (predicate, items) {\n        var self = this;\n        var selector;\n        self.contextToolbars = self.contextToolbars || [];\n        if (typeof predicate === 'string') {\n          selector = predicate;\n          predicate = function (elm) {\n            return self.dom.is(elm, selector);\n          };\n        }\n        self.contextToolbars.push({\n          id: Uuid.uuid('mcet'),\n          predicate: predicate,\n          items: items\n        });\n      },\n      addCommand: function (name, callback, scope) {\n        this.editorCommands.addCommand(name, callback, scope);\n      },\n      addQueryStateHandler: function (name, callback, scope) {\n        this.editorCommands.addQueryStateHandler(name, callback, scope);\n      },\n      addQueryValueHandler: function (name, callback, scope) {\n        this.editorCommands.addQueryValueHandler(name, callback, scope);\n      },\n      addShortcut: function (pattern, desc, cmdFunc, scope) {\n        this.shortcuts.add(pattern, desc, cmdFunc, scope);\n      },\n      execCommand: function (cmd, ui, value, args) {\n        return this.editorCommands.execCommand(cmd, ui, value, args);\n      },\n      queryCommandState: function (cmd) {\n        return this.editorCommands.queryCommandState(cmd);\n      },\n      queryCommandValue: function (cmd) {\n        return this.editorCommands.queryCommandValue(cmd);\n      },\n      queryCommandSupported: function (cmd) {\n        return this.editorCommands.queryCommandSupported(cmd);\n      },\n      show: function () {\n        var self = this;\n        if (self.hidden) {\n          self.hidden = false;\n          if (self.inline) {\n            self.getBody().contentEditable = true;\n          } else {\n            DOM$7.show(self.getContainer());\n            DOM$7.hide(self.id);\n          }\n          self.load();\n          self.fire('show');\n        }\n      },\n      hide: function () {\n        var self = this, doc = self.getDoc();\n        if (!self.hidden) {\n          if (ie$2 && doc && !self.inline) {\n            doc.execCommand('SelectAll');\n          }\n          self.save();\n          if (self.inline) {\n            self.getBody().contentEditable = false;\n            if (self === self.editorManager.focusedEditor) {\n              self.editorManager.focusedEditor = null;\n            }\n          } else {\n            DOM$7.hide(self.getContainer());\n            DOM$7.setStyle(self.id, 'display', self.orgDisplay);\n          }\n          self.hidden = true;\n          self.fire('hide');\n        }\n      },\n      isHidden: function () {\n        return !!this.hidden;\n      },\n      setProgressState: function (state, time) {\n        this.fire('ProgressState', {\n          state: state,\n          time: time\n        });\n      },\n      load: function (args) {\n        var self = this;\n        var elm = self.getElement(), html;\n        if (self.removed) {\n          return '';\n        }\n        if (elm) {\n          args = args || {};\n          args.load = true;\n          html = self.setContent(elm.value !== undefined ? elm.value : elm.innerHTML, args);\n          args.element = elm;\n          if (!args.no_events) {\n            self.fire('LoadContent', args);\n          }\n          args.element = elm = null;\n          return html;\n        }\n      },\n      save: function (args) {\n        var self = this;\n        var elm = self.getElement(), html, form;\n        if (!elm || !self.initialized || self.removed) {\n          return;\n        }\n        args = args || {};\n        args.save = true;\n        args.element = elm;\n        html = args.content = self.getContent(args);\n        if (!args.no_events) {\n          self.fire('SaveContent', args);\n        }\n        if (args.format === 'raw') {\n          self.fire('RawSaveContent', args);\n        }\n        html = args.content;\n        if (!/TEXTAREA|INPUT/i.test(elm.nodeName)) {\n          if (args.is_removing || !self.inline) {\n            elm.innerHTML = html;\n          }\n          if (form = DOM$7.getParent(self.id, 'form')) {\n            each$l(form.elements, function (elm) {\n              if (elm.name === self.id) {\n                elm.value = html;\n                return false;\n              }\n            });\n          }\n        } else {\n          elm.value = html;\n        }\n        args.element = elm = null;\n        if (args.set_dirty !== false) {\n          self.setDirty(false);\n        }\n        return html;\n      },\n      setContent: function (content, args) {\n        return setContent$1(this, content, args);\n      },\n      getContent: function (args) {\n        return getContent$1(this, args);\n      },\n      insertContent: function (content, args) {\n        if (args) {\n          content = extend$4({ content: content }, args);\n        }\n        this.execCommand('mceInsertContent', false, content);\n      },\n      isDirty: function () {\n        return !this.isNotDirty;\n      },\n      setDirty: function (state) {\n        var oldState = !this.isNotDirty;\n        this.isNotDirty = !state;\n        if (state && state !== oldState) {\n          this.fire('dirty');\n        }\n      },\n      setMode: function (mode) {\n        setMode(this, mode);\n      },\n      getContainer: function () {\n        var self = this;\n        if (!self.container) {\n          self.container = DOM$7.get(self.editorContainer || self.id + '_parent');\n        }\n        return self.container;\n      },\n      getContentAreaContainer: function () {\n        return this.contentAreaContainer;\n      },\n      getElement: function () {\n        if (!this.targetElm) {\n          this.targetElm = DOM$7.get(this.id);\n        }\n        return this.targetElm;\n      },\n      getWin: function () {\n        var self = this;\n        var elm;\n        if (!self.contentWindow) {\n          elm = self.iframeElement;\n          if (elm) {\n            self.contentWindow = elm.contentWindow;\n          }\n        }\n        return self.contentWindow;\n      },\n      getDoc: function () {\n        var self = this;\n        var win;\n        if (!self.contentDocument) {\n          win = self.getWin();\n          if (win) {\n            self.contentDocument = win.document;\n          }\n        }\n        return self.contentDocument;\n      },\n      getBody: function () {\n        var doc = this.getDoc();\n        return this.bodyElement || (doc ? doc.body : null);\n      },\n      convertURL: function (url, name, elm) {\n        var self = this, settings = self.settings;\n        if (settings.urlconverter_callback) {\n          return self.execCallback('urlconverter_callback', url, elm, true, name);\n        }\n        if (!settings.convert_urls || elm && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n          return url;\n        }\n        if (settings.relative_urls) {\n          return self.documentBaseURI.toRelative(url);\n        }\n        url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host);\n        return url;\n      },\n      addVisual: function (elm) {\n        var self = this;\n        var settings = self.settings;\n        var dom = self.dom;\n        var cls;\n        elm = elm || self.getBody();\n        if (self.hasVisual === undefined) {\n          self.hasVisual = settings.visual;\n        }\n        each$l(dom.select('table,a', elm), function (elm) {\n          var value;\n          switch (elm.nodeName) {\n          case 'TABLE':\n            cls = settings.visual_table_class || 'mce-item-table';\n            value = dom.getAttrib(elm, 'border');\n            if ((!value || value === '0') && self.hasVisual) {\n              dom.addClass(elm, cls);\n            } else {\n              dom.removeClass(elm, cls);\n            }\n            return;\n          case 'A':\n            if (!dom.getAttrib(elm, 'href')) {\n              value = dom.getAttrib(elm, 'name') || elm.id;\n              cls = settings.visual_anchor_class || 'mce-item-anchor';\n              if (value && self.hasVisual) {\n                dom.addClass(elm, cls);\n              } else {\n                dom.removeClass(elm, cls);\n              }\n            }\n            return;\n          }\n        });\n        self.fire('VisualAid', {\n          element: elm,\n          hasVisual: self.hasVisual\n        });\n      },\n      remove: function () {\n        remove$7(this);\n      },\n      destroy: function (automatic) {\n        destroy(this, automatic);\n      },\n      uploadImages: function (callback) {\n        return this.editorUpload.uploadImages(callback);\n      },\n      _scanForImages: function () {\n        return this.editorUpload.scanForImages();\n      }\n    };\n    extend$4(Editor.prototype, EditorObservable$1);\n\n    var isEditorUIElement = function (elm) {\n      return elm.className.toString().indexOf('mce-') !== -1;\n    };\n    var FocusManager = { isEditorUIElement: isEditorUIElement };\n\n    var isManualNodeChange = function (e) {\n      return e.type === 'nodechange' && e.selectionChange;\n    };\n    var registerPageMouseUp = function (editor, throttledStore) {\n      var mouseUpPage = function () {\n        throttledStore.throttle();\n      };\n      DOMUtils$1.DOM.bind(domGlobals.document, 'mouseup', mouseUpPage);\n      editor.on('remove', function () {\n        DOMUtils$1.DOM.unbind(domGlobals.document, 'mouseup', mouseUpPage);\n      });\n    };\n    var registerFocusOut = function (editor) {\n      editor.on('focusout', function () {\n        SelectionBookmark.store(editor);\n      });\n    };\n    var registerMouseUp = function (editor, throttledStore) {\n      editor.on('mouseup touchend', function (e) {\n        throttledStore.throttle();\n      });\n    };\n    var registerEditorEvents = function (editor, throttledStore) {\n      var browser = PlatformDetection$1.detect().browser;\n      if (browser.isIE()) {\n        registerFocusOut(editor);\n      } else {\n        registerMouseUp(editor, throttledStore);\n      }\n      editor.on('keyup nodechange', function (e) {\n        if (!isManualNodeChange(e)) {\n          SelectionBookmark.store(editor);\n        }\n      });\n    };\n    var register$3 = function (editor) {\n      var throttledStore = first(function () {\n        SelectionBookmark.store(editor);\n      }, 0);\n      if (editor.inline) {\n        registerPageMouseUp(editor, throttledStore);\n      }\n      editor.on('init', function () {\n        registerEditorEvents(editor, throttledStore);\n      });\n      editor.on('remove', function () {\n        throttledStore.cancel();\n      });\n    };\n    var SelectionRestore = { register: register$3 };\n\n    var documentFocusInHandler;\n    var DOM$8 = DOMUtils$1.DOM;\n    var isEditorUIElement$1 = function (elm) {\n      return FocusManager.isEditorUIElement(elm);\n    };\n    var isUIElement = function (editor, elm) {\n      var customSelector = editor ? editor.settings.custom_ui_selector : '';\n      var parent = DOM$8.getParent(elm, function (elm) {\n        return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n      });\n      return parent !== null;\n    };\n    var getActiveElement = function () {\n      try {\n        return domGlobals.document.activeElement;\n      } catch (ex) {\n        return domGlobals.document.body;\n      }\n    };\n    var registerEvents = function (editorManager, e) {\n      var editor = e.editor;\n      SelectionRestore.register(editor);\n      editor.on('focusin', function () {\n        var self = this;\n        var focusedEditor = editorManager.focusedEditor;\n        if (focusedEditor !== self) {\n          if (focusedEditor) {\n            focusedEditor.fire('blur', { focusedEditor: self });\n          }\n          editorManager.setActive(self);\n          editorManager.focusedEditor = self;\n          self.fire('focus', { blurredEditor: focusedEditor });\n          self.focus(true);\n        }\n      });\n      editor.on('focusout', function () {\n        var self = this;\n        Delay.setEditorTimeout(self, function () {\n          var focusedEditor = editorManager.focusedEditor;\n          if (!isUIElement(self, getActiveElement()) && focusedEditor === self) {\n            self.fire('blur', { focusedEditor: null });\n            editorManager.focusedEditor = null;\n          }\n        });\n      });\n      if (!documentFocusInHandler) {\n        documentFocusInHandler = function (e) {\n          var activeEditor = editorManager.activeEditor;\n          var target;\n          target = e.target;\n          if (activeEditor && target.ownerDocument === domGlobals.document) {\n            if (target !== domGlobals.document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {\n              activeEditor.fire('blur', { focusedEditor: null });\n              editorManager.focusedEditor = null;\n            }\n          }\n        };\n        DOM$8.bind(domGlobals.document, 'focusin', documentFocusInHandler);\n      }\n    };\n    var unregisterDocumentEvents = function (editorManager, e) {\n      if (editorManager.focusedEditor === e.editor) {\n        editorManager.focusedEditor = null;\n      }\n      if (!editorManager.activeEditor) {\n        DOM$8.unbind(domGlobals.document, 'focusin', documentFocusInHandler);\n        documentFocusInHandler = null;\n      }\n    };\n    var setup$h = function (editorManager) {\n      editorManager.on('AddEditor', curry(registerEvents, editorManager));\n      editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n    };\n    var FocusController = {\n      setup: setup$h,\n      isEditorUIElement: isEditorUIElement$1,\n      isUIElement: isUIElement\n    };\n\n    var DOM$9 = DOMUtils$1.DOM;\n    var explode$4 = Tools.explode, each$m = Tools.each, extend$5 = Tools.extend;\n    var instanceCounter = 0, beforeUnloadDelegate, EditorManager, boundGlobalEvents = false;\n    var legacyEditors = [];\n    var editors = [];\n    var isValidLegacyKey = function (id) {\n      return id !== 'length';\n    };\n    var globalEventDelegate = function (e) {\n      var type = e.type;\n      each$m(EditorManager.get(), function (editor) {\n        switch (type) {\n        case 'scroll':\n          editor.fire('ScrollWindow', e);\n          break;\n        case 'resize':\n          editor.fire('ResizeWindow', e);\n          break;\n        }\n      });\n    };\n    var toggleGlobalEvents = function (state) {\n      if (state !== boundGlobalEvents) {\n        if (state) {\n          DomQuery(window).on('resize scroll', globalEventDelegate);\n        } else {\n          DomQuery(window).off('resize scroll', globalEventDelegate);\n        }\n        boundGlobalEvents = state;\n      }\n    };\n    var removeEditorFromList = function (targetEditor) {\n      var oldEditors = editors;\n      delete legacyEditors[targetEditor.id];\n      for (var i = 0; i < legacyEditors.length; i++) {\n        if (legacyEditors[i] === targetEditor) {\n          legacyEditors.splice(i, 1);\n          break;\n        }\n      }\n      editors = filter(editors, function (editor) {\n        return targetEditor !== editor;\n      });\n      if (EditorManager.activeEditor === targetEditor) {\n        EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\n      }\n      if (EditorManager.focusedEditor === targetEditor) {\n        EditorManager.focusedEditor = null;\n      }\n      return oldEditors.length !== editors.length;\n    };\n    var purgeDestroyedEditor = function (editor) {\n      if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\n        removeEditorFromList(editor);\n        editor.unbindAllNativeEvents();\n        editor.destroy(true);\n        editor.removed = true;\n        editor = null;\n      }\n      return editor;\n    };\n    EditorManager = {\n      defaultSettings: {},\n      $: DomQuery,\n      majorVersion: '4',\n      minorVersion: '9.11',\n      releaseDate: '2020-07-13',\n      editors: legacyEditors,\n      i18n: I18n,\n      activeEditor: null,\n      settings: {},\n      setup: function () {\n        var self = this;\n        var baseURL, documentBaseURL, suffix = '';\n        documentBaseURL = URI.getDocumentBaseUrl(domGlobals.document.location);\n        if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n          documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n          if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n            documentBaseURL += '/';\n          }\n        }\n        var preInit = window.tinymce || window.tinyMCEPreInit;\n        if (preInit) {\n          baseURL = preInit.base || preInit.baseURL;\n          suffix = preInit.suffix;\n        } else {\n          var scripts = domGlobals.document.getElementsByTagName('script');\n          for (var i = 0; i < scripts.length; i++) {\n            var src = scripts[i].src || '';\n            if (src === '') {\n              continue;\n            }\n            var srcScript = src.substring(src.lastIndexOf('/'));\n            if (/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(src)) {\n              if (srcScript.indexOf('.min') !== -1) {\n                suffix = '.min';\n              }\n              baseURL = src.substring(0, src.lastIndexOf('/'));\n              break;\n            }\n          }\n          if (!baseURL && domGlobals.document.currentScript) {\n            var src = domGlobals.document.currentScript.src;\n            if (src.indexOf('.min') !== -1) {\n              suffix = '.min';\n            }\n            baseURL = src.substring(0, src.lastIndexOf('/'));\n          }\n        }\n        self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\n        self.documentBaseURL = documentBaseURL;\n        self.baseURI = new URI(self.baseURL);\n        self.suffix = suffix;\n        FocusController.setup(self);\n      },\n      overrideDefaults: function (defaultSettings) {\n        var baseUrl, suffix;\n        baseUrl = defaultSettings.base_url;\n        if (baseUrl) {\n          this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, ''));\n          this.baseURI = new URI(this.baseURL);\n        }\n        suffix = defaultSettings.suffix;\n        if (defaultSettings.suffix) {\n          this.suffix = suffix;\n        }\n        this.defaultSettings = defaultSettings;\n        var pluginBaseUrls = defaultSettings.plugin_base_urls;\n        for (var name in pluginBaseUrls) {\n          AddOnManager.PluginManager.urls[name] = pluginBaseUrls[name];\n        }\n      },\n      init: function (settings) {\n        var self = this;\n        var result, invalidInlineTargets;\n        invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu', ' ');\n        var isInvalidInlineTarget = function (settings, elm) {\n          return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n        };\n        var createId = function (elm) {\n          var id = elm.id;\n          if (!id) {\n            id = elm.name;\n            if (id && !DOM$9.get(id)) {\n              id = elm.name;\n            } else {\n              id = DOM$9.uniqueId();\n            }\n            elm.setAttribute('id', id);\n          }\n          return id;\n        };\n        var execCallback = function (name) {\n          var callback = settings[name];\n          if (!callback) {\n            return;\n          }\n          return callback.apply(self, Array.prototype.slice.call(arguments, 2));\n        };\n        var hasClass = function (elm, className) {\n          return className.constructor === RegExp ? className.test(elm.className) : DOM$9.hasClass(elm, className);\n        };\n        var findTargets = function (settings) {\n          var l, targets = [];\n          if (Env.ie && Env.ie < 11) {\n            ErrorReporter.initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/');\n            return [];\n          }\n          if (settings.types) {\n            each$m(settings.types, function (type) {\n              targets = targets.concat(DOM$9.select(type.selector));\n            });\n            return targets;\n          } else if (settings.selector) {\n            return DOM$9.select(settings.selector);\n          } else if (settings.target) {\n            return [settings.target];\n          }\n          switch (settings.mode) {\n          case 'exact':\n            l = settings.elements || '';\n            if (l.length > 0) {\n              each$m(explode$4(l), function (id) {\n                var elm;\n                if (elm = DOM$9.get(id)) {\n                  targets.push(elm);\n                } else {\n                  each$m(domGlobals.document.forms, function (f) {\n                    each$m(f.elements, function (e) {\n                      if (e.name === id) {\n                        id = 'mce_editor_' + instanceCounter++;\n                        DOM$9.setAttrib(e, 'id', id);\n                        targets.push(e);\n                      }\n                    });\n                  });\n                }\n              });\n            }\n            break;\n          case 'textareas':\n          case 'specific_textareas':\n            each$m(DOM$9.select('textarea'), function (elm) {\n              if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) {\n                return;\n              }\n              if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) {\n                targets.push(elm);\n              }\n            });\n            break;\n          }\n          return targets;\n        };\n        var provideResults = function (editors) {\n          result = editors;\n        };\n        var initEditors = function () {\n          var initCount = 0;\n          var editors = [];\n          var targets;\n          var createEditor = function (id, settings, targetElm) {\n            var editor = new Editor(id, settings, self);\n            editors.push(editor);\n            editor.on('init', function () {\n              if (++initCount === targets.length) {\n                provideResults(editors);\n              }\n            });\n            editor.targetElm = editor.targetElm || targetElm;\n            editor.render();\n          };\n          DOM$9.unbind(window, 'ready', initEditors);\n          execCallback('onpageload');\n          targets = DomQuery.unique(findTargets(settings));\n          if (settings.types) {\n            each$m(settings.types, function (type) {\n              Tools.each(targets, function (elm) {\n                if (DOM$9.is(elm, type.selector)) {\n                  createEditor(createId(elm), extend$5({}, settings, type), elm);\n                  return false;\n                }\n                return true;\n              });\n            });\n            return;\n          }\n          Tools.each(targets, function (elm) {\n            purgeDestroyedEditor(self.get(elm.id));\n          });\n          targets = Tools.grep(targets, function (elm) {\n            return !self.get(elm.id);\n          });\n          if (targets.length === 0) {\n            provideResults([]);\n          } else {\n            each$m(targets, function (elm) {\n              if (isInvalidInlineTarget(settings, elm)) {\n                ErrorReporter.initError('Could not initialize inline editor on invalid inline target element', elm);\n              } else {\n                createEditor(createId(elm), settings, elm);\n              }\n            });\n          }\n        };\n        self.settings = settings;\n        DOM$9.bind(window, 'ready', initEditors);\n        return new promiseObj(function (resolve) {\n          if (result) {\n            resolve(result);\n          } else {\n            provideResults = function (editors) {\n              resolve(editors);\n            };\n          }\n        });\n      },\n      get: function (id) {\n        if (arguments.length === 0) {\n          return editors.slice(0);\n        } else if (isString(id)) {\n          return find(editors, function (editor) {\n            return editor.id === id;\n          }).getOr(null);\n        } else if (isNumber(id)) {\n          return editors[id] ? editors[id] : null;\n        } else {\n          return null;\n        }\n      },\n      add: function (editor) {\n        var self = this;\n        var existingEditor;\n        existingEditor = legacyEditors[editor.id];\n        if (existingEditor === editor) {\n          return editor;\n        }\n        if (self.get(editor.id) === null) {\n          if (isValidLegacyKey(editor.id)) {\n            legacyEditors[editor.id] = editor;\n          }\n          legacyEditors.push(editor);\n          editors.push(editor);\n        }\n        toggleGlobalEvents(true);\n        self.activeEditor = editor;\n        self.fire('AddEditor', { editor: editor });\n        if (!beforeUnloadDelegate) {\n          beforeUnloadDelegate = function () {\n            self.fire('BeforeUnload');\n          };\n          DOM$9.bind(window, 'beforeunload', beforeUnloadDelegate);\n        }\n        return editor;\n      },\n      createEditor: function (id, settings) {\n        return this.add(new Editor(id, settings, this));\n      },\n      remove: function (selector) {\n        var self = this;\n        var i, editor;\n        if (!selector) {\n          for (i = editors.length - 1; i >= 0; i--) {\n            self.remove(editors[i]);\n          }\n          return;\n        }\n        if (isString(selector)) {\n          each$m(DOM$9.select(selector), function (elm) {\n            editor = self.get(elm.id);\n            if (editor) {\n              self.remove(editor);\n            }\n          });\n          return;\n        }\n        editor = selector;\n        if (isNull(self.get(editor.id))) {\n          return null;\n        }\n        if (removeEditorFromList(editor)) {\n          self.fire('RemoveEditor', { editor: editor });\n        }\n        if (editors.length === 0) {\n          DOM$9.unbind(window, 'beforeunload', beforeUnloadDelegate);\n        }\n        editor.remove();\n        toggleGlobalEvents(editors.length > 0);\n        return editor;\n      },\n      execCommand: function (cmd, ui, value) {\n        var self = this, editor = self.get(value);\n        switch (cmd) {\n        case 'mceAddEditor':\n          if (!self.get(value)) {\n            new Editor(value, self.settings, self).render();\n          }\n          return true;\n        case 'mceRemoveEditor':\n          if (editor) {\n            editor.remove();\n          }\n          return true;\n        case 'mceToggleEditor':\n          if (!editor) {\n            self.execCommand('mceAddEditor', 0, value);\n            return true;\n          }\n          if (editor.isHidden()) {\n            editor.show();\n          } else {\n            editor.hide();\n          }\n          return true;\n        }\n        if (self.activeEditor) {\n          return self.activeEditor.execCommand(cmd, ui, value);\n        }\n        return false;\n      },\n      triggerSave: function () {\n        each$m(editors, function (editor) {\n          editor.save();\n        });\n      },\n      addI18n: function (code, items) {\n        I18n.add(code, items);\n      },\n      translate: function (text) {\n        return I18n.translate(text);\n      },\n      setActive: function (editor) {\n        var activeEditor = this.activeEditor;\n        if (this.activeEditor !== editor) {\n          if (activeEditor) {\n            activeEditor.fire('deactivate', { relatedTarget: editor });\n          }\n          editor.fire('activate', { relatedTarget: activeEditor });\n        }\n        this.activeEditor = editor;\n      }\n    };\n    extend$5(EditorManager, Observable);\n    EditorManager.setup();\n    var EditorManager$1 = EditorManager;\n\n    function RangeUtils(dom) {\n      var walk = function (rng, callback) {\n        return RangeWalk.walk(dom, rng, callback);\n      };\n      var split = SplitRange.split;\n      var normalize = function (rng) {\n        return NormalizeRange.normalize(dom, rng).fold(constant(false), function (normalizedRng) {\n          rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n          rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n          return true;\n        });\n      };\n      return {\n        walk: walk,\n        split: split,\n        normalize: normalize\n      };\n    }\n    (function (RangeUtils) {\n      RangeUtils.compareRanges = RangeCompare.isEq;\n      RangeUtils.getCaretRangeFromPoint = CaretRangeFromPoint.fromPoint;\n      RangeUtils.getSelectedNode = getSelectedNode;\n      RangeUtils.getNode = getNode;\n    }(RangeUtils || (RangeUtils = {})));\n    var RangeUtils$1 = RangeUtils;\n\n    var min = Math.min, max = Math.max, round$2 = Math.round;\n    var relativePosition = function (rect, targetRect, rel) {\n      var x, y, w, h, targetW, targetH;\n      x = targetRect.x;\n      y = targetRect.y;\n      w = rect.w;\n      h = rect.h;\n      targetW = targetRect.w;\n      targetH = targetRect.h;\n      rel = (rel || '').split('');\n      if (rel[0] === 'b') {\n        y += targetH;\n      }\n      if (rel[1] === 'r') {\n        x += targetW;\n      }\n      if (rel[0] === 'c') {\n        y += round$2(targetH / 2);\n      }\n      if (rel[1] === 'c') {\n        x += round$2(targetW / 2);\n      }\n      if (rel[3] === 'b') {\n        y -= h;\n      }\n      if (rel[4] === 'r') {\n        x -= w;\n      }\n      if (rel[3] === 'c') {\n        y -= round$2(h / 2);\n      }\n      if (rel[4] === 'c') {\n        x -= round$2(w / 2);\n      }\n      return create$4(x, y, w, h);\n    };\n    var findBestRelativePosition = function (rect, targetRect, constrainRect, rels) {\n      var pos, i;\n      for (i = 0; i < rels.length; i++) {\n        pos = relativePosition(rect, targetRect, rels[i]);\n        if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {\n          return rels[i];\n        }\n      }\n      return null;\n    };\n    var inflate = function (rect, w, h) {\n      return create$4(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n    };\n    var intersect = function (rect, cropRect) {\n      var x1, y1, x2, y2;\n      x1 = max(rect.x, cropRect.x);\n      y1 = max(rect.y, cropRect.y);\n      x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n      y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\n      if (x2 - x1 < 0 || y2 - y1 < 0) {\n        return null;\n      }\n      return create$4(x1, y1, x2 - x1, y2 - y1);\n    };\n    var clamp$1 = function (rect, clampRect, fixedSize) {\n      var underflowX1, underflowY1, overflowX2, overflowY2, x1, y1, x2, y2, cx2, cy2;\n      x1 = rect.x;\n      y1 = rect.y;\n      x2 = rect.x + rect.w;\n      y2 = rect.y + rect.h;\n      cx2 = clampRect.x + clampRect.w;\n      cy2 = clampRect.y + clampRect.h;\n      underflowX1 = max(0, clampRect.x - x1);\n      underflowY1 = max(0, clampRect.y - y1);\n      overflowX2 = max(0, x2 - cx2);\n      overflowY2 = max(0, y2 - cy2);\n      x1 += underflowX1;\n      y1 += underflowY1;\n      if (fixedSize) {\n        x2 += underflowX1;\n        y2 += underflowY1;\n        x1 -= overflowX2;\n        y1 -= overflowY2;\n      }\n      x2 -= overflowX2;\n      y2 -= overflowY2;\n      return create$4(x1, y1, x2 - x1, y2 - y1);\n    };\n    var create$4 = function (x, y, w, h) {\n      return {\n        x: x,\n        y: y,\n        w: w,\n        h: h\n      };\n    };\n    var fromClientRect = function (clientRect) {\n      return create$4(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n    };\n    var Rect = {\n      inflate: inflate,\n      relativePosition: relativePosition,\n      findBestRelativePosition: findBestRelativePosition,\n      intersect: intersect,\n      clamp: clamp$1,\n      create: create$4,\n      fromClientRect: fromClientRect\n    };\n\n    var types = {};\n    var Factory = {\n      add: function (type, typeClass) {\n        types[type.toLowerCase()] = typeClass;\n      },\n      has: function (type) {\n        return !!types[type.toLowerCase()];\n      },\n      get: function (type) {\n        var lctype = type.toLowerCase();\n        var controlType = types.hasOwnProperty(lctype) ? types[lctype] : null;\n        if (controlType === null) {\n          throw new Error('Could not find module for type: ' + type);\n        }\n        return controlType;\n      },\n      create: function (type, settings) {\n        var ControlType;\n        if (typeof type === 'string') {\n          settings = settings || {};\n          settings.type = type;\n        } else {\n          settings = type;\n          type = settings.type;\n        }\n        type = type.toLowerCase();\n        ControlType = types[type];\n        if (!ControlType) {\n          throw new Error('Could not find control by type: ' + type);\n        }\n        ControlType = new ControlType(settings);\n        ControlType.type = type;\n        return ControlType;\n      }\n    };\n\n    var each$n = Tools.each, extend$6 = Tools.extend;\n    var extendClass, initializing;\n    var Class = function () {\n    };\n    Class.extend = extendClass = function (prop) {\n      var self = this;\n      var _super = self.prototype;\n      var prototype, name, member;\n      var Class = function () {\n        var i, mixins, mixin;\n        var self = this;\n        if (!initializing) {\n          if (self.init) {\n            self.init.apply(self, arguments);\n          }\n          mixins = self.Mixins;\n          if (mixins) {\n            i = mixins.length;\n            while (i--) {\n              mixin = mixins[i];\n              if (mixin.init) {\n                mixin.init.apply(self, arguments);\n              }\n            }\n          }\n        }\n      };\n      var dummy = function () {\n        return this;\n      };\n      var createMethod = function (name, fn) {\n        return function () {\n          var self = this;\n          var tmp = self._super;\n          var ret;\n          self._super = _super[name];\n          ret = fn.apply(self, arguments);\n          self._super = tmp;\n          return ret;\n        };\n      };\n      initializing = true;\n      prototype = new self();\n      initializing = false;\n      if (prop.Mixins) {\n        each$n(prop.Mixins, function (mixin) {\n          for (var name_1 in mixin) {\n            if (name_1 !== 'init') {\n              prop[name_1] = mixin[name_1];\n            }\n          }\n        });\n        if (_super.Mixins) {\n          prop.Mixins = _super.Mixins.concat(prop.Mixins);\n        }\n      }\n      if (prop.Methods) {\n        each$n(prop.Methods.split(','), function (name) {\n          prop[name] = dummy;\n        });\n      }\n      if (prop.Properties) {\n        each$n(prop.Properties.split(','), function (name) {\n          var fieldName = '_' + name;\n          prop[name] = function (value) {\n            var self = this;\n            if (value !== undefined) {\n              self[fieldName] = value;\n              return self;\n            }\n            return self[fieldName];\n          };\n        });\n      }\n      if (prop.Statics) {\n        each$n(prop.Statics, function (func, name) {\n          Class[name] = func;\n        });\n      }\n      if (prop.Defaults && _super.Defaults) {\n        prop.Defaults = extend$6({}, _super.Defaults, prop.Defaults);\n      }\n      for (name in prop) {\n        member = prop[name];\n        if (typeof member === 'function' && _super[name]) {\n          prototype[name] = createMethod(name, member);\n        } else {\n          prototype[name] = member;\n        }\n      }\n      Class.prototype = prototype;\n      Class.constructor = Class;\n      Class.extend = extendClass;\n      return Class;\n    };\n\n    var min$1 = Math.min, max$1 = Math.max, round$3 = Math.round;\n    var Color = function (value) {\n      var self = {};\n      var r = 0, g = 0, b = 0;\n      var rgb2hsv = function (r, g, b) {\n        var h, s, v, d, minRGB, maxRGB;\n        h = 0;\n        s = 0;\n        v = 0;\n        r = r / 255;\n        g = g / 255;\n        b = b / 255;\n        minRGB = min$1(r, min$1(g, b));\n        maxRGB = max$1(r, max$1(g, b));\n        if (minRGB === maxRGB) {\n          v = minRGB;\n          return {\n            h: 0,\n            s: 0,\n            v: v * 100\n          };\n        }\n        d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n        h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n        h = 60 * (h - d / (maxRGB - minRGB));\n        s = (maxRGB - minRGB) / maxRGB;\n        v = maxRGB;\n        return {\n          h: round$3(h),\n          s: round$3(s * 100),\n          v: round$3(v * 100)\n        };\n      };\n      var hsvToRgb = function (hue, saturation, brightness) {\n        var side, chroma, x, match;\n        hue = (parseInt(hue, 10) || 0) % 360;\n        saturation = parseInt(saturation, 10) / 100;\n        brightness = parseInt(brightness, 10) / 100;\n        saturation = max$1(0, min$1(saturation, 1));\n        brightness = max$1(0, min$1(brightness, 1));\n        if (saturation === 0) {\n          r = g = b = round$3(255 * brightness);\n          return;\n        }\n        side = hue / 60;\n        chroma = brightness * saturation;\n        x = chroma * (1 - Math.abs(side % 2 - 1));\n        match = brightness - chroma;\n        switch (Math.floor(side)) {\n        case 0:\n          r = chroma;\n          g = x;\n          b = 0;\n          break;\n        case 1:\n          r = x;\n          g = chroma;\n          b = 0;\n          break;\n        case 2:\n          r = 0;\n          g = chroma;\n          b = x;\n          break;\n        case 3:\n          r = 0;\n          g = x;\n          b = chroma;\n          break;\n        case 4:\n          r = x;\n          g = 0;\n          b = chroma;\n          break;\n        case 5:\n          r = chroma;\n          g = 0;\n          b = x;\n          break;\n        default:\n          r = g = b = 0;\n        }\n        r = round$3(255 * (r + match));\n        g = round$3(255 * (g + match));\n        b = round$3(255 * (b + match));\n      };\n      var toHex = function () {\n        var hex = function (val) {\n          val = parseInt(val, 10).toString(16);\n          return val.length > 1 ? val : '0' + val;\n        };\n        return '#' + hex(r) + hex(g) + hex(b);\n      };\n      var toRgb = function () {\n        return {\n          r: r,\n          g: g,\n          b: b\n        };\n      };\n      var toHsv = function () {\n        return rgb2hsv(r, g, b);\n      };\n      var parse = function (value) {\n        var matches;\n        if (typeof value === 'object') {\n          if ('r' in value) {\n            r = value.r;\n            g = value.g;\n            b = value.b;\n          } else if ('v' in value) {\n            hsvToRgb(value.h, value.s, value.v);\n          }\n        } else {\n          if (matches = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)[^\\)]*\\)/gi.exec(value)) {\n            r = parseInt(matches[1], 10);\n            g = parseInt(matches[2], 10);\n            b = parseInt(matches[3], 10);\n          } else if (matches = /#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(value)) {\n            r = parseInt(matches[1], 16);\n            g = parseInt(matches[2], 16);\n            b = parseInt(matches[3], 16);\n          } else if (matches = /#([0-F])([0-F])([0-F])/gi.exec(value)) {\n            r = parseInt(matches[1] + matches[1], 16);\n            g = parseInt(matches[2] + matches[2], 16);\n            b = parseInt(matches[3] + matches[3], 16);\n          }\n        }\n        r = r < 0 ? 0 : r > 255 ? 255 : r;\n        g = g < 0 ? 0 : g > 255 ? 255 : g;\n        b = b < 0 ? 0 : b > 255 ? 255 : b;\n        return self;\n      };\n      if (value) {\n        parse(value);\n      }\n      self.toRgb = toRgb;\n      self.toHsv = toHsv;\n      self.toHex = toHex;\n      self.parse = parse;\n      return self;\n    };\n\n    var serialize = function (o, quote) {\n      var i, v, t, name;\n      quote = quote || '\"';\n      if (o === null) {\n        return 'null';\n      }\n      t = typeof o;\n      if (t === 'string') {\n        v = '\\bb\\tt\\nn\\ff\\rr\"\"\\'\\'\\\\\\\\';\n        return quote + o.replace(/([\\u0080-\\uFFFF\\x00-\\x1f\\\"\\'\\\\])/g, function (a, b) {\n          if (quote === '\"' && a === '\\'') {\n            return a;\n          }\n          i = v.indexOf(b);\n          if (i + 1) {\n            return '\\\\' + v.charAt(i + 1);\n          }\n          a = b.charCodeAt().toString(16);\n          return '\\\\u' + '0000'.substring(a.length) + a;\n        }) + quote;\n      }\n      if (t === 'object') {\n        if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') {\n          for (i = 0, v = '['; i < o.length; i++) {\n            v += (i > 0 ? ',' : '') + serialize(o[i], quote);\n          }\n          return v + ']';\n        }\n        v = '{';\n        for (name in o) {\n          if (o.hasOwnProperty(name)) {\n            v += typeof o[name] !== 'function' ? (v.length > 1 ? ',' + quote : quote) + name + quote + ':' + serialize(o[name], quote) : '';\n          }\n        }\n        return v + '}';\n      }\n      return '' + o;\n    };\n    var JSON$1 = {\n      serialize: serialize,\n      parse: function (text) {\n        try {\n          return JSON.parse(text);\n        } catch (ex) {\n        }\n      }\n    };\n\n    var JSONP = {\n      callbacks: {},\n      count: 0,\n      send: function (settings) {\n        var self = this, dom = DOMUtils$1.DOM, count = settings.count !== undefined ? settings.count : self.count;\n        var id = 'tinymce_jsonp_' + count;\n        self.callbacks[count] = function (json) {\n          dom.remove(id);\n          delete self.callbacks[count];\n          settings.callback(json);\n        };\n        dom.add(dom.doc.body, 'script', {\n          id: id,\n          src: settings.url,\n          type: 'text/javascript'\n        });\n        self.count++;\n      }\n    };\n\n    var XHR = {\n      send: function (settings) {\n        var xhr, count = 0;\n        var ready = function () {\n          if (!settings.async || xhr.readyState === 4 || count++ > 10000) {\n            if (settings.success && count < 10000 && xhr.status === 200) {\n              settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings);\n            } else if (settings.error) {\n              settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings);\n            }\n            xhr = null;\n          } else {\n            setTimeout(ready, 10);\n          }\n        };\n        settings.scope = settings.scope || this;\n        settings.success_scope = settings.success_scope || settings.scope;\n        settings.error_scope = settings.error_scope || settings.scope;\n        settings.async = settings.async === false ? false : true;\n        settings.data = settings.data || '';\n        XHR.fire('beforeInitialize', { settings: settings });\n        xhr = XMLHttpRequest();\n        if (xhr) {\n          if (xhr.overrideMimeType) {\n            xhr.overrideMimeType(settings.content_type);\n          }\n          xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async);\n          if (settings.crossDomain) {\n            xhr.withCredentials = true;\n          }\n          if (settings.content_type) {\n            xhr.setRequestHeader('Content-Type', settings.content_type);\n          }\n          if (settings.requestheaders) {\n            Tools.each(settings.requestheaders, function (header) {\n              xhr.setRequestHeader(header.key, header.value);\n            });\n          }\n          xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n          xhr = XHR.fire('beforeSend', {\n            xhr: xhr,\n            settings: settings\n          }).xhr;\n          xhr.send(settings.data);\n          if (!settings.async) {\n            return ready();\n          }\n          setTimeout(ready, 10);\n        }\n      }\n    };\n    Tools.extend(XHR, Observable);\n\n    var extend$7 = Tools.extend;\n    var JSONRequest = function (settings) {\n      this.settings = extend$7({}, settings);\n      this.count = 0;\n    };\n    JSONRequest.sendRPC = function (o) {\n      return new JSONRequest().send(o);\n    };\n    JSONRequest.prototype = {\n      send: function (args) {\n        var ecb = args.error, scb = args.success;\n        args = extend$7(this.settings, args);\n        args.success = function (c, x) {\n          c = JSON$1.parse(c);\n          if (typeof c === 'undefined') {\n            c = { error: 'JSON Parse error.' };\n          }\n          if (c.error) {\n            ecb.call(args.error_scope || args.scope, c.error, x);\n          } else {\n            scb.call(args.success_scope || args.scope, c.result);\n          }\n        };\n        args.error = function (ty, x) {\n          if (ecb) {\n            ecb.call(args.error_scope || args.scope, ty, x);\n          }\n        };\n        args.data = JSON$1.serialize({\n          id: args.id || 'c' + this.count++,\n          method: args.method,\n          params: args.params\n        });\n        args.content_type = 'application/json';\n        XHR.send(args);\n      }\n    };\n\n    var create$5 = function () {\n      return function () {\n        var data = {};\n        var keys = [];\n        var storage = {\n          getItem: function (key) {\n            var item = data[key];\n            return item ? item : null;\n          },\n          setItem: function (key, value) {\n            keys.push(key);\n            data[key] = String(value);\n          },\n          key: function (index) {\n            return keys[index];\n          },\n          removeItem: function (key) {\n            keys = keys.filter(function (k) {\n              return k === key;\n            });\n            delete data[key];\n          },\n          clear: function () {\n            keys = [];\n            data = {};\n          },\n          length: 0\n        };\n        Object.defineProperty(storage, 'length', {\n          get: function () {\n            return keys.length;\n          },\n          configurable: false,\n          enumerable: false\n        });\n        return storage;\n      }();\n    };\n\n    var localStorage;\n    try {\n      localStorage = domGlobals.window.localStorage;\n    } catch (e) {\n      localStorage = create$5();\n    }\n    var LocalStorage = localStorage;\n\n    var tinymce = EditorManager$1;\n    var publicApi = {\n      geom: { Rect: Rect },\n      util: {\n        Promise: promiseObj,\n        Delay: Delay,\n        Tools: Tools,\n        VK: VK,\n        URI: URI,\n        Class: Class,\n        EventDispatcher: Dispatcher,\n        Observable: Observable,\n        I18n: I18n,\n        XHR: XHR,\n        JSON: JSON$1,\n        JSONRequest: JSONRequest,\n        JSONP: JSONP,\n        LocalStorage: LocalStorage,\n        Color: Color\n      },\n      dom: {\n        EventUtils: EventUtils,\n        Sizzle: Sizzle,\n        DomQuery: DomQuery,\n        TreeWalker: TreeWalker,\n        DOMUtils: DOMUtils$1,\n        ScriptLoader: ScriptLoader,\n        RangeUtils: RangeUtils$1,\n        Serializer: DomSerializer$1,\n        ControlSelection: ControlSelection,\n        BookmarkManager: BookmarkManager$1,\n        Selection: Selection$1,\n        Event: EventUtils.Event\n      },\n      html: {\n        Styles: Styles,\n        Entities: Entities,\n        Node: Node$1,\n        Schema: Schema,\n        SaxParser: SaxParser$1,\n        DomParser: DomParser,\n        Writer: Writer,\n        Serializer: HtmlSerializer\n      },\n      ui: { Factory: Factory },\n      Env: Env,\n      AddOnManager: AddOnManager,\n      Annotator: Annotator,\n      Formatter: Formatter,\n      UndoManager: UndoManager,\n      EditorCommands: EditorCommands,\n      WindowManager: WindowManager,\n      NotificationManager: NotificationManager,\n      EditorObservable: EditorObservable$1,\n      Shortcuts: Shortcuts,\n      Editor: Editor,\n      FocusManager: FocusManager,\n      EditorManager: EditorManager$1,\n      DOM: DOMUtils$1.DOM,\n      ScriptLoader: ScriptLoader.ScriptLoader,\n      PluginManager: AddOnManager.PluginManager,\n      ThemeManager: AddOnManager.ThemeManager,\n      trim: Tools.trim,\n      isArray: Tools.isArray,\n      is: Tools.is,\n      toArray: Tools.toArray,\n      makeMap: Tools.makeMap,\n      each: Tools.each,\n      map: Tools.map,\n      grep: Tools.grep,\n      inArray: Tools.inArray,\n      extend: Tools.extend,\n      create: Tools.create,\n      walk: Tools.walk,\n      createNS: Tools.createNS,\n      resolve: Tools.resolve,\n      explode: Tools.explode,\n      _addCacheSuffix: Tools._addCacheSuffix,\n      isOpera: Env.opera,\n      isWebKit: Env.webkit,\n      isIE: Env.ie,\n      isGecko: Env.gecko,\n      isMac: Env.mac\n    };\n    tinymce = Tools.extend(tinymce, publicApi);\n    var Tinymce = tinymce;\n\n    var exportToModuleLoaders = function (tinymce) {\n      if (typeof module === 'object') {\n        try {\n          module.exports = tinymce;\n        } catch (_) {\n        }\n      }\n    };\n    var exportToWindowGlobal = function (tinymce) {\n      window.tinymce = tinymce;\n      window.tinyMCE = tinymce;\n    };\n    exportToWindowGlobal(Tinymce);\n    exportToModuleLoaders(Tinymce);\n\n}(window));\n})();\n", "(function () {\nvar lists = (function (domGlobals) {\n    'use strict';\n\n    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n    var global$4 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');\n\n    var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n    var isTextNode = function (node) {\n      return node && node.nodeType === 3;\n    };\n    var isListNode = function (node) {\n      return node && /^(OL|UL|DL)$/.test(node.nodeName);\n    };\n    var isOlUlNode = function (node) {\n      return node && /^(OL|UL)$/.test(node.nodeName);\n    };\n    var isListItemNode = function (node) {\n      return node && /^(LI|DT|DD)$/.test(node.nodeName);\n    };\n    var isDlItemNode = function (node) {\n      return node && /^(DT|DD)$/.test(node.nodeName);\n    };\n    var isTableCellNode = function (node) {\n      return node && /^(TH|TD)$/.test(node.nodeName);\n    };\n    var isBr = function (node) {\n      return node && node.nodeName === 'BR';\n    };\n    var isFirstChild = function (node) {\n      return node.parentNode.firstChild === node;\n    };\n    var isLastChild = function (node) {\n      return node.parentNode.lastChild === node;\n    };\n    var isTextBlock = function (editor, node) {\n      return node && !!editor.schema.getTextBlockElements()[node.nodeName];\n    };\n    var isBlock = function (node, blockElements) {\n      return node && node.nodeName in blockElements;\n    };\n    var isBogusBr = function (dom, node) {\n      if (!isBr(node)) {\n        return false;\n      }\n      if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) {\n        return true;\n      }\n      return false;\n    };\n    var isEmpty = function (dom, elm, keepBookmarks) {\n      var empty = dom.isEmpty(elm);\n      if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {\n        return false;\n      }\n      return empty;\n    };\n    var isChildOfBody = function (dom, elm) {\n      return dom.isChildOf(elm, dom.getRoot());\n    };\n    var NodeType = {\n      isTextNode: isTextNode,\n      isListNode: isListNode,\n      isOlUlNode: isOlUlNode,\n      isDlItemNode: isDlItemNode,\n      isListItemNode: isListItemNode,\n      isTableCellNode: isTableCellNode,\n      isBr: isBr,\n      isFirstChild: isFirstChild,\n      isLastChild: isLastChild,\n      isTextBlock: isTextBlock,\n      isBlock: isBlock,\n      isBogusBr: isBogusBr,\n      isEmpty: isEmpty,\n      isChildOfBody: isChildOfBody\n    };\n\n    var getNormalizedPoint = function (container, offset) {\n      if (NodeType.isTextNode(container)) {\n        return {\n          container: container,\n          offset: offset\n        };\n      }\n      var node = global$1.getNode(container, offset);\n      if (NodeType.isTextNode(node)) {\n        return {\n          container: node,\n          offset: offset >= container.childNodes.length ? node.data.length : 0\n        };\n      } else if (node.previousSibling && NodeType.isTextNode(node.previousSibling)) {\n        return {\n          container: node.previousSibling,\n          offset: node.previousSibling.data.length\n        };\n      } else if (node.nextSibling && NodeType.isTextNode(node.nextSibling)) {\n        return {\n          container: node.nextSibling,\n          offset: 0\n        };\n      }\n      return {\n        container: container,\n        offset: offset\n      };\n    };\n    var normalizeRange = function (rng) {\n      var outRng = rng.cloneRange();\n      var rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n      outRng.setStart(rangeStart.container, rangeStart.offset);\n      var rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n      outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n      return outRng;\n    };\n    var Range = {\n      getNormalizedPoint: getNormalizedPoint,\n      normalizeRange: normalizeRange\n    };\n\n    var DOM = global$6.DOM;\n    var createBookmark = function (rng) {\n      var bookmark = {};\n      var setupEndPoint = function (start) {\n        var offsetNode, container, offset;\n        container = rng[start ? 'startContainer' : 'endContainer'];\n        offset = rng[start ? 'startOffset' : 'endOffset'];\n        if (container.nodeType === 1) {\n          offsetNode = DOM.create('span', { 'data-mce-type': 'bookmark' });\n          if (container.hasChildNodes()) {\n            offset = Math.min(offset, container.childNodes.length - 1);\n            if (start) {\n              container.insertBefore(offsetNode, container.childNodes[offset]);\n            } else {\n              DOM.insertAfter(offsetNode, container.childNodes[offset]);\n            }\n          } else {\n            container.appendChild(offsetNode);\n          }\n          container = offsetNode;\n          offset = 0;\n        }\n        bookmark[start ? 'startContainer' : 'endContainer'] = container;\n        bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n      };\n      setupEndPoint(true);\n      if (!rng.collapsed) {\n        setupEndPoint();\n      }\n      return bookmark;\n    };\n    var resolveBookmark = function (bookmark) {\n      function restoreEndPoint(start) {\n        var container, offset, node;\n        var nodeIndex = function (container) {\n          var node = container.parentNode.firstChild, idx = 0;\n          while (node) {\n            if (node === container) {\n              return idx;\n            }\n            if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {\n              idx++;\n            }\n            node = node.nextSibling;\n          }\n          return -1;\n        };\n        container = node = bookmark[start ? 'startContainer' : 'endContainer'];\n        offset = bookmark[start ? 'startOffset' : 'endOffset'];\n        if (!container) {\n          return;\n        }\n        if (container.nodeType === 1) {\n          offset = nodeIndex(container);\n          container = container.parentNode;\n          DOM.remove(node);\n          if (!container.hasChildNodes() && DOM.isBlock(container)) {\n            container.appendChild(DOM.create('br'));\n          }\n        }\n        bookmark[start ? 'startContainer' : 'endContainer'] = container;\n        bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n      }\n      restoreEndPoint(true);\n      restoreEndPoint();\n      var rng = DOM.createRng();\n      rng.setStart(bookmark.startContainer, bookmark.startOffset);\n      if (bookmark.endContainer) {\n        rng.setEnd(bookmark.endContainer, bookmark.endOffset);\n      }\n      return Range.normalizeRange(rng);\n    };\n    var Bookmark = {\n      createBookmark: createBookmark,\n      resolveBookmark: resolveBookmark\n    };\n\n    var noop = function () {\n    };\n    var constant = function (value) {\n      return function () {\n        return value;\n      };\n    };\n    var not = function (f) {\n      return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        return !f.apply(null, args);\n      };\n    };\n    var never = constant(false);\n    var always = constant(true);\n\n    var none = function () {\n      return NONE;\n    };\n    var NONE = function () {\n      var eq = function (o) {\n        return o.isNone();\n      };\n      var call = function (thunk) {\n        return thunk();\n      };\n      var id = function (n) {\n        return n;\n      };\n      var me = {\n        fold: function (n, s) {\n          return n();\n        },\n        is: never,\n        isSome: never,\n        isNone: always,\n        getOr: id,\n        getOrThunk: call,\n        getOrDie: function (msg) {\n          throw new Error(msg || 'error: getOrDie called on none.');\n        },\n        getOrNull: constant(null),\n        getOrUndefined: constant(undefined),\n        or: id,\n        orThunk: call,\n        map: none,\n        each: noop,\n        bind: none,\n        exists: never,\n        forall: always,\n        filter: none,\n        equals: eq,\n        equals_: eq,\n        toArray: function () {\n          return [];\n        },\n        toString: constant('none()')\n      };\n      if (Object.freeze) {\n        Object.freeze(me);\n      }\n      return me;\n    }();\n    var some = function (a) {\n      var constant_a = constant(a);\n      var self = function () {\n        return me;\n      };\n      var bind = function (f) {\n        return f(a);\n      };\n      var me = {\n        fold: function (n, s) {\n          return s(a);\n        },\n        is: function (v) {\n          return a === v;\n        },\n        isSome: always,\n        isNone: never,\n        getOr: constant_a,\n        getOrThunk: constant_a,\n        getOrDie: constant_a,\n        getOrNull: constant_a,\n        getOrUndefined: constant_a,\n        or: self,\n        orThunk: self,\n        map: function (f) {\n          return some(f(a));\n        },\n        each: function (f) {\n          f(a);\n        },\n        bind: bind,\n        exists: bind,\n        forall: bind,\n        filter: function (f) {\n          return f(a) ? me : NONE;\n        },\n        toArray: function () {\n          return [a];\n        },\n        toString: function () {\n          return 'some(' + a + ')';\n        },\n        equals: function (o) {\n          return o.is(a);\n        },\n        equals_: function (o, elementEq) {\n          return o.fold(never, function (b) {\n            return elementEq(a, b);\n          });\n        }\n      };\n      return me;\n    };\n    var from = function (value) {\n      return value === null || value === undefined ? NONE : some(value);\n    };\n    var Option = {\n      some: some,\n      none: none,\n      from: from\n    };\n\n    var typeOf = function (x) {\n      if (x === null) {\n        return 'null';\n      }\n      var t = typeof x;\n      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n        return 'array';\n      }\n      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n        return 'string';\n      }\n      return t;\n    };\n    var isType = function (type) {\n      return function (value) {\n        return typeOf(value) === type;\n      };\n    };\n    var isString = isType('string');\n    var isArray = isType('array');\n    var isBoolean = isType('boolean');\n    var isFunction = isType('function');\n    var isNumber = isType('number');\n\n    var nativeSlice = Array.prototype.slice;\n    var nativePush = Array.prototype.push;\n    var map = function (xs, f) {\n      var len = xs.length;\n      var r = new Array(len);\n      for (var i = 0; i < len; i++) {\n        var x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    var each = function (xs, f) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        f(x, i);\n      }\n    };\n    var filter = function (xs, pred) {\n      var r = [];\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    var groupBy = function (xs, f) {\n      if (xs.length === 0) {\n        return [];\n      } else {\n        var wasType = f(xs[0]);\n        var r = [];\n        var group = [];\n        for (var i = 0, len = xs.length; i < len; i++) {\n          var x = xs[i];\n          var type = f(x);\n          if (type !== wasType) {\n            r.push(group);\n            group = [];\n          }\n          wasType = type;\n          group.push(x);\n        }\n        if (group.length !== 0) {\n          r.push(group);\n        }\n        return r;\n      }\n    };\n    var foldl = function (xs, f, acc) {\n      each(xs, function (x) {\n        acc = f(acc, x);\n      });\n      return acc;\n    };\n    var find = function (xs, pred) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          return Option.some(x);\n        }\n      }\n      return Option.none();\n    };\n    var flatten = function (xs) {\n      var r = [];\n      for (var i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    var bind = function (xs, f) {\n      var output = map(xs, f);\n      return flatten(output);\n    };\n    var reverse = function (xs) {\n      var r = nativeSlice.call(xs, 0);\n      r.reverse();\n      return r;\n    };\n    var head = function (xs) {\n      return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n    };\n    var last = function (xs) {\n      return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n    };\n    var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n      return nativeSlice.call(x);\n    };\n\n    var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n    var path = function (parts, scope) {\n      var o = scope !== undefined && scope !== null ? scope : Global;\n      for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n        o = o[parts[i]];\n      }\n      return o;\n    };\n    var resolve = function (p, scope) {\n      var parts = p.split('.');\n      return path(parts, scope);\n    };\n\n    var unsafe = function (name, scope) {\n      return resolve(name, scope);\n    };\n    var getOrDie = function (name, scope) {\n      var actual = unsafe(name, scope);\n      if (actual === undefined || actual === null) {\n        throw new Error(name + ' not available on this browser');\n      }\n      return actual;\n    };\n    var Global$1 = { getOrDie: getOrDie };\n\n    var htmlElement = function (scope) {\n      return Global$1.getOrDie('HTMLElement', scope);\n    };\n    var isPrototypeOf = function (x) {\n      var scope = resolve('ownerDocument.defaultView', x);\n      return htmlElement(scope).prototype.isPrototypeOf(x);\n    };\n    var HTMLElement = { isPrototypeOf: isPrototypeOf };\n\n    var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n    var getParentList = function (editor) {\n      var selectionStart = editor.selection.getStart(true);\n      return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart));\n    };\n    var isParentListSelected = function (parentList, selectedBlocks) {\n      return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n    };\n    var findSubLists = function (parentList) {\n      return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) {\n        return NodeType.isListNode(elm);\n      });\n    };\n    var getSelectedSubLists = function (editor) {\n      var parentList = getParentList(editor);\n      var selectedBlocks = editor.selection.getSelectedBlocks();\n      if (isParentListSelected(parentList, selectedBlocks)) {\n        return findSubLists(parentList);\n      } else {\n        return global$5.grep(selectedBlocks, function (elm) {\n          return NodeType.isListNode(elm) && parentList !== elm;\n        });\n      }\n    };\n    var findParentListItemsNodes = function (editor, elms) {\n      var listItemsElms = global$5.map(elms, function (elm) {\n        var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm));\n        return parentLi ? parentLi : elm;\n      });\n      return global$7.unique(listItemsElms);\n    };\n    var getSelectedListItems = function (editor) {\n      var selectedBlocks = editor.selection.getSelectedBlocks();\n      return global$5.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) {\n        return NodeType.isListItemNode(block);\n      });\n    };\n    var getSelectedDlItems = function (editor) {\n      return filter(getSelectedListItems(editor), NodeType.isDlItemNode);\n    };\n    var getClosestListRootElm = function (editor, elm) {\n      var parentTableCell = editor.dom.getParents(elm, 'TD,TH');\n      var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\n      return root;\n    };\n    var findLastParentListNode = function (editor, elm) {\n      var parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListRootElm(editor, elm));\n      return last(parentLists);\n    };\n    var getSelectedLists = function (editor) {\n      var firstList = findLastParentListNode(editor, editor.selection.getStart());\n      var subsequentLists = filter(editor.selection.getSelectedBlocks(), NodeType.isOlUlNode);\n      return firstList.toArray().concat(subsequentLists);\n    };\n    var getSelectedListRoots = function (editor) {\n      var selectedLists = getSelectedLists(editor);\n      return getUniqueListRoots(editor, selectedLists);\n    };\n    var getUniqueListRoots = function (editor, lists) {\n      var listRoots = map(lists, function (list) {\n        return findLastParentListNode(editor, list).getOr(list);\n      });\n      return global$7.unique(listRoots);\n    };\n    var isList = function (editor) {\n      var list = getParentList(editor);\n      return HTMLElement.isPrototypeOf(list);\n    };\n    var Selection = {\n      isList: isList,\n      getParentList: getParentList,\n      getSelectedSubLists: getSelectedSubLists,\n      getSelectedListItems: getSelectedListItems,\n      getClosestListRootElm: getClosestListRootElm,\n      getSelectedDlItems: getSelectedDlItems,\n      getSelectedListRoots: getSelectedListRoots\n    };\n\n    var fromHtml = function (html, scope) {\n      var doc = scope || domGlobals.document;\n      var div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        domGlobals.console.error('HTML does not have a single root node', html);\n        throw new Error('HTML must have a single root node');\n      }\n      return fromDom(div.childNodes[0]);\n    };\n    var fromTag = function (tag, scope) {\n      var doc = scope || domGlobals.document;\n      var node = doc.createElement(tag);\n      return fromDom(node);\n    };\n    var fromText = function (text, scope) {\n      var doc = scope || domGlobals.document;\n      var node = doc.createTextNode(text);\n      return fromDom(node);\n    };\n    var fromDom = function (node) {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: constant(node) };\n    };\n    var fromPoint = function (docElm, x, y) {\n      var doc = docElm.dom();\n      return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n    };\n    var Element = {\n      fromHtml: fromHtml,\n      fromTag: fromTag,\n      fromText: fromText,\n      fromDom: fromDom,\n      fromPoint: fromPoint\n    };\n\n    var lift2 = function (oa, ob, f) {\n      return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\n    };\n\n    var fromElements = function (elements, scope) {\n      var doc = scope || domGlobals.document;\n      var fragment = doc.createDocumentFragment();\n      each(elements, function (element) {\n        fragment.appendChild(element.dom());\n      });\n      return Element.fromDom(fragment);\n    };\n\n    var Immutable = function () {\n      var fields = [];\n      for (var _i = 0; _i < arguments.length; _i++) {\n        fields[_i] = arguments[_i];\n      }\n      return function () {\n        var values = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          values[_i] = arguments[_i];\n        }\n        if (fields.length !== values.length) {\n          throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n        }\n        var struct = {};\n        each(fields, function (name, i) {\n          struct[name] = constant(values[i]);\n        });\n        return struct;\n      };\n    };\n\n    var keys = Object.keys;\n    var each$1 = function (obj, f) {\n      var props = keys(obj);\n      for (var k = 0, len = props.length; k < len; k++) {\n        var i = props[k];\n        var x = obj[i];\n        f(x, i);\n      }\n    };\n\n    var node = function () {\n      var f = Global$1.getOrDie('Node');\n      return f;\n    };\n    var compareDocumentPosition = function (a, b, match) {\n      return (a.compareDocumentPosition(b) & match) !== 0;\n    };\n    var documentPositionPreceding = function (a, b) {\n      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n    };\n    var documentPositionContainedBy = function (a, b) {\n      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n    };\n    var Node = {\n      documentPositionPreceding: documentPositionPreceding,\n      documentPositionContainedBy: documentPositionContainedBy\n    };\n\n    var cached = function (f) {\n      var called = false;\n      var r;\n      return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        if (!called) {\n          called = true;\n          r = f.apply(null, args);\n        }\n        return r;\n      };\n    };\n\n    var firstMatch = function (regexes, s) {\n      for (var i = 0; i < regexes.length; i++) {\n        var x = regexes[i];\n        if (x.test(s)) {\n          return x;\n        }\n      }\n      return undefined;\n    };\n    var find$1 = function (regexes, agent) {\n      var r = firstMatch(regexes, agent);\n      if (!r) {\n        return {\n          major: 0,\n          minor: 0\n        };\n      }\n      var group = function (i) {\n        return Number(agent.replace(r, '$' + i));\n      };\n      return nu(group(1), group(2));\n    };\n    var detect = function (versionRegexes, agent) {\n      var cleanedAgent = String(agent).toLowerCase();\n      if (versionRegexes.length === 0) {\n        return unknown();\n      }\n      return find$1(versionRegexes, cleanedAgent);\n    };\n    var unknown = function () {\n      return nu(0, 0);\n    };\n    var nu = function (major, minor) {\n      return {\n        major: major,\n        minor: minor\n      };\n    };\n    var Version = {\n      nu: nu,\n      detect: detect,\n      unknown: unknown\n    };\n\n    var edge = 'Edge';\n    var chrome = 'Chrome';\n    var ie = 'IE';\n    var opera = 'Opera';\n    var firefox = 'Firefox';\n    var safari = 'Safari';\n    var isBrowser = function (name, current) {\n      return function () {\n        return current === name;\n      };\n    };\n    var unknown$1 = function () {\n      return nu$1({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    var nu$1 = function (info) {\n      var current = info.current;\n      var version = info.version;\n      return {\n        current: current,\n        version: version,\n        isEdge: isBrowser(edge, current),\n        isChrome: isBrowser(chrome, current),\n        isIE: isBrowser(ie, current),\n        isOpera: isBrowser(opera, current),\n        isFirefox: isBrowser(firefox, current),\n        isSafari: isBrowser(safari, current)\n      };\n    };\n    var Browser = {\n      unknown: unknown$1,\n      nu: nu$1,\n      edge: constant(edge),\n      chrome: constant(chrome),\n      ie: constant(ie),\n      opera: constant(opera),\n      firefox: constant(firefox),\n      safari: constant(safari)\n    };\n\n    var windows = 'Windows';\n    var ios = 'iOS';\n    var android = 'Android';\n    var linux = 'Linux';\n    var osx = 'OSX';\n    var solaris = 'Solaris';\n    var freebsd = 'FreeBSD';\n    var isOS = function (name, current) {\n      return function () {\n        return current === name;\n      };\n    };\n    var unknown$2 = function () {\n      return nu$2({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    var nu$2 = function (info) {\n      var current = info.current;\n      var version = info.version;\n      return {\n        current: current,\n        version: version,\n        isWindows: isOS(windows, current),\n        isiOS: isOS(ios, current),\n        isAndroid: isOS(android, current),\n        isOSX: isOS(osx, current),\n        isLinux: isOS(linux, current),\n        isSolaris: isOS(solaris, current),\n        isFreeBSD: isOS(freebsd, current)\n      };\n    };\n    var OperatingSystem = {\n      unknown: unknown$2,\n      nu: nu$2,\n      windows: constant(windows),\n      ios: constant(ios),\n      android: constant(android),\n      linux: constant(linux),\n      osx: constant(osx),\n      solaris: constant(solaris),\n      freebsd: constant(freebsd)\n    };\n\n    var DeviceType = function (os, browser, userAgent) {\n      var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n      var isiPhone = os.isiOS() && !isiPad;\n      var isAndroid3 = os.isAndroid() && os.version.major === 3;\n      var isAndroid4 = os.isAndroid() && os.version.major === 4;\n      var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n      var isTouch = os.isiOS() || os.isAndroid();\n      var isPhone = isTouch && !isTablet;\n      var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n      return {\n        isiPad: constant(isiPad),\n        isiPhone: constant(isiPhone),\n        isTablet: constant(isTablet),\n        isPhone: constant(isPhone),\n        isTouch: constant(isTouch),\n        isAndroid: os.isAndroid,\n        isiOS: os.isiOS,\n        isWebView: constant(iOSwebview)\n      };\n    };\n\n    var detect$1 = function (candidates, userAgent) {\n      var agent = String(userAgent).toLowerCase();\n      return find(candidates, function (candidate) {\n        return candidate.search(agent);\n      });\n    };\n    var detectBrowser = function (browsers, userAgent) {\n      return detect$1(browsers, userAgent).map(function (browser) {\n        var version = Version.detect(browser.versionRegexes, userAgent);\n        return {\n          current: browser.name,\n          version: version\n        };\n      });\n    };\n    var detectOs = function (oses, userAgent) {\n      return detect$1(oses, userAgent).map(function (os) {\n        var version = Version.detect(os.versionRegexes, userAgent);\n        return {\n          current: os.name,\n          version: version\n        };\n      });\n    };\n    var UaString = {\n      detectBrowser: detectBrowser,\n      detectOs: detectOs\n    };\n\n    var contains = function (str, substr) {\n      return str.indexOf(substr) !== -1;\n    };\n\n    var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n    var checkContains = function (target) {\n      return function (uastring) {\n        return contains(uastring, target);\n      };\n    };\n    var browsers = [\n      {\n        name: 'Edge',\n        versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n        search: function (uastring) {\n          return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n        }\n      },\n      {\n        name: 'Chrome',\n        versionRegexes: [\n          /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n          normalVersionRegex\n        ],\n        search: function (uastring) {\n          return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n        }\n      },\n      {\n        name: 'IE',\n        versionRegexes: [\n          /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*?rv:([0-9]+)\\.([0-9]+).*/\n        ],\n        search: function (uastring) {\n          return contains(uastring, 'msie') || contains(uastring, 'trident');\n        }\n      },\n      {\n        name: 'Opera',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n        ],\n        search: checkContains('opera')\n      },\n      {\n        name: 'Firefox',\n        versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n        search: checkContains('firefox')\n      },\n      {\n        name: 'Safari',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\n        ],\n        search: function (uastring) {\n          return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n        }\n      }\n    ];\n    var oses = [\n      {\n        name: 'Windows',\n        search: checkContains('win'),\n        versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'iOS',\n        search: function (uastring) {\n          return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n        },\n        versionRegexes: [\n          /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n        ]\n      },\n      {\n        name: 'Android',\n        search: checkContains('android'),\n        versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'OSX',\n        search: checkContains('os x'),\n        versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n      },\n      {\n        name: 'Linux',\n        search: checkContains('linux'),\n        versionRegexes: []\n      },\n      {\n        name: 'Solaris',\n        search: checkContains('sunos'),\n        versionRegexes: []\n      },\n      {\n        name: 'FreeBSD',\n        search: checkContains('freebsd'),\n        versionRegexes: []\n      }\n    ];\n    var PlatformInfo = {\n      browsers: constant(browsers),\n      oses: constant(oses)\n    };\n\n    var detect$2 = function (userAgent) {\n      var browsers = PlatformInfo.browsers();\n      var oses = PlatformInfo.oses();\n      var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n      var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n      var deviceType = DeviceType(os, browser, userAgent);\n      return {\n        browser: browser,\n        os: os,\n        deviceType: deviceType\n      };\n    };\n    var PlatformDetection = { detect: detect$2 };\n\n    var detect$3 = cached(function () {\n      var userAgent = domGlobals.navigator.userAgent;\n      return PlatformDetection.detect(userAgent);\n    });\n    var PlatformDetection$1 = { detect: detect$3 };\n\n    var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n    var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n    var COMMENT = domGlobals.Node.COMMENT_NODE;\n    var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n    var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n    var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n    var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n    var TEXT = domGlobals.Node.TEXT_NODE;\n    var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n    var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n    var ENTITY = domGlobals.Node.ENTITY_NODE;\n    var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n    var ELEMENT$1 = ELEMENT;\n    var is = function (element, selector) {\n      var dom = element.dom();\n      if (dom.nodeType !== ELEMENT$1) {\n        return false;\n      } else {\n        var elem = dom;\n        if (elem.matches !== undefined) {\n          return elem.matches(selector);\n        } else if (elem.msMatchesSelector !== undefined) {\n          return elem.msMatchesSelector(selector);\n        } else if (elem.webkitMatchesSelector !== undefined) {\n          return elem.webkitMatchesSelector(selector);\n        } else if (elem.mozMatchesSelector !== undefined) {\n          return elem.mozMatchesSelector(selector);\n        } else {\n          throw new Error('Browser lacks native selectors');\n        }\n      }\n    };\n\n    var eq = function (e1, e2) {\n      return e1.dom() === e2.dom();\n    };\n    var regularContains = function (e1, e2) {\n      var d1 = e1.dom();\n      var d2 = e2.dom();\n      return d1 === d2 ? false : d1.contains(d2);\n    };\n    var ieContains = function (e1, e2) {\n      return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n    };\n    var browser = PlatformDetection$1.detect().browser;\n    var contains$1 = browser.isIE() ? ieContains : regularContains;\n    var is$1 = is;\n\n    var parent = function (element) {\n      return Option.from(element.dom().parentNode).map(Element.fromDom);\n    };\n    var children = function (element) {\n      return map(element.dom().childNodes, Element.fromDom);\n    };\n    var child = function (element, index) {\n      var cs = element.dom().childNodes;\n      return Option.from(cs[index]).map(Element.fromDom);\n    };\n    var firstChild = function (element) {\n      return child(element, 0);\n    };\n    var lastChild = function (element) {\n      return child(element, element.dom().childNodes.length - 1);\n    };\n    var spot = Immutable('element', 'offset');\n\n    var before = function (marker, element) {\n      var parent$1 = parent(marker);\n      parent$1.each(function (v) {\n        v.dom().insertBefore(element.dom(), marker.dom());\n      });\n    };\n    var append = function (parent, element) {\n      parent.dom().appendChild(element.dom());\n    };\n\n    var before$1 = function (marker, elements) {\n      each(elements, function (x) {\n        before(marker, x);\n      });\n    };\n    var append$1 = function (parent, elements) {\n      each(elements, function (x) {\n        append(parent, x);\n      });\n    };\n\n    var remove = function (element) {\n      var dom = element.dom();\n      if (dom.parentNode !== null) {\n        dom.parentNode.removeChild(dom);\n      }\n    };\n\n    var name = function (element) {\n      var r = element.dom().nodeName;\n      return r.toLowerCase();\n    };\n    var type = function (element) {\n      return element.dom().nodeType;\n    };\n    var isType$1 = function (t) {\n      return function (element) {\n        return type(element) === t;\n      };\n    };\n    var isElement = isType$1(ELEMENT);\n\n    var rawSet = function (dom, key, value) {\n      if (isString(value) || isBoolean(value) || isNumber(value)) {\n        dom.setAttribute(key, value + '');\n      } else {\n        domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n        throw new Error('Attribute value was not simple');\n      }\n    };\n    var setAll = function (element, attrs) {\n      var dom = element.dom();\n      each$1(attrs, function (v, k) {\n        rawSet(dom, k, v);\n      });\n    };\n    var clone = function (element) {\n      return foldl(element.dom().attributes, function (acc, attr) {\n        acc[attr.name] = attr.value;\n        return acc;\n      }, {});\n    };\n\n    var isSupported = function (dom) {\n      return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n    };\n\n    var internalSet = function (dom, property, value) {\n      if (!isString(value)) {\n        domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n        throw new Error('CSS value must be a string: ' + value);\n      }\n      if (isSupported(dom)) {\n        dom.style.setProperty(property, value);\n      }\n    };\n    var set = function (element, property, value) {\n      var dom = element.dom();\n      internalSet(dom, property, value);\n    };\n\n    var clone$1 = function (original, isDeep) {\n      return Element.fromDom(original.dom().cloneNode(isDeep));\n    };\n    var deep = function (original) {\n      return clone$1(original, true);\n    };\n    var shallowAs = function (original, tag) {\n      var nu = Element.fromTag(tag);\n      var attributes = clone(original);\n      setAll(nu, attributes);\n      return nu;\n    };\n    var mutate = function (original, tag) {\n      var nu = shallowAs(original, tag);\n      before(original, nu);\n      var children$1 = children(original);\n      append$1(nu, children$1);\n      remove(original);\n      return nu;\n    };\n\n    var joinSegment = function (parent, child) {\n      append(parent.item, child.list);\n    };\n    var joinSegments = function (segments) {\n      for (var i = 1; i < segments.length; i++) {\n        joinSegment(segments[i - 1], segments[i]);\n      }\n    };\n    var appendSegments = function (head$1, tail) {\n      lift2(last(head$1), head(tail), joinSegment);\n    };\n    var createSegment = function (scope, listType) {\n      var segment = {\n        list: Element.fromTag(listType, scope),\n        item: Element.fromTag('li', scope)\n      };\n      append(segment.list, segment.item);\n      return segment;\n    };\n    var createSegments = function (scope, entry, size) {\n      var segments = [];\n      for (var i = 0; i < size; i++) {\n        segments.push(createSegment(scope, entry.listType));\n      }\n      return segments;\n    };\n    var populateSegments = function (segments, entry) {\n      for (var i = 0; i < segments.length - 1; i++) {\n        set(segments[i].item, 'list-style-type', 'none');\n      }\n      last(segments).each(function (segment) {\n        setAll(segment.list, entry.listAttributes);\n        setAll(segment.item, entry.itemAttributes);\n        append$1(segment.item, entry.content);\n      });\n    };\n    var normalizeSegment = function (segment, entry) {\n      if (name(segment.list) !== entry.listType) {\n        segment.list = mutate(segment.list, entry.listType);\n      }\n      setAll(segment.list, entry.listAttributes);\n    };\n    var createItem = function (scope, attr, content) {\n      var item = Element.fromTag('li', scope);\n      setAll(item, attr);\n      append$1(item, content);\n      return item;\n    };\n    var appendItem = function (segment, item) {\n      append(segment.list, item);\n      segment.item = item;\n    };\n    var writeShallow = function (scope, cast, entry) {\n      var newCast = cast.slice(0, entry.depth);\n      last(newCast).each(function (segment) {\n        var item = createItem(scope, entry.itemAttributes, entry.content);\n        appendItem(segment, item);\n        normalizeSegment(segment, entry);\n      });\n      return newCast;\n    };\n    var writeDeep = function (scope, cast, entry) {\n      var segments = createSegments(scope, entry, entry.depth - cast.length);\n      joinSegments(segments);\n      populateSegments(segments, entry);\n      appendSegments(cast, segments);\n      return cast.concat(segments);\n    };\n    var composeList = function (scope, entries) {\n      var cast = foldl(entries, function (cast, entry) {\n        return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);\n      }, []);\n      return head(cast).map(function (segment) {\n        return segment.list;\n      });\n    };\n\n    var isList$1 = function (el) {\n      return is$1(el, 'OL,UL');\n    };\n    var hasFirstChildList = function (el) {\n      return firstChild(el).map(isList$1).getOr(false);\n    };\n    var hasLastChildList = function (el) {\n      return lastChild(el).map(isList$1).getOr(false);\n    };\n\n    var isIndented = function (entry) {\n      return entry.depth > 0;\n    };\n    var isSelected = function (entry) {\n      return entry.isSelected;\n    };\n    var cloneItemContent = function (li) {\n      var children$1 = children(li);\n      var content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;\n      return map(content, deep);\n    };\n    var createEntry = function (li, depth, isSelected) {\n      return parent(li).filter(isElement).map(function (list) {\n        return {\n          depth: depth,\n          isSelected: isSelected,\n          content: cloneItemContent(li),\n          itemAttributes: clone(li),\n          listAttributes: clone(list),\n          listType: name(list)\n        };\n      });\n    };\n\n    var indentEntry = function (indentation, entry) {\n      switch (indentation) {\n      case 'Indent':\n        entry.depth++;\n        break;\n      case 'Outdent':\n        entry.depth--;\n        break;\n      case 'Flatten':\n        entry.depth = 0;\n      }\n    };\n\n    var hasOwnProperty = Object.prototype.hasOwnProperty;\n    var shallow = function (old, nu) {\n      return nu;\n    };\n    var baseMerge = function (merger) {\n      return function () {\n        var objects = new Array(arguments.length);\n        for (var i = 0; i < objects.length; i++) {\n          objects[i] = arguments[i];\n        }\n        if (objects.length === 0) {\n          throw new Error('Can\\'t merge zero objects');\n        }\n        var ret = {};\n        for (var j = 0; j < objects.length; j++) {\n          var curObject = objects[j];\n          for (var key in curObject) {\n            if (hasOwnProperty.call(curObject, key)) {\n              ret[key] = merger(ret[key], curObject[key]);\n            }\n          }\n        }\n        return ret;\n      };\n    };\n    var merge = baseMerge(shallow);\n\n    var cloneListProperties = function (target, source) {\n      target.listType = source.listType;\n      target.listAttributes = merge({}, source.listAttributes);\n    };\n    var previousSiblingEntry = function (entries, start) {\n      var depth = entries[start].depth;\n      for (var i = start - 1; i >= 0; i--) {\n        if (entries[i].depth === depth) {\n          return Option.some(entries[i]);\n        }\n        if (entries[i].depth < depth) {\n          break;\n        }\n      }\n      return Option.none();\n    };\n    var normalizeEntries = function (entries) {\n      each(entries, function (entry, i) {\n        previousSiblingEntry(entries, i).each(function (matchingEntry) {\n          cloneListProperties(entry, matchingEntry);\n        });\n      });\n    };\n\n    var Cell = function (initial) {\n      var value = initial;\n      var get = function () {\n        return value;\n      };\n      var set = function (v) {\n        value = v;\n      };\n      var clone = function () {\n        return Cell(get());\n      };\n      return {\n        get: get,\n        set: set,\n        clone: clone\n      };\n    };\n\n    var parseItem = function (depth, itemSelection, selectionState, item) {\n      return firstChild(item).filter(isList$1).fold(function () {\n        itemSelection.each(function (selection) {\n          if (eq(selection.start, item)) {\n            selectionState.set(true);\n          }\n        });\n        var currentItemEntry = createEntry(item, depth, selectionState.get());\n        itemSelection.each(function (selection) {\n          if (eq(selection.end, item)) {\n            selectionState.set(false);\n          }\n        });\n        var childListEntries = lastChild(item).filter(isList$1).map(function (list) {\n          return parseList(depth, itemSelection, selectionState, list);\n        }).getOr([]);\n        return currentItemEntry.toArray().concat(childListEntries);\n      }, function (list) {\n        return parseList(depth, itemSelection, selectionState, list);\n      });\n    };\n    var parseList = function (depth, itemSelection, selectionState, list) {\n      return bind(children(list), function (element) {\n        var parser = isList$1(element) ? parseList : parseItem;\n        var newDepth = depth + 1;\n        return parser(newDepth, itemSelection, selectionState, element);\n      });\n    };\n    var parseLists = function (lists, itemSelection) {\n      var selectionState = Cell(false);\n      var initialDepth = 0;\n      return map(lists, function (list) {\n        return {\n          sourceList: list,\n          entries: parseList(initialDepth, itemSelection, selectionState, list)\n        };\n      });\n    };\n\n    var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n    var createTextBlock = function (editor, contentNode) {\n      var dom = editor.dom;\n      var blockElements = editor.schema.getBlockElements();\n      var fragment = dom.createFragment();\n      var node, textBlock, blockName, hasContentNode;\n      if (editor.settings.forced_root_block) {\n        blockName = editor.settings.forced_root_block;\n      }\n      if (blockName) {\n        textBlock = dom.create(blockName);\n        if (textBlock.tagName === editor.settings.forced_root_block) {\n          dom.setAttribs(textBlock, editor.settings.forced_root_block_attrs);\n        }\n        if (!NodeType.isBlock(contentNode.firstChild, blockElements)) {\n          fragment.appendChild(textBlock);\n        }\n      }\n      if (contentNode) {\n        while (node = contentNode.firstChild) {\n          var nodeName = node.nodeName;\n          if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {\n            hasContentNode = true;\n          }\n          if (NodeType.isBlock(node, blockElements)) {\n            fragment.appendChild(node);\n            textBlock = null;\n          } else {\n            if (blockName) {\n              if (!textBlock) {\n                textBlock = dom.create(blockName);\n                fragment.appendChild(textBlock);\n              }\n              textBlock.appendChild(node);\n            } else {\n              fragment.appendChild(node);\n            }\n          }\n        }\n      }\n      if (!editor.settings.forced_root_block) {\n        fragment.appendChild(dom.create('br'));\n      } else {\n        if (!hasContentNode && (!global$8.ie || global$8.ie > 10)) {\n          textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n        }\n      }\n      return fragment;\n    };\n\n    var outdentedComposer = function (editor, entries) {\n      return map(entries, function (entry) {\n        var content = fromElements(entry.content);\n        return Element.fromDom(createTextBlock(editor, content.dom()));\n      });\n    };\n    var indentedComposer = function (editor, entries) {\n      normalizeEntries(entries);\n      return composeList(editor.contentDocument, entries).toArray();\n    };\n    var composeEntries = function (editor, entries) {\n      return bind(groupBy(entries, isIndented), function (entries) {\n        var groupIsIndented = head(entries).map(isIndented).getOr(false);\n        return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);\n      });\n    };\n    var indentSelectedEntries = function (entries, indentation) {\n      each(filter(entries, isSelected), function (entry) {\n        return indentEntry(indentation, entry);\n      });\n    };\n    var getItemSelection = function (editor) {\n      var selectedListItems = map(Selection.getSelectedListItems(editor), Element.fromDom);\n      return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), function (start, end) {\n        return {\n          start: start,\n          end: end\n        };\n      });\n    };\n    var listsIndentation = function (editor, lists, indentation) {\n      var entrySets = parseLists(lists, getItemSelection(editor));\n      each(entrySets, function (entrySet) {\n        indentSelectedEntries(entrySet.entries, indentation);\n        before$1(entrySet.sourceList, composeEntries(editor, entrySet.entries));\n        remove(entrySet.sourceList);\n      });\n    };\n\n    var DOM$1 = global$6.DOM;\n    var splitList = function (editor, ul, li) {\n      var tmpRng, fragment, bookmarks, node, newBlock;\n      var removeAndKeepBookmarks = function (targetNode) {\n        global$5.each(bookmarks, function (node) {\n          targetNode.parentNode.insertBefore(node, li.parentNode);\n        });\n        DOM$1.remove(targetNode);\n      };\n      bookmarks = DOM$1.select('span[data-mce-type=\"bookmark\"]', ul);\n      newBlock = createTextBlock(editor, li);\n      tmpRng = DOM$1.createRng();\n      tmpRng.setStartAfter(li);\n      tmpRng.setEndAfter(ul);\n      fragment = tmpRng.extractContents();\n      for (node = fragment.firstChild; node; node = node.firstChild) {\n        if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {\n          DOM$1.remove(node);\n          break;\n        }\n      }\n      if (!editor.dom.isEmpty(fragment)) {\n        DOM$1.insertAfter(fragment, ul);\n      }\n      DOM$1.insertAfter(newBlock, ul);\n      if (NodeType.isEmpty(editor.dom, li.parentNode)) {\n        removeAndKeepBookmarks(li.parentNode);\n      }\n      DOM$1.remove(li);\n      if (NodeType.isEmpty(editor.dom, ul)) {\n        DOM$1.remove(ul);\n      }\n    };\n    var SplitList = { splitList: splitList };\n\n    var outdentDlItem = function (editor, item) {\n      if (is$1(item, 'dd')) {\n        mutate(item, 'dt');\n      } else if (is$1(item, 'dt')) {\n        parent(item).each(function (dl) {\n          return SplitList.splitList(editor, dl.dom(), item.dom());\n        });\n      }\n    };\n    var indentDlItem = function (item) {\n      if (is$1(item, 'dt')) {\n        mutate(item, 'dd');\n      }\n    };\n    var dlIndentation = function (editor, indentation, dlItems) {\n      if (indentation === 'Indent') {\n        each(dlItems, indentDlItem);\n      } else {\n        each(dlItems, function (item) {\n          return outdentDlItem(editor, item);\n        });\n      }\n    };\n\n    var selectionIndentation = function (editor, indentation) {\n      var lists = map(Selection.getSelectedListRoots(editor), Element.fromDom);\n      var dlItems = map(Selection.getSelectedDlItems(editor), Element.fromDom);\n      var isHandled = false;\n      if (lists.length || dlItems.length) {\n        var bookmark = editor.selection.getBookmark();\n        listsIndentation(editor, lists, indentation);\n        dlIndentation(editor, indentation, dlItems);\n        editor.selection.moveToBookmark(bookmark);\n        editor.selection.setRng(Range.normalizeRange(editor.selection.getRng()));\n        editor.nodeChanged();\n        isHandled = true;\n      }\n      return isHandled;\n    };\n    var indentListSelection = function (editor) {\n      return selectionIndentation(editor, 'Indent');\n    };\n    var outdentListSelection = function (editor) {\n      return selectionIndentation(editor, 'Outdent');\n    };\n    var flattenListSelection = function (editor) {\n      return selectionIndentation(editor, 'Flatten');\n    };\n\n    var updateListStyle = function (dom, el, detail) {\n      var type = detail['list-style-type'] ? detail['list-style-type'] : null;\n      dom.setStyle(el, 'list-style-type', type);\n    };\n    var setAttribs = function (elm, attrs) {\n      global$5.each(attrs, function (value, key) {\n        elm.setAttribute(key, value);\n      });\n    };\n    var updateListAttrs = function (dom, el, detail) {\n      setAttribs(el, detail['list-attributes']);\n      global$5.each(dom.select('li', el), function (li) {\n        setAttribs(li, detail['list-item-attributes']);\n      });\n    };\n    var updateListWithDetails = function (dom, el, detail) {\n      updateListStyle(dom, el, detail);\n      updateListAttrs(dom, el, detail);\n    };\n    var removeStyles = function (dom, element, styles) {\n      global$5.each(styles, function (style) {\n        var _a;\n        return dom.setStyle(element, (_a = {}, _a[style] = '', _a));\n      });\n    };\n    var getEndPointNode = function (editor, rng, start, root) {\n      var container, offset;\n      container = rng[start ? 'startContainer' : 'endContainer'];\n      offset = rng[start ? 'startOffset' : 'endOffset'];\n      if (container.nodeType === 1) {\n        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n      }\n      if (!start && NodeType.isBr(container.nextSibling)) {\n        container = container.nextSibling;\n      }\n      while (container.parentNode !== root) {\n        if (NodeType.isTextBlock(editor, container)) {\n          return container;\n        }\n        if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {\n          return container;\n        }\n        container = container.parentNode;\n      }\n      return container;\n    };\n    var getSelectedTextBlocks = function (editor, rng, root) {\n      var textBlocks = [], dom = editor.dom;\n      var startNode = getEndPointNode(editor, rng, true, root);\n      var endNode = getEndPointNode(editor, rng, false, root);\n      var block;\n      var siblings = [];\n      for (var node = startNode; node; node = node.nextSibling) {\n        siblings.push(node);\n        if (node === endNode) {\n          break;\n        }\n      }\n      global$5.each(siblings, function (node) {\n        if (NodeType.isTextBlock(editor, node)) {\n          textBlocks.push(node);\n          block = null;\n          return;\n        }\n        if (dom.isBlock(node) || NodeType.isBr(node)) {\n          if (NodeType.isBr(node)) {\n            dom.remove(node);\n          }\n          block = null;\n          return;\n        }\n        var nextSibling = node.nextSibling;\n        if (global$4.isBookmarkNode(node)) {\n          if (NodeType.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {\n            block = null;\n            return;\n          }\n        }\n        if (!block) {\n          block = dom.create('p');\n          node.parentNode.insertBefore(block, node);\n          textBlocks.push(block);\n        }\n        block.appendChild(node);\n      });\n      return textBlocks;\n    };\n    var hasCompatibleStyle = function (dom, sib, detail) {\n      var sibStyle = dom.getStyle(sib, 'list-style-type');\n      var detailStyle = detail ? detail['list-style-type'] : '';\n      detailStyle = detailStyle === null ? '' : detailStyle;\n      return sibStyle === detailStyle;\n    };\n    var applyList = function (editor, listName, detail) {\n      if (detail === void 0) {\n        detail = {};\n      }\n      var rng = editor.selection.getRng(true);\n      var bookmark;\n      var listItemName = 'LI';\n      var root = Selection.getClosestListRootElm(editor, editor.selection.getStart(true));\n      var dom = editor.dom;\n      if (dom.getContentEditable(editor.selection.getNode()) === 'false') {\n        return;\n      }\n      listName = listName.toUpperCase();\n      if (listName === 'DL') {\n        listItemName = 'DT';\n      }\n      bookmark = Bookmark.createBookmark(rng);\n      global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) {\n        var listBlock, sibling;\n        sibling = block.previousSibling;\n        if (sibling && NodeType.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {\n          listBlock = sibling;\n          block = dom.rename(block, listItemName);\n          sibling.appendChild(block);\n        } else {\n          listBlock = dom.create(listName);\n          block.parentNode.insertBefore(listBlock, block);\n          listBlock.appendChild(block);\n          block = dom.rename(block, listItemName);\n        }\n        removeStyles(dom, block, [\n          'margin',\n          'margin-right',\n          'margin-bottom',\n          'margin-left',\n          'margin-top',\n          'padding',\n          'padding-right',\n          'padding-bottom',\n          'padding-left',\n          'padding-top'\n        ]);\n        updateListWithDetails(dom, listBlock, detail);\n        mergeWithAdjacentLists(editor.dom, listBlock);\n      });\n      editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n    };\n    var isValidLists = function (list1, list2) {\n      return list1 && list2 && NodeType.isListNode(list1) && list1.nodeName === list2.nodeName;\n    };\n    var hasSameListStyle = function (dom, list1, list2) {\n      var targetStyle = dom.getStyle(list1, 'list-style-type', true);\n      var style = dom.getStyle(list2, 'list-style-type', true);\n      return targetStyle === style;\n    };\n    var hasSameClasses = function (elm1, elm2) {\n      return elm1.className === elm2.className;\n    };\n    var shouldMerge = function (dom, list1, list2) {\n      return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);\n    };\n    var mergeWithAdjacentLists = function (dom, listBlock) {\n      var sibling, node;\n      sibling = listBlock.nextSibling;\n      if (shouldMerge(dom, listBlock, sibling)) {\n        while (node = sibling.firstChild) {\n          listBlock.appendChild(node);\n        }\n        dom.remove(sibling);\n      }\n      sibling = listBlock.previousSibling;\n      if (shouldMerge(dom, listBlock, sibling)) {\n        while (node = sibling.lastChild) {\n          listBlock.insertBefore(node, listBlock.firstChild);\n        }\n        dom.remove(sibling);\n      }\n    };\n    var updateList = function (dom, list, listName, detail) {\n      if (list.nodeName !== listName) {\n        var newList = dom.rename(list, listName);\n        updateListWithDetails(dom, newList, detail);\n      } else {\n        updateListWithDetails(dom, list, detail);\n      }\n    };\n    var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {\n      if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n        flattenListSelection(editor);\n      } else {\n        var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));\n        global$5.each([parentList].concat(lists), function (elm) {\n          updateList(editor.dom, elm, listName, detail);\n        });\n        editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n      }\n    };\n    var hasListStyleDetail = function (detail) {\n      return 'list-style-type' in detail;\n    };\n    var toggleSingleList = function (editor, parentList, listName, detail) {\n      if (parentList === editor.getBody()) {\n        return;\n      }\n      if (parentList) {\n        if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n          flattenListSelection(editor);\n        } else {\n          var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));\n          updateListWithDetails(editor.dom, parentList, detail);\n          mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName));\n          editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n        }\n      } else {\n        applyList(editor, listName, detail);\n      }\n    };\n    var toggleList = function (editor, listName, detail) {\n      var parentList = Selection.getParentList(editor);\n      var selectedSubLists = Selection.getSelectedSubLists(editor);\n      detail = detail ? detail : {};\n      if (parentList && selectedSubLists.length > 0) {\n        toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n      } else {\n        toggleSingleList(editor, parentList, listName, detail);\n      }\n    };\n    var ToggleList = {\n      toggleList: toggleList,\n      mergeWithAdjacentLists: mergeWithAdjacentLists\n    };\n\n    var DOM$2 = global$6.DOM;\n    var normalizeList = function (dom, ul) {\n      var sibling;\n      var parentNode = ul.parentNode;\n      if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) {\n        sibling = parentNode.previousSibling;\n        if (sibling && sibling.nodeName === 'LI') {\n          sibling.appendChild(ul);\n          if (NodeType.isEmpty(dom, parentNode)) {\n            DOM$2.remove(parentNode);\n          }\n        } else {\n          DOM$2.setStyle(parentNode, 'listStyleType', 'none');\n        }\n      }\n      if (NodeType.isListNode(parentNode)) {\n        sibling = parentNode.previousSibling;\n        if (sibling && sibling.nodeName === 'LI') {\n          sibling.appendChild(ul);\n        }\n      }\n    };\n    var normalizeLists = function (dom, element) {\n      global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) {\n        normalizeList(dom, ul);\n      });\n    };\n    var NormalizeLists = {\n      normalizeList: normalizeList,\n      normalizeLists: normalizeLists\n    };\n\n    var findNextCaretContainer = function (editor, rng, isForward, root) {\n      var node = rng.startContainer;\n      var offset = rng.startOffset;\n      var nonEmptyBlocks, walker;\n      if (node.nodeType === 3 && (isForward ? offset < node.data.length : offset > 0)) {\n        return node;\n      }\n      nonEmptyBlocks = editor.schema.getNonEmptyElements();\n      if (node.nodeType === 1) {\n        node = global$1.getNode(node, offset);\n      }\n      walker = new global$2(node, root);\n      if (isForward) {\n        if (NodeType.isBogusBr(editor.dom, node)) {\n          walker.next();\n        }\n      }\n      while (node = walker[isForward ? 'next' : 'prev2']()) {\n        if (node.nodeName === 'LI' && !node.hasChildNodes()) {\n          return node;\n        }\n        if (nonEmptyBlocks[node.nodeName]) {\n          return node;\n        }\n        if (node.nodeType === 3 && node.data.length > 0) {\n          return node;\n        }\n      }\n    };\n    var hasOnlyOneBlockChild = function (dom, elm) {\n      var childNodes = elm.childNodes;\n      return childNodes.length === 1 && !NodeType.isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);\n    };\n    var unwrapSingleBlockChild = function (dom, elm) {\n      if (hasOnlyOneBlockChild(dom, elm)) {\n        dom.remove(elm.firstChild, true);\n      }\n    };\n    var moveChildren = function (dom, fromElm, toElm) {\n      var node, targetElm;\n      targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;\n      unwrapSingleBlockChild(dom, fromElm);\n      if (!NodeType.isEmpty(dom, fromElm, true)) {\n        while (node = fromElm.firstChild) {\n          targetElm.appendChild(node);\n        }\n      }\n    };\n    var mergeLiElements = function (dom, fromElm, toElm) {\n      var node, listNode;\n      var ul = fromElm.parentNode;\n      if (!NodeType.isChildOfBody(dom, fromElm) || !NodeType.isChildOfBody(dom, toElm)) {\n        return;\n      }\n      if (NodeType.isListNode(toElm.lastChild)) {\n        listNode = toElm.lastChild;\n      }\n      if (ul === toElm.lastChild) {\n        if (NodeType.isBr(ul.previousSibling)) {\n          dom.remove(ul.previousSibling);\n        }\n      }\n      node = toElm.lastChild;\n      if (node && NodeType.isBr(node) && fromElm.hasChildNodes()) {\n        dom.remove(node);\n      }\n      if (NodeType.isEmpty(dom, toElm, true)) {\n        dom.$(toElm).empty();\n      }\n      moveChildren(dom, fromElm, toElm);\n      if (listNode) {\n        toElm.appendChild(listNode);\n      }\n      var contains = contains$1(Element.fromDom(toElm), Element.fromDom(fromElm));\n      var nestedLists = contains ? dom.getParents(fromElm, NodeType.isListNode, toElm) : [];\n      dom.remove(fromElm);\n      each(nestedLists, function (list) {\n        if (NodeType.isEmpty(dom, list) && list !== dom.getRoot()) {\n          dom.remove(list);\n        }\n      });\n    };\n    var mergeIntoEmptyLi = function (editor, fromLi, toLi) {\n      editor.dom.$(toLi).empty();\n      mergeLiElements(editor.dom, fromLi, toLi);\n      editor.selection.setCursorLocation(toLi);\n    };\n    var mergeForward = function (editor, rng, fromLi, toLi) {\n      var dom = editor.dom;\n      if (dom.isEmpty(toLi)) {\n        mergeIntoEmptyLi(editor, fromLi, toLi);\n      } else {\n        var bookmark = Bookmark.createBookmark(rng);\n        mergeLiElements(dom, fromLi, toLi);\n        editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n      }\n    };\n    var mergeBackward = function (editor, rng, fromLi, toLi) {\n      var bookmark = Bookmark.createBookmark(rng);\n      mergeLiElements(editor.dom, fromLi, toLi);\n      var resolvedBookmark = Bookmark.resolveBookmark(bookmark);\n      editor.selection.setRng(resolvedBookmark);\n    };\n    var backspaceDeleteFromListToListCaret = function (editor, isForward) {\n      var dom = editor.dom, selection = editor.selection;\n      var selectionStartElm = selection.getStart();\n      var root = Selection.getClosestListRootElm(editor, selectionStartElm);\n      var li = dom.getParent(selection.getStart(), 'LI', root);\n      var ul, rng, otherLi;\n      if (li) {\n        ul = li.parentNode;\n        if (ul === editor.getBody() && NodeType.isEmpty(dom, ul)) {\n          return true;\n        }\n        rng = Range.normalizeRange(selection.getRng(true));\n        otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n        if (otherLi && otherLi !== li) {\n          if (isForward) {\n            mergeForward(editor, rng, otherLi, li);\n          } else {\n            mergeBackward(editor, rng, li, otherLi);\n          }\n          return true;\n        } else if (!otherLi) {\n          if (!isForward) {\n            flattenListSelection(editor);\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n    var removeBlock = function (dom, block, root) {\n      var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);\n      dom.remove(block);\n      if (parentBlock && dom.isEmpty(parentBlock)) {\n        dom.remove(parentBlock);\n      }\n    };\n    var backspaceDeleteIntoListCaret = function (editor, isForward) {\n      var dom = editor.dom;\n      var selectionStartElm = editor.selection.getStart();\n      var root = Selection.getClosestListRootElm(editor, selectionStartElm);\n      var block = dom.getParent(selectionStartElm, dom.isBlock, root);\n      if (block && dom.isEmpty(block)) {\n        var rng = Range.normalizeRange(editor.selection.getRng(true));\n        var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n        if (otherLi_1) {\n          editor.undoManager.transact(function () {\n            removeBlock(dom, block, root);\n            ToggleList.mergeWithAdjacentLists(dom, otherLi_1.parentNode);\n            editor.selection.select(otherLi_1, true);\n            editor.selection.collapse(isForward);\n          });\n          return true;\n        }\n      }\n      return false;\n    };\n    var backspaceDeleteCaret = function (editor, isForward) {\n      return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n    };\n    var backspaceDeleteRange = function (editor) {\n      var selectionStartElm = editor.selection.getStart();\n      var root = Selection.getClosestListRootElm(editor, selectionStartElm);\n      var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n      if (startListParent || Selection.getSelectedListItems(editor).length > 0) {\n        editor.undoManager.transact(function () {\n          editor.execCommand('Delete');\n          NormalizeLists.normalizeLists(editor.dom, editor.getBody());\n        });\n        return true;\n      }\n      return false;\n    };\n    var backspaceDelete = function (editor, isForward) {\n      return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);\n    };\n    var setup = function (editor) {\n      editor.on('keydown', function (e) {\n        if (e.keyCode === global$3.BACKSPACE) {\n          if (backspaceDelete(editor, false)) {\n            e.preventDefault();\n          }\n        } else if (e.keyCode === global$3.DELETE) {\n          if (backspaceDelete(editor, true)) {\n            e.preventDefault();\n          }\n        }\n      });\n    };\n    var Delete = {\n      setup: setup,\n      backspaceDelete: backspaceDelete\n    };\n\n    var get = function (editor) {\n      return {\n        backspaceDelete: function (isForward) {\n          Delete.backspaceDelete(editor, isForward);\n        }\n      };\n    };\n    var Api = { get: get };\n\n    var queryListCommandState = function (editor, listName) {\n      return function () {\n        var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL');\n        return parentList && parentList.nodeName === listName;\n      };\n    };\n    var register = function (editor) {\n      editor.on('BeforeExecCommand', function (e) {\n        var cmd = e.command.toLowerCase();\n        if (cmd === 'indent') {\n          indentListSelection(editor);\n        } else if (cmd === 'outdent') {\n          outdentListSelection(editor);\n        }\n      });\n      editor.addCommand('InsertUnorderedList', function (ui, detail) {\n        ToggleList.toggleList(editor, 'UL', detail);\n      });\n      editor.addCommand('InsertOrderedList', function (ui, detail) {\n        ToggleList.toggleList(editor, 'OL', detail);\n      });\n      editor.addCommand('InsertDefinitionList', function (ui, detail) {\n        ToggleList.toggleList(editor, 'DL', detail);\n      });\n      editor.addCommand('RemoveList', function () {\n        flattenListSelection(editor);\n      });\n      editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n      editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n      editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n    };\n    var Commands = { register: register };\n\n    var shouldIndentOnTab = function (editor) {\n      return editor.getParam('lists_indent_on_tab', true);\n    };\n    var Settings = { shouldIndentOnTab: shouldIndentOnTab };\n\n    var setupTabKey = function (editor) {\n      editor.on('keydown', function (e) {\n        if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) {\n          return;\n        }\n        editor.undoManager.transact(function () {\n          if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {\n            e.preventDefault();\n          }\n        });\n      });\n    };\n    var setup$1 = function (editor) {\n      if (Settings.shouldIndentOnTab(editor)) {\n        setupTabKey(editor);\n      }\n      Delete.setup(editor);\n    };\n    var Keyboard = { setup: setup$1 };\n\n    var findIndex = function (list, predicate) {\n      for (var index = 0; index < list.length; index++) {\n        var element = list[index];\n        if (predicate(element)) {\n          return index;\n        }\n      }\n      return -1;\n    };\n    var listState = function (editor, listName) {\n      return function (e) {\n        var ctrl = e.control;\n        editor.on('NodeChange', function (e) {\n          var tableCellIndex = findIndex(e.parents, NodeType.isTableCellNode);\n          var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;\n          var lists = global$5.grep(parents, NodeType.isListNode);\n          ctrl.active(lists.length > 0 && lists[0].nodeName === listName);\n        });\n      };\n    };\n    var register$1 = function (editor) {\n      var hasPlugin = function (editor, plugin) {\n        var plugins = editor.settings.plugins ? editor.settings.plugins : '';\n        return global$5.inArray(plugins.split(/[ ,]/), plugin) !== -1;\n      };\n      if (!hasPlugin(editor, 'advlist')) {\n        editor.addButton('numlist', {\n          active: false,\n          title: 'Numbered list',\n          cmd: 'InsertOrderedList',\n          onPostRender: listState(editor, 'OL')\n        });\n        editor.addButton('bullist', {\n          active: false,\n          title: 'Bullet list',\n          cmd: 'InsertUnorderedList',\n          onPostRender: listState(editor, 'UL')\n        });\n      }\n      editor.addButton('indent', {\n        icon: 'indent',\n        title: 'Increase indent',\n        cmd: 'Indent'\n      });\n    };\n    var Buttons = { register: register$1 };\n\n    global.add('lists', function (editor) {\n      Keyboard.setup(editor);\n      Buttons.register(editor);\n      Commands.register(editor);\n      return Api.get(editor);\n    });\n    function Plugin () {\n    }\n\n    return Plugin;\n\n}(window));\n})();\n", "//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\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 (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\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 (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\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 (hasOwnProp(obj, 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 (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\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            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\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                len = t.length >>> 0,\n                i;\n\n            for (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        var flags = null,\n            parsedParts = false,\n            isNowValid = m._d && !isNaN(m._d.getTime());\n        if (isNowValid) {\n            flags = getParsingFlags(m);\n            parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            isNowValid =\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidEra &&\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            if (m._strict) {\n                isNowValid =\n                    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        } else {\n            return isNowValid;\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        } 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        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\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 (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; 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    // 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 (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\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                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\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(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\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 (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\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                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            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 (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\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,\n                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    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        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(\n                    func.apply(this, arguments),\n                    token\n                );\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),\n            i,\n            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 = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : 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] =\n            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(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\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\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\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        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        w: 'a week',\n        ww: '%d weeks',\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        D: 'date',\n        dates: 'date',\n        date: 'date',\n        d: 'day',\n        days: 'day',\n        day: 'day',\n        e: 'weekday',\n        weekdays: 'weekday',\n        weekday: 'weekday',\n        E: 'isoWeekday',\n        isoweekdays: 'isoWeekday',\n        isoweekday: 'isoWeekday',\n        DDD: 'dayOfYear',\n        dayofyears: 'dayOfYear',\n        dayofyear: 'dayOfYear',\n        h: 'hour',\n        hours: 'hour',\n        hour: 'hour',\n        ms: 'millisecond',\n        milliseconds: 'millisecond',\n        millisecond: 'millisecond',\n        m: 'minute',\n        minutes: 'minute',\n        minute: 'minute',\n        M: 'month',\n        months: 'month',\n        month: 'month',\n        Q: 'quarter',\n        quarters: 'quarter',\n        quarter: 'quarter',\n        s: 'second',\n        seconds: 'second',\n        second: 'second',\n        gg: 'weekYear',\n        weekyears: 'weekYear',\n        weekyear: 'weekYear',\n        GG: 'isoWeekYear',\n        isoweekyears: 'isoWeekYear',\n        isoweekyear: 'isoWeekYear',\n        w: 'week',\n        weeks: 'week',\n        week: 'week',\n        W: 'isoWeek',\n        isoweeks: 'isoWeek',\n        isoweek: 'isoWeek',\n        y: 'year',\n        years: 'year',\n        year: 'year',\n    };\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : 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        date: 9,\n        day: 11,\n        weekday: 11,\n        isoWeekday: 11,\n        dayOfYear: 4,\n        hour: 13,\n        millisecond: 16,\n        minute: 14,\n        month: 8,\n        quarter: 7,\n        second: 15,\n        weekYear: 1,\n        isoWeekYear: 1,\n        week: 5,\n        isoWeek: 5,\n        year: 1,\n    };\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\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        matchWord =\n            /[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        match1to2NoLeadingZero = /^[1-9]\\d?/, //         1-99\n        match1to2HasZero = /^([1-9]\\d|\\d)/, //           0-99\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : 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(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\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    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\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        tokenLen = token.length;\n        for (i = 0; i < tokenLen; 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    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + 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    // 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] =\n            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    // 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        if (!mom.isValid()) {\n            return NaN;\n        }\n\n        var d = mom._d,\n            isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n            case 'Seconds':\n                return isUTC ? d.getUTCSeconds() : d.getSeconds();\n            case 'Minutes':\n                return isUTC ? d.getUTCMinutes() : d.getMinutes();\n            case 'Hours':\n                return isUTC ? d.getUTCHours() : d.getHours();\n            case 'Date':\n                return isUTC ? d.getUTCDate() : d.getDate();\n            case 'Day':\n                return isUTC ? d.getUTCDay() : d.getDay();\n            case 'Month':\n                return isUTC ? d.getUTCMonth() : d.getMonth();\n            case 'FullYear':\n                return isUTC ? d.getUTCFullYear() : d.getFullYear();\n            default:\n                return NaN; // Just in case\n        }\n    }\n\n    function set$1(mom, unit, value) {\n        var d, isUTC, year, month, date;\n\n        if (!mom.isValid() || isNaN(value)) {\n            return;\n        }\n\n        d = mom._d;\n        isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return void (isUTC\n                    ? d.setUTCMilliseconds(value)\n                    : d.setMilliseconds(value));\n            case 'Seconds':\n                return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n            case 'Minutes':\n                return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n            case 'Hours':\n                return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n            case 'Date':\n                return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n            // case 'Day': // Not real\n            //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n            // case 'Month': // Not used because we need to pass two variables\n            //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n            case 'FullYear':\n                break; // See below ...\n            default:\n                return; // Just in case\n        }\n\n        year = value;\n        month = mom.month();\n        date = mom.date();\n        date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n        void (isUTC\n            ? d.setUTCFullYear(year, month, date)\n            : d.setFullYear(year, month, date));\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    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; 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\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 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    // PARSING\n\n    addRegexToken('M', match1to2, match1to2NoLeadingZero);\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 defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            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(\n                    mom,\n                    ''\n                ).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(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\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        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        var month = value,\n            date = mom.date();\n\n        date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n        void (mom._isUTC\n            ? mom._d.setUTCMonth(month, date)\n            : mom._d.setMonth(month, date));\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    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\n                : this._monthsShortRegex;\n        }\n    }\n\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\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            shortP,\n            longP;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortP = regexEscape(this.monthsShort(mom, ''));\n            longP = regexEscape(this.months(mom, ''));\n            shortPieces.push(shortP);\n            longPieces.push(longP);\n            mixedPieces.push(longP);\n            mixedPieces.push(shortP);\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\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\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, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            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,\n            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,\n            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    // PARSING\n\n    addRegexToken('w', match1to2, match1to2NoLeadingZero);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2, match1to2NoLeadingZero);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\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    // 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 =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n              ? weekdays[m.day()]\n              : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n              ? this._weekdaysShort[m.day()]\n              : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n              ? this._weekdaysMin[m.day()]\n              : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            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(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).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(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\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\n        var day = get(this, 'Day');\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    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\n                : this._weekdaysRegex;\n        }\n    }\n\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\n                : this._weekdaysShortRegex;\n        }\n    }\n\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\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            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 = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(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\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\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 (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\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 (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\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, match1to2HasZero);\n    addRegexToken('h', match1to2, match1to2NoLeadingZero);\n    addRegexToken('k', match1to2, match1to2NoLeadingZero);\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            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            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        // 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        getSetHour = makeGetSet('Hours', true);\n\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    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        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\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,\n            j,\n            next,\n            locale,\n            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 (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\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 isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        // Ensure name is available and function returns boolean\n        return !!(name && name.match('^[^/\\\\\\\\]*$'));\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\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            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\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(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    '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                );\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            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,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\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                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\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            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                      ? DATE\n                      : a[HOUR] < 0 ||\n                          a[HOUR] > 24 ||\n                          (a[HOUR] === 24 &&\n                              (a[MINUTE] !== 0 ||\n                                  a[SECOND] !== 0 ||\n                                  a[MILLISECOND] !== 0))\n                        ? HOUR\n                        : a[MINUTE] < 0 || a[MINUTE] > 59\n                          ? MINUTE\n                          : a[SECOND] < 0 || a[SECOND] > 59\n                            ? SECOND\n                            : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                              ? MILLISECOND\n                              : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\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    // 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 =\n            /^\\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        basicIsoRegex =\n            /^\\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        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        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            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        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        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(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        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    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; 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 = isoTimesLen; 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    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\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\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).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    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                m = hm % 100,\n                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            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\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 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\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        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\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. Please refer to 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    // 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 [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\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,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            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 (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\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] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : 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 (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\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(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\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            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    // 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,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\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(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\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                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\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 =\n            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 (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\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(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\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            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\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                validFormatFound = true;\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 (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\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            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\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 (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\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        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 = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++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 =\n            +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 + 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 + quarters * 3 + 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    // 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 (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\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            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : 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 =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : 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());\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(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\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            } 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            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && 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        // 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        isoRegex =\n            /^(-|\\+)?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) || !isNaN(+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) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\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        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\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 =\n            other.month() - base.month() + (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(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\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        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n              ? 'lastWeek'\n              : diff < 0\n                ? 'lastDay'\n                : diff < 1\n                  ? 'sameDay'\n                  : diff < 2\n                    ? 'nextDay'\n                    : diff < 7\n                      ? 'nextWeek'\n                      : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\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            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\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 (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\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 (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\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, zoneDelta, 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':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\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,\n            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            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\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)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\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            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .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 (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .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        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        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, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        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(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\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(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\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, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        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 =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 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 +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    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 [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\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    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            erasName,\n            erasAbbr,\n            erasNarrow,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            erasName = regexEscape(eras[i].name);\n            erasAbbr = regexEscape(eras[i].abbr);\n            erasNarrow = regexEscape(eras[i].narrow);\n\n            namePieces.push(erasName);\n            abbrPieces.push(erasAbbr);\n            narrowPieces.push(erasNarrow);\n            mixedPieces.push(erasName);\n            mixedPieces.push(erasAbbr);\n            mixedPieces.push(erasNarrow);\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\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    // 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(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\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(\n            this,\n            input,\n            this.week(),\n            this.weekday() + this.localeData()._week.dow,\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 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 getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), 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    // 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\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // PARSING\n\n    addRegexToken('D', match1to2, match1to2NoLeadingZero);\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    // 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 =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 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    // PARSING\n\n    addRegexToken('m', match1to2, match1to2HasZero);\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    // PARSING\n\n    addRegexToken('s', match1to2, match1to2HasZero);\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    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\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\n    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    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\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.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\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(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\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    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\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            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            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            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\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        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\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            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            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 (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\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            months,\n            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':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    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':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y'),\n        valueOf$1 = asMilliseconds;\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        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        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/week\n            w: null, // weeks 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, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (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\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\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(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, 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            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\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        // 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        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\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(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\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) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.30.1';\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", "/*!\n * FullCalendar v3.10.5\n * Docs & License: https://fullcalendar.io/\n * (c) 2019 Adam Shaw\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"moment\"), require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"moment\", \"jquery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FullCalendar\"] = factory(require(\"moment\"), require(\"jquery\"));\n\telse\n\t\troot[\"FullCalendar\"] = factory(root[\"moment\"], root[\"jQuery\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn /******/ (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/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\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.l = 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// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 256);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */,\n/* 2 */\n/***/ (function(module, exports) {\n\n/*\r\nderived from:\r\nhttps://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js\r\n\nonly include the helpers we need, to keep down filesize\r\n*/\r\nvar extendStatics = Object.setPrototypeOf ||\r\n    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n    function (d, b) { for (var p in b)\r\n        if (b.hasOwnProperty(p))\r\n            d[p] = b[p]; };\r\nexports.__extends = function (d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\n/* FullCalendar-specific DOM Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left\r\n// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.\r\nfunction compensateScroll(rowEls, scrollbarWidths) {\r\n    if (scrollbarWidths.left) {\r\n        rowEls.css({\r\n            'border-left-width': 1,\r\n            'margin-left': scrollbarWidths.left - 1\r\n        });\r\n    }\r\n    if (scrollbarWidths.right) {\r\n        rowEls.css({\r\n            'border-right-width': 1,\r\n            'margin-right': scrollbarWidths.right - 1\r\n        });\r\n    }\r\n}\r\nexports.compensateScroll = compensateScroll;\r\n// Undoes compensateScroll and restores all borders/margins\r\nfunction uncompensateScroll(rowEls) {\r\n    rowEls.css({\r\n        'margin-left': '',\r\n        'margin-right': '',\r\n        'border-left-width': '',\r\n        'border-right-width': ''\r\n    });\r\n}\r\nexports.uncompensateScroll = uncompensateScroll;\r\n// Make the mouse cursor express that an event is not allowed in the current area\r\nfunction disableCursor() {\r\n    $('body').addClass('fc-not-allowed');\r\n}\r\nexports.disableCursor = disableCursor;\r\n// Returns the mouse cursor to its original look\r\nfunction enableCursor() {\r\n    $('body').removeClass('fc-not-allowed');\r\n}\r\nexports.enableCursor = enableCursor;\r\n// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.\r\n// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering\r\n// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and\r\n// reduces the available height.\r\nfunction distributeHeight(els, availableHeight, shouldRedistribute) {\r\n    // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,\r\n    // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.\r\n    var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element\r\n    var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*\r\n    var flexEls = []; // elements that are allowed to expand. array of DOM nodes\r\n    var flexOffsets = []; // amount of vertical space it takes up\r\n    var flexHeights = []; // actual css height\r\n    var usedHeight = 0;\r\n    undistributeHeight(els); // give all elements their natural height\r\n    // find elements that are below the recommended height (expandable).\r\n    // important to query for heights in a single first pass (to avoid reflow oscillation).\r\n    els.each(function (i, el) {\r\n        var minOffset = i === els.length - 1 ? minOffset2 : minOffset1;\r\n        var naturalOffset = $(el).outerHeight(true);\r\n        if (naturalOffset < minOffset) {\r\n            flexEls.push(el);\r\n            flexOffsets.push(naturalOffset);\r\n            flexHeights.push($(el).height());\r\n        }\r\n        else {\r\n            // this element stretches past recommended height (non-expandable). mark the space as occupied.\r\n            usedHeight += naturalOffset;\r\n        }\r\n    });\r\n    // readjust the recommended height to only consider the height available to non-maxed-out rows.\r\n    if (shouldRedistribute) {\r\n        availableHeight -= usedHeight;\r\n        minOffset1 = Math.floor(availableHeight / flexEls.length);\r\n        minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*\r\n    }\r\n    // assign heights to all expandable elements\r\n    $(flexEls).each(function (i, el) {\r\n        var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;\r\n        var naturalOffset = flexOffsets[i];\r\n        var naturalHeight = flexHeights[i];\r\n        var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding\r\n        if (naturalOffset < minOffset) { // we check this again because redistribution might have changed things\r\n            $(el).height(newHeight);\r\n        }\r\n    });\r\n}\r\nexports.distributeHeight = distributeHeight;\r\n// Undoes distrubuteHeight, restoring all els to their natural height\r\nfunction undistributeHeight(els) {\r\n    els.height('');\r\n}\r\nexports.undistributeHeight = undistributeHeight;\r\n// Given `els`, a jQuery set of <td> cells, find the cell with the largest natural width and set the widths of all the\r\n// cells to be that width.\r\n// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\r\nfunction matchCellWidths(els) {\r\n    var maxInnerWidth = 0;\r\n    els.find('> *').each(function (i, innerEl) {\r\n        var innerWidth = $(innerEl).outerWidth();\r\n        if (innerWidth > maxInnerWidth) {\r\n            maxInnerWidth = innerWidth;\r\n        }\r\n    });\r\n    maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance\r\n    els.width(maxInnerWidth);\r\n    return maxInnerWidth;\r\n}\r\nexports.matchCellWidths = matchCellWidths;\r\n// Given one element that resides inside another,\r\n// Subtracts the height of the inner element from the outer element.\r\nfunction subtractInnerElHeight(outerEl, innerEl) {\r\n    var both = outerEl.add(innerEl);\r\n    var diff;\r\n    // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\r\n    both.css({\r\n        position: 'relative',\r\n        left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\r\n    });\r\n    diff = outerEl.outerHeight() - innerEl.outerHeight(); // grab the dimensions\r\n    both.css({ position: '', left: '' }); // undo hack\r\n    return diff;\r\n}\r\nexports.subtractInnerElHeight = subtractInnerElHeight;\r\n/* Element Geom Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// borrowed from https://github.com/jquery/jquery-ui/blob/1.11.0/ui/core.js#L51\r\nfunction getScrollParent(el) {\r\n    var position = el.css('position');\r\n    var scrollParent = el.parents().filter(function () {\r\n        var parent = $(this);\r\n        return (/(auto|scroll)/).test(parent.css('overflow') + parent.css('overflow-y') + parent.css('overflow-x'));\r\n    }).eq(0);\r\n    return position === 'fixed' || !scrollParent.length ? $(el[0].ownerDocument || document) : scrollParent;\r\n}\r\nexports.getScrollParent = getScrollParent;\r\n// Queries the outer bounding area of a jQuery element.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\nfunction getOuterRect(el, origin) {\r\n    var offset = el.offset();\r\n    var left = offset.left - (origin ? origin.left : 0);\r\n    var top = offset.top - (origin ? origin.top : 0);\r\n    return {\r\n        left: left,\r\n        right: left + el.outerWidth(),\r\n        top: top,\r\n        bottom: top + el.outerHeight()\r\n    };\r\n}\r\nexports.getOuterRect = getOuterRect;\r\n// Queries the area within the margin/border/scrollbars of a jQuery element. Does not go within the padding.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\n// WARNING: given element can't have borders\r\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\r\nfunction getClientRect(el, origin) {\r\n    var offset = el.offset();\r\n    var scrollbarWidths = getScrollbarWidths(el);\r\n    var left = offset.left + getCssFloat(el, 'border-left-width') + scrollbarWidths.left - (origin ? origin.left : 0);\r\n    var top = offset.top + getCssFloat(el, 'border-top-width') + scrollbarWidths.top - (origin ? origin.top : 0);\r\n    return {\r\n        left: left,\r\n        right: left + el[0].clientWidth,\r\n        top: top,\r\n        bottom: top + el[0].clientHeight // clientHeight includes padding but NOT scrollbars\r\n    };\r\n}\r\nexports.getClientRect = getClientRect;\r\n// Queries the area within the margin/border/padding of a jQuery element. Assumed not to have scrollbars.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\nfunction getContentRect(el, origin) {\r\n    var offset = el.offset(); // just outside of border, margin not included\r\n    var left = offset.left + getCssFloat(el, 'border-left-width') + getCssFloat(el, 'padding-left') -\r\n        (origin ? origin.left : 0);\r\n    var top = offset.top + getCssFloat(el, 'border-top-width') + getCssFloat(el, 'padding-top') -\r\n        (origin ? origin.top : 0);\r\n    return {\r\n        left: left,\r\n        right: left + el.width(),\r\n        top: top,\r\n        bottom: top + el.height()\r\n    };\r\n}\r\nexports.getContentRect = getContentRect;\r\n// Returns the computed left/right/top/bottom scrollbar widths for the given jQuery element.\r\n// WARNING: given element can't have borders (which will cause offsetWidth/offsetHeight to be larger).\r\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\r\nfunction getScrollbarWidths(el) {\r\n    var leftRightWidth = el[0].offsetWidth - el[0].clientWidth;\r\n    var bottomWidth = el[0].offsetHeight - el[0].clientHeight;\r\n    var widths;\r\n    leftRightWidth = sanitizeScrollbarWidth(leftRightWidth);\r\n    bottomWidth = sanitizeScrollbarWidth(bottomWidth);\r\n    widths = { left: 0, right: 0, top: 0, bottom: bottomWidth };\r\n    if (getIsLeftRtlScrollbars() && el.css('direction') === 'rtl') { // is the scrollbar on the left side?\r\n        widths.left = leftRightWidth;\r\n    }\r\n    else {\r\n        widths.right = leftRightWidth;\r\n    }\r\n    return widths;\r\n}\r\nexports.getScrollbarWidths = getScrollbarWidths;\r\n// The scrollbar width computations in getScrollbarWidths are sometimes flawed when it comes to\r\n// retina displays, rounding, and IE11. Massage them into a usable value.\r\nfunction sanitizeScrollbarWidth(width) {\r\n    width = Math.max(0, width); // no negatives\r\n    width = Math.round(width);\r\n    return width;\r\n}\r\n// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side\r\nvar _isLeftRtlScrollbars = null;\r\nfunction getIsLeftRtlScrollbars() {\r\n    if (_isLeftRtlScrollbars === null) {\r\n        _isLeftRtlScrollbars = computeIsLeftRtlScrollbars();\r\n    }\r\n    return _isLeftRtlScrollbars;\r\n}\r\nfunction computeIsLeftRtlScrollbars() {\r\n    var el = $('<div><div></div></div>')\r\n        .css({\r\n        position: 'absolute',\r\n        top: -1000,\r\n        left: 0,\r\n        border: 0,\r\n        padding: 0,\r\n        overflow: 'scroll',\r\n        direction: 'rtl'\r\n    })\r\n        .appendTo('body');\r\n    var innerEl = el.children();\r\n    var res = innerEl.offset().left > el.offset().left; // is the inner div shifted to accommodate a left scrollbar?\r\n    el.remove();\r\n    return res;\r\n}\r\n// Retrieves a jQuery element's computed CSS value as a floating-point number.\r\n// If the queried value is non-numeric (ex: IE can return \"medium\" for border width), will just return zero.\r\nfunction getCssFloat(el, prop) {\r\n    return parseFloat(el.css(prop)) || 0;\r\n}\r\n/* Mouse / Touch Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\r\nfunction isPrimaryMouseButton(ev) {\r\n    return ev.which === 1 && !ev.ctrlKey;\r\n}\r\nexports.isPrimaryMouseButton = isPrimaryMouseButton;\r\nfunction getEvX(ev) {\r\n    var touches = ev.originalEvent.touches;\r\n    // on mobile FF, pageX for touch events is present, but incorrect,\r\n    // so, look at touch coordinates first.\r\n    if (touches && touches.length) {\r\n        return touches[0].pageX;\r\n    }\r\n    return ev.pageX;\r\n}\r\nexports.getEvX = getEvX;\r\nfunction getEvY(ev) {\r\n    var touches = ev.originalEvent.touches;\r\n    // on mobile FF, pageX for touch events is present, but incorrect,\r\n    // so, look at touch coordinates first.\r\n    if (touches && touches.length) {\r\n        return touches[0].pageY;\r\n    }\r\n    return ev.pageY;\r\n}\r\nexports.getEvY = getEvY;\r\nfunction getEvIsTouch(ev) {\r\n    return /^touch/.test(ev.type);\r\n}\r\nexports.getEvIsTouch = getEvIsTouch;\r\nfunction preventSelection(el) {\r\n    el.addClass('fc-unselectable')\r\n        .on('selectstart', preventDefault);\r\n}\r\nexports.preventSelection = preventSelection;\r\nfunction allowSelection(el) {\r\n    el.removeClass('fc-unselectable')\r\n        .off('selectstart', preventDefault);\r\n}\r\nexports.allowSelection = allowSelection;\r\n// Stops a mouse/touch event from doing it's native browser action\r\nfunction preventDefault(ev) {\r\n    ev.preventDefault();\r\n}\r\nexports.preventDefault = preventDefault;\r\n/* General Geometry Utils\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\r\nfunction intersectRects(rect1, rect2) {\r\n    var res = {\r\n        left: Math.max(rect1.left, rect2.left),\r\n        right: Math.min(rect1.right, rect2.right),\r\n        top: Math.max(rect1.top, rect2.top),\r\n        bottom: Math.min(rect1.bottom, rect2.bottom)\r\n    };\r\n    if (res.left < res.right && res.top < res.bottom) {\r\n        return res;\r\n    }\r\n    return false;\r\n}\r\nexports.intersectRects = intersectRects;\r\n// Returns a new point that will have been moved to reside within the given rectangle\r\nfunction constrainPoint(point, rect) {\r\n    return {\r\n        left: Math.min(Math.max(point.left, rect.left), rect.right),\r\n        top: Math.min(Math.max(point.top, rect.top), rect.bottom)\r\n    };\r\n}\r\nexports.constrainPoint = constrainPoint;\r\n// Returns a point that is the center of the given rectangle\r\nfunction getRectCenter(rect) {\r\n    return {\r\n        left: (rect.left + rect.right) / 2,\r\n        top: (rect.top + rect.bottom) / 2\r\n    };\r\n}\r\nexports.getRectCenter = getRectCenter;\r\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\r\nfunction diffPoints(point1, point2) {\r\n    return {\r\n        left: point1.left - point2.left,\r\n        top: point1.top - point2.top\r\n    };\r\n}\r\nexports.diffPoints = diffPoints;\r\n/* Object Ordering by Field\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nfunction parseFieldSpecs(input) {\r\n    var specs = [];\r\n    var tokens = [];\r\n    var i;\r\n    var token;\r\n    if (typeof input === 'string') {\r\n        tokens = input.split(/\\s*,\\s*/);\r\n    }\r\n    else if (typeof input === 'function') {\r\n        tokens = [input];\r\n    }\r\n    else if ($.isArray(input)) {\r\n        tokens = input;\r\n    }\r\n    for (i = 0; i < tokens.length; i++) {\r\n        token = tokens[i];\r\n        if (typeof token === 'string') {\r\n            specs.push(token.charAt(0) === '-' ?\r\n                { field: token.substring(1), order: -1 } :\r\n                { field: token, order: 1 });\r\n        }\r\n        else if (typeof token === 'function') {\r\n            specs.push({ func: token });\r\n        }\r\n    }\r\n    return specs;\r\n}\r\nexports.parseFieldSpecs = parseFieldSpecs;\r\nfunction compareByFieldSpecs(obj1, obj2, fieldSpecs, obj1fallback, obj2fallback) {\r\n    var i;\r\n    var cmp;\r\n    for (i = 0; i < fieldSpecs.length; i++) {\r\n        cmp = compareByFieldSpec(obj1, obj2, fieldSpecs[i], obj1fallback, obj2fallback);\r\n        if (cmp) {\r\n            return cmp;\r\n        }\r\n    }\r\n    return 0;\r\n}\r\nexports.compareByFieldSpecs = compareByFieldSpecs;\r\nfunction compareByFieldSpec(obj1, obj2, fieldSpec, obj1fallback, obj2fallback) {\r\n    if (fieldSpec.func) {\r\n        return fieldSpec.func(obj1, obj2);\r\n    }\r\n    var val1 = obj1[fieldSpec.field];\r\n    var val2 = obj2[fieldSpec.field];\r\n    if (val1 == null && obj1fallback) {\r\n        val1 = obj1fallback[fieldSpec.field];\r\n    }\r\n    if (val2 == null && obj2fallback) {\r\n        val2 = obj2fallback[fieldSpec.field];\r\n    }\r\n    return flexibleCompare(val1, val2) * (fieldSpec.order || 1);\r\n}\r\nexports.compareByFieldSpec = compareByFieldSpec;\r\nfunction flexibleCompare(a, b) {\r\n    if (!a && !b) {\r\n        return 0;\r\n    }\r\n    if (b == null) {\r\n        return -1;\r\n    }\r\n    if (a == null) {\r\n        return 1;\r\n    }\r\n    if ($.type(a) === 'string' || $.type(b) === 'string') {\r\n        return String(a).localeCompare(String(b));\r\n    }\r\n    return a - b;\r\n}\r\nexports.flexibleCompare = flexibleCompare;\r\n/* Date Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nexports.dayIDs = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\r\nexports.unitsDesc = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; // descending\r\n// Diffs the two moments into a Duration where full-days are recorded first, then the remaining time.\r\n// Moments will have their timezones normalized.\r\nfunction diffDayTime(a, b) {\r\n    return moment.duration({\r\n        days: a.clone().stripTime().diff(b.clone().stripTime(), 'days'),\r\n        ms: a.time() - b.time() // time-of-day from day start. disregards timezone\r\n    });\r\n}\r\nexports.diffDayTime = diffDayTime;\r\n// Diffs the two moments via their start-of-day (regardless of timezone). Produces whole-day durations.\r\nfunction diffDay(a, b) {\r\n    return moment.duration({\r\n        days: a.clone().stripTime().diff(b.clone().stripTime(), 'days')\r\n    });\r\n}\r\nexports.diffDay = diffDay;\r\n// Diffs two moments, producing a duration, made of a whole-unit-increment of the given unit. Uses rounding.\r\nfunction diffByUnit(a, b, unit) {\r\n    return moment.duration(Math.round(a.diff(b, unit, true)), // returnFloat=true\r\n    unit);\r\n}\r\nexports.diffByUnit = diffByUnit;\r\n// Computes the unit name of the largest whole-unit period of time.\r\n// For example, 48 hours will be \"days\" whereas 49 hours will be \"hours\".\r\n// Accepts start/end, a range object, or an original duration object.\r\nfunction computeGreatestUnit(start, end) {\r\n    var i;\r\n    var unit;\r\n    var val;\r\n    for (i = 0; i < exports.unitsDesc.length; i++) {\r\n        unit = exports.unitsDesc[i];\r\n        val = computeRangeAs(unit, start, end);\r\n        if (val >= 1 && isInt(val)) {\r\n            break;\r\n        }\r\n    }\r\n    return unit; // will be \"milliseconds\" if nothing else matches\r\n}\r\nexports.computeGreatestUnit = computeGreatestUnit;\r\n// like computeGreatestUnit, but has special abilities to interpret the source input for clues\r\nfunction computeDurationGreatestUnit(duration, durationInput) {\r\n    var unit = computeGreatestUnit(duration);\r\n    // prevent days:7 from being interpreted as a week\r\n    if (unit === 'week' && typeof durationInput === 'object' && durationInput.days) {\r\n        unit = 'day';\r\n    }\r\n    return unit;\r\n}\r\nexports.computeDurationGreatestUnit = computeDurationGreatestUnit;\r\n// Computes the number of units (like \"hours\") in the given range.\r\n// Range can be a {start,end} object, separate start/end args, or a Duration.\r\n// Results are based on Moment's .as() and .diff() methods, so results can depend on internal handling\r\n// of month-diffing logic (which tends to vary from version to version).\r\nfunction computeRangeAs(unit, start, end) {\r\n    if (end != null) { // given start, end\r\n        return end.diff(start, unit, true);\r\n    }\r\n    else if (moment.isDuration(start)) { // given duration\r\n        return start.as(unit);\r\n    }\r\n    else { // given { start, end } range object\r\n        return start.end.diff(start.start, unit, true);\r\n    }\r\n}\r\n// Intelligently divides a range (specified by a start/end params) by a duration\r\nfunction divideRangeByDuration(start, end, dur) {\r\n    var months;\r\n    if (durationHasTime(dur)) {\r\n        return (end - start) / dur;\r\n    }\r\n    months = dur.asMonths();\r\n    if (Math.abs(months) >= 1 && isInt(months)) {\r\n        return end.diff(start, 'months', true) / months;\r\n    }\r\n    return end.diff(start, 'days', true) / dur.asDays();\r\n}\r\nexports.divideRangeByDuration = divideRangeByDuration;\r\n// Intelligently divides one duration by another\r\nfunction divideDurationByDuration(dur1, dur2) {\r\n    var months1;\r\n    var months2;\r\n    if (durationHasTime(dur1) || durationHasTime(dur2)) {\r\n        return dur1 / dur2;\r\n    }\r\n    months1 = dur1.asMonths();\r\n    months2 = dur2.asMonths();\r\n    if (Math.abs(months1) >= 1 && isInt(months1) &&\r\n        Math.abs(months2) >= 1 && isInt(months2)) {\r\n        return months1 / months2;\r\n    }\r\n    return dur1.asDays() / dur2.asDays();\r\n}\r\nexports.divideDurationByDuration = divideDurationByDuration;\r\n// Intelligently multiplies a duration by a number\r\nfunction multiplyDuration(dur, n) {\r\n    var months;\r\n    if (durationHasTime(dur)) {\r\n        return moment.duration(dur * n);\r\n    }\r\n    months = dur.asMonths();\r\n    if (Math.abs(months) >= 1 && isInt(months)) {\r\n        return moment.duration({ months: months * n });\r\n    }\r\n    return moment.duration({ days: dur.asDays() * n });\r\n}\r\nexports.multiplyDuration = multiplyDuration;\r\n// Returns a boolean about whether the given duration has any time parts (hours/minutes/seconds/ms)\r\nfunction durationHasTime(dur) {\r\n    return Boolean(dur.hours() || dur.minutes() || dur.seconds() || dur.milliseconds());\r\n}\r\nexports.durationHasTime = durationHasTime;\r\nfunction isNativeDate(input) {\r\n    return Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;\r\n}\r\nexports.isNativeDate = isNativeDate;\r\n// Returns a boolean about whether the given input is a time string, like \"06:40:00\" or \"06:00\"\r\nfunction isTimeString(str) {\r\n    return typeof str === 'string' &&\r\n        /^\\d+\\:\\d+(?:\\:\\d+\\.?(?:\\d{3})?)?$/.test(str);\r\n}\r\nexports.isTimeString = isTimeString;\r\n/* Logging and Debug\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nfunction log() {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    var console = window.console;\r\n    if (console && console.log) {\r\n        return console.log.apply(console, args);\r\n    }\r\n}\r\nexports.log = log;\r\nfunction warn() {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    var console = window.console;\r\n    if (console && console.warn) {\r\n        return console.warn.apply(console, args);\r\n    }\r\n    else {\r\n        return log.apply(null, args);\r\n    }\r\n}\r\nexports.warn = warn;\r\n/* General Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar hasOwnPropMethod = {}.hasOwnProperty;\r\n// Merges an array of objects into a single object.\r\n// The second argument allows for an array of property names who's object values will be merged together.\r\nfunction mergeProps(propObjs, complexProps) {\r\n    var dest = {};\r\n    var i;\r\n    var name;\r\n    var complexObjs;\r\n    var j;\r\n    var val;\r\n    var props;\r\n    if (complexProps) {\r\n        for (i = 0; i < complexProps.length; i++) {\r\n            name = complexProps[i];\r\n            complexObjs = [];\r\n            // collect the trailing object values, stopping when a non-object is discovered\r\n            for (j = propObjs.length - 1; j >= 0; j--) {\r\n                val = propObjs[j][name];\r\n                if (typeof val === 'object') {\r\n                    complexObjs.unshift(val);\r\n                }\r\n                else if (val !== undefined) {\r\n                    dest[name] = val; // if there were no objects, this value will be used\r\n                    break;\r\n                }\r\n            }\r\n            // if the trailing values were objects, use the merged value\r\n            if (complexObjs.length) {\r\n                dest[name] = mergeProps(complexObjs);\r\n            }\r\n        }\r\n    }\r\n    // copy values into the destination, going from last to first\r\n    for (i = propObjs.length - 1; i >= 0; i--) {\r\n        props = propObjs[i];\r\n        for (name in props) {\r\n            if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\r\n                dest[name] = props[name];\r\n            }\r\n        }\r\n    }\r\n    return dest;\r\n}\r\nexports.mergeProps = mergeProps;\r\nfunction copyOwnProps(src, dest) {\r\n    for (var name_1 in src) {\r\n        if (hasOwnProp(src, name_1)) {\r\n            dest[name_1] = src[name_1];\r\n        }\r\n    }\r\n}\r\nexports.copyOwnProps = copyOwnProps;\r\nfunction hasOwnProp(obj, name) {\r\n    return hasOwnPropMethod.call(obj, name);\r\n}\r\nexports.hasOwnProp = hasOwnProp;\r\nfunction applyAll(functions, thisObj, args) {\r\n    if ($.isFunction(functions)) {\r\n        functions = [functions];\r\n    }\r\n    if (functions) {\r\n        var i = void 0;\r\n        var ret = void 0;\r\n        for (i = 0; i < functions.length; i++) {\r\n            ret = functions[i].apply(thisObj, args) || ret;\r\n        }\r\n        return ret;\r\n    }\r\n}\r\nexports.applyAll = applyAll;\r\nfunction removeMatching(array, testFunc) {\r\n    var removeCnt = 0;\r\n    var i = 0;\r\n    while (i < array.length) {\r\n        if (testFunc(array[i])) { // truthy value means *remove*\r\n            array.splice(i, 1);\r\n            removeCnt++;\r\n        }\r\n        else {\r\n            i++;\r\n        }\r\n    }\r\n    return removeCnt;\r\n}\r\nexports.removeMatching = removeMatching;\r\nfunction removeExact(array, exactVal) {\r\n    var removeCnt = 0;\r\n    var i = 0;\r\n    while (i < array.length) {\r\n        if (array[i] === exactVal) {\r\n            array.splice(i, 1);\r\n            removeCnt++;\r\n        }\r\n        else {\r\n            i++;\r\n        }\r\n    }\r\n    return removeCnt;\r\n}\r\nexports.removeExact = removeExact;\r\nfunction isArraysEqual(a0, a1) {\r\n    var len = a0.length;\r\n    var i;\r\n    if (len == null || len !== a1.length) { // not array? or not same length?\r\n        return false;\r\n    }\r\n    for (i = 0; i < len; i++) {\r\n        if (a0[i] !== a1[i]) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nexports.isArraysEqual = isArraysEqual;\r\nfunction firstDefined() {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    for (var i = 0; i < args.length; i++) {\r\n        if (args[i] !== undefined) {\r\n            return args[i];\r\n        }\r\n    }\r\n}\r\nexports.firstDefined = firstDefined;\r\nfunction htmlEscape(s) {\r\n    return (s + '').replace(/&/g, '&amp;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;')\r\n        .replace(/'/g, '&#039;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/\\n/g, '<br>');\r\n}\r\nexports.htmlEscape = htmlEscape;\r\nfunction stripHtmlEntities(text) {\r\n    return text.replace(/&.*?;/g, '');\r\n}\r\nexports.stripHtmlEntities = stripHtmlEntities;\r\n// Given a hash of CSS properties, returns a string of CSS.\r\n// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.\r\nfunction cssToStr(cssProps) {\r\n    var statements = [];\r\n    $.each(cssProps, function (name, val) {\r\n        if (val != null) {\r\n            statements.push(name + ':' + val);\r\n        }\r\n    });\r\n    return statements.join(';');\r\n}\r\nexports.cssToStr = cssToStr;\r\n// Given an object hash of HTML attribute names to values,\r\n// generates a string that can be injected between < > in HTML\r\nfunction attrsToStr(attrs) {\r\n    var parts = [];\r\n    $.each(attrs, function (name, val) {\r\n        if (val != null) {\r\n            parts.push(name + '=\"' + htmlEscape(val) + '\"');\r\n        }\r\n    });\r\n    return parts.join(' ');\r\n}\r\nexports.attrsToStr = attrsToStr;\r\nfunction capitaliseFirstLetter(str) {\r\n    return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\nexports.capitaliseFirstLetter = capitaliseFirstLetter;\r\nfunction compareNumbers(a, b) {\r\n    return a - b;\r\n}\r\nexports.compareNumbers = compareNumbers;\r\nfunction isInt(n) {\r\n    return n % 1 === 0;\r\n}\r\nexports.isInt = isInt;\r\n// Returns a method bound to the given object context.\r\n// Just like one of the jQuery.proxy signatures, but without the undesired behavior of treating the same method with\r\n// different contexts as identical when binding/unbinding events.\r\nfunction proxy(obj, methodName) {\r\n    var method = obj[methodName];\r\n    return function () {\r\n        return method.apply(obj, arguments);\r\n    };\r\n}\r\nexports.proxy = proxy;\r\n// Returns a function, that, as long as it continues to be invoked, will not\r\n// be triggered. The function will be called after it stops being called for\r\n// N milliseconds. If `immediate` is passed, trigger the function on the\r\n// leading edge, instead of the trailing.\r\n// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\r\nfunction debounce(func, wait, immediate) {\r\n    if (immediate === void 0) { immediate = false; }\r\n    var timeout;\r\n    var args;\r\n    var context;\r\n    var timestamp;\r\n    var result;\r\n    var later = function () {\r\n        var last = +new Date() - timestamp;\r\n        if (last < wait) {\r\n            timeout = setTimeout(later, wait - last);\r\n        }\r\n        else {\r\n            timeout = null;\r\n            if (!immediate) {\r\n                result = func.apply(context, args);\r\n                context = args = null;\r\n            }\r\n        }\r\n    };\r\n    return function () {\r\n        context = this;\r\n        args = arguments;\r\n        timestamp = +new Date();\r\n        var callNow = immediate && !timeout;\r\n        if (!timeout) {\r\n            timeout = setTimeout(later, wait);\r\n        }\r\n        if (callNow) {\r\n            result = func.apply(context, args);\r\n            context = args = null;\r\n        }\r\n        return result;\r\n    };\r\n}\r\nexports.debounce = debounce;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar UnzonedRange = /** @class */ (function () {\r\n    function UnzonedRange(startInput, endInput) {\r\n        // TODO: move these into footprint.\r\n        // Especially, doesn't make sense for null startMs/endMs.\r\n        this.isStart = true;\r\n        this.isEnd = true;\r\n        if (moment.isMoment(startInput)) {\r\n            startInput = startInput.clone().stripZone();\r\n        }\r\n        if (moment.isMoment(endInput)) {\r\n            endInput = endInput.clone().stripZone();\r\n        }\r\n        if (startInput) {\r\n            this.startMs = startInput.valueOf();\r\n        }\r\n        if (endInput) {\r\n            this.endMs = endInput.valueOf();\r\n        }\r\n    }\r\n    /*\r\n    SIDEEFFECT: will mutate eventRanges.\r\n    Will return a new array result.\r\n    Only works for non-open-ended ranges.\r\n    */\r\n    UnzonedRange.invertRanges = function (ranges, constraintRange) {\r\n        var invertedRanges = [];\r\n        var startMs = constraintRange.startMs; // the end of the previous range. the start of the new range\r\n        var i;\r\n        var dateRange;\r\n        // ranges need to be in order. required for our date-walking algorithm\r\n        ranges.sort(compareUnzonedRanges);\r\n        for (i = 0; i < ranges.length; i++) {\r\n            dateRange = ranges[i];\r\n            // add the span of time before the event (if there is any)\r\n            if (dateRange.startMs > startMs) { // compare millisecond time (skip any ambig logic)\r\n                invertedRanges.push(new UnzonedRange(startMs, dateRange.startMs));\r\n            }\r\n            if (dateRange.endMs > startMs) {\r\n                startMs = dateRange.endMs;\r\n            }\r\n        }\r\n        // add the span of time after the last event (if there is any)\r\n        if (startMs < constraintRange.endMs) { // compare millisecond time (skip any ambig logic)\r\n            invertedRanges.push(new UnzonedRange(startMs, constraintRange.endMs));\r\n        }\r\n        return invertedRanges;\r\n    };\r\n    UnzonedRange.prototype.intersect = function (otherRange) {\r\n        var startMs = this.startMs;\r\n        var endMs = this.endMs;\r\n        var newRange = null;\r\n        if (otherRange.startMs != null) {\r\n            if (startMs == null) {\r\n                startMs = otherRange.startMs;\r\n            }\r\n            else {\r\n                startMs = Math.max(startMs, otherRange.startMs);\r\n            }\r\n        }\r\n        if (otherRange.endMs != null) {\r\n            if (endMs == null) {\r\n                endMs = otherRange.endMs;\r\n            }\r\n            else {\r\n                endMs = Math.min(endMs, otherRange.endMs);\r\n            }\r\n        }\r\n        if (startMs == null || endMs == null || startMs < endMs) {\r\n            newRange = new UnzonedRange(startMs, endMs);\r\n            newRange.isStart = this.isStart && startMs === this.startMs;\r\n            newRange.isEnd = this.isEnd && endMs === this.endMs;\r\n        }\r\n        return newRange;\r\n    };\r\n    UnzonedRange.prototype.intersectsWith = function (otherRange) {\r\n        return (this.endMs == null || otherRange.startMs == null || this.endMs > otherRange.startMs) &&\r\n            (this.startMs == null || otherRange.endMs == null || this.startMs < otherRange.endMs);\r\n    };\r\n    UnzonedRange.prototype.containsRange = function (innerRange) {\r\n        return (this.startMs == null || (innerRange.startMs != null && innerRange.startMs >= this.startMs)) &&\r\n            (this.endMs == null || (innerRange.endMs != null && innerRange.endMs <= this.endMs));\r\n    };\r\n    // `date` can be a moment, a Date, or a millisecond time.\r\n    UnzonedRange.prototype.containsDate = function (date) {\r\n        var ms = date.valueOf();\r\n        return (this.startMs == null || ms >= this.startMs) &&\r\n            (this.endMs == null || ms < this.endMs);\r\n    };\r\n    // If the given date is not within the given range, move it inside.\r\n    // (If it's past the end, make it one millisecond before the end).\r\n    // `date` can be a moment, a Date, or a millisecond time.\r\n    // Returns a MS-time.\r\n    UnzonedRange.prototype.constrainDate = function (date) {\r\n        var ms = date.valueOf();\r\n        if (this.startMs != null && ms < this.startMs) {\r\n            ms = this.startMs;\r\n        }\r\n        if (this.endMs != null && ms >= this.endMs) {\r\n            ms = this.endMs - 1;\r\n        }\r\n        return ms;\r\n    };\r\n    UnzonedRange.prototype.equals = function (otherRange) {\r\n        return this.startMs === otherRange.startMs && this.endMs === otherRange.endMs;\r\n    };\r\n    UnzonedRange.prototype.clone = function () {\r\n        var range = new UnzonedRange(this.startMs, this.endMs);\r\n        range.isStart = this.isStart;\r\n        range.isEnd = this.isEnd;\r\n        return range;\r\n    };\r\n    // Returns an ambig-zoned moment from startMs.\r\n    // BEWARE: returned moment is not localized.\r\n    // Formatting and start-of-week will be default.\r\n    UnzonedRange.prototype.getStart = function () {\r\n        if (this.startMs != null) {\r\n            return moment_ext_1.default.utc(this.startMs).stripZone();\r\n        }\r\n        return null;\r\n    };\r\n    // Returns an ambig-zoned moment from startMs.\r\n    // BEWARE: returned moment is not localized.\r\n    // Formatting and start-of-week will be default.\r\n    UnzonedRange.prototype.getEnd = function () {\r\n        if (this.endMs != null) {\r\n            return moment_ext_1.default.utc(this.endMs).stripZone();\r\n        }\r\n        return null;\r\n    };\r\n    UnzonedRange.prototype.as = function (unit) {\r\n        return moment.utc(this.endMs).diff(moment.utc(this.startMs), unit, true);\r\n    };\r\n    return UnzonedRange;\r\n}());\r\nexports.default = UnzonedRange;\r\n/*\r\nOnly works for non-open-ended ranges.\r\n*/\r\nfunction compareUnzonedRanges(range1, range2) {\r\n    return range1.startMs - range2.startMs; // earlier ranges go first\r\n}\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nvar Class_1 = __webpack_require__(35);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar EventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventSource, _super);\r\n    // can we do away with calendar? at least for the abstract?\r\n    // useful for buildEventDef\r\n    function EventSource(calendar) {\r\n        var _this = _super.call(this) || this;\r\n        _this.calendar = calendar;\r\n        _this.className = [];\r\n        _this.uid = String(EventSource.uuid++);\r\n        return _this;\r\n    }\r\n    /*\r\n    rawInput can be any data type!\r\n    */\r\n    EventSource.parse = function (rawInput, calendar) {\r\n        var source = new this(calendar);\r\n        if (typeof rawInput === 'object') {\r\n            if (source.applyProps(rawInput)) {\r\n                return source;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    EventSource.normalizeId = function (id) {\r\n        if (id) {\r\n            return String(id);\r\n        }\r\n        return null;\r\n    };\r\n    EventSource.prototype.fetch = function (start, end, timezone) {\r\n        // subclasses must implement. must return a promise.\r\n    };\r\n    EventSource.prototype.removeEventDefsById = function (eventDefId) {\r\n        // optional for subclasses to implement\r\n    };\r\n    EventSource.prototype.removeAllEventDefs = function () {\r\n        // optional for subclasses to implement\r\n    };\r\n    /*\r\n    For compairing/matching\r\n    */\r\n    EventSource.prototype.getPrimitive = function (otherSource) {\r\n        // subclasses must implement\r\n    };\r\n    EventSource.prototype.parseEventDefs = function (rawEventDefs) {\r\n        var i;\r\n        var eventDef;\r\n        var eventDefs = [];\r\n        for (i = 0; i < rawEventDefs.length; i++) {\r\n            eventDef = this.parseEventDef(rawEventDefs[i]);\r\n            if (eventDef) {\r\n                eventDefs.push(eventDef);\r\n            }\r\n        }\r\n        return eventDefs;\r\n    };\r\n    EventSource.prototype.parseEventDef = function (rawInput) {\r\n        var calendarTransform = this.calendar.opt('eventDataTransform');\r\n        var sourceTransform = this.eventDataTransform;\r\n        if (calendarTransform) {\r\n            rawInput = calendarTransform(rawInput, this.calendar);\r\n        }\r\n        if (sourceTransform) {\r\n            rawInput = sourceTransform(rawInput, this.calendar);\r\n        }\r\n        return EventDefParser_1.default.parse(rawInput, this);\r\n    };\r\n    EventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n        if (rawProps.id != null) {\r\n            this.id = EventSource.normalizeId(rawProps.id);\r\n        }\r\n        // TODO: converge with EventDef\r\n        if ($.isArray(rawProps.className)) {\r\n            this.className = rawProps.className;\r\n        }\r\n        else if (typeof rawProps.className === 'string') {\r\n            this.className = rawProps.className.split(/\\s+/);\r\n        }\r\n        return true;\r\n    };\r\n    EventSource.uuid = 0;\r\n    EventSource.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;\r\n    EventSource.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;\r\n    return EventSource;\r\n}(Class_1.default));\r\nexports.default = EventSource;\r\nParsableModelMixin_1.default.mixInto(EventSource);\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nEventSource.defineStandardProps({\r\n    // manually process...\r\n    id: false,\r\n    className: false,\r\n    // automatically transfer...\r\n    color: true,\r\n    backgroundColor: true,\r\n    borderColor: true,\r\n    textColor: true,\r\n    editable: true,\r\n    startEditable: true,\r\n    durationEditable: true,\r\n    rendering: true,\r\n    overlap: true,\r\n    constraint: true,\r\n    allDayDefault: true,\r\n    eventDataTransform: true\r\n});\r\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUtility methods for easily listening to events on another object,\r\nand more importantly, easily unlistening from them.\r\n\nUSAGE:\r\n  import { default as ListenerMixin, ListenerInterface } from './ListenerMixin'\r\nin class:\r\n  listenTo: ListenerInterface['listenTo']\r\n  stopListeningTo: ListenerInterface['stopListeningTo']\r\nafter class:\r\n  ListenerMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar guid = 0;\r\nvar ListenerMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListenerMixin, _super);\r\n    function ListenerMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /*\r\n    Given an `other` object that has on/off methods, bind the given `callback` to an event by the given name.\r\n    The `callback` will be called with the `this` context of the object that .listenTo is being called on.\r\n    Can be called:\r\n      .listenTo(other, eventName, callback)\r\n    OR\r\n      .listenTo(other, {\r\n        eventName1: callback1,\r\n        eventName2: callback2\r\n      })\r\n    */\r\n    ListenerMixin.prototype.listenTo = function (other, arg, callback) {\r\n        if (typeof arg === 'object') { // given dictionary of callbacks\r\n            for (var eventName in arg) {\r\n                if (arg.hasOwnProperty(eventName)) {\r\n                    this.listenTo(other, eventName, arg[eventName]);\r\n                }\r\n            }\r\n        }\r\n        else if (typeof arg === 'string') {\r\n            other.on(arg + '.' + this.getListenerNamespace(), // use event namespacing to identify this object\r\n            $.proxy(callback, this) // always use `this` context\r\n            // the usually-undesired jQuery guid behavior doesn't matter,\r\n            // because we always unbind via namespace\r\n            );\r\n        }\r\n    };\r\n    /*\r\n    Causes the current object to stop listening to events on the `other` object.\r\n    `eventName` is optional. If omitted, will stop listening to ALL events on `other`.\r\n    */\r\n    ListenerMixin.prototype.stopListeningTo = function (other, eventName) {\r\n        other.off((eventName || '') + '.' + this.getListenerNamespace());\r\n    };\r\n    /*\r\n    Returns a string, unique to this object, to be used for event namespacing\r\n    */\r\n    ListenerMixin.prototype.getListenerNamespace = function () {\r\n        if (this.listenerId == null) {\r\n            this.listenerId = guid++;\r\n        }\r\n        return '_listener' + this.listenerId;\r\n    };\r\n    return ListenerMixin;\r\n}(Mixin_1.default));\r\nexports.default = ListenerMixin;\r\n\n\n/***/ }),\n/* 8 */,\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventInstance_1 = __webpack_require__(53);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar SingleEventDef = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SingleEventDef, _super);\r\n    function SingleEventDef() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /*\r\n    Will receive start/end params, but will be ignored.\r\n    */\r\n    SingleEventDef.prototype.buildInstances = function () {\r\n        return [this.buildInstance()];\r\n    };\r\n    SingleEventDef.prototype.buildInstance = function () {\r\n        return new EventInstance_1.default(this, // definition\r\n        this.dateProfile);\r\n    };\r\n    SingleEventDef.prototype.isAllDay = function () {\r\n        return this.dateProfile.isAllDay();\r\n    };\r\n    SingleEventDef.prototype.clone = function () {\r\n        var def = _super.prototype.clone.call(this);\r\n        def.dateProfile = this.dateProfile;\r\n        return def;\r\n    };\r\n    SingleEventDef.prototype.rezone = function () {\r\n        var calendar = this.source.calendar;\r\n        var dateProfile = this.dateProfile;\r\n        this.dateProfile = new EventDateProfile_1.default(calendar.moment(dateProfile.start), dateProfile.end ? calendar.moment(dateProfile.end) : null, calendar);\r\n    };\r\n    /*\r\n    NOTE: if super-method fails, should still attempt to apply\r\n    */\r\n    SingleEventDef.prototype.applyManualStandardProps = function (rawProps) {\r\n        var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n        var dateProfile = EventDateProfile_1.default.parse(rawProps, this.source); // returns null on failure\r\n        if (dateProfile) {\r\n            this.dateProfile = dateProfile;\r\n            // make sure `date` shows up in the legacy event objects as-is\r\n            if (rawProps.date != null) {\r\n                this.miscProps.date = rawProps.date;\r\n            }\r\n            return superSuccess;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    };\r\n    return SingleEventDef;\r\n}(EventDef_1.default));\r\nexports.default = SingleEventDef;\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nSingleEventDef.defineStandardProps({\r\n    start: false,\r\n    date: false,\r\n    end: false,\r\n    allDay: false\r\n});\r\n\n\n/***/ }),\n/* 10 */,\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ambigDateOfMonthRegex = /^\\s*\\d{4}-\\d\\d$/;\r\nvar ambigTimeOrZoneRegex = /^\\s*\\d{4}-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?)?$/;\r\nvar newMomentProto = moment.fn; // where we will attach our new methods\r\nexports.newMomentProto = newMomentProto;\r\nvar oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods\r\nexports.oldMomentProto = oldMomentProto;\r\n// tell momentjs to transfer these properties upon clone\r\nvar momentProperties = moment.momentProperties;\r\nmomentProperties.push('_fullCalendar');\r\nmomentProperties.push('_ambigTime');\r\nmomentProperties.push('_ambigZone');\r\n/*\r\nCall this if you want Moment's original format method to be used\r\n*/\r\nfunction oldMomentFormat(mom, formatStr) {\r\n    return oldMomentProto.format.call(mom, formatStr); // oldMomentProto defined in moment-ext.js\r\n}\r\nexports.oldMomentFormat = oldMomentFormat;\r\n// Creating\r\n// -------------------------------------------------------------------------------------------------\r\n// Creates a new moment, similar to the vanilla moment(...) constructor, but with\r\n// extra features (ambiguous time, enhanced formatting). When given an existing moment,\r\n// it will function as a clone (and retain the zone of the moment). Anything else will\r\n// result in a moment in the local zone.\r\nvar momentExt = function () {\r\n    return makeMoment(arguments);\r\n};\r\nexports.default = momentExt;\r\n// Sames as momentExt, but forces the resulting moment to be in the UTC timezone.\r\nmomentExt.utc = function () {\r\n    var mom = makeMoment(arguments, true);\r\n    // Force it into UTC because makeMoment doesn't guarantee it\r\n    // (if given a pre-existing moment for example)\r\n    if (mom.hasTime()) { // don't give ambiguously-timed moments a UTC zone\r\n        mom.utc();\r\n    }\r\n    return mom;\r\n};\r\n// Same as momentExt, but when given an ISO8601 string, the timezone offset is preserved.\r\n// ISO8601 strings with no timezone offset will become ambiguously zoned.\r\nmomentExt.parseZone = function () {\r\n    return makeMoment(arguments, true, true);\r\n};\r\n// Builds an enhanced moment from args. When given an existing moment, it clones. When given a\r\n// native Date, or called with no arguments (the current time), the resulting moment will be local.\r\n// Anything else needs to be \"parsed\" (a string or an array), and will be affected by:\r\n//    parseAsUTC - if there is no zone information, should we parse the input in UTC?\r\n//    parseZone - if there is zone information, should we force the zone of the moment?\r\nfunction makeMoment(args, parseAsUTC, parseZone) {\r\n    if (parseAsUTC === void 0) { parseAsUTC = false; }\r\n    if (parseZone === void 0) { parseZone = false; }\r\n    var input = args[0];\r\n    var isSingleString = args.length === 1 && typeof input === 'string';\r\n    var isAmbigTime;\r\n    var isAmbigZone;\r\n    var ambigMatch;\r\n    var mom;\r\n    if (moment.isMoment(input) || util_1.isNativeDate(input) || input === undefined) {\r\n        mom = moment.apply(null, args);\r\n    }\r\n    else { // \"parsing\" is required\r\n        isAmbigTime = false;\r\n        isAmbigZone = false;\r\n        if (isSingleString) {\r\n            if (ambigDateOfMonthRegex.test(input)) {\r\n                // accept strings like '2014-05', but convert to the first of the month\r\n                input += '-01';\r\n                args = [input]; // for when we pass it on to moment's constructor\r\n                isAmbigTime = true;\r\n                isAmbigZone = true;\r\n            }\r\n            else if ((ambigMatch = ambigTimeOrZoneRegex.exec(input))) {\r\n                isAmbigTime = !ambigMatch[5]; // no time part?\r\n                isAmbigZone = true;\r\n            }\r\n        }\r\n        else if ($.isArray(input)) {\r\n            // arrays have no timezone information, so assume ambiguous zone\r\n            isAmbigZone = true;\r\n        }\r\n        // otherwise, probably a string with a format\r\n        if (parseAsUTC || isAmbigTime) {\r\n            mom = moment.utc.apply(moment, args);\r\n        }\r\n        else {\r\n            mom = moment.apply(null, args);\r\n        }\r\n        if (isAmbigTime) {\r\n            mom._ambigTime = true;\r\n            mom._ambigZone = true; // ambiguous time always means ambiguous zone\r\n        }\r\n        else if (parseZone) { // let's record the inputted zone somehow\r\n            if (isAmbigZone) {\r\n                mom._ambigZone = true;\r\n            }\r\n            else if (isSingleString) {\r\n                mom.utcOffset(input); // if not a valid zone, will assign UTC\r\n            }\r\n        }\r\n    }\r\n    mom._fullCalendar = true; // flag for extended functionality\r\n    return mom;\r\n}\r\n// Week Number\r\n// -------------------------------------------------------------------------------------------------\r\n// Returns the week number, considering the locale's custom week number calcuation\r\n// `weeks` is an alias for `week`\r\nnewMomentProto.week = newMomentProto.weeks = function (input) {\r\n    var weekCalc = this._locale._fullCalendar_weekCalc;\r\n    if (input == null && typeof weekCalc === 'function') { // custom function only works for getter\r\n        return weekCalc(this);\r\n    }\r\n    else if (weekCalc === 'ISO') {\r\n        return oldMomentProto.isoWeek.apply(this, arguments); // ISO getter/setter\r\n    }\r\n    return oldMomentProto.week.apply(this, arguments); // local getter/setter\r\n};\r\n// Time-of-day\r\n// -------------------------------------------------------------------------------------------------\r\n// GETTER\r\n// Returns a Duration with the hours/minutes/seconds/ms values of the moment.\r\n// If the moment has an ambiguous time, a duration of 00:00 will be returned.\r\n//\r\n// SETTER\r\n// You can supply a Duration, a Moment, or a Duration-like argument.\r\n// When setting the time, and the moment has an ambiguous time, it then becomes unambiguous.\r\nnewMomentProto.time = function (time) {\r\n    // Fallback to the original method (if there is one) if this moment wasn't created via FullCalendar.\r\n    // `time` is a generic enough method name where this precaution is necessary to avoid collisions w/ other plugins.\r\n    if (!this._fullCalendar) {\r\n        return oldMomentProto.time.apply(this, arguments);\r\n    }\r\n    if (time == null) { // getter\r\n        return moment.duration({\r\n            hours: this.hours(),\r\n            minutes: this.minutes(),\r\n            seconds: this.seconds(),\r\n            milliseconds: this.milliseconds()\r\n        });\r\n    }\r\n    else { // setter\r\n        this._ambigTime = false; // mark that the moment now has a time\r\n        if (!moment.isDuration(time) && !moment.isMoment(time)) {\r\n            time = moment.duration(time);\r\n        }\r\n        // The day value should cause overflow (so 24 hours becomes 00:00:00 of next day).\r\n        // Only for Duration times, not Moment times.\r\n        var dayHours = 0;\r\n        if (moment.isDuration(time)) {\r\n            dayHours = Math.floor(time.asDays()) * 24;\r\n        }\r\n        // We need to set the individual fields.\r\n        // Can't use startOf('day') then add duration. In case of DST at start of day.\r\n        return this.hours(dayHours + time.hours())\r\n            .minutes(time.minutes())\r\n            .seconds(time.seconds())\r\n            .milliseconds(time.milliseconds());\r\n    }\r\n};\r\n// Converts the moment to UTC, stripping out its time-of-day and timezone offset,\r\n// but preserving its YMD. A moment with a stripped time will display no time\r\n// nor timezone offset when .format() is called.\r\nnewMomentProto.stripTime = function () {\r\n    if (!this._ambigTime) {\r\n        this.utc(true); // keepLocalTime=true (for keeping *date* value)\r\n        // set time to zero\r\n        this.set({\r\n            hours: 0,\r\n            minutes: 0,\r\n            seconds: 0,\r\n            ms: 0\r\n        });\r\n        // Mark the time as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\r\n        // which clears all ambig flags.\r\n        this._ambigTime = true;\r\n        this._ambigZone = true; // if ambiguous time, also ambiguous timezone offset\r\n    }\r\n    return this; // for chaining\r\n};\r\n// Returns if the moment has a non-ambiguous time (boolean)\r\nnewMomentProto.hasTime = function () {\r\n    return !this._ambigTime;\r\n};\r\n// Timezone\r\n// -------------------------------------------------------------------------------------------------\r\n// Converts the moment to UTC, stripping out its timezone offset, but preserving its\r\n// YMD and time-of-day. A moment with a stripped timezone offset will display no\r\n// timezone offset when .format() is called.\r\nnewMomentProto.stripZone = function () {\r\n    var wasAmbigTime;\r\n    if (!this._ambigZone) {\r\n        wasAmbigTime = this._ambigTime;\r\n        this.utc(true); // keepLocalTime=true (for keeping date and time values)\r\n        // the above call to .utc()/.utcOffset() unfortunately might clear the ambig flags, so restore\r\n        this._ambigTime = wasAmbigTime || false;\r\n        // Mark the zone as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\r\n        // which clears the ambig flags.\r\n        this._ambigZone = true;\r\n    }\r\n    return this; // for chaining\r\n};\r\n// Returns of the moment has a non-ambiguous timezone offset (boolean)\r\nnewMomentProto.hasZone = function () {\r\n    return !this._ambigZone;\r\n};\r\n// implicitly marks a zone\r\nnewMomentProto.local = function (keepLocalTime) {\r\n    // for when converting from ambiguously-zoned to local,\r\n    // keep the time values when converting from UTC -> local\r\n    oldMomentProto.local.call(this, this._ambigZone || keepLocalTime);\r\n    // ensure non-ambiguous\r\n    // this probably already happened via local() -> utcOffset(), but don't rely on Moment's internals\r\n    this._ambigTime = false;\r\n    this._ambigZone = false;\r\n    return this; // for chaining\r\n};\r\n// implicitly marks a zone\r\nnewMomentProto.utc = function (keepLocalTime) {\r\n    oldMomentProto.utc.call(this, keepLocalTime);\r\n    // ensure non-ambiguous\r\n    // this probably already happened via utc() -> utcOffset(), but don't rely on Moment's internals\r\n    this._ambigTime = false;\r\n    this._ambigZone = false;\r\n    return this;\r\n};\r\n// implicitly marks a zone (will probably get called upon .utc() and .local())\r\nnewMomentProto.utcOffset = function (tzo) {\r\n    if (tzo != null) { // setter\r\n        // these assignments needs to happen before the original zone method is called.\r\n        // I forget why, something to do with a browser crash.\r\n        this._ambigTime = false;\r\n        this._ambigZone = false;\r\n    }\r\n    return oldMomentProto.utcOffset.apply(this, arguments);\r\n};\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*\r\nMeant to be immutable\r\n*/\r\nvar ComponentFootprint = /** @class */ (function () {\r\n    function ComponentFootprint(unzonedRange, isAllDay) {\r\n        this.isAllDay = false; // component can choose to ignore this\r\n        this.unzonedRange = unzonedRange;\r\n        this.isAllDay = isAllDay;\r\n    }\r\n    /*\r\n    Only works for non-open-ended ranges.\r\n    */\r\n    ComponentFootprint.prototype.toLegacy = function (calendar) {\r\n        return {\r\n            start: calendar.msToMoment(this.unzonedRange.startMs, this.isAllDay),\r\n            end: calendar.msToMoment(this.unzonedRange.endMs, this.isAllDay)\r\n        };\r\n    };\r\n    return ComponentFootprint;\r\n}());\r\nexports.default = ComponentFootprint;\r\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUSAGE:\r\n  import { default as EmitterMixin, EmitterInterface } from './EmitterMixin'\r\nin class:\r\n  on: EmitterInterface['on']\r\n  one: EmitterInterface['one']\r\n  off: EmitterInterface['off']\r\n  trigger: EmitterInterface['trigger']\r\n  triggerWith: EmitterInterface['triggerWith']\r\n  hasHandlers: EmitterInterface['hasHandlers']\r\nafter class:\r\n  EmitterMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar EmitterMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EmitterMixin, _super);\r\n    function EmitterMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // jQuery-ification via $(this) allows a non-DOM object to have\r\n    // the same event handling capabilities (including namespaces).\r\n    EmitterMixin.prototype.on = function (types, handler) {\r\n        $(this).on(types, this._prepareIntercept(handler));\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.one = function (types, handler) {\r\n        $(this).one(types, this._prepareIntercept(handler));\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype._prepareIntercept = function (handler) {\r\n        // handlers are always called with an \"event\" object as their first param.\r\n        // sneak the `this` context and arguments into the extra parameter object\r\n        // and forward them on to the original handler.\r\n        var intercept = function (ev, extra) {\r\n            return handler.apply(extra.context || this, extra.args || []);\r\n        };\r\n        // mimick jQuery's internal \"proxy\" system (risky, I know)\r\n        // causing all functions with the same .guid to appear to be the same.\r\n        // https://github.com/jquery/jquery/blob/2.2.4/src/core.js#L448\r\n        // this is needed for calling .off with the original non-intercept handler.\r\n        if (!handler.guid) {\r\n            handler.guid = $.guid++;\r\n        }\r\n        intercept.guid = handler.guid;\r\n        return intercept;\r\n    };\r\n    EmitterMixin.prototype.off = function (types, handler) {\r\n        $(this).off(types, handler);\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.trigger = function (types) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        // pass in \"extra\" info to the intercept\r\n        $(this).triggerHandler(types, { args: args });\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.triggerWith = function (types, context, args) {\r\n        // `triggerHandler` is less reliant on the DOM compared to `trigger`.\r\n        // pass in \"extra\" info to the intercept.\r\n        $(this).triggerHandler(types, { context: context, args: args });\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.hasHandlers = function (type) {\r\n        var hash = $._data(this, 'events'); // http://blog.jquery.com/2012/08/09/jquery-1-8-released/\r\n        return hash && hash[type] && hash[type].length > 0;\r\n    };\r\n    return EmitterMixin;\r\n}(Mixin_1.default));\r\nexports.default = EmitterMixin;\r\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Interaction = /** @class */ (function () {\r\n    function Interaction(component) {\r\n        this.view = component._getView();\r\n        this.component = component;\r\n    }\r\n    Interaction.prototype.opt = function (name) {\r\n        return this.view.opt(name);\r\n    };\r\n    Interaction.prototype.end = function () {\r\n        // subclasses can implement\r\n    };\r\n    return Interaction;\r\n}());\r\nexports.default = Interaction;\r\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Mixin = /** @class */ (function () {\r\n    function Mixin() {\r\n    }\r\n    Mixin.mixInto = function (destClass) {\r\n        var _this = this;\r\n        Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\r\n            if (!destClass.prototype[name]) { // if destination class doesn't already define it\r\n                destClass.prototype[name] = _this.prototype[name];\r\n            }\r\n        });\r\n    };\r\n    /*\r\n    will override existing methods\r\n    TODO: remove! not used anymore\r\n    */\r\n    Mixin.mixOver = function (destClass) {\r\n        var _this = this;\r\n        Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\r\n            destClass.prototype[name] = _this.prototype[name];\r\n        });\r\n    };\r\n    return Mixin;\r\n}());\r\nexports.default = Mixin;\r\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\n/*\r\nMeant to be immutable\r\n*/\r\nvar EventDateProfile = /** @class */ (function () {\r\n    function EventDateProfile(start, end, calendar) {\r\n        this.start = start;\r\n        this.end = end || null;\r\n        this.unzonedRange = this.buildUnzonedRange(calendar);\r\n    }\r\n    /*\r\n    Needs an EventSource object\r\n    */\r\n    EventDateProfile.parse = function (rawProps, source) {\r\n        var startInput = rawProps.start || rawProps.date;\r\n        var endInput = rawProps.end;\r\n        if (!startInput) {\r\n            return false;\r\n        }\r\n        var calendar = source.calendar;\r\n        var start = calendar.moment(startInput);\r\n        var end = endInput ? calendar.moment(endInput) : null;\r\n        var forcedAllDay = rawProps.allDay;\r\n        var forceEventDuration = calendar.opt('forceEventDuration');\r\n        if (!start.isValid()) {\r\n            return false;\r\n        }\r\n        if (forcedAllDay == null) {\r\n            forcedAllDay = source.allDayDefault;\r\n            if (forcedAllDay == null) {\r\n                forcedAllDay = calendar.opt('allDayDefault');\r\n            }\r\n        }\r\n        if (forcedAllDay === true) {\r\n            start.stripTime();\r\n            if (end) {\r\n                end.stripTime();\r\n            }\r\n        }\r\n        else if (forcedAllDay === false) {\r\n            if (!start.hasTime()) {\r\n                start.time(0);\r\n            }\r\n            if (end && !end.hasTime()) {\r\n                end.time(0);\r\n            }\r\n        }\r\n        if (end && (!end.isValid() || !end.isAfter(start))) {\r\n            end = null;\r\n        }\r\n        if (!end && forceEventDuration) {\r\n            end = calendar.getDefaultEventEnd(!start.hasTime(), start);\r\n        }\r\n        return new EventDateProfile(start, end, calendar);\r\n    };\r\n    EventDateProfile.isStandardProp = function (propName) {\r\n        return propName === 'start' || propName === 'date' || propName === 'end' || propName === 'allDay';\r\n    };\r\n    EventDateProfile.prototype.isAllDay = function () {\r\n        return !(this.start.hasTime() || (this.end && this.end.hasTime()));\r\n    };\r\n    /*\r\n    Needs a Calendar object\r\n    */\r\n    EventDateProfile.prototype.buildUnzonedRange = function (calendar) {\r\n        var startMs = this.start.clone().stripZone().valueOf();\r\n        var endMs = this.getEnd(calendar).stripZone().valueOf();\r\n        return new UnzonedRange_1.default(startMs, endMs);\r\n    };\r\n    /*\r\n    Needs a Calendar object\r\n    */\r\n    EventDateProfile.prototype.getEnd = function (calendar) {\r\n        return this.end ?\r\n            this.end.clone() :\r\n            // derive the end from the start and allDay. compute allDay if necessary\r\n            calendar.getDefaultEventEnd(this.isAllDay(), this.start);\r\n    };\r\n    return EventDateProfile;\r\n}());\r\nexports.default = EventDateProfile;\r\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar DragListener_1 = __webpack_require__(59);\r\n/* Tracks mouse movements over a component and raises events about which hit the mouse is over.\r\n------------------------------------------------------------------------------------------------------------------------\r\noptions:\r\n- subjectEl\r\n- subjectCenter\r\n*/\r\nvar HitDragListener = /** @class */ (function (_super) {\r\n    tslib_1.__extends(HitDragListener, _super);\r\n    function HitDragListener(component, options) {\r\n        var _this = _super.call(this, options) || this;\r\n        _this.component = component;\r\n        return _this;\r\n    }\r\n    // Called when drag listening starts (but a real drag has not necessarily began).\r\n    // ev might be undefined if dragging was started manually.\r\n    HitDragListener.prototype.handleInteractionStart = function (ev) {\r\n        var subjectEl = this.subjectEl;\r\n        var subjectRect;\r\n        var origPoint;\r\n        var point;\r\n        this.component.hitsNeeded();\r\n        this.computeScrollBounds(); // for autoscroll\r\n        if (ev) {\r\n            origPoint = { left: util_1.getEvX(ev), top: util_1.getEvY(ev) };\r\n            point = origPoint;\r\n            // constrain the point to bounds of the element being dragged\r\n            if (subjectEl) {\r\n                subjectRect = util_1.getOuterRect(subjectEl); // used for centering as well\r\n                point = util_1.constrainPoint(point, subjectRect);\r\n            }\r\n            this.origHit = this.queryHit(point.left, point.top);\r\n            // treat the center of the subject as the collision point?\r\n            if (subjectEl && this.options.subjectCenter) {\r\n                // only consider the area the subject overlaps the hit. best for large subjects.\r\n                // TODO: skip this if hit didn't supply left/right/top/bottom\r\n                if (this.origHit) {\r\n                    subjectRect = util_1.intersectRects(this.origHit, subjectRect) ||\r\n                        subjectRect; // in case there is no intersection\r\n                }\r\n                point = util_1.getRectCenter(subjectRect);\r\n            }\r\n            this.coordAdjust = util_1.diffPoints(point, origPoint); // point - origPoint\r\n        }\r\n        else {\r\n            this.origHit = null;\r\n            this.coordAdjust = null;\r\n        }\r\n        // call the super-method. do it after origHit has been computed\r\n        _super.prototype.handleInteractionStart.call(this, ev);\r\n    };\r\n    // Called when the actual drag has started\r\n    HitDragListener.prototype.handleDragStart = function (ev) {\r\n        var hit;\r\n        _super.prototype.handleDragStart.call(this, ev);\r\n        // might be different from this.origHit if the min-distance is large\r\n        hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\r\n        // report the initial hit the mouse is over\r\n        // especially important if no min-distance and drag starts immediately\r\n        if (hit) {\r\n            this.handleHitOver(hit);\r\n        }\r\n    };\r\n    // Called when the drag moves\r\n    HitDragListener.prototype.handleDrag = function (dx, dy, ev) {\r\n        var hit;\r\n        _super.prototype.handleDrag.call(this, dx, dy, ev);\r\n        hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\r\n        if (!isHitsEqual(hit, this.hit)) { // a different hit than before?\r\n            if (this.hit) {\r\n                this.handleHitOut();\r\n            }\r\n            if (hit) {\r\n                this.handleHitOver(hit);\r\n            }\r\n        }\r\n    };\r\n    // Called when dragging has been stopped\r\n    HitDragListener.prototype.handleDragEnd = function (ev) {\r\n        this.handleHitDone();\r\n        _super.prototype.handleDragEnd.call(this, ev);\r\n    };\r\n    // Called when a the mouse has just moved over a new hit\r\n    HitDragListener.prototype.handleHitOver = function (hit) {\r\n        var isOrig = isHitsEqual(hit, this.origHit);\r\n        this.hit = hit;\r\n        this.trigger('hitOver', this.hit, isOrig, this.origHit);\r\n    };\r\n    // Called when the mouse has just moved out of a hit\r\n    HitDragListener.prototype.handleHitOut = function () {\r\n        if (this.hit) {\r\n            this.trigger('hitOut', this.hit);\r\n            this.handleHitDone();\r\n            this.hit = null;\r\n        }\r\n    };\r\n    // Called after a hitOut. Also called before a dragStop\r\n    HitDragListener.prototype.handleHitDone = function () {\r\n        if (this.hit) {\r\n            this.trigger('hitDone', this.hit);\r\n        }\r\n    };\r\n    // Called when the interaction ends, whether there was a real drag or not\r\n    HitDragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\r\n        _super.prototype.handleInteractionEnd.call(this, ev, isCancelled);\r\n        this.origHit = null;\r\n        this.hit = null;\r\n        this.component.hitsNotNeeded();\r\n    };\r\n    // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\r\n    HitDragListener.prototype.handleScrollEnd = function () {\r\n        _super.prototype.handleScrollEnd.call(this);\r\n        // hits' absolute positions will be in new places after a user's scroll.\r\n        // HACK for recomputing.\r\n        if (this.isDragging) {\r\n            this.component.releaseHits();\r\n            this.component.prepareHits();\r\n        }\r\n    };\r\n    // Gets the hit underneath the coordinates for the given mouse event\r\n    HitDragListener.prototype.queryHit = function (left, top) {\r\n        if (this.coordAdjust) {\r\n            left += this.coordAdjust.left;\r\n            top += this.coordAdjust.top;\r\n        }\r\n        return this.component.queryHit(left, top);\r\n    };\r\n    return HitDragListener;\r\n}(DragListener_1.default));\r\nexports.default = HitDragListener;\r\n// Returns `true` if the hits are identically equal. `false` otherwise. Must be from the same component.\r\n// Two null values will be considered equal, as two \"out of the component\" states are the same.\r\nfunction isHitsEqual(hit0, hit1) {\r\n    if (!hit0 && !hit1) {\r\n        return true;\r\n    }\r\n    if (hit0 && hit1) {\r\n        return hit0.component === hit1.component &&\r\n            isHitPropsWithin(hit0, hit1) &&\r\n            isHitPropsWithin(hit1, hit0); // ensures all props are identical\r\n    }\r\n    return false;\r\n}\r\n// Returns true if all of subHit's non-standard properties are within superHit\r\nfunction isHitPropsWithin(subHit, superHit) {\r\n    for (var propName in subHit) {\r\n        if (!/^(component|left|right|top|bottom)$/.test(propName)) {\r\n            if (subHit[propName] !== superHit[propName]) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.version = '3.10.5';\r\n// When introducing internal API incompatibilities (where fullcalendar plugins would break),\r\n// the minor version of the calendar should be upped (ex: 2.7.2 -> 2.8.0)\r\n// and the below integer should be incremented.\r\nexports.internalApiVersion = 12;\r\nvar util_1 = __webpack_require__(4);\r\nexports.applyAll = util_1.applyAll;\r\nexports.debounce = util_1.debounce;\r\nexports.isInt = util_1.isInt;\r\nexports.htmlEscape = util_1.htmlEscape;\r\nexports.cssToStr = util_1.cssToStr;\r\nexports.proxy = util_1.proxy;\r\nexports.capitaliseFirstLetter = util_1.capitaliseFirstLetter;\r\nexports.getOuterRect = util_1.getOuterRect;\r\nexports.getClientRect = util_1.getClientRect;\r\nexports.getContentRect = util_1.getContentRect;\r\nexports.getScrollbarWidths = util_1.getScrollbarWidths;\r\nexports.preventDefault = util_1.preventDefault;\r\nexports.parseFieldSpecs = util_1.parseFieldSpecs;\r\nexports.compareByFieldSpecs = util_1.compareByFieldSpecs;\r\nexports.compareByFieldSpec = util_1.compareByFieldSpec;\r\nexports.flexibleCompare = util_1.flexibleCompare;\r\nexports.computeGreatestUnit = util_1.computeGreatestUnit;\r\nexports.divideRangeByDuration = util_1.divideRangeByDuration;\r\nexports.divideDurationByDuration = util_1.divideDurationByDuration;\r\nexports.multiplyDuration = util_1.multiplyDuration;\r\nexports.durationHasTime = util_1.durationHasTime;\r\nexports.log = util_1.log;\r\nexports.warn = util_1.warn;\r\nexports.removeExact = util_1.removeExact;\r\nexports.intersectRects = util_1.intersectRects;\r\nexports.allowSelection = util_1.allowSelection;\r\nexports.attrsToStr = util_1.attrsToStr;\r\nexports.compareNumbers = util_1.compareNumbers;\r\nexports.compensateScroll = util_1.compensateScroll;\r\nexports.computeDurationGreatestUnit = util_1.computeDurationGreatestUnit;\r\nexports.constrainPoint = util_1.constrainPoint;\r\nexports.copyOwnProps = util_1.copyOwnProps;\r\nexports.diffByUnit = util_1.diffByUnit;\r\nexports.diffDay = util_1.diffDay;\r\nexports.diffDayTime = util_1.diffDayTime;\r\nexports.diffPoints = util_1.diffPoints;\r\nexports.disableCursor = util_1.disableCursor;\r\nexports.distributeHeight = util_1.distributeHeight;\r\nexports.enableCursor = util_1.enableCursor;\r\nexports.firstDefined = util_1.firstDefined;\r\nexports.getEvIsTouch = util_1.getEvIsTouch;\r\nexports.getEvX = util_1.getEvX;\r\nexports.getEvY = util_1.getEvY;\r\nexports.getRectCenter = util_1.getRectCenter;\r\nexports.getScrollParent = util_1.getScrollParent;\r\nexports.hasOwnProp = util_1.hasOwnProp;\r\nexports.isArraysEqual = util_1.isArraysEqual;\r\nexports.isNativeDate = util_1.isNativeDate;\r\nexports.isPrimaryMouseButton = util_1.isPrimaryMouseButton;\r\nexports.isTimeString = util_1.isTimeString;\r\nexports.matchCellWidths = util_1.matchCellWidths;\r\nexports.mergeProps = util_1.mergeProps;\r\nexports.preventSelection = util_1.preventSelection;\r\nexports.removeMatching = util_1.removeMatching;\r\nexports.stripHtmlEntities = util_1.stripHtmlEntities;\r\nexports.subtractInnerElHeight = util_1.subtractInnerElHeight;\r\nexports.uncompensateScroll = util_1.uncompensateScroll;\r\nexports.undistributeHeight = util_1.undistributeHeight;\r\nexports.dayIDs = util_1.dayIDs;\r\nexports.unitsDesc = util_1.unitsDesc;\r\nvar date_formatting_1 = __webpack_require__(49);\r\nexports.formatDate = date_formatting_1.formatDate;\r\nexports.formatRange = date_formatting_1.formatRange;\r\nexports.queryMostGranularFormatUnit = date_formatting_1.queryMostGranularFormatUnit;\r\nvar locale_1 = __webpack_require__(32);\r\nexports.datepickerLocale = locale_1.datepickerLocale;\r\nexports.locale = locale_1.locale;\r\nexports.getMomentLocaleData = locale_1.getMomentLocaleData;\r\nexports.populateInstanceComputableOptions = locale_1.populateInstanceComputableOptions;\r\nvar util_2 = __webpack_require__(19);\r\nexports.eventDefsToEventInstances = util_2.eventDefsToEventInstances;\r\nexports.eventFootprintToComponentFootprint = util_2.eventFootprintToComponentFootprint;\r\nexports.eventInstanceToEventRange = util_2.eventInstanceToEventRange;\r\nexports.eventInstanceToUnzonedRange = util_2.eventInstanceToUnzonedRange;\r\nexports.eventRangeToEventFootprint = util_2.eventRangeToEventFootprint;\r\nvar moment_ext_1 = __webpack_require__(11);\r\nexports.moment = moment_ext_1.default;\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nexports.EmitterMixin = EmitterMixin_1.default;\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nexports.ListenerMixin = ListenerMixin_1.default;\r\nvar Model_1 = __webpack_require__(51);\r\nexports.Model = Model_1.default;\r\nvar Constraints_1 = __webpack_require__(217);\r\nexports.Constraints = Constraints_1.default;\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nexports.DateProfileGenerator = DateProfileGenerator_1.default;\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nexports.UnzonedRange = UnzonedRange_1.default;\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nexports.ComponentFootprint = ComponentFootprint_1.default;\r\nvar BusinessHourGenerator_1 = __webpack_require__(218);\r\nexports.BusinessHourGenerator = BusinessHourGenerator_1.default;\r\nvar EventPeriod_1 = __webpack_require__(219);\r\nexports.EventPeriod = EventPeriod_1.default;\r\nvar EventManager_1 = __webpack_require__(220);\r\nexports.EventManager = EventManager_1.default;\r\nvar EventDef_1 = __webpack_require__(37);\r\nexports.EventDef = EventDef_1.default;\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nexports.EventDefMutation = EventDefMutation_1.default;\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nexports.EventDefParser = EventDefParser_1.default;\r\nvar EventInstance_1 = __webpack_require__(53);\r\nexports.EventInstance = EventInstance_1.default;\r\nvar EventRange_1 = __webpack_require__(50);\r\nexports.EventRange = EventRange_1.default;\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nexports.RecurringEventDef = RecurringEventDef_1.default;\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nexports.SingleEventDef = SingleEventDef_1.default;\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nexports.EventDefDateMutation = EventDefDateMutation_1.default;\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nexports.EventDateProfile = EventDateProfile_1.default;\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nexports.EventSourceParser = EventSourceParser_1.default;\r\nvar EventSource_1 = __webpack_require__(6);\r\nexports.EventSource = EventSource_1.default;\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nexports.defineThemeSystem = ThemeRegistry_1.defineThemeSystem;\r\nexports.getThemeSystemClass = ThemeRegistry_1.getThemeSystemClass;\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nexports.EventInstanceGroup = EventInstanceGroup_1.default;\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nexports.ArrayEventSource = ArrayEventSource_1.default;\r\nvar FuncEventSource_1 = __webpack_require__(223);\r\nexports.FuncEventSource = FuncEventSource_1.default;\r\nvar JsonFeedEventSource_1 = __webpack_require__(224);\r\nexports.JsonFeedEventSource = JsonFeedEventSource_1.default;\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nexports.EventFootprint = EventFootprint_1.default;\r\nvar Class_1 = __webpack_require__(35);\r\nexports.Class = Class_1.default;\r\nvar Mixin_1 = __webpack_require__(15);\r\nexports.Mixin = Mixin_1.default;\r\nvar CoordCache_1 = __webpack_require__(58);\r\nexports.CoordCache = CoordCache_1.default;\r\nvar Iterator_1 = __webpack_require__(225);\r\nexports.Iterator = Iterator_1.default;\r\nvar DragListener_1 = __webpack_require__(59);\r\nexports.DragListener = DragListener_1.default;\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nexports.HitDragListener = HitDragListener_1.default;\r\nvar MouseFollower_1 = __webpack_require__(226);\r\nexports.MouseFollower = MouseFollower_1.default;\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nexports.ParsableModelMixin = ParsableModelMixin_1.default;\r\nvar Popover_1 = __webpack_require__(227);\r\nexports.Popover = Popover_1.default;\r\nvar Promise_1 = __webpack_require__(21);\r\nexports.Promise = Promise_1.default;\r\nvar TaskQueue_1 = __webpack_require__(228);\r\nexports.TaskQueue = TaskQueue_1.default;\r\nvar RenderQueue_1 = __webpack_require__(229);\r\nexports.RenderQueue = RenderQueue_1.default;\r\nvar Scroller_1 = __webpack_require__(41);\r\nexports.Scroller = Scroller_1.default;\r\nvar Theme_1 = __webpack_require__(22);\r\nexports.Theme = Theme_1.default;\r\nvar Component_1 = __webpack_require__(230);\r\nexports.Component = Component_1.default;\r\nvar DateComponent_1 = __webpack_require__(231);\r\nexports.DateComponent = DateComponent_1.default;\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nexports.InteractiveDateComponent = InteractiveDateComponent_1.default;\r\nvar Calendar_1 = __webpack_require__(232);\r\nexports.Calendar = Calendar_1.default;\r\nvar View_1 = __webpack_require__(43);\r\nexports.View = View_1.default;\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nexports.defineView = ViewRegistry_1.defineView;\r\nexports.getViewConfig = ViewRegistry_1.getViewConfig;\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nexports.DayTableMixin = DayTableMixin_1.default;\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nexports.BusinessHourRenderer = BusinessHourRenderer_1.default;\r\nvar EventRenderer_1 = __webpack_require__(44);\r\nexports.EventRenderer = EventRenderer_1.default;\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nexports.FillRenderer = FillRenderer_1.default;\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nexports.HelperRenderer = HelperRenderer_1.default;\r\nvar ExternalDropping_1 = __webpack_require__(233);\r\nexports.ExternalDropping = ExternalDropping_1.default;\r\nvar EventResizing_1 = __webpack_require__(234);\r\nexports.EventResizing = EventResizing_1.default;\r\nvar EventPointing_1 = __webpack_require__(64);\r\nexports.EventPointing = EventPointing_1.default;\r\nvar EventDragging_1 = __webpack_require__(235);\r\nexports.EventDragging = EventDragging_1.default;\r\nvar DateSelecting_1 = __webpack_require__(236);\r\nexports.DateSelecting = DateSelecting_1.default;\r\nvar DateClicking_1 = __webpack_require__(237);\r\nexports.DateClicking = DateClicking_1.default;\r\nvar Interaction_1 = __webpack_require__(14);\r\nexports.Interaction = Interaction_1.default;\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nexports.StandardInteractionsMixin = StandardInteractionsMixin_1.default;\r\nvar AgendaView_1 = __webpack_require__(238);\r\nexports.AgendaView = AgendaView_1.default;\r\nvar TimeGrid_1 = __webpack_require__(239);\r\nexports.TimeGrid = TimeGrid_1.default;\r\nvar TimeGridEventRenderer_1 = __webpack_require__(240);\r\nexports.TimeGridEventRenderer = TimeGridEventRenderer_1.default;\r\nvar TimeGridFillRenderer_1 = __webpack_require__(242);\r\nexports.TimeGridFillRenderer = TimeGridFillRenderer_1.default;\r\nvar TimeGridHelperRenderer_1 = __webpack_require__(241);\r\nexports.TimeGridHelperRenderer = TimeGridHelperRenderer_1.default;\r\nvar DayGrid_1 = __webpack_require__(66);\r\nexports.DayGrid = DayGrid_1.default;\r\nvar DayGridEventRenderer_1 = __webpack_require__(243);\r\nexports.DayGridEventRenderer = DayGridEventRenderer_1.default;\r\nvar DayGridFillRenderer_1 = __webpack_require__(245);\r\nexports.DayGridFillRenderer = DayGridFillRenderer_1.default;\r\nvar DayGridHelperRenderer_1 = __webpack_require__(244);\r\nexports.DayGridHelperRenderer = DayGridHelperRenderer_1.default;\r\nvar BasicView_1 = __webpack_require__(67);\r\nexports.BasicView = BasicView_1.default;\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nexports.BasicViewDateProfileGenerator = BasicViewDateProfileGenerator_1.default;\r\nvar MonthView_1 = __webpack_require__(246);\r\nexports.MonthView = MonthView_1.default;\r\nvar MonthViewDateProfileGenerator_1 = __webpack_require__(247);\r\nexports.MonthViewDateProfileGenerator = MonthViewDateProfileGenerator_1.default;\r\nvar ListView_1 = __webpack_require__(248);\r\nexports.ListView = ListView_1.default;\r\nvar ListEventPointing_1 = __webpack_require__(250);\r\nexports.ListEventPointing = ListEventPointing_1.default;\r\nvar ListEventRenderer_1 = __webpack_require__(249);\r\nexports.ListEventRenderer = ListEventRenderer_1.default;\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventRange_1 = __webpack_require__(50);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nfunction eventDefsToEventInstances(eventDefs, unzonedRange) {\r\n    var eventInstances = [];\r\n    var i;\r\n    for (i = 0; i < eventDefs.length; i++) {\r\n        eventInstances.push.apply(eventInstances, // append\r\n        eventDefs[i].buildInstances(unzonedRange));\r\n    }\r\n    return eventInstances;\r\n}\r\nexports.eventDefsToEventInstances = eventDefsToEventInstances;\r\nfunction eventInstanceToEventRange(eventInstance) {\r\n    return new EventRange_1.default(eventInstance.dateProfile.unzonedRange, eventInstance.def, eventInstance);\r\n}\r\nexports.eventInstanceToEventRange = eventInstanceToEventRange;\r\nfunction eventRangeToEventFootprint(eventRange) {\r\n    return new EventFootprint_1.default(new ComponentFootprint_1.default(eventRange.unzonedRange, eventRange.eventDef.isAllDay()), eventRange.eventDef, eventRange.eventInstance // might not exist\r\n    );\r\n}\r\nexports.eventRangeToEventFootprint = eventRangeToEventFootprint;\r\nfunction eventInstanceToUnzonedRange(eventInstance) {\r\n    return eventInstance.dateProfile.unzonedRange;\r\n}\r\nexports.eventInstanceToUnzonedRange = eventInstanceToUnzonedRange;\r\nfunction eventFootprintToComponentFootprint(eventFootprint) {\r\n    return eventFootprint.componentFootprint;\r\n}\r\nexports.eventFootprintToComponentFootprint = eventFootprintToComponentFootprint;\r\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar util_1 = __webpack_require__(19);\r\nvar EventRange_1 = __webpack_require__(50);\r\n/*\r\nIt's expected that there will be at least one EventInstance,\r\nOR that an explicitEventDef is assigned.\r\n*/\r\nvar EventInstanceGroup = /** @class */ (function () {\r\n    function EventInstanceGroup(eventInstances) {\r\n        this.eventInstances = eventInstances || [];\r\n    }\r\n    EventInstanceGroup.prototype.getAllEventRanges = function (constraintRange) {\r\n        if (constraintRange) {\r\n            return this.sliceNormalRenderRanges(constraintRange);\r\n        }\r\n        else {\r\n            return this.eventInstances.map(util_1.eventInstanceToEventRange);\r\n        }\r\n    };\r\n    EventInstanceGroup.prototype.sliceRenderRanges = function (constraintRange) {\r\n        if (this.isInverse()) {\r\n            return this.sliceInverseRenderRanges(constraintRange);\r\n        }\r\n        else {\r\n            return this.sliceNormalRenderRanges(constraintRange);\r\n        }\r\n    };\r\n    EventInstanceGroup.prototype.sliceNormalRenderRanges = function (constraintRange) {\r\n        var eventInstances = this.eventInstances;\r\n        var i;\r\n        var eventInstance;\r\n        var slicedRange;\r\n        var slicedEventRanges = [];\r\n        for (i = 0; i < eventInstances.length; i++) {\r\n            eventInstance = eventInstances[i];\r\n            slicedRange = eventInstance.dateProfile.unzonedRange.intersect(constraintRange);\r\n            if (slicedRange) {\r\n                slicedEventRanges.push(new EventRange_1.default(slicedRange, eventInstance.def, eventInstance));\r\n            }\r\n        }\r\n        return slicedEventRanges;\r\n    };\r\n    EventInstanceGroup.prototype.sliceInverseRenderRanges = function (constraintRange) {\r\n        var unzonedRanges = this.eventInstances.map(util_1.eventInstanceToUnzonedRange);\r\n        var ownerDef = this.getEventDef();\r\n        unzonedRanges = UnzonedRange_1.default.invertRanges(unzonedRanges, constraintRange);\r\n        return unzonedRanges.map(function (unzonedRange) {\r\n            return new EventRange_1.default(unzonedRange, ownerDef); // don't give an EventInstance\r\n        });\r\n    };\r\n    EventInstanceGroup.prototype.isInverse = function () {\r\n        return this.getEventDef().hasInverseRendering();\r\n    };\r\n    EventInstanceGroup.prototype.getEventDef = function () {\r\n        return this.explicitEventDef || this.eventInstances[0].def;\r\n    };\r\n    return EventInstanceGroup;\r\n}());\r\nexports.default = EventInstanceGroup;\r\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar PromiseStub = {\r\n    construct: function (executor) {\r\n        var deferred = $.Deferred();\r\n        var promise = deferred.promise();\r\n        if (typeof executor === 'function') {\r\n            executor(function (val) {\r\n                deferred.resolve(val);\r\n                attachImmediatelyResolvingThen(promise, val);\r\n            }, function () {\r\n                deferred.reject();\r\n                attachImmediatelyRejectingThen(promise);\r\n            });\r\n        }\r\n        return promise;\r\n    },\r\n    resolve: function (val) {\r\n        var deferred = $.Deferred().resolve(val);\r\n        var promise = deferred.promise();\r\n        attachImmediatelyResolvingThen(promise, val);\r\n        return promise;\r\n    },\r\n    reject: function () {\r\n        var deferred = $.Deferred().reject();\r\n        var promise = deferred.promise();\r\n        attachImmediatelyRejectingThen(promise);\r\n        return promise;\r\n    }\r\n};\r\nexports.default = PromiseStub;\r\nfunction attachImmediatelyResolvingThen(promise, val) {\r\n    promise.then = function (onResolve) {\r\n        if (typeof onResolve === 'function') {\r\n            return PromiseStub.resolve(onResolve(val));\r\n        }\r\n        return promise;\r\n    };\r\n}\r\nfunction attachImmediatelyRejectingThen(promise) {\r\n    promise.then = function (onResolve, onReject) {\r\n        if (typeof onReject === 'function') {\r\n            onReject();\r\n        }\r\n        return promise;\r\n    };\r\n}\r\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar Theme = /** @class */ (function () {\r\n    function Theme(optionsManager) {\r\n        this.optionsManager = optionsManager;\r\n        this.processIconOverride();\r\n    }\r\n    Theme.prototype.processIconOverride = function () {\r\n        if (this.iconOverrideOption) {\r\n            this.setIconOverride(this.optionsManager.get(this.iconOverrideOption));\r\n        }\r\n    };\r\n    Theme.prototype.setIconOverride = function (iconOverrideHash) {\r\n        var iconClassesCopy;\r\n        var buttonName;\r\n        if ($.isPlainObject(iconOverrideHash)) {\r\n            iconClassesCopy = $.extend({}, this.iconClasses);\r\n            for (buttonName in iconOverrideHash) {\r\n                iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);\r\n            }\r\n            this.iconClasses = iconClassesCopy;\r\n        }\r\n        else if (iconOverrideHash === false) {\r\n            this.iconClasses = {};\r\n        }\r\n    };\r\n    Theme.prototype.applyIconOverridePrefix = function (className) {\r\n        var prefix = this.iconOverridePrefix;\r\n        if (prefix && className.indexOf(prefix) !== 0) { // if not already present\r\n            className = prefix + className;\r\n        }\r\n        return className;\r\n    };\r\n    Theme.prototype.getClass = function (key) {\r\n        return this.classes[key] || '';\r\n    };\r\n    Theme.prototype.getIconClass = function (buttonName) {\r\n        var className = this.iconClasses[buttonName];\r\n        if (className) {\r\n            return this.baseIconClass + ' ' + className;\r\n        }\r\n        return '';\r\n    };\r\n    Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {\r\n        var className;\r\n        if (this.iconOverrideCustomButtonOption) {\r\n            className = customButtonProps[this.iconOverrideCustomButtonOption];\r\n            if (className) {\r\n                return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);\r\n            }\r\n        }\r\n        return '';\r\n    };\r\n    return Theme;\r\n}());\r\nexports.default = Theme;\r\nTheme.prototype.classes = {};\r\nTheme.prototype.iconClasses = {};\r\nTheme.prototype.baseIconClass = '';\r\nTheme.prototype.iconOverridePrefix = '';\r\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar exportHooks = __webpack_require__(18);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nexportHooks.touchMouseIgnoreWait = 500;\r\nvar globalEmitter = null;\r\nvar neededCount = 0;\r\n/*\r\nListens to document and window-level user-interaction events, like touch events and mouse events,\r\nand fires these events as-is to whoever is observing a GlobalEmitter.\r\nBest when used as a singleton via GlobalEmitter.get()\r\n\nNormalizes mouse/touch events. For examples:\r\n- ignores the the simulated mouse events that happen after a quick tap: mousemove+mousedown+mouseup+click\r\n- compensates for various buggy scenarios where a touchend does not fire\r\n*/\r\nvar GlobalEmitter = /** @class */ (function () {\r\n    function GlobalEmitter() {\r\n        this.isTouching = false;\r\n        this.mouseIgnoreDepth = 0;\r\n    }\r\n    // gets the singleton\r\n    GlobalEmitter.get = function () {\r\n        if (!globalEmitter) {\r\n            globalEmitter = new GlobalEmitter();\r\n            globalEmitter.bind();\r\n        }\r\n        return globalEmitter;\r\n    };\r\n    // called when an object knows it will need a GlobalEmitter in the near future.\r\n    GlobalEmitter.needed = function () {\r\n        GlobalEmitter.get(); // ensures globalEmitter\r\n        neededCount++;\r\n    };\r\n    // called when the object that originally called needed() doesn't need a GlobalEmitter anymore.\r\n    GlobalEmitter.unneeded = function () {\r\n        neededCount--;\r\n        if (!neededCount) { // nobody else needs it\r\n            globalEmitter.unbind();\r\n            globalEmitter = null;\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.bind = function () {\r\n        var _this = this;\r\n        this.listenTo($(document), {\r\n            touchstart: this.handleTouchStart,\r\n            touchcancel: this.handleTouchCancel,\r\n            touchend: this.handleTouchEnd,\r\n            mousedown: this.handleMouseDown,\r\n            mousemove: this.handleMouseMove,\r\n            mouseup: this.handleMouseUp,\r\n            click: this.handleClick,\r\n            selectstart: this.handleSelectStart,\r\n            contextmenu: this.handleContextMenu\r\n        });\r\n        // because we need to call preventDefault\r\n        // because https://www.chromestatus.com/features/5093566007214080\r\n        // TODO: investigate performance because this is a global handler\r\n        window.addEventListener('touchmove', this.handleTouchMoveProxy = function (ev) {\r\n            _this.handleTouchMove($.Event(ev));\r\n        }, { passive: false } // allows preventDefault()\r\n        );\r\n        // attach a handler to get called when ANY scroll action happens on the page.\r\n        // this was impossible to do with normal on/off because 'scroll' doesn't bubble.\r\n        // http://stackoverflow.com/a/32954565/96342\r\n        window.addEventListener('scroll', this.handleScrollProxy = function (ev) {\r\n            _this.handleScroll($.Event(ev));\r\n        }, true // useCapture\r\n        );\r\n    };\r\n    GlobalEmitter.prototype.unbind = function () {\r\n        this.stopListeningTo($(document));\r\n        window.removeEventListener('touchmove', this.handleTouchMoveProxy, { passive: false } // use same options as addEventListener\r\n        );\r\n        window.removeEventListener('scroll', this.handleScrollProxy, true // useCapture\r\n        );\r\n    };\r\n    // Touch Handlers\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.handleTouchStart = function (ev) {\r\n        // if a previous touch interaction never ended with a touchend, then implicitly end it,\r\n        // but since a new touch interaction is about to begin, don't start the mouse ignore period.\r\n        this.stopTouch(ev, true); // skipMouseIgnore=true\r\n        this.isTouching = true;\r\n        this.trigger('touchstart', ev);\r\n    };\r\n    GlobalEmitter.prototype.handleTouchMove = function (ev) {\r\n        if (this.isTouching) {\r\n            this.trigger('touchmove', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleTouchCancel = function (ev) {\r\n        if (this.isTouching) {\r\n            this.trigger('touchcancel', ev);\r\n            // Have touchcancel fire an artificial touchend. That way, handlers won't need to listen to both.\r\n            // If touchend fires later, it won't have any effect b/c isTouching will be false.\r\n            this.stopTouch(ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleTouchEnd = function (ev) {\r\n        this.stopTouch(ev);\r\n    };\r\n    // Mouse Handlers\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.handleMouseDown = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('mousedown', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleMouseMove = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('mousemove', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleMouseUp = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('mouseup', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleClick = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('click', ev);\r\n        }\r\n    };\r\n    // Misc Handlers\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.handleSelectStart = function (ev) {\r\n        this.trigger('selectstart', ev);\r\n    };\r\n    GlobalEmitter.prototype.handleContextMenu = function (ev) {\r\n        this.trigger('contextmenu', ev);\r\n    };\r\n    GlobalEmitter.prototype.handleScroll = function (ev) {\r\n        this.trigger('scroll', ev);\r\n    };\r\n    // Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.stopTouch = function (ev, skipMouseIgnore) {\r\n        if (skipMouseIgnore === void 0) { skipMouseIgnore = false; }\r\n        if (this.isTouching) {\r\n            this.isTouching = false;\r\n            this.trigger('touchend', ev);\r\n            if (!skipMouseIgnore) {\r\n                this.startTouchMouseIgnore();\r\n            }\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.startTouchMouseIgnore = function () {\r\n        var _this = this;\r\n        var wait = exportHooks.touchMouseIgnoreWait;\r\n        if (wait) {\r\n            this.mouseIgnoreDepth++;\r\n            setTimeout(function () {\r\n                _this.mouseIgnoreDepth--;\r\n            }, wait);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.shouldIgnoreMouse = function () {\r\n        return this.isTouching || Boolean(this.mouseIgnoreDepth);\r\n    };\r\n    return GlobalEmitter;\r\n}());\r\nexports.default = GlobalEmitter;\r\nListenerMixin_1.default.mixInto(GlobalEmitter);\r\nEmitterMixin_1.default.mixInto(GlobalEmitter);\r\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar exportHooks = __webpack_require__(18);\r\nexports.viewHash = {};\r\nexportHooks.views = exports.viewHash;\r\nfunction defineView(viewName, viewConfig) {\r\n    exports.viewHash[viewName] = viewConfig;\r\n}\r\nexports.defineView = defineView;\r\nfunction getViewConfig(viewName) {\r\n    return exports.viewHash[viewName];\r\n}\r\nexports.getViewConfig = getViewConfig;\r\n\n\n/***/ }),\n/* 25 */,\n/* 26 */,\n/* 27 */,\n/* 28 */,\n/* 29 */,\n/* 30 */,\n/* 31 */,\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar exportHooks = __webpack_require__(18);\r\nvar options_1 = __webpack_require__(33);\r\nvar util_1 = __webpack_require__(4);\r\nexports.localeOptionHash = {};\r\nexportHooks.locales = exports.localeOptionHash;\r\n// NOTE: can't guarantee any of these computations will run because not every locale has datepicker\r\n// configs, so make sure there are English fallbacks for these in the defaults file.\r\nvar dpComputableOptions = {\r\n    buttonText: function (dpOptions) {\r\n        return {\r\n            // the translations sometimes wrongly contain HTML entities\r\n            prev: util_1.stripHtmlEntities(dpOptions.prevText),\r\n            next: util_1.stripHtmlEntities(dpOptions.nextText),\r\n            today: util_1.stripHtmlEntities(dpOptions.currentText)\r\n        };\r\n    },\r\n    // Produces format strings like \"MMMM YYYY\" -> \"September 2014\"\r\n    monthYearFormat: function (dpOptions) {\r\n        return dpOptions.showMonthAfterYear ?\r\n            'YYYY[' + dpOptions.yearSuffix + '] MMMM' :\r\n            'MMMM YYYY[' + dpOptions.yearSuffix + ']';\r\n    }\r\n};\r\nvar momComputableOptions = {\r\n    // Produces format strings like \"ddd M/D\" -> \"Fri 9/15\"\r\n    dayOfMonthFormat: function (momOptions, fcOptions) {\r\n        var format = momOptions.longDateFormat('l'); // for the format like \"M/D/YYYY\"\r\n        // strip the year off the edge, as well as other misc non-whitespace chars\r\n        format = format.replace(/^Y+[^\\w\\s]*|[^\\w\\s]*Y+$/g, '');\r\n        if (fcOptions.isRTL) {\r\n            format += ' ddd'; // for RTL, add day-of-week to end\r\n        }\r\n        else {\r\n            format = 'ddd ' + format; // for LTR, add day-of-week to beginning\r\n        }\r\n        return format;\r\n    },\r\n    // Produces format strings like \"h:mma\" -> \"6:00pm\"\r\n    mediumTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"h(:mm)a\" -> \"6pm\" / \"6:30pm\"\r\n    smallTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(':mm', '(:mm)')\r\n            .replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\r\n            .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"h(:mm)t\" -> \"6p\" / \"6:30p\"\r\n    extraSmallTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(':mm', '(:mm)')\r\n            .replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\r\n            .replace(/\\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"ha\" / \"H\" -> \"6pm\" / \"18\"\r\n    hourFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(':mm', '')\r\n            .replace(/(\\Wmm)$/, '') // like above, but for foreign locales\r\n            .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"h:mm\" -> \"6:30\" (with no AM/PM)\r\n    noMeridiemTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(/\\s*a$/i, ''); // remove trailing AM/PM\r\n    }\r\n};\r\n// options that should be computed off live calendar options (considers override options)\r\n// TODO: best place for this? related to locale?\r\n// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it\r\nvar instanceComputableOptions = {\r\n    // Produces format strings for results like \"Mo 16\"\r\n    smallDayDateFormat: function (options) {\r\n        return options.isRTL ?\r\n            'D dd' :\r\n            'dd D';\r\n    },\r\n    // Produces format strings for results like \"Wk 5\"\r\n    weekFormat: function (options) {\r\n        return options.isRTL ?\r\n            'w[ ' + options.weekNumberTitle + ']' :\r\n            '[' + options.weekNumberTitle + ' ]w';\r\n    },\r\n    // Produces format strings for results like \"Wk5\"\r\n    smallWeekFormat: function (options) {\r\n        return options.isRTL ?\r\n            'w[' + options.weekNumberTitle + ']' :\r\n            '[' + options.weekNumberTitle + ']w';\r\n    }\r\n};\r\n// TODO: make these computable properties in optionsManager\r\nfunction populateInstanceComputableOptions(options) {\r\n    $.each(instanceComputableOptions, function (name, func) {\r\n        if (options[name] == null) {\r\n            options[name] = func(options);\r\n        }\r\n    });\r\n}\r\nexports.populateInstanceComputableOptions = populateInstanceComputableOptions;\r\n// Initialize jQuery UI datepicker translations while using some of the translations\r\n// Will set this as the default locales for datepicker.\r\nfunction datepickerLocale(localeCode, dpLocaleCode, dpOptions) {\r\n    // get the FullCalendar internal option hash for this locale. create if necessary\r\n    var fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});\r\n    // transfer some simple options from datepicker to fc\r\n    fcOptions.isRTL = dpOptions.isRTL;\r\n    fcOptions.weekNumberTitle = dpOptions.weekHeader;\r\n    // compute some more complex options from datepicker\r\n    $.each(dpComputableOptions, function (name, func) {\r\n        fcOptions[name] = func(dpOptions);\r\n    });\r\n    var jqDatePicker = $.datepicker;\r\n    // is jQuery UI Datepicker is on the page?\r\n    if (jqDatePicker) {\r\n        // Register the locale data.\r\n        // FullCalendar and MomentJS use locale codes like \"pt-br\" but Datepicker\r\n        // does it like \"pt-BR\" or if it doesn't have the locale, maybe just \"pt\".\r\n        // Make an alias so the locale can be referenced either way.\r\n        jqDatePicker.regional[dpLocaleCode] =\r\n            jqDatePicker.regional[localeCode] = // alias\r\n                dpOptions;\r\n        // Alias 'en' to the default locale data. Do this every time.\r\n        jqDatePicker.regional.en = jqDatePicker.regional[''];\r\n        // Set as Datepicker's global defaults.\r\n        jqDatePicker.setDefaults(dpOptions);\r\n    }\r\n}\r\nexports.datepickerLocale = datepickerLocale;\r\n// Sets FullCalendar-specific translations. Will set the locales as the global default.\r\nfunction locale(localeCode, newFcOptions) {\r\n    var fcOptions;\r\n    var momOptions;\r\n    // get the FullCalendar internal option hash for this locale. create if necessary\r\n    fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});\r\n    // provided new options for this locales? merge them in\r\n    if (newFcOptions) {\r\n        fcOptions = exports.localeOptionHash[localeCode] = options_1.mergeOptions([fcOptions, newFcOptions]);\r\n    }\r\n    // compute locale options that weren't defined.\r\n    // always do this. newFcOptions can be undefined when initializing from i18n file,\r\n    // so no way to tell if this is an initialization or a default-setting.\r\n    momOptions = getMomentLocaleData(localeCode); // will fall back to en\r\n    $.each(momComputableOptions, function (name, func) {\r\n        if (fcOptions[name] == null) {\r\n            fcOptions[name] = (func)(momOptions, fcOptions);\r\n        }\r\n    });\r\n    // set it as the default locale for FullCalendar\r\n    options_1.globalDefaults.locale = localeCode;\r\n}\r\nexports.locale = locale;\r\n// Returns moment's internal locale data. If doesn't exist, returns English.\r\nfunction getMomentLocaleData(localeCode) {\r\n    return moment.localeData(localeCode) || moment.localeData('en');\r\n}\r\nexports.getMomentLocaleData = getMomentLocaleData;\r\n// Initialize English by forcing computation of moment-derived options.\r\n// Also, sets it as the default.\r\nlocale('en', options_1.englishDefaults);\r\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nexports.globalDefaults = {\r\n    titleRangeSeparator: ' \\u2013 ',\r\n    monthYearFormat: 'MMMM YYYY',\r\n    defaultTimedEventDuration: '02:00:00',\r\n    defaultAllDayEventDuration: { days: 1 },\r\n    forceEventDuration: false,\r\n    nextDayThreshold: '09:00:00',\r\n    // display\r\n    columnHeader: true,\r\n    defaultView: 'month',\r\n    aspectRatio: 1.35,\r\n    header: {\r\n        left: 'title',\r\n        center: '',\r\n        right: 'today prev,next'\r\n    },\r\n    weekends: true,\r\n    weekNumbers: false,\r\n    weekNumberTitle: 'W',\r\n    weekNumberCalculation: 'local',\r\n    // editable: false,\r\n    // nowIndicator: false,\r\n    scrollTime: '06:00:00',\r\n    minTime: '00:00:00',\r\n    maxTime: '24:00:00',\r\n    showNonCurrentDates: true,\r\n    // event ajax\r\n    lazyFetching: true,\r\n    startParam: 'start',\r\n    endParam: 'end',\r\n    timezoneParam: 'timezone',\r\n    timezone: false,\r\n    // allDayDefault: undefined,\r\n    // locale\r\n    locale: null,\r\n    isRTL: false,\r\n    buttonText: {\r\n        prev: 'prev',\r\n        next: 'next',\r\n        prevYear: 'prev year',\r\n        nextYear: 'next year',\r\n        year: 'year',\r\n        today: 'today',\r\n        month: 'month',\r\n        week: 'week',\r\n        day: 'day'\r\n    },\r\n    // buttonIcons: null,\r\n    allDayText: 'all-day',\r\n    // allows setting a min-height to the event segment to prevent short events overlapping each other\r\n    agendaEventMinHeight: 0,\r\n    // jquery-ui theming\r\n    theme: false,\r\n    // themeButtonIcons: null,\r\n    // eventResizableFromStart: false,\r\n    dragOpacity: .75,\r\n    dragRevertDuration: 500,\r\n    dragScroll: true,\r\n    // selectable: false,\r\n    unselectAuto: true,\r\n    // selectMinDistance: 0,\r\n    dropAccept: '*',\r\n    eventOrder: 'title',\r\n    // eventRenderWait: null,\r\n    eventLimit: false,\r\n    eventLimitText: 'more',\r\n    eventLimitClick: 'popover',\r\n    dayPopoverFormat: 'LL',\r\n    handleWindowResize: true,\r\n    windowResizeDelay: 100,\r\n    longPressDelay: 1000\r\n};\r\nexports.englishDefaults = {\r\n    dayPopoverFormat: 'dddd, MMMM D'\r\n};\r\nexports.rtlDefaults = {\r\n    header: {\r\n        left: 'next,prev today',\r\n        center: '',\r\n        right: 'title'\r\n    },\r\n    buttonIcons: {\r\n        prev: 'right-single-arrow',\r\n        next: 'left-single-arrow',\r\n        prevYear: 'right-double-arrow',\r\n        nextYear: 'left-double-arrow'\r\n    },\r\n    themeButtonIcons: {\r\n        prev: 'circle-triangle-e',\r\n        next: 'circle-triangle-w',\r\n        nextYear: 'seek-prev',\r\n        prevYear: 'seek-next'\r\n    }\r\n};\r\nvar complexOptions = [\r\n    'header',\r\n    'footer',\r\n    'buttonText',\r\n    'buttonIcons',\r\n    'themeButtonIcons'\r\n];\r\n// Merges an array of option objects into a single object\r\nfunction mergeOptions(optionObjs) {\r\n    return util_1.mergeProps(optionObjs, complexOptions);\r\n}\r\nexports.mergeOptions = mergeOptions;\r\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventFootprint = /** @class */ (function () {\r\n    function EventFootprint(componentFootprint, eventDef, eventInstance) {\r\n        this.componentFootprint = componentFootprint;\r\n        this.eventDef = eventDef;\r\n        if (eventInstance) {\r\n            this.eventInstance = eventInstance;\r\n        }\r\n    }\r\n    EventFootprint.prototype.getEventLegacy = function () {\r\n        return (this.eventInstance || this.eventDef).toLegacy();\r\n    };\r\n    return EventFootprint;\r\n}());\r\nexports.default = EventFootprint;\r\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\n// Class that all other classes will inherit from\r\nvar Class = /** @class */ (function () {\r\n    function Class() {\r\n    }\r\n    // Called on a class to create a subclass.\r\n    // LIMITATION: cannot provide a constructor!\r\n    Class.extend = function (members) {\r\n        var SubClass = /** @class */ (function (_super) {\r\n            tslib_1.__extends(SubClass, _super);\r\n            function SubClass() {\r\n                return _super !== null && _super.apply(this, arguments) || this;\r\n            }\r\n            return SubClass;\r\n        }(this));\r\n        util_1.copyOwnProps(members, SubClass.prototype);\r\n        return SubClass;\r\n    };\r\n    // Adds new member variables/methods to the class's prototype.\r\n    // Can be called with another class, or a plain object hash containing new members.\r\n    Class.mixin = function (members) {\r\n        util_1.copyOwnProps(members, this.prototype);\r\n    };\r\n    return Class;\r\n}());\r\nexports.default = Class;\r\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nexports.default = {\r\n    parse: function (eventInput, source) {\r\n        if (util_1.isTimeString(eventInput.start) || moment.isDuration(eventInput.start) ||\r\n            util_1.isTimeString(eventInput.end) || moment.isDuration(eventInput.end)) {\r\n            return RecurringEventDef_1.default.parse(eventInput, source);\r\n        }\r\n        else {\r\n            return SingleEventDef_1.default.parse(eventInput, source);\r\n        }\r\n    }\r\n};\r\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nvar EventDef = /** @class */ (function () {\r\n    function EventDef(source) {\r\n        this.source = source;\r\n        this.className = [];\r\n        this.miscProps = {};\r\n    }\r\n    EventDef.parse = function (rawInput, source) {\r\n        var def = new this(source);\r\n        if (def.applyProps(rawInput)) {\r\n            return def;\r\n        }\r\n        return false;\r\n    };\r\n    EventDef.normalizeId = function (id) {\r\n        return String(id);\r\n    };\r\n    EventDef.generateId = function () {\r\n        return '_fc' + (EventDef.uuid++);\r\n    };\r\n    EventDef.prototype.clone = function () {\r\n        var copy = new this.constructor(this.source);\r\n        copy.id = this.id;\r\n        copy.rawId = this.rawId;\r\n        copy.uid = this.uid; // not really unique anymore :(\r\n        EventDef.copyVerbatimStandardProps(this, copy);\r\n        copy.className = this.className.slice(); // copy\r\n        copy.miscProps = $.extend({}, this.miscProps);\r\n        return copy;\r\n    };\r\n    EventDef.prototype.hasInverseRendering = function () {\r\n        return this.getRendering() === 'inverse-background';\r\n    };\r\n    EventDef.prototype.hasBgRendering = function () {\r\n        var rendering = this.getRendering();\r\n        return rendering === 'inverse-background' || rendering === 'background';\r\n    };\r\n    EventDef.prototype.getRendering = function () {\r\n        if (this.rendering != null) {\r\n            return this.rendering;\r\n        }\r\n        return this.source.rendering;\r\n    };\r\n    EventDef.prototype.getConstraint = function () {\r\n        if (this.constraint != null) {\r\n            return this.constraint;\r\n        }\r\n        if (this.source.constraint != null) {\r\n            return this.source.constraint;\r\n        }\r\n        return this.source.calendar.opt('eventConstraint'); // what about View option?\r\n    };\r\n    EventDef.prototype.getOverlap = function () {\r\n        if (this.overlap != null) {\r\n            return this.overlap;\r\n        }\r\n        if (this.source.overlap != null) {\r\n            return this.source.overlap;\r\n        }\r\n        return this.source.calendar.opt('eventOverlap'); // what about View option?\r\n    };\r\n    EventDef.prototype.isStartExplicitlyEditable = function () {\r\n        if (this.startEditable != null) {\r\n            return this.startEditable;\r\n        }\r\n        return this.source.startEditable;\r\n    };\r\n    EventDef.prototype.isDurationExplicitlyEditable = function () {\r\n        if (this.durationEditable != null) {\r\n            return this.durationEditable;\r\n        }\r\n        return this.source.durationEditable;\r\n    };\r\n    EventDef.prototype.isExplicitlyEditable = function () {\r\n        if (this.editable != null) {\r\n            return this.editable;\r\n        }\r\n        return this.source.editable;\r\n    };\r\n    EventDef.prototype.toLegacy = function () {\r\n        var obj = $.extend({}, this.miscProps);\r\n        obj._id = this.uid;\r\n        obj.source = this.source;\r\n        obj.className = this.className.slice(); // copy\r\n        obj.allDay = this.isAllDay();\r\n        if (this.rawId != null) {\r\n            obj.id = this.rawId;\r\n        }\r\n        EventDef.copyVerbatimStandardProps(this, obj);\r\n        return obj;\r\n    };\r\n    EventDef.prototype.applyManualStandardProps = function (rawProps) {\r\n        if (rawProps.id != null) {\r\n            this.id = EventDef.normalizeId((this.rawId = rawProps.id));\r\n        }\r\n        else {\r\n            this.id = EventDef.generateId();\r\n        }\r\n        if (rawProps._id != null) { // accept this prop, even tho somewhat internal\r\n            this.uid = String(rawProps._id);\r\n        }\r\n        else {\r\n            this.uid = EventDef.generateId();\r\n        }\r\n        // TODO: converge with EventSource\r\n        if ($.isArray(rawProps.className)) {\r\n            this.className = rawProps.className;\r\n        }\r\n        if (typeof rawProps.className === 'string') {\r\n            this.className = rawProps.className.split(/\\s+/);\r\n        }\r\n        return true;\r\n    };\r\n    EventDef.prototype.applyMiscProps = function (rawProps) {\r\n        $.extend(this.miscProps, rawProps);\r\n    };\r\n    EventDef.uuid = 0;\r\n    EventDef.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;\r\n    EventDef.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;\r\n    return EventDef;\r\n}());\r\nexports.default = EventDef;\r\nParsableModelMixin_1.default.mixInto(EventDef);\r\nEventDef.defineStandardProps({\r\n    // not automatically assigned (`false`)\r\n    _id: false,\r\n    id: false,\r\n    className: false,\r\n    source: false,\r\n    // automatically assigned (`true`)\r\n    title: true,\r\n    url: true,\r\n    rendering: true,\r\n    constraint: true,\r\n    overlap: true,\r\n    editable: true,\r\n    startEditable: true,\r\n    durationEditable: true,\r\n    color: true,\r\n    backgroundColor: true,\r\n    borderColor: true,\r\n    textColor: true\r\n});\r\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.default = {\r\n    sourceClasses: [],\r\n    registerClass: function (EventSourceClass) {\r\n        this.sourceClasses.unshift(EventSourceClass); // give highest priority\r\n    },\r\n    parse: function (rawInput, calendar) {\r\n        var sourceClasses = this.sourceClasses;\r\n        var i;\r\n        var eventSource;\r\n        for (i = 0; i < sourceClasses.length; i++) {\r\n            eventSource = sourceClasses[i].parse(rawInput, calendar);\r\n            if (eventSource) {\r\n                return eventSource;\r\n            }\r\n        }\r\n    }\r\n};\r\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventDefMutation = /** @class */ (function () {\r\n    function EventDefMutation() {\r\n    }\r\n    EventDefMutation.createFromRawProps = function (eventInstance, rawProps, largeUnit) {\r\n        var eventDef = eventInstance.def;\r\n        var dateProps = {};\r\n        var standardProps = {};\r\n        var miscProps = {};\r\n        var verbatimStandardProps = {};\r\n        var eventDefId = null;\r\n        var className = null;\r\n        var propName;\r\n        var dateProfile;\r\n        var dateMutation;\r\n        var defMutation;\r\n        for (propName in rawProps) {\r\n            if (EventDateProfile_1.default.isStandardProp(propName)) {\r\n                dateProps[propName] = rawProps[propName];\r\n            }\r\n            else if (eventDef.isStandardProp(propName)) {\r\n                standardProps[propName] = rawProps[propName];\r\n            }\r\n            else if (eventDef.miscProps[propName] !== rawProps[propName]) { // only if changed\r\n                miscProps[propName] = rawProps[propName];\r\n            }\r\n        }\r\n        dateProfile = EventDateProfile_1.default.parse(dateProps, eventDef.source);\r\n        if (dateProfile) { // no failure?\r\n            dateMutation = EventDefDateMutation_1.default.createFromDiff(eventInstance.dateProfile, dateProfile, largeUnit);\r\n        }\r\n        if (standardProps.id !== eventDef.id) {\r\n            eventDefId = standardProps.id; // only apply if there's a change\r\n        }\r\n        if (!util_1.isArraysEqual(standardProps.className, eventDef.className)) {\r\n            className = standardProps.className; // only apply if there's a change\r\n        }\r\n        EventDef_1.default.copyVerbatimStandardProps(standardProps, // src\r\n        verbatimStandardProps // dest\r\n        );\r\n        defMutation = new EventDefMutation();\r\n        defMutation.eventDefId = eventDefId;\r\n        defMutation.className = className;\r\n        defMutation.verbatimStandardProps = verbatimStandardProps;\r\n        defMutation.miscProps = miscProps;\r\n        if (dateMutation) {\r\n            defMutation.dateMutation = dateMutation;\r\n        }\r\n        return defMutation;\r\n    };\r\n    /*\r\n    eventDef assumed to be a SingleEventDef.\r\n    returns an undo function.\r\n    */\r\n    EventDefMutation.prototype.mutateSingle = function (eventDef) {\r\n        var origDateProfile;\r\n        if (this.dateMutation) {\r\n            origDateProfile = eventDef.dateProfile;\r\n            eventDef.dateProfile = this.dateMutation.buildNewDateProfile(origDateProfile, eventDef.source.calendar);\r\n        }\r\n        // can't undo\r\n        // TODO: more DRY with EventDef::applyManualStandardProps\r\n        if (this.eventDefId != null) {\r\n            eventDef.id = EventDef_1.default.normalizeId((eventDef.rawId = this.eventDefId));\r\n        }\r\n        // can't undo\r\n        // TODO: more DRY with EventDef::applyManualStandardProps\r\n        if (this.className) {\r\n            eventDef.className = this.className;\r\n        }\r\n        // can't undo\r\n        if (this.verbatimStandardProps) {\r\n            SingleEventDef_1.default.copyVerbatimStandardProps(this.verbatimStandardProps, // src\r\n            eventDef // dest\r\n            );\r\n        }\r\n        // can't undo\r\n        if (this.miscProps) {\r\n            eventDef.applyMiscProps(this.miscProps);\r\n        }\r\n        if (origDateProfile) {\r\n            return function () {\r\n                eventDef.dateProfile = origDateProfile;\r\n            };\r\n        }\r\n        else {\r\n            return function () { };\r\n        }\r\n    };\r\n    EventDefMutation.prototype.setDateMutation = function (dateMutation) {\r\n        if (dateMutation && !dateMutation.isEmpty()) {\r\n            this.dateMutation = dateMutation;\r\n        }\r\n        else {\r\n            this.dateMutation = null;\r\n        }\r\n    };\r\n    EventDefMutation.prototype.isEmpty = function () {\r\n        return !this.dateMutation;\r\n    };\r\n    return EventDefMutation;\r\n}());\r\nexports.default = EventDefMutation;\r\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventDefDateMutation = /** @class */ (function () {\r\n    function EventDefDateMutation() {\r\n        this.clearEnd = false;\r\n        this.forceTimed = false;\r\n        this.forceAllDay = false;\r\n    }\r\n    EventDefDateMutation.createFromDiff = function (dateProfile0, dateProfile1, largeUnit) {\r\n        var clearEnd = dateProfile0.end && !dateProfile1.end;\r\n        var forceTimed = dateProfile0.isAllDay() && !dateProfile1.isAllDay();\r\n        var forceAllDay = !dateProfile0.isAllDay() && dateProfile1.isAllDay();\r\n        var dateDelta;\r\n        var endDiff;\r\n        var endDelta;\r\n        var mutation;\r\n        // subtracts the dates in the appropriate way, returning a duration\r\n        function subtractDates(date1, date0) {\r\n            if (largeUnit) {\r\n                return util_1.diffByUnit(date1, date0, largeUnit); // poorly named\r\n            }\r\n            else if (dateProfile1.isAllDay()) {\r\n                return util_1.diffDay(date1, date0); // poorly named\r\n            }\r\n            else {\r\n                return util_1.diffDayTime(date1, date0); // poorly named\r\n            }\r\n        }\r\n        dateDelta = subtractDates(dateProfile1.start, dateProfile0.start);\r\n        if (dateProfile1.end) {\r\n            // use unzonedRanges because dateProfile0.end might be null\r\n            endDiff = subtractDates(dateProfile1.unzonedRange.getEnd(), dateProfile0.unzonedRange.getEnd());\r\n            endDelta = endDiff.subtract(dateDelta);\r\n        }\r\n        mutation = new EventDefDateMutation();\r\n        mutation.clearEnd = clearEnd;\r\n        mutation.forceTimed = forceTimed;\r\n        mutation.forceAllDay = forceAllDay;\r\n        mutation.setDateDelta(dateDelta);\r\n        mutation.setEndDelta(endDelta);\r\n        return mutation;\r\n    };\r\n    /*\r\n    returns an undo function.\r\n    */\r\n    EventDefDateMutation.prototype.buildNewDateProfile = function (eventDateProfile, calendar) {\r\n        var start = eventDateProfile.start.clone();\r\n        var end = null;\r\n        var shouldRezone = false;\r\n        if (eventDateProfile.end && !this.clearEnd) {\r\n            end = eventDateProfile.end.clone();\r\n        }\r\n        else if (this.endDelta && !end) {\r\n            end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\r\n        }\r\n        if (this.forceTimed) {\r\n            shouldRezone = true;\r\n            if (!start.hasTime()) {\r\n                start.time(0);\r\n            }\r\n            if (end && !end.hasTime()) {\r\n                end.time(0);\r\n            }\r\n        }\r\n        else if (this.forceAllDay) {\r\n            if (start.hasTime()) {\r\n                start.stripTime();\r\n            }\r\n            if (end && end.hasTime()) {\r\n                end.stripTime();\r\n            }\r\n        }\r\n        if (this.dateDelta) {\r\n            shouldRezone = true;\r\n            start.add(this.dateDelta);\r\n            if (end) {\r\n                end.add(this.dateDelta);\r\n            }\r\n        }\r\n        // do this before adding startDelta to start, so we can work off of start\r\n        if (this.endDelta) {\r\n            shouldRezone = true;\r\n            end.add(this.endDelta);\r\n        }\r\n        if (this.startDelta) {\r\n            shouldRezone = true;\r\n            start.add(this.startDelta);\r\n        }\r\n        if (shouldRezone) {\r\n            start = calendar.applyTimezone(start);\r\n            if (end) {\r\n                end = calendar.applyTimezone(end);\r\n            }\r\n        }\r\n        // TODO: okay to access calendar option?\r\n        if (!end && calendar.opt('forceEventDuration')) {\r\n            end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\r\n        }\r\n        return new EventDateProfile_1.default(start, end, calendar);\r\n    };\r\n    EventDefDateMutation.prototype.setDateDelta = function (dateDelta) {\r\n        if (dateDelta && dateDelta.valueOf()) {\r\n            this.dateDelta = dateDelta;\r\n        }\r\n        else {\r\n            this.dateDelta = null;\r\n        }\r\n    };\r\n    EventDefDateMutation.prototype.setStartDelta = function (startDelta) {\r\n        if (startDelta && startDelta.valueOf()) {\r\n            this.startDelta = startDelta;\r\n        }\r\n        else {\r\n            this.startDelta = null;\r\n        }\r\n    };\r\n    EventDefDateMutation.prototype.setEndDelta = function (endDelta) {\r\n        if (endDelta && endDelta.valueOf()) {\r\n            this.endDelta = endDelta;\r\n        }\r\n        else {\r\n            this.endDelta = null;\r\n        }\r\n    };\r\n    EventDefDateMutation.prototype.isEmpty = function () {\r\n        return !this.clearEnd && !this.forceTimed && !this.forceAllDay &&\r\n            !this.dateDelta && !this.startDelta && !this.endDelta;\r\n    };\r\n    return EventDefDateMutation;\r\n}());\r\nexports.default = EventDefDateMutation;\r\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Class_1 = __webpack_require__(35);\r\n/*\r\nEmbodies a div that has potential scrollbars\r\n*/\r\nvar Scroller = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Scroller, _super);\r\n    function Scroller(options) {\r\n        var _this = _super.call(this) || this;\r\n        options = options || {};\r\n        _this.overflowX = options.overflowX || options.overflow || 'auto';\r\n        _this.overflowY = options.overflowY || options.overflow || 'auto';\r\n        return _this;\r\n    }\r\n    Scroller.prototype.render = function () {\r\n        this.el = this.renderEl();\r\n        this.applyOverflow();\r\n    };\r\n    Scroller.prototype.renderEl = function () {\r\n        return (this.scrollEl = $('<div class=\"fc-scroller\"></div>'));\r\n    };\r\n    // sets to natural height, unlocks overflow\r\n    Scroller.prototype.clear = function () {\r\n        this.setHeight('auto');\r\n        this.applyOverflow();\r\n    };\r\n    Scroller.prototype.destroy = function () {\r\n        this.el.remove();\r\n    };\r\n    // Overflow\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Scroller.prototype.applyOverflow = function () {\r\n        this.scrollEl.css({\r\n            'overflow-x': this.overflowX,\r\n            'overflow-y': this.overflowY\r\n        });\r\n    };\r\n    // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.\r\n    // Useful for preserving scrollbar widths regardless of future resizes.\r\n    // Can pass in scrollbarWidths for optimization.\r\n    Scroller.prototype.lockOverflow = function (scrollbarWidths) {\r\n        var overflowX = this.overflowX;\r\n        var overflowY = this.overflowY;\r\n        scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();\r\n        if (overflowX === 'auto') {\r\n            overflowX = (scrollbarWidths.top || scrollbarWidths.bottom || // horizontal scrollbars?\r\n                // OR scrolling pane with massless scrollbars?\r\n                this.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth\r\n            // subtract 1 because of IE off-by-one issue\r\n            ) ? 'scroll' : 'hidden';\r\n        }\r\n        if (overflowY === 'auto') {\r\n            overflowY = (scrollbarWidths.left || scrollbarWidths.right || // vertical scrollbars?\r\n                // OR scrolling pane with massless scrollbars?\r\n                this.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight\r\n            // subtract 1 because of IE off-by-one issue\r\n            ) ? 'scroll' : 'hidden';\r\n        }\r\n        this.scrollEl.css({ 'overflow-x': overflowX, 'overflow-y': overflowY });\r\n    };\r\n    // Getters / Setters\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Scroller.prototype.setHeight = function (height) {\r\n        this.scrollEl.height(height);\r\n    };\r\n    Scroller.prototype.getScrollTop = function () {\r\n        return this.scrollEl.scrollTop();\r\n    };\r\n    Scroller.prototype.setScrollTop = function (top) {\r\n        this.scrollEl.scrollTop(top);\r\n    };\r\n    Scroller.prototype.getClientWidth = function () {\r\n        return this.scrollEl[0].clientWidth;\r\n    };\r\n    Scroller.prototype.getClientHeight = function () {\r\n        return this.scrollEl[0].clientHeight;\r\n    };\r\n    Scroller.prototype.getScrollbarWidths = function () {\r\n        return util_1.getScrollbarWidths(this.scrollEl);\r\n    };\r\n    return Scroller;\r\n}(Class_1.default));\r\nexports.default = Scroller;\r\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar DateComponent_1 = __webpack_require__(231);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar InteractiveDateComponent = /** @class */ (function (_super) {\r\n    tslib_1.__extends(InteractiveDateComponent, _super);\r\n    function InteractiveDateComponent(_view, _options) {\r\n        var _this = _super.call(this, _view, _options) || this;\r\n        // self-config, overridable by subclasses\r\n        _this.segSelector = '.fc-event-container > *'; // what constitutes an event element?\r\n        if (_this.dateSelectingClass) {\r\n            _this.dateClicking = new _this.dateClickingClass(_this);\r\n        }\r\n        if (_this.dateSelectingClass) {\r\n            _this.dateSelecting = new _this.dateSelectingClass(_this);\r\n        }\r\n        if (_this.eventPointingClass) {\r\n            _this.eventPointing = new _this.eventPointingClass(_this);\r\n        }\r\n        if (_this.eventDraggingClass && _this.eventPointing) {\r\n            _this.eventDragging = new _this.eventDraggingClass(_this, _this.eventPointing);\r\n        }\r\n        if (_this.eventResizingClass && _this.eventPointing) {\r\n            _this.eventResizing = new _this.eventResizingClass(_this, _this.eventPointing);\r\n        }\r\n        if (_this.externalDroppingClass) {\r\n            _this.externalDropping = new _this.externalDroppingClass(_this);\r\n        }\r\n        return _this;\r\n    }\r\n    // Sets the container element that the view should render inside of, does global DOM-related initializations,\r\n    // and renders all the non-date-related content inside.\r\n    InteractiveDateComponent.prototype.setElement = function (el) {\r\n        _super.prototype.setElement.call(this, el);\r\n        if (this.dateClicking) {\r\n            this.dateClicking.bindToEl(el);\r\n        }\r\n        if (this.dateSelecting) {\r\n            this.dateSelecting.bindToEl(el);\r\n        }\r\n        this.bindAllSegHandlersToEl(el);\r\n    };\r\n    InteractiveDateComponent.prototype.removeElement = function () {\r\n        this.endInteractions();\r\n        _super.prototype.removeElement.call(this);\r\n    };\r\n    InteractiveDateComponent.prototype.executeEventUnrender = function () {\r\n        this.endInteractions();\r\n        _super.prototype.executeEventUnrender.call(this);\r\n    };\r\n    InteractiveDateComponent.prototype.bindGlobalHandlers = function () {\r\n        _super.prototype.bindGlobalHandlers.call(this);\r\n        if (this.externalDropping) {\r\n            this.externalDropping.bindToDocument();\r\n        }\r\n    };\r\n    InteractiveDateComponent.prototype.unbindGlobalHandlers = function () {\r\n        _super.prototype.unbindGlobalHandlers.call(this);\r\n        if (this.externalDropping) {\r\n            this.externalDropping.unbindFromDocument();\r\n        }\r\n    };\r\n    InteractiveDateComponent.prototype.bindDateHandlerToEl = function (el, name, handler) {\r\n        var _this = this;\r\n        // attach a handler to the grid's root element.\r\n        // jQuery will take care of unregistering them when removeElement gets called.\r\n        this.el.on(name, function (ev) {\r\n            if (!$(ev.target).is(_this.segSelector + ':not(.fc-helper),' + // directly on an event element\r\n                _this.segSelector + ':not(.fc-helper) *,' + // within an event element\r\n                '.fc-more,' + // a \"more..\" link\r\n                'a[data-goto]' // a clickable nav link\r\n            )) {\r\n                return handler.call(_this, ev);\r\n            }\r\n        });\r\n    };\r\n    InteractiveDateComponent.prototype.bindAllSegHandlersToEl = function (el) {\r\n        [\r\n            this.eventPointing,\r\n            this.eventDragging,\r\n            this.eventResizing\r\n        ].forEach(function (eventInteraction) {\r\n            if (eventInteraction) {\r\n                eventInteraction.bindToEl(el);\r\n            }\r\n        });\r\n    };\r\n    InteractiveDateComponent.prototype.bindSegHandlerToEl = function (el, name, handler) {\r\n        var _this = this;\r\n        el.on(name, this.segSelector, function (ev) {\r\n            var segEl = $(ev.currentTarget);\r\n            if (!segEl.is('.fc-helper')) {\r\n                var seg = segEl.data('fc-seg'); // grab segment data. put there by View::renderEventsPayload\r\n                if (seg && !_this.shouldIgnoreEventPointing()) {\r\n                    return handler.call(_this, seg, ev); // context will be the Grid\r\n                }\r\n            }\r\n        });\r\n    };\r\n    InteractiveDateComponent.prototype.shouldIgnoreMouse = function () {\r\n        // HACK\r\n        // This will still work even though bindDateHandlerToEl doesn't use GlobalEmitter.\r\n        return GlobalEmitter_1.default.get().shouldIgnoreMouse();\r\n    };\r\n    InteractiveDateComponent.prototype.shouldIgnoreTouch = function () {\r\n        var view = this._getView();\r\n        // On iOS (and Android?) when a new selection is initiated overtop another selection,\r\n        // the touchend never fires because the elements gets removed mid-touch-interaction (my theory).\r\n        // HACK: simply don't allow this to happen.\r\n        // ALSO: prevent selection when an *event* is already raised.\r\n        return view.isSelected || view.selectedEvent;\r\n    };\r\n    InteractiveDateComponent.prototype.shouldIgnoreEventPointing = function () {\r\n        // only call the handlers if there is not a drag/resize in progress\r\n        return (this.eventDragging && this.eventDragging.isDragging) ||\r\n            (this.eventResizing && this.eventResizing.isResizing);\r\n    };\r\n    InteractiveDateComponent.prototype.canStartSelection = function (seg, ev) {\r\n        return util_1.getEvIsTouch(ev) &&\r\n            !this.canStartResize(seg, ev) &&\r\n            (this.isEventDefDraggable(seg.footprint.eventDef) ||\r\n                this.isEventDefResizable(seg.footprint.eventDef));\r\n    };\r\n    InteractiveDateComponent.prototype.canStartDrag = function (seg, ev) {\r\n        return !this.canStartResize(seg, ev) &&\r\n            this.isEventDefDraggable(seg.footprint.eventDef);\r\n    };\r\n    InteractiveDateComponent.prototype.canStartResize = function (seg, ev) {\r\n        var view = this._getView();\r\n        var eventDef = seg.footprint.eventDef;\r\n        return (!util_1.getEvIsTouch(ev) || view.isEventDefSelected(eventDef)) &&\r\n            this.isEventDefResizable(eventDef) &&\r\n            $(ev.target).is('.fc-resizer');\r\n    };\r\n    // Kills all in-progress dragging.\r\n    // Useful for when public API methods that result in re-rendering are invoked during a drag.\r\n    // Also useful for when touch devices misbehave and don't fire their touchend.\r\n    InteractiveDateComponent.prototype.endInteractions = function () {\r\n        [\r\n            this.dateClicking,\r\n            this.dateSelecting,\r\n            this.eventPointing,\r\n            this.eventDragging,\r\n            this.eventResizing\r\n        ].forEach(function (interaction) {\r\n            if (interaction) {\r\n                interaction.end();\r\n            }\r\n        });\r\n    };\r\n    // Event Drag-n-Drop\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Computes if the given event is allowed to be dragged by the user\r\n    InteractiveDateComponent.prototype.isEventDefDraggable = function (eventDef) {\r\n        return this.isEventDefStartEditable(eventDef);\r\n    };\r\n    InteractiveDateComponent.prototype.isEventDefStartEditable = function (eventDef) {\r\n        var isEditable = eventDef.isStartExplicitlyEditable();\r\n        if (isEditable == null) {\r\n            isEditable = this.opt('eventStartEditable');\r\n            if (isEditable == null) {\r\n                isEditable = this.isEventDefGenerallyEditable(eventDef);\r\n            }\r\n        }\r\n        return isEditable;\r\n    };\r\n    InteractiveDateComponent.prototype.isEventDefGenerallyEditable = function (eventDef) {\r\n        var isEditable = eventDef.isExplicitlyEditable();\r\n        if (isEditable == null) {\r\n            isEditable = this.opt('editable');\r\n        }\r\n        return isEditable;\r\n    };\r\n    // Event Resizing\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Computes if the given event is allowed to be resized from its starting edge\r\n    InteractiveDateComponent.prototype.isEventDefResizableFromStart = function (eventDef) {\r\n        return this.opt('eventResizableFromStart') && this.isEventDefResizable(eventDef);\r\n    };\r\n    // Computes if the given event is allowed to be resized from its ending edge\r\n    InteractiveDateComponent.prototype.isEventDefResizableFromEnd = function (eventDef) {\r\n        return this.isEventDefResizable(eventDef);\r\n    };\r\n    // Computes if the given event is allowed to be resized by the user at all\r\n    InteractiveDateComponent.prototype.isEventDefResizable = function (eventDef) {\r\n        var isResizable = eventDef.isDurationExplicitlyEditable();\r\n        if (isResizable == null) {\r\n            isResizable = this.opt('eventDurationEditable');\r\n            if (isResizable == null) {\r\n                isResizable = this.isEventDefGenerallyEditable(eventDef);\r\n            }\r\n        }\r\n        return isResizable;\r\n    };\r\n    // Event Mutation / Constraints\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Diffs the two dates, returning a duration, based on granularity of the grid\r\n    // TODO: port isTimeScale into this system?\r\n    InteractiveDateComponent.prototype.diffDates = function (a, b) {\r\n        if (this.largeUnit) {\r\n            return util_1.diffByUnit(a, b, this.largeUnit);\r\n        }\r\n        else {\r\n            return util_1.diffDayTime(a, b);\r\n        }\r\n    };\r\n    // is it allowed, in relation to the view's validRange?\r\n    // NOTE: very similar to isExternalInstanceGroupAllowed\r\n    InteractiveDateComponent.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\r\n        var view = this._getView();\r\n        var dateProfile = this.dateProfile;\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            // TODO: just use getAllEventRanges directly\r\n            if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\r\n                return false;\r\n            }\r\n        }\r\n        return view.calendar.constraints.isEventInstanceGroupAllowed(eventInstanceGroup);\r\n    };\r\n    // NOTE: very similar to isEventInstanceGroupAllowed\r\n    // when it's a completely anonymous external drag, no event.\r\n    InteractiveDateComponent.prototype.isExternalInstanceGroupAllowed = function (eventInstanceGroup) {\r\n        var view = this._getView();\r\n        var dateProfile = this.dateProfile;\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\r\n                return false;\r\n            }\r\n        }\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            // treat it as a selection\r\n            // TODO: pass in eventInstanceGroup instead\r\n            //  because we don't want calendar's constraint system to depend on a component's\r\n            //  determination of footprints.\r\n            if (!view.calendar.constraints.isSelectionFootprintAllowed(eventFootprints[i].componentFootprint)) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    return InteractiveDateComponent;\r\n}(DateComponent_1.default));\r\nexports.default = InteractiveDateComponent;\r\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar RenderQueue_1 = __webpack_require__(229);\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\n/* An abstract class from which other views inherit from\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar View = /** @class */ (function (_super) {\r\n    tslib_1.__extends(View, _super);\r\n    function View(calendar, viewSpec) {\r\n        var _this = _super.call(this, null, viewSpec.options) || this;\r\n        _this.batchRenderDepth = 0;\r\n        _this.isSelected = false; // boolean whether a range of time is user-selected or not\r\n        _this.calendar = calendar;\r\n        _this.viewSpec = viewSpec;\r\n        // shortcuts\r\n        _this.type = viewSpec.type;\r\n        // .name is deprecated\r\n        _this.name = _this.type;\r\n        _this.initRenderQueue();\r\n        _this.initHiddenDays();\r\n        _this.dateProfileGenerator = new _this.dateProfileGeneratorClass(_this);\r\n        _this.bindBaseRenderHandlers();\r\n        _this.eventOrderSpecs = util_1.parseFieldSpecs(_this.opt('eventOrder'));\r\n        // legacy\r\n        if (_this['initialize']) {\r\n            _this['initialize']();\r\n        }\r\n        return _this;\r\n    }\r\n    View.prototype._getView = function () {\r\n        return this;\r\n    };\r\n    // Retrieves an option with the given name\r\n    View.prototype.opt = function (name) {\r\n        return this.options[name];\r\n    };\r\n    /* Render Queue\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.initRenderQueue = function () {\r\n        this.renderQueue = new RenderQueue_1.default({\r\n            event: this.opt('eventRenderWait')\r\n        });\r\n        this.renderQueue.on('start', this.onRenderQueueStart.bind(this));\r\n        this.renderQueue.on('stop', this.onRenderQueueStop.bind(this));\r\n        this.on('before:change', this.startBatchRender);\r\n        this.on('change', this.stopBatchRender);\r\n    };\r\n    View.prototype.onRenderQueueStart = function () {\r\n        this.calendar.freezeContentHeight();\r\n        this.addScroll(this.queryScroll());\r\n    };\r\n    View.prototype.onRenderQueueStop = function () {\r\n        if (this.calendar.updateViewSize()) { // success?\r\n            this.popScroll();\r\n        }\r\n        this.calendar.thawContentHeight();\r\n    };\r\n    View.prototype.startBatchRender = function () {\r\n        if (!(this.batchRenderDepth++)) {\r\n            this.renderQueue.pause();\r\n        }\r\n    };\r\n    View.prototype.stopBatchRender = function () {\r\n        if (!(--this.batchRenderDepth)) {\r\n            this.renderQueue.resume();\r\n        }\r\n    };\r\n    View.prototype.requestRender = function (func, namespace, actionType) {\r\n        this.renderQueue.queue(func, namespace, actionType);\r\n    };\r\n    // given func will auto-bind to `this`\r\n    View.prototype.whenSizeUpdated = function (func) {\r\n        if (this.renderQueue.isRunning) {\r\n            this.renderQueue.one('stop', func.bind(this));\r\n        }\r\n        else {\r\n            func.call(this);\r\n        }\r\n    };\r\n    /* Title and Date Formatting\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Computes what the title at the top of the calendar should be for this view\r\n    View.prototype.computeTitle = function (dateProfile) {\r\n        var unzonedRange;\r\n        // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\r\n        if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\r\n            unzonedRange = dateProfile.currentUnzonedRange;\r\n        }\r\n        else { // for day units or smaller, use the actual day range\r\n            unzonedRange = dateProfile.activeUnzonedRange;\r\n        }\r\n        return this.formatRange({\r\n            start: this.calendar.msToMoment(unzonedRange.startMs, dateProfile.isRangeAllDay),\r\n            end: this.calendar.msToMoment(unzonedRange.endMs, dateProfile.isRangeAllDay)\r\n        }, dateProfile.isRangeAllDay, this.opt('titleFormat') || this.computeTitleFormat(dateProfile), this.opt('titleRangeSeparator'));\r\n    };\r\n    // Generates the format string that should be used to generate the title for the current date range.\r\n    // Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\r\n    View.prototype.computeTitleFormat = function (dateProfile) {\r\n        var currentRangeUnit = dateProfile.currentRangeUnit;\r\n        if (currentRangeUnit === 'year') {\r\n            return 'YYYY';\r\n        }\r\n        else if (currentRangeUnit === 'month') {\r\n            return this.opt('monthYearFormat'); // like \"September 2014\"\r\n        }\r\n        else if (dateProfile.currentUnzonedRange.as('days') > 1) {\r\n            return 'll'; // multi-day range. shorter, like \"Sep 9 - 10 2014\"\r\n        }\r\n        else {\r\n            return 'LL'; // one day. longer, like \"September 9 2014\"\r\n        }\r\n    };\r\n    // Date Setting/Unsetting\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.setDate = function (date) {\r\n        var currentDateProfile = this.get('dateProfile');\r\n        var newDateProfile = this.dateProfileGenerator.build(date, undefined, true); // forceToValid=true\r\n        if (!currentDateProfile ||\r\n            !currentDateProfile.activeUnzonedRange.equals(newDateProfile.activeUnzonedRange)) {\r\n            this.set('dateProfile', newDateProfile);\r\n        }\r\n    };\r\n    View.prototype.unsetDate = function () {\r\n        this.unset('dateProfile');\r\n    };\r\n    // Event Data\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.fetchInitialEvents = function (dateProfile) {\r\n        var calendar = this.calendar;\r\n        var forceAllDay = dateProfile.isRangeAllDay && !this.usesMinMaxTime;\r\n        return calendar.requestEvents(calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, forceAllDay), calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, forceAllDay));\r\n    };\r\n    View.prototype.bindEventChanges = function () {\r\n        this.listenTo(this.calendar, 'eventsReset', this.resetEvents); // TODO: make this a real event\r\n    };\r\n    View.prototype.unbindEventChanges = function () {\r\n        this.stopListeningTo(this.calendar, 'eventsReset');\r\n    };\r\n    View.prototype.setEvents = function (eventsPayload) {\r\n        this.set('currentEvents', eventsPayload);\r\n        this.set('hasEvents', true);\r\n    };\r\n    View.prototype.unsetEvents = function () {\r\n        this.unset('currentEvents');\r\n        this.unset('hasEvents');\r\n    };\r\n    View.prototype.resetEvents = function (eventsPayload) {\r\n        this.startBatchRender();\r\n        this.unsetEvents();\r\n        this.setEvents(eventsPayload);\r\n        this.stopBatchRender();\r\n    };\r\n    // Date High-level Rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.requestDateRender = function (dateProfile) {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.executeDateRender(dateProfile);\r\n        }, 'date', 'init');\r\n    };\r\n    View.prototype.requestDateUnrender = function () {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.executeDateUnrender();\r\n        }, 'date', 'destroy');\r\n    };\r\n    // if dateProfile not specified, uses current\r\n    View.prototype.executeDateRender = function (dateProfile) {\r\n        _super.prototype.executeDateRender.call(this, dateProfile);\r\n        if (this['render']) {\r\n            this['render'](); // TODO: deprecate\r\n        }\r\n        this.trigger('datesRendered');\r\n        this.addScroll({ isDateInit: true });\r\n        this.startNowIndicator(); // shouldn't render yet because updateSize will be called soon\r\n    };\r\n    View.prototype.executeDateUnrender = function () {\r\n        this.unselect();\r\n        this.stopNowIndicator();\r\n        this.trigger('before:datesUnrendered');\r\n        if (this['destroy']) {\r\n            this['destroy'](); // TODO: deprecate\r\n        }\r\n        _super.prototype.executeDateUnrender.call(this);\r\n    };\r\n    // \"Base\" rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.bindBaseRenderHandlers = function () {\r\n        var _this = this;\r\n        this.on('datesRendered', function () {\r\n            _this.whenSizeUpdated(_this.triggerViewRender);\r\n        });\r\n        this.on('before:datesUnrendered', function () {\r\n            _this.triggerViewDestroy();\r\n        });\r\n    };\r\n    View.prototype.triggerViewRender = function () {\r\n        this.publiclyTrigger('viewRender', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    View.prototype.triggerViewDestroy = function () {\r\n        this.publiclyTrigger('viewDestroy', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    // Event High-level Rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.requestEventsRender = function (eventsPayload) {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.executeEventRender(eventsPayload);\r\n            _this.whenSizeUpdated(_this.triggerAfterEventsRendered);\r\n        }, 'event', 'init');\r\n    };\r\n    View.prototype.requestEventsUnrender = function () {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.triggerBeforeEventsDestroyed();\r\n            _this.executeEventUnrender();\r\n        }, 'event', 'destroy');\r\n    };\r\n    // Business Hour High-level Rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.requestBusinessHoursRender = function (businessHourGenerator) {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.renderBusinessHours(businessHourGenerator);\r\n        }, 'businessHours', 'init');\r\n    };\r\n    View.prototype.requestBusinessHoursUnrender = function () {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.unrenderBusinessHours();\r\n        }, 'businessHours', 'destroy');\r\n    };\r\n    // Misc view rendering utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Binds DOM handlers to elements that reside outside the view container, such as the document\r\n    View.prototype.bindGlobalHandlers = function () {\r\n        _super.prototype.bindGlobalHandlers.call(this);\r\n        this.listenTo(GlobalEmitter_1.default.get(), {\r\n            touchstart: this.processUnselect,\r\n            mousedown: this.handleDocumentMousedown\r\n        });\r\n    };\r\n    // Unbinds DOM handlers from elements that reside outside the view container\r\n    View.prototype.unbindGlobalHandlers = function () {\r\n        _super.prototype.unbindGlobalHandlers.call(this);\r\n        this.stopListeningTo(GlobalEmitter_1.default.get());\r\n    };\r\n    /* Now Indicator\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Immediately render the current time indicator and begins re-rendering it at an interval,\r\n    // which is defined by this.getNowIndicatorUnit().\r\n    // TODO: somehow do this for the current whole day's background too\r\n    View.prototype.startNowIndicator = function () {\r\n        var _this = this;\r\n        var unit;\r\n        var update;\r\n        var delay; // ms wait value\r\n        if (this.opt('nowIndicator')) {\r\n            unit = this.getNowIndicatorUnit();\r\n            if (unit) {\r\n                update = util_1.proxy(this, 'updateNowIndicator'); // bind to `this`\r\n                this.initialNowDate = this.calendar.getNow();\r\n                this.initialNowQueriedMs = new Date().valueOf();\r\n                // wait until the beginning of the next interval\r\n                delay = this.initialNowDate.clone().startOf(unit).add(1, unit).valueOf() - this.initialNowDate.valueOf();\r\n                this.nowIndicatorTimeoutID = setTimeout(function () {\r\n                    _this.nowIndicatorTimeoutID = null;\r\n                    update();\r\n                    delay = +moment.duration(1, unit);\r\n                    delay = Math.max(100, delay); // prevent too frequent\r\n                    _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval\r\n                }, delay);\r\n            }\r\n            // rendering will be initiated in updateSize\r\n        }\r\n    };\r\n    // rerenders the now indicator, computing the new current time from the amount of time that has passed\r\n    // since the initial getNow call.\r\n    View.prototype.updateNowIndicator = function () {\r\n        if (this.isDatesRendered &&\r\n            this.initialNowDate // activated before?\r\n        ) {\r\n            this.unrenderNowIndicator(); // won't unrender if unnecessary\r\n            this.renderNowIndicator(this.initialNowDate.clone().add(new Date().valueOf() - this.initialNowQueriedMs) // add ms\r\n            );\r\n            this.isNowIndicatorRendered = true;\r\n        }\r\n    };\r\n    // Immediately unrenders the view's current time indicator and stops any re-rendering timers.\r\n    // Won't cause side effects if indicator isn't rendered.\r\n    View.prototype.stopNowIndicator = function () {\r\n        if (this.isNowIndicatorRendered) {\r\n            if (this.nowIndicatorTimeoutID) {\r\n                clearTimeout(this.nowIndicatorTimeoutID);\r\n                this.nowIndicatorTimeoutID = null;\r\n            }\r\n            if (this.nowIndicatorIntervalID) {\r\n                clearInterval(this.nowIndicatorIntervalID);\r\n                this.nowIndicatorIntervalID = null;\r\n            }\r\n            this.unrenderNowIndicator();\r\n            this.isNowIndicatorRendered = false;\r\n        }\r\n    };\r\n    /* Dimensions\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        if (this['setHeight']) { // for legacy API\r\n            this['setHeight'](totalHeight, isAuto);\r\n        }\r\n        else {\r\n            _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        }\r\n        this.updateNowIndicator();\r\n    };\r\n    /* Scroller\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.addScroll = function (scroll) {\r\n        var queuedScroll = this.queuedScroll || (this.queuedScroll = {});\r\n        $.extend(queuedScroll, scroll);\r\n    };\r\n    View.prototype.popScroll = function () {\r\n        this.applyQueuedScroll();\r\n        this.queuedScroll = null;\r\n    };\r\n    View.prototype.applyQueuedScroll = function () {\r\n        if (this.queuedScroll) {\r\n            this.applyScroll(this.queuedScroll);\r\n        }\r\n    };\r\n    View.prototype.queryScroll = function () {\r\n        var scroll = {};\r\n        if (this.isDatesRendered) {\r\n            $.extend(scroll, this.queryDateScroll());\r\n        }\r\n        return scroll;\r\n    };\r\n    View.prototype.applyScroll = function (scroll) {\r\n        if (scroll.isDateInit && this.isDatesRendered) {\r\n            $.extend(scroll, this.computeInitialDateScroll());\r\n        }\r\n        if (this.isDatesRendered) {\r\n            this.applyDateScroll(scroll);\r\n        }\r\n    };\r\n    View.prototype.computeInitialDateScroll = function () {\r\n        return {}; // subclasses must implement\r\n    };\r\n    View.prototype.queryDateScroll = function () {\r\n        return {}; // subclasses must implement\r\n    };\r\n    View.prototype.applyDateScroll = function (scroll) {\r\n        // subclasses must implement\r\n    };\r\n    /* Event Drag-n-Drop\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.reportEventDrop = function (eventInstance, eventMutation, el, ev) {\r\n        var eventManager = this.calendar.eventManager;\r\n        var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\r\n        var dateMutation = eventMutation.dateMutation;\r\n        // update the EventInstance, for handlers\r\n        if (dateMutation) {\r\n            eventInstance.dateProfile = dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\r\n        }\r\n        this.triggerEventDrop(eventInstance, \r\n        // a drop doesn't necessarily mean a date mutation (ex: resource change)\r\n        (dateMutation && dateMutation.dateDelta) || moment.duration(), undoFunc, el, ev);\r\n    };\r\n    // Triggers event-drop handlers that have subscribed via the API\r\n    View.prototype.triggerEventDrop = function (eventInstance, dateDelta, undoFunc, el, ev) {\r\n        this.publiclyTrigger('eventDrop', {\r\n            context: el[0],\r\n            args: [\r\n                eventInstance.toLegacy(),\r\n                dateDelta,\r\n                undoFunc,\r\n                ev,\r\n                {},\r\n                this\r\n            ]\r\n        });\r\n    };\r\n    /* External Element Drag-n-Drop\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Must be called when an external element, via jQuery UI, has been dropped onto the calendar.\r\n    // `meta` is the parsed data that has been embedded into the dragging event.\r\n    // `dropLocation` is an object that contains the new zoned start/end/allDay values for the event.\r\n    View.prototype.reportExternalDrop = function (singleEventDef, isEvent, isSticky, el, ev, ui) {\r\n        if (isEvent) {\r\n            this.calendar.eventManager.addEventDef(singleEventDef, isSticky);\r\n        }\r\n        this.triggerExternalDrop(singleEventDef, isEvent, el, ev, ui);\r\n    };\r\n    // Triggers external-drop handlers that have subscribed via the API\r\n    View.prototype.triggerExternalDrop = function (singleEventDef, isEvent, el, ev, ui) {\r\n        // trigger 'drop' regardless of whether element represents an event\r\n        this.publiclyTrigger('drop', {\r\n            context: el[0],\r\n            args: [\r\n                singleEventDef.dateProfile.start.clone(),\r\n                ev,\r\n                ui,\r\n                this\r\n            ]\r\n        });\r\n        if (isEvent) {\r\n            // signal an external event landed\r\n            this.publiclyTrigger('eventReceive', {\r\n                context: this,\r\n                args: [\r\n                    singleEventDef.buildInstance().toLegacy(),\r\n                    this\r\n                ]\r\n            });\r\n        }\r\n    };\r\n    /* Event Resizing\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Must be called when an event in the view has been resized to a new length\r\n    View.prototype.reportEventResize = function (eventInstance, eventMutation, el, ev) {\r\n        var eventManager = this.calendar.eventManager;\r\n        var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\r\n        // update the EventInstance, for handlers\r\n        eventInstance.dateProfile = eventMutation.dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\r\n        var resizeDelta = eventMutation.dateMutation.endDelta || eventMutation.dateMutation.startDelta;\r\n        this.triggerEventResize(eventInstance, resizeDelta, undoFunc, el, ev);\r\n    };\r\n    // Triggers event-resize handlers that have subscribed via the API\r\n    View.prototype.triggerEventResize = function (eventInstance, resizeDelta, undoFunc, el, ev) {\r\n        this.publiclyTrigger('eventResize', {\r\n            context: el[0],\r\n            args: [\r\n                eventInstance.toLegacy(),\r\n                resizeDelta,\r\n                undoFunc,\r\n                ev,\r\n                {},\r\n                this\r\n            ]\r\n        });\r\n    };\r\n    /* Selection (time range)\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Selects a date span on the view. `start` and `end` are both Moments.\r\n    // `ev` is the native mouse event that begin the interaction.\r\n    View.prototype.select = function (footprint, ev) {\r\n        this.unselect(ev);\r\n        this.renderSelectionFootprint(footprint);\r\n        this.reportSelection(footprint, ev);\r\n    };\r\n    View.prototype.renderSelectionFootprint = function (footprint) {\r\n        if (this['renderSelection']) { // legacy method in custom view classes\r\n            this['renderSelection'](footprint.toLegacy(this.calendar));\r\n        }\r\n        else {\r\n            _super.prototype.renderSelectionFootprint.call(this, footprint);\r\n        }\r\n    };\r\n    // Called when a new selection is made. Updates internal state and triggers handlers.\r\n    View.prototype.reportSelection = function (footprint, ev) {\r\n        this.isSelected = true;\r\n        this.triggerSelect(footprint, ev);\r\n    };\r\n    // Triggers handlers to 'select'\r\n    View.prototype.triggerSelect = function (footprint, ev) {\r\n        var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\r\n        this.publiclyTrigger('select', {\r\n            context: this,\r\n            args: [\r\n                dateProfile.start,\r\n                dateProfile.end,\r\n                ev,\r\n                this\r\n            ]\r\n        });\r\n    };\r\n    // Undoes a selection. updates in the internal state and triggers handlers.\r\n    // `ev` is the native mouse event that began the interaction.\r\n    View.prototype.unselect = function (ev) {\r\n        if (this.isSelected) {\r\n            this.isSelected = false;\r\n            if (this['destroySelection']) {\r\n                this['destroySelection'](); // TODO: deprecate\r\n            }\r\n            this.unrenderSelection();\r\n            this.publiclyTrigger('unselect', {\r\n                context: this,\r\n                args: [ev, this]\r\n            });\r\n        }\r\n    };\r\n    /* Event Selection\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.selectEventInstance = function (eventInstance) {\r\n        if (!this.selectedEventInstance ||\r\n            this.selectedEventInstance !== eventInstance) {\r\n            this.unselectEventInstance();\r\n            this.getEventSegs().forEach(function (seg) {\r\n                if (seg.footprint.eventInstance === eventInstance &&\r\n                    seg.el // necessary?\r\n                ) {\r\n                    seg.el.addClass('fc-selected');\r\n                }\r\n            });\r\n            this.selectedEventInstance = eventInstance;\r\n        }\r\n    };\r\n    View.prototype.unselectEventInstance = function () {\r\n        if (this.selectedEventInstance) {\r\n            this.getEventSegs().forEach(function (seg) {\r\n                if (seg.el) { // necessary?\r\n                    seg.el.removeClass('fc-selected');\r\n                }\r\n            });\r\n            this.selectedEventInstance = null;\r\n        }\r\n    };\r\n    View.prototype.isEventDefSelected = function (eventDef) {\r\n        // event references might change on refetchEvents(), while selectedEventInstance doesn't,\r\n        // so compare IDs\r\n        return this.selectedEventInstance && this.selectedEventInstance.def.id === eventDef.id;\r\n    };\r\n    /* Mouse / Touch Unselecting (time range & event unselection)\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // TODO: move consistently to down/start or up/end?\r\n    // TODO: don't kill previous selection if touch scrolling\r\n    View.prototype.handleDocumentMousedown = function (ev) {\r\n        if (util_1.isPrimaryMouseButton(ev)) {\r\n            this.processUnselect(ev);\r\n        }\r\n    };\r\n    View.prototype.processUnselect = function (ev) {\r\n        this.processRangeUnselect(ev);\r\n        this.processEventUnselect(ev);\r\n    };\r\n    View.prototype.processRangeUnselect = function (ev) {\r\n        var ignore;\r\n        // is there a time-range selection?\r\n        if (this.isSelected && this.opt('unselectAuto')) {\r\n            // only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element\r\n            ignore = this.opt('unselectCancel');\r\n            if (!ignore || !$(ev.target).closest(ignore).length) {\r\n                this.unselect(ev);\r\n            }\r\n        }\r\n    };\r\n    View.prototype.processEventUnselect = function (ev) {\r\n        if (this.selectedEventInstance) {\r\n            if (!$(ev.target).closest('.fc-selected').length) {\r\n                this.unselectEventInstance();\r\n            }\r\n        }\r\n    };\r\n    /* Triggers\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.triggerBaseRendered = function () {\r\n        this.publiclyTrigger('viewRender', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    View.prototype.triggerBaseUnrendered = function () {\r\n        this.publiclyTrigger('viewDestroy', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    // Triggers handlers to 'dayClick'\r\n    // Span has start/end of the clicked area. Only the start is useful.\r\n    View.prototype.triggerDayClick = function (footprint, dayEl, ev) {\r\n        var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\r\n        this.publiclyTrigger('dayClick', {\r\n            context: dayEl,\r\n            args: [dateProfile.start, ev, this]\r\n        });\r\n    };\r\n    /* Date Utils\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // For DateComponent::getDayClasses\r\n    View.prototype.isDateInOtherMonth = function (date, dateProfile) {\r\n        return false;\r\n    };\r\n    // Arguments after name will be forwarded to a hypothetical function value\r\n    // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.\r\n    // Always clone your objects if you fear mutation.\r\n    View.prototype.getUnzonedRangeOption = function (name) {\r\n        var val = this.opt(name);\r\n        if (typeof val === 'function') {\r\n            val = val.apply(null, Array.prototype.slice.call(arguments, 1));\r\n        }\r\n        if (val) {\r\n            return this.calendar.parseUnzonedRange(val);\r\n        }\r\n    };\r\n    /* Hidden Days\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Initializes internal variables related to calculating hidden days-of-week\r\n    View.prototype.initHiddenDays = function () {\r\n        var hiddenDays = this.opt('hiddenDays') || []; // array of day-of-week indices that are hidden\r\n        var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\r\n        var dayCnt = 0;\r\n        var i;\r\n        if (this.opt('weekends') === false) {\r\n            hiddenDays.push(0, 6); // 0=sunday, 6=saturday\r\n        }\r\n        for (i = 0; i < 7; i++) {\r\n            if (!(isHiddenDayHash[i] = $.inArray(i, hiddenDays) !== -1)) {\r\n                dayCnt++;\r\n            }\r\n        }\r\n        if (!dayCnt) {\r\n            throw new Error('invalid hiddenDays'); // all days were hidden? bad.\r\n        }\r\n        this.isHiddenDayHash = isHiddenDayHash;\r\n    };\r\n    // Remove days from the beginning and end of the range that are computed as hidden.\r\n    // If the whole range is trimmed off, returns null\r\n    View.prototype.trimHiddenDays = function (inputUnzonedRange) {\r\n        var start = inputUnzonedRange.getStart();\r\n        var end = inputUnzonedRange.getEnd();\r\n        if (start) {\r\n            start = this.skipHiddenDays(start);\r\n        }\r\n        if (end) {\r\n            end = this.skipHiddenDays(end, -1, true);\r\n        }\r\n        if (start === null || end === null || start < end) {\r\n            return new UnzonedRange_1.default(start, end);\r\n        }\r\n        return null;\r\n    };\r\n    // Is the current day hidden?\r\n    // `day` is a day-of-week index (0-6), or a Moment\r\n    View.prototype.isHiddenDay = function (day) {\r\n        if (moment.isMoment(day)) {\r\n            day = day.day();\r\n        }\r\n        return this.isHiddenDayHash[day];\r\n    };\r\n    // Incrementing the current day until it is no longer a hidden day, returning a copy.\r\n    // DOES NOT CONSIDER validUnzonedRange!\r\n    // If the initial value of `date` is not a hidden day, don't do anything.\r\n    // Pass `isExclusive` as `true` if you are dealing with an end date.\r\n    // `inc` defaults to `1` (increment one day forward each time)\r\n    View.prototype.skipHiddenDays = function (date, inc, isExclusive) {\r\n        if (inc === void 0) { inc = 1; }\r\n        if (isExclusive === void 0) { isExclusive = false; }\r\n        var out = date.clone();\r\n        while (this.isHiddenDayHash[(out.day() + (isExclusive ? inc : 0) + 7) % 7]) {\r\n            out.add(inc, 'days');\r\n        }\r\n        return out;\r\n    };\r\n    return View;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = View;\r\nView.prototype.usesMinMaxTime = false;\r\nView.prototype.dateProfileGeneratorClass = DateProfileGenerator_1.default;\r\nView.watch('displayingDates', ['isInDom', 'dateProfile'], function (deps) {\r\n    this.requestDateRender(deps.dateProfile);\r\n}, function () {\r\n    this.requestDateUnrender();\r\n});\r\nView.watch('displayingBusinessHours', ['displayingDates', 'businessHourGenerator'], function (deps) {\r\n    this.requestBusinessHoursRender(deps.businessHourGenerator);\r\n}, function () {\r\n    this.requestBusinessHoursUnrender();\r\n});\r\nView.watch('initialEvents', ['dateProfile'], function (deps) {\r\n    return this.fetchInitialEvents(deps.dateProfile);\r\n});\r\nView.watch('bindingEvents', ['initialEvents'], function (deps) {\r\n    this.setEvents(deps.initialEvents);\r\n    this.bindEventChanges();\r\n}, function () {\r\n    this.unbindEventChanges();\r\n    this.unsetEvents();\r\n});\r\nView.watch('displayingEvents', ['displayingDates', 'hasEvents'], function () {\r\n    this.requestEventsRender(this.get('currentEvents'));\r\n}, function () {\r\n    this.requestEventsUnrender();\r\n});\r\nView.watch('title', ['dateProfile'], function (deps) {\r\n    return (this.title = this.computeTitle(deps.dateProfile)); // assign to View for legacy reasons\r\n});\r\nView.watch('legacyDateProps', ['dateProfile'], function (deps) {\r\n    var calendar = this.calendar;\r\n    var dateProfile = deps.dateProfile;\r\n    // DEPRECATED, but we need to keep it updated...\r\n    this.start = calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, dateProfile.isRangeAllDay);\r\n    this.end = calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, dateProfile.isRangeAllDay);\r\n    this.intervalStart = calendar.msToMoment(dateProfile.currentUnzonedRange.startMs, dateProfile.isRangeAllDay);\r\n    this.intervalEnd = calendar.msToMoment(dateProfile.currentUnzonedRange.endMs, dateProfile.isRangeAllDay);\r\n});\r\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer = /** @class */ (function () {\r\n    function EventRenderer(component, fillRenderer) {\r\n        this.view = component._getView();\r\n        this.component = component;\r\n        this.fillRenderer = fillRenderer;\r\n    }\r\n    EventRenderer.prototype.opt = function (name) {\r\n        return this.view.opt(name);\r\n    };\r\n    // Updates values that rely on options and also relate to range\r\n    EventRenderer.prototype.rangeUpdated = function () {\r\n        var displayEventTime;\r\n        var displayEventEnd;\r\n        this.eventTimeFormat =\r\n            this.opt('eventTimeFormat') ||\r\n                this.opt('timeFormat') || // deprecated\r\n                this.computeEventTimeFormat();\r\n        displayEventTime = this.opt('displayEventTime');\r\n        if (displayEventTime == null) {\r\n            displayEventTime = this.computeDisplayEventTime(); // might be based off of range\r\n        }\r\n        displayEventEnd = this.opt('displayEventEnd');\r\n        if (displayEventEnd == null) {\r\n            displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range\r\n        }\r\n        this.displayEventTime = displayEventTime;\r\n        this.displayEventEnd = displayEventEnd;\r\n    };\r\n    EventRenderer.prototype.render = function (eventsPayload) {\r\n        var dateProfile = this.component._getDateProfile();\r\n        var eventDefId;\r\n        var instanceGroup;\r\n        var eventRanges;\r\n        var bgRanges = [];\r\n        var fgRanges = [];\r\n        for (eventDefId in eventsPayload) {\r\n            instanceGroup = eventsPayload[eventDefId];\r\n            eventRanges = instanceGroup.sliceRenderRanges(dateProfile.activeUnzonedRange);\r\n            if (instanceGroup.getEventDef().hasBgRendering()) {\r\n                bgRanges.push.apply(bgRanges, eventRanges);\r\n            }\r\n            else {\r\n                fgRanges.push.apply(fgRanges, eventRanges);\r\n            }\r\n        }\r\n        this.renderBgRanges(bgRanges);\r\n        this.renderFgRanges(fgRanges);\r\n    };\r\n    EventRenderer.prototype.unrender = function () {\r\n        this.unrenderBgRanges();\r\n        this.unrenderFgRanges();\r\n    };\r\n    EventRenderer.prototype.renderFgRanges = function (eventRanges) {\r\n        var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        // render an `.el` on each seg\r\n        // returns a subset of the segs. segs that were actually rendered\r\n        segs = this.renderFgSegEls(segs);\r\n        if (this.renderFgSegs(segs) !== false) { // no failure?\r\n            this.fgSegs = segs;\r\n        }\r\n    };\r\n    EventRenderer.prototype.unrenderFgRanges = function () {\r\n        this.unrenderFgSegs(this.fgSegs || []);\r\n        this.fgSegs = null;\r\n    };\r\n    EventRenderer.prototype.renderBgRanges = function (eventRanges) {\r\n        var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        if (this.renderBgSegs(segs) !== false) { // no failure?\r\n            this.bgSegs = segs;\r\n        }\r\n    };\r\n    EventRenderer.prototype.unrenderBgRanges = function () {\r\n        this.unrenderBgSegs();\r\n        this.bgSegs = null;\r\n    };\r\n    EventRenderer.prototype.getSegs = function () {\r\n        return (this.bgSegs || []).concat(this.fgSegs || []);\r\n    };\r\n    // Renders foreground event segments onto the grid\r\n    EventRenderer.prototype.renderFgSegs = function (segs) {\r\n        // subclasses must implement\r\n        // segs already has rendered els, and has been filtered.\r\n        return false; // signal failure if not implemented\r\n    };\r\n    // Unrenders all currently rendered foreground segments\r\n    EventRenderer.prototype.unrenderFgSegs = function (segs) {\r\n        // subclasses must implement\r\n    };\r\n    EventRenderer.prototype.renderBgSegs = function (segs) {\r\n        var _this = this;\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.renderSegs('bgEvent', segs, {\r\n                getClasses: function (seg) {\r\n                    return _this.getBgClasses(seg.footprint.eventDef);\r\n                },\r\n                getCss: function (seg) {\r\n                    return {\r\n                        'background-color': _this.getBgColor(seg.footprint.eventDef)\r\n                    };\r\n                },\r\n                filterEl: function (seg, el) {\r\n                    return _this.filterEventRenderEl(seg.footprint, el);\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            return false; // signal failure if no fillRenderer\r\n        }\r\n    };\r\n    EventRenderer.prototype.unrenderBgSegs = function () {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.unrender('bgEvent');\r\n        }\r\n    };\r\n    // Renders and assigns an `el` property for each foreground event segment.\r\n    // Only returns segments that successfully rendered.\r\n    EventRenderer.prototype.renderFgSegEls = function (segs, disableResizing) {\r\n        var _this = this;\r\n        if (disableResizing === void 0) { disableResizing = false; }\r\n        var hasEventRenderHandlers = this.view.hasPublicHandlers('eventRender');\r\n        var html = '';\r\n        var renderedSegs = [];\r\n        var i;\r\n        if (segs.length) { // don't build an empty html string\r\n            // build a large concatenation of event segment HTML\r\n            for (i = 0; i < segs.length; i++) {\r\n                this.beforeFgSegHtml(segs[i]);\r\n                html += this.fgSegHtml(segs[i], disableResizing);\r\n            }\r\n            // Grab individual elements from the combined HTML string. Use each as the default rendering.\r\n            // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\r\n            $(html).each(function (i, node) {\r\n                var seg = segs[i];\r\n                var el = $(node);\r\n                if (hasEventRenderHandlers) { // optimization\r\n                    el = _this.filterEventRenderEl(seg.footprint, el);\r\n                }\r\n                if (el) {\r\n                    el.data('fc-seg', seg); // used by handlers\r\n                    seg.el = el;\r\n                    renderedSegs.push(seg);\r\n                }\r\n            });\r\n        }\r\n        return renderedSegs;\r\n    };\r\n    EventRenderer.prototype.beforeFgSegHtml = function (seg) {\r\n    };\r\n    // Generates the HTML for the default rendering of a foreground event segment. Used by renderFgSegEls()\r\n    EventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n        // subclasses should implement\r\n    };\r\n    // Generic utility for generating the HTML classNames for an event segment's element\r\n    EventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable) {\r\n        var classes = [\r\n            'fc-event',\r\n            seg.isStart ? 'fc-start' : 'fc-not-start',\r\n            seg.isEnd ? 'fc-end' : 'fc-not-end'\r\n        ].concat(this.getClasses(seg.footprint.eventDef));\r\n        if (isDraggable) {\r\n            classes.push('fc-draggable');\r\n        }\r\n        if (isResizable) {\r\n            classes.push('fc-resizable');\r\n        }\r\n        // event is currently selected? attach a className.\r\n        if (this.view.isEventDefSelected(seg.footprint.eventDef)) {\r\n            classes.push('fc-selected');\r\n        }\r\n        return classes;\r\n    };\r\n    // Given an event and the default element used for rendering, returns the element that should actually be used.\r\n    // Basically runs events and elements through the eventRender hook.\r\n    EventRenderer.prototype.filterEventRenderEl = function (eventFootprint, el) {\r\n        var legacy = eventFootprint.getEventLegacy();\r\n        var custom = this.view.publiclyTrigger('eventRender', {\r\n            context: legacy,\r\n            args: [legacy, el, this.view]\r\n        });\r\n        if (custom === false) { // means don't render at all\r\n            el = null;\r\n        }\r\n        else if (custom && custom !== true) {\r\n            el = $(custom);\r\n        }\r\n        return el;\r\n    };\r\n    // Compute the text that should be displayed on an event's element.\r\n    // `range` can be the Event object itself, or something range-like, with at least a `start`.\r\n    // If event times are disabled, or the event has no time, will return a blank string.\r\n    // If not specified, formatStr will default to the eventTimeFormat setting,\r\n    // and displayEnd will default to the displayEventEnd setting.\r\n    EventRenderer.prototype.getTimeText = function (eventFootprint, formatStr, displayEnd) {\r\n        return this._getTimeText(eventFootprint.eventInstance.dateProfile.start, eventFootprint.eventInstance.dateProfile.end, eventFootprint.componentFootprint.isAllDay, formatStr, displayEnd);\r\n    };\r\n    EventRenderer.prototype._getTimeText = function (start, end, isAllDay, formatStr, displayEnd) {\r\n        if (formatStr == null) {\r\n            formatStr = this.eventTimeFormat;\r\n        }\r\n        if (displayEnd == null) {\r\n            displayEnd = this.displayEventEnd;\r\n        }\r\n        if (this.displayEventTime && !isAllDay) {\r\n            if (displayEnd && end) {\r\n                return this.view.formatRange({ start: start, end: end }, false, // allDay\r\n                formatStr);\r\n            }\r\n            else {\r\n                return start.format(formatStr);\r\n            }\r\n        }\r\n        return '';\r\n    };\r\n    EventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('smallTimeFormat');\r\n    };\r\n    EventRenderer.prototype.computeDisplayEventTime = function () {\r\n        return true;\r\n    };\r\n    EventRenderer.prototype.computeDisplayEventEnd = function () {\r\n        return true;\r\n    };\r\n    EventRenderer.prototype.getBgClasses = function (eventDef) {\r\n        var classNames = this.getClasses(eventDef);\r\n        classNames.push('fc-bgevent');\r\n        return classNames;\r\n    };\r\n    EventRenderer.prototype.getClasses = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var classNames = [];\r\n        for (i = 0; i < objs.length; i++) {\r\n            classNames.push.apply(// append\r\n            classNames, objs[i].eventClassName || objs[i].className || []);\r\n        }\r\n        return classNames;\r\n    };\r\n    // Utility for generating event skin-related CSS properties\r\n    EventRenderer.prototype.getSkinCss = function (eventDef) {\r\n        return {\r\n            'background-color': this.getBgColor(eventDef),\r\n            'border-color': this.getBorderColor(eventDef),\r\n            color: this.getTextColor(eventDef)\r\n        };\r\n    };\r\n    // Queries for caller-specified color, then falls back to default\r\n    EventRenderer.prototype.getBgColor = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var val;\r\n        for (i = 0; i < objs.length && !val; i++) {\r\n            val = objs[i].eventBackgroundColor || objs[i].eventColor ||\r\n                objs[i].backgroundColor || objs[i].color;\r\n        }\r\n        if (!val) {\r\n            val = this.opt('eventBackgroundColor') || this.opt('eventColor');\r\n        }\r\n        return val;\r\n    };\r\n    // Queries for caller-specified color, then falls back to default\r\n    EventRenderer.prototype.getBorderColor = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var val;\r\n        for (i = 0; i < objs.length && !val; i++) {\r\n            val = objs[i].eventBorderColor || objs[i].eventColor ||\r\n                objs[i].borderColor || objs[i].color;\r\n        }\r\n        if (!val) {\r\n            val = this.opt('eventBorderColor') || this.opt('eventColor');\r\n        }\r\n        return val;\r\n    };\r\n    // Queries for caller-specified color, then falls back to default\r\n    EventRenderer.prototype.getTextColor = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var val;\r\n        for (i = 0; i < objs.length && !val; i++) {\r\n            val = objs[i].eventTextColor ||\r\n                objs[i].textColor;\r\n        }\r\n        if (!val) {\r\n            val = this.opt('eventTextColor');\r\n        }\r\n        return val;\r\n    };\r\n    EventRenderer.prototype.getStylingObjs = function (eventDef) {\r\n        var objs = this.getFallbackStylingObjs(eventDef);\r\n        objs.unshift(eventDef);\r\n        return objs;\r\n    };\r\n    EventRenderer.prototype.getFallbackStylingObjs = function (eventDef) {\r\n        return [eventDef.source];\r\n    };\r\n    EventRenderer.prototype.sortEventSegs = function (segs) {\r\n        segs.sort(util_1.proxy(this, 'compareEventSegs'));\r\n    };\r\n    // A cmp function for determining which segments should take visual priority\r\n    EventRenderer.prototype.compareEventSegs = function (seg1, seg2) {\r\n        var f1 = seg1.footprint;\r\n        var f2 = seg2.footprint;\r\n        var cf1 = f1.componentFootprint;\r\n        var cf2 = f2.componentFootprint;\r\n        var r1 = cf1.unzonedRange;\r\n        var r2 = cf2.unzonedRange;\r\n        return r1.startMs - r2.startMs || // earlier events go first\r\n            (r2.endMs - r2.startMs) - (r1.endMs - r1.startMs) || // tie? longer events go first\r\n            cf2.isAllDay - cf1.isAllDay || // tie? put all-day events first (booleans cast to 0/1)\r\n            util_1.compareByFieldSpecs(f1.eventDef, f2.eventDef, this.view.eventOrderSpecs, f1.eventDef.miscProps, f2.eventDef.miscProps);\r\n    };\r\n    return EventRenderer;\r\n}());\r\nexports.default = EventRenderer;\r\n\n\n/***/ }),\n/* 45 */,\n/* 46 */,\n/* 47 */,\n/* 48 */,\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment_ext_1 = __webpack_require__(11);\r\n// Plugin\r\n// -------------------------------------------------------------------------------------------------\r\nmoment_ext_1.newMomentProto.format = function () {\r\n    if (this._fullCalendar && arguments[0]) { // an enhanced moment? and a format string provided?\r\n        return formatDate(this, arguments[0]); // our extended formatting\r\n    }\r\n    if (this._ambigTime) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\r\n    }\r\n    if (this._ambigZone) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\r\n    }\r\n    if (this._fullCalendar) { // enhanced non-ambig moment?\r\n        // moment.format() doesn't ensure english, but we want to.\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this));\r\n    }\r\n    return moment_ext_1.oldMomentProto.format.apply(this, arguments);\r\n};\r\nmoment_ext_1.newMomentProto.toISOString = function () {\r\n    if (this._ambigTime) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\r\n    }\r\n    if (this._ambigZone) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\r\n    }\r\n    if (this._fullCalendar) { // enhanced non-ambig moment?\r\n        // depending on browser, moment might not output english. ensure english.\r\n        // https://github.com/moment/moment/blob/2.18.1/src/lib/moment/format.js#L22\r\n        return moment_ext_1.oldMomentProto.toISOString.apply(englishMoment(this), arguments);\r\n    }\r\n    return moment_ext_1.oldMomentProto.toISOString.apply(this, arguments);\r\n};\r\nfunction englishMoment(mom) {\r\n    if (mom.locale() !== 'en') {\r\n        return mom.clone().locale('en');\r\n    }\r\n    return mom;\r\n}\r\n// Config\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nInserted between chunks in the fake (\"intermediate\") formatting string.\r\nImportant that it passes as whitespace (\\s) because moment often identifies non-standalone months\r\nvia a regexp with an \\s.\r\n*/\r\nvar PART_SEPARATOR = '\\u000b'; // vertical tab\r\n/*\r\nInserted as the first character of a literal-text chunk to indicate that the literal text is not actually literal text,\r\nbut rather, a \"special\" token that has custom rendering (see specialTokens map).\r\n*/\r\nvar SPECIAL_TOKEN_MARKER = '\\u001f'; // information separator 1\r\n/*\r\nInserted at the beginning and end of a span of text that must have non-zero numeric characters.\r\nHandling of these markers is done in a post-processing step at the very end of text rendering.\r\n*/\r\nvar MAYBE_MARKER = '\\u001e'; // information separator 2\r\nvar MAYBE_REGEXP = new RegExp(MAYBE_MARKER + '([^' + MAYBE_MARKER + ']*)' + MAYBE_MARKER, 'g'); // must be global\r\n/*\r\nAddition formatting tokens we want recognized\r\n*/\r\nvar specialTokens = {\r\n    t: function (date) {\r\n        return moment_ext_1.oldMomentFormat(date, 'a').charAt(0);\r\n    },\r\n    T: function (date) {\r\n        return moment_ext_1.oldMomentFormat(date, 'A').charAt(0);\r\n    }\r\n};\r\n/*\r\nThe first characters of formatting tokens for units that are 1 day or larger.\r\n`value` is for ranking relative size (lower means bigger).\r\n`unit` is a normalized unit, used for comparing moments.\r\n*/\r\nvar largeTokenMap = {\r\n    Y: { value: 1, unit: 'year' },\r\n    M: { value: 2, unit: 'month' },\r\n    W: { value: 3, unit: 'week' },\r\n    w: { value: 3, unit: 'week' },\r\n    D: { value: 4, unit: 'day' },\r\n    d: { value: 4, unit: 'day' } // day of week\r\n};\r\n// Single Date Formatting\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nFormats `date` with a Moment formatting string, but allow our non-zero areas and special token\r\n*/\r\nfunction formatDate(date, formatStr) {\r\n    return renderFakeFormatString(getParsedFormatString(formatStr).fakeFormatString, date);\r\n}\r\nexports.formatDate = formatDate;\r\n// Date Range Formatting\r\n// -------------------------------------------------------------------------------------------------\r\n// TODO: make it work with timezone offset\r\n/*\r\nUsing a formatting string meant for a single date, generate a range string, like\r\n\"Sep 2 - 9 2013\", that intelligently inserts a separator where the dates differ.\r\nIf the dates are the same as far as the format string is concerned, just return a single\r\nrendering of one date, without any separator.\r\n*/\r\nfunction formatRange(date1, date2, formatStr, separator, isRTL) {\r\n    var localeData;\r\n    date1 = moment_ext_1.default.parseZone(date1);\r\n    date2 = moment_ext_1.default.parseZone(date2);\r\n    localeData = date1.localeData();\r\n    // Expand localized format strings, like \"LL\" -> \"MMMM D YYYY\".\r\n    // BTW, this is not important for `formatDate` because it is impossible to put custom tokens\r\n    // or non-zero areas in Moment's localized format strings.\r\n    formatStr = localeData.longDateFormat(formatStr) || formatStr;\r\n    return renderParsedFormat(getParsedFormatString(formatStr), date1, date2, separator || ' - ', isRTL);\r\n}\r\nexports.formatRange = formatRange;\r\n/*\r\nRenders a range with an already-parsed format string.\r\n*/\r\nfunction renderParsedFormat(parsedFormat, date1, date2, separator, isRTL) {\r\n    var sameUnits = parsedFormat.sameUnits;\r\n    var unzonedDate1 = date1.clone().stripZone(); // for same-unit comparisons\r\n    var unzonedDate2 = date2.clone().stripZone(); // \"\r\n    var renderedParts1 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date1);\r\n    var renderedParts2 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date2);\r\n    var leftI;\r\n    var leftStr = '';\r\n    var rightI;\r\n    var rightStr = '';\r\n    var middleI;\r\n    var middleStr1 = '';\r\n    var middleStr2 = '';\r\n    var middleStr = '';\r\n    // Start at the leftmost side of the formatting string and continue until you hit a token\r\n    // that is not the same between dates.\r\n    for (leftI = 0; leftI < sameUnits.length && (!sameUnits[leftI] || unzonedDate1.isSame(unzonedDate2, sameUnits[leftI])); leftI++) {\r\n        leftStr += renderedParts1[leftI];\r\n    }\r\n    // Similarly, start at the rightmost side of the formatting string and move left\r\n    for (rightI = sameUnits.length - 1; rightI > leftI && (!sameUnits[rightI] || unzonedDate1.isSame(unzonedDate2, sameUnits[rightI])); rightI--) {\r\n        // If current chunk is on the boundary of unique date-content, and is a special-case\r\n        // date-formatting postfix character, then don't consume it. Consider it unique date-content.\r\n        // TODO: make configurable\r\n        if (rightI - 1 === leftI && renderedParts1[rightI] === '.') {\r\n            break;\r\n        }\r\n        rightStr = renderedParts1[rightI] + rightStr;\r\n    }\r\n    // The area in the middle is different for both of the dates.\r\n    // Collect them distinctly so we can jam them together later.\r\n    for (middleI = leftI; middleI <= rightI; middleI++) {\r\n        middleStr1 += renderedParts1[middleI];\r\n        middleStr2 += renderedParts2[middleI];\r\n    }\r\n    if (middleStr1 || middleStr2) {\r\n        if (isRTL) {\r\n            middleStr = middleStr2 + separator + middleStr1;\r\n        }\r\n        else {\r\n            middleStr = middleStr1 + separator + middleStr2;\r\n        }\r\n    }\r\n    return processMaybeMarkers(leftStr + middleStr + rightStr);\r\n}\r\n// Format String Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nvar parsedFormatStrCache = {};\r\n/*\r\nReturns a parsed format string, leveraging a cache.\r\n*/\r\nfunction getParsedFormatString(formatStr) {\r\n    return parsedFormatStrCache[formatStr] ||\r\n        (parsedFormatStrCache[formatStr] = parseFormatString(formatStr));\r\n}\r\n/*\r\nParses a format string into the following:\r\n- fakeFormatString: a momentJS formatting string, littered with special control characters that get post-processed.\r\n- sameUnits: for every part in fakeFormatString, if the part is a token, the value will be a unit string (like \"day\"),\r\n  that indicates how similar a range's start & end must be in order to share the same formatted text.\r\n  If not a token, then the value is null.\r\n  Always a flat array (not nested liked \"chunks\").\r\n*/\r\nfunction parseFormatString(formatStr) {\r\n    var chunks = chunkFormatString(formatStr);\r\n    return {\r\n        fakeFormatString: buildFakeFormatString(chunks),\r\n        sameUnits: buildSameUnits(chunks)\r\n    };\r\n}\r\n/*\r\nBreak the formatting string into an array of chunks.\r\nA 'maybe' chunk will have nested chunks.\r\n*/\r\nfunction chunkFormatString(formatStr) {\r\n    var chunks = [];\r\n    var match;\r\n    // TODO: more descrimination\r\n    // \\4 is a backreference to the first character of a multi-character set.\r\n    var chunker = /\\[([^\\]]*)\\]|\\(([^\\)]*)\\)|(LTS|LT|(\\w)\\4*o?)|([^\\w\\[\\(]+)/g;\r\n    while ((match = chunker.exec(formatStr))) {\r\n        if (match[1]) { // a literal string inside [ ... ]\r\n            chunks.push.apply(chunks, // append\r\n            splitStringLiteral(match[1]));\r\n        }\r\n        else if (match[2]) { // non-zero formatting inside ( ... )\r\n            chunks.push({ maybe: chunkFormatString(match[2]) });\r\n        }\r\n        else if (match[3]) { // a formatting token\r\n            chunks.push({ token: match[3] });\r\n        }\r\n        else if (match[5]) { // an unenclosed literal string\r\n            chunks.push.apply(chunks, // append\r\n            splitStringLiteral(match[5]));\r\n        }\r\n    }\r\n    return chunks;\r\n}\r\n/*\r\nPotentially splits a literal-text string into multiple parts. For special cases.\r\n*/\r\nfunction splitStringLiteral(s) {\r\n    if (s === '. ') {\r\n        return ['.', ' ']; // for locales with periods bound to the end of each year/month/date\r\n    }\r\n    else {\r\n        return [s];\r\n    }\r\n}\r\n/*\r\nGiven chunks parsed from a real format string, generate a fake (aka \"intermediate\") format string with special control\r\ncharacters that will eventually be given to moment for formatting, and then post-processed.\r\n*/\r\nfunction buildFakeFormatString(chunks) {\r\n    var parts = [];\r\n    var i;\r\n    var chunk;\r\n    for (i = 0; i < chunks.length; i++) {\r\n        chunk = chunks[i];\r\n        if (typeof chunk === 'string') {\r\n            parts.push('[' + chunk + ']');\r\n        }\r\n        else if (chunk.token) {\r\n            if (chunk.token in specialTokens) {\r\n                parts.push(SPECIAL_TOKEN_MARKER + // useful during post-processing\r\n                    '[' + chunk.token + ']' // preserve as literal text\r\n                );\r\n            }\r\n            else {\r\n                parts.push(chunk.token); // unprotected text implies a format string\r\n            }\r\n        }\r\n        else if (chunk.maybe) {\r\n            parts.push(MAYBE_MARKER + // useful during post-processing\r\n                buildFakeFormatString(chunk.maybe) +\r\n                MAYBE_MARKER);\r\n        }\r\n    }\r\n    return parts.join(PART_SEPARATOR);\r\n}\r\n/*\r\nGiven parsed chunks from a real formatting string, generates an array of unit strings (like \"day\") that indicate\r\nin which regard two dates must be similar in order to share range formatting text.\r\nThe `chunks` can be nested (because of \"maybe\" chunks), however, the returned array will be flat.\r\n*/\r\nfunction buildSameUnits(chunks) {\r\n    var units = [];\r\n    var i;\r\n    var chunk;\r\n    var tokenInfo;\r\n    for (i = 0; i < chunks.length; i++) {\r\n        chunk = chunks[i];\r\n        if (chunk.token) {\r\n            tokenInfo = largeTokenMap[chunk.token.charAt(0)];\r\n            units.push(tokenInfo ? tokenInfo.unit : 'second'); // default to a very strict same-second\r\n        }\r\n        else if (chunk.maybe) {\r\n            units.push.apply(units, // append\r\n            buildSameUnits(chunk.maybe));\r\n        }\r\n        else {\r\n            units.push(null);\r\n        }\r\n    }\r\n    return units;\r\n}\r\n// Rendering to text\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nFormats a date with a fake format string, post-processes the control characters, then returns.\r\n*/\r\nfunction renderFakeFormatString(fakeFormatString, date) {\r\n    return processMaybeMarkers(renderFakeFormatStringParts(fakeFormatString, date).join(''));\r\n}\r\n/*\r\nFormats a date into parts that will have been post-processed, EXCEPT for the \"maybe\" markers.\r\n*/\r\nfunction renderFakeFormatStringParts(fakeFormatString, date) {\r\n    var parts = [];\r\n    var fakeRender = moment_ext_1.oldMomentFormat(date, fakeFormatString);\r\n    var fakeParts = fakeRender.split(PART_SEPARATOR);\r\n    var i;\r\n    var fakePart;\r\n    for (i = 0; i < fakeParts.length; i++) {\r\n        fakePart = fakeParts[i];\r\n        if (fakePart.charAt(0) === SPECIAL_TOKEN_MARKER) {\r\n            parts.push(\r\n            // the literal string IS the token's name.\r\n            // call special token's registered function.\r\n            specialTokens[fakePart.substring(1)](date));\r\n        }\r\n        else {\r\n            parts.push(fakePart);\r\n        }\r\n    }\r\n    return parts;\r\n}\r\n/*\r\nAccepts an almost-finally-formatted string and processes the \"maybe\" control characters, returning a new string.\r\n*/\r\nfunction processMaybeMarkers(s) {\r\n    return s.replace(MAYBE_REGEXP, function (m0, m1) {\r\n        if (m1.match(/[1-9]/)) { // any non-zero numeric characters?\r\n            return m1;\r\n        }\r\n        else {\r\n            return '';\r\n        }\r\n    });\r\n}\r\n// Misc Utils\r\n// -------------------------------------------------------------------------------------------------\r\n/*\r\nReturns a unit string, either 'year', 'month', 'day', or null for the most granular formatting token in the string.\r\n*/\r\nfunction queryMostGranularFormatUnit(formatStr) {\r\n    var chunks = chunkFormatString(formatStr);\r\n    var i;\r\n    var chunk;\r\n    var candidate;\r\n    var best;\r\n    for (i = 0; i < chunks.length; i++) {\r\n        chunk = chunks[i];\r\n        if (chunk.token) {\r\n            candidate = largeTokenMap[chunk.token.charAt(0)];\r\n            if (candidate) {\r\n                if (!best || candidate.value > best.value) {\r\n                    best = candidate;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (best) {\r\n        return best.unit;\r\n    }\r\n    return null;\r\n}\r\nexports.queryMostGranularFormatUnit = queryMostGranularFormatUnit;\r\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventRange = /** @class */ (function () {\r\n    function EventRange(unzonedRange, eventDef, eventInstance) {\r\n        this.unzonedRange = unzonedRange;\r\n        this.eventDef = eventDef;\r\n        if (eventInstance) {\r\n            this.eventInstance = eventInstance;\r\n        }\r\n    }\r\n    return EventRange;\r\n}());\r\nexports.default = EventRange;\r\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Class_1 = __webpack_require__(35);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Model = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Model, _super);\r\n    function Model() {\r\n        var _this = _super.call(this) || this;\r\n        _this._watchers = {};\r\n        _this._props = {};\r\n        _this.applyGlobalWatchers();\r\n        _this.constructed();\r\n        return _this;\r\n    }\r\n    Model.watch = function (name) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        // subclasses should make a masked-copy of the superclass's map\r\n        // TODO: write test\r\n        if (!this.prototype.hasOwnProperty('_globalWatchArgs')) {\r\n            this.prototype._globalWatchArgs = Object.create(this.prototype._globalWatchArgs);\r\n        }\r\n        this.prototype._globalWatchArgs[name] = args;\r\n    };\r\n    Model.prototype.constructed = function () {\r\n        // useful for monkeypatching. TODO: BaseClass?\r\n    };\r\n    Model.prototype.applyGlobalWatchers = function () {\r\n        var map = this._globalWatchArgs;\r\n        var name;\r\n        for (name in map) {\r\n            this.watch.apply(this, [name].concat(map[name]));\r\n        }\r\n    };\r\n    Model.prototype.has = function (name) {\r\n        return name in this._props;\r\n    };\r\n    Model.prototype.get = function (name) {\r\n        if (name === undefined) {\r\n            return this._props;\r\n        }\r\n        return this._props[name];\r\n    };\r\n    Model.prototype.set = function (name, val) {\r\n        var newProps;\r\n        if (typeof name === 'string') {\r\n            newProps = {};\r\n            newProps[name] = val === undefined ? null : val;\r\n        }\r\n        else {\r\n            newProps = name;\r\n        }\r\n        this.setProps(newProps);\r\n    };\r\n    Model.prototype.reset = function (newProps) {\r\n        var oldProps = this._props;\r\n        var changeset = {}; // will have undefined's to signal unsets\r\n        var name;\r\n        for (name in oldProps) {\r\n            changeset[name] = undefined;\r\n        }\r\n        for (name in newProps) {\r\n            changeset[name] = newProps[name];\r\n        }\r\n        this.setProps(changeset);\r\n    };\r\n    Model.prototype.unset = function (name) {\r\n        var newProps = {};\r\n        var names;\r\n        var i;\r\n        if (typeof name === 'string') {\r\n            names = [name];\r\n        }\r\n        else {\r\n            names = name;\r\n        }\r\n        for (i = 0; i < names.length; i++) {\r\n            newProps[names[i]] = undefined;\r\n        }\r\n        this.setProps(newProps);\r\n    };\r\n    Model.prototype.setProps = function (newProps) {\r\n        var changedProps = {};\r\n        var changedCnt = 0;\r\n        var name;\r\n        var val;\r\n        for (name in newProps) {\r\n            val = newProps[name];\r\n            // a change in value?\r\n            // if an object, don't check equality, because might have been mutated internally.\r\n            // TODO: eventually enforce immutability.\r\n            if (typeof val === 'object' ||\r\n                val !== this._props[name]) {\r\n                changedProps[name] = val;\r\n                changedCnt++;\r\n            }\r\n        }\r\n        if (changedCnt) {\r\n            this.trigger('before:batchChange', changedProps);\r\n            for (name in changedProps) {\r\n                val = changedProps[name];\r\n                this.trigger('before:change', name, val);\r\n                this.trigger('before:change:' + name, val);\r\n            }\r\n            for (name in changedProps) {\r\n                val = changedProps[name];\r\n                if (val === undefined) {\r\n                    delete this._props[name];\r\n                }\r\n                else {\r\n                    this._props[name] = val;\r\n                }\r\n                this.trigger('change:' + name, val);\r\n                this.trigger('change', name, val);\r\n            }\r\n            this.trigger('batchChange', changedProps);\r\n        }\r\n    };\r\n    Model.prototype.watch = function (name, depList, startFunc, stopFunc) {\r\n        var _this = this;\r\n        this.unwatch(name);\r\n        this._watchers[name] = this._watchDeps(depList, function (deps) {\r\n            var res = startFunc.call(_this, deps);\r\n            if (res && res.then) {\r\n                _this.unset(name); // put in an unset state while resolving\r\n                res.then(function (val) {\r\n                    _this.set(name, val);\r\n                });\r\n            }\r\n            else {\r\n                _this.set(name, res);\r\n            }\r\n        }, function (deps) {\r\n            _this.unset(name);\r\n            if (stopFunc) {\r\n                stopFunc.call(_this, deps);\r\n            }\r\n        });\r\n    };\r\n    Model.prototype.unwatch = function (name) {\r\n        var watcher = this._watchers[name];\r\n        if (watcher) {\r\n            delete this._watchers[name];\r\n            watcher.teardown();\r\n        }\r\n    };\r\n    Model.prototype._watchDeps = function (depList, startFunc, stopFunc) {\r\n        var _this = this;\r\n        var queuedChangeCnt = 0;\r\n        var depCnt = depList.length;\r\n        var satisfyCnt = 0;\r\n        var values = {}; // what's passed as the `deps` arguments\r\n        var bindTuples = []; // array of [ eventName, handlerFunc ] arrays\r\n        var isCallingStop = false;\r\n        var onBeforeDepChange = function (depName, val, isOptional) {\r\n            queuedChangeCnt++;\r\n            if (queuedChangeCnt === 1) { // first change to cause a \"stop\" ?\r\n                if (satisfyCnt === depCnt) { // all deps previously satisfied?\r\n                    isCallingStop = true;\r\n                    stopFunc(values);\r\n                    isCallingStop = false;\r\n                }\r\n            }\r\n        };\r\n        var onDepChange = function (depName, val, isOptional) {\r\n            if (val === undefined) { // unsetting a value?\r\n                // required dependency that was previously set?\r\n                if (!isOptional && values[depName] !== undefined) {\r\n                    satisfyCnt--;\r\n                }\r\n                delete values[depName];\r\n            }\r\n            else { // setting a value?\r\n                // required dependency that was previously unset?\r\n                if (!isOptional && values[depName] === undefined) {\r\n                    satisfyCnt++;\r\n                }\r\n                values[depName] = val;\r\n            }\r\n            queuedChangeCnt--;\r\n            if (!queuedChangeCnt) { // last change to cause a \"start\"?\r\n                // now finally satisfied or satisfied all along?\r\n                if (satisfyCnt === depCnt) {\r\n                    // if the stopFunc initiated another value change, ignore it.\r\n                    // it will be processed by another change event anyway.\r\n                    if (!isCallingStop) {\r\n                        startFunc(values);\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        // intercept for .on() that remembers handlers\r\n        var bind = function (eventName, handler) {\r\n            _this.on(eventName, handler);\r\n            bindTuples.push([eventName, handler]);\r\n        };\r\n        // listen to dependency changes\r\n        depList.forEach(function (depName) {\r\n            var isOptional = false;\r\n            if (depName.charAt(0) === '?') { // TODO: more DRY\r\n                depName = depName.substring(1);\r\n                isOptional = true;\r\n            }\r\n            bind('before:change:' + depName, function (val) {\r\n                onBeforeDepChange(depName, val, isOptional);\r\n            });\r\n            bind('change:' + depName, function (val) {\r\n                onDepChange(depName, val, isOptional);\r\n            });\r\n        });\r\n        // process current dependency values\r\n        depList.forEach(function (depName) {\r\n            var isOptional = false;\r\n            if (depName.charAt(0) === '?') { // TODO: more DRY\r\n                depName = depName.substring(1);\r\n                isOptional = true;\r\n            }\r\n            if (_this.has(depName)) {\r\n                values[depName] = _this.get(depName);\r\n                satisfyCnt++;\r\n            }\r\n            else if (isOptional) {\r\n                satisfyCnt++;\r\n            }\r\n        });\r\n        // initially satisfied\r\n        if (satisfyCnt === depCnt) {\r\n            startFunc(values);\r\n        }\r\n        return {\r\n            teardown: function () {\r\n                // remove all handlers\r\n                for (var i = 0; i < bindTuples.length; i++) {\r\n                    _this.off(bindTuples[i][0], bindTuples[i][1]);\r\n                }\r\n                bindTuples = null;\r\n                // was satisfied, so call stopFunc\r\n                if (satisfyCnt === depCnt) {\r\n                    stopFunc();\r\n                }\r\n            },\r\n            flash: function () {\r\n                if (satisfyCnt === depCnt) {\r\n                    stopFunc();\r\n                    startFunc(values);\r\n                }\r\n            }\r\n        };\r\n    };\r\n    Model.prototype.flash = function (name) {\r\n        var watcher = this._watchers[name];\r\n        if (watcher) {\r\n            watcher.flash();\r\n        }\r\n    };\r\n    return Model;\r\n}(Class_1.default));\r\nexports.default = Model;\r\nModel.prototype._globalWatchArgs = {}; // mutation protection in Model.watch\r\nEmitterMixin_1.default.mixInto(Model);\r\nListenerMixin_1.default.mixInto(Model);\r\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUSAGE:\r\n  import { default as ParsableModelMixin, ParsableModelInterface } from './ParsableModelMixin'\r\nin class:\r\n  applyProps: ParsableModelInterface['applyProps']\r\n  applyManualStandardProps: ParsableModelInterface['applyManualStandardProps']\r\n  applyMiscProps: ParsableModelInterface['applyMiscProps']\r\n  isStandardProp: ParsableModelInterface['isStandardProp']\r\n  static defineStandardProps = ParsableModelMixin.defineStandardProps\r\n  static copyVerbatimStandardProps = ParsableModelMixin.copyVerbatimStandardProps\r\nafter class:\r\n  ParsableModelMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar ParsableModelMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ParsableModelMixin, _super);\r\n    function ParsableModelMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ParsableModelMixin.defineStandardProps = function (propDefs) {\r\n        var proto = this.prototype;\r\n        if (!proto.hasOwnProperty('standardPropMap')) {\r\n            proto.standardPropMap = Object.create(proto.standardPropMap);\r\n        }\r\n        util_1.copyOwnProps(propDefs, proto.standardPropMap);\r\n    };\r\n    ParsableModelMixin.copyVerbatimStandardProps = function (src, dest) {\r\n        var map = this.prototype.standardPropMap;\r\n        var propName;\r\n        for (propName in map) {\r\n            if (src[propName] != null && // in the src object?\r\n                map[propName] === true // false means \"copy verbatim\"\r\n            ) {\r\n                dest[propName] = src[propName];\r\n            }\r\n        }\r\n    };\r\n    /*\r\n    Returns true/false for success.\r\n    Meant to be only called ONCE, at object creation.\r\n    */\r\n    ParsableModelMixin.prototype.applyProps = function (rawProps) {\r\n        var standardPropMap = this.standardPropMap;\r\n        var manualProps = {};\r\n        var miscProps = {};\r\n        var propName;\r\n        for (propName in rawProps) {\r\n            if (standardPropMap[propName] === true) { // copy verbatim\r\n                this[propName] = rawProps[propName];\r\n            }\r\n            else if (standardPropMap[propName] === false) {\r\n                manualProps[propName] = rawProps[propName];\r\n            }\r\n            else {\r\n                miscProps[propName] = rawProps[propName];\r\n            }\r\n        }\r\n        this.applyMiscProps(miscProps);\r\n        return this.applyManualStandardProps(manualProps);\r\n    };\r\n    /*\r\n    If subclasses override, they must call this supermethod and return the boolean response.\r\n    Meant to be only called ONCE, at object creation.\r\n    */\r\n    ParsableModelMixin.prototype.applyManualStandardProps = function (rawProps) {\r\n        return true;\r\n    };\r\n    /*\r\n    Can be called even after initial object creation.\r\n    */\r\n    ParsableModelMixin.prototype.applyMiscProps = function (rawProps) {\r\n        // subclasses can implement\r\n    };\r\n    /*\r\n    TODO: why is this a method when defineStandardProps is static\r\n    */\r\n    ParsableModelMixin.prototype.isStandardProp = function (propName) {\r\n        return propName in this.standardPropMap;\r\n    };\r\n    return ParsableModelMixin;\r\n}(Mixin_1.default));\r\nexports.default = ParsableModelMixin;\r\nParsableModelMixin.prototype.standardPropMap = {}; // will be cloned by defineStandardProps\r\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventInstance = /** @class */ (function () {\r\n    function EventInstance(def, dateProfile) {\r\n        this.def = def;\r\n        this.dateProfile = dateProfile;\r\n    }\r\n    EventInstance.prototype.toLegacy = function () {\r\n        var dateProfile = this.dateProfile;\r\n        var obj = this.def.toLegacy();\r\n        obj.start = dateProfile.start.clone();\r\n        obj.end = dateProfile.end ? dateProfile.end.clone() : null;\r\n        return obj;\r\n    };\r\n    return EventInstance;\r\n}());\r\nexports.default = EventInstance;\r\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventInstance_1 = __webpack_require__(53);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar RecurringEventDef = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RecurringEventDef, _super);\r\n    function RecurringEventDef() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    RecurringEventDef.prototype.isAllDay = function () {\r\n        return !this.startTime && !this.endTime;\r\n    };\r\n    RecurringEventDef.prototype.buildInstances = function (unzonedRange) {\r\n        var calendar = this.source.calendar;\r\n        var unzonedDate = unzonedRange.getStart();\r\n        var unzonedEnd = unzonedRange.getEnd();\r\n        var zonedDayStart;\r\n        var instanceStart;\r\n        var instanceEnd;\r\n        var instances = [];\r\n        while (unzonedDate.isBefore(unzonedEnd)) {\r\n            // if everyday, or this particular day-of-week\r\n            if (!this.dowHash || this.dowHash[unzonedDate.day()]) {\r\n                zonedDayStart = calendar.applyTimezone(unzonedDate);\r\n                instanceStart = zonedDayStart.clone();\r\n                instanceEnd = null;\r\n                if (this.startTime) {\r\n                    instanceStart.time(this.startTime);\r\n                }\r\n                else {\r\n                    instanceStart.stripTime();\r\n                }\r\n                if (this.endTime) {\r\n                    instanceEnd = zonedDayStart.clone().time(this.endTime);\r\n                }\r\n                instances.push(new EventInstance_1.default(this, // definition\r\n                new EventDateProfile_1.default(instanceStart, instanceEnd, calendar)));\r\n            }\r\n            unzonedDate.add(1, 'days');\r\n        }\r\n        return instances;\r\n    };\r\n    RecurringEventDef.prototype.setDow = function (dowNumbers) {\r\n        if (!this.dowHash) {\r\n            this.dowHash = {};\r\n        }\r\n        for (var i = 0; i < dowNumbers.length; i++) {\r\n            this.dowHash[dowNumbers[i]] = true;\r\n        }\r\n    };\r\n    RecurringEventDef.prototype.clone = function () {\r\n        var def = _super.prototype.clone.call(this);\r\n        if (def.startTime) {\r\n            def.startTime = moment.duration(this.startTime);\r\n        }\r\n        if (def.endTime) {\r\n            def.endTime = moment.duration(this.endTime);\r\n        }\r\n        if (this.dowHash) {\r\n            def.dowHash = $.extend({}, this.dowHash);\r\n        }\r\n        return def;\r\n    };\r\n    return RecurringEventDef;\r\n}(EventDef_1.default));\r\nexports.default = RecurringEventDef;\r\n/*\r\nHACK to work with TypeScript mixins\r\nNOTE: if super-method fails, should still attempt to apply\r\n*/\r\nRecurringEventDef.prototype.applyProps = function (rawProps) {\r\n    var superSuccess = EventDef_1.default.prototype.applyProps.call(this, rawProps);\r\n    if (rawProps.start) {\r\n        this.startTime = moment.duration(rawProps.start);\r\n    }\r\n    if (rawProps.end) {\r\n        this.endTime = moment.duration(rawProps.end);\r\n    }\r\n    if (rawProps.dow) {\r\n        this.setDow(rawProps.dow);\r\n    }\r\n    return superSuccess;\r\n};\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nRecurringEventDef.defineStandardProps({\r\n    start: false,\r\n    end: false,\r\n    dow: false\r\n});\r\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar DateProfileGenerator = /** @class */ (function () {\r\n    function DateProfileGenerator(_view) {\r\n        this._view = _view;\r\n    }\r\n    DateProfileGenerator.prototype.opt = function (name) {\r\n        return this._view.opt(name);\r\n    };\r\n    DateProfileGenerator.prototype.trimHiddenDays = function (unzonedRange) {\r\n        return this._view.trimHiddenDays(unzonedRange);\r\n    };\r\n    DateProfileGenerator.prototype.msToUtcMoment = function (ms, forceAllDay) {\r\n        return this._view.calendar.msToUtcMoment(ms, forceAllDay);\r\n    };\r\n    /* Date Range Computation\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\r\n    DateProfileGenerator.prototype.buildPrev = function (currentDateProfile) {\r\n        var prevDate = currentDateProfile.date.clone()\r\n            .startOf(currentDateProfile.currentRangeUnit)\r\n            .subtract(currentDateProfile.dateIncrement);\r\n        return this.build(prevDate, -1);\r\n    };\r\n    // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\r\n    DateProfileGenerator.prototype.buildNext = function (currentDateProfile) {\r\n        var nextDate = currentDateProfile.date.clone()\r\n            .startOf(currentDateProfile.currentRangeUnit)\r\n            .add(currentDateProfile.dateIncrement);\r\n        return this.build(nextDate, 1);\r\n    };\r\n    // Builds a structure holding dates/ranges for rendering around the given date.\r\n    // Optional direction param indicates whether the date is being incremented/decremented\r\n    // from its previous value. decremented = -1, incremented = 1 (default).\r\n    DateProfileGenerator.prototype.build = function (date, direction, forceToValid) {\r\n        if (forceToValid === void 0) { forceToValid = false; }\r\n        var isDateAllDay = !date.hasTime();\r\n        var validUnzonedRange;\r\n        var minTime = null;\r\n        var maxTime = null;\r\n        var currentInfo;\r\n        var isRangeAllDay;\r\n        var renderUnzonedRange;\r\n        var activeUnzonedRange;\r\n        var isValid;\r\n        validUnzonedRange = this.buildValidRange();\r\n        validUnzonedRange = this.trimHiddenDays(validUnzonedRange);\r\n        if (forceToValid) {\r\n            date = this.msToUtcMoment(validUnzonedRange.constrainDate(date), // returns MS\r\n            isDateAllDay);\r\n        }\r\n        currentInfo = this.buildCurrentRangeInfo(date, direction);\r\n        isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);\r\n        renderUnzonedRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.unzonedRange), currentInfo.unit, isRangeAllDay);\r\n        renderUnzonedRange = this.trimHiddenDays(renderUnzonedRange);\r\n        activeUnzonedRange = renderUnzonedRange.clone();\r\n        if (!this.opt('showNonCurrentDates')) {\r\n            activeUnzonedRange = activeUnzonedRange.intersect(currentInfo.unzonedRange);\r\n        }\r\n        minTime = moment.duration(this.opt('minTime'));\r\n        maxTime = moment.duration(this.opt('maxTime'));\r\n        activeUnzonedRange = this.adjustActiveRange(activeUnzonedRange, minTime, maxTime);\r\n        activeUnzonedRange = activeUnzonedRange.intersect(validUnzonedRange); // might return null\r\n        if (activeUnzonedRange) {\r\n            date = this.msToUtcMoment(activeUnzonedRange.constrainDate(date), // returns MS\r\n            isDateAllDay);\r\n        }\r\n        // it's invalid if the originally requested date is not contained,\r\n        // or if the range is completely outside of the valid range.\r\n        isValid = currentInfo.unzonedRange.intersectsWith(validUnzonedRange);\r\n        return {\r\n            // constraint for where prev/next operations can go and where events can be dragged/resized to.\r\n            // an object with optional start and end properties.\r\n            validUnzonedRange: validUnzonedRange,\r\n            // range the view is formally responsible for.\r\n            // for example, a month view might have 1st-31st, excluding padded dates\r\n            currentUnzonedRange: currentInfo.unzonedRange,\r\n            // name of largest unit being displayed, like \"month\" or \"week\"\r\n            currentRangeUnit: currentInfo.unit,\r\n            isRangeAllDay: isRangeAllDay,\r\n            // dates that display events and accept drag-n-drop\r\n            // will be `null` if no dates accept events\r\n            activeUnzonedRange: activeUnzonedRange,\r\n            // date range with a rendered skeleton\r\n            // includes not-active days that need some sort of DOM\r\n            renderUnzonedRange: renderUnzonedRange,\r\n            // Duration object that denotes the first visible time of any given day\r\n            minTime: minTime,\r\n            // Duration object that denotes the exclusive visible end time of any given day\r\n            maxTime: maxTime,\r\n            isValid: isValid,\r\n            date: date,\r\n            // how far the current date will move for a prev/next operation\r\n            dateIncrement: this.buildDateIncrement(currentInfo.duration)\r\n            // pass a fallback (might be null) ^\r\n        };\r\n    };\r\n    // Builds an object with optional start/end properties.\r\n    // Indicates the minimum/maximum dates to display.\r\n    // not responsible for trimming hidden days.\r\n    DateProfileGenerator.prototype.buildValidRange = function () {\r\n        return this._view.getUnzonedRangeOption('validRange', this._view.calendar.getNow()) ||\r\n            new UnzonedRange_1.default(); // completely open-ended\r\n    };\r\n    // Builds a structure with info about the \"current\" range, the range that is\r\n    // highlighted as being the current month for example.\r\n    // See build() for a description of `direction`.\r\n    // Guaranteed to have `range` and `unit` properties. `duration` is optional.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {\r\n        var viewSpec = this._view.viewSpec;\r\n        var duration = null;\r\n        var unit = null;\r\n        var unzonedRange = null;\r\n        var dayCount;\r\n        if (viewSpec.duration) {\r\n            duration = viewSpec.duration;\r\n            unit = viewSpec.durationUnit;\r\n            unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\r\n        }\r\n        else if ((dayCount = this.opt('dayCount'))) {\r\n            unit = 'day';\r\n            unzonedRange = this.buildRangeFromDayCount(date, direction, dayCount);\r\n        }\r\n        else if ((unzonedRange = this.buildCustomVisibleRange(date))) {\r\n            unit = util_1.computeGreatestUnit(unzonedRange.getStart(), unzonedRange.getEnd());\r\n        }\r\n        else {\r\n            duration = this.getFallbackDuration();\r\n            unit = util_1.computeGreatestUnit(duration);\r\n            unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\r\n        }\r\n        return { duration: duration, unit: unit, unzonedRange: unzonedRange };\r\n    };\r\n    DateProfileGenerator.prototype.getFallbackDuration = function () {\r\n        return moment.duration({ days: 1 });\r\n    };\r\n    // Returns a new activeUnzonedRange to have time values (un-ambiguate)\r\n    // minTime or maxTime causes the range to expand.\r\n    DateProfileGenerator.prototype.adjustActiveRange = function (unzonedRange, minTime, maxTime) {\r\n        var start = unzonedRange.getStart();\r\n        var end = unzonedRange.getEnd();\r\n        if (this._view.usesMinMaxTime) {\r\n            if (minTime < 0) {\r\n                start.time(0).add(minTime);\r\n            }\r\n            if (maxTime > 24 * 60 * 60 * 1000) { // beyond 24 hours?\r\n                end.time(maxTime - (24 * 60 * 60 * 1000));\r\n            }\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    // Builds the \"current\" range when it is specified as an explicit duration.\r\n    // `unit` is the already-computed computeGreatestUnit value of duration.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {\r\n        var alignment = this.opt('dateAlignment');\r\n        var dateIncrementInput;\r\n        var dateIncrementDuration;\r\n        var start;\r\n        var end;\r\n        var res;\r\n        // compute what the alignment should be\r\n        if (!alignment) {\r\n            dateIncrementInput = this.opt('dateIncrement');\r\n            if (dateIncrementInput) {\r\n                dateIncrementDuration = moment.duration(dateIncrementInput);\r\n                // use the smaller of the two units\r\n                if (dateIncrementDuration < duration) {\r\n                    alignment = util_1.computeDurationGreatestUnit(dateIncrementDuration, dateIncrementInput);\r\n                }\r\n                else {\r\n                    alignment = unit;\r\n                }\r\n            }\r\n            else {\r\n                alignment = unit;\r\n            }\r\n        }\r\n        // if the view displays a single day or smaller\r\n        if (duration.as('days') <= 1) {\r\n            if (this._view.isHiddenDay(start)) {\r\n                start = this._view.skipHiddenDays(start, direction);\r\n                start.startOf('day');\r\n            }\r\n        }\r\n        function computeRes() {\r\n            start = date.clone().startOf(alignment);\r\n            end = start.clone().add(duration);\r\n            res = new UnzonedRange_1.default(start, end);\r\n        }\r\n        computeRes();\r\n        // if range is completely enveloped by hidden days, go past the hidden days\r\n        if (!this.trimHiddenDays(res)) {\r\n            date = this._view.skipHiddenDays(date, direction);\r\n            computeRes();\r\n        }\r\n        return res;\r\n    };\r\n    // Builds the \"current\" range when a dayCount is specified.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {\r\n        var customAlignment = this.opt('dateAlignment');\r\n        var runningCount = 0;\r\n        var start;\r\n        var end;\r\n        if (customAlignment || direction !== -1) {\r\n            start = date.clone();\r\n            if (customAlignment) {\r\n                start.startOf(customAlignment);\r\n            }\r\n            start.startOf('day');\r\n            start = this._view.skipHiddenDays(start);\r\n            end = start.clone();\r\n            do {\r\n                end.add(1, 'day');\r\n                if (!this._view.isHiddenDay(end)) {\r\n                    runningCount++;\r\n                }\r\n            } while (runningCount < dayCount);\r\n        }\r\n        else {\r\n            end = date.clone().startOf('day').add(1, 'day');\r\n            end = this._view.skipHiddenDays(end, -1, true);\r\n            start = end.clone();\r\n            do {\r\n                start.add(-1, 'day');\r\n                if (!this._view.isHiddenDay(start)) {\r\n                    runningCount++;\r\n                }\r\n            } while (runningCount < dayCount);\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    // Builds a normalized range object for the \"visible\" range,\r\n    // which is a way to define the currentUnzonedRange and activeUnzonedRange at the same time.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {\r\n        var visibleUnzonedRange = this._view.getUnzonedRangeOption('visibleRange', this._view.calendar.applyTimezone(date) // correct zone. also generates new obj that avoids mutations\r\n        );\r\n        if (visibleUnzonedRange && (visibleUnzonedRange.startMs == null || visibleUnzonedRange.endMs == null)) {\r\n            return null;\r\n        }\r\n        return visibleUnzonedRange;\r\n    };\r\n    // Computes the range that will represent the element/cells for *rendering*,\r\n    // but which may have voided days/times.\r\n    // not responsible for trimming hidden days.\r\n    DateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n        return currentUnzonedRange.clone();\r\n    };\r\n    // Compute the duration value that should be added/substracted to the current date\r\n    // when a prev/next operation happens.\r\n    DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {\r\n        var dateIncrementInput = this.opt('dateIncrement');\r\n        var customAlignment;\r\n        if (dateIncrementInput) {\r\n            return moment.duration(dateIncrementInput);\r\n        }\r\n        else if ((customAlignment = this.opt('dateAlignment'))) {\r\n            return moment.duration(1, customAlignment);\r\n        }\r\n        else if (fallback) {\r\n            return fallback;\r\n        }\r\n        else {\r\n            return moment.duration({ days: 1 });\r\n        }\r\n    };\r\n    return DateProfileGenerator;\r\n}());\r\nexports.default = DateProfileGenerator;\r\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar ArrayEventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ArrayEventSource, _super);\r\n    function ArrayEventSource(calendar) {\r\n        var _this = _super.call(this, calendar) || this;\r\n        _this.eventDefs = []; // for if setRawEventDefs is never called\r\n        return _this;\r\n    }\r\n    ArrayEventSource.parse = function (rawInput, calendar) {\r\n        var rawProps;\r\n        // normalize raw input\r\n        if ($.isArray(rawInput.events)) { // extended form\r\n            rawProps = rawInput;\r\n        }\r\n        else if ($.isArray(rawInput)) { // short form\r\n            rawProps = { events: rawInput };\r\n        }\r\n        if (rawProps) {\r\n            return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n        }\r\n        return false;\r\n    };\r\n    ArrayEventSource.prototype.setRawEventDefs = function (rawEventDefs) {\r\n        this.rawEventDefs = rawEventDefs;\r\n        this.eventDefs = this.parseEventDefs(rawEventDefs);\r\n    };\r\n    ArrayEventSource.prototype.fetch = function (start, end, timezone) {\r\n        var eventDefs = this.eventDefs;\r\n        var i;\r\n        if (this.currentTimezone != null &&\r\n            this.currentTimezone !== timezone) {\r\n            for (i = 0; i < eventDefs.length; i++) {\r\n                if (eventDefs[i] instanceof SingleEventDef_1.default) {\r\n                    eventDefs[i].rezone();\r\n                }\r\n            }\r\n        }\r\n        this.currentTimezone = timezone;\r\n        return Promise_1.default.resolve(eventDefs);\r\n    };\r\n    ArrayEventSource.prototype.addEventDef = function (eventDef) {\r\n        this.eventDefs.push(eventDef);\r\n    };\r\n    /*\r\n    eventDefId already normalized to a string\r\n    */\r\n    ArrayEventSource.prototype.removeEventDefsById = function (eventDefId) {\r\n        return util_1.removeMatching(this.eventDefs, function (eventDef) {\r\n            return eventDef.id === eventDefId;\r\n        });\r\n    };\r\n    ArrayEventSource.prototype.removeAllEventDefs = function () {\r\n        this.eventDefs = [];\r\n    };\r\n    ArrayEventSource.prototype.getPrimitive = function () {\r\n        return this.rawEventDefs;\r\n    };\r\n    ArrayEventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n        var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n        this.setRawEventDefs(rawProps.events);\r\n        return superSuccess;\r\n    };\r\n    return ArrayEventSource;\r\n}(EventSource_1.default));\r\nexports.default = ArrayEventSource;\r\nArrayEventSource.defineStandardProps({\r\n    events: false // don't automatically transfer\r\n});\r\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar StandardTheme_1 = __webpack_require__(221);\r\nvar JqueryUiTheme_1 = __webpack_require__(222);\r\nvar themeClassHash = {};\r\nfunction defineThemeSystem(themeName, themeClass) {\r\n    themeClassHash[themeName] = themeClass;\r\n}\r\nexports.defineThemeSystem = defineThemeSystem;\r\nfunction getThemeSystemClass(themeSetting) {\r\n    if (!themeSetting) {\r\n        return StandardTheme_1.default;\r\n    }\r\n    else if (themeSetting === true) {\r\n        return JqueryUiTheme_1.default;\r\n    }\r\n    else {\r\n        return themeClassHash[themeSetting];\r\n    }\r\n}\r\nexports.getThemeSystemClass = getThemeSystemClass;\r\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\n/*\r\nA cache for the left/right/top/bottom/width/height values for one or more elements.\r\nWorks with both offset (from topleft document) and position (from offsetParent).\r\n\noptions:\r\n- els\r\n- isHorizontal\r\n- isVertical\r\n*/\r\nvar CoordCache = /** @class */ (function () {\r\n    function CoordCache(options) {\r\n        this.isHorizontal = false; // whether to query for left/right/width\r\n        this.isVertical = false; // whether to query for top/bottom/height\r\n        this.els = $(options.els);\r\n        this.isHorizontal = options.isHorizontal;\r\n        this.isVertical = options.isVertical;\r\n        this.forcedOffsetParentEl = options.offsetParent ? $(options.offsetParent) : null;\r\n    }\r\n    // Queries the els for coordinates and stores them.\r\n    // Call this method before using and of the get* methods below.\r\n    CoordCache.prototype.build = function () {\r\n        var offsetParentEl = this.forcedOffsetParentEl;\r\n        if (!offsetParentEl && this.els.length > 0) {\r\n            offsetParentEl = this.els.eq(0).offsetParent();\r\n        }\r\n        this.origin = offsetParentEl ?\r\n            offsetParentEl.offset() :\r\n            null;\r\n        this.boundingRect = this.queryBoundingRect();\r\n        if (this.isHorizontal) {\r\n            this.buildElHorizontals();\r\n        }\r\n        if (this.isVertical) {\r\n            this.buildElVerticals();\r\n        }\r\n    };\r\n    // Destroys all internal data about coordinates, freeing memory\r\n    CoordCache.prototype.clear = function () {\r\n        this.origin = null;\r\n        this.boundingRect = null;\r\n        this.lefts = null;\r\n        this.rights = null;\r\n        this.tops = null;\r\n        this.bottoms = null;\r\n    };\r\n    // When called, if coord caches aren't built, builds them\r\n    CoordCache.prototype.ensureBuilt = function () {\r\n        if (!this.origin) {\r\n            this.build();\r\n        }\r\n    };\r\n    // Populates the left/right internal coordinate arrays\r\n    CoordCache.prototype.buildElHorizontals = function () {\r\n        var lefts = [];\r\n        var rights = [];\r\n        this.els.each(function (i, node) {\r\n            var el = $(node);\r\n            var left = el.offset().left;\r\n            var width = el.outerWidth();\r\n            lefts.push(left);\r\n            rights.push(left + width);\r\n        });\r\n        this.lefts = lefts;\r\n        this.rights = rights;\r\n    };\r\n    // Populates the top/bottom internal coordinate arrays\r\n    CoordCache.prototype.buildElVerticals = function () {\r\n        var tops = [];\r\n        var bottoms = [];\r\n        this.els.each(function (i, node) {\r\n            var el = $(node);\r\n            var top = el.offset().top;\r\n            var height = el.outerHeight();\r\n            tops.push(top);\r\n            bottoms.push(top + height);\r\n        });\r\n        this.tops = tops;\r\n        this.bottoms = bottoms;\r\n    };\r\n    // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\r\n    // If no intersection is made, returns undefined.\r\n    CoordCache.prototype.getHorizontalIndex = function (leftOffset) {\r\n        this.ensureBuilt();\r\n        var lefts = this.lefts;\r\n        var rights = this.rights;\r\n        var len = lefts.length;\r\n        var i;\r\n        for (i = 0; i < len; i++) {\r\n            if (leftOffset >= lefts[i] && leftOffset < rights[i]) {\r\n                return i;\r\n            }\r\n        }\r\n    };\r\n    // Given a top offset (from document top), returns the index of the el that it vertically intersects.\r\n    // If no intersection is made, returns undefined.\r\n    CoordCache.prototype.getVerticalIndex = function (topOffset) {\r\n        this.ensureBuilt();\r\n        var tops = this.tops;\r\n        var bottoms = this.bottoms;\r\n        var len = tops.length;\r\n        var i;\r\n        for (i = 0; i < len; i++) {\r\n            if (topOffset >= tops[i] && topOffset < bottoms[i]) {\r\n                return i;\r\n            }\r\n        }\r\n    };\r\n    // Gets the left offset (from document left) of the element at the given index\r\n    CoordCache.prototype.getLeftOffset = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.lefts[leftIndex];\r\n    };\r\n    // Gets the left position (from offsetParent left) of the element at the given index\r\n    CoordCache.prototype.getLeftPosition = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.lefts[leftIndex] - this.origin.left;\r\n    };\r\n    // Gets the right offset (from document left) of the element at the given index.\r\n    // This value is NOT relative to the document's right edge, like the CSS concept of \"right\" would be.\r\n    CoordCache.prototype.getRightOffset = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.rights[leftIndex];\r\n    };\r\n    // Gets the right position (from offsetParent left) of the element at the given index.\r\n    // This value is NOT relative to the offsetParent's right edge, like the CSS concept of \"right\" would be.\r\n    CoordCache.prototype.getRightPosition = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.rights[leftIndex] - this.origin.left;\r\n    };\r\n    // Gets the width of the element at the given index\r\n    CoordCache.prototype.getWidth = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.rights[leftIndex] - this.lefts[leftIndex];\r\n    };\r\n    // Gets the top offset (from document top) of the element at the given index\r\n    CoordCache.prototype.getTopOffset = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.tops[topIndex];\r\n    };\r\n    // Gets the top position (from offsetParent top) of the element at the given position\r\n    CoordCache.prototype.getTopPosition = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.tops[topIndex] - this.origin.top;\r\n    };\r\n    // Gets the bottom offset (from the document top) of the element at the given index.\r\n    // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\r\n    CoordCache.prototype.getBottomOffset = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.bottoms[topIndex];\r\n    };\r\n    // Gets the bottom position (from the offsetParent top) of the element at the given index.\r\n    // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\r\n    CoordCache.prototype.getBottomPosition = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.bottoms[topIndex] - this.origin.top;\r\n    };\r\n    // Gets the height of the element at the given index\r\n    CoordCache.prototype.getHeight = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.bottoms[topIndex] - this.tops[topIndex];\r\n    };\r\n    // Bounding Rect\r\n    // TODO: decouple this from CoordCache\r\n    // Compute and return what the elements' bounding rectangle is, from the user's perspective.\r\n    // Right now, only returns a rectangle if constrained by an overflow:scroll element.\r\n    // Returns null if there are no elements\r\n    CoordCache.prototype.queryBoundingRect = function () {\r\n        var scrollParentEl;\r\n        if (this.els.length > 0) {\r\n            scrollParentEl = util_1.getScrollParent(this.els.eq(0));\r\n            if (!scrollParentEl.is(document) &&\r\n                !scrollParentEl.is('html,body') // don't consider these bounding rects. solves issue 3615\r\n            ) {\r\n                return util_1.getClientRect(scrollParentEl);\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    CoordCache.prototype.isPointInBounds = function (leftOffset, topOffset) {\r\n        return this.isLeftInBounds(leftOffset) && this.isTopInBounds(topOffset);\r\n    };\r\n    CoordCache.prototype.isLeftInBounds = function (leftOffset) {\r\n        return !this.boundingRect || (leftOffset >= this.boundingRect.left && leftOffset < this.boundingRect.right);\r\n    };\r\n    CoordCache.prototype.isTopInBounds = function (topOffset) {\r\n        return !this.boundingRect || (topOffset >= this.boundingRect.top && topOffset < this.boundingRect.bottom);\r\n    };\r\n    return CoordCache;\r\n}());\r\nexports.default = CoordCache;\r\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\n/* Tracks a drag's mouse movement, firing various handlers\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// TODO: use Emitter\r\nvar DragListener = /** @class */ (function () {\r\n    function DragListener(options) {\r\n        this.isInteracting = false;\r\n        this.isDistanceSurpassed = false;\r\n        this.isDelayEnded = false;\r\n        this.isDragging = false;\r\n        this.isTouch = false;\r\n        this.isGeneric = false; // initiated by 'dragstart' (jqui)\r\n        this.shouldCancelTouchScroll = true;\r\n        this.scrollAlwaysKills = false;\r\n        this.isAutoScroll = false;\r\n        // defaults\r\n        this.scrollSensitivity = 30; // pixels from edge for scrolling to start\r\n        this.scrollSpeed = 200; // pixels per second, at maximum speed\r\n        this.scrollIntervalMs = 50; // millisecond wait between scroll increment\r\n        this.options = options || {};\r\n    }\r\n    // Interaction (high-level)\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.startInteraction = function (ev, extraOptions) {\r\n        if (extraOptions === void 0) { extraOptions = {}; }\r\n        if (ev.type === 'mousedown') {\r\n            if (GlobalEmitter_1.default.get().shouldIgnoreMouse()) {\r\n                return;\r\n            }\r\n            else if (!util_1.isPrimaryMouseButton(ev)) {\r\n                return;\r\n            }\r\n            else {\r\n                ev.preventDefault(); // prevents native selection in most browsers\r\n            }\r\n        }\r\n        if (!this.isInteracting) {\r\n            // process options\r\n            this.delay = util_1.firstDefined(extraOptions.delay, this.options.delay, 0);\r\n            this.minDistance = util_1.firstDefined(extraOptions.distance, this.options.distance, 0);\r\n            this.subjectEl = this.options.subjectEl;\r\n            util_1.preventSelection($('body'));\r\n            this.isInteracting = true;\r\n            this.isTouch = util_1.getEvIsTouch(ev);\r\n            this.isGeneric = ev.type === 'dragstart';\r\n            this.isDelayEnded = false;\r\n            this.isDistanceSurpassed = false;\r\n            this.originX = util_1.getEvX(ev);\r\n            this.originY = util_1.getEvY(ev);\r\n            this.scrollEl = util_1.getScrollParent($(ev.target));\r\n            this.bindHandlers();\r\n            this.initAutoScroll();\r\n            this.handleInteractionStart(ev);\r\n            this.startDelay(ev);\r\n            if (!this.minDistance) {\r\n                this.handleDistanceSurpassed(ev);\r\n            }\r\n        }\r\n    };\r\n    DragListener.prototype.handleInteractionStart = function (ev) {\r\n        this.trigger('interactionStart', ev);\r\n    };\r\n    DragListener.prototype.endInteraction = function (ev, isCancelled) {\r\n        if (this.isInteracting) {\r\n            this.endDrag(ev);\r\n            if (this.delayTimeoutId) {\r\n                clearTimeout(this.delayTimeoutId);\r\n                this.delayTimeoutId = null;\r\n            }\r\n            this.destroyAutoScroll();\r\n            this.unbindHandlers();\r\n            this.isInteracting = false;\r\n            this.handleInteractionEnd(ev, isCancelled);\r\n            util_1.allowSelection($('body'));\r\n        }\r\n    };\r\n    DragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\r\n        this.trigger('interactionEnd', ev, isCancelled || false);\r\n    };\r\n    // Binding To DOM\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.bindHandlers = function () {\r\n        // some browsers (Safari in iOS 10) don't allow preventDefault on touch events that are bound after touchstart,\r\n        // so listen to the GlobalEmitter singleton, which is always bound, instead of the document directly.\r\n        var globalEmitter = GlobalEmitter_1.default.get();\r\n        if (this.isGeneric) {\r\n            this.listenTo($(document), {\r\n                drag: this.handleMove,\r\n                dragstop: this.endInteraction\r\n            });\r\n        }\r\n        else if (this.isTouch) {\r\n            this.listenTo(globalEmitter, {\r\n                touchmove: this.handleTouchMove,\r\n                touchend: this.endInteraction,\r\n                scroll: this.handleTouchScroll\r\n            });\r\n        }\r\n        else {\r\n            this.listenTo(globalEmitter, {\r\n                mousemove: this.handleMouseMove,\r\n                mouseup: this.endInteraction\r\n            });\r\n        }\r\n        this.listenTo(globalEmitter, {\r\n            selectstart: util_1.preventDefault,\r\n            contextmenu: util_1.preventDefault // long taps would open menu on Chrome dev tools\r\n        });\r\n    };\r\n    DragListener.prototype.unbindHandlers = function () {\r\n        this.stopListeningTo(GlobalEmitter_1.default.get());\r\n        this.stopListeningTo($(document)); // for isGeneric\r\n    };\r\n    // Drag (high-level)\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // extraOptions ignored if drag already started\r\n    DragListener.prototype.startDrag = function (ev, extraOptions) {\r\n        this.startInteraction(ev, extraOptions); // ensure interaction began\r\n        if (!this.isDragging) {\r\n            this.isDragging = true;\r\n            this.handleDragStart(ev);\r\n        }\r\n    };\r\n    DragListener.prototype.handleDragStart = function (ev) {\r\n        this.trigger('dragStart', ev);\r\n    };\r\n    DragListener.prototype.handleMove = function (ev) {\r\n        var dx = util_1.getEvX(ev) - this.originX;\r\n        var dy = util_1.getEvY(ev) - this.originY;\r\n        var minDistance = this.minDistance;\r\n        var distanceSq; // current distance from the origin, squared\r\n        if (!this.isDistanceSurpassed) {\r\n            distanceSq = dx * dx + dy * dy;\r\n            if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\r\n                this.handleDistanceSurpassed(ev);\r\n            }\r\n        }\r\n        if (this.isDragging) {\r\n            this.handleDrag(dx, dy, ev);\r\n        }\r\n    };\r\n    // Called while the mouse is being moved and when we know a legitimate drag is taking place\r\n    DragListener.prototype.handleDrag = function (dx, dy, ev) {\r\n        this.trigger('drag', dx, dy, ev);\r\n        this.updateAutoScroll(ev); // will possibly cause scrolling\r\n    };\r\n    DragListener.prototype.endDrag = function (ev) {\r\n        if (this.isDragging) {\r\n            this.isDragging = false;\r\n            this.handleDragEnd(ev);\r\n        }\r\n    };\r\n    DragListener.prototype.handleDragEnd = function (ev) {\r\n        this.trigger('dragEnd', ev);\r\n    };\r\n    // Delay\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.startDelay = function (initialEv) {\r\n        var _this = this;\r\n        if (this.delay) {\r\n            this.delayTimeoutId = setTimeout(function () {\r\n                _this.handleDelayEnd(initialEv);\r\n            }, this.delay);\r\n        }\r\n        else {\r\n            this.handleDelayEnd(initialEv);\r\n        }\r\n    };\r\n    DragListener.prototype.handleDelayEnd = function (initialEv) {\r\n        this.isDelayEnded = true;\r\n        if (this.isDistanceSurpassed) {\r\n            this.startDrag(initialEv);\r\n        }\r\n    };\r\n    // Distance\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.handleDistanceSurpassed = function (ev) {\r\n        this.isDistanceSurpassed = true;\r\n        if (this.isDelayEnded) {\r\n            this.startDrag(ev);\r\n        }\r\n    };\r\n    // Mouse / Touch\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.handleTouchMove = function (ev) {\r\n        // prevent inertia and touchmove-scrolling while dragging\r\n        if (this.isDragging && this.shouldCancelTouchScroll) {\r\n            ev.preventDefault();\r\n        }\r\n        this.handleMove(ev);\r\n    };\r\n    DragListener.prototype.handleMouseMove = function (ev) {\r\n        this.handleMove(ev);\r\n    };\r\n    // Scrolling (unrelated to auto-scroll)\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.handleTouchScroll = function (ev) {\r\n        // if the drag is being initiated by touch, but a scroll happens before\r\n        // the drag-initiating delay is over, cancel the drag\r\n        if (!this.isDragging || this.scrollAlwaysKills) {\r\n            this.endInteraction(ev, true); // isCancelled=true\r\n        }\r\n    };\r\n    // Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Triggers a callback. Calls a function in the option hash of the same name.\r\n    // Arguments beyond the first `name` are forwarded on.\r\n    DragListener.prototype.trigger = function (name) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        if (this.options[name]) {\r\n            this.options[name].apply(this, args);\r\n        }\r\n        // makes _methods callable by event name. TODO: kill this\r\n        if (this['_' + name]) {\r\n            this['_' + name].apply(this, args);\r\n        }\r\n    };\r\n    // Auto-scroll\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.initAutoScroll = function () {\r\n        var scrollEl = this.scrollEl;\r\n        this.isAutoScroll =\r\n            this.options.scroll &&\r\n                scrollEl &&\r\n                !scrollEl.is(window) &&\r\n                !scrollEl.is(document);\r\n        if (this.isAutoScroll) {\r\n            // debounce makes sure rapid calls don't happen\r\n            this.listenTo(scrollEl, 'scroll', util_1.debounce(this.handleDebouncedScroll, 100));\r\n        }\r\n    };\r\n    DragListener.prototype.destroyAutoScroll = function () {\r\n        this.endAutoScroll(); // kill any animation loop\r\n        // remove the scroll handler if there is a scrollEl\r\n        if (this.isAutoScroll) {\r\n            this.stopListeningTo(this.scrollEl, 'scroll'); // will probably get removed by unbindHandlers too :(\r\n        }\r\n    };\r\n    // Computes and stores the bounding rectangle of scrollEl\r\n    DragListener.prototype.computeScrollBounds = function () {\r\n        if (this.isAutoScroll) {\r\n            this.scrollBounds = util_1.getOuterRect(this.scrollEl);\r\n            // TODO: use getClientRect in future. but prevents auto scrolling when on top of scrollbars\r\n        }\r\n    };\r\n    // Called when the dragging is in progress and scrolling should be updated\r\n    DragListener.prototype.updateAutoScroll = function (ev) {\r\n        var sensitivity = this.scrollSensitivity;\r\n        var bounds = this.scrollBounds;\r\n        var topCloseness;\r\n        var bottomCloseness;\r\n        var leftCloseness;\r\n        var rightCloseness;\r\n        var topVel = 0;\r\n        var leftVel = 0;\r\n        if (bounds) { // only scroll if scrollEl exists\r\n            // compute closeness to edges. valid range is from 0.0 - 1.0\r\n            topCloseness = (sensitivity - (util_1.getEvY(ev) - bounds.top)) / sensitivity;\r\n            bottomCloseness = (sensitivity - (bounds.bottom - util_1.getEvY(ev))) / sensitivity;\r\n            leftCloseness = (sensitivity - (util_1.getEvX(ev) - bounds.left)) / sensitivity;\r\n            rightCloseness = (sensitivity - (bounds.right - util_1.getEvX(ev))) / sensitivity;\r\n            // translate vertical closeness into velocity.\r\n            // mouse must be completely in bounds for velocity to happen.\r\n            if (topCloseness >= 0 && topCloseness <= 1) {\r\n                topVel = topCloseness * this.scrollSpeed * -1; // negative. for scrolling up\r\n            }\r\n            else if (bottomCloseness >= 0 && bottomCloseness <= 1) {\r\n                topVel = bottomCloseness * this.scrollSpeed;\r\n            }\r\n            // translate horizontal closeness into velocity\r\n            if (leftCloseness >= 0 && leftCloseness <= 1) {\r\n                leftVel = leftCloseness * this.scrollSpeed * -1; // negative. for scrolling left\r\n            }\r\n            else if (rightCloseness >= 0 && rightCloseness <= 1) {\r\n                leftVel = rightCloseness * this.scrollSpeed;\r\n            }\r\n        }\r\n        this.setScrollVel(topVel, leftVel);\r\n    };\r\n    // Sets the speed-of-scrolling for the scrollEl\r\n    DragListener.prototype.setScrollVel = function (topVel, leftVel) {\r\n        this.scrollTopVel = topVel;\r\n        this.scrollLeftVel = leftVel;\r\n        this.constrainScrollVel(); // massages into realistic values\r\n        // if there is non-zero velocity, and an animation loop hasn't already started, then START\r\n        if ((this.scrollTopVel || this.scrollLeftVel) && !this.scrollIntervalId) {\r\n            this.scrollIntervalId = setInterval(util_1.proxy(this, 'scrollIntervalFunc'), // scope to `this`\r\n            this.scrollIntervalMs);\r\n        }\r\n    };\r\n    // Forces scrollTopVel and scrollLeftVel to be zero if scrolling has already gone all the way\r\n    DragListener.prototype.constrainScrollVel = function () {\r\n        var el = this.scrollEl;\r\n        if (this.scrollTopVel < 0) { // scrolling up?\r\n            if (el.scrollTop() <= 0) { // already scrolled all the way up?\r\n                this.scrollTopVel = 0;\r\n            }\r\n        }\r\n        else if (this.scrollTopVel > 0) { // scrolling down?\r\n            if (el.scrollTop() + el[0].clientHeight >= el[0].scrollHeight) { // already scrolled all the way down?\r\n                this.scrollTopVel = 0;\r\n            }\r\n        }\r\n        if (this.scrollLeftVel < 0) { // scrolling left?\r\n            if (el.scrollLeft() <= 0) { // already scrolled all the left?\r\n                this.scrollLeftVel = 0;\r\n            }\r\n        }\r\n        else if (this.scrollLeftVel > 0) { // scrolling right?\r\n            if (el.scrollLeft() + el[0].clientWidth >= el[0].scrollWidth) { // already scrolled all the way right?\r\n                this.scrollLeftVel = 0;\r\n            }\r\n        }\r\n    };\r\n    // This function gets called during every iteration of the scrolling animation loop\r\n    DragListener.prototype.scrollIntervalFunc = function () {\r\n        var el = this.scrollEl;\r\n        var frac = this.scrollIntervalMs / 1000; // considering animation frequency, what the vel should be mult'd by\r\n        // change the value of scrollEl's scroll\r\n        if (this.scrollTopVel) {\r\n            el.scrollTop(el.scrollTop() + this.scrollTopVel * frac);\r\n        }\r\n        if (this.scrollLeftVel) {\r\n            el.scrollLeft(el.scrollLeft() + this.scrollLeftVel * frac);\r\n        }\r\n        this.constrainScrollVel(); // since the scroll values changed, recompute the velocities\r\n        // if scrolled all the way, which causes the vels to be zero, stop the animation loop\r\n        if (!this.scrollTopVel && !this.scrollLeftVel) {\r\n            this.endAutoScroll();\r\n        }\r\n    };\r\n    // Kills any existing scrolling animation loop\r\n    DragListener.prototype.endAutoScroll = function () {\r\n        if (this.scrollIntervalId) {\r\n            clearInterval(this.scrollIntervalId);\r\n            this.scrollIntervalId = null;\r\n            this.handleScrollEnd();\r\n        }\r\n    };\r\n    // Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce)\r\n    DragListener.prototype.handleDebouncedScroll = function () {\r\n        // recompute all coordinates, but *only* if this is *not* part of our scrolling animation\r\n        if (!this.scrollIntervalId) {\r\n            this.handleScrollEnd();\r\n        }\r\n    };\r\n    DragListener.prototype.handleScrollEnd = function () {\r\n        // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\r\n    };\r\n    return DragListener;\r\n}());\r\nexports.default = DragListener;\r\nListenerMixin_1.default.mixInto(DragListener);\r\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar Mixin_1 = __webpack_require__(15);\r\n/*\r\nA set of rendering and date-related methods for a visual component comprised of one or more rows of day columns.\r\nPrerequisite: the object being mixed into needs to be a *Grid*\r\n*/\r\nvar DayTableMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayTableMixin, _super);\r\n    function DayTableMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Populates internal variables used for date calculation and rendering\r\n    DayTableMixin.prototype.updateDayTable = function () {\r\n        var t = this;\r\n        var view = t.view;\r\n        var calendar = view.calendar;\r\n        var date = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.startMs, true);\r\n        var end = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.endMs, true);\r\n        var dayIndex = -1;\r\n        var dayIndices = [];\r\n        var dayDates = [];\r\n        var daysPerRow;\r\n        var firstDay;\r\n        var rowCnt;\r\n        while (date.isBefore(end)) { // loop each day from start to end\r\n            if (view.isHiddenDay(date)) {\r\n                dayIndices.push(dayIndex + 0.5); // mark that it's between indices\r\n            }\r\n            else {\r\n                dayIndex++;\r\n                dayIndices.push(dayIndex);\r\n                dayDates.push(date.clone());\r\n            }\r\n            date.add(1, 'days');\r\n        }\r\n        if (this.breakOnWeeks) {\r\n            // count columns until the day-of-week repeats\r\n            firstDay = dayDates[0].day();\r\n            for (daysPerRow = 1; daysPerRow < dayDates.length; daysPerRow++) {\r\n                if (dayDates[daysPerRow].day() === firstDay) {\r\n                    break;\r\n                }\r\n            }\r\n            rowCnt = Math.ceil(dayDates.length / daysPerRow);\r\n        }\r\n        else {\r\n            rowCnt = 1;\r\n            daysPerRow = dayDates.length;\r\n        }\r\n        this.dayDates = dayDates;\r\n        this.dayIndices = dayIndices;\r\n        this.daysPerRow = daysPerRow;\r\n        this.rowCnt = rowCnt;\r\n        this.updateDayTableCols();\r\n    };\r\n    // Computes and assigned the colCnt property and updates any options that may be computed from it\r\n    DayTableMixin.prototype.updateDayTableCols = function () {\r\n        this.colCnt = this.computeColCnt();\r\n        this.colHeadFormat =\r\n            this.opt('columnHeaderFormat') ||\r\n                this.opt('columnFormat') || // deprecated\r\n                this.computeColHeadFormat();\r\n    };\r\n    // Determines how many columns there should be in the table\r\n    DayTableMixin.prototype.computeColCnt = function () {\r\n        return this.daysPerRow;\r\n    };\r\n    // Computes the ambiguously-timed moment for the given cell\r\n    DayTableMixin.prototype.getCellDate = function (row, col) {\r\n        return this.dayDates[this.getCellDayIndex(row, col)].clone();\r\n    };\r\n    // Computes the ambiguously-timed date range for the given cell\r\n    DayTableMixin.prototype.getCellRange = function (row, col) {\r\n        var start = this.getCellDate(row, col);\r\n        var end = start.clone().add(1, 'days');\r\n        return { start: start, end: end };\r\n    };\r\n    // Returns the number of day cells, chronologically, from the first of the grid (0-based)\r\n    DayTableMixin.prototype.getCellDayIndex = function (row, col) {\r\n        return row * this.daysPerRow + this.getColDayIndex(col);\r\n    };\r\n    // Returns the numner of day cells, chronologically, from the first cell in *any given row*\r\n    DayTableMixin.prototype.getColDayIndex = function (col) {\r\n        if (this.isRTL) {\r\n            return this.colCnt - 1 - col;\r\n        }\r\n        else {\r\n            return col;\r\n        }\r\n    };\r\n    // Given a date, returns its chronolocial cell-index from the first cell of the grid.\r\n    // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\r\n    // If before the first offset, returns a negative number.\r\n    // If after the last offset, returns an offset past the last cell offset.\r\n    // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\r\n    DayTableMixin.prototype.getDateDayIndex = function (date) {\r\n        var dayIndices = this.dayIndices;\r\n        var dayOffset = date.diff(this.dayDates[0], 'days');\r\n        if (dayOffset < 0) {\r\n            return dayIndices[0] - 1;\r\n        }\r\n        else if (dayOffset >= dayIndices.length) {\r\n            return dayIndices[dayIndices.length - 1] + 1;\r\n        }\r\n        else {\r\n            return dayIndices[dayOffset];\r\n        }\r\n    };\r\n    /* Options\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Computes a default column header formatting string if `colFormat` is not explicitly defined\r\n    DayTableMixin.prototype.computeColHeadFormat = function () {\r\n        // if more than one week row, or if there are a lot of columns with not much space,\r\n        // put just the day numbers will be in each cell\r\n        if (this.rowCnt > 1 || this.colCnt > 10) {\r\n            return 'ddd'; // \"Sat\"\r\n        }\r\n        else if (this.colCnt > 1) {\r\n            return this.opt('dayOfMonthFormat'); // \"Sat 12/10\"\r\n        }\r\n        else {\r\n            return 'dddd'; // \"Saturday\"\r\n        }\r\n    };\r\n    /* Slicing\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Slices up a date range into a segment for every week-row it intersects with\r\n    DayTableMixin.prototype.sliceRangeByRow = function (unzonedRange) {\r\n        var daysPerRow = this.daysPerRow;\r\n        var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\r\n        var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\r\n        var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\r\n        var segs = [];\r\n        var row;\r\n        var rowFirst;\r\n        var rowLast; // inclusive day-index range for current row\r\n        var segFirst;\r\n        var segLast; // inclusive day-index range for segment\r\n        for (row = 0; row < this.rowCnt; row++) {\r\n            rowFirst = row * daysPerRow;\r\n            rowLast = rowFirst + daysPerRow - 1;\r\n            // intersect segment's offset range with the row's\r\n            segFirst = Math.max(rangeFirst, rowFirst);\r\n            segLast = Math.min(rangeLast, rowLast);\r\n            // deal with in-between indices\r\n            segFirst = Math.ceil(segFirst); // in-between starts round to next cell\r\n            segLast = Math.floor(segLast); // in-between ends round to prev cell\r\n            if (segFirst <= segLast) { // was there any intersection with the current row?\r\n                segs.push({\r\n                    row: row,\r\n                    // normalize to start of row\r\n                    firstRowDayIndex: segFirst - rowFirst,\r\n                    lastRowDayIndex: segLast - rowFirst,\r\n                    // must be matching integers to be the segment's start/end\r\n                    isStart: segFirst === rangeFirst,\r\n                    isEnd: segLast === rangeLast\r\n                });\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    // Slices up a date range into a segment for every day-cell it intersects with.\r\n    // TODO: make more DRY with sliceRangeByRow somehow.\r\n    DayTableMixin.prototype.sliceRangeByDay = function (unzonedRange) {\r\n        var daysPerRow = this.daysPerRow;\r\n        var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\r\n        var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\r\n        var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\r\n        var segs = [];\r\n        var row;\r\n        var rowFirst;\r\n        var rowLast; // inclusive day-index range for current row\r\n        var i;\r\n        var segFirst;\r\n        var segLast; // inclusive day-index range for segment\r\n        for (row = 0; row < this.rowCnt; row++) {\r\n            rowFirst = row * daysPerRow;\r\n            rowLast = rowFirst + daysPerRow - 1;\r\n            for (i = rowFirst; i <= rowLast; i++) {\r\n                // intersect segment's offset range with the row's\r\n                segFirst = Math.max(rangeFirst, i);\r\n                segLast = Math.min(rangeLast, i);\r\n                // deal with in-between indices\r\n                segFirst = Math.ceil(segFirst); // in-between starts round to next cell\r\n                segLast = Math.floor(segLast); // in-between ends round to prev cell\r\n                if (segFirst <= segLast) { // was there any intersection with the current row?\r\n                    segs.push({\r\n                        row: row,\r\n                        // normalize to start of row\r\n                        firstRowDayIndex: segFirst - rowFirst,\r\n                        lastRowDayIndex: segLast - rowFirst,\r\n                        // must be matching integers to be the segment's start/end\r\n                        isStart: segFirst === rangeFirst,\r\n                        isEnd: segLast === rangeLast\r\n                    });\r\n                }\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Header Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayTableMixin.prototype.renderHeadHtml = function () {\r\n        var theme = this.view.calendar.theme;\r\n        return '' +\r\n            '<div class=\"fc-row ' + theme.getClass('headerRow') + '\">' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            '<thead>' +\r\n            this.renderHeadTrHtml() +\r\n            '</thead>' +\r\n            '</table>' +\r\n            '</div>';\r\n    };\r\n    DayTableMixin.prototype.renderHeadIntroHtml = function () {\r\n        return this.renderIntroHtml(); // fall back to generic\r\n    };\r\n    DayTableMixin.prototype.renderHeadTrHtml = function () {\r\n        return '' +\r\n            '<tr>' +\r\n            (this.isRTL ? '' : this.renderHeadIntroHtml()) +\r\n            this.renderHeadDateCellsHtml() +\r\n            (this.isRTL ? this.renderHeadIntroHtml() : '') +\r\n            '</tr>';\r\n    };\r\n    DayTableMixin.prototype.renderHeadDateCellsHtml = function () {\r\n        var htmls = [];\r\n        var col;\r\n        var date;\r\n        for (col = 0; col < this.colCnt; col++) {\r\n            date = this.getCellDate(0, col);\r\n            htmls.push(this.renderHeadDateCellHtml(date));\r\n        }\r\n        return htmls.join('');\r\n    };\r\n    // TODO: when internalApiVersion, accept an object for HTML attributes\r\n    // (colspan should be no different)\r\n    DayTableMixin.prototype.renderHeadDateCellHtml = function (date, colspan, otherAttrs) {\r\n        var t = this;\r\n        var view = t.view;\r\n        var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n        var classNames = [\r\n            'fc-day-header',\r\n            view.calendar.theme.getClass('widgetHeader')\r\n        ];\r\n        var innerHtml;\r\n        if (typeof t.opt('columnHeaderHtml') === 'function') {\r\n            innerHtml = t.opt('columnHeaderHtml')(date);\r\n        }\r\n        else if (typeof t.opt('columnHeaderText') === 'function') {\r\n            innerHtml = util_1.htmlEscape(t.opt('columnHeaderText')(date));\r\n        }\r\n        else {\r\n            innerHtml = util_1.htmlEscape(date.format(t.colHeadFormat));\r\n        }\r\n        // if only one row of days, the classNames on the header can represent the specific days beneath\r\n        if (t.rowCnt === 1) {\r\n            classNames = classNames.concat(\r\n            // includes the day-of-week class\r\n            // noThemeHighlight=true (don't highlight the header)\r\n            t.getDayClasses(date, true));\r\n        }\r\n        else {\r\n            classNames.push('fc-' + util_1.dayIDs[date.day()]); // only add the day-of-week class\r\n        }\r\n        return '' +\r\n            '<th class=\"' + classNames.join(' ') + '\"' +\r\n            ((isDateValid && t.rowCnt) === 1 ?\r\n                ' data-date=\"' + date.format('YYYY-MM-DD') + '\"' :\r\n                '') +\r\n            (colspan > 1 ?\r\n                ' colspan=\"' + colspan + '\"' :\r\n                '') +\r\n            (otherAttrs ?\r\n                ' ' + otherAttrs :\r\n                '') +\r\n            '>' +\r\n            (isDateValid ?\r\n                // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)\r\n                view.buildGotoAnchorHtml({ date: date, forceOff: t.rowCnt > 1 || t.colCnt === 1 }, innerHtml) :\r\n                // if not valid, display text, but no link\r\n                innerHtml) +\r\n            '</th>';\r\n    };\r\n    /* Background Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayTableMixin.prototype.renderBgTrHtml = function (row) {\r\n        return '' +\r\n            '<tr>' +\r\n            (this.isRTL ? '' : this.renderBgIntroHtml(row)) +\r\n            this.renderBgCellsHtml(row) +\r\n            (this.isRTL ? this.renderBgIntroHtml(row) : '') +\r\n            '</tr>';\r\n    };\r\n    DayTableMixin.prototype.renderBgIntroHtml = function (row) {\r\n        return this.renderIntroHtml(); // fall back to generic\r\n    };\r\n    DayTableMixin.prototype.renderBgCellsHtml = function (row) {\r\n        var htmls = [];\r\n        var col;\r\n        var date;\r\n        for (col = 0; col < this.colCnt; col++) {\r\n            date = this.getCellDate(row, col);\r\n            htmls.push(this.renderBgCellHtml(date));\r\n        }\r\n        return htmls.join('');\r\n    };\r\n    DayTableMixin.prototype.renderBgCellHtml = function (date, otherAttrs) {\r\n        var t = this;\r\n        var view = t.view;\r\n        var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n        var classes = t.getDayClasses(date);\r\n        classes.unshift('fc-day', view.calendar.theme.getClass('widgetContent'));\r\n        return '<td class=\"' + classes.join(' ') + '\"' +\r\n            (isDateValid ?\r\n                ' data-date=\"' + date.format('YYYY-MM-DD') + '\"' : // if date has a time, won't format it\r\n                '') +\r\n            (otherAttrs ?\r\n                ' ' + otherAttrs :\r\n                '') +\r\n            '></td>';\r\n    };\r\n    /* Generic\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayTableMixin.prototype.renderIntroHtml = function () {\r\n        // Generates the default HTML intro for any row. User classes should override\r\n    };\r\n    // TODO: a generic method for dealing with <tr>, RTL, intro\r\n    // when increment internalApiVersion\r\n    // wrapTr (scheduler)\r\n    /* Utils\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Applies the generic \"intro\" and \"outro\" HTML to the given cells.\r\n    // Intro means the leftmost cell when the calendar is LTR and the rightmost cell when RTL. Vice-versa for outro.\r\n    DayTableMixin.prototype.bookendCells = function (trEl) {\r\n        var introHtml = this.renderIntroHtml();\r\n        if (introHtml) {\r\n            if (this.isRTL) {\r\n                trEl.append(introHtml);\r\n            }\r\n            else {\r\n                trEl.prepend(introHtml);\r\n            }\r\n        }\r\n    };\r\n    return DayTableMixin;\r\n}(Mixin_1.default));\r\nexports.default = DayTableMixin;\r\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar BusinessHourRenderer = /** @class */ (function () {\r\n    /*\r\n    component implements:\r\n      - eventRangesToEventFootprints\r\n      - eventFootprintsToSegs\r\n    */\r\n    function BusinessHourRenderer(component, fillRenderer) {\r\n        this.component = component;\r\n        this.fillRenderer = fillRenderer;\r\n    }\r\n    BusinessHourRenderer.prototype.render = function (businessHourGenerator) {\r\n        var component = this.component;\r\n        var unzonedRange = component._getDateProfile().activeUnzonedRange;\r\n        var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(component.hasAllDayBusinessHours, unzonedRange);\r\n        var eventFootprints = eventInstanceGroup ?\r\n            component.eventRangesToEventFootprints(eventInstanceGroup.sliceRenderRanges(unzonedRange)) :\r\n            [];\r\n        this.renderEventFootprints(eventFootprints);\r\n    };\r\n    BusinessHourRenderer.prototype.renderEventFootprints = function (eventFootprints) {\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        this.renderSegs(segs);\r\n        this.segs = segs;\r\n    };\r\n    BusinessHourRenderer.prototype.renderSegs = function (segs) {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.renderSegs('businessHours', segs, {\r\n                getClasses: function (seg) {\r\n                    return ['fc-nonbusiness', 'fc-bgevent'];\r\n                }\r\n            });\r\n        }\r\n    };\r\n    BusinessHourRenderer.prototype.unrender = function () {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.unrender('businessHours');\r\n        }\r\n        this.segs = null;\r\n    };\r\n    BusinessHourRenderer.prototype.getSegs = function () {\r\n        return this.segs || [];\r\n    };\r\n    return BusinessHourRenderer;\r\n}());\r\nexports.default = BusinessHourRenderer;\r\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar FillRenderer = /** @class */ (function () {\r\n    function FillRenderer(component) {\r\n        this.fillSegTag = 'div';\r\n        this.component = component;\r\n        this.elsByFill = {};\r\n    }\r\n    FillRenderer.prototype.renderFootprint = function (type, componentFootprint, props) {\r\n        this.renderSegs(type, this.component.componentFootprintToSegs(componentFootprint), props);\r\n    };\r\n    FillRenderer.prototype.renderSegs = function (type, segs, props) {\r\n        var els;\r\n        segs = this.buildSegEls(type, segs, props); // assignes `.el` to each seg. returns successfully rendered segs\r\n        els = this.attachSegEls(type, segs);\r\n        if (els) {\r\n            this.reportEls(type, els);\r\n        }\r\n        return segs;\r\n    };\r\n    // Unrenders a specific type of fill that is currently rendered on the grid\r\n    FillRenderer.prototype.unrender = function (type) {\r\n        var el = this.elsByFill[type];\r\n        if (el) {\r\n            el.remove();\r\n            delete this.elsByFill[type];\r\n        }\r\n    };\r\n    // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\r\n    // Only returns segments that successfully rendered.\r\n    FillRenderer.prototype.buildSegEls = function (type, segs, props) {\r\n        var _this = this;\r\n        var html = '';\r\n        var renderedSegs = [];\r\n        var i;\r\n        if (segs.length) {\r\n            // build a large concatenation of segment HTML\r\n            for (i = 0; i < segs.length; i++) {\r\n                html += this.buildSegHtml(type, segs[i], props);\r\n            }\r\n            // Grab individual elements from the combined HTML string. Use each as the default rendering.\r\n            // Then, compute the 'el' for each segment.\r\n            $(html).each(function (i, node) {\r\n                var seg = segs[i];\r\n                var el = $(node);\r\n                // allow custom filter methods per-type\r\n                if (props.filterEl) {\r\n                    el = props.filterEl(seg, el);\r\n                }\r\n                if (el) { // custom filters did not cancel the render\r\n                    el = $(el); // allow custom filter to return raw DOM node\r\n                    // correct element type? (would be bad if a non-TD were inserted into a table for example)\r\n                    if (el.is(_this.fillSegTag)) {\r\n                        seg.el = el;\r\n                        renderedSegs.push(seg);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n        return renderedSegs;\r\n    };\r\n    // Builds the HTML needed for one fill segment. Generic enough to work with different types.\r\n    FillRenderer.prototype.buildSegHtml = function (type, seg, props) {\r\n        // custom hooks per-type\r\n        var classes = props.getClasses ? props.getClasses(seg) : [];\r\n        var css = util_1.cssToStr(props.getCss ? props.getCss(seg) : {});\r\n        return '<' + this.fillSegTag +\r\n            (classes.length ? ' class=\"' + classes.join(' ') + '\"' : '') +\r\n            (css ? ' style=\"' + css + '\"' : '') +\r\n            '></' + this.fillSegTag + '>';\r\n    };\r\n    // Should return wrapping DOM structure\r\n    FillRenderer.prototype.attachSegEls = function (type, segs) {\r\n        // subclasses must implement\r\n    };\r\n    FillRenderer.prototype.reportEls = function (type, nodes) {\r\n        if (this.elsByFill[type]) {\r\n            this.elsByFill[type] = this.elsByFill[type].add(nodes);\r\n        }\r\n        else {\r\n            this.elsByFill[type] = $(nodes);\r\n        }\r\n    };\r\n    return FillRenderer;\r\n}());\r\nexports.default = FillRenderer;\r\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar HelperRenderer = /** @class */ (function () {\r\n    function HelperRenderer(component, eventRenderer) {\r\n        this.view = component._getView();\r\n        this.component = component;\r\n        this.eventRenderer = eventRenderer;\r\n    }\r\n    HelperRenderer.prototype.renderComponentFootprint = function (componentFootprint) {\r\n        this.renderEventFootprints([\r\n            this.fabricateEventFootprint(componentFootprint)\r\n        ]);\r\n    };\r\n    HelperRenderer.prototype.renderEventDraggingFootprints = function (eventFootprints, sourceSeg, isTouch) {\r\n        this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-dragging', isTouch ? null : this.view.opt('dragOpacity'));\r\n    };\r\n    HelperRenderer.prototype.renderEventResizingFootprints = function (eventFootprints, sourceSeg, isTouch) {\r\n        this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-resizing');\r\n    };\r\n    HelperRenderer.prototype.renderEventFootprints = function (eventFootprints, sourceSeg, extraClassNames, opacity) {\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        var classNames = 'fc-helper ' + (extraClassNames || '');\r\n        var i;\r\n        // assigns each seg's el and returns a subset of segs that were rendered\r\n        segs = this.eventRenderer.renderFgSegEls(segs);\r\n        for (i = 0; i < segs.length; i++) {\r\n            segs[i].el.addClass(classNames);\r\n        }\r\n        if (opacity != null) {\r\n            for (i = 0; i < segs.length; i++) {\r\n                segs[i].el.css('opacity', opacity);\r\n            }\r\n        }\r\n        this.helperEls = this.renderSegs(segs, sourceSeg);\r\n    };\r\n    /*\r\n    Must return all mock event elements\r\n    */\r\n    HelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n        // Subclasses must implement\r\n    };\r\n    HelperRenderer.prototype.unrender = function () {\r\n        if (this.helperEls) {\r\n            this.helperEls.remove();\r\n            this.helperEls = null;\r\n        }\r\n    };\r\n    HelperRenderer.prototype.fabricateEventFootprint = function (componentFootprint) {\r\n        var calendar = this.view.calendar;\r\n        var eventDateProfile = calendar.footprintToDateProfile(componentFootprint);\r\n        var dummyEvent = new SingleEventDef_1.default(new EventSource_1.default(calendar));\r\n        var dummyInstance;\r\n        dummyEvent.dateProfile = eventDateProfile;\r\n        dummyInstance = dummyEvent.buildInstance();\r\n        return new EventFootprint_1.default(componentFootprint, dummyEvent, dummyInstance);\r\n    };\r\n    return HelperRenderer;\r\n}());\r\nexports.default = HelperRenderer;\r\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventPointing = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventPointing, _super);\r\n    function EventPointing() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /*\r\n    component must implement:\r\n      - publiclyTrigger\r\n    */\r\n    EventPointing.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        component.bindSegHandlerToEl(el, 'click', this.handleClick.bind(this));\r\n        component.bindSegHandlerToEl(el, 'mouseenter', this.handleMouseover.bind(this));\r\n        component.bindSegHandlerToEl(el, 'mouseleave', this.handleMouseout.bind(this));\r\n    };\r\n    EventPointing.prototype.handleClick = function (seg, ev) {\r\n        var res = this.component.publiclyTrigger('eventClick', {\r\n            context: seg.el[0],\r\n            args: [seg.footprint.getEventLegacy(), ev, this.view]\r\n        });\r\n        if (res === false) {\r\n            ev.preventDefault();\r\n        }\r\n    };\r\n    // Updates internal state and triggers handlers for when an event element is moused over\r\n    EventPointing.prototype.handleMouseover = function (seg, ev) {\r\n        if (!GlobalEmitter_1.default.get().shouldIgnoreMouse() &&\r\n            !this.mousedOverSeg) {\r\n            this.mousedOverSeg = seg;\r\n            // TODO: move to EventSelecting's responsibility\r\n            if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\r\n                seg.el.addClass('fc-allow-mouse-resize');\r\n            }\r\n            this.component.publiclyTrigger('eventMouseover', {\r\n                context: seg.el[0],\r\n                args: [seg.footprint.getEventLegacy(), ev, this.view]\r\n            });\r\n        }\r\n    };\r\n    // Updates internal state and triggers handlers for when an event element is moused out.\r\n    // Can be given no arguments, in which case it will mouseout the segment that was previously moused over.\r\n    EventPointing.prototype.handleMouseout = function (seg, ev) {\r\n        if (this.mousedOverSeg) {\r\n            this.mousedOverSeg = null;\r\n            // TODO: move to EventSelecting's responsibility\r\n            if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\r\n                seg.el.removeClass('fc-allow-mouse-resize');\r\n            }\r\n            this.component.publiclyTrigger('eventMouseout', {\r\n                context: seg.el[0],\r\n                args: [\r\n                    seg.footprint.getEventLegacy(),\r\n                    ev || {},\r\n                    this.view\r\n                ]\r\n            });\r\n        }\r\n    };\r\n    EventPointing.prototype.end = function () {\r\n        if (this.mousedOverSeg) {\r\n            this.handleMouseout(this.mousedOverSeg);\r\n        }\r\n    };\r\n    return EventPointing;\r\n}(Interaction_1.default));\r\nexports.default = EventPointing;\r\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar DateClicking_1 = __webpack_require__(237);\r\nvar DateSelecting_1 = __webpack_require__(236);\r\nvar EventPointing_1 = __webpack_require__(64);\r\nvar EventDragging_1 = __webpack_require__(235);\r\nvar EventResizing_1 = __webpack_require__(234);\r\nvar ExternalDropping_1 = __webpack_require__(233);\r\nvar StandardInteractionsMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(StandardInteractionsMixin, _super);\r\n    function StandardInteractionsMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return StandardInteractionsMixin;\r\n}(Mixin_1.default));\r\nexports.default = StandardInteractionsMixin;\r\nStandardInteractionsMixin.prototype.dateClickingClass = DateClicking_1.default;\r\nStandardInteractionsMixin.prototype.dateSelectingClass = DateSelecting_1.default;\r\nStandardInteractionsMixin.prototype.eventPointingClass = EventPointing_1.default;\r\nStandardInteractionsMixin.prototype.eventDraggingClass = EventDragging_1.default;\r\nStandardInteractionsMixin.prototype.eventResizingClass = EventResizing_1.default;\r\nStandardInteractionsMixin.prototype.externalDroppingClass = ExternalDropping_1.default;\r\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar CoordCache_1 = __webpack_require__(58);\r\nvar Popover_1 = __webpack_require__(227);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nvar DayGridEventRenderer_1 = __webpack_require__(243);\r\nvar DayGridHelperRenderer_1 = __webpack_require__(244);\r\nvar DayGridFillRenderer_1 = __webpack_require__(245);\r\n/* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar DayGrid = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGrid, _super);\r\n    function DayGrid(view) {\r\n        var _this = _super.call(this, view) || this;\r\n        _this.cellWeekNumbersVisible = false; // display week numbers in day cell?\r\n        _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid\r\n        // isRigid determines whether the individual rows should ignore the contents and be a constant height.\r\n        // Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient.\r\n        _this.isRigid = false;\r\n        _this.hasAllDayBusinessHours = true;\r\n        return _this;\r\n    }\r\n    // Slices up the given span (unzoned start/end with other misc data) into an array of segments\r\n    DayGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n        var segs = this.sliceRangeByRow(componentFootprint.unzonedRange);\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            if (this.isRTL) {\r\n                seg.leftCol = this.daysPerRow - 1 - seg.lastRowDayIndex;\r\n                seg.rightCol = this.daysPerRow - 1 - seg.firstRowDayIndex;\r\n            }\r\n            else {\r\n                seg.leftCol = seg.firstRowDayIndex;\r\n                seg.rightCol = seg.lastRowDayIndex;\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Date Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.renderDates = function (dateProfile) {\r\n        this.dateProfile = dateProfile;\r\n        this.updateDayTable();\r\n        this.renderGrid();\r\n    };\r\n    DayGrid.prototype.unrenderDates = function () {\r\n        this.removeSegPopover();\r\n    };\r\n    // Renders the rows and columns into the component's `this.el`, which should already be assigned.\r\n    DayGrid.prototype.renderGrid = function () {\r\n        var view = this.view;\r\n        var rowCnt = this.rowCnt;\r\n        var colCnt = this.colCnt;\r\n        var html = '';\r\n        var row;\r\n        var col;\r\n        if (this.headContainerEl) {\r\n            this.headContainerEl.html(this.renderHeadHtml());\r\n        }\r\n        for (row = 0; row < rowCnt; row++) {\r\n            html += this.renderDayRowHtml(row, this.isRigid);\r\n        }\r\n        this.el.html(html);\r\n        this.rowEls = this.el.find('.fc-row');\r\n        this.cellEls = this.el.find('.fc-day, .fc-disabled-day');\r\n        this.rowCoordCache = new CoordCache_1.default({\r\n            els: this.rowEls,\r\n            isVertical: true\r\n        });\r\n        this.colCoordCache = new CoordCache_1.default({\r\n            els: this.cellEls.slice(0, this.colCnt),\r\n            isHorizontal: true\r\n        });\r\n        // trigger dayRender with each cell's element\r\n        for (row = 0; row < rowCnt; row++) {\r\n            for (col = 0; col < colCnt; col++) {\r\n                this.publiclyTrigger('dayRender', {\r\n                    context: view,\r\n                    args: [\r\n                        this.getCellDate(row, col),\r\n                        this.getCellEl(row, col),\r\n                        view\r\n                    ]\r\n                });\r\n            }\r\n        }\r\n    };\r\n    // Generates the HTML for a single row, which is a div that wraps a table.\r\n    // `row` is the row number.\r\n    DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {\r\n        var theme = this.view.calendar.theme;\r\n        var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];\r\n        if (isRigid) {\r\n            classes.push('fc-rigid');\r\n        }\r\n        return '' +\r\n            '<div class=\"' + classes.join(' ') + '\">' +\r\n            '<div class=\"fc-bg\">' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            this.renderBgTrHtml(row) +\r\n            '</table>' +\r\n            '</div>' +\r\n            '<div class=\"fc-content-skeleton\">' +\r\n            '<table>' +\r\n            (this.getIsNumbersVisible() ?\r\n                '<thead>' +\r\n                    this.renderNumberTrHtml(row) +\r\n                    '</thead>' :\r\n                '') +\r\n            '</table>' +\r\n            '</div>' +\r\n            '</div>';\r\n    };\r\n    DayGrid.prototype.getIsNumbersVisible = function () {\r\n        return this.getIsDayNumbersVisible() || this.cellWeekNumbersVisible;\r\n    };\r\n    DayGrid.prototype.getIsDayNumbersVisible = function () {\r\n        return this.rowCnt > 1;\r\n    };\r\n    /* Grid Number Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.renderNumberTrHtml = function (row) {\r\n        return '' +\r\n            '<tr>' +\r\n            (this.isRTL ? '' : this.renderNumberIntroHtml(row)) +\r\n            this.renderNumberCellsHtml(row) +\r\n            (this.isRTL ? this.renderNumberIntroHtml(row) : '') +\r\n            '</tr>';\r\n    };\r\n    DayGrid.prototype.renderNumberIntroHtml = function (row) {\r\n        return this.renderIntroHtml();\r\n    };\r\n    DayGrid.prototype.renderNumberCellsHtml = function (row) {\r\n        var htmls = [];\r\n        var col;\r\n        var date;\r\n        for (col = 0; col < this.colCnt; col++) {\r\n            date = this.getCellDate(row, col);\r\n            htmls.push(this.renderNumberCellHtml(date));\r\n        }\r\n        return htmls.join('');\r\n    };\r\n    // Generates the HTML for the <td>s of the \"number\" row in the DayGrid's content skeleton.\r\n    // The number row will only exist if either day numbers or week numbers are turned on.\r\n    DayGrid.prototype.renderNumberCellHtml = function (date) {\r\n        var view = this.view;\r\n        var html = '';\r\n        var isDateValid = this.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n        var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;\r\n        var classes;\r\n        var weekCalcFirstDoW;\r\n        if (!isDayNumberVisible && !this.cellWeekNumbersVisible) {\r\n            // no numbers in day cell (week number must be along the side)\r\n            return '<td></td>'; //  will create an empty space above events :(\r\n        }\r\n        classes = this.getDayClasses(date);\r\n        classes.unshift('fc-day-top');\r\n        if (this.cellWeekNumbersVisible) {\r\n            // To determine the day of week number change under ISO, we cannot\r\n            // rely on moment.js methods such as firstDayOfWeek() or weekday(),\r\n            // because they rely on the locale's dow (possibly overridden by\r\n            // our firstDay option), which may not be Monday. We cannot change\r\n            // dow, because that would affect the calendar start day as well.\r\n            if (date._locale._fullCalendar_weekCalc === 'ISO') {\r\n                weekCalcFirstDoW = 1; // Monday by ISO 8601 definition\r\n            }\r\n            else {\r\n                weekCalcFirstDoW = date._locale.firstDayOfWeek();\r\n            }\r\n        }\r\n        html += '<td class=\"' + classes.join(' ') + '\"' +\r\n            (isDateValid ?\r\n                ' data-date=\"' + date.format() + '\"' :\r\n                '') +\r\n            '>';\r\n        if (this.cellWeekNumbersVisible && (date.day() === weekCalcFirstDoW)) {\r\n            html += view.buildGotoAnchorHtml({ date: date, type: 'week' }, { 'class': 'fc-week-number' }, date.format('w') // inner HTML\r\n            );\r\n        }\r\n        if (isDayNumberVisible) {\r\n            html += view.buildGotoAnchorHtml(date, { 'class': 'fc-day-number' }, date.format('D') // inner HTML\r\n            );\r\n        }\r\n        html += '</td>';\r\n        return html;\r\n    };\r\n    /* Hit System\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.prepareHits = function () {\r\n        this.colCoordCache.build();\r\n        this.rowCoordCache.build();\r\n        this.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack\r\n    };\r\n    DayGrid.prototype.releaseHits = function () {\r\n        this.colCoordCache.clear();\r\n        this.rowCoordCache.clear();\r\n    };\r\n    DayGrid.prototype.queryHit = function (leftOffset, topOffset) {\r\n        if (this.colCoordCache.isLeftInBounds(leftOffset) && this.rowCoordCache.isTopInBounds(topOffset)) {\r\n            var col = this.colCoordCache.getHorizontalIndex(leftOffset);\r\n            var row = this.rowCoordCache.getVerticalIndex(topOffset);\r\n            if (row != null && col != null) {\r\n                return this.getCellHit(row, col);\r\n            }\r\n        }\r\n    };\r\n    DayGrid.prototype.getHitFootprint = function (hit) {\r\n        var range = this.getCellRange(hit.row, hit.col);\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(range.start, range.end), true // all-day?\r\n        );\r\n    };\r\n    DayGrid.prototype.getHitEl = function (hit) {\r\n        return this.getCellEl(hit.row, hit.col);\r\n    };\r\n    /* Cell System\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // FYI: the first column is the leftmost column, regardless of date\r\n    DayGrid.prototype.getCellHit = function (row, col) {\r\n        return {\r\n            row: row,\r\n            col: col,\r\n            component: this,\r\n            left: this.colCoordCache.getLeftOffset(col),\r\n            right: this.colCoordCache.getRightOffset(col),\r\n            top: this.rowCoordCache.getTopOffset(row),\r\n            bottom: this.rowCoordCache.getBottomOffset(row)\r\n        };\r\n    };\r\n    DayGrid.prototype.getCellEl = function (row, col) {\r\n        return this.cellEls.eq(row * this.colCnt + col);\r\n    };\r\n    /* Event Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Unrenders all events currently rendered on the grid\r\n    DayGrid.prototype.executeEventUnrender = function () {\r\n        this.removeSegPopover(); // removes the \"more..\" events popover\r\n        _super.prototype.executeEventUnrender.call(this);\r\n    };\r\n    // Retrieves all rendered segment objects currently rendered on the grid\r\n    DayGrid.prototype.getOwnEventSegs = function () {\r\n        // append the segments from the \"more...\" popover\r\n        return _super.prototype.getOwnEventSegs.call(this).concat(this.popoverSegs || []);\r\n    };\r\n    /* Event Drag Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event or external element being dragged.\r\n    // `eventLocation` has zoned start and end (optional)\r\n    DayGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            this.renderHighlight(eventFootprints[i].componentFootprint);\r\n        }\r\n        // render drags from OTHER components as helpers\r\n        if (eventFootprints.length && seg && seg.component !== this) {\r\n            this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n            return true; // signal helpers rendered\r\n        }\r\n    };\r\n    // Unrenders any visual indication of a hovering event\r\n    DayGrid.prototype.unrenderDrag = function () {\r\n        this.unrenderHighlight();\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* Event Resize Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event being resized\r\n    DayGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            this.renderHighlight(eventFootprints[i].componentFootprint);\r\n        }\r\n        this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n    };\r\n    // Unrenders a visual indication of an event being resized\r\n    DayGrid.prototype.unrenderEventResize = function () {\r\n        this.unrenderHighlight();\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* More+ Link Popover\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.removeSegPopover = function () {\r\n        if (this.segPopover) {\r\n            this.segPopover.hide(); // in handler, will call segPopover's removeElement\r\n        }\r\n    };\r\n    // Limits the number of \"levels\" (vertically stacking layers of events) for each row of the grid.\r\n    // `levelLimit` can be false (don't limit), a number, or true (should be computed).\r\n    DayGrid.prototype.limitRows = function (levelLimit) {\r\n        var rowStructs = this.eventRenderer.rowStructs || [];\r\n        var row; // row #\r\n        var rowLevelLimit;\r\n        for (row = 0; row < rowStructs.length; row++) {\r\n            this.unlimitRow(row);\r\n            if (!levelLimit) {\r\n                rowLevelLimit = false;\r\n            }\r\n            else if (typeof levelLimit === 'number') {\r\n                rowLevelLimit = levelLimit;\r\n            }\r\n            else {\r\n                rowLevelLimit = this.computeRowLevelLimit(row);\r\n            }\r\n            if (rowLevelLimit !== false) {\r\n                this.limitRow(row, rowLevelLimit);\r\n            }\r\n        }\r\n    };\r\n    // Computes the number of levels a row will accomodate without going outside its bounds.\r\n    // Assumes the row is \"rigid\" (maintains a constant height regardless of what is inside).\r\n    // `row` is the row number.\r\n    DayGrid.prototype.computeRowLevelLimit = function (row) {\r\n        var rowEl = this.rowEls.eq(row); // the containing \"fake\" row div\r\n        var rowHeight = rowEl.height(); // TODO: cache somehow?\r\n        var trEls = this.eventRenderer.rowStructs[row].tbodyEl.children();\r\n        var i;\r\n        var trEl;\r\n        var trHeight;\r\n        function iterInnerHeights(i, childNode) {\r\n            trHeight = Math.max(trHeight, $(childNode).outerHeight());\r\n        }\r\n        // Reveal one level <tr> at a time and stop when we find one out of bounds\r\n        for (i = 0; i < trEls.length; i++) {\r\n            trEl = trEls.eq(i).removeClass('fc-limited'); // reset to original state (reveal)\r\n            // with rowspans>1 and IE8, trEl.outerHeight() would return the height of the largest cell,\r\n            // so instead, find the tallest inner content element.\r\n            trHeight = 0;\r\n            trEl.find('> td > :first-child').each(iterInnerHeights);\r\n            if (trEl.position().top + trHeight > rowHeight) {\r\n                return i;\r\n            }\r\n        }\r\n        return false; // should not limit at all\r\n    };\r\n    // Limits the given grid row to the maximum number of levels and injects \"more\" links if necessary.\r\n    // `row` is the row number.\r\n    // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.\r\n    DayGrid.prototype.limitRow = function (row, levelLimit) {\r\n        var _this = this;\r\n        var rowStruct = this.eventRenderer.rowStructs[row];\r\n        var moreNodes = []; // array of \"more\" <a> links and <td> DOM nodes\r\n        var col = 0; // col #, left-to-right (not chronologically)\r\n        var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right\r\n        var cellMatrix; // a matrix (by level, then column) of all <td> jQuery elements in the row\r\n        var limitedNodes; // array of temporarily hidden level <tr> and segment <td> DOM nodes\r\n        var i;\r\n        var seg;\r\n        var segsBelow; // array of segment objects below `seg` in the current `col`\r\n        var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies\r\n        var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)\r\n        var td;\r\n        var rowspan;\r\n        var segMoreNodes; // array of \"more\" <td> cells that will stand-in for the current seg's cell\r\n        var j;\r\n        var moreTd;\r\n        var moreWrap;\r\n        var moreLink;\r\n        // Iterates through empty level cells and places \"more\" links inside if need be\r\n        var emptyCellsUntil = function (endCol) {\r\n            while (col < endCol) {\r\n                segsBelow = _this.getCellSegs(row, col, levelLimit);\r\n                if (segsBelow.length) {\r\n                    td = cellMatrix[levelLimit - 1][col];\r\n                    moreLink = _this.renderMoreLink(row, col, segsBelow);\r\n                    moreWrap = $('<div>').append(moreLink);\r\n                    td.append(moreWrap);\r\n                    moreNodes.push(moreWrap[0]);\r\n                }\r\n                col++;\r\n            }\r\n        };\r\n        if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?\r\n            levelSegs = rowStruct.segLevels[levelLimit - 1];\r\n            cellMatrix = rowStruct.cellMatrix;\r\n            limitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level <tr> elements past the limit\r\n                .addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array\r\n            // iterate though segments in the last allowable level\r\n            for (i = 0; i < levelSegs.length; i++) {\r\n                seg = levelSegs[i];\r\n                emptyCellsUntil(seg.leftCol); // process empty cells before the segment\r\n                // determine *all* segments below `seg` that occupy the same columns\r\n                colSegsBelow = [];\r\n                totalSegsBelow = 0;\r\n                while (col <= seg.rightCol) {\r\n                    segsBelow = this.getCellSegs(row, col, levelLimit);\r\n                    colSegsBelow.push(segsBelow);\r\n                    totalSegsBelow += segsBelow.length;\r\n                    col++;\r\n                }\r\n                if (totalSegsBelow) { // do we need to replace this segment with one or many \"more\" links?\r\n                    td = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell\r\n                    rowspan = td.attr('rowspan') || 1;\r\n                    segMoreNodes = [];\r\n                    // make a replacement <td> for each column the segment occupies. will be one for each colspan\r\n                    for (j = 0; j < colSegsBelow.length; j++) {\r\n                        moreTd = $('<td class=\"fc-more-cell\">').attr('rowspan', rowspan);\r\n                        segsBelow = colSegsBelow[j];\r\n                        moreLink = this.renderMoreLink(row, seg.leftCol + j, [seg].concat(segsBelow) // count seg as hidden too\r\n                        );\r\n                        moreWrap = $('<div>').append(moreLink);\r\n                        moreTd.append(moreWrap);\r\n                        segMoreNodes.push(moreTd[0]);\r\n                        moreNodes.push(moreTd[0]);\r\n                    }\r\n                    td.addClass('fc-limited').after($(segMoreNodes)); // hide original <td> and inject replacements\r\n                    limitedNodes.push(td[0]);\r\n                }\r\n            }\r\n            emptyCellsUntil(this.colCnt); // finish off the level\r\n            rowStruct.moreEls = $(moreNodes); // for easy undoing later\r\n            rowStruct.limitedEls = $(limitedNodes); // for easy undoing later\r\n        }\r\n    };\r\n    // Reveals all levels and removes all \"more\"-related elements for a grid's row.\r\n    // `row` is a row number.\r\n    DayGrid.prototype.unlimitRow = function (row) {\r\n        var rowStruct = this.eventRenderer.rowStructs[row];\r\n        if (rowStruct.moreEls) {\r\n            rowStruct.moreEls.remove();\r\n            rowStruct.moreEls = null;\r\n        }\r\n        if (rowStruct.limitedEls) {\r\n            rowStruct.limitedEls.removeClass('fc-limited');\r\n            rowStruct.limitedEls = null;\r\n        }\r\n    };\r\n    // Renders an <a> element that represents hidden event element for a cell.\r\n    // Responsible for attaching click handler as well.\r\n    DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {\r\n        var _this = this;\r\n        var view = this.view;\r\n        return $('<a class=\"fc-more\">')\r\n            .text(this.getMoreLinkText(hiddenSegs.length))\r\n            .on('click', function (ev) {\r\n            var clickOption = _this.opt('eventLimitClick');\r\n            var date = _this.getCellDate(row, col);\r\n            var moreEl = $(ev.currentTarget);\r\n            var dayEl = _this.getCellEl(row, col);\r\n            var allSegs = _this.getCellSegs(row, col);\r\n            // rescope the segments to be within the cell's date\r\n            var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);\r\n            var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);\r\n            if (typeof clickOption === 'function') {\r\n                // the returned value can be an atomic option\r\n                clickOption = _this.publiclyTrigger('eventLimitClick', {\r\n                    context: view,\r\n                    args: [\r\n                        {\r\n                            date: date.clone(),\r\n                            dayEl: dayEl,\r\n                            moreEl: moreEl,\r\n                            segs: reslicedAllSegs,\r\n                            hiddenSegs: reslicedHiddenSegs\r\n                        },\r\n                        ev,\r\n                        view\r\n                    ]\r\n                });\r\n            }\r\n            if (clickOption === 'popover') {\r\n                _this.showSegPopover(row, col, moreEl, reslicedAllSegs);\r\n            }\r\n            else if (typeof clickOption === 'string') { // a view name\r\n                view.calendar.zoomTo(date, clickOption);\r\n            }\r\n        });\r\n    };\r\n    // Reveals the popover that displays all events within a cell\r\n    DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {\r\n        var _this = this;\r\n        var view = this.view;\r\n        var moreWrap = moreLink.parent(); // the <div> wrapper around the <a>\r\n        var topEl; // the element we want to match the top coordinate of\r\n        var options;\r\n        if (this.rowCnt === 1) {\r\n            topEl = view.el; // will cause the popover to cover any sort of header\r\n        }\r\n        else {\r\n            topEl = this.rowEls.eq(row); // will align with top of row\r\n        }\r\n        options = {\r\n            className: 'fc-more-popover ' + view.calendar.theme.getClass('popover'),\r\n            content: this.renderSegPopoverContent(row, col, segs),\r\n            parentEl: view.el,\r\n            top: topEl.offset().top,\r\n            autoHide: true,\r\n            viewportConstrain: this.opt('popoverViewportConstrain'),\r\n            hide: function () {\r\n                // kill everything when the popover is hidden\r\n                // notify events to be removed\r\n                if (_this.popoverSegs) {\r\n                    _this.triggerBeforeEventSegsDestroyed(_this.popoverSegs);\r\n                }\r\n                _this.segPopover.removeElement();\r\n                _this.segPopover = null;\r\n                _this.popoverSegs = null;\r\n            }\r\n        };\r\n        // Determine horizontal coordinate.\r\n        // We use the moreWrap instead of the <td> to avoid border confusion.\r\n        if (this.isRTL) {\r\n            options.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border\r\n        }\r\n        else {\r\n            options.left = moreWrap.offset().left - 1; // -1 to be over cell border\r\n        }\r\n        this.segPopover = new Popover_1.default(options);\r\n        this.segPopover.show();\r\n        // the popover doesn't live within the grid's container element, and thus won't get the event\r\n        // delegated-handlers for free. attach event-related handlers to the popover.\r\n        this.bindAllSegHandlersToEl(this.segPopover.el);\r\n        this.triggerAfterEventSegsRendered(segs);\r\n    };\r\n    // Builds the inner DOM contents of the segment popover\r\n    DayGrid.prototype.renderSegPopoverContent = function (row, col, segs) {\r\n        var view = this.view;\r\n        var theme = view.calendar.theme;\r\n        var title = this.getCellDate(row, col).format(this.opt('dayPopoverFormat'));\r\n        var content = $('<div class=\"fc-header ' + theme.getClass('popoverHeader') + '\">' +\r\n            '<span class=\"fc-close ' + theme.getIconClass('close') + '\"></span>' +\r\n            '<span class=\"fc-title\">' +\r\n            util_1.htmlEscape(title) +\r\n            '</span>' +\r\n            '<div class=\"fc-clear\"></div>' +\r\n            '</div>' +\r\n            '<div class=\"fc-body ' + theme.getClass('popoverContent') + '\">' +\r\n            '<div class=\"fc-event-container\"></div>' +\r\n            '</div>');\r\n        var segContainer = content.find('.fc-event-container');\r\n        var i;\r\n        // render each seg's `el` and only return the visible segs\r\n        segs = this.eventRenderer.renderFgSegEls(segs, true); // disableResizing=true\r\n        this.popoverSegs = segs;\r\n        for (i = 0; i < segs.length; i++) {\r\n            // because segments in the popover are not part of a grid coordinate system, provide a hint to any\r\n            // grids that want to do drag-n-drop about which cell it came from\r\n            this.hitsNeeded();\r\n            segs[i].hit = this.getCellHit(row, col);\r\n            this.hitsNotNeeded();\r\n            segContainer.append(segs[i].el);\r\n        }\r\n        return content;\r\n    };\r\n    // Given the events within an array of segment objects, reslice them to be in a single day\r\n    DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {\r\n        var dayStart = dayDate.clone();\r\n        var dayEnd = dayStart.clone().add(1, 'days');\r\n        var dayRange = new UnzonedRange_1.default(dayStart, dayEnd);\r\n        var newSegs = [];\r\n        var i;\r\n        var seg;\r\n        var slicedRange;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            slicedRange = seg.footprint.componentFootprint.unzonedRange.intersect(dayRange);\r\n            if (slicedRange) {\r\n                newSegs.push($.extend({}, seg, {\r\n                    footprint: new EventFootprint_1.default(new ComponentFootprint_1.default(slicedRange, seg.footprint.componentFootprint.isAllDay), seg.footprint.eventDef, seg.footprint.eventInstance),\r\n                    isStart: seg.isStart && slicedRange.isStart,\r\n                    isEnd: seg.isEnd && slicedRange.isEnd\r\n                }));\r\n            }\r\n        }\r\n        // force an order because eventsToSegs doesn't guarantee one\r\n        // TODO: research if still needed\r\n        this.eventRenderer.sortEventSegs(newSegs);\r\n        return newSegs;\r\n    };\r\n    // Generates the text that should be inside a \"more\" link, given the number of events it represents\r\n    DayGrid.prototype.getMoreLinkText = function (num) {\r\n        var opt = this.opt('eventLimitText');\r\n        if (typeof opt === 'function') {\r\n            return opt(num);\r\n        }\r\n        else {\r\n            return '+' + num + ' ' + opt;\r\n        }\r\n    };\r\n    // Returns segments within a given cell.\r\n    // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.\r\n    DayGrid.prototype.getCellSegs = function (row, col, startLevel) {\r\n        var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;\r\n        var level = startLevel || 0;\r\n        var segs = [];\r\n        var seg;\r\n        while (level < segMatrix.length) {\r\n            seg = segMatrix[level][col];\r\n            if (seg) {\r\n                segs.push(seg);\r\n            }\r\n            level++;\r\n        }\r\n        return segs;\r\n    };\r\n    return DayGrid;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = DayGrid;\r\nDayGrid.prototype.eventRendererClass = DayGridEventRenderer_1.default;\r\nDayGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;\r\nDayGrid.prototype.helperRendererClass = DayGridHelperRenderer_1.default;\r\nDayGrid.prototype.fillRendererClass = DayGridFillRenderer_1.default;\r\nStandardInteractionsMixin_1.default.mixInto(DayGrid);\r\nDayTableMixin_1.default.mixInto(DayGrid);\r\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar View_1 = __webpack_require__(43);\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nvar DayGrid_1 = __webpack_require__(66);\r\n/* An abstract class for the \"basic\" views, as well as month view. Renders one or more rows of day cells.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.\r\n// It is responsible for managing width/height.\r\nvar BasicView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BasicView, _super);\r\n    function BasicView(calendar, viewSpec) {\r\n        var _this = _super.call(this, calendar, viewSpec) || this;\r\n        _this.dayGrid = _this.instantiateDayGrid();\r\n        _this.dayGrid.isRigid = _this.hasRigidRows();\r\n        if (_this.opt('weekNumbers')) {\r\n            if (_this.opt('weekNumbersWithinDays')) {\r\n                _this.dayGrid.cellWeekNumbersVisible = true;\r\n                _this.dayGrid.colWeekNumbersVisible = false;\r\n            }\r\n            else {\r\n                _this.dayGrid.cellWeekNumbersVisible = false;\r\n                _this.dayGrid.colWeekNumbersVisible = true;\r\n            }\r\n        }\r\n        _this.addChild(_this.dayGrid);\r\n        _this.scroller = new Scroller_1.default({\r\n            overflowX: 'hidden',\r\n            overflowY: 'auto'\r\n        });\r\n        return _this;\r\n    }\r\n    // Generates the DayGrid object this view needs. Draws from this.dayGridClass\r\n    BasicView.prototype.instantiateDayGrid = function () {\r\n        // generate a subclass on the fly with BasicView-specific behavior\r\n        // TODO: cache this subclass\r\n        var subclass = makeDayGridSubclass(this.dayGridClass);\r\n        return new subclass(this);\r\n    };\r\n    BasicView.prototype.executeDateRender = function (dateProfile) {\r\n        this.dayGrid.breakOnWeeks = /year|month|week/.test(dateProfile.currentRangeUnit);\r\n        _super.prototype.executeDateRender.call(this, dateProfile);\r\n    };\r\n    BasicView.prototype.renderSkeleton = function () {\r\n        var dayGridContainerEl;\r\n        var dayGridEl;\r\n        this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml());\r\n        this.scroller.render();\r\n        dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container');\r\n        dayGridEl = $('<div class=\"fc-day-grid\">').appendTo(dayGridContainerEl);\r\n        this.el.find('.fc-body > tr > td').append(dayGridContainerEl);\r\n        this.dayGrid.headContainerEl = this.el.find('.fc-head-container');\r\n        this.dayGrid.setElement(dayGridEl);\r\n    };\r\n    BasicView.prototype.unrenderSkeleton = function () {\r\n        this.dayGrid.removeElement();\r\n        this.scroller.destroy();\r\n    };\r\n    // Builds the HTML skeleton for the view.\r\n    // The day-grid component will render inside of a container defined by this HTML.\r\n    BasicView.prototype.renderSkeletonHtml = function () {\r\n        var theme = this.calendar.theme;\r\n        return '' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            (this.opt('columnHeader') ?\r\n                '<thead class=\"fc-head\">' +\r\n                    '<tr>' +\r\n                    '<td class=\"fc-head-container ' + theme.getClass('widgetHeader') + '\">&nbsp;</td>' +\r\n                    '</tr>' +\r\n                    '</thead>' :\r\n                '') +\r\n            '<tbody class=\"fc-body\">' +\r\n            '<tr>' +\r\n            '<td class=\"' + theme.getClass('widgetContent') + '\"></td>' +\r\n            '</tr>' +\r\n            '</tbody>' +\r\n            '</table>';\r\n    };\r\n    // Generates an HTML attribute string for setting the width of the week number column, if it is known\r\n    BasicView.prototype.weekNumberStyleAttr = function () {\r\n        if (this.weekNumberWidth != null) {\r\n            return 'style=\"width:' + this.weekNumberWidth + 'px\"';\r\n        }\r\n        return '';\r\n    };\r\n    // Determines whether each row should have a constant height\r\n    BasicView.prototype.hasRigidRows = function () {\r\n        var eventLimit = this.opt('eventLimit');\r\n        return eventLimit && typeof eventLimit !== 'number';\r\n    };\r\n    /* Dimensions\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Refreshes the horizontal dimensions of the view\r\n    BasicView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        var eventLimit = this.opt('eventLimit');\r\n        var headRowEl = this.dayGrid.headContainerEl.find('.fc-row');\r\n        var scrollerHeight;\r\n        var scrollbarWidths;\r\n        // hack to give the view some height prior to dayGrid's columns being rendered\r\n        // TODO: separate setting height from scroller VS dayGrid.\r\n        if (!this.dayGrid.rowEls) {\r\n            if (!isAuto) {\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            return;\r\n        }\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        if (this.dayGrid.colWeekNumbersVisible) {\r\n            // Make sure all week number cells running down the side have the same width.\r\n            // Record the width for cells created later.\r\n            this.weekNumberWidth = util_1.matchCellWidths(this.el.find('.fc-week-number'));\r\n        }\r\n        // reset all heights to be natural\r\n        this.scroller.clear();\r\n        util_1.uncompensateScroll(headRowEl);\r\n        this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\r\n        // is the event limit a constant level number?\r\n        if (eventLimit && typeof eventLimit === 'number') {\r\n            this.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after\r\n        }\r\n        // distribute the height to the rows\r\n        // (totalHeight is a \"recommended\" value if isAuto)\r\n        scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n        this.setGridHeight(scrollerHeight, isAuto);\r\n        // is the event limit dynamically calculated?\r\n        if (eventLimit && typeof eventLimit !== 'number') {\r\n            this.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set\r\n        }\r\n        if (!isAuto) { // should we force dimensions of the scroll container?\r\n            this.scroller.setHeight(scrollerHeight);\r\n            scrollbarWidths = this.scroller.getScrollbarWidths();\r\n            if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\r\n                util_1.compensateScroll(headRowEl, scrollbarWidths);\r\n                // doing the scrollbar compensation might have created text overflow which created more height. redo\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            // guarantees the same scrollbar widths\r\n            this.scroller.lockOverflow(scrollbarWidths);\r\n        }\r\n    };\r\n    // given a desired total height of the view, returns what the height of the scroller should be\r\n    BasicView.prototype.computeScrollerHeight = function (totalHeight) {\r\n        return totalHeight -\r\n            util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n    };\r\n    // Sets the height of just the DayGrid component in this view\r\n    BasicView.prototype.setGridHeight = function (height, isAuto) {\r\n        if (isAuto) {\r\n            util_1.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding\r\n        }\r\n        else {\r\n            util_1.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows\r\n        }\r\n    };\r\n    /* Scroll\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    BasicView.prototype.computeInitialDateScroll = function () {\r\n        return { top: 0 };\r\n    };\r\n    BasicView.prototype.queryDateScroll = function () {\r\n        return { top: this.scroller.getScrollTop() };\r\n    };\r\n    BasicView.prototype.applyDateScroll = function (scroll) {\r\n        if (scroll.top !== undefined) {\r\n            this.scroller.setScrollTop(scroll.top);\r\n        }\r\n    };\r\n    return BasicView;\r\n}(View_1.default));\r\nexports.default = BasicView;\r\nBasicView.prototype.dateProfileGeneratorClass = BasicViewDateProfileGenerator_1.default;\r\nBasicView.prototype.dayGridClass = DayGrid_1.default;\r\n// customize the rendering behavior of BasicView's dayGrid\r\nfunction makeDayGridSubclass(SuperClass) {\r\n    return /** @class */ (function (_super) {\r\n        tslib_1.__extends(SubClass, _super);\r\n        function SubClass() {\r\n            var _this = _super !== null && _super.apply(this, arguments) || this;\r\n            _this.colWeekNumbersVisible = false; // display week numbers along the side?\r\n            return _this;\r\n        }\r\n        // Generates the HTML that will go before the day-of week header cells\r\n        SubClass.prototype.renderHeadIntroHtml = function () {\r\n            var view = this.view;\r\n            if (this.colWeekNumbersVisible) {\r\n                return '' +\r\n                    '<th class=\"fc-week-number ' + view.calendar.theme.getClass('widgetHeader') + '\" ' + view.weekNumberStyleAttr() + '>' +\r\n                    '<span>' + // needed for matchCellWidths\r\n                    util_1.htmlEscape(this.opt('weekNumberTitle')) +\r\n                    '</span>' +\r\n                    '</th>';\r\n            }\r\n            return '';\r\n        };\r\n        // Generates the HTML that will go before content-skeleton cells that display the day/week numbers\r\n        SubClass.prototype.renderNumberIntroHtml = function (row) {\r\n            var view = this.view;\r\n            var weekStart = this.getCellDate(row, 0);\r\n            if (this.colWeekNumbersVisible) {\r\n                return '' +\r\n                    '<td class=\"fc-week-number\" ' + view.weekNumberStyleAttr() + '>' +\r\n                    view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\r\n                    { date: weekStart, type: 'week', forceOff: this.colCnt === 1 }, weekStart.format('w') // inner HTML\r\n                    ) +\r\n                    '</td>';\r\n            }\r\n            return '';\r\n        };\r\n        // Generates the HTML that goes before the day bg cells for each day-row\r\n        SubClass.prototype.renderBgIntroHtml = function () {\r\n            var view = this.view;\r\n            if (this.colWeekNumbersVisible) {\r\n                return '<td class=\"fc-week-number ' + view.calendar.theme.getClass('widgetContent') + '\" ' +\r\n                    view.weekNumberStyleAttr() + '></td>';\r\n            }\r\n            return '';\r\n        };\r\n        // Generates the HTML that goes before every other type of row generated by DayGrid.\r\n        // Affects helper-skeleton and highlight-skeleton rows.\r\n        SubClass.prototype.renderIntroHtml = function () {\r\n            var view = this.view;\r\n            if (this.colWeekNumbersVisible) {\r\n                return '<td class=\"fc-week-number\" ' + view.weekNumberStyleAttr() + '></td>';\r\n            }\r\n            return '';\r\n        };\r\n        SubClass.prototype.getIsNumbersVisible = function () {\r\n            return DayGrid_1.default.prototype.getIsNumbersVisible.apply(this, arguments) || this.colWeekNumbersVisible;\r\n        };\r\n        return SubClass;\r\n    }(SuperClass));\r\n}\r\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nvar BasicViewDateProfileGenerator = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BasicViewDateProfileGenerator, _super);\r\n    function BasicViewDateProfileGenerator() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Computes the date range that will be rendered.\r\n    BasicViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n        var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay); // an UnzonedRange\r\n        var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\r\n        var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\r\n        // year and month views should be aligned with weeks. this is already done for week\r\n        if (/^(year|month)$/.test(currentRangeUnit)) {\r\n            start.startOf('week');\r\n            // make end-of-week if not already\r\n            if (end.weekday()) {\r\n                end.add(1, 'week').startOf('week'); // exclusively move backwards\r\n            }\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    return BasicViewDateProfileGenerator;\r\n}(DateProfileGenerator_1.default));\r\nexports.default = BasicViewDateProfileGenerator;\r\n\n\n/***/ }),\n/* 69 */,\n/* 70 */,\n/* 71 */,\n/* 72 */,\n/* 73 */,\n/* 74 */,\n/* 75 */,\n/* 76 */,\n/* 77 */,\n/* 78 */,\n/* 79 */,\n/* 80 */,\n/* 81 */,\n/* 82 */,\n/* 83 */,\n/* 84 */,\n/* 85 */,\n/* 86 */,\n/* 87 */,\n/* 88 */,\n/* 89 */,\n/* 90 */,\n/* 91 */,\n/* 92 */,\n/* 93 */,\n/* 94 */,\n/* 95 */,\n/* 96 */,\n/* 97 */,\n/* 98 */,\n/* 99 */,\n/* 100 */,\n/* 101 */,\n/* 102 */,\n/* 103 */,\n/* 104 */,\n/* 105 */,\n/* 106 */,\n/* 107 */,\n/* 108 */,\n/* 109 */,\n/* 110 */,\n/* 111 */,\n/* 112 */,\n/* 113 */,\n/* 114 */,\n/* 115 */,\n/* 116 */,\n/* 117 */,\n/* 118 */,\n/* 119 */,\n/* 120 */,\n/* 121 */,\n/* 122 */,\n/* 123 */,\n/* 124 */,\n/* 125 */,\n/* 126 */,\n/* 127 */,\n/* 128 */,\n/* 129 */,\n/* 130 */,\n/* 131 */,\n/* 132 */,\n/* 133 */,\n/* 134 */,\n/* 135 */,\n/* 136 */,\n/* 137 */,\n/* 138 */,\n/* 139 */,\n/* 140 */,\n/* 141 */,\n/* 142 */,\n/* 143 */,\n/* 144 */,\n/* 145 */,\n/* 146 */,\n/* 147 */,\n/* 148 */,\n/* 149 */,\n/* 150 */,\n/* 151 */,\n/* 152 */,\n/* 153 */,\n/* 154 */,\n/* 155 */,\n/* 156 */,\n/* 157 */,\n/* 158 */,\n/* 159 */,\n/* 160 */,\n/* 161 */,\n/* 162 */,\n/* 163 */,\n/* 164 */,\n/* 165 */,\n/* 166 */,\n/* 167 */,\n/* 168 */,\n/* 169 */,\n/* 170 */,\n/* 171 */,\n/* 172 */,\n/* 173 */,\n/* 174 */,\n/* 175 */,\n/* 176 */,\n/* 177 */,\n/* 178 */,\n/* 179 */,\n/* 180 */,\n/* 181 */,\n/* 182 */,\n/* 183 */,\n/* 184 */,\n/* 185 */,\n/* 186 */,\n/* 187 */,\n/* 188 */,\n/* 189 */,\n/* 190 */,\n/* 191 */,\n/* 192 */,\n/* 193 */,\n/* 194 */,\n/* 195 */,\n/* 196 */,\n/* 197 */,\n/* 198 */,\n/* 199 */,\n/* 200 */,\n/* 201 */,\n/* 202 */,\n/* 203 */,\n/* 204 */,\n/* 205 */,\n/* 206 */,\n/* 207 */,\n/* 208 */,\n/* 209 */,\n/* 210 */,\n/* 211 */,\n/* 212 */,\n/* 213 */,\n/* 214 */,\n/* 215 */,\n/* 216 */,\n/* 217 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar util_1 = __webpack_require__(19);\r\nvar Constraints = /** @class */ (function () {\r\n    function Constraints(eventManager, _calendar) {\r\n        this.eventManager = eventManager;\r\n        this._calendar = _calendar;\r\n    }\r\n    Constraints.prototype.opt = function (name) {\r\n        return this._calendar.opt(name);\r\n    };\r\n    /*\r\n    determines if eventInstanceGroup is allowed,\r\n    in relation to other EVENTS and business hours.\r\n    */\r\n    Constraints.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\r\n        var eventDef = eventInstanceGroup.getEventDef();\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n        var i;\r\n        var peerEventInstances = this.getPeerEventInstances(eventDef);\r\n        var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\r\n        var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\r\n        var constraintVal = eventDef.getConstraint();\r\n        var overlapVal = eventDef.getOverlap();\r\n        var eventAllowFunc = this.opt('eventAllow');\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            if (!this.isFootprintAllowed(eventFootprints[i].componentFootprint, peerEventFootprints, constraintVal, overlapVal, eventFootprints[i].eventInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n        if (eventAllowFunc) {\r\n            for (i = 0; i < eventFootprints.length; i++) {\r\n                if (eventAllowFunc(eventFootprints[i].componentFootprint.toLegacy(this._calendar), eventFootprints[i].getEventLegacy()) === false) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    Constraints.prototype.getPeerEventInstances = function (eventDef) {\r\n        return this.eventManager.getEventInstancesWithoutId(eventDef.id);\r\n    };\r\n    Constraints.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\r\n        var peerEventInstances = this.eventManager.getEventInstances();\r\n        var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\r\n        var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\r\n        var selectAllowFunc;\r\n        if (this.isFootprintAllowed(componentFootprint, peerEventFootprints, this.opt('selectConstraint'), this.opt('selectOverlap'))) {\r\n            selectAllowFunc = this.opt('selectAllow');\r\n            if (selectAllowFunc) {\r\n                return selectAllowFunc(componentFootprint.toLegacy(this._calendar)) !== false;\r\n            }\r\n            else {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    Constraints.prototype.isFootprintAllowed = function (componentFootprint, peerEventFootprints, constraintVal, overlapVal, subjectEventInstance // optional\r\n    ) {\r\n        var constraintFootprints; // ComponentFootprint[]\r\n        var overlapEventFootprints; // EventFootprint[]\r\n        if (constraintVal != null) {\r\n            constraintFootprints = this.constraintValToFootprints(constraintVal, componentFootprint.isAllDay);\r\n            if (!this.isFootprintWithinConstraints(componentFootprint, constraintFootprints)) {\r\n                return false;\r\n            }\r\n        }\r\n        overlapEventFootprints = this.collectOverlapEventFootprints(peerEventFootprints, componentFootprint);\r\n        if (overlapVal === false) {\r\n            if (overlapEventFootprints.length) {\r\n                return false;\r\n            }\r\n        }\r\n        else if (typeof overlapVal === 'function') {\r\n            if (!isOverlapsAllowedByFunc(overlapEventFootprints, overlapVal, subjectEventInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n        if (subjectEventInstance) {\r\n            if (!isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    // Constraint\r\n    // ------------------------------------------------------------------------------------------------\r\n    Constraints.prototype.isFootprintWithinConstraints = function (componentFootprint, constraintFootprints) {\r\n        var i;\r\n        for (i = 0; i < constraintFootprints.length; i++) {\r\n            if (this.footprintContainsFootprint(constraintFootprints[i], componentFootprint)) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    Constraints.prototype.constraintValToFootprints = function (constraintVal, isAllDay) {\r\n        var eventInstances;\r\n        if (constraintVal === 'businessHours') {\r\n            return this.buildCurrentBusinessFootprints(isAllDay);\r\n        }\r\n        else if (typeof constraintVal === 'object') {\r\n            eventInstances = this.parseEventDefToInstances(constraintVal); // handles recurring events\r\n            if (!eventInstances) { // invalid input. fallback to parsing footprint directly\r\n                return this.parseFootprints(constraintVal);\r\n            }\r\n            else {\r\n                return this.eventInstancesToFootprints(eventInstances);\r\n            }\r\n        }\r\n        else if (constraintVal != null) { // an ID\r\n            eventInstances = this.eventManager.getEventInstancesWithId(constraintVal);\r\n            return this.eventInstancesToFootprints(eventInstances);\r\n        }\r\n    };\r\n    // returns ComponentFootprint[]\r\n    // uses current view's range\r\n    Constraints.prototype.buildCurrentBusinessFootprints = function (isAllDay) {\r\n        var view = this._calendar.view;\r\n        var businessHourGenerator = view.get('businessHourGenerator');\r\n        var unzonedRange = view.dateProfile.activeUnzonedRange;\r\n        var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(isAllDay, unzonedRange);\r\n        if (eventInstanceGroup) {\r\n            return this.eventInstancesToFootprints(eventInstanceGroup.eventInstances);\r\n        }\r\n        else {\r\n            return [];\r\n        }\r\n    };\r\n    // conversion util\r\n    Constraints.prototype.eventInstancesToFootprints = function (eventInstances) {\r\n        var eventRanges = eventInstances.map(util_1.eventInstanceToEventRange);\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventRanges);\r\n        return eventFootprints.map(util_1.eventFootprintToComponentFootprint);\r\n    };\r\n    // Overlap\r\n    // ------------------------------------------------------------------------------------------------\r\n    Constraints.prototype.collectOverlapEventFootprints = function (peerEventFootprints, targetFootprint) {\r\n        var overlapEventFootprints = [];\r\n        var i;\r\n        for (i = 0; i < peerEventFootprints.length; i++) {\r\n            if (this.footprintsIntersect(targetFootprint, peerEventFootprints[i].componentFootprint)) {\r\n                overlapEventFootprints.push(peerEventFootprints[i]);\r\n            }\r\n        }\r\n        return overlapEventFootprints;\r\n    };\r\n    // Conversion: eventDefs -> eventInstances -> eventRanges -> eventFootprints -> componentFootprints\r\n    // ------------------------------------------------------------------------------------------------\r\n    // NOTE: this might seem like repetitive code with the Grid class, however, this code is related to\r\n    // constraints whereas the Grid code is related to rendering. Each approach might want to convert\r\n    // eventRanges -> eventFootprints in a different way. Regardless, there are opportunities to make\r\n    // this more DRY.\r\n    /*\r\n    Returns false on invalid input.\r\n    */\r\n    Constraints.prototype.parseEventDefToInstances = function (eventInput) {\r\n        var eventManager = this.eventManager;\r\n        var eventDef = EventDefParser_1.default.parse(eventInput, new EventSource_1.default(this._calendar));\r\n        if (!eventDef) { // invalid\r\n            return false;\r\n        }\r\n        return eventDef.buildInstances(eventManager.currentPeriod.unzonedRange);\r\n    };\r\n    Constraints.prototype.eventRangesToEventFootprints = function (eventRanges) {\r\n        var i;\r\n        var eventFootprints = [];\r\n        for (i = 0; i < eventRanges.length; i++) {\r\n            eventFootprints.push.apply(// footprints\r\n            eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\r\n        }\r\n        return eventFootprints;\r\n    };\r\n    Constraints.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n        return [util_1.eventRangeToEventFootprint(eventRange)];\r\n    };\r\n    /*\r\n    Parses footprints directly.\r\n    Very similar to EventDateProfile::parse :(\r\n    */\r\n    Constraints.prototype.parseFootprints = function (rawInput) {\r\n        var start;\r\n        var end;\r\n        if (rawInput.start) {\r\n            start = this._calendar.moment(rawInput.start);\r\n            if (!start.isValid()) {\r\n                start = null;\r\n            }\r\n        }\r\n        if (rawInput.end) {\r\n            end = this._calendar.moment(rawInput.end);\r\n            if (!end.isValid()) {\r\n                end = null;\r\n            }\r\n        }\r\n        return [\r\n            new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), (start && !start.hasTime()) || (end && !end.hasTime()) // isAllDay\r\n            )\r\n        ];\r\n    };\r\n    // Footprint Utils\r\n    // ----------------------------------------------------------------------------------------\r\n    Constraints.prototype.footprintContainsFootprint = function (outerFootprint, innerFootprint) {\r\n        return outerFootprint.unzonedRange.containsRange(innerFootprint.unzonedRange);\r\n    };\r\n    Constraints.prototype.footprintsIntersect = function (footprint0, footprint1) {\r\n        return footprint0.unzonedRange.intersectsWith(footprint1.unzonedRange);\r\n    };\r\n    return Constraints;\r\n}());\r\nexports.default = Constraints;\r\n// optional subjectEventInstance\r\nfunction isOverlapsAllowedByFunc(overlapEventFootprints, overlapFunc, subjectEventInstance) {\r\n    var i;\r\n    for (i = 0; i < overlapEventFootprints.length; i++) {\r\n        if (!overlapFunc(overlapEventFootprints[i].eventInstance.toLegacy(), subjectEventInstance ? subjectEventInstance.toLegacy() : null)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance) {\r\n    var subjectLegacyInstance = subjectEventInstance.toLegacy();\r\n    var i;\r\n    var overlapEventInstance;\r\n    var overlapEventDef;\r\n    var overlapVal;\r\n    for (i = 0; i < overlapEventFootprints.length; i++) {\r\n        overlapEventInstance = overlapEventFootprints[i].eventInstance;\r\n        overlapEventDef = overlapEventInstance.def;\r\n        // don't need to pass in calendar, because don't want to consider global eventOverlap property,\r\n        // because we already considered that earlier in the process.\r\n        overlapVal = overlapEventDef.getOverlap();\r\n        if (overlapVal === false) {\r\n            return false;\r\n        }\r\n        else if (typeof overlapVal === 'function') {\r\n            if (!overlapVal(overlapEventInstance.toLegacy(), subjectLegacyInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\n\n/***/ }),\n/* 218 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(19);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar BUSINESS_HOUR_EVENT_DEFAULTS = {\r\n    start: '09:00',\r\n    end: '17:00',\r\n    dow: [1, 2, 3, 4, 5],\r\n    rendering: 'inverse-background'\r\n    // classNames are defined in businessHoursSegClasses\r\n};\r\nvar BusinessHourGenerator = /** @class */ (function () {\r\n    function BusinessHourGenerator(rawComplexDef, calendar) {\r\n        this.rawComplexDef = rawComplexDef;\r\n        this.calendar = calendar;\r\n    }\r\n    BusinessHourGenerator.prototype.buildEventInstanceGroup = function (isAllDay, unzonedRange) {\r\n        var eventDefs = this.buildEventDefs(isAllDay);\r\n        var eventInstanceGroup;\r\n        if (eventDefs.length) {\r\n            eventInstanceGroup = new EventInstanceGroup_1.default(util_1.eventDefsToEventInstances(eventDefs, unzonedRange));\r\n            // so that inverse-background rendering can happen even when no eventRanges in view\r\n            eventInstanceGroup.explicitEventDef = eventDefs[0];\r\n            return eventInstanceGroup;\r\n        }\r\n    };\r\n    BusinessHourGenerator.prototype.buildEventDefs = function (isAllDay) {\r\n        var rawComplexDef = this.rawComplexDef;\r\n        var rawDefs = [];\r\n        var requireDow = false;\r\n        var i;\r\n        var defs = [];\r\n        if (rawComplexDef === true) {\r\n            rawDefs = [{}]; // will get BUSINESS_HOUR_EVENT_DEFAULTS verbatim\r\n        }\r\n        else if ($.isPlainObject(rawComplexDef)) {\r\n            rawDefs = [rawComplexDef];\r\n        }\r\n        else if ($.isArray(rawComplexDef)) {\r\n            rawDefs = rawComplexDef;\r\n            requireDow = true; // every sub-definition NEEDS a day-of-week\r\n        }\r\n        for (i = 0; i < rawDefs.length; i++) {\r\n            if (!requireDow || rawDefs[i].dow) {\r\n                defs.push(this.buildEventDef(isAllDay, rawDefs[i]));\r\n            }\r\n        }\r\n        return defs;\r\n    };\r\n    BusinessHourGenerator.prototype.buildEventDef = function (isAllDay, rawDef) {\r\n        var fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDef);\r\n        if (isAllDay) {\r\n            fullRawDef.start = null;\r\n            fullRawDef.end = null;\r\n        }\r\n        return RecurringEventDef_1.default.parse(fullRawDef, new EventSource_1.default(this.calendar) // dummy source\r\n        );\r\n    };\r\n    return BusinessHourGenerator;\r\n}());\r\nexports.default = BusinessHourGenerator;\r\n\n\n/***/ }),\n/* 219 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EventPeriod = /** @class */ (function () {\r\n    function EventPeriod(start, end, timezone) {\r\n        this.pendingCnt = 0;\r\n        this.freezeDepth = 0;\r\n        this.stuntedReleaseCnt = 0;\r\n        this.releaseCnt = 0;\r\n        this.start = start;\r\n        this.end = end;\r\n        this.timezone = timezone;\r\n        this.unzonedRange = new UnzonedRange_1.default(start.clone().stripZone(), end.clone().stripZone());\r\n        this.requestsByUid = {};\r\n        this.eventDefsByUid = {};\r\n        this.eventDefsById = {};\r\n        this.eventInstanceGroupsById = {};\r\n    }\r\n    EventPeriod.prototype.isWithinRange = function (start, end) {\r\n        // TODO: use a range util function?\r\n        return !start.isBefore(this.start) && !end.isAfter(this.end);\r\n    };\r\n    // Requesting and Purging\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.requestSources = function (sources) {\r\n        this.freeze();\r\n        for (var i = 0; i < sources.length; i++) {\r\n            this.requestSource(sources[i]);\r\n        }\r\n        this.thaw();\r\n    };\r\n    EventPeriod.prototype.requestSource = function (source) {\r\n        var _this = this;\r\n        var request = { source: source, status: 'pending', eventDefs: null };\r\n        this.requestsByUid[source.uid] = request;\r\n        this.pendingCnt += 1;\r\n        source.fetch(this.start, this.end, this.timezone).then(function (eventDefs) {\r\n            if (request.status !== 'cancelled') {\r\n                request.status = 'completed';\r\n                request.eventDefs = eventDefs;\r\n                _this.addEventDefs(eventDefs);\r\n                _this.pendingCnt--;\r\n                _this.tryRelease();\r\n            }\r\n        }, function () {\r\n            if (request.status !== 'cancelled') {\r\n                request.status = 'failed';\r\n                _this.pendingCnt--;\r\n                _this.tryRelease();\r\n            }\r\n        });\r\n    };\r\n    EventPeriod.prototype.purgeSource = function (source) {\r\n        var request = this.requestsByUid[source.uid];\r\n        if (request) {\r\n            delete this.requestsByUid[source.uid];\r\n            if (request.status === 'pending') {\r\n                request.status = 'cancelled';\r\n                this.pendingCnt--;\r\n                this.tryRelease();\r\n            }\r\n            else if (request.status === 'completed') {\r\n                request.eventDefs.forEach(this.removeEventDef.bind(this));\r\n            }\r\n        }\r\n    };\r\n    EventPeriod.prototype.purgeAllSources = function () {\r\n        var requestsByUid = this.requestsByUid;\r\n        var uid;\r\n        var request;\r\n        var completedCnt = 0;\r\n        for (uid in requestsByUid) {\r\n            request = requestsByUid[uid];\r\n            if (request.status === 'pending') {\r\n                request.status = 'cancelled';\r\n            }\r\n            else if (request.status === 'completed') {\r\n                completedCnt++;\r\n            }\r\n        }\r\n        this.requestsByUid = {};\r\n        this.pendingCnt = 0;\r\n        if (completedCnt) {\r\n            this.removeAllEventDefs(); // might release\r\n        }\r\n    };\r\n    // Event Definitions\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.getEventDefByUid = function (eventDefUid) {\r\n        return this.eventDefsByUid[eventDefUid];\r\n    };\r\n    EventPeriod.prototype.getEventDefsById = function (eventDefId) {\r\n        var a = this.eventDefsById[eventDefId];\r\n        if (a) {\r\n            return a.slice(); // clone\r\n        }\r\n        return [];\r\n    };\r\n    EventPeriod.prototype.addEventDefs = function (eventDefs) {\r\n        for (var i = 0; i < eventDefs.length; i++) {\r\n            this.addEventDef(eventDefs[i]);\r\n        }\r\n    };\r\n    EventPeriod.prototype.addEventDef = function (eventDef) {\r\n        var eventDefsById = this.eventDefsById;\r\n        var eventDefId = eventDef.id;\r\n        var eventDefs = eventDefsById[eventDefId] || (eventDefsById[eventDefId] = []);\r\n        var eventInstances = eventDef.buildInstances(this.unzonedRange);\r\n        var i;\r\n        eventDefs.push(eventDef);\r\n        this.eventDefsByUid[eventDef.uid] = eventDef;\r\n        for (i = 0; i < eventInstances.length; i++) {\r\n            this.addEventInstance(eventInstances[i], eventDefId);\r\n        }\r\n    };\r\n    EventPeriod.prototype.removeEventDefsById = function (eventDefId) {\r\n        var _this = this;\r\n        this.getEventDefsById(eventDefId).forEach(function (eventDef) {\r\n            _this.removeEventDef(eventDef);\r\n        });\r\n    };\r\n    EventPeriod.prototype.removeAllEventDefs = function () {\r\n        var isEmpty = $.isEmptyObject(this.eventDefsByUid);\r\n        this.eventDefsByUid = {};\r\n        this.eventDefsById = {};\r\n        this.eventInstanceGroupsById = {};\r\n        if (!isEmpty) {\r\n            this.tryRelease();\r\n        }\r\n    };\r\n    EventPeriod.prototype.removeEventDef = function (eventDef) {\r\n        var eventDefsById = this.eventDefsById;\r\n        var eventDefs = eventDefsById[eventDef.id];\r\n        delete this.eventDefsByUid[eventDef.uid];\r\n        if (eventDefs) {\r\n            util_1.removeExact(eventDefs, eventDef);\r\n            if (!eventDefs.length) {\r\n                delete eventDefsById[eventDef.id];\r\n            }\r\n            this.removeEventInstancesForDef(eventDef);\r\n        }\r\n    };\r\n    // Event Instances\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.getEventInstances = function () {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var eventInstances = [];\r\n        var id;\r\n        for (id in eventInstanceGroupsById) {\r\n            eventInstances.push.apply(eventInstances, // append\r\n            eventInstanceGroupsById[id].eventInstances);\r\n        }\r\n        return eventInstances;\r\n    };\r\n    EventPeriod.prototype.getEventInstancesWithId = function (eventDefId) {\r\n        var eventInstanceGroup = this.eventInstanceGroupsById[eventDefId];\r\n        if (eventInstanceGroup) {\r\n            return eventInstanceGroup.eventInstances.slice(); // clone\r\n        }\r\n        return [];\r\n    };\r\n    EventPeriod.prototype.getEventInstancesWithoutId = function (eventDefId) {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var matchingInstances = [];\r\n        var id;\r\n        for (id in eventInstanceGroupsById) {\r\n            if (id !== eventDefId) {\r\n                matchingInstances.push.apply(matchingInstances, // append\r\n                eventInstanceGroupsById[id].eventInstances);\r\n            }\r\n        }\r\n        return matchingInstances;\r\n    };\r\n    EventPeriod.prototype.addEventInstance = function (eventInstance, eventDefId) {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var eventInstanceGroup = eventInstanceGroupsById[eventDefId] ||\r\n            (eventInstanceGroupsById[eventDefId] = new EventInstanceGroup_1.default());\r\n        eventInstanceGroup.eventInstances.push(eventInstance);\r\n        this.tryRelease();\r\n    };\r\n    EventPeriod.prototype.removeEventInstancesForDef = function (eventDef) {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var eventInstanceGroup = eventInstanceGroupsById[eventDef.id];\r\n        var removeCnt;\r\n        if (eventInstanceGroup) {\r\n            removeCnt = util_1.removeMatching(eventInstanceGroup.eventInstances, function (currentEventInstance) {\r\n                return currentEventInstance.def === eventDef;\r\n            });\r\n            if (!eventInstanceGroup.eventInstances.length) {\r\n                delete eventInstanceGroupsById[eventDef.id];\r\n            }\r\n            if (removeCnt) {\r\n                this.tryRelease();\r\n            }\r\n        }\r\n    };\r\n    // Releasing and Freezing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.tryRelease = function () {\r\n        if (!this.pendingCnt) {\r\n            if (!this.freezeDepth) {\r\n                this.release();\r\n            }\r\n            else {\r\n                this.stuntedReleaseCnt++;\r\n            }\r\n        }\r\n    };\r\n    EventPeriod.prototype.release = function () {\r\n        this.releaseCnt++;\r\n        this.trigger('release', this.eventInstanceGroupsById);\r\n    };\r\n    EventPeriod.prototype.whenReleased = function () {\r\n        var _this = this;\r\n        if (this.releaseCnt) {\r\n            return Promise_1.default.resolve(this.eventInstanceGroupsById);\r\n        }\r\n        else {\r\n            return Promise_1.default.construct(function (onResolve) {\r\n                _this.one('release', onResolve);\r\n            });\r\n        }\r\n    };\r\n    EventPeriod.prototype.freeze = function () {\r\n        if (!(this.freezeDepth++)) {\r\n            this.stuntedReleaseCnt = 0;\r\n        }\r\n    };\r\n    EventPeriod.prototype.thaw = function () {\r\n        if (!(--this.freezeDepth) && this.stuntedReleaseCnt && !this.pendingCnt) {\r\n            this.release();\r\n        }\r\n    };\r\n    return EventPeriod;\r\n}());\r\nexports.default = EventPeriod;\r\nEmitterMixin_1.default.mixInto(EventPeriod);\r\n\n\n/***/ }),\n/* 220 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventPeriod_1 = __webpack_require__(219);\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar EventManager = /** @class */ (function () {\r\n    function EventManager(calendar) {\r\n        this.calendar = calendar;\r\n        this.stickySource = new ArrayEventSource_1.default(calendar);\r\n        this.otherSources = [];\r\n    }\r\n    EventManager.prototype.requestEvents = function (start, end, timezone, force) {\r\n        if (force ||\r\n            !this.currentPeriod ||\r\n            !this.currentPeriod.isWithinRange(start, end) ||\r\n            timezone !== this.currentPeriod.timezone) {\r\n            this.setPeriod(// will change this.currentPeriod\r\n            new EventPeriod_1.default(start, end, timezone));\r\n        }\r\n        return this.currentPeriod.whenReleased();\r\n    };\r\n    // Source Adding/Removing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.addSource = function (eventSource) {\r\n        this.otherSources.push(eventSource);\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.requestSource(eventSource); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeSource = function (doomedSource) {\r\n        util_1.removeExact(this.otherSources, doomedSource);\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.purgeSource(doomedSource); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeAllSources = function () {\r\n        this.otherSources = [];\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.purgeAllSources(); // might release\r\n        }\r\n    };\r\n    // Source Refetching\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.refetchSource = function (eventSource) {\r\n        var currentPeriod = this.currentPeriod;\r\n        if (currentPeriod) {\r\n            currentPeriod.freeze();\r\n            currentPeriod.purgeSource(eventSource);\r\n            currentPeriod.requestSource(eventSource);\r\n            currentPeriod.thaw();\r\n        }\r\n    };\r\n    EventManager.prototype.refetchAllSources = function () {\r\n        var currentPeriod = this.currentPeriod;\r\n        if (currentPeriod) {\r\n            currentPeriod.freeze();\r\n            currentPeriod.purgeAllSources();\r\n            currentPeriod.requestSources(this.getSources());\r\n            currentPeriod.thaw();\r\n        }\r\n    };\r\n    // Source Querying\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.getSources = function () {\r\n        return [this.stickySource].concat(this.otherSources);\r\n    };\r\n    // like querySources, but accepts multple match criteria (like multiple IDs)\r\n    EventManager.prototype.multiQuerySources = function (matchInputs) {\r\n        // coerce into an array\r\n        if (!matchInputs) {\r\n            matchInputs = [];\r\n        }\r\n        else if (!$.isArray(matchInputs)) {\r\n            matchInputs = [matchInputs];\r\n        }\r\n        var matchingSources = [];\r\n        var i;\r\n        // resolve raw inputs to real event source objects\r\n        for (i = 0; i < matchInputs.length; i++) {\r\n            matchingSources.push.apply(// append\r\n            matchingSources, this.querySources(matchInputs[i]));\r\n        }\r\n        return matchingSources;\r\n    };\r\n    // matchInput can either by a real event source object, an ID, or the function/URL for the source.\r\n    // returns an array of matching source objects.\r\n    EventManager.prototype.querySources = function (matchInput) {\r\n        var sources = this.otherSources;\r\n        var i;\r\n        var source;\r\n        // given a proper event source object\r\n        for (i = 0; i < sources.length; i++) {\r\n            source = sources[i];\r\n            if (source === matchInput) {\r\n                return [source];\r\n            }\r\n        }\r\n        // an ID match\r\n        source = this.getSourceById(EventSource_1.default.normalizeId(matchInput));\r\n        if (source) {\r\n            return [source];\r\n        }\r\n        // parse as an event source\r\n        matchInput = EventSourceParser_1.default.parse(matchInput, this.calendar);\r\n        if (matchInput) {\r\n            return $.grep(sources, function (source) {\r\n                return isSourcesEquivalent(matchInput, source);\r\n            });\r\n        }\r\n    };\r\n    /*\r\n    ID assumed to already be normalized\r\n    */\r\n    EventManager.prototype.getSourceById = function (id) {\r\n        return $.grep(this.otherSources, function (source) {\r\n            return source.id && source.id === id;\r\n        })[0];\r\n    };\r\n    // Event-Period\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.setPeriod = function (eventPeriod) {\r\n        if (this.currentPeriod) {\r\n            this.unbindPeriod(this.currentPeriod);\r\n            this.currentPeriod = null;\r\n        }\r\n        this.currentPeriod = eventPeriod;\r\n        this.bindPeriod(eventPeriod);\r\n        eventPeriod.requestSources(this.getSources());\r\n    };\r\n    EventManager.prototype.bindPeriod = function (eventPeriod) {\r\n        this.listenTo(eventPeriod, 'release', function (eventsPayload) {\r\n            this.trigger('release', eventsPayload);\r\n        });\r\n    };\r\n    EventManager.prototype.unbindPeriod = function (eventPeriod) {\r\n        this.stopListeningTo(eventPeriod);\r\n    };\r\n    // Event Getting/Adding/Removing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.getEventDefByUid = function (uid) {\r\n        if (this.currentPeriod) {\r\n            return this.currentPeriod.getEventDefByUid(uid);\r\n        }\r\n    };\r\n    EventManager.prototype.addEventDef = function (eventDef, isSticky) {\r\n        if (isSticky) {\r\n            this.stickySource.addEventDef(eventDef);\r\n        }\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.addEventDef(eventDef); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeEventDefsById = function (eventId) {\r\n        this.getSources().forEach(function (eventSource) {\r\n            eventSource.removeEventDefsById(eventId);\r\n        });\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.removeEventDefsById(eventId); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeAllEventDefs = function () {\r\n        this.getSources().forEach(function (eventSource) {\r\n            eventSource.removeAllEventDefs();\r\n        });\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.removeAllEventDefs();\r\n        }\r\n    };\r\n    // Event Mutating\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    /*\r\n    Returns an undo function.\r\n    */\r\n    EventManager.prototype.mutateEventsWithId = function (eventDefId, eventDefMutation) {\r\n        var currentPeriod = this.currentPeriod;\r\n        var eventDefs;\r\n        var undoFuncs = [];\r\n        if (currentPeriod) {\r\n            currentPeriod.freeze();\r\n            eventDefs = currentPeriod.getEventDefsById(eventDefId);\r\n            eventDefs.forEach(function (eventDef) {\r\n                // add/remove esp because id might change\r\n                currentPeriod.removeEventDef(eventDef);\r\n                undoFuncs.push(eventDefMutation.mutateSingle(eventDef));\r\n                currentPeriod.addEventDef(eventDef);\r\n            });\r\n            currentPeriod.thaw();\r\n            return function () {\r\n                currentPeriod.freeze();\r\n                for (var i = 0; i < eventDefs.length; i++) {\r\n                    currentPeriod.removeEventDef(eventDefs[i]);\r\n                    undoFuncs[i]();\r\n                    currentPeriod.addEventDef(eventDefs[i]);\r\n                }\r\n                currentPeriod.thaw();\r\n            };\r\n        }\r\n        return function () { };\r\n    };\r\n    /*\r\n    copies and then mutates\r\n    */\r\n    EventManager.prototype.buildMutatedEventInstanceGroup = function (eventDefId, eventDefMutation) {\r\n        var eventDefs = this.getEventDefsById(eventDefId);\r\n        var i;\r\n        var defCopy;\r\n        var allInstances = [];\r\n        for (i = 0; i < eventDefs.length; i++) {\r\n            defCopy = eventDefs[i].clone();\r\n            if (defCopy instanceof SingleEventDef_1.default) {\r\n                eventDefMutation.mutateSingle(defCopy);\r\n                allInstances.push.apply(allInstances, // append\r\n                defCopy.buildInstances());\r\n            }\r\n        }\r\n        return new EventInstanceGroup_1.default(allInstances);\r\n    };\r\n    // Freezing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.freeze = function () {\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.freeze();\r\n        }\r\n    };\r\n    EventManager.prototype.thaw = function () {\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.thaw();\r\n        }\r\n    };\r\n    // methods that simply forward to EventPeriod\r\n    EventManager.prototype.getEventDefsById = function (eventDefId) {\r\n        return this.currentPeriod.getEventDefsById(eventDefId);\r\n    };\r\n    EventManager.prototype.getEventInstances = function () {\r\n        return this.currentPeriod.getEventInstances();\r\n    };\r\n    EventManager.prototype.getEventInstancesWithId = function (eventDefId) {\r\n        return this.currentPeriod.getEventInstancesWithId(eventDefId);\r\n    };\r\n    EventManager.prototype.getEventInstancesWithoutId = function (eventDefId) {\r\n        return this.currentPeriod.getEventInstancesWithoutId(eventDefId);\r\n    };\r\n    return EventManager;\r\n}());\r\nexports.default = EventManager;\r\nEmitterMixin_1.default.mixInto(EventManager);\r\nListenerMixin_1.default.mixInto(EventManager);\r\nfunction isSourcesEquivalent(source0, source1) {\r\n    return source0.getPrimitive() === source1.getPrimitive();\r\n}\r\n\n\n/***/ }),\n/* 221 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar StandardTheme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(StandardTheme, _super);\r\n    function StandardTheme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return StandardTheme;\r\n}(Theme_1.default));\r\nexports.default = StandardTheme;\r\nStandardTheme.prototype.classes = {\r\n    widget: 'fc-unthemed',\r\n    widgetHeader: 'fc-widget-header',\r\n    widgetContent: 'fc-widget-content',\r\n    buttonGroup: 'fc-button-group',\r\n    button: 'fc-button',\r\n    cornerLeft: 'fc-corner-left',\r\n    cornerRight: 'fc-corner-right',\r\n    stateDefault: 'fc-state-default',\r\n    stateActive: 'fc-state-active',\r\n    stateDisabled: 'fc-state-disabled',\r\n    stateHover: 'fc-state-hover',\r\n    stateDown: 'fc-state-down',\r\n    popoverHeader: 'fc-widget-header',\r\n    popoverContent: 'fc-widget-content',\r\n    // day grid\r\n    headerRow: 'fc-widget-header',\r\n    dayRow: 'fc-widget-content',\r\n    // list view\r\n    listView: 'fc-widget-content'\r\n};\r\nStandardTheme.prototype.baseIconClass = 'fc-icon';\r\nStandardTheme.prototype.iconClasses = {\r\n    close: 'fc-icon-x',\r\n    prev: 'fc-icon-left-single-arrow',\r\n    next: 'fc-icon-right-single-arrow',\r\n    prevYear: 'fc-icon-left-double-arrow',\r\n    nextYear: 'fc-icon-right-double-arrow'\r\n};\r\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons';\r\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\r\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\r\n\n\n/***/ }),\n/* 222 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar JqueryUiTheme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(JqueryUiTheme, _super);\r\n    function JqueryUiTheme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return JqueryUiTheme;\r\n}(Theme_1.default));\r\nexports.default = JqueryUiTheme;\r\nJqueryUiTheme.prototype.classes = {\r\n    widget: 'ui-widget',\r\n    widgetHeader: 'ui-widget-header',\r\n    widgetContent: 'ui-widget-content',\r\n    buttonGroup: 'fc-button-group',\r\n    button: 'ui-button',\r\n    cornerLeft: 'ui-corner-left',\r\n    cornerRight: 'ui-corner-right',\r\n    stateDefault: 'ui-state-default',\r\n    stateActive: 'ui-state-active',\r\n    stateDisabled: 'ui-state-disabled',\r\n    stateHover: 'ui-state-hover',\r\n    stateDown: 'ui-state-down',\r\n    today: 'ui-state-highlight',\r\n    popoverHeader: 'ui-widget-header',\r\n    popoverContent: 'ui-widget-content',\r\n    // day grid\r\n    headerRow: 'ui-widget-header',\r\n    dayRow: 'ui-widget-content',\r\n    // list view\r\n    listView: 'ui-widget-content'\r\n};\r\nJqueryUiTheme.prototype.baseIconClass = 'ui-icon';\r\nJqueryUiTheme.prototype.iconClasses = {\r\n    close: 'ui-icon-closethick',\r\n    prev: 'ui-icon-circle-triangle-w',\r\n    next: 'ui-icon-circle-triangle-e',\r\n    prevYear: 'ui-icon-seek-prev',\r\n    nextYear: 'ui-icon-seek-next'\r\n};\r\nJqueryUiTheme.prototype.iconOverrideOption = 'themeButtonIcons';\r\nJqueryUiTheme.prototype.iconOverrideCustomButtonOption = 'themeIcon';\r\nJqueryUiTheme.prototype.iconOverridePrefix = 'ui-icon-';\r\n\n\n/***/ }),\n/* 223 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar FuncEventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(FuncEventSource, _super);\r\n    function FuncEventSource() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    FuncEventSource.parse = function (rawInput, calendar) {\r\n        var rawProps;\r\n        // normalize raw input\r\n        if ($.isFunction(rawInput.events)) { // extended form\r\n            rawProps = rawInput;\r\n        }\r\n        else if ($.isFunction(rawInput)) { // short form\r\n            rawProps = { events: rawInput };\r\n        }\r\n        if (rawProps) {\r\n            return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n        }\r\n        return false;\r\n    };\r\n    FuncEventSource.prototype.fetch = function (start, end, timezone) {\r\n        var _this = this;\r\n        this.calendar.pushLoading();\r\n        return Promise_1.default.construct(function (onResolve) {\r\n            _this.func.call(_this.calendar, start.clone(), end.clone(), timezone, function (rawEventDefs) {\r\n                _this.calendar.popLoading();\r\n                onResolve(_this.parseEventDefs(rawEventDefs));\r\n            });\r\n        });\r\n    };\r\n    FuncEventSource.prototype.getPrimitive = function () {\r\n        return this.func;\r\n    };\r\n    FuncEventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n        var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n        this.func = rawProps.events;\r\n        return superSuccess;\r\n    };\r\n    return FuncEventSource;\r\n}(EventSource_1.default));\r\nexports.default = FuncEventSource;\r\nFuncEventSource.defineStandardProps({\r\n    events: false // don't automatically transfer\r\n});\r\n\n\n/***/ }),\n/* 224 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar JsonFeedEventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(JsonFeedEventSource, _super);\r\n    function JsonFeedEventSource() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    JsonFeedEventSource.parse = function (rawInput, calendar) {\r\n        var rawProps;\r\n        // normalize raw input\r\n        if (typeof rawInput.url === 'string') { // extended form\r\n            rawProps = rawInput;\r\n        }\r\n        else if (typeof rawInput === 'string') { // short form\r\n            rawProps = { url: rawInput };\r\n        }\r\n        if (rawProps) {\r\n            return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n        }\r\n        return false;\r\n    };\r\n    JsonFeedEventSource.prototype.fetch = function (start, end, timezone) {\r\n        var _this = this;\r\n        var ajaxSettings = this.ajaxSettings;\r\n        var onSuccess = ajaxSettings.success;\r\n        var onError = ajaxSettings.error;\r\n        var requestParams = this.buildRequestParams(start, end, timezone);\r\n        // todo: eventually handle the promise's then,\r\n        // don't intercept success/error\r\n        // tho will be a breaking API change\r\n        this.calendar.pushLoading();\r\n        return Promise_1.default.construct(function (onResolve, onReject) {\r\n            $.ajax($.extend({}, // destination\r\n            JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {\r\n                url: _this.url,\r\n                data: requestParams,\r\n                success: function (rawEventDefs, status, xhr) {\r\n                    var callbackRes;\r\n                    _this.calendar.popLoading();\r\n                    if (rawEventDefs) {\r\n                        callbackRes = util_1.applyAll(onSuccess, _this, [rawEventDefs, status, xhr]); // redirect `this`\r\n                        if ($.isArray(callbackRes)) {\r\n                            rawEventDefs = callbackRes;\r\n                        }\r\n                        onResolve(_this.parseEventDefs(rawEventDefs));\r\n                    }\r\n                    else {\r\n                        onReject();\r\n                    }\r\n                },\r\n                error: function (xhr, statusText, errorThrown) {\r\n                    _this.calendar.popLoading();\r\n                    util_1.applyAll(onError, _this, [xhr, statusText, errorThrown]); // redirect `this`\r\n                    onReject();\r\n                }\r\n            }));\r\n        });\r\n    };\r\n    JsonFeedEventSource.prototype.buildRequestParams = function (start, end, timezone) {\r\n        var calendar = this.calendar;\r\n        var ajaxSettings = this.ajaxSettings;\r\n        var startParam;\r\n        var endParam;\r\n        var timezoneParam;\r\n        var customRequestParams;\r\n        var params = {};\r\n        startParam = this.startParam;\r\n        if (startParam == null) {\r\n            startParam = calendar.opt('startParam');\r\n        }\r\n        endParam = this.endParam;\r\n        if (endParam == null) {\r\n            endParam = calendar.opt('endParam');\r\n        }\r\n        timezoneParam = this.timezoneParam;\r\n        if (timezoneParam == null) {\r\n            timezoneParam = calendar.opt('timezoneParam');\r\n        }\r\n        // retrieve any outbound GET/POST $.ajax data from the options\r\n        if ($.isFunction(ajaxSettings.data)) {\r\n            // supplied as a function that returns a key/value object\r\n            customRequestParams = ajaxSettings.data();\r\n        }\r\n        else {\r\n            // probably supplied as a straight key/value object\r\n            customRequestParams = ajaxSettings.data || {};\r\n        }\r\n        $.extend(params, customRequestParams);\r\n        params[startParam] = start.format();\r\n        params[endParam] = end.format();\r\n        if (timezone && timezone !== 'local') {\r\n            params[timezoneParam] = timezone;\r\n        }\r\n        return params;\r\n    };\r\n    JsonFeedEventSource.prototype.getPrimitive = function () {\r\n        return this.url;\r\n    };\r\n    JsonFeedEventSource.prototype.applyMiscProps = function (rawProps) {\r\n        this.ajaxSettings = rawProps;\r\n    };\r\n    JsonFeedEventSource.AJAX_DEFAULTS = {\r\n        dataType: 'json',\r\n        cache: false\r\n    };\r\n    return JsonFeedEventSource;\r\n}(EventSource_1.default));\r\nexports.default = JsonFeedEventSource;\r\nJsonFeedEventSource.defineStandardProps({\r\n    // automatically transfer (true)...\r\n    url: true,\r\n    startParam: true,\r\n    endParam: true,\r\n    timezoneParam: true\r\n});\r\n\n\n/***/ }),\n/* 225 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Iterator = /** @class */ (function () {\r\n    function Iterator(items) {\r\n        this.items = items || [];\r\n    }\r\n    /* Calls a method on every item passing the arguments through */\r\n    Iterator.prototype.proxyCall = function (methodName) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        var results = [];\r\n        this.items.forEach(function (item) {\r\n            results.push(item[methodName].apply(item, args));\r\n        });\r\n        return results;\r\n    };\r\n    return Iterator;\r\n}());\r\nexports.default = Iterator;\r\n\n\n/***/ }),\n/* 226 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\n/* Creates a clone of an element and lets it track the mouse as it moves\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar MouseFollower = /** @class */ (function () {\r\n    function MouseFollower(sourceEl, options) {\r\n        this.isFollowing = false;\r\n        this.isHidden = false;\r\n        this.isAnimating = false; // doing the revert animation?\r\n        this.options = options = options || {};\r\n        this.sourceEl = sourceEl;\r\n        this.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent\r\n    }\r\n    // Causes the element to start following the mouse\r\n    MouseFollower.prototype.start = function (ev) {\r\n        if (!this.isFollowing) {\r\n            this.isFollowing = true;\r\n            this.y0 = util_1.getEvY(ev);\r\n            this.x0 = util_1.getEvX(ev);\r\n            this.topDelta = 0;\r\n            this.leftDelta = 0;\r\n            if (!this.isHidden) {\r\n                this.updatePosition();\r\n            }\r\n            if (util_1.getEvIsTouch(ev)) {\r\n                this.listenTo($(document), 'touchmove', this.handleMove);\r\n            }\r\n            else {\r\n                this.listenTo($(document), 'mousemove', this.handleMove);\r\n            }\r\n        }\r\n    };\r\n    // Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position.\r\n    // `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately.\r\n    MouseFollower.prototype.stop = function (shouldRevert, callback) {\r\n        var _this = this;\r\n        var revertDuration = this.options.revertDuration;\r\n        var complete = function () {\r\n            _this.isAnimating = false;\r\n            _this.removeElement();\r\n            _this.top0 = _this.left0 = null; // reset state for future updatePosition calls\r\n            if (callback) {\r\n                callback();\r\n            }\r\n        };\r\n        if (this.isFollowing && !this.isAnimating) { // disallow more than one stop animation at a time\r\n            this.isFollowing = false;\r\n            this.stopListeningTo($(document));\r\n            if (shouldRevert && revertDuration && !this.isHidden) { // do a revert animation?\r\n                this.isAnimating = true;\r\n                this.el.animate({\r\n                    top: this.top0,\r\n                    left: this.left0\r\n                }, {\r\n                    duration: revertDuration,\r\n                    complete: complete\r\n                });\r\n            }\r\n            else {\r\n                complete();\r\n            }\r\n        }\r\n    };\r\n    // Gets the tracking element. Create it if necessary\r\n    MouseFollower.prototype.getEl = function () {\r\n        var el = this.el;\r\n        if (!el) {\r\n            el = this.el = this.sourceEl.clone()\r\n                .addClass(this.options.additionalClass || '')\r\n                .css({\r\n                position: 'absolute',\r\n                visibility: '',\r\n                display: this.isHidden ? 'none' : '',\r\n                margin: 0,\r\n                right: 'auto',\r\n                bottom: 'auto',\r\n                width: this.sourceEl.width(),\r\n                height: this.sourceEl.height(),\r\n                opacity: this.options.opacity || '',\r\n                zIndex: this.options.zIndex\r\n            });\r\n            // we don't want long taps or any mouse interaction causing selection/menus.\r\n            // would use preventSelection(), but that prevents selectstart, causing problems.\r\n            el.addClass('fc-unselectable');\r\n            el.appendTo(this.parentEl);\r\n        }\r\n        return el;\r\n    };\r\n    // Removes the tracking element if it has already been created\r\n    MouseFollower.prototype.removeElement = function () {\r\n        if (this.el) {\r\n            this.el.remove();\r\n            this.el = null;\r\n        }\r\n    };\r\n    // Update the CSS position of the tracking element\r\n    MouseFollower.prototype.updatePosition = function () {\r\n        var sourceOffset;\r\n        var origin;\r\n        this.getEl(); // ensure this.el\r\n        // make sure origin info was computed\r\n        if (this.top0 == null) {\r\n            sourceOffset = this.sourceEl.offset();\r\n            origin = this.el.offsetParent().offset();\r\n            this.top0 = sourceOffset.top - origin.top;\r\n            this.left0 = sourceOffset.left - origin.left;\r\n        }\r\n        this.el.css({\r\n            top: this.top0 + this.topDelta,\r\n            left: this.left0 + this.leftDelta\r\n        });\r\n    };\r\n    // Gets called when the user moves the mouse\r\n    MouseFollower.prototype.handleMove = function (ev) {\r\n        this.topDelta = util_1.getEvY(ev) - this.y0;\r\n        this.leftDelta = util_1.getEvX(ev) - this.x0;\r\n        if (!this.isHidden) {\r\n            this.updatePosition();\r\n        }\r\n    };\r\n    // Temporarily makes the tracking element invisible. Can be called before following starts\r\n    MouseFollower.prototype.hide = function () {\r\n        if (!this.isHidden) {\r\n            this.isHidden = true;\r\n            if (this.el) {\r\n                this.el.hide();\r\n            }\r\n        }\r\n    };\r\n    // Show the tracking element after it has been temporarily hidden\r\n    MouseFollower.prototype.show = function () {\r\n        if (this.isHidden) {\r\n            this.isHidden = false;\r\n            this.updatePosition();\r\n            this.getEl().show();\r\n        }\r\n    };\r\n    return MouseFollower;\r\n}());\r\nexports.default = MouseFollower;\r\nListenerMixin_1.default.mixInto(MouseFollower);\r\n\n\n/***/ }),\n/* 227 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* A rectangular panel that is absolutely positioned over other content\r\n------------------------------------------------------------------------------------------------------------------------\r\nOptions:\r\n  - className (string)\r\n  - content (HTML string or jQuery element set)\r\n  - parentEl\r\n  - top\r\n  - left\r\n  - right (the x coord of where the right edge should be. not a \"CSS\" right)\r\n  - autoHide (boolean)\r\n  - show (callback)\r\n  - hide (callback)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Popover = /** @class */ (function () {\r\n    function Popover(options) {\r\n        this.isHidden = true;\r\n        this.margin = 10; // the space required between the popover and the edges of the scroll container\r\n        this.options = options || {};\r\n    }\r\n    // Shows the popover on the specified position. Renders it if not already\r\n    Popover.prototype.show = function () {\r\n        if (this.isHidden) {\r\n            if (!this.el) {\r\n                this.render();\r\n            }\r\n            this.el.show();\r\n            this.position();\r\n            this.isHidden = false;\r\n            this.trigger('show');\r\n        }\r\n    };\r\n    // Hides the popover, through CSS, but does not remove it from the DOM\r\n    Popover.prototype.hide = function () {\r\n        if (!this.isHidden) {\r\n            this.el.hide();\r\n            this.isHidden = true;\r\n            this.trigger('hide');\r\n        }\r\n    };\r\n    // Creates `this.el` and renders content inside of it\r\n    Popover.prototype.render = function () {\r\n        var _this = this;\r\n        var options = this.options;\r\n        this.el = $('<div class=\"fc-popover\">')\r\n            .addClass(options.className || '')\r\n            .css({\r\n            // position initially to the top left to avoid creating scrollbars\r\n            top: 0,\r\n            left: 0\r\n        })\r\n            .append(options.content)\r\n            .appendTo(options.parentEl);\r\n        // when a click happens on anything inside with a 'fc-close' className, hide the popover\r\n        this.el.on('click', '.fc-close', function () {\r\n            _this.hide();\r\n        });\r\n        if (options.autoHide) {\r\n            this.listenTo($(document), 'mousedown', this.documentMousedown);\r\n        }\r\n    };\r\n    // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\r\n    Popover.prototype.documentMousedown = function (ev) {\r\n        // only hide the popover if the click happened outside the popover\r\n        if (this.el && !$(ev.target).closest(this.el).length) {\r\n            this.hide();\r\n        }\r\n    };\r\n    // Hides and unregisters any handlers\r\n    Popover.prototype.removeElement = function () {\r\n        this.hide();\r\n        if (this.el) {\r\n            this.el.remove();\r\n            this.el = null;\r\n        }\r\n        this.stopListeningTo($(document), 'mousedown');\r\n    };\r\n    // Positions the popover optimally, using the top/left/right options\r\n    Popover.prototype.position = function () {\r\n        var options = this.options;\r\n        var origin = this.el.offsetParent().offset();\r\n        var width = this.el.outerWidth();\r\n        var height = this.el.outerHeight();\r\n        var windowEl = $(window);\r\n        var viewportEl = util_1.getScrollParent(this.el);\r\n        var viewportTop;\r\n        var viewportLeft;\r\n        var viewportOffset;\r\n        var top; // the \"position\" (not \"offset\") values for the popover\r\n        var left; //\r\n        // compute top and left\r\n        top = options.top || 0;\r\n        if (options.left !== undefined) {\r\n            left = options.left;\r\n        }\r\n        else if (options.right !== undefined) {\r\n            left = options.right - width; // derive the left value from the right value\r\n        }\r\n        else {\r\n            left = 0;\r\n        }\r\n        if (viewportEl.is(window) || viewportEl.is(document)) { // normalize getScrollParent's result\r\n            viewportEl = windowEl;\r\n            viewportTop = 0; // the window is always at the top left\r\n            viewportLeft = 0; // (and .offset() won't work if called here)\r\n        }\r\n        else {\r\n            viewportOffset = viewportEl.offset();\r\n            viewportTop = viewportOffset.top;\r\n            viewportLeft = viewportOffset.left;\r\n        }\r\n        // if the window is scrolled, it causes the visible area to be further down\r\n        viewportTop += windowEl.scrollTop();\r\n        viewportLeft += windowEl.scrollLeft();\r\n        // constrain to the view port. if constrained by two edges, give precedence to top/left\r\n        if (options.viewportConstrain !== false) {\r\n            top = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin);\r\n            top = Math.max(top, viewportTop + this.margin);\r\n            left = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin);\r\n            left = Math.max(left, viewportLeft + this.margin);\r\n        }\r\n        this.el.css({\r\n            top: top - origin.top,\r\n            left: left - origin.left\r\n        });\r\n    };\r\n    // Triggers a callback. Calls a function in the option hash of the same name.\r\n    // Arguments beyond the first `name` are forwarded on.\r\n    // TODO: better code reuse for this. Repeat code\r\n    Popover.prototype.trigger = function (name) {\r\n        if (this.options[name]) {\r\n            this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\r\n        }\r\n    };\r\n    return Popover;\r\n}());\r\nexports.default = Popover;\r\nListenerMixin_1.default.mixInto(Popover);\r\n\n\n/***/ }),\n/* 228 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar TaskQueue = /** @class */ (function () {\r\n    function TaskQueue() {\r\n        this.q = [];\r\n        this.isPaused = false;\r\n        this.isRunning = false;\r\n    }\r\n    TaskQueue.prototype.queue = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        this.q.push.apply(this.q, args); // append\r\n        this.tryStart();\r\n    };\r\n    TaskQueue.prototype.pause = function () {\r\n        this.isPaused = true;\r\n    };\r\n    TaskQueue.prototype.resume = function () {\r\n        this.isPaused = false;\r\n        this.tryStart();\r\n    };\r\n    TaskQueue.prototype.getIsIdle = function () {\r\n        return !this.isRunning && !this.isPaused;\r\n    };\r\n    TaskQueue.prototype.tryStart = function () {\r\n        if (!this.isRunning && this.canRunNext()) {\r\n            this.isRunning = true;\r\n            this.trigger('start');\r\n            this.runRemaining();\r\n        }\r\n    };\r\n    TaskQueue.prototype.canRunNext = function () {\r\n        return !this.isPaused && this.q.length;\r\n    };\r\n    TaskQueue.prototype.runRemaining = function () {\r\n        var _this = this;\r\n        var task;\r\n        var res;\r\n        do {\r\n            task = this.q.shift(); // always freshly reference q. might have been reassigned.\r\n            res = this.runTask(task);\r\n            if (res && res.then) {\r\n                res.then(function () {\r\n                    if (_this.canRunNext()) {\r\n                        _this.runRemaining();\r\n                    }\r\n                });\r\n                return; // prevent marking as stopped\r\n            }\r\n        } while (this.canRunNext());\r\n        this.trigger('stop'); // not really a 'stop' ... more of a 'drained'\r\n        this.isRunning = false;\r\n        // if 'stop' handler added more tasks.... TODO: write test for this\r\n        this.tryStart();\r\n    };\r\n    TaskQueue.prototype.runTask = function (task) {\r\n        return task(); // task *is* the function, but subclasses can change the format of a task\r\n    };\r\n    return TaskQueue;\r\n}());\r\nexports.default = TaskQueue;\r\nEmitterMixin_1.default.mixInto(TaskQueue);\r\n\n\n/***/ }),\n/* 229 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar TaskQueue_1 = __webpack_require__(228);\r\nvar RenderQueue = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RenderQueue, _super);\r\n    function RenderQueue(waitsByNamespace) {\r\n        var _this = _super.call(this) || this;\r\n        _this.waitsByNamespace = waitsByNamespace || {};\r\n        return _this;\r\n    }\r\n    RenderQueue.prototype.queue = function (taskFunc, namespace, type) {\r\n        var task = {\r\n            func: taskFunc,\r\n            namespace: namespace,\r\n            type: type\r\n        };\r\n        var waitMs;\r\n        if (namespace) {\r\n            waitMs = this.waitsByNamespace[namespace];\r\n        }\r\n        if (this.waitNamespace) {\r\n            if (namespace === this.waitNamespace && waitMs != null) {\r\n                this.delayWait(waitMs);\r\n            }\r\n            else {\r\n                this.clearWait();\r\n                this.tryStart();\r\n            }\r\n        }\r\n        if (this.compoundTask(task)) { // appended to queue?\r\n            if (!this.waitNamespace && waitMs != null) {\r\n                this.startWait(namespace, waitMs);\r\n            }\r\n            else {\r\n                this.tryStart();\r\n            }\r\n        }\r\n    };\r\n    RenderQueue.prototype.startWait = function (namespace, waitMs) {\r\n        this.waitNamespace = namespace;\r\n        this.spawnWait(waitMs);\r\n    };\r\n    RenderQueue.prototype.delayWait = function (waitMs) {\r\n        clearTimeout(this.waitId);\r\n        this.spawnWait(waitMs);\r\n    };\r\n    RenderQueue.prototype.spawnWait = function (waitMs) {\r\n        var _this = this;\r\n        this.waitId = setTimeout(function () {\r\n            _this.waitNamespace = null;\r\n            _this.tryStart();\r\n        }, waitMs);\r\n    };\r\n    RenderQueue.prototype.clearWait = function () {\r\n        if (this.waitNamespace) {\r\n            clearTimeout(this.waitId);\r\n            this.waitId = null;\r\n            this.waitNamespace = null;\r\n        }\r\n    };\r\n    RenderQueue.prototype.canRunNext = function () {\r\n        if (!_super.prototype.canRunNext.call(this)) {\r\n            return false;\r\n        }\r\n        // waiting for a certain namespace to stop receiving tasks?\r\n        if (this.waitNamespace) {\r\n            var q = this.q;\r\n            // if there was a different namespace task in the meantime,\r\n            // that forces all previously-waiting tasks to suddenly execute.\r\n            // TODO: find a way to do this in constant time.\r\n            for (var i = 0; i < q.length; i++) {\r\n                if (q[i].namespace !== this.waitNamespace) {\r\n                    return true; // allow execution\r\n                }\r\n            }\r\n            return false;\r\n        }\r\n        return true;\r\n    };\r\n    RenderQueue.prototype.runTask = function (task) {\r\n        task.func();\r\n    };\r\n    RenderQueue.prototype.compoundTask = function (newTask) {\r\n        var q = this.q;\r\n        var shouldAppend = true;\r\n        var i;\r\n        var task;\r\n        if (newTask.namespace && newTask.type === 'destroy') {\r\n            // remove all init/add/remove ops with same namespace, regardless of order\r\n            for (i = q.length - 1; i >= 0; i--) {\r\n                task = q[i];\r\n                if (task.namespace === newTask.namespace) {\r\n                    switch (task.type) {\r\n                        case 'init':\r\n                            shouldAppend = false;\r\n                        // the latest destroy is cancelled out by not doing the init\r\n                        /* falls through */\r\n                        case 'add':\r\n                        /* falls through */\r\n                        case 'remove':\r\n                            q.splice(i, 1); // remove task\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        if (shouldAppend) {\r\n            q.push(newTask);\r\n        }\r\n        return shouldAppend;\r\n    };\r\n    return RenderQueue;\r\n}(TaskQueue_1.default));\r\nexports.default = RenderQueue;\r\n\n\n/***/ }),\n/* 230 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Model_1 = __webpack_require__(51);\r\nvar Component = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Component, _super);\r\n    function Component() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Component.prototype.setElement = function (el) {\r\n        this.el = el;\r\n        this.bindGlobalHandlers();\r\n        this.renderSkeleton();\r\n        this.set('isInDom', true);\r\n    };\r\n    Component.prototype.removeElement = function () {\r\n        this.unset('isInDom');\r\n        this.unrenderSkeleton();\r\n        this.unbindGlobalHandlers();\r\n        this.el.remove();\r\n        // NOTE: don't null-out this.el in case the View was destroyed within an API callback.\r\n        // We don't null-out the View's other jQuery element references upon destroy,\r\n        //  so we shouldn't kill this.el either.\r\n    };\r\n    Component.prototype.bindGlobalHandlers = function () {\r\n        // subclasses can override\r\n    };\r\n    Component.prototype.unbindGlobalHandlers = function () {\r\n        // subclasses can override\r\n    };\r\n    /*\r\n    NOTE: Can't have a `render` method. Read the deprecation notice in View::executeDateRender\r\n    */\r\n    // Renders the basic structure of the view before any content is rendered\r\n    Component.prototype.renderSkeleton = function () {\r\n        // subclasses should implement\r\n    };\r\n    // Unrenders the basic structure of the view\r\n    Component.prototype.unrenderSkeleton = function () {\r\n        // subclasses should implement\r\n    };\r\n    return Component;\r\n}(Model_1.default));\r\nexports.default = Component;\r\n\n\n/***/ }),\n/* 231 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar date_formatting_1 = __webpack_require__(49);\r\nvar Component_1 = __webpack_require__(230);\r\nvar util_2 = __webpack_require__(19);\r\nvar DateComponent = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DateComponent, _super);\r\n    function DateComponent(_view, _options) {\r\n        var _this = _super.call(this) || this;\r\n        _this.isRTL = false; // frequently accessed options\r\n        _this.hitsNeededDepth = 0; // necessary because multiple callers might need the same hits\r\n        _this.hasAllDayBusinessHours = false; // TODO: unify with largeUnit and isTimeScale?\r\n        _this.isDatesRendered = false;\r\n        // hack to set options prior to the this.opt calls\r\n        if (_view) {\r\n            _this['view'] = _view;\r\n        }\r\n        if (_options) {\r\n            _this['options'] = _options;\r\n        }\r\n        _this.uid = String(DateComponent.guid++);\r\n        _this.childrenByUid = {};\r\n        _this.nextDayThreshold = moment.duration(_this.opt('nextDayThreshold'));\r\n        _this.isRTL = _this.opt('isRTL');\r\n        if (_this.fillRendererClass) {\r\n            _this.fillRenderer = new _this.fillRendererClass(_this);\r\n        }\r\n        if (_this.eventRendererClass) { // fillRenderer is optional -----v\r\n            _this.eventRenderer = new _this.eventRendererClass(_this, _this.fillRenderer);\r\n        }\r\n        if (_this.helperRendererClass && _this.eventRenderer) {\r\n            _this.helperRenderer = new _this.helperRendererClass(_this, _this.eventRenderer);\r\n        }\r\n        if (_this.businessHourRendererClass && _this.fillRenderer) {\r\n            _this.businessHourRenderer = new _this.businessHourRendererClass(_this, _this.fillRenderer);\r\n        }\r\n        return _this;\r\n    }\r\n    DateComponent.prototype.addChild = function (child) {\r\n        if (!this.childrenByUid[child.uid]) {\r\n            this.childrenByUid[child.uid] = child;\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    DateComponent.prototype.removeChild = function (child) {\r\n        if (this.childrenByUid[child.uid]) {\r\n            delete this.childrenByUid[child.uid];\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    // TODO: only do if isInDom?\r\n    // TODO: make part of Component, along with children/batch-render system?\r\n    DateComponent.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        this.callChildren('updateSize', arguments);\r\n    };\r\n    // Options\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.opt = function (name) {\r\n        return this._getView().opt(name); // default implementation\r\n    };\r\n    DateComponent.prototype.publiclyTrigger = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var calendar = this._getCalendar();\r\n        return calendar.publiclyTrigger.apply(calendar, args);\r\n    };\r\n    DateComponent.prototype.hasPublicHandlers = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var calendar = this._getCalendar();\r\n        return calendar.hasPublicHandlers.apply(calendar, args);\r\n    };\r\n    // Date\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.executeDateRender = function (dateProfile) {\r\n        this.dateProfile = dateProfile; // for rendering\r\n        this.renderDates(dateProfile);\r\n        this.isDatesRendered = true;\r\n        this.callChildren('executeDateRender', arguments);\r\n    };\r\n    DateComponent.prototype.executeDateUnrender = function () {\r\n        this.callChildren('executeDateUnrender', arguments);\r\n        this.dateProfile = null;\r\n        this.unrenderDates();\r\n        this.isDatesRendered = false;\r\n    };\r\n    // date-cell content only\r\n    DateComponent.prototype.renderDates = function (dateProfile) {\r\n        // subclasses should implement\r\n    };\r\n    // date-cell content only\r\n    DateComponent.prototype.unrenderDates = function () {\r\n        // subclasses should override\r\n    };\r\n    // Now-Indicator\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Returns a string unit, like 'second' or 'minute' that defined how often the current time indicator\r\n    // should be refreshed. If something falsy is returned, no time indicator is rendered at all.\r\n    DateComponent.prototype.getNowIndicatorUnit = function () {\r\n        // subclasses should implement\r\n    };\r\n    // Renders a current time indicator at the given datetime\r\n    DateComponent.prototype.renderNowIndicator = function (date) {\r\n        this.callChildren('renderNowIndicator', arguments);\r\n    };\r\n    // Undoes the rendering actions from renderNowIndicator\r\n    DateComponent.prototype.unrenderNowIndicator = function () {\r\n        this.callChildren('unrenderNowIndicator', arguments);\r\n    };\r\n    // Business Hours\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.renderBusinessHours = function (businessHourGenerator) {\r\n        if (this.businessHourRenderer) {\r\n            this.businessHourRenderer.render(businessHourGenerator);\r\n        }\r\n        this.callChildren('renderBusinessHours', arguments);\r\n    };\r\n    // Unrenders previously-rendered business-hours\r\n    DateComponent.prototype.unrenderBusinessHours = function () {\r\n        this.callChildren('unrenderBusinessHours', arguments);\r\n        if (this.businessHourRenderer) {\r\n            this.businessHourRenderer.unrender();\r\n        }\r\n    };\r\n    // Event Displaying\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.executeEventRender = function (eventsPayload) {\r\n        if (this.eventRenderer) {\r\n            this.eventRenderer.rangeUpdated(); // poorly named now\r\n            this.eventRenderer.render(eventsPayload);\r\n        }\r\n        else if (this['renderEvents']) { // legacy\r\n            this['renderEvents'](convertEventsPayloadToLegacyArray(eventsPayload));\r\n        }\r\n        this.callChildren('executeEventRender', arguments);\r\n    };\r\n    DateComponent.prototype.executeEventUnrender = function () {\r\n        this.callChildren('executeEventUnrender', arguments);\r\n        if (this.eventRenderer) {\r\n            this.eventRenderer.unrender();\r\n        }\r\n        else if (this['destroyEvents']) { // legacy\r\n            this['destroyEvents']();\r\n        }\r\n    };\r\n    DateComponent.prototype.getBusinessHourSegs = function () {\r\n        var segs = this.getOwnBusinessHourSegs();\r\n        this.iterChildren(function (child) {\r\n            segs.push.apply(segs, child.getBusinessHourSegs());\r\n        });\r\n        return segs;\r\n    };\r\n    DateComponent.prototype.getOwnBusinessHourSegs = function () {\r\n        if (this.businessHourRenderer) {\r\n            return this.businessHourRenderer.getSegs();\r\n        }\r\n        return [];\r\n    };\r\n    DateComponent.prototype.getEventSegs = function () {\r\n        var segs = this.getOwnEventSegs();\r\n        this.iterChildren(function (child) {\r\n            segs.push.apply(segs, child.getEventSegs());\r\n        });\r\n        return segs;\r\n    };\r\n    DateComponent.prototype.getOwnEventSegs = function () {\r\n        if (this.eventRenderer) {\r\n            return this.eventRenderer.getSegs();\r\n        }\r\n        return [];\r\n    };\r\n    // Event Rendering Triggering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.triggerAfterEventsRendered = function () {\r\n        this.triggerAfterEventSegsRendered(this.getEventSegs());\r\n        this.publiclyTrigger('eventAfterAllRender', {\r\n            context: this,\r\n            args: [this]\r\n        });\r\n    };\r\n    DateComponent.prototype.triggerAfterEventSegsRendered = function (segs) {\r\n        var _this = this;\r\n        // an optimization, because getEventLegacy is expensive\r\n        if (this.hasPublicHandlers('eventAfterRender')) {\r\n            segs.forEach(function (seg) {\r\n                var legacy;\r\n                if (seg.el) { // necessary?\r\n                    legacy = seg.footprint.getEventLegacy();\r\n                    _this.publiclyTrigger('eventAfterRender', {\r\n                        context: legacy,\r\n                        args: [legacy, seg.el, _this]\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    };\r\n    DateComponent.prototype.triggerBeforeEventsDestroyed = function () {\r\n        this.triggerBeforeEventSegsDestroyed(this.getEventSegs());\r\n    };\r\n    DateComponent.prototype.triggerBeforeEventSegsDestroyed = function (segs) {\r\n        var _this = this;\r\n        if (this.hasPublicHandlers('eventDestroy')) {\r\n            segs.forEach(function (seg) {\r\n                var legacy;\r\n                if (seg.el) { // necessary?\r\n                    legacy = seg.footprint.getEventLegacy();\r\n                    _this.publiclyTrigger('eventDestroy', {\r\n                        context: legacy,\r\n                        args: [legacy, seg.el, _this]\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    };\r\n    // Event Rendering Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Hides all rendered event segments linked to the given event\r\n    // RECURSIVE with subcomponents\r\n    DateComponent.prototype.showEventsWithId = function (eventDefId) {\r\n        this.getEventSegs().forEach(function (seg) {\r\n            if (seg.footprint.eventDef.id === eventDefId &&\r\n                seg.el // necessary?\r\n            ) {\r\n                seg.el.css('visibility', '');\r\n            }\r\n        });\r\n        this.callChildren('showEventsWithId', arguments);\r\n    };\r\n    // Shows all rendered event segments linked to the given event\r\n    // RECURSIVE with subcomponents\r\n    DateComponent.prototype.hideEventsWithId = function (eventDefId) {\r\n        this.getEventSegs().forEach(function (seg) {\r\n            if (seg.footprint.eventDef.id === eventDefId &&\r\n                seg.el // necessary?\r\n            ) {\r\n                seg.el.css('visibility', 'hidden');\r\n            }\r\n        });\r\n        this.callChildren('hideEventsWithId', arguments);\r\n    };\r\n    // Drag-n-Drop Rendering (for both events and external elements)\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders a visual indication of a event or external-element drag over the given drop zone.\r\n    // If an external-element, seg will be `null`.\r\n    // Must return elements used for any mock events.\r\n    DateComponent.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var renderedHelper = false;\r\n        this.iterChildren(function (child) {\r\n            if (child.renderDrag(eventFootprints, seg, isTouch)) {\r\n                renderedHelper = true;\r\n            }\r\n        });\r\n        return renderedHelper;\r\n    };\r\n    // Unrenders a visual indication of an event or external-element being dragged.\r\n    DateComponent.prototype.unrenderDrag = function () {\r\n        this.callChildren('unrenderDrag', arguments);\r\n    };\r\n    // Event Resizing\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders a visual indication of an event being resized.\r\n    DateComponent.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        this.callChildren('renderEventResize', arguments);\r\n    };\r\n    // Unrenders a visual indication of an event being resized.\r\n    DateComponent.prototype.unrenderEventResize = function () {\r\n        this.callChildren('unrenderEventResize', arguments);\r\n    };\r\n    // Selection\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders a visual indication of the selection\r\n    // TODO: rename to `renderSelection` after legacy is gone\r\n    DateComponent.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n        this.renderHighlight(componentFootprint);\r\n        this.callChildren('renderSelectionFootprint', arguments);\r\n    };\r\n    // Unrenders a visual indication of selection\r\n    DateComponent.prototype.unrenderSelection = function () {\r\n        this.unrenderHighlight();\r\n        this.callChildren('unrenderSelection', arguments);\r\n    };\r\n    // Highlight\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders an emphasis on the given date range. Given a span (unzoned start/end and other misc data)\r\n    DateComponent.prototype.renderHighlight = function (componentFootprint) {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.renderFootprint('highlight', componentFootprint, {\r\n                getClasses: function () {\r\n                    return ['fc-highlight'];\r\n                }\r\n            });\r\n        }\r\n        this.callChildren('renderHighlight', arguments);\r\n    };\r\n    // Unrenders the emphasis on a date range\r\n    DateComponent.prototype.unrenderHighlight = function () {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.unrender('highlight');\r\n        }\r\n        this.callChildren('unrenderHighlight', arguments);\r\n    };\r\n    // Hit Areas\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // just because all DateComponents support this interface\r\n    // doesn't mean they need to have their own internal coord system. they can defer to sub-components.\r\n    DateComponent.prototype.hitsNeeded = function () {\r\n        if (!(this.hitsNeededDepth++)) {\r\n            this.prepareHits();\r\n        }\r\n        this.callChildren('hitsNeeded', arguments);\r\n    };\r\n    DateComponent.prototype.hitsNotNeeded = function () {\r\n        if (this.hitsNeededDepth && !(--this.hitsNeededDepth)) {\r\n            this.releaseHits();\r\n        }\r\n        this.callChildren('hitsNotNeeded', arguments);\r\n    };\r\n    DateComponent.prototype.prepareHits = function () {\r\n        // subclasses can implement\r\n    };\r\n    DateComponent.prototype.releaseHits = function () {\r\n        // subclasses can implement\r\n    };\r\n    // Given coordinates from the topleft of the document, return data about the date-related area underneath.\r\n    // Can return an object with arbitrary properties (although top/right/left/bottom are encouraged).\r\n    // Must have a `grid` property, a reference to this current grid. TODO: avoid this\r\n    // The returned object will be processed by getHitFootprint and getHitEl.\r\n    DateComponent.prototype.queryHit = function (leftOffset, topOffset) {\r\n        var childrenByUid = this.childrenByUid;\r\n        var uid;\r\n        var hit;\r\n        for (uid in childrenByUid) {\r\n            hit = childrenByUid[uid].queryHit(leftOffset, topOffset);\r\n            if (hit) {\r\n                break;\r\n            }\r\n        }\r\n        return hit;\r\n    };\r\n    DateComponent.prototype.getSafeHitFootprint = function (hit) {\r\n        var footprint = this.getHitFootprint(hit);\r\n        if (!this.dateProfile.activeUnzonedRange.containsRange(footprint.unzonedRange)) {\r\n            return null;\r\n        }\r\n        return footprint;\r\n    };\r\n    DateComponent.prototype.getHitFootprint = function (hit) {\r\n        // what about being abstract!?\r\n    };\r\n    // Given position-level information about a date-related area within the grid,\r\n    // should return a jQuery element that best represents it. passed to dayClick callback.\r\n    DateComponent.prototype.getHitEl = function (hit) {\r\n        // what about being abstract!?\r\n    };\r\n    /* Converting eventRange -> eventFootprint\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DateComponent.prototype.eventRangesToEventFootprints = function (eventRanges) {\r\n        var eventFootprints = [];\r\n        var i;\r\n        for (i = 0; i < eventRanges.length; i++) {\r\n            eventFootprints.push.apply(// append\r\n            eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\r\n        }\r\n        return eventFootprints;\r\n    };\r\n    DateComponent.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n        return [util_2.eventRangeToEventFootprint(eventRange)];\r\n    };\r\n    /* Converting componentFootprint/eventFootprint -> segs\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DateComponent.prototype.eventFootprintsToSegs = function (eventFootprints) {\r\n        var segs = [];\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            segs.push.apply(segs, this.eventFootprintToSegs(eventFootprints[i]));\r\n        }\r\n        return segs;\r\n    };\r\n    // Given an event's span (unzoned start/end and other misc data), and the event itself,\r\n    // slices into segments and attaches event-derived properties to them.\r\n    // eventSpan - { start, end, isStart, isEnd, otherthings... }\r\n    DateComponent.prototype.eventFootprintToSegs = function (eventFootprint) {\r\n        var unzonedRange = eventFootprint.componentFootprint.unzonedRange;\r\n        var segs;\r\n        var i;\r\n        var seg;\r\n        segs = this.componentFootprintToSegs(eventFootprint.componentFootprint);\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            if (!unzonedRange.isStart) {\r\n                seg.isStart = false;\r\n            }\r\n            if (!unzonedRange.isEnd) {\r\n                seg.isEnd = false;\r\n            }\r\n            seg.footprint = eventFootprint;\r\n            // TODO: rename to seg.eventFootprint\r\n        }\r\n        return segs;\r\n    };\r\n    DateComponent.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n        return [];\r\n    };\r\n    // Utils\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.callChildren = function (methodName, args) {\r\n        this.iterChildren(function (child) {\r\n            child[methodName].apply(child, args);\r\n        });\r\n    };\r\n    DateComponent.prototype.iterChildren = function (func) {\r\n        var childrenByUid = this.childrenByUid;\r\n        var uid;\r\n        for (uid in childrenByUid) {\r\n            func(childrenByUid[uid]);\r\n        }\r\n    };\r\n    DateComponent.prototype._getCalendar = function () {\r\n        var t = this;\r\n        return t.calendar || t.view.calendar;\r\n    };\r\n    DateComponent.prototype._getView = function () {\r\n        return this.view;\r\n    };\r\n    DateComponent.prototype._getDateProfile = function () {\r\n        return this._getView().get('dateProfile');\r\n    };\r\n    // Generates HTML for an anchor to another view into the calendar.\r\n    // Will either generate an <a> tag or a non-clickable <span> tag, depending on enabled settings.\r\n    // `gotoOptions` can either be a moment input, or an object with the form:\r\n    // { date, type, forceOff }\r\n    // `type` is a view-type like \"day\" or \"week\". default value is \"day\".\r\n    // `attrs` and `innerHtml` are use to generate the rest of the HTML tag.\r\n    DateComponent.prototype.buildGotoAnchorHtml = function (gotoOptions, attrs, innerHtml) {\r\n        var date;\r\n        var type;\r\n        var forceOff;\r\n        var finalOptions;\r\n        if ($.isPlainObject(gotoOptions)) {\r\n            date = gotoOptions.date;\r\n            type = gotoOptions.type;\r\n            forceOff = gotoOptions.forceOff;\r\n        }\r\n        else {\r\n            date = gotoOptions; // a single moment input\r\n        }\r\n        date = moment_ext_1.default(date); // if a string, parse it\r\n        finalOptions = {\r\n            date: date.format('YYYY-MM-DD'),\r\n            type: type || 'day'\r\n        };\r\n        if (typeof attrs === 'string') {\r\n            innerHtml = attrs;\r\n            attrs = null;\r\n        }\r\n        attrs = attrs ? ' ' + util_1.attrsToStr(attrs) : ''; // will have a leading space\r\n        innerHtml = innerHtml || '';\r\n        if (!forceOff && this.opt('navLinks')) {\r\n            return '<a' + attrs +\r\n                ' data-goto=\"' + util_1.htmlEscape(JSON.stringify(finalOptions)) + '\">' +\r\n                innerHtml +\r\n                '</a>';\r\n        }\r\n        else {\r\n            return '<span' + attrs + '>' +\r\n                innerHtml +\r\n                '</span>';\r\n        }\r\n    };\r\n    DateComponent.prototype.getAllDayHtml = function () {\r\n        return this.opt('allDayHtml') || util_1.htmlEscape(this.opt('allDayText'));\r\n    };\r\n    // Computes HTML classNames for a single-day element\r\n    DateComponent.prototype.getDayClasses = function (date, noThemeHighlight) {\r\n        var view = this._getView();\r\n        var classes = [];\r\n        var today;\r\n        if (!this.dateProfile.activeUnzonedRange.containsDate(date)) {\r\n            classes.push('fc-disabled-day'); // TODO: jQuery UI theme?\r\n        }\r\n        else {\r\n            classes.push('fc-' + util_1.dayIDs[date.day()]);\r\n            if (view.isDateInOtherMonth(date, this.dateProfile)) { // TODO: use DateComponent subclass somehow\r\n                classes.push('fc-other-month');\r\n            }\r\n            today = view.calendar.getNow();\r\n            if (date.isSame(today, 'day')) {\r\n                classes.push('fc-today');\r\n                if (noThemeHighlight !== true) {\r\n                    classes.push(view.calendar.theme.getClass('today'));\r\n                }\r\n            }\r\n            else if (date < today) {\r\n                classes.push('fc-past');\r\n            }\r\n            else {\r\n                classes.push('fc-future');\r\n            }\r\n        }\r\n        return classes;\r\n    };\r\n    // Utility for formatting a range. Accepts a range object, formatting string, and optional separator.\r\n    // Displays all-day ranges naturally, with an inclusive end. Takes the current isRTL into account.\r\n    // The timezones of the dates within `range` will be respected.\r\n    DateComponent.prototype.formatRange = function (range, isAllDay, formatStr, separator) {\r\n        var end = range.end;\r\n        if (isAllDay) {\r\n            end = end.clone().subtract(1); // convert to inclusive. last ms of previous day\r\n        }\r\n        return date_formatting_1.formatRange(range.start, end, formatStr, separator, this.isRTL);\r\n    };\r\n    // Compute the number of the give units in the \"current\" range.\r\n    // Will return a floating-point number. Won't round.\r\n    DateComponent.prototype.currentRangeAs = function (unit) {\r\n        return this._getDateProfile().currentUnzonedRange.as(unit);\r\n    };\r\n    // Returns the date range of the full days the given range visually appears to occupy.\r\n    // Returns a plain object with start/end, NOT an UnzonedRange!\r\n    DateComponent.prototype.computeDayRange = function (unzonedRange) {\r\n        var calendar = this._getCalendar();\r\n        var startDay = calendar.msToUtcMoment(unzonedRange.startMs, true); // the beginning of the day the range starts\r\n        var end = calendar.msToUtcMoment(unzonedRange.endMs);\r\n        var endTimeMS = +end.time(); // # of milliseconds into `endDay`\r\n        var endDay = end.clone().stripTime(); // the beginning of the day the range exclusively ends\r\n        // If the end time is actually inclusively part of the next day and is equal to or\r\n        // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\r\n        // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\r\n        if (endTimeMS && endTimeMS >= this.nextDayThreshold) {\r\n            endDay.add(1, 'days');\r\n        }\r\n        // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\r\n        if (endDay <= startDay) {\r\n            endDay = startDay.clone().add(1, 'days');\r\n        }\r\n        return { start: startDay, end: endDay };\r\n    };\r\n    // Does the given range visually appear to occupy more than one day?\r\n    DateComponent.prototype.isMultiDayRange = function (unzonedRange) {\r\n        var dayRange = this.computeDayRange(unzonedRange);\r\n        return dayRange.end.diff(dayRange.start, 'days') > 1;\r\n    };\r\n    DateComponent.guid = 0; // TODO: better system for this?\r\n    return DateComponent;\r\n}(Component_1.default));\r\nexports.default = DateComponent;\r\n// legacy\r\nfunction convertEventsPayloadToLegacyArray(eventsPayload) {\r\n    var eventDefId;\r\n    var eventInstances;\r\n    var legacyEvents = [];\r\n    var i;\r\n    for (eventDefId in eventsPayload) {\r\n        eventInstances = eventsPayload[eventDefId].eventInstances;\r\n        for (i = 0; i < eventInstances.length; i++) {\r\n            legacyEvents.push(eventInstances[i].toLegacy());\r\n        }\r\n    }\r\n    return legacyEvents;\r\n}\r\n\n\n/***/ }),\n/* 232 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar Iterator_1 = __webpack_require__(225);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Toolbar_1 = __webpack_require__(257);\r\nvar OptionsManager_1 = __webpack_require__(258);\r\nvar ViewSpecManager_1 = __webpack_require__(259);\r\nvar Constraints_1 = __webpack_require__(217);\r\nvar locale_1 = __webpack_require__(32);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventManager_1 = __webpack_require__(220);\r\nvar BusinessHourGenerator_1 = __webpack_require__(218);\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nvar Calendar = /** @class */ (function () {\r\n    function Calendar(el, overrides) {\r\n        this.loadingLevel = 0; // number of simultaneous loading tasks\r\n        this.ignoreUpdateViewSize = 0;\r\n        this.freezeContentHeightDepth = 0;\r\n        // declare the current calendar instance relies on GlobalEmitter. needed for garbage collection.\r\n        // unneeded() is called in destroy.\r\n        GlobalEmitter_1.default.needed();\r\n        this.el = el;\r\n        this.viewsByType = {};\r\n        this.optionsManager = new OptionsManager_1.default(this, overrides);\r\n        this.viewSpecManager = new ViewSpecManager_1.default(this.optionsManager, this);\r\n        this.initMomentInternals(); // needs to happen after options hash initialized\r\n        this.initCurrentDate();\r\n        this.initEventManager();\r\n        this.constraints = new Constraints_1.default(this.eventManager, this);\r\n        this.constructed();\r\n    }\r\n    Calendar.prototype.constructed = function () {\r\n        // useful for monkeypatching. used?\r\n    };\r\n    Calendar.prototype.getView = function () {\r\n        return this.view;\r\n    };\r\n    Calendar.prototype.publiclyTrigger = function (name, triggerInfo) {\r\n        var optHandler = this.opt(name);\r\n        var context;\r\n        var args;\r\n        if ($.isPlainObject(triggerInfo)) {\r\n            context = triggerInfo.context;\r\n            args = triggerInfo.args;\r\n        }\r\n        else if ($.isArray(triggerInfo)) {\r\n            args = triggerInfo;\r\n        }\r\n        if (context == null) {\r\n            context = this.el[0]; // fallback context\r\n        }\r\n        if (!args) {\r\n            args = [];\r\n        }\r\n        this.triggerWith(name, context, args); // Emitter's method\r\n        if (optHandler) {\r\n            return optHandler.apply(context, args);\r\n        }\r\n    };\r\n    Calendar.prototype.hasPublicHandlers = function (name) {\r\n        return this.hasHandlers(name) ||\r\n            this.opt(name); // handler specified in options\r\n    };\r\n    // Options Public API\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // public getter/setter\r\n    Calendar.prototype.option = function (name, value) {\r\n        var newOptionHash;\r\n        if (typeof name === 'string') {\r\n            if (value === undefined) { // getter\r\n                return this.optionsManager.get(name);\r\n            }\r\n            else { // setter for individual option\r\n                newOptionHash = {};\r\n                newOptionHash[name] = value;\r\n                this.optionsManager.add(newOptionHash);\r\n            }\r\n        }\r\n        else if (typeof name === 'object') { // compound setter with object input\r\n            this.optionsManager.add(name);\r\n        }\r\n    };\r\n    // private getter\r\n    Calendar.prototype.opt = function (name) {\r\n        return this.optionsManager.get(name);\r\n    };\r\n    // View\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Given a view name for a custom view or a standard view, creates a ready-to-go View object\r\n    Calendar.prototype.instantiateView = function (viewType) {\r\n        var spec = this.viewSpecManager.getViewSpec(viewType);\r\n        if (!spec) {\r\n            throw new Error(\"View type \\\"\" + viewType + \"\\\" is not valid\");\r\n        }\r\n        return new spec['class'](this, spec);\r\n    };\r\n    // Returns a boolean about whether the view is okay to instantiate at some point\r\n    Calendar.prototype.isValidViewType = function (viewType) {\r\n        return Boolean(this.viewSpecManager.getViewSpec(viewType));\r\n    };\r\n    Calendar.prototype.changeView = function (viewName, dateOrRange) {\r\n        if (dateOrRange) {\r\n            if (dateOrRange.start && dateOrRange.end) { // a range\r\n                this.optionsManager.recordOverrides({\r\n                    visibleRange: dateOrRange\r\n                });\r\n            }\r\n            else { // a date\r\n                this.currentDate = this.moment(dateOrRange).stripZone(); // just like gotoDate\r\n            }\r\n        }\r\n        this.renderView(viewName);\r\n    };\r\n    // Forces navigation to a view for the given date.\r\n    // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\r\n    Calendar.prototype.zoomTo = function (newDate, viewType) {\r\n        var spec;\r\n        viewType = viewType || 'day'; // day is default zoom\r\n        spec = this.viewSpecManager.getViewSpec(viewType) ||\r\n            this.viewSpecManager.getUnitViewSpec(viewType);\r\n        this.currentDate = newDate.clone();\r\n        this.renderView(spec ? spec.type : null);\r\n    };\r\n    // Current Date\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initCurrentDate = function () {\r\n        var defaultDateInput = this.opt('defaultDate');\r\n        // compute the initial ambig-timezone date\r\n        if (defaultDateInput != null) {\r\n            this.currentDate = this.moment(defaultDateInput).stripZone();\r\n        }\r\n        else {\r\n            this.currentDate = this.getNow(); // getNow already returns unzoned\r\n        }\r\n    };\r\n    Calendar.prototype.prev = function () {\r\n        var view = this.view;\r\n        var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\r\n        if (prevInfo.isValid) {\r\n            this.currentDate = prevInfo.date;\r\n            this.renderView();\r\n        }\r\n    };\r\n    Calendar.prototype.next = function () {\r\n        var view = this.view;\r\n        var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\r\n        if (nextInfo.isValid) {\r\n            this.currentDate = nextInfo.date;\r\n            this.renderView();\r\n        }\r\n    };\r\n    Calendar.prototype.prevYear = function () {\r\n        this.currentDate.add(-1, 'years');\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.nextYear = function () {\r\n        this.currentDate.add(1, 'years');\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.today = function () {\r\n        this.currentDate = this.getNow(); // should deny like prev/next?\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.gotoDate = function (zonedDateInput) {\r\n        this.currentDate = this.moment(zonedDateInput).stripZone();\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.incrementDate = function (delta) {\r\n        this.currentDate.add(moment.duration(delta));\r\n        this.renderView();\r\n    };\r\n    // for external API\r\n    Calendar.prototype.getDate = function () {\r\n        return this.applyTimezone(this.currentDate); // infuse the calendar's timezone\r\n    };\r\n    // Loading Triggering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Should be called when any type of async data fetching begins\r\n    Calendar.prototype.pushLoading = function () {\r\n        if (!(this.loadingLevel++)) {\r\n            this.publiclyTrigger('loading', [true, this.view]);\r\n        }\r\n    };\r\n    // Should be called when any type of async data fetching completes\r\n    Calendar.prototype.popLoading = function () {\r\n        if (!(--this.loadingLevel)) {\r\n            this.publiclyTrigger('loading', [false, this.view]);\r\n        }\r\n    };\r\n    // High-level Rendering\r\n    // -----------------------------------------------------------------------------------\r\n    Calendar.prototype.render = function () {\r\n        if (!this.contentEl) {\r\n            this.initialRender();\r\n        }\r\n        else if (this.elementVisible()) {\r\n            // mainly for the public API\r\n            this.calcSize();\r\n            this.updateViewSize();\r\n        }\r\n    };\r\n    Calendar.prototype.initialRender = function () {\r\n        var _this = this;\r\n        var el = this.el;\r\n        el.addClass('fc');\r\n        // event delegation for nav links\r\n        el.on('click.fc', 'a[data-goto]', function (ev) {\r\n            var anchorEl = $(ev.currentTarget);\r\n            var gotoOptions = anchorEl.data('goto'); // will automatically parse JSON\r\n            var date = _this.moment(gotoOptions.date);\r\n            var viewType = gotoOptions.type;\r\n            // property like \"navLinkDayClick\". might be a string or a function\r\n            var customAction = _this.view.opt('navLink' + util_1.capitaliseFirstLetter(viewType) + 'Click');\r\n            if (typeof customAction === 'function') {\r\n                customAction(date, ev);\r\n            }\r\n            else {\r\n                if (typeof customAction === 'string') {\r\n                    viewType = customAction;\r\n                }\r\n                _this.zoomTo(date, viewType);\r\n            }\r\n        });\r\n        // called immediately, and upon option change\r\n        this.optionsManager.watch('settingTheme', ['?theme', '?themeSystem'], function (opts) {\r\n            var themeClass = ThemeRegistry_1.getThemeSystemClass(opts.themeSystem || opts.theme);\r\n            var theme = new themeClass(_this.optionsManager);\r\n            var widgetClass = theme.getClass('widget');\r\n            _this.theme = theme;\r\n            if (widgetClass) {\r\n                el.addClass(widgetClass);\r\n            }\r\n        }, function () {\r\n            var widgetClass = _this.theme.getClass('widget');\r\n            _this.theme = null;\r\n            if (widgetClass) {\r\n                el.removeClass(widgetClass);\r\n            }\r\n        });\r\n        this.optionsManager.watch('settingBusinessHourGenerator', ['?businessHours'], function (deps) {\r\n            _this.businessHourGenerator = new BusinessHourGenerator_1.default(deps.businessHours, _this);\r\n            if (_this.view) {\r\n                _this.view.set('businessHourGenerator', _this.businessHourGenerator);\r\n            }\r\n        }, function () {\r\n            _this.businessHourGenerator = null;\r\n        });\r\n        // called immediately, and upon option change.\r\n        // HACK: locale often affects isRTL, so we explicitly listen to that too.\r\n        this.optionsManager.watch('applyingDirClasses', ['?isRTL', '?locale'], function (opts) {\r\n            el.toggleClass('fc-ltr', !opts.isRTL);\r\n            el.toggleClass('fc-rtl', opts.isRTL);\r\n        });\r\n        this.contentEl = $(\"<div class='fc-view-container'>\").prependTo(el);\r\n        this.initToolbars();\r\n        this.renderHeader();\r\n        this.renderFooter();\r\n        this.renderView(this.opt('defaultView'));\r\n        if (this.opt('handleWindowResize')) {\r\n            $(window).resize(this.windowResizeProxy = util_1.debounce(// prevents rapid calls\r\n            this.windowResize.bind(this), this.opt('windowResizeDelay')));\r\n        }\r\n    };\r\n    Calendar.prototype.destroy = function () {\r\n        if (this.view) {\r\n            this.clearView();\r\n        }\r\n        this.toolbarsManager.proxyCall('removeElement');\r\n        this.contentEl.remove();\r\n        this.el.removeClass('fc fc-ltr fc-rtl');\r\n        // removes theme-related root className\r\n        this.optionsManager.unwatch('settingTheme');\r\n        this.optionsManager.unwatch('settingBusinessHourGenerator');\r\n        this.el.off('.fc'); // unbind nav link handlers\r\n        if (this.windowResizeProxy) {\r\n            $(window).unbind('resize', this.windowResizeProxy);\r\n            this.windowResizeProxy = null;\r\n        }\r\n        GlobalEmitter_1.default.unneeded();\r\n    };\r\n    Calendar.prototype.elementVisible = function () {\r\n        return this.el.is(':visible');\r\n    };\r\n    // Render Queue\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.bindViewHandlers = function (view) {\r\n        var _this = this;\r\n        view.watch('titleForCalendar', ['title'], function (deps) {\r\n            if (view === _this.view) { // hack\r\n                _this.setToolbarsTitle(deps.title);\r\n            }\r\n        });\r\n        view.watch('dateProfileForCalendar', ['dateProfile'], function (deps) {\r\n            if (view === _this.view) { // hack\r\n                _this.currentDate = deps.dateProfile.date; // might have been constrained by view dates\r\n                _this.updateToolbarButtons(deps.dateProfile);\r\n            }\r\n        });\r\n    };\r\n    Calendar.prototype.unbindViewHandlers = function (view) {\r\n        view.unwatch('titleForCalendar');\r\n        view.unwatch('dateProfileForCalendar');\r\n    };\r\n    // View Rendering\r\n    // -----------------------------------------------------------------------------------\r\n    // Renders a view because of a date change, view-type change, or for the first time.\r\n    // If not given a viewType, keep the current view but render different dates.\r\n    // Accepts an optional scroll state to restore to.\r\n    Calendar.prototype.renderView = function (viewType) {\r\n        var oldView = this.view;\r\n        var newView;\r\n        this.freezeContentHeight();\r\n        if (oldView && viewType && oldView.type !== viewType) {\r\n            this.clearView();\r\n        }\r\n        // if viewType changed, or the view was never created, create a fresh view\r\n        if (!this.view && viewType) {\r\n            newView = this.view =\r\n                this.viewsByType[viewType] ||\r\n                    (this.viewsByType[viewType] = this.instantiateView(viewType));\r\n            this.bindViewHandlers(newView);\r\n            newView.startBatchRender(); // so that setElement+setDate rendering are joined\r\n            newView.setElement($(\"<div class='fc-view fc-\" + viewType + \"-view'>\").appendTo(this.contentEl));\r\n            this.toolbarsManager.proxyCall('activateButton', viewType);\r\n        }\r\n        if (this.view) {\r\n            // prevent unnecessary change firing\r\n            if (this.view.get('businessHourGenerator') !== this.businessHourGenerator) {\r\n                this.view.set('businessHourGenerator', this.businessHourGenerator);\r\n            }\r\n            this.view.setDate(this.currentDate);\r\n            if (newView) {\r\n                newView.stopBatchRender();\r\n            }\r\n        }\r\n        this.thawContentHeight();\r\n    };\r\n    // Unrenders the current view and reflects this change in the Header.\r\n    // Unregsiters the `view`, but does not remove from viewByType hash.\r\n    Calendar.prototype.clearView = function () {\r\n        var currentView = this.view;\r\n        this.toolbarsManager.proxyCall('deactivateButton', currentView.type);\r\n        this.unbindViewHandlers(currentView);\r\n        currentView.removeElement();\r\n        currentView.unsetDate(); // so bindViewHandlers doesn't fire with old values next time\r\n        this.view = null;\r\n    };\r\n    // Destroys the view, including the view object. Then, re-instantiates it and renders it.\r\n    // Maintains the same scroll state.\r\n    // TODO: maintain any other user-manipulated state.\r\n    Calendar.prototype.reinitView = function () {\r\n        var oldView = this.view;\r\n        var scroll = oldView.queryScroll(); // wouldn't be so complicated if Calendar owned the scroll\r\n        this.freezeContentHeight();\r\n        this.clearView();\r\n        this.calcSize();\r\n        this.renderView(oldView.type); // needs the type to freshly render\r\n        this.view.applyScroll(scroll);\r\n        this.thawContentHeight();\r\n    };\r\n    // Resizing\r\n    // -----------------------------------------------------------------------------------\r\n    Calendar.prototype.getSuggestedViewHeight = function () {\r\n        if (this.suggestedViewHeight == null) {\r\n            this.calcSize();\r\n        }\r\n        return this.suggestedViewHeight;\r\n    };\r\n    Calendar.prototype.isHeightAuto = function () {\r\n        return this.opt('contentHeight') === 'auto' || this.opt('height') === 'auto';\r\n    };\r\n    Calendar.prototype.updateViewSize = function (isResize) {\r\n        if (isResize === void 0) { isResize = false; }\r\n        var view = this.view;\r\n        var scroll;\r\n        if (!this.ignoreUpdateViewSize && view) {\r\n            if (isResize) {\r\n                this.calcSize();\r\n                scroll = view.queryScroll();\r\n            }\r\n            this.ignoreUpdateViewSize++;\r\n            view.updateSize(this.getSuggestedViewHeight(), this.isHeightAuto(), isResize);\r\n            this.ignoreUpdateViewSize--;\r\n            if (isResize) {\r\n                view.applyScroll(scroll);\r\n            }\r\n            return true; // signal success\r\n        }\r\n    };\r\n    Calendar.prototype.calcSize = function () {\r\n        if (this.elementVisible()) {\r\n            this._calcSize();\r\n        }\r\n    };\r\n    Calendar.prototype._calcSize = function () {\r\n        var contentHeightInput = this.opt('contentHeight');\r\n        var heightInput = this.opt('height');\r\n        if (typeof contentHeightInput === 'number') { // exists and not 'auto'\r\n            this.suggestedViewHeight = contentHeightInput;\r\n        }\r\n        else if (typeof contentHeightInput === 'function') { // exists and is a function\r\n            this.suggestedViewHeight = contentHeightInput();\r\n        }\r\n        else if (typeof heightInput === 'number') { // exists and not 'auto'\r\n            this.suggestedViewHeight = heightInput - this.queryToolbarsHeight();\r\n        }\r\n        else if (typeof heightInput === 'function') { // exists and is a function\r\n            this.suggestedViewHeight = heightInput() - this.queryToolbarsHeight();\r\n        }\r\n        else if (heightInput === 'parent') { // set to height of parent element\r\n            this.suggestedViewHeight = this.el.parent().height() - this.queryToolbarsHeight();\r\n        }\r\n        else {\r\n            this.suggestedViewHeight = Math.round(this.contentEl.width() /\r\n                Math.max(this.opt('aspectRatio'), .5));\r\n        }\r\n    };\r\n    Calendar.prototype.windowResize = function (ev) {\r\n        if (\r\n        // the purpose: so we don't process jqui \"resize\" events that have bubbled up\r\n        // cast to any because .target, which is Element, can't be compared to window for some reason.\r\n        ev.target === window &&\r\n            this.view &&\r\n            this.view.isDatesRendered) {\r\n            if (this.updateViewSize(true)) { // isResize=true, returns true on success\r\n                this.publiclyTrigger('windowResize', [this.view]);\r\n            }\r\n        }\r\n    };\r\n    /* Height \"Freezing\"\r\n    -----------------------------------------------------------------------------*/\r\n    Calendar.prototype.freezeContentHeight = function () {\r\n        if (!(this.freezeContentHeightDepth++)) {\r\n            this.forceFreezeContentHeight();\r\n        }\r\n    };\r\n    Calendar.prototype.forceFreezeContentHeight = function () {\r\n        this.contentEl.css({\r\n            width: '100%',\r\n            height: this.contentEl.height(),\r\n            overflow: 'hidden'\r\n        });\r\n    };\r\n    Calendar.prototype.thawContentHeight = function () {\r\n        this.freezeContentHeightDepth--;\r\n        // always bring back to natural height\r\n        this.contentEl.css({\r\n            width: '',\r\n            height: '',\r\n            overflow: ''\r\n        });\r\n        // but if there are future thaws, re-freeze\r\n        if (this.freezeContentHeightDepth) {\r\n            this.forceFreezeContentHeight();\r\n        }\r\n    };\r\n    // Toolbar\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initToolbars = function () {\r\n        this.header = new Toolbar_1.default(this, this.computeHeaderOptions());\r\n        this.footer = new Toolbar_1.default(this, this.computeFooterOptions());\r\n        this.toolbarsManager = new Iterator_1.default([this.header, this.footer]);\r\n    };\r\n    Calendar.prototype.computeHeaderOptions = function () {\r\n        return {\r\n            extraClasses: 'fc-header-toolbar',\r\n            layout: this.opt('header')\r\n        };\r\n    };\r\n    Calendar.prototype.computeFooterOptions = function () {\r\n        return {\r\n            extraClasses: 'fc-footer-toolbar',\r\n            layout: this.opt('footer')\r\n        };\r\n    };\r\n    // can be called repeatedly and Header will rerender\r\n    Calendar.prototype.renderHeader = function () {\r\n        var header = this.header;\r\n        header.setToolbarOptions(this.computeHeaderOptions());\r\n        header.render();\r\n        if (header.el) {\r\n            this.el.prepend(header.el);\r\n        }\r\n    };\r\n    // can be called repeatedly and Footer will rerender\r\n    Calendar.prototype.renderFooter = function () {\r\n        var footer = this.footer;\r\n        footer.setToolbarOptions(this.computeFooterOptions());\r\n        footer.render();\r\n        if (footer.el) {\r\n            this.el.append(footer.el);\r\n        }\r\n    };\r\n    Calendar.prototype.setToolbarsTitle = function (title) {\r\n        this.toolbarsManager.proxyCall('updateTitle', title);\r\n    };\r\n    Calendar.prototype.updateToolbarButtons = function (dateProfile) {\r\n        var now = this.getNow();\r\n        var view = this.view;\r\n        var todayInfo = view.dateProfileGenerator.build(now);\r\n        var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\r\n        var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\r\n        this.toolbarsManager.proxyCall((todayInfo.isValid && !dateProfile.currentUnzonedRange.containsDate(now)) ?\r\n            'enableButton' :\r\n            'disableButton', 'today');\r\n        this.toolbarsManager.proxyCall(prevInfo.isValid ?\r\n            'enableButton' :\r\n            'disableButton', 'prev');\r\n        this.toolbarsManager.proxyCall(nextInfo.isValid ?\r\n            'enableButton' :\r\n            'disableButton', 'next');\r\n    };\r\n    Calendar.prototype.queryToolbarsHeight = function () {\r\n        return this.toolbarsManager.items.reduce(function (accumulator, toolbar) {\r\n            var toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin\r\n            return accumulator + toolbarHeight;\r\n        }, 0);\r\n    };\r\n    // Selection\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // this public method receives start/end dates in any format, with any timezone\r\n    Calendar.prototype.select = function (zonedStartInput, zonedEndInput) {\r\n        this.view.select(this.buildSelectFootprint.apply(this, arguments));\r\n    };\r\n    Calendar.prototype.unselect = function () {\r\n        if (this.view) {\r\n            this.view.unselect();\r\n        }\r\n    };\r\n    // Given arguments to the select method in the API, returns a span (unzoned start/end and other info)\r\n    Calendar.prototype.buildSelectFootprint = function (zonedStartInput, zonedEndInput) {\r\n        var start = this.moment(zonedStartInput).stripZone();\r\n        var end;\r\n        if (zonedEndInput) {\r\n            end = this.moment(zonedEndInput).stripZone();\r\n        }\r\n        else if (start.hasTime()) {\r\n            end = start.clone().add(this.defaultTimedEventDuration);\r\n        }\r\n        else {\r\n            end = start.clone().add(this.defaultAllDayEventDuration);\r\n        }\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), !start.hasTime());\r\n    };\r\n    // Date Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initMomentInternals = function () {\r\n        var _this = this;\r\n        this.defaultAllDayEventDuration = moment.duration(this.opt('defaultAllDayEventDuration'));\r\n        this.defaultTimedEventDuration = moment.duration(this.opt('defaultTimedEventDuration'));\r\n        // Called immediately, and when any of the options change.\r\n        // Happens before any internal objects rebuild or rerender, because this is very core.\r\n        this.optionsManager.watch('buildingMomentLocale', [\r\n            '?locale', '?monthNames', '?monthNamesShort', '?dayNames', '?dayNamesShort',\r\n            '?firstDay', '?weekNumberCalculation'\r\n        ], function (opts) {\r\n            var weekNumberCalculation = opts.weekNumberCalculation;\r\n            var firstDay = opts.firstDay;\r\n            var _week;\r\n            // normalize\r\n            if (weekNumberCalculation === 'iso') {\r\n                weekNumberCalculation = 'ISO'; // normalize\r\n            }\r\n            var localeData = Object.create(// make a cheap copy\r\n            locale_1.getMomentLocaleData(opts.locale) // will fall back to en\r\n            );\r\n            if (opts.monthNames) {\r\n                localeData._months = opts.monthNames;\r\n            }\r\n            if (opts.monthNamesShort) {\r\n                localeData._monthsShort = opts.monthNamesShort;\r\n            }\r\n            if (opts.dayNames) {\r\n                localeData._weekdays = opts.dayNames;\r\n            }\r\n            if (opts.dayNamesShort) {\r\n                localeData._weekdaysShort = opts.dayNamesShort;\r\n            }\r\n            if (firstDay == null && weekNumberCalculation === 'ISO') {\r\n                firstDay = 1;\r\n            }\r\n            if (firstDay != null) {\r\n                _week = Object.create(localeData._week); // _week: { dow: # }\r\n                _week.dow = firstDay;\r\n                localeData._week = _week;\r\n            }\r\n            if ( // whitelist certain kinds of input\r\n            weekNumberCalculation === 'ISO' ||\r\n                weekNumberCalculation === 'local' ||\r\n                typeof weekNumberCalculation === 'function') {\r\n                localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it\r\n            }\r\n            _this.localeData = localeData;\r\n            // If the internal current date object already exists, move to new locale.\r\n            // We do NOT need to do this technique for event dates, because this happens when converting to \"segments\".\r\n            if (_this.currentDate) {\r\n                _this.localizeMoment(_this.currentDate); // sets to localeData\r\n            }\r\n        });\r\n    };\r\n    // Builds a moment using the settings of the current calendar: timezone and locale.\r\n    // Accepts anything the vanilla moment() constructor accepts.\r\n    Calendar.prototype.moment = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var mom;\r\n        if (this.opt('timezone') === 'local') {\r\n            mom = moment_ext_1.default.apply(null, args);\r\n            // Force the moment to be local, because momentExt doesn't guarantee it.\r\n            if (mom.hasTime()) { // don't give ambiguously-timed moments a local zone\r\n                mom.local();\r\n            }\r\n        }\r\n        else if (this.opt('timezone') === 'UTC') {\r\n            mom = moment_ext_1.default.utc.apply(null, args); // process as UTC\r\n        }\r\n        else {\r\n            mom = moment_ext_1.default.parseZone.apply(null, args); // let the input decide the zone\r\n        }\r\n        this.localizeMoment(mom); // TODO\r\n        return mom;\r\n    };\r\n    Calendar.prototype.msToMoment = function (ms, forceAllDay) {\r\n        var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC\r\n        if (forceAllDay) {\r\n            mom.stripTime();\r\n        }\r\n        else {\r\n            mom = this.applyTimezone(mom); // may or may not apply locale\r\n        }\r\n        this.localizeMoment(mom);\r\n        return mom;\r\n    };\r\n    Calendar.prototype.msToUtcMoment = function (ms, forceAllDay) {\r\n        var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC\r\n        if (forceAllDay) {\r\n            mom.stripTime();\r\n        }\r\n        this.localizeMoment(mom);\r\n        return mom;\r\n    };\r\n    // Updates the given moment's locale settings to the current calendar locale settings.\r\n    Calendar.prototype.localizeMoment = function (mom) {\r\n        mom._locale = this.localeData;\r\n    };\r\n    // Returns a boolean about whether or not the calendar knows how to calculate\r\n    // the timezone offset of arbitrary dates in the current timezone.\r\n    Calendar.prototype.getIsAmbigTimezone = function () {\r\n        return this.opt('timezone') !== 'local' && this.opt('timezone') !== 'UTC';\r\n    };\r\n    // Returns a copy of the given date in the current timezone. Has no effect on dates without times.\r\n    Calendar.prototype.applyTimezone = function (date) {\r\n        if (!date.hasTime()) {\r\n            return date.clone();\r\n        }\r\n        var zonedDate = this.moment(date.toArray());\r\n        var timeAdjust = date.time().asMilliseconds() - zonedDate.time().asMilliseconds();\r\n        var adjustedZonedDate;\r\n        // Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396)\r\n        if (timeAdjust) { // is the time result different than expected?\r\n            adjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds\r\n            if (date.time().asMilliseconds() - adjustedZonedDate.time().asMilliseconds() === 0) { // does it match perfectly now?\r\n                zonedDate = adjustedZonedDate;\r\n            }\r\n        }\r\n        return zonedDate;\r\n    };\r\n    /*\r\n    Assumes the footprint is non-open-ended.\r\n    */\r\n    Calendar.prototype.footprintToDateProfile = function (componentFootprint, ignoreEnd) {\r\n        if (ignoreEnd === void 0) { ignoreEnd = false; }\r\n        var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs);\r\n        var end;\r\n        if (!ignoreEnd) {\r\n            end = moment_ext_1.default.utc(componentFootprint.unzonedRange.endMs);\r\n        }\r\n        if (componentFootprint.isAllDay) {\r\n            start.stripTime();\r\n            if (end) {\r\n                end.stripTime();\r\n            }\r\n        }\r\n        else {\r\n            start = this.applyTimezone(start);\r\n            if (end) {\r\n                end = this.applyTimezone(end);\r\n            }\r\n        }\r\n        this.localizeMoment(start);\r\n        if (end) {\r\n            this.localizeMoment(end);\r\n        }\r\n        return new EventDateProfile_1.default(start, end, this);\r\n    };\r\n    // Returns a moment for the current date, as defined by the client's computer or from the `now` option.\r\n    // Will return an moment with an ambiguous timezone.\r\n    Calendar.prototype.getNow = function () {\r\n        var now = this.opt('now');\r\n        if (typeof now === 'function') {\r\n            now = now();\r\n        }\r\n        return this.moment(now).stripZone();\r\n    };\r\n    // Produces a human-readable string for the given duration.\r\n    // Side-effect: changes the locale of the given duration.\r\n    Calendar.prototype.humanizeDuration = function (duration) {\r\n        return duration.locale(this.opt('locale')).humanize();\r\n    };\r\n    // will return `null` if invalid range\r\n    Calendar.prototype.parseUnzonedRange = function (rangeInput) {\r\n        var start = null;\r\n        var end = null;\r\n        if (rangeInput.start) {\r\n            start = this.moment(rangeInput.start).stripZone();\r\n        }\r\n        if (rangeInput.end) {\r\n            end = this.moment(rangeInput.end).stripZone();\r\n        }\r\n        if (!start && !end) {\r\n            return null;\r\n        }\r\n        if (start && end && end.isBefore(start)) {\r\n            return null;\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    // Event-Date Utilities\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initEventManager = function () {\r\n        var _this = this;\r\n        var eventManager = new EventManager_1.default(this);\r\n        var rawSources = this.opt('eventSources') || [];\r\n        var singleRawSource = this.opt('events');\r\n        this.eventManager = eventManager;\r\n        if (singleRawSource) {\r\n            rawSources.unshift(singleRawSource);\r\n        }\r\n        eventManager.on('release', function (eventsPayload) {\r\n            _this.trigger('eventsReset', eventsPayload);\r\n        });\r\n        eventManager.freeze();\r\n        rawSources.forEach(function (rawSource) {\r\n            var source = EventSourceParser_1.default.parse(rawSource, _this);\r\n            if (source) {\r\n                eventManager.addSource(source);\r\n            }\r\n        });\r\n        eventManager.thaw();\r\n    };\r\n    Calendar.prototype.requestEvents = function (start, end) {\r\n        return this.eventManager.requestEvents(start, end, this.opt('timezone'), !this.opt('lazyFetching'));\r\n    };\r\n    // Get an event's normalized end date. If not present, calculate it from the defaults.\r\n    Calendar.prototype.getEventEnd = function (event) {\r\n        if (event.end) {\r\n            return event.end.clone();\r\n        }\r\n        else {\r\n            return this.getDefaultEventEnd(event.allDay, event.start);\r\n        }\r\n    };\r\n    // Given an event's allDay status and start date, return what its fallback end date should be.\r\n    // TODO: rename to computeDefaultEventEnd\r\n    Calendar.prototype.getDefaultEventEnd = function (allDay, zonedStart) {\r\n        var end = zonedStart.clone();\r\n        if (allDay) {\r\n            end.stripTime().add(this.defaultAllDayEventDuration);\r\n        }\r\n        else {\r\n            end.add(this.defaultTimedEventDuration);\r\n        }\r\n        if (this.getIsAmbigTimezone()) {\r\n            end.stripZone(); // we don't know what the tzo should be\r\n        }\r\n        return end;\r\n    };\r\n    // Public Events API\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.rerenderEvents = function () {\r\n        this.view.flash('displayingEvents');\r\n    };\r\n    Calendar.prototype.refetchEvents = function () {\r\n        this.eventManager.refetchAllSources();\r\n    };\r\n    Calendar.prototype.renderEvents = function (eventInputs, isSticky) {\r\n        this.eventManager.freeze();\r\n        for (var i = 0; i < eventInputs.length; i++) {\r\n            this.renderEvent(eventInputs[i], isSticky);\r\n        }\r\n        this.eventManager.thaw();\r\n    };\r\n    Calendar.prototype.renderEvent = function (eventInput, isSticky) {\r\n        if (isSticky === void 0) { isSticky = false; }\r\n        var eventManager = this.eventManager;\r\n        var eventDef = EventDefParser_1.default.parse(eventInput, eventInput.source || eventManager.stickySource);\r\n        if (eventDef) {\r\n            eventManager.addEventDef(eventDef, isSticky);\r\n        }\r\n    };\r\n    // legacyQuery operates on legacy event instance objects\r\n    Calendar.prototype.removeEvents = function (legacyQuery) {\r\n        var eventManager = this.eventManager;\r\n        var legacyInstances = [];\r\n        var idMap = {};\r\n        var eventDef;\r\n        var i;\r\n        if (legacyQuery == null) { // shortcut for removing all\r\n            eventManager.removeAllEventDefs(); // persist=true\r\n        }\r\n        else {\r\n            eventManager.getEventInstances().forEach(function (eventInstance) {\r\n                legacyInstances.push(eventInstance.toLegacy());\r\n            });\r\n            legacyInstances = filterLegacyEventInstances(legacyInstances, legacyQuery);\r\n            // compute unique IDs\r\n            for (i = 0; i < legacyInstances.length; i++) {\r\n                eventDef = this.eventManager.getEventDefByUid(legacyInstances[i]._id);\r\n                idMap[eventDef.id] = true;\r\n            }\r\n            eventManager.freeze();\r\n            for (i in idMap) { // reuse `i` as an \"id\"\r\n                eventManager.removeEventDefsById(i); // persist=true\r\n            }\r\n            eventManager.thaw();\r\n        }\r\n    };\r\n    // legacyQuery operates on legacy event instance objects\r\n    Calendar.prototype.clientEvents = function (legacyQuery) {\r\n        var legacyEventInstances = [];\r\n        this.eventManager.getEventInstances().forEach(function (eventInstance) {\r\n            legacyEventInstances.push(eventInstance.toLegacy());\r\n        });\r\n        return filterLegacyEventInstances(legacyEventInstances, legacyQuery);\r\n    };\r\n    Calendar.prototype.updateEvents = function (eventPropsArray) {\r\n        this.eventManager.freeze();\r\n        for (var i = 0; i < eventPropsArray.length; i++) {\r\n            this.updateEvent(eventPropsArray[i]);\r\n        }\r\n        this.eventManager.thaw();\r\n    };\r\n    Calendar.prototype.updateEvent = function (eventProps) {\r\n        var eventDef = this.eventManager.getEventDefByUid(eventProps._id);\r\n        var eventInstance;\r\n        var eventDefMutation;\r\n        if (eventDef instanceof SingleEventDef_1.default) {\r\n            eventInstance = eventDef.buildInstance();\r\n            eventDefMutation = EventDefMutation_1.default.createFromRawProps(eventInstance, eventProps, // raw props\r\n            null // largeUnit -- who uses it?\r\n            );\r\n            this.eventManager.mutateEventsWithId(eventDef.id, eventDefMutation); // will release\r\n        }\r\n    };\r\n    // Public Event Sources API\r\n    // ------------------------------------------------------------------------------------\r\n    Calendar.prototype.getEventSources = function () {\r\n        return this.eventManager.otherSources.slice(); // clone\r\n    };\r\n    Calendar.prototype.getEventSourceById = function (id) {\r\n        return this.eventManager.getSourceById(EventSource_1.default.normalizeId(id));\r\n    };\r\n    Calendar.prototype.addEventSource = function (sourceInput) {\r\n        var source = EventSourceParser_1.default.parse(sourceInput, this);\r\n        if (source) {\r\n            this.eventManager.addSource(source);\r\n        }\r\n    };\r\n    Calendar.prototype.removeEventSources = function (sourceMultiQuery) {\r\n        var eventManager = this.eventManager;\r\n        var sources;\r\n        var i;\r\n        if (sourceMultiQuery == null) {\r\n            this.eventManager.removeAllSources();\r\n        }\r\n        else {\r\n            sources = eventManager.multiQuerySources(sourceMultiQuery);\r\n            eventManager.freeze();\r\n            for (i = 0; i < sources.length; i++) {\r\n                eventManager.removeSource(sources[i]);\r\n            }\r\n            eventManager.thaw();\r\n        }\r\n    };\r\n    Calendar.prototype.removeEventSource = function (sourceQuery) {\r\n        var eventManager = this.eventManager;\r\n        var sources = eventManager.querySources(sourceQuery);\r\n        var i;\r\n        eventManager.freeze();\r\n        for (i = 0; i < sources.length; i++) {\r\n            eventManager.removeSource(sources[i]);\r\n        }\r\n        eventManager.thaw();\r\n    };\r\n    Calendar.prototype.refetchEventSources = function (sourceMultiQuery) {\r\n        var eventManager = this.eventManager;\r\n        var sources = eventManager.multiQuerySources(sourceMultiQuery);\r\n        var i;\r\n        eventManager.freeze();\r\n        for (i = 0; i < sources.length; i++) {\r\n            eventManager.refetchSource(sources[i]);\r\n        }\r\n        eventManager.thaw();\r\n    };\r\n    // not for internal use. use options module directly instead.\r\n    Calendar.defaults = options_1.globalDefaults;\r\n    Calendar.englishDefaults = options_1.englishDefaults;\r\n    Calendar.rtlDefaults = options_1.rtlDefaults;\r\n    return Calendar;\r\n}());\r\nexports.default = Calendar;\r\nEmitterMixin_1.default.mixInto(Calendar);\r\nListenerMixin_1.default.mixInto(Calendar);\r\nfunction filterLegacyEventInstances(legacyEventInstances, legacyQuery) {\r\n    if (legacyQuery == null) {\r\n        return legacyEventInstances;\r\n    }\r\n    else if ($.isFunction(legacyQuery)) {\r\n        return legacyEventInstances.filter(legacyQuery);\r\n    }\r\n    else { // an event ID\r\n        legacyQuery += ''; // normalize to string\r\n        return legacyEventInstances.filter(function (legacyEventInstance) {\r\n            // soft comparison because id not be normalized to string\r\n            // tslint:disable-next-line\r\n            return legacyEventInstance.id == legacyQuery ||\r\n                legacyEventInstance._id === legacyQuery; // can specify internal id, but must exactly match\r\n        });\r\n    }\r\n}\r\n\n\n/***/ }),\n/* 233 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar exportHooks = __webpack_require__(18);\r\nvar util_1 = __webpack_require__(4);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar ExternalDropping = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ExternalDropping, _super);\r\n    function ExternalDropping() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.isDragging = false; // jqui-dragging an external element? boolean\r\n        return _this;\r\n    }\r\n    /*\r\n    component impements:\r\n      - eventRangesToEventFootprints\r\n      - isEventInstanceGroupAllowed\r\n      - isExternalInstanceGroupAllowed\r\n      - renderDrag\r\n      - unrenderDrag\r\n    */\r\n    ExternalDropping.prototype.end = function () {\r\n        if (this.dragListener) {\r\n            this.dragListener.endInteraction();\r\n        }\r\n    };\r\n    ExternalDropping.prototype.bindToDocument = function () {\r\n        this.listenTo($(document), {\r\n            dragstart: this.handleDragStart,\r\n            sortstart: this.handleDragStart // jqui\r\n        });\r\n    };\r\n    ExternalDropping.prototype.unbindFromDocument = function () {\r\n        this.stopListeningTo($(document));\r\n    };\r\n    // Called when a jQuery UI drag is initiated anywhere in the DOM\r\n    ExternalDropping.prototype.handleDragStart = function (ev, ui) {\r\n        var el;\r\n        var accept;\r\n        if (this.opt('droppable')) { // only listen if this setting is on\r\n            el = $((ui ? ui.item : null) || ev.target);\r\n            // Test that the dragged element passes the dropAccept selector or filter function.\r\n            // FYI, the default is \"*\" (matches all)\r\n            accept = this.opt('dropAccept');\r\n            if ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {\r\n                if (!this.isDragging) { // prevent double-listening if fired twice\r\n                    this.listenToExternalDrag(el, ev, ui);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    // Called when a jQuery UI drag starts and it needs to be monitored for dropping\r\n    ExternalDropping.prototype.listenToExternalDrag = function (el, ev, ui) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var view = this.view;\r\n        var meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create\r\n        var singleEventDef; // a null value signals an unsuccessful drag\r\n        // listener that tracks mouse movement over date-associated pixel regions\r\n        var dragListener = this.dragListener = new HitDragListener_1.default(component, {\r\n            interactionStart: function () {\r\n                _this.isDragging = true;\r\n            },\r\n            hitOver: function (hit) {\r\n                var isAllowed = true;\r\n                var hitFootprint = hit.component.getSafeHitFootprint(hit); // hit might not belong to this grid\r\n                var mutatedEventInstanceGroup;\r\n                if (hitFootprint) {\r\n                    singleEventDef = _this.computeExternalDrop(hitFootprint, meta);\r\n                    if (singleEventDef) {\r\n                        mutatedEventInstanceGroup = new EventInstanceGroup_1.default(singleEventDef.buildInstances());\r\n                        isAllowed = meta.eventProps ? // isEvent?\r\n                            component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup) :\r\n                            component.isExternalInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n                    }\r\n                    else {\r\n                        isAllowed = false;\r\n                    }\r\n                }\r\n                else {\r\n                    isAllowed = false;\r\n                }\r\n                if (!isAllowed) {\r\n                    singleEventDef = null;\r\n                    util_1.disableCursor();\r\n                }\r\n                if (singleEventDef) {\r\n                    component.renderDrag(// called without a seg parameter\r\n                    component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, view.calendar)));\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                singleEventDef = null; // signal unsuccessful\r\n            },\r\n            hitDone: function () {\r\n                util_1.enableCursor();\r\n                component.unrenderDrag();\r\n            },\r\n            interactionEnd: function (ev) {\r\n                if (singleEventDef) { // element was dropped on a valid hit\r\n                    view.reportExternalDrop(singleEventDef, Boolean(meta.eventProps), // isEvent\r\n                    Boolean(meta.stick), // isSticky\r\n                    el, ev, ui);\r\n                }\r\n                _this.isDragging = false;\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        dragListener.startDrag(ev); // start listening immediately\r\n    };\r\n    // Given a hit to be dropped upon, and misc data associated with the jqui drag (guaranteed to be a plain object),\r\n    // returns the zoned start/end dates for the event that would result from the hypothetical drop. end might be null.\r\n    // Returning a null value signals an invalid drop hit.\r\n    // DOES NOT consider overlap/constraint.\r\n    // Assumes both footprints are non-open-ended.\r\n    ExternalDropping.prototype.computeExternalDrop = function (componentFootprint, meta) {\r\n        var calendar = this.view.calendar;\r\n        var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs).stripZone();\r\n        var end;\r\n        var eventDef;\r\n        if (componentFootprint.isAllDay) {\r\n            // if dropped on an all-day span, and element's metadata specified a time, set it\r\n            if (meta.startTime) {\r\n                start.time(meta.startTime);\r\n            }\r\n            else {\r\n                start.stripTime();\r\n            }\r\n        }\r\n        if (meta.duration) {\r\n            end = start.clone().add(meta.duration);\r\n        }\r\n        start = calendar.applyTimezone(start);\r\n        if (end) {\r\n            end = calendar.applyTimezone(end);\r\n        }\r\n        eventDef = SingleEventDef_1.default.parse($.extend({}, meta.eventProps, {\r\n            start: start,\r\n            end: end\r\n        }), new EventSource_1.default(calendar));\r\n        return eventDef;\r\n    };\r\n    return ExternalDropping;\r\n}(Interaction_1.default));\r\nexports.default = ExternalDropping;\r\nListenerMixin_1.default.mixInto(ExternalDropping);\r\n/* External-Dragging-Element Data\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Require all HTML5 data-* attributes used by FullCalendar to have this prefix.\r\n// A value of '' will query attributes like data-event. A value of 'fc' will query attributes like data-fc-event.\r\nexportHooks.dataAttrPrefix = '';\r\n// Given a jQuery element that might represent a dragged FullCalendar event, returns an intermediate data structure\r\n// to be used for Event Object creation.\r\n// A defined `.eventProps`, even when empty, indicates that an event should be created.\r\nfunction getDraggedElMeta(el) {\r\n    var prefix = exportHooks.dataAttrPrefix;\r\n    var eventProps; // properties for creating the event, not related to date/time\r\n    var startTime; // a Duration\r\n    var duration;\r\n    var stick;\r\n    if (prefix) {\r\n        prefix += '-';\r\n    }\r\n    eventProps = el.data(prefix + 'event') || null;\r\n    if (eventProps) {\r\n        if (typeof eventProps === 'object') {\r\n            eventProps = $.extend({}, eventProps); // make a copy\r\n        }\r\n        else { // something like 1 or true. still signal event creation\r\n            eventProps = {};\r\n        }\r\n        // pluck special-cased date/time properties\r\n        startTime = eventProps.start;\r\n        if (startTime == null) {\r\n            startTime = eventProps.time;\r\n        } // accept 'time' as well\r\n        duration = eventProps.duration;\r\n        stick = eventProps.stick;\r\n        delete eventProps.start;\r\n        delete eventProps.time;\r\n        delete eventProps.duration;\r\n        delete eventProps.stick;\r\n    }\r\n    // fallback to standalone attribute values for each of the date/time properties\r\n    if (startTime == null) {\r\n        startTime = el.data(prefix + 'start');\r\n    }\r\n    if (startTime == null) {\r\n        startTime = el.data(prefix + 'time');\r\n    } // accept 'time' as well\r\n    if (duration == null) {\r\n        duration = el.data(prefix + 'duration');\r\n    }\r\n    if (stick == null) {\r\n        stick = el.data(prefix + 'stick');\r\n    }\r\n    // massage into correct data types\r\n    startTime = startTime != null ? moment.duration(startTime) : null;\r\n    duration = duration != null ? moment.duration(duration) : null;\r\n    stick = Boolean(stick);\r\n    return { eventProps: eventProps, startTime: startTime, duration: duration, stick: stick };\r\n}\r\n\n\n/***/ }),\n/* 234 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventResizing = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventResizing, _super);\r\n    /*\r\n    component impements:\r\n      - bindSegHandlerToEl\r\n      - publiclyTrigger\r\n      - diffDates\r\n      - eventRangesToEventFootprints\r\n      - isEventInstanceGroupAllowed\r\n      - getSafeHitFootprint\r\n    */\r\n    function EventResizing(component, eventPointing) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.isResizing = false;\r\n        _this.eventPointing = eventPointing;\r\n        return _this;\r\n    }\r\n    EventResizing.prototype.end = function () {\r\n        if (this.dragListener) {\r\n            this.dragListener.endInteraction();\r\n        }\r\n    };\r\n    EventResizing.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        component.bindSegHandlerToEl(el, 'mousedown', this.handleMouseDown.bind(this));\r\n        component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\r\n    };\r\n    EventResizing.prototype.handleMouseDown = function (seg, ev) {\r\n        if (this.component.canStartResize(seg, ev)) {\r\n            this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))\r\n                .startInteraction(ev, { distance: 5 });\r\n        }\r\n    };\r\n    EventResizing.prototype.handleTouchStart = function (seg, ev) {\r\n        if (this.component.canStartResize(seg, ev)) {\r\n            this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))\r\n                .startInteraction(ev);\r\n        }\r\n    };\r\n    // Creates a listener that tracks the user as they resize an event segment.\r\n    // Generic enough to work with any type of Grid.\r\n    EventResizing.prototype.buildDragListener = function (seg, isStart) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var eventManager = calendar.eventManager;\r\n        var el = seg.el;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var eventInstance = seg.footprint.eventInstance;\r\n        var isDragging;\r\n        var resizeMutation; // zoned event date properties. falsy if invalid resize\r\n        // Tracks mouse movement over the *grid's* coordinate map\r\n        var dragListener = this.dragListener = new HitDragListener_1.default(component, {\r\n            scroll: this.opt('dragScroll'),\r\n            subjectEl: el,\r\n            interactionStart: function () {\r\n                isDragging = false;\r\n            },\r\n            dragStart: function (ev) {\r\n                isDragging = true;\r\n                // ensure a mouseout on the manipulated event has been reported\r\n                _this.eventPointing.handleMouseout(seg, ev);\r\n                _this.segResizeStart(seg, ev);\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                var isAllowed = true;\r\n                var origHitFootprint = component.getSafeHitFootprint(origHit);\r\n                var hitFootprint = component.getSafeHitFootprint(hit);\r\n                var mutatedEventInstanceGroup;\r\n                if (origHitFootprint && hitFootprint) {\r\n                    resizeMutation = isStart ?\r\n                        _this.computeEventStartResizeMutation(origHitFootprint, hitFootprint, seg.footprint) :\r\n                        _this.computeEventEndResizeMutation(origHitFootprint, hitFootprint, seg.footprint);\r\n                    if (resizeMutation) {\r\n                        mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, resizeMutation);\r\n                        isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n                    }\r\n                    else {\r\n                        isAllowed = false;\r\n                    }\r\n                }\r\n                else {\r\n                    isAllowed = false;\r\n                }\r\n                if (!isAllowed) {\r\n                    resizeMutation = null;\r\n                    util_1.disableCursor();\r\n                }\r\n                else if (resizeMutation.isEmpty()) {\r\n                    // no change. (FYI, event dates might have zones)\r\n                    resizeMutation = null;\r\n                }\r\n                if (resizeMutation) {\r\n                    view.hideEventsWithId(seg.footprint.eventDef.id);\r\n                    view.renderEventResize(component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg);\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                resizeMutation = null;\r\n            },\r\n            hitDone: function () {\r\n                view.unrenderEventResize(seg);\r\n                view.showEventsWithId(seg.footprint.eventDef.id);\r\n                util_1.enableCursor();\r\n            },\r\n            interactionEnd: function (ev) {\r\n                if (isDragging) {\r\n                    _this.segResizeStop(seg, ev);\r\n                }\r\n                if (resizeMutation) { // valid date to resize to?\r\n                    // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\r\n                    view.reportEventResize(eventInstance, resizeMutation, el, ev);\r\n                }\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Called before event segment resizing starts\r\n    EventResizing.prototype.segResizeStart = function (seg, ev) {\r\n        this.isResizing = true;\r\n        this.component.publiclyTrigger('eventResizeStart', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // Called after event segment resizing stops\r\n    EventResizing.prototype.segResizeStop = function (seg, ev) {\r\n        this.isResizing = false;\r\n        this.component.publiclyTrigger('eventResizeStop', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // Returns new date-information for an event segment being resized from its start\r\n    EventResizing.prototype.computeEventStartResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n        var origRange = origEventFootprint.componentFootprint.unzonedRange;\r\n        var startDelta = this.component.diffDates(endFootprint.unzonedRange.getStart(), startFootprint.unzonedRange.getStart());\r\n        var dateMutation;\r\n        var eventDefMutation;\r\n        if (origRange.getStart().add(startDelta) < origRange.getEnd()) {\r\n            dateMutation = new EventDefDateMutation_1.default();\r\n            dateMutation.setStartDelta(startDelta);\r\n            eventDefMutation = new EventDefMutation_1.default();\r\n            eventDefMutation.setDateMutation(dateMutation);\r\n            return eventDefMutation;\r\n        }\r\n        return false;\r\n    };\r\n    // Returns new date-information for an event segment being resized from its end\r\n    EventResizing.prototype.computeEventEndResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n        var origRange = origEventFootprint.componentFootprint.unzonedRange;\r\n        var endDelta = this.component.diffDates(endFootprint.unzonedRange.getEnd(), startFootprint.unzonedRange.getEnd());\r\n        var dateMutation;\r\n        var eventDefMutation;\r\n        if (origRange.getEnd().add(endDelta) > origRange.getStart()) {\r\n            dateMutation = new EventDefDateMutation_1.default();\r\n            dateMutation.setEndDelta(endDelta);\r\n            eventDefMutation = new EventDefMutation_1.default();\r\n            eventDefMutation.setDateMutation(dateMutation);\r\n            return eventDefMutation;\r\n        }\r\n        return false;\r\n    };\r\n    return EventResizing;\r\n}(Interaction_1.default));\r\nexports.default = EventResizing;\r\n\n\n/***/ }),\n/* 235 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar DragListener_1 = __webpack_require__(59);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar MouseFollower_1 = __webpack_require__(226);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventDragging = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventDragging, _super);\r\n    /*\r\n    component implements:\r\n      - bindSegHandlerToEl\r\n      - publiclyTrigger\r\n      - diffDates\r\n      - eventRangesToEventFootprints\r\n      - isEventInstanceGroupAllowed\r\n    */\r\n    function EventDragging(component, eventPointing) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.isDragging = false;\r\n        _this.eventPointing = eventPointing;\r\n        return _this;\r\n    }\r\n    EventDragging.prototype.end = function () {\r\n        if (this.dragListener) {\r\n            this.dragListener.endInteraction();\r\n        }\r\n    };\r\n    EventDragging.prototype.getSelectionDelay = function () {\r\n        var delay = this.opt('eventLongPressDelay');\r\n        if (delay == null) {\r\n            delay = this.opt('longPressDelay'); // fallback\r\n        }\r\n        return delay;\r\n    };\r\n    EventDragging.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        component.bindSegHandlerToEl(el, 'mousedown', this.handleMousedown.bind(this));\r\n        component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\r\n    };\r\n    EventDragging.prototype.handleMousedown = function (seg, ev) {\r\n        if (!this.component.shouldIgnoreMouse() &&\r\n            this.component.canStartDrag(seg, ev)) {\r\n            this.buildDragListener(seg).startInteraction(ev, { distance: 5 });\r\n        }\r\n    };\r\n    EventDragging.prototype.handleTouchStart = function (seg, ev) {\r\n        var component = this.component;\r\n        var settings = {\r\n            delay: this.view.isEventDefSelected(seg.footprint.eventDef) ? // already selected?\r\n                0 : this.getSelectionDelay()\r\n        };\r\n        if (component.canStartDrag(seg, ev)) {\r\n            this.buildDragListener(seg).startInteraction(ev, settings);\r\n        }\r\n        else if (component.canStartSelection(seg, ev)) {\r\n            this.buildSelectListener(seg).startInteraction(ev, settings);\r\n        }\r\n    };\r\n    // seg isn't draggable, but let's use a generic DragListener\r\n    // simply for the delay, so it can be selected.\r\n    // Has side effect of setting/unsetting `dragListener`\r\n    EventDragging.prototype.buildSelectListener = function (seg) {\r\n        var _this = this;\r\n        var view = this.view;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\r\n        if (this.dragListener) {\r\n            return this.dragListener;\r\n        }\r\n        var dragListener = this.dragListener = new DragListener_1.default({\r\n            dragStart: function (ev) {\r\n                if (dragListener.isTouch &&\r\n                    !view.isEventDefSelected(eventDef) &&\r\n                    eventInstance) {\r\n                    // if not previously selected, will fire after a delay. then, select the event\r\n                    view.selectEventInstance(eventInstance);\r\n                }\r\n            },\r\n            interactionEnd: function (ev) {\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Builds a listener that will track user-dragging on an event segment.\r\n    // Generic enough to work with any type of Grid.\r\n    // Has side effect of setting/unsetting `dragListener`\r\n    EventDragging.prototype.buildDragListener = function (seg) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var eventManager = calendar.eventManager;\r\n        var el = seg.el;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\r\n        var isDragging;\r\n        var mouseFollower; // A clone of the original element that will move with the mouse\r\n        var eventDefMutation;\r\n        if (this.dragListener) {\r\n            return this.dragListener;\r\n        }\r\n        // Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents\r\n        // of the view.\r\n        var dragListener = this.dragListener = new HitDragListener_1.default(view, {\r\n            scroll: this.opt('dragScroll'),\r\n            subjectEl: el,\r\n            subjectCenter: true,\r\n            interactionStart: function (ev) {\r\n                seg.component = component; // for renderDrag\r\n                isDragging = false;\r\n                mouseFollower = new MouseFollower_1.default(seg.el, {\r\n                    additionalClass: 'fc-dragging',\r\n                    parentEl: view.el,\r\n                    opacity: dragListener.isTouch ? null : _this.opt('dragOpacity'),\r\n                    revertDuration: _this.opt('dragRevertDuration'),\r\n                    zIndex: 2 // one above the .fc-view\r\n                });\r\n                mouseFollower.hide(); // don't show until we know this is a real drag\r\n                mouseFollower.start(ev);\r\n            },\r\n            dragStart: function (ev) {\r\n                if (dragListener.isTouch &&\r\n                    !view.isEventDefSelected(eventDef) &&\r\n                    eventInstance) {\r\n                    // if not previously selected, will fire after a delay. then, select the event\r\n                    view.selectEventInstance(eventInstance);\r\n                }\r\n                isDragging = true;\r\n                // ensure a mouseout on the manipulated event has been reported\r\n                _this.eventPointing.handleMouseout(seg, ev);\r\n                _this.segDragStart(seg, ev);\r\n                view.hideEventsWithId(seg.footprint.eventDef.id);\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                var isAllowed = true;\r\n                var origFootprint;\r\n                var footprint;\r\n                var mutatedEventInstanceGroup;\r\n                // starting hit could be forced (DayGrid.limit)\r\n                if (seg.hit) {\r\n                    origHit = seg.hit;\r\n                }\r\n                // hit might not belong to this grid, so query origin grid\r\n                origFootprint = origHit.component.getSafeHitFootprint(origHit);\r\n                footprint = hit.component.getSafeHitFootprint(hit);\r\n                if (origFootprint && footprint) {\r\n                    eventDefMutation = _this.computeEventDropMutation(origFootprint, footprint, eventDef);\r\n                    if (eventDefMutation) {\r\n                        mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, eventDefMutation);\r\n                        isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n                    }\r\n                    else {\r\n                        isAllowed = false;\r\n                    }\r\n                }\r\n                else {\r\n                    isAllowed = false;\r\n                }\r\n                if (!isAllowed) {\r\n                    eventDefMutation = null;\r\n                    util_1.disableCursor();\r\n                }\r\n                // if a valid drop location, have the subclass render a visual indication\r\n                if (eventDefMutation &&\r\n                    view.renderDrag(// truthy if rendered something\r\n                    component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg, dragListener.isTouch)) {\r\n                    mouseFollower.hide(); // if the subclass is already using a mock event \"helper\", hide our own\r\n                }\r\n                else {\r\n                    mouseFollower.show(); // otherwise, have the helper follow the mouse (no snapping)\r\n                }\r\n                if (isOrig) {\r\n                    // needs to have moved hits to be a valid drop\r\n                    eventDefMutation = null;\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                view.unrenderDrag(seg); // unrender whatever was done in renderDrag\r\n                mouseFollower.show(); // show in case we are moving out of all hits\r\n                eventDefMutation = null;\r\n            },\r\n            hitDone: function () {\r\n                util_1.enableCursor();\r\n            },\r\n            interactionEnd: function (ev) {\r\n                delete seg.component; // prevent side effects\r\n                // do revert animation if hasn't changed. calls a callback when finished (whether animation or not)\r\n                mouseFollower.stop(!eventDefMutation, function () {\r\n                    if (isDragging) {\r\n                        view.unrenderDrag(seg);\r\n                        _this.segDragStop(seg, ev);\r\n                    }\r\n                    view.showEventsWithId(seg.footprint.eventDef.id);\r\n                    if (eventDefMutation) {\r\n                        // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\r\n                        view.reportEventDrop(eventInstance, eventDefMutation, el, ev);\r\n                    }\r\n                });\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Called before event segment dragging starts\r\n    EventDragging.prototype.segDragStart = function (seg, ev) {\r\n        this.isDragging = true;\r\n        this.component.publiclyTrigger('eventDragStart', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // Called after event segment dragging stops\r\n    EventDragging.prototype.segDragStop = function (seg, ev) {\r\n        this.isDragging = false;\r\n        this.component.publiclyTrigger('eventDragStop', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // DOES NOT consider overlap/constraint\r\n    EventDragging.prototype.computeEventDropMutation = function (startFootprint, endFootprint, eventDef) {\r\n        var eventDefMutation = new EventDefMutation_1.default();\r\n        eventDefMutation.setDateMutation(this.computeEventDateMutation(startFootprint, endFootprint));\r\n        return eventDefMutation;\r\n    };\r\n    EventDragging.prototype.computeEventDateMutation = function (startFootprint, endFootprint) {\r\n        var date0 = startFootprint.unzonedRange.getStart();\r\n        var date1 = endFootprint.unzonedRange.getStart();\r\n        var clearEnd = false;\r\n        var forceTimed = false;\r\n        var forceAllDay = false;\r\n        var dateDelta;\r\n        var dateMutation;\r\n        if (startFootprint.isAllDay !== endFootprint.isAllDay) {\r\n            clearEnd = true;\r\n            if (endFootprint.isAllDay) {\r\n                forceAllDay = true;\r\n                date0.stripTime();\r\n            }\r\n            else {\r\n                forceTimed = true;\r\n            }\r\n        }\r\n        dateDelta = this.component.diffDates(date1, date0);\r\n        dateMutation = new EventDefDateMutation_1.default();\r\n        dateMutation.clearEnd = clearEnd;\r\n        dateMutation.forceTimed = forceTimed;\r\n        dateMutation.forceAllDay = forceAllDay;\r\n        dateMutation.setDateDelta(dateDelta);\r\n        return dateMutation;\r\n    };\r\n    return EventDragging;\r\n}(Interaction_1.default));\r\nexports.default = EventDragging;\r\n\n\n/***/ }),\n/* 236 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar DateSelecting = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DateSelecting, _super);\r\n    /*\r\n    component must implement:\r\n      - bindDateHandlerToEl\r\n      - getSafeHitFootprint\r\n      - renderHighlight\r\n      - unrenderHighlight\r\n    */\r\n    function DateSelecting(component) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.dragListener = _this.buildDragListener();\r\n        return _this;\r\n    }\r\n    DateSelecting.prototype.end = function () {\r\n        this.dragListener.endInteraction();\r\n    };\r\n    DateSelecting.prototype.getDelay = function () {\r\n        var delay = this.opt('selectLongPressDelay');\r\n        if (delay == null) {\r\n            delay = this.opt('longPressDelay'); // fallback\r\n        }\r\n        return delay;\r\n    };\r\n    DateSelecting.prototype.bindToEl = function (el) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var dragListener = this.dragListener;\r\n        component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\r\n            if (_this.opt('selectable') && !component.shouldIgnoreMouse()) {\r\n                dragListener.startInteraction(ev, {\r\n                    distance: _this.opt('selectMinDistance')\r\n                });\r\n            }\r\n        });\r\n        component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\r\n            if (_this.opt('selectable') && !component.shouldIgnoreTouch()) {\r\n                dragListener.startInteraction(ev, {\r\n                    delay: _this.getDelay()\r\n                });\r\n            }\r\n        });\r\n        util_1.preventSelection(el);\r\n    };\r\n    // Creates a listener that tracks the user's drag across day elements, for day selecting.\r\n    DateSelecting.prototype.buildDragListener = function () {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var selectionFootprint; // null if invalid selection\r\n        var dragListener = new HitDragListener_1.default(component, {\r\n            scroll: this.opt('dragScroll'),\r\n            interactionStart: function () {\r\n                selectionFootprint = null;\r\n            },\r\n            dragStart: function (ev) {\r\n                _this.view.unselect(ev); // since we could be rendering a new selection, we want to clear any old one\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                var origHitFootprint;\r\n                var hitFootprint;\r\n                if (origHit) { // click needs to have started on a hit\r\n                    origHitFootprint = component.getSafeHitFootprint(origHit);\r\n                    hitFootprint = component.getSafeHitFootprint(hit);\r\n                    if (origHitFootprint && hitFootprint) {\r\n                        selectionFootprint = _this.computeSelection(origHitFootprint, hitFootprint);\r\n                    }\r\n                    else {\r\n                        selectionFootprint = null;\r\n                    }\r\n                    if (selectionFootprint) {\r\n                        component.renderSelectionFootprint(selectionFootprint);\r\n                    }\r\n                    else if (selectionFootprint === false) {\r\n                        util_1.disableCursor();\r\n                    }\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                selectionFootprint = null;\r\n                component.unrenderSelection();\r\n            },\r\n            hitDone: function () {\r\n                util_1.enableCursor();\r\n            },\r\n            interactionEnd: function (ev, isCancelled) {\r\n                if (!isCancelled && selectionFootprint) {\r\n                    // the selection will already have been rendered. just report it\r\n                    _this.view.reportSelection(selectionFootprint, ev);\r\n                }\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Given the first and last date-spans of a selection, returns another date-span object.\r\n    // Subclasses can override and provide additional data in the span object. Will be passed to renderSelectionFootprint().\r\n    // Will return false if the selection is invalid and this should be indicated to the user.\r\n    // Will return null/undefined if a selection invalid but no error should be reported.\r\n    DateSelecting.prototype.computeSelection = function (footprint0, footprint1) {\r\n        var wholeFootprint = this.computeSelectionFootprint(footprint0, footprint1);\r\n        if (wholeFootprint && !this.isSelectionFootprintAllowed(wholeFootprint)) {\r\n            return false;\r\n        }\r\n        return wholeFootprint;\r\n    };\r\n    // Given two spans, must return the combination of the two.\r\n    // TODO: do this separation of concerns (combining VS validation) for event dnd/resize too.\r\n    // Assumes both footprints are non-open-ended.\r\n    DateSelecting.prototype.computeSelectionFootprint = function (footprint0, footprint1) {\r\n        var ms = [\r\n            footprint0.unzonedRange.startMs,\r\n            footprint0.unzonedRange.endMs,\r\n            footprint1.unzonedRange.startMs,\r\n            footprint1.unzonedRange.endMs\r\n        ];\r\n        ms.sort(util_1.compareNumbers);\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(ms[0], ms[3]), footprint0.isAllDay);\r\n    };\r\n    DateSelecting.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\r\n        return this.component.dateProfile.validUnzonedRange.containsRange(componentFootprint.unzonedRange) &&\r\n            this.view.calendar.constraints.isSelectionFootprintAllowed(componentFootprint);\r\n    };\r\n    return DateSelecting;\r\n}(Interaction_1.default));\r\nexports.default = DateSelecting;\r\n\n\n/***/ }),\n/* 237 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar DateClicking = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DateClicking, _super);\r\n    /*\r\n    component must implement:\r\n      - bindDateHandlerToEl\r\n      - getSafeHitFootprint\r\n      - getHitEl\r\n    */\r\n    function DateClicking(component) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.dragListener = _this.buildDragListener();\r\n        return _this;\r\n    }\r\n    DateClicking.prototype.end = function () {\r\n        this.dragListener.endInteraction();\r\n    };\r\n    DateClicking.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        var dragListener = this.dragListener;\r\n        component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\r\n            if (!component.shouldIgnoreMouse()) {\r\n                dragListener.startInteraction(ev);\r\n            }\r\n        });\r\n        component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\r\n            if (!component.shouldIgnoreTouch()) {\r\n                dragListener.startInteraction(ev);\r\n            }\r\n        });\r\n    };\r\n    // Creates a listener that tracks the user's drag across day elements, for day clicking.\r\n    DateClicking.prototype.buildDragListener = function () {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var dayClickHit; // null if invalid dayClick\r\n        var dragListener = new HitDragListener_1.default(component, {\r\n            scroll: this.opt('dragScroll'),\r\n            interactionStart: function () {\r\n                dayClickHit = dragListener.origHit;\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                // if user dragged to another cell at any point, it can no longer be a dayClick\r\n                if (!isOrig) {\r\n                    dayClickHit = null;\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                dayClickHit = null;\r\n            },\r\n            interactionEnd: function (ev, isCancelled) {\r\n                var componentFootprint;\r\n                if (!isCancelled && dayClickHit) {\r\n                    componentFootprint = component.getSafeHitFootprint(dayClickHit);\r\n                    if (componentFootprint) {\r\n                        _this.view.triggerDayClick(componentFootprint, component.getHitEl(dayClickHit), ev);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n        // because dragListener won't be called with any time delay, \"dragging\" will begin immediately,\r\n        // which will kill any touchmoving/scrolling. Prevent this.\r\n        dragListener.shouldCancelTouchScroll = false;\r\n        dragListener.scrollAlwaysKills = true;\r\n        return dragListener;\r\n    };\r\n    return DateClicking;\r\n}(Interaction_1.default));\r\nexports.default = DateClicking;\r\n\n\n/***/ }),\n/* 238 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar View_1 = __webpack_require__(43);\r\nvar TimeGrid_1 = __webpack_require__(239);\r\nvar DayGrid_1 = __webpack_require__(66);\r\nvar AGENDA_ALL_DAY_EVENT_LIMIT = 5;\r\nvar agendaTimeGridMethods;\r\nvar agendaDayGridMethods;\r\n/* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).\r\n// Responsible for managing width/height.\r\nvar AgendaView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AgendaView, _super);\r\n    function AgendaView(calendar, viewSpec) {\r\n        var _this = _super.call(this, calendar, viewSpec) || this;\r\n        _this.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering\r\n        _this.timeGrid = _this.instantiateTimeGrid();\r\n        _this.addChild(_this.timeGrid);\r\n        if (_this.opt('allDaySlot')) { // should we display the \"all-day\" area?\r\n            _this.dayGrid = _this.instantiateDayGrid(); // the all-day subcomponent of this view\r\n            _this.addChild(_this.dayGrid);\r\n        }\r\n        _this.scroller = new Scroller_1.default({\r\n            overflowX: 'hidden',\r\n            overflowY: 'auto'\r\n        });\r\n        return _this;\r\n    }\r\n    // Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass\r\n    AgendaView.prototype.instantiateTimeGrid = function () {\r\n        var timeGrid = new this.timeGridClass(this);\r\n        util_1.copyOwnProps(agendaTimeGridMethods, timeGrid);\r\n        return timeGrid;\r\n    };\r\n    // Instantiates the DayGrid object this view might need. Draws from this.dayGridClass\r\n    AgendaView.prototype.instantiateDayGrid = function () {\r\n        var dayGrid = new this.dayGridClass(this);\r\n        util_1.copyOwnProps(agendaDayGridMethods, dayGrid);\r\n        return dayGrid;\r\n    };\r\n    /* Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    AgendaView.prototype.renderSkeleton = function () {\r\n        var timeGridWrapEl;\r\n        var timeGridEl;\r\n        this.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml());\r\n        this.scroller.render();\r\n        timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container');\r\n        timeGridEl = $('<div class=\"fc-time-grid\">').appendTo(timeGridWrapEl);\r\n        this.el.find('.fc-body > tr > td').append(timeGridWrapEl);\r\n        this.timeGrid.headContainerEl = this.el.find('.fc-head-container');\r\n        this.timeGrid.setElement(timeGridEl);\r\n        if (this.dayGrid) {\r\n            this.dayGrid.setElement(this.el.find('.fc-day-grid'));\r\n            // have the day-grid extend it's coordinate area over the <hr> dividing the two grids\r\n            this.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight();\r\n        }\r\n    };\r\n    AgendaView.prototype.unrenderSkeleton = function () {\r\n        this.timeGrid.removeElement();\r\n        if (this.dayGrid) {\r\n            this.dayGrid.removeElement();\r\n        }\r\n        this.scroller.destroy();\r\n    };\r\n    // Builds the HTML skeleton for the view.\r\n    // The day-grid and time-grid components will render inside containers defined by this HTML.\r\n    AgendaView.prototype.renderSkeletonHtml = function () {\r\n        var theme = this.calendar.theme;\r\n        return '' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            (this.opt('columnHeader') ?\r\n                '<thead class=\"fc-head\">' +\r\n                    '<tr>' +\r\n                    '<td class=\"fc-head-container ' + theme.getClass('widgetHeader') + '\">&nbsp;</td>' +\r\n                    '</tr>' +\r\n                    '</thead>' :\r\n                '') +\r\n            '<tbody class=\"fc-body\">' +\r\n            '<tr>' +\r\n            '<td class=\"' + theme.getClass('widgetContent') + '\">' +\r\n            (this.dayGrid ?\r\n                '<div class=\"fc-day-grid\"></div>' +\r\n                    '<hr class=\"fc-divider ' + theme.getClass('widgetHeader') + '\"></hr>' :\r\n                '') +\r\n            '</td>' +\r\n            '</tr>' +\r\n            '</tbody>' +\r\n            '</table>';\r\n    };\r\n    // Generates an HTML attribute string for setting the width of the axis, if it is known\r\n    AgendaView.prototype.axisStyleAttr = function () {\r\n        if (this.axisWidth != null) {\r\n            return 'style=\"width:' + this.axisWidth + 'px\"';\r\n        }\r\n        return '';\r\n    };\r\n    /* Now Indicator\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    AgendaView.prototype.getNowIndicatorUnit = function () {\r\n        return this.timeGrid.getNowIndicatorUnit();\r\n    };\r\n    /* Dimensions\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Adjusts the vertical dimensions of the view to the specified values\r\n    AgendaView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        var eventLimit;\r\n        var scrollerHeight;\r\n        var scrollbarWidths;\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        // make all axis cells line up, and record the width so newly created axis cells will have it\r\n        this.axisWidth = util_1.matchCellWidths(this.el.find('.fc-axis'));\r\n        // hack to give the view some height prior to timeGrid's columns being rendered\r\n        // TODO: separate setting height from scroller VS timeGrid.\r\n        if (!this.timeGrid.colEls) {\r\n            if (!isAuto) {\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            return;\r\n        }\r\n        // set of fake row elements that must compensate when scroller has scrollbars\r\n        var noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)');\r\n        // reset all dimensions back to the original state\r\n        this.timeGrid.bottomRuleEl.hide(); // .show() will be called later if this <hr> is necessary\r\n        this.scroller.clear(); // sets height to 'auto' and clears overflow\r\n        util_1.uncompensateScroll(noScrollRowEls);\r\n        // limit number of events in the all-day area\r\n        if (this.dayGrid) {\r\n            this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\r\n            eventLimit = this.opt('eventLimit');\r\n            if (eventLimit && typeof eventLimit !== 'number') {\r\n                eventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure \"auto\" goes to a real number\r\n            }\r\n            if (eventLimit) {\r\n                this.dayGrid.limitRows(eventLimit);\r\n            }\r\n        }\r\n        if (!isAuto) { // should we force dimensions of the scroll container?\r\n            scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n            this.scroller.setHeight(scrollerHeight);\r\n            scrollbarWidths = this.scroller.getScrollbarWidths();\r\n            if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\r\n                // make the all-day and header rows lines up\r\n                util_1.compensateScroll(noScrollRowEls, scrollbarWidths);\r\n                // the scrollbar compensation might have changed text flow, which might affect height, so recalculate\r\n                // and reapply the desired height to the scroller.\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            // guarantees the same scrollbar widths\r\n            this.scroller.lockOverflow(scrollbarWidths);\r\n            // if there's any space below the slats, show the horizontal rule.\r\n            // this won't cause any new overflow, because lockOverflow already called.\r\n            if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {\r\n                this.timeGrid.bottomRuleEl.show();\r\n            }\r\n        }\r\n    };\r\n    // given a desired total height of the view, returns what the height of the scroller should be\r\n    AgendaView.prototype.computeScrollerHeight = function (totalHeight) {\r\n        return totalHeight -\r\n            util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n    };\r\n    /* Scroll\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Computes the initial pre-configured scroll state prior to allowing the user to change it\r\n    AgendaView.prototype.computeInitialDateScroll = function () {\r\n        var scrollTime = moment.duration(this.opt('scrollTime'));\r\n        var top = this.timeGrid.computeTimeTop(scrollTime);\r\n        // zoom can give weird floating-point values. rather scroll a little bit further\r\n        top = Math.ceil(top);\r\n        if (top) {\r\n            top++; // to overcome top border that slots beyond the first have. looks better\r\n        }\r\n        return { top: top };\r\n    };\r\n    AgendaView.prototype.queryDateScroll = function () {\r\n        return { top: this.scroller.getScrollTop() };\r\n    };\r\n    AgendaView.prototype.applyDateScroll = function (scroll) {\r\n        if (scroll.top !== undefined) {\r\n            this.scroller.setScrollTop(scroll.top);\r\n        }\r\n    };\r\n    /* Hit Areas\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // forward all hit-related method calls to the grids (dayGrid might not be defined)\r\n    AgendaView.prototype.getHitFootprint = function (hit) {\r\n        // TODO: hit.component is set as a hack to identify where the hit came from\r\n        return hit.component.getHitFootprint(hit);\r\n    };\r\n    AgendaView.prototype.getHitEl = function (hit) {\r\n        // TODO: hit.component is set as a hack to identify where the hit came from\r\n        return hit.component.getHitEl(hit);\r\n    };\r\n    /* Event Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    AgendaView.prototype.executeEventRender = function (eventsPayload) {\r\n        var dayEventsPayload = {};\r\n        var timedEventsPayload = {};\r\n        var id;\r\n        var eventInstanceGroup;\r\n        // separate the events into all-day and timed\r\n        for (id in eventsPayload) {\r\n            eventInstanceGroup = eventsPayload[id];\r\n            if (eventInstanceGroup.getEventDef().isAllDay()) {\r\n                dayEventsPayload[id] = eventInstanceGroup;\r\n            }\r\n            else {\r\n                timedEventsPayload[id] = eventInstanceGroup;\r\n            }\r\n        }\r\n        this.timeGrid.executeEventRender(timedEventsPayload);\r\n        if (this.dayGrid) {\r\n            this.dayGrid.executeEventRender(dayEventsPayload);\r\n        }\r\n    };\r\n    /* Dragging/Resizing Routing\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // A returned value of `true` signals that a mock \"helper\" event has been rendered.\r\n    AgendaView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var groups = groupEventFootprintsByAllDay(eventFootprints);\r\n        var renderedHelper = false;\r\n        renderedHelper = this.timeGrid.renderDrag(groups.timed, seg, isTouch);\r\n        if (this.dayGrid) {\r\n            renderedHelper = this.dayGrid.renderDrag(groups.allDay, seg, isTouch) || renderedHelper;\r\n        }\r\n        return renderedHelper;\r\n    };\r\n    AgendaView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        var groups = groupEventFootprintsByAllDay(eventFootprints);\r\n        this.timeGrid.renderEventResize(groups.timed, seg, isTouch);\r\n        if (this.dayGrid) {\r\n            this.dayGrid.renderEventResize(groups.allDay, seg, isTouch);\r\n        }\r\n    };\r\n    /* Selection\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of a selection\r\n    AgendaView.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n        if (!componentFootprint.isAllDay) {\r\n            this.timeGrid.renderSelectionFootprint(componentFootprint);\r\n        }\r\n        else if (this.dayGrid) {\r\n            this.dayGrid.renderSelectionFootprint(componentFootprint);\r\n        }\r\n    };\r\n    return AgendaView;\r\n}(View_1.default));\r\nexports.default = AgendaView;\r\nAgendaView.prototype.timeGridClass = TimeGrid_1.default;\r\nAgendaView.prototype.dayGridClass = DayGrid_1.default;\r\n// Will customize the rendering behavior of the AgendaView's timeGrid\r\nagendaTimeGridMethods = {\r\n    // Generates the HTML that will go before the day-of week header cells\r\n    renderHeadIntroHtml: function () {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var weekStart = calendar.msToUtcMoment(this.dateProfile.renderUnzonedRange.startMs, true);\r\n        var weekText;\r\n        if (this.opt('weekNumbers')) {\r\n            weekText = weekStart.format(this.opt('smallWeekFormat'));\r\n            return '' +\r\n                '<th class=\"fc-axis fc-week-number ' + calendar.theme.getClass('widgetHeader') + '\" ' + view.axisStyleAttr() + '>' +\r\n                view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\r\n                { date: weekStart, type: 'week', forceOff: this.colCnt > 1 }, util_1.htmlEscape(weekText) // inner HTML\r\n                ) +\r\n                '</th>';\r\n        }\r\n        else {\r\n            return '<th class=\"fc-axis ' + calendar.theme.getClass('widgetHeader') + '\" ' + view.axisStyleAttr() + '></th>';\r\n        }\r\n    },\r\n    // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.\r\n    renderBgIntroHtml: function () {\r\n        var view = this.view;\r\n        return '<td class=\"fc-axis ' + view.calendar.theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '></td>';\r\n    },\r\n    // Generates the HTML that goes before all other types of cells.\r\n    // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\r\n    renderIntroHtml: function () {\r\n        var view = this.view;\r\n        return '<td class=\"fc-axis\" ' + view.axisStyleAttr() + '></td>';\r\n    }\r\n};\r\n// Will customize the rendering behavior of the AgendaView's dayGrid\r\nagendaDayGridMethods = {\r\n    // Generates the HTML that goes before the all-day cells\r\n    renderBgIntroHtml: function () {\r\n        var view = this.view;\r\n        return '' +\r\n            '<td class=\"fc-axis ' + view.calendar.theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '>' +\r\n            '<span>' + // needed for matchCellWidths\r\n            view.getAllDayHtml() +\r\n            '</span>' +\r\n            '</td>';\r\n    },\r\n    // Generates the HTML that goes before all other types of cells.\r\n    // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\r\n    renderIntroHtml: function () {\r\n        var view = this.view;\r\n        return '<td class=\"fc-axis\" ' + view.axisStyleAttr() + '></td>';\r\n    }\r\n};\r\nfunction groupEventFootprintsByAllDay(eventFootprints) {\r\n    var allDay = [];\r\n    var timed = [];\r\n    var i;\r\n    for (i = 0; i < eventFootprints.length; i++) {\r\n        if (eventFootprints[i].componentFootprint.isAllDay) {\r\n            allDay.push(eventFootprints[i]);\r\n        }\r\n        else {\r\n            timed.push(eventFootprints[i]);\r\n        }\r\n    }\r\n    return { allDay: allDay, timed: timed };\r\n}\r\n\n\n/***/ }),\n/* 239 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nvar CoordCache_1 = __webpack_require__(58);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar TimeGridEventRenderer_1 = __webpack_require__(240);\r\nvar TimeGridHelperRenderer_1 = __webpack_require__(241);\r\nvar TimeGridFillRenderer_1 = __webpack_require__(242);\r\n/* A component that renders one or more columns of vertical time slots\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// We mixin DayTable, even though there is only a single row of days\r\n// potential nice values for the slot-duration and interval-duration\r\n// from largest to smallest\r\nvar AGENDA_STOCK_SUB_DURATIONS = [\r\n    { hours: 1 },\r\n    { minutes: 30 },\r\n    { minutes: 15 },\r\n    { seconds: 30 },\r\n    { seconds: 15 }\r\n];\r\nvar TimeGrid = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGrid, _super);\r\n    function TimeGrid(view) {\r\n        var _this = _super.call(this, view) || this;\r\n        _this.processOptions();\r\n        return _this;\r\n    }\r\n    // Slices up the given span (unzoned start/end with other misc data) into an array of segments\r\n    TimeGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n        var segs = this.sliceRangeByTimes(componentFootprint.unzonedRange);\r\n        var i;\r\n        for (i = 0; i < segs.length; i++) {\r\n            if (this.isRTL) {\r\n                segs[i].col = this.daysPerRow - 1 - segs[i].dayIndex;\r\n            }\r\n            else {\r\n                segs[i].col = segs[i].dayIndex;\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Date Handling\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.sliceRangeByTimes = function (unzonedRange) {\r\n        var segs = [];\r\n        var segRange;\r\n        var dayIndex;\r\n        for (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {\r\n            segRange = unzonedRange.intersect(this.dayRanges[dayIndex]);\r\n            if (segRange) {\r\n                segs.push({\r\n                    startMs: segRange.startMs,\r\n                    endMs: segRange.endMs,\r\n                    isStart: segRange.isStart,\r\n                    isEnd: segRange.isEnd,\r\n                    dayIndex: dayIndex\r\n                });\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Options\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Parses various options into properties of this object\r\n    TimeGrid.prototype.processOptions = function () {\r\n        var slotDuration = this.opt('slotDuration');\r\n        var snapDuration = this.opt('snapDuration');\r\n        var input;\r\n        slotDuration = moment.duration(slotDuration);\r\n        snapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration;\r\n        this.slotDuration = slotDuration;\r\n        this.snapDuration = snapDuration;\r\n        this.snapsPerSlot = slotDuration / snapDuration; // TODO: ensure an integer multiple?\r\n        // might be an array value (for TimelineView).\r\n        // if so, getting the most granular entry (the last one probably).\r\n        input = this.opt('slotLabelFormat');\r\n        if ($.isArray(input)) {\r\n            input = input[input.length - 1];\r\n        }\r\n        this.labelFormat = input ||\r\n            this.opt('smallTimeFormat'); // the computed default\r\n        input = this.opt('slotLabelInterval');\r\n        this.labelInterval = input ?\r\n            moment.duration(input) :\r\n            this.computeLabelInterval(slotDuration);\r\n    };\r\n    // Computes an automatic value for slotLabelInterval\r\n    TimeGrid.prototype.computeLabelInterval = function (slotDuration) {\r\n        var i;\r\n        var labelInterval;\r\n        var slotsPerLabel;\r\n        // find the smallest stock label interval that results in more than one slots-per-label\r\n        for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {\r\n            labelInterval = moment.duration(AGENDA_STOCK_SUB_DURATIONS[i]);\r\n            slotsPerLabel = util_1.divideDurationByDuration(labelInterval, slotDuration);\r\n            if (util_1.isInt(slotsPerLabel) && slotsPerLabel > 1) {\r\n                return labelInterval;\r\n            }\r\n        }\r\n        return moment.duration(slotDuration); // fall back. clone\r\n    };\r\n    /* Date Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.renderDates = function (dateProfile) {\r\n        this.dateProfile = dateProfile;\r\n        this.updateDayTable();\r\n        this.renderSlats();\r\n        this.renderColumns();\r\n    };\r\n    TimeGrid.prototype.unrenderDates = function () {\r\n        // this.unrenderSlats(); // don't need this because repeated .html() calls clear\r\n        this.unrenderColumns();\r\n    };\r\n    TimeGrid.prototype.renderSkeleton = function () {\r\n        var theme = this.view.calendar.theme;\r\n        this.el.html('<div class=\"fc-bg\"></div>' +\r\n            '<div class=\"fc-slats\"></div>' +\r\n            '<hr class=\"fc-divider ' + theme.getClass('widgetHeader') + '\" style=\"display:none\"></hr>');\r\n        this.bottomRuleEl = this.el.find('hr');\r\n    };\r\n    TimeGrid.prototype.renderSlats = function () {\r\n        var theme = this.view.calendar.theme;\r\n        this.slatContainerEl = this.el.find('> .fc-slats')\r\n            .html(// avoids needing ::unrenderSlats()\r\n        '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            this.renderSlatRowHtml() +\r\n            '</table>');\r\n        this.slatEls = this.slatContainerEl.find('tr');\r\n        this.slatCoordCache = new CoordCache_1.default({\r\n            els: this.slatEls,\r\n            isVertical: true\r\n        });\r\n    };\r\n    // Generates the HTML for the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\r\n    TimeGrid.prototype.renderSlatRowHtml = function () {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var theme = calendar.theme;\r\n        var isRTL = this.isRTL;\r\n        var dateProfile = this.dateProfile;\r\n        var html = '';\r\n        var slotTime = moment.duration(+dateProfile.minTime); // wish there was .clone() for durations\r\n        var slotIterator = moment.duration(0);\r\n        var slotDate; // will be on the view's first day, but we only care about its time\r\n        var isLabeled;\r\n        var axisHtml;\r\n        // Calculate the time for each slot\r\n        while (slotTime < dateProfile.maxTime) {\r\n            slotDate = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs).time(slotTime);\r\n            isLabeled = util_1.isInt(util_1.divideDurationByDuration(slotIterator, this.labelInterval));\r\n            axisHtml =\r\n                '<td class=\"fc-axis fc-time ' + theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '>' +\r\n                    (isLabeled ?\r\n                        '<span>' + // for matchCellWidths\r\n                            util_1.htmlEscape(slotDate.format(this.labelFormat)) +\r\n                            '</span>' :\r\n                        '') +\r\n                    '</td>';\r\n            html +=\r\n                '<tr data-time=\"' + slotDate.format('HH:mm:ss') + '\"' +\r\n                    (isLabeled ? '' : ' class=\"fc-minor\"') +\r\n                    '>' +\r\n                    (!isRTL ? axisHtml : '') +\r\n                    '<td class=\"' + theme.getClass('widgetContent') + '\"></td>' +\r\n                    (isRTL ? axisHtml : '') +\r\n                    '</tr>';\r\n            slotTime.add(this.slotDuration);\r\n            slotIterator.add(this.slotDuration);\r\n        }\r\n        return html;\r\n    };\r\n    TimeGrid.prototype.renderColumns = function () {\r\n        var dateProfile = this.dateProfile;\r\n        var theme = this.view.calendar.theme;\r\n        this.dayRanges = this.dayDates.map(function (dayDate) {\r\n            return new UnzonedRange_1.default(dayDate.clone().add(dateProfile.minTime), dayDate.clone().add(dateProfile.maxTime));\r\n        });\r\n        if (this.headContainerEl) {\r\n            this.headContainerEl.html(this.renderHeadHtml());\r\n        }\r\n        this.el.find('> .fc-bg').html('<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            this.renderBgTrHtml(0) + // row=0\r\n            '</table>');\r\n        this.colEls = this.el.find('.fc-day, .fc-disabled-day');\r\n        this.colCoordCache = new CoordCache_1.default({\r\n            els: this.colEls,\r\n            isHorizontal: true\r\n        });\r\n        this.renderContentSkeleton();\r\n    };\r\n    TimeGrid.prototype.unrenderColumns = function () {\r\n        this.unrenderContentSkeleton();\r\n    };\r\n    /* Content Skeleton\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders the DOM that the view's content will live in\r\n    TimeGrid.prototype.renderContentSkeleton = function () {\r\n        var cellHtml = '';\r\n        var i;\r\n        var skeletonEl;\r\n        for (i = 0; i < this.colCnt; i++) {\r\n            cellHtml +=\r\n                '<td>' +\r\n                    '<div class=\"fc-content-col\">' +\r\n                    '<div class=\"fc-event-container fc-helper-container\"></div>' +\r\n                    '<div class=\"fc-event-container\"></div>' +\r\n                    '<div class=\"fc-highlight-container\"></div>' +\r\n                    '<div class=\"fc-bgevent-container\"></div>' +\r\n                    '<div class=\"fc-business-container\"></div>' +\r\n                    '</div>' +\r\n                    '</td>';\r\n        }\r\n        skeletonEl = this.contentSkeletonEl = $('<div class=\"fc-content-skeleton\">' +\r\n            '<table>' +\r\n            '<tr>' + cellHtml + '</tr>' +\r\n            '</table>' +\r\n            '</div>');\r\n        this.colContainerEls = skeletonEl.find('.fc-content-col');\r\n        this.helperContainerEls = skeletonEl.find('.fc-helper-container');\r\n        this.fgContainerEls = skeletonEl.find('.fc-event-container:not(.fc-helper-container)');\r\n        this.bgContainerEls = skeletonEl.find('.fc-bgevent-container');\r\n        this.highlightContainerEls = skeletonEl.find('.fc-highlight-container');\r\n        this.businessContainerEls = skeletonEl.find('.fc-business-container');\r\n        this.bookendCells(skeletonEl.find('tr')); // TODO: do this on string level\r\n        this.el.append(skeletonEl);\r\n    };\r\n    TimeGrid.prototype.unrenderContentSkeleton = function () {\r\n        if (this.contentSkeletonEl) { // defensive :(\r\n            this.contentSkeletonEl.remove();\r\n            this.contentSkeletonEl = null;\r\n            this.colContainerEls = null;\r\n            this.helperContainerEls = null;\r\n            this.fgContainerEls = null;\r\n            this.bgContainerEls = null;\r\n            this.highlightContainerEls = null;\r\n            this.businessContainerEls = null;\r\n        }\r\n    };\r\n    // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col\r\n    TimeGrid.prototype.groupSegsByCol = function (segs) {\r\n        var segsByCol = [];\r\n        var i;\r\n        for (i = 0; i < this.colCnt; i++) {\r\n            segsByCol.push([]);\r\n        }\r\n        for (i = 0; i < segs.length; i++) {\r\n            segsByCol[segs[i].col].push(segs[i]);\r\n        }\r\n        return segsByCol;\r\n    };\r\n    // Given segments grouped by column, insert the segments' elements into a parallel array of container\r\n    // elements, each living within a column.\r\n    TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {\r\n        var col;\r\n        var segs;\r\n        var i;\r\n        for (col = 0; col < this.colCnt; col++) { // iterate each column grouping\r\n            segs = segsByCol[col];\r\n            for (i = 0; i < segs.length; i++) {\r\n                containerEls.eq(col).append(segs[i].el);\r\n            }\r\n        }\r\n    };\r\n    /* Now Indicator\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.getNowIndicatorUnit = function () {\r\n        return 'minute'; // will refresh on the minute\r\n    };\r\n    TimeGrid.prototype.renderNowIndicator = function (date) {\r\n        // HACK: if date columns not ready for some reason (scheduler)\r\n        if (!this.colContainerEls) {\r\n            return;\r\n        }\r\n        // seg system might be overkill, but it handles scenario where line needs to be rendered\r\n        //  more than once because of columns with the same date (resources columns for example)\r\n        var segs = this.componentFootprintToSegs(new ComponentFootprint_1.default(new UnzonedRange_1.default(date, date.valueOf() + 1), // protect against null range\r\n        false // all-day\r\n        ));\r\n        var top = this.computeDateTop(date, date);\r\n        var nodes = [];\r\n        var i;\r\n        // render lines within the columns\r\n        for (i = 0; i < segs.length; i++) {\r\n            nodes.push($('<div class=\"fc-now-indicator fc-now-indicator-line\"></div>')\r\n                .css('top', top)\r\n                .appendTo(this.colContainerEls.eq(segs[i].col))[0]);\r\n        }\r\n        // render an arrow over the axis\r\n        if (segs.length > 0) { // is the current time in view?\r\n            nodes.push($('<div class=\"fc-now-indicator fc-now-indicator-arrow\"></div>')\r\n                .css('top', top)\r\n                .appendTo(this.el.find('.fc-content-skeleton'))[0]);\r\n        }\r\n        this.nowIndicatorEls = $(nodes);\r\n    };\r\n    TimeGrid.prototype.unrenderNowIndicator = function () {\r\n        if (this.nowIndicatorEls) {\r\n            this.nowIndicatorEls.remove();\r\n            this.nowIndicatorEls = null;\r\n        }\r\n    };\r\n    /* Coordinates\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        this.slatCoordCache.build();\r\n        if (isResize) {\r\n            this.updateSegVerticals([].concat(this.eventRenderer.getSegs(), this.businessSegs || []));\r\n        }\r\n    };\r\n    TimeGrid.prototype.getTotalSlatHeight = function () {\r\n        return this.slatContainerEl.outerHeight();\r\n    };\r\n    // Computes the top coordinate, relative to the bounds of the grid, of the given date.\r\n    // `ms` can be a millisecond UTC time OR a UTC moment.\r\n    // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\r\n    TimeGrid.prototype.computeDateTop = function (ms, startOfDayDate) {\r\n        return this.computeTimeTop(moment.duration(ms - startOfDayDate.clone().stripTime()));\r\n    };\r\n    // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\r\n    TimeGrid.prototype.computeTimeTop = function (time) {\r\n        var len = this.slatEls.length;\r\n        var dateProfile = this.dateProfile;\r\n        var slatCoverage = (time - dateProfile.minTime) / this.slotDuration; // floating-point value of # of slots covered\r\n        var slatIndex;\r\n        var slatRemainder;\r\n        // compute a floating-point number for how many slats should be progressed through.\r\n        // from 0 to number of slats (inclusive)\r\n        // constrained because minTime/maxTime might be customized.\r\n        slatCoverage = Math.max(0, slatCoverage);\r\n        slatCoverage = Math.min(len, slatCoverage);\r\n        // an integer index of the furthest whole slat\r\n        // from 0 to number slats (*exclusive*, so len-1)\r\n        slatIndex = Math.floor(slatCoverage);\r\n        slatIndex = Math.min(slatIndex, len - 1);\r\n        // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\r\n        // could be 1.0 if slatCoverage is covering *all* the slots\r\n        slatRemainder = slatCoverage - slatIndex;\r\n        return this.slatCoordCache.getTopPosition(slatIndex) +\r\n            this.slatCoordCache.getHeight(slatIndex) * slatRemainder;\r\n    };\r\n    // Refreshes the CSS top/bottom coordinates for each segment element.\r\n    // Works when called after initial render, after a window resize/zoom for example.\r\n    TimeGrid.prototype.updateSegVerticals = function (segs) {\r\n        this.computeSegVerticals(segs);\r\n        this.assignSegVerticals(segs);\r\n    };\r\n    // For each segment in an array, computes and assigns its top and bottom properties\r\n    TimeGrid.prototype.computeSegVerticals = function (segs) {\r\n        var eventMinHeight = this.opt('agendaEventMinHeight');\r\n        var i;\r\n        var seg;\r\n        var dayDate;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            dayDate = this.dayDates[seg.dayIndex];\r\n            seg.top = this.computeDateTop(seg.startMs, dayDate);\r\n            seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.endMs, dayDate));\r\n        }\r\n    };\r\n    // Given segments that already have their top/bottom properties computed, applies those values to\r\n    // the segments' elements.\r\n    TimeGrid.prototype.assignSegVerticals = function (segs) {\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            seg.el.css(this.generateSegVerticalCss(seg));\r\n        }\r\n    };\r\n    // Generates an object with CSS properties for the top/bottom coordinates of a segment element\r\n    TimeGrid.prototype.generateSegVerticalCss = function (seg) {\r\n        return {\r\n            top: seg.top,\r\n            bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container\r\n        };\r\n    };\r\n    /* Hit System\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.prepareHits = function () {\r\n        this.colCoordCache.build();\r\n        this.slatCoordCache.build();\r\n    };\r\n    TimeGrid.prototype.releaseHits = function () {\r\n        this.colCoordCache.clear();\r\n        // NOTE: don't clear slatCoordCache because we rely on it for computeTimeTop\r\n    };\r\n    TimeGrid.prototype.queryHit = function (leftOffset, topOffset) {\r\n        var snapsPerSlot = this.snapsPerSlot;\r\n        var colCoordCache = this.colCoordCache;\r\n        var slatCoordCache = this.slatCoordCache;\r\n        if (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) {\r\n            var colIndex = colCoordCache.getHorizontalIndex(leftOffset);\r\n            var slatIndex = slatCoordCache.getVerticalIndex(topOffset);\r\n            if (colIndex != null && slatIndex != null) {\r\n                var slatTop = slatCoordCache.getTopOffset(slatIndex);\r\n                var slatHeight = slatCoordCache.getHeight(slatIndex);\r\n                var partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1\r\n                var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\r\n                var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\r\n                var snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight;\r\n                var snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight;\r\n                return {\r\n                    col: colIndex,\r\n                    snap: snapIndex,\r\n                    component: this,\r\n                    left: colCoordCache.getLeftOffset(colIndex),\r\n                    right: colCoordCache.getRightOffset(colIndex),\r\n                    top: snapTop,\r\n                    bottom: snapBottom\r\n                };\r\n            }\r\n        }\r\n    };\r\n    TimeGrid.prototype.getHitFootprint = function (hit) {\r\n        var start = this.getCellDate(0, hit.col); // row=0\r\n        var time = this.computeSnapTime(hit.snap); // pass in the snap-index\r\n        var end;\r\n        start.time(time);\r\n        end = start.clone().add(this.snapDuration);\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), false // all-day?\r\n        );\r\n    };\r\n    // Given a row number of the grid, representing a \"snap\", returns a time (Duration) from its start-of-day\r\n    TimeGrid.prototype.computeSnapTime = function (snapIndex) {\r\n        return moment.duration(this.dateProfile.minTime + this.snapDuration * snapIndex);\r\n    };\r\n    TimeGrid.prototype.getHitEl = function (hit) {\r\n        return this.colEls.eq(hit.col);\r\n    };\r\n    /* Event Drag Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event being dragged over the specified date(s).\r\n    // A returned value of `true` signals that a mock \"helper\" event has been rendered.\r\n    TimeGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var i;\r\n        if (seg) { // if there is event information for this drag, render a helper event\r\n            if (eventFootprints.length) {\r\n                this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n                // signal that a helper has been rendered\r\n                return true;\r\n            }\r\n        }\r\n        else { // otherwise, just render a highlight\r\n            for (i = 0; i < eventFootprints.length; i++) {\r\n                this.renderHighlight(eventFootprints[i].componentFootprint);\r\n            }\r\n        }\r\n    };\r\n    // Unrenders any visual indication of an event being dragged\r\n    TimeGrid.prototype.unrenderDrag = function () {\r\n        this.unrenderHighlight();\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* Event Resize Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event being resized\r\n    TimeGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n    };\r\n    // Unrenders any visual indication of an event being resized\r\n    TimeGrid.prototype.unrenderEventResize = function () {\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* Selection\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.\r\n    TimeGrid.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n        if (this.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered\r\n            this.helperRenderer.renderComponentFootprint(componentFootprint);\r\n        }\r\n        else {\r\n            this.renderHighlight(componentFootprint);\r\n        }\r\n    };\r\n    // Unrenders any visual indication of a selection\r\n    TimeGrid.prototype.unrenderSelection = function () {\r\n        this.helperRenderer.unrender();\r\n        this.unrenderHighlight();\r\n    };\r\n    return TimeGrid;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = TimeGrid;\r\nTimeGrid.prototype.eventRendererClass = TimeGridEventRenderer_1.default;\r\nTimeGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;\r\nTimeGrid.prototype.helperRendererClass = TimeGridHelperRenderer_1.default;\r\nTimeGrid.prototype.fillRendererClass = TimeGridFillRenderer_1.default;\r\nStandardInteractionsMixin_1.default.mixInto(TimeGrid);\r\nDayTableMixin_1.default.mixInto(TimeGrid);\r\n\n\n/***/ }),\n/* 240 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\n/*\r\nOnly handles foreground segs.\r\nDoes not own rendering. Use for low-level util methods by TimeGrid.\r\n*/\r\nvar TimeGridEventRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGridEventRenderer, _super);\r\n    function TimeGridEventRenderer(timeGrid, fillRenderer) {\r\n        var _this = _super.call(this, timeGrid, fillRenderer) || this;\r\n        _this.timeGrid = timeGrid;\r\n        return _this;\r\n    }\r\n    TimeGridEventRenderer.prototype.renderFgSegs = function (segs) {\r\n        this.renderFgSegsIntoContainers(segs, this.timeGrid.fgContainerEls);\r\n    };\r\n    // Given an array of foreground segments, render a DOM element for each, computes position,\r\n    // and attaches to the column inner-container elements.\r\n    TimeGridEventRenderer.prototype.renderFgSegsIntoContainers = function (segs, containerEls) {\r\n        var segsByCol;\r\n        var col;\r\n        segsByCol = this.timeGrid.groupSegsByCol(segs);\r\n        for (col = 0; col < this.timeGrid.colCnt; col++) {\r\n            this.updateFgSegCoords(segsByCol[col]);\r\n        }\r\n        this.timeGrid.attachSegsByCol(segsByCol, containerEls);\r\n    };\r\n    TimeGridEventRenderer.prototype.unrenderFgSegs = function () {\r\n        if (this.fgSegs) { // hack\r\n            this.fgSegs.forEach(function (seg) {\r\n                seg.el.remove();\r\n            });\r\n        }\r\n    };\r\n    // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n    TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('noMeridiemTimeFormat'); // like \"6:30\" (no AM/PM)\r\n    };\r\n    // Computes a default `displayEventEnd` value if one is not expliclty defined\r\n    TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n        return true;\r\n    };\r\n    // Renders the HTML for a single event segment's default rendering\r\n    TimeGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var componentFootprint = seg.footprint.componentFootprint;\r\n        var isAllDay = componentFootprint.isAllDay;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var isDraggable = view.isEventDefDraggable(eventDef);\r\n        var isResizableFromStart = !disableResizing && seg.isStart && view.isEventDefResizableFromStart(eventDef);\r\n        var isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\r\n        var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n        var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\r\n        var timeText;\r\n        var fullTimeText; // more verbose time text. for the print stylesheet\r\n        var startTimeText; // just the start time text\r\n        classes.unshift('fc-time-grid-event', 'fc-v-event');\r\n        // if the event appears to span more than one day...\r\n        if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\r\n            // Don't display time text on segments that run entirely through a day.\r\n            // That would appear as midnight-midnight and would look dumb.\r\n            // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)\r\n            if (seg.isStart || seg.isEnd) {\r\n                var zonedStart = calendar.msToMoment(seg.startMs);\r\n                var zonedEnd = calendar.msToMoment(seg.endMs);\r\n                timeText = this._getTimeText(zonedStart, zonedEnd, isAllDay);\r\n                fullTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, 'LT');\r\n                startTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, null, false); // displayEnd=false\r\n            }\r\n        }\r\n        else {\r\n            // Display the normal time text for the *event's* times\r\n            timeText = this.getTimeText(seg.footprint);\r\n            fullTimeText = this.getTimeText(seg.footprint, 'LT');\r\n            startTimeText = this.getTimeText(seg.footprint, null, false); // displayEnd=false\r\n        }\r\n        return '<a class=\"' + classes.join(' ') + '\"' +\r\n            (eventDef.url ?\r\n                ' href=\"' + util_1.htmlEscape(eventDef.url) + '\"' :\r\n                '') +\r\n            (skinCss ?\r\n                ' style=\"' + skinCss + '\"' :\r\n                '') +\r\n            '>' +\r\n            '<div class=\"fc-content\">' +\r\n            (timeText ?\r\n                '<div class=\"fc-time\"' +\r\n                    ' data-start=\"' + util_1.htmlEscape(startTimeText) + '\"' +\r\n                    ' data-full=\"' + util_1.htmlEscape(fullTimeText) + '\"' +\r\n                    '>' +\r\n                    '<span>' + util_1.htmlEscape(timeText) + '</span>' +\r\n                    '</div>' :\r\n                '') +\r\n            (eventDef.title ?\r\n                '<div class=\"fc-title\">' +\r\n                    util_1.htmlEscape(eventDef.title) +\r\n                    '</div>' :\r\n                '') +\r\n            '</div>' +\r\n            '<div class=\"fc-bg\"></div>' +\r\n            /* TODO: write CSS for this\r\n            (isResizableFromStart ?\r\n              '<div class=\"fc-resizer fc-start-resizer\"></div>' :\r\n              ''\r\n              ) +\r\n            */\r\n            (isResizableFromEnd ?\r\n                '<div class=\"fc-resizer fc-end-resizer\"></div>' :\r\n                '') +\r\n            '</a>';\r\n    };\r\n    // Given segments that are assumed to all live in the *same column*,\r\n    // compute their verical/horizontal coordinates and assign to their elements.\r\n    TimeGridEventRenderer.prototype.updateFgSegCoords = function (segs) {\r\n        this.timeGrid.computeSegVerticals(segs); // horizontals relies on this\r\n        this.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array\r\n        this.timeGrid.assignSegVerticals(segs);\r\n        this.assignFgSegHorizontals(segs);\r\n    };\r\n    // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.\r\n    // NOTE: Also reorders the given array by date!\r\n    TimeGridEventRenderer.prototype.computeFgSegHorizontals = function (segs) {\r\n        var levels;\r\n        var level0;\r\n        var i;\r\n        this.sortEventSegs(segs); // order by certain criteria\r\n        levels = buildSlotSegLevels(segs);\r\n        computeForwardSlotSegs(levels);\r\n        if ((level0 = levels[0])) {\r\n            for (i = 0; i < level0.length; i++) {\r\n                computeSlotSegPressures(level0[i]);\r\n            }\r\n            for (i = 0; i < level0.length; i++) {\r\n                this.computeFgSegForwardBack(level0[i], 0, 0);\r\n            }\r\n        }\r\n    };\r\n    // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range\r\n    // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to \"left\" and\r\n    // seg.forwardCoord maps to \"right\" (via percentage). Vice-versa if the calendar is right-to-left.\r\n    //\r\n    // The segment might be part of a \"series\", which means consecutive segments with the same pressure\r\n    // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of\r\n    // segments behind this one in the current series, and `seriesBackwardCoord` is the starting\r\n    // coordinate of the first segment in the series.\r\n    TimeGridEventRenderer.prototype.computeFgSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {\r\n        var forwardSegs = seg.forwardSegs;\r\n        var i;\r\n        if (seg.forwardCoord === undefined) { // not already computed\r\n            if (!forwardSegs.length) {\r\n                // if there are no forward segments, this segment should butt up against the edge\r\n                seg.forwardCoord = 1;\r\n            }\r\n            else {\r\n                // sort highest pressure first\r\n                this.sortForwardSegs(forwardSegs);\r\n                // this segment's forwardCoord will be calculated from the backwardCoord of the\r\n                // highest-pressure forward segment.\r\n                this.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);\r\n                seg.forwardCoord = forwardSegs[0].backwardCoord;\r\n            }\r\n            // calculate the backwardCoord from the forwardCoord. consider the series\r\n            seg.backwardCoord = seg.forwardCoord -\r\n                (seg.forwardCoord - seriesBackwardCoord) / // available width for series\r\n                    (seriesBackwardPressure + 1); // # of segments in the series\r\n            // use this segment's coordinates to computed the coordinates of the less-pressurized\r\n            // forward segments\r\n            for (i = 0; i < forwardSegs.length; i++) {\r\n                this.computeFgSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);\r\n            }\r\n        }\r\n    };\r\n    TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {\r\n        forwardSegs.sort(util_1.proxy(this, 'compareForwardSegs'));\r\n    };\r\n    // A cmp function for determining which forward segment to rely on more when computing coordinates.\r\n    TimeGridEventRenderer.prototype.compareForwardSegs = function (seg1, seg2) {\r\n        // put higher-pressure first\r\n        return seg2.forwardPressure - seg1.forwardPressure ||\r\n            // put segments that are closer to initial edge first (and favor ones with no coords yet)\r\n            (seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) ||\r\n            // do normal sorting...\r\n            this.compareEventSegs(seg1, seg2);\r\n    };\r\n    // Given foreground event segments that have already had their position coordinates computed,\r\n    // assigns position-related CSS values to their elements.\r\n    TimeGridEventRenderer.prototype.assignFgSegHorizontals = function (segs) {\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            seg.el.css(this.generateFgSegHorizontalCss(seg));\r\n            // if the event is short that the title will be cut off,\r\n            // attach a className that condenses the title into the time area.\r\n            if (seg.footprint.eventDef.title && seg.bottom - seg.top < 30) {\r\n                seg.el.addClass('fc-short'); // TODO: \"condensed\" is a better name\r\n            }\r\n        }\r\n    };\r\n    // Generates an object with CSS properties/values that should be applied to an event segment element.\r\n    // Contains important positioning-related properties that should be applied to any event element, customized or not.\r\n    TimeGridEventRenderer.prototype.generateFgSegHorizontalCss = function (seg) {\r\n        var shouldOverlap = this.opt('slotEventOverlap');\r\n        var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point\r\n        var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point\r\n        var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first\r\n        var isRTL = this.timeGrid.isRTL;\r\n        var left; // amount of space from left edge, a fraction of the total width\r\n        var right; // amount of space from right edge, a fraction of the total width\r\n        if (shouldOverlap) {\r\n            // double the width, but don't go beyond the maximum forward coordinate (1.0)\r\n            forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);\r\n        }\r\n        if (isRTL) {\r\n            left = 1 - forwardCoord;\r\n            right = backwardCoord;\r\n        }\r\n        else {\r\n            left = backwardCoord;\r\n            right = 1 - forwardCoord;\r\n        }\r\n        props.zIndex = seg.level + 1; // convert from 0-base to 1-based\r\n        props.left = left * 100 + '%';\r\n        props.right = right * 100 + '%';\r\n        if (shouldOverlap && seg.forwardPressure) {\r\n            // add padding to the edge so that forward stacked events don't cover the resizer's icon\r\n            props[isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\r\n        }\r\n        return props;\r\n    };\r\n    return TimeGridEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = TimeGridEventRenderer;\r\n// Builds an array of segments \"levels\". The first level will be the leftmost tier of segments if the calendar is\r\n// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.\r\nfunction buildSlotSegLevels(segs) {\r\n    var levels = [];\r\n    var i;\r\n    var seg;\r\n    var j;\r\n    for (i = 0; i < segs.length; i++) {\r\n        seg = segs[i];\r\n        // go through all the levels and stop on the first level where there are no collisions\r\n        for (j = 0; j < levels.length; j++) {\r\n            if (!computeSlotSegCollisions(seg, levels[j]).length) {\r\n                break;\r\n            }\r\n        }\r\n        seg.level = j;\r\n        (levels[j] || (levels[j] = [])).push(seg);\r\n    }\r\n    return levels;\r\n}\r\n// For every segment, figure out the other segments that are in subsequent\r\n// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs\r\nfunction computeForwardSlotSegs(levels) {\r\n    var i;\r\n    var level;\r\n    var j;\r\n    var seg;\r\n    var k;\r\n    for (i = 0; i < levels.length; i++) {\r\n        level = levels[i];\r\n        for (j = 0; j < level.length; j++) {\r\n            seg = level[j];\r\n            seg.forwardSegs = [];\r\n            for (k = i + 1; k < levels.length; k++) {\r\n                computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);\r\n            }\r\n        }\r\n    }\r\n}\r\n// Figure out which path forward (via seg.forwardSegs) results in the longest path until\r\n// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure\r\nfunction computeSlotSegPressures(seg) {\r\n    var forwardSegs = seg.forwardSegs;\r\n    var forwardPressure = 0;\r\n    var i;\r\n    var forwardSeg;\r\n    if (seg.forwardPressure === undefined) { // not already computed\r\n        for (i = 0; i < forwardSegs.length; i++) {\r\n            forwardSeg = forwardSegs[i];\r\n            // figure out the child's maximum forward path\r\n            computeSlotSegPressures(forwardSeg);\r\n            // either use the existing maximum, or use the child's forward pressure\r\n            // plus one (for the forwardSeg itself)\r\n            forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);\r\n        }\r\n        seg.forwardPressure = forwardPressure;\r\n    }\r\n}\r\n// Find all the segments in `otherSegs` that vertically collide with `seg`.\r\n// Append into an optionally-supplied `results` array and return.\r\nfunction computeSlotSegCollisions(seg, otherSegs, results) {\r\n    if (results === void 0) { results = []; }\r\n    for (var i = 0; i < otherSegs.length; i++) {\r\n        if (isSlotSegCollision(seg, otherSegs[i])) {\r\n            results.push(otherSegs[i]);\r\n        }\r\n    }\r\n    return results;\r\n}\r\n// Do these segments occupy the same vertical space?\r\nfunction isSlotSegCollision(seg1, seg2) {\r\n    return seg1.bottom > seg2.top && seg1.top < seg2.bottom;\r\n}\r\n\n\n/***/ }),\n/* 241 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nvar TimeGridHelperRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGridHelperRenderer, _super);\r\n    function TimeGridHelperRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TimeGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n        var helperNodes = [];\r\n        var i;\r\n        var seg;\r\n        var sourceEl;\r\n        // TODO: not good to call eventRenderer this way\r\n        this.eventRenderer.renderFgSegsIntoContainers(segs, this.component.helperContainerEls);\r\n        // Try to make the segment that is in the same row as sourceSeg look the same\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            if (sourceSeg && sourceSeg.col === seg.col) {\r\n                sourceEl = sourceSeg.el;\r\n                seg.el.css({\r\n                    left: sourceEl.css('left'),\r\n                    right: sourceEl.css('right'),\r\n                    'margin-left': sourceEl.css('margin-left'),\r\n                    'margin-right': sourceEl.css('margin-right')\r\n                });\r\n            }\r\n            helperNodes.push(seg.el[0]);\r\n        }\r\n        return $(helperNodes); // must return the elements rendered\r\n    };\r\n    return TimeGridHelperRenderer;\r\n}(HelperRenderer_1.default));\r\nexports.default = TimeGridHelperRenderer;\r\n\n\n/***/ }),\n/* 242 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nvar TimeGridFillRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGridFillRenderer, _super);\r\n    function TimeGridFillRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TimeGridFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n        var timeGrid = this.component;\r\n        var containerEls;\r\n        // TODO: more efficient lookup\r\n        if (type === 'bgEvent') {\r\n            containerEls = timeGrid.bgContainerEls;\r\n        }\r\n        else if (type === 'businessHours') {\r\n            containerEls = timeGrid.businessContainerEls;\r\n        }\r\n        else if (type === 'highlight') {\r\n            containerEls = timeGrid.highlightContainerEls;\r\n        }\r\n        timeGrid.updateSegVerticals(segs);\r\n        timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);\r\n        return segs.map(function (seg) {\r\n            return seg.el[0];\r\n        });\r\n    };\r\n    return TimeGridFillRenderer;\r\n}(FillRenderer_1.default));\r\nexports.default = TimeGridFillRenderer;\r\n\n\n/***/ }),\n/* 243 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\n/* Event-rendering methods for the DayGrid class\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar DayGridEventRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGridEventRenderer, _super);\r\n    function DayGridEventRenderer(dayGrid, fillRenderer) {\r\n        var _this = _super.call(this, dayGrid, fillRenderer) || this;\r\n        _this.dayGrid = dayGrid;\r\n        return _this;\r\n    }\r\n    DayGridEventRenderer.prototype.renderBgRanges = function (eventRanges) {\r\n        // don't render timed background events\r\n        eventRanges = $.grep(eventRanges, function (eventRange) {\r\n            return eventRange.eventDef.isAllDay();\r\n        });\r\n        _super.prototype.renderBgRanges.call(this, eventRanges);\r\n    };\r\n    // Renders the given foreground event segments onto the grid\r\n    DayGridEventRenderer.prototype.renderFgSegs = function (segs) {\r\n        var rowStructs = this.rowStructs = this.renderSegRows(segs);\r\n        // append to each row's content skeleton\r\n        this.dayGrid.rowEls.each(function (i, rowNode) {\r\n            $(rowNode).find('.fc-content-skeleton > table').append(rowStructs[i].tbodyEl);\r\n        });\r\n    };\r\n    // Unrenders all currently rendered foreground event segments\r\n    DayGridEventRenderer.prototype.unrenderFgSegs = function () {\r\n        var rowStructs = this.rowStructs || [];\r\n        var rowStruct;\r\n        while ((rowStruct = rowStructs.pop())) {\r\n            rowStruct.tbodyEl.remove();\r\n        }\r\n        this.rowStructs = null;\r\n    };\r\n    // Uses the given events array to generate <tbody> elements that should be appended to each row's content skeleton.\r\n    // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).\r\n    // PRECONDITION: each segment shoud already have a rendered and assigned `.el`\r\n    DayGridEventRenderer.prototype.renderSegRows = function (segs) {\r\n        var rowStructs = [];\r\n        var segRows;\r\n        var row;\r\n        segRows = this.groupSegRows(segs); // group into nested arrays\r\n        // iterate each row of segment groupings\r\n        for (row = 0; row < segRows.length; row++) {\r\n            rowStructs.push(this.renderSegRow(row, segRows[row]));\r\n        }\r\n        return rowStructs;\r\n    };\r\n    // Given a row # and an array of segments all in the same row, render a <tbody> element, a skeleton that contains\r\n    // the segments. Returns object with a bunch of internal data about how the render was calculated.\r\n    // NOTE: modifies rowSegs\r\n    DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {\r\n        var colCnt = this.dayGrid.colCnt;\r\n        var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels\r\n        var levelCnt = Math.max(1, segLevels.length); // ensure at least one level\r\n        var tbody = $('<tbody>');\r\n        var segMatrix = []; // lookup for which segments are rendered into which level+col cells\r\n        var cellMatrix = []; // lookup for all <td> elements of the level+col matrix\r\n        var loneCellMatrix = []; // lookup for <td> elements that only take up a single column\r\n        var i;\r\n        var levelSegs;\r\n        var col;\r\n        var tr;\r\n        var j;\r\n        var seg;\r\n        var td;\r\n        // populates empty cells from the current column (`col`) to `endCol`\r\n        function emptyCellsUntil(endCol) {\r\n            while (col < endCol) {\r\n                // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell\r\n                td = (loneCellMatrix[i - 1] || [])[col];\r\n                if (td) {\r\n                    td.attr('rowspan', parseInt(td.attr('rowspan') || 1, 10) + 1);\r\n                }\r\n                else {\r\n                    td = $('<td>');\r\n                    tr.append(td);\r\n                }\r\n                cellMatrix[i][col] = td;\r\n                loneCellMatrix[i][col] = td;\r\n                col++;\r\n            }\r\n        }\r\n        for (i = 0; i < levelCnt; i++) { // iterate through all levels\r\n            levelSegs = segLevels[i];\r\n            col = 0;\r\n            tr = $('<tr>');\r\n            segMatrix.push([]);\r\n            cellMatrix.push([]);\r\n            loneCellMatrix.push([]);\r\n            // levelCnt might be 1 even though there are no actual levels. protect against this.\r\n            // this single empty row is useful for styling.\r\n            if (levelSegs) {\r\n                for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level\r\n                    seg = levelSegs[j];\r\n                    emptyCellsUntil(seg.leftCol);\r\n                    // create a container that occupies or more columns. append the event element.\r\n                    td = $('<td class=\"fc-event-container\">').append(seg.el);\r\n                    if (seg.leftCol !== seg.rightCol) {\r\n                        td.attr('colspan', seg.rightCol - seg.leftCol + 1);\r\n                    }\r\n                    else { // a single-column segment\r\n                        loneCellMatrix[i][col] = td;\r\n                    }\r\n                    while (col <= seg.rightCol) {\r\n                        cellMatrix[i][col] = td;\r\n                        segMatrix[i][col] = seg;\r\n                        col++;\r\n                    }\r\n                    tr.append(td);\r\n                }\r\n            }\r\n            emptyCellsUntil(colCnt); // finish off the row\r\n            this.dayGrid.bookendCells(tr);\r\n            tbody.append(tr);\r\n        }\r\n        return {\r\n            row: row,\r\n            tbodyEl: tbody,\r\n            cellMatrix: cellMatrix,\r\n            segMatrix: segMatrix,\r\n            segLevels: segLevels,\r\n            segs: rowSegs\r\n        };\r\n    };\r\n    // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.\r\n    // NOTE: modifies segs\r\n    DayGridEventRenderer.prototype.buildSegLevels = function (segs) {\r\n        var levels = [];\r\n        var i;\r\n        var seg;\r\n        var j;\r\n        // Give preference to elements with certain criteria, so they have\r\n        // a chance to be closer to the top.\r\n        this.sortEventSegs(segs);\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            // loop through levels, starting with the topmost, until the segment doesn't collide with other segments\r\n            for (j = 0; j < levels.length; j++) {\r\n                if (!isDaySegCollision(seg, levels[j])) {\r\n                    break;\r\n                }\r\n            }\r\n            // `j` now holds the desired subrow index\r\n            seg.level = j;\r\n            // create new level array if needed and append segment\r\n            (levels[j] || (levels[j] = [])).push(seg);\r\n        }\r\n        // order segments left-to-right. very important if calendar is RTL\r\n        for (j = 0; j < levels.length; j++) {\r\n            levels[j].sort(compareDaySegCols);\r\n        }\r\n        return levels;\r\n    };\r\n    // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row\r\n    DayGridEventRenderer.prototype.groupSegRows = function (segs) {\r\n        var segRows = [];\r\n        var i;\r\n        for (i = 0; i < this.dayGrid.rowCnt; i++) {\r\n            segRows.push([]);\r\n        }\r\n        for (i = 0; i < segs.length; i++) {\r\n            segRows[segs[i].row].push(segs[i]);\r\n        }\r\n        return segRows;\r\n    };\r\n    // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n    DayGridEventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('extraSmallTimeFormat'); // like \"6p\" or \"6:30p\"\r\n    };\r\n    // Computes a default `displayEventEnd` value if one is not expliclty defined\r\n    DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n        return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day\r\n    };\r\n    // Builds the HTML to be used for the default element for an individual segment\r\n    DayGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n        var view = this.view;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var isAllDay = seg.footprint.componentFootprint.isAllDay;\r\n        var isDraggable = view.isEventDefDraggable(eventDef);\r\n        var isResizableFromStart = !disableResizing && isAllDay &&\r\n            seg.isStart && view.isEventDefResizableFromStart(eventDef);\r\n        var isResizableFromEnd = !disableResizing && isAllDay &&\r\n            seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\r\n        var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n        var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\r\n        var timeHtml = '';\r\n        var timeText;\r\n        var titleHtml;\r\n        classes.unshift('fc-day-grid-event', 'fc-h-event');\r\n        // Only display a timed events time if it is the starting segment\r\n        if (seg.isStart) {\r\n            timeText = this.getTimeText(seg.footprint);\r\n            if (timeText) {\r\n                timeHtml = '<span class=\"fc-time\">' + util_1.htmlEscape(timeText) + '</span>';\r\n            }\r\n        }\r\n        titleHtml =\r\n            '<span class=\"fc-title\">' +\r\n                (util_1.htmlEscape(eventDef.title || '') || '&nbsp;') + // we always want one line of height\r\n                '</span>';\r\n        return '<a class=\"' + classes.join(' ') + '\"' +\r\n            (eventDef.url ?\r\n                ' href=\"' + util_1.htmlEscape(eventDef.url) + '\"' :\r\n                '') +\r\n            (skinCss ?\r\n                ' style=\"' + skinCss + '\"' :\r\n                '') +\r\n            '>' +\r\n            '<div class=\"fc-content\">' +\r\n            (this.dayGrid.isRTL ?\r\n                titleHtml + ' ' + timeHtml : // put a natural space in between\r\n                timeHtml + ' ' + titleHtml //\r\n            ) +\r\n            '</div>' +\r\n            (isResizableFromStart ?\r\n                '<div class=\"fc-resizer fc-start-resizer\"></div>' :\r\n                '') +\r\n            (isResizableFromEnd ?\r\n                '<div class=\"fc-resizer fc-end-resizer\"></div>' :\r\n                '') +\r\n            '</a>';\r\n    };\r\n    return DayGridEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = DayGridEventRenderer;\r\n// Computes whether two segments' columns collide. They are assumed to be in the same row.\r\nfunction isDaySegCollision(seg, otherSegs) {\r\n    var i;\r\n    var otherSeg;\r\n    for (i = 0; i < otherSegs.length; i++) {\r\n        otherSeg = otherSegs[i];\r\n        if (otherSeg.leftCol <= seg.rightCol &&\r\n            otherSeg.rightCol >= seg.leftCol) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n// A cmp function for determining the leftmost event\r\nfunction compareDaySegCols(a, b) {\r\n    return a.leftCol - b.leftCol;\r\n}\r\n\n\n/***/ }),\n/* 244 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nvar DayGridHelperRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGridHelperRenderer, _super);\r\n    function DayGridHelperRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Renders a mock \"helper\" event. `sourceSeg` is the associated internal segment object. It can be null.\r\n    DayGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n        var helperNodes = [];\r\n        var rowStructs;\r\n        // TODO: not good to call eventRenderer this way\r\n        rowStructs = this.eventRenderer.renderSegRows(segs);\r\n        // inject each new event skeleton into each associated row\r\n        this.component.rowEls.each(function (row, rowNode) {\r\n            var rowEl = $(rowNode); // the .fc-row\r\n            var skeletonEl = $('<div class=\"fc-helper-skeleton\"><table></table></div>'); // will be absolutely positioned\r\n            var skeletonTopEl;\r\n            var skeletonTop;\r\n            // If there is an original segment, match the top position. Otherwise, put it at the row's top level\r\n            if (sourceSeg && sourceSeg.row === row) {\r\n                skeletonTop = sourceSeg.el.position().top;\r\n            }\r\n            else {\r\n                skeletonTopEl = rowEl.find('.fc-content-skeleton tbody');\r\n                if (!skeletonTopEl.length) { // when no events\r\n                    skeletonTopEl = rowEl.find('.fc-content-skeleton table');\r\n                }\r\n                skeletonTop = skeletonTopEl.position().top;\r\n            }\r\n            skeletonEl.css('top', skeletonTop)\r\n                .find('table')\r\n                .append(rowStructs[row].tbodyEl);\r\n            rowEl.append(skeletonEl);\r\n            helperNodes.push(skeletonEl[0]);\r\n        });\r\n        return $(helperNodes); // must return the elements rendered\r\n    };\r\n    return DayGridHelperRenderer;\r\n}(HelperRenderer_1.default));\r\nexports.default = DayGridHelperRenderer;\r\n\n\n/***/ }),\n/* 245 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nvar DayGridFillRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGridFillRenderer, _super);\r\n    function DayGridFillRenderer() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.fillSegTag = 'td'; // override the default tag name\r\n        return _this;\r\n    }\r\n    DayGridFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n        var nodes = [];\r\n        var i;\r\n        var seg;\r\n        var skeletonEl;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            skeletonEl = this.renderFillRow(type, seg);\r\n            this.component.rowEls.eq(seg.row).append(skeletonEl);\r\n            nodes.push(skeletonEl[0]);\r\n        }\r\n        return nodes;\r\n    };\r\n    // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.\r\n    DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {\r\n        var colCnt = this.component.colCnt;\r\n        var startCol = seg.leftCol;\r\n        var endCol = seg.rightCol + 1;\r\n        var className;\r\n        var skeletonEl;\r\n        var trEl;\r\n        if (type === 'businessHours') {\r\n            className = 'bgevent';\r\n        }\r\n        else {\r\n            className = type.toLowerCase();\r\n        }\r\n        skeletonEl = $('<div class=\"fc-' + className + '-skeleton\">' +\r\n            '<table><tr></tr></table>' +\r\n            '</div>');\r\n        trEl = skeletonEl.find('tr');\r\n        if (startCol > 0) {\r\n            trEl.append(\r\n            // will create (startCol + 1) td's\r\n            new Array(startCol + 1).join('<td></td>'));\r\n        }\r\n        trEl.append(seg.el.attr('colspan', endCol - startCol));\r\n        if (endCol < colCnt) {\r\n            trEl.append(\r\n            // will create (colCnt - endCol) td's\r\n            new Array(colCnt - endCol + 1).join('<td></td>'));\r\n        }\r\n        this.component.bookendCells(trEl);\r\n        return skeletonEl;\r\n    };\r\n    return DayGridFillRenderer;\r\n}(FillRenderer_1.default));\r\nexports.default = DayGridFillRenderer;\r\n\n\n/***/ }),\n/* 246 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar BasicView_1 = __webpack_require__(67);\r\nvar MonthViewDateProfileGenerator_1 = __webpack_require__(247);\r\n/* A month view with day cells running in rows (one-per-week) and columns\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar MonthView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MonthView, _super);\r\n    function MonthView() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Overrides the default BasicView behavior to have special multi-week auto-height logic\r\n    MonthView.prototype.setGridHeight = function (height, isAuto) {\r\n        // if auto, make the height of each row the height that it would be if there were 6 weeks\r\n        if (isAuto) {\r\n            height *= this.dayGrid.rowCnt / 6;\r\n        }\r\n        util_1.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows\r\n    };\r\n    MonthView.prototype.isDateInOtherMonth = function (date, dateProfile) {\r\n        return date.month() !== moment.utc(dateProfile.currentUnzonedRange.startMs).month(); // TODO: optimize\r\n    };\r\n    return MonthView;\r\n}(BasicView_1.default));\r\nexports.default = MonthView;\r\nMonthView.prototype.dateProfileGeneratorClass = MonthViewDateProfileGenerator_1.default;\r\n\n\n/***/ }),\n/* 247 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar MonthViewDateProfileGenerator = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MonthViewDateProfileGenerator, _super);\r\n    function MonthViewDateProfileGenerator() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Computes the date range that will be rendered.\r\n    MonthViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n        var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay);\r\n        var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\r\n        var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\r\n        var rowCnt;\r\n        // ensure 6 weeks\r\n        if (this.opt('fixedWeekCount')) {\r\n            rowCnt = Math.ceil(// could be partial weeks due to hiddenDays\r\n            end.diff(start, 'weeks', true) // dontRound=true\r\n            );\r\n            end.add(6 - rowCnt, 'weeks');\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    return MonthViewDateProfileGenerator;\r\n}(BasicViewDateProfileGenerator_1.default));\r\nexports.default = MonthViewDateProfileGenerator;\r\n\n\n/***/ }),\n/* 248 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar View_1 = __webpack_require__(43);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar ListEventRenderer_1 = __webpack_require__(249);\r\nvar ListEventPointing_1 = __webpack_require__(250);\r\n/*\r\nResponsible for the scroller, and forwarding event-related actions into the \"grid\".\r\n*/\r\nvar ListView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListView, _super);\r\n    function ListView(calendar, viewSpec) {\r\n        var _this = _super.call(this, calendar, viewSpec) || this;\r\n        _this.segSelector = '.fc-list-item'; // which elements accept event actions\r\n        _this.scroller = new Scroller_1.default({\r\n            overflowX: 'hidden',\r\n            overflowY: 'auto'\r\n        });\r\n        return _this;\r\n    }\r\n    ListView.prototype.renderSkeleton = function () {\r\n        this.el.addClass('fc-list-view ' +\r\n            this.calendar.theme.getClass('listView'));\r\n        this.scroller.render();\r\n        this.scroller.el.appendTo(this.el);\r\n        this.contentEl = this.scroller.scrollEl; // shortcut\r\n    };\r\n    ListView.prototype.unrenderSkeleton = function () {\r\n        this.scroller.destroy(); // will remove the Grid too\r\n    };\r\n    ListView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        this.scroller.clear(); // sets height to 'auto' and clears overflow\r\n        if (!isAuto) {\r\n            this.scroller.setHeight(this.computeScrollerHeight(totalHeight));\r\n        }\r\n    };\r\n    ListView.prototype.computeScrollerHeight = function (totalHeight) {\r\n        return totalHeight -\r\n            util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n    };\r\n    ListView.prototype.renderDates = function (dateProfile) {\r\n        var calendar = this.calendar;\r\n        var dayStart = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs, true);\r\n        var viewEnd = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.endMs, true);\r\n        var dayDates = [];\r\n        var dayRanges = [];\r\n        while (dayStart < viewEnd) {\r\n            dayDates.push(dayStart.clone());\r\n            dayRanges.push(new UnzonedRange_1.default(dayStart, dayStart.clone().add(1, 'day')));\r\n            dayStart.add(1, 'day');\r\n        }\r\n        this.dayDates = dayDates;\r\n        this.dayRanges = dayRanges;\r\n        // all real rendering happens in EventRenderer\r\n    };\r\n    // slices by day\r\n    ListView.prototype.componentFootprintToSegs = function (footprint) {\r\n        var dayRanges = this.dayRanges;\r\n        var dayIndex;\r\n        var segRange;\r\n        var seg;\r\n        var segs = [];\r\n        for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {\r\n            segRange = footprint.unzonedRange.intersect(dayRanges[dayIndex]);\r\n            if (segRange) {\r\n                seg = {\r\n                    startMs: segRange.startMs,\r\n                    endMs: segRange.endMs,\r\n                    isStart: segRange.isStart,\r\n                    isEnd: segRange.isEnd,\r\n                    dayIndex: dayIndex\r\n                };\r\n                segs.push(seg);\r\n                // detect when footprint won't go fully into the next day,\r\n                // and mutate the latest seg to the be the end.\r\n                if (!seg.isEnd && !footprint.isAllDay &&\r\n                    dayIndex + 1 < dayRanges.length &&\r\n                    footprint.unzonedRange.endMs < dayRanges[dayIndex + 1].startMs + this.nextDayThreshold) {\r\n                    seg.endMs = footprint.unzonedRange.endMs;\r\n                    seg.isEnd = true;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    ListView.prototype.renderEmptyMessage = function () {\r\n        this.contentEl.html('<div class=\"fc-list-empty-wrap2\">' + // TODO: try less wraps\r\n            '<div class=\"fc-list-empty-wrap1\">' +\r\n            '<div class=\"fc-list-empty\">' +\r\n            util_1.htmlEscape(this.opt('noEventsMessage')) +\r\n            '</div>' +\r\n            '</div>' +\r\n            '</div>');\r\n    };\r\n    // render the event segments in the view\r\n    ListView.prototype.renderSegList = function (allSegs) {\r\n        var segsByDay = this.groupSegsByDay(allSegs); // sparse array\r\n        var dayIndex;\r\n        var daySegs;\r\n        var i;\r\n        var tableEl = $('<table class=\"fc-list-table ' + this.calendar.theme.getClass('tableList') + '\"><tbody></tbody></table>');\r\n        var tbodyEl = tableEl.find('tbody');\r\n        for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {\r\n            daySegs = segsByDay[dayIndex];\r\n            if (daySegs) { // sparse array, so might be undefined\r\n                // append a day header\r\n                tbodyEl.append(this.dayHeaderHtml(this.dayDates[dayIndex]));\r\n                this.eventRenderer.sortEventSegs(daySegs);\r\n                for (i = 0; i < daySegs.length; i++) {\r\n                    tbodyEl.append(daySegs[i].el); // append event row\r\n                }\r\n            }\r\n        }\r\n        this.contentEl.empty().append(tableEl);\r\n    };\r\n    // Returns a sparse array of arrays, segs grouped by their dayIndex\r\n    ListView.prototype.groupSegsByDay = function (segs) {\r\n        var segsByDay = []; // sparse array\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))\r\n                .push(seg);\r\n        }\r\n        return segsByDay;\r\n    };\r\n    // generates the HTML for the day headers that live amongst the event rows\r\n    ListView.prototype.dayHeaderHtml = function (dayDate) {\r\n        var mainFormat = this.opt('listDayFormat');\r\n        var altFormat = this.opt('listDayAltFormat');\r\n        return '<tr class=\"fc-list-heading\" data-date=\"' + dayDate.format('YYYY-MM-DD') + '\">' +\r\n            '<td class=\"' + (this.calendar.theme.getClass('tableListHeading') ||\r\n            this.calendar.theme.getClass('widgetHeader')) + '\" colspan=\"3\">' +\r\n            (mainFormat ?\r\n                this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-main' }, util_1.htmlEscape(dayDate.format(mainFormat)) // inner HTML\r\n                ) :\r\n                '') +\r\n            (altFormat ?\r\n                this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-alt' }, util_1.htmlEscape(dayDate.format(altFormat)) // inner HTML\r\n                ) :\r\n                '') +\r\n            '</td>' +\r\n            '</tr>';\r\n    };\r\n    return ListView;\r\n}(View_1.default));\r\nexports.default = ListView;\r\nListView.prototype.eventRendererClass = ListEventRenderer_1.default;\r\nListView.prototype.eventPointingClass = ListEventPointing_1.default;\r\n\n\n/***/ }),\n/* 249 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\nvar ListEventRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListEventRenderer, _super);\r\n    function ListEventRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ListEventRenderer.prototype.renderFgSegs = function (segs) {\r\n        if (!segs.length) {\r\n            this.component.renderEmptyMessage();\r\n        }\r\n        else {\r\n            this.component.renderSegList(segs);\r\n        }\r\n    };\r\n    // generates the HTML for a single event row\r\n    ListEventRenderer.prototype.fgSegHtml = function (seg) {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var theme = calendar.theme;\r\n        var eventFootprint = seg.footprint;\r\n        var eventDef = eventFootprint.eventDef;\r\n        var componentFootprint = eventFootprint.componentFootprint;\r\n        var url = eventDef.url;\r\n        var classes = ['fc-list-item'].concat(this.getClasses(eventDef));\r\n        var bgColor = this.getBgColor(eventDef);\r\n        var timeHtml;\r\n        if (componentFootprint.isAllDay) {\r\n            timeHtml = view.getAllDayHtml();\r\n        }\r\n        else if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\r\n            if (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day\r\n                timeHtml = util_1.htmlEscape(this._getTimeText(calendar.msToMoment(seg.startMs), calendar.msToMoment(seg.endMs), componentFootprint.isAllDay));\r\n            }\r\n            else { // inner segment that lasts the whole day\r\n                timeHtml = view.getAllDayHtml();\r\n            }\r\n        }\r\n        else {\r\n            // Display the normal time text for the *event's* times\r\n            timeHtml = util_1.htmlEscape(this.getTimeText(eventFootprint));\r\n        }\r\n        if (url) {\r\n            classes.push('fc-has-url');\r\n        }\r\n        return '<tr class=\"' + classes.join(' ') + '\">' +\r\n            (this.displayEventTime ?\r\n                '<td class=\"fc-list-item-time ' + theme.getClass('widgetContent') + '\">' +\r\n                    (timeHtml || '') +\r\n                    '</td>' :\r\n                '') +\r\n            '<td class=\"fc-list-item-marker ' + theme.getClass('widgetContent') + '\">' +\r\n            '<span class=\"fc-event-dot\"' +\r\n            (bgColor ?\r\n                ' style=\"background-color:' + bgColor + '\"' :\r\n                '') +\r\n            '></span>' +\r\n            '</td>' +\r\n            '<td class=\"fc-list-item-title ' + theme.getClass('widgetContent') + '\">' +\r\n            '<a' + (url ? ' href=\"' + util_1.htmlEscape(url) + '\"' : '') + '>' +\r\n            util_1.htmlEscape(eventDef.title || '') +\r\n            '</a>' +\r\n            '</td>' +\r\n            '</tr>';\r\n    };\r\n    // like \"4:00am\"\r\n    ListEventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('mediumTimeFormat');\r\n    };\r\n    return ListEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = ListEventRenderer;\r\n\n\n/***/ }),\n/* 250 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar EventPointing_1 = __webpack_require__(64);\r\nvar ListEventPointing = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListEventPointing, _super);\r\n    function ListEventPointing() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // for events with a url, the whole <tr> should be clickable,\r\n    // but it's impossible to wrap with an <a> tag. simulate this.\r\n    ListEventPointing.prototype.handleClick = function (seg, ev) {\r\n        var url;\r\n        _super.prototype.handleClick.call(this, seg, ev); // might prevent the default action\r\n        // not clicking on or within an <a> with an href\r\n        if (!$(ev.target).closest('a[href]').length) {\r\n            url = seg.footprint.eventDef.url;\r\n            if (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler\r\n                window.location.href = url; // simulate link click\r\n            }\r\n        }\r\n    };\r\n    return ListEventPointing;\r\n}(EventPointing_1.default));\r\nexports.default = ListEventPointing;\r\n\n\n/***/ }),\n/* 251 */,\n/* 252 */,\n/* 253 */,\n/* 254 */,\n/* 255 */,\n/* 256 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(3);\r\nvar exportHooks = __webpack_require__(18);\r\nvar util_1 = __webpack_require__(4);\r\nvar Calendar_1 = __webpack_require__(232);\r\n// for intentional side-effects\r\n__webpack_require__(11);\r\n__webpack_require__(49);\r\n__webpack_require__(260);\r\n__webpack_require__(261);\r\n__webpack_require__(264);\r\n__webpack_require__(265);\r\n__webpack_require__(266);\r\n__webpack_require__(267);\r\n$.fullCalendar = exportHooks;\r\n$.fn.fullCalendar = function (options) {\r\n    var args = Array.prototype.slice.call(arguments, 1); // for a possible method call\r\n    var res = this; // what this function will return (this jQuery object by default)\r\n    this.each(function (i, _element) {\r\n        var element = $(_element);\r\n        var calendar = element.data('fullCalendar'); // get the existing calendar object (if any)\r\n        var singleRes; // the returned value of this single method call\r\n        // a method call\r\n        if (typeof options === 'string') {\r\n            if (options === 'getCalendar') {\r\n                if (!i) { // first element only\r\n                    res = calendar;\r\n                }\r\n            }\r\n            else if (options === 'destroy') { // don't warn if no calendar object\r\n                if (calendar) {\r\n                    calendar.destroy();\r\n                    element.removeData('fullCalendar');\r\n                }\r\n            }\r\n            else if (!calendar) {\r\n                util_1.warn('Attempting to call a FullCalendar method on an element with no calendar.');\r\n            }\r\n            else if ($.isFunction(calendar[options])) {\r\n                singleRes = calendar[options].apply(calendar, args);\r\n                if (!i) {\r\n                    res = singleRes; // record the first method call result\r\n                }\r\n                if (options === 'destroy') { // for the destroy method, must remove Calendar object data\r\n                    element.removeData('fullCalendar');\r\n                }\r\n            }\r\n            else {\r\n                util_1.warn(\"'\" + options + \"' is an unknown FullCalendar method.\");\r\n            }\r\n        }\r\n        else if (!calendar) { // don't initialize twice\r\n            calendar = new Calendar_1.default(element, options);\r\n            element.data('fullCalendar', calendar);\r\n            calendar.render();\r\n        }\r\n    });\r\n    return res;\r\n};\r\nmodule.exports = exportHooks;\r\n\n\n/***/ }),\n/* 257 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\n/* Toolbar with buttons and title\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar Toolbar = /** @class */ (function () {\r\n    function Toolbar(calendar, toolbarOptions) {\r\n        this.el = null; // mirrors local `el`\r\n        this.viewsWithButtons = [];\r\n        this.calendar = calendar;\r\n        this.toolbarOptions = toolbarOptions;\r\n    }\r\n    // method to update toolbar-specific options, not calendar-wide options\r\n    Toolbar.prototype.setToolbarOptions = function (newToolbarOptions) {\r\n        this.toolbarOptions = newToolbarOptions;\r\n    };\r\n    // can be called repeatedly and will rerender\r\n    Toolbar.prototype.render = function () {\r\n        var sections = this.toolbarOptions.layout;\r\n        var el = this.el;\r\n        if (sections) {\r\n            if (!el) {\r\n                el = this.el = $(\"<div class='fc-toolbar \" + this.toolbarOptions.extraClasses + \"'>\");\r\n            }\r\n            else {\r\n                el.empty();\r\n            }\r\n            el.append(this.renderSection('left'))\r\n                .append(this.renderSection('right'))\r\n                .append(this.renderSection('center'))\r\n                .append('<div class=\"fc-clear\"></div>');\r\n        }\r\n        else {\r\n            this.removeElement();\r\n        }\r\n    };\r\n    Toolbar.prototype.removeElement = function () {\r\n        if (this.el) {\r\n            this.el.remove();\r\n            this.el = null;\r\n        }\r\n    };\r\n    Toolbar.prototype.renderSection = function (position) {\r\n        var _this = this;\r\n        var calendar = this.calendar;\r\n        var theme = calendar.theme;\r\n        var optionsManager = calendar.optionsManager;\r\n        var viewSpecManager = calendar.viewSpecManager;\r\n        var sectionEl = $('<div class=\"fc-' + position + '\">');\r\n        var buttonStr = this.toolbarOptions.layout[position];\r\n        var calendarCustomButtons = optionsManager.get('customButtons') || {};\r\n        var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};\r\n        var calendarButtonText = optionsManager.get('buttonText') || {};\r\n        if (buttonStr) {\r\n            $.each(buttonStr.split(' '), function (i, buttonGroupStr) {\r\n                var groupChildren = $();\r\n                var isOnlyButtons = true;\r\n                var groupEl;\r\n                $.each(buttonGroupStr.split(','), function (j, buttonName) {\r\n                    var customButtonProps;\r\n                    var viewSpec;\r\n                    var buttonClick;\r\n                    var buttonIcon; // only one of these will be set\r\n                    var buttonText; // \"\r\n                    var buttonInnerHtml;\r\n                    var buttonClasses;\r\n                    var buttonEl;\r\n                    var buttonAriaAttr;\r\n                    if (buttonName === 'title') {\r\n                        groupChildren = groupChildren.add($('<h2>&nbsp;</h2>')); // we always want it to take up height\r\n                        isOnlyButtons = false;\r\n                    }\r\n                    else {\r\n                        if ((customButtonProps = calendarCustomButtons[buttonName])) {\r\n                            buttonClick = function (ev) {\r\n                                if (customButtonProps.click) {\r\n                                    customButtonProps.click.call(buttonEl[0], ev);\r\n                                }\r\n                            };\r\n                            (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\r\n                                (buttonIcon = theme.getIconClass(buttonName)) ||\r\n                                (buttonText = customButtonProps.text);\r\n                        }\r\n                        else if ((viewSpec = viewSpecManager.getViewSpec(buttonName))) {\r\n                            _this.viewsWithButtons.push(buttonName);\r\n                            buttonClick = function () {\r\n                                calendar.changeView(buttonName);\r\n                            };\r\n                            (buttonText = viewSpec.buttonTextOverride) ||\r\n                                (buttonIcon = theme.getIconClass(buttonName)) ||\r\n                                (buttonText = viewSpec.buttonTextDefault);\r\n                        }\r\n                        else if (calendar[buttonName]) { // a calendar method\r\n                            buttonClick = function () {\r\n                                calendar[buttonName]();\r\n                            };\r\n                            (buttonText = calendarButtonTextOverrides[buttonName]) ||\r\n                                (buttonIcon = theme.getIconClass(buttonName)) ||\r\n                                (buttonText = calendarButtonText[buttonName]);\r\n                            //            ^ everything else is considered default\r\n                        }\r\n                        if (buttonClick) {\r\n                            buttonClasses = [\r\n                                'fc-' + buttonName + '-button',\r\n                                theme.getClass('button'),\r\n                                theme.getClass('stateDefault')\r\n                            ];\r\n                            if (buttonText) {\r\n                                buttonInnerHtml = util_1.htmlEscape(buttonText);\r\n                                buttonAriaAttr = '';\r\n                            }\r\n                            else if (buttonIcon) {\r\n                                buttonInnerHtml = \"<span class='\" + buttonIcon + \"'></span>\";\r\n                                buttonAriaAttr = ' aria-label=\"' + buttonName + '\"';\r\n                            }\r\n                            buttonEl = $(// type=\"button\" so that it doesn't submit a form\r\n                            '<button type=\"button\" class=\"' + buttonClasses.join(' ') + '\"' +\r\n                                buttonAriaAttr +\r\n                                '>' + buttonInnerHtml + '</button>')\r\n                                .click(function (ev) {\r\n                                // don't process clicks for disabled buttons\r\n                                if (!buttonEl.hasClass(theme.getClass('stateDisabled'))) {\r\n                                    buttonClick(ev);\r\n                                    // after the click action, if the button becomes the \"active\" tab, or disabled,\r\n                                    // it should never have a hover class, so remove it now.\r\n                                    if (buttonEl.hasClass(theme.getClass('stateActive')) ||\r\n                                        buttonEl.hasClass(theme.getClass('stateDisabled'))) {\r\n                                        buttonEl.removeClass(theme.getClass('stateHover'));\r\n                                    }\r\n                                }\r\n                            })\r\n                                .mousedown(function () {\r\n                                // the *down* effect (mouse pressed in).\r\n                                // only on buttons that are not the \"active\" tab, or disabled\r\n                                buttonEl\r\n                                    .not('.' + theme.getClass('stateActive'))\r\n                                    .not('.' + theme.getClass('stateDisabled'))\r\n                                    .addClass(theme.getClass('stateDown'));\r\n                            })\r\n                                .mouseup(function () {\r\n                                // undo the *down* effect\r\n                                buttonEl.removeClass(theme.getClass('stateDown'));\r\n                            })\r\n                                .hover(function () {\r\n                                // the *hover* effect.\r\n                                // only on buttons that are not the \"active\" tab, or disabled\r\n                                buttonEl\r\n                                    .not('.' + theme.getClass('stateActive'))\r\n                                    .not('.' + theme.getClass('stateDisabled'))\r\n                                    .addClass(theme.getClass('stateHover'));\r\n                            }, function () {\r\n                                // undo the *hover* effect\r\n                                buttonEl\r\n                                    .removeClass(theme.getClass('stateHover'))\r\n                                    .removeClass(theme.getClass('stateDown')); // if mouseleave happens before mouseup\r\n                            });\r\n                            groupChildren = groupChildren.add(buttonEl);\r\n                        }\r\n                    }\r\n                });\r\n                if (isOnlyButtons) {\r\n                    groupChildren\r\n                        .first().addClass(theme.getClass('cornerLeft')).end()\r\n                        .last().addClass(theme.getClass('cornerRight')).end();\r\n                }\r\n                if (groupChildren.length > 1) {\r\n                    groupEl = $('<div>');\r\n                    if (isOnlyButtons) {\r\n                        groupEl.addClass(theme.getClass('buttonGroup'));\r\n                    }\r\n                    groupEl.append(groupChildren);\r\n                    sectionEl.append(groupEl);\r\n                }\r\n                else {\r\n                    sectionEl.append(groupChildren); // 1 or 0 children\r\n                }\r\n            });\r\n        }\r\n        return sectionEl;\r\n    };\r\n    Toolbar.prototype.updateTitle = function (text) {\r\n        if (this.el) {\r\n            this.el.find('h2').text(text);\r\n        }\r\n    };\r\n    Toolbar.prototype.activateButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .addClass(this.calendar.theme.getClass('stateActive'));\r\n        }\r\n    };\r\n    Toolbar.prototype.deactivateButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .removeClass(this.calendar.theme.getClass('stateActive'));\r\n        }\r\n    };\r\n    Toolbar.prototype.disableButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .prop('disabled', true)\r\n                .addClass(this.calendar.theme.getClass('stateDisabled'));\r\n        }\r\n    };\r\n    Toolbar.prototype.enableButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .prop('disabled', false)\r\n                .removeClass(this.calendar.theme.getClass('stateDisabled'));\r\n        }\r\n    };\r\n    Toolbar.prototype.getViewsWithButtons = function () {\r\n        return this.viewsWithButtons;\r\n    };\r\n    return Toolbar;\r\n}());\r\nexports.default = Toolbar;\r\n\n\n/***/ }),\n/* 258 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar locale_1 = __webpack_require__(32);\r\nvar Model_1 = __webpack_require__(51);\r\nvar OptionsManager = /** @class */ (function (_super) {\r\n    tslib_1.__extends(OptionsManager, _super);\r\n    function OptionsManager(_calendar, overrides) {\r\n        var _this = _super.call(this) || this;\r\n        _this._calendar = _calendar;\r\n        _this.overrides = $.extend({}, overrides); // make a copy\r\n        _this.dynamicOverrides = {};\r\n        _this.compute();\r\n        return _this;\r\n    }\r\n    OptionsManager.prototype.add = function (newOptionHash) {\r\n        var optionCnt = 0;\r\n        var optionName;\r\n        this.recordOverrides(newOptionHash); // will trigger this model's watchers\r\n        for (optionName in newOptionHash) {\r\n            optionCnt++;\r\n        }\r\n        // special-case handling of single option change.\r\n        // if only one option change, `optionName` will be its name.\r\n        if (optionCnt === 1) {\r\n            if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') {\r\n                this._calendar.updateViewSize(true); // isResize=true\r\n                return;\r\n            }\r\n            else if (optionName === 'defaultDate') {\r\n                return; // can't change date this way. use gotoDate instead\r\n            }\r\n            else if (optionName === 'businessHours') {\r\n                return; // this model already reacts to this\r\n            }\r\n            else if (/^(event|select)(Overlap|Constraint|Allow)$/.test(optionName)) {\r\n                return; // doesn't affect rendering. only interactions.\r\n            }\r\n            else if (optionName === 'timezone') {\r\n                this._calendar.view.flash('initialEvents');\r\n                return;\r\n            }\r\n        }\r\n        // catch-all. rerender the header and footer and rebuild/rerender the current view\r\n        this._calendar.renderHeader();\r\n        this._calendar.renderFooter();\r\n        // even non-current views will be affected by this option change. do before rerender\r\n        // TODO: detangle\r\n        this._calendar.viewsByType = {};\r\n        this._calendar.reinitView();\r\n    };\r\n    // Computes the flattened options hash for the calendar and assigns to `this.options`.\r\n    // Assumes this.overrides and this.dynamicOverrides have already been initialized.\r\n    OptionsManager.prototype.compute = function () {\r\n        var locale;\r\n        var localeDefaults;\r\n        var isRTL;\r\n        var dirDefaults;\r\n        var rawOptions;\r\n        locale = util_1.firstDefined(// explicit locale option given?\r\n        this.dynamicOverrides.locale, this.overrides.locale);\r\n        localeDefaults = locale_1.localeOptionHash[locale];\r\n        if (!localeDefaults) { // explicit locale option not given or invalid?\r\n            locale = options_1.globalDefaults.locale;\r\n            localeDefaults = locale_1.localeOptionHash[locale] || {};\r\n        }\r\n        isRTL = util_1.firstDefined(// based on options computed so far, is direction RTL?\r\n        this.dynamicOverrides.isRTL, this.overrides.isRTL, localeDefaults.isRTL, options_1.globalDefaults.isRTL);\r\n        dirDefaults = isRTL ? options_1.rtlDefaults : {};\r\n        this.dirDefaults = dirDefaults;\r\n        this.localeDefaults = localeDefaults;\r\n        rawOptions = options_1.mergeOptions([\r\n            options_1.globalDefaults,\r\n            dirDefaults,\r\n            localeDefaults,\r\n            this.overrides,\r\n            this.dynamicOverrides\r\n        ]);\r\n        locale_1.populateInstanceComputableOptions(rawOptions); // fill in gaps with computed options\r\n        this.reset(rawOptions);\r\n    };\r\n    // stores the new options internally, but does not rerender anything.\r\n    OptionsManager.prototype.recordOverrides = function (newOptionHash) {\r\n        var optionName;\r\n        for (optionName in newOptionHash) {\r\n            this.dynamicOverrides[optionName] = newOptionHash[optionName];\r\n        }\r\n        this._calendar.viewSpecManager.clearCache(); // the dynamic override invalidates the options in this cache, so just clear it\r\n        this.compute(); // this.options needs to be recomputed after the dynamic override\r\n    };\r\n    return OptionsManager;\r\n}(Model_1.default));\r\nexports.default = OptionsManager;\r\n\n\n/***/ }),\n/* 259 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar locale_1 = __webpack_require__(32);\r\nvar ViewSpecManager = /** @class */ (function () {\r\n    function ViewSpecManager(optionsManager, _calendar) {\r\n        this.optionsManager = optionsManager;\r\n        this._calendar = _calendar;\r\n        this.clearCache();\r\n    }\r\n    ViewSpecManager.prototype.clearCache = function () {\r\n        this.viewSpecCache = {};\r\n    };\r\n    // Gets information about how to create a view. Will use a cache.\r\n    ViewSpecManager.prototype.getViewSpec = function (viewType) {\r\n        var cache = this.viewSpecCache;\r\n        return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType));\r\n    };\r\n    // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\r\n    // Preference is given to views that have corresponding buttons.\r\n    ViewSpecManager.prototype.getUnitViewSpec = function (unit) {\r\n        var viewTypes;\r\n        var i;\r\n        var spec;\r\n        if ($.inArray(unit, util_1.unitsDesc) !== -1) {\r\n            // put views that have buttons first. there will be duplicates, but oh well\r\n            viewTypes = this._calendar.header.getViewsWithButtons(); // TODO: include footer as well?\r\n            $.each(ViewRegistry_1.viewHash, function (viewType) {\r\n                viewTypes.push(viewType);\r\n            });\r\n            for (i = 0; i < viewTypes.length; i++) {\r\n                spec = this.getViewSpec(viewTypes[i]);\r\n                if (spec) {\r\n                    if (spec.singleUnit === unit) {\r\n                        return spec;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    // Builds an object with information on how to create a given view\r\n    ViewSpecManager.prototype.buildViewSpec = function (requestedViewType) {\r\n        var viewOverrides = this.optionsManager.overrides.views || {};\r\n        var specChain = []; // for the view. lowest to highest priority\r\n        var defaultsChain = []; // for the view. lowest to highest priority\r\n        var overridesChain = []; // for the view. lowest to highest priority\r\n        var viewType = requestedViewType;\r\n        var spec; // for the view\r\n        var overrides; // for the view\r\n        var durationInput;\r\n        var duration;\r\n        var unit;\r\n        // iterate from the specific view definition to a more general one until we hit an actual View class\r\n        while (viewType) {\r\n            spec = ViewRegistry_1.viewHash[viewType];\r\n            overrides = viewOverrides[viewType];\r\n            viewType = null; // clear. might repopulate for another iteration\r\n            if (typeof spec === 'function') { // TODO: deprecate\r\n                spec = { 'class': spec };\r\n            }\r\n            if (spec) {\r\n                specChain.unshift(spec);\r\n                defaultsChain.unshift(spec.defaults || {});\r\n                durationInput = durationInput || spec.duration;\r\n                viewType = viewType || spec.type;\r\n            }\r\n            if (overrides) {\r\n                overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level\r\n                durationInput = durationInput || overrides.duration;\r\n                viewType = viewType || overrides.type;\r\n            }\r\n        }\r\n        spec = util_1.mergeProps(specChain);\r\n        spec.type = requestedViewType;\r\n        if (!spec['class']) {\r\n            return false;\r\n        }\r\n        // fall back to top-level `duration` option\r\n        durationInput = durationInput ||\r\n            this.optionsManager.dynamicOverrides.duration ||\r\n            this.optionsManager.overrides.duration;\r\n        if (durationInput) {\r\n            duration = moment.duration(durationInput);\r\n            if (duration.valueOf()) { // valid?\r\n                unit = util_1.computeDurationGreatestUnit(duration, durationInput);\r\n                spec.duration = duration;\r\n                spec.durationUnit = unit;\r\n                // view is a single-unit duration, like \"week\" or \"day\"\r\n                // incorporate options for this. lowest priority\r\n                if (duration.as(unit) === 1) {\r\n                    spec.singleUnit = unit;\r\n                    overridesChain.unshift(viewOverrides[unit] || {});\r\n                }\r\n            }\r\n        }\r\n        spec.defaults = options_1.mergeOptions(defaultsChain);\r\n        spec.overrides = options_1.mergeOptions(overridesChain);\r\n        this.buildViewSpecOptions(spec);\r\n        this.buildViewSpecButtonText(spec, requestedViewType);\r\n        return spec;\r\n    };\r\n    // Builds and assigns a view spec's options object from its already-assigned defaults and overrides\r\n    ViewSpecManager.prototype.buildViewSpecOptions = function (spec) {\r\n        var optionsManager = this.optionsManager;\r\n        spec.options = options_1.mergeOptions([\r\n            options_1.globalDefaults,\r\n            spec.defaults,\r\n            optionsManager.dirDefaults,\r\n            optionsManager.localeDefaults,\r\n            optionsManager.overrides,\r\n            spec.overrides,\r\n            optionsManager.dynamicOverrides // dynamically set via setter. highest precedence\r\n        ]);\r\n        locale_1.populateInstanceComputableOptions(spec.options);\r\n    };\r\n    // Computes and assigns a view spec's buttonText-related options\r\n    ViewSpecManager.prototype.buildViewSpecButtonText = function (spec, requestedViewType) {\r\n        var optionsManager = this.optionsManager;\r\n        // given an options object with a possible `buttonText` hash, lookup the buttonText for the\r\n        // requested view, falling back to a generic unit entry like \"week\" or \"day\"\r\n        function queryButtonText(options) {\r\n            var buttonText = options.buttonText || {};\r\n            return buttonText[requestedViewType] ||\r\n                // view can decide to look up a certain key\r\n                (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) ||\r\n                // a key like \"month\"\r\n                (spec.singleUnit ? buttonText[spec.singleUnit] : null);\r\n        }\r\n        // highest to lowest priority\r\n        spec.buttonTextOverride =\r\n            queryButtonText(optionsManager.dynamicOverrides) ||\r\n                queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence\r\n                spec.overrides.buttonText; // `buttonText` for view-specific options is a string\r\n        // highest to lowest priority. mirrors buildViewSpecOptions\r\n        spec.buttonTextDefault =\r\n            queryButtonText(optionsManager.localeDefaults) ||\r\n                queryButtonText(optionsManager.dirDefaults) ||\r\n                spec.defaults.buttonText || // a single string. from ViewSubclass.defaults\r\n                queryButtonText(options_1.globalDefaults) ||\r\n                (spec.duration ? this._calendar.humanizeDuration(spec.duration) : null) || // like \"3 days\"\r\n                requestedViewType; // fall back to given view name\r\n    };\r\n    return ViewSpecManager;\r\n}());\r\nexports.default = ViewSpecManager;\r\n\n\n/***/ }),\n/* 260 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nvar FuncEventSource_1 = __webpack_require__(223);\r\nvar JsonFeedEventSource_1 = __webpack_require__(224);\r\nEventSourceParser_1.default.registerClass(ArrayEventSource_1.default);\r\nEventSourceParser_1.default.registerClass(FuncEventSource_1.default);\r\nEventSourceParser_1.default.registerClass(JsonFeedEventSource_1.default);\r\n\n\n/***/ }),\n/* 261 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nvar StandardTheme_1 = __webpack_require__(221);\r\nvar JqueryUiTheme_1 = __webpack_require__(222);\r\nvar Bootstrap3Theme_1 = __webpack_require__(262);\r\nvar Bootstrap4Theme_1 = __webpack_require__(263);\r\nThemeRegistry_1.defineThemeSystem('standard', StandardTheme_1.default);\r\nThemeRegistry_1.defineThemeSystem('jquery-ui', JqueryUiTheme_1.default);\r\nThemeRegistry_1.defineThemeSystem('bootstrap3', Bootstrap3Theme_1.default);\r\nThemeRegistry_1.defineThemeSystem('bootstrap4', Bootstrap4Theme_1.default);\r\n\n\n/***/ }),\n/* 262 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar Bootstrap3Theme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Bootstrap3Theme, _super);\r\n    function Bootstrap3Theme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Bootstrap3Theme;\r\n}(Theme_1.default));\r\nexports.default = Bootstrap3Theme;\r\nBootstrap3Theme.prototype.classes = {\r\n    widget: 'fc-bootstrap3',\r\n    tableGrid: 'table-bordered',\r\n    tableList: 'table',\r\n    tableListHeading: 'active',\r\n    buttonGroup: 'btn-group',\r\n    button: 'btn btn-default',\r\n    stateActive: 'active',\r\n    stateDisabled: 'disabled',\r\n    today: 'alert alert-info',\r\n    popover: 'panel panel-default',\r\n    popoverHeader: 'panel-heading',\r\n    popoverContent: 'panel-body',\r\n    // day grid\r\n    // for left/right border color when border is inset from edges (all-day in agenda view)\r\n    // avoid `panel` class b/c don't want margins/radius. only border color.\r\n    headerRow: 'panel-default',\r\n    dayRow: 'panel-default',\r\n    // list view\r\n    listView: 'panel panel-default'\r\n};\r\nBootstrap3Theme.prototype.baseIconClass = 'glyphicon';\r\nBootstrap3Theme.prototype.iconClasses = {\r\n    close: 'glyphicon-remove',\r\n    prev: 'glyphicon-chevron-left',\r\n    next: 'glyphicon-chevron-right',\r\n    prevYear: 'glyphicon-backward',\r\n    nextYear: 'glyphicon-forward'\r\n};\r\nBootstrap3Theme.prototype.iconOverrideOption = 'bootstrapGlyphicons';\r\nBootstrap3Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapGlyphicon';\r\nBootstrap3Theme.prototype.iconOverridePrefix = 'glyphicon-';\r\n\n\n/***/ }),\n/* 263 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar Bootstrap4Theme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Bootstrap4Theme, _super);\r\n    function Bootstrap4Theme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Bootstrap4Theme;\r\n}(Theme_1.default));\r\nexports.default = Bootstrap4Theme;\r\nBootstrap4Theme.prototype.classes = {\r\n    widget: 'fc-bootstrap4',\r\n    tableGrid: 'table-bordered',\r\n    tableList: 'table',\r\n    tableListHeading: 'table-active',\r\n    buttonGroup: 'btn-group',\r\n    button: 'btn btn-primary',\r\n    stateActive: 'active',\r\n    stateDisabled: 'disabled',\r\n    today: 'alert alert-info',\r\n    popover: 'card card-primary',\r\n    popoverHeader: 'card-header',\r\n    popoverContent: 'card-body',\r\n    // day grid\r\n    // for left/right border color when border is inset from edges (all-day in agenda view)\r\n    // avoid `table` class b/c don't want margins/padding/structure. only border color.\r\n    headerRow: 'table-bordered',\r\n    dayRow: 'table-bordered',\r\n    // list view\r\n    listView: 'card card-primary'\r\n};\r\nBootstrap4Theme.prototype.baseIconClass = 'fa';\r\nBootstrap4Theme.prototype.iconClasses = {\r\n    close: 'fa-times',\r\n    prev: 'fa-chevron-left',\r\n    next: 'fa-chevron-right',\r\n    prevYear: 'fa-angle-double-left',\r\n    nextYear: 'fa-angle-double-right'\r\n};\r\nBootstrap4Theme.prototype.iconOverrideOption = 'bootstrapFontAwesome';\r\nBootstrap4Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';\r\nBootstrap4Theme.prototype.iconOverridePrefix = 'fa-';\r\n\n\n/***/ }),\n/* 264 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar BasicView_1 = __webpack_require__(67);\r\nvar MonthView_1 = __webpack_require__(246);\r\nViewRegistry_1.defineView('basic', {\r\n    'class': BasicView_1.default\r\n});\r\nViewRegistry_1.defineView('basicDay', {\r\n    type: 'basic',\r\n    duration: { days: 1 }\r\n});\r\nViewRegistry_1.defineView('basicWeek', {\r\n    type: 'basic',\r\n    duration: { weeks: 1 }\r\n});\r\nViewRegistry_1.defineView('month', {\r\n    'class': MonthView_1.default,\r\n    duration: { months: 1 },\r\n    defaults: {\r\n        fixedWeekCount: true\r\n    }\r\n});\r\n\n\n/***/ }),\n/* 265 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar AgendaView_1 = __webpack_require__(238);\r\nViewRegistry_1.defineView('agenda', {\r\n    'class': AgendaView_1.default,\r\n    defaults: {\r\n        allDaySlot: true,\r\n        slotDuration: '00:30:00',\r\n        slotEventOverlap: true // a bad name. confused with overlap/constraint system\r\n    }\r\n});\r\nViewRegistry_1.defineView('agendaDay', {\r\n    type: 'agenda',\r\n    duration: { days: 1 }\r\n});\r\nViewRegistry_1.defineView('agendaWeek', {\r\n    type: 'agenda',\r\n    duration: { weeks: 1 }\r\n});\r\n\n\n/***/ }),\n/* 266 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar ListView_1 = __webpack_require__(248);\r\nViewRegistry_1.defineView('list', {\r\n    'class': ListView_1.default,\r\n    buttonTextKey: 'list',\r\n    defaults: {\r\n        buttonText: 'list',\r\n        listDayFormat: 'LL',\r\n        noEventsMessage: 'No events to display'\r\n    }\r\n});\r\nViewRegistry_1.defineView('listDay', {\r\n    type: 'list',\r\n    duration: { days: 1 },\r\n    defaults: {\r\n        listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header\r\n    }\r\n});\r\nViewRegistry_1.defineView('listWeek', {\r\n    type: 'list',\r\n    duration: { weeks: 1 },\r\n    defaults: {\r\n        listDayFormat: 'dddd',\r\n        listDayAltFormat: 'LL'\r\n    }\r\n});\r\nViewRegistry_1.defineView('listMonth', {\r\n    type: 'list',\r\n    duration: { month: 1 },\r\n    defaults: {\r\n        listDayAltFormat: 'dddd' // day-of-week is nice-to-have\r\n    }\r\n});\r\nViewRegistry_1.defineView('listYear', {\r\n    type: 'list',\r\n    duration: { year: 1 },\r\n    defaults: {\r\n        listDayAltFormat: 'dddd' // day-of-week is nice-to-have\r\n    }\r\n});\r\n\n\n/***/ }),\n/* 267 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\n\n/***/ })\n/******/ ]);\n});", "!function(e,n){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=n(require(\"moment\"),require(\"fullcalendar\")):\"function\"==typeof define&&define.amd?define([\"moment\",\"fullcalendar\"],n):\"object\"==typeof exports?n(require(\"moment\"),require(\"fullcalendar\")):n(e.moment,e.FullCalendar)}(\"undefined\"!=typeof self?self:this,function(e,n){return function(e){function n(t){if(a[t])return a[t].exports;var r=a[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,n),r.l=!0,r.exports}var a={};return n.m=e,n.c=a,n.d=function(e,a,t){n.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:t})},n.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(a,\"a\",a),a},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p=\"\",n(n.s=177)}({0:function(n,a){n.exports=e},1:function(e,a){e.exports=n},177:function(e,n,a){Object.defineProperty(n,\"__esModule\",{value:!0}),a(178);var t=a(1);t.datepickerLocale(\"nl\",\"nl\",{closeText:\"Sluiten\",prevText:\"\u2190\",nextText:\"\u2192\",currentText:\"Vandaag\",monthNames:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"],monthNamesShort:[\"jan\",\"feb\",\"mrt\",\"apr\",\"mei\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\"],dayNames:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"],dayNamesShort:[\"zon\",\"maa\",\"din\",\"woe\",\"don\",\"vri\",\"zat\"],dayNamesMin:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],weekHeader:\"Wk\",dateFormat:\"dd-mm-yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),t.locale(\"nl\",{buttonText:{year:\"Jaar\",month:\"Maand\",week:\"Week\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dag\",eventLimitText:\"extra\",noEventsMessage:\"Geen evenementen om te laten zien\"})},178:function(e,n,a){!function(e,n){n(a(0))}(0,function(e){var n=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),a=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),t=[/^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],r=/^(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;return e.defineLocale(\"nl\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(e,t){return e?/-MMM-/.test(t)?a[e.month()]:n[e.month()]:n},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"zo_ma_di_wo_do_vr_za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",ss:\"%d seconden\",m:\"\u00E9\u00E9n minuut\",mm:\"%d minuten\",h:\"\u00E9\u00E9n uur\",hh:\"%d uur\",d:\"\u00E9\u00E9n dag\",dd:\"%d dagen\",M:\"\u00E9\u00E9n maand\",MM:\"%d maanden\",y:\"\u00E9\u00E9n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})})}})});", "\uFEFF/* =========================================================\r\n * bootstrap-datetimepicker.js\r\n * =========================================================\r\n * Copyright 2012 Stefan Petre\r\n *\r\n * Improvements by Andrew Rowls\r\n * Improvements by S\u00E9bastien Malot\r\n * Improvements by Yun Lai\r\n * Improvements by Kenneth Henderick\r\n * Improvements by CuGBabyBeaR\r\n * Improvements by Christian Vaas <auspex@auspex.eu>\r\n *\r\n * Project URL : http://www.malot.fr/bootstrap-datetimepicker\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n * ========================================================= */\r\n\r\n(function(factory){\r\n    if (typeof define === 'function' && define.amd)\r\n      define(['jquery'], factory);\r\n    else if (typeof exports === 'object')\r\n      factory(require('jquery'));\r\n    else\r\n      factory(jQuery);\r\n\r\n}(function($, undefined){\r\n\r\n  // Add ECMA262-5 Array methods if not supported natively (IE8)\r\n  if (!('indexOf' in Array.prototype)) {\r\n    Array.prototype.indexOf = function (find, i) {\r\n      if (i === undefined) i = 0;\r\n      if (i < 0) i += this.length;\r\n      if (i < 0) i = 0;\r\n      for (var n = this.length; i < n; i++) {\r\n        if (i in this && this[i] === find) {\r\n          return i;\r\n        }\r\n      }\r\n      return -1;\r\n    }\r\n  }\r\n\r\n  // Add timezone abbreviation support for ie6+, Chrome, Firefox\r\n  function timeZoneAbbreviation() {\r\n    var abbreviation, date, formattedStr, i, len, matchedStrings, ref, str;\r\n    date = (new Date()).toString();\r\n    formattedStr = ((ref = date.split('(')[1]) != null ? ref.slice(0, -1) : 0) || date.split(' ');\r\n    if (formattedStr instanceof Array) {\r\n      matchedStrings = [];\r\n      for (var i = 0, len = formattedStr.length; i < len; i++) {\r\n        str = formattedStr[i];\r\n        if ((abbreviation = (ref = str.match(/\\b[A-Z]+\\b/)) !== null) ? ref[0] : 0) {\r\n          matchedStrings.push(abbreviation);\r\n        }\r\n      }\r\n      formattedStr = matchedStrings.pop();\r\n    }\r\n    return formattedStr;\r\n  }\r\n\r\n  function UTCDate() {\r\n    return new Date(Date.UTC.apply(Date, arguments));\r\n  }\r\n\r\n  // Picker object\r\n  var Datetimepicker = function (element, options) {\r\n    var that = this;\r\n\r\n    this.element = $(element);\r\n\r\n    // add container for single page application\r\n    // when page switch the datetimepicker div will be removed also.\r\n    this.container = options.container || 'body';\r\n\r\n    this.language = options.language || this.element.data('date-language') || 'en';\r\n    this.language = this.language in dates ? this.language : this.language.split('-')[0]; // fr-CA fallback to fr\r\n    this.language = this.language in dates ? this.language : 'en';\r\n    this.isRTL = dates[this.language].rtl || false;\r\n    this.formatType = options.formatType || this.element.data('format-type') || 'standard';\r\n    this.format = DPGlobal.parseFormat(options.format || this.element.data('date-format') || dates[this.language].format || DPGlobal.getDefaultFormat(this.formatType, 'input'), this.formatType);\r\n    this.isInline = false;\r\n    this.isVisible = false;\r\n    this.isInput = this.element.is('input');\r\n    this.fontAwesome = options.fontAwesome || this.element.data('font-awesome') || false;\r\n\r\n    this.bootcssVer = options.bootcssVer || (this.isInput ? (this.element.is('.form-control') ? 3 : 2) : ( this.bootcssVer = this.element.is('.input-group') ? 3 : 2 ));\r\n\r\n    this.component = this.element.is('.date') ? ( this.bootcssVer === 3 ? this.element.find('.input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-remove, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o').parent() : this.element.find('.add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar, .add-on .fa-calendar, .add-on .fa-clock-o').parent()) : false;\r\n    this.componentReset = this.element.is('.date') ? ( this.bootcssVer === 3 ? this.element.find('.input-group-addon .glyphicon-remove, .input-group-addon .fa-times').parent():this.element.find('.add-on .icon-remove, .add-on .fa-times').parent()) : false;\r\n    this.hasInput = this.component && this.element.find('input').length;\r\n    if (this.component && this.component.length === 0) {\r\n      this.component = false;\r\n    }\r\n    this.linkField = options.linkField || this.element.data('link-field') || false;\r\n    this.linkFormat = DPGlobal.parseFormat(options.linkFormat || this.element.data('link-format') || DPGlobal.getDefaultFormat(this.formatType, 'link'), this.formatType);\r\n    this.minuteStep = options.minuteStep || this.element.data('minute-step') || 5;\r\n    this.pickerPosition = options.pickerPosition || this.element.data('picker-position') || 'bottom-right';\r\n    this.showMeridian = options.showMeridian || this.element.data('show-meridian') || false;\r\n    this.initialDate = options.initialDate || new Date();\r\n    this.zIndex = options.zIndex || this.element.data('z-index') || undefined;\r\n    this.title = typeof options.title === 'undefined' ? false : options.title;\r\n    this.timezone = options.timezone || timeZoneAbbreviation();\r\n\r\n    this.icons = {\r\n      leftArrow: this.fontAwesome ? 'fa-arrow-left' : (this.bootcssVer === 3 ? 'glyphicon-arrow-left' : 'icon-arrow-left'),\r\n      rightArrow: this.fontAwesome ? 'fa-arrow-right' : (this.bootcssVer === 3 ? 'glyphicon-arrow-right' : 'icon-arrow-right')\r\n    }\r\n    this.icontype = this.fontAwesome ? 'fa' : 'glyphicon';\r\n\r\n    this._attachEvents();\r\n\r\n    this.clickedOutside = function (e) {\r\n        // Clicked outside the datetimepicker, hide it\r\n        if ($(e.target).closest('.datetimepicker').length === 0) {\r\n            that.hide();\r\n        }\r\n    }\r\n\r\n    this.formatViewType = 'datetime';\r\n    if ('formatViewType' in options) {\r\n      this.formatViewType = options.formatViewType;\r\n    } else if ('formatViewType' in this.element.data()) {\r\n      this.formatViewType = this.element.data('formatViewType');\r\n    }\r\n\r\n    this.minView = 0;\r\n    if ('minView' in options) {\r\n      this.minView = options.minView;\r\n    } else if ('minView' in this.element.data()) {\r\n      this.minView = this.element.data('min-view');\r\n    }\r\n    this.minView = DPGlobal.convertViewMode(this.minView);\r\n\r\n    this.maxView = DPGlobal.modes.length - 1;\r\n    if ('maxView' in options) {\r\n      this.maxView = options.maxView;\r\n    } else if ('maxView' in this.element.data()) {\r\n      this.maxView = this.element.data('max-view');\r\n    }\r\n    this.maxView = DPGlobal.convertViewMode(this.maxView);\r\n\r\n    this.wheelViewModeNavigation = false;\r\n    if ('wheelViewModeNavigation' in options) {\r\n      this.wheelViewModeNavigation = options.wheelViewModeNavigation;\r\n    } else if ('wheelViewModeNavigation' in this.element.data()) {\r\n      this.wheelViewModeNavigation = this.element.data('view-mode-wheel-navigation');\r\n    }\r\n\r\n    this.wheelViewModeNavigationInverseDirection = false;\r\n\r\n    if ('wheelViewModeNavigationInverseDirection' in options) {\r\n      this.wheelViewModeNavigationInverseDirection = options.wheelViewModeNavigationInverseDirection;\r\n    } else if ('wheelViewModeNavigationInverseDirection' in this.element.data()) {\r\n      this.wheelViewModeNavigationInverseDirection = this.element.data('view-mode-wheel-navigation-inverse-dir');\r\n    }\r\n\r\n    this.wheelViewModeNavigationDelay = 100;\r\n    if ('wheelViewModeNavigationDelay' in options) {\r\n      this.wheelViewModeNavigationDelay = options.wheelViewModeNavigationDelay;\r\n    } else if ('wheelViewModeNavigationDelay' in this.element.data()) {\r\n      this.wheelViewModeNavigationDelay = this.element.data('view-mode-wheel-navigation-delay');\r\n    }\r\n\r\n    this.startViewMode = 2;\r\n    if ('startView' in options) {\r\n      this.startViewMode = options.startView;\r\n    } else if ('startView' in this.element.data()) {\r\n      this.startViewMode = this.element.data('start-view');\r\n    }\r\n    this.startViewMode = DPGlobal.convertViewMode(this.startViewMode);\r\n    this.viewMode = this.startViewMode;\r\n\r\n    this.viewSelect = this.minView;\r\n    if ('viewSelect' in options) {\r\n      this.viewSelect = options.viewSelect;\r\n    } else if ('viewSelect' in this.element.data()) {\r\n      this.viewSelect = this.element.data('view-select');\r\n    }\r\n    this.viewSelect = DPGlobal.convertViewMode(this.viewSelect);\r\n\r\n    this.forceParse = true;\r\n    if ('forceParse' in options) {\r\n      this.forceParse = options.forceParse;\r\n    } else if ('dateForceParse' in this.element.data()) {\r\n      this.forceParse = this.element.data('date-force-parse');\r\n    }\r\n    var template = this.bootcssVer === 3 ? DPGlobal.templateV3 : DPGlobal.template;\r\n    while (template.indexOf('{iconType}') !== -1) {\r\n      template = template.replace('{iconType}', this.icontype);\r\n    }\r\n    while (template.indexOf('{leftArrow}') !== -1) {\r\n      template = template.replace('{leftArrow}', this.icons.leftArrow);\r\n    }\r\n    while (template.indexOf('{rightArrow}') !== -1) {\r\n      template = template.replace('{rightArrow}', this.icons.rightArrow);\r\n    }\r\n    this.picker = $(template)\r\n      .appendTo(this.isInline ? this.element : this.container) // 'body')\r\n      .on({\r\n        click:     $.proxy(this.click, this),\r\n        mousedown: $.proxy(this.mousedown, this)\r\n      });\r\n\r\n    if (this.wheelViewModeNavigation) {\r\n      if ($.fn.mousewheel) {\r\n        this.picker.on({mousewheel: $.proxy(this.mousewheel, this)});\r\n      } else {\r\n        console.log('Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option');\r\n      }\r\n    }\r\n\r\n    if (this.isInline) {\r\n      this.picker.addClass('datetimepicker-inline');\r\n    } else {\r\n      this.picker.addClass('datetimepicker-dropdown-' + this.pickerPosition + ' dropdown-menu');\r\n    }\r\n    if (this.isRTL) {\r\n      this.picker.addClass('datetimepicker-rtl');\r\n      var selector = this.bootcssVer === 3 ? '.prev span, .next span' : '.prev i, .next i';\r\n      this.picker.find(selector).toggleClass(this.icons.leftArrow + ' ' + this.icons.rightArrow);\r\n    }\r\n\r\n    $(document).on('mousedown touchend', this.clickedOutside);\r\n\r\n    this.autoclose = false;\r\n    if ('autoclose' in options) {\r\n      this.autoclose = options.autoclose;\r\n    } else if ('dateAutoclose' in this.element.data()) {\r\n      this.autoclose = this.element.data('date-autoclose');\r\n    }\r\n\r\n    this.keyboardNavigation = true;\r\n    if ('keyboardNavigation' in options) {\r\n      this.keyboardNavigation = options.keyboardNavigation;\r\n    } else if ('dateKeyboardNavigation' in this.element.data()) {\r\n      this.keyboardNavigation = this.element.data('date-keyboard-navigation');\r\n    }\r\n\r\n    this.todayBtn = (options.todayBtn || this.element.data('date-today-btn') || false);\r\n    this.clearBtn = (options.clearBtn || this.element.data('date-clear-btn') || false);\r\n    this.todayHighlight = (options.todayHighlight || this.element.data('date-today-highlight') || false);\r\n\r\n    this.weekStart = 0;\r\n    if (typeof options.weekStart !== 'undefined') {\r\n      this.weekStart = options.weekStart;\r\n    } else if (typeof this.element.data('date-weekstart') !== 'undefined') {\r\n      this.weekStart = this.element.data('date-weekstart');\r\n    } else if (typeof dates[this.language].weekStart !== 'undefined') {\r\n      this.weekStart = dates[this.language].weekStart;\r\n    }\r\n    this.weekStart = this.weekStart % 7;\r\n    this.weekEnd = ((this.weekStart + 6) % 7);\r\n    this.onRenderDay = function (date) {\r\n      var render = (options.onRenderDay || function () { return []; })(date);\r\n      if (typeof render === 'string') {\r\n        render = [render];\r\n      }\r\n      var res = ['day'];\r\n      return res.concat((render ? render : []));\r\n    };\r\n    this.onRenderHour = function (date) {\r\n      var render = (options.onRenderHour || function () { return []; })(date);\r\n      var res = ['hour'];\r\n      if (typeof render === 'string') {\r\n        render = [render];\r\n      }\r\n      return res.concat((render ? render : []));\r\n    };\r\n    this.onRenderMinute = function (date) {\r\n      var render = (options.onRenderMinute || function () { return []; })(date);\r\n      var res = ['minute'];\r\n      if (typeof render === 'string') {\r\n        render = [render];\r\n      }\r\n      if (date < this.startDate || date > this.endDate) {\r\n        res.push('disabled');\r\n      } else if (Math.floor(this.date.getUTCMinutes() / this.minuteStep) === Math.floor(date.getUTCMinutes() / this.minuteStep)) {\r\n        res.push('active');\r\n      }\r\n      return res.concat((render ? render : []));\r\n    };\r\n    this.onRenderYear = function (date) {\r\n      var render = (options.onRenderYear || function () { return []; })(date);\r\n      var res = ['year'];\r\n      if (typeof render === 'string') {\r\n        render = [render];\r\n      }\r\n      if (this.date.getUTCFullYear() === date.getUTCFullYear()) {\r\n        res.push('active');\r\n      }\r\n      var currentYear = date.getUTCFullYear();\r\n      var endYear = this.endDate.getUTCFullYear();\r\n      if (date < this.startDate || currentYear > endYear) {\r\n        res.push('disabled');\r\n      }\r\n      return res.concat((render ? render : []));\r\n    }\r\n    this.onRenderMonth = function (date) {\r\n      var render = (options.onRenderMonth || function () { return []; })(date);\r\n      var res = ['month'];\r\n      if (typeof render === 'string') {\r\n        render = [render];\r\n      }\r\n      return res.concat((render ? render : []));\r\n    }\r\n    this.startDate = new Date(-8639968443048000);\r\n    this.endDate = new Date(8639968443048000);\r\n    this.datesDisabled = [];\r\n    this.daysOfWeekDisabled = [];\r\n    this.setStartDate(options.startDate || this.element.data('date-startdate'));\r\n    this.setEndDate(options.endDate || this.element.data('date-enddate'));\r\n    this.setDatesDisabled(options.datesDisabled || this.element.data('date-dates-disabled'));\r\n    this.setDaysOfWeekDisabled(options.daysOfWeekDisabled || this.element.data('date-days-of-week-disabled'));\r\n    this.setMinutesDisabled(options.minutesDisabled || this.element.data('date-minute-disabled'));\r\n    this.setHoursDisabled(options.hoursDisabled || this.element.data('date-hour-disabled'));\r\n    this.fillDow();\r\n    this.fillMonths();\r\n    this.update();\r\n    this.showMode();\r\n\r\n    if (this.isInline) {\r\n      this.show();\r\n    }\r\n  };\r\n\r\n  Datetimepicker.prototype = {\r\n    constructor: Datetimepicker,\r\n\r\n    _events:       [],\r\n    _attachEvents: function () {\r\n      this._detachEvents();\r\n      if (this.isInput) { // single input\r\n        this._events = [\r\n          [this.element, {\r\n            focus:   $.proxy(this.show, this),\r\n            keyup:   $.proxy(this.update, this),\r\n            keydown: $.proxy(this.keydown, this)\r\n          }]\r\n        ];\r\n      }\r\n      else if (this.component && this.hasInput) { // component: input + button\r\n        this._events = [\r\n          // For components that are not readonly, allow keyboard nav\r\n          [this.element.find('input'), {\r\n            focus:   $.proxy(this.show, this),\r\n            keyup:   $.proxy(this.update, this),\r\n            keydown: $.proxy(this.keydown, this)\r\n          }],\r\n          [this.component, {\r\n            click: $.proxy(this.show, this)\r\n          }]\r\n        ];\r\n        if (this.componentReset) {\r\n          this._events.push([\r\n            this.componentReset,\r\n            {click: $.proxy(this.reset, this)}\r\n          ]);\r\n        }\r\n      }\r\n      else if (this.element.is('div')) {  // inline datetimepicker\r\n        this.isInline = true;\r\n      }\r\n      else {\r\n        this._events = [\r\n          [this.element, {\r\n            click: $.proxy(this.show, this)\r\n          }]\r\n        ];\r\n      }\r\n      for (var i = 0, el, ev; i < this._events.length; i++) {\r\n        el = this._events[i][0];\r\n        ev = this._events[i][1];\r\n        el.on(ev);\r\n      }\r\n    },\r\n\r\n    _detachEvents: function () {\r\n      for (var i = 0, el, ev; i < this._events.length; i++) {\r\n        el = this._events[i][0];\r\n        ev = this._events[i][1];\r\n        el.off(ev);\r\n      }\r\n      this._events = [];\r\n    },\r\n\r\n    show: function (e) {\r\n      this.picker.show();\r\n      this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();\r\n      if (this.forceParse) {\r\n        this.update();\r\n      }\r\n      this.place();\r\n      $(window).on('resize', $.proxy(this.place, this));\r\n      if (e) {\r\n        e.stopPropagation();\r\n        e.preventDefault();\r\n      }\r\n      this.isVisible = true;\r\n      this.element.trigger({\r\n        type: 'show',\r\n        date: this.date\r\n      });\r\n    },\r\n\r\n    hide: function () {\r\n      if (!this.isVisible) return;\r\n      if (this.isInline) return;\r\n      this.picker.hide();\r\n      $(window).off('resize', this.place);\r\n      this.viewMode = this.startViewMode;\r\n      this.showMode();\r\n      if (!this.isInput) {\r\n        $(document).off('mousedown', this.hide);\r\n      }\r\n\r\n      if (\r\n        this.forceParse &&\r\n          (\r\n            this.isInput && this.element.val() ||\r\n              this.hasInput && this.element.find('input').val()\r\n            )\r\n        )\r\n        this.setValue();\r\n      this.isVisible = false;\r\n      this.element.trigger({\r\n        type: 'hide',\r\n        date: this.date\r\n      });\r\n    },\r\n\r\n    remove: function () {\r\n      this._detachEvents();\r\n      $(document).off('mousedown', this.clickedOutside);\r\n      this.picker.remove();\r\n      delete this.picker;\r\n      delete this.element.data().datetimepicker;\r\n    },\r\n\r\n    getDate: function () {\r\n      var d = this.getUTCDate();\r\n      if (d === null) {\r\n        return null;\r\n      }\r\n      return new Date(d.getTime() + (d.getTimezoneOffset() * 60000));\r\n    },\r\n\r\n    getUTCDate: function () {\r\n      return this.date;\r\n    },\r\n\r\n    getInitialDate: function () {\r\n      return this.initialDate\r\n    },\r\n\r\n    setInitialDate: function (initialDate) {\r\n      this.initialDate = initialDate;\r\n    },\r\n\r\n    setDate: function (d) {\r\n      this.setUTCDate(new Date(d.getTime() - (d.getTimezoneOffset() * 60000)));\r\n    },\r\n\r\n    setUTCDate: function (d) {\r\n      if (d >= this.startDate && d <= this.endDate) {\r\n        this.date = d;\r\n        this.setValue();\r\n        this.viewDate = this.date;\r\n        this.fill();\r\n      } else {\r\n        this.element.trigger({\r\n          type:      'outOfRange',\r\n          date:      d,\r\n          startDate: this.startDate,\r\n          endDate:   this.endDate\r\n        });\r\n      }\r\n    },\r\n\r\n    setFormat: function (format) {\r\n      this.format = DPGlobal.parseFormat(format, this.formatType);\r\n      var element;\r\n      if (this.isInput) {\r\n        element = this.element;\r\n      } else if (this.component) {\r\n        element = this.element.find('input');\r\n      }\r\n      if (element && element.val()) {\r\n        this.setValue();\r\n      }\r\n    },\r\n\r\n    setValue: function () {\r\n      var formatted = this.getFormattedDate();\r\n      if (!this.isInput) {\r\n        if (this.component) {\r\n          this.element.find('input').val(formatted);\r\n        }\r\n        this.element.data('date', formatted);\r\n      } else {\r\n        this.element.val(formatted);\r\n      }\r\n      if (this.linkField) {\r\n        $('#' + this.linkField).val(this.getFormattedDate(this.linkFormat));\r\n      }\r\n    },\r\n\r\n    getFormattedDate: function (format) {\r\n      format = format || this.format;\r\n      return DPGlobal.formatDate(this.date, format, this.language, this.formatType, this.timezone);\r\n    },\r\n\r\n    setStartDate: function (startDate) {\r\n      this.startDate = startDate || this.startDate;\r\n      if (this.startDate.valueOf() !== 8639968443048000) {\r\n        this.startDate = DPGlobal.parseDate(this.startDate, this.format, this.language, this.formatType, this.timezone);\r\n      }\r\n      this.update();\r\n      this.updateNavArrows();\r\n    },\r\n\r\n    setEndDate: function (endDate) {\r\n      this.endDate = endDate || this.endDate;\r\n      if (this.endDate.valueOf() !== 8639968443048000) {\r\n        this.endDate = DPGlobal.parseDate(this.endDate, this.format, this.language, this.formatType, this.timezone);\r\n      }\r\n      this.update();\r\n      this.updateNavArrows();\r\n    },\r\n\r\n    setDatesDisabled: function (datesDisabled) {\r\n      this.datesDisabled = datesDisabled || [];\r\n      if (!$.isArray(this.datesDisabled)) {\r\n        this.datesDisabled = this.datesDisabled.split(/,\\s*/);\r\n      }\r\n      var mThis = this;\r\n      this.datesDisabled = $.map(this.datesDisabled, function (d) {\r\n        return DPGlobal.parseDate(d, mThis.format, mThis.language, mThis.formatType, mThis.timezone).toDateString();\r\n      });\r\n      this.update();\r\n      this.updateNavArrows();\r\n    },\r\n\r\n    setTitle: function (selector, value) {\r\n      return this.picker.find(selector)\r\n        .find('th:eq(1)')\r\n        .text(this.title === false ? value : this.title);\r\n    },\r\n\r\n    setDaysOfWeekDisabled: function (daysOfWeekDisabled) {\r\n      this.daysOfWeekDisabled = daysOfWeekDisabled || [];\r\n      if (!$.isArray(this.daysOfWeekDisabled)) {\r\n        this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\\s*/);\r\n      }\r\n      this.daysOfWeekDisabled = $.map(this.daysOfWeekDisabled, function (d) {\r\n        return parseInt(d, 10);\r\n      });\r\n      this.update();\r\n      this.updateNavArrows();\r\n    },\r\n\r\n    setMinutesDisabled: function (minutesDisabled) {\r\n      this.minutesDisabled = minutesDisabled || [];\r\n      if (!$.isArray(this.minutesDisabled)) {\r\n        this.minutesDisabled = this.minutesDisabled.split(/,\\s*/);\r\n      }\r\n      this.minutesDisabled = $.map(this.minutesDisabled, function (d) {\r\n        return parseInt(d, 10);\r\n      });\r\n      this.update();\r\n      this.updateNavArrows();\r\n    },\r\n\r\n    setHoursDisabled: function (hoursDisabled) {\r\n      this.hoursDisabled = hoursDisabled || [];\r\n      if (!$.isArray(this.hoursDisabled)) {\r\n        this.hoursDisabled = this.hoursDisabled.split(/,\\s*/);\r\n      }\r\n      this.hoursDisabled = $.map(this.hoursDisabled, function (d) {\r\n        return parseInt(d, 10);\r\n      });\r\n      this.update();\r\n      this.updateNavArrows();\r\n    },\r\n\r\n    place: function () {\r\n      if (this.isInline) return;\r\n\r\n      if (!this.zIndex) {\r\n        var index_highest = 0;\r\n        $('div').each(function () {\r\n          var index_current = parseInt($(this).css('zIndex'), 10);\r\n          if (index_current > index_highest) {\r\n            index_highest = index_current;\r\n          }\r\n        });\r\n        this.zIndex = index_highest + 10;\r\n      }\r\n\r\n      var offset, top, left, containerOffset;\r\n      if (this.container instanceof $) {\r\n        containerOffset = this.container.offset();\r\n      } else {\r\n        containerOffset = $(this.container).offset();\r\n      }\r\n\r\n      if (this.component) {\r\n        offset = this.component.offset();\r\n        left = offset.left;\r\n        if (this.pickerPosition === 'bottom-left' || this.pickerPosition === 'top-left') {\r\n          left += this.component.outerWidth() - this.picker.outerWidth();\r\n        }\r\n      } else {\r\n        offset = this.element.offset();\r\n        left = offset.left;\r\n        if (this.pickerPosition === 'bottom-left' || this.pickerPosition === 'top-left') {\r\n          left += this.element.outerWidth() - this.picker.outerWidth();\r\n        }\r\n      }\r\n\r\n      var bodyWidth = document.body.clientWidth || window.innerWidth;\r\n      if (left + 220 > bodyWidth) {\r\n        left = bodyWidth - 220;\r\n      }\r\n\r\n      if (this.pickerPosition === 'top-left' || this.pickerPosition === 'top-right') {\r\n        top = offset.top - this.picker.outerHeight();\r\n      } else {\r\n        top = offset.top + this.height;\r\n      }\r\n\r\n      top = top - containerOffset.top;\r\n      left = left - containerOffset.left;\r\n\r\n      this.picker.css({\r\n        top:    top,\r\n        left:   left,\r\n        zIndex: this.zIndex\r\n      });\r\n    },\r\n\r\n    hour_minute: \"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]\",\r\n\r\n    update: function () {\r\n      var date, fromArgs = false;\r\n      if (arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) {\r\n        date = arguments[0];\r\n        fromArgs = true;\r\n      } else {\r\n        date = (this.isInput ? this.element.val() : this.element.find('input').val()) || this.element.data('date') || this.initialDate;\r\n        if (typeof date === 'string') {\r\n          date = date.replace(/^\\s+|\\s+$/g,'');\r\n        }\r\n      }\r\n\r\n      if (!date) {\r\n        date = new Date();\r\n        fromArgs = false;\r\n      }\r\n\r\n      if (typeof date === \"string\") {\r\n        if (new RegExp(this.hour_minute).test(date) || new RegExp(this.hour_minute + \":[0-5][0-9]\").test(date)) {\r\n          date = this.getDate()\r\n        }\r\n      }\r\n\r\n      this.date = DPGlobal.parseDate(date, this.format, this.language, this.formatType, this.timezone);\r\n\r\n      if (fromArgs) this.setValue();\r\n\r\n      if (this.date < this.startDate) {\r\n        this.viewDate = new Date(this.startDate);\r\n      } else if (this.date > this.endDate) {\r\n        this.viewDate = new Date(this.endDate);\r\n      } else {\r\n        this.viewDate = new Date(this.date);\r\n      }\r\n      this.fill();\r\n    },\r\n\r\n    fillDow: function () {\r\n      var dowCnt = this.weekStart,\r\n        html = '<tr>';\r\n      while (dowCnt < this.weekStart + 7) {\r\n        html += '<th class=\"dow\">' + dates[this.language].daysMin[(dowCnt++) % 7] + '</th>';\r\n      }\r\n      html += '</tr>';\r\n      this.picker.find('.datetimepicker-days thead').append(html);\r\n    },\r\n\r\n    fillMonths: function () {\r\n      var html = '';\r\n      var d = new Date(this.viewDate);\r\n      for (var i = 0; i < 12; i++) {\r\n        d.setUTCMonth(i);\r\n        var classes = this.onRenderMonth(d);\r\n        html += '<span class=\"' + classes.join(' ') + '\">' + dates[this.language].monthsShort[i] + '</span>';\r\n      }\r\n      this.picker.find('.datetimepicker-months td').html(html);\r\n    },\r\n\r\n    fill: function () {\r\n      if (!this.date || !this.viewDate) {\r\n        return;\r\n      }\r\n      var d = new Date(this.viewDate),\r\n        year = d.getUTCFullYear(),\r\n        month = d.getUTCMonth(),\r\n        dayMonth = d.getUTCDate(),\r\n        hours = d.getUTCHours(),\r\n        startYear = this.startDate.getUTCFullYear(),\r\n        startMonth = this.startDate.getUTCMonth(),\r\n        endYear = this.endDate.getUTCFullYear(),\r\n        endMonth = this.endDate.getUTCMonth() + 1,\r\n        currentDate = (new UTCDate(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(),\r\n        today = new Date();\r\n      this.setTitle('.datetimepicker-days', dates[this.language].months[month] + ' ' + year)\r\n      if (this.formatViewType === 'time') {\r\n        var formatted = this.getFormattedDate();\r\n        this.setTitle('.datetimepicker-hours', formatted);\r\n        this.setTitle('.datetimepicker-minutes', formatted);\r\n      } else {\r\n        this.setTitle('.datetimepicker-hours', dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);\r\n        this.setTitle('.datetimepicker-minutes', dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);\r\n      }\r\n      this.picker.find('tfoot th.today')\r\n        .text(dates[this.language].today || dates['en'].today)\r\n        .toggle(this.todayBtn !== false);\r\n      this.picker.find('tfoot th.clear')\r\n        .text(dates[this.language].clear || dates['en'].clear)\r\n        .toggle(this.clearBtn !== false);\r\n      this.updateNavArrows();\r\n      this.fillMonths();\r\n      var prevMonth = UTCDate(year, month - 1, 28, 0, 0, 0, 0),\r\n        day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());\r\n      prevMonth.setUTCDate(day);\r\n      prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7) % 7);\r\n      var nextMonth = new Date(prevMonth);\r\n      nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\r\n      nextMonth = nextMonth.valueOf();\r\n      var html = [];\r\n      var classes;\r\n      while (prevMonth.valueOf() < nextMonth) {\r\n        if (prevMonth.getUTCDay() === this.weekStart) {\r\n          html.push('<tr>');\r\n        }\r\n        classes = this.onRenderDay(prevMonth);\r\n        if (prevMonth.getUTCFullYear() < year || (prevMonth.getUTCFullYear() === year && prevMonth.getUTCMonth() < month)) {\r\n          classes.push('old');\r\n        } else if (prevMonth.getUTCFullYear() > year || (prevMonth.getUTCFullYear() === year && prevMonth.getUTCMonth() > month)) {\r\n          classes.push('new');\r\n        }\r\n        // Compare internal UTC date with local today, not UTC today\r\n        if (this.todayHighlight &&\r\n          prevMonth.getUTCFullYear() === today.getFullYear() &&\r\n          prevMonth.getUTCMonth() === today.getMonth() &&\r\n          prevMonth.getUTCDate() === today.getDate()) {\r\n          classes.push('today');\r\n        }\r\n        if (prevMonth.valueOf() === currentDate) {\r\n          classes.push('active');\r\n        }\r\n        if ((prevMonth.valueOf() + 86400000) <= this.startDate || prevMonth.valueOf() > this.endDate ||\r\n          $.inArray(prevMonth.getUTCDay(), this.daysOfWeekDisabled) !== -1 ||\r\n          $.inArray(prevMonth.toDateString(), this.datesDisabled) !== -1) {\r\n          classes.push('disabled');\r\n        }\r\n        html.push('<td class=\"' + classes.join(' ') + '\">' + prevMonth.getUTCDate() + '</td>');\r\n        if (prevMonth.getUTCDay() === this.weekEnd) {\r\n          html.push('</tr>');\r\n        }\r\n        prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\r\n      }\r\n      this.picker.find('.datetimepicker-days tbody').empty().append(html.join(''));\r\n\r\n      html = [];\r\n      var txt = '', meridian = '', meridianOld = '';\r\n      var hoursDisabled = this.hoursDisabled || [];\r\n      d = new Date(this.viewDate)\r\n      for (var i = 0; i < 24; i++) {\r\n        d.setUTCHours(i);\r\n        classes = this.onRenderHour(d);\r\n        if (hoursDisabled.indexOf(i) !== -1) {\r\n          classes.push('disabled');\r\n        }\r\n        var actual = UTCDate(year, month, dayMonth, i);\r\n        // We want the previous hour for the startDate\r\n        if ((actual.valueOf() + 3600000) <= this.startDate || actual.valueOf() > this.endDate) {\r\n          classes.push('disabled');\r\n        } else if (hours === i) {\r\n          classes.push('active');\r\n        }\r\n        if (this.showMeridian && dates[this.language].meridiem.length === 2) {\r\n          meridian = (i < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]);\r\n          if (meridian !== meridianOld) {\r\n            if (meridianOld !== '') {\r\n              html.push('</fieldset>');\r\n            }\r\n            html.push('<fieldset class=\"hour\"><legend>' + meridian.toUpperCase() + '</legend>');\r\n          }\r\n          meridianOld = meridian;\r\n          txt = (i % 12 ? i % 12 : 12);\r\n          if (i < 12) {\r\n            classes.push('hour_am');\r\n          } else {\r\n            classes.push('hour_pm');\r\n          }\r\n          html.push('<span class=\"' + classes.join(' ') + '\">' + txt + '</span>');\r\n          if (i === 23) {\r\n            html.push('</fieldset>');\r\n          }\r\n        } else {\r\n          txt = i + ':00';\r\n          html.push('<span class=\"' + classes.join(' ') + '\">' + txt + '</span>');\r\n        }\r\n      }\r\n      this.picker.find('.datetimepicker-hours td').html(html.join(''));\r\n\r\n      html = [];\r\n      txt = '';\r\n      meridian = '';\r\n      meridianOld = '';\r\n      var minutesDisabled = this.minutesDisabled || [];\r\n      d = new Date(this.viewDate);\r\n      for (var i = 0; i < 60; i += this.minuteStep) {\r\n        if (minutesDisabled.indexOf(i) !== -1) continue;\r\n        d.setUTCMinutes(i);\r\n        d.setUTCSeconds(0);\r\n        classes = this.onRenderMinute(d);\r\n        if (this.showMeridian && dates[this.language].meridiem.length === 2) {\r\n          meridian = (hours < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]);\r\n          if (meridian !== meridianOld) {\r\n            if (meridianOld !== '') {\r\n              html.push('</fieldset>');\r\n            }\r\n            html.push('<fieldset class=\"minute\"><legend>' + meridian.toUpperCase() + '</legend>');\r\n          }\r\n          meridianOld = meridian;\r\n          txt = (hours % 12 ? hours % 12 : 12);\r\n          html.push('<span class=\"' + classes.join(' ') + '\">' + txt + ':' + (i < 10 ? '0' + i : i) + '</span>');\r\n          if (i === 59) {\r\n            html.push('</fieldset>');\r\n          }\r\n        } else {\r\n          txt = i + ':00';\r\n          html.push('<span class=\"' + classes.join(' ') + '\">' + hours + ':' + (i < 10 ? '0' + i : i) + '</span>');\r\n        }\r\n      }\r\n      this.picker.find('.datetimepicker-minutes td').html(html.join(''));\r\n\r\n      var currentYear = this.date.getUTCFullYear();\r\n      var months = this.setTitle('.datetimepicker-months', year)\r\n        .end()\r\n        .find('.month').removeClass('active');\r\n      if (currentYear === year) {\r\n        // getUTCMonths() returns 0 based, and we need to select the next one\r\n        // To cater bootstrap 2 we don't need to select the next one\r\n        months.eq(this.date.getUTCMonth()).addClass('active');\r\n      }\r\n      if (year < startYear || year > endYear) {\r\n        months.addClass('disabled');\r\n      }\r\n      if (year === startYear) {\r\n        months.slice(0, startMonth).addClass('disabled');\r\n      }\r\n      if (year === endYear) {\r\n        months.slice(endMonth).addClass('disabled');\r\n      }\r\n\r\n      html = '';\r\n      year = parseInt(year / 10, 10) * 10;\r\n      var yearCont = this.setTitle('.datetimepicker-years', year + '-' + (year + 9))\r\n        .end()\r\n        .find('td');\r\n      year -= 1;\r\n      d = new Date(this.viewDate);\r\n      for (var i = -1; i < 11; i++) {\r\n        d.setUTCFullYear(year);\r\n        classes = this.onRenderYear(d);\r\n        if (i === -1 || i === 10) {\r\n          classes.push(old);\r\n        }\r\n        html += '<span class=\"' + classes.join(' ') + '\">' + year + '</span>';\r\n        year += 1;\r\n      }\r\n      yearCont.html(html);\r\n      this.place();\r\n    },\r\n\r\n    updateNavArrows: function () {\r\n      var d = new Date(this.viewDate),\r\n        year = d.getUTCFullYear(),\r\n        month = d.getUTCMonth(),\r\n        day = d.getUTCDate(),\r\n        hour = d.getUTCHours();\r\n      switch (this.viewMode) {\r\n        case 0:\r\n          if (year <= this.startDate.getUTCFullYear()\r\n            && month <= this.startDate.getUTCMonth()\r\n            && day <= this.startDate.getUTCDate()\r\n            && hour <= this.startDate.getUTCHours()) {\r\n            this.picker.find('.prev').css({visibility: 'hidden'});\r\n          } else {\r\n            this.picker.find('.prev').css({visibility: 'visible'});\r\n          }\r\n          if (year >= this.endDate.getUTCFullYear()\r\n            && month >= this.endDate.getUTCMonth()\r\n            && day >= this.endDate.getUTCDate()\r\n            && hour >= this.endDate.getUTCHours()) {\r\n            this.picker.find('.next').css({visibility: 'hidden'});\r\n          } else {\r\n            this.picker.find('.next').css({visibility: 'visible'});\r\n          }\r\n          break;\r\n        case 1:\r\n          if (year <= this.startDate.getUTCFullYear()\r\n            && month <= this.startDate.getUTCMonth()\r\n            && day <= this.startDate.getUTCDate()) {\r\n            this.picker.find('.prev').css({visibility: 'hidden'});\r\n          } else {\r\n            this.picker.find('.prev').css({visibility: 'visible'});\r\n          }\r\n          if (year >= this.endDate.getUTCFullYear()\r\n            && month >= this.endDate.getUTCMonth()\r\n            && day >= this.endDate.getUTCDate()) {\r\n            this.picker.find('.next').css({visibility: 'hidden'});\r\n          } else {\r\n            this.picker.find('.next').css({visibility: 'visible'});\r\n          }\r\n          break;\r\n        case 2:\r\n          if (year <= this.startDate.getUTCFullYear()\r\n            && month <= this.startDate.getUTCMonth()) {\r\n            this.picker.find('.prev').css({visibility: 'hidden'});\r\n          } else {\r\n            this.picker.find('.prev').css({visibility: 'visible'});\r\n          }\r\n          if (year >= this.endDate.getUTCFullYear()\r\n            && month >= this.endDate.getUTCMonth()) {\r\n            this.picker.find('.next').css({visibility: 'hidden'});\r\n          } else {\r\n            this.picker.find('.next').css({visibility: 'visible'});\r\n          }\r\n          break;\r\n        case 3:\r\n        case 4:\r\n          if (year <= this.startDate.getUTCFullYear()) {\r\n            this.picker.find('.prev').css({visibility: 'hidden'});\r\n          } else {\r\n            this.picker.find('.prev').css({visibility: 'visible'});\r\n          }\r\n          if (year >= this.endDate.getUTCFullYear()) {\r\n            this.picker.find('.next').css({visibility: 'hidden'});\r\n          } else {\r\n            this.picker.find('.next').css({visibility: 'visible'});\r\n          }\r\n          break;\r\n      }\r\n    },\r\n\r\n    mousewheel: function (e) {\r\n\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n\r\n      if (this.wheelPause) {\r\n        return;\r\n      }\r\n\r\n      this.wheelPause = true;\r\n\r\n      var originalEvent = e.originalEvent;\r\n\r\n      var delta = originalEvent.wheelDelta;\r\n\r\n      var mode = delta > 0 ? 1 : (delta === 0) ? 0 : -1;\r\n\r\n      if (this.wheelViewModeNavigationInverseDirection) {\r\n        mode = -mode;\r\n      }\r\n\r\n      this.showMode(mode);\r\n\r\n      setTimeout($.proxy(function () {\r\n\r\n        this.wheelPause = false\r\n\r\n      }, this), this.wheelViewModeNavigationDelay);\r\n\r\n    },\r\n\r\n    click: function (e) {\r\n      e.stopPropagation();\r\n      e.preventDefault();\r\n      var target = $(e.target).closest('span, td, th, legend');\r\n      if (target.is('.' + this.icontype)) {\r\n        target = $(target).parent().closest('span, td, th, legend');\r\n      }\r\n      if (target.length === 1) {\r\n        if (target.is('.disabled')) {\r\n          this.element.trigger({\r\n            type:      'outOfRange',\r\n            date:      this.viewDate,\r\n            startDate: this.startDate,\r\n            endDate:   this.endDate\r\n          });\r\n          return;\r\n        }\r\n        switch (target[0].nodeName.toLowerCase()) {\r\n          case 'th':\r\n            switch (target[0].className) {\r\n              case 'switch':\r\n                this.showMode(1);\r\n                break;\r\n              case 'prev':\r\n              case 'next':\r\n                var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1);\r\n                switch (this.viewMode) {\r\n                  case 0:\r\n                    this.viewDate = this.moveHour(this.viewDate, dir);\r\n                    break;\r\n                  case 1:\r\n                    this.viewDate = this.moveDate(this.viewDate, dir);\r\n                    break;\r\n                  case 2:\r\n                    this.viewDate = this.moveMonth(this.viewDate, dir);\r\n                    break;\r\n                  case 3:\r\n                  case 4:\r\n                    this.viewDate = this.moveYear(this.viewDate, dir);\r\n                    break;\r\n                }\r\n                this.fill();\r\n                this.element.trigger({\r\n                  type:      target[0].className + ':' + this.convertViewModeText(this.viewMode),\r\n                  date:      this.viewDate,\r\n                  startDate: this.startDate,\r\n                  endDate:   this.endDate\r\n                });\r\n                break;\r\n              case 'clear':\r\n                this.reset();\r\n                if (this.autoclose) {\r\n                  this.hide();\r\n                }\r\n                break;\r\n              case 'today':\r\n                var date = new Date();\r\n                date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0);\r\n\r\n                // Respect startDate and endDate.\r\n                if (date < this.startDate) date = this.startDate;\r\n                else if (date > this.endDate) date = this.endDate;\r\n\r\n                this.viewMode = this.startViewMode;\r\n                this.showMode(0);\r\n                this._setDate(date);\r\n                this.fill();\r\n                if (this.autoclose) {\r\n                  this.hide();\r\n                }\r\n                break;\r\n            }\r\n            break;\r\n          case 'span':\r\n            if (!target.is('.disabled')) {\r\n              var year = this.viewDate.getUTCFullYear(),\r\n                month = this.viewDate.getUTCMonth(),\r\n                day = this.viewDate.getUTCDate(),\r\n                hours = this.viewDate.getUTCHours(),\r\n                minutes = this.viewDate.getUTCMinutes(),\r\n                seconds = this.viewDate.getUTCSeconds();\r\n\r\n              if (target.is('.month')) {\r\n                this.viewDate.setUTCDate(1);\r\n                month = target.parent().find('span').index(target);\r\n                day = this.viewDate.getUTCDate();\r\n                this.viewDate.setUTCMonth(month);\r\n                this.element.trigger({\r\n                  type: 'changeMonth',\r\n                  date: this.viewDate\r\n                });\r\n                if (this.viewSelect >= 3) {\r\n                  this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n                }\r\n              } else if (target.is('.year')) {\r\n                this.viewDate.setUTCDate(1);\r\n                year = parseInt(target.text(), 10) || 0;\r\n                this.viewDate.setUTCFullYear(year);\r\n                this.element.trigger({\r\n                  type: 'changeYear',\r\n                  date: this.viewDate\r\n                });\r\n                if (this.viewSelect >= 4) {\r\n                  this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n                }\r\n              } else if (target.is('.hour')) {\r\n                hours = parseInt(target.text(), 10) || 0;\r\n                if (target.hasClass('hour_am') || target.hasClass('hour_pm')) {\r\n                  if (hours === 12 && target.hasClass('hour_am')) {\r\n                    hours = 0;\r\n                  } else if (hours !== 12 && target.hasClass('hour_pm')) {\r\n                    hours += 12;\r\n                  }\r\n                }\r\n                this.viewDate.setUTCHours(hours);\r\n                this.element.trigger({\r\n                  type: 'changeHour',\r\n                  date: this.viewDate\r\n                });\r\n                if (this.viewSelect >= 1) {\r\n                  this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n                }\r\n              } else if (target.is('.minute')) {\r\n                minutes = parseInt(target.text().substr(target.text().indexOf(':') + 1), 10) || 0;\r\n                this.viewDate.setUTCMinutes(minutes);\r\n                this.element.trigger({\r\n                  type: 'changeMinute',\r\n                  date: this.viewDate\r\n                });\r\n                if (this.viewSelect >= 0) {\r\n                  this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n                }\r\n              }\r\n              if (this.viewMode !== 0) {\r\n                var oldViewMode = this.viewMode;\r\n                this.showMode(-1);\r\n                this.fill();\r\n                if (oldViewMode === this.viewMode && this.autoclose) {\r\n                  this.hide();\r\n                }\r\n              } else {\r\n                this.fill();\r\n                if (this.autoclose) {\r\n                  this.hide();\r\n                }\r\n              }\r\n            }\r\n            break;\r\n          case 'td':\r\n            if (target.is('.day') && !target.is('.disabled')) {\r\n              var day = parseInt(target.text(), 10) || 1;\r\n              var year = this.viewDate.getUTCFullYear(),\r\n                month = this.viewDate.getUTCMonth(),\r\n                hours = this.viewDate.getUTCHours(),\r\n                minutes = this.viewDate.getUTCMinutes(),\r\n                seconds = this.viewDate.getUTCSeconds();\r\n              if (target.is('.old')) {\r\n                if (month === 0) {\r\n                  month = 11;\r\n                  year -= 1;\r\n                } else {\r\n                  month -= 1;\r\n                }\r\n              } else if (target.is('.new')) {\r\n                if (month === 11) {\r\n                  month = 0;\r\n                  year += 1;\r\n                } else {\r\n                  month += 1;\r\n                }\r\n              }\r\n              this.viewDate.setUTCFullYear(year);\r\n              this.viewDate.setUTCMonth(month, day);\r\n              this.element.trigger({\r\n                type: 'changeDay',\r\n                date: this.viewDate\r\n              });\r\n              if (this.viewSelect >= 2) {\r\n                this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\r\n              }\r\n            }\r\n            var oldViewMode = this.viewMode;\r\n            this.showMode(-1);\r\n            this.fill();\r\n            if (oldViewMode === this.viewMode && this.autoclose) {\r\n              this.hide();\r\n            }\r\n            break;\r\n        }\r\n      }\r\n    },\r\n\r\n    _setDate: function (date, which) {\r\n      if (!which || which === 'date')\r\n        this.date = date;\r\n      if (!which || which === 'view')\r\n        this.viewDate = date;\r\n      this.fill();\r\n      this.setValue();\r\n      var element;\r\n      if (this.isInput) {\r\n        element = this.element;\r\n      } else if (this.component) {\r\n        element = this.element.find('input');\r\n      }\r\n      if (element) {\r\n        element.change();\r\n      }\r\n      this.element.trigger({\r\n        type: 'changeDate',\r\n        date: this.getDate()\r\n      });\r\n      if(date === null)\r\n        this.date = this.viewDate;\r\n    },\r\n\r\n    moveMinute: function (date, dir) {\r\n      if (!dir) return date;\r\n      var new_date = new Date(date.valueOf());\r\n      //dir = dir > 0 ? 1 : -1;\r\n      new_date.setUTCMinutes(new_date.getUTCMinutes() + (dir * this.minuteStep));\r\n      return new_date;\r\n    },\r\n\r\n    moveHour: function (date, dir) {\r\n      if (!dir) return date;\r\n      var new_date = new Date(date.valueOf());\r\n      //dir = dir > 0 ? 1 : -1;\r\n      new_date.setUTCHours(new_date.getUTCHours() + dir);\r\n      return new_date;\r\n    },\r\n\r\n    moveDate: function (date, dir) {\r\n      if (!dir) return date;\r\n      var new_date = new Date(date.valueOf());\r\n      //dir = dir > 0 ? 1 : -1;\r\n      new_date.setUTCDate(new_date.getUTCDate() + dir);\r\n      return new_date;\r\n    },\r\n\r\n    moveMonth: function (date, dir) {\r\n      if (!dir) return date;\r\n      var new_date = new Date(date.valueOf()),\r\n        day = new_date.getUTCDate(),\r\n        month = new_date.getUTCMonth(),\r\n        mag = Math.abs(dir),\r\n        new_month, test;\r\n      dir = dir > 0 ? 1 : -1;\r\n      if (mag === 1) {\r\n        test = dir === -1\r\n          // If going back one month, make sure month is not current month\r\n          // (eg, Mar 31 -> Feb 31 === Feb 28, not Mar 02)\r\n          ? function () {\r\n          return new_date.getUTCMonth() === month;\r\n        }\r\n          // If going forward one month, make sure month is as expected\r\n          // (eg, Jan 31 -> Feb 31 === Feb 28, not Mar 02)\r\n          : function () {\r\n          return new_date.getUTCMonth() !== new_month;\r\n        };\r\n        new_month = month + dir;\r\n        new_date.setUTCMonth(new_month);\r\n        // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\r\n        if (new_month < 0 || new_month > 11)\r\n          new_month = (new_month + 12) % 12;\r\n      } else {\r\n        // For magnitudes >1, move one month at a time...\r\n        for (var i = 0; i < mag; i++)\r\n          // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\r\n          new_date = this.moveMonth(new_date, dir);\r\n        // ...then reset the day, keeping it in the new month\r\n        new_month = new_date.getUTCMonth();\r\n        new_date.setUTCDate(day);\r\n        test = function () {\r\n          return new_month !== new_date.getUTCMonth();\r\n        };\r\n      }\r\n      // Common date-resetting loop -- if date is beyond end of month, make it\r\n      // end of month\r\n      while (test()) {\r\n        new_date.setUTCDate(--day);\r\n        new_date.setUTCMonth(new_month);\r\n      }\r\n      return new_date;\r\n    },\r\n\r\n    moveYear: function (date, dir) {\r\n      return this.moveMonth(date, dir * 12);\r\n    },\r\n\r\n    dateWithinRange: function (date) {\r\n      return date >= this.startDate && date <= this.endDate;\r\n    },\r\n\r\n    keydown: function (e) {\r\n      if (this.picker.is(':not(:visible)')) {\r\n        if (e.keyCode === 27) // allow escape to hide and re-show picker\r\n          this.show();\r\n        return;\r\n      }\r\n      var dateChanged = false,\r\n        dir, newDate, newViewDate;\r\n      switch (e.keyCode) {\r\n        case 27: // escape\r\n          this.hide();\r\n          e.preventDefault();\r\n          break;\r\n        case 37: // left\r\n        case 39: // right\r\n          if (!this.keyboardNavigation) break;\r\n          dir = e.keyCode === 37 ? -1 : 1;\r\n          var viewMode = this.viewMode;\r\n          if (e.ctrlKey) {\r\n            viewMode += 2;\r\n          } else if (e.shiftKey) {\r\n            viewMode += 1;\r\n          }\r\n          if (viewMode === 4) {\r\n            newDate = this.moveYear(this.date, dir);\r\n            newViewDate = this.moveYear(this.viewDate, dir);\r\n          } else if (viewMode === 3) {\r\n            newDate = this.moveMonth(this.date, dir);\r\n            newViewDate = this.moveMonth(this.viewDate, dir);\r\n          } else if (viewMode === 2) {\r\n            newDate = this.moveDate(this.date, dir);\r\n            newViewDate = this.moveDate(this.viewDate, dir);\r\n          } else if (viewMode === 1) {\r\n            newDate = this.moveHour(this.date, dir);\r\n            newViewDate = this.moveHour(this.viewDate, dir);\r\n          } else if (viewMode === 0) {\r\n            newDate = this.moveMinute(this.date, dir);\r\n            newViewDate = this.moveMinute(this.viewDate, dir);\r\n          }\r\n          if (this.dateWithinRange(newDate)) {\r\n            this.date = newDate;\r\n            this.viewDate = newViewDate;\r\n            this.setValue();\r\n            this.update();\r\n            e.preventDefault();\r\n            dateChanged = true;\r\n          }\r\n          break;\r\n        case 38: // up\r\n        case 40: // down\r\n          if (!this.keyboardNavigation) break;\r\n          dir = e.keyCode === 38 ? -1 : 1;\r\n          viewMode = this.viewMode;\r\n          if (e.ctrlKey) {\r\n            viewMode += 2;\r\n          } else if (e.shiftKey) {\r\n            viewMode += 1;\r\n          }\r\n          if (viewMode === 4) {\r\n            newDate = this.moveYear(this.date, dir);\r\n            newViewDate = this.moveYear(this.viewDate, dir);\r\n          } else if (viewMode === 3) {\r\n            newDate = this.moveMonth(this.date, dir);\r\n            newViewDate = this.moveMonth(this.viewDate, dir);\r\n          } else if (viewMode === 2) {\r\n            newDate = this.moveDate(this.date, dir * 7);\r\n            newViewDate = this.moveDate(this.viewDate, dir * 7);\r\n          } else if (viewMode === 1) {\r\n            if (this.showMeridian) {\r\n              newDate = this.moveHour(this.date, dir * 6);\r\n              newViewDate = this.moveHour(this.viewDate, dir * 6);\r\n            } else {\r\n              newDate = this.moveHour(this.date, dir * 4);\r\n              newViewDate = this.moveHour(this.viewDate, dir * 4);\r\n            }\r\n          } else if (viewMode === 0) {\r\n            newDate = this.moveMinute(this.date, dir * 4);\r\n            newViewDate = this.moveMinute(this.viewDate, dir * 4);\r\n          }\r\n          if (this.dateWithinRange(newDate)) {\r\n            this.date = newDate;\r\n            this.viewDate = newViewDate;\r\n            this.setValue();\r\n            this.update();\r\n            e.preventDefault();\r\n            dateChanged = true;\r\n          }\r\n          break;\r\n        case 13: // enter\r\n          if (this.viewMode !== 0) {\r\n            var oldViewMode = this.viewMode;\r\n            this.showMode(-1);\r\n            this.fill();\r\n            if (oldViewMode === this.viewMode && this.autoclose) {\r\n              this.hide();\r\n            }\r\n          } else {\r\n            this.fill();\r\n            if (this.autoclose) {\r\n              this.hide();\r\n            }\r\n          }\r\n          e.preventDefault();\r\n          break;\r\n        case 9: // tab\r\n          this.hide();\r\n          break;\r\n      }\r\n      if (dateChanged) {\r\n        var element;\r\n        if (this.isInput) {\r\n          element = this.element;\r\n        } else if (this.component) {\r\n          element = this.element.find('input');\r\n        }\r\n        if (element) {\r\n          element.change();\r\n        }\r\n        this.element.trigger({\r\n          type: 'changeDate',\r\n          date: this.getDate()\r\n        });\r\n      }\r\n    },\r\n\r\n    showMode: function (dir) {\r\n      if (dir) {\r\n        var newViewMode = Math.max(0, Math.min(DPGlobal.modes.length - 1, this.viewMode + dir));\r\n        if (newViewMode >= this.minView && newViewMode <= this.maxView) {\r\n          this.element.trigger({\r\n            type:        'changeMode',\r\n            date:        this.viewDate,\r\n            oldViewMode: this.viewMode,\r\n            newViewMode: newViewMode\r\n          });\r\n\r\n          this.viewMode = newViewMode;\r\n        }\r\n      }\r\n      /*\r\n       vitalets: fixing bug of very special conditions:\r\n       jquery 1.7.1 + webkit + show inline datetimepicker in bootstrap popover.\r\n       Method show() does not set display css correctly and datetimepicker is not shown.\r\n       Changed to .css('display', 'block') solve the problem.\r\n       See https://github.com/vitalets/x-editable/issues/37\r\n\r\n       In jquery 1.7.2+ everything works fine.\r\n       */\r\n      //this.picker.find('>div').hide().filter('.datetimepicker-'+DPGlobal.modes[this.viewMode].clsName).show();\r\n      this.picker.find('>div').hide().filter('.datetimepicker-' + DPGlobal.modes[this.viewMode].clsName).css('display', 'block');\r\n      this.updateNavArrows();\r\n    },\r\n\r\n    reset: function () {\r\n      this._setDate(null, 'date');\r\n    },\r\n\r\n    convertViewModeText:  function (viewMode) {\r\n      switch (viewMode) {\r\n        case 4:\r\n          return 'decade';\r\n        case 3:\r\n          return 'year';\r\n        case 2:\r\n          return 'month';\r\n        case 1:\r\n          return 'day';\r\n        case 0:\r\n          return 'hour';\r\n      }\r\n    }\r\n  };\r\n\r\n  var old = $.fn.datetimepicker;\r\n  $.fn.datetimepicker = function (option) {\r\n    var args = Array.apply(null, arguments);\r\n    args.shift();\r\n    var internal_return;\r\n    this.each(function () {\r\n      var $this = $(this),\r\n        data = $this.data('datetimepicker'),\r\n        options = typeof option === 'object' && option;\r\n      if (!data) {\r\n        $this.data('datetimepicker', (data = new Datetimepicker(this, $.extend({}, $.fn.datetimepicker.defaults, options))));\r\n      }\r\n      if (typeof option === 'string' && typeof data[option] === 'function') {\r\n        internal_return = data[option].apply(data, args);\r\n        if (internal_return !== undefined) {\r\n          return false;\r\n        }\r\n      }\r\n    });\r\n    if (internal_return !== undefined)\r\n      return internal_return;\r\n    else\r\n      return this;\r\n  };\r\n\r\n  $.fn.datetimepicker.defaults = {\r\n  };\r\n  $.fn.datetimepicker.Constructor = Datetimepicker;\r\n  var dates = $.fn.datetimepicker.dates = {\r\n    en: {\r\n      days:        ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],\r\n      daysShort:   ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],\r\n      daysMin:     ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'],\r\n      months:      ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\r\n      monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n      meridiem:    ['am', 'pm'],\r\n      suffix:      ['st', 'nd', 'rd', 'th'],\r\n      today:       'Today',\r\n      clear:       'Clear'\r\n    }\r\n  };\r\n\r\n  var DPGlobal = {\r\n    modes:            [\r\n      {\r\n        clsName: 'minutes',\r\n        navFnc:  'Hours',\r\n        navStep: 1\r\n      },\r\n      {\r\n        clsName: 'hours',\r\n        navFnc:  'Date',\r\n        navStep: 1\r\n      },\r\n      {\r\n        clsName: 'days',\r\n        navFnc:  'Month',\r\n        navStep: 1\r\n      },\r\n      {\r\n        clsName: 'months',\r\n        navFnc:  'FullYear',\r\n        navStep: 1\r\n      },\r\n      {\r\n        clsName: 'years',\r\n        navFnc:  'FullYear',\r\n        navStep: 10\r\n      }\r\n    ],\r\n    isLeapYear:       function (year) {\r\n      return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0))\r\n    },\r\n    getDaysInMonth:   function (year, month) {\r\n      return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]\r\n    },\r\n    getDefaultFormat: function (type, field) {\r\n      if (type === 'standard') {\r\n        if (field === 'input')\r\n          return 'yyyy-mm-dd hh:ii';\r\n        else\r\n          return 'yyyy-mm-dd hh:ii:ss';\r\n      } else if (type === 'php') {\r\n        if (field === 'input')\r\n          return 'Y-m-d H:i';\r\n        else\r\n          return 'Y-m-d H:i:s';\r\n      } else {\r\n        throw new Error('Invalid format type.');\r\n      }\r\n    },\r\n    validParts: function (type) {\r\n      if (type === 'standard') {\r\n        return /t|hh?|HH?|p|P|z|Z|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g;\r\n      } else if (type === 'php') {\r\n        return /[dDjlNwzFmMnStyYaABgGhHis]/g;\r\n      } else {\r\n        throw new Error('Invalid format type.');\r\n      }\r\n    },\r\n    nonpunctuation: /[^ -\\/:-@\\[-`{-~\\t\\n\\rTZ]+/g,\r\n    parseFormat: function (format, type) {\r\n      // IE treats \\0 as a string end in inputs (truncating the value),\r\n      // so it's a bad format delimiter, anyway\r\n      var separators = format.replace(this.validParts(type), '\\0').split('\\0'),\r\n        parts = format.match(this.validParts(type));\r\n      if (!separators || !separators.length || !parts || parts.length === 0) {\r\n        throw new Error('Invalid date format.');\r\n      }\r\n      return {separators: separators, parts: parts};\r\n    },\r\n    parseDate: function (date, format, language, type, timezone) {\r\n      if (date instanceof Date) {\r\n        var dateUTC = new Date(date.valueOf() - date.getTimezoneOffset() * 60000);\r\n        dateUTC.setMilliseconds(0);\r\n        return dateUTC;\r\n      }\r\n      if (/^\\d{4}\\-\\d{1,2}\\-\\d{1,2}$/.test(date)) {\r\n        format = this.parseFormat('yyyy-mm-dd', type);\r\n      }\r\n      if (/^\\d{4}\\-\\d{1,2}\\-\\d{1,2}[T ]\\d{1,2}\\:\\d{1,2}$/.test(date)) {\r\n        format = this.parseFormat('yyyy-mm-dd hh:ii', type);\r\n      }\r\n      if (/^\\d{4}\\-\\d{1,2}\\-\\d{1,2}[T ]\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}[Z]{0,1}$/.test(date)) {\r\n        format = this.parseFormat('yyyy-mm-dd hh:ii:ss', type);\r\n      }\r\n      if (/^[-+]\\d+[dmwy]([\\s,]+[-+]\\d+[dmwy])*$/.test(date)) {\r\n        var part_re = /([-+]\\d+)([dmwy])/,\r\n          parts = date.match(/([-+]\\d+)([dmwy])/g),\r\n          part, dir;\r\n        date = new Date();\r\n        for (var i = 0; i < parts.length; i++) {\r\n          part = part_re.exec(parts[i]);\r\n          dir = parseInt(part[1]);\r\n          switch (part[2]) {\r\n            case 'd':\r\n              date.setUTCDate(date.getUTCDate() + dir);\r\n              break;\r\n            case 'm':\r\n              date = Datetimepicker.prototype.moveMonth.call(Datetimepicker.prototype, date, dir);\r\n              break;\r\n            case 'w':\r\n              date.setUTCDate(date.getUTCDate() + dir * 7);\r\n              break;\r\n            case 'y':\r\n              date = Datetimepicker.prototype.moveYear.call(Datetimepicker.prototype, date, dir);\r\n              break;\r\n          }\r\n        }\r\n        return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), 0);\r\n      }\r\n      var parts = date && date.toString().match(this.nonpunctuation) || [],\r\n        date = new Date(0, 0, 0, 0, 0, 0, 0),\r\n        parsed = {},\r\n        setters_order = ['hh', 'h', 'ii', 'i', 'ss', 's', 'yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'D', 'DD', 'd', 'dd', 'H', 'HH', 'p', 'P', 'z', 'Z'],\r\n        setters_map = {\r\n          hh:   function (d, v) {\r\n            return d.setUTCHours(v);\r\n          },\r\n          h:    function (d, v) {\r\n            return d.setUTCHours(v);\r\n          },\r\n          HH:   function (d, v) {\r\n            return d.setUTCHours(v === 12 ? 0 : v);\r\n          },\r\n          H:    function (d, v) {\r\n            return d.setUTCHours(v === 12 ? 0 : v);\r\n          },\r\n          ii:   function (d, v) {\r\n            return d.setUTCMinutes(v);\r\n          },\r\n          i:    function (d, v) {\r\n            return d.setUTCMinutes(v);\r\n          },\r\n          ss:   function (d, v) {\r\n            return d.setUTCSeconds(v);\r\n          },\r\n          s:    function (d, v) {\r\n            return d.setUTCSeconds(v);\r\n          },\r\n          yyyy: function (d, v) {\r\n            return d.setUTCFullYear(v);\r\n          },\r\n          yy:   function (d, v) {\r\n            return d.setUTCFullYear(2000 + v);\r\n          },\r\n          m:    function (d, v) {\r\n            v -= 1;\r\n            while (v < 0) v += 12;\r\n            v %= 12;\r\n            d.setUTCMonth(v);\r\n            while (d.getUTCMonth() !== v)\r\n              if (isNaN(d.getUTCMonth()))\r\n                return d;\r\n              else\r\n                d.setUTCDate(d.getUTCDate() - 1);\r\n            return d;\r\n          },\r\n          d:    function (d, v) {\r\n            return d.setUTCDate(v);\r\n          },\r\n          p:    function (d, v) {\r\n            return d.setUTCHours(v === 1 ? d.getUTCHours() + 12 : d.getUTCHours());\r\n          },\r\n          z:    function () {\r\n            return timezone\r\n          }\r\n        },\r\n        val, filtered, part;\r\n      setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\r\n      setters_map['dd'] = setters_map['d'];\r\n      setters_map['P'] = setters_map['p'];\r\n      setters_map['Z'] = setters_map['z'];\r\n      date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());\r\n      if (parts.length === format.parts.length) {\r\n        for (var i = 0, cnt = format.parts.length; i < cnt; i++) {\r\n          val = parseInt(parts[i], 10);\r\n          part = format.parts[i];\r\n          if (isNaN(val)) {\r\n            switch (part) {\r\n              case 'MM':\r\n                filtered = $(dates[language].months).filter(function () {\r\n                  var m = this.slice(0, parts[i].length),\r\n                    p = parts[i].slice(0, m.length);\r\n                  return m === p;\r\n                });\r\n                val = $.inArray(filtered[0], dates[language].months) + 1;\r\n                break;\r\n              case 'M':\r\n                filtered = $(dates[language].monthsShort).filter(function () {\r\n                  var m = this.slice(0, parts[i].length),\r\n                    p = parts[i].slice(0, m.length);\r\n                  return m.toLowerCase() === p.toLowerCase();\r\n                });\r\n                val = $.inArray(filtered[0], dates[language].monthsShort) + 1;\r\n                break;\r\n              case 'p':\r\n              case 'P':\r\n                val = $.inArray(parts[i].toLowerCase(), dates[language].meridiem);\r\n                break;\r\n              case 'z':\r\n              case 'Z':\r\n                timezone;\r\n                break;\r\n\r\n            }\r\n          }\r\n          parsed[part] = val;\r\n        }\r\n        for (var i = 0, s; i < setters_order.length; i++) {\r\n          s = setters_order[i];\r\n          if (s in parsed && !isNaN(parsed[s]))\r\n            setters_map[s](date, parsed[s])\r\n        }\r\n      }\r\n      return date;\r\n    },\r\n    formatDate:       function (date, format, language, type, timezone) {\r\n      if (date === null) {\r\n        return '';\r\n      }\r\n      var val;\r\n      if (type === 'standard') {\r\n        val = {\r\n          t:    date.getTime(),\r\n          // year\r\n          yy:   date.getUTCFullYear().toString().substring(2),\r\n          yyyy: date.getUTCFullYear(),\r\n          // month\r\n          m:    date.getUTCMonth() + 1,\r\n          M:    dates[language].monthsShort[date.getUTCMonth()],\r\n          MM:   dates[language].months[date.getUTCMonth()],\r\n          // day\r\n          d:    date.getUTCDate(),\r\n          D:    dates[language].daysShort[date.getUTCDay()],\r\n          DD:   dates[language].days[date.getUTCDay()],\r\n          p:    (dates[language].meridiem.length === 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''),\r\n          // hour\r\n          h:    date.getUTCHours(),\r\n          // minute\r\n          i:    date.getUTCMinutes(),\r\n          // second\r\n          s:    date.getUTCSeconds(),\r\n          // timezone\r\n          z:    timezone\r\n        };\r\n\r\n        if (dates[language].meridiem.length === 2) {\r\n          val.H = (val.h % 12 === 0 ? 12 : val.h % 12);\r\n        }\r\n        else {\r\n          val.H = val.h;\r\n        }\r\n        val.HH = (val.H < 10 ? '0' : '') + val.H;\r\n        val.P = val.p.toUpperCase();\r\n        val.Z = val.z;\r\n        val.hh = (val.h < 10 ? '0' : '') + val.h;\r\n        val.ii = (val.i < 10 ? '0' : '') + val.i;\r\n        val.ss = (val.s < 10 ? '0' : '') + val.s;\r\n        val.dd = (val.d < 10 ? '0' : '') + val.d;\r\n        val.mm = (val.m < 10 ? '0' : '') + val.m;\r\n      } else if (type === 'php') {\r\n        // php format\r\n        val = {\r\n          // year\r\n          y: date.getUTCFullYear().toString().substring(2),\r\n          Y: date.getUTCFullYear(),\r\n          // month\r\n          F: dates[language].months[date.getUTCMonth()],\r\n          M: dates[language].monthsShort[date.getUTCMonth()],\r\n          n: date.getUTCMonth() + 1,\r\n          t: DPGlobal.getDaysInMonth(date.getUTCFullYear(), date.getUTCMonth()),\r\n          // day\r\n          j: date.getUTCDate(),\r\n          l: dates[language].days[date.getUTCDay()],\r\n          D: dates[language].daysShort[date.getUTCDay()],\r\n          w: date.getUTCDay(), // 0 -> 6\r\n          N: (date.getUTCDay() === 0 ? 7 : date.getUTCDay()),       // 1 -> 7\r\n          S: (date.getUTCDate() % 10 <= dates[language].suffix.length ? dates[language].suffix[date.getUTCDate() % 10 - 1] : ''),\r\n          // hour\r\n          a: (dates[language].meridiem.length === 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''),\r\n          g: (date.getUTCHours() % 12 === 0 ? 12 : date.getUTCHours() % 12),\r\n          G: date.getUTCHours(),\r\n          // minute\r\n          i: date.getUTCMinutes(),\r\n          // second\r\n          s: date.getUTCSeconds()\r\n        };\r\n        val.m = (val.n < 10 ? '0' : '') + val.n;\r\n        val.d = (val.j < 10 ? '0' : '') + val.j;\r\n        val.A = val.a.toString().toUpperCase();\r\n        val.h = (val.g < 10 ? '0' : '') + val.g;\r\n        val.H = (val.G < 10 ? '0' : '') + val.G;\r\n        val.i = (val.i < 10 ? '0' : '') + val.i;\r\n        val.s = (val.s < 10 ? '0' : '') + val.s;\r\n      } else {\r\n        throw new Error('Invalid format type.');\r\n      }\r\n      var date = [],\r\n        seps = $.extend([], format.separators);\r\n      for (var i = 0, cnt = format.parts.length; i < cnt; i++) {\r\n        if (seps.length) {\r\n          date.push(seps.shift());\r\n        }\r\n        date.push(val[format.parts[i]]);\r\n      }\r\n      if (seps.length) {\r\n        date.push(seps.shift());\r\n      }\r\n      return date.join('');\r\n    },\r\n    convertViewMode:  function (viewMode) {\r\n      switch (viewMode) {\r\n        case 4:\r\n        case 'decade':\r\n          viewMode = 4;\r\n          break;\r\n        case 3:\r\n        case 'year':\r\n          viewMode = 3;\r\n          break;\r\n        case 2:\r\n        case 'month':\r\n          viewMode = 2;\r\n          break;\r\n        case 1:\r\n        case 'day':\r\n          viewMode = 1;\r\n          break;\r\n        case 0:\r\n        case 'hour':\r\n          viewMode = 0;\r\n          break;\r\n      }\r\n\r\n      return viewMode;\r\n    },\r\n    headTemplate: '<thead>' +\r\n                '<tr>' +\r\n                '<th class=\"prev\"><i class=\"{iconType} {leftArrow}\"/></th>' +\r\n                '<th colspan=\"5\" class=\"switch\"></th>' +\r\n                '<th class=\"next\"><i class=\"{iconType} {rightArrow}\"/></th>' +\r\n                '</tr>' +\r\n      '</thead>',\r\n    headTemplateV3: '<thead>' +\r\n                '<tr>' +\r\n                '<th class=\"prev\"><span class=\"{iconType} {leftArrow}\"></span> </th>' +\r\n                '<th colspan=\"5\" class=\"switch\"></th>' +\r\n                '<th class=\"next\"><span class=\"{iconType} {rightArrow}\"></span> </th>' +\r\n                '</tr>' +\r\n      '</thead>',\r\n    contTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\r\n    footTemplate: '<tfoot>' + \r\n                    '<tr><th colspan=\"7\" class=\"today\"></th></tr>' +\r\n                    '<tr><th colspan=\"7\" class=\"clear\"></th></tr>' +\r\n                  '</tfoot>'\r\n  };\r\n  DPGlobal.template = '<div class=\"datetimepicker\">' +\r\n    '<div class=\"datetimepicker-minutes\">' +\r\n    '<table class=\" table-condensed\">' +\r\n    DPGlobal.headTemplate +\r\n    DPGlobal.contTemplate +\r\n    DPGlobal.footTemplate +\r\n    '</table>' +\r\n    '</div>' +\r\n    '<div class=\"datetimepicker-hours\">' +\r\n    '<table class=\" table-condensed\">' +\r\n    DPGlobal.headTemplate +\r\n    DPGlobal.contTemplate +\r\n    DPGlobal.footTemplate +\r\n    '</table>' +\r\n    '</div>' +\r\n    '<div class=\"datetimepicker-days\">' +\r\n    '<table class=\" table-condensed\">' +\r\n    DPGlobal.headTemplate +\r\n    '<tbody></tbody>' +\r\n    DPGlobal.footTemplate +\r\n    '</table>' +\r\n    '</div>' +\r\n    '<div class=\"datetimepicker-months\">' +\r\n    '<table class=\"table-condensed\">' +\r\n    DPGlobal.headTemplate +\r\n    DPGlobal.contTemplate +\r\n    DPGlobal.footTemplate +\r\n    '</table>' +\r\n    '</div>' +\r\n    '<div class=\"datetimepicker-years\">' +\r\n    '<table class=\"table-condensed\">' +\r\n    DPGlobal.headTemplate +\r\n    DPGlobal.contTemplate +\r\n    DPGlobal.footTemplate +\r\n    '</table>' +\r\n    '</div>' +\r\n    '</div>';\r\n  DPGlobal.templateV3 = '<div class=\"datetimepicker\">' +\r\n    '<div class=\"datetimepicker-minutes\">' +\r\n    '<table class=\" table-condensed\">' +\r\n    DPGlobal.headTemplateV3 +\r\n    DPGlobal.contTemplate +\r\n    DPGlobal.footTemplate +\r\n    '</table>' +\r\n    '</div>' +\r\n    '<div class=\"datetimepicker-hours\">' +\r\n    '<table class=\" table-condensed\">' +\r\n    DPGlobal.headTemplateV3 +\r\n    DPGlobal.contTemplate +\r\n    DPGlobal.footTemplate +\r\n    '</table>' +\r\n    '</div>' +\r\n    '<div class=\"datetimepicker-days\">' +\r\n    '<table class=\" table-condensed\">' +\r\n    DPGlobal.headTemplateV3 +\r\n    '<tbody></tbody>' +\r\n    DPGlobal.footTemplate +\r\n    '</table>' +\r\n    '</div>' +\r\n    '<div class=\"datetimepicker-months\">' +\r\n    '<table class=\"table-condensed\">' +\r\n    DPGlobal.headTemplateV3 +\r\n    DPGlobal.contTemplate +\r\n    DPGlobal.footTemplate +\r\n    '</table>' +\r\n    '</div>' +\r\n    '<div class=\"datetimepicker-years\">' +\r\n    '<table class=\"table-condensed\">' +\r\n    DPGlobal.headTemplateV3 +\r\n    DPGlobal.contTemplate +\r\n    DPGlobal.footTemplate +\r\n    '</table>' +\r\n    '</div>' +\r\n    '</div>';\r\n  $.fn.datetimepicker.DPGlobal = DPGlobal;\r\n\r\n  /* DATETIMEPICKER NO CONFLICT\r\n   * =================== */\r\n\r\n  $.fn.datetimepicker.noConflict = function () {\r\n    $.fn.datetimepicker = old;\r\n    return this;\r\n  };\r\n\r\n  /* DATETIMEPICKER DATA-API\r\n   * ================== */\r\n\r\n  $(document).on(\r\n    'focus.datetimepicker.data-api click.datetimepicker.data-api',\r\n    '[data-provide=\"datetimepicker\"]',\r\n    function (e) {\r\n      var $this = $(this);\r\n      if ($this.data('datetimepicker')) return;\r\n      e.preventDefault();\r\n      // component click requires us to explicitly show it\r\n      $this.datetimepicker('show');\r\n    }\r\n  );\r\n  $(function () {\r\n    $('[data-provide=\"datetimepicker-inline\"]').datetimepicker();\r\n  });\r\n\r\n}));\r\n", "import jquery from \"jquery\";\nwindow.jQuery = jquery;\nwindow.$ = jquery;\n\nconsole.log(\"jquery loaded\");\n", "/* eslint no-console:0 */\n// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n//\n// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate\n// layout file, like app/views/layouts/application.html.erb\n\n// import 'app';\nimport \"../dashboard/jquery\";\nimport \"bootstrap/dist/js/bootstrap.js\";\n\nimport Rails from \"rails-ujs\";\nRails.start();\n\nimport \"../dashboard/datatables\";\nimport \"../dashboard/tinymce\";\nimport \"../dashboard/calendar\";\nimport \"../dashboard/datetimepicker\";\n\nimport \"../dashboard/timer\";\nimport \"../dashboard/invoices\";\n\nimport \"../dashboard/care/vitals\";\nimport \"../dashboard/care/reports\";\n\nimport \"@fortawesome/fontawesome-free/css/all.css\";\n", "/*! DataTables Bootstrap 4 integration\n * \u00A92011-2017 SpryMedia Ltd - datatables.net/license\n */\n\nimport jQuery from 'jquery';\nimport DataTable from 'datatables.net';\n\n// Allow reassignment of the $ variable\nlet $ = jQuery;\n\n\n/**\n * DataTables integration for Bootstrap 4. This requires Bootstrap 4 and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using Bootstrap. See https://datatables.net/manual/styling/bootstrap\n * for further information.\n */\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t\"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>\" +\n\t\t\"<'row'<'col-sm-12'tr>>\" +\n\t\t\"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>\",\n\trenderer: 'bootstrap'\n} );\n\n\n/* Default class modification */\n$.extend( DataTable.ext.classes, {\n\tsWrapper:      \"dataTables_wrapper dt-bootstrap4\",\n\tsFilterInput:  \"form-control form-control-sm\",\n\tsLengthSelect: \"custom-select custom-select-sm form-control form-control-sm\",\n\tsProcessing:   \"dataTables_processing card\",\n\tsPageButton:   \"paginate_button page-item\"\n} );\n\n\n/* Bootstrap paging button renderer */\nDataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {\n\tvar api     = new DataTable.Api( settings );\n\tvar classes = settings.oClasses;\n\tvar lang    = settings.oLanguage.oPaginate;\n\tvar aria = settings.oLanguage.oAria.paginate || {};\n\tvar btnDisplay, btnClass;\n\n\tvar attach = function( container, buttons ) {\n\t\tvar i, ien, node, button;\n\t\tvar clickHandler = function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {\n\t\t\t\tapi.page( e.data.action ).draw( 'page' );\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\tattach( container, button );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtnDisplay = '';\n\t\t\t\tbtnClass = '';\n\n\t\t\t\tswitch ( button ) {\n\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\tbtnDisplay = '&#x2026;';\n\t\t\t\t\t\tbtnClass = 'disabled';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'first':\n\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'last':\n\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t'active' : '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\tvar disabled = btnClass.indexOf('disabled') !== -1;\n\n\t\t\t\t\tnode = $('<li>', {\n\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append( $('<a>', {\n\t\t\t\t\t\t\t\t'href': disabled ? null : '#',\n\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t'aria-current': btnClass === 'active' ? 'page' : null,\n\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t\t'class': 'page-link'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\tsettings.oApi._fnBindAction(\n\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t// inside an iframe or frame. \n\tvar activeEl;\n\n\ttry {\n\t\t// Because this approach is destroying and recreating the paging\n\t\t// elements, focus is lost on the select button which is bad for\n\t\t// accessibility. So we want to restore focus once the draw has\n\t\t// completed\n\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t}\n\tcatch (e) {}\n\n\tattach(\n\t\t$(host).empty().html('<ul class=\"pagination\"/>').children('ul'),\n\t\tbuttons\n\t);\n\n\tif ( activeEl !== undefined ) {\n\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t}\n};\n\n\nexport default DataTable;\n", "/*! DataTables 1.13.11\n * \u00A92008-2024 SpryMedia Ltd - datatables.net/license\n */\n\nimport jQuery from 'jquery';\n\n// DataTables code uses $ internally, but we want to be able to\n// reassign $ with the `use` method, so it is a regular var.\nvar $ = jQuery;\n\n\nvar DataTable = function ( selector, options )\n{\n\t// Check if called with a window or jQuery object for DOM less applications\n\t// This is for backwards compatibility\n\tif (DataTable.factory(selector, options)) {\n\t\treturn DataTable;\n\t}\n\n\t// When creating with `new`, create a new DataTable, returning the API instance\n\tif (this instanceof DataTable) {\n\t\treturn $(selector).DataTable(options);\n\t}\n\telse {\n\t\t// Argument switching\n\t\toptions = selector;\n\t}\n\n\t/**\n\t * Perform a jQuery selector action on the table's TR elements (from the tbody) and\n\t * return the resulting jQuery object.\n\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter\n\t *    criterion (\"applied\") or all TR elements (i.e. no filter).\n\t *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.\n\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t *    'original' whereby the original order the data was read into the table is used.\n\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t *  @returns {object} jQuery object, filtered by the given selector.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Highlight every second row\n\t *      oTable.$('tr:odd').css('backgroundColor', 'blue');\n\t *    } );\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Filter to rows with 'Webkit' in them, add a background colour and then\n\t *      // remove the filter, thus highlighting the 'Webkit' rows only.\n\t *      oTable.fnFilter('Webkit');\n\t *      oTable.$('tr', {\"search\": \"applied\"}).css('backgroundColor', 'blue');\n\t *      oTable.fnFilter('');\n\t *    } );\n\t */\n\tthis.$ = function ( sSelector, oOpts )\n\t{\n\t\treturn this.api(true).$( sSelector, oOpts );\n\t};\n\t\n\t\n\t/**\n\t * Almost identical to $ in operation, but in this case returns the data for the matched\n\t * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes\n\t * rather than any descendants, so the data can be obtained for the row/cell. If matching\n\t * rows are found, the data returned is the original data array/object that was used to\n\t * create the row (or a generated array if from a DOM source).\n\t *\n\t * This method is often useful in-combination with $ where both functions are given the\n\t * same parameters and the array indexes will match identically.\n\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t *  @param {string} [oOpts.filter=none] Select elements that meet the current filter\n\t *    criterion (\"applied\") or all elements (i.e. no filter).\n\t *  @param {string} [oOpts.order=current] Order of the data in the processed array.\n\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t *    'original' whereby the original order the data was read into the table is used.\n\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t *  @returns {array} Data for the matched elements. If any elements, as a result of the\n\t *    selector, were not TR, TD or TH elements in the DataTable, they will have a null\n\t *    entry in the array.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Get the data from the first row in the table\n\t *      var data = oTable._('tr:first');\n\t *\n\t *      // Do something useful with the data\n\t *      alert( \"First cell is: \"+data[0] );\n\t *    } );\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Filter to 'Webkit' and get all data for\n\t *      oTable.fnFilter('Webkit');\n\t *      var data = oTable._('tr', {\"search\": \"applied\"});\n\t *\n\t *      // Do something with the data\n\t *      alert( data.length+\" rows matched the search\" );\n\t *    } );\n\t */\n\tthis._ = function ( sSelector, oOpts )\n\t{\n\t\treturn this.api(true).rows( sSelector, oOpts ).data();\n\t};\n\t\n\t\n\t/**\n\t * Create a DataTables Api instance, with the currently selected tables for\n\t * the Api's context.\n\t * @param {boolean} [traditional=false] Set the API instance's context to be\n\t *   only the table referred to by the `DataTable.ext.iApiIndex` option, as was\n\t *   used in the API presented by DataTables 1.9- (i.e. the traditional mode),\n\t *   or if all tables captured in the jQuery object should be used.\n\t * @return {DataTables.Api}\n\t */\n\tthis.api = function ( traditional )\n\t{\n\t\treturn traditional ?\n\t\t\tnew _Api(\n\t\t\t\t_fnSettingsFromNode( this[ _ext.iApiIndex ] )\n\t\t\t) :\n\t\t\tnew _Api( this );\n\t};\n\t\n\t\n\t/**\n\t * Add a single new row or multiple rows of data to the table. Please note\n\t * that this is suitable for client-side processing only - if you are using\n\t * server-side processing (i.e. \"bServerSide\": true), then to add data, you\n\t * must add it to the data source, i.e. the server-side, through an Ajax call.\n\t *  @param {array|object} data The data to be added to the table. This can be:\n\t *    <ul>\n\t *      <li>1D array of data - add a single row with the data provided</li>\n\t *      <li>2D array of arrays - add multiple rows in a single call</li>\n\t *      <li>object - data object when using <i>mData</i></li>\n\t *      <li>array of objects - multiple data objects when using <i>mData</i></li>\n\t *    </ul>\n\t *  @param {bool} [redraw=true] redraw the table or not\n\t *  @returns {array} An array of integers, representing the list of indexes in\n\t *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to\n\t *    the table.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    // Global var for counter\n\t *    var giCount = 2;\n\t *\n\t *    $(document).ready(function() {\n\t *      $('#example').dataTable();\n\t *    } );\n\t *\n\t *    function fnClickAddRow() {\n\t *      $('#example').dataTable().fnAddData( [\n\t *        giCount+\".1\",\n\t *        giCount+\".2\",\n\t *        giCount+\".3\",\n\t *        giCount+\".4\" ]\n\t *      );\n\t *\n\t *      giCount++;\n\t *    }\n\t */\n\tthis.fnAddData = function( data, redraw )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\t/* Check if we want to add multiple rows or not */\n\t\tvar rows = Array.isArray(data) && ( Array.isArray(data[0]) || $.isPlainObject(data[0]) ) ?\n\t\t\tapi.rows.add( data ) :\n\t\t\tapi.row.add( data );\n\t\n\t\tif ( redraw === undefined || redraw ) {\n\t\t\tapi.draw();\n\t\t}\n\t\n\t\treturn rows.flatten().toArray();\n\t};\n\t\n\t\n\t/**\n\t * This function will make DataTables recalculate the column sizes, based on the data\n\t * contained in the table and the sizes applied to the columns (in the DOM, CSS or\n\t * through the sWidth parameter). This can be useful when the width of the table's\n\t * parent element changes (for example a window resize).\n\t *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable( {\n\t *        \"sScrollY\": \"200px\",\n\t *        \"bPaginate\": false\n\t *      } );\n\t *\n\t *      $(window).on('resize', function () {\n\t *        oTable.fnAdjustColumnSizing();\n\t *      } );\n\t *    } );\n\t */\n\tthis.fnAdjustColumnSizing = function ( bRedraw )\n\t{\n\t\tvar api = this.api( true ).columns.adjust();\n\t\tvar settings = api.settings()[0];\n\t\tvar scroll = settings.oScroll;\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.draw( false );\n\t\t}\n\t\telse if ( scroll.sX !== \"\" || scroll.sY !== \"\" ) {\n\t\t\t/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */\n\t\t\t_fnScrollDraw( settings );\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Quickly and simply clear a table\n\t *  @param {bool} [bRedraw=true] redraw the table or not\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)\n\t *      oTable.fnClearTable();\n\t *    } );\n\t */\n\tthis.fnClearTable = function( bRedraw )\n\t{\n\t\tvar api = this.api( true ).clear();\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.draw();\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * The exact opposite of 'opening' a row, this function will close any rows which\n\t * are currently 'open'.\n\t *  @param {node} nTr the table row to 'close'\n\t *  @returns {int} 0 on success, or 1 if failed (can't find the row)\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable;\n\t *\n\t *      // 'open' an information row when a row is clicked on\n\t *      $('#example tbody tr').click( function () {\n\t *        if ( oTable.fnIsOpen(this) ) {\n\t *          oTable.fnClose( this );\n\t *        } else {\n\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t *        }\n\t *      } );\n\t *\n\t *      oTable = $('#example').dataTable();\n\t *    } );\n\t */\n\tthis.fnClose = function( nTr )\n\t{\n\t\tthis.api( true ).row( nTr ).child.hide();\n\t};\n\t\n\t\n\t/**\n\t * Remove a row for the table\n\t *  @param {mixed} target The index of the row from aoData to be deleted, or\n\t *    the TR element you want to delete\n\t *  @param {function|null} [callBack] Callback function\n\t *  @param {bool} [redraw=true] Redraw the table or not\n\t *  @returns {array} The row that was deleted\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Immediately remove the first row\n\t *      oTable.fnDeleteRow( 0 );\n\t *    } );\n\t */\n\tthis.fnDeleteRow = function( target, callback, redraw )\n\t{\n\t\tvar api = this.api( true );\n\t\tvar rows = api.rows( target );\n\t\tvar settings = rows.settings()[0];\n\t\tvar data = settings.aoData[ rows[0][0] ];\n\t\n\t\trows.remove();\n\t\n\t\tif ( callback ) {\n\t\t\tcallback.call( this, settings, data );\n\t\t}\n\t\n\t\tif ( redraw === undefined || redraw ) {\n\t\t\tapi.draw();\n\t\t}\n\t\n\t\treturn data;\n\t};\n\t\n\t\n\t/**\n\t * Restore the table to it's original state in the DOM by removing all of DataTables\n\t * enhancements, alterations to the DOM structure of the table and event listeners.\n\t *  @param {boolean} [remove=false] Completely remove the table from the DOM\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      // This example is fairly pointless in reality, but shows how fnDestroy can be used\n\t *      var oTable = $('#example').dataTable();\n\t *      oTable.fnDestroy();\n\t *    } );\n\t */\n\tthis.fnDestroy = function ( remove )\n\t{\n\t\tthis.api( true ).destroy( remove );\n\t};\n\t\n\t\n\t/**\n\t * Redraw the table\n\t *  @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)\n\t *      oTable.fnDraw();\n\t *    } );\n\t */\n\tthis.fnDraw = function( complete )\n\t{\n\t\t// Note that this isn't an exact match to the old call to _fnDraw - it takes\n\t\t// into account the new data, but can hold position.\n\t\tthis.api( true ).draw( complete );\n\t};\n\t\n\t\n\t/**\n\t * Filter the input based on data\n\t *  @param {string} sInput String to filter the table on\n\t *  @param {int|null} [iColumn] Column to limit filtering to\n\t *  @param {bool} [bRegex=false] Treat as regular expression or not\n\t *  @param {bool} [bSmart=true] Perform smart filtering or not\n\t *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)\n\t *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Sometime later - filter...\n\t *      oTable.fnFilter( 'test string' );\n\t *    } );\n\t */\n\tthis.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\tif ( iColumn === null || iColumn === undefined ) {\n\t\t\tapi.search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t}\n\t\telse {\n\t\t\tapi.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t}\n\t\n\t\tapi.draw();\n\t};\n\t\n\t\n\t/**\n\t * Get the data for the whole table, an individual row or an individual cell based on the\n\t * provided parameters.\n\t *  @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as\n\t *    a TR node then the data source for the whole row will be returned. If given as a\n\t *    TD/TH cell node then iCol will be automatically calculated and the data for the\n\t *    cell returned. If given as an integer, then this is treated as the aoData internal\n\t *    data index for the row (see fnGetPosition) and the data for that row used.\n\t *  @param {int} [col] Optional column index that you want the data of.\n\t *  @returns {array|object|string} If mRow is undefined, then the data for all rows is\n\t *    returned. If mRow is defined, just data for that row, and is iCol is\n\t *    defined, only data for the designated cell is returned.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    // Row data\n\t *    $(document).ready(function() {\n\t *      oTable = $('#example').dataTable();\n\t *\n\t *      oTable.$('tr').click( function () {\n\t *        var data = oTable.fnGetData( this );\n\t *        // ... do something with the array / object of data for the row\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Individual cell data\n\t *    $(document).ready(function() {\n\t *      oTable = $('#example').dataTable();\n\t *\n\t *      oTable.$('td').click( function () {\n\t *        var sData = oTable.fnGetData( this );\n\t *        alert( 'The cell clicked on had the value of '+sData );\n\t *      } );\n\t *    } );\n\t */\n\tthis.fnGetData = function( src, col )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\tif ( src !== undefined ) {\n\t\t\tvar type = src.nodeName ? src.nodeName.toLowerCase() : '';\n\t\n\t\t\treturn col !== undefined || type == 'td' || type == 'th' ?\n\t\t\t\tapi.cell( src, col ).data() :\n\t\t\t\tapi.row( src ).data() || null;\n\t\t}\n\t\n\t\treturn api.data().toArray();\n\t};\n\t\n\t\n\t/**\n\t * Get an array of the TR nodes that are used in the table's body. Note that you will\n\t * typically want to use the '$' API method in preference to this as it is more\n\t * flexible.\n\t *  @param {int} [iRow] Optional row index for the TR element you want\n\t *  @returns {array|node} If iRow is undefined, returns an array of all TR elements\n\t *    in the table's body, or iRow is defined, just the TR element requested.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Get the nodes from the table\n\t *      var nNodes = oTable.fnGetNodes( );\n\t *    } );\n\t */\n\tthis.fnGetNodes = function( iRow )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\treturn iRow !== undefined ?\n\t\t\tapi.row( iRow ).node() :\n\t\t\tapi.rows().nodes().flatten().toArray();\n\t};\n\t\n\t\n\t/**\n\t * Get the array indexes of a particular cell from it's DOM element\n\t * and column index including hidden columns\n\t *  @param {node} node this can either be a TR, TD or TH in the table's body\n\t *  @returns {int} If nNode is given as a TR, then a single index is returned, or\n\t *    if given as a cell, an array of [row index, column index (visible),\n\t *    column index (all)] is given.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      $('#example tbody td').click( function () {\n\t *        // Get the position of the current data from the node\n\t *        var aPos = oTable.fnGetPosition( this );\n\t *\n\t *        // Get the data array for this row\n\t *        var aData = oTable.fnGetData( aPos[0] );\n\t *\n\t *        // Update the data array and return the value\n\t *        aData[ aPos[1] ] = 'clicked';\n\t *        this.innerHTML = 'clicked';\n\t *      } );\n\t *\n\t *      // Init DataTables\n\t *      oTable = $('#example').dataTable();\n\t *    } );\n\t */\n\tthis.fnGetPosition = function( node )\n\t{\n\t\tvar api = this.api( true );\n\t\tvar nodeName = node.nodeName.toUpperCase();\n\t\n\t\tif ( nodeName == 'TR' ) {\n\t\t\treturn api.row( node ).index();\n\t\t}\n\t\telse if ( nodeName == 'TD' || nodeName == 'TH' ) {\n\t\t\tvar cell = api.cell( node ).index();\n\t\n\t\t\treturn [\n\t\t\t\tcell.row,\n\t\t\t\tcell.columnVisible,\n\t\t\t\tcell.column\n\t\t\t];\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t\n\t/**\n\t * Check to see if a row is 'open' or not.\n\t *  @param {node} nTr the table row to check\n\t *  @returns {boolean} true if the row is currently open, false otherwise\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable;\n\t *\n\t *      // 'open' an information row when a row is clicked on\n\t *      $('#example tbody tr').click( function () {\n\t *        if ( oTable.fnIsOpen(this) ) {\n\t *          oTable.fnClose( this );\n\t *        } else {\n\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t *        }\n\t *      } );\n\t *\n\t *      oTable = $('#example').dataTable();\n\t *    } );\n\t */\n\tthis.fnIsOpen = function( nTr )\n\t{\n\t\treturn this.api( true ).row( nTr ).child.isShown();\n\t};\n\t\n\t\n\t/**\n\t * This function will place a new row directly after a row which is currently\n\t * on display on the page, with the HTML contents that is passed into the\n\t * function. This can be used, for example, to ask for confirmation that a\n\t * particular record should be deleted.\n\t *  @param {node} nTr The table row to 'open'\n\t *  @param {string|node|jQuery} mHtml The HTML to put into the row\n\t *  @param {string} sClass Class to give the new TD cell\n\t *  @returns {node} The row opened. Note that if the table row passed in as the\n\t *    first parameter, is not found in the table, this method will silently\n\t *    return.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable;\n\t *\n\t *      // 'open' an information row when a row is clicked on\n\t *      $('#example tbody tr').click( function () {\n\t *        if ( oTable.fnIsOpen(this) ) {\n\t *          oTable.fnClose( this );\n\t *        } else {\n\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t *        }\n\t *      } );\n\t *\n\t *      oTable = $('#example').dataTable();\n\t *    } );\n\t */\n\tthis.fnOpen = function( nTr, mHtml, sClass )\n\t{\n\t\treturn this.api( true )\n\t\t\t.row( nTr )\n\t\t\t.child( mHtml, sClass )\n\t\t\t.show()\n\t\t\t.child()[0];\n\t};\n\t\n\t\n\t/**\n\t * Change the pagination - provides the internal logic for pagination in a simple API\n\t * function. With this function you can have a DataTables table go to the next,\n\t * previous, first or last pages.\n\t *  @param {string|int} mAction Paging action to take: \"first\", \"previous\", \"next\" or \"last\"\n\t *    or page number to jump to (integer), note that page 0 is the first page.\n\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *      oTable.fnPageChange( 'next' );\n\t *    } );\n\t */\n\tthis.fnPageChange = function ( mAction, bRedraw )\n\t{\n\t\tvar api = this.api( true ).page( mAction );\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.draw(false);\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Show a particular column\n\t *  @param {int} iCol The column whose display should be changed\n\t *  @param {bool} bShow Show (true) or hide (false) the column\n\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Hide the second column after initialisation\n\t *      oTable.fnSetColumnVis( 1, false );\n\t *    } );\n\t */\n\tthis.fnSetColumnVis = function ( iCol, bShow, bRedraw )\n\t{\n\t\tvar api = this.api( true ).column( iCol ).visible( bShow );\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.columns.adjust().draw();\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Get the settings for a particular table for external manipulation\n\t *  @returns {object} DataTables settings object. See\n\t *    {@link DataTable.models.oSettings}\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *      var oSettings = oTable.fnSettings();\n\t *\n\t *      // Show an example parameter from the settings\n\t *      alert( oSettings._iDisplayStart );\n\t *    } );\n\t */\n\tthis.fnSettings = function()\n\t{\n\t\treturn _fnSettingsFromNode( this[_ext.iApiIndex] );\n\t};\n\t\n\t\n\t/**\n\t * Sort the table by a particular column\n\t *  @param {int} iCol the data index to sort on. Note that this will not match the\n\t *    'display index' if you have hidden data entries\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Sort immediately with columns 0 and 1\n\t *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );\n\t *    } );\n\t */\n\tthis.fnSort = function( aaSort )\n\t{\n\t\tthis.api( true ).order( aaSort ).draw();\n\t};\n\t\n\t\n\t/**\n\t * Attach a sort listener to an element for a given column\n\t *  @param {node} nNode the element to attach the sort listener to\n\t *  @param {int} iColumn the column that a click on this node will sort on\n\t *  @param {function} [fnCallback] callback function when sort is run\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Sort on column 1, when 'sorter' is clicked on\n\t *      oTable.fnSortListener( document.getElementById('sorter'), 1 );\n\t *    } );\n\t */\n\tthis.fnSortListener = function( nNode, iColumn, fnCallback )\n\t{\n\t\tthis.api( true ).order.listener( nNode, iColumn, fnCallback );\n\t};\n\t\n\t\n\t/**\n\t * Update a table cell or row - this method will accept either a single value to\n\t * update the cell with, an array of values with one element for each column or\n\t * an object in the same format as the original data source. The function is\n\t * self-referencing in order to make the multi column updates easier.\n\t *  @param {object|array|string} mData Data to update the cell/row with\n\t *  @param {node|int} mRow TR element you want to update or the aoData index\n\t *  @param {int} [iColumn] The column to update, give as null or undefined to\n\t *    update a whole row.\n\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t *  @param {bool} [bAction=true] Perform pre-draw actions or not\n\t *  @returns {int} 0 on success, 1 on error\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell\n\t *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row\n\t *    } );\n\t */\n\tthis.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\tif ( iColumn === undefined || iColumn === null ) {\n\t\t\tapi.row( mRow ).data( mData );\n\t\t}\n\t\telse {\n\t\t\tapi.cell( mRow, iColumn ).data( mData );\n\t\t}\n\t\n\t\tif ( bAction === undefined || bAction ) {\n\t\t\tapi.columns.adjust();\n\t\t}\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.draw();\n\t\t}\n\t\treturn 0;\n\t};\n\t\n\t\n\t/**\n\t * Provide a common method for plug-ins to check the version of DataTables being used, in order\n\t * to ensure compatibility.\n\t *  @param {string} sVersion Version string to check for, in the format \"X.Y.Z\". Note that the\n\t *    formats \"X\" and \"X.Y\" are also acceptable.\n\t *  @returns {boolean} true if this version of DataTables is greater or equal to the required\n\t *    version, or false if this version of DataTales is not suitable\n\t *  @method\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *      alert( oTable.fnVersionCheck( '1.9.0' ) );\n\t *    } );\n\t */\n\tthis.fnVersionCheck = _ext.fnVersionCheck;\n\t\n\n\tvar _that = this;\n\tvar emptyInit = options === undefined;\n\tvar len = this.length;\n\n\tif ( emptyInit ) {\n\t\toptions = {};\n\t}\n\n\tthis.oApi = this.internal = _ext.internal;\n\n\t// Extend with old style plug-in API methods\n\tfor ( var fn in DataTable.ext.internal ) {\n\t\tif ( fn ) {\n\t\t\tthis[fn] = _fnExternApiFunc(fn);\n\t\t}\n\t}\n\n\tthis.each(function() {\n\t\t// For each initialisation we want to give it a clean initialisation\n\t\t// object that can be bashed around\n\t\tvar o = {};\n\t\tvar oInit = len > 1 ? // optimisation for single table case\n\t\t\t_fnExtend( o, options, true ) :\n\t\t\toptions;\n\n\t\t/*global oInit,_that,emptyInit*/\n\t\tvar i=0, iLen, j, jLen, k, kLen;\n\t\tvar sId = this.getAttribute( 'id' );\n\t\tvar bInitHandedOff = false;\n\t\tvar defaults = DataTable.defaults;\n\t\tvar $this = $(this);\n\t\t\n\t\t\n\t\t/* Sanity check */\n\t\tif ( this.nodeName.toLowerCase() != 'table' )\n\t\t{\n\t\t\t_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t/* Backwards compatibility for the defaults */\n\t\t_fnCompatOpts( defaults );\n\t\t_fnCompatCols( defaults.column );\n\t\t\n\t\t/* Convert the camel-case defaults to Hungarian */\n\t\t_fnCamelToHungarian( defaults, defaults, true );\n\t\t_fnCamelToHungarian( defaults.column, defaults.column, true );\n\t\t\n\t\t/* Setting up the initialisation object */\n\t\t_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ), true );\n\t\t\n\t\t\n\t\t\n\t\t/* Check to see if we are re-initialising a table */\n\t\tvar allSettings = DataTable.settings;\n\t\tfor ( i=0, iLen=allSettings.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar s = allSettings[i];\n\t\t\n\t\t\t/* Base check on table node */\n\t\t\tif (\n\t\t\t\ts.nTable == this ||\n\t\t\t\t(s.nTHead && s.nTHead.parentNode == this) ||\n\t\t\t\t(s.nTFoot && s.nTFoot.parentNode == this)\n\t\t\t) {\n\t\t\t\tvar bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;\n\t\t\t\tvar bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;\n\t\t\n\t\t\t\tif ( emptyInit || bRetrieve )\n\t\t\t\t{\n\t\t\t\t\treturn s.oInstance;\n\t\t\t\t}\n\t\t\t\telse if ( bDestroy )\n\t\t\t\t{\n\t\t\t\t\ts.oInstance.fnDestroy();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\t/* If the element we are initialising has the same ID as a table which was previously\n\t\t\t * initialised, but the table nodes don't match (from before) then we destroy the old\n\t\t\t * instance by simply deleting it. This is under the assumption that the table has been\n\t\t\t * destroyed by other methods. Anyone using non-id selectors will need to do this manually\n\t\t\t */\n\t\t\tif ( s.sTableId == this.id )\n\t\t\t{\n\t\t\t\tallSettings.splice( i, 1 );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\t/* Ensure the table has an ID - required for accessibility */\n\t\tif ( sId === null || sId === \"\" )\n\t\t{\n\t\t\tsId = \"DataTables_Table_\"+(DataTable.ext._unique++);\n\t\t\tthis.id = sId;\n\t\t}\n\t\t\n\t\t/* Create the settings object for this table and set some of the default parameters */\n\t\tvar oSettings = $.extend( true, {}, DataTable.models.oSettings, {\n\t\t\t\"sDestroyWidth\": $this[0].style.width,\n\t\t\t\"sInstance\":     sId,\n\t\t\t\"sTableId\":      sId\n\t\t} );\n\t\toSettings.nTable = this;\n\t\toSettings.oApi   = _that.internal;\n\t\toSettings.oInit  = oInit;\n\t\t\n\t\tallSettings.push( oSettings );\n\t\t\n\t\t// Need to add the instance after the instance after the settings object has been added\n\t\t// to the settings array, so we can self reference the table instance if more than one\n\t\toSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();\n\t\t\n\t\t// Backwards compatibility, before we apply all the defaults\n\t\t_fnCompatOpts( oInit );\n\t\t_fnLanguageCompat( oInit.oLanguage );\n\t\t\n\t\t// If the length menu is given, but the init display length is not, use the length menu\n\t\tif ( oInit.aLengthMenu && ! oInit.iDisplayLength )\n\t\t{\n\t\t\toInit.iDisplayLength = Array.isArray( oInit.aLengthMenu[0] ) ?\n\t\t\t\toInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];\n\t\t}\n\t\t\n\t\t// Apply the defaults and init options to make a single init object will all\n\t\t// options defined from defaults and instance options.\n\t\toInit = _fnExtend( $.extend( true, {}, defaults ), oInit );\n\t\t\n\t\t\n\t\t// Map the initialisation options onto the settings object\n\t\t_fnMap( oSettings.oFeatures, oInit, [\n\t\t\t\"bPaginate\",\n\t\t\t\"bLengthChange\",\n\t\t\t\"bFilter\",\n\t\t\t\"bSort\",\n\t\t\t\"bSortMulti\",\n\t\t\t\"bInfo\",\n\t\t\t\"bProcessing\",\n\t\t\t\"bAutoWidth\",\n\t\t\t\"bSortClasses\",\n\t\t\t\"bServerSide\",\n\t\t\t\"bDeferRender\"\n\t\t] );\n\t\t_fnMap( oSettings, oInit, [\n\t\t\t\"asStripeClasses\",\n\t\t\t\"ajax\",\n\t\t\t\"fnServerData\",\n\t\t\t\"fnFormatNumber\",\n\t\t\t\"sServerMethod\",\n\t\t\t\"aaSorting\",\n\t\t\t\"aaSortingFixed\",\n\t\t\t\"aLengthMenu\",\n\t\t\t\"sPaginationType\",\n\t\t\t\"sAjaxSource\",\n\t\t\t\"sAjaxDataProp\",\n\t\t\t\"iStateDuration\",\n\t\t\t\"sDom\",\n\t\t\t\"bSortCellsTop\",\n\t\t\t\"iTabIndex\",\n\t\t\t\"fnStateLoadCallback\",\n\t\t\t\"fnStateSaveCallback\",\n\t\t\t\"renderer\",\n\t\t\t\"searchDelay\",\n\t\t\t\"rowId\",\n\t\t\t[ \"iCookieDuration\", \"iStateDuration\" ], // backwards compat\n\t\t\t[ \"oSearch\", \"oPreviousSearch\" ],\n\t\t\t[ \"aoSearchCols\", \"aoPreSearchCols\" ],\n\t\t\t[ \"iDisplayLength\", \"_iDisplayLength\" ]\n\t\t] );\n\t\t_fnMap( oSettings.oScroll, oInit, [\n\t\t\t[ \"sScrollX\", \"sX\" ],\n\t\t\t[ \"sScrollXInner\", \"sXInner\" ],\n\t\t\t[ \"sScrollY\", \"sY\" ],\n\t\t\t[ \"bScrollCollapse\", \"bCollapse\" ]\n\t\t] );\n\t\t_fnMap( oSettings.oLanguage, oInit, \"fnInfoCallback\" );\n\t\t\n\t\t/* Callback functions which are array driven */\n\t\t_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );\n\t\t_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );\n\t\t_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );\n\t\t_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );\n\t\t_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );\n\t\t_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );\n\t\t_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );\n\t\t_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );\n\t\t_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );\n\t\t_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );\n\t\t_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );\n\t\t\n\t\toSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );\n\t\t\n\t\t/* Browser support detection */\n\t\t_fnBrowserDetect( oSettings );\n\t\t\n\t\tvar oClasses = oSettings.oClasses;\n\t\t\n\t\t$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );\n\t\t$this.addClass( oClasses.sTable );\n\t\t\n\t\t\n\t\tif ( oSettings.iInitDisplayStart === undefined )\n\t\t{\n\t\t\t/* Display start point, taking into account the save saving */\n\t\t\toSettings.iInitDisplayStart = oInit.iDisplayStart;\n\t\t\toSettings._iDisplayStart = oInit.iDisplayStart;\n\t\t}\n\t\t\n\t\tif ( oInit.iDeferLoading !== null )\n\t\t{\n\t\t\toSettings.bDeferLoading = true;\n\t\t\tvar tmp = Array.isArray( oInit.iDeferLoading );\n\t\t\toSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;\n\t\t\toSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;\n\t\t}\n\t\t\n\t\t/* Language definitions */\n\t\tvar oLanguage = oSettings.oLanguage;\n\t\t$.extend( true, oLanguage, oInit.oLanguage );\n\t\t\n\t\tif ( oLanguage.sUrl )\n\t\t{\n\t\t\t/* Get the language definitions from a file - because this Ajax call makes the language\n\t\t\t * get async to the remainder of this function we use bInitHandedOff to indicate that\n\t\t\t * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor\n\t\t\t */\n\t\t\t$.ajax( {\n\t\t\t\tdataType: 'json',\n\t\t\t\turl: oLanguage.sUrl,\n\t\t\t\tsuccess: function ( json ) {\n\t\t\t\t\t_fnCamelToHungarian( defaults.oLanguage, json );\n\t\t\t\t\t_fnLanguageCompat( json );\n\t\t\t\t\t$.extend( true, oLanguage, json, oSettings.oInit.oLanguage );\n\t\t\n\t\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t},\n\t\t\t\terror: function () {\n\t\t\t\t\t// Error occurred loading language file, continue on as best we can\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tbInitHandedOff = true;\n\t\t}\n\t\telse {\n\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t}\n\t\t\n\t\t/*\n\t\t * Stripes\n\t\t */\n\t\tif ( oInit.asStripeClasses === null )\n\t\t{\n\t\t\toSettings.asStripeClasses =[\n\t\t\t\toClasses.sStripeOdd,\n\t\t\t\toClasses.sStripeEven\n\t\t\t];\n\t\t}\n\t\t\n\t\t/* Remove row stripe classes if they are already on the table row */\n\t\tvar stripeClasses = oSettings.asStripeClasses;\n\t\tvar rowOne = $this.children('tbody').find('tr').eq(0);\n\t\tif ( $.inArray( true, $.map( stripeClasses, function(el, i) {\n\t\t\treturn rowOne.hasClass(el);\n\t\t} ) ) !== -1 ) {\n\t\t\t$('tbody tr', this).removeClass( stripeClasses.join(' ') );\n\t\t\toSettings.asDestroyStripes = stripeClasses.slice();\n\t\t}\n\t\t\n\t\t/*\n\t\t * Columns\n\t\t * See if we should load columns automatically or use defined ones\n\t\t */\n\t\tvar anThs = [];\n\t\tvar aoColumnsInit;\n\t\tvar nThead = this.getElementsByTagName('thead');\n\t\tif ( nThead.length !== 0 )\n\t\t{\n\t\t\t_fnDetectHeader( oSettings.aoHeader, nThead[0] );\n\t\t\tanThs = _fnGetUniqueThs( oSettings );\n\t\t}\n\t\t\n\t\t/* If not given a column array, generate one with nulls */\n\t\tif ( oInit.aoColumns === null )\n\t\t{\n\t\t\taoColumnsInit = [];\n\t\t\tfor ( i=0, iLen=anThs.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\taoColumnsInit.push( null );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\taoColumnsInit = oInit.aoColumns;\n\t\t}\n\t\t\n\t\t/* Add the columns */\n\t\tfor ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )\n\t\t{\n\t\t\t_fnAddColumn( oSettings, anThs ? anThs[i] : null );\n\t\t}\n\t\t\n\t\t/* Apply the column definitions */\n\t\t_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {\n\t\t\t_fnColumnOptions( oSettings, iCol, oDef );\n\t\t} );\n\t\t\n\t\t/* HTML5 attribute detection - build an mData object automatically if the\n\t\t * attributes are found\n\t\t */\n\t\tif ( rowOne.length ) {\n\t\t\tvar a = function ( cell, name ) {\n\t\t\t\treturn cell.getAttribute( 'data-'+name ) !== null ? name : null;\n\t\t\t};\n\t\t\n\t\t\t$( rowOne[0] ).children('th, td').each( function (i, cell) {\n\t\t\t\tvar col = oSettings.aoColumns[i];\n\t\t\n\t\t\t\tif (! col) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t}\n\t\t\n\t\t\t\tif ( col.mData === i ) {\n\t\t\t\t\tvar sort = a( cell, 'sort' ) || a( cell, 'order' );\n\t\t\t\t\tvar filter = a( cell, 'filter' ) || a( cell, 'search' );\n\t\t\n\t\t\t\t\tif ( sort !== null || filter !== null ) {\n\t\t\t\t\t\tcol.mData = {\n\t\t\t\t\t\t\t_:      i+'.display',\n\t\t\t\t\t\t\tsort:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\ttype:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\tfilter: filter !== null ? i+'.@data-'+filter : undefined\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcol._isArrayHost = true;\n\t\t\n\t\t\t\t\t\t_fnColumnOptions( oSettings, i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\t\n\t\tvar features = oSettings.oFeatures;\n\t\tvar loadedInit = function () {\n\t\t\t/*\n\t\t\t * Sorting\n\t\t\t * @todo For modularisation (1.11) this needs to do into a sort start up handler\n\t\t\t */\n\t\t\n\t\t\t// If aaSorting is not defined, then we use the first indicator in asSorting\n\t\t\t// in case that has been altered, so the default sort reflects that option\n\t\t\tif ( oInit.aaSorting === undefined ) {\n\t\t\t\tvar sorting = oSettings.aaSorting;\n\t\t\t\tfor ( i=0, iLen=sorting.length ; i<iLen ; i++ ) {\n\t\t\t\t\tsorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\t/* Do a first pass on the sorting classes (allows any size changes to be taken into\n\t\t\t * account, and also will apply sorting disabled classes if disabled\n\t\t\t */\n\t\t\t_fnSortingClasses( oSettings );\n\t\t\n\t\t\tif ( features.bSort ) {\n\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\tif ( oSettings.bSorted ) {\n\t\t\t\t\t\tvar aSort = _fnSortFlatten( oSettings );\n\t\t\t\t\t\tvar sortedColumns = {};\n\t\t\n\t\t\t\t\t\t$.each( aSort, function (i, val) {\n\t\t\t\t\t\t\tsortedColumns[ val.src ] = val.dir;\n\t\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );\n\t\t\t\t\t\t_fnSortAria( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\tif ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {\n\t\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\t}\n\t\t\t}, 'sc' );\n\t\t\n\t\t\n\t\t\t/*\n\t\t\t * Final init\n\t\t\t * Cache the header, body and footer as required, creating them if needed\n\t\t\t */\n\t\t\n\t\t\t// Work around for Webkit bug 83867 - store the caption-side before removing from doc\n\t\t\tvar captions = $this.children('caption').each( function () {\n\t\t\t\tthis._captionSide = $(this).css('caption-side');\n\t\t\t} );\n\t\t\n\t\t\tvar thead = $this.children('thead');\n\t\t\tif ( thead.length === 0 ) {\n\t\t\t\tthead = $('<thead/>').appendTo($this);\n\t\t\t}\n\t\t\toSettings.nTHead = thead[0];\n\t\t\n\t\t\tvar tbody = $this.children('tbody');\n\t\t\tif ( tbody.length === 0 ) {\n\t\t\t\ttbody = $('<tbody/>').insertAfter(thead);\n\t\t\t}\n\t\t\toSettings.nTBody = tbody[0];\n\t\t\n\t\t\tvar tfoot = $this.children('tfoot');\n\t\t\tif ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\") ) {\n\t\t\t\t// If we are a scrolling table, and no footer has been given, then we need to create\n\t\t\t\t// a tfoot element for the caption element to be appended to\n\t\t\t\ttfoot = $('<tfoot/>').appendTo($this);\n\t\t\t}\n\t\t\n\t\t\tif ( tfoot.length === 0 || tfoot.children().length === 0 ) {\n\t\t\t\t$this.addClass( oClasses.sNoFooter );\n\t\t\t}\n\t\t\telse if ( tfoot.length > 0 ) {\n\t\t\t\toSettings.nTFoot = tfoot[0];\n\t\t\t\t_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );\n\t\t\t}\n\t\t\n\t\t\t/* Check if there is data passing into the constructor */\n\t\t\tif ( oInit.aaData ) {\n\t\t\t\tfor ( i=0 ; i<oInit.aaData.length ; i++ ) {\n\t\t\t\t\t_fnAddData( oSettings, oInit.aaData[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' ) {\n\t\t\t\t/* Grab the data from the page - only do this when deferred loading or no Ajax\n\t\t\t\t * source since there is no point in reading the DOM data if we are then going\n\t\t\t\t * to replace it with Ajax data\n\t\t\t\t */\n\t\t\t\t_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );\n\t\t\t}\n\t\t\n\t\t\t/* Copy the data index array */\n\t\t\toSettings.aiDisplay = oSettings.aiDisplayMaster.slice();\n\t\t\n\t\t\t/* Initialisation complete - table can be drawn */\n\t\t\toSettings.bInitialised = true;\n\t\t\n\t\t\t/* Check if we need to initialise the table (it might not have been handed off to the\n\t\t\t * language processor)\n\t\t\t */\n\t\t\tif ( bInitHandedOff === false ) {\n\t\t\t\t_fnInitialise( oSettings );\n\t\t\t}\n\t\t};\n\t\t\n\t\t/* Must be done after everything which can be overridden by the state saving! */\n\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );\n\t\t\n\t\tif ( oInit.bStateSave )\n\t\t{\n\t\t\tfeatures.bStateSave = true;\n\t\t\t_fnLoadState( oSettings, oInit, loadedInit );\n\t\t}\n\t\telse {\n\t\t\tloadedInit();\n\t\t}\n\t\t\n\t} );\n\t_that = null;\n\treturn this;\n};\n\n\n/*\n * It is useful to have variables which are scoped locally so only the\n * DataTables functions can access them and they don't leak into global space.\n * At the same time these functions are often useful over multiple files in the\n * core and API, so we list, or at least document, all variables which are used\n * by DataTables as private variables here. This also ensures that there is no\n * clashing of variable names and that they can easily referenced for reuse.\n */\n\n\n// Defined else where\n//  _selector_run\n//  _selector_opts\n//  _selector_first\n//  _selector_row_indexes\n\nvar _ext; // DataTable.ext\nvar _Api; // DataTable.Api\nvar _api_register; // DataTable.Api.register\nvar _api_registerPlural; // DataTable.Api.registerPlural\n\nvar _re_dic = {};\nvar _re_new_lines = /[\\r\\n\\u2028]/g;\nvar _re_html = /<.*?>/g;\n\n// This is not strict ISO8601 - Date.parse() is quite lax, although\n// implementations differ between browsers.\nvar _re_date = /^\\d{2,4}[\\.\\/\\-]\\d{1,2}[\\.\\/\\-]\\d{1,2}([T ]{1}\\d{1,2}[:\\.]\\d{2}([\\.:]\\d{2})?)?$/;\n\n// Escape regular expression special characters\nvar _re_escape_regex = new RegExp( '(\\\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ].join('|\\\\') + ')', 'g' );\n\n// https://en.wikipedia.org/wiki/Foreign_exchange_market\n// - \\u20BD - Russian ruble.\n// - \\u20a9 - South Korean Won\n// - \\u20BA - Turkish Lira\n// - \\u20B9 - Indian Rupee\n// - R - Brazil (R$) and South Africa\n// - fr - Swiss Franc\n// - kr - Swedish krona, Norwegian krone and Danish krone\n// - \\u2009 is thin space and \\u202F is narrow no-break space, both used in many\n// - \u0243 - Bitcoin\n// - \u039E - Ethereum\n//   standards as thousands separators.\nvar _re_formatted_numeric = /['\\u00A0,$\u00A3\u20AC\u00A5%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfk\u0243\u039E]/gi;\n\n\nvar _empty = function ( d ) {\n\treturn !d || d === true || d === '-' ? true : false;\n};\n\n\nvar _intVal = function ( s ) {\n\tvar integer = parseInt( s, 10 );\n\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n};\n\n// Convert from a formatted number with characters other than `.` as the\n// decimal place, to a Javascript number\nvar _numToDecimal = function ( num, decimalPoint ) {\n\t// Cache created regular expressions for speed as this function is called often\n\tif ( ! _re_dic[ decimalPoint ] ) {\n\t\t_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );\n\t}\n\treturn typeof num === 'string' && decimalPoint !== '.' ?\n\t\tnum.replace( /\\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :\n\t\tnum;\n};\n\n\nvar _isNumber = function ( d, decimalPoint, formatted ) {\n\tvar type = typeof d;\n\tvar strType = type === 'string';\n\n\tif ( type === 'number' || type === 'bigint') {\n\t\treturn true;\n\t}\n\n\t// If empty return immediately so there must be a number if it is a\n\t// formatted string (this stops the string \"k\", or \"kr\", etc being detected\n\t// as a formatted number for currency\n\tif ( _empty( d ) ) {\n\t\treturn true;\n\t}\n\n\tif ( decimalPoint && strType ) {\n\t\td = _numToDecimal( d, decimalPoint );\n\t}\n\n\tif ( formatted && strType ) {\n\t\td = d.replace( _re_formatted_numeric, '' );\n\t}\n\n\treturn !isNaN( parseFloat(d) ) && isFinite( d );\n};\n\n\n// A string without HTML in it can be considered to be HTML still\nvar _isHtml = function ( d ) {\n\treturn _empty( d ) || typeof d === 'string';\n};\n\n\nvar _htmlNumeric = function ( d, decimalPoint, formatted ) {\n\tif ( _empty( d ) ) {\n\t\treturn true;\n\t}\n\n\tvar html = _isHtml( d );\n\treturn ! html ?\n\t\tnull :\n\t\t_isNumber( _stripHtml( d ), decimalPoint, formatted ) ?\n\t\t\ttrue :\n\t\t\tnull;\n};\n\n\nvar _pluck = function ( a, prop, prop2 ) {\n\tvar out = [];\n\tvar i=0, ien=a.length;\n\n\t// Could have the test in the loop for slightly smaller code, but speed\n\t// is essential here\n\tif ( prop2 !== undefined ) {\n\t\tfor ( ; i<ien ; i++ ) {\n\t\t\tif ( a[i] && a[i][ prop ] ) {\n\t\t\t\tout.push( a[i][ prop ][ prop2 ] );\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tfor ( ; i<ien ; i++ ) {\n\t\t\tif ( a[i] ) {\n\t\t\t\tout.push( a[i][ prop ] );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n};\n\n\n// Basically the same as _pluck, but rather than looping over `a` we use `order`\n// as the indexes to pick from `a`\nvar _pluck_order = function ( a, order, prop, prop2 )\n{\n\tvar out = [];\n\tvar i=0, ien=order.length;\n\n\t// Could have the test in the loop for slightly smaller code, but speed\n\t// is essential here\n\tif ( prop2 !== undefined ) {\n\t\tfor ( ; i<ien ; i++ ) {\n\t\t\tif ( a[ order[i] ][ prop ] ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ][ prop2 ] );\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tfor ( ; i<ien ; i++ ) {\n\t\t\tout.push( a[ order[i] ][ prop ] );\n\t\t}\n\t}\n\n\treturn out;\n};\n\n\nvar _range = function ( len, start )\n{\n\tvar out = [];\n\tvar end;\n\n\tif ( start === undefined ) {\n\t\tstart = 0;\n\t\tend = len;\n\t}\n\telse {\n\t\tend = start;\n\t\tstart = len;\n\t}\n\n\tfor ( var i=start ; i<end ; i++ ) {\n\t\tout.push( i );\n\t}\n\n\treturn out;\n};\n\n\nvar _removeEmpty = function ( a )\n{\n\tvar out = [];\n\n\tfor ( var i=0, ien=a.length ; i<ien ; i++ ) {\n\t\tif ( a[i] ) { // careful - will remove all falsy values!\n\t\t\tout.push( a[i] );\n\t\t}\n\t}\n\n\treturn out;\n};\n\n\nvar _stripHtml = function ( d ) {\n\treturn d\n\t\t.replace( _re_html, '' ) // Complete tags\n\t\t.replace(/<script/i, ''); // Safety for incomplete script tag\n};\n\n\n/**\n * Determine if all values in the array are unique. This means we can short\n * cut the _unique method at the cost of a single loop. A sorted array is used\n * to easily check the values.\n *\n * @param  {array} src Source array\n * @return {boolean} true if all unique, false otherwise\n * @ignore\n */\nvar _areAllUnique = function ( src ) {\n\tif ( src.length < 2 ) {\n\t\treturn true;\n\t}\n\n\tvar sorted = src.slice().sort();\n\tvar last = sorted[0];\n\n\tfor ( var i=1, ien=sorted.length ; i<ien ; i++ ) {\n\t\tif ( sorted[i] === last ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlast = sorted[i];\n\t}\n\n\treturn true;\n};\n\n\n/**\n * Find the unique elements in a source array.\n *\n * @param  {array} src Source array\n * @return {array} Array of unique items\n * @ignore\n */\nvar _unique = function ( src )\n{\n\tif ( _areAllUnique( src ) ) {\n\t\treturn src.slice();\n\t}\n\n\t// A faster unique method is to use object keys to identify used values,\n\t// but this doesn't work with arrays or objects, which we must also\n\t// consider. See jsperf.com/compare-array-unique-versions/4 for more\n\t// information.\n\tvar\n\t\tout = [],\n\t\tval,\n\t\ti, ien=src.length,\n\t\tj, k=0;\n\n\tagain: for ( i=0 ; i<ien ; i++ ) {\n\t\tval = src[i];\n\n\t\tfor ( j=0 ; j<k ; j++ ) {\n\t\t\tif ( out[j] === val ) {\n\t\t\t\tcontinue again;\n\t\t\t}\n\t\t}\n\n\t\tout.push( val );\n\t\tk++;\n\t}\n\n\treturn out;\n};\n\n// Surprisingly this is faster than [].concat.apply\n// https://jsperf.com/flatten-an-array-loop-vs-reduce/2\nvar _flatten = function (out, val) {\n\tif (Array.isArray(val)) {\n\t\tfor (var i=0 ; i<val.length ; i++) {\n\t\t\t_flatten(out, val[i]);\n\t\t}\n\t}\n\telse {\n\t\tout.push(val);\n\t}\n  \n\treturn out;\n}\n\nvar _includes = function (search, start) {\n\tif (start === undefined) {\n\t\tstart = 0;\n\t}\n\n\treturn this.indexOf(search, start) !== -1;\t\n};\n\n// Array.isArray polyfill.\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (! Array.isArray) {\n    Array.isArray = function(arg) {\n        return Object.prototype.toString.call(arg) === '[object Array]';\n    };\n}\n\nif (! Array.prototype.includes) {\n\tArray.prototype.includes = _includes;\n}\n\n// .trim() polyfill\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim\nif (!String.prototype.trim) {\n  String.prototype.trim = function () {\n    return this.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n  };\n}\n\nif (! String.prototype.includes) {\n\tString.prototype.includes = _includes;\n}\n\n/**\n * DataTables utility methods\n * \n * This namespace provides helper methods that DataTables uses internally to\n * create a DataTable, but which are not exclusively used only for DataTables.\n * These methods can be used by extension authors to save the duplication of\n * code.\n *\n *  @namespace\n */\nDataTable.util = {\n\t/**\n\t * Throttle the calls to a function. Arguments and context are maintained\n\t * for the throttled function.\n\t *\n\t * @param {function} fn Function to be called\n\t * @param {integer} freq Call frequency in mS\n\t * @return {function} Wrapped function\n\t */\n\tthrottle: function ( fn, freq ) {\n\t\tvar\n\t\t\tfrequency = freq !== undefined ? freq : 200,\n\t\t\tlast,\n\t\t\ttimer;\n\n\t\treturn function () {\n\t\t\tvar\n\t\t\t\tthat = this,\n\t\t\t\tnow  = +new Date(),\n\t\t\t\targs = arguments;\n\n\t\t\tif ( last && now < last + frequency ) {\n\t\t\t\tclearTimeout( timer );\n\n\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\tlast = undefined;\n\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t}, frequency );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlast = now;\n\t\t\t\tfn.apply( that, args );\n\t\t\t}\n\t\t};\n\t},\n\n\n\t/**\n\t * Escape a string such that it can be used in a regular expression\n\t *\n\t *  @param {string} val string to escape\n\t *  @returns {string} escaped string\n\t */\n\tescapeRegex: function ( val ) {\n\t\treturn val.replace( _re_escape_regex, '\\\\$1' );\n\t},\n\n\t/**\n\t * Create a function that will write to a nested object or array\n\t * @param {*} source JSON notation string\n\t * @returns Write function\n\t */\n\tset: function ( source ) {\n\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t/* Unlike get, only the underscore (global) option is used for for\n\t\t\t * setting data since we don't know the type here. This is why an object\n\t\t\t * option is not documented for `mData` (which is read/write), but it is\n\t\t\t * for `mRender` which is read only.\n\t\t\t */\n\t\t\treturn DataTable.util.set( source._ );\n\t\t}\n\t\telse if ( source === null ) {\n\t\t\t// Nothing to do when the data source is null\n\t\t\treturn function () {};\n\t\t}\n\t\telse if ( typeof source === 'function' ) {\n\t\t\treturn function (data, val, meta) {\n\t\t\t\tsource( data, 'set', val, meta );\n\t\t\t};\n\t\t}\n\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t  source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t{\n\t\t\t// Like the get, we need to get data from a nested object\n\t\t\tvar setData = function (data, val, src) {\n\t\t\t\tvar a = _fnSplitObjNotation( src ), b;\n\t\t\t\tvar aLast = a[a.length-1];\n\t\t\t\tvar arrayNotation, funcNotation, o, innerSrc;\n\t\n\t\t\t\tfor ( var i=0, iLen=a.length-1 ; i<iLen ; i++ ) {\n\t\t\t\t\t// Protect against prototype pollution\n\t\t\t\t\tif (a[i] === '__proto__' || a[i] === 'constructor') {\n\t\t\t\t\t\tthrow new Error('Cannot set prototype values');\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Check if we are dealing with an array notation request\n\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\n\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\t\t\t\tdata[ a[i] ] = [];\n\t\n\t\t\t\t\t\t// Get the remainder of the nested object to set so we can recurse\n\t\t\t\t\t\tb = a.slice();\n\t\t\t\t\t\tb.splice( 0, i+1 );\n\t\t\t\t\t\tinnerSrc = b.join('.');\n\t\n\t\t\t\t\t\t// Traverse each entry in the array setting the properties requested\n\t\t\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t\t\tfor ( var j=0, jLen=val.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\to = {};\n\t\t\t\t\t\t\t\tsetData( o, val[j], innerSrc );\n\t\t\t\t\t\t\t\tdata[ a[i] ].push( o );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// We've been asked to save data to an array, but it\n\t\t\t\t\t\t\t// isn't array data to be saved. Best that can be done\n\t\t\t\t\t\t\t// is to just save the value.\n\t\t\t\t\t\t\tdata[ a[i] ] = val;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// The inner call to setData has already traversed through the remainder\n\t\t\t\t\t\t// of the source and has set the data, thus we can exit here\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t// Function call\n\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\tdata = data[ a[i] ]( val );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If the nested object doesn't currently exist - since we are\n\t\t\t\t\t// trying to set the value - create it\n\t\t\t\t\tif ( data[ a[i] ] === null || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\tdata[ a[i] ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t}\n\t\n\t\t\t\t// Last item in the input - i.e, the actual set\n\t\t\t\tif ( aLast.match(__reFn ) ) {\n\t\t\t\t\t// Function call\n\t\t\t\t\tdata = data[ aLast.replace(__reFn, '') ]( val );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// If array notation is used, we just want to strip it and use the property name\n\t\t\t\t\t// and assign the value. If it isn't used, then we get the result we want anyway\n\t\t\t\t\tdata[ aLast.replace(__reArray, '') ] = val;\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\treturn setData( data, val, source );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\t// Array or flat object mapping\n\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\tdata[source] = val;\n\t\t\t};\n\t\t}\n\t},\n\n\t/**\n\t * Create a function that will read nested objects from arrays, based on JSON notation\n\t * @param {*} source JSON notation string\n\t * @returns Value read\n\t */\n\tget: function ( source ) {\n\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t// Build an object of get functions, and wrap them in a single call\n\t\t\tvar o = {};\n\t\t\t$.each( source, function (key, val) {\n\t\t\t\tif ( val ) {\n\t\t\t\t\to[key] = DataTable.util.get( val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn function (data, type, row, meta) {\n\t\t\t\tvar t = o[type] || o._;\n\t\t\t\treturn t !== undefined ?\n\t\t\t\t\tt(data, type, row, meta) :\n\t\t\t\t\tdata;\n\t\t\t};\n\t\t}\n\t\telse if ( source === null ) {\n\t\t\t// Give an empty string for rendering / sorting etc\n\t\t\treturn function (data) { // type, row and meta also passed, but not used\n\t\t\t\treturn data;\n\t\t\t};\n\t\t}\n\t\telse if ( typeof source === 'function' ) {\n\t\t\treturn function (data, type, row, meta) {\n\t\t\t\treturn source( data, type, row, meta );\n\t\t\t};\n\t\t}\n\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t  source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t{\n\t\t\t/* If there is a . in the source string then the data source is in a\n\t\t\t * nested object so we loop over the data for each level to get the next\n\t\t\t * level down. On each loop we test for undefined, and if found immediately\n\t\t\t * return. This allows entire objects to be missing and sDefaultContent to\n\t\t\t * be used if defined, rather than throwing an error\n\t\t\t */\n\t\t\tvar fetchData = function (data, type, src) {\n\t\t\t\tvar arrayNotation, funcNotation, out, innerSrc;\n\t\n\t\t\t\tif ( src !== \"\" ) {\n\t\t\t\t\tvar a = _fnSplitObjNotation( src );\n\t\n\t\t\t\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\t// Check if we are dealing with special notation\n\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\n\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\t// Array notation\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\n\t\t\t\t\t\t\t// Condition allows simply [] to be passed in\n\t\t\t\t\t\t\tif ( a[i] !== \"\" ) {\n\t\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tout = [];\n\t\n\t\t\t\t\t\t\t// Get the remainder of the nested object to get\n\t\t\t\t\t\t\ta.splice( 0, i+1 );\n\t\t\t\t\t\t\tinnerSrc = a.join('.');\n\t\n\t\t\t\t\t\t\t// Traverse each entry in the array getting the properties requested\n\t\t\t\t\t\t\tif ( Array.isArray( data ) ) {\n\t\t\t\t\t\t\t\tfor ( var j=0, jLen=data.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\tout.push( fetchData( data[j], type, innerSrc ) );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// If a string is given in between the array notation indicators, that\n\t\t\t\t\t\t\t// is used to join the strings together, otherwise an array is returned\n\t\t\t\t\t\t\tvar join = arrayNotation[0].substring(1, arrayNotation[0].length-1);\n\t\t\t\t\t\t\tdata = (join===\"\") ? out : out.join(join);\n\t\n\t\t\t\t\t\t\t// The inner call to fetchData has already traversed through the remainder\n\t\t\t\t\t\t\t// of the source requested, so we exit from the loop\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\tdata = data[ a[i] ]();\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (data === null || data[ a[i] ] === null) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( data === undefined || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn data;\n\t\t\t};\n\t\n\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\treturn fetchData( data, type, source );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\t// Array or flat object mapping\n\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\treturn data[source];\n\t\t\t};\n\t\t}\n\t}\n};\n\n\n\n/**\n * Create a mapping object that allows camel case parameters to be looked up\n * for their Hungarian counterparts. The mapping is stored in a private\n * parameter called `_hungarianMap` which can be accessed on the source object.\n *  @param {object} o\n *  @memberof DataTable#oApi\n */\nfunction _fnHungarianMap ( o )\n{\n\tvar\n\t\thungarian = 'a aa ai ao as b fn i m o s ',\n\t\tmatch,\n\t\tnewKey,\n\t\tmap = {};\n\n\t$.each( o, function (key, val) {\n\t\tmatch = key.match(/^([^A-Z]+?)([A-Z])/);\n\n\t\tif ( match && hungarian.indexOf(match[1]+' ') !== -1 )\n\t\t{\n\t\t\tnewKey = key.replace( match[0], match[2].toLowerCase() );\n\t\t\tmap[ newKey ] = key;\n\n\t\t\tif ( match[1] === 'o' )\n\t\t\t{\n\t\t\t\t_fnHungarianMap( o[key] );\n\t\t\t}\n\t\t}\n\t} );\n\n\to._hungarianMap = map;\n}\n\n\n/**\n * Convert from camel case parameters to Hungarian, based on a Hungarian map\n * created by _fnHungarianMap.\n *  @param {object} src The model object which holds all parameters that can be\n *    mapped.\n *  @param {object} user The object to convert from camel case to Hungarian.\n *  @param {boolean} force When set to `true`, properties which already have a\n *    Hungarian value in the `user` object will be overwritten. Otherwise they\n *    won't be.\n *  @memberof DataTable#oApi\n */\nfunction _fnCamelToHungarian ( src, user, force )\n{\n\tif ( ! src._hungarianMap ) {\n\t\t_fnHungarianMap( src );\n\t}\n\n\tvar hungarianKey;\n\n\t$.each( user, function (key, val) {\n\t\thungarianKey = src._hungarianMap[ key ];\n\n\t\tif ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )\n\t\t{\n\t\t\t// For objects, we need to buzz down into the object to copy parameters\n\t\t\tif ( hungarianKey.charAt(0) === 'o' )\n\t\t\t{\n\t\t\t\t// Copy the camelCase options over to the hungarian\n\t\t\t\tif ( ! user[ hungarianKey ] ) {\n\t\t\t\t\tuser[ hungarianKey ] = {};\n\t\t\t\t}\n\t\t\t\t$.extend( true, user[hungarianKey], user[key] );\n\n\t\t\t\t_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tuser[hungarianKey] = user[ key ];\n\t\t\t}\n\t\t}\n\t} );\n}\n\n\n/**\n * Language compatibility - when certain options are given, and others aren't, we\n * need to duplicate the values over, in order to provide backwards compatibility\n * with older language files.\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnLanguageCompat( lang )\n{\n\t// Note the use of the Hungarian notation for the parameters in this method as\n\t// this is called after the mapping of camelCase to Hungarian\n\tvar defaults = DataTable.defaults.oLanguage;\n\n\t// Default mapping\n\tvar defaultDecimal = defaults.sDecimal;\n\tif ( defaultDecimal ) {\n\t\t_addNumericSort( defaultDecimal );\n\t}\n\n\tif ( lang ) {\n\t\tvar zeroRecords = lang.sZeroRecords;\n\n\t\t// Backwards compatibility - if there is no sEmptyTable given, then use the same as\n\t\t// sZeroRecords - assuming that is given.\n\t\tif ( ! lang.sEmptyTable && zeroRecords &&\n\t\t\tdefaults.sEmptyTable === \"No data available in table\" )\n\t\t{\n\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );\n\t\t}\n\n\t\t// Likewise with loading records\n\t\tif ( ! lang.sLoadingRecords && zeroRecords &&\n\t\t\tdefaults.sLoadingRecords === \"Loading...\" )\n\t\t{\n\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );\n\t\t}\n\n\t\t// Old parameter name of the thousands separator mapped onto the new\n\t\tif ( lang.sInfoThousands ) {\n\t\t\tlang.sThousands = lang.sInfoThousands;\n\t\t}\n\n\t\tvar decimal = lang.sDecimal;\n\t\tif ( decimal && defaultDecimal !== decimal ) {\n\t\t\t_addNumericSort( decimal );\n\t\t}\n\t}\n}\n\n\n/**\n * Map one parameter onto another\n *  @param {object} o Object to map\n *  @param {*} knew The new parameter name\n *  @param {*} old The old parameter name\n */\nvar _fnCompatMap = function ( o, knew, old ) {\n\tif ( o[ knew ] !== undefined ) {\n\t\to[ old ] = o[ knew ];\n\t}\n};\n\n\n/**\n * Provide backwards compatibility for the main DT options. Note that the new\n * options are mapped onto the old parameters, so this is an external interface\n * change only.\n *  @param {object} init Object to map\n */\nfunction _fnCompatOpts ( init )\n{\n\t_fnCompatMap( init, 'ordering',      'bSort' );\n\t_fnCompatMap( init, 'orderMulti',    'bSortMulti' );\n\t_fnCompatMap( init, 'orderClasses',  'bSortClasses' );\n\t_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );\n\t_fnCompatMap( init, 'order',         'aaSorting' );\n\t_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );\n\t_fnCompatMap( init, 'paging',        'bPaginate' );\n\t_fnCompatMap( init, 'pagingType',    'sPaginationType' );\n\t_fnCompatMap( init, 'pageLength',    'iDisplayLength' );\n\t_fnCompatMap( init, 'searching',     'bFilter' );\n\n\t// Boolean initialisation of x-scrolling\n\tif ( typeof init.sScrollX === 'boolean' ) {\n\t\tinit.sScrollX = init.sScrollX ? '100%' : '';\n\t}\n\tif ( typeof init.scrollX === 'boolean' ) {\n\t\tinit.scrollX = init.scrollX ? '100%' : '';\n\t}\n\n\t// Column search objects are in an array, so it needs to be converted\n\t// element by element\n\tvar searchCols = init.aoSearchCols;\n\n\tif ( searchCols ) {\n\t\tfor ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {\n\t\t\tif ( searchCols[i] ) {\n\t\t\t\t_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Provide backwards compatibility for column options. Note that the new options\n * are mapped onto the old parameters, so this is an external interface change\n * only.\n *  @param {object} init Object to map\n */\nfunction _fnCompatCols ( init )\n{\n\t_fnCompatMap( init, 'orderable',     'bSortable' );\n\t_fnCompatMap( init, 'orderData',     'aDataSort' );\n\t_fnCompatMap( init, 'orderSequence', 'asSorting' );\n\t_fnCompatMap( init, 'orderDataType', 'sortDataType' );\n\n\t// orderData can be given as an integer\n\tvar dataSort = init.aDataSort;\n\tif ( typeof dataSort === 'number' && ! Array.isArray( dataSort ) ) {\n\t\tinit.aDataSort = [ dataSort ];\n\t}\n}\n\n\n/**\n * Browser feature detection for capabilities, quirks\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnBrowserDetect( settings )\n{\n\t// We don't need to do this every time DataTables is constructed, the values\n\t// calculated are specific to the browser and OS configuration which we\n\t// don't expect to change between initialisations\n\tif ( ! DataTable.__browser ) {\n\t\tvar browser = {};\n\t\tDataTable.__browser = browser;\n\n\t\t// Scrolling feature / quirks detection\n\t\tvar n = $('<div/>')\n\t\t\t.css( {\n\t\t\t\tposition: 'fixed',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: $(window).scrollLeft()*-1, // allow for scrolling\n\t\t\t\theight: 1,\n\t\t\t\twidth: 1,\n\t\t\t\toverflow: 'hidden'\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.appendTo( 'body' );\n\n\t\tvar outer = n.children();\n\t\tvar inner = outer.children();\n\n\t\t// Numbers below, in order, are:\n\t\t// inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth\n\t\t//\n\t\t// IE6 XP:                           100 100 100  83\n\t\t// IE7 Vista:                        100 100 100  83\n\t\t// IE 8+ Windows:                     83  83 100  83\n\t\t// Evergreen Windows:                 83  83 100  83\n\t\t// Evergreen Mac with scrollbars:     85  85 100  85\n\t\t// Evergreen Mac without scrollbars: 100 100 100 100\n\n\t\t// Get scrollbar width\n\t\tbrowser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;\n\n\t\t// IE6/7 will oversize a width 100% element inside a scrolling element, to\n\t\t// include the width of the scrollbar, while other browsers ensure the inner\n\t\t// element is contained without forcing scrolling\n\t\tbrowser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;\n\n\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t// scrollbar on the left, rather than the right.\n\t\tbrowser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;\n\n\t\t// IE8- don't provide height and width for getBoundingClientRect\n\t\tbrowser.bBounding = n[0].getBoundingClientRect().width ? true : false;\n\n\t\tn.remove();\n\t}\n\n\t$.extend( settings.oBrowser, DataTable.__browser );\n\tsettings.oScroll.iBarWidth = DataTable.__browser.barWidth;\n}\n\n\n/**\n * Array.prototype reduce[Right] method, used for browsers which don't support\n * JS 1.6. Done this way to reduce code size, since we iterate either way\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnReduce ( that, fn, init, start, end, inc )\n{\n\tvar\n\t\ti = start,\n\t\tvalue,\n\t\tisSet = false;\n\n\tif ( init !== undefined ) {\n\t\tvalue = init;\n\t\tisSet = true;\n\t}\n\n\twhile ( i !== end ) {\n\t\tif ( ! that.hasOwnProperty(i) ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalue = isSet ?\n\t\t\tfn( value, that[i], i, that ) :\n\t\t\tthat[i];\n\n\t\tisSet = true;\n\t\ti += inc;\n\t}\n\n\treturn value;\n}\n\n/**\n * Add a column to the list used for the table with default values\n *  @param {object} oSettings dataTables settings object\n *  @param {node} nTh The th element for this column\n *  @memberof DataTable#oApi\n */\nfunction _fnAddColumn( oSettings, nTh )\n{\n\t// Add column to aoColumns array\n\tvar oDefaults = DataTable.defaults.column;\n\tvar iCol = oSettings.aoColumns.length;\n\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\"nTh\": nTh ? nTh : document.createElement('th'),\n\t\t\"sTitle\":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',\n\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol,\n\t\tidx: iCol\n\t} );\n\toSettings.aoColumns.push( oCol );\n\n\t// Add search object for column specific search. Note that the `searchCols[ iCol ]`\n\t// passed into extend can be undefined. This allows the user to give a default\n\t// with only some of the parameters defined, and also not give a default\n\tvar searchCols = oSettings.aoPreSearchCols;\n\tsearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );\n\n\t// Use the default column options function to initialise classes etc\n\t_fnColumnOptions( oSettings, iCol, $(nTh).data() );\n}\n\n\n/**\n * Apply options for a column\n *  @param {object} oSettings dataTables settings object\n *  @param {int} iCol column index to consider\n *  @param {object} oOptions object with sType, bVisible and bSearchable etc\n *  @memberof DataTable#oApi\n */\nfunction _fnColumnOptions( oSettings, iCol, oOptions )\n{\n\tvar oCol = oSettings.aoColumns[ iCol ];\n\tvar oClasses = oSettings.oClasses;\n\tvar th = $(oCol.nTh);\n\n\t// Try to get width information from the DOM. We can't get it from CSS\n\t// as we'd need to parse the CSS stylesheet. `width` option can override\n\tif ( ! oCol.sWidthOrig ) {\n\t\t// Width attribute\n\t\toCol.sWidthOrig = th.attr('width') || null;\n\n\t\t// Style attribute\n\t\tvar t = (th.attr('style') || '').match(/width:\\s*(\\d+[pxem%]+)/);\n\t\tif ( t ) {\n\t\t\toCol.sWidthOrig = t[1];\n\t\t}\n\t}\n\n\t/* User specified column options */\n\tif ( oOptions !== undefined && oOptions !== null )\n\t{\n\t\t// Backwards compatibility\n\t\t_fnCompatCols( oOptions );\n\n\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions, true );\n\n\t\t/* Backwards compatibility for mDataProp */\n\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t{\n\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t}\n\n\t\tif ( oOptions.sType )\n\t\t{\n\t\t\toCol._sManualType = oOptions.sType;\n\t\t}\n\n\t\t// `class` is a reserved word in Javascript, so we need to provide\n\t\t// the ability to use a valid name for the camel case input\n\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t{\n\t\t\toOptions.sClass = oOptions.className;\n\t\t}\n\t\tif ( oOptions.sClass ) {\n\t\t\tth.addClass( oOptions.sClass );\n\t\t}\n\n\t\tvar origClass = oCol.sClass;\n\n\t\t$.extend( oCol, oOptions );\n\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\n\t\t// Merge class from previously defined classes with this one, rather than just\n\t\t// overwriting it in the extend above\n\t\tif (origClass !== oCol.sClass) {\n\t\t\toCol.sClass = origClass + ' ' + oCol.sClass;\n\t\t}\n\n\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t * priority if defined\n\t\t */\n\t\tif ( oOptions.iDataSort !== undefined )\n\t\t{\n\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t}\n\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\n\t\t// Fall back to the aria-label attribute on the table header if no ariaTitle is\n\t\t// provided.\n\t\tif (! oCol.ariaTitle) {\n\t\t\toCol.ariaTitle = th.attr(\"aria-label\");\n\t\t}\n\t}\n\n\t/* Cache the data get and set functions for speed */\n\tvar mDataSrc = oCol.mData;\n\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\tvar mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\n\tvar attrTest = function( src ) {\n\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t};\n\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t);\n\toCol._setter = null;\n\n\toCol.fnGetData = function (rowData, type, meta) {\n\t\tvar innerData = mData( rowData, type, undefined, meta );\n\n\t\treturn mRender && type ?\n\t\t\tmRender( innerData, type, rowData, meta ) :\n\t\t\tinnerData;\n\t};\n\toCol.fnSetData = function ( rowData, val, meta ) {\n\t\treturn _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );\n\t};\n\n\t// Indicate if DataTables should read DOM data as an object or array\n\t// Used in _fnGetRowElements\n\tif ( typeof mDataSrc !== 'number' && ! oCol._isArrayHost ) {\n\t\toSettings._rowReadObject = true;\n\t}\n\n\t/* Feature sorting overrides column specific when off */\n\tif ( !oSettings.oFeatures.bSort )\n\t{\n\t\toCol.bSortable = false;\n\t\tth.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called\n\t}\n\n\t/* Check that the class assignment is correct for sorting */\n\tvar bAsc = $.inArray('asc', oCol.asSorting) !== -1;\n\tvar bDesc = $.inArray('desc', oCol.asSorting) !== -1;\n\tif ( !oCol.bSortable || (!bAsc && !bDesc) )\n\t{\n\t\toCol.sSortingClass = oClasses.sSortableNone;\n\t\toCol.sSortingClassJUI = \"\";\n\t}\n\telse if ( bAsc && !bDesc )\n\t{\n\t\toCol.sSortingClass = oClasses.sSortableAsc;\n\t\toCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;\n\t}\n\telse if ( !bAsc && bDesc )\n\t{\n\t\toCol.sSortingClass = oClasses.sSortableDesc;\n\t\toCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;\n\t}\n\telse\n\t{\n\t\toCol.sSortingClass = oClasses.sSortable;\n\t\toCol.sSortingClassJUI = oClasses.sSortJUI;\n\t}\n}\n\n\n/**\n * Adjust the table column widths for new data. Note: you would probably want to\n * do a redraw after calling this function!\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnAdjustColumnSizing ( settings )\n{\n\t/* Not interested in doing column width calculation if auto-width is disabled */\n\tif ( settings.oFeatures.bAutoWidth !== false )\n\t{\n\t\tvar columns = settings.aoColumns;\n\n\t\t_fnCalculateColumnWidths( settings );\n\t\tfor ( var i=0 , iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tcolumns[i].nTh.style.width = columns[i].sWidth;\n\t\t}\n\t}\n\n\tvar scroll = settings.oScroll;\n\tif ( scroll.sY !== '' || scroll.sX !== '')\n\t{\n\t\t_fnScrollDraw( settings );\n\t}\n\n\t_fnCallbackFire( settings, null, 'column-sizing', [settings] );\n}\n\n\n/**\n * Convert the index of a visible column to the index in the data array (take account\n * of hidden columns)\n *  @param {object} oSettings dataTables settings object\n *  @param {int} iMatch Visible column index to lookup\n *  @returns {int} i the data index\n *  @memberof DataTable#oApi\n */\nfunction _fnVisibleToColumnIndex( oSettings, iMatch )\n{\n\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\n\treturn typeof aiVis[iMatch] === 'number' ?\n\t\taiVis[iMatch] :\n\t\tnull;\n}\n\n\n/**\n * Convert the index of an index in the data array and convert it to the visible\n *   column index (take account of hidden columns)\n *  @param {int} iMatch Column index to lookup\n *  @param {object} oSettings dataTables settings object\n *  @returns {int} i the data index\n *  @memberof DataTable#oApi\n */\nfunction _fnColumnIndexToVisible( oSettings, iMatch )\n{\n\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\tvar iPos = $.inArray( iMatch, aiVis );\n\n\treturn iPos !== -1 ? iPos : null;\n}\n\n\n/**\n * Get the number of visible columns\n *  @param {object} oSettings dataTables settings object\n *  @returns {int} i the number of visible columns\n *  @memberof DataTable#oApi\n */\nfunction _fnVisbleColumns( oSettings )\n{\n\tvar vis = 0;\n\n\t// No reduce in IE8, use a loop for now\n\t$.each( oSettings.aoColumns, function ( i, col ) {\n\t\tif ( col.bVisible && $(col.nTh).css('display') !== 'none' ) {\n\t\t\tvis++;\n\t\t}\n\t} );\n\n\treturn vis;\n}\n\n\n/**\n * Get an array of column indexes that match a given property\n *  @param {object} oSettings dataTables settings object\n *  @param {string} sParam Parameter in aoColumns to look for - typically\n *    bVisible or bSearchable\n *  @returns {array} Array of indexes with matched properties\n *  @memberof DataTable#oApi\n */\nfunction _fnGetColumns( oSettings, sParam )\n{\n\tvar a = [];\n\n\t$.map( oSettings.aoColumns, function(val, i) {\n\t\tif ( val[sParam] ) {\n\t\t\ta.push( i );\n\t\t}\n\t} );\n\n\treturn a;\n}\n\n\n/**\n * Calculate the 'type' of a column\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnColumnTypes ( settings )\n{\n\tvar columns = settings.aoColumns;\n\tvar data = settings.aoData;\n\tvar types = DataTable.ext.type.detect;\n\tvar i, ien, j, jen, k, ken;\n\tvar col, cell, detectedType, cache;\n\n\t// For each column, spin over the \n\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\tcol = columns[i];\n\t\tcache = [];\n\n\t\tif ( ! col.sType && col._sManualType ) {\n\t\t\tcol.sType = col._sManualType;\n\t\t}\n\t\telse if ( ! col.sType ) {\n\t\t\tfor ( j=0, jen=types.length ; j<jen ; j++ ) {\n\t\t\t\tfor ( k=0, ken=data.length ; k<ken ; k++ ) {\n\t\t\t\t\t// Use a cache array so we only need to get the type data\n\t\t\t\t\t// from the formatter once (when using multiple detectors)\n\t\t\t\t\tif ( cache[k] === undefined ) {\n\t\t\t\t\t\tcache[k] = _fnGetCellData( settings, k, i, 'type' );\n\t\t\t\t\t}\n\n\t\t\t\t\tdetectedType = types[j]( cache[k], settings );\n\n\t\t\t\t\t// If null, then this type can't apply to this column, so\n\t\t\t\t\t// rather than testing all cells, break out. There is an\n\t\t\t\t\t// exception for the last type which is `html`. We need to\n\t\t\t\t\t// scan all rows since it is possible to mix string and HTML\n\t\t\t\t\t// types\n\t\t\t\t\tif ( ! detectedType && j !== types.length-1 ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only a single match is needed for html type since it is\n\t\t\t\t\t// bottom of the pile and very similar to string - but it\n\t\t\t\t\t// must not be empty\n\t\t\t\t\tif ( detectedType === 'html' && ! _empty(cache[k]) ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Type is valid for all data points in the column - use this\n\t\t\t\t// type\n\t\t\t\tif ( detectedType ) {\n\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fall back - if no type was detected, always use string\n\t\t\tif ( ! col.sType ) {\n\t\t\t\tcol.sType = 'string';\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Take the column definitions and static columns arrays and calculate how\n * they relate to column indexes. The callback function will then apply the\n * definition found for a column to a suitable configuration object.\n *  @param {object} oSettings dataTables settings object\n *  @param {array} aoColDefs The aoColumnDefs array that is to be applied\n *  @param {array} aoCols The aoColumns array that defines columns individually\n *  @param {function} fn Callback function - takes two parameters, the calculated\n *    column index and the definition for that column.\n *  @memberof DataTable#oApi\n */\nfunction _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )\n{\n\tvar i, iLen, j, jLen, k, kLen, def;\n\tvar columns = oSettings.aoColumns;\n\n\t// Column definitions with aTargets\n\tif ( aoColDefs )\n\t{\n\t\t/* Loop over the definitions array - loop in reverse so first instance has priority */\n\t\tfor ( i=aoColDefs.length-1 ; i>=0 ; i-- )\n\t\t{\n\t\t\tdef = aoColDefs[i];\n\n\t\t\t/* Each definition can target multiple columns, as it is an array */\n\t\t\tvar aTargets = def.target !== undefined\n\t\t\t\t? def.target\n\t\t\t\t: def.targets !== undefined\n\t\t\t\t\t? def.targets\n\t\t\t\t\t: def.aTargets;\n\n\t\t\tif ( ! Array.isArray( aTargets ) )\n\t\t\t{\n\t\t\t\taTargets = [ aTargets ];\n\t\t\t}\n\n\t\t\tfor ( j=0, jLen=aTargets.length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tif ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )\n\t\t\t\t{\n\t\t\t\t\t/* Add columns that we don't yet know about */\n\t\t\t\t\twhile( columns.length <= aTargets[j] )\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t\t\t}\n\n\t\t\t\t\t/* Integer, basic index */\n\t\t\t\t\tfn( aTargets[j], def );\n\t\t\t\t}\n\t\t\t\telse if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )\n\t\t\t\t{\n\t\t\t\t\t/* Negative integer, right to left column counting */\n\t\t\t\t\tfn( columns.length+aTargets[j], def );\n\t\t\t\t}\n\t\t\t\telse if ( typeof aTargets[j] === 'string' )\n\t\t\t\t{\n\t\t\t\t\t/* Class name matching on TH element */\n\t\t\t\t\tfor ( k=0, kLen=columns.length ; k<kLen ; k++ )\n\t\t\t\t\t{\n\t\t\t\t\t\tif ( aTargets[j] == \"_all\" ||\n\t\t\t\t\t\t     $(columns[k].nTh).hasClass( aTargets[j] ) )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfn( k, def );\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\t// Statically defined columns array\n\tif ( aoCols )\n\t{\n\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfn( i, aoCols[i] );\n\t\t}\n\t}\n}\n\n/**\n * Add a data array to the table, creating DOM node etc. This is the parallel to\n * _fnGatherData, but for adding rows from a Javascript source, rather than a\n * DOM source.\n *  @param {object} oSettings dataTables settings object\n *  @param {array} aData data array to be added\n *  @param {node} [nTr] TR element to add to the table - optional. If not given,\n *    DataTables will create a row automatically\n *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n *    if nTr is.\n *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed\n *  @memberof DataTable#oApi\n */\nfunction _fnAddData ( oSettings, aDataIn, nTr, anTds )\n{\n\t/* Create the object for storing information about this new row */\n\tvar iRow = oSettings.aoData.length;\n\tvar oData = $.extend( true, {}, DataTable.models.oRow, {\n\t\tsrc: nTr ? 'dom' : 'data',\n\t\tidx: iRow\n\t} );\n\n\toData._aData = aDataIn;\n\toSettings.aoData.push( oData );\n\n\t/* Create the cells */\n\tvar nTd, sThisType;\n\tvar columns = oSettings.aoColumns;\n\n\t// Invalidate the column types as the new data needs to be revalidated\n\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t{\n\t\tcolumns[i].sType = null;\n\t}\n\n\t/* Add to the display array */\n\toSettings.aiDisplayMaster.push( iRow );\n\n\tvar id = oSettings.rowIdFn( aDataIn );\n\tif ( id !== undefined ) {\n\t\toSettings.aIds[ id ] = oData;\n\t}\n\n\t/* Create the DOM information, or register it if already present */\n\tif ( nTr || ! oSettings.oFeatures.bDeferRender )\n\t{\n\t\t_fnCreateTr( oSettings, iRow, nTr, anTds );\n\t}\n\n\treturn iRow;\n}\n\n\n/**\n * Add one or more TR elements to the table. Generally we'd expect to\n * use this for reading data from a DOM sourced table, but it could be\n * used for an TR element. Note that if a TR is given, it is used (i.e.\n * it is not cloned).\n *  @param {object} settings dataTables settings object\n *  @param {array|node|jQuery} trs The TR element(s) to add to the table\n *  @returns {array} Array of indexes for the added rows\n *  @memberof DataTable#oApi\n */\nfunction _fnAddTr( settings, trs )\n{\n\tvar row;\n\n\t// Allow an individual node to be passed in\n\tif ( ! (trs instanceof $) ) {\n\t\ttrs = $(trs);\n\t}\n\n\treturn trs.map( function (i, el) {\n\t\trow = _fnGetRowElements( settings, el );\n\t\treturn _fnAddData( settings, row.data, el, row.cells );\n\t} );\n}\n\n\n/**\n * Take a TR element and convert it to an index in aoData\n *  @param {object} oSettings dataTables settings object\n *  @param {node} n the TR element to find\n *  @returns {int} index if the node is found, null if not\n *  @memberof DataTable#oApi\n */\nfunction _fnNodeToDataIndex( oSettings, n )\n{\n\treturn (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;\n}\n\n\n/**\n * Take a TD element and convert it into a column data index (not the visible index)\n *  @param {object} oSettings dataTables settings object\n *  @param {int} iRow The row number the TD/TH can be found in\n *  @param {node} n The TD/TH element to find\n *  @returns {int} index if the node is found, -1 if not\n *  @memberof DataTable#oApi\n */\nfunction _fnNodeToColumnIndex( oSettings, iRow, n )\n{\n\treturn $.inArray( n, oSettings.aoData[ iRow ].anCells );\n}\n\n\n/**\n * Get the data for a given cell from the internal cache, taking into account data mapping\n *  @param {object} settings dataTables settings object\n *  @param {int} rowIdx aoData row id\n *  @param {int} colIdx Column index\n *  @param {string} type data get type ('display', 'type' 'filter|search' 'sort|order')\n *  @returns {*} Cell data\n *  @memberof DataTable#oApi\n */\nfunction _fnGetCellData( settings, rowIdx, colIdx, type )\n{\n\tif (type === 'search') {\n\t\ttype = 'filter';\n\t}\n\telse if (type === 'order') {\n\t\ttype = 'sort';\n\t}\n\n\tvar draw           = settings.iDraw;\n\tvar col            = settings.aoColumns[colIdx];\n\tvar rowData        = settings.aoData[rowIdx]._aData;\n\tvar defaultContent = col.sDefaultContent;\n\tvar cellData       = col.fnGetData( rowData, type, {\n\t\tsettings: settings,\n\t\trow:      rowIdx,\n\t\tcol:      colIdx\n\t} );\n\n\tif ( cellData === undefined ) {\n\t\tif ( settings.iDrawError != draw && defaultContent === null ) {\n\t\t\t_fnLog( settings, 0, \"Requested unknown parameter \"+\n\t\t\t\t(typeof col.mData=='function' ? '{function}' : \"'\"+col.mData+\"'\")+\n\t\t\t\t\" for row \"+rowIdx+\", column \"+colIdx, 4 );\n\t\t\tsettings.iDrawError = draw;\n\t\t}\n\t\treturn defaultContent;\n\t}\n\n\t// When the data source is null and a specific data type is requested (i.e.\n\t// not the original data), we can use default column data\n\tif ( (cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined ) {\n\t\tcellData = defaultContent;\n\t}\n\telse if ( typeof cellData === 'function' ) {\n\t\t// If the data source is a function, then we run it and use the return,\n\t\t// executing in the scope of the data object (for instances)\n\t\treturn cellData.call( rowData );\n\t}\n\n\tif ( cellData === null && type === 'display' ) {\n\t\treturn '';\n\t}\n\n\tif ( type === 'filter' ) {\n\t\tvar fomatters = DataTable.ext.type.search;\n\n\t\tif ( fomatters[ col.sType ] ) {\n\t\t\tcellData = fomatters[ col.sType ]( cellData );\n\t\t}\n\t}\n\n\treturn cellData;\n}\n\n\n/**\n * Set the value for a specific cell, into the internal data cache\n *  @param {object} settings dataTables settings object\n *  @param {int} rowIdx aoData row id\n *  @param {int} colIdx Column index\n *  @param {*} val Value to set\n *  @memberof DataTable#oApi\n */\nfunction _fnSetCellData( settings, rowIdx, colIdx, val )\n{\n\tvar col     = settings.aoColumns[colIdx];\n\tvar rowData = settings.aoData[rowIdx]._aData;\n\n\tcol.fnSetData( rowData, val, {\n\t\tsettings: settings,\n\t\trow:      rowIdx,\n\t\tcol:      colIdx\n\t}  );\n}\n\n\n// Private variable that is used to match action syntax in the data property object\nvar __reArray = /\\[.*?\\]$/;\nvar __reFn = /\\(\\)$/;\n\n/**\n * Split string on periods, taking into account escaped periods\n * @param  {string} str String to split\n * @return {array} Split string\n */\nfunction _fnSplitObjNotation( str )\n{\n\treturn $.map( str.match(/(\\\\.|[^\\.])+/g) || [''], function ( s ) {\n\t\treturn s.replace(/\\\\\\./g, '.');\n\t} );\n}\n\n\n/**\n * Return a function that can be used to get data from a source object, taking\n * into account the ability to use nested objects as a source\n *  @param {string|int|function} mSource The data source for the object\n *  @returns {function} Data get function\n *  @memberof DataTable#oApi\n */\nvar _fnGetObjectDataFn = DataTable.util.get;\n\n\n/**\n * Return a function that can be used to set data from a source object, taking\n * into account the ability to use nested objects as a source\n *  @param {string|int|function} mSource The data source for the object\n *  @returns {function} Data set function\n *  @memberof DataTable#oApi\n */\nvar _fnSetObjectDataFn = DataTable.util.set;\n\n\n/**\n * Return an array with the full table data\n *  @param {object} oSettings dataTables settings object\n *  @returns array {array} aData Master data array\n *  @memberof DataTable#oApi\n */\nfunction _fnGetDataMaster ( settings )\n{\n\treturn _pluck( settings.aoData, '_aData' );\n}\n\n\n/**\n * Nuke the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnClearTable( settings )\n{\n\tsettings.aoData.length = 0;\n\tsettings.aiDisplayMaster.length = 0;\n\tsettings.aiDisplay.length = 0;\n\tsettings.aIds = {};\n}\n\n\n /**\n * Take an array of integers (index array) and remove a target integer (value - not\n * the key!)\n *  @param {array} a Index array to target\n *  @param {int} iTarget value to find\n *  @memberof DataTable#oApi\n */\nfunction _fnDeleteIndex( a, iTarget, splice )\n{\n\tvar iTargetIndex = -1;\n\n\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t{\n\t\tif ( a[i] == iTarget )\n\t\t{\n\t\t\tiTargetIndex = i;\n\t\t}\n\t\telse if ( a[i] > iTarget )\n\t\t{\n\t\t\ta[i]--;\n\t\t}\n\t}\n\n\tif ( iTargetIndex != -1 && splice === undefined )\n\t{\n\t\ta.splice( iTargetIndex, 1 );\n\t}\n}\n\n\n/**\n * Mark cached data as invalid such that a re-read of the data will occur when\n * the cached data is next requested. Also update from the data source object.\n *\n * @param {object} settings DataTables settings object\n * @param {int}    rowIdx   Row index to invalidate\n * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'\n *     or 'data'\n * @param {int}    [colIdx] Column index to invalidate. If undefined the whole\n *     row will be invalidated\n * @memberof DataTable#oApi\n *\n * @todo For the modularisation of v1.11 this will need to become a callback, so\n *   the sort and filter methods can subscribe to it. That will required\n *   initialisation options for sorting, which is why it is not already baked in\n */\nfunction _fnInvalidate( settings, rowIdx, src, colIdx )\n{\n\tvar row = settings.aoData[ rowIdx ];\n\tvar i, ien;\n\tvar cellWrite = function ( cell, col ) {\n\t\t// This is very frustrating, but in IE if you just write directly\n\t\t// to innerHTML, and elements that are overwritten are GC'ed,\n\t\t// even if there is a reference to them elsewhere\n\t\twhile ( cell.childNodes.length ) {\n\t\t\tcell.removeChild( cell.firstChild );\n\t\t}\n\n\t\tcell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );\n\t};\n\n\t// Are we reading last data from DOM or the data object?\n\tif ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {\n\t\t// Read the data from the DOM\n\t\trow._aData = _fnGetRowElements(\n\t\t\t\tsettings, row, colIdx, colIdx === undefined ? undefined : row._aData\n\t\t\t)\n\t\t\t.data;\n\t}\n\telse {\n\t\t// Reading from data object, update the DOM\n\t\tvar cells = row.anCells;\n\n\t\tif ( cells ) {\n\t\t\tif ( colIdx !== undefined ) {\n\t\t\t\tcellWrite( cells[colIdx], colIdx );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\t\tcellWrite( cells[i], i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// For both row and cell invalidation, the cached data for sorting and\n\t// filtering is nulled out\n\trow._aSortData = null;\n\trow._aFilterData = null;\n\n\t// Invalidate the type for a specific column (if given) or all columns since\n\t// the data might have changed\n\tvar cols = settings.aoColumns;\n\tif ( colIdx !== undefined ) {\n\t\tcols[ colIdx ].sType = null;\n\t}\n\telse {\n\t\tfor ( i=0, ien=cols.length ; i<ien ; i++ ) {\n\t\t\tcols[i].sType = null;\n\t\t}\n\n\t\t// Update DataTables special `DT_*` attributes for the row\n\t\t_fnRowAttributes( settings, row );\n\t}\n}\n\n\n/**\n * Build a data source object from an HTML row, reading the contents of the\n * cells that are in the row.\n *\n * @param {object} settings DataTables settings object\n * @param {node|object} TR element from which to read data or existing row\n *   object from which to re-read the data from the cells\n * @param {int} [colIdx] Optional column index\n * @param {array|object} [d] Data source object. If `colIdx` is given then this\n *   parameter should also be given and will be used to write the data into.\n *   Only the column in question will be written\n * @returns {object} Object with two parameters: `data` the data read, in\n *   document order, and `cells` and array of nodes (they can be useful to the\n *   caller, so rather than needing a second traversal to get them, just return\n *   them from here).\n * @memberof DataTable#oApi\n */\nfunction _fnGetRowElements( settings, row, colIdx, d )\n{\n\tvar\n\t\ttds = [],\n\t\ttd = row.firstChild,\n\t\tname, col, o, i=0, contents,\n\t\tcolumns = settings.aoColumns,\n\t\tobjectRead = settings._rowReadObject;\n\n\t// Allow the data object to be passed in, or construct\n\td = d !== undefined ?\n\t\td :\n\t\tobjectRead ?\n\t\t\t{} :\n\t\t\t[];\n\n\tvar attr = function ( str, td  ) {\n\t\tif ( typeof str === 'string' ) {\n\t\t\tvar idx = str.indexOf('@');\n\n\t\t\tif ( idx !== -1 ) {\n\t\t\t\tvar attr = str.substring( idx+1 );\n\t\t\t\tvar setter = _fnSetObjectDataFn( str );\n\t\t\t\tsetter( d, td.getAttribute( attr ) );\n\t\t\t}\n\t\t}\n\t};\n\n\t// Read data from a cell and store into the data object\n\tvar cellProcess = function ( cell ) {\n\t\tif ( colIdx === undefined || colIdx === i ) {\n\t\t\tcol = columns[i];\n\t\t\tcontents = (cell.innerHTML).trim();\n\n\t\t\tif ( col && col._bAttrSrc ) {\n\t\t\t\tvar setter = _fnSetObjectDataFn( col.mData._ );\n\t\t\t\tsetter( d, contents );\n\n\t\t\t\tattr( col.mData.sort, cell );\n\t\t\t\tattr( col.mData.type, cell );\n\t\t\t\tattr( col.mData.filter, cell );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Depending on the `data` option for the columns the data can\n\t\t\t\t// be read to either an object or an array.\n\t\t\t\tif ( objectRead ) {\n\t\t\t\t\tif ( ! col._setter ) {\n\t\t\t\t\t\t// Cache the setter function\n\t\t\t\t\t\tcol._setter = _fnSetObjectDataFn( col.mData );\n\t\t\t\t\t}\n\t\t\t\t\tcol._setter( d, contents );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\td[i] = contents;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ti++;\n\t};\n\n\tif ( td ) {\n\t\t// `tr` element was passed in\n\t\twhile ( td ) {\n\t\t\tname = td.nodeName.toUpperCase();\n\n\t\t\tif ( name == \"TD\" || name == \"TH\" ) {\n\t\t\t\tcellProcess( td );\n\t\t\t\ttds.push( td );\n\t\t\t}\n\n\t\t\ttd = td.nextSibling;\n\t\t}\n\t}\n\telse {\n\t\t// Existing row object passed in\n\t\ttds = row.anCells;\n\n\t\tfor ( var j=0, jen=tds.length ; j<jen ; j++ ) {\n\t\t\tcellProcess( tds[j] );\n\t\t}\n\t}\n\n\t// Read the ID from the DOM if present\n\tvar rowNode = row.firstChild ? row : row.nTr;\n\n\tif ( rowNode ) {\n\t\tvar id = rowNode.getAttribute( 'id' );\n\n\t\tif ( id ) {\n\t\t\t_fnSetObjectDataFn( settings.rowId )( d, id );\n\t\t}\n\t}\n\n\treturn {\n\t\tdata: d,\n\t\tcells: tds\n\t};\n}\n/**\n * Create a new TR element (and it's TD children) for a row\n *  @param {object} oSettings dataTables settings object\n *  @param {int} iRow Row to consider\n *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,\n *    DataTables will create a row automatically\n *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n *    if nTr is.\n *  @memberof DataTable#oApi\n */\nfunction _fnCreateTr ( oSettings, iRow, nTrIn, anTds )\n{\n\tvar\n\t\trow = oSettings.aoData[iRow],\n\t\trowData = row._aData,\n\t\tcells = [],\n\t\tnTr, nTd, oCol,\n\t\ti, iLen, create;\n\n\tif ( row.nTr === null )\n\t{\n\t\tnTr = nTrIn || document.createElement('tr');\n\n\t\trow.nTr = nTr;\n\t\trow.anCells = cells;\n\n\t\t/* Use a private property on the node to allow reserve mapping from the node\n\t\t * to the aoData array for fast look up\n\t\t */\n\t\tnTr._DT_RowIndex = iRow;\n\n\t\t/* Special parameters can be given by the data source to be used on the row */\n\t\t_fnRowAttributes( oSettings, row );\n\n\t\t/* Process each column */\n\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\toCol = oSettings.aoColumns[i];\n\t\t\tcreate = nTrIn ? false : true;\n\n\t\t\tnTd = create ? document.createElement( oCol.sCellType ) : anTds[i];\n\n\t\t\tif (! nTd) {\n\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t}\n\n\t\t\tnTd._DT_CellIndex = {\n\t\t\t\trow: iRow,\n\t\t\t\tcolumn: i\n\t\t\t};\n\t\t\t\n\t\t\tcells.push( nTd );\n\n\t\t\t// Need to create the HTML if new, or if a rendering function is defined\n\t\t\tif ( create || ((oCol.mRender || oCol.mData !== i) &&\n\t\t\t\t (!$.isPlainObject(oCol.mData) || oCol.mData._ !== i+'.display')\n\t\t\t)) {\n\t\t\t\tnTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );\n\t\t\t}\n\n\t\t\t/* Add user defined class */\n\t\t\tif ( oCol.sClass )\n\t\t\t{\n\t\t\t\tnTd.className += ' '+oCol.sClass;\n\t\t\t}\n\n\t\t\t// Visibility - add or remove as required\n\t\t\tif ( oCol.bVisible && ! nTrIn )\n\t\t\t{\n\t\t\t\tnTr.appendChild( nTd );\n\t\t\t}\n\t\t\telse if ( ! oCol.bVisible && nTrIn )\n\t\t\t{\n\t\t\t\tnTd.parentNode.removeChild( nTd );\n\t\t\t}\n\n\t\t\tif ( oCol.fnCreatedCell )\n\t\t\t{\n\t\t\t\toCol.fnCreatedCell.call( oSettings.oInstance,\n\t\t\t\t\tnTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow, cells] );\n\t}\n}\n\n\n/**\n * Add attributes to a row based on the special `DT_*` parameters in a data\n * source object.\n *  @param {object} settings DataTables settings object\n *  @param {object} DataTables row object for the row to be modified\n *  @memberof DataTable#oApi\n */\nfunction _fnRowAttributes( settings, row )\n{\n\tvar tr = row.nTr;\n\tvar data = row._aData;\n\n\tif ( tr ) {\n\t\tvar id = settings.rowIdFn( data );\n\n\t\tif ( id ) {\n\t\t\ttr.id = id;\n\t\t}\n\n\t\tif ( data.DT_RowClass ) {\n\t\t\t// Remove any classes added by DT_RowClass before\n\t\t\tvar a = data.DT_RowClass.split(' ');\n\t\t\trow.__rowc = row.__rowc ?\n\t\t\t\t_unique( row.__rowc.concat( a ) ) :\n\t\t\t\ta;\n\n\t\t\t$(tr)\n\t\t\t\t.removeClass( row.__rowc.join(' ') )\n\t\t\t\t.addClass( data.DT_RowClass );\n\t\t}\n\n\t\tif ( data.DT_RowAttr ) {\n\t\t\t$(tr).attr( data.DT_RowAttr );\n\t\t}\n\n\t\tif ( data.DT_RowData ) {\n\t\t\t$(tr).data( data.DT_RowData );\n\t\t}\n\t}\n}\n\n\n/**\n * Create the HTML header for the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnBuildHead( oSettings )\n{\n\tvar i, ien, cell, row, column;\n\tvar thead = oSettings.nTHead;\n\tvar tfoot = oSettings.nTFoot;\n\tvar createHeader = $('th, td', thead).length === 0;\n\tvar classes = oSettings.oClasses;\n\tvar columns = oSettings.aoColumns;\n\n\tif ( createHeader ) {\n\t\trow = $('<tr/>').appendTo( thead );\n\t}\n\n\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\tcolumn = columns[i];\n\t\tcell = $( column.nTh ).addClass( column.sClass );\n\n\t\tif ( createHeader ) {\n\t\t\tcell.appendTo( row );\n\t\t}\n\n\t\t// 1.11 move into sorting\n\t\tif ( oSettings.oFeatures.bSort ) {\n\t\t\tcell.addClass( column.sSortingClass );\n\n\t\t\tif ( column.bSortable !== false ) {\n\t\t\t\tcell\n\t\t\t\t\t.attr( 'tabindex', oSettings.iTabIndex )\n\t\t\t\t\t.attr( 'aria-controls', oSettings.sTableId );\n\n\t\t\t\t_fnSortAttachListener( oSettings, column.nTh, i );\n\t\t\t}\n\t\t}\n\n\t\tif ( column.sTitle != cell[0].innerHTML ) {\n\t\t\tcell.html( column.sTitle );\n\t\t}\n\n\t\t_fnRenderer( oSettings, 'header' )(\n\t\t\toSettings, cell, column, classes\n\t\t);\n\t}\n\n\tif ( createHeader ) {\n\t\t_fnDetectHeader( oSettings.aoHeader, thead );\n\t}\n\n\t/* Deal with the footer - add classes if required */\n\t$(thead).children('tr').children('th, td').addClass( classes.sHeaderTH );\n\t$(tfoot).children('tr').children('th, td').addClass( classes.sFooterTH );\n\n\t// Cache the footer cells. Note that we only take the cells from the first\n\t// row in the footer. If there is more than one row the user wants to\n\t// interact with, they need to use the table().foot() method. Note also this\n\t// allows cells to be used for multiple columns using colspan\n\tif ( tfoot !== null ) {\n\t\tvar cells = oSettings.aoFooter[0];\n\n\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\tcolumn = columns[i];\n\n\t\t\tif (column) {\n\t\t\t\tcolumn.nTf = cells[i].cell;\n\t\n\t\t\t\tif ( column.sClass ) {\n\t\t\t\t\t$(column.nTf).addClass( column.sClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Draw the header (or footer) element based on the column visibility states. The\n * methodology here is to use the layout array from _fnDetectHeader, modified for\n * the instantaneous column visibility, to construct the new layout. The grid is\n * traversed over cell at a time in a rows x columns grid fashion, although each\n * cell insert can cover multiple elements in the grid - which is tracks using the\n * aApplied array. Cell inserts in the grid will only occur where there isn't\n * already a cell in that position.\n *  @param {object} oSettings dataTables settings object\n *  @param array {objects} aoSource Layout array from _fnDetectHeader\n *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,\n *  @memberof DataTable#oApi\n */\nfunction _fnDrawHead( oSettings, aoSource, bIncludeHidden )\n{\n\tvar i, iLen, j, jLen, k, kLen, n, nLocalTr;\n\tvar aoLocal = [];\n\tvar aApplied = [];\n\tvar iColumns = oSettings.aoColumns.length;\n\tvar iRowspan, iColspan;\n\n\tif ( ! aoSource )\n\t{\n\t\treturn;\n\t}\n\n\tif (  bIncludeHidden === undefined )\n\t{\n\t\tbIncludeHidden = false;\n\t}\n\n\t/* Make a copy of the master layout array, but without the visible columns in it */\n\tfor ( i=0, iLen=aoSource.length ; i<iLen ; i++ )\n\t{\n\t\taoLocal[i] = aoSource[i].slice();\n\t\taoLocal[i].nTr = aoSource[i].nTr;\n\n\t\t/* Remove any columns which are currently hidden */\n\t\tfor ( j=iColumns-1 ; j>=0 ; j-- )\n\t\t{\n\t\t\tif ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )\n\t\t\t{\n\t\t\t\taoLocal[i].splice( j, 1 );\n\t\t\t}\n\t\t}\n\n\t\t/* Prep the applied array - it needs an element for each row */\n\t\taApplied.push( [] );\n\t}\n\n\tfor ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )\n\t{\n\t\tnLocalTr = aoLocal[i].nTr;\n\n\t\t/* All cells are going to be replaced, so empty out the row */\n\t\tif ( nLocalTr )\n\t\t{\n\t\t\twhile( (n = nLocalTr.firstChild) )\n\t\t\t{\n\t\t\t\tnLocalTr.removeChild( n );\n\t\t\t}\n\t\t}\n\n\t\tfor ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )\n\t\t{\n\t\t\tiRowspan = 1;\n\t\t\tiColspan = 1;\n\n\t\t\t/* Check to see if there is already a cell (row/colspan) covering our target\n\t\t\t * insert point. If there is, then there is nothing to do.\n\t\t\t */\n\t\t\tif ( aApplied[i][j] === undefined )\n\t\t\t{\n\t\t\t\tnLocalTr.appendChild( aoLocal[i][j].cell );\n\t\t\t\taApplied[i][j] = 1;\n\n\t\t\t\t/* Expand the cell to cover as many rows as needed */\n\t\t\t\twhile ( aoLocal[i+iRowspan] !== undefined &&\n\t\t\t\t        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )\n\t\t\t\t{\n\t\t\t\t\taApplied[i+iRowspan][j] = 1;\n\t\t\t\t\tiRowspan++;\n\t\t\t\t}\n\n\t\t\t\t/* Expand the cell to cover as many columns as needed */\n\t\t\t\twhile ( aoLocal[i][j+iColspan] !== undefined &&\n\t\t\t\t        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )\n\t\t\t\t{\n\t\t\t\t\t/* Must update the applied array over the rows for the columns */\n\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t{\n\t\t\t\t\t\taApplied[i+k][j+iColspan] = 1;\n\t\t\t\t\t}\n\t\t\t\t\tiColspan++;\n\t\t\t\t}\n\n\t\t\t\t/* Do the actual expansion in the DOM */\n\t\t\t\t$(aoLocal[i][j].cell)\n\t\t\t\t\t.attr('rowspan', iRowspan)\n\t\t\t\t\t.attr('colspan', iColspan);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Insert the required TR nodes into the table for display\n *  @param {object} oSettings dataTables settings object\n *  @param ajaxComplete true after ajax call to complete rendering\n *  @memberof DataTable#oApi\n */\nfunction _fnDraw( oSettings, ajaxComplete )\n{\n\t// Allow for state saving and a custom start position\n\t_fnStart( oSettings );\n\n\t/* Provide a pre-callback function which can be used to cancel the draw is false is returned */\n\tvar aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );\n\tif ( $.inArray( false, aPreDraw ) !== -1 )\n\t{\n\t\t_fnProcessingDisplay( oSettings, false );\n\t\treturn;\n\t}\n\n\tvar anRows = [];\n\tvar iRowCount = 0;\n\tvar asStripeClasses = oSettings.asStripeClasses;\n\tvar iStripes = asStripeClasses.length;\n\tvar oLang = oSettings.oLanguage;\n\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\tvar aiDisplay = oSettings.aiDisplay;\n\tvar iDisplayStart = oSettings._iDisplayStart;\n\tvar iDisplayEnd = oSettings.fnDisplayEnd();\n\n\toSettings.bDrawing = true;\n\n\t/* Server-side processing draw intercept */\n\tif ( oSettings.bDeferLoading )\n\t{\n\t\toSettings.bDeferLoading = false;\n\t\toSettings.iDraw++;\n\t\t_fnProcessingDisplay( oSettings, false );\n\t}\n\telse if ( !bServerSide )\n\t{\n\t\toSettings.iDraw++;\n\t}\n\telse if ( !oSettings.bDestroying && !ajaxComplete)\n\t{\n\t\t_fnAjaxUpdate( oSettings );\n\t\treturn;\n\t}\n\n\tif ( aiDisplay.length !== 0 )\n\t{\n\t\tvar iStart = bServerSide ? 0 : iDisplayStart;\n\t\tvar iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;\n\n\t\tfor ( var j=iStart ; j<iEnd ; j++ )\n\t\t{\n\t\t\tvar iDataIndex = aiDisplay[j];\n\t\t\tvar aoData = oSettings.aoData[ iDataIndex ];\n\t\t\tif ( aoData.nTr === null )\n\t\t\t{\n\t\t\t\t_fnCreateTr( oSettings, iDataIndex );\n\t\t\t}\n\n\t\t\tvar nRow = aoData.nTr;\n\n\t\t\t/* Remove the old striping classes and then add the new one */\n\t\t\tif ( iStripes !== 0 )\n\t\t\t{\n\t\t\t\tvar sStripe = asStripeClasses[ iRowCount % iStripes ];\n\t\t\t\tif ( aoData._sRowStripe != sStripe )\n\t\t\t\t{\n\t\t\t\t\t$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );\n\t\t\t\t\taoData._sRowStripe = sStripe;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Row callback functions - might want to manipulate the row\n\t\t\t// iRowCount and j are not currently documented. Are they at all\n\t\t\t// useful?\n\t\t\t_fnCallbackFire( oSettings, 'aoRowCallback', null,\n\t\t\t\t[nRow, aoData._aData, iRowCount, j, iDataIndex] );\n\n\t\t\tanRows.push( nRow );\n\t\t\tiRowCount++;\n\t\t}\n\t}\n\telse\n\t{\n\t\t/* Table is empty - create a row with an empty message in it */\n\t\tvar sZero = oLang.sZeroRecords;\n\t\tif ( oSettings.iDraw == 1 &&  _fnDataSource( oSettings ) == 'ajax' )\n\t\t{\n\t\t\tsZero = oLang.sLoadingRecords;\n\t\t}\n\t\telse if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )\n\t\t{\n\t\t\tsZero = oLang.sEmptyTable;\n\t\t}\n\n\t\tanRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )\n\t\t\t.append( $('<td />', {\n\t\t\t\t'valign':  'top',\n\t\t\t\t'colSpan': _fnVisbleColumns( oSettings ),\n\t\t\t\t'class':   oSettings.oClasses.sRowEmpty\n\t\t\t} ).html( sZero ) )[0];\n\t}\n\n\t/* Header and footer callbacks */\n\t_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],\n\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\n\t_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],\n\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\n\tvar body = $(oSettings.nTBody);\n\n\tbody.children().detach();\n\tbody.append( $(anRows) );\n\n\t/* Call all required callback functions for the end of a draw */\n\t_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );\n\n\t/* Draw is complete, sorting and filtering must be as well */\n\toSettings.bSorted = false;\n\toSettings.bFiltered = false;\n\toSettings.bDrawing = false;\n}\n\n\n/**\n * Redraw the table - taking account of the various features which are enabled\n *  @param {object} oSettings dataTables settings object\n *  @param {boolean} [holdPosition] Keep the current paging position. By default\n *    the paging is reset to the first page\n *  @memberof DataTable#oApi\n */\nfunction _fnReDraw( settings, holdPosition )\n{\n\tvar\n\t\tfeatures = settings.oFeatures,\n\t\tsort     = features.bSort,\n\t\tfilter   = features.bFilter;\n\n\tif ( sort ) {\n\t\t_fnSort( settings );\n\t}\n\n\tif ( filter ) {\n\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t}\n\telse {\n\t\t// No filtering, so we want to just use the display master\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t}\n\n\tif ( holdPosition !== true ) {\n\t\tsettings._iDisplayStart = 0;\n\t}\n\n\t// Let any modules know about the draw hold position state (used by\n\t// scrolling internally)\n\tsettings._drawHold = holdPosition;\n\n\t_fnDraw( settings );\n\n\tsettings._drawHold = false;\n}\n\n\n/**\n * Add the options to the page HTML for the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnAddOptionsHtml ( oSettings )\n{\n\tvar classes = oSettings.oClasses;\n\tvar table = $(oSettings.nTable);\n\tvar holding = $('<div/>').insertBefore( table ); // Holding element for speed\n\tvar features = oSettings.oFeatures;\n\n\t// All DataTables are wrapped in a div\n\tvar insert = $('<div/>', {\n\t\tid:      oSettings.sTableId+'_wrapper',\n\t\t'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)\n\t} );\n\n\toSettings.nHolding = holding[0];\n\toSettings.nTableWrapper = insert[0];\n\toSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;\n\n\t/* Loop over the user set positioning and place the elements as needed */\n\tvar aDom = oSettings.sDom.split('');\n\tvar featureNode, cOption, nNewNode, cNext, sAttr, j;\n\tfor ( var i=0 ; i<aDom.length ; i++ )\n\t{\n\t\tfeatureNode = null;\n\t\tcOption = aDom[i];\n\n\t\tif ( cOption == '<' )\n\t\t{\n\t\t\t/* New container div */\n\t\t\tnNewNode = $('<div/>')[0];\n\n\t\t\t/* Check to see if we should append an id and/or a class name to the container */\n\t\t\tcNext = aDom[i+1];\n\t\t\tif ( cNext == \"'\" || cNext == '\"' )\n\t\t\t{\n\t\t\t\tsAttr = \"\";\n\t\t\t\tj = 2;\n\t\t\t\twhile ( aDom[i+j] != cNext )\n\t\t\t\t{\n\t\t\t\t\tsAttr += aDom[i+j];\n\t\t\t\t\tj++;\n\t\t\t\t}\n\n\t\t\t\t/* Replace jQuery UI constants @todo depreciated */\n\t\t\t\tif ( sAttr == \"H\" )\n\t\t\t\t{\n\t\t\t\t\tsAttr = classes.sJUIHeader;\n\t\t\t\t}\n\t\t\t\telse if ( sAttr == \"F\" )\n\t\t\t\t{\n\t\t\t\t\tsAttr = classes.sJUIFooter;\n\t\t\t\t}\n\n\t\t\t\t/* The attribute can be in the format of \"#id.class\", \"#id\" or \"class\" This logic\n\t\t\t\t * breaks the string into parts and applies them as needed\n\t\t\t\t */\n\t\t\t\tif ( sAttr.indexOf('.') != -1 )\n\t\t\t\t{\n\t\t\t\t\tvar aSplit = sAttr.split('.');\n\t\t\t\t\tnNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);\n\t\t\t\t\tnNewNode.className = aSplit[1];\n\t\t\t\t}\n\t\t\t\telse if ( sAttr.charAt(0) == \"#\" )\n\t\t\t\t{\n\t\t\t\t\tnNewNode.id = sAttr.substr(1, sAttr.length-1);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnNewNode.className = sAttr;\n\t\t\t\t}\n\n\t\t\t\ti += j; /* Move along the position array */\n\t\t\t}\n\n\t\t\tinsert.append( nNewNode );\n\t\t\tinsert = $(nNewNode);\n\t\t}\n\t\telse if ( cOption == '>' )\n\t\t{\n\t\t\t/* End container div */\n\t\t\tinsert = insert.parent();\n\t\t}\n\t\t// @todo Move options into their own plugins?\n\t\telse if ( cOption == 'l' && features.bPaginate && features.bLengthChange )\n\t\t{\n\t\t\t/* Length */\n\t\t\tfeatureNode = _fnFeatureHtmlLength( oSettings );\n\t\t}\n\t\telse if ( cOption == 'f' && features.bFilter )\n\t\t{\n\t\t\t/* Filter */\n\t\t\tfeatureNode = _fnFeatureHtmlFilter( oSettings );\n\t\t}\n\t\telse if ( cOption == 'r' && features.bProcessing )\n\t\t{\n\t\t\t/* pRocessing */\n\t\t\tfeatureNode = _fnFeatureHtmlProcessing( oSettings );\n\t\t}\n\t\telse if ( cOption == 't' )\n\t\t{\n\t\t\t/* Table */\n\t\t\tfeatureNode = _fnFeatureHtmlTable( oSettings );\n\t\t}\n\t\telse if ( cOption ==  'i' && features.bInfo )\n\t\t{\n\t\t\t/* Info */\n\t\t\tfeatureNode = _fnFeatureHtmlInfo( oSettings );\n\t\t}\n\t\telse if ( cOption == 'p' && features.bPaginate )\n\t\t{\n\t\t\t/* Pagination */\n\t\t\tfeatureNode = _fnFeatureHtmlPaginate( oSettings );\n\t\t}\n\t\telse if ( DataTable.ext.feature.length !== 0 )\n\t\t{\n\t\t\t/* Plug-in features */\n\t\t\tvar aoFeatures = DataTable.ext.feature;\n\t\t\tfor ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )\n\t\t\t{\n\t\t\t\tif ( cOption == aoFeatures[k].cFeature )\n\t\t\t\t{\n\t\t\t\t\tfeatureNode = aoFeatures[k].fnInit( oSettings );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/* Add to the 2D features array */\n\t\tif ( featureNode )\n\t\t{\n\t\t\tvar aanFeatures = oSettings.aanFeatures;\n\n\t\t\tif ( ! aanFeatures[cOption] )\n\t\t\t{\n\t\t\t\taanFeatures[cOption] = [];\n\t\t\t}\n\n\t\t\taanFeatures[cOption].push( featureNode );\n\t\t\tinsert.append( featureNode );\n\t\t}\n\t}\n\n\t/* Built our DOM structure - replace the holding div with what we want */\n\tholding.replaceWith( insert );\n\toSettings.nHolding = null;\n}\n\n\n/**\n * Use the DOM source to create up an array of header cells. The idea here is to\n * create a layout grid (array) of rows x columns, which contains a reference\n * to the cell that that point in the grid (regardless of col/rowspan), such that\n * any column / row could be removed and the new grid constructed\n *  @param array {object} aLayout Array to store the calculated layout in\n *  @param {node} nThead The header/footer element for the table\n *  @memberof DataTable#oApi\n */\nfunction _fnDetectHeader ( aLayout, nThead )\n{\n\tvar nTrs = $(nThead).children('tr');\n\tvar nTr, nCell;\n\tvar i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;\n\tvar bUnique;\n\tvar fnShiftCol = function ( a, i, j ) {\n\t\tvar k = a[i];\n                while ( k[j] ) {\n\t\t\tj++;\n\t\t}\n\t\treturn j;\n\t};\n\n\taLayout.splice( 0, aLayout.length );\n\n\t/* We know how many rows there are in the layout - so prep it */\n\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t{\n\t\taLayout.push( [] );\n\t}\n\n\t/* Calculate a layout array */\n\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t{\n\t\tnTr = nTrs[i];\n\t\tiColumn = 0;\n\n\t\t/* For every cell in the row... */\n\t\tnCell = nTr.firstChild;\n\t\twhile ( nCell ) {\n\t\t\tif ( nCell.nodeName.toUpperCase() == \"TD\" ||\n\t\t\t     nCell.nodeName.toUpperCase() == \"TH\" )\n\t\t\t{\n\t\t\t\t/* Get the col and rowspan attributes from the DOM and sanitise them */\n\t\t\t\tiColspan = nCell.getAttribute('colspan') * 1;\n\t\t\t\tiRowspan = nCell.getAttribute('rowspan') * 1;\n\t\t\t\tiColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;\n\t\t\t\tiRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;\n\n\t\t\t\t/* There might be colspan cells already in this row, so shift our target\n\t\t\t\t * accordingly\n\t\t\t\t */\n\t\t\t\tiColShifted = fnShiftCol( aLayout, i, iColumn );\n\n\t\t\t\t/* Cache calculation for unique columns */\n\t\t\t\tbUnique = iColspan === 1 ? true : false;\n\n\t\t\t\t/* If there is col / rowspan, copy the information into the layout grid */\n\t\t\t\tfor ( l=0 ; l<iColspan ; l++ )\n\t\t\t\t{\n\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t{\n\t\t\t\t\t\taLayout[i+k][iColShifted+l] = {\n\t\t\t\t\t\t\t\"cell\": nCell,\n\t\t\t\t\t\t\t\"unique\": bUnique\n\t\t\t\t\t\t};\n\t\t\t\t\t\taLayout[i+k].nTr = nTr;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tnCell = nCell.nextSibling;\n\t\t}\n\t}\n}\n\n\n/**\n * Get an array of unique th elements, one for each column\n *  @param {object} oSettings dataTables settings object\n *  @param {node} nHeader automatically detect the layout from this node - optional\n *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional\n *  @returns array {node} aReturn list of unique th's\n *  @memberof DataTable#oApi\n */\nfunction _fnGetUniqueThs ( oSettings, nHeader, aLayout )\n{\n\tvar aReturn = [];\n\tif ( !aLayout )\n\t{\n\t\taLayout = oSettings.aoHeader;\n\t\tif ( nHeader )\n\t\t{\n\t\t\taLayout = [];\n\t\t\t_fnDetectHeader( aLayout, nHeader );\n\t\t}\n\t}\n\n\tfor ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )\n\t{\n\t\tfor ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )\n\t\t{\n\t\t\tif ( aLayout[i][j].unique &&\n\t\t\t\t (!aReturn[j] || !oSettings.bSortCellsTop) )\n\t\t\t{\n\t\t\t\taReturn[j] = aLayout[i][j].cell;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn aReturn;\n}\n\n/**\n * Set the start position for draw\n *  @param {object} oSettings dataTables settings object\n */\nfunction _fnStart( oSettings )\n{\n\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\tvar iInitDisplayStart = oSettings.iInitDisplayStart;\n\n\t// Check and see if we have an initial draw position from state saving\n\tif ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )\n\t{\n\t\toSettings._iDisplayStart = bServerSide ?\n\t\t\tiInitDisplayStart :\n\t\t\tiInitDisplayStart >= oSettings.fnRecordsDisplay() ?\n\t\t\t\t0 :\n\t\t\t\tiInitDisplayStart;\n\n\t\toSettings.iInitDisplayStart = -1;\n\t}\n}\n\n/**\n * Create an Ajax call based on the table's settings, taking into account that\n * parameters can have multiple forms, and backwards compatibility.\n *\n * @param {object} oSettings dataTables settings object\n * @param {array} data Data to send to the server, required by\n *     DataTables - may be augmented by developer callbacks\n * @param {function} fn Callback function to run when data is obtained\n */\nfunction _fnBuildAjax( oSettings, data, fn )\n{\n\t// Compatibility with 1.9-, allow fnServerData and event to manipulate\n\t_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );\n\n\t// Convert to object based for 1.10+ if using the old array scheme which can\n\t// come from server-side processing or serverParams\n\tif ( data && Array.isArray(data) ) {\n\t\tvar tmp = {};\n\t\tvar rbracket = /(.*?)\\[\\]$/;\n\n\t\t$.each( data, function (key, val) {\n\t\t\tvar match = val.name.match(rbracket);\n\n\t\t\tif ( match ) {\n\t\t\t\t// Support for arrays\n\t\t\t\tvar name = match[0];\n\n\t\t\t\tif ( ! tmp[ name ] ) {\n\t\t\t\t\ttmp[ name ] = [];\n\t\t\t\t}\n\t\t\t\ttmp[ name ].push( val.value );\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttmp[val.name] = val.value;\n\t\t\t}\n\t\t} );\n\t\tdata = tmp;\n\t}\n\n\tvar ajaxData;\n\tvar ajax = oSettings.ajax;\n\tvar instance = oSettings.oInstance;\n\tvar callback = function ( json ) {\n\t\tvar status = oSettings.jqXHR\n\t\t\t? oSettings.jqXHR.status\n\t\t\t: null;\n\n\t\tif ( json === null || (typeof status === 'number' && status == 204 ) ) {\n\t\t\tjson = {};\n\t\t\t_fnAjaxDataSrc( oSettings, json, [] );\n\t\t}\n\n\t\tvar error = json.error || json.sError;\n\t\tif ( error ) {\n\t\t\t_fnLog( oSettings, 0, error );\n\t\t}\n\n\t\toSettings.json = json;\n\n\t\t_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );\n\t\tfn( json );\n\t};\n\n\tif ( $.isPlainObject( ajax ) && ajax.data )\n\t{\n\t\tajaxData = ajax.data;\n\n\t\tvar newData = typeof ajaxData === 'function' ?\n\t\t\tajaxData( data, oSettings ) :  // fn can manipulate data or return\n\t\t\tajaxData;                      // an object object or array to merge\n\n\t\t// If the function returned something, use that alone\n\t\tdata = typeof ajaxData === 'function' && newData ?\n\t\t\tnewData :\n\t\t\t$.extend( true, data, newData );\n\n\t\t// Remove the data property as we've resolved it already and don't want\n\t\t// jQuery to do it again (it is restored at the end of the function)\n\t\tdelete ajax.data;\n\t}\n\n\tvar baseAjax = {\n\t\t\"data\": data,\n\t\t\"success\": callback,\n\t\t\"dataType\": \"json\",\n\t\t\"cache\": false,\n\t\t\"type\": oSettings.sServerMethod,\n\t\t\"error\": function (xhr, error, thrown) {\n\t\t\tvar ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );\n\n\t\t\tif ( $.inArray( true, ret ) === -1 ) {\n\t\t\t\tif ( error == \"parsererror\" ) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Invalid JSON response', 1 );\n\t\t\t\t}\n\t\t\t\telse if ( xhr.readyState === 4 ) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Ajax error', 7 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t}\n\t};\n\n\t// Store the data submitted for the API\n\toSettings.oAjaxData = data;\n\n\t// Allow plug-ins and external processes to modify the data\n\t_fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );\n\n\tif ( oSettings.fnServerData )\n\t{\n\t\t// DataTables 1.9- compatibility\n\t\toSettings.fnServerData.call( instance,\n\t\t\toSettings.sAjaxSource,\n\t\t\t$.map( data, function (val, key) { // Need to convert back to 1.9 trad format\n\t\t\t\treturn { name: key, value: val };\n\t\t\t} ),\n\t\t\tcallback,\n\t\t\toSettings\n\t\t);\n\t}\n\telse if ( oSettings.sAjaxSource || typeof ajax === 'string' )\n\t{\n\t\t// DataTables 1.9- compatibility\n\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, {\n\t\t\turl: ajax || oSettings.sAjaxSource\n\t\t} ) );\n\t}\n\telse if ( typeof ajax === 'function' )\n\t{\n\t\t// Is a function - let the caller define what needs to be done\n\t\toSettings.jqXHR = ajax.call( instance, data, callback, oSettings );\n\t}\n\telse\n\t{\n\t\t// Object to extend the base settings\n\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );\n\n\t\t// Restore for next time around\n\t\tajax.data = ajaxData;\n\t}\n}\n\n\n/**\n * Update the table using an Ajax call\n *  @param {object} settings dataTables settings object\n *  @returns {boolean} Block the table drawing or not\n *  @memberof DataTable#oApi\n */\nfunction _fnAjaxUpdate( settings )\n{\n\tsettings.iDraw++;\n\t_fnProcessingDisplay( settings, true );\n\n\t// Keep track of drawHold state to handle scrolling after the Ajax call\n\tvar drawHold = settings._drawHold;\n\n\t_fnBuildAjax(\n\t\tsettings,\n\t\t_fnAjaxParameters( settings ),\n\t\tfunction(json) {\n\t\t\tsettings._drawHold = drawHold;\n\t\t\t_fnAjaxUpdateDraw( settings, json );\n\t\t\tsettings._drawHold = false;\n\t\t}\n\t);\n}\n\n\n/**\n * Build up the parameters in an object needed for a server-side processing\n * request. Note that this is basically done twice, is different ways - a modern\n * method which is used by default in DataTables 1.10 which uses objects and\n * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if\n * the sAjaxSource option is used in the initialisation, or the legacyAjax\n * option is set.\n *  @param {object} oSettings dataTables settings object\n *  @returns {bool} block the table drawing or not\n *  @memberof DataTable#oApi\n */\nfunction _fnAjaxParameters( settings )\n{\n\tvar\n\t\tcolumns = settings.aoColumns,\n\t\tcolumnCount = columns.length,\n\t\tfeatures = settings.oFeatures,\n\t\tpreSearch = settings.oPreviousSearch,\n\t\tpreColSearch = settings.aoPreSearchCols,\n\t\ti, data = [], dataProp, column, columnSearch,\n\t\tsort = _fnSortFlatten( settings ),\n\t\tdisplayStart = settings._iDisplayStart,\n\t\tdisplayLength = features.bPaginate !== false ?\n\t\t\tsettings._iDisplayLength :\n\t\t\t-1;\n\n\tvar param = function ( name, value ) {\n\t\tdata.push( { 'name': name, 'value': value } );\n\t};\n\n\t// DataTables 1.9- compatible method\n\tparam( 'sEcho',          settings.iDraw );\n\tparam( 'iColumns',       columnCount );\n\tparam( 'sColumns',       _pluck( columns, 'sName' ).join(',') );\n\tparam( 'iDisplayStart',  displayStart );\n\tparam( 'iDisplayLength', displayLength );\n\n\t// DataTables 1.10+ method\n\tvar d = {\n\t\tdraw:    settings.iDraw,\n\t\tcolumns: [],\n\t\torder:   [],\n\t\tstart:   displayStart,\n\t\tlength:  displayLength,\n\t\tsearch:  {\n\t\t\tvalue: preSearch.sSearch,\n\t\t\tregex: preSearch.bRegex\n\t\t}\n\t};\n\n\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\tcolumn = columns[i];\n\t\tcolumnSearch = preColSearch[i];\n\t\tdataProp = typeof column.mData==\"function\" ? 'function' : column.mData ;\n\n\t\td.columns.push( {\n\t\t\tdata:       dataProp,\n\t\t\tname:       column.sName,\n\t\t\tsearchable: column.bSearchable,\n\t\t\torderable:  column.bSortable,\n\t\t\tsearch:     {\n\t\t\t\tvalue: columnSearch.sSearch,\n\t\t\t\tregex: columnSearch.bRegex\n\t\t\t}\n\t\t} );\n\n\t\tparam( \"mDataProp_\"+i, dataProp );\n\n\t\tif ( features.bFilter ) {\n\t\t\tparam( 'sSearch_'+i,     columnSearch.sSearch );\n\t\t\tparam( 'bRegex_'+i,      columnSearch.bRegex );\n\t\t\tparam( 'bSearchable_'+i, column.bSearchable );\n\t\t}\n\n\t\tif ( features.bSort ) {\n\t\t\tparam( 'bSortable_'+i, column.bSortable );\n\t\t}\n\t}\n\n\tif ( features.bFilter ) {\n\t\tparam( 'sSearch', preSearch.sSearch );\n\t\tparam( 'bRegex', preSearch.bRegex );\n\t}\n\n\tif ( features.bSort ) {\n\t\t$.each( sort, function ( i, val ) {\n\t\t\td.order.push( { column: val.col, dir: val.dir } );\n\n\t\t\tparam( 'iSortCol_'+i, val.col );\n\t\t\tparam( 'sSortDir_'+i, val.dir );\n\t\t} );\n\n\t\tparam( 'iSortingCols', sort.length );\n\t}\n\n\t// If the legacy.ajax parameter is null, then we automatically decide which\n\t// form to use, based on sAjaxSource\n\tvar legacy = DataTable.ext.legacy.ajax;\n\tif ( legacy === null ) {\n\t\treturn settings.sAjaxSource ? data : d;\n\t}\n\n\t// Otherwise, if legacy has been specified then we use that to decide on the\n\t// form\n\treturn legacy ? data : d;\n}\n\n\n/**\n * Data the data from the server (nuking the old) and redraw the table\n *  @param {object} oSettings dataTables settings object\n *  @param {object} json json data return from the server.\n *  @param {string} json.sEcho Tracking flag for DataTables to match requests\n *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering\n *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering\n *  @param {array} json.aaData The data to display on this page\n *  @param {string} [json.sColumns] Column ordering (sName, comma separated)\n *  @memberof DataTable#oApi\n */\nfunction _fnAjaxUpdateDraw ( settings, json )\n{\n\t// v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.\n\t// Support both\n\tvar compat = function ( old, modern ) {\n\t\treturn json[old] !== undefined ? json[old] : json[modern];\n\t};\n\n\tvar data = _fnAjaxDataSrc( settings, json );\n\tvar draw            = compat( 'sEcho',                'draw' );\n\tvar recordsTotal    = compat( 'iTotalRecords',        'recordsTotal' );\n\tvar recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );\n\n\tif ( draw !== undefined ) {\n\t\t// Protect against out of sequence returns\n\t\tif ( draw*1 < settings.iDraw ) {\n\t\t\treturn;\n\t\t}\n\t\tsettings.iDraw = draw * 1;\n\t}\n\n\t// No data in returned object, so rather than an array, we show an empty table\n\tif ( ! data ) {\n\t\tdata = [];\n\t}\n\n\t_fnClearTable( settings );\n\tsettings._iRecordsTotal   = parseInt(recordsTotal, 10);\n\tsettings._iRecordsDisplay = parseInt(recordsFiltered, 10);\n\n\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t_fnAddData( settings, data[i] );\n\t}\n\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\n\t_fnDraw( settings, true );\n\n\tif ( ! settings._bInitComplete ) {\n\t\t_fnInitComplete( settings, json );\n\t}\n\n\t_fnProcessingDisplay( settings, false );\n}\n\n\n/**\n * Get the data from the JSON data source to use for drawing a table. Using\n * `_fnGetObjectDataFn` allows the data to be sourced from a property of the\n * source object, or from a processing function.\n *  @param {object} oSettings dataTables settings object\n *  @param  {object} json Data source object / array from the server\n *  @return {array} Array of data to use\n */\n function _fnAjaxDataSrc ( oSettings, json, write )\n {\n\tvar dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?\n\t\toSettings.ajax.dataSrc :\n\t\toSettings.sAjaxDataProp; // Compatibility with 1.9-.\n\n\tif ( ! write ) {\n\t\tif ( dataSrc === 'data' ) {\n\t\t\t// If the default, then we still want to support the old style, and safely ignore\n\t\t\t// it if possible\n\t\t\treturn json.aaData || json[dataSrc];\n\t\t}\n\n\t\treturn dataSrc !== \"\" ?\n\t\t\t_fnGetObjectDataFn( dataSrc )( json ) :\n\t\t\tjson;\n\t}\n\n\t// set\n\t_fnSetObjectDataFn( dataSrc )( json, write );\n}\n\n/**\n * Generate the node required for filtering text\n *  @returns {node} Filter control element\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlFilter ( settings )\n{\n\tvar classes = settings.oClasses;\n\tvar tableId = settings.sTableId;\n\tvar language = settings.oLanguage;\n\tvar previousSearch = settings.oPreviousSearch;\n\tvar features = settings.aanFeatures;\n\tvar input = '<input type=\"search\" class=\"'+classes.sFilterInput+'\"/>';\n\n\tvar str = language.sSearch;\n\tstr = str.match(/_INPUT_/) ?\n\t\tstr.replace('_INPUT_', input) :\n\t\tstr+input;\n\n\tvar filter = $('<div/>', {\n\t\t\t'id': ! features.f ? tableId+'_filter' : null,\n\t\t\t'class': classes.sFilter\n\t\t} )\n\t\t.append( $('<label/>' ).append( str ) );\n\n\tvar searchFn = function(event) {\n\t\t/* Update all other filter input elements for the new display */\n\t\tvar n = features.f;\n\t\tvar val = !this.value ? \"\" : this.value; // mental IE8 fix :-(\n\t\tif(previousSearch['return'] && event.key !== \"Enter\") {\n\t\t\treturn;\n\t\t}\n\t\t/* Now do the filter */\n\t\tif ( val != previousSearch.sSearch ) {\n\t\t\t_fnFilterComplete( settings, {\n\t\t\t\t\"sSearch\": val,\n\t\t\t\t\"bRegex\": previousSearch.bRegex,\n\t\t\t\t\"bSmart\": previousSearch.bSmart ,\n\t\t\t\t\"bCaseInsensitive\": previousSearch.bCaseInsensitive,\n\t\t\t\t\"return\": previousSearch['return']\n\t\t\t} );\n\n\t\t\t// Need to redraw, without resorting\n\t\t\tsettings._iDisplayStart = 0;\n\t\t\t_fnDraw( settings );\n\t\t}\n\t};\n\n\tvar searchDelay = settings.searchDelay !== null ?\n\t\tsettings.searchDelay :\n\t\t_fnDataSource( settings ) === 'ssp' ?\n\t\t\t400 :\n\t\t\t0;\n\n\tvar jqFilter = $('input', filter)\n\t\t.val( previousSearch.sSearch )\n\t\t.attr( 'placeholder', language.sSearchPlaceholder )\n\t\t.on(\n\t\t\t'keyup.DT search.DT input.DT paste.DT cut.DT',\n\t\t\tsearchDelay ?\n\t\t\t\t_fnThrottle( searchFn, searchDelay ) :\n\t\t\t\tsearchFn\n\t\t)\n\t\t.on( 'mouseup.DT', function(e) {\n\t\t\t// Edge fix! Edge 17 does not trigger anything other than mouse events when clicking\n\t\t\t// on the clear icon (Edge bug 17584515). This is safe in other browsers as `searchFn`\n\t\t\t// checks the value to see if it has changed. In other browsers it won't have.\n\t\t\tsetTimeout( function () {\n\t\t\t\tsearchFn.call(jqFilter[0], e);\n\t\t\t}, 10);\n\t\t} )\n\t\t.on( 'keypress.DT', function(e) {\n\t\t\t/* Prevent form submission */\n\t\t\tif ( e.keyCode == 13 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} )\n\t\t.attr('aria-controls', tableId);\n\n\t// Update the input elements whenever the table is filtered\n\t$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {\n\t\tif ( settings === s ) {\n\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t// inside an iframe or frame...\n\t\t\ttry {\n\t\t\t\tif ( jqFilter[0] !== document.activeElement ) {\n\t\t\t\t\tjqFilter.val( previousSearch.sSearch );\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch ( e ) {}\n\t\t}\n\t} );\n\n\treturn filter[0];\n}\n\n\n/**\n * Filter the table using both the global filter and column based filtering\n *  @param {object} oSettings dataTables settings object\n *  @param {object} oSearch search information\n *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)\n *  @memberof DataTable#oApi\n */\nfunction _fnFilterComplete ( oSettings, oInput, iForce )\n{\n\tvar oPrevSearch = oSettings.oPreviousSearch;\n\tvar aoPrevSearch = oSettings.aoPreSearchCols;\n\tvar fnSaveFilter = function ( oFilter ) {\n\t\t/* Save the filtering values */\n\t\toPrevSearch.sSearch = oFilter.sSearch;\n\t\toPrevSearch.bRegex = oFilter.bRegex;\n\t\toPrevSearch.bSmart = oFilter.bSmart;\n\t\toPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;\n\t\toPrevSearch['return'] = oFilter['return'];\n\t};\n\tvar fnRegex = function ( o ) {\n\t\t// Backwards compatibility with the bEscapeRegex option\n\t\treturn o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;\n\t};\n\n\t// Resolve any column types that are unknown due to addition or invalidation\n\t// @todo As per sort - can this be moved into an event handler?\n\t_fnColumnTypes( oSettings );\n\n\t/* In server-side processing all filtering is done by the server, so no point hanging around here */\n\tif ( _fnDataSource( oSettings ) != 'ssp' )\n\t{\n\t\t/* Global filter */\n\t\t_fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive );\n\t\tfnSaveFilter( oInput );\n\n\t\t/* Now do the individual column filter */\n\t\tfor ( var i=0 ; i<aoPrevSearch.length ; i++ )\n\t\t{\n\t\t\t_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]),\n\t\t\t\taoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );\n\t\t}\n\n\t\t/* Custom filtering */\n\t\t_fnFilterCustom( oSettings );\n\t}\n\telse\n\t{\n\t\tfnSaveFilter( oInput );\n\t}\n\n\t/* Tell the draw function we have been filtering */\n\toSettings.bFiltered = true;\n\t_fnCallbackFire( oSettings, null, 'search', [oSettings] );\n}\n\n\n/**\n * Apply custom filtering functions\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnFilterCustom( settings )\n{\n\tvar filters = DataTable.ext.search;\n\tvar displayRows = settings.aiDisplay;\n\tvar row, rowIdx;\n\n\tfor ( var i=0, ien=filters.length ; i<ien ; i++ ) {\n\t\tvar rows = [];\n\n\t\t// Loop over each row and see if it should be included\n\t\tfor ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {\n\t\t\trowIdx = displayRows[ j ];\n\t\t\trow = settings.aoData[ rowIdx ];\n\n\t\t\tif ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {\n\t\t\t\trows.push( rowIdx );\n\t\t\t}\n\t\t}\n\n\t\t// So the array reference doesn't break set the results into the\n\t\t// existing array\n\t\tdisplayRows.length = 0;\n\t\t$.merge( displayRows, rows );\n\t}\n}\n\n\n/**\n * Filter the table on a per-column basis\n *  @param {object} oSettings dataTables settings object\n *  @param {string} sInput string to filter on\n *  @param {int} iColumn column to filter\n *  @param {bool} bRegex treat search string as a regular expression or not\n *  @param {bool} bSmart use smart filtering or not\n *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n *  @memberof DataTable#oApi\n */\nfunction _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )\n{\n\tif ( searchStr === '' ) {\n\t\treturn;\n\t}\n\n\tvar data;\n\tvar out = [];\n\tvar display = settings.aiDisplay;\n\tvar rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );\n\n\tfor ( var i=0 ; i<display.length ; i++ ) {\n\t\tdata = settings.aoData[ display[i] ]._aFilterData[ colIdx ];\n\n\t\tif ( rpSearch.test( data ) ) {\n\t\t\tout.push( display[i] );\n\t\t}\n\t}\n\n\tsettings.aiDisplay = out;\n}\n\n\n/**\n * Filter the data table based on user input and draw the table\n *  @param {object} settings dataTables settings object\n *  @param {string} input string to filter on\n *  @param {int} force optional - force a research of the master array (1) or not (undefined or 0)\n *  @param {bool} regex treat as a regular expression or not\n *  @param {bool} smart perform smart filtering or not\n *  @param {bool} caseInsensitive Do case insensitive matching or not\n *  @memberof DataTable#oApi\n */\nfunction _fnFilter( settings, input, force, regex, smart, caseInsensitive )\n{\n\tvar rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );\n\tvar prevSearch = settings.oPreviousSearch.sSearch;\n\tvar displayMaster = settings.aiDisplayMaster;\n\tvar display, invalidated, i;\n\tvar filtered = [];\n\n\t// Need to take account of custom filtering functions - always filter\n\tif ( DataTable.ext.search.length !== 0 ) {\n\t\tforce = true;\n\t}\n\n\t// Check if any of the rows were invalidated\n\tinvalidated = _fnFilterData( settings );\n\n\t// If the input is blank - we just want the full data set\n\tif ( input.length <= 0 ) {\n\t\tsettings.aiDisplay = displayMaster.slice();\n\t}\n\telse {\n\t\t// New search - start from the master array\n\t\tif ( invalidated ||\n\t\t\t force ||\n\t\t\t regex ||\n\t\t\t prevSearch.length > input.length ||\n\t\t\t input.indexOf(prevSearch) !== 0 ||\n\t\t\t settings.bSorted // On resort, the display master needs to be\n\t\t\t                  // re-filtered since indexes will have changed\n\t\t) {\n\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t}\n\n\t\t// Search the display array\n\t\tdisplay = settings.aiDisplay;\n\n\t\tfor ( i=0 ; i<display.length ; i++ ) {\n\t\t\tif ( rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {\n\t\t\t\tfiltered.push( display[i] );\n\t\t\t}\n\t\t}\n\n\t\tsettings.aiDisplay = filtered;\n\t}\n}\n\n\n/**\n * Build a regular expression object suitable for searching a table\n *  @param {string} sSearch string to search for\n *  @param {bool} bRegex treat as a regular expression or not\n *  @param {bool} bSmart perform smart filtering or not\n *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n *  @returns {RegExp} constructed object\n *  @memberof DataTable#oApi\n */\nfunction _fnFilterCreateSearch( search, regex, smart, caseInsensitive )\n{\n\tsearch = regex ?\n\t\tsearch :\n\t\t_fnEscapeRegex( search );\n\t\n\tif ( smart ) {\n\t\t/* For smart filtering we want to allow the search to work regardless of\n\t\t * word order. We also want double quoted text to be preserved, so word\n\t\t * order is important - a la google. So this is what we want to\n\t\t * generate:\n\t\t * \n\t\t * ^(?=.*?\\bone\\b)(?=.*?\\btwo three\\b)(?=.*?\\bfour\\b).*$\n\t\t */\n\t\tvar a = $.map( search.match( /[\"\\u201C][^\"\\u201D]+[\"\\u201D]|[^ ]+/g ) || [''], function ( word ) {\n\t\t\tif ( word.charAt(0) === '\"' ) {\n\t\t\t\tvar m = word.match( /^\"(.*)\"$/ );\n\t\t\t\tword = m ? m[1] : word;\n\t\t\t}\n\t\t\telse if ( word.charAt(0) === '\\u201C' ) {\n\t\t\t\tvar m = word.match( /^\\u201C(.*)\\u201D$/ );\n\t\t\t\tword = m ? m[1] : word;\n\t\t\t}\n\n\t\t\treturn word.replace('\"', '');\n\t\t} );\n\n\t\tsearch = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';\n\t}\n\n\treturn new RegExp( search, caseInsensitive ? 'i' : '' );\n}\n\n\n/**\n * Escape a string such that it can be used in a regular expression\n *  @param {string} sVal string to escape\n *  @returns {string} escaped string\n *  @memberof DataTable#oApi\n */\nvar _fnEscapeRegex = DataTable.util.escapeRegex;\n\nvar __filter_div = $('<div>')[0];\nvar __filter_div_textContent = __filter_div.textContent !== undefined;\n\n// Update the filtering data for each row if needed (by invalidation or first run)\nfunction _fnFilterData ( settings )\n{\n\tvar columns = settings.aoColumns;\n\tvar column;\n\tvar i, j, ien, jen, filterData, cellData, row;\n\tvar wasInvalidated = false;\n\n\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\trow = settings.aoData[i];\n\n\t\tif ( ! row._aFilterData ) {\n\t\t\tfilterData = [];\n\n\t\t\tfor ( j=0, jen=columns.length ; j<jen ; j++ ) {\n\t\t\t\tcolumn = columns[j];\n\n\t\t\t\tif ( column.bSearchable ) {\n\t\t\t\t\tcellData = _fnGetCellData( settings, i, j, 'filter' );\n\n\t\t\t\t\t// Search in DataTables 1.10 is string based. In 1.11 this\n\t\t\t\t\t// should be altered to also allow strict type checking.\n\t\t\t\t\tif ( cellData === null ) {\n\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof cellData !== 'string' && cellData.toString ) {\n\t\t\t\t\t\tcellData = cellData.toString();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcellData = '';\n\t\t\t\t}\n\n\t\t\t\t// If it looks like there is an HTML entity in the string,\n\t\t\t\t// attempt to decode it so sorting works as expected. Note that\n\t\t\t\t// we could use a single line of jQuery to do this, but the DOM\n\t\t\t\t// method used here is much faster https://jsperf.com/html-decode\n\t\t\t\tif ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {\n\t\t\t\t\t__filter_div.innerHTML = cellData;\n\t\t\t\t\tcellData = __filter_div_textContent ?\n\t\t\t\t\t\t__filter_div.textContent :\n\t\t\t\t\t\t__filter_div.innerText;\n\t\t\t\t}\n\n\t\t\t\tif ( cellData.replace ) {\n\t\t\t\t\tcellData = cellData.replace(/[\\r\\n\\u2028]/g, '');\n\t\t\t\t}\n\n\t\t\t\tfilterData.push( cellData );\n\t\t\t}\n\n\t\t\trow._aFilterData = filterData;\n\t\t\trow._sFilterRow = filterData.join('  ');\n\t\t\twasInvalidated = true;\n\t\t}\n\t}\n\n\treturn wasInvalidated;\n}\n\n\n/**\n * Convert from the internal Hungarian notation to camelCase for external\n * interaction\n *  @param {object} obj Object to convert\n *  @returns {object} Inverted object\n *  @memberof DataTable#oApi\n */\nfunction _fnSearchToCamel ( obj )\n{\n\treturn {\n\t\tsearch:          obj.sSearch,\n\t\tsmart:           obj.bSmart,\n\t\tregex:           obj.bRegex,\n\t\tcaseInsensitive: obj.bCaseInsensitive\n\t};\n}\n\n\n\n/**\n * Convert from camelCase notation to the internal Hungarian. We could use the\n * Hungarian convert function here, but this is cleaner\n *  @param {object} obj Object to convert\n *  @returns {object} Inverted object\n *  @memberof DataTable#oApi\n */\nfunction _fnSearchToHung ( obj )\n{\n\treturn {\n\t\tsSearch:          obj.search,\n\t\tbSmart:           obj.smart,\n\t\tbRegex:           obj.regex,\n\t\tbCaseInsensitive: obj.caseInsensitive\n\t};\n}\n\n/**\n * Generate the node required for the info display\n *  @param {object} oSettings dataTables settings object\n *  @returns {node} Information element\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlInfo ( settings )\n{\n\tvar\n\t\ttid = settings.sTableId,\n\t\tnodes = settings.aanFeatures.i,\n\t\tn = $('<div/>', {\n\t\t\t'class': settings.oClasses.sInfo,\n\t\t\t'id': ! nodes ? tid+'_info' : null\n\t\t} );\n\n\tif ( ! nodes ) {\n\t\t// Update display on each draw\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": _fnUpdateInfo,\n\t\t\t\"sName\": \"information\"\n\t\t} );\n\n\t\tn\n\t\t\t.attr( 'role', 'status' )\n\t\t\t.attr( 'aria-live', 'polite' );\n\n\t\t// Table is described by our info div\n\t\t$(settings.nTable).attr( 'aria-describedby', tid+'_info' );\n\t}\n\n\treturn n[0];\n}\n\n\n/**\n * Update the information elements in the display\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnUpdateInfo ( settings )\n{\n\t/* Show information about the table */\n\tvar nodes = settings.aanFeatures.i;\n\tif ( nodes.length === 0 ) {\n\t\treturn;\n\t}\n\n\tvar\n\t\tlang  = settings.oLanguage,\n\t\tstart = settings._iDisplayStart+1,\n\t\tend   = settings.fnDisplayEnd(),\n\t\tmax   = settings.fnRecordsTotal(),\n\t\ttotal = settings.fnRecordsDisplay(),\n\t\tout   = total ?\n\t\t\tlang.sInfo :\n\t\t\tlang.sInfoEmpty;\n\n\tif ( total !== max ) {\n\t\t/* Record set after filtering */\n\t\tout += ' ' + lang.sInfoFiltered;\n\t}\n\n\t// Convert the macros\n\tout += lang.sInfoPostFix;\n\tout = _fnInfoMacros( settings, out );\n\n\tvar callback = lang.fnInfoCallback;\n\tif ( callback !== null ) {\n\t\tout = callback.call( settings.oInstance,\n\t\t\tsettings, start, end, max, total, out\n\t\t);\n\t}\n\n\t$(nodes).html( out );\n}\n\n\nfunction _fnInfoMacros ( settings, str )\n{\n\t// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only\n\t// internally\n\tvar\n\t\tformatter  = settings.fnFormatNumber,\n\t\tstart      = settings._iDisplayStart+1,\n\t\tlen        = settings._iDisplayLength,\n\t\tvis        = settings.fnRecordsDisplay(),\n\t\tall        = len === -1;\n\n\treturn str.\n\t\treplace(/_START_/g, formatter.call( settings, start ) ).\n\t\treplace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).\n\t\treplace(/_MAX_/g,   formatter.call( settings, settings.fnRecordsTotal() ) ).\n\t\treplace(/_TOTAL_/g, formatter.call( settings, vis ) ).\n\t\treplace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).\n\t\treplace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );\n}\n\n\n\n/**\n * Draw the table for the first time, adding all required features\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnInitialise ( settings )\n{\n\tvar i, iLen, iAjaxStart=settings.iInitDisplayStart;\n\tvar columns = settings.aoColumns, column;\n\tvar features = settings.oFeatures;\n\tvar deferLoading = settings.bDeferLoading; // value modified by the draw\n\n\t/* Ensure that the table data is fully initialised */\n\tif ( ! settings.bInitialised ) {\n\t\tsetTimeout( function(){ _fnInitialise( settings ); }, 200 );\n\t\treturn;\n\t}\n\n\t/* Show the display HTML options */\n\t_fnAddOptionsHtml( settings );\n\n\t/* Build and draw the header / footer for the table */\n\t_fnBuildHead( settings );\n\t_fnDrawHead( settings, settings.aoHeader );\n\t_fnDrawHead( settings, settings.aoFooter );\n\n\t/* Okay to show that something is going on now */\n\t_fnProcessingDisplay( settings, true );\n\n\t/* Calculate sizes for columns */\n\tif ( features.bAutoWidth ) {\n\t\t_fnCalculateColumnWidths( settings );\n\t}\n\n\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\tcolumn = columns[i];\n\n\t\tif ( column.sWidth ) {\n\t\t\tcolumn.nTh.style.width = _fnStringToCss( column.sWidth );\n\t\t}\n\t}\n\n\t_fnCallbackFire( settings, null, 'preInit', [settings] );\n\n\t// If there is default sorting required - let's do it. The sort function\n\t// will do the drawing for us. Otherwise we draw the table regardless of the\n\t// Ajax source - this allows the table to look initialised for Ajax sourcing\n\t// data (show 'loading' message possibly)\n\t_fnReDraw( settings );\n\n\t// Server-side processing init complete is done by _fnAjaxUpdateDraw\n\tvar dataSrc = _fnDataSource( settings );\n\tif ( dataSrc != 'ssp' || deferLoading ) {\n\t\t// if there is an ajax source load the data\n\t\tif ( dataSrc == 'ajax' ) {\n\t\t\t_fnBuildAjax( settings, [], function(json) {\n\t\t\t\tvar aData = _fnAjaxDataSrc( settings, json );\n\n\t\t\t\t// Got the data - add it to the table\n\t\t\t\tfor ( i=0 ; i<aData.length ; i++ ) {\n\t\t\t\t\t_fnAddData( settings, aData[i] );\n\t\t\t\t}\n\n\t\t\t\t// Reset the init display for cookie saving. We've already done\n\t\t\t\t// a filter, and therefore cleared it before. So we need to make\n\t\t\t\t// it appear 'fresh'\n\t\t\t\tsettings.iInitDisplayStart = iAjaxStart;\n\n\t\t\t\t_fnReDraw( settings );\n\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t_fnInitComplete( settings, json );\n\t\t\t}, settings );\n\t\t}\n\t\telse {\n\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t_fnInitComplete( settings );\n\t\t}\n\t}\n}\n\n\n/**\n * Draw the table for the first time, adding all required features\n *  @param {object} oSettings dataTables settings object\n *  @param {object} [json] JSON from the server that completed the table, if using Ajax source\n *    with client-side processing (optional)\n *  @memberof DataTable#oApi\n */\nfunction _fnInitComplete ( settings, json )\n{\n\tsettings._bInitComplete = true;\n\n\t// When data was added after the initialisation (data or Ajax) we need to\n\t// calculate the column sizing\n\tif ( json || settings.oInit.aaData ) {\n\t\t_fnAdjustColumnSizing( settings );\n\t}\n\n\t_fnCallbackFire( settings, null, 'plugin-init', [settings, json] );\n\t_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );\n}\n\n\nfunction _fnLengthChange ( settings, val )\n{\n\tvar len = parseInt( val, 10 );\n\tsettings._iDisplayLength = len;\n\n\t_fnLengthOverflow( settings );\n\n\t// Fire length change event\n\t_fnCallbackFire( settings, null, 'length', [settings, len] );\n}\n\n\n/**\n * Generate the node required for user display length changing\n *  @param {object} settings dataTables settings object\n *  @returns {node} Display length feature node\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlLength ( settings )\n{\n\tvar\n\t\tclasses  = settings.oClasses,\n\t\ttableId  = settings.sTableId,\n\t\tmenu     = settings.aLengthMenu,\n\t\td2       = Array.isArray( menu[0] ),\n\t\tlengths  = d2 ? menu[0] : menu,\n\t\tlanguage = d2 ? menu[1] : menu;\n\n\tvar select = $('<select/>', {\n\t\t'name':          tableId+'_length',\n\t\t'aria-controls': tableId,\n\t\t'class':         classes.sLengthSelect\n\t} );\n\n\tfor ( var i=0, ien=lengths.length ; i<ien ; i++ ) {\n\t\tselect[0][ i ] = new Option(\n\t\t\ttypeof language[i] === 'number' ?\n\t\t\t\tsettings.fnFormatNumber( language[i] ) :\n\t\t\t\tlanguage[i],\n\t\t\tlengths[i]\n\t\t);\n\t}\n\n\tvar div = $('<div><label/></div>').addClass( classes.sLength );\n\tif ( ! settings.aanFeatures.l ) {\n\t\tdiv[0].id = tableId+'_length';\n\t}\n\n\tdiv.children().append(\n\t\tsettings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )\n\t);\n\n\t// Can't use `select` variable as user might provide their own and the\n\t// reference is broken by the use of outerHTML\n\t$('select', div)\n\t\t.val( settings._iDisplayLength )\n\t\t.on( 'change.DT', function(e) {\n\t\t\t_fnLengthChange( settings, $(this).val() );\n\t\t\t_fnDraw( settings );\n\t\t} );\n\n\t// Update node value whenever anything changes the table's length\n\t$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {\n\t\tif ( settings === s ) {\n\t\t\t$('select', div).val( len );\n\t\t}\n\t} );\n\n\treturn div[0];\n}\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Note that most of the paging logic is done in\n * DataTable.ext.pager\n */\n\n/**\n * Generate the node required for default pagination\n *  @param {object} oSettings dataTables settings object\n *  @returns {node} Pagination feature node\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlPaginate ( settings )\n{\n\tvar\n\t\ttype   = settings.sPaginationType,\n\t\tplugin = DataTable.ext.pager[ type ],\n\t\tmodern = typeof plugin === 'function',\n\t\tredraw = function( settings ) {\n\t\t\t_fnDraw( settings );\n\t\t},\n\t\tnode = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],\n\t\tfeatures = settings.aanFeatures;\n\n\tif ( ! modern ) {\n\t\tplugin.fnInit( settings, node, redraw );\n\t}\n\n\t/* Add a draw callback for the pagination on first instance, to update the paging display */\n\tif ( ! features.p )\n\t{\n\t\tnode.id = settings.sTableId+'_paginate';\n\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": function( settings ) {\n\t\t\t\tif ( modern ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tstart      = settings._iDisplayStart,\n\t\t\t\t\t\tlen        = settings._iDisplayLength,\n\t\t\t\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\t\t\t\tall        = len === -1,\n\t\t\t\t\t\tpage = all ? 0 : Math.ceil( start / len ),\n\t\t\t\t\t\tpages = all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\t\t\tbuttons = plugin(page, pages),\n\t\t\t\t\t\ti, ien;\n\n\t\t\t\t\tfor ( i=0, ien=features.p.length ; i<ien ; i++ ) {\n\t\t\t\t\t\t_fnRenderer( settings, 'pageButton' )(\n\t\t\t\t\t\t\tsettings, features.p[i], i, buttons, page, pages\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tplugin.fnUpdate( settings, redraw );\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"sName\": \"pagination\"\n\t\t} );\n\t}\n\n\treturn node;\n}\n\n\n/**\n * Alter the display settings to change the page\n *  @param {object} settings DataTables settings object\n *  @param {string|int} action Paging action to take: \"first\", \"previous\",\n *    \"next\" or \"last\" or page number to jump to (integer)\n *  @param [bool] redraw Automatically draw the update or not\n *  @returns {bool} true page has changed, false - no change\n *  @memberof DataTable#oApi\n */\nfunction _fnPageChange ( settings, action, redraw )\n{\n\tvar\n\t\tstart     = settings._iDisplayStart,\n\t\tlen       = settings._iDisplayLength,\n\t\trecords   = settings.fnRecordsDisplay();\n\n\tif ( records === 0 || len === -1 )\n\t{\n\t\tstart = 0;\n\t}\n\telse if ( typeof action === \"number\" )\n\t{\n\t\tstart = action * len;\n\n\t\tif ( start > records )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t}\n\telse if ( action == \"first\" )\n\t{\n\t\tstart = 0;\n\t}\n\telse if ( action == \"previous\" )\n\t{\n\t\tstart = len >= 0 ?\n\t\t\tstart - len :\n\t\t\t0;\n\n\t\tif ( start < 0 )\n\t\t{\n\t\t  start = 0;\n\t\t}\n\t}\n\telse if ( action == \"next\" )\n\t{\n\t\tif ( start + len < records )\n\t\t{\n\t\t\tstart += len;\n\t\t}\n\t}\n\telse if ( action == \"last\" )\n\t{\n\t\tstart = Math.floor( (records-1) / len) * len;\n\t}\n\telse\n\t{\n\t\t_fnLog( settings, 0, \"Unknown paging action: \"+action, 5 );\n\t}\n\n\tvar changed = settings._iDisplayStart !== start;\n\tsettings._iDisplayStart = start;\n\n\tif ( changed ) {\n\t\t_fnCallbackFire( settings, null, 'page', [settings] );\n\n\t\tif ( redraw ) {\n\t\t\t_fnDraw( settings );\n\t\t}\n\t}\n\telse {\n\t\t// No change event - paging was called, but no change\n\t\t_fnCallbackFire( settings, null, 'page-nc', [settings] );\n\t}\n\n\treturn changed;\n}\n\n\n\n/**\n * Generate the node required for the processing node\n *  @param {object} settings dataTables settings object\n *  @returns {node} Processing element\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlProcessing ( settings )\n{\n\treturn $('<div/>', {\n\t\t\t'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,\n\t\t\t'class': settings.oClasses.sProcessing,\n\t\t\t'role': 'status'\n\t\t} )\n\t\t.html( settings.oLanguage.sProcessing )\n\t\t.append('<div><div></div><div></div><div></div><div></div></div>')\n\t\t.insertBefore( settings.nTable )[0];\n}\n\n\n/**\n * Display or hide the processing indicator\n *  @param {object} settings dataTables settings object\n *  @param {bool} show Show the processing indicator (true) or not (false)\n *  @memberof DataTable#oApi\n */\nfunction _fnProcessingDisplay ( settings, show )\n{\n\tif ( settings.oFeatures.bProcessing ) {\n\t\t$(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );\n\t}\n\n\t_fnCallbackFire( settings, null, 'processing', [settings, show] );\n}\n\n/**\n * Add any control elements for the table - specifically scrolling\n *  @param {object} settings dataTables settings object\n *  @returns {node} Node to add to the DOM\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlTable ( settings )\n{\n\tvar table = $(settings.nTable);\n\n\t// Scrolling from here on in\n\tvar scroll = settings.oScroll;\n\n\tif ( scroll.sX === '' && scroll.sY === '' ) {\n\t\treturn settings.nTable;\n\t}\n\n\tvar scrollX = scroll.sX;\n\tvar scrollY = scroll.sY;\n\tvar classes = settings.oClasses;\n\tvar caption = table.children('caption');\n\tvar captionSide = caption.length ? caption[0]._captionSide : null;\n\tvar headerClone = $( table[0].cloneNode(false) );\n\tvar footerClone = $( table[0].cloneNode(false) );\n\tvar footer = table.children('tfoot');\n\tvar _div = '<div/>';\n\tvar size = function ( s ) {\n\t\treturn !s ? null : _fnStringToCss( s );\n\t};\n\n\tif ( ! footer.length ) {\n\t\tfooter = null;\n\t}\n\n\t/*\n\t * The HTML structure that we want to generate in this function is:\n\t *  div - scroller\n\t *    div - scroll head\n\t *      div - scroll head inner\n\t *        table - scroll head table\n\t *          thead - thead\n\t *    div - scroll body\n\t *      table - table (master table)\n\t *        thead - thead clone for sizing\n\t *        tbody - tbody\n\t *    div - scroll foot\n\t *      div - scroll foot inner\n\t *        table - scroll foot table\n\t *          tfoot - tfoot\n\t */\n\tvar scroller = $( _div, { 'class': classes.sScrollWrapper } )\n\t\t.append(\n\t\t\t$(_div, { 'class': classes.sScrollHead } )\n\t\t\t\t.css( {\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\tborder: 0,\n\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$(_div, { 'class': classes.sScrollHeadInner } )\n\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t'box-sizing': 'content-box',\n\t\t\t\t\t\t\twidth: scroll.sXInner || '100%'\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\theaderClone\n\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t.append( captionSide === 'top' ? caption : null )\n\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\ttable.children('thead')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t)\n\t\t.append(\n\t\t\t$(_div, { 'class': classes.sScrollBody } )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\twidth: size( scrollX )\n\t\t\t\t} )\n\t\t\t\t.append( table )\n\t\t);\n\n\tif ( footer ) {\n\t\tscroller.append(\n\t\t\t$(_div, { 'class': classes.sScrollFoot } )\n\t\t\t\t.css( {\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\tborder: 0,\n\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$(_div, { 'class': classes.sScrollFootInner } )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\tfooterClone\n\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t.append( captionSide === 'bottom' ? caption : null )\n\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\ttable.children('tfoot')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t);\n\t}\n\n\tvar children = scroller.children();\n\tvar scrollHead = children[0];\n\tvar scrollBody = children[1];\n\tvar scrollFoot = footer ? children[2] : null;\n\n\t// When the body is scrolled, then we also want to scroll the headers\n\tif ( scrollX ) {\n\t\t$(scrollBody).on( 'scroll.DT', function (e) {\n\t\t\tvar scrollLeft = this.scrollLeft;\n\n\t\t\tscrollHead.scrollLeft = scrollLeft;\n\n\t\t\tif ( footer ) {\n\t\t\t\tscrollFoot.scrollLeft = scrollLeft;\n\t\t\t}\n\t\t} );\n\t}\n\n\t$(scrollBody).css('max-height', scrollY);\n\tif (! scroll.bCollapse) {\n\t\t$(scrollBody).css('height', scrollY);\n\t}\n\n\tsettings.nScrollHead = scrollHead;\n\tsettings.nScrollBody = scrollBody;\n\tsettings.nScrollFoot = scrollFoot;\n\n\t// On redraw - align columns\n\tsettings.aoDrawCallback.push( {\n\t\t\"fn\": _fnScrollDraw,\n\t\t\"sName\": \"scrolling\"\n\t} );\n\n\treturn scroller[0];\n}\n\n\n\n/**\n * Update the header, footer and body tables for resizing - i.e. column\n * alignment.\n *\n * Welcome to the most horrible function DataTables. The process that this\n * function follows is basically:\n *   1. Re-create the table inside the scrolling div\n *   2. Take live measurements from the DOM\n *   3. Apply the measurements to align the columns\n *   4. Clean up\n *\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnScrollDraw ( settings )\n{\n\t// Given that this is such a monster function, a lot of variables are use\n\t// to try and keep the minimised size as small as possible\n\tvar\n\t\tscroll         = settings.oScroll,\n\t\tscrollX        = scroll.sX,\n\t\tscrollXInner   = scroll.sXInner,\n\t\tscrollY        = scroll.sY,\n\t\tbarWidth       = scroll.iBarWidth,\n\t\tdivHeader      = $(settings.nScrollHead),\n\t\tdivHeaderStyle = divHeader[0].style,\n\t\tdivHeaderInner = divHeader.children('div'),\n\t\tdivHeaderInnerStyle = divHeaderInner[0].style,\n\t\tdivHeaderTable = divHeaderInner.children('table'),\n\t\tdivBodyEl      = settings.nScrollBody,\n\t\tdivBody        = $(divBodyEl),\n\t\tdivBodyStyle   = divBodyEl.style,\n\t\tdivFooter      = $(settings.nScrollFoot),\n\t\tdivFooterInner = divFooter.children('div'),\n\t\tdivFooterTable = divFooterInner.children('table'),\n\t\theader         = $(settings.nTHead),\n\t\ttable          = $(settings.nTable),\n\t\ttableEl        = table[0],\n\t\ttableStyle     = tableEl.style,\n\t\tfooter         = settings.nTFoot ? $(settings.nTFoot) : null,\n\t\tbrowser        = settings.oBrowser,\n\t\tie67           = browser.bScrollOversize,\n\t\tdtHeaderCells  = _pluck( settings.aoColumns, 'nTh' ),\n\t\theaderTrgEls, footerTrgEls,\n\t\theaderSrcEls, footerSrcEls,\n\t\theaderCopy, footerCopy,\n\t\theaderWidths=[], footerWidths=[],\n\t\theaderContent=[], footerContent=[],\n\t\tidx, correction, sanityWidth,\n\t\tzeroOut = function(nSizer) {\n\t\t\tvar style = nSizer.style;\n\t\t\tstyle.paddingTop = \"0\";\n\t\t\tstyle.paddingBottom = \"0\";\n\t\t\tstyle.borderTopWidth = \"0\";\n\t\t\tstyle.borderBottomWidth = \"0\";\n\t\t\tstyle.height = 0;\n\t\t};\n\n\t// If the scrollbar visibility has changed from the last draw, we need to\n\t// adjust the column sizes as the table width will have changed to account\n\t// for the scrollbar\n\tvar scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;\n\t\n\tif ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {\n\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t_fnAdjustColumnSizing( settings );\n\t\treturn; // adjust column sizing will call this function again\n\t}\n\telse {\n\t\tsettings.scrollBarVis = scrollBarVis;\n\t}\n\n\t/*\n\t * 1. Re-create the table inside the scrolling div\n\t */\n\n\t// Remove the old minimised thead and tfoot elements in the inner table\n\ttable.children('thead, tfoot').remove();\n\n\tif ( footer ) {\n\t\tfooterCopy = footer.clone().prependTo( table );\n\t\tfooterTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized\n\t\tfooterSrcEls = footerCopy.find('tr');\n\t\tfooterCopy.find('[id]').removeAttr('id');\n\t}\n\n\t// Clone the current header and footer elements and then place it into the inner table\n\theaderCopy = header.clone().prependTo( table );\n\theaderTrgEls = header.find('tr'); // original header is in its own table\n\theaderSrcEls = headerCopy.find('tr');\n\theaderCopy.find('th, td').removeAttr('tabindex');\n\theaderCopy.find('[id]').removeAttr('id');\n\n\n\t/*\n\t * 2. Take live measurements from the DOM - do not alter the DOM itself!\n\t */\n\n\t// Remove old sizing and apply the calculated column widths\n\t// Get the unique column headers in the newly created (cloned) header. We want to apply the\n\t// calculated sizes to this header\n\tif ( ! scrollX )\n\t{\n\t\tdivBodyStyle.width = '100%';\n\t\tdivHeader[0].style.width = '100%';\n\t}\n\n\t$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {\n\t\tidx = _fnVisibleToColumnIndex( settings, i );\n\t\tel.style.width = settings.aoColumns[idx].sWidth;\n\t} );\n\n\tif ( footer ) {\n\t\t_fnApplyToChildren( function(n) {\n\t\t\tn.style.width = \"\";\n\t\t}, footerSrcEls );\n\t}\n\n\t// Size the table as a whole\n\tsanityWidth = table.outerWidth();\n\tif ( scrollX === \"\" ) {\n\t\t// No x scrolling\n\t\ttableStyle.width = \"100%\";\n\n\t\t// IE7 will make the width of the table when 100% include the scrollbar\n\t\t// - which is shouldn't. When there is a scrollbar we need to take this\n\t\t// into account.\n\t\tif ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||\n\t\t\tdivBody.css('overflow-y') == \"scroll\")\n\t\t) {\n\t\t\ttableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);\n\t\t}\n\n\t\t// Recalculate the sanity width\n\t\tsanityWidth = table.outerWidth();\n\t}\n\telse if ( scrollXInner !== \"\" ) {\n\t\t// legacy x scroll inner has been given - use it\n\t\ttableStyle.width = _fnStringToCss(scrollXInner);\n\n\t\t// Recalculate the sanity width\n\t\tsanityWidth = table.outerWidth();\n\t}\n\n\t// Hidden header should have zero height, so remove padding and borders. Then\n\t// set the width based on the real headers\n\n\t// Apply all styles in one pass\n\t_fnApplyToChildren( zeroOut, headerSrcEls );\n\n\t// Read all widths in next pass\n\t_fnApplyToChildren( function(nSizer) {\n\t\tvar style = window.getComputedStyle ?\n\t\t\twindow.getComputedStyle(nSizer).width :\n\t\t\t_fnStringToCss( $(nSizer).width() );\n\n\t\theaderContent.push( nSizer.innerHTML );\n\t\theaderWidths.push( style );\n\t}, headerSrcEls );\n\n\t// Apply all widths in final pass\n\t_fnApplyToChildren( function(nToSize, i) {\n\t\tnToSize.style.width = headerWidths[i];\n\t}, headerTrgEls );\n\n\t$(headerSrcEls).css('height', 0);\n\n\t/* Same again with the footer if we have one */\n\tif ( footer )\n\t{\n\t\t_fnApplyToChildren( zeroOut, footerSrcEls );\n\n\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\tfooterContent.push( nSizer.innerHTML );\n\t\t\tfooterWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t}, footerSrcEls );\n\n\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\tnToSize.style.width = footerWidths[i];\n\t\t}, footerTrgEls );\n\n\t\t$(footerSrcEls).height(0);\n\t}\n\n\n\t/*\n\t * 3. Apply the measurements\n\t */\n\n\t// \"Hide\" the header and footer that we used for the sizing. We need to keep\n\t// the content of the cell so that the width applied to the header and body\n\t// both match, but we want to hide it completely. We want to also fix their\n\t// width to what they currently are\n\t_fnApplyToChildren( function(nSizer, i) {\n\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+headerContent[i]+'</div>';\n\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\tnSizer.style.width = headerWidths[i];\n\t}, headerSrcEls );\n\n\tif ( footer )\n\t{\n\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+footerContent[i]+'</div>';\n\t\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\t\tnSizer.style.width = footerWidths[i];\n\t\t}, footerSrcEls );\n\t}\n\n\t// Sanity check that the table is of a sensible width. If not then we are going to get\n\t// misalignment - try to prevent this by not allowing the table to shrink below its min width\n\tif ( Math.round(table.outerWidth()) < Math.round(sanityWidth) )\n\t{\n\t\t// The min width depends upon if we have a vertical scrollbar visible or not */\n\t\tcorrection = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||\n\t\t\tdivBody.css('overflow-y') == \"scroll\")) ?\n\t\t\t\tsanityWidth+barWidth :\n\t\t\t\tsanityWidth;\n\n\t\t// IE6/7 are a law unto themselves...\n\t\tif ( ie67 && (divBodyEl.scrollHeight >\n\t\t\tdivBodyEl.offsetHeight || divBody.css('overflow-y') == \"scroll\")\n\t\t) {\n\t\t\ttableStyle.width = _fnStringToCss( correction-barWidth );\n\t\t}\n\n\t\t// And give the user a warning that we've stopped the table getting too small\n\t\tif ( scrollX === \"\" || scrollXInner !== \"\" ) {\n\t\t\t_fnLog( settings, 1, 'Possible column misalignment', 6 );\n\t\t}\n\t}\n\telse\n\t{\n\t\tcorrection = '100%';\n\t}\n\n\t// Apply to the container elements\n\tdivBodyStyle.width = _fnStringToCss( correction );\n\tdivHeaderStyle.width = _fnStringToCss( correction );\n\n\tif ( footer ) {\n\t\tsettings.nScrollFoot.style.width = _fnStringToCss( correction );\n\t}\n\n\n\t/*\n\t * 4. Clean up\n\t */\n\tif ( ! scrollY ) {\n\t\t/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting\n\t\t * the scrollbar height from the visible display, rather than adding it on. We need to\n\t\t * set the height in order to sort this. Don't want to do it in any other browsers.\n\t\t */\n\t\tif ( ie67 ) {\n\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );\n\t\t}\n\t}\n\n\t/* Finally set the width's of the header and footer tables */\n\tvar iOuterWidth = table.outerWidth();\n\tdivHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );\n\tdivHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );\n\n\t// Figure out if there are scrollbar present - if so then we need a the header and footer to\n\t// provide a bit more space to allow \"overflow\" scrolling (i.e. past the scrollbar)\n\tvar bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == \"scroll\";\n\tvar padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );\n\tdivHeaderInnerStyle[ padding ] = bScrolling ? barWidth+\"px\" : \"0px\";\n\n\tif ( footer ) {\n\t\tdivFooterTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivFooterInner[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivFooterInner[0].style[padding] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t}\n\n\t// Correct DOM ordering for colgroup - comes before the thead\n\ttable.children('colgroup').insertBefore( table.children('thead') );\n\n\t/* Adjust the position of the header in case we loose the y-scrollbar */\n\tdivBody.trigger('scroll');\n\n\t// If sorting or filtering has occurred, jump the scrolling back to the top\n\t// only if we aren't holding the position\n\tif ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {\n\t\tdivBodyEl.scrollTop = 0;\n\t}\n}\n\n\n\n/**\n * Apply a given function to the display child nodes of an element array (typically\n * TD children of TR rows\n *  @param {function} fn Method to apply to the objects\n *  @param array {nodes} an1 List of elements to look through for display children\n *  @param array {nodes} an2 Another list (identical structure to the first) - optional\n *  @memberof DataTable#oApi\n */\nfunction _fnApplyToChildren( fn, an1, an2 )\n{\n\tvar index=0, i=0, iLen=an1.length;\n\tvar nNode1, nNode2;\n\n\twhile ( i < iLen ) {\n\t\tnNode1 = an1[i].firstChild;\n\t\tnNode2 = an2 ? an2[i].firstChild : null;\n\n\t\twhile ( nNode1 ) {\n\t\t\tif ( nNode1.nodeType === 1 ) {\n\t\t\t\tif ( an2 ) {\n\t\t\t\t\tfn( nNode1, nNode2, index );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfn( nNode1, index );\n\t\t\t\t}\n\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\tnNode1 = nNode1.nextSibling;\n\t\t\tnNode2 = an2 ? nNode2.nextSibling : null;\n\t\t}\n\n\t\ti++;\n\t}\n}\n\n\n\nvar __re_html_remove = /<.*?>/g;\n\n\n/**\n * Calculate the width of columns for the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnCalculateColumnWidths ( oSettings )\n{\n\tvar\n\t\ttable = oSettings.nTable,\n\t\tcolumns = oSettings.aoColumns,\n\t\tscroll = oSettings.oScroll,\n\t\tscrollY = scroll.sY,\n\t\tscrollX = scroll.sX,\n\t\tscrollXInner = scroll.sXInner,\n\t\tcolumnCount = columns.length,\n\t\tvisibleColumns = _fnGetColumns( oSettings, 'bVisible' ),\n\t\theaderCells = $('th', oSettings.nTHead),\n\t\ttableWidthAttr = table.getAttribute('width'), // from DOM element\n\t\ttableContainer = table.parentNode,\n\t\tuserInputs = false,\n\t\ti, column, columnIdx, width, outerWidth,\n\t\tbrowser = oSettings.oBrowser,\n\t\tie67 = browser.bScrollOversize;\n\n\tvar styleWidth = table.style.width;\n\tif ( styleWidth && styleWidth.indexOf('%') !== -1 ) {\n\t\ttableWidthAttr = styleWidth;\n\t}\n\n\t/* Convert any user input sizes into pixel sizes */\n\tvar sizes = _fnConvertToWidth(_pluck(columns, 'sWidthOrig'), tableContainer);\n\n\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\tcolumn = columns[ visibleColumns[i] ];\n\n\t\tif ( column.sWidth !== null ) {\n\t\t\tcolumn.sWidth = sizes[i];\n\n\t\t\tuserInputs = true;\n\t\t}\n\t}\n\n\t/* If the number of columns in the DOM equals the number that we have to\n\t * process in DataTables, then we can use the offsets that are created by\n\t * the web- browser. No custom sizes can be set in order for this to happen,\n\t * nor scrolling used\n\t */\n\tif ( ie67 || ! userInputs && ! scrollX && ! scrollY &&\n\t     columnCount == _fnVisbleColumns( oSettings ) &&\n\t     columnCount == headerCells.length\n\t) {\n\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\tvar colIdx = _fnVisibleToColumnIndex( oSettings, i );\n\n\t\t\tif ( colIdx !== null ) {\n\t\t\t\tcolumns[ colIdx ].sWidth = _fnStringToCss( headerCells.eq(i).width() );\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\t\t// Otherwise construct a single row, worst case, table with the widest\n\t\t// node in the data, assign any user defined widths, then insert it into\n\t\t// the DOM and allow the browser to do all the hard work of calculating\n\t\t// table widths\n\t\tvar tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table\n\t\t\t.css( 'visibility', 'hidden' )\n\t\t\t.removeAttr( 'id' );\n\n\t\t// Clean up the table body\n\t\ttmpTable.find('tbody tr').remove();\n\t\tvar tr = $('<tr/>').appendTo( tmpTable.find('tbody') );\n\n\t\t// Clone the table header and footer - we can't use the header / footer\n\t\t// from the cloned table, since if scrolling is active, the table's\n\t\t// real header and footer are contained in different table tags\n\t\ttmpTable.find('thead, tfoot').remove();\n\t\ttmpTable\n\t\t\t.append( $(oSettings.nTHead).clone() )\n\t\t\t.append( $(oSettings.nTFoot).clone() );\n\n\t\t// Remove any assigned widths from the footer (from scrolling)\n\t\ttmpTable.find('tfoot th, tfoot td').css('width', '');\n\n\t\t// Apply custom sizing to the cloned header\n\t\theaderCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );\n\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tcolumn = columns[ visibleColumns[i] ];\n\n\t\t\theaderCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?\n\t\t\t\t_fnStringToCss( column.sWidthOrig ) :\n\t\t\t\t'';\n\n\t\t\t// For scrollX we need to force the column width otherwise the\n\t\t\t// browser will collapse it. If this width is smaller than the\n\t\t\t// width the column requires, then it will have no effect\n\t\t\tif ( column.sWidthOrig && scrollX ) {\n\t\t\t\t$( headerCells[i] ).append( $('<div/>').css( {\n\t\t\t\t\twidth: column.sWidthOrig,\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tborder: 0,\n\t\t\t\t\theight: 1\n\t\t\t\t} ) );\n\t\t\t}\n\t\t}\n\n\t\t// Find the widest cell for each column and put it into the table\n\t\tif ( oSettings.aoData.length ) {\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumnIdx = visibleColumns[i];\n\t\t\t\tcolumn = columns[ columnIdx ];\n\n\t\t\t\t$( _fnGetWidestNode( oSettings, columnIdx ) )\n\t\t\t\t\t.clone( false )\n\t\t\t\t\t.append( column.sContentPadding )\n\t\t\t\t\t.appendTo( tr );\n\t\t\t}\n\t\t}\n\n\t\t// Tidy the temporary table - remove name attributes so there aren't\n\t\t// duplicated in the dom (radio elements for example)\n\t\t$('[name]', tmpTable).removeAttr('name');\n\n\t\t// Table has been built, attach to the document so we can work with it.\n\t\t// A holding element is used, positioned at the top of the container\n\t\t// with minimal height, so it has no effect on if the container scrolls\n\t\t// or not. Otherwise it might trigger scrolling when it actually isn't\n\t\t// needed\n\t\tvar holder = $('<div/>').css( scrollX || scrollY ?\n\t\t\t\t{\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\theight: 1,\n\t\t\t\t\tright: 0,\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t} :\n\t\t\t\t{}\n\t\t\t)\n\t\t\t.append( tmpTable )\n\t\t\t.appendTo( tableContainer );\n\n\t\t// When scrolling (X or Y) we want to set the width of the table as \n\t\t// appropriate. However, when not scrolling leave the table width as it\n\t\t// is. This results in slightly different, but I think correct behaviour\n\t\tif ( scrollX && scrollXInner ) {\n\t\t\ttmpTable.width( scrollXInner );\n\t\t}\n\t\telse if ( scrollX ) {\n\t\t\ttmpTable.css( 'width', 'auto' );\n\t\t\ttmpTable.removeAttr('width');\n\n\t\t\t// If there is no width attribute or style, then allow the table to\n\t\t\t// collapse\n\t\t\tif ( tmpTable.width() < tableContainer.clientWidth && tableWidthAttr ) {\n\t\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t\t}\n\t\t}\n\t\telse if ( scrollY ) {\n\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t}\n\t\telse if ( tableWidthAttr ) {\n\t\t\ttmpTable.width( tableWidthAttr );\n\t\t}\n\n\t\t// Get the width of each column in the constructed table - we need to\n\t\t// know the inner width (so it can be assigned to the other table's\n\t\t// cells) and the outer width so we can calculate the full width of the\n\t\t// table. This is safe since DataTables requires a unique cell for each\n\t\t// column, but if ever a header can span multiple columns, this will\n\t\t// need to be modified.\n\t\tvar total = 0;\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tvar cell = $(headerCells[i]);\n\t\t\tvar border = cell.outerWidth() - cell.width();\n\n\t\t\t// Use getBounding... where possible (not IE8-) because it can give\n\t\t\t// sub-pixel accuracy, which we then want to round up!\n\t\t\tvar bounding = browser.bBounding ?\n\t\t\t\tMath.ceil( headerCells[i].getBoundingClientRect().width ) :\n\t\t\t\tcell.outerWidth();\n\n\t\t\t// Total is tracked to remove any sub-pixel errors as the outerWidth\n\t\t\t// of the table might not equal the total given here (IE!).\n\t\t\ttotal += bounding;\n\n\t\t\t// Width for each column to use\n\t\t\tcolumns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding - border );\n\t\t}\n\n\t\ttable.style.width = _fnStringToCss( total );\n\n\t\t// Finished with the table - ditch it\n\t\tholder.remove();\n\t}\n\n\t// If there is a width attr, we want to attach an event listener which\n\t// allows the table sizing to automatically adjust when the window is\n\t// resized. Use the width attr rather than CSS, since we can't know if the\n\t// CSS is a relative value or absolute - DOM read is always px.\n\tif ( tableWidthAttr ) {\n\t\ttable.style.width = _fnStringToCss( tableWidthAttr );\n\t}\n\n\tif ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {\n\t\tvar bindResize = function () {\n\t\t\t$(window).on('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {\n\t\t\t\t_fnAdjustColumnSizing( oSettings );\n\t\t\t} ) );\n\t\t};\n\n\t\t// IE6/7 will crash if we bind a resize event handler on page load.\n\t\t// To be removed in 1.11 which drops IE6/7 support\n\t\tif ( ie67 ) {\n\t\t\tsetTimeout( bindResize, 1000 );\n\t\t}\n\t\telse {\n\t\t\tbindResize();\n\t\t}\n\n\t\toSettings._reszEvt = true;\n\t}\n}\n\n\n/**\n * Throttle the calls to a function. Arguments and context are maintained for\n * the throttled function\n *  @param {function} fn Function to be called\n *  @param {int} [freq=200] call frequency in mS\n *  @returns {function} wrapped function\n *  @memberof DataTable#oApi\n */\nvar _fnThrottle = DataTable.util.throttle;\n\n\n/**\n * Convert a set of CSS units width to pixels (e.g. 2em)\n *  @param {string[]} widths widths to be converted\n *  @param {node} parent parent to get the with for (required for relative widths) - optional\n *  @returns {int[]} widths in pixels\n *  @memberof DataTable#oApi\n */\nfunction _fnConvertToWidth ( widths, parent )\n{\n\tvar els = [];\n\tvar results = [];\n\n\t// Add the elements in a single loop so we only need to reflow once\n\tfor (var i=0 ; i<widths.length ; i++) {\n\t\tif (widths[i]) {\n\t\t\tels.push(\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.css( 'width', _fnStringToCss( widths[i] ) )\n\t\t\t\t\t.appendTo( parent || document.body )\n\t\t\t)\n\t\t}\n\t\telse {\n\t\t\tels.push(null);\n\t\t}\n\t}\n\n\t// Get the sizes (will reflow once)\n\tfor (var i=0 ; i<widths.length ; i++) {\n\t\tresults.push(els[i] ? els[i][0].offsetWidth : null);\n\t}\n\n\t// Tidy\n\t$(els).remove();\n\n\treturn results;\n}\n\n\n/**\n * Get the widest node\n *  @param {object} settings dataTables settings object\n *  @param {int} colIdx column of interest\n *  @returns {node} widest table node\n *  @memberof DataTable#oApi\n */\nfunction _fnGetWidestNode( settings, colIdx )\n{\n\tvar idx = _fnGetMaxLenString( settings, colIdx );\n\tif ( idx < 0 ) {\n\t\treturn null;\n\t}\n\n\tvar data = settings.aoData[ idx ];\n\treturn ! data.nTr ? // Might not have been created when deferred rendering\n\t\t$('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :\n\t\tdata.anCells[ colIdx ];\n}\n\n\n/**\n * Get the maximum strlen for each data column\n *  @param {object} settings dataTables settings object\n *  @param {int} colIdx column of interest\n *  @returns {string} max string length for each column\n *  @memberof DataTable#oApi\n */\nfunction _fnGetMaxLenString( settings, colIdx )\n{\n\tvar s, max=-1, maxIdx = -1;\n\n\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\ts = _fnGetCellData( settings, i, colIdx, 'display' )+'';\n\t\ts = s.replace( __re_html_remove, '' );\n\t\ts = s.replace( /&nbsp;/g, ' ' );\n\n\t\tif ( s.length > max ) {\n\t\t\tmax = s.length;\n\t\t\tmaxIdx = i;\n\t\t}\n\t}\n\n\treturn maxIdx;\n}\n\n\n/**\n * Append a CSS unit (only if required) to a string\n *  @param {string} value to css-ify\n *  @returns {string} value with css unit\n *  @memberof DataTable#oApi\n */\nfunction _fnStringToCss( s )\n{\n\tif ( s === null ) {\n\t\treturn '0px';\n\t}\n\n\tif ( typeof s == 'number' ) {\n\t\treturn s < 0 ?\n\t\t\t'0px' :\n\t\t\ts+'px';\n\t}\n\n\t// Check it has a unit character already\n\treturn s.match(/\\d$/) ?\n\t\ts+'px' :\n\t\ts;\n}\n\n\n\nfunction _fnSortFlatten ( settings )\n{\n\tvar\n\t\ti, iLen, k, kLen,\n\t\taSort = [],\n\t\taiOrig = [],\n\t\taoColumns = settings.aoColumns,\n\t\taDataSort, iCol, sType, srcCol,\n\t\tfixed = settings.aaSortingFixed,\n\t\tfixedObj = $.isPlainObject( fixed ),\n\t\tnestedSort = [],\n\t\tadd = function ( a ) {\n\t\t\tif ( a.length && ! Array.isArray( a[0] ) ) {\n\t\t\t\t// 1D array\n\t\t\t\tnestedSort.push( a );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// 2D array\n\t\t\t\t$.merge( nestedSort, a );\n\t\t\t}\n\t\t};\n\n\t// Build the sort array, with pre-fix and post-fix options if they have been\n\t// specified\n\tif ( Array.isArray( fixed ) ) {\n\t\tadd( fixed );\n\t}\n\n\tif ( fixedObj && fixed.pre ) {\n\t\tadd( fixed.pre );\n\t}\n\n\tadd( settings.aaSorting );\n\n\tif (fixedObj && fixed.post ) {\n\t\tadd( fixed.post );\n\t}\n\n\tfor ( i=0 ; i<nestedSort.length ; i++ )\n\t{\n\t\tsrcCol = nestedSort[i][0];\n\t\taDataSort = aoColumns[ srcCol ].aDataSort;\n\n\t\tfor ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )\n\t\t{\n\t\t\tiCol = aDataSort[k];\n\t\t\tsType = aoColumns[ iCol ].sType || 'string';\n\n\t\t\tif ( nestedSort[i]._idx === undefined ) {\n\t\t\t\tnestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );\n\t\t\t}\n\n\t\t\taSort.push( {\n\t\t\t\tsrc:       srcCol,\n\t\t\t\tcol:       iCol,\n\t\t\t\tdir:       nestedSort[i][1],\n\t\t\t\tindex:     nestedSort[i]._idx,\n\t\t\t\ttype:      sType,\n\t\t\t\tformatter: DataTable.ext.type.order[ sType+\"-pre\" ]\n\t\t\t} );\n\t\t}\n\t}\n\n\treturn aSort;\n}\n\n/**\n * Change the order of the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n *  @todo This really needs split up!\n */\nfunction _fnSort ( oSettings )\n{\n\tvar\n\t\ti, ien, iLen, j, jLen, k, kLen,\n\t\tsDataType, nTh,\n\t\taiOrig = [],\n\t\toExtSort = DataTable.ext.type.order,\n\t\taoData = oSettings.aoData,\n\t\taoColumns = oSettings.aoColumns,\n\t\taDataSort, data, iCol, sType, oSort,\n\t\tformatters = 0,\n\t\tsortCol,\n\t\tdisplayMaster = oSettings.aiDisplayMaster,\n\t\taSort;\n\n\t// Resolve any column types that are unknown due to addition or invalidation\n\t// @todo Can this be moved into a 'data-ready' handler which is called when\n\t//   data is going to be used in the table?\n\t_fnColumnTypes( oSettings );\n\n\taSort = _fnSortFlatten( oSettings );\n\n\tfor ( i=0, ien=aSort.length ; i<ien ; i++ ) {\n\t\tsortCol = aSort[i];\n\n\t\t// Track if we can use the fast sort algorithm\n\t\tif ( sortCol.formatter ) {\n\t\t\tformatters++;\n\t\t}\n\n\t\t// Load the data needed for the sort, for each cell\n\t\t_fnSortData( oSettings, sortCol.col );\n\t}\n\n\t/* No sorting required if server-side or no sorting array */\n\tif ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )\n\t{\n\t\t// Create a value - key array of the current row positions such that we can use their\n\t\t// current position during the sort, if values match, in order to perform stable sorting\n\t\tfor ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {\n\t\t\taiOrig[ displayMaster[i] ] = i;\n\t\t}\n\n\t\t/* Do the sort - here we want multi-column sorting based on a given data source (column)\n\t\t * and sorting function (from oSort) in a certain direction. It's reasonably complex to\n\t\t * follow on it's own, but this is what we want (example two column sorting):\n\t\t *  fnLocalSorting = function(a,b){\n\t\t *    var iTest;\n\t\t *    iTest = oSort['string-asc']('data11', 'data12');\n\t\t *      if (iTest !== 0)\n\t\t *        return iTest;\n\t\t *    iTest = oSort['numeric-desc']('data21', 'data22');\n\t\t *    if (iTest !== 0)\n\t\t *      return iTest;\n\t\t *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );\n\t\t *  }\n\t\t * Basically we have a test for each sorting column, if the data in that column is equal,\n\t\t * test the next column. If all columns match, then we use a numeric sort on the row\n\t\t * positions in the original data array to provide a stable sort.\n\t\t *\n\t\t * Note - I know it seems excessive to have two sorting methods, but the first is around\n\t\t * 15% faster, so the second is only maintained for backwards compatibility with sorting\n\t\t * methods which do not have a pre-sort formatting function.\n\t\t */\n\t\tif ( formatters === aSort.length ) {\n\t\t\t// All sort types have formatting functions\n\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\tvar\n\t\t\t\t\tx, y, k, test, sort,\n\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\tdataB = aoData[b]._aSortData;\n\n\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\tsort = aSort[k];\n\n\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\ty = dataB[ sort.col ];\n\n\t\t\t\t\ttest = x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\treturn sort.dir === 'asc' ? test : -test;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tx = aiOrig[a];\n\t\t\t\ty = aiOrig[b];\n\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t} );\n\t\t}\n\t\telse {\n\t\t\t// Depreciated - remove in 1.11 (providing a plug-in option)\n\t\t\t// Not all sort types have formatting methods, so we have to call their sorting\n\t\t\t// methods.\n\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\tvar\n\t\t\t\t\tx, y, k, l, test, sort, fn,\n\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\tdataB = aoData[b]._aSortData;\n\n\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\tsort = aSort[k];\n\n\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\ty = dataB[ sort.col ];\n\n\t\t\t\t\tfn = oExtSort[ sort.type+\"-\"+sort.dir ] || oExtSort[ \"string-\"+sort.dir ];\n\t\t\t\t\ttest = fn( x, y );\n\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\treturn test;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tx = aiOrig[a];\n\t\t\t\ty = aiOrig[b];\n\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t} );\n\t\t}\n\t}\n\n\t/* Tell the draw function that we have sorted the data */\n\toSettings.bSorted = true;\n}\n\n\nfunction _fnSortAria ( settings )\n{\n\tvar label;\n\tvar nextSort;\n\tvar columns = settings.aoColumns;\n\tvar aSort = _fnSortFlatten( settings );\n\tvar oAria = settings.oLanguage.oAria;\n\n\t// ARIA attributes - need to loop all columns, to update all (removing old\n\t// attributes as needed)\n\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t{\n\t\tvar col = columns[i];\n\t\tvar asSorting = col.asSorting;\n\t\tvar sTitle = col.ariaTitle || col.sTitle.replace( /<.*?>/g, \"\" );\n\t\tvar th = col.nTh;\n\n\t\t// IE7 is throwing an error when setting these properties with jQuery's\n\t\t// attr() and removeAttr() methods...\n\t\tth.removeAttribute('aria-sort');\n\n\t\t/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */\n\t\tif ( col.bSortable ) {\n\t\t\tif ( aSort.length > 0 && aSort[0].col == i ) {\n\t\t\t\tth.setAttribute('aria-sort', aSort[0].dir==\"asc\" ? \"ascending\" : \"descending\" );\n\t\t\t\tnextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnextSort = asSorting[0];\n\t\t\t}\n\n\t\t\tlabel = sTitle + ( nextSort === \"asc\" ?\n\t\t\t\toAria.sSortAscending :\n\t\t\t\toAria.sSortDescending\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\tlabel = sTitle;\n\t\t}\n\n\t\tth.setAttribute('aria-label', label);\n\t}\n}\n\n\n/**\n * Function to run on user sort request\n *  @param {object} settings dataTables settings object\n *  @param {node} attachTo node to attach the handler to\n *  @param {int} colIdx column sorting index\n *  @param {boolean} [append=false] Append the requested sort to the existing\n *    sort if true (i.e. multi-column sort)\n *  @param {function} [callback] callback function\n *  @memberof DataTable#oApi\n */\nfunction _fnSortListener ( settings, colIdx, append, callback )\n{\n\tvar col = settings.aoColumns[ colIdx ];\n\tvar sorting = settings.aaSorting;\n\tvar asSorting = col.asSorting;\n\tvar nextSortIdx;\n\tvar next = function ( a, overflow ) {\n\t\tvar idx = a._idx;\n\t\tif ( idx === undefined ) {\n\t\t\tidx = $.inArray( a[1], asSorting );\n\t\t}\n\n\t\treturn idx+1 < asSorting.length ?\n\t\t\tidx+1 :\n\t\t\toverflow ?\n\t\t\t\tnull :\n\t\t\t\t0;\n\t};\n\n\t// Convert to 2D array if needed\n\tif ( typeof sorting[0] === 'number' ) {\n\t\tsorting = settings.aaSorting = [ sorting ];\n\t}\n\n\t// If appending the sort then we are multi-column sorting\n\tif ( append && settings.oFeatures.bSortMulti ) {\n\t\t// Are we already doing some kind of sort on this column?\n\t\tvar sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );\n\n\t\tif ( sortIdx !== -1 ) {\n\t\t\t// Yes, modify the sort\n\t\t\tnextSortIdx = next( sorting[sortIdx], true );\n\n\t\t\tif ( nextSortIdx === null && sorting.length === 1 ) {\n\t\t\t\tnextSortIdx = 0; // can't remove sorting completely\n\t\t\t}\n\n\t\t\tif ( nextSortIdx === null ) {\n\t\t\t\tsorting.splice( sortIdx, 1 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsorting[sortIdx][1] = asSorting[ nextSortIdx ];\n\t\t\t\tsorting[sortIdx]._idx = nextSortIdx;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// No sort on this column yet\n\t\t\tsorting.push( [ colIdx, asSorting[0], 0 ] );\n\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t}\n\t}\n\telse if ( sorting.length && sorting[0][0] == colIdx ) {\n\t\t// Single column - already sorting on this column, modify the sort\n\t\tnextSortIdx = next( sorting[0] );\n\n\t\tsorting.length = 1;\n\t\tsorting[0][1] = asSorting[ nextSortIdx ];\n\t\tsorting[0]._idx = nextSortIdx;\n\t}\n\telse {\n\t\t// Single column - sort only on this column\n\t\tsorting.length = 0;\n\t\tsorting.push( [ colIdx, asSorting[0] ] );\n\t\tsorting[0]._idx = 0;\n\t}\n\n\t// Run the sort by calling a full redraw\n\t_fnReDraw( settings );\n\n\t// callback used for async user interaction\n\tif ( typeof callback == 'function' ) {\n\t\tcallback( settings );\n\t}\n}\n\n\n/**\n * Attach a sort handler (click) to a node\n *  @param {object} settings dataTables settings object\n *  @param {node} attachTo node to attach the handler to\n *  @param {int} colIdx column sorting index\n *  @param {function} [callback] callback function\n *  @memberof DataTable#oApi\n */\nfunction _fnSortAttachListener ( settings, attachTo, colIdx, callback )\n{\n\tvar col = settings.aoColumns[ colIdx ];\n\n\t_fnBindAction( attachTo, {}, function (e) {\n\t\t/* If the column is not sortable - don't to anything */\n\t\tif ( col.bSortable === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If processing is enabled use a timeout to allow the processing\n\t\t// display to be shown - otherwise to it synchronously\n\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t_fnProcessingDisplay( settings, true );\n\n\t\t\tsetTimeout( function() {\n\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\n\t\t\t\t// In server-side processing, the draw callback will remove the\n\t\t\t\t// processing display\n\t\t\t\tif ( _fnDataSource( settings ) !== 'ssp' ) {\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t}\n\t\t\t}, 0 );\n\t\t}\n\t\telse {\n\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\t}\n\t} );\n}\n\n\n/**\n * Set the sorting classes on table's body, Note: it is safe to call this function\n * when bSort and bSortClasses are false\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnSortingClasses( settings )\n{\n\tvar oldSort = settings.aLastSort;\n\tvar sortClass = settings.oClasses.sSortColumn;\n\tvar sort = _fnSortFlatten( settings );\n\tvar features = settings.oFeatures;\n\tvar i, ien, colIdx;\n\n\tif ( features.bSort && features.bSortClasses ) {\n\t\t// Remove old sorting classes\n\t\tfor ( i=0, ien=oldSort.length ; i<ien ; i++ ) {\n\t\t\tcolIdx = oldSort[i].src;\n\n\t\t\t// Remove column sorting\n\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t.removeClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t}\n\n\t\t// Add new column sorting\n\t\tfor ( i=0, ien=sort.length ; i<ien ; i++ ) {\n\t\t\tcolIdx = sort[i].src;\n\n\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t.addClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t}\n\t}\n\n\tsettings.aLastSort = sort;\n}\n\n\n// Get the data to sort a column, be it from cache, fresh (populating the\n// cache), or from a sort formatter\nfunction _fnSortData( settings, idx )\n{\n\t// Custom sorting function - provided by the sort data type\n\tvar column = settings.aoColumns[ idx ];\n\tvar customSort = DataTable.ext.order[ column.sSortDataType ];\n\tvar customData;\n\n\tif ( customSort ) {\n\t\tcustomData = customSort.call( settings.oInstance, settings, idx,\n\t\t\t_fnColumnIndexToVisible( settings, idx )\n\t\t);\n\t}\n\n\t// Use / populate cache\n\tvar row, cellData;\n\tvar formatter = DataTable.ext.type.order[ column.sType+\"-pre\" ];\n\n\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\trow = settings.aoData[i];\n\n\t\tif ( ! row._aSortData ) {\n\t\t\trow._aSortData = [];\n\t\t}\n\n\t\tif ( ! row._aSortData[idx] || customSort ) {\n\t\t\tcellData = customSort ?\n\t\t\t\tcustomData[i] : // If there was a custom sort function, use data from there\n\t\t\t\t_fnGetCellData( settings, i, idx, 'sort' );\n\n\t\t\trow._aSortData[ idx ] = formatter ?\n\t\t\t\tformatter( cellData ) :\n\t\t\t\tcellData;\n\t\t}\n\t}\n}\n\n\n\n/**\n * Save the state of a table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnSaveState ( settings )\n{\n\tif (settings._bLoadingState) {\n\t\treturn;\n\t}\n\n\t/* Store the interesting variables */\n\tvar state = {\n\t\ttime:    +new Date(),\n\t\tstart:   settings._iDisplayStart,\n\t\tlength:  settings._iDisplayLength,\n\t\torder:   $.extend( true, [], settings.aaSorting ),\n\t\tsearch:  _fnSearchToCamel( settings.oPreviousSearch ),\n\t\tcolumns: $.map( settings.aoColumns, function ( col, i ) {\n\t\t\treturn {\n\t\t\t\tvisible: col.bVisible,\n\t\t\t\tsearch: _fnSearchToCamel( settings.aoPreSearchCols[i] )\n\t\t\t};\n\t\t} )\n\t};\n\n\tsettings.oSavedState = state;\n\t_fnCallbackFire( settings, \"aoStateSaveParams\", 'stateSaveParams', [settings, state] );\n\t\n\tif ( settings.oFeatures.bStateSave && !settings.bDestroying )\n\t{\n\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, state );\n\t}\t\n}\n\n\n/**\n * Attempt to load a saved table state\n *  @param {object} oSettings dataTables settings object\n *  @param {object} oInit DataTables init object so we can override settings\n *  @param {function} callback Callback to execute when the state has been loaded\n *  @memberof DataTable#oApi\n */\nfunction _fnLoadState ( settings, oInit, callback )\n{\n\tif ( ! settings.oFeatures.bStateSave ) {\n\t\tcallback();\n\t\treturn;\n\t}\n\n\tvar loaded = function(state) {\n\t\t_fnImplementState(settings, state, callback);\n\t}\n\n\tvar state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );\n\n\tif ( state !== undefined ) {\n\t\t_fnImplementState( settings, state, callback );\n\t}\n\t// otherwise, wait for the loaded callback to be executed\n\n\treturn true;\n}\n\nfunction _fnImplementState ( settings, s, callback) {\n\tvar i, ien;\n\tvar columns = settings.aoColumns;\n\tsettings._bLoadingState = true;\n\n\t// When StateRestore was introduced the state could now be implemented at any time\n\t// Not just initialisation. To do this an api instance is required in some places\n\tvar api = settings._bInitComplete ? new DataTable.Api(settings) : null;\n\n\tif ( ! s || ! s.time ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Allow custom and plug-in manipulation functions to alter the saved data set and\n\t// cancelling of loading by returning false\n\tvar abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, s] );\n\tif ( $.inArray( false, abStateLoad ) !== -1 ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Reject old data\n\tvar duration = settings.iStateDuration;\n\tif ( duration > 0 && s.time < +new Date() - (duration*1000) ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Number of columns have changed - all bets are off, no restore of settings\n\tif ( s.columns && columns.length !== s.columns.length ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Store the saved state so it might be accessed at any time\n\tsettings.oLoadedState = $.extend( true, {}, s );\n\n\t// Page Length\n\tif ( s.length !== undefined ) {\n\t\t// If already initialised just set the value directly so that the select element is also updated\n\t\tif (api) {\n\t\t\tapi.page.len(s.length)\n\t\t}\n\t\telse {\n\t\t\tsettings._iDisplayLength   = s.length;\n\t\t}\n\t}\n\n\t// Restore key features - todo - for 1.11 this needs to be done by\n\t// subscribed events\n\tif ( s.start !== undefined ) {\n\t\tif(api === null) {\n\t\t\tsettings._iDisplayStart    = s.start;\n\t\t\tsettings.iInitDisplayStart = s.start;\n\t\t}\n\t\telse {\n\t\t\t_fnPageChange(settings, s.start/settings._iDisplayLength);\n\t\t}\n\t}\n\n\t// Order\n\tif ( s.order !== undefined ) {\n\t\tsettings.aaSorting = [];\n\t\t$.each( s.order, function ( i, col ) {\n\t\t\tsettings.aaSorting.push( col[0] >= columns.length ?\n\t\t\t\t[ 0, col[1] ] :\n\t\t\t\tcol\n\t\t\t);\n\t\t} );\n\t}\n\n\t// Search\n\tif ( s.search !== undefined ) {\n\t\t$.extend( settings.oPreviousSearch, _fnSearchToHung( s.search ) );\n\t}\n\n\t// Columns\n\tif ( s.columns ) {\n\t\tfor ( i=0, ien=s.columns.length ; i<ien ; i++ ) {\n\t\t\tvar col = s.columns[i];\n\n\t\t\t// Visibility\n\t\t\tif ( col.visible !== undefined ) {\n\t\t\t\t// If the api is defined, the table has been initialised so we need to use it rather than internal settings\n\t\t\t\tif (api) {\n\t\t\t\t\t// Don't redraw the columns on every iteration of this loop, we will do this at the end instead\n\t\t\t\t\tapi.column(i).visible(col.visible, false);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcolumns[i].bVisible = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Search\n\t\t\tif ( col.search !== undefined ) {\n\t\t\t\t$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );\n\t\t\t}\n\t\t}\n\t\t\n\t\t// If the api is defined then we need to adjust the columns once the visibility has been changed\n\t\tif (api) {\n\t\t\tapi.columns.adjust();\n\t\t}\n\t}\n\n\tsettings._bLoadingState = false;\n\t_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, s] );\n\tcallback();\n};\n\n\n/**\n * Return the settings object for a particular table\n *  @param {node} table table we are using as a dataTable\n *  @returns {object} Settings object - or null if not found\n *  @memberof DataTable#oApi\n */\nfunction _fnSettingsFromNode ( table )\n{\n\tvar settings = DataTable.settings;\n\tvar idx = $.inArray( table, _pluck( settings, 'nTable' ) );\n\n\treturn idx !== -1 ?\n\t\tsettings[ idx ] :\n\t\tnull;\n}\n\n\n/**\n * Log an error message\n *  @param {object} settings dataTables settings object\n *  @param {int} level log error messages, or display them to the user\n *  @param {string} msg error message\n *  @param {int} tn Technical note id to get more information about the error.\n *  @memberof DataTable#oApi\n */\nfunction _fnLog( settings, level, msg, tn )\n{\n\tmsg = 'DataTables warning: '+\n\t\t(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;\n\n\tif ( tn ) {\n\t\tmsg += '. For more information about this error, please see '+\n\t\t'https://datatables.net/tn/'+tn;\n\t}\n\n\tif ( ! level  ) {\n\t\t// Backwards compatibility pre 1.10\n\t\tvar ext = DataTable.ext;\n\t\tvar type = ext.sErrMode || ext.errMode;\n\n\t\tif ( settings ) {\n\t\t\t_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );\n\t\t}\n\n\t\tif ( type == 'alert' ) {\n\t\t\talert( msg );\n\t\t}\n\t\telse if ( type == 'throw' ) {\n\t\t\tthrow new Error(msg);\n\t\t}\n\t\telse if ( typeof type == 'function' ) {\n\t\t\ttype( settings, tn, msg );\n\t\t}\n\t}\n\telse if ( window.console && console.log ) {\n\t\tconsole.log( msg );\n\t}\n}\n\n\n/**\n * See if a property is defined on one object, if so assign it to the other object\n *  @param {object} ret target object\n *  @param {object} src source object\n *  @param {string} name property\n *  @param {string} [mappedName] name to map too - optional, name used if not given\n *  @memberof DataTable#oApi\n */\nfunction _fnMap( ret, src, name, mappedName )\n{\n\tif ( Array.isArray( name ) ) {\n\t\t$.each( name, function (i, val) {\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t_fnMap( ret, src, val[0], val[1] );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnMap( ret, src, val );\n\t\t\t}\n\t\t} );\n\n\t\treturn;\n\t}\n\n\tif ( mappedName === undefined ) {\n\t\tmappedName = name;\n\t}\n\n\tif ( src[name] !== undefined ) {\n\t\tret[mappedName] = src[name];\n\t}\n}\n\n\n/**\n * Extend objects - very similar to jQuery.extend, but deep copy objects, and\n * shallow copy arrays. The reason we need to do this, is that we don't want to\n * deep copy array init values (such as aaSorting) since the dev wouldn't be\n * able to override them, but we do want to deep copy arrays.\n *  @param {object} out Object to extend\n *  @param {object} extender Object from which the properties will be applied to\n *      out\n *  @param {boolean} breakRefs If true, then arrays will be sliced to take an\n *      independent copy with the exception of the `data` or `aaData` parameters\n *      if they are present. This is so you can pass in a collection to\n *      DataTables and have that used as your data source without breaking the\n *      references\n *  @returns {object} out Reference, just for convenience - out === the return.\n *  @memberof DataTable#oApi\n *  @todo This doesn't take account of arrays inside the deep copied objects.\n */\nfunction _fnExtend( out, extender, breakRefs )\n{\n\tvar val;\n\n\tfor ( var prop in extender ) {\n\t\tif ( extender.hasOwnProperty(prop) ) {\n\t\t\tval = extender[prop];\n\n\t\t\tif ( $.isPlainObject( val ) ) {\n\t\t\t\tif ( ! $.isPlainObject( out[prop] ) ) {\n\t\t\t\t\tout[prop] = {};\n\t\t\t\t}\n\t\t\t\t$.extend( true, out[prop], val );\n\t\t\t}\n\t\t\telse if ( breakRefs && prop !== 'data' && prop !== 'aaData' && Array.isArray(val) ) {\n\t\t\t\tout[prop] = val.slice();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tout[prop] = val;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n\n\n/**\n * Bind an event handers to allow a click or return key to activate the callback.\n * This is good for accessibility since a return on the keyboard will have the\n * same effect as a click, if the element has focus.\n *  @param {element} n Element to bind the action to\n *  @param {object} oData Data object to pass to the triggered function\n *  @param {function} fn Callback function for when the event is triggered\n *  @memberof DataTable#oApi\n */\nfunction _fnBindAction( n, oData, fn )\n{\n\t$(n)\n\t\t.on( 'click.DT', oData, function (e) {\n\t\t\t\t$(n).trigger('blur'); // Remove focus outline for mouse users\n\t\t\t\tfn(e);\n\t\t\t} )\n\t\t.on( 'keypress.DT', oData, function (e){\n\t\t\t\tif ( e.which === 13 ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfn(e);\n\t\t\t\t}\n\t\t\t} )\n\t\t.on( 'selectstart.DT', function () {\n\t\t\t\t/* Take the brutal approach to cancelling text selection */\n\t\t\t\treturn false;\n\t\t\t} );\n}\n\n\n/**\n * Register a callback function. Easily allows a callback function to be added to\n * an array store of callback functions that can then all be called together.\n *  @param {object} oSettings dataTables settings object\n *  @param {string} sStore Name of the array storage for the callbacks in oSettings\n *  @param {function} fn Function to be called back\n *  @param {string} sName Identifying name for the callback (i.e. a label)\n *  @memberof DataTable#oApi\n */\nfunction _fnCallbackReg( oSettings, sStore, fn, sName )\n{\n\tif ( fn )\n\t{\n\t\toSettings[sStore].push( {\n\t\t\t\"fn\": fn,\n\t\t\t\"sName\": sName\n\t\t} );\n\t}\n}\n\n\n/**\n * Fire callback functions and trigger events. Note that the loop over the\n * callback array store is done backwards! Further note that you do not want to\n * fire off triggers in time sensitive applications (for example cell creation)\n * as its slow.\n *  @param {object} settings dataTables settings object\n *  @param {string} callbackArr Name of the array storage for the callbacks in\n *      oSettings\n *  @param {string} eventName Name of the jQuery custom event to trigger. If\n *      null no trigger is fired\n *  @param {array} args Array of arguments to pass to the callback function /\n *      trigger\n *  @memberof DataTable#oApi\n */\nfunction _fnCallbackFire( settings, callbackArr, eventName, args )\n{\n\tvar ret = [];\n\n\tif ( callbackArr ) {\n\t\tret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {\n\t\t\treturn val.fn.apply( settings.oInstance, args );\n\t\t} );\n\t}\n\n\tif ( eventName !== null ) {\n\t\tvar e = $.Event( eventName+'.dt' );\n\t\tvar table = $(settings.nTable);\n\n\t\ttable.trigger( e, args );\n\n\t\t// If not yet attached to the document, trigger the event\n\t\t// on the body directly to sort of simulate the bubble\n\t\tif (table.parents('body').length === 0) {\n\t\t\t$('body').trigger( e, args );\n\t\t}\n\n\t\tret.push( e.result );\n\t}\n\n\treturn ret;\n}\n\n\nfunction _fnLengthOverflow ( settings )\n{\n\tvar\n\t\tstart = settings._iDisplayStart,\n\t\tend = settings.fnDisplayEnd(),\n\t\tlen = settings._iDisplayLength;\n\n\t/* If we have space to show extra rows (backing up from the end point - then do so */\n\tif ( start >= end )\n\t{\n\t\tstart = end - len;\n\t}\n\n\t// Keep the start record on the current page\n\tstart -= (start % len);\n\n\tif ( len === -1 || start < 0 )\n\t{\n\t\tstart = 0;\n\t}\n\n\tsettings._iDisplayStart = start;\n}\n\n\nfunction _fnRenderer( settings, type )\n{\n\tvar renderer = settings.renderer;\n\tvar host = DataTable.ext.renderer[type];\n\n\tif ( $.isPlainObject( renderer ) && renderer[type] ) {\n\t\t// Specific renderer for this type. If available use it, otherwise use\n\t\t// the default.\n\t\treturn host[renderer[type]] || host._;\n\t}\n\telse if ( typeof renderer === 'string' ) {\n\t\t// Common renderer - if there is one available for this type use it,\n\t\t// otherwise use the default\n\t\treturn host[renderer] || host._;\n\t}\n\n\t// Use the default\n\treturn host._;\n}\n\n\n/**\n * Detect the data source being used for the table. Used to simplify the code\n * a little (ajax) and to make it compress a little smaller.\n *\n *  @param {object} settings dataTables settings object\n *  @returns {string} Data source\n *  @memberof DataTable#oApi\n */\nfunction _fnDataSource ( settings )\n{\n\tif ( settings.oFeatures.bServerSide ) {\n\t\treturn 'ssp';\n\t}\n\telse if ( settings.ajax || settings.sAjaxSource ) {\n\t\treturn 'ajax';\n\t}\n\treturn 'dom';\n}\n\n\n\n\n/**\n * Computed structure of the DataTables API, defined by the options passed to\n * `DataTable.Api.register()` when building the API.\n *\n * The structure is built in order to speed creation and extension of the Api\n * objects since the extensions are effectively pre-parsed.\n *\n * The array is an array of objects with the following structure, where this\n * base array represents the Api prototype base:\n *\n *     [\n *       {\n *         name:      'data'                -- string   - Property name\n *         val:       function () {},       -- function - Api method (or undefined if just an object\n *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n *       },\n *       {\n *         name:     'row'\n *         val:       {},\n *         methodExt: [ ... ],\n *         propExt:   [\n *           {\n *             name:      'data'\n *             val:       function () {},\n *             methodExt: [ ... ],\n *             propExt:   [ ... ]\n *           },\n *           ...\n *         ]\n *       }\n *     ]\n *\n * @type {Array}\n * @ignore\n */\nvar __apiStruct = [];\n\n\n/**\n * `Array.prototype` reference.\n *\n * @type object\n * @ignore\n */\nvar __arrayProto = Array.prototype;\n\n\n/**\n * Abstraction for `context` parameter of the `Api` constructor to allow it to\n * take several different forms for ease of use.\n *\n * Each of the input parameter types will be converted to a DataTables settings\n * object where possible.\n *\n * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one\n *   of:\n *\n *   * `string` - jQuery selector. Any DataTables' matching the given selector\n *     with be found and used.\n *   * `node` - `TABLE` node which has already been formed into a DataTable.\n *   * `jQuery` - A jQuery object of `TABLE` nodes.\n *   * `object` - DataTables settings object\n *   * `DataTables.Api` - API instance\n * @return {array|null} Matching DataTables settings objects. `null` or\n *   `undefined` is returned if no matching DataTable is found.\n * @ignore\n */\nvar _toSettings = function ( mixed )\n{\n\tvar idx, jq;\n\tvar settings = DataTable.settings;\n\tvar tables = $.map( settings, function (el, i) {\n\t\treturn el.nTable;\n\t} );\n\n\tif ( ! mixed ) {\n\t\treturn [];\n\t}\n\telse if ( mixed.nTable && mixed.oApi ) {\n\t\t// DataTables settings object\n\t\treturn [ mixed ];\n\t}\n\telse if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {\n\t\t// Table node\n\t\tidx = $.inArray( mixed, tables );\n\t\treturn idx !== -1 ? [ settings[idx] ] : null;\n\t}\n\telse if ( mixed && typeof mixed.settings === 'function' ) {\n\t\treturn mixed.settings().toArray();\n\t}\n\telse if ( typeof mixed === 'string' ) {\n\t\t// jQuery selector\n\t\tjq = $(mixed);\n\t}\n\telse if ( mixed instanceof $ ) {\n\t\t// jQuery object (also DataTables instance)\n\t\tjq = mixed;\n\t}\n\n\tif ( jq ) {\n\t\treturn jq.map( function(i) {\n\t\t\tidx = $.inArray( this, tables );\n\t\t\treturn idx !== -1 ? settings[idx] : null;\n\t\t} ).toArray();\n\t}\n};\n\n\n/**\n * DataTables API class - used to control and interface with  one or more\n * DataTables enhanced tables.\n *\n * The API class is heavily based on jQuery, presenting a chainable interface\n * that you can use to interact with tables. Each instance of the API class has\n * a \"context\" - i.e. the tables that it will operate on. This could be a single\n * table, all tables on a page or a sub-set thereof.\n *\n * Additionally the API is designed to allow you to easily work with the data in\n * the tables, retrieving and manipulating it as required. This is done by\n * presenting the API class as an array like interface. The contents of the\n * array depend upon the actions requested by each method (for example\n * `rows().nodes()` will return an array of nodes, while `rows().data()` will\n * return an array of objects or arrays depending upon your table's\n * configuration). The API object has a number of array like methods (`push`,\n * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,\n * `unique` etc) to assist your working with the data held in a table.\n *\n * Most methods (those which return an Api instance) are chainable, which means\n * the return from a method call also has all of the methods available that the\n * top level object had. For example, these two calls are equivalent:\n *\n *     // Not chained\n *     api.row.add( {...} );\n *     api.draw();\n *\n *     // Chained\n *     api.row.add( {...} ).draw();\n *\n * @class DataTable.Api\n * @param {array|object|string|jQuery} context DataTable identifier. This is\n *   used to define which DataTables enhanced tables this API will operate on.\n *   Can be one of:\n *\n *   * `string` - jQuery selector. Any DataTables' matching the given selector\n *     with be found and used.\n *   * `node` - `TABLE` node which has already been formed into a DataTable.\n *   * `jQuery` - A jQuery object of `TABLE` nodes.\n *   * `object` - DataTables settings object\n * @param {array} [data] Data to initialise the Api instance with.\n *\n * @example\n *   // Direct initialisation during DataTables construction\n *   var api = $('#example').DataTable();\n *\n * @example\n *   // Initialisation using a DataTables jQuery object\n *   var api = $('#example').dataTable().api();\n *\n * @example\n *   // Initialisation as a constructor\n *   var api = new $.fn.DataTable.Api( 'table.dataTable' );\n */\n_Api = function ( context, data )\n{\n\tif ( ! (this instanceof _Api) ) {\n\t\treturn new _Api( context, data );\n\t}\n\n\tvar settings = [];\n\tvar ctxSettings = function ( o ) {\n\t\tvar a = _toSettings( o );\n\t\tif ( a ) {\n\t\t\tsettings.push.apply( settings, a );\n\t\t}\n\t};\n\n\tif ( Array.isArray( context ) ) {\n\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\tctxSettings( context[i] );\n\t\t}\n\t}\n\telse {\n\t\tctxSettings( context );\n\t}\n\n\t// Remove duplicates\n\tthis.context = _unique( settings );\n\n\t// Initial data\n\tif ( data ) {\n\t\t$.merge( this, data );\n\t}\n\n\t// selector\n\tthis.selector = {\n\t\trows: null,\n\t\tcols: null,\n\t\topts: null\n\t};\n\n\t_Api.extend( this, this, __apiStruct );\n};\n\nDataTable.Api = _Api;\n\n// Don't destroy the existing prototype, just extend it. Required for jQuery 2's\n// isPlainObject.\n$.extend( _Api.prototype, {\n\tany: function ()\n\t{\n\t\treturn this.count() !== 0;\n\t},\n\n\n\tconcat:  __arrayProto.concat,\n\n\n\tcontext: [], // array of table settings objects\n\n\n\tcount: function ()\n\t{\n\t\treturn this.flatten().length;\n\t},\n\n\n\teach: function ( fn )\n\t{\n\t\tfor ( var i=0, ien=this.length ; i<ien; i++ ) {\n\t\t\tfn.call( this, this[i], i, this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\n\teq: function ( idx )\n\t{\n\t\tvar ctx = this.context;\n\n\t\treturn ctx.length > idx ?\n\t\t\tnew _Api( ctx[idx], this[idx] ) :\n\t\t\tnull;\n\t},\n\n\n\tfilter: function ( fn )\n\t{\n\t\tvar a = [];\n\n\t\tif ( __arrayProto.filter ) {\n\t\t\ta = __arrayProto.filter.call( this, fn, this );\n\t\t}\n\t\telse {\n\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\tif ( fn.call( this, this[i], i, this ) ) {\n\t\t\t\t\ta.push( this[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new _Api( this.context, a );\n\t},\n\n\n\tflatten: function ()\n\t{\n\t\tvar a = [];\n\t\treturn new _Api( this.context, a.concat.apply( a, this.toArray() ) );\n\t},\n\n\n\tjoin:    __arrayProto.join,\n\n\n\tindexOf: __arrayProto.indexOf || function (obj, start)\n\t{\n\t\tfor ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {\n\t\t\tif ( this[i] === obj ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\titerator: function ( flatten, type, fn, alwaysNew ) {\n\t\tvar\n\t\t\ta = [], ret,\n\t\t\ti, ien, j, jen,\n\t\t\tcontext = this.context,\n\t\t\trows, items, item,\n\t\t\tselector = this.selector;\n\n\t\t// Argument shifting\n\t\tif ( typeof flatten === 'string' ) {\n\t\t\talwaysNew = fn;\n\t\t\tfn = type;\n\t\t\ttype = flatten;\n\t\t\tflatten = false;\n\t\t}\n\n\t\tfor ( i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\tvar apiInst = new _Api( context[i] );\n\n\t\t\tif ( type === 'table' ) {\n\t\t\t\tret = fn.call( apiInst, context[i], i );\n\n\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\ta.push( ret );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( type === 'columns' || type === 'rows' ) {\n\t\t\t\t// this has same length as context - one entry for each table\n\t\t\t\tret = fn.call( apiInst, context[i], this[i], i );\n\n\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\ta.push( ret );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {\n\t\t\t\t// columns and rows share the same structure.\n\t\t\t\t// 'this' is an array of column indexes for each context\n\t\t\t\titems = this[i];\n\n\t\t\t\tif ( type === 'column-rows' ) {\n\t\t\t\t\trows = _selector_row_indexes( context[i], selector.opts );\n\t\t\t\t}\n\n\t\t\t\tfor ( j=0, jen=items.length ; j<jen ; j++ ) {\n\t\t\t\t\titem = items[j];\n\n\t\t\t\t\tif ( type === 'cell' ) {\n\t\t\t\t\t\tret = fn.call( apiInst, context[i], item.row, item.column, i, j );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tret = fn.call( apiInst, context[i], item, i, j, rows );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( a.length || alwaysNew ) {\n\t\t\tvar api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );\n\t\t\tvar apiSelector = api.selector;\n\t\t\tapiSelector.rows = selector.rows;\n\t\t\tapiSelector.cols = selector.cols;\n\t\t\tapiSelector.opts = selector.opts;\n\t\t\treturn api;\n\t\t}\n\t\treturn this;\n\t},\n\n\n\tlastIndexOf: __arrayProto.lastIndexOf || function (obj, start)\n\t{\n\t\t// Bit cheeky...\n\t\treturn this.indexOf.apply( this.toArray.reverse(), arguments );\n\t},\n\n\n\tlength:  0,\n\n\n\tmap: function ( fn )\n\t{\n\t\tvar a = [];\n\n\t\tif ( __arrayProto.map ) {\n\t\t\ta = __arrayProto.map.call( this, fn, this );\n\t\t}\n\t\telse {\n\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\ta.push( fn.call( this, this[i], i ) );\n\t\t\t}\n\t\t}\n\n\t\treturn new _Api( this.context, a );\n\t},\n\n\n\tpluck: function ( prop )\n\t{\n\t\tvar fn = DataTable.util.get(prop);\n\n\t\treturn this.map( function ( el ) {\n\t\t\treturn fn(el);\n\t\t} );\n\t},\n\n\tpop:     __arrayProto.pop,\n\n\n\tpush:    __arrayProto.push,\n\n\n\t// Does not return an API instance\n\treduce: __arrayProto.reduce || function ( fn, init )\n\t{\n\t\treturn _fnReduce( this, fn, init, 0, this.length, 1 );\n\t},\n\n\n\treduceRight: __arrayProto.reduceRight || function ( fn, init )\n\t{\n\t\treturn _fnReduce( this, fn, init, this.length-1, -1, -1 );\n\t},\n\n\n\treverse: __arrayProto.reverse,\n\n\n\t// Object with rows, columns and opts\n\tselector: null,\n\n\n\tshift:   __arrayProto.shift,\n\n\n\tslice: function () {\n\t\treturn new _Api( this.context, this );\n\t},\n\n\n\tsort:    __arrayProto.sort, // ? name - order?\n\n\n\tsplice:  __arrayProto.splice,\n\n\n\ttoArray: function ()\n\t{\n\t\treturn __arrayProto.slice.call( this );\n\t},\n\n\n\tto$: function ()\n\t{\n\t\treturn $( this );\n\t},\n\n\n\ttoJQuery: function ()\n\t{\n\t\treturn $( this );\n\t},\n\n\n\tunique: function ()\n\t{\n\t\treturn new _Api( this.context, _unique(this) );\n\t},\n\n\n\tunshift: __arrayProto.unshift\n} );\n\n\n_Api.extend = function ( scope, obj, ext )\n{\n\t// Only extend API instances and static properties of the API\n\tif ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {\n\t\treturn;\n\t}\n\n\tvar\n\t\ti, ien,\n\t\tstruct,\n\t\tmethodScoping = function ( scope, fn, struc ) {\n\t\t\treturn function () {\n\t\t\t\tvar ret = fn.apply( scope, arguments );\n\n\t\t\t\t// Method extension\n\t\t\t\t_Api.extend( ret, ret, struc.methodExt );\n\t\t\t\treturn ret;\n\t\t\t};\n\t\t};\n\n\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\tstruct = ext[i];\n\n\t\t// Value\n\t\tobj[ struct.name ] = struct.type === 'function' ?\n\t\t\tmethodScoping( scope, struct.val, struct ) :\n\t\t\tstruct.type === 'object' ?\n\t\t\t\t{} :\n\t\t\t\tstruct.val;\n\n\t\tobj[ struct.name ].__dt_wrapper = true;\n\n\t\t// Property extension\n\t\t_Api.extend( scope, obj[ struct.name ], struct.propExt );\n\t}\n};\n\n\n// @todo - Is there need for an augment function?\n// _Api.augment = function ( inst, name )\n// {\n// \t// Find src object in the structure from the name\n// \tvar parts = name.split('.');\n\n// \t_Api.extend( inst, obj );\n// };\n\n\n//     [\n//       {\n//         name:      'data'                -- string   - Property name\n//         val:       function () {},       -- function - Api method (or undefined if just an object\n//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n//       },\n//       {\n//         name:     'row'\n//         val:       {},\n//         methodExt: [ ... ],\n//         propExt:   [\n//           {\n//             name:      'data'\n//             val:       function () {},\n//             methodExt: [ ... ],\n//             propExt:   [ ... ]\n//           },\n//           ...\n//         ]\n//       }\n//     ]\n\n_Api.register = _api_register = function ( name, val )\n{\n\tif ( Array.isArray( name ) ) {\n\t\tfor ( var j=0, jen=name.length ; j<jen ; j++ ) {\n\t\t\t_Api.register( name[j], val );\n\t\t}\n\t\treturn;\n\t}\n\n\tvar\n\t\ti, ien,\n\t\their = name.split('.'),\n\t\tstruct = __apiStruct,\n\t\tkey, method;\n\n\tvar find = function ( src, name ) {\n\t\tfor ( var i=0, ien=src.length ; i<ien ; i++ ) {\n\t\t\tif ( src[i].name === name ) {\n\t\t\t\treturn src[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tfor ( i=0, ien=heir.length ; i<ien ; i++ ) {\n\t\tmethod = heir[i].indexOf('()') !== -1;\n\t\tkey = method ?\n\t\t\their[i].replace('()', '') :\n\t\t\their[i];\n\n\t\tvar src = find( struct, key );\n\t\tif ( ! src ) {\n\t\t\tsrc = {\n\t\t\t\tname:      key,\n\t\t\t\tval:       {},\n\t\t\t\tmethodExt: [],\n\t\t\t\tpropExt:   [],\n\t\t\t\ttype:      'object'\n\t\t\t};\n\t\t\tstruct.push( src );\n\t\t}\n\n\t\tif ( i === ien-1 ) {\n\t\t\tsrc.val = val;\n\t\t\tsrc.type = typeof val === 'function' ?\n\t\t\t\t'function' :\n\t\t\t\t$.isPlainObject( val ) ?\n\t\t\t\t\t'object' :\n\t\t\t\t\t'other';\n\t\t}\n\t\telse {\n\t\t\tstruct = method ?\n\t\t\t\tsrc.methodExt :\n\t\t\t\tsrc.propExt;\n\t\t}\n\t}\n};\n\n_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {\n\t_Api.register( pluralName, val );\n\n\t_Api.register( singularName, function () {\n\t\tvar ret = val.apply( this, arguments );\n\n\t\tif ( ret === this ) {\n\t\t\t// Returned item is the API instance that was passed in, return it\n\t\t\treturn this;\n\t\t}\n\t\telse if ( ret instanceof _Api ) {\n\t\t\t// New API instance returned, want the value from the first item\n\t\t\t// in the returned array for the singular result.\n\t\t\treturn ret.length ?\n\t\t\t\tArray.isArray( ret[0] ) ?\n\t\t\t\t\tnew _Api( ret.context, ret[0] ) : // Array results are 'enhanced'\n\t\t\t\t\tret[0] :\n\t\t\t\tundefined;\n\t\t}\n\n\t\t// Non-API return - just fire it back\n\t\treturn ret;\n\t} );\n};\n\n\n/**\n * Selector for HTML tables. Apply the given selector to the give array of\n * DataTables settings objects.\n *\n * @param {string|integer} [selector] jQuery selector string or integer\n * @param  {array} Array of DataTables settings objects to be filtered\n * @return {array}\n * @ignore\n */\nvar __table_selector = function ( selector, a )\n{\n\tif ( Array.isArray(selector) ) {\n\t\treturn $.map( selector, function (item) {\n\t\t\treturn __table_selector(item, a);\n\t\t} );\n\t}\n\n\t// Integer is used to pick out a table by index\n\tif ( typeof selector === 'number' ) {\n\t\treturn [ a[ selector ] ];\n\t}\n\n\t// Perform a jQuery selector on the table nodes\n\tvar nodes = $.map( a, function (el, i) {\n\t\treturn el.nTable;\n\t} );\n\n\treturn $(nodes)\n\t\t.filter( selector )\n\t\t.map( function (i) {\n\t\t\t// Need to translate back from the table node to the settings\n\t\t\tvar idx = $.inArray( this, nodes );\n\t\t\treturn a[ idx ];\n\t\t} )\n\t\t.toArray();\n};\n\n\n\n/**\n * Context selector for the API's context (i.e. the tables the API instance\n * refers to.\n *\n * @name    DataTable.Api#tables\n * @param {string|integer} [selector] Selector to pick which tables the iterator\n *   should operate on. If not given, all tables in the current context are\n *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to\n *   select multiple tables or as an integer to select a single table.\n * @returns {DataTable.Api} Returns a new API instance if a selector is given.\n */\n_api_register( 'tables()', function ( selector ) {\n\t// A new instance is created if there was a selector specified\n\treturn selector !== undefined && selector !== null ?\n\t\tnew _Api( __table_selector( selector, this.context ) ) :\n\t\tthis;\n} );\n\n\n_api_register( 'table()', function ( selector ) {\n\tvar tables = this.tables( selector );\n\tvar ctx = tables.context;\n\n\t// Truncate to the first matched table\n\treturn ctx.length ?\n\t\tnew _Api( ctx[0] ) :\n\t\ttables;\n} );\n\n\n_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTable;\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'tables().body()', 'table().body()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTBody;\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'tables().header()', 'table().header()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTHead;\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTFoot;\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'tables().containers()', 'table().container()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTableWrapper;\n\t}, 1 );\n} );\n\n\n\n/**\n * Redraw the tables in the current context.\n */\n_api_register( 'draw()', function ( paging ) {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( paging === 'page' ) {\n\t\t\t_fnDraw( settings );\n\t\t}\n\t\telse {\n\t\t\tif ( typeof paging === 'string' ) {\n\t\t\t\tpaging = paging === 'full-hold' ?\n\t\t\t\t\tfalse :\n\t\t\t\t\ttrue;\n\t\t\t}\n\n\t\t\t_fnReDraw( settings, paging===false );\n\t\t}\n\t} );\n} );\n\n\n\n/**\n * Get the current page index.\n *\n * @return {integer} Current page index (zero based)\n *//**\n * Set the current page.\n *\n * Note that if you attempt to show a page which does not exist, DataTables will\n * not throw an error, but rather reset the paging.\n *\n * @param {integer|string} action The paging action to take. This can be one of:\n *  * `integer` - The page index to jump to\n *  * `string` - An action to take:\n *    * `first` - Jump to first page.\n *    * `next` - Jump to the next page\n *    * `previous` - Jump to previous page\n *    * `last` - Jump to the last page.\n * @returns {DataTables.Api} this\n */\n_api_register( 'page()', function ( action ) {\n\tif ( action === undefined ) {\n\t\treturn this.page.info().page; // not an expensive call\n\t}\n\n\t// else, have an action to take on all tables\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnPageChange( settings, action );\n\t} );\n} );\n\n\n/**\n * Paging information for the first table in the current context.\n *\n * If you require paging information for another table, use the `table()` method\n * with a suitable selector.\n *\n * @return {object} Object with the following properties set:\n *  * `page` - Current page index (zero based - i.e. the first page is `0`)\n *  * `pages` - Total number of pages\n *  * `start` - Display index for the first record shown on the current page\n *  * `end` - Display index for the last record shown on the current page\n *  * `length` - Display length (number of records). Note that generally `start\n *    + length = end`, but this is not always true, for example if there are\n *    only 2 records to show on the final page, with a length of 10.\n *  * `recordsTotal` - Full data set length\n *  * `recordsDisplay` - Data set length once the current filtering criterion\n *    are applied.\n */\n_api_register( 'page.info()', function ( action ) {\n\tif ( this.context.length === 0 ) {\n\t\treturn undefined;\n\t}\n\n\tvar\n\t\tsettings   = this.context[0],\n\t\tstart      = settings._iDisplayStart,\n\t\tlen        = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,\n\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\tall        = len === -1;\n\n\treturn {\n\t\t\"page\":           all ? 0 : Math.floor( start / len ),\n\t\t\"pages\":          all ? 1 : Math.ceil( visRecords / len ),\n\t\t\"start\":          start,\n\t\t\"end\":            settings.fnDisplayEnd(),\n\t\t\"length\":         len,\n\t\t\"recordsTotal\":   settings.fnRecordsTotal(),\n\t\t\"recordsDisplay\": visRecords,\n\t\t\"serverSide\":     _fnDataSource( settings ) === 'ssp'\n\t};\n} );\n\n\n/**\n * Get the current page length.\n *\n * @return {integer} Current page length. Note `-1` indicates that all records\n *   are to be shown.\n *//**\n * Set the current page length.\n *\n * @param {integer} Page length to set. Use `-1` to show all records.\n * @returns {DataTables.Api} this\n */\n_api_register( 'page.len()', function ( len ) {\n\t// Note that we can't call this function 'length()' because `length`\n\t// is a Javascript property of functions which defines how many arguments\n\t// the function expects.\n\tif ( len === undefined ) {\n\t\treturn this.context.length !== 0 ?\n\t\t\tthis.context[0]._iDisplayLength :\n\t\t\tundefined;\n\t}\n\n\t// else, set the page length\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnLengthChange( settings, len );\n\t} );\n} );\n\n\n\nvar __reload = function ( settings, holdPosition, callback ) {\n\t// Use the draw event to trigger a callback\n\tif ( callback ) {\n\t\tvar api = new _Api( settings );\n\n\t\tapi.one( 'draw', function () {\n\t\t\tcallback( api.ajax.json() );\n\t\t} );\n\t}\n\n\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t_fnReDraw( settings, holdPosition );\n\t}\n\telse {\n\t\t_fnProcessingDisplay( settings, true );\n\n\t\t// Cancel an existing request\n\t\tvar xhr = settings.jqXHR;\n\t\tif ( xhr && xhr.readyState !== 4 ) {\n\t\t\txhr.abort();\n\t\t}\n\n\t\t// Trigger xhr\n\t\t_fnBuildAjax( settings, [], function( json ) {\n\t\t\t_fnClearTable( settings );\n\n\t\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t_fnAddData( settings, data[i] );\n\t\t\t}\n\n\t\t\t_fnReDraw( settings, holdPosition );\n\t\t\t_fnProcessingDisplay( settings, false );\n\t\t} );\n\t}\n};\n\n\n/**\n * Get the JSON response from the last Ajax request that DataTables made to the\n * server. Note that this returns the JSON from the first table in the current\n * context.\n *\n * @return {object} JSON received from the server.\n */\n_api_register( 'ajax.json()', function () {\n\tvar ctx = this.context;\n\n\tif ( ctx.length > 0 ) {\n\t\treturn ctx[0].json;\n\t}\n\n\t// else return undefined;\n} );\n\n\n/**\n * Get the data submitted in the last Ajax request\n */\n_api_register( 'ajax.params()', function () {\n\tvar ctx = this.context;\n\n\tif ( ctx.length > 0 ) {\n\t\treturn ctx[0].oAjaxData;\n\t}\n\n\t// else return undefined;\n} );\n\n\n/**\n * Reload tables from the Ajax data source. Note that this function will\n * automatically re-draw the table when the remote data has been loaded.\n *\n * @param {boolean} [reset=true] Reset (default) or hold the current paging\n *   position. A full re-sort and re-filter is performed when this method is\n *   called, which is why the pagination reset is the default action.\n * @returns {DataTables.Api} this\n */\n_api_register( 'ajax.reload()', function ( callback, resetPaging ) {\n\treturn this.iterator( 'table', function (settings) {\n\t\t__reload( settings, resetPaging===false, callback );\n\t} );\n} );\n\n\n/**\n * Get the current Ajax URL. Note that this returns the URL from the first\n * table in the current context.\n *\n * @return {string} Current Ajax source URL\n *//**\n * Set the Ajax URL. Note that this will set the URL for all tables in the\n * current context.\n *\n * @param {string} url URL to set.\n * @returns {DataTables.Api} this\n */\n_api_register( 'ajax.url()', function ( url ) {\n\tvar ctx = this.context;\n\n\tif ( url === undefined ) {\n\t\t// get\n\t\tif ( ctx.length === 0 ) {\n\t\t\treturn undefined;\n\t\t}\n\t\tctx = ctx[0];\n\n\t\treturn ctx.ajax ?\n\t\t\t$.isPlainObject( ctx.ajax ) ?\n\t\t\t\tctx.ajax.url :\n\t\t\t\tctx.ajax :\n\t\t\tctx.sAjaxSource;\n\t}\n\n\t// set\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( $.isPlainObject( settings.ajax ) ) {\n\t\t\tsettings.ajax.url = url;\n\t\t}\n\t\telse {\n\t\t\tsettings.ajax = url;\n\t\t}\n\t\t// No need to consider sAjaxSource here since DataTables gives priority\n\t\t// to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any\n\t\t// value of `sAjaxSource` redundant.\n\t} );\n} );\n\n\n/**\n * Load data from the newly set Ajax URL. Note that this method is only\n * available when `ajax.url()` is used to set a URL. Additionally, this method\n * has the same effect as calling `ajax.reload()` but is provided for\n * convenience when setting a new URL. Like `ajax.reload()` it will\n * automatically redraw the table once the remote data has been loaded.\n *\n * @returns {DataTables.Api} this\n */\n_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {\n\t// Same as a reload, but makes sense to present it for easy access after a\n\t// url change\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\t__reload( ctx, resetPaging===false, callback );\n\t} );\n} );\n\n\n\n\nvar _selector_run = function ( type, selector, selectFn, settings, opts )\n{\n\tvar\n\t\tout = [], res,\n\t\ta, i, ien, j, jen,\n\t\tselectorType = typeof selector;\n\n\t// Can't just check for isArray here, as an API or jQuery instance might be\n\t// given with their array like look\n\tif ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {\n\t\tselector = [ selector ];\n\t}\n\n\tfor ( i=0, ien=selector.length ; i<ien ; i++ ) {\n\t\t// Only split on simple strings - complex expressions will be jQuery selectors\n\t\ta = selector[i] && selector[i].split && ! selector[i].match(/[\\[\\(:]/) ?\n\t\t\tselector[i].split(',') :\n\t\t\t[ selector[i] ];\n\n\t\tfor ( j=0, jen=a.length ; j<jen ; j++ ) {\n\t\t\tres = selectFn( typeof a[j] === 'string' ? (a[j]).trim() : a[j] );\n\n\t\t\tif ( res && res.length ) {\n\t\t\t\tout = out.concat( res );\n\t\t\t}\n\t\t}\n\t}\n\n\t// selector extensions\n\tvar ext = _ext.selector[ type ];\n\tif ( ext.length ) {\n\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\tout = ext[i]( settings, opts, out );\n\t\t}\n\t}\n\n\treturn _unique( out );\n};\n\n\nvar _selector_opts = function ( opts )\n{\n\tif ( ! opts ) {\n\t\topts = {};\n\t}\n\n\t// Backwards compatibility for 1.9- which used the terminology filter rather\n\t// than search\n\tif ( opts.filter && opts.search === undefined ) {\n\t\topts.search = opts.filter;\n\t}\n\n\treturn $.extend( {\n\t\tsearch: 'none',\n\t\torder: 'current',\n\t\tpage: 'all'\n\t}, opts );\n};\n\n\nvar _selector_first = function ( inst )\n{\n\t// Reduce the API instance to the first item found\n\tfor ( var i=0, ien=inst.length ; i<ien ; i++ ) {\n\t\tif ( inst[i].length > 0 ) {\n\t\t\t// Assign the first element to the first item in the instance\n\t\t\t// and truncate the instance and context\n\t\t\tinst[0] = inst[i];\n\t\t\tinst[0].length = 1;\n\t\t\tinst.length = 1;\n\t\t\tinst.context = [ inst.context[i] ];\n\n\t\t\treturn inst;\n\t\t}\n\t}\n\n\t// Not found - return an empty instance\n\tinst.length = 0;\n\treturn inst;\n};\n\n\nvar _selector_row_indexes = function ( settings, opts )\n{\n\tvar\n\t\ti, ien, tmp, a=[],\n\t\tdisplayFiltered = settings.aiDisplay,\n\t\tdisplayMaster = settings.aiDisplayMaster;\n\n\tvar\n\t\tsearch = opts.search,  // none, applied, removed\n\t\torder  = opts.order,   // applied, current, index (original - compatibility with 1.9)\n\t\tpage   = opts.page;    // all, current\n\n\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t// In server-side processing mode, most options are irrelevant since\n\t\t// rows not shown don't exist and the index order is the applied order\n\t\t// Removed is a special case - for consistency just return an empty\n\t\t// array\n\t\treturn search === 'removed' ?\n\t\t\t[] :\n\t\t\t_range( 0, displayMaster.length );\n\t}\n\telse if ( page == 'current' ) {\n\t\t// Current page implies that order=current and filter=applied, since it is\n\t\t// fairly senseless otherwise, regardless of what order and search actually\n\t\t// are\n\t\tfor ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {\n\t\t\ta.push( displayFiltered[i] );\n\t\t}\n\t}\n\telse if ( order == 'current' || order == 'applied' ) {\n\t\tif ( search == 'none') {\n\t\t\ta = displayMaster.slice();\n\t\t}\n\t\telse if ( search == 'applied' ) {\n\t\t\ta = displayFiltered.slice();\n\t\t}\n\t\telse if ( search == 'removed' ) {\n\t\t\t// O(n+m) solution by creating a hash map\n\t\t\tvar displayFilteredMap = {};\n\n\t\t\tfor ( var i=0, ien=displayFiltered.length ; i<ien ; i++ ) {\n\t\t\t\tdisplayFilteredMap[displayFiltered[i]] = null;\n\t\t\t}\n\n\t\t\ta = $.map( displayMaster, function (el) {\n\t\t\t\treturn ! displayFilteredMap.hasOwnProperty(el) ?\n\t\t\t\t\tel :\n\t\t\t\t\tnull;\n\t\t\t} );\n\t\t}\n\t}\n\telse if ( order == 'index' || order == 'original' ) {\n\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\tif ( search == 'none' ) {\n\t\t\t\ta.push( i );\n\t\t\t}\n\t\t\telse { // applied | removed\n\t\t\t\ttmp = $.inArray( i, displayFiltered );\n\n\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t(tmp >= 0   && search == 'applied') )\n\t\t\t\t{\n\t\t\t\t\ta.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a;\n};\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Rows\n *\n * {}          - no selector - use all available rows\n * {integer}   - row aoData index\n * {node}      - TR node\n * {string}    - jQuery selector to apply to the TR elements\n * {array}     - jQuery array of nodes, or simply an array of TR nodes\n *\n */\nvar __row_selector = function ( settings, selector, opts )\n{\n\tvar rows;\n\tvar run = function ( sel ) {\n\t\tvar selInt = _intVal( sel );\n\t\tvar i, ien;\n\t\tvar aoData = settings.aoData;\n\n\t\t// Short cut - selector is a number and no options provided (default is\n\t\t// all records, so no need to check if the index is in there, since it\n\t\t// must be - dev error if the index doesn't exist).\n\t\tif ( selInt !== null && ! opts ) {\n\t\t\treturn [ selInt ];\n\t\t}\n\n\t\tif ( ! rows ) {\n\t\t\trows = _selector_row_indexes( settings, opts );\n\t\t}\n\n\t\tif ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {\n\t\t\t// Selector - integer\n\t\t\treturn [ selInt ];\n\t\t}\n\t\telse if ( sel === null || sel === undefined || sel === '' ) {\n\t\t\t// Selector - none\n\t\t\treturn rows;\n\t\t}\n\n\t\t// Selector - function\n\t\tif ( typeof sel === 'function' ) {\n\t\t\treturn $.map( rows, function (idx) {\n\t\t\t\tvar row = aoData[ idx ];\n\t\t\t\treturn sel( idx, row._aData, row.nTr ) ? idx : null;\n\t\t\t} );\n\t\t}\n\n\t\t// Selector - node\n\t\tif ( sel.nodeName ) {\n\t\t\tvar rowIdx = sel._DT_RowIndex;  // Property added by DT for fast lookup\n\t\t\tvar cellIdx = sel._DT_CellIndex;\n\n\t\t\tif ( rowIdx !== undefined ) {\n\t\t\t\t// Make sure that the row is actually still present in the table\n\t\t\t\treturn aoData[ rowIdx ] && aoData[ rowIdx ].nTr === sel ?\n\t\t\t\t\t[ rowIdx ] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t\telse if ( cellIdx ) {\n\t\t\t\treturn aoData[ cellIdx.row ] && aoData[ cellIdx.row ].nTr === sel.parentNode ?\n\t\t\t\t\t[ cellIdx.row ] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar host = $(sel).closest('*[data-dt-row]');\n\t\t\t\treturn host.length ?\n\t\t\t\t\t[ host.data('dt-row') ] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t}\n\n\t\t// ID selector. Want to always be able to select rows by id, regardless\n\t\t// of if the tr element has been created or not, so can't rely upon\n\t\t// jQuery here - hence a custom implementation. This does not match\n\t\t// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,\n\t\t// but to select it using a CSS selector engine (like Sizzle or\n\t\t// querySelect) it would need to need to be escaped for some characters.\n\t\t// DataTables simplifies this for row selectors since you can select\n\t\t// only a row. A # indicates an id any anything that follows is the id -\n\t\t// unescaped.\n\t\tif ( typeof sel === 'string' && sel.charAt(0) === '#' ) {\n\t\t\t// get row index from id\n\t\t\tvar rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];\n\t\t\tif ( rowObj !== undefined ) {\n\t\t\t\treturn [ rowObj.idx ];\n\t\t\t}\n\n\t\t\t// need to fall through to jQuery in case there is DOM id that\n\t\t\t// matches\n\t\t}\n\t\t\n\t\t// Get nodes in the order from the `rows` array with null values removed\n\t\tvar nodes = _removeEmpty(\n\t\t\t_pluck_order( settings.aoData, rows, 'nTr' )\n\t\t);\n\n\t\t// Selector - jQuery selector string, array of nodes or jQuery object/\n\t\t// As jQuery's .filter() allows jQuery objects to be passed in filter,\n\t\t// it also allows arrays, so this will cope with all three options\n\t\treturn $(nodes)\n\t\t\t.filter( sel )\n\t\t\t.map( function () {\n\t\t\t\treturn this._DT_RowIndex;\n\t\t\t} )\n\t\t\t.toArray();\n\t};\n\n\treturn _selector_run( 'row', selector, run, settings, opts );\n};\n\n\n_api_register( 'rows()', function ( selector, opts ) {\n\t// argument shifting\n\tif ( selector === undefined ) {\n\t\tselector = '';\n\t}\n\telse if ( $.isPlainObject( selector ) ) {\n\t\topts = selector;\n\t\tselector = '';\n\t}\n\n\topts = _selector_opts( opts );\n\n\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\treturn __row_selector( settings, selector, opts );\n\t}, 1 );\n\n\t// Want argument shifting here and in __row_selector?\n\tinst.selector.rows = selector;\n\tinst.selector.opts = opts;\n\n\treturn inst;\n} );\n\n_api_register( 'rows().nodes()', function () {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\treturn settings.aoData[ row ].nTr || undefined;\n\t}, 1 );\n} );\n\n_api_register( 'rows().data()', function () {\n\treturn this.iterator( true, 'rows', function ( settings, rows ) {\n\t\treturn _pluck_order( settings.aoData, rows, '_aData' );\n\t}, 1 );\n} );\n\n_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\tvar r = settings.aoData[ row ];\n\t\treturn type === 'search' ? r._aFilterData : r._aSortData;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t_fnInvalidate( settings, row, src );\n\t} );\n} );\n\n_api_registerPlural( 'rows().indexes()', 'row().index()', function () {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\treturn row;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {\n\tvar a = [];\n\tvar context = this.context;\n\n\t// `iterator` will drop undefined values, but in this case we want them\n\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\tfor ( var j=0, jen=this[i].length ; j<jen ; j++ ) {\n\t\t\tvar id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );\n\t\t\ta.push( (hash === true ? '#' : '' )+ id );\n\t\t}\n\t}\n\n\treturn new _Api( context, a );\n} );\n\n_api_registerPlural( 'rows().remove()', 'row().remove()', function () {\n\tvar that = this;\n\n\tthis.iterator( 'row', function ( settings, row, thatIdx ) {\n\t\tvar data = settings.aoData;\n\t\tvar rowData = data[ row ];\n\t\tvar i, ien, j, jen;\n\t\tvar loopRow, loopCells;\n\n\t\tdata.splice( row, 1 );\n\n\t\t// Update the cached indexes\n\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\tloopRow = data[i];\n\t\t\tloopCells = loopRow.anCells;\n\n\t\t\t// Rows\n\t\t\tif ( loopRow.nTr !== null ) {\n\t\t\t\tloopRow.nTr._DT_RowIndex = i;\n\t\t\t}\n\n\t\t\t// Cells\n\t\t\tif ( loopCells !== null ) {\n\t\t\t\tfor ( j=0, jen=loopCells.length ; j<jen ; j++ ) {\n\t\t\t\t\tloopCells[j]._DT_CellIndex.row = i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Delete from the display arrays\n\t\t_fnDeleteIndex( settings.aiDisplayMaster, row );\n\t\t_fnDeleteIndex( settings.aiDisplay, row );\n\t\t_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes\n\n\t\t// For server-side processing tables - subtract the deleted row from the count\n\t\tif ( settings._iRecordsDisplay > 0 ) {\n\t\t\tsettings._iRecordsDisplay--;\n\t\t}\n\n\t\t// Check for an 'overflow' they case for displaying the table\n\t\t_fnLengthOverflow( settings );\n\n\t\t// Remove the row's ID reference if there is one\n\t\tvar id = settings.rowIdFn( rowData._aData );\n\t\tif ( id !== undefined ) {\n\t\t\tdelete settings.aIds[ id ];\n\t\t}\n\t} );\n\n\tthis.iterator( 'table', function ( settings ) {\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\tsettings.aoData[i].idx = i;\n\t\t}\n\t} );\n\n\treturn this;\n} );\n\n\n_api_register( 'rows.add()', function ( rows ) {\n\tvar newRows = this.iterator( 'table', function ( settings ) {\n\t\t\tvar row, i, ien;\n\t\t\tvar out = [];\n\n\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\trow = rows[i];\n\n\t\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\t\tout.push( _fnAddTr( settings, row )[0] );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout.push( _fnAddData( settings, row ) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn out;\n\t\t}, 1 );\n\n\t// Return an Api.rows() extended instance, so rows().nodes() etc can be used\n\tvar modRows = this.rows( -1 );\n\tmodRows.pop();\n\t$.merge( modRows, newRows );\n\n\treturn modRows;\n} );\n\n\n\n\n\n/**\n *\n */\n_api_register( 'row()', function ( selector, opts ) {\n\treturn _selector_first( this.rows( selector, opts ) );\n} );\n\n\n_api_register( 'row().data()', function ( data ) {\n\tvar ctx = this.context;\n\n\tif ( data === undefined ) {\n\t\t// Get\n\t\treturn ctx.length && this.length ?\n\t\t\tctx[0].aoData[ this[0] ]._aData :\n\t\t\tundefined;\n\t}\n\n\t// Set\n\tvar row = ctx[0].aoData[ this[0] ];\n\trow._aData = data;\n\n\t// If the DOM has an id, and the data source is an array\n\tif ( Array.isArray( data ) && row.nTr && row.nTr.id ) {\n\t\t_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );\n\t}\n\n\t// Automatically invalidate\n\t_fnInvalidate( ctx[0], this[0], 'data' );\n\n\treturn this;\n} );\n\n\n_api_register( 'row().node()', function () {\n\tvar ctx = this.context;\n\n\treturn ctx.length && this.length ?\n\t\tctx[0].aoData[ this[0] ].nTr || null :\n\t\tnull;\n} );\n\n\n_api_register( 'row.add()', function ( row ) {\n\t// Allow a jQuery object to be passed in - only a single row is added from\n\t// it though - the first element in the set\n\tif ( row instanceof $ && row.length ) {\n\t\trow = row[0];\n\t}\n\n\tvar rows = this.iterator( 'table', function ( settings ) {\n\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\treturn _fnAddTr( settings, row )[0];\n\t\t}\n\t\treturn _fnAddData( settings, row );\n\t} );\n\n\t// Return an Api.rows() extended instance, with the newly added row selected\n\treturn this.row( rows[0] );\n} );\n\n\n$(document).on('plugin-init.dt', function (e, context) {\n\tvar api = new _Api( context );\n\tvar namespace = 'on-plugin-init';\n\tvar stateSaveParamsEvent = 'stateSaveParams.' + namespace;\n\tvar destroyEvent = 'destroy. ' + namespace;\n\n\tapi.on( stateSaveParamsEvent, function ( e, settings, d ) {\n\t\t// This could be more compact with the API, but it is a lot faster as a simple\n\t\t// internal loop\n\t\tvar idFn = settings.rowIdFn;\n\t\tvar data = settings.aoData;\n\t\tvar ids = [];\n\n\t\tfor (var i=0 ; i<data.length ; i++) {\n\t\t\tif (data[i]._detailsShow) {\n\t\t\t\tids.push( '#' + idFn(data[i]._aData) );\n\t\t\t}\n\t\t}\n\n\t\td.childRows = ids;\n\t});\n\n\tapi.on( destroyEvent, function () {\n\t\tapi.off(stateSaveParamsEvent + ' ' + destroyEvent);\n\t});\n\n\tvar loaded = api.state.loaded();\n\n\tif ( loaded && loaded.childRows ) {\n\t\tapi\n\t\t\t.rows( $.map(loaded.childRows, function (id){\n\t\t\t\treturn id.replace(/:/g, '\\\\:')\n\t\t\t}) )\n\t\t\t.every( function () {\n\t\t\t\t_fnCallbackFire( context, null, 'requestChild', [ this ] )\n\t\t\t});\n\t}\n});\n\nvar __details_add = function ( ctx, row, data, klass )\n{\n\t// Convert to array of TR elements\n\tvar rows = [];\n\tvar addRow = function ( r, k ) {\n\t\t// Recursion to allow for arrays of jQuery objects\n\t\tif ( Array.isArray( r ) || r instanceof $ ) {\n\t\t\tfor ( var i=0, ien=r.length ; i<ien ; i++ ) {\n\t\t\t\taddRow( r[i], k );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// If we get a TR element, then just add it directly - up to the dev\n\t\t// to add the correct number of columns etc\n\t\tif ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {\n\t\t\trows.push( r );\n\t\t}\n\t\telse {\n\t\t\t// Otherwise create a row with a wrapper\n\t\t\tvar created = $('<tr><td></td></tr>').addClass( k );\n\t\t\t$('td', created)\n\t\t\t\t.addClass( k )\n\t\t\t\t.html( r )\n\t\t\t\t[0].colSpan = _fnVisbleColumns( ctx );\n\n\t\t\trows.push( created[0] );\n\t\t}\n\t};\n\n\taddRow( data, klass );\n\n\tif ( row._details ) {\n\t\trow._details.detach();\n\t}\n\n\trow._details = $(rows);\n\n\t// If the children were already shown, that state should be retained\n\tif ( row._detailsShow ) {\n\t\trow._details.insertAfter( row.nTr );\n\t}\n};\n\n\n// Make state saving of child row details async to allow them to be batch processed\nvar __details_state = DataTable.util.throttle(\n\tfunction (ctx) {\n\t\t_fnSaveState( ctx[0] )\n\t},\n\t500\n);\n\n\nvar __details_remove = function ( api, idx )\n{\n\tvar ctx = api.context;\n\n\tif ( ctx.length ) {\n\t\tvar row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];\n\n\t\tif ( row && row._details ) {\n\t\t\trow._details.remove();\n\n\t\t\trow._detailsShow = undefined;\n\t\t\trow._details = undefined;\n\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t__details_state( ctx );\n\t\t}\n\t}\n};\n\n\nvar __details_display = function ( api, show ) {\n\tvar ctx = api.context;\n\n\tif ( ctx.length && api.length ) {\n\t\tvar row = ctx[0].aoData[ api[0] ];\n\n\t\tif ( row._details ) {\n\t\t\trow._detailsShow = show;\n\n\t\t\tif ( show ) {\n\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t$( row.nTr ).addClass( 'dt-hasChild' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\trow._details.detach();\n\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t}\n\n\t\t\t_fnCallbackFire( ctx[0], null, 'childRow', [ show, api.row( api[0] ) ] )\n\n\t\t\t__details_events( ctx[0] );\n\t\t\t__details_state( ctx );\n\t\t}\n\t}\n};\n\n\nvar __details_events = function ( settings )\n{\n\tvar api = new _Api( settings );\n\tvar namespace = '.dt.DT_details';\n\tvar drawEvent = 'draw'+namespace;\n\tvar colvisEvent = 'column-sizing'+namespace;\n\tvar destroyEvent = 'destroy'+namespace;\n\tvar data = settings.aoData;\n\n\tapi.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );\n\n\tif ( _pluck( data, '_details' ).length > 0 ) {\n\t\t// On each draw, insert the required elements into the document\n\t\tapi.on( drawEvent, function ( e, ctx ) {\n\t\t\tif ( settings !== ctx ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tapi.rows( {page:'current'} ).eq(0).each( function (idx) {\n\t\t\t\t// Internal data grab\n\t\t\t\tvar row = data[ idx ];\n\n\t\t\t\tif ( row._detailsShow ) {\n\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\t// Column visibility change - update the colspan\n\t\tapi.on( colvisEvent, function ( e, ctx, idx, vis ) {\n\t\t\tif ( settings !== ctx ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Update the colspan for the details rows (note, only if it already has\n\t\t\t// a colspan)\n\t\t\tvar row, visible = _fnVisbleColumns( ctx );\n\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\trow = data[i];\n\n\t\t\t\tif ( row._details ) {\n\t\t\t\t\trow._details.each(function () {\n\t\t\t\t\t\tvar el = $(this).children('td');\n\n\t\t\t\t\t\tif (el.length == 1) {\n\t\t\t\t\t\t\tel.attr('colspan', visible);\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\t// Table destroyed - nuke any child rows\n\t\tapi.on( destroyEvent, function ( e, ctx ) {\n\t\t\tif ( settings !== ctx ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\tif ( data[i]._details ) {\n\t\t\t\t\t__details_remove( api, i );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n};\n\n// Strings for the method names to help minification\nvar _emp = '';\nvar _child_obj = _emp+'row().child';\nvar _child_mth = _child_obj+'()';\n\n// data can be:\n//  tr\n//  string\n//  jQuery or array of any of the above\n_api_register( _child_mth, function ( data, klass ) {\n\tvar ctx = this.context;\n\n\tif ( data === undefined ) {\n\t\t// get\n\t\treturn ctx.length && this.length ?\n\t\t\tctx[0].aoData[ this[0] ]._details :\n\t\t\tundefined;\n\t}\n\telse if ( data === true ) {\n\t\t// show\n\t\tthis.child.show();\n\t}\n\telse if ( data === false ) {\n\t\t// remove\n\t\t__details_remove( this );\n\t}\n\telse if ( ctx.length && this.length ) {\n\t\t// set\n\t\t__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );\n\t}\n\n\treturn this;\n} );\n\n\n_api_register( [\n\t_child_obj+'.show()',\n\t_child_mth+'.show()' // only when `child()` was called with parameters (without\n], function ( show ) {   // it returns an object and this method is not executed)\n\t__details_display( this, true );\n\treturn this;\n} );\n\n\n_api_register( [\n\t_child_obj+'.hide()',\n\t_child_mth+'.hide()' // only when `child()` was called with parameters (without\n], function () {         // it returns an object and this method is not executed)\n\t__details_display( this, false );\n\treturn this;\n} );\n\n\n_api_register( [\n\t_child_obj+'.remove()',\n\t_child_mth+'.remove()' // only when `child()` was called with parameters (without\n], function () {           // it returns an object and this method is not executed)\n\t__details_remove( this );\n\treturn this;\n} );\n\n\n_api_register( _child_obj+'.isShown()', function () {\n\tvar ctx = this.context;\n\n\tif ( ctx.length && this.length ) {\n\t\t// _detailsShown as false or undefined will fall through to return false\n\t\treturn ctx[0].aoData[ this[0] ]._detailsShow || false;\n\t}\n\treturn false;\n} );\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Columns\n *\n * {integer}           - column index (>=0 count from left, <0 count from right)\n * \"{integer}:visIdx\"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)\n * \"{integer}:visible\" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)\n * \"{string}:name\"     - column name\n * \"{string}\"          - jQuery selector on column header nodes\n *\n */\n\n// can be an array of these items, comma separated list, or an array of comma\n// separated lists\n\nvar __re_column_selector = /^([^:]+):(name|visIdx|visible)$/;\n\n\n// r1 and r2 are redundant - but it means that the parameters match for the\n// iterator callback in columns().data()\nvar __columnData = function ( settings, column, r1, r2, rows ) {\n\tvar a = [];\n\tfor ( var row=0, ien=rows.length ; row<ien ; row++ ) {\n\t\ta.push( _fnGetCellData( settings, rows[row], column ) );\n\t}\n\treturn a;\n};\n\n\nvar __column_selector = function ( settings, selector, opts )\n{\n\tvar\n\t\tcolumns = settings.aoColumns,\n\t\tnames = _pluck( columns, 'sName' ),\n\t\tnodes = _pluck( columns, 'nTh' );\n\n\tvar run = function ( s ) {\n\t\tvar selInt = _intVal( s );\n\n\t\t// Selector - all\n\t\tif ( s === '' ) {\n\t\t\treturn _range( columns.length );\n\t\t}\n\n\t\t// Selector - index\n\t\tif ( selInt !== null ) {\n\t\t\treturn [ selInt >= 0 ?\n\t\t\t\tselInt : // Count from left\n\t\t\t\tcolumns.length + selInt // Count from right (+ because its a negative value)\n\t\t\t];\n\t\t}\n\n\t\t// Selector = function\n\t\tif ( typeof s === 'function' ) {\n\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\n\t\t\treturn $.map( columns, function (col, idx) {\n\t\t\t\treturn s(\n\t\t\t\t\t\tidx,\n\t\t\t\t\t\t__columnData( settings, idx, 0, 0, rows ),\n\t\t\t\t\t\tnodes[ idx ]\n\t\t\t\t\t) ? idx : null;\n\t\t\t} );\n\t\t}\n\n\t\t// jQuery or string selector\n\t\tvar match = typeof s === 'string' ?\n\t\t\ts.match( __re_column_selector ) :\n\t\t\t'';\n\n\t\tif ( match ) {\n\t\t\tswitch( match[2] ) {\n\t\t\t\tcase 'visIdx':\n\t\t\t\tcase 'visible':\n\t\t\t\t\tvar idx = parseInt( match[1], 10 );\n\t\t\t\t\t// Visible index given, convert to column index\n\t\t\t\t\tif ( idx < 0 ) {\n\t\t\t\t\t\t// Counting from the right\n\t\t\t\t\t\tvar visColumns = $.map( columns, function (col,i) {\n\t\t\t\t\t\t\treturn col.bVisible ? i : null;\n\t\t\t\t\t\t} );\n\t\t\t\t\t\treturn [ visColumns[ visColumns.length + idx ] ];\n\t\t\t\t\t}\n\t\t\t\t\t// Counting from the left\n\t\t\t\t\treturn [ _fnVisibleToColumnIndex( settings, idx ) ];\n\n\t\t\t\tcase 'name':\n\t\t\t\t\t// match by name. `names` is column index complete and in order\n\t\t\t\t\treturn $.map( names, function (name, i) {\n\t\t\t\t\t\treturn name === match[1] ? i : null;\n\t\t\t\t\t} );\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\n\t\t// Cell in the table body\n\t\tif ( s.nodeName && s._DT_CellIndex ) {\n\t\t\treturn [ s._DT_CellIndex.column ];\n\t\t}\n\n\t\t// jQuery selector on the TH elements for the columns\n\t\tvar jqResult = $( nodes )\n\t\t\t.filter( s )\n\t\t\t.map( function () {\n\t\t\t\treturn $.inArray( this, nodes ); // `nodes` is column index complete and in order\n\t\t\t} )\n\t\t\t.toArray();\n\n\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\treturn jqResult;\n\t\t}\n\n\t\t// Otherwise a node which might have a `dt-column` data attribute, or be\n\t\t// a child or such an element\n\t\tvar host = $(s).closest('*[data-dt-column]');\n\t\treturn host.length ?\n\t\t\t[ host.data('dt-column') ] :\n\t\t\t[];\n\t};\n\n\treturn _selector_run( 'column', selector, run, settings, opts );\n};\n\n\nvar __setColumnVis = function ( settings, column, vis ) {\n\tvar\n\t\tcols = settings.aoColumns,\n\t\tcol  = cols[ column ],\n\t\tdata = settings.aoData,\n\t\trow, cells, i, ien, tr;\n\n\t// Get\n\tif ( vis === undefined ) {\n\t\treturn col.bVisible;\n\t}\n\n\t// Set\n\t// No change\n\tif ( col.bVisible === vis ) {\n\t\treturn;\n\t}\n\n\tif ( vis ) {\n\t\t// Insert column\n\t\t// Need to decide if we should use appendChild or insertBefore\n\t\tvar insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );\n\n\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\ttr = data[i].nTr;\n\t\t\tcells = data[i].anCells;\n\n\t\t\tif ( tr ) {\n\t\t\t\t// insertBefore can act like appendChild if 2nd arg is null\n\t\t\t\ttr.insertBefore( cells[ column ], cells[ insertBefore ] || null );\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\t// Remove column\n\t\t$( _pluck( settings.aoData, 'anCells', column ) ).detach();\n\t}\n\n\t// Common actions\n\tcol.bVisible = vis;\n};\n\n\n_api_register( 'columns()', function ( selector, opts ) {\n\t// argument shifting\n\tif ( selector === undefined ) {\n\t\tselector = '';\n\t}\n\telse if ( $.isPlainObject( selector ) ) {\n\t\topts = selector;\n\t\tselector = '';\n\t}\n\n\topts = _selector_opts( opts );\n\n\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\treturn __column_selector( settings, selector, opts );\n\t}, 1 );\n\n\t// Want argument shifting here and in _row_selector?\n\tinst.selector.cols = selector;\n\tinst.selector.opts = opts;\n\n\treturn inst;\n} );\n\n_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn settings.aoColumns[column].nTh;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn settings.aoColumns[column].nTf;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().data()', 'column().data()', function () {\n\treturn this.iterator( 'column-rows', __columnData, 1 );\n} );\n\n_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn settings.aoColumns[column].mData;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {\n\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\treturn _pluck_order( settings.aoData, rows,\n\t\t\ttype === 'search' ? '_aFilterData' : '_aSortData', column\n\t\t);\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {\n\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\treturn _pluck_order( settings.aoData, rows, 'anCells', column ) ;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {\n\tvar that = this;\n\tvar ret = this.iterator( 'column', function ( settings, column ) {\n\t\tif ( vis === undefined ) {\n\t\t\treturn settings.aoColumns[ column ].bVisible;\n\t\t} // else\n\t\t__setColumnVis( settings, column, vis );\n\t} );\n\n\t// Group the column visibility changes\n\tif ( vis !== undefined ) {\n\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\t// Redraw the header after changes\n\t\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\t\t// Update colspan for no records display. Child rows and extensions will use their own\n\t\t\t// listeners to do this - only need to update the empty table item here\n\t\t\tif ( ! settings.aiDisplay.length ) {\n\t\t\t\t$(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisbleColumns(settings));\n\t\t\t}\n\t\n\t\t\t_fnSaveState( settings );\n\n\t\t\t// Second loop once the first is done for events\n\t\t\tthat.iterator( 'column', function ( settings, column ) {\n\t\t\t\t_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );\n\t\t\t} );\n\n\t\t\tif ( calc === undefined || calc ) {\n\t\t\t\tthat.columns.adjust();\n\t\t\t}\n\t\t});\n\t}\n\n\treturn ret;\n} );\n\n_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn type === 'visible' ?\n\t\t\t_fnColumnIndexToVisible( settings, column ) :\n\t\t\tcolumn;\n\t}, 1 );\n} );\n\n_api_register( 'columns.adjust()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnAdjustColumnSizing( settings );\n\t}, 1 );\n} );\n\n_api_register( 'column.index()', function ( type, idx ) {\n\tif ( this.context.length !== 0 ) {\n\t\tvar ctx = this.context[0];\n\n\t\tif ( type === 'fromVisible' || type === 'toData' ) {\n\t\t\treturn _fnVisibleToColumnIndex( ctx, idx );\n\t\t}\n\t\telse if ( type === 'fromData' || type === 'toVisible' ) {\n\t\t\treturn _fnColumnIndexToVisible( ctx, idx );\n\t\t}\n\t}\n} );\n\n_api_register( 'column()', function ( selector, opts ) {\n\treturn _selector_first( this.columns( selector, opts ) );\n} );\n\nvar __cell_selector = function ( settings, selector, opts )\n{\n\tvar data = settings.aoData;\n\tvar rows = _selector_row_indexes( settings, opts );\n\tvar cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );\n\tvar allCells = $(_flatten( [], cells ));\n\tvar row;\n\tvar columns = settings.aoColumns.length;\n\tvar a, i, ien, j, o, host;\n\n\tvar run = function ( s ) {\n\t\tvar fnSelector = typeof s === 'function';\n\n\t\tif ( s === null || s === undefined || fnSelector ) {\n\t\t\t// All cells and function selectors\n\t\t\ta = [];\n\n\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\trow = rows[i];\n\n\t\t\t\tfor ( j=0 ; j<columns ; j++ ) {\n\t\t\t\t\to = {\n\t\t\t\t\t\trow: row,\n\t\t\t\t\t\tcolumn: j\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( fnSelector ) {\n\t\t\t\t\t\t// Selector - function\n\t\t\t\t\t\thost = data[ row ];\n\n\t\t\t\t\t\tif ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {\n\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Selector - all\n\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn a;\n\t\t}\n\t\t\n\t\t// Selector - index\n\t\tif ( $.isPlainObject( s ) ) {\n\t\t\t// Valid cell index and its in the array of selectable rows\n\t\t\treturn s.column !== undefined && s.row !== undefined && $.inArray( s.row, rows ) !== -1 ?\n\t\t\t\t[s] :\n\t\t\t\t[];\n\t\t}\n\n\t\t// Selector - jQuery filtered cells\n\t\tvar jqResult = allCells\n\t\t\t.filter( s )\n\t\t\t.map( function (i, el) {\n\t\t\t\treturn { // use a new object, in case someone changes the values\n\t\t\t\t\trow:    el._DT_CellIndex.row,\n\t\t\t\t\tcolumn: el._DT_CellIndex.column\n \t\t\t\t};\n\t\t\t} )\n\t\t\t.toArray();\n\n\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\treturn jqResult;\n\t\t}\n\n\t\t// Otherwise the selector is a node, and there is one last option - the\n\t\t// element might be a child of an element which has dt-row and dt-column\n\t\t// data attributes\n\t\thost = $(s).closest('*[data-dt-row]');\n\t\treturn host.length ?\n\t\t\t[ {\n\t\t\t\trow: host.data('dt-row'),\n\t\t\t\tcolumn: host.data('dt-column')\n\t\t\t} ] :\n\t\t\t[];\n\t};\n\n\treturn _selector_run( 'cell', selector, run, settings, opts );\n};\n\n\n\n\n_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {\n\t// Argument shifting\n\tif ( $.isPlainObject( rowSelector ) ) {\n\t\t// Indexes\n\t\tif ( rowSelector.row === undefined ) {\n\t\t\t// Selector options in first parameter\n\t\t\topts = rowSelector;\n\t\t\trowSelector = null;\n\t\t}\n\t\telse {\n\t\t\t// Cell index objects in first parameter\n\t\t\topts = columnSelector;\n\t\t\tcolumnSelector = null;\n\t\t}\n\t}\n\tif ( $.isPlainObject( columnSelector ) ) {\n\t\topts = columnSelector;\n\t\tcolumnSelector = null;\n\t}\n\n\t// Cell selector\n\tif ( columnSelector === null || columnSelector === undefined ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn __cell_selector( settings, rowSelector, _selector_opts( opts ) );\n\t\t} );\n\t}\n\n\t// The default built in options need to apply to row and columns\n\tvar internalOpts = opts ? {\n\t\tpage: opts.page,\n\t\torder: opts.order,\n\t\tsearch: opts.search\n\t} : {};\n\n\t// Row + column selector\n\tvar columns = this.columns( columnSelector, internalOpts );\n\tvar rows = this.rows( rowSelector, internalOpts );\n\tvar i, ien, j, jen;\n\n\tvar cellsNoOpts = this.iterator( 'table', function ( settings, idx ) {\n\t\tvar a = [];\n\n\t\tfor ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {\n\t\t\tfor ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {\n\t\t\t\ta.push( {\n\t\t\t\t\trow:    rows[idx][i],\n\t\t\t\t\tcolumn: columns[idx][j]\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\treturn a;\n\t}, 1 );\n\n\t// There is currently only one extension which uses a cell selector extension\n\t// It is a _major_ performance drag to run this if it isn't needed, so this is\n\t// an extension specific check at the moment\n\tvar cells = opts && opts.selected ?\n\t\tthis.cells( cellsNoOpts, opts ) :\n\t\tcellsNoOpts;\n\n\t$.extend( cells.selector, {\n\t\tcols: columnSelector,\n\t\trows: rowSelector,\n\t\topts: opts\n\t} );\n\n\treturn cells;\n} );\n\n\n_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\tvar data = settings.aoData[ row ];\n\n\t\treturn data && data.anCells ?\n\t\t\tdata.anCells[ column ] :\n\t\t\tundefined;\n\t}, 1 );\n} );\n\n\n_api_register( 'cells().data()', function () {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn _fnGetCellData( settings, row, column );\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {\n\ttype = type === 'search' ? '_aFilterData' : '_aSortData';\n\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn settings.aoData[ row ][ type ][ column ];\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn _fnGetCellData( settings, row, column, type );\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn {\n\t\t\trow: row,\n\t\t\tcolumn: column,\n\t\t\tcolumnVisible: _fnColumnIndexToVisible( settings, column )\n\t\t};\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t_fnInvalidate( settings, row, src, column );\n\t} );\n} );\n\n\n\n_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {\n\treturn _selector_first( this.cells( rowSelector, columnSelector, opts ) );\n} );\n\n\n_api_register( 'cell().data()', function ( data ) {\n\tvar ctx = this.context;\n\tvar cell = this[0];\n\n\tif ( data === undefined ) {\n\t\t// Get\n\t\treturn ctx.length && cell.length ?\n\t\t\t_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :\n\t\t\tundefined;\n\t}\n\n\t// Set\n\t_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );\n\t_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );\n\n\treturn this;\n} );\n\n\n\n/**\n * Get current ordering (sorting) that has been applied to the table.\n *\n * @returns {array} 2D array containing the sorting information for the first\n *   table in the current context. Each element in the parent array represents\n *   a column being sorted upon (i.e. multi-sorting with two columns would have\n *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is\n *   the column index that the sorting condition applies to, the second is the\n *   direction of the sort (`desc` or `asc`) and, optionally, the third is the\n *   index of the sorting order from the `column.sorting` initialisation array.\n *//**\n * Set the ordering for the table.\n *\n * @param {integer} order Column index to sort upon.\n * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)\n * @returns {DataTables.Api} this\n *//**\n * Set the ordering for the table.\n *\n * @param {array} order 1D array of sorting information to be applied.\n * @param {array} [...] Optional additional sorting conditions\n * @returns {DataTables.Api} this\n *//**\n * Set the ordering for the table.\n *\n * @param {array} order 2D array of sorting information to be applied.\n * @returns {DataTables.Api} this\n */\n_api_register( 'order()', function ( order, dir ) {\n\tvar ctx = this.context;\n\n\tif ( order === undefined ) {\n\t\t// get\n\t\treturn ctx.length !== 0 ?\n\t\t\tctx[0].aaSorting :\n\t\t\tundefined;\n\t}\n\n\t// set\n\tif ( typeof order === 'number' ) {\n\t\t// Simple column / direction passed in\n\t\torder = [ [ order, dir ] ];\n\t}\n\telse if ( order.length && ! Array.isArray( order[0] ) ) {\n\t\t// Arguments passed in (list of 1D arrays)\n\t\torder = Array.prototype.slice.call( arguments );\n\t}\n\t// otherwise a 2D array was passed in\n\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tsettings.aaSorting = order.slice();\n\t} );\n} );\n\n\n/**\n * Attach a sort listener to an element for a given column\n *\n * @param {node|jQuery|string} node Identifier for the element(s) to attach the\n *   listener to. This can take the form of a single DOM node, a jQuery\n *   collection of nodes or a jQuery selector which will identify the node(s).\n * @param {integer} column the column that a click on this node will sort on\n * @param {function} [callback] callback function when sort is run\n * @returns {DataTables.Api} this\n */\n_api_register( 'order.listener()', function ( node, column, callback ) {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnSortAttachListener( settings, node, column, callback );\n\t} );\n} );\n\n\n_api_register( 'order.fixed()', function ( set ) {\n\tif ( ! set ) {\n\t\tvar ctx = this.context;\n\t\tvar fixed = ctx.length ?\n\t\t\tctx[0].aaSortingFixed :\n\t\t\tundefined;\n\n\t\treturn Array.isArray( fixed ) ?\n\t\t\t{ pre: fixed } :\n\t\t\tfixed;\n\t}\n\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tsettings.aaSortingFixed = $.extend( true, {}, set );\n\t} );\n} );\n\n\n// Order by the selected column(s)\n_api_register( [\n\t'columns().order()',\n\t'column().order()'\n], function ( dir ) {\n\tvar that = this;\n\n\treturn this.iterator( 'table', function ( settings, i ) {\n\t\tvar sort = [];\n\n\t\t$.each( that[i], function (j, col) {\n\t\t\tsort.push( [ col, dir ] );\n\t\t} );\n\n\t\tsettings.aaSorting = sort;\n\t} );\n} );\n\n\n\n_api_register( 'search()', function ( input, regex, smart, caseInsen ) {\n\tvar ctx = this.context;\n\n\tif ( input === undefined ) {\n\t\t// get\n\t\treturn ctx.length !== 0 ?\n\t\t\tctx[0].oPreviousSearch.sSearch :\n\t\t\tundefined;\n\t}\n\n\t// set\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\treturn;\n\t\t}\n\n\t\t_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {\n\t\t\t\"sSearch\": input+\"\",\n\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t} ), 1 );\n\t} );\n} );\n\n\n_api_registerPlural(\n\t'columns().search()',\n\t'column().search()',\n\tfunction ( input, regex, smart, caseInsen ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\tvar preSearch = settings.aoPreSearchCols;\n\n\t\t\tif ( input === undefined ) {\n\t\t\t\t// get\n\t\t\t\treturn preSearch[ column ].sSearch;\n\t\t\t}\n\n\t\t\t// set\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$.extend( preSearch[ column ], {\n\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t} );\n\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch, 1 );\n\t\t} );\n\t}\n);\n\n/*\n * State API methods\n */\n\n_api_register( 'state()', function () {\n\treturn this.context.length ?\n\t\tthis.context[0].oSavedState :\n\t\tnull;\n} );\n\n\n_api_register( 'state.clear()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t// Save an empty object\n\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, {} );\n\t} );\n} );\n\n\n_api_register( 'state.loaded()', function () {\n\treturn this.context.length ?\n\t\tthis.context[0].oLoadedState :\n\t\tnull;\n} );\n\n\n_api_register( 'state.save()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnSaveState( settings );\n\t} );\n} );\n\n\n\n/**\n * Set the jQuery or window object to be used by DataTables\n *\n * @param {*} module Library / container object\n * @param {string} [type] Library or container type `lib`, `win` or `datetime`.\n *   If not provided, automatic detection is attempted.\n */\nDataTable.use = function (module, type) {\n\tif (type === 'lib' || module.fn) {\n\t\t$ = module;\n\t}\n\telse if (type == 'win' || module.document) {\n\t\twindow = module;\n\t\tdocument = module.document;\n\t}\n\telse if (type === 'datetime' || module.type === 'DateTime') {\n\t\tDataTable.DateTime = module;\n\t}\n}\n\n/**\n * CommonJS factory function pass through. This will check if the arguments\n * given are a window object or a jQuery object. If so they are set\n * accordingly.\n * @param {*} root Window\n * @param {*} jq jQUery\n * @returns {boolean} Indicator\n */\nDataTable.factory = function (root, jq) {\n\tvar is = false;\n\n\t// Test if the first parameter is a window object\n\tif (root && root.document) {\n\t\twindow = root;\n\t\tdocument = root.document;\n\t}\n\n\t// Test if the second parameter is a jQuery object\n\tif (jq && jq.fn && jq.fn.jquery) {\n\t\t$ = jq;\n\t\tis = true;\n\t}\n\n\treturn is;\n}\n\n/**\n * Provide a common method for plug-ins to check the version of DataTables being\n * used, in order to ensure compatibility.\n *\n *  @param {string} version Version string to check for, in the format \"X.Y.Z\".\n *    Note that the formats \"X\" and \"X.Y\" are also acceptable.\n *  @returns {boolean} true if this version of DataTables is greater or equal to\n *    the required version, or false if this version of DataTales is not\n *    suitable\n *  @static\n *  @dtopt API-Static\n *\n *  @example\n *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );\n */\nDataTable.versionCheck = DataTable.fnVersionCheck = function( version )\n{\n\tvar aThis = DataTable.version.split('.');\n\tvar aThat = version.split('.');\n\tvar iThis, iThat;\n\n\tfor ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {\n\t\tiThis = parseInt( aThis[i], 10 ) || 0;\n\t\tiThat = parseInt( aThat[i], 10 ) || 0;\n\n\t\t// Parts are the same, keep comparing\n\t\tif (iThis === iThat) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Parts are different, return immediately\n\t\treturn iThis > iThat;\n\t}\n\n\treturn true;\n};\n\n\n/**\n * Check if a `<table>` node is a DataTable table already or not.\n *\n *  @param {node|jquery|string} table Table node, jQuery object or jQuery\n *      selector for the table to test. Note that if more than more than one\n *      table is passed on, only the first will be checked\n *  @returns {boolean} true the table given is a DataTable, or false otherwise\n *  @static\n *  @dtopt API-Static\n *\n *  @example\n *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {\n *      $('#example').dataTable();\n *    }\n */\nDataTable.isDataTable = DataTable.fnIsDataTable = function ( table )\n{\n\tvar t = $(table).get(0);\n\tvar is = false;\n\n\tif ( table instanceof DataTable.Api ) {\n\t\treturn true;\n\t}\n\n\t$.each( DataTable.settings, function (i, o) {\n\t\tvar head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;\n\t\tvar foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;\n\n\t\tif ( o.nTable === t || head === t || foot === t ) {\n\t\t\tis = true;\n\t\t}\n\t} );\n\n\treturn is;\n};\n\n\n/**\n * Get all DataTable tables that have been initialised - optionally you can\n * select to get only currently visible tables.\n *\n *  @param {boolean} [visible=false] Flag to indicate if you want all (default)\n *    or visible tables only.\n *  @returns {array} Array of `table` nodes (not DataTable instances) which are\n *    DataTables\n *  @static\n *  @dtopt API-Static\n *\n *  @example\n *    $.each( $.fn.dataTable.tables(true), function () {\n *      $(table).DataTable().columns.adjust();\n *    } );\n */\nDataTable.tables = DataTable.fnTables = function ( visible )\n{\n\tvar api = false;\n\n\tif ( $.isPlainObject( visible ) ) {\n\t\tapi = visible.api;\n\t\tvisible = visible.visible;\n\t}\n\n\tvar a = $.map( DataTable.settings, function (o) {\n\t\tif ( !visible || (visible && $(o.nTable).is(':visible')) ) {\n\t\t\treturn o.nTable;\n\t\t}\n\t} );\n\n\treturn api ?\n\t\tnew _Api( a ) :\n\t\ta;\n};\n\n\n/**\n * Convert from camel case parameters to Hungarian notation. This is made public\n * for the extensions to provide the same ability as DataTables core to accept\n * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase\n * parameters.\n *\n *  @param {object} src The model object which holds all parameters that can be\n *    mapped.\n *  @param {object} user The object to convert from camel case to Hungarian.\n *  @param {boolean} force When set to `true`, properties which already have a\n *    Hungarian value in the `user` object will be overwritten. Otherwise they\n *    won't be.\n */\nDataTable.camelToHungarian = _fnCamelToHungarian;\n\n\n\n/**\n *\n */\n_api_register( '$()', function ( selector, opts ) {\n\tvar\n\t\trows   = this.rows( opts ).nodes(), // Get all rows\n\t\tjqRows = $(rows);\n\n\treturn $( [].concat(\n\t\tjqRows.filter( selector ).toArray(),\n\t\tjqRows.find( selector ).toArray()\n\t) );\n} );\n\n\n// jQuery functions to operate on the tables\n$.each( [ 'on', 'one', 'off' ], function (i, key) {\n\t_api_register( key+'()', function ( /* event, handler */ ) {\n\t\tvar args = Array.prototype.slice.call(arguments);\n\n\t\t// Add the `dt` namespace automatically if it isn't already present\n\t\targs[0] = $.map( args[0].split( /\\s/ ), function ( e ) {\n\t\t\treturn ! e.match(/\\.dt\\b/) ?\n\t\t\t\te+'.dt' :\n\t\t\t\te;\n\t\t\t} ).join( ' ' );\n\n\t\tvar inst = $( this.tables().nodes() );\n\t\tinst[key].apply( inst, args );\n\t\treturn this;\n\t} );\n} );\n\n\n_api_register( 'clear()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnClearTable( settings );\n\t} );\n} );\n\n\n_api_register( 'settings()', function () {\n\treturn new _Api( this.context, this.context );\n} );\n\n\n_api_register( 'init()', function () {\n\tvar ctx = this.context;\n\treturn ctx.length ? ctx[0].oInit : null;\n} );\n\n\n_api_register( 'data()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\treturn _pluck( settings.aoData, '_aData' );\n\t} ).flatten();\n} );\n\n\n_api_register( 'destroy()', function ( remove ) {\n\tremove = remove || false;\n\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tvar classes   = settings.oClasses;\n\t\tvar table     = settings.nTable;\n\t\tvar tbody     = settings.nTBody;\n\t\tvar thead     = settings.nTHead;\n\t\tvar tfoot     = settings.nTFoot;\n\t\tvar jqTable   = $(table);\n\t\tvar jqTbody   = $(tbody);\n\t\tvar jqWrapper = $(settings.nTableWrapper);\n\t\tvar rows      = $.map( settings.aoData, function (r) { return r.nTr; } );\n\t\tvar i, ien;\n\n\t\t// Flag to note that the table is currently being destroyed - no action\n\t\t// should be taken\n\t\tsettings.bDestroying = true;\n\n\t\t// Fire off the destroy callbacks for plug-ins etc\n\t\t_fnCallbackFire( settings, \"aoDestroyCallback\", \"destroy\", [settings] );\n\n\t\t// If not being removed from the document, make all columns visible\n\t\tif ( ! remove ) {\n\t\t\tnew _Api( settings ).columns().visible( true );\n\t\t}\n\n\t\t// Blitz all `DT` namespaced events (these are internal events, the\n\t\t// lowercase, `dt` events are user subscribed and they are responsible\n\t\t// for removing them\n\t\tjqWrapper.off('.DT').find(':not(tbody *)').off('.DT');\n\t\t$(window).off('.DT-'+settings.sInstance);\n\n\t\t// When scrolling we had to break the table up - restore it\n\t\tif ( table != thead.parentNode ) {\n\t\t\tjqTable.children('thead').detach();\n\t\t\tjqTable.append( thead );\n\t\t}\n\n\t\tif ( tfoot && table != tfoot.parentNode ) {\n\t\t\tjqTable.children('tfoot').detach();\n\t\t\tjqTable.append( tfoot );\n\t\t}\n\n\t\tsettings.aaSorting = [];\n\t\tsettings.aaSortingFixed = [];\n\t\t_fnSortingClasses( settings );\n\n\t\t$( rows ).removeClass( settings.asStripeClasses.join(' ') );\n\n\t\t$('th, td', thead).removeClass( classes.sSortable+' '+\n\t\t\tclasses.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone\n\t\t);\n\n\t\t// Add the TR elements back into the table in their original order\n\t\tjqTbody.children().detach();\n\t\tjqTbody.append( rows );\n\n\t\tvar orig = settings.nTableWrapper.parentNode;\n\n\t\t// Remove the DataTables generated nodes, events and classes\n\t\tvar removedMethod = remove ? 'remove' : 'detach';\n\t\tjqTable[ removedMethod ]();\n\t\tjqWrapper[ removedMethod ]();\n\n\t\t// If we need to reattach the table to the document\n\t\tif ( ! remove && orig ) {\n\t\t\t// insertBefore acts like appendChild if !arg[1]\n\t\t\torig.insertBefore( table, settings.nTableReinsertBefore );\n\n\t\t\t// Restore the width of the original table - was read from the style property,\n\t\t\t// so we can restore directly to that\n\t\t\tjqTable\n\t\t\t\t.css( 'width', settings.sDestroyWidth )\n\t\t\t\t.removeClass( classes.sTable );\n\n\t\t\t// If the were originally stripe classes - then we add them back here.\n\t\t\t// Note this is not fool proof (for example if not all rows had stripe\n\t\t\t// classes - but it's a good effort without getting carried away\n\t\t\tien = settings.asDestroyStripes.length;\n\n\t\t\tif ( ien ) {\n\t\t\t\tjqTbody.children().each( function (i) {\n\t\t\t\t\t$(this).addClass( settings.asDestroyStripes[i % ien] );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\t/* Remove the settings object from the settings array */\n\t\tvar idx = $.inArray( settings, DataTable.settings );\n\t\tif ( idx !== -1 ) {\n\t\t\tDataTable.settings.splice( idx, 1 );\n\t\t}\n\t} );\n} );\n\n\n// Add the `every()` method for rows, columns and cells in a compact form\n$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {\n\t_api_register( type+'s().every()', function ( fn ) {\n\t\tvar opts = this.selector.opts;\n\t\tvar api = this;\n\n\t\treturn this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {\n\t\t\t// Rows and columns:\n\t\t\t//  arg1 - index\n\t\t\t//  arg2 - table counter\n\t\t\t//  arg3 - loop counter\n\t\t\t//  arg4 - undefined\n\t\t\t// Cells:\n\t\t\t//  arg1 - row index\n\t\t\t//  arg2 - column index\n\t\t\t//  arg3 - table counter\n\t\t\t//  arg4 - loop counter\n\t\t\tfn.call(\n\t\t\t\tapi[ type ](\n\t\t\t\t\targ1,\n\t\t\t\t\ttype==='cell' ? arg2 : opts,\n\t\t\t\t\ttype==='cell' ? opts : undefined\n\t\t\t\t),\n\t\t\t\targ1, arg2, arg3, arg4\n\t\t\t);\n\t\t} );\n\t} );\n} );\n\n\n// i18n method for extensions to be able to use the language object from the\n// DataTable\n_api_register( 'i18n()', function ( token, def, plural ) {\n\tvar ctx = this.context[0];\n\tvar resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );\n\n\tif ( resolved === undefined ) {\n\t\tresolved = def;\n\t}\n\n\tif ( plural !== undefined && $.isPlainObject( resolved ) ) {\n\t\tresolved = resolved[ plural ] !== undefined ?\n\t\t\tresolved[ plural ] :\n\t\t\tresolved._;\n\t}\n\n\treturn typeof resolved === 'string'\n\t\t? resolved.replace( '%d', plural ) // nb: plural might be undefined,\n\t\t: resolved;\n} );\n/**\n * Version string for plug-ins to check compatibility. Allowed format is\n * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used\n * only for non-release builds. See https://semver.org/ for more information.\n *  @member\n *  @type string\n *  @default Version number\n */\nDataTable.version = \"1.13.11\";\n\n/**\n * Private data store, containing all of the settings objects that are\n * created for the tables on a given page.\n *\n * Note that the `DataTable.settings` object is aliased to\n * `jQuery.fn.dataTableExt` through which it may be accessed and\n * manipulated, or `jQuery.fn.dataTable.settings`.\n *  @member\n *  @type array\n *  @default []\n *  @private\n */\nDataTable.settings = [];\n\n/**\n * Object models container, for the various models that DataTables has\n * available to it. These models define the objects that are used to hold\n * the active state and configuration of the table.\n *  @namespace\n */\nDataTable.models = {};\n\n\n\n/**\n * Template object for the way in which DataTables holds information about\n * search information for the global filter and individual column filters.\n *  @namespace\n */\nDataTable.models.oSearch = {\n\t/**\n\t * Flag to indicate if the filtering should be case insensitive or not\n\t *  @type boolean\n\t *  @default true\n\t */\n\t\"bCaseInsensitive\": true,\n\n\t/**\n\t * Applied search term\n\t *  @type string\n\t *  @default <i>Empty string</i>\n\t */\n\t\"sSearch\": \"\",\n\n\t/**\n\t * Flag to indicate if the search term should be interpreted as a\n\t * regular expression (true) or not (false) and therefore and special\n\t * regex characters escaped.\n\t *  @type boolean\n\t *  @default false\n\t */\n\t\"bRegex\": false,\n\n\t/**\n\t * Flag to indicate if DataTables is to use its smart filtering or not.\n\t *  @type boolean\n\t *  @default true\n\t */\n\t\"bSmart\": true,\n\n\t/**\n\t * Flag to indicate if DataTables should only trigger a search when\n\t * the return key is pressed.\n\t *  @type boolean\n\t *  @default false\n\t */\n\t\"return\": false\n};\n\n\n\n\n/**\n * Template object for the way in which DataTables holds information about\n * each individual row. This is the object format used for the settings\n * aoData array.\n *  @namespace\n */\nDataTable.models.oRow = {\n\t/**\n\t * TR element for the row\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTr\": null,\n\n\t/**\n\t * Array of TD elements for each row. This is null until the row has been\n\t * created.\n\t *  @type array nodes\n\t *  @default []\n\t */\n\t\"anCells\": null,\n\n\t/**\n\t * Data object from the original data source for the row. This is either\n\t * an array if using the traditional form of DataTables, or an object if\n\t * using mData options. The exact type will depend on the passed in\n\t * data from the data source, or will be an array if using DOM a data\n\t * source.\n\t *  @type array|object\n\t *  @default []\n\t */\n\t\"_aData\": [],\n\n\t/**\n\t * Sorting data cache - this array is ostensibly the same length as the\n\t * number of columns (although each index is generated only as it is\n\t * needed), and holds the data that is used for sorting each column in the\n\t * row. We do this cache generation at the start of the sort in order that\n\t * the formatting of the sort data need be done only once for each cell\n\t * per sort. This array should not be read from or written to by anything\n\t * other than the master sorting methods.\n\t *  @type array\n\t *  @default null\n\t *  @private\n\t */\n\t\"_aSortData\": null,\n\n\t/**\n\t * Per cell filtering data cache. As per the sort data cache, used to\n\t * increase the performance of the filtering in DataTables\n\t *  @type array\n\t *  @default null\n\t *  @private\n\t */\n\t\"_aFilterData\": null,\n\n\t/**\n\t * Filtering data cache. This is the same as the cell filtering cache, but\n\t * in this case a string rather than an array. This is easily computed with\n\t * a join on `_aFilterData`, but is provided as a cache so the join isn't\n\t * needed on every search (memory traded for performance)\n\t *  @type array\n\t *  @default null\n\t *  @private\n\t */\n\t\"_sFilterRow\": null,\n\n\t/**\n\t * Cache of the class name that DataTables has applied to the row, so we\n\t * can quickly look at this variable rather than needing to do a DOM check\n\t * on className for the nTr property.\n\t *  @type string\n\t *  @default <i>Empty string</i>\n\t *  @private\n\t */\n\t\"_sRowStripe\": \"\",\n\n\t/**\n\t * Denote if the original data source was from the DOM, or the data source\n\t * object. This is used for invalidating data, so DataTables can\n\t * automatically read data from the original source, unless uninstructed\n\t * otherwise.\n\t *  @type string\n\t *  @default null\n\t *  @private\n\t */\n\t\"src\": null,\n\n\t/**\n\t * Index in the aoData array. This saves an indexOf lookup when we have the\n\t * object, but want to know the index\n\t *  @type integer\n\t *  @default -1\n\t *  @private\n\t */\n\t\"idx\": -1\n};\n\n\n/**\n * Template object for the column information object in DataTables. This object\n * is held in the settings aoColumns array and contains all the information that\n * DataTables needs about each individual column.\n *\n * Note that this object is related to {@link DataTable.defaults.column}\n * but this one is the internal data store for DataTables's cache of columns.\n * It should NOT be manipulated outside of DataTables. Any configuration should\n * be done through the initialisation options.\n *  @namespace\n */\nDataTable.models.oColumn = {\n\t/**\n\t * Column index. This could be worked out on-the-fly with $.inArray, but it\n\t * is faster to just hold it as a variable\n\t *  @type integer\n\t *  @default null\n\t */\n\t\"idx\": null,\n\n\t/**\n\t * A list of the columns that sorting should occur on when this column\n\t * is sorted. That this property is an array allows multi-column sorting\n\t * to be defined for a column (for example first name / last name columns\n\t * would benefit from this). The values are integers pointing to the\n\t * columns to be sorted on (typically it will be a single integer pointing\n\t * at itself, but that doesn't need to be the case).\n\t *  @type array\n\t */\n\t\"aDataSort\": null,\n\n\t/**\n\t * Define the sorting directions that are applied to the column, in sequence\n\t * as the column is repeatedly sorted upon - i.e. the first value is used\n\t * as the sorting direction when the column if first sorted (clicked on).\n\t * Sort it again (click again) and it will move on to the next index.\n\t * Repeat until loop.\n\t *  @type array\n\t */\n\t\"asSorting\": null,\n\n\t/**\n\t * Flag to indicate if the column is searchable, and thus should be included\n\t * in the filtering or not.\n\t *  @type boolean\n\t */\n\t\"bSearchable\": null,\n\n\t/**\n\t * Flag to indicate if the column is sortable or not.\n\t *  @type boolean\n\t */\n\t\"bSortable\": null,\n\n\t/**\n\t * Flag to indicate if the column is currently visible in the table or not\n\t *  @type boolean\n\t */\n\t\"bVisible\": null,\n\n\t/**\n\t * Store for manual type assignment using the `column.type` option. This\n\t * is held in store so we can manipulate the column's `sType` property.\n\t *  @type string\n\t *  @default null\n\t *  @private\n\t */\n\t\"_sManualType\": null,\n\n\t/**\n\t * Flag to indicate if HTML5 data attributes should be used as the data\n\t * source for filtering or sorting. True is either are.\n\t *  @type boolean\n\t *  @default false\n\t *  @private\n\t */\n\t\"_bAttrSrc\": false,\n\n\t/**\n\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t * allowing you to modify the DOM element (add background colour for example) when the\n\t * element is available.\n\t *  @type function\n\t *  @param {element} nTd The TD node that has been created\n\t *  @param {*} sData The Data for the cell\n\t *  @param {array|object} oData The data for the whole row\n\t *  @param {int} iRow The row index for the aoData data store\n\t *  @default null\n\t */\n\t\"fnCreatedCell\": null,\n\n\t/**\n\t * Function to get data from a cell in a column. You should <b>never</b>\n\t * access data directly through _aData internally in DataTables - always use\n\t * the method attached to this property. It allows mData to function as\n\t * required. This function is automatically assigned by the column\n\t * initialisation method\n\t *  @type function\n\t *  @param {array|object} oData The data array/object for the array\n\t *    (i.e. aoData[]._aData)\n\t *  @param {string} sSpecific The specific data type you want to get -\n\t *    'display', 'type' 'filter' 'sort'\n\t *  @returns {*} The data for the cell from the given row's data\n\t *  @default null\n\t */\n\t\"fnGetData\": null,\n\n\t/**\n\t * Function to set data for a cell in the column. You should <b>never</b>\n\t * set the data directly to _aData internally in DataTables - always use\n\t * this method. It allows mData to function as required. This function\n\t * is automatically assigned by the column initialisation method\n\t *  @type function\n\t *  @param {array|object} oData The data array/object for the array\n\t *    (i.e. aoData[]._aData)\n\t *  @param {*} sValue Value to set\n\t *  @default null\n\t */\n\t\"fnSetData\": null,\n\n\t/**\n\t * Property to read the value for the cells in the column from the data\n\t * source array / object. If null, then the default content is used, if a\n\t * function is given then the return from the function is used.\n\t *  @type function|int|string|null\n\t *  @default null\n\t */\n\t\"mData\": null,\n\n\t/**\n\t * Partner property to mData which is used (only when defined) to get\n\t * the data - i.e. it is basically the same as mData, but without the\n\t * 'set' option, and also the data fed to it is the result from mData.\n\t * This is the rendering method to match the data method of mData.\n\t *  @type function|int|string|null\n\t *  @default null\n\t */\n\t\"mRender\": null,\n\n\t/**\n\t * Unique header TH/TD element for this column - this is what the sorting\n\t * listener is attached to (if sorting is enabled.)\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTh\": null,\n\n\t/**\n\t * Unique footer TH/TD element for this column (if there is one). Not used\n\t * in DataTables as such, but can be used for plug-ins to reference the\n\t * footer for each column.\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTf\": null,\n\n\t/**\n\t * The class to apply to all TD elements in the table's TBODY for the column\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sClass\": null,\n\n\t/**\n\t * When DataTables calculates the column widths to assign to each column,\n\t * it finds the longest string in each column and then constructs a\n\t * temporary table and reads the widths from that. The problem with this\n\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t * string - thus the calculation can go wrong (doing it properly and putting\n\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t * a \"work around\" we provide this option. It will append its value to the\n\t * text that is found to be the longest string for the column - i.e. padding.\n\t *  @type string\n\t */\n\t\"sContentPadding\": null,\n\n\t/**\n\t * Allows a default value to be given for a column's data, and will be used\n\t * whenever a null data source is encountered (this can be because mData\n\t * is set to null, or because the data source itself is null).\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sDefaultContent\": null,\n\n\t/**\n\t * Name for the column, allowing reference to the column by name as well as\n\t * by index (needs a lookup to work by name).\n\t *  @type string\n\t */\n\t\"sName\": null,\n\n\t/**\n\t * Custom sorting data type - defines which of the available plug-ins in\n\t * afnSortData the custom sorting will use - if any is defined.\n\t *  @type string\n\t *  @default std\n\t */\n\t\"sSortDataType\": 'std',\n\n\t/**\n\t * Class to be applied to the header element when sorting on this column\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sSortingClass\": null,\n\n\t/**\n\t * Class to be applied to the header element when sorting on this column -\n\t * when jQuery UI theming is used.\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sSortingClassJUI\": null,\n\n\t/**\n\t * Title of the column - what is seen in the TH element (nTh).\n\t *  @type string\n\t */\n\t\"sTitle\": null,\n\n\t/**\n\t * Column sorting and filtering type\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sType\": null,\n\n\t/**\n\t * Width of the column\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sWidth\": null,\n\n\t/**\n\t * Width of the column when it was first \"encountered\"\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sWidthOrig\": null\n};\n\n\n/*\n * Developer note: The properties of the object below are given in Hungarian\n * notation, that was used as the interface for DataTables prior to v1.10, however\n * from v1.10 onwards the primary interface is camel case. In order to avoid\n * breaking backwards compatibility utterly with this change, the Hungarian\n * version is still, internally the primary interface, but is is not documented\n * - hence the @name tags in each doc comment. This allows a Javascript function\n * to create a map from Hungarian notation to camel case (going the other direction\n * would require each property to be listed, which would add around 3K to the size\n * of DataTables, while this method is about a 0.5K hit).\n *\n * Ultimately this does pave the way for Hungarian notation to be dropped\n * completely, but that is a massive amount of work and will break current\n * installs (therefore is on-hold until v2).\n */\n\n/**\n * Initialisation options that can be given to DataTables at initialisation\n * time.\n *  @namespace\n */\nDataTable.defaults = {\n\t/**\n\t * An array of data to use for the table, passed in at initialisation which\n\t * will be used in preference to any data which is already in the DOM. This is\n\t * particularly useful for constructing tables purely in Javascript, for\n\t * example with a custom Ajax call.\n\t *  @type array\n\t *  @default null\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.data\n\t *\n\t *  @example\n\t *    // Using a 2D array data source\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"data\": [\n\t *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],\n\t *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],\n\t *        ],\n\t *        \"columns\": [\n\t *          { \"title\": \"Engine\" },\n\t *          { \"title\": \"Browser\" },\n\t *          { \"title\": \"Platform\" },\n\t *          { \"title\": \"Version\" },\n\t *          { \"title\": \"Grade\" }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using an array of objects as a data source (`data`)\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"data\": [\n\t *          {\n\t *            \"engine\":   \"Trident\",\n\t *            \"browser\":  \"Internet Explorer 4.0\",\n\t *            \"platform\": \"Win 95+\",\n\t *            \"version\":  4,\n\t *            \"grade\":    \"X\"\n\t *          },\n\t *          {\n\t *            \"engine\":   \"Trident\",\n\t *            \"browser\":  \"Internet Explorer 5.0\",\n\t *            \"platform\": \"Win 95+\",\n\t *            \"version\":  5,\n\t *            \"grade\":    \"C\"\n\t *          }\n\t *        ],\n\t *        \"columns\": [\n\t *          { \"title\": \"Engine\",   \"data\": \"engine\" },\n\t *          { \"title\": \"Browser\",  \"data\": \"browser\" },\n\t *          { \"title\": \"Platform\", \"data\": \"platform\" },\n\t *          { \"title\": \"Version\",  \"data\": \"version\" },\n\t *          { \"title\": \"Grade\",    \"data\": \"grade\" }\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"aaData\": null,\n\n\n\t/**\n\t * If ordering is enabled, then DataTables will perform a first pass sort on\n\t * initialisation. You can define which column(s) the sort is performed\n\t * upon, and the sorting direction, with this variable. The `sorting` array\n\t * should contain an array for each column to be sorted initially containing\n\t * the column's index and a direction string ('asc' or 'desc').\n\t *  @type array\n\t *  @default [[0,'asc']]\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.order\n\t *\n\t *  @example\n\t *    // Sort by 3rd column first, and then 4th column\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"order\": [[2,'asc'], [3,'desc']]\n\t *      } );\n\t *    } );\n\t *\n\t *    // No initial sorting\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"order\": []\n\t *      } );\n\t *    } );\n\t */\n\t\"aaSorting\": [[0,'asc']],\n\n\n\t/**\n\t * This parameter is basically identical to the `sorting` parameter, but\n\t * cannot be overridden by user interaction with the table. What this means\n\t * is that you could have a column (visible or hidden) which the sorting\n\t * will always be forced on first - any sorting after that (from the user)\n\t * will then be performed as required. This can be useful for grouping rows\n\t * together.\n\t *  @type array\n\t *  @default null\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.orderFixed\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"orderFixed\": [[0,'asc']]\n\t *      } );\n\t *    } )\n\t */\n\t\"aaSortingFixed\": [],\n\n\n\t/**\n\t * DataTables can be instructed to load data to display in the table from a\n\t * Ajax source. This option defines how that Ajax call is made and where to.\n\t *\n\t * The `ajax` property has three different modes of operation, depending on\n\t * how it is defined. These are:\n\t *\n\t * * `string` - Set the URL from where the data should be loaded from.\n\t * * `object` - Define properties for `jQuery.ajax`.\n\t * * `function` - Custom data get function\n\t *\n\t * `string`\n\t * --------\n\t *\n\t * As a string, the `ajax` property simply defines the URL from which\n\t * DataTables will load data.\n\t *\n\t * `object`\n\t * --------\n\t *\n\t * As an object, the parameters in the object are passed to\n\t * [jQuery.ajax](https://api.jquery.com/jQuery.ajax/) allowing fine control\n\t * of the Ajax request. DataTables has a number of default parameters which\n\t * you can override using this option. Please refer to the jQuery\n\t * documentation for a full description of the options available, although\n\t * the following parameters provide additional options in DataTables or\n\t * require special consideration:\n\t *\n\t * * `data` - As with jQuery, `data` can be provided as an object, but it\n\t *   can also be used as a function to manipulate the data DataTables sends\n\t *   to the server. The function takes a single parameter, an object of\n\t *   parameters with the values that DataTables has readied for sending. An\n\t *   object may be returned which will be merged into the DataTables\n\t *   defaults, or you can add the items to the object that was passed in and\n\t *   not return anything from the function. This supersedes `fnServerParams`\n\t *   from DataTables 1.9-.\n\t *\n\t * * `dataSrc` - By default DataTables will look for the property `data` (or\n\t *   `aaData` for compatibility with DataTables 1.9-) when obtaining data\n\t *   from an Ajax source or for server-side processing - this parameter\n\t *   allows that property to be changed. You can use Javascript dotted\n\t *   object notation to get a data source for multiple levels of nesting, or\n\t *   it my be used as a function. As a function it takes a single parameter,\n\t *   the JSON returned from the server, which can be manipulated as\n\t *   required, with the returned value being that used by DataTables as the\n\t *   data source for the table. This supersedes `sAjaxDataProp` from\n\t *   DataTables 1.9-.\n\t *\n\t * * `success` - Should not be overridden it is used internally in\n\t *   DataTables. To manipulate / transform the data returned by the server\n\t *   use `ajax.dataSrc`, or use `ajax` as a function (see below).\n\t *\n\t * `function`\n\t * ----------\n\t *\n\t * As a function, making the Ajax call is left up to yourself allowing\n\t * complete control of the Ajax request. Indeed, if desired, a method other\n\t * than Ajax could be used to obtain the required data, such as Web storage\n\t * or an AIR database.\n\t *\n\t * The function is given four parameters and no return is required. The\n\t * parameters are:\n\t *\n\t * 1. _object_ - Data to send to the server\n\t * 2. _function_ - Callback function that must be executed when the required\n\t *    data has been obtained. That data should be passed into the callback\n\t *    as the only parameter\n\t * 3. _object_ - DataTables settings object for the table\n\t *\n\t * Note that this supersedes `fnServerData` from DataTables 1.9-.\n\t *\n\t *  @type string|object|function\n\t *  @default null\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.ajax\n\t *  @since 1.10.0\n\t *\n\t * @example\n\t *   // Get JSON data from a file via Ajax.\n\t *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": \"data.json\"\n\t *   } );\n\t *\n\t * @example\n\t *   // Get JSON data from a file via Ajax, using `dataSrc` to change\n\t *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": {\n\t *       \"url\": \"data.json\",\n\t *       \"dataSrc\": \"tableData\"\n\t *     }\n\t *   } );\n\t *\n\t * @example\n\t *   // Get JSON data from a file via Ajax, using `dataSrc` to read data\n\t *   // from a plain array rather than an array in an object\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": {\n\t *       \"url\": \"data.json\",\n\t *       \"dataSrc\": \"\"\n\t *     }\n\t *   } );\n\t *\n\t * @example\n\t *   // Manipulate the data returned from the server - add a link to data\n\t *   // (note this can, should, be done using `render` for the column - this\n\t *   // is just a simple example of how the data can be manipulated).\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": {\n\t *       \"url\": \"data.json\",\n\t *       \"dataSrc\": function ( json ) {\n\t *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {\n\t *           json[i][0] = '<a href=\"/message/'+json[i][0]+'>View message</a>';\n\t *         }\n\t *         return json;\n\t *       }\n\t *     }\n\t *   } );\n\t *\n\t * @example\n\t *   // Add data to the request\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": {\n\t *       \"url\": \"data.json\",\n\t *       \"data\": function ( d ) {\n\t *         return {\n\t *           \"extra_search\": $('#extra').val()\n\t *         };\n\t *       }\n\t *     }\n\t *   } );\n\t *\n\t * @example\n\t *   // Send request as POST\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": {\n\t *       \"url\": \"data.json\",\n\t *       \"type\": \"POST\"\n\t *     }\n\t *   } );\n\t *\n\t * @example\n\t *   // Get the data from localStorage (could interface with a form for\n\t *   // adding, editing and removing rows).\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": function (data, callback, settings) {\n\t *       callback(\n\t *         JSON.parse( localStorage.getItem('dataTablesData') )\n\t *       );\n\t *     }\n\t *   } );\n\t */\n\t\"ajax\": null,\n\n\n\t/**\n\t * This parameter allows you to readily specify the entries in the length drop\n\t * down menu that DataTables shows when pagination is enabled. It can be\n\t * either a 1D array of options which will be used for both the displayed\n\t * option and the value, or a 2D array which will use the array in the first\n\t * position as the value, and the array in the second position as the\n\t * displayed options (useful for language strings such as 'All').\n\t *\n\t * Note that the `pageLength` property will be automatically set to the\n\t * first value given in this array, unless `pageLength` is also provided.\n\t *  @type array\n\t *  @default [ 10, 25, 50, 100 ]\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.lengthMenu\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"lengthMenu\": [[10, 25, 50, -1], [10, 25, 50, \"All\"]]\n\t *      } );\n\t *    } );\n\t */\n\t\"aLengthMenu\": [ 10, 25, 50, 100 ],\n\n\n\t/**\n\t * The `columns` option in the initialisation parameter allows you to define\n\t * details about the way individual columns behave. For a full list of\n\t * column options that can be set, please see\n\t * {@link DataTable.defaults.column}. Note that if you use `columns` to\n\t * define your columns, you must have an entry in the array for every single\n\t * column that you have in your table (these can be null if you don't which\n\t * to specify any options).\n\t *  @member\n\t *\n\t *  @name DataTable.defaults.column\n\t */\n\t\"aoColumns\": null,\n\n\t/**\n\t * Very similar to `columns`, `columnDefs` allows you to target a specific\n\t * column, multiple columns, or all columns, using the `targets` property of\n\t * each object in the array. This allows great flexibility when creating\n\t * tables, as the `columnDefs` arrays can be of any length, targeting the\n\t * columns you specifically want. `columnDefs` may use any of the column\n\t * options available: {@link DataTable.defaults.column}, but it _must_\n\t * have `targets` defined in each object in the array. Values in the `targets`\n\t * array may be:\n\t *   <ul>\n\t *     <li>a string - class name will be matched on the TH for the column</li>\n\t *     <li>0 or a positive integer - column index counting from the left</li>\n\t *     <li>a negative integer - column index counting from the right</li>\n\t *     <li>the string \"_all\" - all columns (i.e. assign a default)</li>\n\t *   </ul>\n\t *  @member\n\t *\n\t *  @name DataTable.defaults.columnDefs\n\t */\n\t\"aoColumnDefs\": null,\n\n\n\t/**\n\t * Basically the same as `search`, this parameter defines the individual column\n\t * filtering state at initialisation time. The array must be of the same size\n\t * as the number of columns, and each element be an object with the parameters\n\t * `search` and `escapeRegex` (the latter is optional). 'null' is also\n\t * accepted and the default will be used.\n\t *  @type array\n\t *  @default []\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.searchCols\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"searchCols\": [\n\t *          null,\n\t *          { \"search\": \"My filter\" },\n\t *          null,\n\t *          { \"search\": \"^[0-9]\", \"escapeRegex\": false }\n\t *        ]\n\t *      } );\n\t *    } )\n\t */\n\t\"aoSearchCols\": [],\n\n\n\t/**\n\t * An array of CSS classes that should be applied to displayed rows. This\n\t * array may be of any length, and DataTables will apply each class\n\t * sequentially, looping when required.\n\t *  @type array\n\t *  @default null <i>Will take the values determined by the `oClasses.stripe*`\n\t *    options</i>\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.stripeClasses\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stripeClasses\": [ 'strip1', 'strip2', 'strip3' ]\n\t *      } );\n\t *    } )\n\t */\n\t\"asStripeClasses\": null,\n\n\n\t/**\n\t * Enable or disable automatic column width calculation. This can be disabled\n\t * as an optimisation (it takes some time to calculate the widths) if the\n\t * tables widths are passed in using `columns`.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.autoWidth\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"autoWidth\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bAutoWidth\": true,\n\n\n\t/**\n\t * Deferred rendering can provide DataTables with a huge speed boost when you\n\t * are using an Ajax or JS data source for the table. This option, when set to\n\t * true, will cause DataTables to defer the creation of the table elements for\n\t * each row until they are needed for a draw - saving a significant amount of\n\t * time.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.deferRender\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"ajax\": \"sources/arrays.txt\",\n\t *        \"deferRender\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"bDeferRender\": false,\n\n\n\t/**\n\t * Replace a DataTable which matches the given selector and replace it with\n\t * one which has the properties of the new initialisation object passed. If no\n\t * table matches the selector, then the new DataTable will be constructed as\n\t * per normal.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.destroy\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"srollY\": \"200px\",\n\t *        \"paginate\": false\n\t *      } );\n\t *\n\t *      // Some time later....\n\t *      $('#example').dataTable( {\n\t *        \"filter\": false,\n\t *        \"destroy\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"bDestroy\": false,\n\n\n\t/**\n\t * Enable or disable filtering of data. Filtering in DataTables is \"smart\" in\n\t * that it allows the end user to input multiple words (space separated) and\n\t * will match a row containing those words, even if not in the order that was\n\t * specified (this allow matching across multiple columns). Note that if you\n\t * wish to use filtering in DataTables this must remain 'true' - to remove the\n\t * default filtering input box and retain filtering abilities, please use\n\t * {@link DataTable.defaults.dom}.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.searching\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"searching\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bFilter\": true,\n\n\n\t/**\n\t * Enable or disable the table information display. This shows information\n\t * about the data that is currently visible on the page, including information\n\t * about filtered data if that action is being performed.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.info\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"info\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bInfo\": true,\n\n\n\t/**\n\t * Allows the end user to select the size of a formatted page from a select\n\t * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.lengthChange\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"lengthChange\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bLengthChange\": true,\n\n\n\t/**\n\t * Enable or disable pagination.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.paging\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"paging\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bPaginate\": true,\n\n\n\t/**\n\t * Enable or disable the display of a 'processing' indicator when the table is\n\t * being processed (e.g. a sort). This is particularly useful for tables with\n\t * large amounts of data where it can take a noticeable amount of time to sort\n\t * the entries.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.processing\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"processing\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"bProcessing\": false,\n\n\n\t/**\n\t * Retrieve the DataTables object for the given selector. Note that if the\n\t * table has already been initialised, this parameter will cause DataTables\n\t * to simply return the object that has already been set up - it will not take\n\t * account of any changes you might have made to the initialisation object\n\t * passed to DataTables (setting this parameter to true is an acknowledgement\n\t * that you understand this). `destroy` can be used to reinitialise a table if\n\t * you need.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.retrieve\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      initTable();\n\t *      tableActions();\n\t *    } );\n\t *\n\t *    function initTable ()\n\t *    {\n\t *      return $('#example').dataTable( {\n\t *        \"scrollY\": \"200px\",\n\t *        \"paginate\": false,\n\t *        \"retrieve\": true\n\t *      } );\n\t *    }\n\t *\n\t *    function tableActions ()\n\t *    {\n\t *      var table = initTable();\n\t *      // perform API operations with oTable\n\t *    }\n\t */\n\t\"bRetrieve\": false,\n\n\n\t/**\n\t * When vertical (y) scrolling is enabled, DataTables will force the height of\n\t * the table's viewport to the given height at all times (useful for layout).\n\t * However, this can look odd when filtering data down to a small data set,\n\t * and the footer is left \"floating\" further down. This parameter (when\n\t * enabled) will cause DataTables to collapse the table's viewport down when\n\t * the result set will fit within the given Y height.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.scrollCollapse\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"scrollY\": \"200\",\n\t *        \"scrollCollapse\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"bScrollCollapse\": false,\n\n\n\t/**\n\t * Configure DataTables to use server-side processing. Note that the\n\t * `ajax` parameter must also be given in order to give DataTables a\n\t * source to obtain the required data for each draw.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Features\n\t *  @dtopt Server-side\n\t *  @name DataTable.defaults.serverSide\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"serverSide\": true,\n\t *        \"ajax\": \"xhr.php\"\n\t *      } );\n\t *    } );\n\t */\n\t\"bServerSide\": false,\n\n\n\t/**\n\t * Enable or disable sorting of columns. Sorting of individual columns can be\n\t * disabled by the `sortable` option for each column.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.ordering\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"ordering\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bSort\": true,\n\n\n\t/**\n\t * Enable or display DataTables' ability to sort multiple columns at the\n\t * same time (activated by shift-click by the user).\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.orderMulti\n\t *\n\t *  @example\n\t *    // Disable multiple column sorting ability\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"orderMulti\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bSortMulti\": true,\n\n\n\t/**\n\t * Allows control over whether DataTables should use the top (true) unique\n\t * cell that is found for a single column, or the bottom (false - default).\n\t * This is useful when using complex headers.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.orderCellsTop\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"orderCellsTop\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"bSortCellsTop\": false,\n\n\n\t/**\n\t * Enable or disable the addition of the classes `sorting\\_1`, `sorting\\_2` and\n\t * `sorting\\_3` to the columns which are currently being sorted on. This is\n\t * presented as a feature switch as it can increase processing time (while\n\t * classes are removed and added) so for large data sets you might want to\n\t * turn this off.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.orderClasses\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"orderClasses\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bSortClasses\": true,\n\n\n\t/**\n\t * Enable or disable state saving. When enabled HTML5 `localStorage` will be\n\t * used to save table display information such as pagination information,\n\t * display length, filtering and sorting. As such when the end user reloads\n\t * the page the display display will match what thy had previously set up.\n\t *\n\t * Due to the use of `localStorage` the default state saving is not supported\n\t * in IE6 or 7. If state saving is required in those browsers, use\n\t * `stateSaveCallback` to provide a storage solution such as cookies.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.stateSave\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"bStateSave\": false,\n\n\n\t/**\n\t * This function is called when a TR element is created (and all TD child\n\t * elements have been inserted), or registered if using a DOM source, allowing\n\t * manipulation of the TR element (adding classes etc).\n\t *  @type function\n\t *  @param {node} row \"TR\" element for the current row\n\t *  @param {array} data Raw data array for this row\n\t *  @param {int} dataIndex The index of this row in the internal aoData array\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.createdRow\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"createdRow\": function( row, data, dataIndex ) {\n\t *          // Bold the grade for all 'A' grade browsers\n\t *          if ( data[4] == \"A\" )\n\t *          {\n\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t *          }\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnCreatedRow\": null,\n\n\n\t/**\n\t * This function is called on every 'draw' event, and allows you to\n\t * dynamically modify any aspect you want about the created DOM.\n\t *  @type function\n\t *  @param {object} settings DataTables settings object\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.drawCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"drawCallback\": function( settings ) {\n\t *          alert( 'DataTables has redrawn the table' );\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnDrawCallback\": null,\n\n\n\t/**\n\t * Identical to fnHeaderCallback() but for the table footer this function\n\t * allows you to modify the table footer on every 'draw' event.\n\t *  @type function\n\t *  @param {node} foot \"TR\" element for the footer\n\t *  @param {array} data Full table data (as derived from the original HTML)\n\t *  @param {int} start Index for the current display starting point in the\n\t *    display array\n\t *  @param {int} end Index for the current display ending point in the\n\t *    display array\n\t *  @param {array int} display Index array to translate the visual position\n\t *    to the full data array\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.footerCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"footerCallback\": function( tfoot, data, start, end, display ) {\n\t *          tfoot.getElementsByTagName('th')[0].innerHTML = \"Starting index is \"+start;\n\t *        }\n\t *      } );\n\t *    } )\n\t */\n\t\"fnFooterCallback\": null,\n\n\n\t/**\n\t * When rendering large numbers in the information element for the table\n\t * (i.e. \"Showing 1 to 10 of 57 entries\") DataTables will render large numbers\n\t * to have a comma separator for the 'thousands' units (e.g. 1 million is\n\t * rendered as \"1,000,000\") to help readability for the end user. This\n\t * function will override the default method DataTables uses.\n\t *  @type function\n\t *  @member\n\t *  @param {int} toFormat number to be formatted\n\t *  @returns {string} formatted string for DataTables to show the number\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.formatNumber\n\t *\n\t *  @example\n\t *    // Format a number using a single quote for the separator (note that\n\t *    // this can also be done with the language.thousands option)\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"formatNumber\": function ( toFormat ) {\n\t *          return toFormat.toString().replace(\n\t *            /\\B(?=(\\d{3})+(?!\\d))/g, \"'\"\n\t *          );\n\t *        };\n\t *      } );\n\t *    } );\n\t */\n\t\"fnFormatNumber\": function ( toFormat ) {\n\t\treturn toFormat.toString().replace(\n\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g,\n\t\t\tthis.oLanguage.sThousands\n\t\t);\n\t},\n\n\n\t/**\n\t * This function is called on every 'draw' event, and allows you to\n\t * dynamically modify the header row. This can be used to calculate and\n\t * display useful information about the table.\n\t *  @type function\n\t *  @param {node} head \"TR\" element for the header\n\t *  @param {array} data Full table data (as derived from the original HTML)\n\t *  @param {int} start Index for the current display starting point in the\n\t *    display array\n\t *  @param {int} end Index for the current display ending point in the\n\t *    display array\n\t *  @param {array int} display Index array to translate the visual position\n\t *    to the full data array\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.headerCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"fheaderCallback\": function( head, data, start, end, display ) {\n\t *          head.getElementsByTagName('th')[0].innerHTML = \"Displaying \"+(end-start)+\" records\";\n\t *        }\n\t *      } );\n\t *    } )\n\t */\n\t\"fnHeaderCallback\": null,\n\n\n\t/**\n\t * The information element can be used to convey information about the current\n\t * state of the table. Although the internationalisation options presented by\n\t * DataTables are quite capable of dealing with most customisations, there may\n\t * be times where you wish to customise the string further. This callback\n\t * allows you to do exactly that.\n\t *  @type function\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {int} start Starting position in data for the draw\n\t *  @param {int} end End position in data for the draw\n\t *  @param {int} max Total number of rows in the table (regardless of\n\t *    filtering)\n\t *  @param {int} total Total number of rows in the data set, after filtering\n\t *  @param {string} pre The string that DataTables has formatted using it's\n\t *    own rules\n\t *  @returns {string} The string to be displayed in the information element.\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.infoCallback\n\t *\n\t *  @example\n\t *    $('#example').dataTable( {\n\t *      \"infoCallback\": function( settings, start, end, max, total, pre ) {\n\t *        return start +\" to \"+ end;\n\t *      }\n\t *    } );\n\t */\n\t\"fnInfoCallback\": null,\n\n\n\t/**\n\t * Called when the table has been initialised. Normally DataTables will\n\t * initialise sequentially and there will be no need for this function,\n\t * however, this does not hold true when using external language information\n\t * since that is obtained using an async XHR call.\n\t *  @type function\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} json The JSON object request from the server - only\n\t *    present if client-side Ajax sourced data is used\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.initComplete\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"initComplete\": function(settings, json) {\n\t *          alert( 'DataTables has finished its initialisation.' );\n\t *        }\n\t *      } );\n\t *    } )\n\t */\n\t\"fnInitComplete\": null,\n\n\n\t/**\n\t * Called at the very start of each table draw and can be used to cancel the\n\t * draw by returning false, any other return (including undefined) results in\n\t * the full draw occurring).\n\t *  @type function\n\t *  @param {object} settings DataTables settings object\n\t *  @returns {boolean} False will cancel the draw, anything else (including no\n\t *    return) will allow it to complete.\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.preDrawCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"preDrawCallback\": function( settings ) {\n\t *          if ( $('#test').val() == 1 ) {\n\t *            return false;\n\t *          }\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnPreDrawCallback\": null,\n\n\n\t/**\n\t * This function allows you to 'post process' each row after it have been\n\t * generated for each table draw, but before it is rendered on screen. This\n\t * function might be used for setting the row class name etc.\n\t *  @type function\n\t *  @param {node} row \"TR\" element for the current row\n\t *  @param {array} data Raw data array for this row\n\t *  @param {int} displayIndex The display index for the current table draw\n\t *  @param {int} displayIndexFull The index of the data in the full list of\n\t *    rows (after filtering)\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.rowCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"rowCallback\": function( row, data, displayIndex, displayIndexFull ) {\n\t *          // Bold the grade for all 'A' grade browsers\n\t *          if ( data[4] == \"A\" ) {\n\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t *          }\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnRowCallback\": null,\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * This parameter allows you to override the default function which obtains\n\t * the data from the server so something more suitable for your application.\n\t * For example you could use POST data, or pull information from a Gears or\n\t * AIR database.\n\t *  @type function\n\t *  @member\n\t *  @param {string} source HTTP source to obtain the data from (`ajax`)\n\t *  @param {array} data A key/value pair object containing the data to send\n\t *    to the server\n\t *  @param {function} callback to be called on completion of the data get\n\t *    process that will draw the data on the page.\n\t *  @param {object} settings DataTables settings object\n\t *\n\t *  @dtopt Callbacks\n\t *  @dtopt Server-side\n\t *  @name DataTable.defaults.serverData\n\t *\n\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"fnServerData\": null,\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t *  It is often useful to send extra data to the server when making an Ajax\n\t * request - for example custom filtering information, and this callback\n\t * function makes it trivial to send extra information to the server. The\n\t * passed in parameter is the data set that has been constructed by\n\t * DataTables, and you can add to this or modify it as you require.\n\t *  @type function\n\t *  @param {array} data Data array (array of objects which are name/value\n\t *    pairs) that has been constructed by DataTables and will be sent to the\n\t *    server. In the case of Ajax sourced data with server-side processing\n\t *    this will be an empty array, for server-side processing there will be a\n\t *    significant number of parameters!\n\t *  @returns {undefined} Ensure that you modify the data array passed in,\n\t *    as this is passed by reference.\n\t *\n\t *  @dtopt Callbacks\n\t *  @dtopt Server-side\n\t *  @name DataTable.defaults.serverParams\n\t *\n\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"fnServerParams\": null,\n\n\n\t/**\n\t * Load the table state. With this function you can define from where, and how, the\n\t * state of a table is loaded. By default DataTables will load from `localStorage`\n\t * but you might wish to use a server-side database or cookies.\n\t *  @type function\n\t *  @member\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} callback Callback that can be executed when done. It\n\t *    should be passed the loaded state object.\n\t *  @return {object} The DataTables state object to be loaded\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.stateLoadCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true,\n\t *        \"stateLoadCallback\": function (settings, callback) {\n\t *          $.ajax( {\n\t *            \"url\": \"/state_load\",\n\t *            \"dataType\": \"json\",\n\t *            \"success\": function (json) {\n\t *              callback( json );\n\t *            }\n\t *          } );\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnStateLoadCallback\": function ( settings ) {\n\t\ttry {\n\t\t\treturn JSON.parse(\n\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(\n\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname\n\t\t\t\t)\n\t\t\t);\n\t\t} catch (e) {\n\t\t\treturn {};\n\t\t}\n\t},\n\n\n\t/**\n\t * Callback which allows modification of the saved state prior to loading that state.\n\t * This callback is called when the table is loading state from the stored data, but\n\t * prior to the settings object being modified by the saved state. Note that for\n\t * plug-in authors, you should use the `stateLoadParams` event to load parameters for\n\t * a plug-in.\n\t *  @type function\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} data The state object that is to be loaded\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.stateLoadParams\n\t *\n\t *  @example\n\t *    // Remove a saved filter, so filtering is never loaded\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true,\n\t *        \"stateLoadParams\": function (settings, data) {\n\t *          data.oSearch.sSearch = \"\";\n\t *        }\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Disallow state loading by returning false\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true,\n\t *        \"stateLoadParams\": function (settings, data) {\n\t *          return false;\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnStateLoadParams\": null,\n\n\n\t/**\n\t * Callback that is called when the state has been loaded from the state saving method\n\t * and the DataTables settings object has been modified as a result of the loaded state.\n\t *  @type function\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} data The state object that was loaded\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.stateLoaded\n\t *\n\t *  @example\n\t *    // Show an alert with the filtering value that was saved\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true,\n\t *        \"stateLoaded\": function (settings, data) {\n\t *          alert( 'Saved filter was: '+data.oSearch.sSearch );\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnStateLoaded\": null,\n\n\n\t/**\n\t * Save the table state. This function allows you to define where and how the state\n\t * information for the table is stored By default DataTables will use `localStorage`\n\t * but you might wish to use a server-side database or cookies.\n\t *  @type function\n\t *  @member\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} data The state object to be saved\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.stateSaveCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true,\n\t *        \"stateSaveCallback\": function (settings, data) {\n\t *          // Send an Ajax request to the server with the state object\n\t *          $.ajax( {\n\t *            \"url\": \"/state_save\",\n\t *            \"data\": data,\n\t *            \"dataType\": \"json\",\n\t *            \"method\": \"POST\"\n\t *            \"success\": function () {}\n\t *          } );\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnStateSaveCallback\": function ( settings, data ) {\n\t\ttry {\n\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(\n\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname,\n\t\t\t\tJSON.stringify( data )\n\t\t\t);\n\t\t} catch (e) {}\n\t},\n\n\n\t/**\n\t * Callback which allows modification of the state to be saved. Called when the table\n\t * has changed state a new state save is required. This method allows modification of\n\t * the state saving object prior to actually doing the save, including addition or\n\t * other state properties or modification. Note that for plug-in authors, you should\n\t * use the `stateSaveParams` event to save parameters for a plug-in.\n\t *  @type function\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} data The state object to be saved\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.stateSaveParams\n\t *\n\t *  @example\n\t *    // Remove a saved filter, so filtering is never saved\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true,\n\t *        \"stateSaveParams\": function (settings, data) {\n\t *          data.oSearch.sSearch = \"\";\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnStateSaveParams\": null,\n\n\n\t/**\n\t * Duration for which the saved state information is considered valid. After this period\n\t * has elapsed the state will be returned to the default.\n\t * Value is given in seconds.\n\t *  @type int\n\t *  @default 7200 <i>(2 hours)</i>\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.stateDuration\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateDuration\": 60*60*24; // 1 day\n\t *      } );\n\t *    } )\n\t */\n\t\"iStateDuration\": 7200,\n\n\n\t/**\n\t * When enabled DataTables will not make a request to the server for the first\n\t * page draw - rather it will use the data already on the page (no sorting etc\n\t * will be applied to it), thus saving on an XHR at load time. `deferLoading`\n\t * is used to indicate that deferred loading is required, but it is also used\n\t * to tell DataTables how many records there are in the full table (allowing\n\t * the information element and pagination to be displayed correctly). In the case\n\t * where a filtering is applied to the table on initial load, this can be\n\t * indicated by giving the parameter as an array, where the first element is\n\t * the number of records available after filtering and the second element is the\n\t * number of records without filtering (allowing the table information element\n\t * to be shown correctly).\n\t *  @type int | array\n\t *  @default null\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.deferLoading\n\t *\n\t *  @example\n\t *    // 57 records available in the table, no filtering applied\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"serverSide\": true,\n\t *        \"ajax\": \"scripts/server_processing.php\",\n\t *        \"deferLoading\": 57\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // 57 records after filtering, 100 without filtering (an initial filter applied)\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"serverSide\": true,\n\t *        \"ajax\": \"scripts/server_processing.php\",\n\t *        \"deferLoading\": [ 57, 100 ],\n\t *        \"search\": {\n\t *          \"search\": \"my_filter\"\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"iDeferLoading\": null,\n\n\n\t/**\n\t * Number of rows to display on a single page when using pagination. If\n\t * feature enabled (`lengthChange`) then the end user will be able to override\n\t * this to a custom setting using a pop-up menu.\n\t *  @type int\n\t *  @default 10\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.pageLength\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"pageLength\": 50\n\t *      } );\n\t *    } )\n\t */\n\t\"iDisplayLength\": 10,\n\n\n\t/**\n\t * Define the starting point for data display when using DataTables with\n\t * pagination. Note that this parameter is the number of records, rather than\n\t * the page number, so if you have 10 records per page and want to start on\n\t * the third page, it should be \"20\".\n\t *  @type int\n\t *  @default 0\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.displayStart\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"displayStart\": 20\n\t *      } );\n\t *    } )\n\t */\n\t\"iDisplayStart\": 0,\n\n\n\t/**\n\t * By default DataTables allows keyboard navigation of the table (sorting, paging,\n\t * and filtering) by adding a `tabindex` attribute to the required elements. This\n\t * allows you to tab through the controls and press the enter key to activate them.\n\t * The tabindex is default 0, meaning that the tab follows the flow of the document.\n\t * You can overrule this using this parameter if you wish. Use a value of -1 to\n\t * disable built-in keyboard navigation.\n\t *  @type int\n\t *  @default 0\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.tabIndex\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"tabIndex\": 1\n\t *      } );\n\t *    } );\n\t */\n\t\"iTabIndex\": 0,\n\n\n\t/**\n\t * Classes that DataTables assigns to the various components and features\n\t * that it adds to the HTML table. This allows classes to be configured\n\t * during initialisation in addition to through the static\n\t * {@link DataTable.ext.oStdClasses} object).\n\t *  @namespace\n\t *  @name DataTable.defaults.classes\n\t */\n\t\"oClasses\": {},\n\n\n\t/**\n\t * All strings that DataTables uses in the user interface that it creates\n\t * are defined in this object, allowing you to modified them individually or\n\t * completely replace them all as required.\n\t *  @namespace\n\t *  @name DataTable.defaults.language\n\t */\n\t\"oLanguage\": {\n\t\t/**\n\t\t * Strings that are used for WAI-ARIA labels and controls only (these are not\n\t\t * actually visible on the page, but will be read by screenreaders, and thus\n\t\t * must be internationalised as well).\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.language.aria\n\t\t */\n\t\t\"oAria\": {\n\t\t\t/**\n\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t * sorted ascending by activing the column (click or return when focused).\n\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t *  @type string\n\t\t\t *  @default : activate to sort column ascending\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.aria.sortAscending\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"aria\": {\n\t\t\t *            \"sortAscending\": \" - click/return to sort ascending\"\n\t\t\t *          }\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sSortAscending\": \": activate to sort column ascending\",\n\n\t\t\t/**\n\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t * sorted descending by activing the column (click or return when focused).\n\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t *  @type string\n\t\t\t *  @default : activate to sort column ascending\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.aria.sortDescending\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"aria\": {\n\t\t\t *            \"sortDescending\": \" - click/return to sort descending\"\n\t\t\t *          }\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sSortDescending\": \": activate to sort column descending\"\n\t\t},\n\n\t\t/**\n\t\t * Pagination string used by DataTables for the built-in pagination\n\t\t * control types.\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.language.paginate\n\t\t */\n\t\t\"oPaginate\": {\n\t\t\t/**\n\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t * button to take the user to the first page.\n\t\t\t *  @type string\n\t\t\t *  @default First\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.paginate.first\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"paginate\": {\n\t\t\t *            \"first\": \"First page\"\n\t\t\t *          }\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sFirst\": \"First\",\n\n\n\t\t\t/**\n\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t * button to take the user to the last page.\n\t\t\t *  @type string\n\t\t\t *  @default Last\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.paginate.last\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"paginate\": {\n\t\t\t *            \"last\": \"Last page\"\n\t\t\t *          }\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLast\": \"Last\",\n\n\n\t\t\t/**\n\t\t\t * Text to use for the 'next' pagination button (to take the user to the\n\t\t\t * next page).\n\t\t\t *  @type string\n\t\t\t *  @default Next\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.paginate.next\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"paginate\": {\n\t\t\t *            \"next\": \"Next page\"\n\t\t\t *          }\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sNext\": \"Next\",\n\n\n\t\t\t/**\n\t\t\t * Text to use for the 'previous' pagination button (to take the user to\n\t\t\t * the previous page).\n\t\t\t *  @type string\n\t\t\t *  @default Previous\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.paginate.previous\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"paginate\": {\n\t\t\t *            \"previous\": \"Previous page\"\n\t\t\t *          }\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sPrevious\": \"Previous\"\n\t\t},\n\n\t\t/**\n\t\t * This string is shown in preference to `zeroRecords` when the table is\n\t\t * empty of data (regardless of filtering). Note that this is an optional\n\t\t * parameter - if it is not given, the value of `zeroRecords` will be used\n\t\t * instead (either the default or given value).\n\t\t *  @type string\n\t\t *  @default No data available in table\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.emptyTable\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"emptyTable\": \"No data available in table\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sEmptyTable\": \"No data available in table\",\n\n\n\t\t/**\n\t\t * This string gives information to the end user about the information\n\t\t * that is current on display on the page. The following tokens can be\n\t\t * used in the string and will be dynamically replaced as the table\n\t\t * display updates. This tokens can be placed anywhere in the string, or\n\t\t * removed as needed by the language requires:\n\t\t *\n\t\t * * `\\_START\\_` - Display index of the first record on the current page\n\t\t * * `\\_END\\_` - Display index of the last record on the current page\n\t\t * * `\\_TOTAL\\_` - Number of records in the table after filtering\n\t\t * * `\\_MAX\\_` - Number of records in the table without filtering\n\t\t * * `\\_PAGE\\_` - Current page number\n\t\t * * `\\_PAGES\\_` - Total number of pages of data in the table\n\t\t *\n\t\t *  @type string\n\t\t *  @default Showing _START_ to _END_ of _TOTAL_ entries\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.info\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"info\": \"Showing page _PAGE_ of _PAGES_\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sInfo\": \"Showing _START_ to _END_ of _TOTAL_ entries\",\n\n\n\t\t/**\n\t\t * Display information string for when the table is empty. Typically the\n\t\t * format of this string should match `info`.\n\t\t *  @type string\n\t\t *  @default Showing 0 to 0 of 0 entries\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.infoEmpty\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"infoEmpty\": \"No entries to show\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sInfoEmpty\": \"Showing 0 to 0 of 0 entries\",\n\n\n\t\t/**\n\t\t * When a user filters the information in a table, this string is appended\n\t\t * to the information (`info`) to give an idea of how strong the filtering\n\t\t * is. The variable _MAX_ is dynamically updated.\n\t\t *  @type string\n\t\t *  @default (filtered from _MAX_ total entries)\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.infoFiltered\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"infoFiltered\": \" - filtering from _MAX_ records\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sInfoFiltered\": \"(filtered from _MAX_ total entries)\",\n\n\n\t\t/**\n\t\t * If can be useful to append extra information to the info string at times,\n\t\t * and this variable does exactly that. This information will be appended to\n\t\t * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are\n\t\t * being used) at all times.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.infoPostFix\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"infoPostFix\": \"All records shown are derived from real information.\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sInfoPostFix\": \"\",\n\n\n\t\t/**\n\t\t * This decimal place operator is a little different from the other\n\t\t * language options since DataTables doesn't output floating point\n\t\t * numbers, so it won't ever use this for display of a number. Rather,\n\t\t * what this parameter does is modify the sort methods of the table so\n\t\t * that numbers which are in a format which has a character other than\n\t\t * a period (`.`) as a decimal place will be sorted numerically.\n\t\t *\n\t\t * Note that numbers with different decimal places cannot be shown in\n\t\t * the same table and still be sortable, the table must be consistent.\n\t\t * However, multiple different tables on the page can use different\n\t\t * decimal place characters.\n\t\t *  @type string\n\t\t *  @default \n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.decimal\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"decimal\": \",\"\n\t\t *          \"thousands\": \".\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDecimal\": \"\",\n\n\n\t\t/**\n\t\t * DataTables has a build in number formatter (`formatNumber`) which is\n\t\t * used to format large numbers that are used in the table information.\n\t\t * By default a comma is used, but this can be trivially changed to any\n\t\t * character you wish with this parameter.\n\t\t *  @type string\n\t\t *  @default ,\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.thousands\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"thousands\": \"'\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sThousands\": \",\",\n\n\n\t\t/**\n\t\t * Detail the action that will be taken when the drop down menu for the\n\t\t * pagination length option is changed. The '_MENU_' variable is replaced\n\t\t * with a default select list of 10, 25, 50 and 100, and can be replaced\n\t\t * with a custom select box if required.\n\t\t *  @type string\n\t\t *  @default Show _MENU_ entries\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.lengthMenu\n\t\t *\n\t\t *  @example\n\t\t *    // Language change only\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"lengthMenu\": \"Display _MENU_ records\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Language and options change\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"lengthMenu\": 'Display <select>'+\n\t\t *            '<option value=\"10\">10</option>'+\n\t\t *            '<option value=\"20\">20</option>'+\n\t\t *            '<option value=\"30\">30</option>'+\n\t\t *            '<option value=\"40\">40</option>'+\n\t\t *            '<option value=\"50\">50</option>'+\n\t\t *            '<option value=\"-1\">All</option>'+\n\t\t *            '</select> records'\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sLengthMenu\": \"Show _MENU_ entries\",\n\n\n\t\t/**\n\t\t * When using Ajax sourced data and during the first draw when DataTables is\n\t\t * gathering the data, this message is shown in an empty row in the table to\n\t\t * indicate to the end user the the data is being loaded. Note that this\n\t\t * parameter is not used when loading data by server-side processing, just\n\t\t * Ajax sourced data with client-side processing.\n\t\t *  @type string\n\t\t *  @default Loading...\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.loadingRecords\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"loadingRecords\": \"Please wait - loading...\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sLoadingRecords\": \"Loading...\",\n\n\n\t\t/**\n\t\t * Text which is displayed when the table is processing a user action\n\t\t * (usually a sort command or similar).\n\t\t *  @type string\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.processing\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"processing\": \"DataTables is currently busy\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sProcessing\": \"\",\n\n\n\t\t/**\n\t\t * Details the actions that will be taken when the user types into the\n\t\t * filtering input text box. The variable \"_INPUT_\", if used in the string,\n\t\t * is replaced with the HTML text box for the filtering input allowing\n\t\t * control over where it appears in the string. If \"_INPUT_\" is not given\n\t\t * then the input box is appended to the string automatically.\n\t\t *  @type string\n\t\t *  @default Search:\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.search\n\t\t *\n\t\t *  @example\n\t\t *    // Input text box will be appended at the end automatically\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"search\": \"Filter records:\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Specify where the filter should appear\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"search\": \"Apply filter _INPUT_ to table\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sSearch\": \"Search:\",\n\n\n\t\t/**\n\t\t * Assign a `placeholder` attribute to the search `input` element\n\t\t *  @type string\n\t\t *  @default \n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.searchPlaceholder\n\t\t */\n\t\t\"sSearchPlaceholder\": \"\",\n\n\n\t\t/**\n\t\t * All of the language information can be stored in a file on the\n\t\t * server-side, which DataTables will look up if this parameter is passed.\n\t\t * It must store the URL of the language file, which is in a JSON format,\n\t\t * and the object has the same properties as the oLanguage object in the\n\t\t * initialiser object (i.e. the above parameters). Please refer to one of\n\t\t * the example language files to see how this works in action.\n\t\t *  @type string\n\t\t *  @default <i>Empty string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.url\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"url\": \"https://www.sprymedia.co.uk/dataTables/lang.txt\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sUrl\": \"\",\n\n\n\t\t/**\n\t\t * Text shown inside the table records when the is no information to be\n\t\t * displayed after filtering. `emptyTable` is shown when there is simply no\n\t\t * information in the table at all (regardless of filtering).\n\t\t *  @type string\n\t\t *  @default No matching records found\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.zeroRecords\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"zeroRecords\": \"No records to display\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sZeroRecords\": \"No matching records found\"\n\t},\n\n\n\t/**\n\t * This parameter allows you to have define the global filtering state at\n\t * initialisation time. As an object the `search` parameter must be\n\t * defined, but all other parameters are optional. When `regex` is true,\n\t * the search string will be treated as a regular expression, when false\n\t * (default) it will be treated as a straight string. When `smart`\n\t * DataTables will use it's smart filtering methods (to word match at\n\t * any point in the data), when false this will not be done.\n\t *  @namespace\n\t *  @extends DataTable.models.oSearch\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.search\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"search\": {\"search\": \"Initial search\"}\n\t *      } );\n\t *    } )\n\t */\n\t\"oSearch\": $.extend( {}, DataTable.models.oSearch ),\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * By default DataTables will look for the property `data` (or `aaData` for\n\t * compatibility with DataTables 1.9-) when obtaining data from an Ajax\n\t * source or for server-side processing - this parameter allows that\n\t * property to be changed. You can use Javascript dotted object notation to\n\t * get a data source for multiple levels of nesting.\n\t *  @type string\n\t *  @default data\n\t *\n\t *  @dtopt Options\n\t *  @dtopt Server-side\n\t *  @name DataTable.defaults.ajaxDataProp\n\t *\n\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"sAjaxDataProp\": \"data\",\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * You can instruct DataTables to load data from an external\n\t * source using this parameter (use aData if you want to pass data in you\n\t * already have). Simply provide a url a JSON object can be obtained from.\n\t *  @type string\n\t *  @default null\n\t *\n\t *  @dtopt Options\n\t *  @dtopt Server-side\n\t *  @name DataTable.defaults.ajaxSource\n\t *\n\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"sAjaxSource\": null,\n\n\n\t/**\n\t * This initialisation variable allows you to specify exactly where in the\n\t * DOM you want DataTables to inject the various controls it adds to the page\n\t * (for example you might want the pagination controls at the top of the\n\t * table). DIV elements (with or without a custom class) can also be added to\n\t * aid styling. The follow syntax is used:\n\t *   <ul>\n\t *     <li>The following options are allowed:\n\t *       <ul>\n\t *         <li>'l' - Length changing</li>\n\t *         <li>'f' - Filtering input</li>\n\t *         <li>'t' - The table!</li>\n\t *         <li>'i' - Information</li>\n\t *         <li>'p' - Pagination</li>\n\t *         <li>'r' - pRocessing</li>\n\t *       </ul>\n\t *     </li>\n\t *     <li>The following constants are allowed:\n\t *       <ul>\n\t *         <li>'H' - jQueryUI theme \"header\" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>\n\t *         <li>'F' - jQueryUI theme \"footer\" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>\n\t *       </ul>\n\t *     </li>\n\t *     <li>The following syntax is expected:\n\t *       <ul>\n\t *         <li>'&lt;' and '&gt;' - div elements</li>\n\t *         <li>'&lt;\"class\" and '&gt;' - div with a class</li>\n\t *         <li>'&lt;\"#id\" and '&gt;' - div with an ID</li>\n\t *       </ul>\n\t *     </li>\n\t *     <li>Examples:\n\t *       <ul>\n\t *         <li>'&lt;\"wrapper\"flipt&gt;'</li>\n\t *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>\n\t *       </ul>\n\t *     </li>\n\t *   </ul>\n\t *  @type string\n\t *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>\n\t *    <\"H\"lfr>t<\"F\"ip> <i>(when `jQueryUI` is true)</i>\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.dom\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"dom\": '&lt;\"top\"i&gt;rt&lt;\"bottom\"flp&gt;&lt;\"clear\"&gt;'\n\t *      } );\n\t *    } );\n\t */\n\t\"sDom\": \"lfrtip\",\n\n\n\t/**\n\t * Search delay option. This will throttle full table searches that use the\n\t * DataTables provided search input element (it does not effect calls to\n\t * `dt-api search()`, providing a delay before the search is made.\n\t *  @type integer\n\t *  @default 0\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.searchDelay\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"searchDelay\": 200\n\t *      } );\n\t *    } )\n\t */\n\t\"searchDelay\": null,\n\n\n\t/**\n\t * DataTables features six different built-in options for the buttons to\n\t * display for pagination control:\n\t *\n\t * * `numbers` - Page number buttons only\n\t * * `simple` - 'Previous' and 'Next' buttons only\n\t * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers\n\t * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons\n\t * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers\n\t * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers\n\t *  \n\t * Further methods can be added using {@link DataTable.ext.oPagination}.\n\t *  @type string\n\t *  @default simple_numbers\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.pagingType\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"pagingType\": \"full_numbers\"\n\t *      } );\n\t *    } )\n\t */\n\t\"sPaginationType\": \"simple_numbers\",\n\n\n\t/**\n\t * Enable horizontal scrolling. When a table is too wide to fit into a\n\t * certain layout, or you have a large number of columns in the table, you\n\t * can enable x-scrolling to show the table in a viewport, which can be\n\t * scrolled. This property can be `true` which will allow the table to\n\t * scroll horizontally when needed, or any CSS unit, or a number (in which\n\t * case it will be treated as a pixel measurement). Setting as simply `true`\n\t * is recommended.\n\t *  @type boolean|string\n\t *  @default <i>blank string - i.e. disabled</i>\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.scrollX\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"scrollX\": true,\n\t *        \"scrollCollapse\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"sScrollX\": \"\",\n\n\n\t/**\n\t * This property can be used to force a DataTable to use more width than it\n\t * might otherwise do when x-scrolling is enabled. For example if you have a\n\t * table which requires to be well spaced, this parameter is useful for\n\t * \"over-sizing\" the table, and thus forcing scrolling. This property can by\n\t * any CSS unit, or a number (in which case it will be treated as a pixel\n\t * measurement).\n\t *  @type string\n\t *  @default <i>blank string - i.e. disabled</i>\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.scrollXInner\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"scrollX\": \"100%\",\n\t *        \"scrollXInner\": \"110%\"\n\t *      } );\n\t *    } );\n\t */\n\t\"sScrollXInner\": \"\",\n\n\n\t/**\n\t * Enable vertical scrolling. Vertical scrolling will constrain the DataTable\n\t * to the given height, and enable scrolling for any data which overflows the\n\t * current viewport. This can be used as an alternative to paging to display\n\t * a lot of data in a small area (although paging and scrolling can both be\n\t * enabled at the same time). This property can be any CSS unit, or a number\n\t * (in which case it will be treated as a pixel measurement).\n\t *  @type string\n\t *  @default <i>blank string - i.e. disabled</i>\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.scrollY\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"scrollY\": \"200px\",\n\t *        \"paginate\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"sScrollY\": \"\",\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * Set the HTTP method that is used to make the Ajax call for server-side\n\t * processing or Ajax sourced data.\n\t *  @type string\n\t *  @default GET\n\t *\n\t *  @dtopt Options\n\t *  @dtopt Server-side\n\t *  @name DataTable.defaults.serverMethod\n\t *\n\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"sServerMethod\": \"GET\",\n\n\n\t/**\n\t * DataTables makes use of renderers when displaying HTML elements for\n\t * a table. These renderers can be added or modified by plug-ins to\n\t * generate suitable mark-up for a site. For example the Bootstrap\n\t * integration plug-in for DataTables uses a paging button renderer to\n\t * display pagination buttons in the mark-up required by Bootstrap.\n\t *\n\t * For further information about the renderers available see\n\t * DataTable.ext.renderer\n\t *  @type string|object\n\t *  @default null\n\t *\n\t *  @name DataTable.defaults.renderer\n\t *\n\t */\n\t\"renderer\": null,\n\n\n\t/**\n\t * Set the data property name that DataTables should use to get a row's id\n\t * to set as the `id` property in the node.\n\t *  @type string\n\t *  @default DT_RowId\n\t *\n\t *  @name DataTable.defaults.rowId\n\t */\n\t\"rowId\": \"DT_RowId\"\n};\n\n_fnHungarianMap( DataTable.defaults );\n\n\n\n/*\n * Developer note - See note in model.defaults.js about the use of Hungarian\n * notation and camel case.\n */\n\n/**\n * Column options that can be given to DataTables at initialisation time.\n *  @namespace\n */\nDataTable.defaults.column = {\n\t/**\n\t * Define which column(s) an order will occur on for this column. This\n\t * allows a column's ordering to take multiple columns into account when\n\t * doing a sort or use the data from a different column. For example first\n\t * name / last name columns make sense to do a multi-column sort over the\n\t * two columns.\n\t *  @type array|int\n\t *  @default null <i>Takes the value of the column index automatically</i>\n\t *\n\t *  @name DataTable.defaults.column.orderData\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"orderData\": [ 0, 1 ], \"targets\": [ 0 ] },\n\t *          { \"orderData\": [ 1, 0 ], \"targets\": [ 1 ] },\n\t *          { \"orderData\": 2, \"targets\": [ 2 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"orderData\": [ 0, 1 ] },\n\t *          { \"orderData\": [ 1, 0 ] },\n\t *          { \"orderData\": 2 },\n\t *          null,\n\t *          null\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"aDataSort\": null,\n\t\"iDataSort\": -1,\n\n\n\t/**\n\t * You can control the default ordering direction, and even alter the\n\t * behaviour of the sort handler (i.e. only allow ascending ordering etc)\n\t * using this parameter.\n\t *  @type array\n\t *  @default [ 'asc', 'desc' ]\n\t *\n\t *  @name DataTable.defaults.column.orderSequence\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"orderSequence\": [ \"asc\" ], \"targets\": [ 1 ] },\n\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ], \"targets\": [ 2 ] },\n\t *          { \"orderSequence\": [ \"desc\" ], \"targets\": [ 3 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          null,\n\t *          { \"orderSequence\": [ \"asc\" ] },\n\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ] },\n\t *          { \"orderSequence\": [ \"desc\" ] },\n\t *          null\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"asSorting\": [ 'asc', 'desc' ],\n\n\n\t/**\n\t * Enable or disable filtering on the data in this column.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @name DataTable.defaults.column.searchable\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"searchable\": false, \"targets\": [ 0 ] }\n\t *        ] } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"searchable\": false },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ] } );\n\t *    } );\n\t */\n\t\"bSearchable\": true,\n\n\n\t/**\n\t * Enable or disable ordering on this column.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @name DataTable.defaults.column.orderable\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"orderable\": false, \"targets\": [ 0 ] }\n\t *        ] } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"orderable\": false },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ] } );\n\t *    } );\n\t */\n\t\"bSortable\": true,\n\n\n\t/**\n\t * Enable or disable the display of this column.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @name DataTable.defaults.column.visible\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"visible\": false, \"targets\": [ 0 ] }\n\t *        ] } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"visible\": false },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ] } );\n\t *    } );\n\t */\n\t\"bVisible\": true,\n\n\n\t/**\n\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t * allowing you to modify the DOM element (add background colour for example) when the\n\t * element is available.\n\t *  @type function\n\t *  @param {element} td The TD node that has been created\n\t *  @param {*} cellData The Data for the cell\n\t *  @param {array|object} rowData The data for the whole row\n\t *  @param {int} row The row index for the aoData data store\n\t *  @param {int} col The column index for aoColumns\n\t *\n\t *  @name DataTable.defaults.column.createdCell\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [3],\n\t *          \"createdCell\": function (td, cellData, rowData, row, col) {\n\t *            if ( cellData == \"1.7\" ) {\n\t *              $(td).css('color', 'blue')\n\t *            }\n\t *          }\n\t *        } ]\n\t *      });\n\t *    } );\n\t */\n\t\"fnCreatedCell\": null,\n\n\n\t/**\n\t * This parameter has been replaced by `data` in DataTables to ensure naming\n\t * consistency. `dataProp` can still be used, as there is backwards\n\t * compatibility in DataTables for this option, but it is strongly\n\t * recommended that you use `data` in preference to `dataProp`.\n\t *  @name DataTable.defaults.column.dataProp\n\t */\n\n\n\t/**\n\t * This property can be used to read data from any data source property,\n\t * including deeply nested objects / properties. `data` can be given in a\n\t * number of different ways which effect its behaviour:\n\t *\n\t * * `integer` - treated as an array index for the data source. This is the\n\t *   default that DataTables uses (incrementally increased for each column).\n\t * * `string` - read an object property from the data source. There are\n\t *   three 'special' options that can be used in the string to alter how\n\t *   DataTables reads the data from the source object:\n\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t *      Javascript to read from nested objects, so to can the options\n\t *      specified in `data`. For example: `browser.version` or\n\t *      `browser.name`. If your object parameter name contains a period, use\n\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t *      from and array source, joining the data with the characters provided\n\t *      between the two brackets. For example: `name[, ]` would provide a\n\t *      comma-space separated list from the source array. If no characters\n\t *      are provided between the brackets, the original array source is\n\t *      returned.\n\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t *      execute a function of the name given. For example: `browser()` for a\n\t *      simple function on the data source, `browser.version()` for a\n\t *      function in a nested property or even `browser().version` to get an\n\t *      object property if the function called returns an object. Note that\n\t *      function notation is recommended for use in `render` rather than\n\t *      `data` as it is much simpler to use as a renderer.\n\t * * `null` - use the original data source for the row rather than plucking\n\t *   data directly from it. This action has effects on two other\n\t *   initialisation options:\n\t *    * `defaultContent` - When null is given as the `data` option and\n\t *      `defaultContent` is specified for the column, the value defined by\n\t *      `defaultContent` will be used for the cell.\n\t *    * `render` - When null is used for the `data` option and the `render`\n\t *      option is specified for the column, the whole data source for the\n\t *      row is used for the renderer.\n\t * * `function` - the function given will be executed whenever DataTables\n\t *   needs to set or get the data for a cell in the column. The function\n\t *   takes three parameters:\n\t *    * Parameters:\n\t *      * `{array|object}` The data source for the row\n\t *      * `{string}` The type call data requested - this will be 'set' when\n\t *        setting data or 'filter', 'display', 'type', 'sort' or undefined\n\t *        when gathering data. Note that when `undefined` is given for the\n\t *        type DataTables expects to get the raw data for the object back<\n\t *      * `{*}` Data to set when the second parameter is 'set'.\n\t *    * Return:\n\t *      * The return value from the function is not required when 'set' is\n\t *        the type of call, but otherwise the return is what will be used\n\t *        for the data requested.\n\t *\n\t * Note that `data` is a getter and setter option. If you just require\n\t * formatting of data for output, you will likely want to use `render` which\n\t * is simply a getter and thus simpler to use.\n\t *\n\t * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The\n\t * name change reflects the flexibility of this property and is consistent\n\t * with the naming of mRender. If 'mDataProp' is given, then it will still\n\t * be used by DataTables, as it automatically maps the old name to the new\n\t * if required.\n\t *\n\t *  @type string|int|function|null\n\t *  @default null <i>Use automatically calculated column index</i>\n\t *\n\t *  @name DataTable.defaults.column.data\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Read table data from objects\n\t *    // JSON structure for each row:\n\t *    //   {\n\t *    //      \"engine\": {value},\n\t *    //      \"browser\": {value},\n\t *    //      \"platform\": {value},\n\t *    //      \"version\": {value},\n\t *    //      \"grade\": {value}\n\t *    //   }\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"ajaxSource\": \"sources/objects.txt\",\n\t *        \"columns\": [\n\t *          { \"data\": \"engine\" },\n\t *          { \"data\": \"browser\" },\n\t *          { \"data\": \"platform\" },\n\t *          { \"data\": \"version\" },\n\t *          { \"data\": \"grade\" }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Read information from deeply nested objects\n\t *    // JSON structure for each row:\n\t *    //   {\n\t *    //      \"engine\": {value},\n\t *    //      \"browser\": {value},\n\t *    //      \"platform\": {\n\t *    //         \"inner\": {value}\n\t *    //      },\n\t *    //      \"details\": [\n\t *    //         {value}, {value}\n\t *    //      ]\n\t *    //   }\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t *        \"columns\": [\n\t *          { \"data\": \"engine\" },\n\t *          { \"data\": \"browser\" },\n\t *          { \"data\": \"platform.inner\" },\n\t *          { \"data\": \"details.0\" },\n\t *          { \"data\": \"details.1\" }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `data` as a function to provide different information for\n\t *    // sorting, filtering and display. In this case, currency (price)\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"data\": function ( source, type, val ) {\n\t *            if (type === 'set') {\n\t *              source.price = val;\n\t *              // Store the computed display and filter values for efficiency\n\t *              source.price_display = val==\"\" ? \"\" : \"$\"+numberFormat(val);\n\t *              source.price_filter  = val==\"\" ? \"\" : \"$\"+numberFormat(val)+\" \"+val;\n\t *              return;\n\t *            }\n\t *            else if (type === 'display') {\n\t *              return source.price_display;\n\t *            }\n\t *            else if (type === 'filter') {\n\t *              return source.price_filter;\n\t *            }\n\t *            // 'sort', 'type' and undefined all just use the integer\n\t *            return source.price;\n\t *          }\n\t *        } ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using default content\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"data\": null,\n\t *          \"defaultContent\": \"Click to edit\"\n\t *        } ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using array notation - outputting a list from an array\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"data\": \"name[, ]\"\n\t *        } ]\n\t *      } );\n\t *    } );\n\t *\n\t */\n\t\"mData\": null,\n\n\n\t/**\n\t * This property is the rendering partner to `data` and it is suggested that\n\t * when you want to manipulate data for display (including filtering,\n\t * sorting etc) without altering the underlying data for the table, use this\n\t * property. `render` can be considered to be the the read only companion to\n\t * `data` which is read / write (then as such more complex). Like `data`\n\t * this option can be given in a number of different ways to effect its\n\t * behaviour:\n\t *\n\t * * `integer` - treated as an array index for the data source. This is the\n\t *   default that DataTables uses (incrementally increased for each column).\n\t * * `string` - read an object property from the data source. There are\n\t *   three 'special' options that can be used in the string to alter how\n\t *   DataTables reads the data from the source object:\n\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t *      Javascript to read from nested objects, so to can the options\n\t *      specified in `data`. For example: `browser.version` or\n\t *      `browser.name`. If your object parameter name contains a period, use\n\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t *      from and array source, joining the data with the characters provided\n\t *      between the two brackets. For example: `name[, ]` would provide a\n\t *      comma-space separated list from the source array. If no characters\n\t *      are provided between the brackets, the original array source is\n\t *      returned.\n\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t *      execute a function of the name given. For example: `browser()` for a\n\t *      simple function on the data source, `browser.version()` for a\n\t *      function in a nested property or even `browser().version` to get an\n\t *      object property if the function called returns an object.\n\t * * `object` - use different data for the different data types requested by\n\t *   DataTables ('filter', 'display', 'type' or 'sort'). The property names\n\t *   of the object is the data type the property refers to and the value can\n\t *   defined using an integer, string or function using the same rules as\n\t *   `render` normally does. Note that an `_` option _must_ be specified.\n\t *   This is the default value to use if you haven't specified a value for\n\t *   the data type requested by DataTables.\n\t * * `function` - the function given will be executed whenever DataTables\n\t *   needs to set or get the data for a cell in the column. The function\n\t *   takes three parameters:\n\t *    * Parameters:\n\t *      * {array|object} The data source for the row (based on `data`)\n\t *      * {string} The type call data requested - this will be 'filter',\n\t *        'display', 'type' or 'sort'.\n\t *      * {array|object} The full data source for the row (not based on\n\t *        `data`)\n\t *    * Return:\n\t *      * The return value from the function is what will be used for the\n\t *        data requested.\n\t *\n\t *  @type string|int|function|object|null\n\t *  @default null Use the data source value.\n\t *\n\t *  @name DataTable.defaults.column.render\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Create a comma separated list from an array of objects\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t *        \"columns\": [\n\t *          { \"data\": \"engine\" },\n\t *          { \"data\": \"browser\" },\n\t *          {\n\t *            \"data\": \"platform\",\n\t *            \"render\": \"[, ].name\"\n\t *          }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Execute a function to obtain data\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t *          \"render\": \"browserName()\"\n\t *        } ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // As an object, extracting different data for the different types\n\t *    // This would be used with a data source such as:\n\t *    //   { \"phone\": 5552368, \"phone_filter\": \"5552368 555-2368\", \"phone_display\": \"555-2368\" }\n\t *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`\n\t *    // (which has both forms) is used for filtering for if a user inputs either format, while\n\t *    // the formatted phone number is the one that is shown in the table.\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t *          \"render\": {\n\t *            \"_\": \"phone\",\n\t *            \"filter\": \"phone_filter\",\n\t *            \"display\": \"phone_display\"\n\t *          }\n\t *        } ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Use as a function to create a link from the data source\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"data\": \"download_link\",\n\t *          \"render\": function ( data, type, full ) {\n\t *            return '<a href=\"'+data+'\">Download</a>';\n\t *          }\n\t *        } ]\n\t *      } );\n\t *    } );\n\t */\n\t\"mRender\": null,\n\n\n\t/**\n\t * Change the cell type created for the column - either TD cells or TH cells. This\n\t * can be useful as TH cells have semantic meaning in the table body, allowing them\n\t * to act as a header for a row (you may wish to add scope='row' to the TH elements).\n\t *  @type string\n\t *  @default td\n\t *\n\t *  @name DataTable.defaults.column.cellType\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Make the first column use TH cells\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"cellType\": \"th\"\n\t *        } ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sCellType\": \"td\",\n\n\n\t/**\n\t * Class to give to each cell in this column.\n\t *  @type string\n\t *  @default <i>Empty string</i>\n\t *\n\t *  @name DataTable.defaults.column.class\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"class\": \"my_class\", \"targets\": [ 0 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"class\": \"my_class\" },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sClass\": \"\",\n\n\t/**\n\t * When DataTables calculates the column widths to assign to each column,\n\t * it finds the longest string in each column and then constructs a\n\t * temporary table and reads the widths from that. The problem with this\n\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t * string - thus the calculation can go wrong (doing it properly and putting\n\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t * a \"work around\" we provide this option. It will append its value to the\n\t * text that is found to be the longest string for the column - i.e. padding.\n\t * Generally you shouldn't need this!\n\t *  @type string\n\t *  @default <i>Empty string<i>\n\t *\n\t *  @name DataTable.defaults.column.contentPadding\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          {\n\t *            \"contentPadding\": \"mmm\"\n\t *          }\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sContentPadding\": \"\",\n\n\n\t/**\n\t * Allows a default value to be given for a column's data, and will be used\n\t * whenever a null data source is encountered (this can be because `data`\n\t * is set to null, or because the data source itself is null).\n\t *  @type string\n\t *  @default null\n\t *\n\t *  @name DataTable.defaults.column.defaultContent\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          {\n\t *            \"data\": null,\n\t *            \"defaultContent\": \"Edit\",\n\t *            \"targets\": [ -1 ]\n\t *          }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          {\n\t *            \"data\": null,\n\t *            \"defaultContent\": \"Edit\"\n\t *          }\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sDefaultContent\": null,\n\n\n\t/**\n\t * This parameter is only used in DataTables' server-side processing. It can\n\t * be exceptionally useful to know what columns are being displayed on the\n\t * client side, and to map these to database fields. When defined, the names\n\t * also allow DataTables to reorder information from the server if it comes\n\t * back in an unexpected order (i.e. if you switch your columns around on the\n\t * client-side, your server-side code does not also need updating).\n\t *  @type string\n\t *  @default <i>Empty string</i>\n\t *\n\t *  @name DataTable.defaults.column.name\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"name\": \"engine\", \"targets\": [ 0 ] },\n\t *          { \"name\": \"browser\", \"targets\": [ 1 ] },\n\t *          { \"name\": \"platform\", \"targets\": [ 2 ] },\n\t *          { \"name\": \"version\", \"targets\": [ 3 ] },\n\t *          { \"name\": \"grade\", \"targets\": [ 4 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"name\": \"engine\" },\n\t *          { \"name\": \"browser\" },\n\t *          { \"name\": \"platform\" },\n\t *          { \"name\": \"version\" },\n\t *          { \"name\": \"grade\" }\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sName\": \"\",\n\n\n\t/**\n\t * Defines a data source type for the ordering which can be used to read\n\t * real-time information from the table (updating the internally cached\n\t * version) prior to ordering. This allows ordering to occur on user\n\t * editable elements such as form inputs.\n\t *  @type string\n\t *  @default std\n\t *\n\t *  @name DataTable.defaults.column.orderDataType\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"orderDataType\": \"dom-text\", \"targets\": [ 2, 3 ] },\n\t *          { \"type\": \"numeric\", \"targets\": [ 3 ] },\n\t *          { \"orderDataType\": \"dom-select\", \"targets\": [ 4 ] },\n\t *          { \"orderDataType\": \"dom-checkbox\", \"targets\": [ 5 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          null,\n\t *          null,\n\t *          { \"orderDataType\": \"dom-text\" },\n\t *          { \"orderDataType\": \"dom-text\", \"type\": \"numeric\" },\n\t *          { \"orderDataType\": \"dom-select\" },\n\t *          { \"orderDataType\": \"dom-checkbox\" }\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sSortDataType\": \"std\",\n\n\n\t/**\n\t * The title of this column.\n\t *  @type string\n\t *  @default null <i>Derived from the 'TH' value for this column in the\n\t *    original HTML table.</i>\n\t *\n\t *  @name DataTable.defaults.column.title\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"title\": \"My column title\", \"targets\": [ 0 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"title\": \"My column title\" },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sTitle\": null,\n\n\n\t/**\n\t * The type allows you to specify how the data for this column will be\n\t * ordered. Four types (string, numeric, date and html (which will strip\n\t * HTML tags before ordering)) are currently available. Note that only date\n\t * formats understood by Javascript's Date() object will be accepted as type\n\t * date. For example: \"Mar 26, 2008 5:03 PM\". May take the values: 'string',\n\t * 'numeric', 'date' or 'html' (by default). Further types can be adding\n\t * through plug-ins.\n\t *  @type string\n\t *  @default null <i>Auto-detected from raw data</i>\n\t *\n\t *  @name DataTable.defaults.column.type\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"type\": \"html\", \"targets\": [ 0 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"type\": \"html\" },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sType\": null,\n\n\n\t/**\n\t * Defining the width of the column, this parameter may take any CSS value\n\t * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not\n\t * been given a specific width through this interface ensuring that the table\n\t * remains readable.\n\t *  @type string\n\t *  @default null <i>Automatic</i>\n\t *\n\t *  @name DataTable.defaults.column.width\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"width\": \"20%\", \"targets\": [ 0 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"width\": \"20%\" },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sWidth\": null\n};\n\n_fnHungarianMap( DataTable.defaults.column );\n\n\n\n/**\n * DataTables settings object - this holds all the information needed for a\n * given table, including configuration, data and current application of the\n * table options. DataTables does not have a single instance for each DataTable\n * with the settings attached to that instance, but rather instances of the\n * DataTable \"class\" are created on-the-fly as needed (typically by a\n * $().dataTable() call) and the settings object is then applied to that\n * instance.\n *\n * Note that this object is related to {@link DataTable.defaults} but this\n * one is the internal data store for DataTables's cache of columns. It should\n * NOT be manipulated outside of DataTables. Any configuration should be done\n * through the initialisation options.\n *  @namespace\n *  @todo Really should attach the settings object to individual instances so we\n *    don't need to create new instances on each $().dataTable() call (if the\n *    table already exists). It would also save passing oSettings around and\n *    into every single function. However, this is a very significant\n *    architecture change for DataTables and will almost certainly break\n *    backwards compatibility with older installations. This is something that\n *    will be done in 2.0.\n */\nDataTable.models.oSettings = {\n\t/**\n\t * Primary features of DataTables and their enablement state.\n\t *  @namespace\n\t */\n\t\"oFeatures\": {\n\n\t\t/**\n\t\t * Flag to say if DataTables should automatically try to calculate the\n\t\t * optimum table and columns widths (true) or not (false).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bAutoWidth\": null,\n\n\t\t/**\n\t\t * Delay the creation of TR and TD elements until they are actually\n\t\t * needed by a driven page draw. This can give a significant speed\n\t\t * increase for Ajax source and Javascript source data, but makes no\n\t\t * difference at all for DOM and server-side processing tables.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bDeferRender\": null,\n\n\t\t/**\n\t\t * Enable filtering on the table or not. Note that if this is disabled\n\t\t * then there is no filtering at all on the table, including fnFilter.\n\t\t * To just remove the filtering input use sDom and remove the 'f' option.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bFilter\": null,\n\n\t\t/**\n\t\t * Table information element (the 'Showing x of y records' div) enable\n\t\t * flag.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bInfo\": null,\n\n\t\t/**\n\t\t * Present a user control allowing the end user to change the page size\n\t\t * when pagination is enabled.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bLengthChange\": null,\n\n\t\t/**\n\t\t * Pagination enabled or not. Note that if this is disabled then length\n\t\t * changing must also be disabled.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bPaginate\": null,\n\n\t\t/**\n\t\t * Processing indicator enable flag whenever DataTables is enacting a\n\t\t * user request - typically an Ajax request for server-side processing.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bProcessing\": null,\n\n\t\t/**\n\t\t * Server-side processing enabled flag - when enabled DataTables will\n\t\t * get all data from the server for every draw - there is no filtering,\n\t\t * sorting or paging done on the client-side.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bServerSide\": null,\n\n\t\t/**\n\t\t * Sorting enablement flag.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSort\": null,\n\n\t\t/**\n\t\t * Multi-column sorting\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortMulti\": null,\n\n\t\t/**\n\t\t * Apply a class to the columns which are being sorted to provide a\n\t\t * visual highlight or not. This can slow things down when enabled since\n\t\t * there is a lot of DOM interaction.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortClasses\": null,\n\n\t\t/**\n\t\t * State saving enablement flag.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bStateSave\": null\n\t},\n\n\n\t/**\n\t * Scrolling settings for a table.\n\t *  @namespace\n\t */\n\t\"oScroll\": {\n\t\t/**\n\t\t * When the table is shorter in height than sScrollY, collapse the\n\t\t * table container down to the height of the table (when true).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bCollapse\": null,\n\n\t\t/**\n\t\t * Width of the scrollbar for the web-browser's platform. Calculated\n\t\t * during table initialisation.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iBarWidth\": 0,\n\n\t\t/**\n\t\t * Viewport width for horizontal scrolling. Horizontal scrolling is\n\t\t * disabled if an empty string.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sX\": null,\n\n\t\t/**\n\t\t * Width to expand the table to when using x-scrolling. Typically you\n\t\t * should not need to use this.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @deprecated\n\t\t */\n\t\t\"sXInner\": null,\n\n\t\t/**\n\t\t * Viewport height for vertical scrolling. Vertical scrolling is disabled\n\t\t * if an empty string.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sY\": null\n\t},\n\n\t/**\n\t * Language information for the table.\n\t *  @namespace\n\t *  @extends DataTable.defaults.oLanguage\n\t */\n\t\"oLanguage\": {\n\t\t/**\n\t\t * Information callback function. See\n\t\t * {@link DataTable.defaults.fnInfoCallback}\n\t\t *  @type function\n\t\t *  @default null\n\t\t */\n\t\t\"fnInfoCallback\": null\n\t},\n\n\t/**\n\t * Browser support parameters\n\t *  @namespace\n\t */\n\t\"oBrowser\": {\n\t\t/**\n\t\t * Indicate if the browser incorrectly calculates width:100% inside a\n\t\t * scrolling element (IE6/7)\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bScrollOversize\": false,\n\n\t\t/**\n\t\t * Determine if the vertical scrollbar is on the right or left of the\n\t\t * scrolling container - needed for rtl language layout, although not\n\t\t * all browsers move the scrollbar (Safari).\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bScrollbarLeft\": false,\n\n\t\t/**\n\t\t * Flag for if `getBoundingClientRect` is fully supported or not\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bBounding\": false,\n\n\t\t/**\n\t\t * Browser scrollbar width\n\t\t *  @type integer\n\t\t *  @default 0\n\t\t */\n\t\t\"barWidth\": 0\n\t},\n\n\n\t\"ajax\": null,\n\n\n\t/**\n\t * Array referencing the nodes which are used for the features. The\n\t * parameters of this object match what is allowed by sDom - i.e.\n\t *   <ul>\n\t *     <li>'l' - Length changing</li>\n\t *     <li>'f' - Filtering input</li>\n\t *     <li>'t' - The table!</li>\n\t *     <li>'i' - Information</li>\n\t *     <li>'p' - Pagination</li>\n\t *     <li>'r' - pRocessing</li>\n\t *   </ul>\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aanFeatures\": [],\n\n\t/**\n\t * Store data information - see {@link DataTable.models.oRow} for detailed\n\t * information.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoData\": [],\n\n\t/**\n\t * Array of indexes which are in the current display (after filtering etc)\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aiDisplay\": [],\n\n\t/**\n\t * Array of indexes for display - no filtering\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aiDisplayMaster\": [],\n\n\t/**\n\t * Map of row ids to data indexes\n\t *  @type object\n\t *  @default {}\n\t */\n\t\"aIds\": {},\n\n\t/**\n\t * Store information about each column that is in use\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoColumns\": [],\n\n\t/**\n\t * Store information about the table's header\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoHeader\": [],\n\n\t/**\n\t * Store information about the table's footer\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoFooter\": [],\n\n\t/**\n\t * Store the applied global search information in case we want to force a\n\t * research or compare the old search to a new one.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @namespace\n\t *  @extends DataTable.models.oSearch\n\t */\n\t\"oPreviousSearch\": {},\n\n\t/**\n\t * Store the applied search for each column - see\n\t * {@link DataTable.models.oSearch} for the format that is used for the\n\t * filtering information for each column.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoPreSearchCols\": [],\n\n\t/**\n\t * Sorting that is applied to the table. Note that the inner arrays are\n\t * used in the following manner:\n\t * <ul>\n\t *   <li>Index 0 - column number</li>\n\t *   <li>Index 1 - current sorting direction</li>\n\t * </ul>\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type array\n\t *  @todo These inner arrays should really be objects\n\t */\n\t\"aaSorting\": null,\n\n\t/**\n\t * Sorting that is always applied to the table (i.e. prefixed in front of\n\t * aaSorting).\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aaSortingFixed\": [],\n\n\t/**\n\t * Classes to use for the striping of a table.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"asStripeClasses\": null,\n\n\t/**\n\t * If restoring a table - we should restore its striping classes as well\n\t *  @type array\n\t *  @default []\n\t */\n\t\"asDestroyStripes\": [],\n\n\t/**\n\t * If restoring a table - we should restore its width\n\t *  @type int\n\t *  @default 0\n\t */\n\t\"sDestroyWidth\": 0,\n\n\t/**\n\t * Callback functions array for every time a row is inserted (i.e. on a draw).\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoRowCallback\": [],\n\n\t/**\n\t * Callback functions for the header on each draw.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoHeaderCallback\": [],\n\n\t/**\n\t * Callback function for the footer on each draw.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoFooterCallback\": [],\n\n\t/**\n\t * Array of callback functions for draw callback functions\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoDrawCallback\": [],\n\n\t/**\n\t * Array of callback functions for row created function\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoRowCreatedCallback\": [],\n\n\t/**\n\t * Callback functions for just before the table is redrawn. A return of\n\t * false will be used to cancel the draw.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoPreDrawCallback\": [],\n\n\t/**\n\t * Callback functions for when the table has been initialised.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoInitComplete\": [],\n\n\n\t/**\n\t * Callbacks for modifying the settings to be stored for state saving, prior to\n\t * saving state.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoStateSaveParams\": [],\n\n\t/**\n\t * Callbacks for modifying the settings that have been stored for state saving\n\t * prior to using the stored values to restore the state.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoStateLoadParams\": [],\n\n\t/**\n\t * Callbacks for operating on the settings object once the saved state has been\n\t * loaded\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoStateLoaded\": [],\n\n\t/**\n\t * Cache the table ID for quick access\n\t *  @type string\n\t *  @default <i>Empty string</i>\n\t */\n\t\"sTableId\": \"\",\n\n\t/**\n\t * The TABLE node for the main table\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTable\": null,\n\n\t/**\n\t * Permanent ref to the thead element\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTHead\": null,\n\n\t/**\n\t * Permanent ref to the tfoot element - if it exists\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTFoot\": null,\n\n\t/**\n\t * Permanent ref to the tbody element\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTBody\": null,\n\n\t/**\n\t * Cache the wrapper node (contains all DataTables controlled elements)\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTableWrapper\": null,\n\n\t/**\n\t * Indicate if when using server-side processing the loading of data\n\t * should be deferred until the second draw.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type boolean\n\t *  @default false\n\t */\n\t\"bDeferLoading\": false,\n\n\t/**\n\t * Indicate if all required information has been read in\n\t *  @type boolean\n\t *  @default false\n\t */\n\t\"bInitialised\": false,\n\n\t/**\n\t * Information about open rows. Each object in the array has the parameters\n\t * 'nTr' and 'nParent'\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoOpenRows\": [],\n\n\t/**\n\t * Dictate the positioning of DataTables' control elements - see\n\t * {@link DataTable.model.oInit.sDom}.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sDom\": null,\n\n\t/**\n\t * Search delay (in mS)\n\t *  @type integer\n\t *  @default null\n\t */\n\t\"searchDelay\": null,\n\n\t/**\n\t * Which type of pagination should be used.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type string\n\t *  @default two_button\n\t */\n\t\"sPaginationType\": \"two_button\",\n\n\t/**\n\t * The state duration (for `stateSave`) in seconds.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type int\n\t *  @default 0\n\t */\n\t\"iStateDuration\": 0,\n\n\t/**\n\t * Array of callback functions for state saving. Each array element is an\n\t * object with the following parameters:\n\t *   <ul>\n\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t *       and the JSON string to save that has been thus far created. Returns\n\t *       a JSON string to be inserted into a json object\n\t *       (i.e. '\"param\": [ 0, 1, 2]')</li>\n\t *     <li>string:sName - name of callback</li>\n\t *   </ul>\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoStateSave\": [],\n\n\t/**\n\t * Array of callback functions for state loading. Each array element is an\n\t * object with the following parameters:\n\t *   <ul>\n\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t *       and the object stored. May return false to cancel state loading</li>\n\t *     <li>string:sName - name of callback</li>\n\t *   </ul>\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoStateLoad\": [],\n\n\t/**\n\t * State that was saved. Useful for back reference\n\t *  @type object\n\t *  @default null\n\t */\n\t\"oSavedState\": null,\n\n\t/**\n\t * State that was loaded. Useful for back reference\n\t *  @type object\n\t *  @default null\n\t */\n\t\"oLoadedState\": null,\n\n\t/**\n\t * Source url for AJAX data for the table.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sAjaxSource\": null,\n\n\t/**\n\t * Property from a given object from which to read the table data from. This\n\t * can be an empty string (when not server-side processing), in which case\n\t * it is  assumed an an array is given directly.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type string\n\t */\n\t\"sAjaxDataProp\": null,\n\n\t/**\n\t * The last jQuery XHR object that was used for server-side data gathering.\n\t * This can be used for working with the XHR information in one of the\n\t * callbacks\n\t *  @type object\n\t *  @default null\n\t */\n\t\"jqXHR\": null,\n\n\t/**\n\t * JSON returned from the server in the last Ajax request\n\t *  @type object\n\t *  @default undefined\n\t */\n\t\"json\": undefined,\n\n\t/**\n\t * Data submitted as part of the last Ajax request\n\t *  @type object\n\t *  @default undefined\n\t */\n\t\"oAjaxData\": undefined,\n\n\t/**\n\t * Function to get the server-side data.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type function\n\t */\n\t\"fnServerData\": null,\n\n\t/**\n\t * Functions which are called prior to sending an Ajax request so extra\n\t * parameters can easily be sent to the server\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoServerParams\": [],\n\n\t/**\n\t * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if\n\t * required).\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type string\n\t */\n\t\"sServerMethod\": null,\n\n\t/**\n\t * Format numbers for display.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type function\n\t */\n\t\"fnFormatNumber\": null,\n\n\t/**\n\t * List of options that can be used for the user selectable length menu.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aLengthMenu\": null,\n\n\t/**\n\t * Counter for the draws that the table does. Also used as a tracker for\n\t * server-side processing\n\t *  @type int\n\t *  @default 0\n\t */\n\t\"iDraw\": 0,\n\n\t/**\n\t * Indicate if a redraw is being done - useful for Ajax\n\t *  @type boolean\n\t *  @default false\n\t */\n\t\"bDrawing\": false,\n\n\t/**\n\t * Draw index (iDraw) of the last error when parsing the returned data\n\t *  @type int\n\t *  @default -1\n\t */\n\t\"iDrawError\": -1,\n\n\t/**\n\t * Paging display length\n\t *  @type int\n\t *  @default 10\n\t */\n\t\"_iDisplayLength\": 10,\n\n\t/**\n\t * Paging start point - aiDisplay index\n\t *  @type int\n\t *  @default 0\n\t */\n\t\"_iDisplayStart\": 0,\n\n\t/**\n\t * Server-side processing - number of records in the result set\n\t * (i.e. before filtering), Use fnRecordsTotal rather than\n\t * this property to get the value of the number of records, regardless of\n\t * the server-side processing setting.\n\t *  @type int\n\t *  @default 0\n\t *  @private\n\t */\n\t\"_iRecordsTotal\": 0,\n\n\t/**\n\t * Server-side processing - number of records in the current display set\n\t * (i.e. after filtering). Use fnRecordsDisplay rather than\n\t * this property to get the value of the number of records, regardless of\n\t * the server-side processing setting.\n\t *  @type boolean\n\t *  @default 0\n\t *  @private\n\t */\n\t\"_iRecordsDisplay\": 0,\n\n\t/**\n\t * The classes to use for the table\n\t *  @type object\n\t *  @default {}\n\t */\n\t\"oClasses\": {},\n\n\t/**\n\t * Flag attached to the settings object so you can check in the draw\n\t * callback if filtering has been done in the draw. Deprecated in favour of\n\t * events.\n\t *  @type boolean\n\t *  @default false\n\t *  @deprecated\n\t */\n\t\"bFiltered\": false,\n\n\t/**\n\t * Flag attached to the settings object so you can check in the draw\n\t * callback if sorting has been done in the draw. Deprecated in favour of\n\t * events.\n\t *  @type boolean\n\t *  @default false\n\t *  @deprecated\n\t */\n\t\"bSorted\": false,\n\n\t/**\n\t * Indicate that if multiple rows are in the header and there is more than\n\t * one unique cell per column, if the top one (true) or bottom one (false)\n\t * should be used for sorting / title by DataTables.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type boolean\n\t */\n\t\"bSortCellsTop\": null,\n\n\t/**\n\t * Initialisation object that is used for the table\n\t *  @type object\n\t *  @default null\n\t */\n\t\"oInit\": null,\n\n\t/**\n\t * Destroy callback functions - for plug-ins to attach themselves to the\n\t * destroy so they can clean up markup and events.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoDestroyCallback\": [],\n\n\n\t/**\n\t * Get the number of records in the current record set, before filtering\n\t *  @type function\n\t */\n\t\"fnRecordsTotal\": function ()\n\t{\n\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\tthis._iRecordsTotal * 1 :\n\t\t\tthis.aiDisplayMaster.length;\n\t},\n\n\t/**\n\t * Get the number of records in the current record set, after filtering\n\t *  @type function\n\t */\n\t\"fnRecordsDisplay\": function ()\n\t{\n\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\tthis._iRecordsDisplay * 1 :\n\t\t\tthis.aiDisplay.length;\n\t},\n\n\t/**\n\t * Get the display end point - aiDisplay index\n\t *  @type function\n\t */\n\t\"fnDisplayEnd\": function ()\n\t{\n\t\tvar\n\t\t\tlen      = this._iDisplayLength,\n\t\t\tstart    = this._iDisplayStart,\n\t\t\tcalc     = start + len,\n\t\t\trecords  = this.aiDisplay.length,\n\t\t\tfeatures = this.oFeatures,\n\t\t\tpaginate = features.bPaginate;\n\n\t\tif ( features.bServerSide ) {\n\t\t\treturn paginate === false || len === -1 ?\n\t\t\t\tstart + records :\n\t\t\t\tMath.min( start+len, this._iRecordsDisplay );\n\t\t}\n\t\telse {\n\t\t\treturn ! paginate || calc>records || len===-1 ?\n\t\t\t\trecords :\n\t\t\t\tcalc;\n\t\t}\n\t},\n\n\t/**\n\t * The DataTables object for this table\n\t *  @type object\n\t *  @default null\n\t */\n\t\"oInstance\": null,\n\n\t/**\n\t * Unique identifier for each instance of the DataTables object. If there\n\t * is an ID on the table node, then it takes that value, otherwise an\n\t * incrementing internal counter is used.\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sInstance\": null,\n\n\t/**\n\t * tabindex attribute value that is added to DataTables control elements, allowing\n\t * keyboard navigation of the table and its controls.\n\t */\n\t\"iTabIndex\": 0,\n\n\t/**\n\t * DIV container for the footer scrolling table if scrolling\n\t */\n\t\"nScrollHead\": null,\n\n\t/**\n\t * DIV container for the footer scrolling table if scrolling\n\t */\n\t\"nScrollFoot\": null,\n\n\t/**\n\t * Last applied sort\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aLastSort\": [],\n\n\t/**\n\t * Stored plug-in instances\n\t *  @type object\n\t *  @default {}\n\t */\n\t\"oPlugins\": {},\n\n\t/**\n\t * Function used to get a row's id from the row's data\n\t *  @type function\n\t *  @default null\n\t */\n\t\"rowIdFn\": null,\n\n\t/**\n\t * Data location where to store a row's id\n\t *  @type string\n\t *  @default null\n\t */\n\t\"rowId\": null\n};\n\n/**\n * Extension object for DataTables that is used to provide all extension\n * options.\n *\n * Note that the `DataTable.ext` object is available through\n * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is\n * also aliased to `jQuery.fn.dataTableExt` for historic reasons.\n *  @namespace\n *  @extends DataTable.models.ext\n */\n\n\n/**\n * DataTables extensions\n * \n * This namespace acts as a collection area for plug-ins that can be used to\n * extend DataTables capabilities. Indeed many of the build in methods\n * use this method to provide their own capabilities (sorting methods for\n * example).\n *\n * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy\n * reasons\n *\n *  @namespace\n */\nDataTable.ext = _ext = {\n\t/**\n\t * Buttons. For use with the Buttons extension for DataTables. This is\n\t * defined here so other extensions can define buttons regardless of load\n\t * order. It is _not_ used by DataTables core.\n\t *\n\t *  @type object\n\t *  @default {}\n\t */\n\tbuttons: {},\n\n\n\t/**\n\t * Element class names\n\t *\n\t *  @type object\n\t *  @default {}\n\t */\n\tclasses: {},\n\n\n\t/**\n\t * DataTables build type (expanded by the download builder)\n\t *\n\t *  @type string\n\t */\n\tbuilder: \"-source-\",\n\n\n\t/**\n\t * Error reporting.\n\t * \n\t * How should DataTables report an error. Can take the value 'alert',\n\t * 'throw', 'none' or a function.\n\t *\n\t *  @type string|function\n\t *  @default alert\n\t */\n\terrMode: \"alert\",\n\n\n\t/**\n\t * Feature plug-ins.\n\t * \n\t * This is an array of objects which describe the feature plug-ins that are\n\t * available to DataTables. These feature plug-ins are then available for\n\t * use through the `dom` initialisation option.\n\t * \n\t * Each feature plug-in is described by an object which must have the\n\t * following properties:\n\t * \n\t * * `fnInit` - function that is used to initialise the plug-in,\n\t * * `cFeature` - a character so the feature can be enabled by the `dom`\n\t *   instillation option. This is case sensitive.\n\t *\n\t * The `fnInit` function has the following input parameters:\n\t *\n\t * 1. `{object}` DataTables settings object: see\n\t *    {@link DataTable.models.oSettings}\n\t *\n\t * And the following return is expected:\n\t * \n\t * * {node|null} The element which contains your feature. Note that the\n\t *   return may also be void if your plug-in does not require to inject any\n\t *   DOM elements into DataTables control (`dom`) - for example this might\n\t *   be useful when developing a plug-in which allows table control via\n\t *   keyboard entry\n\t *\n\t *  @type array\n\t *\n\t *  @example\n\t *    $.fn.dataTable.ext.features.push( {\n\t *      \"fnInit\": function( oSettings ) {\n\t *        return new TableTools( { \"oDTSettings\": oSettings } );\n\t *      },\n\t *      \"cFeature\": \"T\"\n\t *    } );\n\t */\n\tfeature: [],\n\n\n\t/**\n\t * Row searching.\n\t * \n\t * This method of searching is complimentary to the default type based\n\t * searching, and a lot more comprehensive as it allows you complete control\n\t * over the searching logic. Each element in this array is a function\n\t * (parameters described below) that is called for every row in the table,\n\t * and your logic decides if it should be included in the searching data set\n\t * or not.\n\t *\n\t * Searching functions have the following input parameters:\n\t *\n\t * 1. `{object}` DataTables settings object: see\n\t *    {@link DataTable.models.oSettings}\n\t * 2. `{array|object}` Data for the row to be processed (same as the\n\t *    original format that was passed in as the data source, or an array\n\t *    from a DOM data source\n\t * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which\n\t *    can be useful to retrieve the `TR` element if you need DOM interaction.\n\t *\n\t * And the following return is expected:\n\t *\n\t * * {boolean} Include the row in the searched result set (true) or not\n\t *   (false)\n\t *\n\t * Note that as with the main search ability in DataTables, technically this\n\t * is \"filtering\", since it is subtractive. However, for consistency in\n\t * naming we call it searching here.\n\t *\n\t *  @type array\n\t *  @default []\n\t *\n\t *  @example\n\t *    // The following example shows custom search being applied to the\n\t *    // fourth column (i.e. the data[3] index) based on two input values\n\t *    // from the end-user, matching the data in a certain range.\n\t *    $.fn.dataTable.ext.search.push(\n\t *      function( settings, data, dataIndex ) {\n\t *        var min = document.getElementById('min').value * 1;\n\t *        var max = document.getElementById('max').value * 1;\n\t *        var version = data[3] == \"-\" ? 0 : data[3]*1;\n\t *\n\t *        if ( min == \"\" && max == \"\" ) {\n\t *          return true;\n\t *        }\n\t *        else if ( min == \"\" && version < max ) {\n\t *          return true;\n\t *        }\n\t *        else if ( min < version && \"\" == max ) {\n\t *          return true;\n\t *        }\n\t *        else if ( min < version && version < max ) {\n\t *          return true;\n\t *        }\n\t *        return false;\n\t *      }\n\t *    );\n\t */\n\tsearch: [],\n\n\n\t/**\n\t * Selector extensions\n\t *\n\t * The `selector` option can be used to extend the options available for the\n\t * selector modifier options (`selector-modifier` object data type) that\n\t * each of the three built in selector types offer (row, column and cell +\n\t * their plural counterparts). For example the Select extension uses this\n\t * mechanism to provide an option to select only rows, columns and cells\n\t * that have been marked as selected by the end user (`{selected: true}`),\n\t * which can be used in conjunction with the existing built in selector\n\t * options.\n\t *\n\t * Each property is an array to which functions can be pushed. The functions\n\t * take three attributes:\n\t *\n\t * * Settings object for the host table\n\t * * Options object (`selector-modifier` object type)\n\t * * Array of selected item indexes\n\t *\n\t * The return is an array of the resulting item indexes after the custom\n\t * selector has been applied.\n\t *\n\t *  @type object\n\t */\n\tselector: {\n\t\tcell: [],\n\t\tcolumn: [],\n\t\trow: []\n\t},\n\n\n\t/**\n\t * Internal functions, exposed for used in plug-ins.\n\t * \n\t * Please note that you should not need to use the internal methods for\n\t * anything other than a plug-in (and even then, try to avoid if possible).\n\t * The internal function may change between releases.\n\t *\n\t *  @type object\n\t *  @default {}\n\t */\n\tinternal: {},\n\n\n\t/**\n\t * Legacy configuration options. Enable and disable legacy options that\n\t * are available in DataTables.\n\t *\n\t *  @type object\n\t */\n\tlegacy: {\n\t\t/**\n\t\t * Enable / disable DataTables 1.9 compatible server-side processing\n\t\t * requests\n\t\t *\n\t\t *  @type boolean\n\t\t *  @default null\n\t\t */\n\t\tajax: null\n\t},\n\n\n\t/**\n\t * Pagination plug-in methods.\n\t * \n\t * Each entry in this object is a function and defines which buttons should\n\t * be shown by the pagination rendering method that is used for the table:\n\t * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the\n\t * buttons are displayed in the document, while the functions here tell it\n\t * what buttons to display. This is done by returning an array of button\n\t * descriptions (what each button will do).\n\t *\n\t * Pagination types (the four built in options and any additional plug-in\n\t * options defined here) can be used through the `paginationType`\n\t * initialisation parameter.\n\t *\n\t * The functions defined take two parameters:\n\t *\n\t * 1. `{int} page` The current page index\n\t * 2. `{int} pages` The number of pages in the table\n\t *\n\t * Each function is expected to return an array where each element of the\n\t * array can be one of:\n\t *\n\t * * `first` - Jump to first page when activated\n\t * * `last` - Jump to last page when activated\n\t * * `previous` - Show previous page when activated\n\t * * `next` - Show next page when activated\n\t * * `{int}` - Show page of the index given\n\t * * `{array}` - A nested array containing the above elements to add a\n\t *   containing 'DIV' element (might be useful for styling).\n\t *\n\t * Note that DataTables v1.9- used this object slightly differently whereby\n\t * an object with two functions would be defined for each plug-in. That\n\t * ability is still supported by DataTables 1.10+ to provide backwards\n\t * compatibility, but this option of use is now decremented and no longer\n\t * documented in DataTables 1.10+.\n\t *\n\t *  @type object\n\t *  @default {}\n\t *\n\t *  @example\n\t *    // Show previous, next and current page buttons only\n\t *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {\n\t *      return [ 'previous', page, 'next' ];\n\t *    };\n\t */\n\tpager: {},\n\n\n\trenderer: {\n\t\tpageButton: {},\n\t\theader: {}\n\t},\n\n\n\t/**\n\t * Ordering plug-ins - custom data source\n\t * \n\t * The extension options for ordering of data available here is complimentary\n\t * to the default type based ordering that DataTables typically uses. It\n\t * allows much greater control over the the data that is being used to\n\t * order a column, but is necessarily therefore more complex.\n\t * \n\t * This type of ordering is useful if you want to do ordering based on data\n\t * live from the DOM (for example the contents of an 'input' element) rather\n\t * than just the static string that DataTables knows of.\n\t * \n\t * The way these plug-ins work is that you create an array of the values you\n\t * wish to be ordering for the column in question and then return that\n\t * array. The data in the array much be in the index order of the rows in\n\t * the table (not the currently ordering order!). Which order data gathering\n\t * function is run here depends on the `dt-init columns.orderDataType`\n\t * parameter that is used for the column (if any).\n\t *\n\t * The functions defined take two parameters:\n\t *\n\t * 1. `{object}` DataTables settings object: see\n\t *    {@link DataTable.models.oSettings}\n\t * 2. `{int}` Target column index\n\t *\n\t * Each function is expected to return an array:\n\t *\n\t * * `{array}` Data for the column to be ordering upon\n\t *\n\t *  @type array\n\t *\n\t *  @example\n\t *    // Ordering using `input` node values\n\t *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )\n\t *    {\n\t *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {\n\t *        return $('input', td).val();\n\t *      } );\n\t *    }\n\t */\n\torder: {},\n\n\n\t/**\n\t * Type based plug-ins.\n\t *\n\t * Each column in DataTables has a type assigned to it, either by automatic\n\t * detection or by direct assignment using the `type` option for the column.\n\t * The type of a column will effect how it is ordering and search (plug-ins\n\t * can also make use of the column type if required).\n\t *\n\t * @namespace\n\t */\n\ttype: {\n\t\t/**\n\t\t * Type detection functions.\n\t\t *\n\t\t * The functions defined in this object are used to automatically detect\n\t\t * a column's type, making initialisation of DataTables super easy, even\n\t\t * when complex data is in the table.\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t     *  1. `{*}` Data from the column cell to be analysed\n\t     *  2. `{settings}` DataTables settings object. This can be used to\n\t     *     perform context specific type detection - for example detection\n\t     *     based on language settings such as using a comma for a decimal\n\t     *     place. Generally speaking the options from the settings will not\n\t     *     be required\n\t\t *\n\t\t * Each function is expected to return:\n\t\t *\n\t\t * * `{string|null}` Data type detected, or null if unknown (and thus\n\t\t *   pass it on to the other type detection functions.\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    // Currency type detection plug-in:\n\t\t *    $.fn.dataTable.ext.type.detect.push(\n\t\t *      function ( data, settings ) {\n\t\t *        // Check the numeric part\n\t\t *        if ( ! data.substring(1).match(/[0-9]/) ) {\n\t\t *          return null;\n\t\t *        }\n\t\t *\n\t\t *        // Check prefixed by currency\n\t\t *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {\n\t\t *          return 'currency';\n\t\t *        }\n\t\t *        return null;\n\t\t *      }\n\t\t *    );\n\t\t */\n\t\tdetect: [],\n\n\n\t\t/**\n\t\t * Type based search formatting.\n\t\t *\n\t\t * The type based searching functions can be used to pre-format the\n\t\t * data to be search on. For example, it can be used to strip HTML\n\t\t * tags or to de-format telephone numbers for numeric only searching.\n\t\t *\n\t\t * Note that is a search is not defined for a column of a given type,\n\t\t * no search formatting will be performed.\n\t\t * \n\t\t * Pre-processing of searching data plug-ins - When you assign the sType\n\t\t * for a column (or have it automatically detected for you by DataTables\n\t\t * or a type detection plug-in), you will typically be using this for\n\t\t * custom sorting, but it can also be used to provide custom searching\n\t\t * by allowing you to pre-processing the data and returning the data in\n\t\t * the format that should be searched upon. This is done by adding\n\t\t * functions this object with a parameter name which matches the sType\n\t\t * for that target column. This is the corollary of <i>afnSortData</i>\n\t\t * for searching data.\n\t\t *\n\t\t * The functions defined take a single parameter:\n\t\t *\n\t     *  1. `{*}` Data from the column cell to be prepared for searching\n\t\t *\n\t\t * Each function is expected to return:\n\t\t *\n\t\t * * `{string|null}` Formatted string that will be used for the searching.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {\n\t\t *      return d.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t *    }\n\t\t */\n\t\tsearch: {},\n\n\n\t\t/**\n\t\t * Type based ordering.\n\t\t *\n\t\t * The column type tells DataTables what ordering to apply to the table\n\t\t * when a column is sorted upon. The order for each type that is defined,\n\t\t * is defined by the functions available in this object.\n\t\t *\n\t\t * Each ordering option can be described by three properties added to\n\t\t * this object:\n\t\t *\n\t\t * * `{type}-pre` - Pre-formatting function\n\t\t * * `{type}-asc` - Ascending order function\n\t\t * * `{type}-desc` - Descending order function\n\t\t *\n\t\t * All three can be used together, only `{type}-pre` or only\n\t\t * `{type}-asc` and `{type}-desc` together. It is generally recommended\n\t\t * that only `{type}-pre` is used, as this provides the optimal\n\t\t * implementation in terms of speed, although the others are provided\n\t\t * for compatibility with existing Javascript sort functions.\n\t\t *\n\t\t * `{type}-pre`: Functions defined take a single parameter:\n\t\t *\n\t     *  1. `{*}` Data from the column cell to be prepared for ordering\n\t\t *\n\t\t * And return:\n\t\t *\n\t\t * * `{*}` Data to be sorted upon\n\t\t *\n\t\t * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort\n\t\t * functions, taking two parameters:\n\t\t *\n\t     *  1. `{*}` Data to compare to the second parameter\n\t     *  2. `{*}` Data to compare to the first parameter\n\t\t *\n\t\t * And returning:\n\t\t *\n\t\t * * `{*}` Ordering match: <0 if first parameter should be sorted lower\n\t\t *   than the second parameter, ===0 if the two parameters are equal and\n\t\t *   >0 if the first parameter should be sorted height than the second\n\t\t *   parameter.\n\t\t * \n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    // Numeric ordering of formatted numbers with a pre-formatter\n\t\t *    $.extend( $.fn.dataTable.ext.type.order, {\n\t\t *      \"string-pre\": function(x) {\n\t\t *        a = (a === \"-\" || a === \"\") ? 0 : a.replace( /[^\\d\\-\\.]/g, \"\" );\n\t\t *        return parseFloat( a );\n\t\t *      }\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Case-sensitive string ordering, with no pre-formatting method\n\t\t *    $.extend( $.fn.dataTable.ext.order, {\n\t\t *      \"string-case-asc\": function(x,y) {\n\t\t *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t *      },\n\t\t *      \"string-case-desc\": function(x,y) {\n\t\t *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t *      }\n\t\t *    } );\n\t\t */\n\t\torder: {}\n\t},\n\n\t/**\n\t * Unique DataTables instance counter\n\t *\n\t * @type int\n\t * @private\n\t */\n\t_unique: 0,\n\n\n\t//\n\t// Depreciated\n\t// The following properties are retained for backwards compatibility only.\n\t// The should not be used in new projects and will be removed in a future\n\t// version\n\t//\n\n\t/**\n\t * Version check function.\n\t *  @type function\n\t *  @depreciated Since 1.10\n\t */\n\tfnVersionCheck: DataTable.fnVersionCheck,\n\n\n\t/**\n\t * Index for what 'this' index API functions should use\n\t *  @type int\n\t *  @deprecated Since v1.10\n\t */\n\tiApiIndex: 0,\n\n\n\t/**\n\t * jQuery UI class container\n\t *  @type object\n\t *  @deprecated Since v1.10\n\t */\n\toJUIClasses: {},\n\n\n\t/**\n\t * Software version\n\t *  @type string\n\t *  @deprecated Since v1.10\n\t */\n\tsVersion: DataTable.version\n};\n\n\n//\n// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts\n//\n$.extend( _ext, {\n\tafnFiltering: _ext.search,\n\taTypes:       _ext.type.detect,\n\tofnSearch:    _ext.type.search,\n\toSort:        _ext.type.order,\n\tafnSortData:  _ext.order,\n\taoFeatures:   _ext.feature,\n\toApi:         _ext.internal,\n\toStdClasses:  _ext.classes,\n\toPagination:  _ext.pager\n} );\n\n\n$.extend( DataTable.ext.classes, {\n\t\"sTable\": \"dataTable\",\n\t\"sNoFooter\": \"no-footer\",\n\n\t/* Paging buttons */\n\t\"sPageButton\": \"paginate_button\",\n\t\"sPageButtonActive\": \"current\",\n\t\"sPageButtonDisabled\": \"disabled\",\n\n\t/* Striping classes */\n\t\"sStripeOdd\": \"odd\",\n\t\"sStripeEven\": \"even\",\n\n\t/* Empty row */\n\t\"sRowEmpty\": \"dataTables_empty\",\n\n\t/* Features */\n\t\"sWrapper\": \"dataTables_wrapper\",\n\t\"sFilter\": \"dataTables_filter\",\n\t\"sInfo\": \"dataTables_info\",\n\t\"sPaging\": \"dataTables_paginate paging_\", /* Note that the type is postfixed */\n\t\"sLength\": \"dataTables_length\",\n\t\"sProcessing\": \"dataTables_processing\",\n\n\t/* Sorting */\n\t\"sSortAsc\": \"sorting_asc\",\n\t\"sSortDesc\": \"sorting_desc\",\n\t\"sSortable\": \"sorting\", /* Sortable in both directions */\n\t\"sSortableAsc\": \"sorting_desc_disabled\",\n\t\"sSortableDesc\": \"sorting_asc_disabled\",\n\t\"sSortableNone\": \"sorting_disabled\",\n\t\"sSortColumn\": \"sorting_\", /* Note that an int is postfixed for the sorting order */\n\n\t/* Filtering */\n\t\"sFilterInput\": \"\",\n\n\t/* Page length */\n\t\"sLengthSelect\": \"\",\n\n\t/* Scrolling */\n\t\"sScrollWrapper\": \"dataTables_scroll\",\n\t\"sScrollHead\": \"dataTables_scrollHead\",\n\t\"sScrollHeadInner\": \"dataTables_scrollHeadInner\",\n\t\"sScrollBody\": \"dataTables_scrollBody\",\n\t\"sScrollFoot\": \"dataTables_scrollFoot\",\n\t\"sScrollFootInner\": \"dataTables_scrollFootInner\",\n\n\t/* Misc */\n\t\"sHeaderTH\": \"\",\n\t\"sFooterTH\": \"\",\n\n\t// Deprecated\n\t\"sSortJUIAsc\": \"\",\n\t\"sSortJUIDesc\": \"\",\n\t\"sSortJUI\": \"\",\n\t\"sSortJUIAscAllowed\": \"\",\n\t\"sSortJUIDescAllowed\": \"\",\n\t\"sSortJUIWrapper\": \"\",\n\t\"sSortIcon\": \"\",\n\t\"sJUIHeader\": \"\",\n\t\"sJUIFooter\": \"\"\n} );\n\n\nvar extPagination = DataTable.ext.pager;\n\nfunction _numbers ( page, pages ) {\n\tvar\n\t\tnumbers = [],\n\t\tbuttons = extPagination.numbers_length,\n\t\thalf = Math.floor( buttons / 2 ),\n\t\ti = 1;\n\n\tif ( pages <= buttons ) {\n\t\tnumbers = _range( 0, pages );\n\t}\n\telse if ( page <= half ) {\n\t\tnumbers = _range( 0, buttons-2 );\n\t\tnumbers.push( 'ellipsis' );\n\t\tnumbers.push( pages-1 );\n\t}\n\telse if ( page >= pages - 1 - half ) {\n\t\tnumbers = _range( pages-(buttons-2), pages );\n\t\tnumbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6\n\t\tnumbers.splice( 0, 0, 0 );\n\t}\n\telse {\n\t\tnumbers = _range( page-half+2, page+half-1 );\n\t\tnumbers.push( 'ellipsis' );\n\t\tnumbers.push( pages-1 );\n\t\tnumbers.splice( 0, 0, 'ellipsis' );\n\t\tnumbers.splice( 0, 0, 0 );\n\t}\n\n\tnumbers.DT_el = 'span';\n\treturn numbers;\n}\n\n\n$.extend( extPagination, {\n\tsimple: function ( page, pages ) {\n\t\treturn [ 'previous', 'next' ];\n\t},\n\n\tfull: function ( page, pages ) {\n\t\treturn [  'first', 'previous', 'next', 'last' ];\n\t},\n\n\tnumbers: function ( page, pages ) {\n\t\treturn [ _numbers(page, pages) ];\n\t},\n\n\tsimple_numbers: function ( page, pages ) {\n\t\treturn [ 'previous', _numbers(page, pages), 'next' ];\n\t},\n\n\tfull_numbers: function ( page, pages ) {\n\t\treturn [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];\n\t},\n\t\n\tfirst_last_numbers: function (page, pages) {\n \t\treturn ['first', _numbers(page, pages), 'last'];\n \t},\n\n\t// For testing and plug-ins to use\n\t_numbers: _numbers,\n\n\t// Number of number buttons (including ellipsis) to show. _Must be odd!_\n\tnumbers_length: 7\n} );\n\n\n$.extend( true, DataTable.ext.renderer, {\n\tpageButton: {\n\t\t_: function ( settings, host, idx, buttons, page, pages ) {\n\t\t\tvar classes = settings.oClasses;\n\t\t\tvar lang = settings.oLanguage.oPaginate;\n\t\t\tvar aria = settings.oLanguage.oAria.paginate || {};\n\t\t\tvar btnDisplay, btnClass;\n\n\t\t\tvar attach = function( container, buttons ) {\n\t\t\t\tvar i, ien, node, button;\n\t\t\t\tvar disabledClass = classes.sPageButtonDisabled;\n\t\t\t\tvar clickHandler = function ( e ) {\n\t\t\t\t\t_fnPageChange( settings, e.data.action, true );\n\t\t\t\t};\n\n\t\t\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\t\t\tbutton = buttons[i];\n\n\t\t\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\t\t\tvar inner = $( '<'+(button.DT_el || 'div')+'/>' )\n\t\t\t\t\t\t\t.appendTo( container );\n\t\t\t\t\t\tattach( inner, button );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar disabled = false;\n\n\t\t\t\t\t\tbtnDisplay = null;\n\t\t\t\t\t\tbtnClass = button;\n\n\t\t\t\t\t\tswitch ( button ) {\n\t\t\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\t\t\tcontainer.append('<span class=\"ellipsis\">&#x2026;</span>');\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'first':\n\t\t\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\n\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\n\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\n\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'last':\n\t\t\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\n\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbtnDisplay = settings.fnFormatNumber( button + 1 );\n\t\t\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t\t\tclasses.sPageButtonActive : '';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( btnDisplay !== null ) {\n\t\t\t\t\t\t\tvar tag = settings.oInit.pagingTag || 'a';\n\n\t\t\t\t\t\t\tif (disabled) {\n\t\t\t\t\t\t\t\tbtnClass += ' ' + disabledClass;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tnode = $('<'+tag+'>', {\n\t\t\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t\t'aria-current': btnClass === classes.sPageButtonActive ? 'page' : null,\n\t\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\t\t\t_fnBindAction(\n\t\t\t\t\t\t\t\tnode, {action: button}, clickHandler\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\n\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t// inside an iframe or frame. Try / catch the error. Not good for\n\t\t\t// accessibility, but neither are frames.\n\t\t\tvar activeEl;\n\n\t\t\ttry {\n\t\t\t\t// Because this approach is destroying and recreating the paging\n\t\t\t\t// elements, focus is lost on the select button which is bad for\n\t\t\t\t// accessibility. So we want to restore focus once the draw has\n\t\t\t\t// completed\n\t\t\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t\t\t}\n\t\t\tcatch (e) {}\n\n\t\t\tattach( $(host).empty(), buttons );\n\n\t\t\tif ( activeEl !== undefined ) {\n\t\t\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t\t\t}\n\t\t}\n\t}\n} );\n\n\n\n// Built in type detection. See model.ext.aTypes for information about\n// what is required from this methods.\n$.extend( DataTable.ext.type.detect, [\n\t// Plain numbers - first since V8 detects some plain numbers as dates\n\t// e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).\n\tfunction ( d, settings )\n\t{\n\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\treturn _isNumber( d, decimal ) ? 'num'+decimal : null;\n\t},\n\n\t// Dates (only those recognised by the browser's Date.parse)\n\tfunction ( d, settings )\n\t{\n\t\t// V8 tries _very_ hard to make a string passed into `Date.parse()`\n\t\t// valid, so we need to use a regex to restrict date formats. Use a\n\t\t// plug-in for anything other than ISO8601 style strings\n\t\tif ( d && !(d instanceof Date) && ! _re_date.test(d) ) {\n\t\t\treturn null;\n\t\t}\n\t\tvar parsed = Date.parse(d);\n\t\treturn (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;\n\t},\n\n\t// Formatted numbers\n\tfunction ( d, settings )\n\t{\n\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\treturn _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;\n\t},\n\n\t// HTML numeric\n\tfunction ( d, settings )\n\t{\n\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\treturn _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;\n\t},\n\n\t// HTML numeric, formatted\n\tfunction ( d, settings )\n\t{\n\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\treturn _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;\n\t},\n\n\t// HTML (this is strict checking - there must be html)\n\tfunction ( d, settings )\n\t{\n\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?\n\t\t\t'html' : null;\n\t}\n] );\n\n\n\n// Filter formatting functions. See model.ext.ofnSearch for information about\n// what is required from these methods.\n// \n// Note that additional search methods are added for the html numbers and\n// html formatted numbers by `_addNumericSort()` when we know what the decimal\n// place is\n\n\n$.extend( DataTable.ext.type.search, {\n\thtml: function ( data ) {\n\t\treturn _empty(data) ?\n\t\t\tdata :\n\t\t\ttypeof data === 'string' ?\n\t\t\t\tdata\n\t\t\t\t\t.replace( _re_new_lines, \" \" )\n\t\t\t\t\t.replace( _re_html, \"\" ) :\n\t\t\t\t'';\n\t},\n\n\tstring: function ( data ) {\n\t\treturn _empty(data) ?\n\t\t\tdata :\n\t\t\ttypeof data === 'string' ?\n\t\t\t\tdata.replace( _re_new_lines, \" \" ) :\n\t\t\t\tdata;\n\t}\n} );\n\n\n\nvar __numericReplace = function ( d, decimalPlace, re1, re2 ) {\n\tif ( d !== 0 && (!d || d === '-') ) {\n\t\treturn -Infinity;\n\t}\n\t\n\tvar type = typeof d;\n\n\tif (type === 'number' || type === 'bigint') {\n\t\treturn d;\n\t}\n\n\t// If a decimal place other than `.` is used, it needs to be given to the\n\t// function so we can detect it and replace with a `.` which is the only\n\t// decimal place Javascript recognises - it is not locale aware.\n\tif ( decimalPlace ) {\n\t\td = _numToDecimal( d, decimalPlace );\n\t}\n\n\tif ( d.replace ) {\n\t\tif ( re1 ) {\n\t\t\td = d.replace( re1, '' );\n\t\t}\n\n\t\tif ( re2 ) {\n\t\t\td = d.replace( re2, '' );\n\t\t}\n\t}\n\n\treturn d * 1;\n};\n\n\n// Add the numeric 'deformatting' functions for sorting and search. This is done\n// in a function to provide an easy ability for the language options to add\n// additional methods if a non-period decimal place is used.\nfunction _addNumericSort ( decimalPlace ) {\n\t$.each(\n\t\t{\n\t\t\t// Plain numbers\n\t\t\t\"num\": function ( d ) {\n\t\t\t\treturn __numericReplace( d, decimalPlace );\n\t\t\t},\n\n\t\t\t// Formatted numbers\n\t\t\t\"num-fmt\": function ( d ) {\n\t\t\t\treturn __numericReplace( d, decimalPlace, _re_formatted_numeric );\n\t\t\t},\n\n\t\t\t// HTML numeric\n\t\t\t\"html-num\": function ( d ) {\n\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html );\n\t\t\t},\n\n\t\t\t// HTML numeric, formatted\n\t\t\t\"html-num-fmt\": function ( d ) {\n\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric );\n\t\t\t}\n\t\t},\n\t\tfunction ( key, fn ) {\n\t\t\t// Add the ordering method\n\t\t\t_ext.type.order[ key+decimalPlace+'-pre' ] = fn;\n\n\t\t\t// For HTML types add a search formatter that will strip the HTML\n\t\t\tif ( key.match(/^html\\-/) ) {\n\t\t\t\t_ext.type.search[ key+decimalPlace ] = _ext.type.search.html;\n\t\t\t}\n\t\t}\n\t);\n}\n\n\n// Default sort methods\n$.extend( _ext.type.order, {\n\t// Dates\n\t\"date-pre\": function ( d ) {\n\t\tvar ts = Date.parse( d );\n\t\treturn isNaN(ts) ? -Infinity : ts;\n\t},\n\n\t// html\n\t\"html-pre\": function ( a ) {\n\t\treturn _empty(a) ?\n\t\t\t'' :\n\t\t\ta.replace ?\n\t\t\t\ta.replace( /<.*?>/g, \"\" ).toLowerCase() :\n\t\t\t\ta+'';\n\t},\n\n\t// string\n\t\"string-pre\": function ( a ) {\n\t\t// This is a little complex, but faster than always calling toString,\n\t\t// https://jsperf.com/tostring-v-check\n\t\treturn _empty(a) ?\n\t\t\t'' :\n\t\t\ttypeof a === 'string' ?\n\t\t\t\ta.toLowerCase() :\n\t\t\t\t! a.toString ?\n\t\t\t\t\t'' :\n\t\t\t\t\ta.toString();\n\t},\n\n\t// string-asc and -desc are retained only for compatibility with the old\n\t// sort methods\n\t\"string-asc\": function ( x, y ) {\n\t\treturn ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t},\n\n\t\"string-desc\": function ( x, y ) {\n\t\treturn ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t}\n} );\n\n\n// Numeric sorting types - order doesn't matter here\n_addNumericSort( '' );\n\n\n$.extend( true, DataTable.ext.renderer, {\n\theader: {\n\t\t_: function ( settings, cell, column, classes ) {\n\t\t\t// No additional mark-up required\n\t\t\t// Attach a sort listener to update on sort - note that using the\n\t\t\t// `DT` namespace will allow the event to be removed automatically\n\t\t\t// on destroy, while the `dt` namespaced event is the one we are\n\t\t\t// listening for\n\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\tif ( settings !== ctx ) { // need to check this this is the host\n\t\t\t\t\treturn;               // table, not a nested one\n\t\t\t\t}\n\n\t\t\t\tvar colIdx = column.idx;\n\n\t\t\t\tcell\n\t\t\t\t\t.removeClass(\n\t\t\t\t\t\tclasses.sSortAsc +' '+\n\t\t\t\t\t\tclasses.sSortDesc\n\t\t\t\t\t)\n\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t);\n\t\t\t} );\n\t\t},\n\n\t\tjqueryui: function ( settings, cell, column, classes ) {\n\t\t\t$('<div/>')\n\t\t\t\t.addClass( classes.sSortJUIWrapper )\n\t\t\t\t.append( cell.contents() )\n\t\t\t\t.append( $('<span/>')\n\t\t\t\t\t.addClass( classes.sSortIcon+' '+column.sSortingClassJUI )\n\t\t\t\t)\n\t\t\t\t.appendTo( cell );\n\n\t\t\t// Attach a sort listener to update on sort\n\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar colIdx = column.idx;\n\n\t\t\t\tcell\n\t\t\t\t\t.removeClass( classes.sSortAsc +\" \"+classes.sSortDesc )\n\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t);\n\n\t\t\t\tcell\n\t\t\t\t\t.find( 'span.'+classes.sSortIcon )\n\t\t\t\t\t.removeClass(\n\t\t\t\t\t\tclasses.sSortJUIAsc +\" \"+\n\t\t\t\t\t\tclasses.sSortJUIDesc +\" \"+\n\t\t\t\t\t\tclasses.sSortJUI +\" \"+\n\t\t\t\t\t\tclasses.sSortJUIAscAllowed +\" \"+\n\t\t\t\t\t\tclasses.sSortJUIDescAllowed\n\t\t\t\t\t)\n\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\tclasses.sSortJUIAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\tclasses.sSortJUIDesc :\n\t\t\t\t\t\t\tcolumn.sSortingClassJUI\n\t\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n/*\n * Public helper functions. These aren't used internally by DataTables, or\n * called by any of the options passed into DataTables, but they can be used\n * externally by developers working with DataTables. They are helper functions\n * to make working with DataTables a little bit easier.\n */\n\nvar __htmlEscapeEntities = function ( d ) {\n\tif (Array.isArray(d)) {\n\t\td = d.join(',');\n\t}\n\n\treturn typeof d === 'string' ?\n\t\td\n\t\t\t.replace(/&/g, '&amp;')\n\t\t\t.replace(/</g, '&lt;')\n\t\t\t.replace(/>/g, '&gt;')\n\t\t\t.replace(/\"/g, '&quot;') :\n\t\td;\n};\n\n// Common logic for moment, luxon or a date action\nfunction __mld( dt, momentFn, luxonFn, dateFn, arg1 ) {\n\tif (window.moment) {\n\t\treturn dt[momentFn]( arg1 );\n\t}\n\telse if (window.luxon) {\n\t\treturn dt[luxonFn]( arg1 );\n\t}\n\t\n\treturn dateFn ? dt[dateFn]( arg1 ) : dt;\n}\n\n\nvar __mlWarning = false;\nfunction __mldObj (d, format, locale) {\n\tvar dt;\n\n\tif (window.moment) {\n\t\tdt = window.moment.utc( d, format, locale, true );\n\n\t\tif (! dt.isValid()) {\n\t\t\treturn null;\n\t\t}\n\t}\n\telse if (window.luxon) {\n\t\tdt = format && typeof d === 'string'\n\t\t\t? window.luxon.DateTime.fromFormat( d, format )\n\t\t\t: window.luxon.DateTime.fromISO( d );\n\n\t\tif (! dt.isValid) {\n\t\t\treturn null;\n\t\t}\n\n\t\tdt.setLocale(locale);\n\t}\n\telse if (! format) {\n\t\t// No format given, must be ISO\n\t\tdt = new Date(d);\n\t}\n\telse {\n\t\tif (! __mlWarning) {\n\t\t\talert('DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17');\n\t\t}\n\n\t\t__mlWarning = true;\n\t}\n\n\treturn dt;\n}\n\n// Wrapper for date, datetime and time which all operate the same way with the exception of\n// the output string for auto locale support\nfunction __mlHelper (localeString) {\n\treturn function ( from, to, locale, def ) {\n\t\t// Luxon and Moment support\n\t\t// Argument shifting\n\t\tif ( arguments.length === 0 ) {\n\t\t\tlocale = 'en';\n\t\t\tto = null; // means toLocaleString\n\t\t\tfrom = null; // means iso8601\n\t\t}\n\t\telse if ( arguments.length === 1 ) {\n\t\t\tlocale = 'en';\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t}\n\t\telse if ( arguments.length === 2 ) {\n\t\t\tlocale = to;\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t}\n\n\t\tvar typeName = 'datetime-' + to;\n\n\t\t// Add type detection and sorting specific to this date format - we need to be able to identify\n\t\t// date type columns as such, rather than as numbers in extensions. Hence the need for this.\n\t\tif (! DataTable.ext.type.order[typeName]) {\n\t\t\t// The renderer will give the value to type detect as the type!\n\t\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\t\treturn d === typeName ? typeName : false;\n\t\t\t});\n\n\t\t\t// The renderer gives us Moment, Luxon or Date obects for the sorting, all of which have a\n\t\t\t// `valueOf` which gives milliseconds epoch\n\t\t\tDataTable.ext.type.order[typeName + '-asc'] = function (a, b) {\n\t\t\t\tvar x = a.valueOf();\n\t\t\t\tvar y = b.valueOf();\n\n\t\t\t\treturn x === y\n\t\t\t\t\t? 0\n\t\t\t\t\t: x < y\n\t\t\t\t\t\t? -1\n\t\t\t\t\t\t: 1;\n\t\t\t}\n\n\t\t\tDataTable.ext.type.order[typeName + '-desc'] = function (a, b) {\n\t\t\t\tvar x = a.valueOf();\n\t\t\t\tvar y = b.valueOf();\n\n\t\t\t\treturn x === y\n\t\t\t\t\t? 0\n\t\t\t\t\t: x > y\n\t\t\t\t\t\t? -1\n\t\t\t\t\t\t: 1;\n\t\t\t}\n\t\t}\n\t\n\t\treturn function ( d, type ) {\n\t\t\t// Allow for a default value\n\t\t\tif (d === null || d === undefined) {\n\t\t\t\tif (def === '--now') {\n\t\t\t\t\t// We treat everything as UTC further down, so no changes are\n\t\t\t\t\t// made, as such need to get the local date / time as if it were\n\t\t\t\t\t// UTC\n\t\t\t\t\tvar local = new Date();\n\t\t\t\t\td = new Date( Date.UTC(\n\t\t\t\t\t\tlocal.getFullYear(), local.getMonth(), local.getDate(),\n\t\t\t\t\t\tlocal.getHours(), local.getMinutes(), local.getSeconds()\n\t\t\t\t\t) );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\td = '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (type === 'type') {\n\t\t\t\t// Typing uses the type name for fast matching\n\t\t\t\treturn typeName;\n\t\t\t}\n\n\t\t\tif (d === '') {\n\t\t\t\treturn type !== 'sort'\n\t\t\t\t\t? ''\n\t\t\t\t\t: __mldObj('0000-01-01 00:00:00', null, locale);\n\t\t\t}\n\n\t\t\t// Shortcut. If `from` and `to` are the same, we are using the renderer to\n\t\t\t// format for ordering, not display - its already in the display format.\n\t\t\tif ( to !== null && from === to && type !== 'sort' && type !== 'type' && ! (d instanceof Date) ) {\n\t\t\t\treturn d;\n\t\t\t}\n\n\t\t\tvar dt = __mldObj(d, from, locale);\n\n\t\t\tif (dt === null) {\n\t\t\t\treturn d;\n\t\t\t}\n\n\t\t\tif (type === 'sort') {\n\t\t\t\treturn dt;\n\t\t\t}\n\t\t\t\n\t\t\tvar formatted = to === null\n\t\t\t\t? __mld(dt, 'toDate', 'toJSDate', '')[localeString]()\n\t\t\t\t: __mld(dt, 'format', 'toFormat', 'toISOString', to);\n\n\t\t\t// XSS protection\n\t\t\treturn type === 'display' ?\n\t\t\t\t__htmlEscapeEntities( formatted ) :\n\t\t\t\tformatted;\n\t\t};\n\t}\n}\n\n// Based on locale, determine standard number formatting\n// Fallback for legacy browsers is US English\nvar __thousands = ',';\nvar __decimal = '.';\n\nif (window.Intl !== undefined) {\n\ttry {\n\t\tvar num = new Intl.NumberFormat().formatToParts(100000.1);\n\t\n\t\tfor (var i=0 ; i<num.length ; i++) {\n\t\t\tif (num[i].type === 'group') {\n\t\t\t\t__thousands = num[i].value;\n\t\t\t}\n\t\t\telse if (num[i].type === 'decimal') {\n\t\t\t\t__decimal = num[i].value;\n\t\t\t}\n\t\t}\n\t}\n\tcatch (e) {\n\t\t// noop\n\t}\n}\n\n// Formatted date time detection - use by declaring the formats you are going to use\nDataTable.datetime = function ( format, locale ) {\n\tvar typeName = 'datetime-detect-' + format;\n\n\tif (! locale) {\n\t\tlocale = 'en';\n\t}\n\n\tif (! DataTable.ext.type.order[typeName]) {\n\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\tvar dt = __mldObj(d, format, locale);\n\t\t\treturn d === '' || dt ? typeName : false;\n\t\t});\n\n\t\tDataTable.ext.type.order[typeName + '-pre'] = function (d) {\n\t\t\treturn __mldObj(d, format, locale) || 0;\n\t\t}\n\t}\n}\n\n/**\n * Helpers for `columns.render`.\n *\n * The options defined here can be used with the `columns.render` initialisation\n * option to provide a display renderer. The following functions are defined:\n *\n * * `number` - Will format numeric data (defined by `columns.data`) for\n *   display, retaining the original unformatted data for sorting and filtering.\n *   It takes 5 parameters:\n *   * `string` - Thousands grouping separator\n *   * `string` - Decimal point indicator\n *   * `integer` - Number of decimal points to show\n *   * `string` (optional) - Prefix.\n *   * `string` (optional) - Postfix (/suffix).\n * * `text` - Escape HTML to help prevent XSS attacks. It has no optional\n *   parameters.\n *\n * @example\n *   // Column definition using the number renderer\n *   {\n *     data: \"salary\",\n *     render: $.fn.dataTable.render.number( '\\'', '.', 0, '$' )\n *   }\n *\n * @namespace\n */\nDataTable.render = {\n\tdate: __mlHelper('toLocaleDateString'),\n\tdatetime: __mlHelper('toLocaleString'),\n\ttime: __mlHelper('toLocaleTimeString'),\n\tnumber: function ( thousands, decimal, precision, prefix, postfix ) {\n\t\t// Auto locale detection\n\t\tif (thousands === null || thousands === undefined) {\n\t\t\tthousands = __thousands;\n\t\t}\n\n\t\tif (decimal === null || decimal === undefined) {\n\t\t\tdecimal = __decimal;\n\t\t}\n\n\t\treturn {\n\t\t\tdisplay: function ( d ) {\n\t\t\t\tif ( typeof d !== 'number' && typeof d !== 'string' ) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\n\t\t\t\tif (d === '' || d === null) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\n\t\t\t\tvar negative = d < 0 ? '-' : '';\n\t\t\t\tvar flo = parseFloat( d );\n\n\t\t\t\t// If NaN then there isn't much formatting that we can do - just\n\t\t\t\t// return immediately, escaping any HTML (this was supposed to\n\t\t\t\t// be a number after all)\n\t\t\t\tif ( isNaN( flo ) ) {\n\t\t\t\t\treturn __htmlEscapeEntities( d );\n\t\t\t\t}\n\n\t\t\t\tflo = flo.toFixed( precision );\n\t\t\t\td = Math.abs( flo );\n\n\t\t\t\tvar intPart = parseInt( d, 10 );\n\t\t\t\tvar floatPart = precision ?\n\t\t\t\t\tdecimal+(d - intPart).toFixed( precision ).substring( 2 ):\n\t\t\t\t\t'';\n\n\t\t\t\t// If zero, then can't have a negative prefix\n\t\t\t\tif (intPart === 0 && parseFloat(floatPart) === 0) {\n\t\t\t\t\tnegative = '';\n\t\t\t\t}\n\n\t\t\t\treturn negative + (prefix||'') +\n\t\t\t\t\tintPart.toString().replace(\n\t\t\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g, thousands\n\t\t\t\t\t) +\n\t\t\t\t\tfloatPart +\n\t\t\t\t\t(postfix||'');\n\t\t\t}\n\t\t};\n\t},\n\n\ttext: function () {\n\t\treturn {\n\t\t\tdisplay: __htmlEscapeEntities,\n\t\t\tfilter: __htmlEscapeEntities\n\t\t};\n\t}\n};\n\n\n/*\n * This is really a good bit rubbish this method of exposing the internal methods\n * publicly... - To be fixed in 2.0 using methods on the prototype\n */\n\n\n/**\n * Create a wrapper function for exporting an internal functions to an external API.\n *  @param {string} fn API function name\n *  @returns {function} wrapped function\n *  @memberof DataTable#internal\n */\nfunction _fnExternApiFunc (fn)\n{\n\treturn function() {\n\t\tvar args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(\n\t\t\tArray.prototype.slice.call(arguments)\n\t\t);\n\t\treturn DataTable.ext.internal[fn].apply( this, args );\n\t};\n}\n\n\n/**\n * Reference to internal functions for use by plug-in developers. Note that\n * these methods are references to internal functions and are considered to be\n * private. If you use these methods, be aware that they are liable to change\n * between versions.\n *  @namespace\n */\n$.extend( DataTable.ext.internal, {\n\t_fnExternApiFunc: _fnExternApiFunc,\n\t_fnBuildAjax: _fnBuildAjax,\n\t_fnAjaxUpdate: _fnAjaxUpdate,\n\t_fnAjaxParameters: _fnAjaxParameters,\n\t_fnAjaxUpdateDraw: _fnAjaxUpdateDraw,\n\t_fnAjaxDataSrc: _fnAjaxDataSrc,\n\t_fnAddColumn: _fnAddColumn,\n\t_fnColumnOptions: _fnColumnOptions,\n\t_fnAdjustColumnSizing: _fnAdjustColumnSizing,\n\t_fnVisibleToColumnIndex: _fnVisibleToColumnIndex,\n\t_fnColumnIndexToVisible: _fnColumnIndexToVisible,\n\t_fnVisbleColumns: _fnVisbleColumns,\n\t_fnGetColumns: _fnGetColumns,\n\t_fnColumnTypes: _fnColumnTypes,\n\t_fnApplyColumnDefs: _fnApplyColumnDefs,\n\t_fnHungarianMap: _fnHungarianMap,\n\t_fnCamelToHungarian: _fnCamelToHungarian,\n\t_fnLanguageCompat: _fnLanguageCompat,\n\t_fnBrowserDetect: _fnBrowserDetect,\n\t_fnAddData: _fnAddData,\n\t_fnAddTr: _fnAddTr,\n\t_fnNodeToDataIndex: _fnNodeToDataIndex,\n\t_fnNodeToColumnIndex: _fnNodeToColumnIndex,\n\t_fnGetCellData: _fnGetCellData,\n\t_fnSetCellData: _fnSetCellData,\n\t_fnSplitObjNotation: _fnSplitObjNotation,\n\t_fnGetObjectDataFn: _fnGetObjectDataFn,\n\t_fnSetObjectDataFn: _fnSetObjectDataFn,\n\t_fnGetDataMaster: _fnGetDataMaster,\n\t_fnClearTable: _fnClearTable,\n\t_fnDeleteIndex: _fnDeleteIndex,\n\t_fnInvalidate: _fnInvalidate,\n\t_fnGetRowElements: _fnGetRowElements,\n\t_fnCreateTr: _fnCreateTr,\n\t_fnBuildHead: _fnBuildHead,\n\t_fnDrawHead: _fnDrawHead,\n\t_fnDraw: _fnDraw,\n\t_fnReDraw: _fnReDraw,\n\t_fnAddOptionsHtml: _fnAddOptionsHtml,\n\t_fnDetectHeader: _fnDetectHeader,\n\t_fnGetUniqueThs: _fnGetUniqueThs,\n\t_fnFeatureHtmlFilter: _fnFeatureHtmlFilter,\n\t_fnFilterComplete: _fnFilterComplete,\n\t_fnFilterCustom: _fnFilterCustom,\n\t_fnFilterColumn: _fnFilterColumn,\n\t_fnFilter: _fnFilter,\n\t_fnFilterCreateSearch: _fnFilterCreateSearch,\n\t_fnEscapeRegex: _fnEscapeRegex,\n\t_fnFilterData: _fnFilterData,\n\t_fnFeatureHtmlInfo: _fnFeatureHtmlInfo,\n\t_fnUpdateInfo: _fnUpdateInfo,\n\t_fnInfoMacros: _fnInfoMacros,\n\t_fnInitialise: _fnInitialise,\n\t_fnInitComplete: _fnInitComplete,\n\t_fnLengthChange: _fnLengthChange,\n\t_fnFeatureHtmlLength: _fnFeatureHtmlLength,\n\t_fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,\n\t_fnPageChange: _fnPageChange,\n\t_fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,\n\t_fnProcessingDisplay: _fnProcessingDisplay,\n\t_fnFeatureHtmlTable: _fnFeatureHtmlTable,\n\t_fnScrollDraw: _fnScrollDraw,\n\t_fnApplyToChildren: _fnApplyToChildren,\n\t_fnCalculateColumnWidths: _fnCalculateColumnWidths,\n\t_fnThrottle: _fnThrottle,\n\t_fnConvertToWidth: _fnConvertToWidth,\n\t_fnGetWidestNode: _fnGetWidestNode,\n\t_fnGetMaxLenString: _fnGetMaxLenString,\n\t_fnStringToCss: _fnStringToCss,\n\t_fnSortFlatten: _fnSortFlatten,\n\t_fnSort: _fnSort,\n\t_fnSortAria: _fnSortAria,\n\t_fnSortListener: _fnSortListener,\n\t_fnSortAttachListener: _fnSortAttachListener,\n\t_fnSortingClasses: _fnSortingClasses,\n\t_fnSortData: _fnSortData,\n\t_fnSaveState: _fnSaveState,\n\t_fnLoadState: _fnLoadState,\n\t_fnImplementState: _fnImplementState,\n\t_fnSettingsFromNode: _fnSettingsFromNode,\n\t_fnLog: _fnLog,\n\t_fnMap: _fnMap,\n\t_fnBindAction: _fnBindAction,\n\t_fnCallbackReg: _fnCallbackReg,\n\t_fnCallbackFire: _fnCallbackFire,\n\t_fnLengthOverflow: _fnLengthOverflow,\n\t_fnRenderer: _fnRenderer,\n\t_fnDataSource: _fnDataSource,\n\t_fnRowAttributes: _fnRowAttributes,\n\t_fnExtend: _fnExtend,\n\t_fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant\n\t                                // in 1.10, so this dead-end function is\n\t                                // added to prevent errors\n} );\n\n\n// jQuery access\n$.fn.dataTable = DataTable;\n\n// Provide access to the host jQuery object (circular reference)\nDataTable.$ = $;\n\n// Legacy aliases\n$.fn.dataTableSettings = DataTable.settings;\n$.fn.dataTableExt = DataTable.ext;\n\n// With a capital `D` we return a DataTables API instance rather than a\n// jQuery object\n$.fn.DataTable = function ( opts ) {\n\treturn $(this).dataTable( opts ).api();\n};\n\n// All properties that are available to $.fn.dataTable should also be\n// available on $.fn.DataTable\n$.each( DataTable, function ( prop, val ) {\n\t$.fn.DataTable[ prop ] = val;\n} );\n\nexport default DataTable;\n", "import DataTable from \"datatables.net-bs4\";\nimport \"datatables.net-bs4/css/dataTables.bootstrap4.css\";\n\nnew DataTable(\"#example\");\n\n$(document).ready(function () {\n  console.log(\"dt doc ready\");\n  $(\".datatable\").DataTable({\n    info: false,\n    bPaginate: false,\n  });\n\n  $(\".datatable-clean\").DataTable({\n    info: false,\n    bPaginate: false,\n    searching: false,\n  });\n\n  // when clicking on a tr toggle the checkbox\n  $(\".selectable tbody\").on(\"click\", \"tr\", function () {\n    $(this).toggleClass(\"table-active\");\n\n    if ($(this).hasClass(\"table-active\")) {\n      var box = $(this).find(\"i.fa-square\");\n      box.addClass(\"fa-check-square\");\n      box.removeClass(\"fa-square\");\n    } else {\n      var box = $(this).find(\"i.far\");\n      box.addClass(\"fa-square\");\n      box.removeClass(\"fa-check-square\");\n    }\n  });\n\n  $(\".htmltip\").tooltip({\n    html: true,\n  });\n\n  $('[data-toggle=\"popover\"]').popover();\n});\n", "import tinymce from 'tinymce/tinymce';\nimport 'tinymce/themes/modern/theme';\nimport 'tinymce/plugins/lists';\nimport 'tinymce-i18n/langs/nl';\nimport 'tinymce/skins/lightgray/content.min.css';\nimport 'tinymce/skins/lightgray/skin.min.css';\n\nfunction tinyMce() {\n    tinymce.init({\n        selector: 'textarea.tinymce',\n        plugins: ['lists'],\n        branding: false,\n        language: \"nl\",\n        skin: false,\n    });\n}\n\nfunction tinyMceReport() {\n    tinymce.init({\n        selector: 'textarea.report_content',\n        plugins: ['lists'],\n        branding: false,\n        language: \"nl\",\n        skin: false,\n        height: 200,\n        init_instance_callback: function (editor) {\n          editor.on('Change', function (e) {\n            // TODO: rework to event signal\n            report.changesNotSavedYet();\n          });\n        }\n    });\n}\n\ntinyMce();\ntinyMceReport();\n", "(function () {\nvar modern = (function (domGlobals) {\n    'use strict';\n\n    var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    var isBrandingEnabled = function (editor) {\n      return editor.getParam('branding', true, 'boolean');\n    };\n    var hasMenubar = function (editor) {\n      return getMenubar(editor) !== false;\n    };\n    var getMenubar = function (editor) {\n      return editor.getParam('menubar');\n    };\n    var hasStatusbar = function (editor) {\n      return editor.getParam('statusbar', true, 'boolean');\n    };\n    var getToolbarSize = function (editor) {\n      return editor.getParam('toolbar_items_size');\n    };\n    var isReadOnly = function (editor) {\n      return editor.getParam('readonly', false, 'boolean');\n    };\n    var getFixedToolbarContainer = function (editor) {\n      return editor.getParam('fixed_toolbar_container');\n    };\n    var getInlineToolbarPositionHandler = function (editor) {\n      return editor.getParam('inline_toolbar_position_handler');\n    };\n    var getMenu = function (editor) {\n      return editor.getParam('menu');\n    };\n    var getRemovedMenuItems = function (editor) {\n      return editor.getParam('removed_menuitems', '');\n    };\n    var getMinWidth = function (editor) {\n      return editor.getParam('min_width', 100, 'number');\n    };\n    var getMinHeight = function (editor) {\n      return editor.getParam('min_height', 100, 'number');\n    };\n    var getMaxWidth = function (editor) {\n      return editor.getParam('max_width', 65535, 'number');\n    };\n    var getMaxHeight = function (editor) {\n      return editor.getParam('max_height', 65535, 'number');\n    };\n    var isSkinDisabled = function (editor) {\n      return editor.settings.skin === false;\n    };\n    var isInline = function (editor) {\n      return editor.getParam('inline', false, 'boolean');\n    };\n    var getResize = function (editor) {\n      var resize = editor.getParam('resize', 'vertical');\n      if (resize === false) {\n        return 'none';\n      } else if (resize === 'both') {\n        return 'both';\n      } else {\n        return 'vertical';\n      }\n    };\n    var getSkinUrl = function (editor) {\n      var settings = editor.settings;\n      var skin = settings.skin;\n      var skinUrl = settings.skin_url;\n      if (skin !== false) {\n        var skinName = skin ? skin : 'lightgray';\n        if (skinUrl) {\n          skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);\n        } else {\n          skinUrl = global$1.baseURL + '/skins/' + skinName;\n        }\n      }\n      return skinUrl;\n    };\n    var getIndexedToolbars = function (settings, defaultToolbar) {\n      var toolbars = [];\n      for (var i = 1; i < 10; i++) {\n        var toolbar = settings['toolbar' + i];\n        if (!toolbar) {\n          break;\n        }\n        toolbars.push(toolbar);\n      }\n      var mainToolbar = settings.toolbar ? [settings.toolbar] : [defaultToolbar];\n      return toolbars.length > 0 ? toolbars : mainToolbar;\n    };\n    var getToolbars = function (editor) {\n      var toolbar = editor.getParam('toolbar');\n      var defaultToolbar = 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image';\n      if (toolbar === false) {\n        return [];\n      } else if (global$2.isArray(toolbar)) {\n        return global$2.grep(toolbar, function (toolbar) {\n          return toolbar.length > 0;\n        });\n      } else {\n        return getIndexedToolbars(editor.settings, defaultToolbar);\n      }\n    };\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n    var global$4 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\n\n    var global$5 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n    var fireSkinLoaded = function (editor) {\n      return editor.fire('SkinLoaded');\n    };\n    var fireResizeEditor = function (editor) {\n      return editor.fire('ResizeEditor');\n    };\n    var fireBeforeRenderUI = function (editor) {\n      return editor.fire('BeforeRenderUI');\n    };\n    var Events = {\n      fireSkinLoaded: fireSkinLoaded,\n      fireResizeEditor: fireResizeEditor,\n      fireBeforeRenderUI: fireBeforeRenderUI\n    };\n\n    var focus = function (panel, type) {\n      return function () {\n        var item = panel.find(type)[0];\n        if (item) {\n          item.focus(true);\n        }\n      };\n    };\n    var addKeys = function (editor, panel) {\n      editor.shortcuts.add('Alt+F9', '', focus(panel, 'menubar'));\n      editor.shortcuts.add('Alt+F10,F10', '', focus(panel, 'toolbar'));\n      editor.shortcuts.add('Alt+F11', '', focus(panel, 'elementpath'));\n      panel.on('cancel', function () {\n        editor.focus();\n      });\n    };\n    var A11y = { addKeys: addKeys };\n\n    var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect');\n\n    var global$7 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n    var noop = function () {\n    };\n    var constant = function (value) {\n      return function () {\n        return value;\n      };\n    };\n    var never = constant(false);\n    var always = constant(true);\n\n    var none = function () {\n      return NONE;\n    };\n    var NONE = function () {\n      var eq = function (o) {\n        return o.isNone();\n      };\n      var call = function (thunk) {\n        return thunk();\n      };\n      var id = function (n) {\n        return n;\n      };\n      var me = {\n        fold: function (n, s) {\n          return n();\n        },\n        is: never,\n        isSome: never,\n        isNone: always,\n        getOr: id,\n        getOrThunk: call,\n        getOrDie: function (msg) {\n          throw new Error(msg || 'error: getOrDie called on none.');\n        },\n        getOrNull: constant(null),\n        getOrUndefined: constant(undefined),\n        or: id,\n        orThunk: call,\n        map: none,\n        each: noop,\n        bind: none,\n        exists: never,\n        forall: always,\n        filter: none,\n        equals: eq,\n        equals_: eq,\n        toArray: function () {\n          return [];\n        },\n        toString: constant('none()')\n      };\n      if (Object.freeze) {\n        Object.freeze(me);\n      }\n      return me;\n    }();\n    var some = function (a) {\n      var constant_a = constant(a);\n      var self = function () {\n        return me;\n      };\n      var bind = function (f) {\n        return f(a);\n      };\n      var me = {\n        fold: function (n, s) {\n          return s(a);\n        },\n        is: function (v) {\n          return a === v;\n        },\n        isSome: always,\n        isNone: never,\n        getOr: constant_a,\n        getOrThunk: constant_a,\n        getOrDie: constant_a,\n        getOrNull: constant_a,\n        getOrUndefined: constant_a,\n        or: self,\n        orThunk: self,\n        map: function (f) {\n          return some(f(a));\n        },\n        each: function (f) {\n          f(a);\n        },\n        bind: bind,\n        exists: bind,\n        forall: bind,\n        filter: function (f) {\n          return f(a) ? me : NONE;\n        },\n        toArray: function () {\n          return [a];\n        },\n        toString: function () {\n          return 'some(' + a + ')';\n        },\n        equals: function (o) {\n          return o.is(a);\n        },\n        equals_: function (o, elementEq) {\n          return o.fold(never, function (b) {\n            return elementEq(a, b);\n          });\n        }\n      };\n      return me;\n    };\n    var from = function (value) {\n      return value === null || value === undefined ? NONE : some(value);\n    };\n    var Option = {\n      some: some,\n      none: none,\n      from: from\n    };\n\n    var getUiContainerDelta = function (ctrl) {\n      var uiContainer = getUiContainer(ctrl);\n      if (uiContainer && global$3.DOM.getStyle(uiContainer, 'position', true) !== 'static') {\n        var containerPos = global$3.DOM.getPos(uiContainer);\n        var dx = uiContainer.scrollLeft - containerPos.x;\n        var dy = uiContainer.scrollTop - containerPos.y;\n        return Option.some({\n          x: dx,\n          y: dy\n        });\n      } else {\n        return Option.none();\n      }\n    };\n    var setUiContainer = function (editor, ctrl) {\n      var uiContainer = global$3.DOM.select(editor.settings.ui_container)[0];\n      ctrl.getRoot().uiContainer = uiContainer;\n    };\n    var getUiContainer = function (ctrl) {\n      return ctrl ? ctrl.getRoot().uiContainer : null;\n    };\n    var inheritUiContainer = function (fromCtrl, toCtrl) {\n      return toCtrl.uiContainer = getUiContainer(fromCtrl);\n    };\n    var UiContainer = {\n      getUiContainerDelta: getUiContainerDelta,\n      setUiContainer: setUiContainer,\n      getUiContainer: getUiContainer,\n      inheritUiContainer: inheritUiContainer\n    };\n\n    var createToolbar = function (editor, items, size) {\n      var toolbarItems = [];\n      var buttonGroup;\n      if (!items) {\n        return;\n      }\n      global$2.each(items.split(/[ ,]/), function (item) {\n        var itemName;\n        var bindSelectorChanged = function () {\n          var selection = editor.selection;\n          if (item.settings.stateSelector) {\n            selection.selectorChanged(item.settings.stateSelector, function (state) {\n              item.active(state);\n            }, true);\n          }\n          if (item.settings.disabledStateSelector) {\n            selection.selectorChanged(item.settings.disabledStateSelector, function (state) {\n              item.disabled(state);\n            });\n          }\n        };\n        if (item === '|') {\n          buttonGroup = null;\n        } else {\n          if (!buttonGroup) {\n            buttonGroup = {\n              type: 'buttongroup',\n              items: []\n            };\n            toolbarItems.push(buttonGroup);\n          }\n          if (editor.buttons[item]) {\n            itemName = item;\n            item = editor.buttons[itemName];\n            if (typeof item === 'function') {\n              item = item();\n            }\n            item.type = item.type || 'button';\n            item.size = size;\n            item = global$4.create(item);\n            buttonGroup.items.push(item);\n            if (editor.initialized) {\n              bindSelectorChanged();\n            } else {\n              editor.on('init', bindSelectorChanged);\n            }\n          }\n        }\n      });\n      return {\n        type: 'toolbar',\n        layout: 'flow',\n        items: toolbarItems\n      };\n    };\n    var createToolbars = function (editor, size) {\n      var toolbars = [];\n      var addToolbar = function (items) {\n        if (items) {\n          toolbars.push(createToolbar(editor, items, size));\n        }\n      };\n      global$2.each(getToolbars(editor), function (toolbar) {\n        addToolbar(toolbar);\n      });\n      if (toolbars.length) {\n        return {\n          type: 'panel',\n          layout: 'stack',\n          classes: 'toolbar-grp',\n          ariaRoot: true,\n          ariaRemember: true,\n          items: toolbars\n        };\n      }\n    };\n    var Toolbar = {\n      createToolbar: createToolbar,\n      createToolbars: createToolbars\n    };\n\n    var DOM = global$3.DOM;\n    var toClientRect = function (geomRect) {\n      return {\n        left: geomRect.x,\n        top: geomRect.y,\n        width: geomRect.w,\n        height: geomRect.h,\n        right: geomRect.x + geomRect.w,\n        bottom: geomRect.y + geomRect.h\n      };\n    };\n    var hideAllFloatingPanels = function (editor) {\n      global$2.each(editor.contextToolbars, function (toolbar) {\n        if (toolbar.panel) {\n          toolbar.panel.hide();\n        }\n      });\n    };\n    var movePanelTo = function (panel, pos) {\n      panel.moveTo(pos.left, pos.top);\n    };\n    var togglePositionClass = function (panel, relPos, predicate) {\n      relPos = relPos ? relPos.substr(0, 2) : '';\n      global$2.each({\n        t: 'down',\n        b: 'up'\n      }, function (cls, pos) {\n        panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(0, 1)));\n      });\n      global$2.each({\n        l: 'left',\n        r: 'right'\n      }, function (cls, pos) {\n        panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(1, 1)));\n      });\n    };\n    var userConstrain = function (handler, x, y, elementRect, contentAreaRect, panelRect) {\n      panelRect = toClientRect({\n        x: x,\n        y: y,\n        w: panelRect.w,\n        h: panelRect.h\n      });\n      if (handler) {\n        panelRect = handler({\n          elementRect: toClientRect(elementRect),\n          contentAreaRect: toClientRect(contentAreaRect),\n          panelRect: panelRect\n        });\n      }\n      return panelRect;\n    };\n    var addContextualToolbars = function (editor) {\n      var scrollContainer;\n      var getContextToolbars = function () {\n        return editor.contextToolbars || [];\n      };\n      var getElementRect = function (elm) {\n        var pos, targetRect, root;\n        pos = DOM.getPos(editor.getContentAreaContainer());\n        targetRect = editor.dom.getRect(elm);\n        root = editor.dom.getRoot();\n        if (root.nodeName === 'BODY') {\n          targetRect.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft;\n          targetRect.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop;\n        }\n        targetRect.x += pos.x;\n        targetRect.y += pos.y;\n        return targetRect;\n      };\n      var reposition = function (match, shouldShow) {\n        var relPos, panelRect, elementRect, contentAreaRect, panel, relRect, testPositions, smallElementWidthThreshold;\n        var handler = getInlineToolbarPositionHandler(editor);\n        if (editor.removed) {\n          return;\n        }\n        if (!match || !match.toolbar.panel) {\n          hideAllFloatingPanels(editor);\n          return;\n        }\n        testPositions = [\n          'bc-tc',\n          'tc-bc',\n          'tl-bl',\n          'bl-tl',\n          'tr-br',\n          'br-tr'\n        ];\n        panel = match.toolbar.panel;\n        if (shouldShow) {\n          panel.show();\n        }\n        elementRect = getElementRect(match.element);\n        panelRect = DOM.getRect(panel.getEl());\n        contentAreaRect = DOM.getRect(editor.getContentAreaContainer() || editor.getBody());\n        var delta = UiContainer.getUiContainerDelta(panel).getOr({\n          x: 0,\n          y: 0\n        });\n        elementRect.x += delta.x;\n        elementRect.y += delta.y;\n        panelRect.x += delta.x;\n        panelRect.y += delta.y;\n        contentAreaRect.x += delta.x;\n        contentAreaRect.y += delta.y;\n        smallElementWidthThreshold = 25;\n        if (DOM.getStyle(match.element, 'display', true) !== 'inline') {\n          var clientRect = match.element.getBoundingClientRect();\n          elementRect.w = clientRect.width;\n          elementRect.h = clientRect.height;\n        }\n        if (!editor.inline) {\n          contentAreaRect.w = editor.getDoc().documentElement.offsetWidth;\n        }\n        if (editor.selection.controlSelection.isResizable(match.element) && elementRect.w < smallElementWidthThreshold) {\n          elementRect = global$6.inflate(elementRect, 0, 8);\n        }\n        relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, testPositions);\n        elementRect = global$6.clamp(elementRect, contentAreaRect);\n        if (relPos) {\n          relRect = global$6.relativePosition(panelRect, elementRect, relPos);\n          movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));\n        } else {\n          contentAreaRect.h += panelRect.h;\n          elementRect = global$6.intersect(contentAreaRect, elementRect);\n          if (elementRect) {\n            relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, [\n              'bc-tc',\n              'bl-tl',\n              'br-tr'\n            ]);\n            if (relPos) {\n              relRect = global$6.relativePosition(panelRect, elementRect, relPos);\n              movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));\n            } else {\n              movePanelTo(panel, userConstrain(handler, elementRect.x, elementRect.y, elementRect, contentAreaRect, panelRect));\n            }\n          } else {\n            panel.hide();\n          }\n        }\n        togglePositionClass(panel, relPos, function (pos1, pos2) {\n          return pos1 === pos2;\n        });\n      };\n      var repositionHandler = function (show) {\n        return function () {\n          var execute = function () {\n            if (editor.selection) {\n              reposition(findFrontMostMatch(editor.selection.getNode()), show);\n            }\n          };\n          global$7.requestAnimationFrame(execute);\n        };\n      };\n      var bindScrollEvent = function (panel) {\n        if (!scrollContainer) {\n          var reposition_1 = repositionHandler(true);\n          var uiContainer_1 = UiContainer.getUiContainer(panel);\n          scrollContainer = editor.selection.getScrollContainer() || editor.getWin();\n          DOM.bind(scrollContainer, 'scroll', reposition_1);\n          DOM.bind(uiContainer_1, 'scroll', reposition_1);\n          editor.on('remove', function () {\n            DOM.unbind(scrollContainer, 'scroll', reposition_1);\n            DOM.unbind(uiContainer_1, 'scroll', reposition_1);\n          });\n        }\n      };\n      var showContextToolbar = function (match) {\n        var panel;\n        if (match.toolbar.panel) {\n          match.toolbar.panel.show();\n          reposition(match);\n          return;\n        }\n        panel = global$4.create({\n          type: 'floatpanel',\n          role: 'dialog',\n          classes: 'tinymce tinymce-inline arrow',\n          ariaLabel: 'Inline toolbar',\n          layout: 'flex',\n          direction: 'column',\n          align: 'stretch',\n          autohide: false,\n          autofix: true,\n          fixed: true,\n          border: 1,\n          items: Toolbar.createToolbar(editor, match.toolbar.items),\n          oncancel: function () {\n            editor.focus();\n          }\n        });\n        UiContainer.setUiContainer(editor, panel);\n        bindScrollEvent(panel);\n        match.toolbar.panel = panel;\n        panel.renderTo().reflow();\n        reposition(match);\n      };\n      var hideAllContextToolbars = function () {\n        global$2.each(getContextToolbars(), function (toolbar) {\n          if (toolbar.panel) {\n            toolbar.panel.hide();\n          }\n        });\n      };\n      var findFrontMostMatch = function (targetElm) {\n        var i, y, parentsAndSelf;\n        var toolbars = getContextToolbars();\n        parentsAndSelf = editor.$(targetElm).parents().add(targetElm);\n        for (i = parentsAndSelf.length - 1; i >= 0; i--) {\n          for (y = toolbars.length - 1; y >= 0; y--) {\n            if (toolbars[y].predicate(parentsAndSelf[i])) {\n              return {\n                toolbar: toolbars[y],\n                element: parentsAndSelf[i]\n              };\n            }\n          }\n        }\n        return null;\n      };\n      editor.on('click keyup setContent ObjectResized', function (e) {\n        if (e.type === 'setcontent' && !e.selection) {\n          return;\n        }\n        global$7.setEditorTimeout(editor, function () {\n          var match;\n          match = findFrontMostMatch(editor.selection.getNode());\n          if (match) {\n            hideAllContextToolbars();\n            showContextToolbar(match);\n          } else {\n            hideAllContextToolbars();\n          }\n        });\n      });\n      editor.on('blur hide contextmenu', hideAllContextToolbars);\n      editor.on('ObjectResizeStart', function () {\n        var match = findFrontMostMatch(editor.selection.getNode());\n        if (match && match.toolbar.panel) {\n          match.toolbar.panel.hide();\n        }\n      });\n      editor.on('ResizeEditor ResizeWindow', repositionHandler(true));\n      editor.on('nodeChange', repositionHandler(false));\n      editor.on('remove', function () {\n        global$2.each(getContextToolbars(), function (toolbar) {\n          if (toolbar.panel) {\n            toolbar.panel.remove();\n          }\n        });\n        editor.contextToolbars = {};\n      });\n      editor.shortcuts.add('ctrl+F9', '', function () {\n        var match = findFrontMostMatch(editor.selection.getNode());\n        if (match && match.toolbar.panel) {\n          match.toolbar.panel.items()[0].focus();\n        }\n      });\n    };\n    var ContextToolbars = { addContextualToolbars: addContextualToolbars };\n\n    var typeOf = function (x) {\n      if (x === null) {\n        return 'null';\n      }\n      var t = typeof x;\n      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n        return 'array';\n      }\n      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n        return 'string';\n      }\n      return t;\n    };\n    var isType = function (type) {\n      return function (value) {\n        return typeOf(value) === type;\n      };\n    };\n    var isArray = isType('array');\n    var isFunction = isType('function');\n    var isNumber = isType('number');\n\n    var nativeSlice = Array.prototype.slice;\n    var nativeIndexOf = Array.prototype.indexOf;\n    var nativePush = Array.prototype.push;\n    var rawIndexOf = function (ts, t) {\n      return nativeIndexOf.call(ts, t);\n    };\n    var indexOf = function (xs, x) {\n      var r = rawIndexOf(xs, x);\n      return r === -1 ? Option.none() : Option.some(r);\n    };\n    var exists = function (xs, pred) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          return true;\n        }\n      }\n      return false;\n    };\n    var map = function (xs, f) {\n      var len = xs.length;\n      var r = new Array(len);\n      for (var i = 0; i < len; i++) {\n        var x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    var each = function (xs, f) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        f(x, i);\n      }\n    };\n    var filter = function (xs, pred) {\n      var r = [];\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          r.push(x);\n        }\n      }\n      return r;\n    };\n    var foldl = function (xs, f, acc) {\n      each(xs, function (x) {\n        acc = f(acc, x);\n      });\n      return acc;\n    };\n    var find = function (xs, pred) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          return Option.some(x);\n        }\n      }\n      return Option.none();\n    };\n    var findIndex = function (xs, pred) {\n      for (var i = 0, len = xs.length; i < len; i++) {\n        var x = xs[i];\n        if (pred(x, i)) {\n          return Option.some(i);\n        }\n      }\n      return Option.none();\n    };\n    var flatten = function (xs) {\n      var r = [];\n      for (var i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n      return nativeSlice.call(x);\n    };\n\n    var defaultMenus = {\n      file: {\n        title: 'File',\n        items: 'newdocument restoredraft | preview | print'\n      },\n      edit: {\n        title: 'Edit',\n        items: 'undo redo | cut copy paste pastetext | selectall'\n      },\n      view: {\n        title: 'View',\n        items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen'\n      },\n      insert: {\n        title: 'Insert',\n        items: 'image link media template codesample inserttable | charmap hr | pagebreak nonbreaking anchor toc | insertdatetime'\n      },\n      format: {\n        title: 'Format',\n        items: 'bold italic underline strikethrough superscript subscript codeformat | blockformats align | removeformat'\n      },\n      tools: {\n        title: 'Tools',\n        items: 'spellchecker spellcheckerlanguage | a11ycheck code'\n      },\n      table: { title: 'Table' },\n      help: { title: 'Help' }\n    };\n    var delimiterMenuNamePair = function () {\n      return {\n        name: '|',\n        item: { text: '|' }\n      };\n    };\n    var createMenuNameItemPair = function (name, item) {\n      var menuItem = item ? {\n        name: name,\n        item: item\n      } : null;\n      return name === '|' ? delimiterMenuNamePair() : menuItem;\n    };\n    var hasItemName = function (namedMenuItems, name) {\n      return findIndex(namedMenuItems, function (namedMenuItem) {\n        return namedMenuItem.name === name;\n      }).isSome();\n    };\n    var isSeparator = function (namedMenuItem) {\n      return namedMenuItem && namedMenuItem.item.text === '|';\n    };\n    var cleanupMenu = function (namedMenuItems, removedMenuItems) {\n      var menuItemsPass1 = filter(namedMenuItems, function (namedMenuItem) {\n        return removedMenuItems.hasOwnProperty(namedMenuItem.name) === false;\n      });\n      var menuItemsPass2 = filter(menuItemsPass1, function (namedMenuItem, i) {\n        return !isSeparator(namedMenuItem) || !isSeparator(menuItemsPass1[i - 1]);\n      });\n      return filter(menuItemsPass2, function (namedMenuItem, i) {\n        return !isSeparator(namedMenuItem) || i > 0 && i < menuItemsPass2.length - 1;\n      });\n    };\n    var createMenu = function (editorMenuItems, menus, removedMenuItems, context) {\n      var menuButton, menu, namedMenuItems, isUserDefined;\n      if (menus) {\n        menu = menus[context];\n        isUserDefined = true;\n      } else {\n        menu = defaultMenus[context];\n      }\n      if (menu) {\n        menuButton = { text: menu.title };\n        namedMenuItems = [];\n        global$2.each((menu.items || '').split(/[ ,]/), function (name) {\n          var namedMenuItem = createMenuNameItemPair(name, editorMenuItems[name]);\n          if (namedMenuItem) {\n            namedMenuItems.push(namedMenuItem);\n          }\n        });\n        if (!isUserDefined) {\n          global$2.each(editorMenuItems, function (item, name) {\n            if (item.context === context && !hasItemName(namedMenuItems, name)) {\n              if (item.separator === 'before') {\n                namedMenuItems.push(delimiterMenuNamePair());\n              }\n              if (item.prependToContext) {\n                namedMenuItems.unshift(createMenuNameItemPair(name, item));\n              } else {\n                namedMenuItems.push(createMenuNameItemPair(name, item));\n              }\n              if (item.separator === 'after') {\n                namedMenuItems.push(delimiterMenuNamePair());\n              }\n            }\n          });\n        }\n        menuButton.menu = map(cleanupMenu(namedMenuItems, removedMenuItems), function (menuItem) {\n          return menuItem.item;\n        });\n        if (!menuButton.menu.length) {\n          return null;\n        }\n      }\n      return menuButton;\n    };\n    var getDefaultMenubar = function (editor) {\n      var name;\n      var defaultMenuBar = [];\n      var menu = getMenu(editor);\n      if (menu) {\n        for (name in menu) {\n          defaultMenuBar.push(name);\n        }\n      } else {\n        for (name in defaultMenus) {\n          defaultMenuBar.push(name);\n        }\n      }\n      return defaultMenuBar;\n    };\n    var createMenuButtons = function (editor) {\n      var menuButtons = [];\n      var defaultMenuBar = getDefaultMenubar(editor);\n      var removedMenuItems = global$2.makeMap(getRemovedMenuItems(editor).split(/[ ,]/));\n      var menubar = getMenubar(editor);\n      var enabledMenuNames = typeof menubar === 'string' ? menubar.split(/[ ,]/) : defaultMenuBar;\n      for (var i = 0; i < enabledMenuNames.length; i++) {\n        var menuItems = enabledMenuNames[i];\n        var menu = createMenu(editor.menuItems, getMenu(editor), removedMenuItems, menuItems);\n        if (menu) {\n          menuButtons.push(menu);\n        }\n      }\n      return menuButtons;\n    };\n    var Menubar = { createMenuButtons: createMenuButtons };\n\n    var DOM$1 = global$3.DOM;\n    var getSize = function (elm) {\n      return {\n        width: elm.clientWidth,\n        height: elm.clientHeight\n      };\n    };\n    var resizeTo = function (editor, width, height) {\n      var containerElm, iframeElm, containerSize, iframeSize;\n      containerElm = editor.getContainer();\n      iframeElm = editor.getContentAreaContainer().firstChild;\n      containerSize = getSize(containerElm);\n      iframeSize = getSize(iframeElm);\n      if (width !== null) {\n        width = Math.max(getMinWidth(editor), width);\n        width = Math.min(getMaxWidth(editor), width);\n        DOM$1.setStyle(containerElm, 'width', width + (containerSize.width - iframeSize.width));\n        DOM$1.setStyle(iframeElm, 'width', width);\n      }\n      height = Math.max(getMinHeight(editor), height);\n      height = Math.min(getMaxHeight(editor), height);\n      DOM$1.setStyle(iframeElm, 'height', height);\n      Events.fireResizeEditor(editor);\n    };\n    var resizeBy = function (editor, dw, dh) {\n      var elm = editor.getContentAreaContainer();\n      resizeTo(editor, elm.clientWidth + dw, elm.clientHeight + dh);\n    };\n    var Resize = {\n      resizeTo: resizeTo,\n      resizeBy: resizeBy\n    };\n\n    var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n    var api = function (elm) {\n      return {\n        element: function () {\n          return elm;\n        }\n      };\n    };\n    var trigger = function (sidebar, panel, callbackName) {\n      var callback = sidebar.settings[callbackName];\n      if (callback) {\n        callback(api(panel.getEl('body')));\n      }\n    };\n    var hidePanels = function (name, container, sidebars) {\n      global$2.each(sidebars, function (sidebar) {\n        var panel = container.items().filter('#' + sidebar.name)[0];\n        if (panel && panel.visible() && sidebar.name !== name) {\n          trigger(sidebar, panel, 'onhide');\n          panel.visible(false);\n        }\n      });\n    };\n    var deactivateButtons = function (toolbar) {\n      toolbar.items().each(function (ctrl) {\n        ctrl.active(false);\n      });\n    };\n    var findSidebar = function (sidebars, name) {\n      return global$2.grep(sidebars, function (sidebar) {\n        return sidebar.name === name;\n      })[0];\n    };\n    var showPanel = function (editor, name, sidebars) {\n      return function (e) {\n        var btnCtrl = e.control;\n        var container = btnCtrl.parents().filter('panel')[0];\n        var panel = container.find('#' + name)[0];\n        var sidebar = findSidebar(sidebars, name);\n        hidePanels(name, container, sidebars);\n        deactivateButtons(btnCtrl.parent());\n        if (panel && panel.visible()) {\n          trigger(sidebar, panel, 'onhide');\n          panel.hide();\n          btnCtrl.active(false);\n        } else {\n          if (panel) {\n            panel.show();\n            trigger(sidebar, panel, 'onshow');\n          } else {\n            panel = global$4.create({\n              type: 'container',\n              name: name,\n              layout: 'stack',\n              classes: 'sidebar-panel',\n              html: ''\n            });\n            container.prepend(panel);\n            trigger(sidebar, panel, 'onrender');\n            trigger(sidebar, panel, 'onshow');\n          }\n          btnCtrl.active(true);\n        }\n        Events.fireResizeEditor(editor);\n      };\n    };\n    var isModernBrowser = function () {\n      return !global$8.ie || global$8.ie >= 11;\n    };\n    var hasSidebar = function (editor) {\n      return isModernBrowser() && editor.sidebars ? editor.sidebars.length > 0 : false;\n    };\n    var createSidebar = function (editor) {\n      var buttons = global$2.map(editor.sidebars, function (sidebar) {\n        var settings = sidebar.settings;\n        return {\n          type: 'button',\n          icon: settings.icon,\n          image: settings.image,\n          tooltip: settings.tooltip,\n          onclick: showPanel(editor, sidebar.name, editor.sidebars)\n        };\n      });\n      return {\n        type: 'panel',\n        name: 'sidebar',\n        layout: 'stack',\n        classes: 'sidebar',\n        items: [{\n            type: 'toolbar',\n            layout: 'stack',\n            classes: 'sidebar-toolbar',\n            items: buttons\n          }]\n      };\n    };\n    var Sidebar = {\n      hasSidebar: hasSidebar,\n      createSidebar: createSidebar\n    };\n\n    var fireSkinLoaded$1 = function (editor) {\n      var done = function () {\n        editor._skinLoaded = true;\n        Events.fireSkinLoaded(editor);\n      };\n      return function () {\n        if (editor.initialized) {\n          done();\n        } else {\n          editor.on('init', done);\n        }\n      };\n    };\n    var SkinLoaded = { fireSkinLoaded: fireSkinLoaded$1 };\n\n    var DOM$2 = global$3.DOM;\n    var switchMode = function (panel) {\n      return function (e) {\n        panel.find('*').disabled(e.mode === 'readonly');\n      };\n    };\n    var editArea = function (border) {\n      return {\n        type: 'panel',\n        name: 'iframe',\n        layout: 'stack',\n        classes: 'edit-area',\n        border: border,\n        html: ''\n      };\n    };\n    var editAreaContainer = function (editor) {\n      return {\n        type: 'panel',\n        layout: 'stack',\n        classes: 'edit-aria-container',\n        border: '1 0 0 0',\n        items: [\n          editArea('0'),\n          Sidebar.createSidebar(editor)\n        ]\n      };\n    };\n    var render = function (editor, theme, args) {\n      var panel, resizeHandleCtrl, startSize;\n      if (isSkinDisabled(editor) === false && args.skinUiCss) {\n        DOM$2.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));\n      } else {\n        SkinLoaded.fireSkinLoaded(editor)();\n      }\n      panel = theme.panel = global$4.create({\n        type: 'panel',\n        role: 'application',\n        classes: 'tinymce',\n        style: 'visibility: hidden',\n        layout: 'stack',\n        border: 1,\n        items: [\n          {\n            type: 'container',\n            classes: 'top-part',\n            items: [\n              hasMenubar(editor) === false ? null : {\n                type: 'menubar',\n                border: '0 0 1 0',\n                items: Menubar.createMenuButtons(editor)\n              },\n              Toolbar.createToolbars(editor, getToolbarSize(editor))\n            ]\n          },\n          Sidebar.hasSidebar(editor) ? editAreaContainer(editor) : editArea('1 0 0 0')\n        ]\n      });\n      UiContainer.setUiContainer(editor, panel);\n      if (getResize(editor) !== 'none') {\n        resizeHandleCtrl = {\n          type: 'resizehandle',\n          direction: getResize(editor),\n          onResizeStart: function () {\n            var elm = editor.getContentAreaContainer().firstChild;\n            startSize = {\n              width: elm.clientWidth,\n              height: elm.clientHeight\n            };\n          },\n          onResize: function (e) {\n            if (getResize(editor) === 'both') {\n              Resize.resizeTo(editor, startSize.width + e.deltaX, startSize.height + e.deltaY);\n            } else {\n              Resize.resizeTo(editor, null, startSize.height + e.deltaY);\n            }\n          }\n        };\n      }\n      if (hasStatusbar(editor)) {\n        var linkHtml = '<a href=\"https://www.tiny.cloud/?utm_campaign=editor_referral&amp;utm_medium=poweredby&amp;utm_source=tinymce\" rel=\"noopener\" target=\"_blank\" role=\"presentation\" tabindex=\"-1\">Tiny</a>';\n        var html = global$5.translate([\n          'Powered by {0}',\n          linkHtml\n        ]);\n        var brandingLabel = isBrandingEnabled(editor) ? {\n          type: 'label',\n          classes: 'branding',\n          html: ' ' + html\n        } : null;\n        panel.add({\n          type: 'panel',\n          name: 'statusbar',\n          classes: 'statusbar',\n          layout: 'flow',\n          border: '1 0 0 0',\n          ariaRoot: true,\n          items: [\n            {\n              type: 'elementpath',\n              editor: editor\n            },\n            resizeHandleCtrl,\n            brandingLabel\n          ]\n        });\n      }\n      Events.fireBeforeRenderUI(editor);\n      editor.on('SwitchMode', switchMode(panel));\n      panel.renderBefore(args.targetNode).reflow();\n      if (isReadOnly(editor)) {\n        editor.setMode('readonly');\n      }\n      if (args.width) {\n        DOM$2.setStyle(panel.getEl(), 'width', args.width);\n      }\n      editor.on('remove', function () {\n        panel.remove();\n        panel = null;\n      });\n      A11y.addKeys(editor, panel);\n      ContextToolbars.addContextualToolbars(editor);\n      return {\n        iframeContainer: panel.find('#iframe')[0].getEl(),\n        editorContainer: panel.getEl()\n      };\n    };\n    var Iframe = { render: render };\n\n    var global$9 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n    var count = 0;\n    var funcs = {\n      id: function () {\n        return 'mceu_' + count++;\n      },\n      create: function (name, attrs, children) {\n        var elm = domGlobals.document.createElement(name);\n        global$3.DOM.setAttribs(elm, attrs);\n        if (typeof children === 'string') {\n          elm.innerHTML = children;\n        } else {\n          global$2.each(children, function (child) {\n            if (child.nodeType) {\n              elm.appendChild(child);\n            }\n          });\n        }\n        return elm;\n      },\n      createFragment: function (html) {\n        return global$3.DOM.createFragment(html);\n      },\n      getWindowSize: function () {\n        return global$3.DOM.getViewPort();\n      },\n      getSize: function (elm) {\n        var width, height;\n        if (elm.getBoundingClientRect) {\n          var rect = elm.getBoundingClientRect();\n          width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth);\n          height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight);\n        } else {\n          width = elm.offsetWidth;\n          height = elm.offsetHeight;\n        }\n        return {\n          width: width,\n          height: height\n        };\n      },\n      getPos: function (elm, root) {\n        return global$3.DOM.getPos(elm, root || funcs.getContainer());\n      },\n      getContainer: function () {\n        return global$8.container ? global$8.container : domGlobals.document.body;\n      },\n      getViewPort: function (win) {\n        return global$3.DOM.getViewPort(win);\n      },\n      get: function (id) {\n        return domGlobals.document.getElementById(id);\n      },\n      addClass: function (elm, cls) {\n        return global$3.DOM.addClass(elm, cls);\n      },\n      removeClass: function (elm, cls) {\n        return global$3.DOM.removeClass(elm, cls);\n      },\n      hasClass: function (elm, cls) {\n        return global$3.DOM.hasClass(elm, cls);\n      },\n      toggleClass: function (elm, cls, state) {\n        return global$3.DOM.toggleClass(elm, cls, state);\n      },\n      css: function (elm, name, value) {\n        return global$3.DOM.setStyle(elm, name, value);\n      },\n      getRuntimeStyle: function (elm, name) {\n        return global$3.DOM.getStyle(elm, name, true);\n      },\n      on: function (target, name, callback, scope) {\n        return global$3.DOM.bind(target, name, callback, scope);\n      },\n      off: function (target, name, callback) {\n        return global$3.DOM.unbind(target, name, callback);\n      },\n      fire: function (target, name, args) {\n        return global$3.DOM.fire(target, name, args);\n      },\n      innerHtml: function (elm, html) {\n        global$3.DOM.setHTML(elm, html);\n      }\n    };\n\n    var isStatic = function (elm) {\n      return funcs.getRuntimeStyle(elm, 'position') === 'static';\n    };\n    var isFixed = function (ctrl) {\n      return ctrl.state.get('fixed');\n    };\n    function calculateRelativePosition(ctrl, targetElm, rel) {\n      var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size;\n      viewport = getWindowViewPort();\n      pos = funcs.getPos(targetElm, UiContainer.getUiContainer(ctrl));\n      x = pos.x;\n      y = pos.y;\n      if (isFixed(ctrl) && isStatic(domGlobals.document.body)) {\n        x -= viewport.x;\n        y -= viewport.y;\n      }\n      ctrlElm = ctrl.getEl();\n      size = funcs.getSize(ctrlElm);\n      selfW = size.width;\n      selfH = size.height;\n      size = funcs.getSize(targetElm);\n      targetW = size.width;\n      targetH = size.height;\n      rel = (rel || '').split('');\n      if (rel[0] === 'b') {\n        y += targetH;\n      }\n      if (rel[1] === 'r') {\n        x += targetW;\n      }\n      if (rel[0] === 'c') {\n        y += Math.round(targetH / 2);\n      }\n      if (rel[1] === 'c') {\n        x += Math.round(targetW / 2);\n      }\n      if (rel[3] === 'b') {\n        y -= selfH;\n      }\n      if (rel[4] === 'r') {\n        x -= selfW;\n      }\n      if (rel[3] === 'c') {\n        y -= Math.round(selfH / 2);\n      }\n      if (rel[4] === 'c') {\n        x -= Math.round(selfW / 2);\n      }\n      return {\n        x: x,\n        y: y,\n        w: selfW,\n        h: selfH\n      };\n    }\n    var getUiContainerViewPort = function (customUiContainer) {\n      return {\n        x: 0,\n        y: 0,\n        w: customUiContainer.scrollWidth - 1,\n        h: customUiContainer.scrollHeight - 1\n      };\n    };\n    var getWindowViewPort = function () {\n      var win = domGlobals.window;\n      var x = Math.max(win.pageXOffset, domGlobals.document.body.scrollLeft, domGlobals.document.documentElement.scrollLeft);\n      var y = Math.max(win.pageYOffset, domGlobals.document.body.scrollTop, domGlobals.document.documentElement.scrollTop);\n      var w = win.innerWidth || domGlobals.document.documentElement.clientWidth;\n      var h = win.innerHeight || domGlobals.document.documentElement.clientHeight;\n      return {\n        x: x,\n        y: y,\n        w: w,\n        h: h\n      };\n    };\n    var getViewPortRect = function (ctrl) {\n      var customUiContainer = UiContainer.getUiContainer(ctrl);\n      return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort();\n    };\n    var Movable = {\n      testMoveRel: function (elm, rels) {\n        var viewPortRect = getViewPortRect(this);\n        for (var i = 0; i < rels.length; i++) {\n          var pos = calculateRelativePosition(this, elm, rels[i]);\n          if (isFixed(this)) {\n            if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) {\n              return rels[i];\n            }\n          } else {\n            if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w + viewPortRect.x && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h + viewPortRect.y) {\n              return rels[i];\n            }\n          }\n        }\n        return rels[0];\n      },\n      moveRel: function (elm, rel) {\n        if (typeof rel !== 'string') {\n          rel = this.testMoveRel(elm, rel);\n        }\n        var pos = calculateRelativePosition(this, elm, rel);\n        return this.moveTo(pos.x, pos.y);\n      },\n      moveBy: function (dx, dy) {\n        var self = this, rect = self.layoutRect();\n        self.moveTo(rect.x + dx, rect.y + dy);\n        return self;\n      },\n      moveTo: function (x, y) {\n        var self = this;\n        function constrain(value, max, size) {\n          if (value < 0) {\n            return 0;\n          }\n          if (value + size > max) {\n            value = max - size;\n            return value < 0 ? 0 : value;\n          }\n          return value;\n        }\n        if (self.settings.constrainToViewport) {\n          var viewPortRect = getViewPortRect(this);\n          var layoutRect = self.layoutRect();\n          x = constrain(x, viewPortRect.w + viewPortRect.x, layoutRect.w);\n          y = constrain(y, viewPortRect.h + viewPortRect.y, layoutRect.h);\n        }\n        var uiContainer = UiContainer.getUiContainer(self);\n        if (uiContainer && isStatic(uiContainer) && !isFixed(self)) {\n          x -= uiContainer.scrollLeft;\n          y -= uiContainer.scrollTop;\n        }\n        if (uiContainer) {\n          x += 1;\n          y += 1;\n        }\n        if (self.state.get('rendered')) {\n          self.layoutRect({\n            x: x,\n            y: y\n          }).repaint();\n        } else {\n          self.settings.x = x;\n          self.settings.y = y;\n        }\n        self.fire('move', {\n          x: x,\n          y: y\n        });\n        return self;\n      }\n    };\n\n    var global$a = tinymce.util.Tools.resolve('tinymce.util.Class');\n\n    var global$b = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher');\n\n    var BoxUtils = {\n      parseBox: function (value) {\n        var len;\n        var radix = 10;\n        if (!value) {\n          return;\n        }\n        if (typeof value === 'number') {\n          value = value || 0;\n          return {\n            top: value,\n            left: value,\n            bottom: value,\n            right: value\n          };\n        }\n        value = value.split(' ');\n        len = value.length;\n        if (len === 1) {\n          value[1] = value[2] = value[3] = value[0];\n        } else if (len === 2) {\n          value[2] = value[0];\n          value[3] = value[1];\n        } else if (len === 3) {\n          value[3] = value[1];\n        }\n        return {\n          top: parseInt(value[0], radix) || 0,\n          right: parseInt(value[1], radix) || 0,\n          bottom: parseInt(value[2], radix) || 0,\n          left: parseInt(value[3], radix) || 0\n        };\n      },\n      measureBox: function (elm, prefix) {\n        function getStyle(name) {\n          var defaultView = elm.ownerDocument.defaultView;\n          if (defaultView) {\n            var computedStyle = defaultView.getComputedStyle(elm, null);\n            if (computedStyle) {\n              name = name.replace(/[A-Z]/g, function (a) {\n                return '-' + a;\n              });\n              return computedStyle.getPropertyValue(name);\n            } else {\n              return null;\n            }\n          }\n          return elm.currentStyle[name];\n        }\n        function getSide(name) {\n          var val = parseFloat(getStyle(name));\n          return isNaN(val) ? 0 : val;\n        }\n        return {\n          top: getSide(prefix + 'TopWidth'),\n          right: getSide(prefix + 'RightWidth'),\n          bottom: getSide(prefix + 'BottomWidth'),\n          left: getSide(prefix + 'LeftWidth')\n        };\n      }\n    };\n\n    function noop$1() {\n    }\n    function ClassList(onchange) {\n      this.cls = [];\n      this.cls._map = {};\n      this.onchange = onchange || noop$1;\n      this.prefix = '';\n    }\n    global$2.extend(ClassList.prototype, {\n      add: function (cls) {\n        if (cls && !this.contains(cls)) {\n          this.cls._map[cls] = true;\n          this.cls.push(cls);\n          this._change();\n        }\n        return this;\n      },\n      remove: function (cls) {\n        if (this.contains(cls)) {\n          var i = void 0;\n          for (i = 0; i < this.cls.length; i++) {\n            if (this.cls[i] === cls) {\n              break;\n            }\n          }\n          this.cls.splice(i, 1);\n          delete this.cls._map[cls];\n          this._change();\n        }\n        return this;\n      },\n      toggle: function (cls, state) {\n        var curState = this.contains(cls);\n        if (curState !== state) {\n          if (curState) {\n            this.remove(cls);\n          } else {\n            this.add(cls);\n          }\n          this._change();\n        }\n        return this;\n      },\n      contains: function (cls) {\n        return !!this.cls._map[cls];\n      },\n      _change: function () {\n        delete this.clsValue;\n        this.onchange.call(this);\n      }\n    });\n    ClassList.prototype.toString = function () {\n      var value;\n      if (this.clsValue) {\n        return this.clsValue;\n      }\n      value = '';\n      for (var i = 0; i < this.cls.length; i++) {\n        if (i > 0) {\n          value += ' ';\n        }\n        value += this.prefix + this.cls[i];\n      }\n      return value;\n    };\n\n    function unique(array) {\n      var uniqueItems = [];\n      var i = array.length, item;\n      while (i--) {\n        item = array[i];\n        if (!item.__checked) {\n          uniqueItems.push(item);\n          item.__checked = 1;\n        }\n      }\n      i = uniqueItems.length;\n      while (i--) {\n        delete uniqueItems[i].__checked;\n      }\n      return uniqueItems;\n    }\n    var expression = /^([\\w\\\\*]+)?(?:#([\\w\\-\\\\]+))?(?:\\.([\\w\\\\\\.]+))?(?:\\[\\@?([\\w\\\\]+)([\\^\\$\\*!~]?=)([\\w\\\\]+)\\])?(?:\\:(.+))?/i;\n    var chunker = /((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g;\n    var whiteSpace = /^\\s*|\\s*$/g;\n    var Collection;\n    var Selector = global$a.extend({\n      init: function (selector) {\n        var match = this.match;\n        function compileNameFilter(name) {\n          if (name) {\n            name = name.toLowerCase();\n            return function (item) {\n              return name === '*' || item.type === name;\n            };\n          }\n        }\n        function compileIdFilter(id) {\n          if (id) {\n            return function (item) {\n              return item._name === id;\n            };\n          }\n        }\n        function compileClassesFilter(classes) {\n          if (classes) {\n            classes = classes.split('.');\n            return function (item) {\n              var i = classes.length;\n              while (i--) {\n                if (!item.classes.contains(classes[i])) {\n                  return false;\n                }\n              }\n              return true;\n            };\n          }\n        }\n        function compileAttrFilter(name, cmp, check) {\n          if (name) {\n            return function (item) {\n              var value = item[name] ? item[name]() : '';\n              return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false;\n            };\n          }\n        }\n        function compilePsuedoFilter(name) {\n          var notSelectors;\n          if (name) {\n            name = /(?:not\\((.+)\\))|(.+)/i.exec(name);\n            if (!name[1]) {\n              name = name[2];\n              return function (item, index, length) {\n                return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false;\n              };\n            }\n            notSelectors = parseChunks(name[1], []);\n            return function (item) {\n              return !match(item, notSelectors);\n            };\n          }\n        }\n        function compile(selector, filters, direct) {\n          var parts;\n          function add(filter) {\n            if (filter) {\n              filters.push(filter);\n            }\n          }\n          parts = expression.exec(selector.replace(whiteSpace, ''));\n          add(compileNameFilter(parts[1]));\n          add(compileIdFilter(parts[2]));\n          add(compileClassesFilter(parts[3]));\n          add(compileAttrFilter(parts[4], parts[5], parts[6]));\n          add(compilePsuedoFilter(parts[7]));\n          filters.pseudo = !!parts[7];\n          filters.direct = direct;\n          return filters;\n        }\n        function parseChunks(selector, selectors) {\n          var parts = [];\n          var extra, matches, i;\n          do {\n            chunker.exec('');\n            matches = chunker.exec(selector);\n            if (matches) {\n              selector = matches[3];\n              parts.push(matches[1]);\n              if (matches[2]) {\n                extra = matches[3];\n                break;\n              }\n            }\n          } while (matches);\n          if (extra) {\n            parseChunks(extra, selectors);\n          }\n          selector = [];\n          for (i = 0; i < parts.length; i++) {\n            if (parts[i] !== '>') {\n              selector.push(compile(parts[i], [], parts[i - 1] === '>'));\n            }\n          }\n          selectors.push(selector);\n          return selectors;\n        }\n        this._selectors = parseChunks(selector, []);\n      },\n      match: function (control, selectors) {\n        var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;\n        selectors = selectors || this._selectors;\n        for (i = 0, l = selectors.length; i < l; i++) {\n          selector = selectors[i];\n          sl = selector.length;\n          item = control;\n          count = 0;\n          for (si = sl - 1; si >= 0; si--) {\n            filters = selector[si];\n            while (item) {\n              if (filters.pseudo) {\n                siblings = item.parent().items();\n                index = length = siblings.length;\n                while (index--) {\n                  if (siblings[index] === item) {\n                    break;\n                  }\n                }\n              }\n              for (fi = 0, fl = filters.length; fi < fl; fi++) {\n                if (!filters[fi](item, index, length)) {\n                  fi = fl + 1;\n                  break;\n                }\n              }\n              if (fi === fl) {\n                count++;\n                break;\n              } else {\n                if (si === sl - 1) {\n                  break;\n                }\n              }\n              item = item.parent();\n            }\n          }\n          if (count === sl) {\n            return true;\n          }\n        }\n        return false;\n      },\n      find: function (container) {\n        var matches = [], i, l;\n        var selectors = this._selectors;\n        function collect(items, selector, index) {\n          var i, l, fi, fl, item;\n          var filters = selector[index];\n          for (i = 0, l = items.length; i < l; i++) {\n            item = items[i];\n            for (fi = 0, fl = filters.length; fi < fl; fi++) {\n              if (!filters[fi](item, i, l)) {\n                fi = fl + 1;\n                break;\n              }\n            }\n            if (fi === fl) {\n              if (index === selector.length - 1) {\n                matches.push(item);\n              } else {\n                if (item.items) {\n                  collect(item.items(), selector, index + 1);\n                }\n              }\n            } else if (filters.direct) {\n              return;\n            }\n            if (item.items) {\n              collect(item.items(), selector, index);\n            }\n          }\n        }\n        if (container.items) {\n          for (i = 0, l = selectors.length; i < l; i++) {\n            collect(container.items(), selectors[i], 0);\n          }\n          if (l > 1) {\n            matches = unique(matches);\n          }\n        }\n        if (!Collection) {\n          Collection = Selector.Collection;\n        }\n        return new Collection(matches);\n      }\n    });\n\n    var Collection$1, proto;\n    var push = Array.prototype.push, slice = Array.prototype.slice;\n    proto = {\n      length: 0,\n      init: function (items) {\n        if (items) {\n          this.add(items);\n        }\n      },\n      add: function (items) {\n        var self = this;\n        if (!global$2.isArray(items)) {\n          if (items instanceof Collection$1) {\n            self.add(items.toArray());\n          } else {\n            push.call(self, items);\n          }\n        } else {\n          push.apply(self, items);\n        }\n        return self;\n      },\n      set: function (items) {\n        var self = this;\n        var len = self.length;\n        var i;\n        self.length = 0;\n        self.add(items);\n        for (i = self.length; i < len; i++) {\n          delete self[i];\n        }\n        return self;\n      },\n      filter: function (selector) {\n        var self = this;\n        var i, l;\n        var matches = [];\n        var item, match;\n        if (typeof selector === 'string') {\n          selector = new Selector(selector);\n          match = function (item) {\n            return selector.match(item);\n          };\n        } else {\n          match = selector;\n        }\n        for (i = 0, l = self.length; i < l; i++) {\n          item = self[i];\n          if (match(item)) {\n            matches.push(item);\n          }\n        }\n        return new Collection$1(matches);\n      },\n      slice: function () {\n        return new Collection$1(slice.apply(this, arguments));\n      },\n      eq: function (index) {\n        return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n      },\n      each: function (callback) {\n        global$2.each(this, callback);\n        return this;\n      },\n      toArray: function () {\n        return global$2.toArray(this);\n      },\n      indexOf: function (ctrl) {\n        var self = this;\n        var i = self.length;\n        while (i--) {\n          if (self[i] === ctrl) {\n            break;\n          }\n        }\n        return i;\n      },\n      reverse: function () {\n        return new Collection$1(global$2.toArray(this).reverse());\n      },\n      hasClass: function (cls) {\n        return this[0] ? this[0].classes.contains(cls) : false;\n      },\n      prop: function (name, value) {\n        var self = this;\n        var item;\n        if (value !== undefined) {\n          self.each(function (item) {\n            if (item[name]) {\n              item[name](value);\n            }\n          });\n          return self;\n        }\n        item = self[0];\n        if (item && item[name]) {\n          return item[name]();\n        }\n      },\n      exec: function (name) {\n        var self = this, args = global$2.toArray(arguments).slice(1);\n        self.each(function (item) {\n          if (item[name]) {\n            item[name].apply(item, args);\n          }\n        });\n        return self;\n      },\n      remove: function () {\n        var i = this.length;\n        while (i--) {\n          this[i].remove();\n        }\n        return this;\n      },\n      addClass: function (cls) {\n        return this.each(function (item) {\n          item.classes.add(cls);\n        });\n      },\n      removeClass: function (cls) {\n        return this.each(function (item) {\n          item.classes.remove(cls);\n        });\n      }\n    };\n    global$2.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) {\n      proto[name] = function () {\n        var args = global$2.toArray(arguments);\n        this.each(function (ctrl) {\n          if (name in ctrl) {\n            ctrl[name].apply(ctrl, args);\n          }\n        });\n        return this;\n      };\n    });\n    global$2.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) {\n      proto[name] = function (value) {\n        return this.prop(name, value);\n      };\n    });\n    Collection$1 = global$a.extend(proto);\n    Selector.Collection = Collection$1;\n    var Collection$2 = Collection$1;\n\n    var Binding = function (settings) {\n      this.create = settings.create;\n    };\n    Binding.create = function (model, name) {\n      return new Binding({\n        create: function (otherModel, otherName) {\n          var bindings;\n          var fromSelfToOther = function (e) {\n            otherModel.set(otherName, e.value);\n          };\n          var fromOtherToSelf = function (e) {\n            model.set(name, e.value);\n          };\n          otherModel.on('change:' + otherName, fromOtherToSelf);\n          model.on('change:' + name, fromSelfToOther);\n          bindings = otherModel._bindings;\n          if (!bindings) {\n            bindings = otherModel._bindings = [];\n            otherModel.on('destroy', function () {\n              var i = bindings.length;\n              while (i--) {\n                bindings[i]();\n              }\n            });\n          }\n          bindings.push(function () {\n            model.off('change:' + name, fromSelfToOther);\n          });\n          return model.get(name);\n        }\n      });\n    };\n\n    var global$c = tinymce.util.Tools.resolve('tinymce.util.Observable');\n\n    function isNode(node) {\n      return node.nodeType > 0;\n    }\n    function isEqual(a, b) {\n      var k, checked;\n      if (a === b) {\n        return true;\n      }\n      if (a === null || b === null) {\n        return a === b;\n      }\n      if (typeof a !== 'object' || typeof b !== 'object') {\n        return a === b;\n      }\n      if (global$2.isArray(b)) {\n        if (a.length !== b.length) {\n          return false;\n        }\n        k = a.length;\n        while (k--) {\n          if (!isEqual(a[k], b[k])) {\n            return false;\n          }\n        }\n      }\n      if (isNode(a) || isNode(b)) {\n        return a === b;\n      }\n      checked = {};\n      for (k in b) {\n        if (!isEqual(a[k], b[k])) {\n          return false;\n        }\n        checked[k] = true;\n      }\n      for (k in a) {\n        if (!checked[k] && !isEqual(a[k], b[k])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    var ObservableObject = global$a.extend({\n      Mixins: [global$c],\n      init: function (data) {\n        var name, value;\n        data = data || {};\n        for (name in data) {\n          value = data[name];\n          if (value instanceof Binding) {\n            data[name] = value.create(this, name);\n          }\n        }\n        this.data = data;\n      },\n      set: function (name, value) {\n        var key, args;\n        var oldValue = this.data[name];\n        if (value instanceof Binding) {\n          value = value.create(this, name);\n        }\n        if (typeof name === 'object') {\n          for (key in name) {\n            this.set(key, name[key]);\n          }\n          return this;\n        }\n        if (!isEqual(oldValue, value)) {\n          this.data[name] = value;\n          args = {\n            target: this,\n            name: name,\n            value: value,\n            oldValue: oldValue\n          };\n          this.fire('change:' + name, args);\n          this.fire('change', args);\n        }\n        return this;\n      },\n      get: function (name) {\n        return this.data[name];\n      },\n      has: function (name) {\n        return name in this.data;\n      },\n      bind: function (name) {\n        return Binding.create(this, name);\n      },\n      destroy: function () {\n        this.fire('destroy');\n      }\n    });\n\n    var dirtyCtrls = {}, animationFrameRequested;\n    var ReflowQueue = {\n      add: function (ctrl) {\n        var parent = ctrl.parent();\n        if (parent) {\n          if (!parent._layout || parent._layout.isNative()) {\n            return;\n          }\n          if (!dirtyCtrls[parent._id]) {\n            dirtyCtrls[parent._id] = parent;\n          }\n          if (!animationFrameRequested) {\n            animationFrameRequested = true;\n            global$7.requestAnimationFrame(function () {\n              var id, ctrl;\n              animationFrameRequested = false;\n              for (id in dirtyCtrls) {\n                ctrl = dirtyCtrls[id];\n                if (ctrl.state.get('rendered')) {\n                  ctrl.reflow();\n                }\n              }\n              dirtyCtrls = {};\n            }, domGlobals.document.body);\n          }\n        }\n      },\n      remove: function (ctrl) {\n        if (dirtyCtrls[ctrl._id]) {\n          delete dirtyCtrls[ctrl._id];\n        }\n      }\n    };\n\n    var hasMouseWheelEventSupport = 'onmousewheel' in domGlobals.document;\n    var hasWheelEventSupport = false;\n    var classPrefix = 'mce-';\n    var Control, idCounter = 0;\n    var proto$1 = {\n      Statics: { classPrefix: classPrefix },\n      isRtl: function () {\n        return Control.rtl;\n      },\n      classPrefix: classPrefix,\n      init: function (settings) {\n        var self = this;\n        var classes, defaultClasses;\n        function applyClasses(classes) {\n          var i;\n          classes = classes.split(' ');\n          for (i = 0; i < classes.length; i++) {\n            self.classes.add(classes[i]);\n          }\n        }\n        self.settings = settings = global$2.extend({}, self.Defaults, settings);\n        self._id = settings.id || 'mceu_' + idCounter++;\n        self._aria = { role: settings.role };\n        self._elmCache = {};\n        self.$ = global$9;\n        self.state = new ObservableObject({\n          visible: true,\n          active: false,\n          disabled: false,\n          value: ''\n        });\n        self.data = new ObservableObject(settings.data);\n        self.classes = new ClassList(function () {\n          if (self.state.get('rendered')) {\n            self.getEl().className = this.toString();\n          }\n        });\n        self.classes.prefix = self.classPrefix;\n        classes = settings.classes;\n        if (classes) {\n          if (self.Defaults) {\n            defaultClasses = self.Defaults.classes;\n            if (defaultClasses && classes !== defaultClasses) {\n              applyClasses(defaultClasses);\n            }\n          }\n          applyClasses(classes);\n        }\n        global$2.each('title text name visible disabled active value'.split(' '), function (name) {\n          if (name in settings) {\n            self[name](settings[name]);\n          }\n        });\n        self.on('click', function () {\n          if (self.disabled()) {\n            return false;\n          }\n        });\n        self.settings = settings;\n        self.borderBox = BoxUtils.parseBox(settings.border);\n        self.paddingBox = BoxUtils.parseBox(settings.padding);\n        self.marginBox = BoxUtils.parseBox(settings.margin);\n        if (settings.hidden) {\n          self.hide();\n        }\n      },\n      Properties: 'parent,name',\n      getContainerElm: function () {\n        var uiContainer = UiContainer.getUiContainer(this);\n        return uiContainer ? uiContainer : funcs.getContainer();\n      },\n      getParentCtrl: function (elm) {\n        var ctrl;\n        var lookup = this.getRoot().controlIdLookup;\n        while (elm && lookup) {\n          ctrl = lookup[elm.id];\n          if (ctrl) {\n            break;\n          }\n          elm = elm.parentNode;\n        }\n        return ctrl;\n      },\n      initLayoutRect: function () {\n        var self = this;\n        var settings = self.settings;\n        var borderBox, layoutRect;\n        var elm = self.getEl();\n        var width, height, minWidth, minHeight, autoResize;\n        var startMinWidth, startMinHeight, initialSize;\n        borderBox = self.borderBox = self.borderBox || BoxUtils.measureBox(elm, 'border');\n        self.paddingBox = self.paddingBox || BoxUtils.measureBox(elm, 'padding');\n        self.marginBox = self.marginBox || BoxUtils.measureBox(elm, 'margin');\n        initialSize = funcs.getSize(elm);\n        startMinWidth = settings.minWidth;\n        startMinHeight = settings.minHeight;\n        minWidth = startMinWidth || initialSize.width;\n        minHeight = startMinHeight || initialSize.height;\n        width = settings.width;\n        height = settings.height;\n        autoResize = settings.autoResize;\n        autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height;\n        width = width || minWidth;\n        height = height || minHeight;\n        var deltaW = borderBox.left + borderBox.right;\n        var deltaH = borderBox.top + borderBox.bottom;\n        var maxW = settings.maxWidth || 65535;\n        var maxH = settings.maxHeight || 65535;\n        self._layoutRect = layoutRect = {\n          x: settings.x || 0,\n          y: settings.y || 0,\n          w: width,\n          h: height,\n          deltaW: deltaW,\n          deltaH: deltaH,\n          contentW: width - deltaW,\n          contentH: height - deltaH,\n          innerW: width - deltaW,\n          innerH: height - deltaH,\n          startMinWidth: startMinWidth || 0,\n          startMinHeight: startMinHeight || 0,\n          minW: Math.min(minWidth, maxW),\n          minH: Math.min(minHeight, maxH),\n          maxW: maxW,\n          maxH: maxH,\n          autoResize: autoResize,\n          scrollW: 0\n        };\n        self._lastLayoutRect = {};\n        return layoutRect;\n      },\n      layoutRect: function (newRect) {\n        var self = this;\n        var curRect = self._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls;\n        if (!curRect) {\n          curRect = self.initLayoutRect();\n        }\n        if (newRect) {\n          deltaWidth = curRect.deltaW;\n          deltaHeight = curRect.deltaH;\n          if (newRect.x !== undefined) {\n            curRect.x = newRect.x;\n          }\n          if (newRect.y !== undefined) {\n            curRect.y = newRect.y;\n          }\n          if (newRect.minW !== undefined) {\n            curRect.minW = newRect.minW;\n          }\n          if (newRect.minH !== undefined) {\n            curRect.minH = newRect.minH;\n          }\n          size = newRect.w;\n          if (size !== undefined) {\n            size = size < curRect.minW ? curRect.minW : size;\n            size = size > curRect.maxW ? curRect.maxW : size;\n            curRect.w = size;\n            curRect.innerW = size - deltaWidth;\n          }\n          size = newRect.h;\n          if (size !== undefined) {\n            size = size < curRect.minH ? curRect.minH : size;\n            size = size > curRect.maxH ? curRect.maxH : size;\n            curRect.h = size;\n            curRect.innerH = size - deltaHeight;\n          }\n          size = newRect.innerW;\n          if (size !== undefined) {\n            size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size;\n            size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size;\n            curRect.innerW = size;\n            curRect.w = size + deltaWidth;\n          }\n          size = newRect.innerH;\n          if (size !== undefined) {\n            size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size;\n            size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size;\n            curRect.innerH = size;\n            curRect.h = size + deltaHeight;\n          }\n          if (newRect.contentW !== undefined) {\n            curRect.contentW = newRect.contentW;\n          }\n          if (newRect.contentH !== undefined) {\n            curRect.contentH = newRect.contentH;\n          }\n          lastLayoutRect = self._lastLayoutRect;\n          if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) {\n            repaintControls = Control.repaintControls;\n            if (repaintControls) {\n              if (repaintControls.map && !repaintControls.map[self._id]) {\n                repaintControls.push(self);\n                repaintControls.map[self._id] = true;\n              }\n            }\n            lastLayoutRect.x = curRect.x;\n            lastLayoutRect.y = curRect.y;\n            lastLayoutRect.w = curRect.w;\n            lastLayoutRect.h = curRect.h;\n          }\n          return self;\n        }\n        return curRect;\n      },\n      repaint: function () {\n        var self = this;\n        var style, bodyStyle, bodyElm, rect, borderBox;\n        var borderW, borderH, lastRepaintRect, round, value;\n        round = !domGlobals.document.createRange ? Math.round : function (value) {\n          return value;\n        };\n        style = self.getEl().style;\n        rect = self._layoutRect;\n        lastRepaintRect = self._lastRepaintRect || {};\n        borderBox = self.borderBox;\n        borderW = borderBox.left + borderBox.right;\n        borderH = borderBox.top + borderBox.bottom;\n        if (rect.x !== lastRepaintRect.x) {\n          style.left = round(rect.x) + 'px';\n          lastRepaintRect.x = rect.x;\n        }\n        if (rect.y !== lastRepaintRect.y) {\n          style.top = round(rect.y) + 'px';\n          lastRepaintRect.y = rect.y;\n        }\n        if (rect.w !== lastRepaintRect.w) {\n          value = round(rect.w - borderW);\n          style.width = (value >= 0 ? value : 0) + 'px';\n          lastRepaintRect.w = rect.w;\n        }\n        if (rect.h !== lastRepaintRect.h) {\n          value = round(rect.h - borderH);\n          style.height = (value >= 0 ? value : 0) + 'px';\n          lastRepaintRect.h = rect.h;\n        }\n        if (self._hasBody && rect.innerW !== lastRepaintRect.innerW) {\n          value = round(rect.innerW);\n          bodyElm = self.getEl('body');\n          if (bodyElm) {\n            bodyStyle = bodyElm.style;\n            bodyStyle.width = (value >= 0 ? value : 0) + 'px';\n          }\n          lastRepaintRect.innerW = rect.innerW;\n        }\n        if (self._hasBody && rect.innerH !== lastRepaintRect.innerH) {\n          value = round(rect.innerH);\n          bodyElm = bodyElm || self.getEl('body');\n          if (bodyElm) {\n            bodyStyle = bodyStyle || bodyElm.style;\n            bodyStyle.height = (value >= 0 ? value : 0) + 'px';\n          }\n          lastRepaintRect.innerH = rect.innerH;\n        }\n        self._lastRepaintRect = lastRepaintRect;\n        self.fire('repaint', {}, false);\n      },\n      updateLayoutRect: function () {\n        var self = this;\n        self.parent()._lastRect = null;\n        funcs.css(self.getEl(), {\n          width: '',\n          height: ''\n        });\n        self._layoutRect = self._lastRepaintRect = self._lastLayoutRect = null;\n        self.initLayoutRect();\n      },\n      on: function (name, callback) {\n        var self = this;\n        function resolveCallbackName(name) {\n          var callback, scope;\n          if (typeof name !== 'string') {\n            return name;\n          }\n          return function (e) {\n            if (!callback) {\n              self.parentsAndSelf().each(function (ctrl) {\n                var callbacks = ctrl.settings.callbacks;\n                if (callbacks && (callback = callbacks[name])) {\n                  scope = ctrl;\n                  return false;\n                }\n              });\n            }\n            if (!callback) {\n              e.action = name;\n              this.fire('execute', e);\n              return;\n            }\n            return callback.call(scope, e);\n          };\n        }\n        getEventDispatcher(self).on(name, resolveCallbackName(callback));\n        return self;\n      },\n      off: function (name, callback) {\n        getEventDispatcher(this).off(name, callback);\n        return this;\n      },\n      fire: function (name, args, bubble) {\n        var self = this;\n        args = args || {};\n        if (!args.control) {\n          args.control = self;\n        }\n        args = getEventDispatcher(self).fire(name, args);\n        if (bubble !== false && self.parent) {\n          var parent = self.parent();\n          while (parent && !args.isPropagationStopped()) {\n            parent.fire(name, args, false);\n            parent = parent.parent();\n          }\n        }\n        return args;\n      },\n      hasEventListeners: function (name) {\n        return getEventDispatcher(this).has(name);\n      },\n      parents: function (selector) {\n        var self = this;\n        var ctrl, parents = new Collection$2();\n        for (ctrl = self.parent(); ctrl; ctrl = ctrl.parent()) {\n          parents.add(ctrl);\n        }\n        if (selector) {\n          parents = parents.filter(selector);\n        }\n        return parents;\n      },\n      parentsAndSelf: function (selector) {\n        return new Collection$2(this).add(this.parents(selector));\n      },\n      next: function () {\n        var parentControls = this.parent().items();\n        return parentControls[parentControls.indexOf(this) + 1];\n      },\n      prev: function () {\n        var parentControls = this.parent().items();\n        return parentControls[parentControls.indexOf(this) - 1];\n      },\n      innerHtml: function (html) {\n        this.$el.html(html);\n        return this;\n      },\n      getEl: function (suffix) {\n        var id = suffix ? this._id + '-' + suffix : this._id;\n        if (!this._elmCache[id]) {\n          this._elmCache[id] = global$9('#' + id)[0];\n        }\n        return this._elmCache[id];\n      },\n      show: function () {\n        return this.visible(true);\n      },\n      hide: function () {\n        return this.visible(false);\n      },\n      focus: function () {\n        try {\n          this.getEl().focus();\n        } catch (ex) {\n        }\n        return this;\n      },\n      blur: function () {\n        this.getEl().blur();\n        return this;\n      },\n      aria: function (name, value) {\n        var self = this, elm = self.getEl(self.ariaTarget);\n        if (typeof value === 'undefined') {\n          return self._aria[name];\n        }\n        self._aria[name] = value;\n        if (self.state.get('rendered')) {\n          elm.setAttribute(name === 'role' ? name : 'aria-' + name, value);\n        }\n        return self;\n      },\n      encode: function (text, translate) {\n        if (translate !== false) {\n          text = this.translate(text);\n        }\n        return (text || '').replace(/[&<>\"]/g, function (match) {\n          return '&#' + match.charCodeAt(0) + ';';\n        });\n      },\n      translate: function (text) {\n        return Control.translate ? Control.translate(text) : text;\n      },\n      before: function (items) {\n        var self = this, parent = self.parent();\n        if (parent) {\n          parent.insert(items, parent.items().indexOf(self), true);\n        }\n        return self;\n      },\n      after: function (items) {\n        var self = this, parent = self.parent();\n        if (parent) {\n          parent.insert(items, parent.items().indexOf(self));\n        }\n        return self;\n      },\n      remove: function () {\n        var self = this;\n        var elm = self.getEl();\n        var parent = self.parent();\n        var newItems, i;\n        if (self.items) {\n          var controls = self.items().toArray();\n          i = controls.length;\n          while (i--) {\n            controls[i].remove();\n          }\n        }\n        if (parent && parent.items) {\n          newItems = [];\n          parent.items().each(function (item) {\n            if (item !== self) {\n              newItems.push(item);\n            }\n          });\n          parent.items().set(newItems);\n          parent._lastRect = null;\n        }\n        if (self._eventsRoot && self._eventsRoot === self) {\n          global$9(elm).off();\n        }\n        var lookup = self.getRoot().controlIdLookup;\n        if (lookup) {\n          delete lookup[self._id];\n        }\n        if (elm && elm.parentNode) {\n          elm.parentNode.removeChild(elm);\n        }\n        self.state.set('rendered', false);\n        self.state.destroy();\n        self.fire('remove');\n        return self;\n      },\n      renderBefore: function (elm) {\n        global$9(elm).before(this.renderHtml());\n        this.postRender();\n        return this;\n      },\n      renderTo: function (elm) {\n        global$9(elm || this.getContainerElm()).append(this.renderHtml());\n        this.postRender();\n        return this;\n      },\n      preRender: function () {\n      },\n      render: function () {\n      },\n      renderHtml: function () {\n        return '<div id=\"' + this._id + '\" class=\"' + this.classes + '\"></div>';\n      },\n      postRender: function () {\n        var self = this;\n        var settings = self.settings;\n        var elm, box, parent, name, parentEventsRoot;\n        self.$el = global$9(self.getEl());\n        self.state.set('rendered', true);\n        for (name in settings) {\n          if (name.indexOf('on') === 0) {\n            self.on(name.substr(2), settings[name]);\n          }\n        }\n        if (self._eventsRoot) {\n          for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) {\n            parentEventsRoot = parent._eventsRoot;\n          }\n          if (parentEventsRoot) {\n            for (name in parentEventsRoot._nativeEvents) {\n              self._nativeEvents[name] = true;\n            }\n          }\n        }\n        bindPendingEvents(self);\n        if (settings.style) {\n          elm = self.getEl();\n          if (elm) {\n            elm.setAttribute('style', settings.style);\n            elm.style.cssText = settings.style;\n          }\n        }\n        if (self.settings.border) {\n          box = self.borderBox;\n          self.$el.css({\n            'border-top-width': box.top,\n            'border-right-width': box.right,\n            'border-bottom-width': box.bottom,\n            'border-left-width': box.left\n          });\n        }\n        var root = self.getRoot();\n        if (!root.controlIdLookup) {\n          root.controlIdLookup = {};\n        }\n        root.controlIdLookup[self._id] = self;\n        for (var key in self._aria) {\n          self.aria(key, self._aria[key]);\n        }\n        if (self.state.get('visible') === false) {\n          self.getEl().style.display = 'none';\n        }\n        self.bindStates();\n        self.state.on('change:visible', function (e) {\n          var state = e.value;\n          var parentCtrl;\n          if (self.state.get('rendered')) {\n            self.getEl().style.display = state === false ? 'none' : '';\n            self.getEl().getBoundingClientRect();\n          }\n          parentCtrl = self.parent();\n          if (parentCtrl) {\n            parentCtrl._lastRect = null;\n          }\n          self.fire(state ? 'show' : 'hide');\n          ReflowQueue.add(self);\n        });\n        self.fire('postrender', {}, false);\n      },\n      bindStates: function () {\n      },\n      scrollIntoView: function (align) {\n        function getOffset(elm, rootElm) {\n          var x, y, parent = elm;\n          x = y = 0;\n          while (parent && parent !== rootElm && parent.nodeType) {\n            x += parent.offsetLeft || 0;\n            y += parent.offsetTop || 0;\n            parent = parent.offsetParent;\n          }\n          return {\n            x: x,\n            y: y\n          };\n        }\n        var elm = this.getEl(), parentElm = elm.parentNode;\n        var x, y, width, height, parentWidth, parentHeight;\n        var pos = getOffset(elm, parentElm);\n        x = pos.x;\n        y = pos.y;\n        width = elm.offsetWidth;\n        height = elm.offsetHeight;\n        parentWidth = parentElm.clientWidth;\n        parentHeight = parentElm.clientHeight;\n        if (align === 'end') {\n          x -= parentWidth - width;\n          y -= parentHeight - height;\n        } else if (align === 'center') {\n          x -= parentWidth / 2 - width / 2;\n          y -= parentHeight / 2 - height / 2;\n        }\n        parentElm.scrollLeft = x;\n        parentElm.scrollTop = y;\n        return this;\n      },\n      getRoot: function () {\n        var ctrl = this, rootControl;\n        var parents = [];\n        while (ctrl) {\n          if (ctrl.rootControl) {\n            rootControl = ctrl.rootControl;\n            break;\n          }\n          parents.push(ctrl);\n          rootControl = ctrl;\n          ctrl = ctrl.parent();\n        }\n        if (!rootControl) {\n          rootControl = this;\n        }\n        var i = parents.length;\n        while (i--) {\n          parents[i].rootControl = rootControl;\n        }\n        return rootControl;\n      },\n      reflow: function () {\n        ReflowQueue.remove(this);\n        var parent = this.parent();\n        if (parent && parent._layout && !parent._layout.isNative()) {\n          parent.reflow();\n        }\n        return this;\n      }\n    };\n    global$2.each('text title visible disabled active value'.split(' '), function (name) {\n      proto$1[name] = function (value) {\n        if (arguments.length === 0) {\n          return this.state.get(name);\n        }\n        if (typeof value !== 'undefined') {\n          this.state.set(name, value);\n        }\n        return this;\n      };\n    });\n    Control = global$a.extend(proto$1);\n    function getEventDispatcher(obj) {\n      if (!obj._eventDispatcher) {\n        obj._eventDispatcher = new global$b({\n          scope: obj,\n          toggleEvent: function (name, state) {\n            if (state && global$b.isNative(name)) {\n              if (!obj._nativeEvents) {\n                obj._nativeEvents = {};\n              }\n              obj._nativeEvents[name] = true;\n              if (obj.state.get('rendered')) {\n                bindPendingEvents(obj);\n              }\n            }\n          }\n        });\n      }\n      return obj._eventDispatcher;\n    }\n    function bindPendingEvents(eventCtrl) {\n      var i, l, parents, eventRootCtrl, nativeEvents, name;\n      function delegate(e) {\n        var control = eventCtrl.getParentCtrl(e.target);\n        if (control) {\n          control.fire(e.type, e);\n        }\n      }\n      function mouseLeaveHandler() {\n        var ctrl = eventRootCtrl._lastHoverCtrl;\n        if (ctrl) {\n          ctrl.fire('mouseleave', { target: ctrl.getEl() });\n          ctrl.parents().each(function (ctrl) {\n            ctrl.fire('mouseleave', { target: ctrl.getEl() });\n          });\n          eventRootCtrl._lastHoverCtrl = null;\n        }\n      }\n      function mouseEnterHandler(e) {\n        var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents;\n        if (ctrl !== lastCtrl) {\n          eventRootCtrl._lastHoverCtrl = ctrl;\n          parents = ctrl.parents().toArray().reverse();\n          parents.push(ctrl);\n          if (lastCtrl) {\n            lastParents = lastCtrl.parents().toArray().reverse();\n            lastParents.push(lastCtrl);\n            for (idx = 0; idx < lastParents.length; idx++) {\n              if (parents[idx] !== lastParents[idx]) {\n                break;\n              }\n            }\n            for (i = lastParents.length - 1; i >= idx; i--) {\n              lastCtrl = lastParents[i];\n              lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() });\n            }\n          }\n          for (i = idx; i < parents.length; i++) {\n            ctrl = parents[i];\n            ctrl.fire('mouseenter', { target: ctrl.getEl() });\n          }\n        }\n      }\n      function fixWheelEvent(e) {\n        e.preventDefault();\n        if (e.type === 'mousewheel') {\n          e.deltaY = -1 / 40 * e.wheelDelta;\n          if (e.wheelDeltaX) {\n            e.deltaX = -1 / 40 * e.wheelDeltaX;\n          }\n        } else {\n          e.deltaX = 0;\n          e.deltaY = e.detail;\n        }\n        e = eventCtrl.fire('wheel', e);\n      }\n      nativeEvents = eventCtrl._nativeEvents;\n      if (nativeEvents) {\n        parents = eventCtrl.parents().toArray();\n        parents.unshift(eventCtrl);\n        for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) {\n          eventRootCtrl = parents[i]._eventsRoot;\n        }\n        if (!eventRootCtrl) {\n          eventRootCtrl = parents[parents.length - 1] || eventCtrl;\n        }\n        eventCtrl._eventsRoot = eventRootCtrl;\n        for (l = i, i = 0; i < l; i++) {\n          parents[i]._eventsRoot = eventRootCtrl;\n        }\n        var eventRootDelegates = eventRootCtrl._delegates;\n        if (!eventRootDelegates) {\n          eventRootDelegates = eventRootCtrl._delegates = {};\n        }\n        for (name in nativeEvents) {\n          if (!nativeEvents) {\n            return false;\n          }\n          if (name === 'wheel' && !hasWheelEventSupport) {\n            if (hasMouseWheelEventSupport) {\n              global$9(eventCtrl.getEl()).on('mousewheel', fixWheelEvent);\n            } else {\n              global$9(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent);\n            }\n            continue;\n          }\n          if (name === 'mouseenter' || name === 'mouseleave') {\n            if (!eventRootCtrl._hasMouseEnter) {\n              global$9(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler);\n              eventRootCtrl._hasMouseEnter = 1;\n            }\n          } else if (!eventRootDelegates[name]) {\n            global$9(eventRootCtrl.getEl()).on(name, delegate);\n            eventRootDelegates[name] = true;\n          }\n          nativeEvents[name] = false;\n        }\n      }\n    }\n    var Control$1 = Control;\n\n    var hasTabstopData = function (elm) {\n      return elm.getAttribute('data-mce-tabstop') ? true : false;\n    };\n    function KeyboardNavigation (settings) {\n      var root = settings.root;\n      var focusedElement, focusedControl;\n      function isElement(node) {\n        return node && node.nodeType === 1;\n      }\n      try {\n        focusedElement = domGlobals.document.activeElement;\n      } catch (ex) {\n        focusedElement = domGlobals.document.body;\n      }\n      focusedControl = root.getParentCtrl(focusedElement);\n      function getRole(elm) {\n        elm = elm || focusedElement;\n        if (isElement(elm)) {\n          return elm.getAttribute('role');\n        }\n        return null;\n      }\n      function getParentRole(elm) {\n        var role, parent = elm || focusedElement;\n        while (parent = parent.parentNode) {\n          if (role = getRole(parent)) {\n            return role;\n          }\n        }\n      }\n      function getAriaProp(name) {\n        var elm = focusedElement;\n        if (isElement(elm)) {\n          return elm.getAttribute('aria-' + name);\n        }\n      }\n      function isTextInputElement(elm) {\n        var tagName = elm.tagName.toUpperCase();\n        return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';\n      }\n      function canFocus(elm) {\n        if (isTextInputElement(elm) && !elm.hidden) {\n          return true;\n        }\n        if (hasTabstopData(elm)) {\n          return true;\n        }\n        if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) {\n          return true;\n        }\n        return false;\n      }\n      function getFocusElements(elm) {\n        var elements = [];\n        function collect(elm) {\n          if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) {\n            return;\n          }\n          if (canFocus(elm)) {\n            elements.push(elm);\n          }\n          for (var i = 0; i < elm.childNodes.length; i++) {\n            collect(elm.childNodes[i]);\n          }\n        }\n        collect(elm || root.getEl());\n        return elements;\n      }\n      function getNavigationRoot(targetControl) {\n        var navigationRoot, controls;\n        targetControl = targetControl || focusedControl;\n        controls = targetControl.parents().toArray();\n        controls.unshift(targetControl);\n        for (var i = 0; i < controls.length; i++) {\n          navigationRoot = controls[i];\n          if (navigationRoot.settings.ariaRoot) {\n            break;\n          }\n        }\n        return navigationRoot;\n      }\n      function focusFirst(targetControl) {\n        var navigationRoot = getNavigationRoot(targetControl);\n        var focusElements = getFocusElements(navigationRoot.getEl());\n        if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) {\n          moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements);\n        } else {\n          moveFocusToIndex(0, focusElements);\n        }\n      }\n      function moveFocusToIndex(idx, elements) {\n        if (idx < 0) {\n          idx = elements.length - 1;\n        } else if (idx >= elements.length) {\n          idx = 0;\n        }\n        if (elements[idx]) {\n          elements[idx].focus();\n        }\n        return idx;\n      }\n      function moveFocus(dir, elements) {\n        var idx = -1;\n        var navigationRoot = getNavigationRoot();\n        elements = elements || getFocusElements(navigationRoot.getEl());\n        for (var i = 0; i < elements.length; i++) {\n          if (elements[i] === focusedElement) {\n            idx = i;\n          }\n        }\n        idx += dir;\n        navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements);\n      }\n      function left() {\n        var parentRole = getParentRole();\n        if (parentRole === 'tablist') {\n          moveFocus(-1, getFocusElements(focusedElement.parentNode));\n        } else if (focusedControl.parent().submenu) {\n          cancel();\n        } else {\n          moveFocus(-1);\n        }\n      }\n      function right() {\n        var role = getRole(), parentRole = getParentRole();\n        if (parentRole === 'tablist') {\n          moveFocus(1, getFocusElements(focusedElement.parentNode));\n        } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) {\n          enter();\n        } else {\n          moveFocus(1);\n        }\n      }\n      function up() {\n        moveFocus(-1);\n      }\n      function down() {\n        var role = getRole(), parentRole = getParentRole();\n        if (role === 'menuitem' && parentRole === 'menubar') {\n          enter();\n        } else if (role === 'button' && getAriaProp('haspopup')) {\n          enter({ key: 'down' });\n        } else {\n          moveFocus(1);\n        }\n      }\n      function tab(e) {\n        var parentRole = getParentRole();\n        if (parentRole === 'tablist') {\n          var elm = getFocusElements(focusedControl.getEl('body'))[0];\n          if (elm) {\n            elm.focus();\n          }\n        } else {\n          moveFocus(e.shiftKey ? -1 : 1);\n        }\n      }\n      function cancel() {\n        focusedControl.fire('cancel');\n      }\n      function enter(aria) {\n        aria = aria || {};\n        focusedControl.fire('click', {\n          target: focusedElement,\n          aria: aria\n        });\n      }\n      root.on('keydown', function (e) {\n        function handleNonTabOrEscEvent(e, handler) {\n          if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) {\n            return;\n          }\n          if (getRole(focusedElement) === 'slider') {\n            return;\n          }\n          if (handler(e) !== false) {\n            e.preventDefault();\n          }\n        }\n        if (e.isDefaultPrevented()) {\n          return;\n        }\n        switch (e.keyCode) {\n        case 37:\n          handleNonTabOrEscEvent(e, left);\n          break;\n        case 39:\n          handleNonTabOrEscEvent(e, right);\n          break;\n        case 38:\n          handleNonTabOrEscEvent(e, up);\n          break;\n        case 40:\n          handleNonTabOrEscEvent(e, down);\n          break;\n        case 27:\n          cancel();\n          break;\n        case 14:\n        case 13:\n        case 32:\n          handleNonTabOrEscEvent(e, enter);\n          break;\n        case 9:\n          tab(e);\n          e.preventDefault();\n          break;\n        }\n      });\n      root.on('focusin', function (e) {\n        focusedElement = e.target;\n        focusedControl = e.control;\n      });\n      return { focusFirst: focusFirst };\n    }\n\n    var selectorCache = {};\n    var Container = Control$1.extend({\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        settings = self.settings;\n        if (settings.fixed) {\n          self.state.set('fixed', true);\n        }\n        self._items = new Collection$2();\n        if (self.isRtl()) {\n          self.classes.add('rtl');\n        }\n        self.bodyClasses = new ClassList(function () {\n          if (self.state.get('rendered')) {\n            self.getEl('body').className = this.toString();\n          }\n        });\n        self.bodyClasses.prefix = self.classPrefix;\n        self.classes.add('container');\n        self.bodyClasses.add('container-body');\n        if (settings.containerCls) {\n          self.classes.add(settings.containerCls);\n        }\n        self._layout = global$4.create((settings.layout || '') + 'layout');\n        if (self.settings.items) {\n          self.add(self.settings.items);\n        } else {\n          self.add(self.render());\n        }\n        self._hasBody = true;\n      },\n      items: function () {\n        return this._items;\n      },\n      find: function (selector) {\n        selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector);\n        return selector.find(this);\n      },\n      add: function (items) {\n        var self = this;\n        self.items().add(self.create(items)).parent(self);\n        return self;\n      },\n      focus: function (keyboard) {\n        var self = this;\n        var focusCtrl, keyboardNav, items;\n        if (keyboard) {\n          keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav;\n          if (keyboardNav) {\n            keyboardNav.focusFirst(self);\n            return;\n          }\n        }\n        items = self.find('*');\n        if (self.statusbar) {\n          items.add(self.statusbar.items());\n        }\n        items.each(function (ctrl) {\n          if (ctrl.settings.autofocus) {\n            focusCtrl = null;\n            return false;\n          }\n          if (ctrl.canFocus) {\n            focusCtrl = focusCtrl || ctrl;\n          }\n        });\n        if (focusCtrl) {\n          focusCtrl.focus();\n        }\n        return self;\n      },\n      replace: function (oldItem, newItem) {\n        var ctrlElm;\n        var items = this.items();\n        var i = items.length;\n        while (i--) {\n          if (items[i] === oldItem) {\n            items[i] = newItem;\n            break;\n          }\n        }\n        if (i >= 0) {\n          ctrlElm = newItem.getEl();\n          if (ctrlElm) {\n            ctrlElm.parentNode.removeChild(ctrlElm);\n          }\n          ctrlElm = oldItem.getEl();\n          if (ctrlElm) {\n            ctrlElm.parentNode.removeChild(ctrlElm);\n          }\n        }\n        newItem.parent(this);\n      },\n      create: function (items) {\n        var self = this;\n        var settings;\n        var ctrlItems = [];\n        if (!global$2.isArray(items)) {\n          items = [items];\n        }\n        global$2.each(items, function (item) {\n          if (item) {\n            if (!(item instanceof Control$1)) {\n              if (typeof item === 'string') {\n                item = { type: item };\n              }\n              settings = global$2.extend({}, self.settings.defaults, item);\n              item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null);\n              item = global$4.create(settings);\n            }\n            ctrlItems.push(item);\n          }\n        });\n        return ctrlItems;\n      },\n      renderNew: function () {\n        var self = this;\n        self.items().each(function (ctrl, index) {\n          var containerElm;\n          ctrl.parent(self);\n          if (!ctrl.state.get('rendered')) {\n            containerElm = self.getEl('body');\n            if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) {\n              global$9(containerElm.childNodes[index]).before(ctrl.renderHtml());\n            } else {\n              global$9(containerElm).append(ctrl.renderHtml());\n            }\n            ctrl.postRender();\n            ReflowQueue.add(ctrl);\n          }\n        });\n        self._layout.applyClasses(self.items().filter(':visible'));\n        self._lastRect = null;\n        return self;\n      },\n      append: function (items) {\n        return this.add(items).renderNew();\n      },\n      prepend: function (items) {\n        var self = this;\n        self.items().set(self.create(items).concat(self.items().toArray()));\n        return self.renderNew();\n      },\n      insert: function (items, index, before) {\n        var self = this;\n        var curItems, beforeItems, afterItems;\n        items = self.create(items);\n        curItems = self.items();\n        if (!before && index < curItems.length - 1) {\n          index += 1;\n        }\n        if (index >= 0 && index < curItems.length) {\n          beforeItems = curItems.slice(0, index).toArray();\n          afterItems = curItems.slice(index).toArray();\n          curItems.set(beforeItems.concat(items, afterItems));\n        }\n        return self.renderNew();\n      },\n      fromJSON: function (data) {\n        var self = this;\n        for (var name in data) {\n          self.find('#' + name).value(data[name]);\n        }\n        return self;\n      },\n      toJSON: function () {\n        var self = this, data = {};\n        self.find('*').each(function (ctrl) {\n          var name = ctrl.name(), value = ctrl.value();\n          if (name && typeof value !== 'undefined') {\n            data[name] = value;\n          }\n        });\n        return data;\n      },\n      renderHtml: function () {\n        var self = this, layout = self._layout, role = this.settings.role;\n        self.preRender();\n        layout.preRender(self);\n        return '<div id=\"' + self._id + '\" class=\"' + self.classes + '\"' + (role ? ' role=\"' + this.settings.role + '\"' : '') + '>' + '<div id=\"' + self._id + '-body\" class=\"' + self.bodyClasses + '\">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';\n      },\n      postRender: function () {\n        var self = this;\n        var box;\n        self.items().exec('postRender');\n        self._super();\n        self._layout.postRender(self);\n        self.state.set('rendered', true);\n        if (self.settings.style) {\n          self.$el.css(self.settings.style);\n        }\n        if (self.settings.border) {\n          box = self.borderBox;\n          self.$el.css({\n            'border-top-width': box.top,\n            'border-right-width': box.right,\n            'border-bottom-width': box.bottom,\n            'border-left-width': box.left\n          });\n        }\n        if (!self.parent()) {\n          self.keyboardNav = KeyboardNavigation({ root: self });\n        }\n        return self;\n      },\n      initLayoutRect: function () {\n        var self = this, layoutRect = self._super();\n        self._layout.recalc(self);\n        return layoutRect;\n      },\n      recalc: function () {\n        var self = this;\n        var rect = self._layoutRect;\n        var lastRect = self._lastRect;\n        if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) {\n          self._layout.recalc(self);\n          rect = self.layoutRect();\n          self._lastRect = {\n            x: rect.x,\n            y: rect.y,\n            w: rect.w,\n            h: rect.h\n          };\n          return true;\n        }\n      },\n      reflow: function () {\n        var i;\n        ReflowQueue.remove(this);\n        if (this.visible()) {\n          Control$1.repaintControls = [];\n          Control$1.repaintControls.map = {};\n          this.recalc();\n          i = Control$1.repaintControls.length;\n          while (i--) {\n            Control$1.repaintControls[i].repaint();\n          }\n          if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') {\n            this.repaint();\n          }\n          Control$1.repaintControls = [];\n        }\n        return this;\n      }\n    });\n\n    function getDocumentSize(doc) {\n      var documentElement, body, scrollWidth, clientWidth;\n      var offsetWidth, scrollHeight, clientHeight, offsetHeight;\n      var max = Math.max;\n      documentElement = doc.documentElement;\n      body = doc.body;\n      scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);\n      clientWidth = max(documentElement.clientWidth, body.clientWidth);\n      offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);\n      scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);\n      clientHeight = max(documentElement.clientHeight, body.clientHeight);\n      offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);\n      return {\n        width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,\n        height: scrollHeight < offsetHeight ? clientHeight : scrollHeight\n      };\n    }\n    function updateWithTouchData(e) {\n      var keys, i;\n      if (e.changedTouches) {\n        keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');\n        for (i = 0; i < keys.length; i++) {\n          e[keys[i]] = e.changedTouches[0][keys[i]];\n        }\n      }\n    }\n    function DragHelper (id, settings) {\n      var $eventOverlay;\n      var doc = settings.document || domGlobals.document;\n      var downButton;\n      var start, stop, drag, startX, startY;\n      settings = settings || {};\n      var handleElement = doc.getElementById(settings.handle || id);\n      start = function (e) {\n        var docSize = getDocumentSize(doc);\n        var handleElm, cursor;\n        updateWithTouchData(e);\n        e.preventDefault();\n        downButton = e.button;\n        handleElm = handleElement;\n        startX = e.screenX;\n        startY = e.screenY;\n        if (domGlobals.window.getComputedStyle) {\n          cursor = domGlobals.window.getComputedStyle(handleElm, null).getPropertyValue('cursor');\n        } else {\n          cursor = handleElm.runtimeStyle.cursor;\n        }\n        $eventOverlay = global$9('<div></div>').css({\n          position: 'absolute',\n          top: 0,\n          left: 0,\n          width: docSize.width,\n          height: docSize.height,\n          zIndex: 2147483647,\n          opacity: 0.0001,\n          cursor: cursor\n        }).appendTo(doc.body);\n        global$9(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop);\n        settings.start(e);\n      };\n      drag = function (e) {\n        updateWithTouchData(e);\n        if (e.button !== downButton) {\n          return stop(e);\n        }\n        e.deltaX = e.screenX - startX;\n        e.deltaY = e.screenY - startY;\n        e.preventDefault();\n        settings.drag(e);\n      };\n      stop = function (e) {\n        updateWithTouchData(e);\n        global$9(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop);\n        $eventOverlay.remove();\n        if (settings.stop) {\n          settings.stop(e);\n        }\n      };\n      this.destroy = function () {\n        global$9(handleElement).off();\n      };\n      global$9(handleElement).on('mousedown touchstart', start);\n    }\n\n    var Scrollable = {\n      init: function () {\n        var self = this;\n        self.on('repaint', self.renderScroll);\n      },\n      renderScroll: function () {\n        var self = this, margin = 2;\n        function repaintScroll() {\n          var hasScrollH, hasScrollV, bodyElm;\n          function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) {\n            var containerElm, scrollBarElm, scrollThumbElm;\n            var containerSize, scrollSize, ratio, rect;\n            var posNameLower, sizeNameLower;\n            scrollBarElm = self.getEl('scroll' + axisName);\n            if (scrollBarElm) {\n              posNameLower = posName.toLowerCase();\n              sizeNameLower = sizeName.toLowerCase();\n              global$9(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1);\n              if (!hasScroll) {\n                global$9(scrollBarElm).css('display', 'none');\n                return;\n              }\n              global$9(scrollBarElm).css('display', 'block');\n              containerElm = self.getEl('body');\n              scrollThumbElm = self.getEl('scroll' + axisName + 't');\n              containerSize = containerElm['client' + sizeName] - margin * 2;\n              containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0;\n              scrollSize = containerElm['scroll' + sizeName];\n              ratio = containerSize / scrollSize;\n              rect = {};\n              rect[posNameLower] = containerElm['offset' + posName] + margin;\n              rect[sizeNameLower] = containerSize;\n              global$9(scrollBarElm).css(rect);\n              rect = {};\n              rect[posNameLower] = containerElm['scroll' + posName] * ratio;\n              rect[sizeNameLower] = containerSize * ratio;\n              global$9(scrollThumbElm).css(rect);\n            }\n          }\n          bodyElm = self.getEl('body');\n          hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth;\n          hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight;\n          repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height');\n          repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width');\n        }\n        function addScroll() {\n          function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) {\n            var scrollStart;\n            var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix;\n            global$9(self.getEl()).append('<div id=\"' + axisId + '\" class=\"' + prefix + 'scrollbar ' + prefix + 'scrollbar-' + axisName + '\">' + '<div id=\"' + axisId + 't\" class=\"' + prefix + 'scrollbar-thumb\"></div>' + '</div>');\n            self.draghelper = new DragHelper(axisId + 't', {\n              start: function () {\n                scrollStart = self.getEl('body')['scroll' + posName];\n                global$9('#' + axisId).addClass(prefix + 'active');\n              },\n              drag: function (e) {\n                var ratio, hasScrollH, hasScrollV, containerSize;\n                var layoutRect = self.layoutRect();\n                hasScrollH = layoutRect.contentW > layoutRect.innerW;\n                hasScrollV = layoutRect.contentH > layoutRect.innerH;\n                containerSize = self.getEl('body')['client' + sizeName] - margin * 2;\n                containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0;\n                ratio = containerSize / self.getEl('body')['scroll' + sizeName];\n                self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio;\n              },\n              stop: function () {\n                global$9('#' + axisId).removeClass(prefix + 'active');\n              }\n            });\n          }\n          self.classes.add('scroll');\n          addScrollAxis('v', 'Top', 'Height', 'Y', 'Width');\n          addScrollAxis('h', 'Left', 'Width', 'X', 'Height');\n        }\n        if (self.settings.autoScroll) {\n          if (!self._hasScroll) {\n            self._hasScroll = true;\n            addScroll();\n            self.on('wheel', function (e) {\n              var bodyEl = self.getEl('body');\n              bodyEl.scrollLeft += (e.deltaX || 0) * 10;\n              bodyEl.scrollTop += e.deltaY * 10;\n              repaintScroll();\n            });\n            global$9(self.getEl('body')).on('scroll', repaintScroll);\n          }\n          repaintScroll();\n        }\n      }\n    };\n\n    var Panel = Container.extend({\n      Defaults: {\n        layout: 'fit',\n        containerCls: 'panel'\n      },\n      Mixins: [Scrollable],\n      renderHtml: function () {\n        var self = this;\n        var layout = self._layout;\n        var innerHtml = self.settings.html;\n        self.preRender();\n        layout.preRender(self);\n        if (typeof innerHtml === 'undefined') {\n          innerHtml = '<div id=\"' + self._id + '-body\" class=\"' + self.bodyClasses + '\">' + layout.renderHtml(self) + '</div>';\n        } else {\n          if (typeof innerHtml === 'function') {\n            innerHtml = innerHtml.call(self);\n          }\n          self._hasBody = false;\n        }\n        return '<div id=\"' + self._id + '\" class=\"' + self.classes + '\" hidefocus=\"1\" tabindex=\"-1\" role=\"group\">' + (self._preBodyHtml || '') + innerHtml + '</div>';\n      }\n    });\n\n    var Resizable = {\n      resizeToContent: function () {\n        this._layoutRect.autoResize = true;\n        this._lastRect = null;\n        this.reflow();\n      },\n      resizeTo: function (w, h) {\n        if (w <= 1 || h <= 1) {\n          var rect = funcs.getWindowSize();\n          w = w <= 1 ? w * rect.w : w;\n          h = h <= 1 ? h * rect.h : h;\n        }\n        this._layoutRect.autoResize = false;\n        return this.layoutRect({\n          minW: w,\n          minH: h,\n          w: w,\n          h: h\n        }).reflow();\n      },\n      resizeBy: function (dw, dh) {\n        var self = this, rect = self.layoutRect();\n        return self.resizeTo(rect.w + dw, rect.h + dh);\n      }\n    };\n\n    var documentClickHandler, documentScrollHandler, windowResizeHandler;\n    var visiblePanels = [];\n    var zOrder = [];\n    var hasModal;\n    function isChildOf(ctrl, parent) {\n      while (ctrl) {\n        if (ctrl === parent) {\n          return true;\n        }\n        ctrl = ctrl.parent();\n      }\n    }\n    function skipOrHidePanels(e) {\n      var i = visiblePanels.length;\n      while (i--) {\n        var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target);\n        if (panel.settings.autohide) {\n          if (clickCtrl) {\n            if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) {\n              continue;\n            }\n          }\n          e = panel.fire('autohide', { target: e.target });\n          if (!e.isDefaultPrevented()) {\n            panel.hide();\n          }\n        }\n      }\n    }\n    function bindDocumentClickHandler() {\n      if (!documentClickHandler) {\n        documentClickHandler = function (e) {\n          if (e.button === 2) {\n            return;\n          }\n          skipOrHidePanels(e);\n        };\n        global$9(domGlobals.document).on('click touchstart', documentClickHandler);\n      }\n    }\n    function bindDocumentScrollHandler() {\n      if (!documentScrollHandler) {\n        documentScrollHandler = function () {\n          var i;\n          i = visiblePanels.length;\n          while (i--) {\n            repositionPanel(visiblePanels[i]);\n          }\n        };\n        global$9(domGlobals.window).on('scroll', documentScrollHandler);\n      }\n    }\n    function bindWindowResizeHandler() {\n      if (!windowResizeHandler) {\n        var docElm_1 = domGlobals.document.documentElement;\n        var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight;\n        windowResizeHandler = function () {\n          if (!domGlobals.document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) {\n            clientWidth_1 = docElm_1.clientWidth;\n            clientHeight_1 = docElm_1.clientHeight;\n            FloatPanel.hideAll();\n          }\n        };\n        global$9(domGlobals.window).on('resize', windowResizeHandler);\n      }\n    }\n    function repositionPanel(panel) {\n      var scrollY = funcs.getViewPort().y;\n      function toggleFixedChildPanels(fixed, deltaY) {\n        var parent;\n        for (var i = 0; i < visiblePanels.length; i++) {\n          if (visiblePanels[i] !== panel) {\n            parent = visiblePanels[i].parent();\n            while (parent && (parent = parent.parent())) {\n              if (parent === panel) {\n                visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint();\n              }\n            }\n          }\n        }\n      }\n      if (panel.settings.autofix) {\n        if (!panel.state.get('fixed')) {\n          panel._autoFixY = panel.layoutRect().y;\n          if (panel._autoFixY < scrollY) {\n            panel.fixed(true).layoutRect({ y: 0 }).repaint();\n            toggleFixedChildPanels(true, scrollY - panel._autoFixY);\n          }\n        } else {\n          if (panel._autoFixY > scrollY) {\n            panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint();\n            toggleFixedChildPanels(false, panel._autoFixY - scrollY);\n          }\n        }\n      }\n    }\n    function addRemove(add, ctrl) {\n      var i, zIndex = FloatPanel.zIndex || 65535, topModal;\n      if (add) {\n        zOrder.push(ctrl);\n      } else {\n        i = zOrder.length;\n        while (i--) {\n          if (zOrder[i] === ctrl) {\n            zOrder.splice(i, 1);\n          }\n        }\n      }\n      if (zOrder.length) {\n        for (i = 0; i < zOrder.length; i++) {\n          if (zOrder[i].modal) {\n            zIndex++;\n            topModal = zOrder[i];\n          }\n          zOrder[i].getEl().style.zIndex = zIndex;\n          zOrder[i].zIndex = zIndex;\n          zIndex++;\n        }\n      }\n      var modalBlockEl = global$9('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0];\n      if (topModal) {\n        global$9(modalBlockEl).css('z-index', topModal.zIndex - 1);\n      } else if (modalBlockEl) {\n        modalBlockEl.parentNode.removeChild(modalBlockEl);\n        hasModal = false;\n      }\n      FloatPanel.currentZIndex = zIndex;\n    }\n    var FloatPanel = Panel.extend({\n      Mixins: [\n        Movable,\n        Resizable\n      ],\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        self._eventsRoot = self;\n        self.classes.add('floatpanel');\n        if (settings.autohide) {\n          bindDocumentClickHandler();\n          bindWindowResizeHandler();\n          visiblePanels.push(self);\n        }\n        if (settings.autofix) {\n          bindDocumentScrollHandler();\n          self.on('move', function () {\n            repositionPanel(this);\n          });\n        }\n        self.on('postrender show', function (e) {\n          if (e.control === self) {\n            var $modalBlockEl_1;\n            var prefix_1 = self.classPrefix;\n            if (self.modal && !hasModal) {\n              $modalBlockEl_1 = global$9('#' + prefix_1 + 'modal-block', self.getContainerElm());\n              if (!$modalBlockEl_1[0]) {\n                $modalBlockEl_1 = global$9('<div id=\"' + prefix_1 + 'modal-block\" class=\"' + prefix_1 + 'reset ' + prefix_1 + 'fade\"></div>').appendTo(self.getContainerElm());\n              }\n              global$7.setTimeout(function () {\n                $modalBlockEl_1.addClass(prefix_1 + 'in');\n                global$9(self.getEl()).addClass(prefix_1 + 'in');\n              });\n              hasModal = true;\n            }\n            addRemove(true, self);\n          }\n        });\n        self.on('show', function () {\n          self.parents().each(function (ctrl) {\n            if (ctrl.state.get('fixed')) {\n              self.fixed(true);\n              return false;\n            }\n          });\n        });\n        if (settings.popover) {\n          self._preBodyHtml = '<div class=\"' + self.classPrefix + 'arrow\"></div>';\n          self.classes.add('popover').add('bottom').add(self.isRtl() ? 'end' : 'start');\n        }\n        self.aria('label', settings.ariaLabel);\n        self.aria('labelledby', self._id);\n        self.aria('describedby', self.describedBy || self._id + '-none');\n      },\n      fixed: function (state) {\n        var self = this;\n        if (self.state.get('fixed') !== state) {\n          if (self.state.get('rendered')) {\n            var viewport = funcs.getViewPort();\n            if (state) {\n              self.layoutRect().y -= viewport.y;\n            } else {\n              self.layoutRect().y += viewport.y;\n            }\n          }\n          self.classes.toggle('fixed', state);\n          self.state.set('fixed', state);\n        }\n        return self;\n      },\n      show: function () {\n        var self = this;\n        var i;\n        var state = self._super();\n        i = visiblePanels.length;\n        while (i--) {\n          if (visiblePanels[i] === self) {\n            break;\n          }\n        }\n        if (i === -1) {\n          visiblePanels.push(self);\n        }\n        return state;\n      },\n      hide: function () {\n        removeVisiblePanel(this);\n        addRemove(false, this);\n        return this._super();\n      },\n      hideAll: function () {\n        FloatPanel.hideAll();\n      },\n      close: function () {\n        var self = this;\n        if (!self.fire('close').isDefaultPrevented()) {\n          self.remove();\n          addRemove(false, self);\n        }\n        return self;\n      },\n      remove: function () {\n        removeVisiblePanel(this);\n        this._super();\n      },\n      postRender: function () {\n        var self = this;\n        if (self.settings.bodyRole) {\n          this.getEl('body').setAttribute('role', self.settings.bodyRole);\n        }\n        return self._super();\n      }\n    });\n    FloatPanel.hideAll = function () {\n      var i = visiblePanels.length;\n      while (i--) {\n        var panel = visiblePanels[i];\n        if (panel && panel.settings.autohide) {\n          panel.hide();\n          visiblePanels.splice(i, 1);\n        }\n      }\n    };\n    function removeVisiblePanel(panel) {\n      var i;\n      i = visiblePanels.length;\n      while (i--) {\n        if (visiblePanels[i] === panel) {\n          visiblePanels.splice(i, 1);\n        }\n      }\n      i = zOrder.length;\n      while (i--) {\n        if (zOrder[i] === panel) {\n          zOrder.splice(i, 1);\n        }\n      }\n    }\n\n    var isFixed$1 = function (inlineToolbarContainer, editor) {\n      return !!(inlineToolbarContainer && !editor.settings.ui_container);\n    };\n    var render$1 = function (editor, theme, args) {\n      var panel, inlineToolbarContainer;\n      var DOM = global$3.DOM;\n      var fixedToolbarContainer = getFixedToolbarContainer(editor);\n      if (fixedToolbarContainer) {\n        inlineToolbarContainer = DOM.select(fixedToolbarContainer)[0];\n      }\n      var reposition = function () {\n        if (panel && panel.moveRel && panel.visible() && !panel._fixed) {\n          var scrollContainer = editor.selection.getScrollContainer(), body = editor.getBody();\n          var deltaX = 0, deltaY = 0;\n          if (scrollContainer) {\n            var bodyPos = DOM.getPos(body), scrollContainerPos = DOM.getPos(scrollContainer);\n            deltaX = Math.max(0, scrollContainerPos.x - bodyPos.x);\n            deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y);\n          }\n          panel.fixed(false).moveRel(body, editor.rtl ? [\n            'tr-br',\n            'br-tr'\n          ] : [\n            'tl-bl',\n            'bl-tl',\n            'tr-br'\n          ]).moveBy(deltaX, deltaY);\n        }\n      };\n      var show = function () {\n        if (panel) {\n          panel.show();\n          reposition();\n          DOM.addClass(editor.getBody(), 'mce-edit-focus');\n        }\n      };\n      var hide = function () {\n        if (panel) {\n          panel.hide();\n          FloatPanel.hideAll();\n          DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n        }\n      };\n      var render = function () {\n        if (panel) {\n          if (!panel.visible()) {\n            show();\n          }\n          return;\n        }\n        panel = theme.panel = global$4.create({\n          type: inlineToolbarContainer ? 'panel' : 'floatpanel',\n          role: 'application',\n          classes: 'tinymce tinymce-inline',\n          layout: 'flex',\n          direction: 'column',\n          align: 'stretch',\n          autohide: false,\n          autofix: true,\n          fixed: isFixed$1(inlineToolbarContainer, editor),\n          border: 1,\n          items: [\n            hasMenubar(editor) === false ? null : {\n              type: 'menubar',\n              border: '0 0 1 0',\n              items: Menubar.createMenuButtons(editor)\n            },\n            Toolbar.createToolbars(editor, getToolbarSize(editor))\n          ]\n        });\n        UiContainer.setUiContainer(editor, panel);\n        Events.fireBeforeRenderUI(editor);\n        if (inlineToolbarContainer) {\n          panel.renderTo(inlineToolbarContainer).reflow();\n        } else {\n          panel.renderTo().reflow();\n        }\n        A11y.addKeys(editor, panel);\n        show();\n        ContextToolbars.addContextualToolbars(editor);\n        editor.on('nodeChange', reposition);\n        editor.on('ResizeWindow', reposition);\n        editor.on('activate', show);\n        editor.on('deactivate', hide);\n        editor.nodeChanged();\n      };\n      editor.settings.content_editable = true;\n      editor.on('focus', function () {\n        if (isSkinDisabled(editor) === false && args.skinUiCss) {\n          DOM.styleSheetLoader.load(args.skinUiCss, render, render);\n        } else {\n          render();\n        }\n      });\n      editor.on('blur hide', hide);\n      editor.on('remove', function () {\n        if (panel) {\n          panel.remove();\n          panel = null;\n        }\n      });\n      if (isSkinDisabled(editor) === false && args.skinUiCss) {\n        DOM.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));\n      } else {\n        SkinLoaded.fireSkinLoaded(editor)();\n      }\n      return {};\n    };\n    var Inline = { render: render$1 };\n\n    function Throbber (elm, inline) {\n      var self = this;\n      var state;\n      var classPrefix = Control$1.classPrefix;\n      var timer;\n      self.show = function (time, callback) {\n        function render() {\n          if (state) {\n            global$9(elm).append('<div class=\"' + classPrefix + 'throbber' + (inline ? ' ' + classPrefix + 'throbber-inline' : '') + '\"></div>');\n            if (callback) {\n              callback();\n            }\n          }\n        }\n        self.hide();\n        state = true;\n        if (time) {\n          timer = global$7.setTimeout(render, time);\n        } else {\n          render();\n        }\n        return self;\n      };\n      self.hide = function () {\n        var child = elm.lastChild;\n        global$7.clearTimeout(timer);\n        if (child && child.className.indexOf('throbber') !== -1) {\n          child.parentNode.removeChild(child);\n        }\n        state = false;\n        return self;\n      };\n    }\n\n    var setup = function (editor, theme) {\n      var throbber;\n      editor.on('ProgressState', function (e) {\n        throbber = throbber || new Throbber(theme.panel.getEl('body'));\n        if (e.state) {\n          throbber.show(e.time);\n        } else {\n          throbber.hide();\n        }\n      });\n    };\n    var ProgressState = { setup: setup };\n\n    var renderUI = function (editor, theme, args) {\n      var skinUrl = getSkinUrl(editor);\n      if (skinUrl) {\n        args.skinUiCss = skinUrl + '/skin.min.css';\n        editor.contentCSS.push(skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css');\n      }\n      ProgressState.setup(editor, theme);\n      return isInline(editor) ? Inline.render(editor, theme, args) : Iframe.render(editor, theme, args);\n    };\n    var Render = { renderUI: renderUI };\n\n    var Tooltip = Control$1.extend({\n      Mixins: [Movable],\n      Defaults: { classes: 'widget tooltip tooltip-n' },\n      renderHtml: function () {\n        var self = this, prefix = self.classPrefix;\n        return '<div id=\"' + self._id + '\" class=\"' + self.classes + '\" role=\"presentation\">' + '<div class=\"' + prefix + 'tooltip-arrow\"></div>' + '<div class=\"' + prefix + 'tooltip-inner\">' + self.encode(self.state.get('text')) + '</div>' + '</div>';\n      },\n      bindStates: function () {\n        var self = this;\n        self.state.on('change:text', function (e) {\n          self.getEl().lastChild.innerHTML = self.encode(e.value);\n        });\n        return self._super();\n      },\n      repaint: function () {\n        var self = this;\n        var style, rect;\n        style = self.getEl().style;\n        rect = self._layoutRect;\n        style.left = rect.x + 'px';\n        style.top = rect.y + 'px';\n        style.zIndex = 65535 + 65535;\n      }\n    });\n\n    var Widget = Control$1.extend({\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        settings = self.settings;\n        self.canFocus = true;\n        if (settings.tooltip && Widget.tooltips !== false) {\n          self.on('mouseenter', function (e) {\n            var tooltip = self.tooltip().moveTo(-65535);\n            if (e.control === self) {\n              var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [\n                'bc-tc',\n                'bc-tl',\n                'bc-tr'\n              ]);\n              tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');\n              tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');\n              tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');\n              tooltip.moveRel(self.getEl(), rel);\n            } else {\n              tooltip.hide();\n            }\n          });\n          self.on('mouseleave mousedown click', function () {\n            self.tooltip().remove();\n            self._tooltip = null;\n          });\n        }\n        self.aria('label', settings.ariaLabel || settings.tooltip);\n      },\n      tooltip: function () {\n        if (!this._tooltip) {\n          this._tooltip = new Tooltip({ type: 'tooltip' });\n          UiContainer.inheritUiContainer(this, this._tooltip);\n          this._tooltip.renderTo();\n        }\n        return this._tooltip;\n      },\n      postRender: function () {\n        var self = this, settings = self.settings;\n        self._super();\n        if (!self.parent() && (settings.width || settings.height)) {\n          self.initLayoutRect();\n          self.repaint();\n        }\n        if (settings.autofocus) {\n          self.focus();\n        }\n      },\n      bindStates: function () {\n        var self = this;\n        function disable(state) {\n          self.aria('disabled', state);\n          self.classes.toggle('disabled', state);\n        }\n        function active(state) {\n          self.aria('pressed', state);\n          self.classes.toggle('active', state);\n        }\n        self.state.on('change:disabled', function (e) {\n          disable(e.value);\n        });\n        self.state.on('change:active', function (e) {\n          active(e.value);\n        });\n        if (self.state.get('disabled')) {\n          disable(true);\n        }\n        if (self.state.get('active')) {\n          active(true);\n        }\n        return self._super();\n      },\n      remove: function () {\n        this._super();\n        if (this._tooltip) {\n          this._tooltip.remove();\n          this._tooltip = null;\n        }\n      }\n    });\n\n    var Progress = Widget.extend({\n      Defaults: { value: 0 },\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        self.classes.add('progress');\n        if (!self.settings.filter) {\n          self.settings.filter = function (value) {\n            return Math.round(value);\n          };\n        }\n      },\n      renderHtml: function () {\n        var self = this, id = self._id, prefix = this.classPrefix;\n        return '<div id=\"' + id + '\" class=\"' + self.classes + '\">' + '<div class=\"' + prefix + 'bar-container\">' + '<div class=\"' + prefix + 'bar\"></div>' + '</div>' + '<div class=\"' + prefix + 'text\">0%</div>' + '</div>';\n      },\n      postRender: function () {\n        var self = this;\n        self._super();\n        self.value(self.settings.value);\n        return self;\n      },\n      bindStates: function () {\n        var self = this;\n        function setValue(value) {\n          value = self.settings.filter(value);\n          self.getEl().lastChild.innerHTML = value + '%';\n          self.getEl().firstChild.firstChild.style.width = value + '%';\n        }\n        self.state.on('change:value', function (e) {\n          setValue(e.value);\n        });\n        setValue(self.state.get('value'));\n        return self._super();\n      }\n    });\n\n    var updateLiveRegion = function (ctx, text) {\n      ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : '');\n    };\n    var Notification = Control$1.extend({\n      Mixins: [Movable],\n      Defaults: { classes: 'widget notification' },\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        self.maxWidth = settings.maxWidth;\n        if (settings.text) {\n          self.text(settings.text);\n        }\n        if (settings.icon) {\n          self.icon = settings.icon;\n        }\n        if (settings.color) {\n          self.color = settings.color;\n        }\n        if (settings.type) {\n          self.classes.add('notification-' + settings.type);\n        }\n        if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) {\n          self.closeButton = false;\n        } else {\n          self.classes.add('has-close');\n          self.closeButton = true;\n        }\n        if (settings.progressBar) {\n          self.progressBar = new Progress();\n        }\n        self.on('click', function (e) {\n          if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) {\n            self.close();\n          }\n        });\n      },\n      renderHtml: function () {\n        var self = this;\n        var prefix = self.classPrefix;\n        var icon = '', closeButton = '', progressBar = '', notificationStyle = '';\n        if (self.icon) {\n          icon = '<i class=\"' + prefix + 'ico' + ' ' + prefix + 'i-' + self.icon + '\"></i>';\n        }\n        notificationStyle = ' style=\"max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';\"' : '\"');\n        if (self.closeButton) {\n          closeButton = '<button type=\"button\" class=\"' + prefix + 'close\" aria-hidden=\"true\">\\xD7</button>';\n        }\n        if (self.progressBar) {\n          progressBar = self.progressBar.renderHtml();\n        }\n        return '<div id=\"' + self._id + '\" class=\"' + self.classes + '\"' + notificationStyle + ' role=\"presentation\">' + icon + '<div class=\"' + prefix + 'notification-inner\">' + self.state.get('text') + '</div>' + progressBar + closeButton + '<div style=\"clip: rect(1px, 1px, 1px, 1px);height: 1px;overflow: hidden;position: absolute;width: 1px;\"' + ' aria-live=\"assertive\" aria-relevant=\"additions\" aria-atomic=\"true\"></div>' + '</div>';\n      },\n      postRender: function () {\n        var self = this;\n        global$7.setTimeout(function () {\n          self.$el.addClass(self.classPrefix + 'in');\n          updateLiveRegion(self, self.state.get('text'));\n        }, 100);\n        return self._super();\n      },\n      bindStates: function () {\n        var self = this;\n        self.state.on('change:text', function (e) {\n          self.getEl().firstChild.innerHTML = e.value;\n          updateLiveRegion(self, e.value);\n        });\n        if (self.progressBar) {\n          self.progressBar.bindStates();\n          self.progressBar.state.on('change:value', function (e) {\n            updateLiveRegion(self, self.state.get('text'));\n          });\n        }\n        return self._super();\n      },\n      close: function () {\n        var self = this;\n        if (!self.fire('close').isDefaultPrevented()) {\n          self.remove();\n        }\n        return self;\n      },\n      repaint: function () {\n        var self = this;\n        var style, rect;\n        style = self.getEl().style;\n        rect = self._layoutRect;\n        style.left = rect.x + 'px';\n        style.top = rect.y + 'px';\n        style.zIndex = 65535 - 1;\n      }\n    });\n\n    function NotificationManagerImpl (editor) {\n      var getEditorContainer = function (editor) {\n        return editor.inline ? editor.getElement() : editor.getContentAreaContainer();\n      };\n      var getContainerWidth = function () {\n        var container = getEditorContainer(editor);\n        return funcs.getSize(container).width;\n      };\n      var prePositionNotifications = function (notifications) {\n        each(notifications, function (notification) {\n          notification.moveTo(0, 0);\n        });\n      };\n      var positionNotifications = function (notifications) {\n        if (notifications.length > 0) {\n          var firstItem = notifications.slice(0, 1)[0];\n          var container = getEditorContainer(editor);\n          firstItem.moveRel(container, 'tc-tc');\n          each(notifications, function (notification, index) {\n            if (index > 0) {\n              notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');\n            }\n          });\n        }\n      };\n      var reposition = function (notifications) {\n        prePositionNotifications(notifications);\n        positionNotifications(notifications);\n      };\n      var open = function (args, closeCallback) {\n        var extendedArgs = global$2.extend(args, { maxWidth: getContainerWidth() });\n        var notif = new Notification(extendedArgs);\n        notif.args = extendedArgs;\n        if (extendedArgs.timeout > 0) {\n          notif.timer = setTimeout(function () {\n            notif.close();\n            closeCallback();\n          }, extendedArgs.timeout);\n        }\n        notif.on('close', function () {\n          closeCallback();\n        });\n        notif.renderTo();\n        return notif;\n      };\n      var close = function (notification) {\n        notification.close();\n      };\n      var getArgs = function (notification) {\n        return notification.args;\n      };\n      return {\n        open: open,\n        close: close,\n        reposition: reposition,\n        getArgs: getArgs\n      };\n    }\n\n    var windows = [];\n    var oldMetaValue = '';\n    function toggleFullScreenState(state) {\n      var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0';\n      var viewport = global$9('meta[name=viewport]')[0], contentValue;\n      if (global$8.overrideViewPort === false) {\n        return;\n      }\n      if (!viewport) {\n        viewport = domGlobals.document.createElement('meta');\n        viewport.setAttribute('name', 'viewport');\n        domGlobals.document.getElementsByTagName('head')[0].appendChild(viewport);\n      }\n      contentValue = viewport.getAttribute('content');\n      if (contentValue && typeof oldMetaValue !== 'undefined') {\n        oldMetaValue = contentValue;\n      }\n      viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue);\n    }\n    function toggleBodyFullScreenClasses(classPrefix, state) {\n      if (checkFullscreenWindows() && state === false) {\n        global$9([\n          domGlobals.document.documentElement,\n          domGlobals.document.body\n        ]).removeClass(classPrefix + 'fullscreen');\n      }\n    }\n    function checkFullscreenWindows() {\n      for (var i = 0; i < windows.length; i++) {\n        if (windows[i]._fullscreen) {\n          return true;\n        }\n      }\n      return false;\n    }\n    function handleWindowResize() {\n      if (!global$8.desktop) {\n        var lastSize_1 = {\n          w: domGlobals.window.innerWidth,\n          h: domGlobals.window.innerHeight\n        };\n        global$7.setInterval(function () {\n          var w = domGlobals.window.innerWidth, h = domGlobals.window.innerHeight;\n          if (lastSize_1.w !== w || lastSize_1.h !== h) {\n            lastSize_1 = {\n              w: w,\n              h: h\n            };\n            global$9(domGlobals.window).trigger('resize');\n          }\n        }, 100);\n      }\n      function reposition() {\n        var i;\n        var rect = funcs.getWindowSize();\n        var layoutRect;\n        for (i = 0; i < windows.length; i++) {\n          layoutRect = windows[i].layoutRect();\n          windows[i].moveTo(windows[i].settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2), windows[i].settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2));\n        }\n      }\n      global$9(domGlobals.window).on('resize', reposition);\n    }\n    var Window = FloatPanel.extend({\n      modal: true,\n      Defaults: {\n        border: 1,\n        layout: 'flex',\n        containerCls: 'panel',\n        role: 'dialog',\n        callbacks: {\n          submit: function () {\n            this.fire('submit', { data: this.toJSON() });\n          },\n          close: function () {\n            this.close();\n          }\n        }\n      },\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        if (self.isRtl()) {\n          self.classes.add('rtl');\n        }\n        self.classes.add('window');\n        self.bodyClasses.add('window-body');\n        self.state.set('fixed', true);\n        if (settings.buttons) {\n          self.statusbar = new Panel({\n            layout: 'flex',\n            border: '1 0 0 0',\n            spacing: 3,\n            padding: 10,\n            align: 'center',\n            pack: self.isRtl() ? 'start' : 'end',\n            defaults: { type: 'button' },\n            items: settings.buttons\n          });\n          self.statusbar.classes.add('foot');\n          self.statusbar.parent(self);\n        }\n        self.on('click', function (e) {\n          var closeClass = self.classPrefix + 'close';\n          if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) {\n            self.close();\n          }\n        });\n        self.on('cancel', function () {\n          self.close();\n        });\n        self.on('move', function (e) {\n          if (e.control === self) {\n            FloatPanel.hideAll();\n          }\n        });\n        self.aria('describedby', self.describedBy || self._id + '-none');\n        self.aria('label', settings.title);\n        self._fullscreen = false;\n      },\n      recalc: function () {\n        var self = this;\n        var statusbar = self.statusbar;\n        var layoutRect, width, x, needsRecalc;\n        if (self._fullscreen) {\n          self.layoutRect(funcs.getWindowSize());\n          self.layoutRect().contentH = self.layoutRect().innerH;\n        }\n        self._super();\n        layoutRect = self.layoutRect();\n        if (self.settings.title && !self._fullscreen) {\n          width = layoutRect.headerW;\n          if (width > layoutRect.w) {\n            x = layoutRect.x - Math.max(0, width / 2);\n            self.layoutRect({\n              w: width,\n              x: x\n            });\n            needsRecalc = true;\n          }\n        }\n        if (statusbar) {\n          statusbar.layoutRect({ w: self.layoutRect().innerW }).recalc();\n          width = statusbar.layoutRect().minW + layoutRect.deltaW;\n          if (width > layoutRect.w) {\n            x = layoutRect.x - Math.max(0, width - layoutRect.w);\n            self.layoutRect({\n              w: width,\n              x: x\n            });\n            needsRecalc = true;\n          }\n        }\n        if (needsRecalc) {\n          self.recalc();\n        }\n      },\n      initLayoutRect: function () {\n        var self = this;\n        var layoutRect = self._super();\n        var deltaH = 0, headEl;\n        if (self.settings.title && !self._fullscreen) {\n          headEl = self.getEl('head');\n          var size = funcs.getSize(headEl);\n          layoutRect.headerW = size.width;\n          layoutRect.headerH = size.height;\n          deltaH += layoutRect.headerH;\n        }\n        if (self.statusbar) {\n          deltaH += self.statusbar.layoutRect().h;\n        }\n        layoutRect.deltaH += deltaH;\n        layoutRect.minH += deltaH;\n        layoutRect.h += deltaH;\n        var rect = funcs.getWindowSize();\n        layoutRect.x = self.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2);\n        layoutRect.y = self.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2);\n        return layoutRect;\n      },\n      renderHtml: function () {\n        var self = this, layout = self._layout, id = self._id, prefix = self.classPrefix;\n        var settings = self.settings;\n        var headerHtml = '', footerHtml = '', html = settings.html;\n        self.preRender();\n        layout.preRender(self);\n        if (settings.title) {\n          headerHtml = '<div id=\"' + id + '-head\" class=\"' + prefix + 'window-head\">' + '<div id=\"' + id + '-title\" class=\"' + prefix + 'title\">' + self.encode(settings.title) + '</div>' + '<div id=\"' + id + '-dragh\" class=\"' + prefix + 'dragh\"></div>' + '<button type=\"button\" class=\"' + prefix + 'close\" aria-hidden=\"true\">' + '<i class=\"mce-ico mce-i-remove\"></i>' + '</button>' + '</div>';\n        }\n        if (settings.url) {\n          html = '<iframe src=\"' + settings.url + '\" tabindex=\"-1\"></iframe>';\n        }\n        if (typeof html === 'undefined') {\n          html = layout.renderHtml(self);\n        }\n        if (self.statusbar) {\n          footerHtml = self.statusbar.renderHtml();\n        }\n        return '<div id=\"' + id + '\" class=\"' + self.classes + '\" hidefocus=\"1\">' + '<div class=\"' + self.classPrefix + 'reset\" role=\"application\">' + headerHtml + '<div id=\"' + id + '-body\" class=\"' + self.bodyClasses + '\">' + html + '</div>' + footerHtml + '</div>' + '</div>';\n      },\n      fullscreen: function (state) {\n        var self = this;\n        var documentElement = domGlobals.document.documentElement;\n        var slowRendering;\n        var prefix = self.classPrefix;\n        var layoutRect;\n        if (state !== self._fullscreen) {\n          global$9(domGlobals.window).on('resize', function () {\n            var time;\n            if (self._fullscreen) {\n              if (!slowRendering) {\n                time = new Date().getTime();\n                var rect = funcs.getWindowSize();\n                self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n                if (new Date().getTime() - time > 50) {\n                  slowRendering = true;\n                }\n              } else {\n                if (!self._timer) {\n                  self._timer = global$7.setTimeout(function () {\n                    var rect = funcs.getWindowSize();\n                    self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n                    self._timer = 0;\n                  }, 50);\n                }\n              }\n            }\n          });\n          layoutRect = self.layoutRect();\n          self._fullscreen = state;\n          if (!state) {\n            self.borderBox = BoxUtils.parseBox(self.settings.border);\n            self.getEl('head').style.display = '';\n            layoutRect.deltaH += layoutRect.headerH;\n            global$9([\n              documentElement,\n              domGlobals.document.body\n            ]).removeClass(prefix + 'fullscreen');\n            self.classes.remove('fullscreen');\n            self.moveTo(self._initial.x, self._initial.y).resizeTo(self._initial.w, self._initial.h);\n          } else {\n            self._initial = {\n              x: layoutRect.x,\n              y: layoutRect.y,\n              w: layoutRect.w,\n              h: layoutRect.h\n            };\n            self.borderBox = BoxUtils.parseBox('0');\n            self.getEl('head').style.display = 'none';\n            layoutRect.deltaH -= layoutRect.headerH + 2;\n            global$9([\n              documentElement,\n              domGlobals.document.body\n            ]).addClass(prefix + 'fullscreen');\n            self.classes.add('fullscreen');\n            var rect = funcs.getWindowSize();\n            self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n          }\n        }\n        return self.reflow();\n      },\n      postRender: function () {\n        var self = this;\n        var startPos;\n        setTimeout(function () {\n          self.classes.add('in');\n          self.fire('open');\n        }, 0);\n        self._super();\n        if (self.statusbar) {\n          self.statusbar.postRender();\n        }\n        self.focus();\n        this.dragHelper = new DragHelper(self._id + '-dragh', {\n          start: function () {\n            startPos = {\n              x: self.layoutRect().x,\n              y: self.layoutRect().y\n            };\n          },\n          drag: function (e) {\n            self.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY);\n          }\n        });\n        self.on('submit', function (e) {\n          if (!e.isDefaultPrevented()) {\n            self.close();\n          }\n        });\n        windows.push(self);\n        toggleFullScreenState(true);\n      },\n      submit: function () {\n        return this.fire('submit', { data: this.toJSON() });\n      },\n      remove: function () {\n        var self = this;\n        var i;\n        self.dragHelper.destroy();\n        self._super();\n        if (self.statusbar) {\n          this.statusbar.remove();\n        }\n        toggleBodyFullScreenClasses(self.classPrefix, false);\n        i = windows.length;\n        while (i--) {\n          if (windows[i] === self) {\n            windows.splice(i, 1);\n          }\n        }\n        toggleFullScreenState(windows.length > 0);\n      },\n      getContentWindow: function () {\n        var ifr = this.getEl().getElementsByTagName('iframe')[0];\n        return ifr ? ifr.contentWindow : null;\n      }\n    });\n    handleWindowResize();\n\n    var MessageBox = Window.extend({\n      init: function (settings) {\n        settings = {\n          border: 1,\n          padding: 20,\n          layout: 'flex',\n          pack: 'center',\n          align: 'center',\n          containerCls: 'panel',\n          autoScroll: true,\n          buttons: {\n            type: 'button',\n            text: 'Ok',\n            action: 'ok'\n          },\n          items: {\n            type: 'label',\n            multiline: true,\n            maxWidth: 500,\n            maxHeight: 200\n          }\n        };\n        this._super(settings);\n      },\n      Statics: {\n        OK: 1,\n        OK_CANCEL: 2,\n        YES_NO: 3,\n        YES_NO_CANCEL: 4,\n        msgBox: function (settings) {\n          var buttons;\n          var callback = settings.callback || function () {\n          };\n          function createButton(text, status, primary) {\n            return {\n              type: 'button',\n              text: text,\n              subtype: primary ? 'primary' : '',\n              onClick: function (e) {\n                e.control.parents()[1].close();\n                callback(status);\n              }\n            };\n          }\n          switch (settings.buttons) {\n          case MessageBox.OK_CANCEL:\n            buttons = [\n              createButton('Ok', true, true),\n              createButton('Cancel', false)\n            ];\n            break;\n          case MessageBox.YES_NO:\n          case MessageBox.YES_NO_CANCEL:\n            buttons = [\n              createButton('Yes', 1, true),\n              createButton('No', 0)\n            ];\n            if (settings.buttons === MessageBox.YES_NO_CANCEL) {\n              buttons.push(createButton('Cancel', -1));\n            }\n            break;\n          default:\n            buttons = [createButton('Ok', true, true)];\n            break;\n          }\n          return new Window({\n            padding: 20,\n            x: settings.x,\n            y: settings.y,\n            minWidth: 300,\n            minHeight: 100,\n            layout: 'flex',\n            pack: 'center',\n            align: 'center',\n            buttons: buttons,\n            title: settings.title,\n            role: 'alertdialog',\n            items: {\n              type: 'label',\n              multiline: true,\n              maxWidth: 500,\n              maxHeight: 200,\n              text: settings.text\n            },\n            onPostRender: function () {\n              this.aria('describedby', this.items()[0]._id);\n            },\n            onClose: settings.onClose,\n            onCancel: function () {\n              callback(false);\n            }\n          }).renderTo(domGlobals.document.body).reflow();\n        },\n        alert: function (settings, callback) {\n          if (typeof settings === 'string') {\n            settings = { text: settings };\n          }\n          settings.callback = callback;\n          return MessageBox.msgBox(settings);\n        },\n        confirm: function (settings, callback) {\n          if (typeof settings === 'string') {\n            settings = { text: settings };\n          }\n          settings.callback = callback;\n          settings.buttons = MessageBox.OK_CANCEL;\n          return MessageBox.msgBox(settings);\n        }\n      }\n    });\n\n    function WindowManagerImpl (editor) {\n      var open = function (args, params, closeCallback) {\n        var win;\n        args.title = args.title || ' ';\n        args.url = args.url || args.file;\n        if (args.url) {\n          args.width = parseInt(args.width || 320, 10);\n          args.height = parseInt(args.height || 240, 10);\n        }\n        if (args.body) {\n          args.items = {\n            defaults: args.defaults,\n            type: args.bodyType || 'form',\n            items: args.body,\n            data: args.data,\n            callbacks: args.commands\n          };\n        }\n        if (!args.url && !args.buttons) {\n          args.buttons = [\n            {\n              text: 'Ok',\n              subtype: 'primary',\n              onclick: function () {\n                win.find('form')[0].submit();\n              }\n            },\n            {\n              text: 'Cancel',\n              onclick: function () {\n                win.close();\n              }\n            }\n          ];\n        }\n        win = new Window(args);\n        win.on('close', function () {\n          closeCallback(win);\n        });\n        if (args.data) {\n          win.on('postRender', function () {\n            this.find('*').each(function (ctrl) {\n              var name = ctrl.name();\n              if (name in args.data) {\n                ctrl.value(args.data[name]);\n              }\n            });\n          });\n        }\n        win.features = args || {};\n        win.params = params || {};\n        win = win.renderTo(domGlobals.document.body).reflow();\n        return win;\n      };\n      var alert = function (message, choiceCallback, closeCallback) {\n        var win;\n        win = MessageBox.alert(message, function () {\n          choiceCallback();\n        });\n        win.on('close', function () {\n          closeCallback(win);\n        });\n        return win;\n      };\n      var confirm = function (message, choiceCallback, closeCallback) {\n        var win;\n        win = MessageBox.confirm(message, function (state) {\n          choiceCallback(state);\n        });\n        win.on('close', function () {\n          closeCallback(win);\n        });\n        return win;\n      };\n      var close = function (window) {\n        window.close();\n      };\n      var getParams = function (window) {\n        return window.params;\n      };\n      var setParams = function (window, params) {\n        window.params = params;\n      };\n      return {\n        open: open,\n        alert: alert,\n        confirm: confirm,\n        close: close,\n        getParams: getParams,\n        setParams: setParams\n      };\n    }\n\n    var get = function (editor) {\n      var renderUI = function (args) {\n        return Render.renderUI(editor, this, args);\n      };\n      var resizeTo = function (w, h) {\n        return Resize.resizeTo(editor, w, h);\n      };\n      var resizeBy = function (dw, dh) {\n        return Resize.resizeBy(editor, dw, dh);\n      };\n      var getNotificationManagerImpl = function () {\n        return NotificationManagerImpl(editor);\n      };\n      var getWindowManagerImpl = function () {\n        return WindowManagerImpl();\n      };\n      return {\n        renderUI: renderUI,\n        resizeTo: resizeTo,\n        resizeBy: resizeBy,\n        getNotificationManagerImpl: getNotificationManagerImpl,\n        getWindowManagerImpl: getWindowManagerImpl\n      };\n    };\n    var ThemeApi = { get: get };\n\n    var Layout = global$a.extend({\n      Defaults: {\n        firstControlClass: 'first',\n        lastControlClass: 'last'\n      },\n      init: function (settings) {\n        this.settings = global$2.extend({}, this.Defaults, settings);\n      },\n      preRender: function (container) {\n        container.bodyClasses.add(this.settings.containerClass);\n      },\n      applyClasses: function (items) {\n        var self = this;\n        var settings = self.settings;\n        var firstClass, lastClass, firstItem, lastItem;\n        firstClass = settings.firstControlClass;\n        lastClass = settings.lastControlClass;\n        items.each(function (item) {\n          item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass);\n          if (item.visible()) {\n            if (!firstItem) {\n              firstItem = item;\n            }\n            lastItem = item;\n          }\n        });\n        if (firstItem) {\n          firstItem.classes.add(firstClass);\n        }\n        if (lastItem) {\n          lastItem.classes.add(lastClass);\n        }\n      },\n      renderHtml: function (container) {\n        var self = this;\n        var html = '';\n        self.applyClasses(container.items());\n        container.items().each(function (item) {\n          html += item.renderHtml();\n        });\n        return html;\n      },\n      recalc: function () {\n      },\n      postRender: function () {\n      },\n      isNative: function () {\n        return false;\n      }\n    });\n\n    var AbsoluteLayout = Layout.extend({\n      Defaults: {\n        containerClass: 'abs-layout',\n        controlClass: 'abs-layout-item'\n      },\n      recalc: function (container) {\n        container.items().filter(':visible').each(function (ctrl) {\n          var settings = ctrl.settings;\n          ctrl.layoutRect({\n            x: settings.x,\n            y: settings.y,\n            w: settings.w,\n            h: settings.h\n          });\n          if (ctrl.recalc) {\n            ctrl.recalc();\n          }\n        });\n      },\n      renderHtml: function (container) {\n        return '<div id=\"' + container._id + '-absend\" class=\"' + container.classPrefix + 'abs-end\"></div>' + this._super(container);\n      }\n    });\n\n    var Button = Widget.extend({\n      Defaults: {\n        classes: 'widget btn',\n        role: 'button'\n      },\n      init: function (settings) {\n        var self = this;\n        var size;\n        self._super(settings);\n        settings = self.settings;\n        size = self.settings.size;\n        self.on('click mousedown', function (e) {\n          e.preventDefault();\n        });\n        self.on('touchstart', function (e) {\n          self.fire('click', e);\n          e.preventDefault();\n        });\n        if (settings.subtype) {\n          self.classes.add(settings.subtype);\n        }\n        if (size) {\n          self.classes.add('btn-' + size);\n        }\n        if (settings.icon) {\n          self.icon(settings.icon);\n        }\n      },\n      icon: function (icon) {\n        if (!arguments.length) {\n          return this.state.get('icon');\n        }\n        this.state.set('icon', icon);\n        return this;\n      },\n      repaint: function () {\n        var btnElm = this.getEl().firstChild;\n        var btnStyle;\n        if (btnElm) {\n          btnStyle = btnElm.style;\n          btnStyle.width = btnStyle.height = '100%';\n        }\n        this._super();\n      },\n      renderHtml: function () {\n        var self = this, id = self._id, prefix = self.classPrefix;\n        var icon = self.state.get('icon'), image;\n        var text = self.state.get('text');\n        var textHtml = '';\n        var ariaPressed;\n        var settings = self.settings;\n        image = settings.image;\n        if (image) {\n          icon = 'none';\n          if (typeof image !== 'string') {\n            image = domGlobals.window.getSelection ? image[0] : image[1];\n          }\n          image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n        } else {\n          image = '';\n        }\n        if (text) {\n          self.classes.add('btn-has-text');\n          textHtml = '<span class=\"' + prefix + 'txt\">' + self.encode(text) + '</span>';\n        }\n        icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n        ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed=\"' + settings.active + '\"' : '';\n        return '<div id=\"' + id + '\" class=\"' + self.classes + '\" tabindex=\"-1\"' + ariaPressed + '>' + '<button id=\"' + id + '-button\" role=\"presentation\" type=\"button\" tabindex=\"-1\">' + (icon ? '<i class=\"' + icon + '\"' + image + '></i>' : '') + textHtml + '</button>' + '</div>';\n      },\n      bindStates: function () {\n        var self = this, $ = self.$, textCls = self.classPrefix + 'txt';\n        function setButtonText(text) {\n          var $span = $('span.' + textCls, self.getEl());\n          if (text) {\n            if (!$span[0]) {\n              $('button:first', self.getEl()).append('<span class=\"' + textCls + '\"></span>');\n              $span = $('span.' + textCls, self.getEl());\n            }\n            $span.html(self.encode(text));\n          } else {\n            $span.remove();\n          }\n          self.classes.toggle('btn-has-text', !!text);\n        }\n        self.state.on('change:text', function (e) {\n          setButtonText(e.value);\n        });\n        self.state.on('change:icon', function (e) {\n          var icon = e.value;\n          var prefix = self.classPrefix;\n          self.settings.icon = icon;\n          icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n          var btnElm = self.getEl().firstChild;\n          var iconElm = btnElm.getElementsByTagName('i')[0];\n          if (icon) {\n            if (!iconElm || iconElm !== btnElm.firstChild) {\n              iconElm = domGlobals.document.createElement('i');\n              btnElm.insertBefore(iconElm, btnElm.firstChild);\n            }\n            iconElm.className = icon;\n          } else if (iconElm) {\n            btnElm.removeChild(iconElm);\n          }\n          setButtonText(self.state.get('text'));\n        });\n        return self._super();\n      }\n    });\n\n    var BrowseButton = Button.extend({\n      init: function (settings) {\n        var self = this;\n        settings = global$2.extend({\n          text: 'Browse...',\n          multiple: false,\n          accept: null\n        }, settings);\n        self._super(settings);\n        self.classes.add('browsebutton');\n        if (settings.multiple) {\n          self.classes.add('multiple');\n        }\n      },\n      postRender: function () {\n        var self = this;\n        var input = funcs.create('input', {\n          type: 'file',\n          id: self._id + '-browse',\n          accept: self.settings.accept\n        });\n        self._super();\n        global$9(input).on('change', function (e) {\n          var files = e.target.files;\n          self.value = function () {\n            if (!files.length) {\n              return null;\n            } else if (self.settings.multiple) {\n              return files;\n            } else {\n              return files[0];\n            }\n          };\n          e.preventDefault();\n          if (files.length) {\n            self.fire('change', e);\n          }\n        });\n        global$9(input).on('click', function (e) {\n          e.stopPropagation();\n        });\n        global$9(self.getEl('button')).on('click touchstart', function (e) {\n          e.stopPropagation();\n          input.click();\n          e.preventDefault();\n        });\n        self.getEl().appendChild(input);\n      },\n      remove: function () {\n        global$9(this.getEl('button')).off();\n        global$9(this.getEl('input')).off();\n        this._super();\n      }\n    });\n\n    var ButtonGroup = Container.extend({\n      Defaults: {\n        defaultType: 'button',\n        role: 'group'\n      },\n      renderHtml: function () {\n        var self = this, layout = self._layout;\n        self.classes.add('btn-group');\n        self.preRender();\n        layout.preRender(self);\n        return '<div id=\"' + self._id + '\" class=\"' + self.classes + '\">' + '<div id=\"' + self._id + '-body\">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';\n      }\n    });\n\n    var Checkbox = Widget.extend({\n      Defaults: {\n        classes: 'checkbox',\n        role: 'checkbox',\n        checked: false\n      },\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        self.on('click mousedown', function (e) {\n          e.preventDefault();\n        });\n        self.on('click', function (e) {\n          e.preventDefault();\n          if (!self.disabled()) {\n            self.checked(!self.checked());\n          }\n        });\n        self.checked(self.settings.checked);\n      },\n      checked: function (state) {\n        if (!arguments.length) {\n          return this.state.get('checked');\n        }\n        this.state.set('checked', state);\n        return this;\n      },\n      value: function (state) {\n        if (!arguments.length) {\n          return this.checked();\n        }\n        return this.checked(state);\n      },\n      renderHtml: function () {\n        var self = this, id = self._id, prefix = self.classPrefix;\n        return '<div id=\"' + id + '\" class=\"' + self.classes + '\" unselectable=\"on\" aria-labelledby=\"' + id + '-al\" tabindex=\"-1\">' + '<i class=\"' + prefix + 'ico ' + prefix + 'i-checkbox\"></i>' + '<span id=\"' + id + '-al\" class=\"' + prefix + 'label\">' + self.encode(self.state.get('text')) + '</span>' + '</div>';\n      },\n      bindStates: function () {\n        var self = this;\n        function checked(state) {\n          self.classes.toggle('checked', state);\n          self.aria('checked', state);\n        }\n        self.state.on('change:text', function (e) {\n          self.getEl('al').firstChild.data = self.translate(e.value);\n        });\n        self.state.on('change:checked change:value', function (e) {\n          self.fire('change');\n          checked(e.value);\n        });\n        self.state.on('change:icon', function (e) {\n          var icon = e.value;\n          var prefix = self.classPrefix;\n          if (typeof icon === 'undefined') {\n            return self.settings.icon;\n          }\n          self.settings.icon = icon;\n          icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n          var btnElm = self.getEl().firstChild;\n          var iconElm = btnElm.getElementsByTagName('i')[0];\n          if (icon) {\n            if (!iconElm || iconElm !== btnElm.firstChild) {\n              iconElm = domGlobals.document.createElement('i');\n              btnElm.insertBefore(iconElm, btnElm.firstChild);\n            }\n            iconElm.className = icon;\n          } else if (iconElm) {\n            btnElm.removeChild(iconElm);\n          }\n        });\n        if (self.state.get('checked')) {\n          checked(true);\n        }\n        return self._super();\n      }\n    });\n\n    var global$d = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n    var ComboBox = Widget.extend({\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        settings = self.settings;\n        self.classes.add('combobox');\n        self.subinput = true;\n        self.ariaTarget = 'inp';\n        settings.menu = settings.menu || settings.values;\n        if (settings.menu) {\n          settings.icon = 'caret';\n        }\n        self.on('click', function (e) {\n          var elm = e.target;\n          var root = self.getEl();\n          if (!global$9.contains(root, elm) && elm !== root) {\n            return;\n          }\n          while (elm && elm !== root) {\n            if (elm.id && elm.id.indexOf('-open') !== -1) {\n              self.fire('action');\n              if (settings.menu) {\n                self.showMenu();\n                if (e.aria) {\n                  self.menu.items()[0].focus();\n                }\n              }\n            }\n            elm = elm.parentNode;\n          }\n        });\n        self.on('keydown', function (e) {\n          var rootControl;\n          if (e.keyCode === 13 && e.target.nodeName === 'INPUT') {\n            e.preventDefault();\n            self.parents().reverse().each(function (ctrl) {\n              if (ctrl.toJSON) {\n                rootControl = ctrl;\n                return false;\n              }\n            });\n            self.fire('submit', { data: rootControl.toJSON() });\n          }\n        });\n        self.on('keyup', function (e) {\n          if (e.target.nodeName === 'INPUT') {\n            var oldValue = self.state.get('value');\n            var newValue = e.target.value;\n            if (newValue !== oldValue) {\n              self.state.set('value', newValue);\n              self.fire('autocomplete', e);\n            }\n          }\n        });\n        self.on('mouseover', function (e) {\n          var tooltip = self.tooltip().moveTo(-65535);\n          if (self.statusLevel() && e.target.className.indexOf(self.classPrefix + 'status') !== -1) {\n            var statusMessage = self.statusMessage() || 'Ok';\n            var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [\n              'bc-tc',\n              'bc-tl',\n              'bc-tr'\n            ]);\n            tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');\n            tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');\n            tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');\n            tooltip.moveRel(e.target, rel);\n          }\n        });\n      },\n      statusLevel: function (value) {\n        if (arguments.length > 0) {\n          this.state.set('statusLevel', value);\n        }\n        return this.state.get('statusLevel');\n      },\n      statusMessage: function (value) {\n        if (arguments.length > 0) {\n          this.state.set('statusMessage', value);\n        }\n        return this.state.get('statusMessage');\n      },\n      showMenu: function () {\n        var self = this;\n        var settings = self.settings;\n        var menu;\n        if (!self.menu) {\n          menu = settings.menu || [];\n          if (menu.length) {\n            menu = {\n              type: 'menu',\n              items: menu\n            };\n          } else {\n            menu.type = menu.type || 'menu';\n          }\n          self.menu = global$4.create(menu).parent(self).renderTo(self.getContainerElm());\n          self.fire('createmenu');\n          self.menu.reflow();\n          self.menu.on('cancel', function (e) {\n            if (e.control === self.menu) {\n              self.focus();\n            }\n          });\n          self.menu.on('show hide', function (e) {\n            e.control.items().each(function (ctrl) {\n              ctrl.active(ctrl.value() === self.value());\n            });\n          }).fire('show');\n          self.menu.on('select', function (e) {\n            self.value(e.control.value());\n          });\n          self.on('focusin', function (e) {\n            if (e.target.tagName.toUpperCase() === 'INPUT') {\n              self.menu.hide();\n            }\n          });\n          self.aria('expanded', true);\n        }\n        self.menu.show();\n        self.menu.layoutRect({ w: self.layoutRect().w });\n        self.menu.moveRel(self.getEl(), self.isRtl() ? [\n          'br-tr',\n          'tr-br'\n        ] : [\n          'bl-tl',\n          'tl-bl'\n        ]);\n      },\n      focus: function () {\n        this.getEl('inp').focus();\n      },\n      repaint: function () {\n        var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect();\n        var width, lineHeight, innerPadding = 0;\n        var inputElm = elm.firstChild;\n        if (self.statusLevel() && self.statusLevel() !== 'none') {\n          innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10);\n        }\n        if (openElm) {\n          width = rect.w - funcs.getSize(openElm).width - 10;\n        } else {\n          width = rect.w - 10;\n        }\n        var doc = domGlobals.document;\n        if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) {\n          lineHeight = self.layoutRect().h - 2 + 'px';\n        }\n        global$9(inputElm).css({\n          width: width - innerPadding,\n          lineHeight: lineHeight\n        });\n        self._super();\n        return self;\n      },\n      postRender: function () {\n        var self = this;\n        global$9(this.getEl('inp')).on('change', function (e) {\n          self.state.set('value', e.target.value);\n          self.fire('change', e);\n        });\n        return self._super();\n      },\n      renderHtml: function () {\n        var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix;\n        var value = self.state.get('value') || '';\n        var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = '';\n        if ('spellcheck' in settings) {\n          extraAttrs += ' spellcheck=\"' + settings.spellcheck + '\"';\n        }\n        if (settings.maxLength) {\n          extraAttrs += ' maxlength=\"' + settings.maxLength + '\"';\n        }\n        if (settings.size) {\n          extraAttrs += ' size=\"' + settings.size + '\"';\n        }\n        if (settings.subtype) {\n          extraAttrs += ' type=\"' + settings.subtype + '\"';\n        }\n        statusHtml = '<i id=\"' + id + '-status\" class=\"mce-status mce-ico\" style=\"display: none\"></i>';\n        if (self.disabled()) {\n          extraAttrs += ' disabled=\"disabled\"';\n        }\n        icon = settings.icon;\n        if (icon && icon !== 'caret') {\n          icon = prefix + 'ico ' + prefix + 'i-' + settings.icon;\n        }\n        text = self.state.get('text');\n        if (icon || text) {\n          openBtnHtml = '<div id=\"' + id + '-open\" class=\"' + prefix + 'btn ' + prefix + 'open\" tabIndex=\"-1\" role=\"button\">' + '<button id=\"' + id + '-action\" type=\"button\" hidefocus=\"1\" tabindex=\"-1\">' + (icon !== 'caret' ? '<i class=\"' + icon + '\"></i>' : '<i class=\"' + prefix + 'caret\"></i>') + (text ? (icon ? ' ' : '') + text : '') + '</button>' + '</div>';\n          self.classes.add('has-open');\n        }\n        return '<div id=\"' + id + '\" class=\"' + self.classes + '\">' + '<input id=\"' + id + '-inp\" class=\"' + prefix + 'textbox\" value=\"' + self.encode(value, false) + '\" hidefocus=\"1\"' + extraAttrs + ' placeholder=\"' + self.encode(settings.placeholder) + '\" />' + statusHtml + openBtnHtml + '</div>';\n      },\n      value: function (value) {\n        if (arguments.length) {\n          this.state.set('value', value);\n          return this;\n        }\n        if (this.state.get('rendered')) {\n          this.state.set('value', this.getEl('inp').value);\n        }\n        return this.state.get('value');\n      },\n      showAutoComplete: function (items, term) {\n        var self = this;\n        if (items.length === 0) {\n          self.hideMenu();\n          return;\n        }\n        var insert = function (value, title) {\n          return function () {\n            self.fire('selectitem', {\n              title: title,\n              value: value\n            });\n          };\n        };\n        if (self.menu) {\n          self.menu.items().remove();\n        } else {\n          self.menu = global$4.create({\n            type: 'menu',\n            classes: 'combobox-menu',\n            layout: 'flow'\n          }).parent(self).renderTo();\n        }\n        global$2.each(items, function (item) {\n          self.menu.add({\n            text: item.title,\n            url: item.previewUrl,\n            match: term,\n            classes: 'menu-item-ellipsis',\n            onclick: insert(item.value, item.title)\n          });\n        });\n        self.menu.renderNew();\n        self.hideMenu();\n        self.menu.on('cancel', function (e) {\n          if (e.control.parent() === self.menu) {\n            e.stopPropagation();\n            self.focus();\n            self.hideMenu();\n          }\n        });\n        self.menu.on('select', function () {\n          self.focus();\n        });\n        var maxW = self.layoutRect().w;\n        self.menu.layoutRect({\n          w: maxW,\n          minW: 0,\n          maxW: maxW\n        });\n        self.menu.repaint();\n        self.menu.reflow();\n        self.menu.show();\n        self.menu.moveRel(self.getEl(), self.isRtl() ? [\n          'br-tr',\n          'tr-br'\n        ] : [\n          'bl-tl',\n          'tl-bl'\n        ]);\n      },\n      hideMenu: function () {\n        if (this.menu) {\n          this.menu.hide();\n        }\n      },\n      bindStates: function () {\n        var self = this;\n        self.state.on('change:value', function (e) {\n          if (self.getEl('inp').value !== e.value) {\n            self.getEl('inp').value = e.value;\n          }\n        });\n        self.state.on('change:disabled', function (e) {\n          self.getEl('inp').disabled = e.value;\n        });\n        self.state.on('change:statusLevel', function (e) {\n          var statusIconElm = self.getEl('status');\n          var prefix = self.classPrefix, value = e.value;\n          funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : '');\n          funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok');\n          funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn');\n          funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error');\n          self.classes.toggle('has-status', value !== 'none');\n          self.repaint();\n        });\n        funcs.on(self.getEl('status'), 'mouseleave', function () {\n          self.tooltip().hide();\n        });\n        self.on('cancel', function (e) {\n          if (self.menu && self.menu.visible()) {\n            e.stopPropagation();\n            self.hideMenu();\n          }\n        });\n        var focusIdx = function (idx, menu) {\n          if (menu && menu.items().length > 0) {\n            menu.items().eq(idx)[0].focus();\n          }\n        };\n        self.on('keydown', function (e) {\n          var keyCode = e.keyCode;\n          if (e.target.nodeName === 'INPUT') {\n            if (keyCode === global$d.DOWN) {\n              e.preventDefault();\n              self.fire('autocomplete');\n              focusIdx(0, self.menu);\n            } else if (keyCode === global$d.UP) {\n              e.preventDefault();\n              focusIdx(-1, self.menu);\n            }\n          }\n        });\n        return self._super();\n      },\n      remove: function () {\n        global$9(this.getEl('inp')).off();\n        if (this.menu) {\n          this.menu.remove();\n        }\n        this._super();\n      }\n    });\n\n    var ColorBox = ComboBox.extend({\n      init: function (settings) {\n        var self = this;\n        settings.spellcheck = false;\n        if (settings.onaction) {\n          settings.icon = 'none';\n        }\n        self._super(settings);\n        self.classes.add('colorbox');\n        self.on('change keyup postrender', function () {\n          self.repaintColor(self.value());\n        });\n      },\n      repaintColor: function (value) {\n        var openElm = this.getEl('open');\n        var elm = openElm ? openElm.getElementsByTagName('i')[0] : null;\n        if (elm) {\n          try {\n            elm.style.background = value;\n          } catch (ex) {\n          }\n        }\n      },\n      bindStates: function () {\n        var self = this;\n        self.state.on('change:value', function (e) {\n          if (self.state.get('rendered')) {\n            self.repaintColor(e.value);\n          }\n        });\n        return self._super();\n      }\n    });\n\n    var PanelButton = Button.extend({\n      showPanel: function () {\n        var self = this, settings = self.settings;\n        self.classes.add('opened');\n        if (!self.panel) {\n          var panelSettings = settings.panel;\n          if (panelSettings.type) {\n            panelSettings = {\n              layout: 'grid',\n              items: panelSettings\n            };\n          }\n          panelSettings.role = panelSettings.role || 'dialog';\n          panelSettings.popover = true;\n          panelSettings.autohide = true;\n          panelSettings.ariaRoot = true;\n          self.panel = new FloatPanel(panelSettings).on('hide', function () {\n            self.classes.remove('opened');\n          }).on('cancel', function (e) {\n            e.stopPropagation();\n            self.focus();\n            self.hidePanel();\n          }).parent(self).renderTo(self.getContainerElm());\n          self.panel.fire('show');\n          self.panel.reflow();\n        } else {\n          self.panel.show();\n        }\n        var rtlRels = [\n          'bc-tc',\n          'bc-tl',\n          'bc-tr'\n        ];\n        var ltrRels = [\n          'bc-tc',\n          'bc-tr',\n          'bc-tl',\n          'tc-bc',\n          'tc-br',\n          'tc-bl'\n        ];\n        var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels));\n        self.panel.classes.toggle('start', rel.substr(-1) === 'l');\n        self.panel.classes.toggle('end', rel.substr(-1) === 'r');\n        var isTop = rel.substr(0, 1) === 't';\n        self.panel.classes.toggle('bottom', !isTop);\n        self.panel.classes.toggle('top', isTop);\n        self.panel.moveRel(self.getEl(), rel);\n      },\n      hidePanel: function () {\n        var self = this;\n        if (self.panel) {\n          self.panel.hide();\n        }\n      },\n      postRender: function () {\n        var self = this;\n        self.aria('haspopup', true);\n        self.on('click', function (e) {\n          if (e.control === self) {\n            if (self.panel && self.panel.visible()) {\n              self.hidePanel();\n            } else {\n              self.showPanel();\n              self.panel.focus(!!e.aria);\n            }\n          }\n        });\n        return self._super();\n      },\n      remove: function () {\n        if (this.panel) {\n          this.panel.remove();\n          this.panel = null;\n        }\n        return this._super();\n      }\n    });\n\n    var DOM$3 = global$3.DOM;\n    var ColorButton = PanelButton.extend({\n      init: function (settings) {\n        this._super(settings);\n        this.classes.add('splitbtn');\n        this.classes.add('colorbutton');\n      },\n      color: function (color) {\n        if (color) {\n          this._color = color;\n          this.getEl('preview').style.backgroundColor = color;\n          return this;\n        }\n        return this._color;\n      },\n      resetColor: function () {\n        this._color = null;\n        this.getEl('preview').style.backgroundColor = null;\n        return this;\n      },\n      renderHtml: function () {\n        var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');\n        var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n        var image = self.settings.image ? ' style=\"background-image: url(\\'' + self.settings.image + '\\')\"' : '';\n        var textHtml = '';\n        if (text) {\n          self.classes.add('btn-has-text');\n          textHtml = '<span class=\"' + prefix + 'txt\">' + self.encode(text) + '</span>';\n        }\n        return '<div id=\"' + id + '\" class=\"' + self.classes + '\" role=\"button\" tabindex=\"-1\" aria-haspopup=\"true\">' + '<button role=\"presentation\" hidefocus=\"1\" type=\"button\" tabindex=\"-1\">' + (icon ? '<i class=\"' + icon + '\"' + image + '></i>' : '') + '<span id=\"' + id + '-preview\" class=\"' + prefix + 'preview\"></span>' + textHtml + '</button>' + '<button type=\"button\" class=\"' + prefix + 'open\" hidefocus=\"1\" tabindex=\"-1\">' + ' <i class=\"' + prefix + 'caret\"></i>' + '</button>' + '</div>';\n      },\n      postRender: function () {\n        var self = this, onClickHandler = self.settings.onclick;\n        self.on('click', function (e) {\n          if (e.aria && e.aria.key === 'down') {\n            return;\n          }\n          if (e.control === self && !DOM$3.getParent(e.target, '.' + self.classPrefix + 'open')) {\n            e.stopImmediatePropagation();\n            onClickHandler.call(self, e);\n          }\n        });\n        delete self.settings.onclick;\n        return self._super();\n      }\n    });\n\n    var global$e = tinymce.util.Tools.resolve('tinymce.util.Color');\n\n    var ColorPicker = Widget.extend({\n      Defaults: { classes: 'widget colorpicker' },\n      init: function (settings) {\n        this._super(settings);\n      },\n      postRender: function () {\n        var self = this;\n        var color = self.color();\n        var hsv, hueRootElm, huePointElm, svRootElm, svPointElm;\n        hueRootElm = self.getEl('h');\n        huePointElm = self.getEl('hp');\n        svRootElm = self.getEl('sv');\n        svPointElm = self.getEl('svp');\n        function getPos(elm, event) {\n          var pos = funcs.getPos(elm);\n          var x, y;\n          x = event.pageX - pos.x;\n          y = event.pageY - pos.y;\n          x = Math.max(0, Math.min(x / elm.clientWidth, 1));\n          y = Math.max(0, Math.min(y / elm.clientHeight, 1));\n          return {\n            x: x,\n            y: y\n          };\n        }\n        function updateColor(hsv, hueUpdate) {\n          var hue = (360 - hsv.h) / 360;\n          funcs.css(huePointElm, { top: hue * 100 + '%' });\n          if (!hueUpdate) {\n            funcs.css(svPointElm, {\n              left: hsv.s + '%',\n              top: 100 - hsv.v + '%'\n            });\n          }\n          svRootElm.style.background = global$e({\n            s: 100,\n            v: 100,\n            h: hsv.h\n          }).toHex();\n          self.color().parse({\n            s: hsv.s,\n            v: hsv.v,\n            h: hsv.h\n          });\n        }\n        function updateSaturationAndValue(e) {\n          var pos;\n          pos = getPos(svRootElm, e);\n          hsv.s = pos.x * 100;\n          hsv.v = (1 - pos.y) * 100;\n          updateColor(hsv);\n          self.fire('change');\n        }\n        function updateHue(e) {\n          var pos;\n          pos = getPos(hueRootElm, e);\n          hsv = color.toHsv();\n          hsv.h = (1 - pos.y) * 360;\n          updateColor(hsv, true);\n          self.fire('change');\n        }\n        self._repaint = function () {\n          hsv = color.toHsv();\n          updateColor(hsv);\n        };\n        self._super();\n        self._svdraghelper = new DragHelper(self._id + '-sv', {\n          start: updateSaturationAndValue,\n          drag: updateSaturationAndValue\n        });\n        self._hdraghelper = new DragHelper(self._id + '-h', {\n          start: updateHue,\n          drag: updateHue\n        });\n        self._repaint();\n      },\n      rgb: function () {\n        return this.color().toRgb();\n      },\n      value: function (value) {\n        var self = this;\n        if (arguments.length) {\n          self.color().parse(value);\n          if (self._rendered) {\n            self._repaint();\n          }\n        } else {\n          return self.color().toHex();\n        }\n      },\n      color: function () {\n        if (!this._color) {\n          this._color = global$e();\n        }\n        return this._color;\n      },\n      renderHtml: function () {\n        var self = this;\n        var id = self._id;\n        var prefix = self.classPrefix;\n        var hueHtml;\n        var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000';\n        function getOldIeFallbackHtml() {\n          var i, l, html = '', gradientPrefix, stopsList;\n          gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=';\n          stopsList = stops.split(',');\n          for (i = 0, l = stopsList.length - 1; i < l; i++) {\n            html += '<div class=\"' + prefix + 'colorpicker-h-chunk\" style=\"' + 'height:' + 100 / l + '%;' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ');' + '-ms-' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ')' + '\"></div>';\n          }\n          return html;\n        }\n        var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');';\n        hueHtml = '<div id=\"' + id + '-h\" class=\"' + prefix + 'colorpicker-h\" style=\"' + gradientCssText + '\">' + getOldIeFallbackHtml() + '<div id=\"' + id + '-hp\" class=\"' + prefix + 'colorpicker-h-marker\"></div>' + '</div>';\n        return '<div id=\"' + id + '\" class=\"' + self.classes + '\">' + '<div id=\"' + id + '-sv\" class=\"' + prefix + 'colorpicker-sv\">' + '<div class=\"' + prefix + 'colorpicker-overlay1\">' + '<div class=\"' + prefix + 'colorpicker-overlay2\">' + '<div id=\"' + id + '-svp\" class=\"' + prefix + 'colorpicker-selector1\">' + '<div class=\"' + prefix + 'colorpicker-selector2\"></div>' + '</div>' + '</div>' + '</div>' + '</div>' + hueHtml + '</div>';\n      }\n    });\n\n    var DropZone = Widget.extend({\n      init: function (settings) {\n        var self = this;\n        settings = global$2.extend({\n          height: 100,\n          text: 'Drop an image here',\n          multiple: false,\n          accept: null\n        }, settings);\n        self._super(settings);\n        self.classes.add('dropzone');\n        if (settings.multiple) {\n          self.classes.add('multiple');\n        }\n      },\n      renderHtml: function () {\n        var self = this;\n        var attrs, elm;\n        var cfg = self.settings;\n        attrs = {\n          id: self._id,\n          hidefocus: '1'\n        };\n        elm = funcs.create('div', attrs, '<span>' + this.translate(cfg.text) + '</span>');\n        if (cfg.height) {\n          funcs.css(elm, 'height', cfg.height + 'px');\n        }\n        if (cfg.width) {\n          funcs.css(elm, 'width', cfg.width + 'px');\n        }\n        elm.className = self.classes;\n        return elm.outerHTML;\n      },\n      postRender: function () {\n        var self = this;\n        var toggleDragClass = function (e) {\n          e.preventDefault();\n          self.classes.toggle('dragenter');\n          self.getEl().className = self.classes;\n        };\n        var filter = function (files) {\n          var accept = self.settings.accept;\n          if (typeof accept !== 'string') {\n            return files;\n          }\n          var re = new RegExp('(' + accept.split(/\\s*,\\s*/).join('|') + ')$', 'i');\n          return global$2.grep(files, function (file) {\n            return re.test(file.name);\n          });\n        };\n        self._super();\n        self.$el.on('dragover', function (e) {\n          e.preventDefault();\n        });\n        self.$el.on('dragenter', toggleDragClass);\n        self.$el.on('dragleave', toggleDragClass);\n        self.$el.on('drop', function (e) {\n          e.preventDefault();\n          if (self.state.get('disabled')) {\n            return;\n          }\n          var files = filter(e.dataTransfer.files);\n          self.value = function () {\n            if (!files.length) {\n              return null;\n            } else if (self.settings.multiple) {\n              return files;\n            } else {\n              return files[0];\n            }\n          };\n          if (files.length) {\n            self.fire('change', e);\n          }\n        });\n      },\n      remove: function () {\n        this.$el.off();\n        this._super();\n      }\n    });\n\n    var Path = Widget.extend({\n      init: function (settings) {\n        var self = this;\n        if (!settings.delimiter) {\n          settings.delimiter = '\\xBB';\n        }\n        self._super(settings);\n        self.classes.add('path');\n        self.canFocus = true;\n        self.on('click', function (e) {\n          var index;\n          var target = e.target;\n          if (index = target.getAttribute('data-index')) {\n            self.fire('select', {\n              value: self.row()[index],\n              index: index\n            });\n          }\n        });\n        self.row(self.settings.row);\n      },\n      focus: function () {\n        var self = this;\n        self.getEl().firstChild.focus();\n        return self;\n      },\n      row: function (row) {\n        if (!arguments.length) {\n          return this.state.get('row');\n        }\n        this.state.set('row', row);\n        return this;\n      },\n      renderHtml: function () {\n        var self = this;\n        return '<div id=\"' + self._id + '\" class=\"' + self.classes + '\">' + self._getDataPathHtml(self.state.get('row')) + '</div>';\n      },\n      bindStates: function () {\n        var self = this;\n        self.state.on('change:row', function (e) {\n          self.innerHtml(self._getDataPathHtml(e.value));\n        });\n        return self._super();\n      },\n      _getDataPathHtml: function (data) {\n        var self = this;\n        var parts = data || [];\n        var i, l, html = '';\n        var prefix = self.classPrefix;\n        for (i = 0, l = parts.length; i < l; i++) {\n          html += (i > 0 ? '<div class=\"' + prefix + 'divider\" aria-hidden=\"true\"> ' + self.settings.delimiter + ' </div>' : '') + '<div role=\"button\" class=\"' + prefix + 'path-item' + (i === l - 1 ? ' ' + prefix + 'last' : '') + '\" data-index=\"' + i + '\" tabindex=\"-1\" id=\"' + self._id + '-' + i + '\" aria-level=\"' + (i + 1) + '\">' + parts[i].name + '</div>';\n        }\n        if (!html) {\n          html = '<div class=\"' + prefix + 'path-item\">\\xA0</div>';\n        }\n        return html;\n      }\n    });\n\n    var ElementPath = Path.extend({\n      postRender: function () {\n        var self = this, editor = self.settings.editor;\n        function isHidden(elm) {\n          if (elm.nodeType === 1) {\n            if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {\n              return true;\n            }\n            if (elm.getAttribute('data-mce-type') === 'bookmark') {\n              return true;\n            }\n          }\n          return false;\n        }\n        if (editor.settings.elementpath !== false) {\n          self.on('select', function (e) {\n            editor.focus();\n            editor.selection.select(this.row()[e.index].element);\n            editor.nodeChanged();\n          });\n          editor.on('nodeChange', function (e) {\n            var outParents = [];\n            var parents = e.parents;\n            var i = parents.length;\n            while (i--) {\n              if (parents[i].nodeType === 1 && !isHidden(parents[i])) {\n                var args = editor.fire('ResolveName', {\n                  name: parents[i].nodeName.toLowerCase(),\n                  target: parents[i]\n                });\n                if (!args.isDefaultPrevented()) {\n                  outParents.push({\n                    name: args.name,\n                    element: parents[i]\n                  });\n                }\n                if (args.isPropagationStopped()) {\n                  break;\n                }\n              }\n            }\n            self.row(outParents);\n          });\n        }\n        return self._super();\n      }\n    });\n\n    var FormItem = Container.extend({\n      Defaults: {\n        layout: 'flex',\n        align: 'center',\n        defaults: { flex: 1 }\n      },\n      renderHtml: function () {\n        var self = this, layout = self._layout, prefix = self.classPrefix;\n        self.classes.add('formitem');\n        layout.preRender(self);\n        return '<div id=\"' + self._id + '\" class=\"' + self.classes + '\" hidefocus=\"1\" tabindex=\"-1\">' + (self.settings.title ? '<div id=\"' + self._id + '-title\" class=\"' + prefix + 'title\">' + self.settings.title + '</div>' : '') + '<div id=\"' + self._id + '-body\" class=\"' + self.bodyClasses + '\">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';\n      }\n    });\n\n    var Form = Container.extend({\n      Defaults: {\n        containerCls: 'form',\n        layout: 'flex',\n        direction: 'column',\n        align: 'stretch',\n        flex: 1,\n        padding: 15,\n        labelGap: 30,\n        spacing: 10,\n        callbacks: {\n          submit: function () {\n            this.submit();\n          }\n        }\n      },\n      preRender: function () {\n        var self = this, items = self.items();\n        if (!self.settings.formItemDefaults) {\n          self.settings.formItemDefaults = {\n            layout: 'flex',\n            autoResize: 'overflow',\n            defaults: { flex: 1 }\n          };\n        }\n        items.each(function (ctrl) {\n          var formItem;\n          var label = ctrl.settings.label;\n          if (label) {\n            formItem = new FormItem(global$2.extend({\n              items: {\n                type: 'label',\n                id: ctrl._id + '-l',\n                text: label,\n                flex: 0,\n                forId: ctrl._id,\n                disabled: ctrl.disabled()\n              }\n            }, self.settings.formItemDefaults));\n            formItem.type = 'formitem';\n            ctrl.aria('labelledby', ctrl._id + '-l');\n            if (typeof ctrl.settings.flex === 'undefined') {\n              ctrl.settings.flex = 1;\n            }\n            self.replace(ctrl, formItem);\n            formItem.add(ctrl);\n          }\n        });\n      },\n      submit: function () {\n        return this.fire('submit', { data: this.toJSON() });\n      },\n      postRender: function () {\n        var self = this;\n        self._super();\n        self.fromJSON(self.settings.data);\n      },\n      bindStates: function () {\n        var self = this;\n        self._super();\n        function recalcLabels() {\n          var maxLabelWidth = 0;\n          var labels = [];\n          var i, labelGap, items;\n          if (self.settings.labelGapCalc === false) {\n            return;\n          }\n          if (self.settings.labelGapCalc === 'children') {\n            items = self.find('formitem');\n          } else {\n            items = self.items();\n          }\n          items.filter('formitem').each(function (item) {\n            var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth;\n            maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth;\n            labels.push(labelCtrl);\n          });\n          labelGap = self.settings.labelGap || 0;\n          i = labels.length;\n          while (i--) {\n            labels[i].settings.minWidth = maxLabelWidth + labelGap;\n          }\n        }\n        self.on('show', recalcLabels);\n        recalcLabels();\n      }\n    });\n\n    var FieldSet = Form.extend({\n      Defaults: {\n        containerCls: 'fieldset',\n        layout: 'flex',\n        direction: 'column',\n        align: 'stretch',\n        flex: 1,\n        padding: '25 15 5 15',\n        labelGap: 30,\n        spacing: 10,\n        border: 1\n      },\n      renderHtml: function () {\n        var self = this, layout = self._layout, prefix = self.classPrefix;\n        self.preRender();\n        layout.preRender(self);\n        return '<fieldset id=\"' + self._id + '\" class=\"' + self.classes + '\" hidefocus=\"1\" tabindex=\"-1\">' + (self.settings.title ? '<legend id=\"' + self._id + '-title\" class=\"' + prefix + 'fieldset-title\">' + self.settings.title + '</legend>' : '') + '<div id=\"' + self._id + '-body\" class=\"' + self.bodyClasses + '\">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</fieldset>';\n      }\n    });\n\n    var unique$1 = 0;\n    var generate = function (prefix) {\n      var date = new Date();\n      var time = date.getTime();\n      var random = Math.floor(Math.random() * 1000000000);\n      unique$1++;\n      return prefix + '_' + random + unique$1 + String(time);\n    };\n\n    var fromHtml = function (html, scope) {\n      var doc = scope || domGlobals.document;\n      var div = doc.createElement('div');\n      div.innerHTML = html;\n      if (!div.hasChildNodes() || div.childNodes.length > 1) {\n        domGlobals.console.error('HTML does not have a single root node', html);\n        throw new Error('HTML must have a single root node');\n      }\n      return fromDom(div.childNodes[0]);\n    };\n    var fromTag = function (tag, scope) {\n      var doc = scope || domGlobals.document;\n      var node = doc.createElement(tag);\n      return fromDom(node);\n    };\n    var fromText = function (text, scope) {\n      var doc = scope || domGlobals.document;\n      var node = doc.createTextNode(text);\n      return fromDom(node);\n    };\n    var fromDom = function (node) {\n      if (node === null || node === undefined) {\n        throw new Error('Node cannot be null or undefined');\n      }\n      return { dom: constant(node) };\n    };\n    var fromPoint = function (docElm, x, y) {\n      var doc = docElm.dom();\n      return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n    };\n    var Element = {\n      fromHtml: fromHtml,\n      fromTag: fromTag,\n      fromText: fromText,\n      fromDom: fromDom,\n      fromPoint: fromPoint\n    };\n\n    var cached = function (f) {\n      var called = false;\n      var r;\n      return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n        if (!called) {\n          called = true;\n          r = f.apply(null, args);\n        }\n        return r;\n      };\n    };\n\n    var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n    var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n    var COMMENT = domGlobals.Node.COMMENT_NODE;\n    var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n    var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n    var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n    var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n    var TEXT = domGlobals.Node.TEXT_NODE;\n    var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n    var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n    var ENTITY = domGlobals.Node.ENTITY_NODE;\n    var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n    var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n    var path = function (parts, scope) {\n      var o = scope !== undefined && scope !== null ? scope : Global;\n      for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n        o = o[parts[i]];\n      }\n      return o;\n    };\n    var resolve = function (p, scope) {\n      var parts = p.split('.');\n      return path(parts, scope);\n    };\n\n    var unsafe = function (name, scope) {\n      return resolve(name, scope);\n    };\n    var getOrDie = function (name, scope) {\n      var actual = unsafe(name, scope);\n      if (actual === undefined || actual === null) {\n        throw new Error(name + ' not available on this browser');\n      }\n      return actual;\n    };\n    var Global$1 = { getOrDie: getOrDie };\n\n    var Immutable = function () {\n      var fields = [];\n      for (var _i = 0; _i < arguments.length; _i++) {\n        fields[_i] = arguments[_i];\n      }\n      return function () {\n        var values = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n          values[_i] = arguments[_i];\n        }\n        if (fields.length !== values.length) {\n          throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n        }\n        var struct = {};\n        each(fields, function (name, i) {\n          struct[name] = constant(values[i]);\n        });\n        return struct;\n      };\n    };\n\n    var node = function () {\n      var f = Global$1.getOrDie('Node');\n      return f;\n    };\n    var compareDocumentPosition = function (a, b, match) {\n      return (a.compareDocumentPosition(b) & match) !== 0;\n    };\n    var documentPositionPreceding = function (a, b) {\n      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n    };\n    var documentPositionContainedBy = function (a, b) {\n      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n    };\n    var Node = {\n      documentPositionPreceding: documentPositionPreceding,\n      documentPositionContainedBy: documentPositionContainedBy\n    };\n\n    var firstMatch = function (regexes, s) {\n      for (var i = 0; i < regexes.length; i++) {\n        var x = regexes[i];\n        if (x.test(s)) {\n          return x;\n        }\n      }\n      return undefined;\n    };\n    var find$1 = function (regexes, agent) {\n      var r = firstMatch(regexes, agent);\n      if (!r) {\n        return {\n          major: 0,\n          minor: 0\n        };\n      }\n      var group = function (i) {\n        return Number(agent.replace(r, '$' + i));\n      };\n      return nu(group(1), group(2));\n    };\n    var detect = function (versionRegexes, agent) {\n      var cleanedAgent = String(agent).toLowerCase();\n      if (versionRegexes.length === 0) {\n        return unknown();\n      }\n      return find$1(versionRegexes, cleanedAgent);\n    };\n    var unknown = function () {\n      return nu(0, 0);\n    };\n    var nu = function (major, minor) {\n      return {\n        major: major,\n        minor: minor\n      };\n    };\n    var Version = {\n      nu: nu,\n      detect: detect,\n      unknown: unknown\n    };\n\n    var edge = 'Edge';\n    var chrome = 'Chrome';\n    var ie = 'IE';\n    var opera = 'Opera';\n    var firefox = 'Firefox';\n    var safari = 'Safari';\n    var isBrowser = function (name, current) {\n      return function () {\n        return current === name;\n      };\n    };\n    var unknown$1 = function () {\n      return nu$1({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    var nu$1 = function (info) {\n      var current = info.current;\n      var version = info.version;\n      return {\n        current: current,\n        version: version,\n        isEdge: isBrowser(edge, current),\n        isChrome: isBrowser(chrome, current),\n        isIE: isBrowser(ie, current),\n        isOpera: isBrowser(opera, current),\n        isFirefox: isBrowser(firefox, current),\n        isSafari: isBrowser(safari, current)\n      };\n    };\n    var Browser = {\n      unknown: unknown$1,\n      nu: nu$1,\n      edge: constant(edge),\n      chrome: constant(chrome),\n      ie: constant(ie),\n      opera: constant(opera),\n      firefox: constant(firefox),\n      safari: constant(safari)\n    };\n\n    var windows$1 = 'Windows';\n    var ios = 'iOS';\n    var android = 'Android';\n    var linux = 'Linux';\n    var osx = 'OSX';\n    var solaris = 'Solaris';\n    var freebsd = 'FreeBSD';\n    var isOS = function (name, current) {\n      return function () {\n        return current === name;\n      };\n    };\n    var unknown$2 = function () {\n      return nu$2({\n        current: undefined,\n        version: Version.unknown()\n      });\n    };\n    var nu$2 = function (info) {\n      var current = info.current;\n      var version = info.version;\n      return {\n        current: current,\n        version: version,\n        isWindows: isOS(windows$1, current),\n        isiOS: isOS(ios, current),\n        isAndroid: isOS(android, current),\n        isOSX: isOS(osx, current),\n        isLinux: isOS(linux, current),\n        isSolaris: isOS(solaris, current),\n        isFreeBSD: isOS(freebsd, current)\n      };\n    };\n    var OperatingSystem = {\n      unknown: unknown$2,\n      nu: nu$2,\n      windows: constant(windows$1),\n      ios: constant(ios),\n      android: constant(android),\n      linux: constant(linux),\n      osx: constant(osx),\n      solaris: constant(solaris),\n      freebsd: constant(freebsd)\n    };\n\n    var DeviceType = function (os, browser, userAgent) {\n      var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n      var isiPhone = os.isiOS() && !isiPad;\n      var isAndroid3 = os.isAndroid() && os.version.major === 3;\n      var isAndroid4 = os.isAndroid() && os.version.major === 4;\n      var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n      var isTouch = os.isiOS() || os.isAndroid();\n      var isPhone = isTouch && !isTablet;\n      var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n      return {\n        isiPad: constant(isiPad),\n        isiPhone: constant(isiPhone),\n        isTablet: constant(isTablet),\n        isPhone: constant(isPhone),\n        isTouch: constant(isTouch),\n        isAndroid: os.isAndroid,\n        isiOS: os.isiOS,\n        isWebView: constant(iOSwebview)\n      };\n    };\n\n    var detect$1 = function (candidates, userAgent) {\n      var agent = String(userAgent).toLowerCase();\n      return find(candidates, function (candidate) {\n        return candidate.search(agent);\n      });\n    };\n    var detectBrowser = function (browsers, userAgent) {\n      return detect$1(browsers, userAgent).map(function (browser) {\n        var version = Version.detect(browser.versionRegexes, userAgent);\n        return {\n          current: browser.name,\n          version: version\n        };\n      });\n    };\n    var detectOs = function (oses, userAgent) {\n      return detect$1(oses, userAgent).map(function (os) {\n        var version = Version.detect(os.versionRegexes, userAgent);\n        return {\n          current: os.name,\n          version: version\n        };\n      });\n    };\n    var UaString = {\n      detectBrowser: detectBrowser,\n      detectOs: detectOs\n    };\n\n    var contains = function (str, substr) {\n      return str.indexOf(substr) !== -1;\n    };\n\n    var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n    var checkContains = function (target) {\n      return function (uastring) {\n        return contains(uastring, target);\n      };\n    };\n    var browsers = [\n      {\n        name: 'Edge',\n        versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n        search: function (uastring) {\n          return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n        }\n      },\n      {\n        name: 'Chrome',\n        versionRegexes: [\n          /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n          normalVersionRegex\n        ],\n        search: function (uastring) {\n          return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n        }\n      },\n      {\n        name: 'IE',\n        versionRegexes: [\n          /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*?rv:([0-9]+)\\.([0-9]+).*/\n        ],\n        search: function (uastring) {\n          return contains(uastring, 'msie') || contains(uastring, 'trident');\n        }\n      },\n      {\n        name: 'Opera',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n        ],\n        search: checkContains('opera')\n      },\n      {\n        name: 'Firefox',\n        versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n        search: checkContains('firefox')\n      },\n      {\n        name: 'Safari',\n        versionRegexes: [\n          normalVersionRegex,\n          /.*?cpu os ([0-9]+)_([0-9]+).*/\n        ],\n        search: function (uastring) {\n          return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n        }\n      }\n    ];\n    var oses = [\n      {\n        name: 'Windows',\n        search: checkContains('win'),\n        versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'iOS',\n        search: function (uastring) {\n          return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n        },\n        versionRegexes: [\n          /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n          /.*cpu os ([0-9]+)_([0-9]+).*/,\n          /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n        ]\n      },\n      {\n        name: 'Android',\n        search: checkContains('android'),\n        versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n      },\n      {\n        name: 'OSX',\n        search: checkContains('os x'),\n        versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n      },\n      {\n        name: 'Linux',\n        search: checkContains('linux'),\n        versionRegexes: []\n      },\n      {\n        name: 'Solaris',\n        search: checkContains('sunos'),\n        versionRegexes: []\n      },\n      {\n        name: 'FreeBSD',\n        search: checkContains('freebsd'),\n        versionRegexes: []\n      }\n    ];\n    var PlatformInfo = {\n      browsers: constant(browsers),\n      oses: constant(oses)\n    };\n\n    var detect$2 = function (userAgent) {\n      var browsers = PlatformInfo.browsers();\n      var oses = PlatformInfo.oses();\n      var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n      var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n      var deviceType = DeviceType(os, browser, userAgent);\n      return {\n        browser: browser,\n        os: os,\n        deviceType: deviceType\n      };\n    };\n    var PlatformDetection = { detect: detect$2 };\n\n    var detect$3 = cached(function () {\n      var userAgent = domGlobals.navigator.userAgent;\n      return PlatformDetection.detect(userAgent);\n    });\n    var PlatformDetection$1 = { detect: detect$3 };\n\n    var ELEMENT$1 = ELEMENT;\n    var DOCUMENT$1 = DOCUMENT;\n    var bypassSelector = function (dom) {\n      return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n    };\n    var all = function (selector, scope) {\n      var base = scope === undefined ? domGlobals.document : scope.dom();\n      return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n    };\n    var one = function (selector, scope) {\n      var base = scope === undefined ? domGlobals.document : scope.dom();\n      return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n    };\n\n    var regularContains = function (e1, e2) {\n      var d1 = e1.dom();\n      var d2 = e2.dom();\n      return d1 === d2 ? false : d1.contains(d2);\n    };\n    var ieContains = function (e1, e2) {\n      return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n    };\n    var browser = PlatformDetection$1.detect().browser;\n    var contains$1 = browser.isIE() ? ieContains : regularContains;\n\n    var spot = Immutable('element', 'offset');\n\n    var descendants = function (scope, selector) {\n      return all(selector, scope);\n    };\n\n    var trim = global$2.trim;\n    var hasContentEditableState = function (value) {\n      return function (node) {\n        if (node && node.nodeType === 1) {\n          if (node.contentEditable === value) {\n            return true;\n          }\n          if (node.getAttribute('data-mce-contenteditable') === value) {\n            return true;\n          }\n        }\n        return false;\n      };\n    };\n    var isContentEditableTrue = hasContentEditableState('true');\n    var isContentEditableFalse = hasContentEditableState('false');\n    var create = function (type, title, url, level, attach) {\n      return {\n        type: type,\n        title: title,\n        url: url,\n        level: level,\n        attach: attach\n      };\n    };\n    var isChildOfContentEditableTrue = function (node) {\n      while (node = node.parentNode) {\n        var value = node.contentEditable;\n        if (value && value !== 'inherit') {\n          return isContentEditableTrue(node);\n        }\n      }\n      return false;\n    };\n    var select = function (selector, root) {\n      return map(descendants(Element.fromDom(root), selector), function (element) {\n        return element.dom();\n      });\n    };\n    var getElementText = function (elm) {\n      return elm.innerText || elm.textContent;\n    };\n    var getOrGenerateId = function (elm) {\n      return elm.id ? elm.id : generate('h');\n    };\n    var isAnchor = function (elm) {\n      return elm && elm.nodeName === 'A' && (elm.id || elm.name);\n    };\n    var isValidAnchor = function (elm) {\n      return isAnchor(elm) && isEditable(elm);\n    };\n    var isHeader = function (elm) {\n      return elm && /^(H[1-6])$/.test(elm.nodeName);\n    };\n    var isEditable = function (elm) {\n      return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n    };\n    var isValidHeader = function (elm) {\n      return isHeader(elm) && isEditable(elm);\n    };\n    var getLevel = function (elm) {\n      return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n    };\n    var headerTarget = function (elm) {\n      var headerId = getOrGenerateId(elm);\n      var attach = function () {\n        elm.id = headerId;\n      };\n      return create('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);\n    };\n    var anchorTarget = function (elm) {\n      var anchorId = elm.id || elm.name;\n      var anchorText = getElementText(elm);\n      return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n    };\n    var getHeaderTargets = function (elms) {\n      return map(filter(elms, isValidHeader), headerTarget);\n    };\n    var getAnchorTargets = function (elms) {\n      return map(filter(elms, isValidAnchor), anchorTarget);\n    };\n    var getTargetElements = function (elm) {\n      var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\n      return elms;\n    };\n    var hasTitle = function (target) {\n      return trim(target.title).length > 0;\n    };\n    var find$2 = function (elm) {\n      var elms = getTargetElements(elm);\n      return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n    };\n    var LinkTargets = { find: find$2 };\n\n    var getActiveEditor = function () {\n      return window.tinymce ? window.tinymce.activeEditor : global$1.activeEditor;\n    };\n    var history = {};\n    var HISTORY_LENGTH = 5;\n    var clearHistory = function () {\n      history = {};\n    };\n    var toMenuItem = function (target) {\n      return {\n        title: target.title,\n        value: {\n          title: { raw: target.title },\n          url: target.url,\n          attach: target.attach\n        }\n      };\n    };\n    var toMenuItems = function (targets) {\n      return global$2.map(targets, toMenuItem);\n    };\n    var staticMenuItem = function (title, url) {\n      return {\n        title: title,\n        value: {\n          title: title,\n          url: url,\n          attach: noop\n        }\n      };\n    };\n    var isUniqueUrl = function (url, targets) {\n      var foundTarget = exists(targets, function (target) {\n        return target.url === url;\n      });\n      return !foundTarget;\n    };\n    var getSetting = function (editorSettings, name, defaultValue) {\n      var value = name in editorSettings ? editorSettings[name] : defaultValue;\n      return value === false ? null : value;\n    };\n    var createMenuItems = function (term, targets, fileType, editorSettings) {\n      var separator = { title: '-' };\n      var fromHistoryMenuItems = function (history) {\n        var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : [];\n        var uniqueHistory = filter(historyItems, function (url) {\n          return isUniqueUrl(url, targets);\n        });\n        return global$2.map(uniqueHistory, function (url) {\n          return {\n            title: url,\n            value: {\n              title: url,\n              url: url,\n              attach: noop\n            }\n          };\n        });\n      };\n      var fromMenuItems = function (type) {\n        var filteredTargets = filter(targets, function (target) {\n          return target.type === type;\n        });\n        return toMenuItems(filteredTargets);\n      };\n      var anchorMenuItems = function () {\n        var anchorMenuItems = fromMenuItems('anchor');\n        var topAnchor = getSetting(editorSettings, 'anchor_top', '#top');\n        var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom');\n        if (topAnchor !== null) {\n          anchorMenuItems.unshift(staticMenuItem('<top>', topAnchor));\n        }\n        if (bottomAchor !== null) {\n          anchorMenuItems.push(staticMenuItem('<bottom>', bottomAchor));\n        }\n        return anchorMenuItems;\n      };\n      var join = function (items) {\n        return foldl(items, function (a, b) {\n          var bothEmpty = a.length === 0 || b.length === 0;\n          return bothEmpty ? a.concat(b) : a.concat(separator, b);\n        }, []);\n      };\n      if (editorSettings.typeahead_urls === false) {\n        return [];\n      }\n      return fileType === 'file' ? join([\n        filterByQuery(term, fromHistoryMenuItems(history)),\n        filterByQuery(term, fromMenuItems('header')),\n        filterByQuery(term, anchorMenuItems())\n      ]) : filterByQuery(term, fromHistoryMenuItems(history));\n    };\n    var addToHistory = function (url, fileType) {\n      var items = history[fileType];\n      if (!/^https?/.test(url)) {\n        return;\n      }\n      if (items) {\n        if (indexOf(items, url).isNone()) {\n          history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url);\n        }\n      } else {\n        history[fileType] = [url];\n      }\n    };\n    var filterByQuery = function (term, menuItems) {\n      var lowerCaseTerm = term.toLowerCase();\n      var result = global$2.grep(menuItems, function (item) {\n        return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1;\n      });\n      return result.length === 1 && result[0].title === term ? [] : result;\n    };\n    var getTitle = function (linkDetails) {\n      var title = linkDetails.title;\n      return title.raw ? title.raw : title;\n    };\n    var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) {\n      var autocomplete = function (term) {\n        var linkTargets = LinkTargets.find(bodyElm);\n        var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings);\n        ctrl.showAutoComplete(menuItems, term);\n      };\n      ctrl.on('autocomplete', function () {\n        autocomplete(ctrl.value());\n      });\n      ctrl.on('selectitem', function (e) {\n        var linkDetails = e.value;\n        ctrl.value(linkDetails.url);\n        var title = getTitle(linkDetails);\n        if (fileType === 'image') {\n          ctrl.fire('change', {\n            meta: {\n              alt: title,\n              attach: linkDetails.attach\n            }\n          });\n        } else {\n          ctrl.fire('change', {\n            meta: {\n              text: title,\n              attach: linkDetails.attach\n            }\n          });\n        }\n        ctrl.focus();\n      });\n      ctrl.on('click', function (e) {\n        if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') {\n          autocomplete('');\n        }\n      });\n      ctrl.on('PostRender', function () {\n        ctrl.getRoot().on('submit', function (e) {\n          if (!e.isDefaultPrevented()) {\n            addToHistory(ctrl.value(), fileType);\n          }\n        });\n      });\n    };\n    var statusToUiState = function (result) {\n      var status = result.status, message = result.message;\n      if (status === 'valid') {\n        return {\n          status: 'ok',\n          message: message\n        };\n      } else if (status === 'unknown') {\n        return {\n          status: 'warn',\n          message: message\n        };\n      } else if (status === 'invalid') {\n        return {\n          status: 'warn',\n          message: message\n        };\n      } else {\n        return {\n          status: 'none',\n          message: ''\n        };\n      }\n    };\n    var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) {\n      var validatorHandler = editorSettings.filepicker_validator_handler;\n      if (validatorHandler) {\n        var validateUrl_1 = function (url) {\n          if (url.length === 0) {\n            ctrl.statusLevel('none');\n            return;\n          }\n          validatorHandler({\n            url: url,\n            type: fileType\n          }, function (result) {\n            var uiState = statusToUiState(result);\n            ctrl.statusMessage(uiState.message);\n            ctrl.statusLevel(uiState.status);\n          });\n        };\n        ctrl.state.on('change:value', function (e) {\n          validateUrl_1(e.value);\n        });\n      }\n    };\n    var FilePicker = ComboBox.extend({\n      Statics: { clearHistory: clearHistory },\n      init: function (settings) {\n        var self = this, editor = getActiveEditor(), editorSettings = editor.settings;\n        var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes;\n        var fileType = settings.filetype;\n        settings.spellcheck = false;\n        fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types;\n        if (fileBrowserCallbackTypes) {\n          fileBrowserCallbackTypes = global$2.makeMap(fileBrowserCallbackTypes, /[, ]/);\n        }\n        if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) {\n          fileBrowserCallback = editorSettings.file_picker_callback;\n          if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {\n            actionCallback = function () {\n              var meta = self.fire('beforecall').meta;\n              meta = global$2.extend({ filetype: fileType }, meta);\n              fileBrowserCallback.call(editor, function (value, meta) {\n                self.value(value).fire('change', { meta: meta });\n              }, self.value(), meta);\n            };\n          } else {\n            fileBrowserCallback = editorSettings.file_browser_callback;\n            if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {\n              actionCallback = function () {\n                fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window);\n              };\n            }\n          }\n        }\n        if (actionCallback) {\n          settings.icon = 'browse';\n          settings.onaction = actionCallback;\n        }\n        self._super(settings);\n        self.classes.add('filepicker');\n        setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType);\n        setupLinkValidatorHandler(self, editorSettings, fileType);\n      }\n    });\n\n    var FitLayout = AbsoluteLayout.extend({\n      recalc: function (container) {\n        var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox;\n        container.items().filter(':visible').each(function (ctrl) {\n          ctrl.layoutRect({\n            x: paddingBox.left,\n            y: paddingBox.top,\n            w: contLayoutRect.innerW - paddingBox.right - paddingBox.left,\n            h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom\n          });\n          if (ctrl.recalc) {\n            ctrl.recalc();\n          }\n        });\n      }\n    });\n\n    var FlexLayout = AbsoluteLayout.extend({\n      recalc: function (container) {\n        var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction;\n        var ctrl, ctrlLayoutRect, ctrlSettings, flex;\n        var maxSizeItems = [];\n        var size, maxSize, ratio, rect, pos, maxAlignEndPos;\n        var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName;\n        var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName;\n        var alignDeltaSizeName, alignContentSizeName;\n        var max = Math.max, min = Math.min;\n        items = container.items().filter(':visible');\n        contLayoutRect = container.layoutRect();\n        contPaddingBox = container.paddingBox;\n        contSettings = container.settings;\n        direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction;\n        align = contSettings.align;\n        pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack;\n        spacing = contSettings.spacing || 0;\n        if (direction === 'row-reversed' || direction === 'column-reverse') {\n          items = items.set(items.toArray().reverse());\n          direction = direction.split('-')[0];\n        }\n        if (direction === 'column') {\n          posName = 'y';\n          sizeName = 'h';\n          minSizeName = 'minH';\n          maxSizeName = 'maxH';\n          innerSizeName = 'innerH';\n          beforeName = 'top';\n          deltaSizeName = 'deltaH';\n          contentSizeName = 'contentH';\n          alignBeforeName = 'left';\n          alignSizeName = 'w';\n          alignAxisName = 'x';\n          alignInnerSizeName = 'innerW';\n          alignMinSizeName = 'minW';\n          alignAfterName = 'right';\n          alignDeltaSizeName = 'deltaW';\n          alignContentSizeName = 'contentW';\n        } else {\n          posName = 'x';\n          sizeName = 'w';\n          minSizeName = 'minW';\n          maxSizeName = 'maxW';\n          innerSizeName = 'innerW';\n          beforeName = 'left';\n          deltaSizeName = 'deltaW';\n          contentSizeName = 'contentW';\n          alignBeforeName = 'top';\n          alignSizeName = 'h';\n          alignAxisName = 'y';\n          alignInnerSizeName = 'innerH';\n          alignMinSizeName = 'minH';\n          alignAfterName = 'bottom';\n          alignDeltaSizeName = 'deltaH';\n          alignContentSizeName = 'contentH';\n        }\n        availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName];\n        maxAlignEndPos = totalFlex = 0;\n        for (i = 0, l = items.length; i < l; i++) {\n          ctrl = items[i];\n          ctrlLayoutRect = ctrl.layoutRect();\n          ctrlSettings = ctrl.settings;\n          flex = ctrlSettings.flex;\n          availableSpace -= i < l - 1 ? spacing : 0;\n          if (flex > 0) {\n            totalFlex += flex;\n            if (ctrlLayoutRect[maxSizeName]) {\n              maxSizeItems.push(ctrl);\n            }\n            ctrlLayoutRect.flex = flex;\n          }\n          availableSpace -= ctrlLayoutRect[minSizeName];\n          size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName];\n          if (size > maxAlignEndPos) {\n            maxAlignEndPos = size;\n          }\n        }\n        rect = {};\n        if (availableSpace < 0) {\n          rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName];\n        } else {\n          rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName];\n        }\n        rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName];\n        rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace;\n        rect[alignContentSizeName] = maxAlignEndPos;\n        rect.minW = min(rect.minW, contLayoutRect.maxW);\n        rect.minH = min(rect.minH, contLayoutRect.maxH);\n        rect.minW = max(rect.minW, contLayoutRect.startMinWidth);\n        rect.minH = max(rect.minH, contLayoutRect.startMinHeight);\n        if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {\n          rect.w = rect.minW;\n          rect.h = rect.minH;\n          container.layoutRect(rect);\n          this.recalc(container);\n          if (container._lastRect === null) {\n            var parentCtrl = container.parent();\n            if (parentCtrl) {\n              parentCtrl._lastRect = null;\n              parentCtrl.recalc();\n            }\n          }\n          return;\n        }\n        ratio = availableSpace / totalFlex;\n        for (i = 0, l = maxSizeItems.length; i < l; i++) {\n          ctrl = maxSizeItems[i];\n          ctrlLayoutRect = ctrl.layoutRect();\n          maxSize = ctrlLayoutRect[maxSizeName];\n          size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio;\n          if (size > maxSize) {\n            availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName];\n            totalFlex -= ctrlLayoutRect.flex;\n            ctrlLayoutRect.flex = 0;\n            ctrlLayoutRect.maxFlexSize = maxSize;\n          } else {\n            ctrlLayoutRect.maxFlexSize = 0;\n          }\n        }\n        ratio = availableSpace / totalFlex;\n        pos = contPaddingBox[beforeName];\n        rect = {};\n        if (totalFlex === 0) {\n          if (pack === 'end') {\n            pos = availableSpace + contPaddingBox[beforeName];\n          } else if (pack === 'center') {\n            pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName];\n            if (pos < 0) {\n              pos = contPaddingBox[beforeName];\n            }\n          } else if (pack === 'justify') {\n            pos = contPaddingBox[beforeName];\n            spacing = Math.floor(availableSpace / (items.length - 1));\n          }\n        }\n        rect[alignAxisName] = contPaddingBox[alignBeforeName];\n        for (i = 0, l = items.length; i < l; i++) {\n          ctrl = items[i];\n          ctrlLayoutRect = ctrl.layoutRect();\n          size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName];\n          if (align === 'center') {\n            rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2);\n          } else if (align === 'stretch') {\n            rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]);\n            rect[alignAxisName] = contPaddingBox[alignBeforeName];\n          } else if (align === 'end') {\n            rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top;\n          }\n          if (ctrlLayoutRect.flex > 0) {\n            size += ctrlLayoutRect.flex * ratio;\n          }\n          rect[sizeName] = size;\n          rect[posName] = pos;\n          ctrl.layoutRect(rect);\n          if (ctrl.recalc) {\n            ctrl.recalc();\n          }\n          pos += size + spacing;\n        }\n      }\n    });\n\n    var FlowLayout = Layout.extend({\n      Defaults: {\n        containerClass: 'flow-layout',\n        controlClass: 'flow-layout-item',\n        endClass: 'break'\n      },\n      recalc: function (container) {\n        container.items().filter(':visible').each(function (ctrl) {\n          if (ctrl.recalc) {\n            ctrl.recalc();\n          }\n        });\n      },\n      isNative: function () {\n        return true;\n      }\n    });\n\n    var descendant = function (scope, selector) {\n      return one(selector, scope);\n    };\n\n    var toggleFormat = function (editor, fmt) {\n      return function () {\n        editor.execCommand('mceToggleFormat', false, fmt);\n      };\n    };\n    var addFormatChangedListener = function (editor, name, changed) {\n      var handler = function (state) {\n        changed(state, name);\n      };\n      if (editor.formatter) {\n        editor.formatter.formatChanged(name, handler);\n      } else {\n        editor.on('init', function () {\n          editor.formatter.formatChanged(name, handler);\n        });\n      }\n    };\n    var postRenderFormatToggle = function (editor, name) {\n      return function (e) {\n        addFormatChangedListener(editor, name, function (state) {\n          e.control.active(state);\n        });\n      };\n    };\n\n    var register = function (editor) {\n      var alignFormats = [\n        'alignleft',\n        'aligncenter',\n        'alignright',\n        'alignjustify'\n      ];\n      var defaultAlign = 'alignleft';\n      var alignMenuItems = [\n        {\n          text: 'Left',\n          icon: 'alignleft',\n          onclick: toggleFormat(editor, 'alignleft')\n        },\n        {\n          text: 'Center',\n          icon: 'aligncenter',\n          onclick: toggleFormat(editor, 'aligncenter')\n        },\n        {\n          text: 'Right',\n          icon: 'alignright',\n          onclick: toggleFormat(editor, 'alignright')\n        },\n        {\n          text: 'Justify',\n          icon: 'alignjustify',\n          onclick: toggleFormat(editor, 'alignjustify')\n        }\n      ];\n      editor.addMenuItem('align', {\n        text: 'Align',\n        menu: alignMenuItems\n      });\n      editor.addButton('align', {\n        type: 'menubutton',\n        icon: defaultAlign,\n        menu: alignMenuItems,\n        onShowMenu: function (e) {\n          var menu = e.control.menu;\n          global$2.each(alignFormats, function (formatName, idx) {\n            menu.items().eq(idx).each(function (item) {\n              return item.active(editor.formatter.match(formatName));\n            });\n          });\n        },\n        onPostRender: function (e) {\n          var ctrl = e.control;\n          global$2.each(alignFormats, function (formatName, idx) {\n            addFormatChangedListener(editor, formatName, function (state) {\n              ctrl.icon(defaultAlign);\n              if (state) {\n                ctrl.icon(formatName);\n              }\n            });\n          });\n        }\n      });\n      global$2.each({\n        alignleft: [\n          'Align left',\n          'JustifyLeft'\n        ],\n        aligncenter: [\n          'Align center',\n          'JustifyCenter'\n        ],\n        alignright: [\n          'Align right',\n          'JustifyRight'\n        ],\n        alignjustify: [\n          'Justify',\n          'JustifyFull'\n        ],\n        alignnone: [\n          'No alignment',\n          'JustifyNone'\n        ]\n      }, function (item, name) {\n        editor.addButton(name, {\n          active: false,\n          tooltip: item[0],\n          cmd: item[1],\n          onPostRender: postRenderFormatToggle(editor, name)\n        });\n      });\n    };\n    var Align = { register: register };\n\n    var getFirstFont = function (fontFamily) {\n      return fontFamily ? fontFamily.split(',')[0] : '';\n    };\n    var findMatchingValue = function (items, fontFamily) {\n      var font = fontFamily ? fontFamily.toLowerCase() : '';\n      var value;\n      global$2.each(items, function (item) {\n        if (item.value.toLowerCase() === font) {\n          value = item.value;\n        }\n      });\n      global$2.each(items, function (item) {\n        if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) {\n          value = item.value;\n        }\n      });\n      return value;\n    };\n    var createFontNameListBoxChangeHandler = function (editor, items) {\n      return function () {\n        var self = this;\n        self.state.set('value', null);\n        editor.on('init nodeChange', function (e) {\n          var fontFamily = editor.queryCommandValue('FontName');\n          var match = findMatchingValue(items, fontFamily);\n          self.value(match ? match : null);\n          if (!match && fontFamily) {\n            self.text(getFirstFont(fontFamily));\n          }\n        });\n      };\n    };\n    var createFormats = function (formats) {\n      formats = formats.replace(/;$/, '').split(';');\n      var i = formats.length;\n      while (i--) {\n        formats[i] = formats[i].split('=');\n      }\n      return formats;\n    };\n    var getFontItems = function (editor) {\n      var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats';\n      var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);\n      return global$2.map(fonts, function (font) {\n        return {\n          text: { raw: font[0] },\n          value: font[1],\n          textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''\n        };\n      });\n    };\n    var registerButtons = function (editor) {\n      editor.addButton('fontselect', function () {\n        var items = getFontItems(editor);\n        return {\n          type: 'listbox',\n          text: 'Font Family',\n          tooltip: 'Font Family',\n          values: items,\n          fixedWidth: true,\n          onPostRender: createFontNameListBoxChangeHandler(editor, items),\n          onselect: function (e) {\n            if (e.control.settings.value) {\n              editor.execCommand('FontName', false, e.control.settings.value);\n            }\n          }\n        };\n      });\n    };\n    var register$1 = function (editor) {\n      registerButtons(editor);\n    };\n    var FontSelect = { register: register$1 };\n\n    var round = function (number, precision) {\n      var factor = Math.pow(10, precision);\n      return Math.round(number * factor) / factor;\n    };\n    var toPt = function (fontSize, precision) {\n      if (/[0-9.]+px$/.test(fontSize)) {\n        return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n      }\n      return fontSize;\n    };\n    var findMatchingValue$1 = function (items, pt, px) {\n      var value;\n      global$2.each(items, function (item) {\n        if (item.value === px) {\n          value = px;\n        } else if (item.value === pt) {\n          value = pt;\n        }\n      });\n      return value;\n    };\n    var createFontSizeListBoxChangeHandler = function (editor, items) {\n      return function () {\n        var self = this;\n        editor.on('init nodeChange', function (e) {\n          var px, pt, precision, match;\n          px = editor.queryCommandValue('FontSize');\n          if (px) {\n            for (precision = 3; !match && precision >= 0; precision--) {\n              pt = toPt(px, precision);\n              match = findMatchingValue$1(items, pt, px);\n            }\n          }\n          self.value(match ? match : null);\n          if (!match) {\n            self.text(pt);\n          }\n        });\n      };\n    };\n    var getFontSizeItems = function (editor) {\n      var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';\n      var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats;\n      return global$2.map(fontsizeFormats.split(' '), function (item) {\n        var text = item, value = item;\n        var values = item.split('=');\n        if (values.length > 1) {\n          text = values[0];\n          value = values[1];\n        }\n        return {\n          text: text,\n          value: value\n        };\n      });\n    };\n    var registerButtons$1 = function (editor) {\n      editor.addButton('fontsizeselect', function () {\n        var items = getFontSizeItems(editor);\n        return {\n          type: 'listbox',\n          text: 'Font Sizes',\n          tooltip: 'Font Sizes',\n          values: items,\n          fixedWidth: true,\n          onPostRender: createFontSizeListBoxChangeHandler(editor, items),\n          onclick: function (e) {\n            if (e.control.settings.value) {\n              editor.execCommand('FontSize', false, e.control.settings.value);\n            }\n          }\n        };\n      });\n    };\n    var register$2 = function (editor) {\n      registerButtons$1(editor);\n    };\n    var FontSizeSelect = { register: register$2 };\n\n    var hideMenuObjects = function (editor, menu) {\n      var count = menu.length;\n      global$2.each(menu, function (item) {\n        if (item.menu) {\n          item.hidden = hideMenuObjects(editor, item.menu) === 0;\n        }\n        var formatName = item.format;\n        if (formatName) {\n          item.hidden = !editor.formatter.canApply(formatName);\n        }\n        if (item.hidden) {\n          count--;\n        }\n      });\n      return count;\n    };\n    var hideFormatMenuItems = function (editor, menu) {\n      var count = menu.items().length;\n      menu.items().each(function (item) {\n        if (item.menu) {\n          item.visible(hideFormatMenuItems(editor, item.menu) > 0);\n        }\n        if (!item.menu && item.settings.menu) {\n          item.visible(hideMenuObjects(editor, item.settings.menu) > 0);\n        }\n        var formatName = item.settings.format;\n        if (formatName) {\n          item.visible(editor.formatter.canApply(formatName));\n        }\n        if (!item.visible()) {\n          count--;\n        }\n      });\n      return count;\n    };\n    var createFormatMenu = function (editor) {\n      var count = 0;\n      var newFormats = [];\n      var defaultStyleFormats = [\n        {\n          title: 'Headings',\n          items: [\n            {\n              title: 'Heading 1',\n              format: 'h1'\n            },\n            {\n              title: 'Heading 2',\n              format: 'h2'\n            },\n            {\n              title: 'Heading 3',\n              format: 'h3'\n            },\n            {\n              title: 'Heading 4',\n              format: 'h4'\n            },\n            {\n              title: 'Heading 5',\n              format: 'h5'\n            },\n            {\n              title: 'Heading 6',\n              format: 'h6'\n            }\n          ]\n        },\n        {\n          title: 'Inline',\n          items: [\n            {\n              title: 'Bold',\n              icon: 'bold',\n              format: 'bold'\n            },\n            {\n              title: 'Italic',\n              icon: 'italic',\n              format: 'italic'\n            },\n            {\n              title: 'Underline',\n              icon: 'underline',\n              format: 'underline'\n            },\n            {\n              title: 'Strikethrough',\n              icon: 'strikethrough',\n              format: 'strikethrough'\n            },\n            {\n              title: 'Superscript',\n              icon: 'superscript',\n              format: 'superscript'\n            },\n            {\n              title: 'Subscript',\n              icon: 'subscript',\n              format: 'subscript'\n            },\n            {\n              title: 'Code',\n              icon: 'code',\n              format: 'code'\n            }\n          ]\n        },\n        {\n          title: 'Blocks',\n          items: [\n            {\n              title: 'Paragraph',\n              format: 'p'\n            },\n            {\n              title: 'Blockquote',\n              format: 'blockquote'\n            },\n            {\n              title: 'Div',\n              format: 'div'\n            },\n            {\n              title: 'Pre',\n              format: 'pre'\n            }\n          ]\n        },\n        {\n          title: 'Alignment',\n          items: [\n            {\n              title: 'Left',\n              icon: 'alignleft',\n              format: 'alignleft'\n            },\n            {\n              title: 'Center',\n              icon: 'aligncenter',\n              format: 'aligncenter'\n            },\n            {\n              title: 'Right',\n              icon: 'alignright',\n              format: 'alignright'\n            },\n            {\n              title: 'Justify',\n              icon: 'alignjustify',\n              format: 'alignjustify'\n            }\n          ]\n        }\n      ];\n      var createMenu = function (formats) {\n        var menu = [];\n        if (!formats) {\n          return;\n        }\n        global$2.each(formats, function (format) {\n          var menuItem = {\n            text: format.title,\n            icon: format.icon\n          };\n          if (format.items) {\n            menuItem.menu = createMenu(format.items);\n          } else {\n            var formatName = format.format || 'custom' + count++;\n            if (!format.format) {\n              format.name = formatName;\n              newFormats.push(format);\n            }\n            menuItem.format = formatName;\n            menuItem.cmd = format.cmd;\n          }\n          menu.push(menuItem);\n        });\n        return menu;\n      };\n      var createStylesMenu = function () {\n        var menu;\n        if (editor.settings.style_formats_merge) {\n          if (editor.settings.style_formats) {\n            menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats));\n          } else {\n            menu = createMenu(defaultStyleFormats);\n          }\n        } else {\n          menu = createMenu(editor.settings.style_formats || defaultStyleFormats);\n        }\n        return menu;\n      };\n      editor.on('init', function () {\n        global$2.each(newFormats, function (format) {\n          editor.formatter.register(format.name, format);\n        });\n      });\n      return {\n        type: 'menu',\n        items: createStylesMenu(),\n        onPostRender: function (e) {\n          editor.fire('renderFormatsMenu', { control: e.control });\n        },\n        itemDefaults: {\n          preview: true,\n          textStyle: function () {\n            if (this.settings.format) {\n              return editor.formatter.getCssText(this.settings.format);\n            }\n          },\n          onPostRender: function () {\n            var self = this;\n            self.parent().on('show', function () {\n              var formatName, command;\n              formatName = self.settings.format;\n              if (formatName) {\n                self.disabled(!editor.formatter.canApply(formatName));\n                self.active(editor.formatter.match(formatName));\n              }\n              command = self.settings.cmd;\n              if (command) {\n                self.active(editor.queryCommandState(command));\n              }\n            });\n          },\n          onclick: function () {\n            if (this.settings.format) {\n              toggleFormat(editor, this.settings.format)();\n            }\n            if (this.settings.cmd) {\n              editor.execCommand(this.settings.cmd);\n            }\n          }\n        }\n      };\n    };\n    var registerMenuItems = function (editor, formatMenu) {\n      editor.addMenuItem('formats', {\n        text: 'Formats',\n        menu: formatMenu\n      });\n    };\n    var registerButtons$2 = function (editor, formatMenu) {\n      editor.addButton('styleselect', {\n        type: 'menubutton',\n        text: 'Formats',\n        menu: formatMenu,\n        onShowMenu: function () {\n          if (editor.settings.style_formats_autohide) {\n            hideFormatMenuItems(editor, this.menu);\n          }\n        }\n      });\n    };\n    var register$3 = function (editor) {\n      var formatMenu = createFormatMenu(editor);\n      registerMenuItems(editor, formatMenu);\n      registerButtons$2(editor, formatMenu);\n    };\n    var Formats = { register: register$3 };\n\n    var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';\n    var createFormats$1 = function (formats) {\n      formats = formats.replace(/;$/, '').split(';');\n      var i = formats.length;\n      while (i--) {\n        formats[i] = formats[i].split('=');\n      }\n      return formats;\n    };\n    var createListBoxChangeHandler = function (editor, items, formatName) {\n      return function () {\n        var self = this;\n        editor.on('nodeChange', function (e) {\n          var formatter = editor.formatter;\n          var value = null;\n          global$2.each(e.parents, function (node) {\n            global$2.each(items, function (item) {\n              if (formatName) {\n                if (formatter.matchNode(node, formatName, { value: item.value })) {\n                  value = item.value;\n                }\n              } else {\n                if (formatter.matchNode(node, item.value)) {\n                  value = item.value;\n                }\n              }\n              if (value) {\n                return false;\n              }\n            });\n            if (value) {\n              return false;\n            }\n          });\n          self.value(value);\n        });\n      };\n    };\n    var lazyFormatSelectBoxItems = function (editor, blocks) {\n      return function () {\n        var items = [];\n        global$2.each(blocks, function (block) {\n          items.push({\n            text: block[0],\n            value: block[1],\n            textStyle: function () {\n              return editor.formatter.getCssText(block[1]);\n            }\n          });\n        });\n        return {\n          type: 'listbox',\n          text: blocks[0][0],\n          values: items,\n          fixedWidth: true,\n          onselect: function (e) {\n            if (e.control) {\n              var fmt = e.control.value();\n              toggleFormat(editor, fmt)();\n            }\n          },\n          onPostRender: createListBoxChangeHandler(editor, items)\n        };\n      };\n    };\n    var buildMenuItems = function (editor, blocks) {\n      return global$2.map(blocks, function (block) {\n        return {\n          text: block[0],\n          onclick: toggleFormat(editor, block[1]),\n          textStyle: function () {\n            return editor.formatter.getCssText(block[1]);\n          }\n        };\n      });\n    };\n    var register$4 = function (editor) {\n      var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks);\n      editor.addMenuItem('blockformats', {\n        text: 'Blocks',\n        menu: buildMenuItems(editor, blocks)\n      });\n      editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks));\n    };\n    var FormatSelect = { register: register$4 };\n\n    var createCustomMenuItems = function (editor, names) {\n      var items, nameList;\n      if (typeof names === 'string') {\n        nameList = names.split(' ');\n      } else if (global$2.isArray(names)) {\n        return flatten(global$2.map(names, function (names) {\n          return createCustomMenuItems(editor, names);\n        }));\n      }\n      items = global$2.grep(nameList, function (name) {\n        return name === '|' || name in editor.menuItems;\n      });\n      return global$2.map(items, function (name) {\n        return name === '|' ? { text: '-' } : editor.menuItems[name];\n      });\n    };\n    var isSeparator$1 = function (menuItem) {\n      return menuItem && menuItem.text === '-';\n    };\n    var trimMenuItems = function (menuItems) {\n      var menuItems2 = filter(menuItems, function (menuItem, i) {\n        return !isSeparator$1(menuItem) || !isSeparator$1(menuItems[i - 1]);\n      });\n      return filter(menuItems2, function (menuItem, i) {\n        return !isSeparator$1(menuItem) || i > 0 && i < menuItems2.length - 1;\n      });\n    };\n    var createContextMenuItems = function (editor, context) {\n      var outputMenuItems = [{ text: '-' }];\n      var menuItems = global$2.grep(editor.menuItems, function (menuItem) {\n        return menuItem.context === context;\n      });\n      global$2.each(menuItems, function (menuItem) {\n        if (menuItem.separator === 'before') {\n          outputMenuItems.push({ text: '|' });\n        }\n        if (menuItem.prependToContext) {\n          outputMenuItems.unshift(menuItem);\n        } else {\n          outputMenuItems.push(menuItem);\n        }\n        if (menuItem.separator === 'after') {\n          outputMenuItems.push({ text: '|' });\n        }\n      });\n      return outputMenuItems;\n    };\n    var createInsertMenu = function (editor) {\n      var insertButtonItems = editor.settings.insert_button_items;\n      if (insertButtonItems) {\n        return trimMenuItems(createCustomMenuItems(editor, insertButtonItems));\n      } else {\n        return trimMenuItems(createContextMenuItems(editor, 'insert'));\n      }\n    };\n    var registerButtons$3 = function (editor) {\n      editor.addButton('insert', {\n        type: 'menubutton',\n        icon: 'insert',\n        menu: [],\n        oncreatemenu: function () {\n          this.menu.add(createInsertMenu(editor));\n          this.menu.renderNew();\n        }\n      });\n    };\n    var register$5 = function (editor) {\n      registerButtons$3(editor);\n    };\n    var InsertButton = { register: register$5 };\n\n    var registerFormatButtons = function (editor) {\n      global$2.each({\n        bold: 'Bold',\n        italic: 'Italic',\n        underline: 'Underline',\n        strikethrough: 'Strikethrough',\n        subscript: 'Subscript',\n        superscript: 'Superscript'\n      }, function (text, name) {\n        editor.addButton(name, {\n          active: false,\n          tooltip: text,\n          onPostRender: postRenderFormatToggle(editor, name),\n          onclick: toggleFormat(editor, name)\n        });\n      });\n    };\n    var registerCommandButtons = function (editor) {\n      global$2.each({\n        outdent: [\n          'Decrease indent',\n          'Outdent'\n        ],\n        indent: [\n          'Increase indent',\n          'Indent'\n        ],\n        cut: [\n          'Cut',\n          'Cut'\n        ],\n        copy: [\n          'Copy',\n          'Copy'\n        ],\n        paste: [\n          'Paste',\n          'Paste'\n        ],\n        help: [\n          'Help',\n          'mceHelp'\n        ],\n        selectall: [\n          'Select all',\n          'SelectAll'\n        ],\n        visualaid: [\n          'Visual aids',\n          'mceToggleVisualAid'\n        ],\n        newdocument: [\n          'New document',\n          'mceNewDocument'\n        ],\n        removeformat: [\n          'Clear formatting',\n          'RemoveFormat'\n        ],\n        remove: [\n          'Remove',\n          'Delete'\n        ]\n      }, function (item, name) {\n        editor.addButton(name, {\n          tooltip: item[0],\n          cmd: item[1]\n        });\n      });\n    };\n    var registerCommandToggleButtons = function (editor) {\n      global$2.each({\n        blockquote: [\n          'Blockquote',\n          'mceBlockQuote'\n        ],\n        subscript: [\n          'Subscript',\n          'Subscript'\n        ],\n        superscript: [\n          'Superscript',\n          'Superscript'\n        ]\n      }, function (item, name) {\n        editor.addButton(name, {\n          active: false,\n          tooltip: item[0],\n          cmd: item[1],\n          onPostRender: postRenderFormatToggle(editor, name)\n        });\n      });\n    };\n    var registerButtons$4 = function (editor) {\n      registerFormatButtons(editor);\n      registerCommandButtons(editor);\n      registerCommandToggleButtons(editor);\n    };\n    var registerMenuItems$1 = function (editor) {\n      global$2.each({\n        bold: [\n          'Bold',\n          'Bold',\n          'Meta+B'\n        ],\n        italic: [\n          'Italic',\n          'Italic',\n          'Meta+I'\n        ],\n        underline: [\n          'Underline',\n          'Underline',\n          'Meta+U'\n        ],\n        strikethrough: [\n          'Strikethrough',\n          'Strikethrough'\n        ],\n        subscript: [\n          'Subscript',\n          'Subscript'\n        ],\n        superscript: [\n          'Superscript',\n          'Superscript'\n        ],\n        removeformat: [\n          'Clear formatting',\n          'RemoveFormat'\n        ],\n        newdocument: [\n          'New document',\n          'mceNewDocument'\n        ],\n        cut: [\n          'Cut',\n          'Cut',\n          'Meta+X'\n        ],\n        copy: [\n          'Copy',\n          'Copy',\n          'Meta+C'\n        ],\n        paste: [\n          'Paste',\n          'Paste',\n          'Meta+V'\n        ],\n        selectall: [\n          'Select all',\n          'SelectAll',\n          'Meta+A'\n        ]\n      }, function (item, name) {\n        editor.addMenuItem(name, {\n          text: item[0],\n          icon: name,\n          shortcut: item[2],\n          cmd: item[1]\n        });\n      });\n      editor.addMenuItem('codeformat', {\n        text: 'Code',\n        icon: 'code',\n        onclick: toggleFormat(editor, 'code')\n      });\n    };\n    var register$6 = function (editor) {\n      registerButtons$4(editor);\n      registerMenuItems$1(editor);\n    };\n    var SimpleControls = { register: register$6 };\n\n    var toggleUndoRedoState = function (editor, type) {\n      return function () {\n        var self = this;\n        var checkState = function () {\n          var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo';\n          return editor.undoManager ? editor.undoManager[typeFn]() : false;\n        };\n        self.disabled(!checkState());\n        editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () {\n          self.disabled(editor.readonly || !checkState());\n        });\n      };\n    };\n    var registerMenuItems$2 = function (editor) {\n      editor.addMenuItem('undo', {\n        text: 'Undo',\n        icon: 'undo',\n        shortcut: 'Meta+Z',\n        onPostRender: toggleUndoRedoState(editor, 'undo'),\n        cmd: 'undo'\n      });\n      editor.addMenuItem('redo', {\n        text: 'Redo',\n        icon: 'redo',\n        shortcut: 'Meta+Y',\n        onPostRender: toggleUndoRedoState(editor, 'redo'),\n        cmd: 'redo'\n      });\n    };\n    var registerButtons$5 = function (editor) {\n      editor.addButton('undo', {\n        tooltip: 'Undo',\n        onPostRender: toggleUndoRedoState(editor, 'undo'),\n        cmd: 'undo'\n      });\n      editor.addButton('redo', {\n        tooltip: 'Redo',\n        onPostRender: toggleUndoRedoState(editor, 'redo'),\n        cmd: 'redo'\n      });\n    };\n    var register$7 = function (editor) {\n      registerMenuItems$2(editor);\n      registerButtons$5(editor);\n    };\n    var UndoRedo = { register: register$7 };\n\n    var toggleVisualAidState = function (editor) {\n      return function () {\n        var self = this;\n        editor.on('VisualAid', function (e) {\n          self.active(e.hasVisual);\n        });\n        self.active(editor.hasVisual);\n      };\n    };\n    var registerMenuItems$3 = function (editor) {\n      editor.addMenuItem('visualaid', {\n        text: 'Visual aids',\n        selectable: true,\n        onPostRender: toggleVisualAidState(editor),\n        cmd: 'mceToggleVisualAid'\n      });\n    };\n    var register$8 = function (editor) {\n      registerMenuItems$3(editor);\n    };\n    var VisualAid = { register: register$8 };\n\n    var setupEnvironment = function () {\n      Widget.tooltips = !global$8.iOS;\n      Control$1.translate = function (text) {\n        return global$1.translate(text);\n      };\n    };\n    var setupUiContainer = function (editor) {\n      if (editor.settings.ui_container) {\n        global$8.container = descendant(Element.fromDom(domGlobals.document.body), editor.settings.ui_container).fold(constant(null), function (elm) {\n          return elm.dom();\n        });\n      }\n    };\n    var setupRtlMode = function (editor) {\n      if (editor.rtl) {\n        Control$1.rtl = true;\n      }\n    };\n    var setupHideFloatPanels = function (editor) {\n      editor.on('mousedown progressstate', function () {\n        FloatPanel.hideAll();\n      });\n    };\n    var setup$1 = function (editor) {\n      setupRtlMode(editor);\n      setupHideFloatPanels(editor);\n      setupUiContainer(editor);\n      setupEnvironment();\n      FormatSelect.register(editor);\n      Align.register(editor);\n      SimpleControls.register(editor);\n      UndoRedo.register(editor);\n      FontSizeSelect.register(editor);\n      FontSelect.register(editor);\n      Formats.register(editor);\n      VisualAid.register(editor);\n      InsertButton.register(editor);\n    };\n    var FormatControls = { setup: setup$1 };\n\n    var GridLayout = AbsoluteLayout.extend({\n      recalc: function (container) {\n        var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY;\n        var colWidths = [];\n        var rowHeights = [];\n        var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx;\n        settings = container.settings;\n        items = container.items().filter(':visible');\n        contLayoutRect = container.layoutRect();\n        cols = settings.columns || Math.ceil(Math.sqrt(items.length));\n        rows = Math.ceil(items.length / cols);\n        spacingH = settings.spacingH || settings.spacing || 0;\n        spacingV = settings.spacingV || settings.spacing || 0;\n        alignH = settings.alignH || settings.align;\n        alignV = settings.alignV || settings.align;\n        contPaddingBox = container.paddingBox;\n        reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl();\n        if (alignH && typeof alignH === 'string') {\n          alignH = [alignH];\n        }\n        if (alignV && typeof alignV === 'string') {\n          alignV = [alignV];\n        }\n        for (x = 0; x < cols; x++) {\n          colWidths.push(0);\n        }\n        for (y = 0; y < rows; y++) {\n          rowHeights.push(0);\n        }\n        for (y = 0; y < rows; y++) {\n          for (x = 0; x < cols; x++) {\n            ctrl = items[y * cols + x];\n            if (!ctrl) {\n              break;\n            }\n            ctrlLayoutRect = ctrl.layoutRect();\n            ctrlMinWidth = ctrlLayoutRect.minW;\n            ctrlMinHeight = ctrlLayoutRect.minH;\n            colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x];\n            rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y];\n          }\n        }\n        availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right;\n        for (maxX = 0, x = 0; x < cols; x++) {\n          maxX += colWidths[x] + (x > 0 ? spacingH : 0);\n          availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x];\n        }\n        availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom;\n        for (maxY = 0, y = 0; y < rows; y++) {\n          maxY += rowHeights[y] + (y > 0 ? spacingV : 0);\n          availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y];\n        }\n        maxX += contPaddingBox.left + contPaddingBox.right;\n        maxY += contPaddingBox.top + contPaddingBox.bottom;\n        rect = {};\n        rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW);\n        rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH);\n        rect.contentW = rect.minW - contLayoutRect.deltaW;\n        rect.contentH = rect.minH - contLayoutRect.deltaH;\n        rect.minW = Math.min(rect.minW, contLayoutRect.maxW);\n        rect.minH = Math.min(rect.minH, contLayoutRect.maxH);\n        rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth);\n        rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight);\n        if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {\n          rect.w = rect.minW;\n          rect.h = rect.minH;\n          container.layoutRect(rect);\n          this.recalc(container);\n          if (container._lastRect === null) {\n            var parentCtrl = container.parent();\n            if (parentCtrl) {\n              parentCtrl._lastRect = null;\n              parentCtrl.recalc();\n            }\n          }\n          return;\n        }\n        if (contLayoutRect.autoResize) {\n          rect = container.layoutRect(rect);\n          rect.contentW = rect.minW - contLayoutRect.deltaW;\n          rect.contentH = rect.minH - contLayoutRect.deltaH;\n        }\n        var flexV;\n        if (settings.packV === 'start') {\n          flexV = 0;\n        } else {\n          flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0;\n        }\n        var totalFlex = 0;\n        var flexWidths = settings.flexWidths;\n        if (flexWidths) {\n          for (x = 0; x < flexWidths.length; x++) {\n            totalFlex += flexWidths[x];\n          }\n        } else {\n          totalFlex = cols;\n        }\n        var ratio = availableWidth / totalFlex;\n        for (x = 0; x < cols; x++) {\n          colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio;\n        }\n        posY = contPaddingBox.top;\n        for (y = 0; y < rows; y++) {\n          posX = contPaddingBox.left;\n          height = rowHeights[y] + flexV;\n          for (x = 0; x < cols; x++) {\n            if (reverseRows) {\n              idx = y * cols + cols - 1 - x;\n            } else {\n              idx = y * cols + x;\n            }\n            ctrl = items[idx];\n            if (!ctrl) {\n              break;\n            }\n            ctrlSettings = ctrl.settings;\n            ctrlLayoutRect = ctrl.layoutRect();\n            width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth);\n            ctrlLayoutRect.x = posX;\n            ctrlLayoutRect.y = posY;\n            align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null);\n            if (align === 'center') {\n              ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2;\n            } else if (align === 'right') {\n              ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w;\n            } else if (align === 'stretch') {\n              ctrlLayoutRect.w = width;\n            }\n            align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null);\n            if (align === 'center') {\n              ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2;\n            } else if (align === 'bottom') {\n              ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h;\n            } else if (align === 'stretch') {\n              ctrlLayoutRect.h = height;\n            }\n            ctrl.layoutRect(ctrlLayoutRect);\n            posX += width + spacingH;\n            if (ctrl.recalc) {\n              ctrl.recalc();\n            }\n          }\n          posY += height + spacingV;\n        }\n      }\n    });\n\n    var Iframe$1 = Widget.extend({\n      renderHtml: function () {\n        var self = this;\n        self.classes.add('iframe');\n        self.canFocus = false;\n        return '<iframe id=\"' + self._id + '\" class=\"' + self.classes + '\" tabindex=\"-1\" src=\"' + (self.settings.url || 'javascript:\\'\\'') + '\" frameborder=\"0\"></iframe>';\n      },\n      src: function (src) {\n        this.getEl().src = src;\n      },\n      html: function (html, callback) {\n        var self = this, body = this.getEl().contentWindow.document.body;\n        if (!body) {\n          global$7.setTimeout(function () {\n            self.html(html);\n          });\n        } else {\n          body.innerHTML = html;\n          if (callback) {\n            callback();\n          }\n        }\n        return this;\n      }\n    });\n\n    var InfoBox = Widget.extend({\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        self.classes.add('widget').add('infobox');\n        self.canFocus = false;\n      },\n      severity: function (level) {\n        this.classes.remove('error');\n        this.classes.remove('warning');\n        this.classes.remove('success');\n        this.classes.add(level);\n      },\n      help: function (state) {\n        this.state.set('help', state);\n      },\n      renderHtml: function () {\n        var self = this, prefix = self.classPrefix;\n        return '<div id=\"' + self._id + '\" class=\"' + self.classes + '\">' + '<div id=\"' + self._id + '-body\">' + self.encode(self.state.get('text')) + '<button role=\"button\" tabindex=\"-1\">' + '<i class=\"' + prefix + 'ico ' + prefix + 'i-help\"></i>' + '</button>' + '</div>' + '</div>';\n      },\n      bindStates: function () {\n        var self = this;\n        self.state.on('change:text', function (e) {\n          self.getEl('body').firstChild.data = self.encode(e.value);\n          if (self.state.get('rendered')) {\n            self.updateLayoutRect();\n          }\n        });\n        self.state.on('change:help', function (e) {\n          self.classes.toggle('has-help', e.value);\n          if (self.state.get('rendered')) {\n            self.updateLayoutRect();\n          }\n        });\n        return self._super();\n      }\n    });\n\n    var Label = Widget.extend({\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        self.classes.add('widget').add('label');\n        self.canFocus = false;\n        if (settings.multiline) {\n          self.classes.add('autoscroll');\n        }\n        if (settings.strong) {\n          self.classes.add('strong');\n        }\n      },\n      initLayoutRect: function () {\n        var self = this, layoutRect = self._super();\n        if (self.settings.multiline) {\n          var size = funcs.getSize(self.getEl());\n          if (size.width > layoutRect.maxW) {\n            layoutRect.minW = layoutRect.maxW;\n            self.classes.add('multiline');\n          }\n          self.getEl().style.width = layoutRect.minW + 'px';\n          layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height);\n        }\n        return layoutRect;\n      },\n      repaint: function () {\n        var self = this;\n        if (!self.settings.multiline) {\n          self.getEl().style.lineHeight = self.layoutRect().h + 'px';\n        }\n        return self._super();\n      },\n      severity: function (level) {\n        this.classes.remove('error');\n        this.classes.remove('warning');\n        this.classes.remove('success');\n        this.classes.add(level);\n      },\n      renderHtml: function () {\n        var self = this;\n        var targetCtrl, forName, forId = self.settings.forId;\n        var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text'));\n        if (!forId && (forName = self.settings.forName)) {\n          targetCtrl = self.getRoot().find('#' + forName)[0];\n          if (targetCtrl) {\n            forId = targetCtrl._id;\n          }\n        }\n        if (forId) {\n          return '<label id=\"' + self._id + '\" class=\"' + self.classes + '\"' + (forId ? ' for=\"' + forId + '\"' : '') + '>' + text + '</label>';\n        }\n        return '<span id=\"' + self._id + '\" class=\"' + self.classes + '\">' + text + '</span>';\n      },\n      bindStates: function () {\n        var self = this;\n        self.state.on('change:text', function (e) {\n          self.innerHtml(self.encode(e.value));\n          if (self.state.get('rendered')) {\n            self.updateLayoutRect();\n          }\n        });\n        return self._super();\n      }\n    });\n\n    var Toolbar$1 = Container.extend({\n      Defaults: {\n        role: 'toolbar',\n        layout: 'flow'\n      },\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        self.classes.add('toolbar');\n      },\n      postRender: function () {\n        var self = this;\n        self.items().each(function (ctrl) {\n          ctrl.classes.add('toolbar-item');\n        });\n        return self._super();\n      }\n    });\n\n    var MenuBar = Toolbar$1.extend({\n      Defaults: {\n        role: 'menubar',\n        containerCls: 'menubar',\n        ariaRoot: true,\n        defaults: { type: 'menubutton' }\n      }\n    });\n\n    function isChildOf$1(node, parent) {\n      while (node) {\n        if (parent === node) {\n          return true;\n        }\n        node = node.parentNode;\n      }\n      return false;\n    }\n    var MenuButton = Button.extend({\n      init: function (settings) {\n        var self = this;\n        self._renderOpen = true;\n        self._super(settings);\n        settings = self.settings;\n        self.classes.add('menubtn');\n        if (settings.fixedWidth) {\n          self.classes.add('fixed-width');\n        }\n        self.aria('haspopup', true);\n        self.state.set('menu', settings.menu || self.render());\n      },\n      showMenu: function (toggle) {\n        var self = this;\n        var menu;\n        if (self.menu && self.menu.visible() && toggle !== false) {\n          return self.hideMenu();\n        }\n        if (!self.menu) {\n          menu = self.state.get('menu') || [];\n          self.classes.add('opened');\n          if (menu.length) {\n            menu = {\n              type: 'menu',\n              animate: true,\n              items: menu\n            };\n          } else {\n            menu.type = menu.type || 'menu';\n            menu.animate = true;\n          }\n          if (!menu.renderTo) {\n            self.menu = global$4.create(menu).parent(self).renderTo();\n          } else {\n            self.menu = menu.parent(self).show().renderTo();\n          }\n          self.fire('createmenu');\n          self.menu.reflow();\n          self.menu.on('cancel', function (e) {\n            if (e.control.parent() === self.menu) {\n              e.stopPropagation();\n              self.focus();\n              self.hideMenu();\n            }\n          });\n          self.menu.on('select', function () {\n            self.focus();\n          });\n          self.menu.on('show hide', function (e) {\n            if (e.type === 'hide' && e.control.parent() === self) {\n              self.classes.remove('opened-under');\n            }\n            if (e.control === self.menu) {\n              self.activeMenu(e.type === 'show');\n              self.classes.toggle('opened', e.type === 'show');\n            }\n            self.aria('expanded', e.type === 'show');\n          }).fire('show');\n        }\n        self.menu.show();\n        self.menu.layoutRect({ w: self.layoutRect().w });\n        self.menu.repaint();\n        self.menu.moveRel(self.getEl(), self.isRtl() ? [\n          'br-tr',\n          'tr-br'\n        ] : [\n          'bl-tl',\n          'tl-bl'\n        ]);\n        var menuLayoutRect = self.menu.layoutRect();\n        var selfBottom = self.$el.offset().top + self.layoutRect().h;\n        if (selfBottom > menuLayoutRect.y && selfBottom < menuLayoutRect.y + menuLayoutRect.h) {\n          self.classes.add('opened-under');\n        }\n        self.fire('showmenu');\n      },\n      hideMenu: function () {\n        var self = this;\n        if (self.menu) {\n          self.menu.items().each(function (item) {\n            if (item.hideMenu) {\n              item.hideMenu();\n            }\n          });\n          self.menu.hide();\n        }\n      },\n      activeMenu: function (state) {\n        this.classes.toggle('active', state);\n      },\n      renderHtml: function () {\n        var self = this, id = self._id, prefix = self.classPrefix;\n        var icon = self.settings.icon, image;\n        var text = self.state.get('text');\n        var textHtml = '';\n        image = self.settings.image;\n        if (image) {\n          icon = 'none';\n          if (typeof image !== 'string') {\n            image = domGlobals.window.getSelection ? image[0] : image[1];\n          }\n          image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n        } else {\n          image = '';\n        }\n        if (text) {\n          self.classes.add('btn-has-text');\n          textHtml = '<span class=\"' + prefix + 'txt\">' + self.encode(text) + '</span>';\n        }\n        icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n        self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button');\n        return '<div id=\"' + id + '\" class=\"' + self.classes + '\" tabindex=\"-1\" aria-labelledby=\"' + id + '\">' + '<button id=\"' + id + '-open\" role=\"presentation\" type=\"button\" tabindex=\"-1\">' + (icon ? '<i class=\"' + icon + '\"' + image + '></i>' : '') + textHtml + ' <i class=\"' + prefix + 'caret\"></i>' + '</button>' + '</div>';\n      },\n      postRender: function () {\n        var self = this;\n        self.on('click', function (e) {\n          if (e.control === self && isChildOf$1(e.target, self.getEl())) {\n            self.focus();\n            self.showMenu(!e.aria);\n            if (e.aria) {\n              self.menu.items().filter(':visible')[0].focus();\n            }\n          }\n        });\n        self.on('mouseenter', function (e) {\n          var overCtrl = e.control;\n          var parent = self.parent();\n          var hasVisibleSiblingMenu;\n          if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() === parent) {\n            parent.items().filter('MenuButton').each(function (ctrl) {\n              if (ctrl.hideMenu && ctrl !== overCtrl) {\n                if (ctrl.menu && ctrl.menu.visible()) {\n                  hasVisibleSiblingMenu = true;\n                }\n                ctrl.hideMenu();\n              }\n            });\n            if (hasVisibleSiblingMenu) {\n              overCtrl.focus();\n              overCtrl.showMenu();\n            }\n          }\n        });\n        return self._super();\n      },\n      bindStates: function () {\n        var self = this;\n        self.state.on('change:menu', function () {\n          if (self.menu) {\n            self.menu.remove();\n          }\n          self.menu = null;\n        });\n        return self._super();\n      },\n      remove: function () {\n        this._super();\n        if (this.menu) {\n          this.menu.remove();\n        }\n      }\n    });\n\n    var Menu = FloatPanel.extend({\n      Defaults: {\n        defaultType: 'menuitem',\n        border: 1,\n        layout: 'stack',\n        role: 'application',\n        bodyRole: 'menu',\n        ariaRoot: true\n      },\n      init: function (settings) {\n        var self = this;\n        settings.autohide = true;\n        settings.constrainToViewport = true;\n        if (typeof settings.items === 'function') {\n          settings.itemsFactory = settings.items;\n          settings.items = [];\n        }\n        if (settings.itemDefaults) {\n          var items = settings.items;\n          var i = items.length;\n          while (i--) {\n            items[i] = global$2.extend({}, settings.itemDefaults, items[i]);\n          }\n        }\n        self._super(settings);\n        self.classes.add('menu');\n        if (settings.animate && global$8.ie !== 11) {\n          self.classes.add('animate');\n        }\n      },\n      repaint: function () {\n        this.classes.toggle('menu-align', true);\n        this._super();\n        this.getEl().style.height = '';\n        this.getEl('body').style.height = '';\n        return this;\n      },\n      cancel: function () {\n        var self = this;\n        self.hideAll();\n        self.fire('select');\n      },\n      load: function () {\n        var self = this;\n        var time, factory;\n        function hideThrobber() {\n          if (self.throbber) {\n            self.throbber.hide();\n            self.throbber = null;\n          }\n        }\n        factory = self.settings.itemsFactory;\n        if (!factory) {\n          return;\n        }\n        if (!self.throbber) {\n          self.throbber = new Throbber(self.getEl('body'), true);\n          if (self.items().length === 0) {\n            self.throbber.show();\n            self.fire('loading');\n          } else {\n            self.throbber.show(100, function () {\n              self.items().remove();\n              self.fire('loading');\n            });\n          }\n          self.on('hide close', hideThrobber);\n        }\n        self.requestTime = time = new Date().getTime();\n        self.settings.itemsFactory(function (items) {\n          if (items.length === 0) {\n            self.hide();\n            return;\n          }\n          if (self.requestTime !== time) {\n            return;\n          }\n          self.getEl().style.width = '';\n          self.getEl('body').style.width = '';\n          hideThrobber();\n          self.items().remove();\n          self.getEl('body').innerHTML = '';\n          self.add(items);\n          self.renderNew();\n          self.fire('loaded');\n        });\n      },\n      hideAll: function () {\n        var self = this;\n        this.find('menuitem').exec('hideMenu');\n        return self._super();\n      },\n      preRender: function () {\n        var self = this;\n        self.items().each(function (ctrl) {\n          var settings = ctrl.settings;\n          if (settings.icon || settings.image || settings.selectable) {\n            self._hasIcons = true;\n            return false;\n          }\n        });\n        if (self.settings.itemsFactory) {\n          self.on('postrender', function () {\n            if (self.settings.itemsFactory) {\n              self.load();\n            }\n          });\n        }\n        self.on('show hide', function (e) {\n          if (e.control === self) {\n            if (e.type === 'show') {\n              global$7.setTimeout(function () {\n                self.classes.add('in');\n              }, 0);\n            } else {\n              self.classes.remove('in');\n            }\n          }\n        });\n        return self._super();\n      }\n    });\n\n    var ListBox = MenuButton.extend({\n      init: function (settings) {\n        var self = this;\n        var values, selected, selectedText, lastItemCtrl;\n        function setSelected(menuValues) {\n          for (var i = 0; i < menuValues.length; i++) {\n            selected = menuValues[i].selected || settings.value === menuValues[i].value;\n            if (selected) {\n              selectedText = selectedText || menuValues[i].text;\n              self.state.set('value', menuValues[i].value);\n              return true;\n            }\n            if (menuValues[i].menu) {\n              if (setSelected(menuValues[i].menu)) {\n                return true;\n              }\n            }\n          }\n        }\n        self._super(settings);\n        settings = self.settings;\n        self._values = values = settings.values;\n        if (values) {\n          if (typeof settings.value !== 'undefined') {\n            setSelected(values);\n          }\n          if (!selected && values.length > 0) {\n            selectedText = values[0].text;\n            self.state.set('value', values[0].value);\n          }\n          self.state.set('menu', values);\n        }\n        self.state.set('text', settings.text || selectedText);\n        self.classes.add('listbox');\n        self.on('select', function (e) {\n          var ctrl = e.control;\n          if (lastItemCtrl) {\n            e.lastControl = lastItemCtrl;\n          }\n          if (settings.multiple) {\n            ctrl.active(!ctrl.active());\n          } else {\n            self.value(e.control.value());\n          }\n          lastItemCtrl = ctrl;\n        });\n      },\n      value: function (value) {\n        if (arguments.length === 0) {\n          return this.state.get('value');\n        }\n        if (typeof value === 'undefined') {\n          return this;\n        }\n        function valueExists(values) {\n          return exists(values, function (a) {\n            return a.menu ? valueExists(a.menu) : a.value === value;\n          });\n        }\n        if (this.settings.values) {\n          if (valueExists(this.settings.values)) {\n            this.state.set('value', value);\n          } else if (value === null) {\n            this.state.set('value', null);\n          }\n        } else {\n          this.state.set('value', value);\n        }\n        return this;\n      },\n      bindStates: function () {\n        var self = this;\n        function activateMenuItemsByValue(menu, value) {\n          if (menu instanceof Menu) {\n            menu.items().each(function (ctrl) {\n              if (!ctrl.hasMenus()) {\n                ctrl.active(ctrl.value() === value);\n              }\n            });\n          }\n        }\n        function getSelectedItem(menuValues, value) {\n          var selectedItem;\n          if (!menuValues) {\n            return;\n          }\n          for (var i = 0; i < menuValues.length; i++) {\n            if (menuValues[i].value === value) {\n              return menuValues[i];\n            }\n            if (menuValues[i].menu) {\n              selectedItem = getSelectedItem(menuValues[i].menu, value);\n              if (selectedItem) {\n                return selectedItem;\n              }\n            }\n          }\n        }\n        self.on('show', function (e) {\n          activateMenuItemsByValue(e.control, self.value());\n        });\n        self.state.on('change:value', function (e) {\n          var selectedItem = getSelectedItem(self.state.get('menu'), e.value);\n          if (selectedItem) {\n            self.text(selectedItem.text);\n          } else {\n            self.text(self.settings.text);\n          }\n        });\n        return self._super();\n      }\n    });\n\n    var toggleTextStyle = function (ctrl, state) {\n      var textStyle = ctrl._textStyle;\n      if (textStyle) {\n        var textElm = ctrl.getEl('text');\n        textElm.setAttribute('style', textStyle);\n        if (state) {\n          textElm.style.color = '';\n          textElm.style.backgroundColor = '';\n        }\n      }\n    };\n    var MenuItem = Widget.extend({\n      Defaults: {\n        border: 0,\n        role: 'menuitem'\n      },\n      init: function (settings) {\n        var self = this;\n        var text;\n        self._super(settings);\n        settings = self.settings;\n        self.classes.add('menu-item');\n        if (settings.menu) {\n          self.classes.add('menu-item-expand');\n        }\n        if (settings.preview) {\n          self.classes.add('menu-item-preview');\n        }\n        text = self.state.get('text');\n        if (text === '-' || text === '|') {\n          self.classes.add('menu-item-sep');\n          self.aria('role', 'separator');\n          self.state.set('text', '-');\n        }\n        if (settings.selectable) {\n          self.aria('role', 'menuitemcheckbox');\n          self.classes.add('menu-item-checkbox');\n          settings.icon = 'selected';\n        }\n        if (!settings.preview && !settings.selectable) {\n          self.classes.add('menu-item-normal');\n        }\n        self.on('mousedown', function (e) {\n          e.preventDefault();\n        });\n        if (settings.menu && !settings.ariaHideMenu) {\n          self.aria('haspopup', true);\n        }\n      },\n      hasMenus: function () {\n        return !!this.settings.menu;\n      },\n      showMenu: function () {\n        var self = this;\n        var settings = self.settings;\n        var menu;\n        var parent = self.parent();\n        parent.items().each(function (ctrl) {\n          if (ctrl !== self) {\n            ctrl.hideMenu();\n          }\n        });\n        if (settings.menu) {\n          menu = self.menu;\n          if (!menu) {\n            menu = settings.menu;\n            if (menu.length) {\n              menu = {\n                type: 'menu',\n                items: menu\n              };\n            } else {\n              menu.type = menu.type || 'menu';\n            }\n            if (parent.settings.itemDefaults) {\n              menu.itemDefaults = parent.settings.itemDefaults;\n            }\n            menu = self.menu = global$4.create(menu).parent(self).renderTo();\n            menu.reflow();\n            menu.on('cancel', function (e) {\n              e.stopPropagation();\n              self.focus();\n              menu.hide();\n            });\n            menu.on('show hide', function (e) {\n              if (e.control.items) {\n                e.control.items().each(function (ctrl) {\n                  ctrl.active(ctrl.settings.selected);\n                });\n              }\n            }).fire('show');\n            menu.on('hide', function (e) {\n              if (e.control === menu) {\n                self.classes.remove('selected');\n              }\n            });\n            menu.submenu = true;\n          } else {\n            menu.show();\n          }\n          menu._parentMenu = parent;\n          menu.classes.add('menu-sub');\n          var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [\n            'tl-tr',\n            'bl-br',\n            'tr-tl',\n            'br-bl'\n          ] : [\n            'tr-tl',\n            'br-bl',\n            'tl-tr',\n            'bl-br'\n          ]);\n          menu.moveRel(self.getEl(), rel);\n          menu.rel = rel;\n          rel = 'menu-sub-' + rel;\n          menu.classes.remove(menu._lastRel).add(rel);\n          menu._lastRel = rel;\n          self.classes.add('selected');\n          self.aria('expanded', true);\n        }\n      },\n      hideMenu: function () {\n        var self = this;\n        if (self.menu) {\n          self.menu.items().each(function (item) {\n            if (item.hideMenu) {\n              item.hideMenu();\n            }\n          });\n          self.menu.hide();\n          self.aria('expanded', false);\n        }\n        return self;\n      },\n      renderHtml: function () {\n        var self = this;\n        var id = self._id;\n        var settings = self.settings;\n        var prefix = self.classPrefix;\n        var text = self.state.get('text');\n        var icon = self.settings.icon, image = '', shortcut = settings.shortcut;\n        var url = self.encode(settings.url), iconHtml = '';\n        function convertShortcut(shortcut) {\n          var i, value, replace = {};\n          if (global$8.mac) {\n            replace = {\n              alt: '&#x2325;',\n              ctrl: '&#x2318;',\n              shift: '&#x21E7;',\n              meta: '&#x2318;'\n            };\n          } else {\n            replace = { meta: 'Ctrl' };\n          }\n          shortcut = shortcut.split('+');\n          for (i = 0; i < shortcut.length; i++) {\n            value = replace[shortcut[i].toLowerCase()];\n            if (value) {\n              shortcut[i] = value;\n            }\n          }\n          return shortcut.join('+');\n        }\n        function escapeRegExp(str) {\n          return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n        }\n        function markMatches(text) {\n          var match = settings.match || '';\n          return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) {\n            return '!mce~match[' + match + ']mce~match!';\n          }) : text;\n        }\n        function boldMatches(text) {\n          return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '<b>').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '</b>');\n        }\n        if (icon) {\n          self.parent().classes.add('menu-has-icons');\n        }\n        if (settings.image) {\n          image = ' style=\"background-image: url(\\'' + settings.image + '\\')\"';\n        }\n        if (shortcut) {\n          shortcut = convertShortcut(shortcut);\n        }\n        icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none');\n        iconHtml = text !== '-' ? '<i class=\"' + icon + '\"' + image + '></i>\\xA0' : '';\n        text = boldMatches(self.encode(markMatches(text)));\n        url = boldMatches(self.encode(markMatches(url)));\n        return '<div id=\"' + id + '\" class=\"' + self.classes + '\" tabindex=\"-1\">' + iconHtml + (text !== '-' ? '<span id=\"' + id + '-text\" class=\"' + prefix + 'text\">' + text + '</span>' : '') + (shortcut ? '<div id=\"' + id + '-shortcut\" class=\"' + prefix + 'menu-shortcut\">' + shortcut + '</div>' : '') + (settings.menu ? '<div class=\"' + prefix + 'caret\"></div>' : '') + (url ? '<div class=\"' + prefix + 'menu-item-link\">' + url + '</div>' : '') + '</div>';\n      },\n      postRender: function () {\n        var self = this, settings = self.settings;\n        var textStyle = settings.textStyle;\n        if (typeof textStyle === 'function') {\n          textStyle = textStyle.call(this);\n        }\n        if (textStyle) {\n          var textElm = self.getEl('text');\n          if (textElm) {\n            textElm.setAttribute('style', textStyle);\n            self._textStyle = textStyle;\n          }\n        }\n        self.on('mouseenter click', function (e) {\n          if (e.control === self) {\n            if (!settings.menu && e.type === 'click') {\n              self.fire('select');\n              global$7.requestAnimationFrame(function () {\n                self.parent().hideAll();\n              });\n            } else {\n              self.showMenu();\n              if (e.aria) {\n                self.menu.focus(true);\n              }\n            }\n          }\n        });\n        self._super();\n        return self;\n      },\n      hover: function () {\n        var self = this;\n        self.parent().items().each(function (ctrl) {\n          ctrl.classes.remove('selected');\n        });\n        self.classes.toggle('selected', true);\n        return self;\n      },\n      active: function (state) {\n        toggleTextStyle(this, state);\n        if (typeof state !== 'undefined') {\n          this.aria('checked', state);\n        }\n        return this._super(state);\n      },\n      remove: function () {\n        this._super();\n        if (this.menu) {\n          this.menu.remove();\n        }\n      }\n    });\n\n    var Radio = Checkbox.extend({\n      Defaults: {\n        classes: 'radio',\n        role: 'radio'\n      }\n    });\n\n    var ResizeHandle = Widget.extend({\n      renderHtml: function () {\n        var self = this, prefix = self.classPrefix;\n        self.classes.add('resizehandle');\n        if (self.settings.direction === 'both') {\n          self.classes.add('resizehandle-both');\n        }\n        self.canFocus = false;\n        return '<div id=\"' + self._id + '\" class=\"' + self.classes + '\">' + '<i class=\"' + prefix + 'ico ' + prefix + 'i-resize\"></i>' + '</div>';\n      },\n      postRender: function () {\n        var self = this;\n        self._super();\n        self.resizeDragHelper = new DragHelper(this._id, {\n          start: function () {\n            self.fire('ResizeStart');\n          },\n          drag: function (e) {\n            if (self.settings.direction !== 'both') {\n              e.deltaX = 0;\n            }\n            self.fire('Resize', e);\n          },\n          stop: function () {\n            self.fire('ResizeEnd');\n          }\n        });\n      },\n      remove: function () {\n        if (this.resizeDragHelper) {\n          this.resizeDragHelper.destroy();\n        }\n        return this._super();\n      }\n    });\n\n    function createOptions(options) {\n      var strOptions = '';\n      if (options) {\n        for (var i = 0; i < options.length; i++) {\n          strOptions += '<option value=\"' + options[i] + '\">' + options[i] + '</option>';\n        }\n      }\n      return strOptions;\n    }\n    var SelectBox = Widget.extend({\n      Defaults: {\n        classes: 'selectbox',\n        role: 'selectbox',\n        options: []\n      },\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        if (self.settings.size) {\n          self.size = self.settings.size;\n        }\n        if (self.settings.options) {\n          self._options = self.settings.options;\n        }\n        self.on('keydown', function (e) {\n          var rootControl;\n          if (e.keyCode === 13) {\n            e.preventDefault();\n            self.parents().reverse().each(function (ctrl) {\n              if (ctrl.toJSON) {\n                rootControl = ctrl;\n                return false;\n              }\n            });\n            self.fire('submit', { data: rootControl.toJSON() });\n          }\n        });\n      },\n      options: function (state) {\n        if (!arguments.length) {\n          return this.state.get('options');\n        }\n        this.state.set('options', state);\n        return this;\n      },\n      renderHtml: function () {\n        var self = this;\n        var options, size = '';\n        options = createOptions(self._options);\n        if (self.size) {\n          size = ' size = \"' + self.size + '\"';\n        }\n        return '<select id=\"' + self._id + '\" class=\"' + self.classes + '\"' + size + '>' + options + '</select>';\n      },\n      bindStates: function () {\n        var self = this;\n        self.state.on('change:options', function (e) {\n          self.getEl().innerHTML = createOptions(e.value);\n        });\n        return self._super();\n      }\n    });\n\n    function constrain(value, minVal, maxVal) {\n      if (value < minVal) {\n        value = minVal;\n      }\n      if (value > maxVal) {\n        value = maxVal;\n      }\n      return value;\n    }\n    function setAriaProp(el, name, value) {\n      el.setAttribute('aria-' + name, value);\n    }\n    function updateSliderHandle(ctrl, value) {\n      var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl;\n      if (ctrl.settings.orientation === 'v') {\n        stylePosName = 'top';\n        sizeName = 'height';\n        shortSizeName = 'h';\n      } else {\n        stylePosName = 'left';\n        sizeName = 'width';\n        shortSizeName = 'w';\n      }\n      handleEl = ctrl.getEl('handle');\n      maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];\n      styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px';\n      handleEl.style[stylePosName] = styleValue;\n      handleEl.style.height = ctrl.layoutRect().h + 'px';\n      setAriaProp(handleEl, 'valuenow', value);\n      setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value));\n      setAriaProp(handleEl, 'valuemin', ctrl._minValue);\n      setAriaProp(handleEl, 'valuemax', ctrl._maxValue);\n    }\n    var Slider = Widget.extend({\n      init: function (settings) {\n        var self = this;\n        if (!settings.previewFilter) {\n          settings.previewFilter = function (value) {\n            return Math.round(value * 100) / 100;\n          };\n        }\n        self._super(settings);\n        self.classes.add('slider');\n        if (settings.orientation === 'v') {\n          self.classes.add('vertical');\n        }\n        self._minValue = isNumber(settings.minValue) ? settings.minValue : 0;\n        self._maxValue = isNumber(settings.maxValue) ? settings.maxValue : 100;\n        self._initValue = self.state.get('value');\n      },\n      renderHtml: function () {\n        var self = this, id = self._id, prefix = self.classPrefix;\n        return '<div id=\"' + id + '\" class=\"' + self.classes + '\">' + '<div id=\"' + id + '-handle\" class=\"' + prefix + 'slider-handle\" role=\"slider\" tabindex=\"-1\"></div>' + '</div>';\n      },\n      reset: function () {\n        this.value(this._initValue).repaint();\n      },\n      postRender: function () {\n        var self = this;\n        var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName;\n        function toFraction(min, max, val) {\n          return (val + min) / (max - min);\n        }\n        function fromFraction(min, max, val) {\n          return val * (max - min) - min;\n        }\n        function handleKeyboard(minValue, maxValue) {\n          function alter(delta) {\n            var value;\n            value = self.value();\n            value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05);\n            value = constrain(value, minValue, maxValue);\n            self.value(value);\n            self.fire('dragstart', { value: value });\n            self.fire('drag', { value: value });\n            self.fire('dragend', { value: value });\n          }\n          self.on('keydown', function (e) {\n            switch (e.keyCode) {\n            case 37:\n            case 38:\n              alter(-1);\n              break;\n            case 39:\n            case 40:\n              alter(1);\n              break;\n            }\n          });\n        }\n        function handleDrag(minValue, maxValue, handleEl) {\n          var startPos, startHandlePos, maxHandlePos, handlePos, value;\n          self._dragHelper = new DragHelper(self._id, {\n            handle: self._id + '-handle',\n            start: function (e) {\n              startPos = e[screenCordName];\n              startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10);\n              maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];\n              self.fire('dragstart', { value: value });\n            },\n            drag: function (e) {\n              var delta = e[screenCordName] - startPos;\n              handlePos = constrain(startHandlePos + delta, 0, maxHandlePos);\n              handleEl.style[stylePosName] = handlePos + 'px';\n              value = minValue + handlePos / maxHandlePos * (maxValue - minValue);\n              self.value(value);\n              self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc');\n              self.fire('drag', { value: value });\n            },\n            stop: function () {\n              self.tooltip().hide();\n              self.fire('dragend', { value: value });\n            }\n          });\n        }\n        minValue = self._minValue;\n        maxValue = self._maxValue;\n        if (self.settings.orientation === 'v') {\n          screenCordName = 'screenY';\n          stylePosName = 'top';\n          sizeName = 'height';\n          shortSizeName = 'h';\n        } else {\n          screenCordName = 'screenX';\n          stylePosName = 'left';\n          sizeName = 'width';\n          shortSizeName = 'w';\n        }\n        self._super();\n        handleKeyboard(minValue, maxValue);\n        handleDrag(minValue, maxValue, self.getEl('handle'));\n      },\n      repaint: function () {\n        this._super();\n        updateSliderHandle(this, this.value());\n      },\n      bindStates: function () {\n        var self = this;\n        self.state.on('change:value', function (e) {\n          updateSliderHandle(self, e.value);\n        });\n        return self._super();\n      }\n    });\n\n    var Spacer = Widget.extend({\n      renderHtml: function () {\n        var self = this;\n        self.classes.add('spacer');\n        self.canFocus = false;\n        return '<div id=\"' + self._id + '\" class=\"' + self.classes + '\"></div>';\n      }\n    });\n\n    var SplitButton = MenuButton.extend({\n      Defaults: {\n        classes: 'widget btn splitbtn',\n        role: 'button'\n      },\n      repaint: function () {\n        var self = this;\n        var elm = self.getEl();\n        var rect = self.layoutRect();\n        var mainButtonElm, menuButtonElm;\n        self._super();\n        mainButtonElm = elm.firstChild;\n        menuButtonElm = elm.lastChild;\n        global$9(mainButtonElm).css({\n          width: rect.w - funcs.getSize(menuButtonElm).width,\n          height: rect.h - 2\n        });\n        global$9(menuButtonElm).css({ height: rect.h - 2 });\n        return self;\n      },\n      activeMenu: function (state) {\n        var self = this;\n        global$9(self.getEl().lastChild).toggleClass(self.classPrefix + 'active', state);\n      },\n      renderHtml: function () {\n        var self = this;\n        var id = self._id;\n        var prefix = self.classPrefix;\n        var image;\n        var icon = self.state.get('icon');\n        var text = self.state.get('text');\n        var settings = self.settings;\n        var textHtml = '', ariaPressed;\n        image = settings.image;\n        if (image) {\n          icon = 'none';\n          if (typeof image !== 'string') {\n            image = domGlobals.window.getSelection ? image[0] : image[1];\n          }\n          image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n        } else {\n          image = '';\n        }\n        icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n        if (text) {\n          self.classes.add('btn-has-text');\n          textHtml = '<span class=\"' + prefix + 'txt\">' + self.encode(text) + '</span>';\n        }\n        ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed=\"' + settings.active + '\"' : '';\n        return '<div id=\"' + id + '\" class=\"' + self.classes + '\" role=\"button\"' + ariaPressed + ' tabindex=\"-1\">' + '<button type=\"button\" hidefocus=\"1\" tabindex=\"-1\">' + (icon ? '<i class=\"' + icon + '\"' + image + '></i>' : '') + textHtml + '</button>' + '<button type=\"button\" class=\"' + prefix + 'open\" hidefocus=\"1\" tabindex=\"-1\">' + (self._menuBtnText ? (icon ? '\\xA0' : '') + self._menuBtnText : '') + ' <i class=\"' + prefix + 'caret\"></i>' + '</button>' + '</div>';\n      },\n      postRender: function () {\n        var self = this, onClickHandler = self.settings.onclick;\n        self.on('click', function (e) {\n          var node = e.target;\n          if (e.control === this) {\n            while (node) {\n              if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) {\n                e.stopImmediatePropagation();\n                if (onClickHandler) {\n                  onClickHandler.call(this, e);\n                }\n                return;\n              }\n              node = node.parentNode;\n            }\n          }\n        });\n        delete self.settings.onclick;\n        return self._super();\n      }\n    });\n\n    var StackLayout = FlowLayout.extend({\n      Defaults: {\n        containerClass: 'stack-layout',\n        controlClass: 'stack-layout-item',\n        endClass: 'break'\n      },\n      isNative: function () {\n        return true;\n      }\n    });\n\n    var TabPanel = Panel.extend({\n      Defaults: {\n        layout: 'absolute',\n        defaults: { type: 'panel' }\n      },\n      activateTab: function (idx) {\n        var activeTabElm;\n        if (this.activeTabId) {\n          activeTabElm = this.getEl(this.activeTabId);\n          global$9(activeTabElm).removeClass(this.classPrefix + 'active');\n          activeTabElm.setAttribute('aria-selected', 'false');\n        }\n        this.activeTabId = 't' + idx;\n        activeTabElm = this.getEl('t' + idx);\n        activeTabElm.setAttribute('aria-selected', 'true');\n        global$9(activeTabElm).addClass(this.classPrefix + 'active');\n        this.items()[idx].show().fire('showtab');\n        this.reflow();\n        this.items().each(function (item, i) {\n          if (idx !== i) {\n            item.hide();\n          }\n        });\n      },\n      renderHtml: function () {\n        var self = this;\n        var layout = self._layout;\n        var tabsHtml = '';\n        var prefix = self.classPrefix;\n        self.preRender();\n        layout.preRender(self);\n        self.items().each(function (ctrl, i) {\n          var id = self._id + '-t' + i;\n          ctrl.aria('role', 'tabpanel');\n          ctrl.aria('labelledby', id);\n          tabsHtml += '<div id=\"' + id + '\" class=\"' + prefix + 'tab\" ' + 'unselectable=\"on\" role=\"tab\" aria-controls=\"' + ctrl._id + '\" aria-selected=\"false\" tabIndex=\"-1\">' + self.encode(ctrl.settings.title) + '</div>';\n        });\n        return '<div id=\"' + self._id + '\" class=\"' + self.classes + '\" hidefocus=\"1\" tabindex=\"-1\">' + '<div id=\"' + self._id + '-head\" class=\"' + prefix + 'tabs\" role=\"tablist\">' + tabsHtml + '</div>' + '<div id=\"' + self._id + '-body\" class=\"' + self.bodyClasses + '\">' + layout.renderHtml(self) + '</div>' + '</div>';\n      },\n      postRender: function () {\n        var self = this;\n        self._super();\n        self.settings.activeTab = self.settings.activeTab || 0;\n        self.activateTab(self.settings.activeTab);\n        this.on('click', function (e) {\n          var targetParent = e.target.parentNode;\n          if (targetParent && targetParent.id === self._id + '-head') {\n            var i = targetParent.childNodes.length;\n            while (i--) {\n              if (targetParent.childNodes[i] === e.target) {\n                self.activateTab(i);\n              }\n            }\n          }\n        });\n      },\n      initLayoutRect: function () {\n        var self = this;\n        var rect, minW, minH;\n        minW = funcs.getSize(self.getEl('head')).width;\n        minW = minW < 0 ? 0 : minW;\n        minH = 0;\n        self.items().each(function (item) {\n          minW = Math.max(minW, item.layoutRect().minW);\n          minH = Math.max(minH, item.layoutRect().minH);\n        });\n        self.items().each(function (ctrl) {\n          ctrl.settings.x = 0;\n          ctrl.settings.y = 0;\n          ctrl.settings.w = minW;\n          ctrl.settings.h = minH;\n          ctrl.layoutRect({\n            x: 0,\n            y: 0,\n            w: minW,\n            h: minH\n          });\n        });\n        var headH = funcs.getSize(self.getEl('head')).height;\n        self.settings.minWidth = minW;\n        self.settings.minHeight = minH + headH;\n        rect = self._super();\n        rect.deltaH += headH;\n        rect.innerH = rect.h - rect.deltaH;\n        return rect;\n      }\n    });\n\n    var TextBox = Widget.extend({\n      init: function (settings) {\n        var self = this;\n        self._super(settings);\n        self.classes.add('textbox');\n        if (settings.multiline) {\n          self.classes.add('multiline');\n        } else {\n          self.on('keydown', function (e) {\n            var rootControl;\n            if (e.keyCode === 13) {\n              e.preventDefault();\n              self.parents().reverse().each(function (ctrl) {\n                if (ctrl.toJSON) {\n                  rootControl = ctrl;\n                  return false;\n                }\n              });\n              self.fire('submit', { data: rootControl.toJSON() });\n            }\n          });\n          self.on('keyup', function (e) {\n            self.state.set('value', e.target.value);\n          });\n        }\n      },\n      repaint: function () {\n        var self = this;\n        var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect;\n        style = self.getEl().style;\n        rect = self._layoutRect;\n        lastRepaintRect = self._lastRepaintRect || {};\n        var doc = domGlobals.document;\n        if (!self.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) {\n          style.lineHeight = rect.h - borderH + 'px';\n        }\n        borderBox = self.borderBox;\n        borderW = borderBox.left + borderBox.right + 8;\n        borderH = borderBox.top + borderBox.bottom + (self.settings.multiline ? 8 : 0);\n        if (rect.x !== lastRepaintRect.x) {\n          style.left = rect.x + 'px';\n          lastRepaintRect.x = rect.x;\n        }\n        if (rect.y !== lastRepaintRect.y) {\n          style.top = rect.y + 'px';\n          lastRepaintRect.y = rect.y;\n        }\n        if (rect.w !== lastRepaintRect.w) {\n          style.width = rect.w - borderW + 'px';\n          lastRepaintRect.w = rect.w;\n        }\n        if (rect.h !== lastRepaintRect.h) {\n          style.height = rect.h - borderH + 'px';\n          lastRepaintRect.h = rect.h;\n        }\n        self._lastRepaintRect = lastRepaintRect;\n        self.fire('repaint', {}, false);\n        return self;\n      },\n      renderHtml: function () {\n        var self = this;\n        var settings = self.settings;\n        var attrs, elm;\n        attrs = {\n          id: self._id,\n          hidefocus: '1'\n        };\n        global$2.each([\n          'rows',\n          'spellcheck',\n          'maxLength',\n          'size',\n          'readonly',\n          'min',\n          'max',\n          'step',\n          'list',\n          'pattern',\n          'placeholder',\n          'required',\n          'multiple'\n        ], function (name) {\n          attrs[name] = settings[name];\n        });\n        if (self.disabled()) {\n          attrs.disabled = 'disabled';\n        }\n        if (settings.subtype) {\n          attrs.type = settings.subtype;\n        }\n        elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs);\n        elm.value = self.state.get('value');\n        elm.className = self.classes.toString();\n        return elm.outerHTML;\n      },\n      value: function (value) {\n        if (arguments.length) {\n          this.state.set('value', value);\n          return this;\n        }\n        if (this.state.get('rendered')) {\n          this.state.set('value', this.getEl().value);\n        }\n        return this.state.get('value');\n      },\n      postRender: function () {\n        var self = this;\n        self.getEl().value = self.state.get('value');\n        self._super();\n        self.$el.on('change', function (e) {\n          self.state.set('value', e.target.value);\n          self.fire('change', e);\n        });\n      },\n      bindStates: function () {\n        var self = this;\n        self.state.on('change:value', function (e) {\n          if (self.getEl().value !== e.value) {\n            self.getEl().value = e.value;\n          }\n        });\n        self.state.on('change:disabled', function (e) {\n          self.getEl().disabled = e.value;\n        });\n        return self._super();\n      },\n      remove: function () {\n        this.$el.off();\n        this._super();\n      }\n    });\n\n    var getApi = function () {\n      return {\n        Selector: Selector,\n        Collection: Collection$2,\n        ReflowQueue: ReflowQueue,\n        Control: Control$1,\n        Factory: global$4,\n        KeyboardNavigation: KeyboardNavigation,\n        Container: Container,\n        DragHelper: DragHelper,\n        Scrollable: Scrollable,\n        Panel: Panel,\n        Movable: Movable,\n        Resizable: Resizable,\n        FloatPanel: FloatPanel,\n        Window: Window,\n        MessageBox: MessageBox,\n        Tooltip: Tooltip,\n        Widget: Widget,\n        Progress: Progress,\n        Notification: Notification,\n        Layout: Layout,\n        AbsoluteLayout: AbsoluteLayout,\n        Button: Button,\n        ButtonGroup: ButtonGroup,\n        Checkbox: Checkbox,\n        ComboBox: ComboBox,\n        ColorBox: ColorBox,\n        PanelButton: PanelButton,\n        ColorButton: ColorButton,\n        ColorPicker: ColorPicker,\n        Path: Path,\n        ElementPath: ElementPath,\n        FormItem: FormItem,\n        Form: Form,\n        FieldSet: FieldSet,\n        FilePicker: FilePicker,\n        FitLayout: FitLayout,\n        FlexLayout: FlexLayout,\n        FlowLayout: FlowLayout,\n        FormatControls: FormatControls,\n        GridLayout: GridLayout,\n        Iframe: Iframe$1,\n        InfoBox: InfoBox,\n        Label: Label,\n        Toolbar: Toolbar$1,\n        MenuBar: MenuBar,\n        MenuButton: MenuButton,\n        MenuItem: MenuItem,\n        Throbber: Throbber,\n        Menu: Menu,\n        ListBox: ListBox,\n        Radio: Radio,\n        ResizeHandle: ResizeHandle,\n        SelectBox: SelectBox,\n        Slider: Slider,\n        Spacer: Spacer,\n        SplitButton: SplitButton,\n        StackLayout: StackLayout,\n        TabPanel: TabPanel,\n        TextBox: TextBox,\n        DropZone: DropZone,\n        BrowseButton: BrowseButton\n      };\n    };\n    var appendTo = function (target) {\n      if (target.ui) {\n        global$2.each(getApi(), function (ref, key) {\n          target.ui[key] = ref;\n        });\n      } else {\n        target.ui = getApi();\n      }\n    };\n    var registerToFactory = function () {\n      global$2.each(getApi(), function (ref, key) {\n        global$4.add(key, ref);\n      });\n    };\n    var Api = {\n      appendTo: appendTo,\n      registerToFactory: registerToFactory\n    };\n\n    Api.registerToFactory();\n    Api.appendTo(window.tinymce ? window.tinymce : {});\n    global.add('modern', function (editor) {\n      FormatControls.setup(editor);\n      return ThemeApi.get(editor);\n    });\n    function Theme () {\n    }\n\n    return Theme;\n\n}(window));\n})();\n", "// Exports the \"lists\" plugin for usage with module loaders\n// Usage:\n//   CommonJS:\n//     require('tinymce/plugins/lists')\n//   ES2015:\n//     import 'tinymce/plugins/lists'\nrequire('./plugin.js');", "tinymce.addI18n('nl',{\n\"Redo\": \"Opnieuw\",\n\"Undo\": \"Ongedaan maken\",\n\"Cut\": \"Knippen\",\n\"Copy\": \"Kopi\\u00ebren\",\n\"Paste\": \"Plakken\",\n\"Select all\": \"Alles selecteren\",\n\"New document\": \"Nieuw document\",\n\"Ok\": \"Ok\\u00e9\",\n\"Cancel\": \"Annuleren\",\n\"Visual aids\": \"Hulpmiddelen\",\n\"Bold\": \"Vet\",\n\"Italic\": \"Cursief\",\n\"Underline\": \"Onderstreept\",\n\"Strikethrough\": \"Doorhalen\",\n\"Superscript\": \"Superscript\",\n\"Subscript\": \"Subscript\",\n\"Clear formatting\": \"Opmaak verwijderen\",\n\"Align left\": \"Links uitlijnen\",\n\"Align center\": \"Centreren\",\n\"Align right\": \"Rechts uitlijnen\",\n\"Justify\": \"Uitlijnen\",\n\"Bullet list\": \"Opsommingsteken\",\n\"Numbered list\": \"Nummering\",\n\"Decrease indent\": \"Inspringen verkleinen\",\n\"Increase indent\": \"Inspringen vergroten\",\n\"Close\": \"Sluiten\",\n\"Formats\": \"Opmaak\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"Uw browser ondersteunt geen toegang tot het clipboard. Gelieve ctrl+X\\/C\\/V sneltoetsen te gebruiken.\",\n\"Headers\": \"Kopteksten\",\n\"Header 1\": \"Kop 1\",\n\"Header 2\": \"Kop 2\",\n\"Header 3\": \"Kop 3\",\n\"Header 4\": \"Kop 4\",\n\"Header 5\": \"Kop 5\",\n\"Header 6\": \"Kop 6\",\n\"Headings\": \"Koppen\",\n\"Heading 1\": \"Kop 1\",\n\"Heading 2\": \"Kop 2\",\n\"Heading 3\": \"Kop 3\",\n\"Heading 4\": \"Kop 4\",\n\"Heading 5\": \"Kop 5\",\n\"Heading 6\": \"Kop 6\",\n\"Preformatted\": \"Voor-opgemaakt\",\n\"Div\": \"Div\",\n\"Pre\": \"Pre\",\n\"Code\": \"Code\",\n\"Paragraph\": \"Paragraaf\",\n\"Blockquote\": \"Quote\",\n\"Inline\": \"Inlijn\",\n\"Blocks\": \"Blok\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"Plakken gebeurt nu als platte tekst. Tekst wordt nu ingevoegd zonder opmaak tot deze optie uitgeschakeld wordt.\",\n\"Font Family\": \"Lettertype\",\n\"Font Sizes\": \"Tekengrootte\",\n\"Class\": \"Class\",\n\"Browse for an image\": \"Zoek naar een afbeelding\",\n\"OR\": \"OF\",\n\"Drop an image here\": \"Plaats hier een afbeelding\",\n\"Upload\": \"Uploaden\",\n\"Block\": \"Blok\",\n\"Align\": \"Uitlijnen\",\n\"Default\": \"Standaard\",\n\"Circle\": \"Cirkel\",\n\"Disc\": \"Bolletje\",\n\"Square\": \"Vierkant\",\n\"Lower Alpha\": \"Kleine letters\",\n\"Lower Greek\": \"Griekse letters\",\n\"Lower Roman\": \"Romeinse cijfers klein\",\n\"Upper Alpha\": \"Hoofdletters\",\n\"Upper Roman\": \"Romeinse cijfers groot\",\n\"Anchor\": \"Anker\",\n\"Name\": \"Naam\",\n\"Id\": \"ID\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"ID moet beginnen met een letter, gevolgd door letters, nummers, streepjes, punten, dubbele punten of underscores.\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"U hebt niet alles opgeslagen bent u zeker dat u de pagina wenst te verlaten?\",\n\"Restore last draft\": \"Herstel het laatste concept\",\n\"Special character\": \"Speciale karakters\",\n\"Source code\": \"Broncode\",\n\"Insert\\/Edit code sample\": \"Broncode invoegen\\/bewerken\",\n\"Language\": \"Programmeertaal\",\n\"Code sample\": \"Broncode voorbeeld\",\n\"Color\": \"Kleur\",\n\"R\": \"Rood\",\n\"G\": \"Groen\",\n\"B\": \"Blauw\",\n\"Left to right\": \"Links naar rechts\",\n\"Right to left\": \"Rechts naar links\",\n\"Emoticons\": \"Emoticons\",\n\"Document properties\": \"Document eigenschappen\",\n\"Title\": \"Titel\",\n\"Keywords\": \"Sleutelwoorden\",\n\"Description\": \"Omschrijving\",\n\"Robots\": \"Robots\",\n\"Author\": \"Auteur\",\n\"Encoding\": \"Codering\",\n\"Fullscreen\": \"Volledig scherm\",\n\"Action\": \"Actie\",\n\"Shortcut\": \"Snelkoppeling\",\n\"Help\": \"Help\",\n\"Address\": \"Adres\",\n\"Focus to menubar\": \"Menubalk selecteren\",\n\"Focus to toolbar\": \"Werkbalk selecteren\",\n\"Focus to element path\": \"Element pad selecteren\",\n\"Focus to contextual toolbar\": \"Contextuele werkbalk selecteren\",\n\"Insert link (if link plugin activated)\": \"Link invoegen (als link plug-in geactiveerd is)\",\n\"Save (if save plugin activated)\": \"Opslaan (als opslaan plug-in ingeschakeld is)\",\n\"Find (if searchreplace plugin activated)\": \"Zoeken (als zoeken\\/vervangen plug-in ingeschakeld is)\",\n\"Plugins installed ({0}):\": \"Plug-ins ge\\u00efnstalleerd ({0}):\",\n\"Premium plugins:\": \"Premium plug-ins:\",\n\"Learn more...\": \"Leer meer...\",\n\"You are using {0}\": \"Je gebruikt {0}\",\n\"Plugins\": \"Plug-ins\",\n\"Handy Shortcuts\": \"Handige snelkoppelingen\",\n\"Horizontal line\": \"Horizontale lijn\",\n\"Insert\\/edit image\": \"Afbeelding invoegen\\/bewerken\",\n\"Image description\": \"Afbeelding omschrijving\",\n\"Source\": \"Bron\",\n\"Dimensions\": \"Afmetingen\",\n\"Constrain proportions\": \"Verhoudingen behouden\",\n\"General\": \"Algemeen\",\n\"Advanced\": \"Geavanceerd\",\n\"Style\": \"Stijl\",\n\"Vertical space\": \"Verticale ruimte\",\n\"Horizontal space\": \"Horizontale ruimte\",\n\"Border\": \"Rand\",\n\"Insert image\": \"Afbeelding invoegen\",\n\"Image\": \"Afbeelding\",\n\"Image list\": \"Afbeeldingenlijst\",\n\"Rotate counterclockwise\": \"Linksom draaien\",\n\"Rotate clockwise\": \"Rechtsom draaien\",\n\"Flip vertically\": \"Verticaal spiegelen\",\n\"Flip horizontally\": \"Horizontaal spiegelen\",\n\"Edit image\": \"Bewerk afbeelding\",\n\"Image options\": \"Afbeelding opties\",\n\"Zoom in\": \"Inzoomen\",\n\"Zoom out\": \"Uitzoomen\",\n\"Crop\": \"Uitsnijden\",\n\"Resize\": \"Formaat aanpassen\",\n\"Orientation\": \"Orientatie\",\n\"Brightness\": \"Helderheid\",\n\"Sharpen\": \"Scherpte\",\n\"Contrast\": \"Contrast\",\n\"Color levels\": \"Kleurniveau's\",\n\"Gamma\": \"Gamma\",\n\"Invert\": \"Omkeren\",\n\"Apply\": \"Toepassen\",\n\"Back\": \"Terug\",\n\"Insert date\\/time\": \"Voeg datum\\/tijd in\",\n\"Date\\/time\": \"Datum\\/tijd\",\n\"Insert link\": \"Hyperlink invoegen\",\n\"Insert\\/edit link\": \"Hyperlink invoegen\\/bewerken\",\n\"Text to display\": \"Linktekst\",\n\"Url\": \"Url\",\n\"Target\": \"Doel\",\n\"None\": \"Geen\",\n\"New window\": \"Nieuw venster\",\n\"Remove link\": \"Link verwijderen\",\n\"Anchors\": \"Anker\",\n\"Link\": \"Link\",\n\"Paste or type a link\": \"Plak of typ een link\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"De ingegeven URL lijkt op een e-mailadres. Wil je er \\\"mailto:\\\" aan toevoegen?\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"De ingegeven URL verwijst naar een extern adres. Wil je er \\\"http:\\/\\/\\\" aan toevoegen?\",\n\"Link list\": \"Linklijst\",\n\"Insert video\": \"Video invoegen\",\n\"Insert\\/edit video\": \"Video invoegen\\/bewerken\",\n\"Insert\\/edit media\": \"Media invoegen\\/bewerken\",\n\"Alternative source\": \"Alternatieve bron\",\n\"Poster\": \"Poster\",\n\"Paste your embed code below:\": \"Plak u in te sluiten code hieronder:\",\n\"Embed\": \"Insluiten\",\n\"Media\": \"Media\",\n\"Nonbreaking space\": \"Vaste spatie invoegen\",\n\"Page break\": \"Pagina einde\",\n\"Paste as text\": \"Plakken als tekst\",\n\"Preview\": \"Voorbeeld\",\n\"Print\": \"Print\",\n\"Save\": \"Opslaan\",\n\"Find\": \"Zoeken\",\n\"Replace with\": \"Vervangen door\",\n\"Replace\": \"Vervangen\",\n\"Replace all\": \"Alles vervangen\",\n\"Prev\": \"Vorige\",\n\"Next\": \"Volgende\",\n\"Find and replace\": \"Zoek en vervang\",\n\"Could not find the specified string.\": \"Geen resultaten gevonden\",\n\"Match case\": \"Identieke hoofd\\/kleine letters\",\n\"Whole words\": \"Alleen hele woorden\",\n\"Spellcheck\": \"Spellingscontrole\",\n\"Ignore\": \"Negeren\",\n\"Ignore all\": \"Alles negeren\",\n\"Finish\": \"Einde\",\n\"Add to Dictionary\": \"Toevoegen aan woordenlijst\",\n\"Insert table\": \"Tabel invoegen\",\n\"Table properties\": \"Tabel eigenschappen\",\n\"Delete table\": \"Verwijder tabel\",\n\"Cell\": \"Cel\",\n\"Row\": \"Rij\",\n\"Column\": \"Kolom\",\n\"Cell properties\": \"Cel eigenschappen\",\n\"Merge cells\": \"Cellen samenvoegen\",\n\"Split cell\": \"Cel splitsen\",\n\"Insert row before\": \"Voeg rij boven toe\",\n\"Insert row after\": \"Voeg rij onder toe\",\n\"Delete row\": \"Verwijder rij\",\n\"Row properties\": \"Rij eigenschappen\",\n\"Cut row\": \"Knip rij\",\n\"Copy row\": \"Kopieer rij\",\n\"Paste row before\": \"Plak rij boven\",\n\"Paste row after\": \"Plak rij onder\",\n\"Insert column before\": \"Voeg kolom in voor\",\n\"Insert column after\": \"Voeg kolom in na\",\n\"Delete column\": \"Verwijder kolom\",\n\"Cols\": \"Kolommen\",\n\"Rows\": \"Rijen\",\n\"Width\": \"Breedte\",\n\"Height\": \"Hoogte\",\n\"Cell spacing\": \"Celruimte\",\n\"Cell padding\": \"Ruimte binnen cel\",\n\"Caption\": \"Onderschrift\",\n\"Left\": \"Links\",\n\"Center\": \"Midden\",\n\"Right\": \"Rechts\",\n\"Cell type\": \"Celtype\",\n\"Scope\": \"Bereik\",\n\"Alignment\": \"Uitlijning\",\n\"H Align\": \"Links uitlijnen\",\n\"V Align\": \"Boven uitlijnen\",\n\"Top\": \"Bovenaan\",\n\"Middle\": \"Centreren\",\n\"Bottom\": \"Onderaan\",\n\"Header cell\": \"Kopcel\",\n\"Row group\": \"Rijgroep\",\n\"Column group\": \"Kolomgroep\",\n\"Row type\": \"Rijtype\",\n\"Header\": \"Koptekst\",\n\"Body\": \"Body\",\n\"Footer\": \"Voettekst\",\n\"Border color\": \"Randkleur\",\n\"Insert template\": \"Sjabloon invoegen\",\n\"Templates\": \"Sjablonen\",\n\"Template\": \"Sjabloon\",\n\"Text color\": \"Tekstkleur\",\n\"Background color\": \"Achtergrondkleur\",\n\"Custom...\": \"Eigen...\",\n\"Custom color\": \"Eigen kleur\",\n\"No color\": \"Geen kleur\",\n\"Table of Contents\": \"Inhoudsopgave\",\n\"Show blocks\": \"Blokken tonen\",\n\"Show invisible characters\": \"Onzichtbare karakters tonen\",\n\"Words: {0}\": \"Woorden: {0}\",\n\"{0} words\": \"{0} woorden\",\n\"File\": \"Bestand\",\n\"Edit\": \"Bewerken\",\n\"Insert\": \"Invoegen\",\n\"View\": \"Beeld\",\n\"Format\": \"Opmaak\",\n\"Table\": \"Tabel\",\n\"Tools\": \"Gereedschap\",\n\"Powered by {0}\": \"Gemaakt door {0}\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"Rich Text Area. Druk ALT-F9 voor het menu. Druk ALT-F10 voor de toolbar. Druk ALT-0 voor help.\"\n});", "import \"fullcalendar/dist/fullcalendar.js\";\nimport \"fullcalendar/dist/locale/nl.js\";\nimport \"fullcalendar/dist/fullcalendar.css\";\n\n$(document).ready(function () {\n  $(\"#calendar\").fullCalendar({\n    lang: \"nl\",\n    defaultView: \"basicDay\",\n    slotMinutes: 60,\n    // aspectRatio: 1,\n    header: {\n      left: \"\",\n      center: \"\",\n      right: \"today basicDay agendaWeek prev,next\",\n    },\n    timeFormat: \"H:mm: \",\n    eventSources: [\n      { url: \"/manage/agenda_events/get_agenda_events\" },\n      { url: \"/manage/bookings/start_events\" },\n      { url: \"/manage/bookings/end_events\" },\n      //      {url: '/manage/patients/birthdays'}\n    ],\n    slotLabelFormat: \"H:mm\",\n\n    views: {\n      basic: {\n        columnFormat: \"dddd D MMMM\",\n      },\n    },\n  });\n\n  $(\"#calendarm\").fullCalendar({\n    lang: \"nl\",\n    defaultView: \"basicDay\",\n    slotMinutes: 60,\n    // aspectRatio: 1,\n    header: {\n      left: \"\",\n      center: \"\",\n      right: \"\",\n    },\n    timeFormat: \"H:mm: \",\n    eventSources: [\n      { url: \"/manage/agenda_events/get_agenda_events\" },\n      { url: \"/manage/bookings/start_events\" },\n      { url: \"/manage/bookings/end_events\" },\n      //      {url: '/manage/patients/birthdays'}\n    ],\n    slotLabelFormat: \"H:mm\",\n\n    views: {\n      basic: {\n        columnFormat: \"dddd D MMMM\",\n      },\n    },\n  });\n\n  $(\"#planning_calendar\").fullCalendar({\n    defaultView: \"agendaWeek\",\n    lang: \"nl\",\n    header: {\n      left: \"title\",\n      center: \"\",\n      right: \"today agendaDay agendaWeek month prev,next\",\n    },\n    weekNumbers: true,\n    timeFormat: \"H:mm: \",\n    eventSources: [\n      {\n        url: \"/manage/agenda_events/get_agenda_events\",\n      },\n    ],\n    slotLabelFormat: \"H:mm\",\n    views: {\n      day: {\n        columnFormat: \"dddd D MMMM\",\n      },\n    },\n  });\n\n  $(\"#schedule_calendar\").fullCalendar({\n    defaultView: \"agendaWeek\",\n    lang: \"nl\",\n    header: {\n      left: \"title\",\n      center: \"\",\n      right: \"today agendaDay agendaWeek month prev,next\",\n    },\n    // slotMinutes: 60,\n    weekNumbers: true,\n    timeFormat: \"H:mm: \",\n    eventSources: [\n      {\n        url: \"/manage/schedules/get_schedules\",\n      },\n    ],\n    slotLabelFormat: \"H:mm\",\n    views: {\n      day: {\n        columnFormat: \"dddd D MMMM\",\n      },\n    },\n  });\n\n  $(\"#capacity_calendar\").fullCalendar({\n    defaultView: \"month\",\n    header: {\n      left: \"title\",\n      center: \"\",\n      right: \"today month prev,next\",\n    },\n    weekNumbers: true,\n    timeFormat: \" \",\n    eventSources: [\n      {\n        url: \"/manage/bookings/get_capacity\",\n      },\n    ],\n    slotLabelFormat: \"H:mm\",\n  });\n\n  $(\"#overview_calendar\").fullCalendar({\n    defaultView: \"month\",\n    header: {\n      left: \"title\",\n      center: \"\",\n      right: \"today agendaDay agendaWeek month prev,next\",\n    },\n    allDayText: \"Gehele dag\",\n    // slotMinutes: 60,\n    weekNumbers: true,\n    timeFormat: \"H:mm: \",\n    eventSources: [\n      {\n        url: \"/manage/bookings/get_overview\",\n      },\n    ],\n    slotLabelFormat: \"H:mm\",\n  });\n});\n", "import \"bootstrap-datetime-picker/js/bootstrap-datetimepicker.js\";\nimport \"bootstrap-datetime-picker/js/locales/bootstrap-datetimepicker.nl.js\";\n\nimport \"bootstrap-datetime-picker/css/bootstrap-datetimepicker.css\";\n// import '../stylesheets/datetimepicker.scss';\n\n$(document).ready(function () {\n  // TODO: we can merge functionality\n\n  $(\".datepicker\").datetimepicker({\n    autoclose: \"true\",\n    format: \"dd-mm-yyyy\",\n    minView: \"2\",\n  });\n\n  $(\".datetimepicker_start\")\n    .datetimepicker({\n      autoclose: \"true\",\n      format: \"dd-mm-yyyy hh:ii\",\n    })\n    .on(\"changeDate\", function (ev) {\n      $(\".datetimepicker_end\").datetimepicker(\"setStartDate\", ev.date);\n    });\n\n  $(\".datetimepicker_end\").datetimepicker({\n    autoclose: \"true\",\n    format: \"dd-mm-yyyy hh:ii\",\n  });\n\n  $(\".birthdatepicker\").datetimepicker({\n    autoclose: \"true\",\n    format: \"dd-mm-yyyy\",\n    minView: \"2\",\n  });\n\n  $(\".schedule_datetimepicker_start\").datetimepicker({\n    autoclose: \"true\",\n    format: \"dd-mm-yyyy\",\n    minView: \"2\",\n  });\n\n  $(\".schedule_datetimepicker_end\").datetimepicker({\n    autoclose: \"true\",\n    format: \"dd-mm-yyyy\",\n    minView: \"2\",\n  });\n\n  $(\".datetimepicker_vitals\")\n    .datetimepicker({\n      autoclose: \"true\",\n      format: \"dd-mm-yyyy hh:ii\",\n    })\n    .on(\"changeDate\", function (ev) {\n      $(\".vitalmoment\").val(ev.date);\n    });\n});\n", "/**\r\n * Dutch translation for bootstrap-datetimepicker\r\n * Reinier Goltstein <mrgoltstein@gmail.com>\r\n */\r\n;(function($){\r\n\t$.fn.datetimepicker.dates['nl'] = {\r\n\t\tdays: [\"Zondag\", \"Maandag\", \"Dinsdag\", \"Woensdag\", \"Donderdag\", \"Vrijdag\", \"Zaterdag\", \"Zondag\"],\r\n\t\tdaysShort: [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\", \"Zo\"],\r\n\t\tdaysMin: [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\", \"Zo\"],\r\n\t\tmonths: [\"Januari\", \"Februari\", \"Maart\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Augustus\", \"September\", \"Oktober\", \"November\", \"December\"],\r\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mrt\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\r\n\t\ttoday: \"Vandaag\",\r\n\t\tsuffix: [],\r\n\t\tmeridiem: []\r\n\t};\r\n}(jQuery));\r\n", "var idleTime = 0;\n\n$(document).ready(function() {\n\n  var idleInterval = setInterval(timerIncrement, 60000);\n //Zero the idle timer on mouse movement.\n  $(this).mousemove(function (e) {\n      idleTime = 0;\n  });\n  $(this).keypress(function (e) {\n      idleTime = 0;\n  });\n\n  if ($(\".monitor\").length > 0) {\n    console.log(\"mtimer loaded\")\n    setInterval(refreshMonitor, 60000);\n  };\n\n\n});\n\nfunction timerIncrement() {\n    idleTime = idleTime + 1;\n    console.log(\"Idle for: \" + idleTime);\n    if (idleTime > 20) { // 21 minutes\n        window.location.reload();\n    }\n}\n\nfunction refreshMonitor() {\n  console.log(\"reloading\")\n  window.location.reload();\n}", "$(document).ready(function() {\n\n  $('#invoice_action_action_id').on('change', function(e){\n    var id = $(this).val();\n    console.log(id);\n\n    // if (id == 1 || id == 7)\n    //   $(\"#invoice_form_action\").attr(\"target\",\"_blank\");\n    // else\n    //   $(\"#invoice_form_action\").attr(\"target\",\"_self\");\n\n  });\n\n\n  $('#invoices-ids').on('click', function(e) {\n    var ids = new Array();\n\n    jQuery(\".table-active\").each(function(){\n      ids.push($(this).data(\"iid\"));\n    });\n\n    jQuery(\"#invoice_action_ids\").val(ids);\n\n    var action = jQuery(\"#invoice_action_action_id option:selected\").val();\n    if (action.length == 0)\n      return false;\n\n    if (ids.length == 0){\n      jQuery('#hintbox').removeClass(\"alert-light\");\n      jQuery('#hintbox').addClass(\"alert-warning\");\n      return false;\n    }\n  });\n\n\n  if ($('#collapse-fields').length > 0) {\n    $('.collapse').collapse();\n  }\n\n});\n", "$(document).ready(function() {\n\n  $('.vitalinputblood').change(function() {\n    var sys = $('.vit_blood_systolic').val();\n    var dia = $('.vit_blood_diastolic').val();\n\n    $('.vitals_bloodpressure').removeClass(\"btn-danger\");\n    $('.vitals_bloodpressure').removeClass(\"btn-success\");\n\n    if(sys.length > 0 && dia.length > 0)\n      $('.vitals_bloodpressure').addClass(\"btn-warning\");\n    else\n      $('.vitals_bloodpressure').removeClass(\"btn-warning\");\n  });\n\n\n  $('.bloodvital_form').on('ajax:success', function(event) {\n    var data = event.detail[0];\n    $('.vit_blood_systolic').val(\"\");\n    $('.vit_blood_diastolic').val(\"\");\n    $('.vitals_bloodpressure').removeClass(\"btn-warning\");\n    $('.vitals_bloodpressure').addClass(\"btn-success\");\n    $('.vitals_bloodpressure_msg').html(\"Opgeslagen: \" + data.systolic + \" / \" + data.diastolic);\n  });\n\n  $('#new_vitals_bloodpressure').on('ajax:error', function(res, status, xhr) {\n    errors = res.detail[0];\n    vital_error(\"bloodpressure\", errors.value)\n  });\n\n\n  $('.vitalinput').change(function() {\n    var vital = $(this).parent().parent().parent().data(\"vitname\");\n    vital_change(vital);\n  });\n\n  $('.vital_form').on('ajax:success', function(event) {\n    var data = event.detail[0];\n    var vital = $(this).data(\"vitname\");\n    vital_reset(vital, data.value);\n  });\n\n//  $('.vital_form').on('ajax:error', function(res, xhr, status, error) {\n  $('.vital_form').on('ajax:error', function(res, status, xhr) {\n    var vital = $(this).data(\"vitname\");\n\n    errors = res.detail[0];\n    vital_error(vital, errors.value)\n  });\n\n});\n\nfunction vital_change(vit) {\n  $('.vitals_' + vit).addClass(\"btn-warning\");\n  $('.vitals_' + vit).removeClass(\"btn-danger\");\n  $('.vitals_' + vit).removeClass(\"btn-success\");\n}\n\nfunction vital_reset(vit, value) {\n  $('#vitals_' + vit + \"_value\").val(\"\");\n  $('.vitals_' + vit).removeClass(\"btn-warning\");\n  $('.vitals_' + vit).addClass(\"btn-success\");\n  $('.vitals_' + vit + \"_msg\").html(\"Opgeslagen: \" + value);\n}\n\nfunction vital_error(vit, msg) {\n  $('.vitals_' + vit + \"_msg\").html(msg);\n  $('.vitals_' + vit).addClass(\"btn-danger\");\n  $('.vitals_' + vit).removeClass(\"btn-success\");\n  $('.vitals_' + vit).removeClass(\"btn-warning\");\n}\n", "\n$(document).ready(function() {\n\n  function mc_CareReport(rid) {\n\n    this.dirty = false;\n    this.rid = rid;\n\n    this.changesNotSavedYet = function() {\n      this.dirty = true;\n      $(\"#save-msg\").html(\"Aanpassingen zijn nog niet opgeslagen.\");\n      $(\"#publishreport\").addClass(\"btn-warning\");\n      $(\"#publishreport\").removeClass(\"btn-success\");\n    }\n\n    this.saveDraft = function() {\n      this.dirty = false;\n      $(\"#save-msg\").html(\"Opgeslagen\");\n      $(\"#publishreport\").addClass(\"btn-success\");\n      $(\"#publishreport\").removeClass(\"btn-warning\");\n    }\n\n    this.showCategory = function() {\n      var cid = $(\"#care_report_category_id option:selected\").val();\n      if (cid == 0)\n        $(\".care_report_careplan_id\").show();\n      else\n        $(\".care_report_careplan_id\").hide();\n    }\n  }\n\n  // toggle history on index\n  $(\".report\").on(\"click\", \".toggle-button\", function() {\n    var rid = $(this).data(\"rid\");\n    $(\".report-\" + rid).toggle();\n  });\n\n  if ($('#new_care_report, .edit_care_report').length) {\n    report = new mc_CareReport( $(\"#care_report_id\").val() );\n    report.showCategory();\n    setInterval(function() {\n      if (report.dirty) {\n        console.log(\"Saving report draft...\");\n        $(\"#draftreport\").click();\n      }\n    }, 10000);\n  }\n\n  // toggle display of selection box for report category\n  $('#care_report_category_id').change(function() {\n    report.showCategory();\n    report.changesNotSavedYet();\n  });\n\n  $('#care_report_careplan_id').change(function() {\n    report.changesNotSavedYet();\n  });\n\n  // set id on successful draft save\n  $('#new_care_report, .edit_care_report').on('ajax:success', function(event) {\n    var data = event.detail[0];\n    if (data.id != null) {\n      $(\"#care_report_id\").val(data.id);\n      report.rid = data.id;\n\n      var path = $(\"#publishreport\").data(\"path\");\n      $(\"#publishreport\").attr(\"href\", path + data.id);\n\n      var destroypath = $(\"#destroydraft\").data(\"path\");\n      $(\"#destroydraft\").attr(\"href\", destroypath + data.id);\n\n      report.saveDraft();\n    }\n  });\n\n  $(\"#publishreport\").click(function() {\n    if (report.dirty == true) {\n      alert(\"Aanpassingen zijn nog niet opgeslagen\");\n      return false;\n    }\n\n    // if we don't have an rid yet\n    if (report.rid.length == 0)\n      return false;\n  });\n\n  $(\"#destroydraft\").click(function() {\n    if (report.rid.length == 0) {\n      alert(\"Er is nog geen rapportage opgeslagen om te kunnen verwijderen.\");\n      return false;\n    }\n  });\n\n});\n"],
  "mappings": "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,GACH,IAAK7H,EAAQpK,EAAQgS,CAAS,EAAG5H,EAAOA,EAAQA,EAAM4H,CAAS,EAC7D,GAAI,CAAC5H,EAAM4H,CAAS,EAClB,OAAO5H,EAIb,OAAOpK,CACT,CAEA,GADAnM,EAASF,EAAK,WACVE,GAAUA,IAAWie,EACvB,OAAOje,CAEX,CACF,EACA,KAAK,QAAU,UAAY,CACzB,OAAOF,CACT,EACA,KAAK,KAAO,SAAUse,EAAS,CAC7B,OAAAte,EAAOoe,EAAYpe,EAAM,aAAc,cAAese,CAAO,EACtDte,CACT,EACA,KAAK,KAAO,SAAUse,EAAS,CAC7B,OAAAte,EAAOoe,EAAYpe,EAAM,YAAa,kBAAmBse,CAAO,EACzDte,CACT,EACA,KAAK,MAAQ,SAAUse,EAAS,CAC9B,OAAAte,EAAOue,EAAiBve,EAAM,YAAa,kBAAmBse,CAAO,EAC9Dte,CACT,CACF,CAEA,IAAIwe,GAAS,CACX,UACA,QACA,UACA,MACA,KACA,aACA,SACA,OACA,WACA,SACA,SACA,OACA,OACA,MACA,UACA,UACA,OACA,IACA,KACA,WACA,KACA,SACA,UACA,SACA,aACA,KACA,KACA,KACA,KACA,KACA,KACA,UACA,MACA,MACA,YACA,OACA,MACA,KACA,KACA,KACA,KACA,QACA,QACA,QACA,QACA,KACA,KACA,KACA,SACF,EACIC,GAAQ,CACV,OACA,OACA,WACA,KACA,MACA,QACA,KACA,MACA,QACA,UACA,OACA,OACA,QACA,QACA,SACA,MACA,OACF,EACIC,GAAa,CACf,KACA,IACF,EACIC,GAAgB,CAClB,QACA,QACA,OACF,EACIC,GAAa,CACf,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,QACF,EACIC,GAAW,CACb,KACA,KACA,KACA,KACA,KACA,IACF,EACIC,GAAY,CACd,KACA,KACA,IACF,EACIC,GAAQ,CACV,KACA,KACA,IACF,EACIC,GAAa,CACf,MACA,SACA,WACA,OACF,EACIC,GAAa,SAAUpX,EAAO,CAChC,IAAIqX,EACJ,OAAO,SAAUlf,EAAM,CACrB,OAAAkf,EAASA,GAAkB/sB,GAAY0V,EAAOxa,EAAS,EAAI,CAAC,EACrD6xB,EAAO,eAAejsB,GAAK+M,CAAI,CAAC,CACzC,CACF,EACImf,GAAYF,GAAWJ,EAAQ,EAC/BO,EAAUH,GAAWT,EAAM,EAC3Ba,EAAW,SAAUrf,EAAM,CAC7B,OAAOwS,EAAUxS,CAAI,GAAK,CAACof,EAAQpf,CAAI,CACzC,EACIsf,EAAO,SAAUtf,EAAM,CACzB,OAAOwS,EAAUxS,CAAI,GAAK/M,GAAK+M,CAAI,IAAM,IAC3C,EACIuf,EAAcN,GAAWL,EAAU,EACnCY,GAASP,GAAWF,EAAK,EACzBU,GAAaR,GAAWH,EAAS,EACjCY,GAAST,GAAWR,EAAK,EACzBkB,GAAiBV,GAAWN,EAAa,EACzCiB,GAAcX,GAAWP,EAAU,EACnCmB,GAAsBZ,GAAWD,EAAU,EAE3Cc,GAAa,SAAUpwB,EAAM,CAC/B,OAAO,SAAUsQ,EAAM,CACrB,MAAO,CAAC,CAACA,GAAQA,EAAK,WAAatQ,CACrC,CACF,EACIqwB,GAAmB,SAAU/f,EAAM,CACrC,MAAO,CAAC,CAACA,GAAQ,CAAC,OAAO,eAAeA,CAAI,CAC9C,EACIggB,GAAcF,GAAW,CAAC,EAC1BG,GAAiB,SAAUlmB,EAAO,CACpC,IAAI8N,EAAQ9N,EAAM,YAAY,EAAE,MAAM,GAAG,EACzC,OAAO,SAAUiG,EAAM,CACrB,IAAInP,EAAGoC,EACP,GAAI+M,GAAQA,EAAK,UAEf,IADA/M,EAAO+M,EAAK,SAAS,YAAY,EAC5BnP,EAAI,EAAGA,EAAIgX,EAAM,OAAQhX,IAC5B,GAAIoC,IAAS4U,EAAMhX,CAAC,EAClB,MAAO,GAIb,MAAO,EACT,CACF,EACIqvB,GAAmB,SAAUjtB,EAAMoD,EAAQ,CAC7C,IAAIwR,EAAQxR,EAAO,YAAY,EAAE,MAAM,GAAG,EAC1C,OAAO,SAAU2J,EAAM,CACrB,IAAInP,EAAGsvB,EACP,GAAIH,GAAYhgB,CAAI,EAClB,IAAKnP,EAAI,EAAGA,EAAIgX,EAAM,OAAQhX,IAAK,CACjC,IAAIuvB,EAAWpgB,EAAK,cAAc,YAAY,iBAAiBA,EAAM,IAAI,EAEzE,GADAmgB,EAAWC,EAAWA,EAAS,iBAAiBntB,CAAI,EAAI,KACpDktB,IAAatY,EAAMhX,CAAC,EACtB,MAAO,EAEX,CAEF,MAAO,EACT,CACF,EACIwvB,GAAe,SAAUC,EAAUC,EAAW,CAChD,OAAO,SAAUvgB,EAAM,CACrB,OAAOggB,GAAYhgB,CAAI,GAAKA,EAAKsgB,CAAQ,IAAMC,CACjD,CACF,EACIC,GAAe,SAAUC,EAAUC,EAAW,CAChD,OAAO,SAAU1gB,EAAM,CACrB,OAAOggB,GAAYhgB,CAAI,GAAKA,EAAK,aAAaygB,CAAQ,CACxD,CACF,EACIE,GAAoB,SAAUF,EAAUC,EAAW,CACrD,OAAO,SAAU1gB,EAAM,CACrB,OAAOggB,GAAYhgB,CAAI,GAAKA,EAAK,aAAaygB,CAAQ,IAAMC,CAC9D,CACF,EACIE,GAAU,SAAU5gB,EAAM,CAC5B,OAAOggB,GAAYhgB,CAAI,GAAKA,EAAK,aAAa,gBAAgB,CAChE,EACI6gB,GAAa,SAAU7gB,EAAM,CAC/B,OAAOggB,GAAYhgB,CAAI,GAAKA,EAAK,aAAa,gBAAgB,IAAM,KACtE,EACI8gB,GAAU,SAAU9gB,EAAM,CAC5B,OAAOggB,GAAYhgB,CAAI,GAAKA,EAAK,UAAY,OAC/C,EACI+gB,GAA0B,SAAUzzB,EAAO,CAC7C,OAAO,SAAU0S,EAAM,CACrB,MAAI,GAAAggB,GAAYhgB,CAAI,IACdA,EAAK,kBAAoB1S,GAGzB0S,EAAK,aAAa,0BAA0B,IAAM1S,GAK1D,CACF,EACI0zB,GAAWlB,GAAW,CAAC,EACvBmB,GAAYnB,GAAW,CAAC,EACxBoB,GAAapB,GAAW,CAAC,EACzBqB,GAAqBrB,GAAW,EAAE,EAClCsB,GAASnB,GAAe,IAAI,EAC5BoB,GAAwBN,GAAwB,MAAM,EACtDO,GAAyBP,GAAwB,OAAO,EACxDQ,GAAW,CACb,OAAQP,GACR,UAAWhB,GACX,UAAWiB,GACX,WAAYC,GACZ,mBAAoBC,GACpB,KAAMC,GACN,sBAAuBC,GACvB,uBAAwBC,GACxB,iBAAkBvB,GAClB,eAAgBE,GAChB,aAAcI,GACd,aAAcG,GACd,kBAAmBG,GACnB,iBAAkBT,GAClB,QAASU,GACT,WAAYC,GACZ,QAASC,EACX,EAEIU,GAAoB,SAAUxhB,EAAM,CACtC,IAAIyhB,EAAiBzhB,EAAK,iBAAmBA,EAAK,gBAAgB,WAAa,OAC3E0hB,EAAa1hB,EAAK,aAAeA,EAAK,YAAY,WAAa,OACnE,OAAOyhB,GAAkBC,CAC3B,EACIC,GAAiB,SAAU3hB,EAAM,CACnC,OAAOA,GAAQA,EAAK,UAAY,QAAUA,EAAK,aAAa,eAAe,IAAM,UACnF,EACI4hB,GAAW,SAAUvO,EAAKrT,EAAM,CAClC,IAAInP,EAAG0J,EAAWyF,EAAK,WACvB,GAAI,EAAAuhB,GAAS,UAAUvhB,CAAI,GAAK2hB,GAAe3hB,CAAI,GAGnD,KAAKnP,EAAI0J,EAAS,OAAS,EAAG1J,GAAK,EAAGA,IACpC+wB,GAASvO,EAAK9Y,EAAS1J,CAAC,CAAC,EAE3B,GAAI0wB,GAAS,WAAWvhB,CAAI,IAAM,GAAO,CACvC,GAAIuhB,GAAS,OAAOvhB,CAAI,GAAKA,EAAK,UAAU,OAAS,EAAG,CACtD,IAAI6hB,EAAgB3Y,GAAM,KAAKlJ,EAAK,SAAS,EAAE,OAI/C,GAHIqT,EAAI,QAAQrT,EAAK,UAAU,GAAK6hB,EAAgB,GAGhDA,IAAkB,GAAKL,GAAkBxhB,CAAI,EAC/C,MAEJ,SAAWuhB,GAAS,UAAUvhB,CAAI,IAChCzF,EAAWyF,EAAK,WACZzF,EAAS,SAAW,GAAKonB,GAAepnB,EAAS,CAAC,CAAC,GACrDyF,EAAK,WAAW,aAAazF,EAAS,CAAC,EAAGyF,CAAI,EAE5CzF,EAAS,QAAUmlB,GAAOjO,GAAQ,QAAQzR,CAAI,CAAC,GACjD,OAGJqT,EAAI,OAAOrT,CAAI,CACjB,CACA,OAAOA,EACT,EACI8hB,GAAW,CAAE,SAAUF,EAAS,EAEhCG,GAAY7Y,GAAM,QAClB8Y,GAAeC,GAAcC,GAC7BC,GAAmB,0EACnBC,GAAkB,kEAClBC,GAAiB,aACjBC,GAAe,kCACfC,GAAW,CACb,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,QACP,EACAN,GAAe,CACb,IAAK,SACL,IAAM,QACN,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,OACP,EACAC,GAAkB,CAChB,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,GACZ,EACA,IAAIM,GAAe,SAAU7f,EAAM,CACjC,IAAI2I,EACJ,OAAAA,EAAMmG,GAAQ,QAAQ,KAAK,EAAE,IAAI,EACjCnG,EAAI,UAAY3I,EACT2I,EAAI,aAAeA,EAAI,WAAa3I,CAC7C,EACI8f,GAAsB,SAAU5a,EAAO6a,EAAO,CAChD,IAAI7xB,EAAG8xB,EAAKC,EACR1D,EAAS,CAAC,EACd,GAAIrX,EAAO,CAGT,IAFAA,EAAQA,EAAM,MAAM,GAAG,EACvB6a,EAAQA,GAAS,GACZ7xB,EAAI,EAAGA,EAAIgX,EAAM,OAAQhX,GAAK,EACjC8xB,EAAM,OAAO,aAAa,SAAS9a,EAAMhX,CAAC,EAAG6xB,CAAK,CAAC,EAC9CT,GAAaU,CAAG,IACnBC,EAAS,IAAM/a,EAAMhX,EAAI,CAAC,EAAI,IAC9BquB,EAAOyD,CAAG,EAAIC,EACd1D,EAAO0D,CAAM,EAAID,GAGrB,OAAOzD,CACT,CACF,EACA8C,GAAgBS,GAAoB,+rEAAwzE,EAAE,EAC91E,IAAII,GAAY,SAAUlgB,EAAMI,EAAM,CACpC,OAAOJ,EAAK,QAAQI,EAAOof,GAAmBC,GAAiB,SAAUO,EAAK,CAC5E,OAAOV,GAAaU,CAAG,GAAKA,CAC9B,CAAC,CACH,EACIG,GAAe,SAAUngB,EAAM,CACjC,OAAQ,GAAKA,GAAM,QAAQ0f,GAAgB,SAAUM,EAAK,CACxD,OAAOV,GAAaU,CAAG,GAAKA,CAC9B,CAAC,CACH,EACII,GAAgB,SAAUpgB,EAAMI,EAAM,CACxC,OAAOJ,EAAK,QAAQI,EAAOof,GAAmBC,GAAiB,SAAUO,EAAK,CAC5E,OAAIA,EAAI,OAAS,EACR,OAASA,EAAI,WAAW,CAAC,EAAI,OAAS,MAAQA,EAAI,WAAW,CAAC,EAAI,OAAS,OAAS,IAEtFV,GAAaU,CAAG,GAAK,KAAOA,EAAI,WAAW,CAAC,EAAI,GACzD,CAAC,CACH,EACIK,GAAc,SAAUrgB,EAAMI,EAAMkgB,EAAU,CAChD,OAAAA,EAAWA,GAAYjB,GAChBrf,EAAK,QAAQI,EAAOof,GAAmBC,GAAiB,SAAUO,EAAK,CAC5E,OAAOV,GAAaU,CAAG,GAAKM,EAASN,CAAG,GAAKA,CAC/C,CAAC,CACH,EACIO,GAAgB,SAAUjwB,EAAMgwB,EAAU,CAC5C,IAAIE,EAAcV,GAAoBQ,CAAQ,GAAKjB,GAC/CoB,EAAwB,SAAUzgB,EAAMI,EAAM,CAChD,OAAOJ,EAAK,QAAQI,EAAOof,GAAmBC,GAAiB,SAAUO,EAAK,CAC5E,OAAIV,GAAaU,CAAG,IAAM,OACjBV,GAAaU,CAAG,EAErBQ,EAAYR,CAAG,IAAM,OAChBQ,EAAYR,CAAG,EAEpBA,EAAI,OAAS,EACR,OAASA,EAAI,WAAW,CAAC,EAAI,OAAS,MAAQA,EAAI,WAAW,CAAC,EAAI,OAAS,OAAS,IAEtF,KAAOA,EAAI,WAAW,CAAC,EAAI,GACpC,CAAC,CACH,EACIU,EAAoB,SAAU1gB,EAAMI,EAAM,CAC5C,OAAOigB,GAAYrgB,EAAMI,EAAMogB,CAAW,CAC5C,EACIG,EAAUvB,GAAU9uB,EAAK,QAAQ,MAAO,GAAG,CAAC,EAChD,OAAIqwB,EAAQ,OAASA,EAAQ,QACpBF,EAELE,EAAQ,MACNL,EACKI,EAEFL,GAELM,EAAQ,QACHP,GAEFF,EACT,EACIU,GAAS,SAAU5gB,EAAM,CAC3B,OAAOA,EAAK,QAAQ2f,GAAc,SAAUz0B,EAAK21B,EAAS,CACxD,OAAIA,GACEA,EAAQ,OAAO,CAAC,EAAE,YAAY,IAAM,IACtCA,EAAU,SAASA,EAAQ,OAAO,CAAC,EAAG,EAAE,EAExCA,EAAU,SAASA,EAAS,EAAE,EAE5BA,EAAU,OACZA,GAAW,MACJ,OAAO,aAAa,OAASA,GAAW,IAAK,OAASA,EAAU,KAAK,GAEvEjB,GAASiB,CAAO,GAAK,OAAO,aAAaA,CAAO,GAElDtB,GAAgBr0B,CAAG,GAAKm0B,GAAcn0B,CAAG,GAAK20B,GAAa30B,CAAG,CACvE,CAAC,CACH,EACI41B,GAAW,CACb,UAAWZ,GACX,aAAcC,GACd,cAAeC,GACf,YAAaC,GACb,cAAeE,GACf,OAAQK,EACV,EAEIG,GAAW,CAAC,EAAGC,GAAW,CAAC,EAC3BC,GAAY1a,GAAM,QAAS2a,GAAS3a,GAAM,KAAM4a,GAAW5a,GAAM,OAAQ6a,GAAY7a,GAAM,QAAS8a,GAAY9a,GAAM,QACtH+a,GAAQ,SAAUpc,EAAOC,EAAO,CAClC,OAAAD,EAAQqB,GAAM,KAAKrB,CAAK,EACjBA,EAAQA,EAAM,MAAMC,GAAS,GAAG,EAAI,CAAC,CAC9C,EACIoc,GAAgB,SAAUx0B,EAAM,CAClC,IAAIy0B,EAAS,CAAC,EACVC,EAAkBC,EAClBC,EAAiBC,EAAaC,EAAmBC,EACjDC,EAAM,SAAUzxB,EAAM6J,EAAYvC,EAAU,CAC9C,IAAIoqB,EAAIC,EAAiBluB,GACrBmuB,GAAa,SAAUte,GAAOD,GAAK,CACrC,IAAIvV,GAAM,CAAC,EACPF,GAAGgJ,GACP,IAAKhJ,GAAI,EAAGgJ,GAAI0M,GAAM,OAAQ1V,GAAIgJ,GAAGhJ,KACnCE,GAAIwV,GAAM1V,EAAC,CAAC,EAAIyV,IAAO,CAAC,EAE1B,OAAOvV,EACT,EAQA,IAPAwJ,EAAWA,GAAY,CAAC,EACxBuC,EAAaA,GAAc,GACvB,OAAOvC,GAAa,WACtBA,EAAW0pB,GAAM1pB,CAAQ,GAE3BtH,EAAOgxB,GAAMhxB,CAAI,EACjB0xB,EAAK1xB,EAAK,OACH0xB,KACLC,EAAkBX,GAAM,CACtBG,EACAtnB,CACF,EAAE,KAAK,GAAG,CAAC,EACXpG,GAAU,CACR,WAAYmuB,GAAWD,CAAe,EACtC,gBAAiBA,EACjB,SAAUC,GAAWtqB,EAAUopB,EAAQ,CACzC,EACAQ,EAAOlxB,EAAK0xB,CAAE,CAAC,EAAIjuB,EAEvB,EACIouB,EAAW,SAAU7xB,EAAM6J,EAAY,CACzC,IAAI6nB,EAAII,EAAYl0B,EAAGgJ,GAIvB,IAHA5G,EAAOgxB,GAAMhxB,CAAI,EACjB0xB,EAAK1xB,EAAK,OACV6J,EAAamnB,GAAMnnB,CAAU,EACtB6nB,KAEL,IADAI,EAAaZ,EAAOlxB,EAAK0xB,CAAE,CAAC,EACvB9zB,EAAI,EAAGgJ,GAAIiD,EAAW,OAAQjM,EAAIgJ,GAAGhJ,IACxCk0B,EAAW,WAAWjoB,EAAWjM,CAAC,CAAC,EAAI,CAAC,EACxCk0B,EAAW,gBAAgB,KAAKjoB,EAAWjM,CAAC,CAAC,CAGnD,EACA,OAAI6yB,GAASh0B,CAAI,EACRg0B,GAASh0B,CAAI,GAEtB00B,EAAmB,wDACnBC,EAAe,sFACfC,EAAkB,wLACd50B,IAAS,UACX00B,GAAoB,8EACpBC,GAAgB,6EAChBC,GAAmB,oGAEjB50B,IAAS,iBACX00B,GAAoB,YACpBK,EAAuB,6CACvBH,EAAkB,CAChBA,EACAG,CACF,EAAE,KAAK,GAAG,EACVZ,GAAOI,GAAMQ,CAAoB,EAAG,SAAUxxB,EAAM,CAClDyxB,EAAIzxB,EAAM,GAAIqxB,CAAe,CAC/B,CAAC,EACDE,EAAoB,8BACpBH,EAAe,CACbA,EACAG,CACF,EAAE,KAAK,GAAG,EACVD,EAAc,CACZF,EACAC,CACF,EAAE,KAAK,GAAG,EACVT,GAAOI,GAAMO,CAAiB,EAAG,SAAUvxB,EAAM,CAC/CyxB,EAAIzxB,EAAM,GAAIsxB,CAAW,CAC3B,CAAC,GAEHA,EAAcA,GAAe,CAC3BF,EACAC,CACF,EAAE,KAAK,GAAG,EACVI,EAAI,OAAQ,WAAY,WAAW,EACnCA,EAAI,OAAQ,GAAI,oDAAoD,EACpEA,EAAI,sBAAsB,EAC1BA,EAAI,OAAQ,aAAa,EACzBA,EAAI,OAAQ,6CAA6C,EACzDA,EAAI,OAAQ,iCAAiC,EAC7CA,EAAI,QAAS,mBAAmB,EAChCA,EAAI,SAAU,8BAA8B,EAC5CA,EAAI,OAAQ,0LAAqMH,CAAW,EAC5NG,EAAI,4BAA6B,GAAIH,CAAW,EAChDG,EAAI,0GAA2G,GAAIJ,CAAe,EAClII,EAAI,aAAc,OAAQH,CAAW,EACrCG,EAAI,KAAM,sBAAuB,IAAI,EACrCA,EAAI,KAAM,GAAI,IAAI,EAClBA,EAAI,KAAM,QAASH,CAAW,EAC9BG,EAAI,KAAM,GAAI,OAAO,EACrBA,EAAI,IAAK,sCAAuCJ,CAAe,EAC/DI,EAAI,IAAK,OAAQJ,CAAe,EAChCI,EAAI,UAAW,gBAAiBH,CAAW,EAC3CG,EAAI,MAAO,gDAAgD,EAC3DA,EAAI,SAAU,wBAAyBH,CAAW,EAClDG,EAAI,QAAS,uBAAuB,EACpCA,EAAI,SAAU,wDAAyD,CACrEH,EACA,OACF,EAAE,KAAK,GAAG,CAAC,EACXG,EAAI,QAAS,YAAY,EACzBA,EAAI,MAAO,OAAQ,CACjBH,EACA,MACF,EAAE,KAAK,GAAG,CAAC,EACXG,EAAI,OAAQ,sDAAsD,EAClEA,EAAI,QAAS,SAAU,yCAA2Ch1B,IAAS,QAAU,OAAS,GAAG,EACjGg1B,EAAI,WAAY,OAAQ,KAAK,EAC7BA,EAAI,MAAO,MAAM,EACjBA,EAAI,oBAAqB,GAAI,IAAI,EACjCA,EAAI,KAAM,GAAI,OAAO,EACrBA,EAAI,KAAM,0BAA2BH,CAAW,EAChDG,EAAI,KAAM,qCAAsCH,CAAW,EAC3DG,EAAI,OAAQ,2EAA4EH,CAAW,EACnGG,EAAI,WAAY,qBAAsB,CACpCH,EACA,QACF,EAAE,KAAK,GAAG,CAAC,EACXG,EAAI,QAAS,WAAYJ,CAAe,EACxCI,EAAI,QAAS,wNAA6N,EAC1OA,EAAI,SAAU,4FAA6Fh1B,IAAS,QAAU60B,EAAcD,CAAe,EAC3JI,EAAI,SAAU,4CAA6C,iBAAiB,EAC5EA,EAAI,WAAY,iBAAkB,QAAQ,EAC1CA,EAAI,SAAU,+BAA+B,EAC7CA,EAAI,WAAY,uEAAuE,EACvFA,EAAI,OAAQ,aAAc,CACxBH,EACA,IACF,EAAE,KAAK,GAAG,CAAC,EACXG,EAAI,WAAY,GAAIH,CAAW,EAC3B70B,IAAS,UACXg1B,EAAI,KAAK,EACTA,EAAI,OAAQ,GAAI,CACdJ,EACA,OACF,EAAE,KAAK,GAAG,CAAC,EACXI,EAAI,aAAc,GAAIH,CAAW,EACjCG,EAAI,yBAA0B,GAAIJ,CAAe,EACjDI,EAAI,SAAU,eAAgBH,CAAW,EACzCG,EAAI,QAAS,+FAAqG,CAChHH,EACA,cACF,EAAE,KAAK,GAAG,CAAC,EACXG,EAAI,QAAS,kFAAwF,CACnGH,EACA,cACF,EAAE,KAAK,GAAG,CAAC,EACXG,EAAI,UAAW,GAAI,YAAY,EAC/BA,EAAI,SAAU,6BAA6B,EAC3CA,EAAI,QAAS,gCAAgC,EAC7CA,EAAI,WAAY,GAAI,CAClBJ,EACA,QACF,EAAE,KAAK,GAAG,CAAC,EACXI,EAAI,+CAAgD,GAAIH,CAAW,EACnEG,EAAI,SAAU,GAAI,mBAAmB,EACrCA,EAAI,SAAU,GAAI,CAChBH,EACA,YACF,EAAE,KAAK,GAAG,CAAC,EACXG,EAAI,OAAQ,WAAYJ,CAAe,EACvCI,EAAI,SAAU,OAAQH,CAAW,EACjCG,EAAI,UAAW,qDAAqD,EACpEA,EAAI,SAAU,gBAAiBJ,CAAe,EAC9CI,EAAI,WAAY,YAAaJ,CAAe,EAC5CI,EAAI,QAAS,iCAAkCJ,CAAe,EAC9DI,EAAI,UAAW,OAAQ,CACrBH,EACA,SACF,EAAE,KAAK,GAAG,CAAC,EACXG,EAAI,SAAU,gDAAgD,GAE5Dh1B,IAAS,iBACXo1B,EAAS,SAAU,oBAAoB,EACvCA,EAAS,QAAS,WAAW,EAC7BA,EAAS,SAAU,mFAAmF,EACtGA,EAAS,QAAS,0BAA0B,EAC5CA,EAAS,QAAS,gBAAgB,EAClCA,EAAS,IAAK,+BAA+B,EAC7CA,EAAS,KAAM,OAAO,EACtBA,EAAS,SAAU,wEAAwE,EAC3FA,EAAS,MAAO,0CAA0C,EAC1DA,EAAS,SAAU,+DAA+D,EAClFA,EAAS,gBAAiB,iBAAiB,EAC3CA,EAAS,QAAS,cAAc,EAChCA,EAAS,SAAU,UAAU,EAC7BA,EAAS,UAAU,EACnBA,EAAS,yCAA0C,OAAO,EAC1DA,EAAS,KAAM,cAAc,EAC7BA,EAAS,KAAM,MAAM,EACrBA,EAAS,iBAAkB,SAAS,EACpCA,EAAS,MAAO,iBAAiB,EACjCA,EAAS,KAAM,0BAA0B,EACzCA,EAAS,UAAW,QAAQ,EAC5BA,EAAS,QAAS,iEAAiE,EACnFA,EAAS,MAAO,iCAAiC,EACjDA,EAAS,WAAY,iCAAiC,EACtDA,EAAS,QAAS,2BAA2B,EAC7CA,EAAS,KAAM,mCAAmC,EAClDA,EAAS,KAAM,4DAA4D,EAC3EA,EAAS,OAAQ,QAAQ,EACzBA,EAAS,KAAM,uEAAuE,EACtFA,EAAS,QAAS,2BAA2B,EAC7CA,EAAS,QAAS,2BAA2B,EAC7CA,EAAS,OAAQ,QAAQ,EACzBA,EAAS,OAAQ,0CAA0C,GAEzDp1B,IAAS,UACXo1B,EAAS,+BAAgC,WAAW,EACpDA,EAAS,iBAAkB,aAAa,EACxCA,EAAS,IAAK,UAAU,EACxBA,EAAS,kBAAmB,aAAa,EACzCA,EAAS,SAAU,kCAAkC,GAEvDjB,GAAOI,GAAM,2BAA2B,EAAG,SAAUhxB,EAAM,CACrDkxB,EAAOlxB,CAAI,GACb,OAAOkxB,EAAOlxB,CAAI,EAAE,SAASA,CAAI,CAErC,CAAC,EACD,OAAOkxB,EAAO,QAAQ,SAAS,MAC/B,OAAOA,EAAO,OACdT,GAASh0B,CAAI,EAAIy0B,EACVA,EACT,EACIa,GAAoB,SAAU13B,EAAO23B,EAAM,CAC7C,IAAI9Q,EACJ,OAAI7mB,IACF6mB,EAAS,CAAC,EACN,OAAO7mB,GAAU,WACnBA,EAAQ,CAAE,IAAKA,CAAM,GAEvBu2B,GAAOv2B,EAAO,SAAUA,EAAO+R,EAAK,CAClC8U,EAAO9U,CAAG,EAAI8U,EAAO9U,EAAI,YAAY,CAAC,EAAI4lB,IAAS,MAAQrB,GAAUt2B,EAAO,MAAM,EAAIy2B,GAAUz2B,EAAO,MAAM,CAC/G,CAAC,GAEI6mB,CACT,EACA,SAAS+Q,GAAO7I,EAAU,CACxB,IAAIrb,EAAW,CAAC,EACZzG,EAAW,CAAC,EACZ4qB,EAAkB,CAAC,EACnBC,EACAC,EACAC,EACAC,EAAuBC,EAAwBC,EAAuBC,EAAaC,EACnFC,EAAkBC,EAAqBC,EAAmCC,GAAsBC,GAChGC,GAAoB,CAAC,EAAGC,GAAkB,CAAC,EAC3CC,GAAoB,SAAUC,GAAQC,GAAcC,GAAY,CAClE,IAAIh5B,GAAQ+uB,EAAS+J,EAAM,EAC3B,OAAK94B,GAQHA,GAAQs2B,GAAUt2B,GAAO,OAAQs2B,GAAUt2B,GAAM,YAAY,EAAG,MAAM,CAAC,GAPvEA,GAAQo2B,GAAS0C,EAAM,EAClB94B,KACHA,GAAQs2B,GAAUyC,GAAc,IAAKzC,GAAUyC,GAAa,YAAY,EAAG,GAAG,CAAC,EAC/E/4B,GAAQw2B,GAASx2B,GAAOg5B,EAAU,EAClC5C,GAAS0C,EAAM,EAAI94B,KAKhBA,EACT,EACA+uB,EAAWA,GAAY,CAAC,EACxBiJ,EAAcpB,GAAc7H,EAAS,MAAM,EACvCA,EAAS,cAAgB,KAC3BA,EAAS,eAAiB,QAE5B+I,EAAcJ,GAAkB3I,EAAS,YAAY,EACrDgJ,EAAgBL,GAAkB3I,EAAS,eAAgB,KAAK,EAChEsJ,EAAeX,GAAkB3I,EAAS,cAAe,KAAK,EAC9DkJ,EAAwBY,GAAkB,sBAAuB,mEAAmE,EACpIX,EAAyBW,GAAkB,wBAAyB,iDAAiD,EACrHV,EAAwBU,GAAkB,uBAAwB,6FAAkG,EACpKT,EAAcS,GAAkB,qBAAsB,+HAAoI,EAC1LN,EAAsBM,GAAkB,qBAAsB,kDAAwDV,CAAqB,EAC3IK,EAAoCK,GAAkB,sCAAuC,QAASN,CAAmB,EACzHE,GAAuBI,GAAkB,sBAAuB,oIAAyI,EACzMP,EAAmBO,GAAkB,iBAAkB,iJAA4JJ,EAAoB,EACvOC,GAAwBG,GAAkB,uBAAwB,wEAA6E,EAC/ItC,IAAQxH,EAAS,SAAW,oEAAoE,MAAM,GAAG,EAAG,SAAUppB,GAAM,CAC1HizB,GAAgBjzB,EAAI,EAAI,IAAI,OAAO,KAAOA,GAAO,SAAU,IAAI,CACjE,CAAC,EACD,IAAIszB,GAAkB,SAAU7e,GAAK,CACnC,OAAO,IAAI,OAAO,IAAMA,GAAI,QAAQ,WAAY,KAAK,EAAI,GAAG,CAC9D,EACI8e,GAAmB,SAAUC,GAAe,CAC9C,IAAIC,GAAIva,GAAIwa,GAAIC,GAAInrB,GAAS/E,GAASqM,GAAM8jB,GAAUC,GAAarG,GAAUsG,GAAUjqB,GAAY8nB,GAAiBoC,GAAQC,GAAY7C,GAAkB8C,GAAuB7nB,GAAK/R,GAClL65B,GAAoB,8DAA+DC,GAAiB,oDAAqDC,GAAoB,QACjL,GAAIZ,IAMF,IALAA,GAAgBxC,GAAMwC,GAAe,GAAG,EACpCzlB,EAAS,GAAG,IACdojB,GAAmBpjB,EAAS,GAAG,EAAE,WACjCkmB,GAAwBlmB,EAAS,GAAG,EAAE,iBAEnC0lB,GAAK,EAAGva,GAAKsa,GAAc,OAAQC,GAAKva,GAAIua,KAE/C,GADAjrB,GAAU0rB,GAAkB,KAAKV,GAAcC,EAAE,CAAC,EAC9CjrB,GAAS,CAoBX,GAnBAurB,GAASvrB,GAAQ,CAAC,EAClBqrB,GAAcrrB,GAAQ,CAAC,EACvBwrB,GAAaxrB,GAAQ,CAAC,EACtBorB,GAAWprB,GAAQ,CAAC,EACpBqB,GAAa,CAAC,EACd8nB,GAAkB,CAAC,EACnBluB,GAAU,CACR,WAAYoG,GACZ,gBAAiB8nB,EACnB,EACIoC,KAAW,MACbtwB,GAAQ,UAAY,IAElBswB,KAAW,MACbtwB,GAAQ,YAAc,IAEpB+E,GAAQ,CAAC,IAAM,MACjB/E,GAAQ,iBAAmB,IAEzB0tB,GAAkB,CACpB,IAAK/kB,MAAO+kB,GACVtnB,GAAWuC,EAAG,EAAI+kB,GAAiB/kB,EAAG,EAExCulB,GAAgB,KAAK,MAAMA,GAAiBsC,EAAqB,CACnE,CACA,GAAIL,IAEF,IADAA,GAAW5C,GAAM4C,GAAU,GAAG,EACzBF,GAAK,EAAGC,GAAKC,GAAS,OAAQF,GAAKC,GAAID,KAE1C,GADAlrB,GAAU2rB,GAAe,KAAKP,GAASF,EAAE,CAAC,EACtClrB,GAAS,CAWX,GAVAsH,GAAO,CAAC,EACRgkB,GAAWtrB,GAAQ,CAAC,EACpBglB,GAAWhlB,GAAQ,CAAC,EAAE,QAAQ,UAAW,GAAG,EAC5CurB,GAASvrB,GAAQ,CAAC,EAClBnO,GAAQmO,GAAQ,CAAC,EACbsrB,KAAa,MACfrwB,GAAQ,mBAAqBA,GAAQ,oBAAsB,CAAC,EAC5DA,GAAQ,mBAAmB,KAAK+pB,EAAQ,EACxC1d,GAAK,SAAW,IAEdgkB,KAAa,IAAK,CACpB,OAAOjqB,GAAW2jB,EAAQ,EAC1BmE,GAAgB,OAAOZ,GAAUY,GAAiBnE,EAAQ,EAAG,CAAC,EAC9D,QACF,CACIuG,KACEA,KAAW,MACbtwB,GAAQ,kBAAoBA,GAAQ,mBAAqB,CAAC,EAC1DA,GAAQ,kBAAkB,KAAK,CAC7B,KAAM+pB,GACN,MAAOnzB,EACT,CAAC,EACDyV,GAAK,aAAezV,IAElB05B,KAAW,MACbtwB,GAAQ,iBAAmBA,GAAQ,kBAAoB,CAAC,EACxDA,GAAQ,iBAAiB,KAAK,CAC5B,KAAM+pB,GACN,MAAOnzB,EACT,CAAC,EACDyV,GAAK,YAAczV,IAEjB05B,KAAW,MACbjkB,GAAK,YAAc6gB,GAAUt2B,GAAO,GAAG,IAGvC+5B,GAAkB,KAAK5G,EAAQ,GACjC/pB,GAAQ,kBAAoBA,GAAQ,mBAAqB,CAAC,EAC1DqM,GAAK,QAAUwjB,GAAgB9F,EAAQ,EACvC/pB,GAAQ,kBAAkB,KAAKqM,EAAI,IAE9BjG,GAAW2jB,EAAQ,GACtBmE,GAAgB,KAAKnE,EAAQ,EAE/B3jB,GAAW2jB,EAAQ,EAAI1d,GAE3B,EAGA,CAACqhB,IAAoB0C,KAAgB,MACvC1C,GAAmBtnB,GACnBoqB,GAAwBtC,IAEtBqC,KACFvwB,GAAQ,WAAaowB,GACrB9lB,EAASimB,EAAU,EAAIvwB,IAErB2wB,GAAkB,KAAKP,EAAW,GACpCpwB,GAAQ,QAAU6vB,GAAgBO,EAAW,EAC7C3B,EAAgB,KAAKzuB,EAAO,GAE5BsK,EAAS8lB,EAAW,EAAIpwB,EAE5B,EAGN,EACI4wB,GAAmB,SAAUb,GAAe,CAC9CzlB,EAAW,CAAC,EACZmkB,EAAkB,CAAC,EACnBqB,GAAiBC,EAAa,EAC9B5C,GAAOyB,EAAa,SAAU5uB,GAASzD,GAAM,CAC3CsH,EAAStH,EAAI,EAAIyD,GAAQ,QAC3B,CAAC,CACH,EACI6wB,GAAoB,SAAUC,GAAgB,CAChD,IAAIC,GAAsB,aACtBD,KACF9D,GAAS,oBAAsBA,GAAS,eAAiB,KACzDG,GAAOI,GAAMuD,GAAgB,GAAG,EAAG,SAAUE,GAAM,CACjD,IAAIjsB,GAAUgsB,GAAoB,KAAKC,EAAI,EAAGC,GAASlsB,GAAQ,CAAC,IAAM,IAAKmsB,GAAYD,GAAS,OAAS,MAAO10B,GAAOwI,GAAQ,CAAC,EAOhI,GANAlB,EAAStH,EAAI,EAAIsH,EAASqtB,EAAS,EACnC3B,GAAkBhzB,EAAI,EAAI20B,GACrBD,KACH/B,EAAiB3yB,GAAK,YAAY,CAAC,EAAI,CAAC,EACxC2yB,EAAiB3yB,EAAI,EAAI,CAAC,GAExB,CAAC+N,EAAS/N,EAAI,EAAG,CACnB,IAAI40B,GAAa7mB,EAAS4mB,EAAS,EACnCC,GAAa/D,GAAS,CAAC,EAAG+D,EAAU,EACpC,OAAOA,GAAW,iBAClB,OAAOA,GAAW,YAClB7mB,EAAS/N,EAAI,EAAI40B,EACnB,CACAhE,GAAOtpB,EAAU,SAAU7D,GAASoxB,GAAS,CACvCpxB,GAAQkxB,EAAS,IACnBrtB,EAASutB,EAAO,EAAIpxB,GAAUotB,GAAS,CAAC,EAAGvpB,EAASutB,EAAO,CAAC,EAC5DpxB,GAAQzD,EAAI,EAAIyD,GAAQkxB,EAAS,EAErC,CAAC,CACH,CAAC,EAEL,EACIG,GAAmB,SAAUC,GAAe,CAC9C,IAAIC,GAAkB,8BACtBvE,GAASrH,EAAS,MAAM,EAAI,KACxB2L,IACFnE,GAAOI,GAAM+D,GAAe,GAAG,EAAG,SAAUN,GAAM,CAChD,IAAIjsB,GAAUwsB,GAAgB,KAAKP,EAAI,EACnCxnB,GAAQ8mB,GACRvrB,KACFurB,GAASvrB,GAAQ,CAAC,EACdurB,GACF9mB,GAAS3F,EAASkB,GAAQ,CAAC,CAAC,EAE5ByE,GAAS3F,EAASkB,GAAQ,CAAC,CAAC,EAAI,CAAE,WAAY,CAAC,CAAE,EAEnDyE,GAAS3F,EAASkB,GAAQ,CAAC,CAAC,EAC5BooB,GAAOI,GAAMxoB,GAAQ,CAAC,EAAG,GAAG,EAAG,SAAUgb,GAAO,CAC1CuQ,KAAW,IACb,OAAO9mB,GAAOuW,EAAK,EAEnBvW,GAAOuW,EAAK,EAAI,CAAC,CAErB,CAAC,EAEL,CAAC,CAEL,EACIyR,GAAiB,SAAUj1B,GAAM,CACnC,IAAIyD,GAAUsK,EAAS/N,EAAI,EAAGpC,GAC9B,GAAI6F,GACF,OAAOA,GAGT,IADA7F,GAAIs0B,EAAgB,OACbt0B,MAEL,GADA6F,GAAUyuB,EAAgBt0B,EAAC,EACvB6F,GAAQ,QAAQ,KAAKzD,EAAI,EAC3B,OAAOyD,EAGb,EACK2lB,EAAS,eA0BZiL,GAAiBjL,EAAS,cAAc,GAzBxCwH,GAAOyB,EAAa,SAAU5uB,GAASzD,GAAM,CAC3C+N,EAAS/N,EAAI,EAAI,CACf,WAAYyD,GAAQ,WACpB,gBAAiBA,GAAQ,eAC3B,EACA6D,EAAStH,EAAI,EAAIyD,GAAQ,QAC3B,CAAC,EACG2lB,EAAS,SAAW,SACtBwH,GAAOI,GAAM,eAAe,EAAG,SAAUtd,GAAM,CAC7CA,GAAOsd,GAAMtd,GAAM,GAAG,EACtB3F,EAAS2F,GAAK,CAAC,CAAC,EAAE,WAAaA,GAAK,CAAC,CACvC,CAAC,EAEHkd,GAAOI,GAAM,mEAAmE,EAAG,SAAUhxB,GAAM,CAC7F+N,EAAS/N,EAAI,IACf+N,EAAS/N,EAAI,EAAE,YAAc,GAEjC,CAAC,EACD4wB,GAAOI,GAAM,sDAAsD,EAAG,SAAUhxB,GAAM,CACpF+N,EAAS/N,EAAI,EAAE,UAAY,EAC7B,CAAC,EACD4wB,GAAOI,GAAM,MAAM,EAAG,SAAUhxB,GAAM,CACpC+N,EAAS/N,EAAI,EAAE,iBAAmB,EACpC,CAAC,GAIHs0B,GAAkBlL,EAAS,eAAe,EAC1C0L,GAAiB1L,EAAS,cAAc,EACxCmK,GAAiBnK,EAAS,uBAAuB,EACjD0L,GAAiB,uBAAuB,EACxClE,GAAO,CACL,GAAI,KACJ,GAAI,KACJ,GAAI,QACJ,GAAI,KACJ,GAAI,KACJ,GAAI,oBACJ,MAAO,QACP,MAAO,QACP,MAAO,QACP,OAAQ,WACR,KAAM,MACN,MAAO,oBACT,EAAG,SAAU5N,GAAStP,GAAM,CACtB3F,EAAS2F,EAAI,IACf3F,EAAS2F,EAAI,EAAE,gBAAkBsd,GAAMhO,EAAO,EAElD,CAAC,EACGoG,EAAS,kBACXwH,GAAOE,GAAU1H,EAAS,gBAAgB,EAAG,SAAU1V,GAAM,CACvD3F,EAAS2F,EAAI,GACf,OAAO3F,EAAS2F,EAAI,CAExB,CAAC,EAEEuhB,GAAe,MAAM,GACxB1B,GAAiB,wBAAwB,EAE3C,IAAI2B,GAAiB,UAAY,CAC/B,OAAO/C,CACT,EACIgD,GAAmB,UAAY,CACjC,OAAO/C,CACT,EACIgD,GAAkB,UAAY,CAChC,OAAO1C,CACT,EACI2C,GAAe,UAAY,CAC7B,OAAO5C,CACT,EACI6C,GAAmB,UAAY,CACjC,OAAO3C,CACT,EACI4C,GAAuB,UAAY,CACrC,OAAOzC,EACT,EACI0C,GAAwB,UAAY,CACtC,OAAOzC,EACT,EACI0C,GAAwB,UAAY,CACtC,OAAOjD,CACT,EACIkD,GAAyB,UAAY,CACvC,OAAOnD,CACT,EACIoD,GAAsB,UAAY,CACpC,OAAO/C,CACT,EACIgD,GAAoC,UAAY,CAClD,OAAO/C,CACT,EACIgD,GAAwB,UAAY,CACtC,OAAOvD,CACT,EACIwD,GAAqB,UAAY,CACnC,OAAO7C,EACT,EACI8C,GAAe,SAAU/1B,GAAMwjB,GAAO,CACxC,IAAIvW,GAAS3F,EAAStH,GAAK,YAAY,CAAC,EACxC,MAAO,CAAC,EAAEiN,IAAUA,GAAOuW,GAAM,YAAY,CAAC,EAChD,EACIwS,GAAU,SAAUh2B,GAAM8P,GAAM,CAClC,IAAImmB,GAAcr4B,GACd62B,GAAOQ,GAAej1B,EAAI,EAC9B,GAAIy0B,GACF,GAAI3kB,GAAM,CACR,GAAI2kB,GAAK,WAAW3kB,EAAI,EACtB,MAAO,GAGT,GADAmmB,GAAexB,GAAK,kBAChBwB,IAEF,IADAr4B,GAAIq4B,GAAa,OACVr4B,MACL,GAAIq4B,GAAar4B,EAAC,EAAE,QAAQ,KAAKoC,EAAI,EACnC,MAAO,GAIf,KACE,OAAO,GAGX,MAAO,EACT,EACIk2B,GAAoB,UAAY,CAClC,OAAOlD,EACT,EACA,MAAO,CACL,SAAU1rB,EACV,SAAUyG,EACV,eAAgBmnB,GAChB,gBAAiBE,GACjB,iBAAkBE,GAClB,iBAAkBH,GAClB,sBAAuBM,GACvB,qBAAsBF,GACtB,sBAAuBC,GACvB,aAAcH,GACd,eAAgBJ,GAChB,uBAAwBS,GACxB,oBAAqBC,GACrB,kCAAmCC,GACnC,sBAAuBC,GACvB,mBAAoBC,GACpB,aAAcC,GACd,QAASC,GACT,kBAAmBE,GACnB,iBAAkB3C,GAClB,iBAAkBc,GAClB,kBAAmBC,GACnB,iBAAkBQ,EACpB,CACF,CAEA,IAAIqB,GAAQ,SAAU1qB,EAAOjO,EAAGqnB,EAAGzoB,EAAG,CACpC,IAAIg6B,EAAM,SAAUjzB,EAAK,CACvB,OAAAA,EAAM,SAASA,EAAK,EAAE,EAAE,SAAS,EAAE,EAC5BA,EAAI,OAAS,EAAIA,EAAM,IAAMA,CACtC,EACA,MAAO,IAAMizB,EAAI54B,CAAC,EAAI44B,EAAIvR,CAAC,EAAIuR,EAAIh6B,CAAC,CACtC,EACA,SAASi6B,GAAOjN,EAAU8H,EAAQ,CAChC,IAAIoF,EAAY,2DACZC,EAAiB,+HACjBC,EAAc,2BACdC,EAAkB,OAClB74B,EACA84B,EAAiB,CAAC,EAClBC,EACAxE,EACAC,EACAwE,EAAgB,SAOpB,IANAxN,EAAWA,GAAY,CAAC,EACpB8H,IACFiB,EAAcjB,EAAO,eAAe,EACpCkB,EAAgBlB,EAAO,iBAAiB,GAE1CyF,GAAiB,uBAA0BC,GAAe,MAAM,GAAG,EAC9Dh5B,EAAI,EAAGA,EAAI+4B,EAAc,OAAQ/4B,IACpC84B,EAAeC,EAAc/4B,CAAC,CAAC,EAAIg5B,EAAgBh5B,EACnD84B,EAAeE,EAAgBh5B,CAAC,EAAI+4B,EAAc/4B,CAAC,EAErD,MAAO,CACL,MAAO,SAAUi5B,EAAO,CACtB,OAAOA,EAAM,QAAQP,EAAWH,EAAK,CACvC,EACA,MAAO,SAAUnV,EAAK,CACpB,IAAIE,EAAS,CAAC,EACV1Y,EAASxI,GAAM3F,GAAOy8B,GACtBC,GAAe3N,EAAS,cACxB4N,GAAoB5N,EAAS,qBAAuB,KACpD6N,GAAW,SAAUlD,GAAQmD,GAAQC,GAAQ,CAC/C,IAAIC,GAAKC,GAAOC,GAAQC,GAExB,GADAH,GAAMlW,EAAO6S,GAAS,OAASmD,EAAM,EACjC,EAACE,KAGLC,GAAQnW,EAAO6S,GAAS,SAAWmD,EAAM,EACrC,EAACG,KAGLC,GAASpW,EAAO6S,GAAS,UAAYmD,EAAM,EACvC,EAACI,KAGLC,GAAOrW,EAAO6S,GAAS,QAAUmD,EAAM,EACnC,EAACK,MAGL,KAAIC,GAAM,CACRJ,GACAC,GACAC,GACAC,EACF,EAEA,IADA35B,EAAI45B,GAAI,OAAS,EACV55B,KACD45B,GAAI55B,CAAC,IAAM45B,GAAI55B,EAAI,CAAC,GAAxB,CAIEA,EAAI,IAAMu5B,KAGdjW,EAAO6S,GAASmD,EAAM,EAAIt5B,IAAM,GAAK45B,GAAI,CAAC,EAAIA,GAAI,KAAK,GAAG,EAC1D,OAAOtW,EAAO6S,GAAS,OAASmD,EAAM,EACtC,OAAOhW,EAAO6S,GAAS,SAAWmD,EAAM,EACxC,OAAOhW,EAAO6S,GAAS,UAAYmD,EAAM,EACzC,OAAOhW,EAAO6S,GAAS,QAAUmD,EAAM,GACzC,EACIO,GAAc,SAAUrrB,GAAK,CAC/B,IAAI/R,GAAQ6mB,EAAO9U,EAAG,EAAGxO,GACzB,GAAKvD,GAKL,KAFAA,GAAQA,GAAM,MAAM,GAAG,EACvBuD,GAAIvD,GAAM,OACHuD,MACL,GAAIvD,GAAMuD,EAAC,IAAMvD,GAAM,CAAC,EACtB,MAAO,GAGX,OAAA6mB,EAAO9U,EAAG,EAAI/R,GAAM,CAAC,EACd,GACT,EACIq9B,GAAY,SAAU3yB,GAAQjJ,GAAGM,GAAGkZ,GAAG,CACpCmiB,GAAY37B,EAAC,GAGb27B,GAAYr7B,EAAC,GAGbq7B,GAAYniB,EAAC,IAGlB4L,EAAOnc,EAAM,EAAImc,EAAOplB,EAAC,EAAI,IAAMolB,EAAO9kB,EAAC,EAAI,IAAM8kB,EAAO5L,EAAC,EAC7D,OAAO4L,EAAOplB,EAAC,EACf,OAAOolB,EAAO9kB,EAAC,EACf,OAAO8kB,EAAO5L,EAAC,EACjB,EACIqiB,GAAS,SAAUljB,GAAK,CAC1B,OAAAqiB,GAAY,GACLJ,EAAejiB,EAAG,CAC3B,EACI6b,GAAS,SAAU7b,GAAKmjB,GAAa,CACvC,OAAId,KACFriB,GAAMA,GAAI,QAAQ,eAAgB,SAAUA,GAAK,CAC/C,OAAOiiB,EAAejiB,EAAG,CAC3B,CAAC,GAEEmjB,KACHnjB,GAAMA,GAAI,QAAQ,gBAAiB,IAAI,GAElCA,EACT,EACIojB,GAA0B,SAAUC,GAAQ,CAC9C,OAAO,OAAO,aAAa,SAASA,GAAO,MAAM,CAAC,EAAG,EAAE,CAAC,CAC1D,EACIC,GAAqB,SAAU19B,GAAO,CACxC,OAAOA,GAAM,QAAQ,gBAAiBw9B,EAAuB,CAC/D,EACIG,GAAa,SAAUvsB,GAAOrL,GAAK63B,GAAMC,GAAMzjB,GAAK0jB,GAAM,CAE5D,GADA1jB,GAAMA,IAAO0jB,GACT1jB,GACF,OAAAA,GAAM6b,GAAO7b,EAAG,EACT,IAAOA,GAAI,QAAQ,MAAO,KAAM,EAAI,IAG7C,GADArU,GAAMkwB,GAAOlwB,IAAO63B,IAAQC,EAAI,EAC5B,CAAC9O,EAAS,kBAAmB,CAC/B,IAAIgP,GAAYh4B,GAAI,QAAQ,aAAc,EAAE,EAI5C,GAHI,oBAAoB,KAAKg4B,EAAS,GAGlC,CAAChP,EAAS,qBAAuB,oBAAoB,KAAKgP,EAAS,EACrE,MAAO,EAEX,CACA,OAAIrB,KACF32B,GAAM22B,GAAa,KAAKC,GAAmB52B,GAAK,OAAO,GAElD,QAAWA,GAAI,QAAQ,MAAO,KAAM,EAAI,IACjD,EACA,GAAI4gB,EAAK,CAKP,IAJAA,EAAMA,EAAI,QAAQ,mBAAoB,EAAE,EACxCA,EAAMA,EAAI,QAAQ,oBAAqB2W,EAAM,EAAE,QAAQ,yBAA0B,SAAUljB,GAAK,CAC9F,OAAOA,GAAI,QAAQ,QAASkjB,EAAM,CACpC,CAAC,EACMnvB,EAAUguB,EAAY,KAAKxV,CAAG,GAInC,GAHAwV,EAAY,UAAYhuB,EAAQ,MAAQA,EAAQ,CAAC,EAAE,OACnDxI,GAAOwI,EAAQ,CAAC,EAAE,QAAQiuB,EAAiB,EAAE,EAAE,YAAY,EAC3Dp8B,GAAQmO,EAAQ,CAAC,EAAE,QAAQiuB,EAAiB,EAAE,EAC1Cz2B,IAAQ3F,GAAO,CAMjB,GALA2F,GAAO+3B,GAAmB/3B,EAAI,EAC9B3F,GAAQ09B,GAAmB19B,EAAK,EAC5B2F,GAAK,QAAQ42B,CAAa,IAAM,IAAM52B,GAAK,QAAQ,GAAG,IAAM,IAG5D,CAACopB,EAAS,oBAAsBppB,KAAS,YAAc,4BAA4B,KAAK3F,EAAK,GAC/F,SAEE2F,KAAS,eAAiB3F,KAAU,MACtCA,GAAQ,QACC2F,KAAS,SAAWA,KAAS,sBACtC3F,GAAQA,GAAM,YAAY,GAE5BA,GAAQA,GAAM,QAAQi8B,EAAWH,EAAK,EACtC97B,GAAQA,GAAM,QAAQk8B,EAAgByB,EAAU,EAChD9W,EAAOlhB,EAAI,EAAI82B,GAAYxG,GAAOj2B,GAAO,EAAI,EAAIA,EACnD,CAEF48B,GAAS,SAAU,GAAI,EAAI,EAC3BA,GAAS,SAAU,QAAQ,EAC3BA,GAAS,SAAU,QAAQ,EAC3BA,GAAS,SAAU,QAAQ,EAC3BA,GAAS,UAAW,EAAE,EACtBA,GAAS,SAAU,EAAE,EACrBS,GAAU,SAAU,eAAgB,eAAgB,cAAc,EAC9DxW,EAAO,SAAW,eACpB,OAAOA,EAAO,OAEZA,EAAO,cAAc,IAAM,QAC7B,OAAOA,EAAO,cAAc,CAEhC,CACA,OAAOA,CACT,EACA,UAAW,SAAUA,EAAQ2S,EAAa,CACxC,IAAI7S,EAAM,GAAIhhB,GAAM3F,GAChBg+B,GAAkB,SAAUr4B,GAAM,CACpC,IAAIs4B,GAAW16B,GAAGgJ,GAAGvM,GAErB,GADAi+B,GAAYnG,EAAYnyB,EAAI,EACxBs4B,GACF,IAAK16B,GAAI,EAAGgJ,GAAI0xB,GAAU,OAAQ16B,GAAIgJ,GAAGhJ,KACvCoC,GAAOs4B,GAAU16B,EAAC,EAClBvD,GAAQ6mB,EAAOlhB,EAAI,EACf3F,KACF2mB,IAAQA,EAAI,OAAS,EAAI,IAAM,IAAMhhB,GAAO,KAAO3F,GAAQ,IAInE,EACI27B,GAAU,SAAUh2B,GAAM6zB,GAAa,CACzC,IAAI0E,GAMJ,OALAA,GAAWnG,EAAc,GAAG,EACxB,EAAAmG,IAAYA,GAASv4B,EAAI,IAG7Bu4B,GAAWnG,EAAcyB,EAAW,EAChC0E,IAAYA,GAASv4B,EAAI,GAI/B,EACA,GAAI6zB,GAAe1B,EACjBkG,GAAgB,GAAG,EACnBA,GAAgBxE,CAAW,MAE3B,KAAK7zB,MAAQkhB,EACX7mB,GAAQ6mB,EAAOlhB,EAAI,EACf3F,KAAU,CAAC+3B,GAAiB4D,GAAQh2B,GAAM6zB,CAAW,KACvD7S,IAAQA,EAAI,OAAS,EAAI,IAAM,IAAMhhB,GAAO,KAAO3F,GAAQ,KAIjE,OAAO2mB,CACT,CACF,CACF,CAEA,IAAIwX,GAASviB,GAAM,KACfwiB,GAASxiB,GAAM,KACfyiB,EAAO92B,GAAI,GACX+2B,EAAmB,mBACnBC,EAAqB,eACrBC,EAAiB,SAAU3X,EAAQkI,EAAU0P,EAAY,CAC3D,IAAIlhB,EAAY,CAAC,EACbmhB,EAAa3P,EAAS,YACtB4P,EAAc,CAChB,IAAK,SAAUC,EAAM5+B,EAAO2F,EAAM,CAC5BopB,EAAS,gBACX/uB,EAAQ+uB,EAAS,cAAc,KAAKA,EAAS,qBAAuB0P,EAAW,EAAGz+B,EAAO2F,EAAMi5B,EAAK,CAAC,CAAC,GAExGA,EAAK,KAAK,YAAcj5B,EAAM3F,CAAK,EAAE,KAAK2F,EAAM3F,CAAK,CACvD,EACA,IAAK,SAAU4+B,EAAMj5B,EAAM,CACzB,OAAOi5B,EAAK,KAAK,YAAcj5B,CAAI,GAAKi5B,EAAK,KAAKj5B,CAAI,CACxD,CACF,EACA,OAAA4X,EAAY,CACV,MAAO,CACL,IAAK,SAAUqhB,EAAM5+B,EAAO,CAC1B,GAAIA,IAAU,MAAQ,OAAOA,GAAU,SAAU,CAC/C4+B,EAAK,IAAI5+B,CAAK,EACd,MACF,CACI0+B,GACFE,EAAK,KAAK,iBAAkB5+B,CAAK,EAEnC4+B,EAAK,KAAK,QAAS5+B,CAAK,CAC1B,EACA,IAAK,SAAU4+B,EAAM,CACnB,IAAI5+B,EAAQ4+B,EAAK,KAAK,gBAAgB,GAAKA,EAAK,KAAK,OAAO,EAC5D,OAAA5+B,EAAQ6mB,EAAO,UAAUA,EAAO,MAAM7mB,CAAK,EAAG4+B,EAAK,CAAC,EAAE,QAAQ,EACvD5+B,CACT,CACF,CACF,EACI0+B,IACFnhB,EAAU,KAAOA,EAAU,IAAMohB,GAE5BphB,CACT,EACIshB,EAA0B,SAAUhY,EAAQ+X,EAAM,CACpD,IAAIE,EAAWF,EAAK,KAAK,OAAO,EAC5B5+B,EAAQ6mB,EAAO,UAAUA,EAAO,MAAMiY,CAAQ,EAAGF,EAAK,CAAC,EAAE,QAAQ,EAChE5+B,IACHA,EAAQ,MAEV4+B,EAAK,KAAK,iBAAkB5+B,CAAK,CACnC,EACI++B,EAAgB,SAAUrsB,EAAMssB,EAAY,CAC9C,IAAIhqB,EAAM,EAAGiqB,EAAc5tB,EAC3B,GAAIqB,EACF,IAAKusB,EAAevsB,EAAK,SAAUA,EAAOA,EAAK,gBAAiBA,EAAMA,EAAOA,EAAK,gBAChFrB,EAAWqB,EAAK,SACZ,EAAAssB,GAAc3tB,IAAa,IACzBA,IAAa4tB,GAAgB,CAACvsB,EAAK,UAAU,WAInDsC,IACAiqB,EAAe5tB,GAGnB,OAAO2D,CACT,EACA,SAASkqB,GAAS9zB,EAAK2jB,EAAU,CAC/B,IAAIoQ,EAAQ,KACRpQ,IAAa,SACfA,EAAW,CAAC,GAEd,IAAIxR,EACA6hB,EAAc,CAAC,EACf7zB,EAAM/L,EAAW,OACjB6/B,EAAQ,CAAC,EACTC,EAAU,EACVC,EAAU,GACVC,EAAW,GACXC,EAAmB3Q,GAAiB1jB,EAAK,CAAE,eAAgB2jB,EAAS,cAAe,CAAC,EACpF2Q,EAAc,CAAC,EACf7I,EAAS9H,EAAS,OAASA,EAAS,OAAS6I,GAAO,CAAC,CAAC,EACtD/Q,EAASmV,GAAO,CAClB,cAAejN,EAAS,cACxB,oBAAqBA,EAAS,mBAChC,EAAGA,EAAS,MAAM,EACdjjB,EAASijB,EAAS,UAAY,IAAIljB,GAAWkjB,EAAS,KAAK,EAAIljB,GAAW,MAC1EysB,GAAmBzB,EAAO,iBAAiB,EAC3C8I,GAAI9iB,GAAS,iBAAiB,UAAY,CAC5C,MAAO,CACL,QAASzR,EACT,QAASzJ,GAAK,QAAQ,CACxB,CACF,CAAC,EACGmwB,GAAU,SAAUpf,GAAM,CAC5B,GAAI,OAAOA,IAAS,SAClB,MAAO,CAAC,CAAC4lB,GAAiB5lB,EAAI,EACzB,GAAIA,GAAM,CACf,IAAItQ,GAAOsQ,GAAK,SAChB,GAAItQ,GACF,MAAO,CAAC,EAAEA,KAAS,GAAKk2B,GAAiB5lB,GAAK,QAAQ,EAE1D,CACA,MAAO,EACT,EACI2T,GAAM,SAAUrI,GAAK,CACvB,GAAIA,IAAO5S,GAAO,OAAO4S,IAAQ,SAAU,CACzC,IAAItL,GAAOtH,EAAI,eAAe4S,EAAG,EACjC,OAAItL,IAAQA,GAAK,KAAOsL,GACf5S,EAAI,kBAAkB4S,EAAG,EAAE,CAAC,EAE5BtL,EAEX,CACA,OAAOsL,EACT,EACI4hB,GAAK,SAAU5hB,GAAK,CACtB,OAAI,OAAOA,IAAQ,WACjBA,GAAMqI,GAAIrI,EAAG,GAER2hB,GAAE3hB,EAAG,CACd,EACI6hB,GAAY,SAAU7hB,GAAKrY,GAAMm6B,GAAY,CAC/C,IAAI/hB,GAAM/d,GACN4+B,GAAOgB,GAAG5hB,EAAG,EACjB,OAAI4gB,GAAK,SACP7gB,GAAOR,EAAU5X,EAAI,EACjBoY,IAAQA,GAAK,IACf/d,GAAQ+d,GAAK,IAAI6gB,GAAMj5B,EAAI,EAE3B3F,GAAQ4+B,GAAK,KAAKj5B,EAAI,GAGtB,OAAO3F,GAAU,MACnBA,GAAQ8/B,IAAc,IAEjB9/B,EACT,EACI+/B,GAAa,SAAU/hB,GAAK,CAC9B,IAAItL,GAAO2T,GAAIrI,EAAG,EAClB,OAAKtL,GAGEA,GAAK,WAFH,CAAC,CAGZ,EACIstB,GAAY,SAAUhiB,GAAKrY,GAAM3F,GAAO,CAC1C,IAAIigC,GAAeliB,GACf/d,KAAU,KACZA,GAAQ,MAEV,IAAI4+B,GAAOgB,GAAG5hB,EAAG,EACjBiiB,GAAgBrB,GAAK,KAAKj5B,EAAI,EACzBi5B,GAAK,SAGV7gB,GAAOR,EAAU5X,EAAI,EACjBoY,IAAQA,GAAK,IACfA,GAAK,IAAI6gB,GAAM5+B,GAAO2F,EAAI,EAE1Bi5B,GAAK,KAAKj5B,GAAM3F,EAAK,EAEnBigC,KAAkBjgC,IAAS+uB,EAAS,aACtCA,EAAS,YAAY,CACnB,QAAS6P,GACT,SAAUj5B,GACV,UAAW3F,EACb,CAAC,EAEL,EACIkgC,GAAQ,SAAUxtB,GAAMytB,GAAM,CAChC,GAAI,CAAC9B,GAAQ3rB,GAAK,WAAa,GAAKytB,GAClC,OAAOztB,GAAK,UAAUytB,EAAI,EAE5B,GAAI,CAACA,GAAM,CACT,IAAIC,GAAUh1B,EAAI,cAAcsH,GAAK,QAAQ,EAC7C,OAAAyrB,GAAO4B,GAAWrtB,EAAI,EAAG,SAAU+C,GAAM,CACvCuqB,GAAUI,GAAS3qB,GAAK,SAAUoqB,GAAUntB,GAAM+C,GAAK,QAAQ,CAAC,CAClE,CAAC,EACM2qB,EACT,CACA,OAAO,IACT,EACIC,GAAU,UAAY,CACxB,OAAOtR,EAAS,cAAgB3jB,EAAI,IACtC,EACIk1B,GAAc,SAAUC,GAAQ,CAClC,IAAIC,GAAUD,IAASh1B,EACnBH,GAAMo1B,GAAO,SACbvW,GAAW7e,GAAI,gBACnB,MAAO,CACL,EAAGo1B,GAAO,aAAevW,GAAQ,WACjC,EAAGuW,GAAO,aAAevW,GAAQ,UACjC,EAAGuW,GAAO,YAAcvW,GAAQ,YAChC,EAAGuW,GAAO,aAAevW,GAAQ,YACnC,CACF,EACID,GAAS,SAAUhM,GAAKiM,GAAS,CACnC,OAAOE,GAAS,OAAO/e,EAAI,KAAMib,GAAIrI,EAAG,EAAGiM,EAAO,CACpD,EACIwW,GAAW,SAAUziB,GAAKrY,GAAM3F,GAAO,CACzC,IAAI4+B,GAAOgB,GAAG5hB,EAAG,EAAE,IAAIrY,GAAM3F,EAAK,EAC9B+uB,EAAS,eACX8P,EAAwBhY,EAAQ+X,EAAI,CAExC,EACI8B,GAAY,SAAU1iB,GAAK2iB,GAAW,CACxC,IAAI/B,GAAOgB,GAAG5hB,EAAG,EAAE,IAAI2iB,EAAS,EAC5B5R,EAAS,eACX8P,EAAwBhY,EAAQ+X,EAAI,CAExC,EACIgC,GAAW,SAAU5iB,GAAKrY,GAAMmtB,GAAU,CAC5C,IAAI8L,GAAOgB,GAAG5hB,EAAG,EACjB,OAAI8U,GACK8L,GAAK,IAAIj5B,EAAI,GAEtBA,GAAOA,GAAK,QAAQ,SAAU,SAAUlE,GAAGM,GAAG,CAC5C,OAAOA,GAAE,YAAY,CACvB,CAAC,EACG4D,KAAS,UACXA,GAAO4B,GAAI,IAAMA,GAAI,GAAK,GAAK,aAAe,YAEzCq3B,GAAK,CAAC,GAAKA,GAAK,CAAC,EAAE,MAAQA,GAAK,CAAC,EAAE,MAAMj5B,EAAI,EAAI,OAC1D,EACIk7B,GAAU,SAAU7iB,GAAK,CAC3B,IAAI8iB,GAAGC,GACP,OAAA/iB,GAAMqI,GAAIrI,EAAG,EACb8iB,GAAIF,GAAS5iB,GAAK,OAAO,EACzB+iB,GAAIH,GAAS5iB,GAAK,QAAQ,EACtB8iB,GAAE,QAAQ,IAAI,IAAM,KACtBA,GAAI,GAEFC,GAAE,QAAQ,IAAI,IAAM,KACtBA,GAAI,GAEC,CACL,EAAG,SAASD,GAAG,EAAE,GAAK9iB,GAAI,aAAeA,GAAI,YAC7C,EAAG,SAAS+iB,GAAG,EAAE,GAAK/iB,GAAI,cAAgBA,GAAI,YAChD,CACF,EACIgjB,GAAU,SAAUhjB,GAAK,CAC3B,IAAIW,GAAKsiB,GACT,OAAAjjB,GAAMqI,GAAIrI,EAAG,EACbW,GAAMqL,GAAOhM,EAAG,EAChBijB,GAAOJ,GAAQ7iB,EAAG,EACX,CACL,EAAGW,GAAI,EACP,EAAGA,GAAI,EACP,EAAGsiB,GAAK,EACR,EAAGA,GAAK,CACV,CACF,EACI5mB,GAAK,SAAU2D,GAAKhN,GAAU,CAChC,IAAIzN,GACJ,GAAI,CAACya,GACH,MAAO,GAET,GAAI,CAAC,MAAM,QAAQA,EAAG,EAAG,CACvB,GAAIhN,KAAa,IACf,OAAOgN,GAAI,WAAa,EAE1B,GAAIsgB,EAAiB,KAAKttB,EAAQ,EAAG,CACnC,IAAIkwB,GAAYlwB,GAAS,YAAY,EAAE,MAAM,GAAG,EAC5CwpB,GAAUxc,GAAI,SAAS,YAAY,EACvC,IAAKza,GAAI29B,GAAU,OAAS,EAAG39B,IAAK,EAAGA,KACrC,GAAI29B,GAAU39B,EAAC,IAAMi3B,GACnB,MAAO,GAGX,MAAO,EACT,CACA,GAAIxc,GAAI,UAAYA,GAAI,WAAa,EACnC,MAAO,EAEX,CACA,IAAImjB,GAAQ,MAAM,QAAQnjB,EAAG,EAAYA,GAAR,CAACA,EAAG,EACrC,OAAOjN,GAAOC,GAAUmwB,GAAK,CAAC,EAAE,eAAiBA,GAAK,CAAC,EAAG,KAAMA,EAAI,EAAE,OAAS,CACjF,EACIC,GAAa,SAAUpjB,GAAKhN,GAAU4J,GAAMymB,GAAS,CACvD,IAAIltB,GAAS,CAAC,EACVmtB,GACA5uB,GAAO2T,GAAIrI,EAAG,EAelB,IAdAqjB,GAAUA,KAAY,OACtBzmB,GAAOA,KAASylB,GAAQ,EAAE,WAAa,OAASA,GAAQ,EAAE,WAAa,MACnEzkB,GAAM,GAAG5K,GAAU,QAAQ,IAC7BswB,GAActwB,GACVA,KAAa,IACfA,GAAW,SAAU0B,GAAM,CACzB,OAAOA,GAAK,WAAa,CAC3B,EAEA1B,GAAW,SAAU0B,GAAM,CACzB,OAAO2H,GAAG3H,GAAM4uB,EAAW,CAC7B,GAGG5uB,IACD,EAAAA,KAASkI,IAAQ,CAAClI,GAAK,UAAYA,GAAK,WAAa,IAD9C,CAIX,GAAI,CAAC1B,IAAY,OAAOA,IAAa,YAAcA,GAAS0B,EAAI,EAC9D,GAAI2uB,GACFltB,GAAO,KAAKzB,EAAI,MAEhB,OAAO,CAACA,EAAI,EAGhBA,GAAOA,GAAK,UACd,CACA,OAAO2uB,GAAUltB,GAAS,IAC5B,EACIotB,GAAY,SAAU7uB,GAAM1B,GAAU4J,GAAM,CAC9C,IAAI+N,GAAUyY,GAAW1uB,GAAM1B,GAAU4J,GAAM,EAAK,EACpD,OAAO+N,IAAWA,GAAQ,OAAS,EAAIA,GAAQ,CAAC,EAAI,IACtD,EACI6Y,GAAW,SAAU9uB,GAAM1B,GAAUrL,GAAM,CAC7C,IAAIoE,GAAOiH,GACX,GAAI0B,IAMF,IALI,OAAO1B,IAAa,WACtBjH,GAAO,SAAU2I,GAAM,CACrB,OAAO2H,GAAG3H,GAAM1B,EAAQ,CAC1B,GAEG0B,GAAOA,GAAK/M,EAAI,EAAG+M,GAAMA,GAAOA,GAAK/M,EAAI,EAC5C,GAAI,OAAOoE,IAAS,YAAcA,GAAK2I,EAAI,EACzC,OAAOA,GAIb,OAAO,IACT,EACI+uB,GAAU,SAAU/uB,GAAM1B,GAAU,CACtC,OAAOwwB,GAAS9uB,GAAM1B,GAAU,aAAa,CAC/C,EACI0wB,GAAU,SAAUhvB,GAAM1B,GAAU,CACtC,OAAOwwB,GAAS9uB,GAAM1B,GAAU,iBAAiB,CACnD,EACIvD,GAAS,SAAUuD,GAAUzL,GAAO,CACtC,OAAOwL,GAAOC,GAAUqV,GAAI9gB,EAAK,GAAKwpB,EAAS,cAAgB3jB,EAAK,CAAC,CAAC,CACxE,EACIwhB,GAAM,SAAU5O,GAAKjU,GAAMxE,GAAO,CACpC,IAAI4O,GACAzB,GAAO,OAAOsL,IAAQ,SAAWqI,GAAIrI,EAAG,EAAIA,GAChD,GAAI,CAACtL,GACH,MAAO,GAET,GAAIkJ,GAAM,QAAQlJ,EAAI,IAAMA,GAAK,QAAUA,GAAK,SAAW,GACzD,OAAAyB,GAAS,CAAC,EACVgqB,GAAOzrB,GAAM,SAAUsL,GAAKza,GAAG,CACzBya,KACE,OAAOA,IAAQ,WACjBA,GAAMqI,GAAIrI,EAAG,GAEf7J,GAAO,KAAKpK,GAAK,KAAKxE,GAAOyY,GAAKza,EAAC,CAAC,EAExC,CAAC,EACM4Q,GAET,IAAIlD,GAAU1L,IAAgB45B,EAC9B,OAAOp1B,GAAK,KAAKkH,GAASyB,EAAI,CAChC,EACIivB,GAAa,SAAU3jB,GAAKoI,GAAO,CACrCwZ,GAAG5hB,EAAG,EAAE,KAAK,SAAUza,GAAGmP,GAAM,CAC9ByrB,GAAO/X,GAAO,SAAUpmB,GAAO2F,GAAM,CACnCq6B,GAAUttB,GAAM/M,GAAM3F,EAAK,CAC7B,CAAC,CACH,CAAC,CACH,EACI4hC,GAAU,SAAU5jB,GAAK1B,GAAM,CACjC,IAAIsiB,GAAOgB,GAAG5hB,EAAG,EACbqgB,EACFO,GAAK,KAAK,SAAUr7B,GAAGmH,GAAQ,CAC7B,GAAIA,GAAO,cAAgB,GAG3B,MAAOA,GAAO,YACZA,GAAO,YAAYA,GAAO,UAAU,EAEtC,GAAI,CACFA,GAAO,UAAY,OAAS4R,GAC5B5R,GAAO,YAAYA,GAAO,UAAU,CACtC,MAAa,CACXmS,GAAS,aAAa,EAAE,KAAK,OAASP,EAAI,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,SAAS5R,EAAM,CACjF,CACA,OAAO4R,GACT,CAAC,EAEDsiB,GAAK,KAAKtiB,EAAI,CAElB,EACI8a,GAAM,SAAUyK,GAAWl8B,GAAMygB,GAAO9J,GAAM3B,GAAQ,CACxD,OAAOiS,GAAIiV,GAAW,SAAUA,GAAW,CACzC,IAAIC,GAAS,OAAOn8B,IAAS,SAAWyF,EAAI,cAAczF,EAAI,EAAIA,GAClE,OAAAg8B,GAAWG,GAAQ1b,EAAK,EACpB9J,KACE,OAAOA,IAAS,UAAYA,GAAK,SACnCwlB,GAAO,YAAYxlB,EAAI,EACd,OAAOA,IAAS,UACzBslB,GAAQE,GAAQxlB,EAAI,GAGhB3B,GAAyCmnB,GAAhCD,GAAU,YAAYC,EAAM,CAC/C,CAAC,CACH,EACInnB,GAAS,SAAUhV,GAAMygB,GAAO9J,GAAM,CACxC,OAAO8a,GAAIhsB,EAAI,cAAczF,EAAI,EAAGA,GAAMygB,GAAO9J,GAAM,EAAI,CAC7D,EACI2Z,GAASE,GAAS,OAClBmH,GAASnH,GAAS,aAClB4L,GAAa,SAAUp8B,GAAMygB,GAAO9J,GAAM,CAC5C,IAAI0lB,GAAU,GAAIjwB,GAClBiwB,IAAW,IAAMr8B,GACjB,IAAKoM,MAAOqU,GACNA,GAAM,eAAerU,EAAG,GAAKqU,GAAMrU,EAAG,IAAM,MAAQ,OAAOqU,GAAMrU,EAAG,EAAM,MAC5EiwB,IAAW,IAAMjwB,GAAM,KAAOurB,GAAOlX,GAAMrU,EAAG,CAAC,EAAI,KAGvD,OAAI,OAAOuK,GAAS,IACX0lB,GAAU,IAAM1lB,GAAO,KAAO3W,GAAO,IAEvCq8B,GAAU,KACnB,EACI3lB,GAAiB,SAAUC,GAAM,CACnC,IAAI5J,GACAlG,GAAYpB,EAAI,cAAc,KAAK,EACnCoR,GAAOpR,EAAI,uBAAuB,EAKtC,IAJAoR,GAAK,YAAYhQ,EAAS,EACtB8P,KACF9P,GAAU,UAAY8P,IAEjB5J,GAAOlG,GAAU,YACtBgQ,GAAK,YAAY9J,EAAI,EAEvB,OAAA8J,GAAK,YAAYhQ,EAAS,EACnBgQ,EACT,EACI+J,GAAS,SAAU7T,GAAMuvB,GAAc,CACzC,IAAIC,GAAQtC,GAAGltB,EAAI,EACnB,OAAIuvB,GACFC,GAAM,KAAK,UAAY,CAErB,QADI/Y,GACGA,GAAQ,KAAK,YACdA,GAAM,WAAa,GAAKA,GAAM,KAAK,SAAW,EAChD,KAAK,YAAYA,EAAK,EAEtB,KAAK,WAAW,aAAaA,GAAO,IAAI,CAG9C,CAAC,EAAE,OAAO,EAEV+Y,GAAM,OAAO,EAERA,GAAM,OAAS,EAAIA,GAAM,QAAQ,EAAIA,GAAM,CAAC,CACrD,EACIC,GAAmB,SAAUj6B,GAAG,CAClC,OAAO0kB,GAAI1kB,GAAG,SAAUA,GAAG,CACzB,IAAI3E,GACA6iB,GAAQle,GAAE,WACd,IAAK3E,GAAI6iB,GAAM,OAAS,EAAG7iB,IAAK,EAAGA,KACjC2E,GAAE,oBAAoBke,GAAM,KAAK7iB,EAAC,CAAC,CAEvC,CAAC,CACH,EACI6+B,GAAa,SAAUC,GAAS,CAClC,OAAOxb,EAAO,MAAMwb,EAAO,CAC7B,EACIC,GAAiB,SAAU3B,GAAWh7B,GAAM,CAC9C,OAAOkhB,EAAO,UAAU8Z,GAAWh7B,EAAI,CACzC,EACI48B,GAAW,SAAUF,GAAS,CAChC,IAAIp9B,GAAMu9B,GACV,GAAI7gC,KAASu9B,GAAS,KAAO9zB,IAAQ5L,EAAW,SAAU,CACxD,GAAI4/B,EAAYiD,EAAO,EACrB,OAEFjD,EAAYiD,EAAO,EAAI,EACzB,CACAG,GAAWp3B,EAAI,eAAe,kBAAkB,EAC3Co3B,KACHA,GAAWp3B,EAAI,cAAc,OAAO,EACpCo3B,GAAS,GAAK,mBACdA,GAAS,KAAO,WAChBv9B,GAAOmG,EAAI,qBAAqB,MAAM,EAAE,CAAC,EACrCnG,GAAK,WACPA,GAAK,aAAau9B,GAAUv9B,GAAK,UAAU,EAE3CA,GAAK,YAAYu9B,EAAQ,GAGzBA,GAAS,WACXA,GAAS,WAAW,SAAWH,GAE/BG,GAAS,YAAYp3B,EAAI,eAAei3B,EAAO,CAAC,CAEpD,EACII,GAAU,SAAU18B,GAAK,CAC3B,IAAId,GACJ,GAAItD,KAASu9B,GAAS,KAAO9zB,IAAQ5L,EAAW,SAAU,CACxD0/B,GAAS,IAAI,QAAQn5B,EAAG,EACxB,MACF,CACKA,KACHA,GAAM,IAERd,GAAOmG,EAAI,qBAAqB,MAAM,EAAE,CAAC,EACzC+yB,GAAOp4B,GAAI,MAAM,GAAG,EAAG,SAAUA,GAAK,CACpC,IAAIwpB,GACJxpB,GAAM6V,GAAM,gBAAgB7V,EAAG,EAC3B,CAAAs5B,EAAMt5B,EAAG,IAGbs5B,EAAMt5B,EAAG,EAAI,GACbwpB,GAAO5U,GAAO,OAAQ,CACpB,IAAK,aACL,KAAM5U,EACR,CAAC,EACDd,GAAK,YAAYsqB,EAAI,EACvB,CAAC,CACH,EACImT,GAAc,SAAU1kB,GAAK2kB,GAAKtkB,GAAO,CAC3CuhB,GAAG5hB,EAAG,EAAE,YAAY2kB,GAAKtkB,EAAK,EAAE,KAAK,UAAY,CAC3C,KAAK,YAAc,IACrBxB,GAAS,IAAI,EAAE,KAAK,QAAS,IAAI,CAErC,CAAC,CACH,EACI+lB,GAAW,SAAU5kB,GAAK2kB,GAAK,CACjC/C,GAAG5hB,EAAG,EAAE,SAAS2kB,EAAG,CACtB,EACIE,GAAc,SAAU7kB,GAAK2kB,GAAK,CACpCD,GAAY1kB,GAAK2kB,GAAK,EAAK,CAC7B,EACI7lB,GAAW,SAAUkB,GAAK2kB,GAAK,CACjC,OAAO/C,GAAG5hB,EAAG,EAAE,SAAS2kB,EAAG,CAC7B,EACIG,GAAO,SAAU9kB,GAAK,CACxB4hB,GAAG5hB,EAAG,EAAE,KAAK,CACf,EACI+kB,GAAO,SAAU/kB,GAAK,CACxB4hB,GAAG5hB,EAAG,EAAE,KAAK,CACf,EACIglB,GAAW,SAAUhlB,GAAK,CAC5B,OAAO4hB,GAAG5hB,EAAG,EAAE,IAAI,SAAS,IAAM,MACpC,EACIilB,GAAW,SAAUvJ,GAAQ,CAC/B,OAASA,IAAS,QAAmB4F,GACvC,EACI4D,GAAe,SAAUllB,GAAK,CAChC,IAAItL,GAAO,OAAOsL,IAAQ,SAAWqI,GAAIrI,EAAG,EAAIA,GAChD,OAAOiW,GAAS,UAAUvhB,EAAI,EAAIA,GAAK,UAAYmK,GAAS,aAAa,EAAE,OAAOA,GAASnK,EAAI,EAAE,MAAM,CAAC,EAAE,KAAK,CACjH,EACIywB,GAAe,SAAUnlB,GAAK1B,GAAM,CACtCsjB,GAAG5hB,EAAG,EAAE,KAAK,UAAY,CACvB,GAAI,CACF,GAAI,cAAe,KAAM,CACvB,KAAK,UAAY1B,GACjB,MACF,CACF,MAAa,CACb,CACAiK,GAAO1J,GAAS,IAAI,EAAE,KAAKP,EAAI,EAAG,EAAI,CACxC,CAAC,CACH,EACI8mB,GAAc,SAAU1wB,GAAM2wB,GAAW,CAC3C,IAAIC,GAAgBjd,GAAIgd,EAAS,EACjC,OAAOzW,GAAIla,GAAM,SAAUA,GAAM,CAC/B,IAAIE,GAAQoW,GACZ,OAAApW,GAAS0wB,GAAc,WACvBta,GAAcsa,GAAc,YACxBta,GACFpW,GAAO,aAAaF,GAAMsW,EAAW,EAErCpW,GAAO,YAAYF,EAAI,EAElBA,EACT,CAAC,CACH,EACI6wB,GAAU,SAAUzB,GAAQ0B,GAAQvB,GAAc,CACpD,OAAOrV,GAAI4W,GAAQ,SAAUA,GAAQ,CACnC,OAAI5nB,GAAM,GAAG4nB,GAAQ,OAAO,IAC1B1B,GAASA,GAAO,UAAU,EAAI,GAE5BG,IACF9D,GAAOC,GAAOoF,GAAO,UAAU,EAAG,SAAU9wB,GAAM,CAChDovB,GAAO,YAAYpvB,EAAI,CACzB,CAAC,EAEI8wB,GAAO,WAAW,aAAa1B,GAAQ0B,EAAM,CACtD,CAAC,CACH,EACIC,GAAS,SAAUzlB,GAAKrY,GAAM,CAChC,IAAIm8B,GACJ,OAAI9jB,GAAI,WAAarY,GAAK,YAAY,IACpCm8B,GAASnnB,GAAOhV,EAAI,EACpBw4B,GAAO4B,GAAW/hB,EAAG,EAAG,SAAU0lB,GAAU,CAC1C1D,GAAU8B,GAAQ4B,GAAS,SAAU7D,GAAU7hB,GAAK0lB,GAAS,QAAQ,CAAC,CACxE,CAAC,EACDH,GAAQzB,GAAQ9jB,GAAK,EAAI,GAEpB8jB,IAAU9jB,EACnB,EACI2lB,GAAqB,SAAUliC,GAAGM,GAAG,CAEvC,QADI6hC,GAAKniC,GAAGoiC,GACLD,IAAI,CAET,IADAC,GAAK9hC,GACE8hC,IAAMD,KAAOC,IAClBA,GAAKA,GAAG,WAEV,GAAID,KAAOC,GACT,MAEFD,GAAKA,GAAG,UACV,CACA,MAAI,CAACA,IAAMniC,GAAE,cACJA,GAAE,cAAc,gBAElBmiC,EACT,EACI9H,GAAQ,SAAUgI,GAAQ,CAC5B,OAAOjd,EAAO,MAAMjL,GAAM,KAAKkoB,EAAM,CAAC,CACxC,EACIC,GAAU,SAAUrxB,GAAMgB,GAAU,CACtC,IAAInQ,GAAGiM,GAAYpN,GAAMkN,GAAY00B,GAAQr+B,GAAMs+B,GAAU,EAE7D,GADAvxB,GAAOA,GAAK,WACRA,GAAM,CACRsxB,GAAS,IAAIrT,GAAWje,GAAMA,GAAK,UAAU,EAC7CgB,GAAWA,KAAamjB,EAASA,EAAO,oBAAoB,EAAI,MAChEvnB,GAAaunB,EAASA,EAAO,sBAAsB,EAAI,CAAC,EACxD,EAAG,CAED,GADAz0B,GAAOsQ,GAAK,SACRuhB,GAAS,UAAUvhB,EAAI,EAAG,CAC5B,IAAIwxB,GAAWxxB,GAAK,aAAa,gBAAgB,EACjD,GAAIwxB,GAAU,CACZxxB,GAAOsxB,GAAO,KAAKE,KAAa,KAAK,EACrC,QACF,CAEA,GADAv+B,GAAO+M,GAAK,SAAS,YAAY,EAC7BgB,IAAYA,GAAS/N,EAAI,EAAG,CAC9B,GAAIA,KAAS,KAAM,CACjBs+B,KACAvxB,GAAOsxB,GAAO,KAAK,EACnB,QACF,CACA,MAAO,EACT,CAGA,IAFAx0B,GAAauwB,GAAWrtB,EAAI,EAC5BnP,GAAIiM,GAAW,OACRjM,MAEL,GADAoC,GAAO6J,GAAWjM,EAAC,EAAE,SACjBoC,KAAS,QAAUA,KAAS,oBAC9B,MAAO,EAGb,CAOA,GANIvD,KAAS,GAGTA,KAAS,GAAK,CAACm8B,EAAmB,KAAK7rB,GAAK,SAAS,GAGrDtQ,KAAS,GAAKsQ,GAAK,YAAcpD,GAAWoD,GAAK,WAAW,QAAQ,GAAK6rB,EAAmB,KAAK7rB,GAAK,SAAS,EACjH,MAAO,GAETA,GAAOsxB,GAAO,KAAK,CACrB,OAAStxB,GACX,CACA,OAAOuxB,IAAW,CACpB,EACIE,GAAY,UAAY,CAC1B,OAAO/4B,EAAI,YAAY,CACzB,EACIurB,GAAQ,SAAUkL,GAAWuC,GAAUC,GAAgB,CACzD,IAAIlhC,GAAIghC,GAAU,EAAGG,GAAKC,GAAKC,GAC/B,GAAI3C,IAAauC,GACf,OAAAjhC,GAAE,SAAS0+B,GAAU,WAAY9C,EAAc8C,EAAS,CAAC,EACzD1+B,GAAE,OAAOihC,GAAS,WAAYrF,EAAcqF,EAAQ,CAAC,EACrDE,GAAMnhC,GAAE,gBAAgB,EACxBA,GAAIghC,GAAU,EACdhhC,GAAE,SAASihC,GAAS,WAAYrF,EAAcqF,EAAQ,EAAI,CAAC,EAC3DjhC,GAAE,OAAO0+B,GAAU,WAAY9C,EAAc8C,EAAS,EAAI,CAAC,EAC3D0C,GAAMphC,GAAE,gBAAgB,EACxBqhC,GAAK3C,GAAU,WACf2C,GAAG,aAAahQ,GAAS,SAAS7yB,GAAM2iC,EAAG,EAAGzC,EAAS,EACnDwC,GACFG,GAAG,aAAaH,GAAgBxC,EAAS,EAEzC2C,GAAG,aAAaJ,GAAUvC,EAAS,EAErC2C,GAAG,aAAahQ,GAAS,SAAS7yB,GAAM4iC,EAAG,EAAG1C,EAAS,EACvDtb,GAAOsb,EAAS,EACTwC,IAAkBD,EAE7B,EACIxiC,GAAO,SAAU8I,GAAQ/E,GAAMoE,GAAMxE,GAAO,CAC9C,GAAIqW,GAAM,QAAQlR,EAAM,EAAG,CAEzB,QADInH,GAAImH,GAAO,OACRnH,MACLmH,GAAOnH,EAAC,EAAI3B,GAAK8I,GAAOnH,EAAC,EAAGoC,GAAMoE,GAAMxE,EAAK,EAE/C,OAAOmF,EACT,CACA,OAAIqkB,EAAS,UAAYrkB,KAAWU,GAAOV,KAAWa,IACpDm0B,EAAY,KAAK,CACfh1B,GACA/E,GACAoE,GACAxE,EACF,CAAC,EAEIuG,EAAO,KAAKpB,GAAQ/E,GAAMoE,GAAMxE,IAAS5D,EAAI,CACtD,EACIuL,GAAS,SAAUxC,GAAQ/E,GAAMoE,GAAM,CACzC,IAAIxG,GACJ,GAAIqY,GAAM,QAAQlR,EAAM,EAAG,CAEzB,IADAnH,GAAImH,GAAO,OACJnH,MACLmH,GAAOnH,EAAC,EAAI2J,GAAOxC,GAAOnH,EAAC,EAAGoC,GAAMoE,EAAI,EAE1C,OAAOW,EACT,CACA,GAAIg1B,IAAgBh1B,KAAWU,GAAOV,KAAWa,GAE/C,IADAhI,GAAIm8B,EAAY,OACTn8B,MAAK,CACV,IAAI8V,GAAOqmB,EAAYn8B,EAAC,EACpBmH,KAAW2O,GAAK,CAAC,IAAM,CAAC1T,IAAQA,KAAS0T,GAAK,CAAC,KAAO,CAACtP,IAAQA,KAASsP,GAAK,CAAC,IAChFvN,EAAO,OAAOuN,GAAK,CAAC,EAAGA,GAAK,CAAC,EAAGA,GAAK,CAAC,CAAC,CAE3C,CAEF,OAAOvN,EAAO,OAAOpB,GAAQ/E,GAAMoE,EAAI,CACzC,EACI06B,GAAO,SAAU/5B,GAAQ/E,GAAM0G,GAAK,CACtC,OAAOP,EAAO,KAAKpB,GAAQ/E,GAAM0G,EAAG,CACtC,EACIq4B,GAAqB,SAAUhyB,GAAM,CACvC,GAAIA,IAAQuhB,GAAS,UAAUvhB,EAAI,EAAG,CACpC,IAAIpL,GAAkBoL,GAAK,aAAa,0BAA0B,EAClE,OAAIpL,IAAmBA,KAAoB,UAClCA,GAEFoL,GAAK,kBAAoB,UAAYA,GAAK,gBAAkB,IACrE,KACE,QAAO,IAEX,EACIiyB,GAA2B,SAAUjyB,GAAM,CAG7C,QAFIkI,GAAOylB,GAAQ,EACfhiB,GAAQ,KACL3L,IAAQA,KAASkI,KACtByD,GAAQqmB,GAAmBhyB,EAAI,EAC3B2L,KAAU,MAFc3L,GAAOA,GAAK,WAExC,CAIF,OAAO2L,EACT,EACIumB,GAAU,UAAY,CACxB,GAAIlF,EAEF,QADIn8B,GAAIm8B,EAAY,OACbn8B,MAAK,CACV,IAAI8V,GAAOqmB,EAAYn8B,EAAC,EACxBuI,EAAO,OAAOuN,GAAK,CAAC,EAAGA,GAAK,CAAC,EAAGA,GAAK,CAAC,CAAC,CACzC,CAEEtI,GAAO,aACTA,GAAO,YAAY,CAEvB,EACI8zB,GAAY,SAAUnyB,GAAME,GAAQ,CACtC,KAAOF,IAAM,CACX,GAAIE,KAAWF,GACb,MAAO,GAETA,GAAOA,GAAK,UACd,CACA,MAAO,EACT,EACIoyB,GAAU,SAAU3hC,GAAG,CACzB,MAAO,mBAAqBA,GAAE,eAAe,SAAW,kBAAoBA,GAAE,YAAc,mBAAqBA,GAAE,aAAa,SAAW,gBAAkBA,GAAE,SACjK,EACIxB,GAAO,CACT,IAAKyJ,EACL,SAAU2jB,EACV,IAAKxjB,EACL,MAAO8zB,EACP,QAASE,EACT,SAAUC,EACV,iBAAkBC,EAClB,YAAaC,EACb,OAAQ7Y,EACR,OAAQgQ,EACR,OAAQ/qB,EACR,QAASgmB,GACT,EAAG6N,GACH,GAAIC,GACJ,KAAM,KACN,MAAOM,GACP,QAASG,GACT,YAAaC,GACb,QAASU,GACT,QAASH,GACT,UAAWU,GACX,WAAYH,GACZ,IAAK/a,GACL,QAASob,GACT,QAASC,GACT,OAAQj0B,GACR,GAAI4M,GACJ,IAAK+c,GACL,OAAQzc,GACR,WAAYonB,GACZ,eAAgB1lB,GAChB,OAAQkK,GACR,SAAUka,GACV,SAAUG,GACV,UAAWF,GACX,iBAAkByB,GAClB,UAAWnC,GACX,WAAY2B,GACZ,UAAW9B,GACX,OAAQ7V,GACR,WAAYoY,GACZ,eAAgBE,GAChB,SAAUC,GACV,QAASE,GACT,SAAUG,GACV,YAAaC,GACb,SAAU/lB,GACV,YAAa4lB,GACb,KAAMI,GACN,KAAMC,GACN,SAAUC,GACV,SAAUC,GACV,QAASrB,GACT,aAAcsB,GACd,aAAcC,GACd,OAAQlN,GACR,OAAQqH,GACR,YAAa8F,GACb,QAASG,GACT,OAAQE,GACR,mBAAoBE,GACpB,MAAO7H,GACP,IAAKlP,GACL,WAAYmT,GACZ,QAASgE,GACT,UAAWI,GACX,UAAWpF,EACX,MAAOpI,GACP,KAAM/0B,GACN,OAAQsL,GACR,KAAMu3B,GACN,mBAAoBC,GACpB,yBAA0BC,GAC1B,QAASC,GACT,UAAWC,GACX,QAASC,EACX,EACA,OAAAvnB,EAAYihB,EAAe3X,EAAQkI,EAAU,UAAY,CACvD,OAAOptB,EACT,CAAC,EACMA,EACT,EACC,SAAUu9B,EAAU,CACnBA,EAAS,IAAMA,EAAS1/B,EAAW,QAAQ,EAC3C0/B,EAAS,UAAYH,CACvB,GAAEG,KAAaA,GAAW,CAAC,EAAE,EAC7B,IAAI6F,GAAa7F,GAEb8F,GAAMD,GAAW,IACjBE,GAASrpB,GAAM,KAAMspB,GAAStpB,GAAM,KACpCupB,GAAe,SAAU1kC,EAAG,CAC9B,OAAO,OAAOA,GAAM,UACtB,EACI2kC,GAAe,UAAY,CAC7B,IAAIC,EAAS,EACTC,EAAU,EACVC,EAAS,EACTC,EAAS,EACTC,EAAS,CAAC,EACVva,EAAQ,CAAC,EACTwa,EAAwB,CAAC,EACzBC,EAAuB,CAAC,EACxBC,EAAU,EACVC,EAAa,SAAU9/B,EAAK0qB,EAASC,EAAS,CAChD,IAAI3K,EAAMif,GACNhnB,EAAK5c,GACLqH,GAAO,UAAY,CACrBsd,EAAI,OAAO3kB,EAAE,EACT4c,IACFA,EAAI,mBAAqBA,EAAI,OAASA,EAAM,MAE9CyS,EAAQ,CACV,EACIjC,GAAQ,UAAY,CAClB2W,GAAazU,CAAO,EACtBA,EAAQ,EAEJ,OAAO,QAAY,KAAe,QAAQ,KAC5C,QAAQ,IAAI,0BAA4B3qB,CAAG,CAGjD,EACA3E,GAAK2kB,EAAI,SAAS,EAClB/H,EAAMxe,EAAW,SAAS,cAAc,QAAQ,EAChDwe,EAAI,GAAK5c,GACT4c,EAAI,KAAO,kBACXA,EAAI,IAAMpC,GAAM,gBAAgB7V,CAAG,EACnCiY,EAAI,OAASvV,GACbuV,EAAI,QAAUwQ,IACbhvB,EAAW,SAAS,qBAAqB,MAAM,EAAE,CAAC,GAAKA,EAAW,SAAS,MAAM,YAAYwe,CAAG,CACnG,EACA,KAAK,OAAS,SAAUjY,EAAK,CAC3B,OAAO0/B,EAAO1/B,CAAG,IAAMw/B,CACzB,EACA,KAAK,SAAW,SAAUx/B,EAAK,CAC7B0/B,EAAO1/B,CAAG,EAAIw/B,CAChB,EACA,KAAK,IAAM,KAAK,KAAO,SAAUx/B,EAAK0qB,EAASlrB,EAAOmrB,EAAS,CAC7D,IAAIrS,EAAQonB,EAAO1/B,CAAG,EAClBsY,IAAU,SACZ6M,EAAM,KAAKnlB,CAAG,EACd0/B,EAAO1/B,CAAG,EAAIs/B,GAEZ5U,IACGiV,EAAsB3/B,CAAG,IAC5B2/B,EAAsB3/B,CAAG,EAAI,CAAC,GAEhC2/B,EAAsB3/B,CAAG,EAAE,KAAK,CAC9B,QAAS0qB,EACT,QAASC,EACT,MAAOnrB,GAAS,IAClB,CAAC,EAEL,EACA,KAAK,OAAS,SAAUQ,EAAK,CAC3B,OAAO0/B,EAAO1/B,CAAG,EACjB,OAAO2/B,EAAsB3/B,CAAG,CAClC,EACA,KAAK,UAAY,SAAU0qB,EAASlrB,EAAOmrB,EAAS,CAClD,KAAK,YAAYxF,EAAOuF,EAASlrB,EAAOmrB,CAAO,CACjD,EACA,KAAK,YAAc,SAAUoV,EAASrV,EAASlrB,EAAOmrB,EAAS,CAC7D,IAAIqV,EACAC,GAAW,CAAC,EACZC,GAAgB,SAAUtgC,GAAMI,GAAK,CACvCk/B,GAAOS,EAAsB3/B,EAAG,EAAG,SAAUoD,GAAU,CACjDg8B,GAAah8B,GAASxD,EAAI,CAAC,GAC7BwD,GAASxD,EAAI,EAAE,KAAKwD,GAAS,KAAK,CAEtC,CAAC,EACDu8B,EAAsB3/B,EAAG,EAAI,MAC/B,EACA4/B,EAAqB,KAAK,CACxB,QAASlV,EACT,QAASC,EACT,MAAOnrB,GAAS,IAClB,CAAC,EACDwgC,EAAc,UAAY,CACxB,IAAIG,GAAiBhB,GAAOY,CAAO,EA4BnC,GA3BAA,EAAQ,OAAS,EACjBb,GAAOiB,GAAgB,SAAUngC,GAAK,CACpC,GAAI0/B,EAAO1/B,EAAG,IAAMw/B,EAAQ,CAC1BU,GAAc,UAAWlgC,EAAG,EAC5B,MACF,CACA,GAAI0/B,EAAO1/B,EAAG,IAAMy/B,EAAQ,CAC1BS,GAAc,UAAWlgC,EAAG,EAC5B,MACF,CACI0/B,EAAO1/B,EAAG,IAAMu/B,IAClBG,EAAO1/B,EAAG,EAAIu/B,EACdM,IACAC,EAAW9/B,GAAK,UAAY,CAC1B0/B,EAAO1/B,EAAG,EAAIw/B,EACdK,IACAK,GAAc,UAAWlgC,EAAG,EAC5BggC,EAAY,CACd,EAAG,UAAY,CACbN,EAAO1/B,EAAG,EAAIy/B,EACdI,IACAI,GAAS,KAAKjgC,EAAG,EACjBkgC,GAAc,UAAWlgC,EAAG,EAC5BggC,EAAY,CACd,CAAC,EAEL,CAAC,EACG,CAACH,EAAS,CACZ,IAAIO,GAAkBR,EAAqB,MAAM,CAAC,EAClDA,EAAqB,OAAS,EAC9BV,GAAOkB,GAAiB,SAAUh9B,GAAU,CACtC68B,GAAS,SAAW,EAClBb,GAAah8B,GAAS,OAAO,GAC/BA,GAAS,QAAQ,KAAKA,GAAS,KAAK,EAGlCg8B,GAAah8B,GAAS,OAAO,GAC/BA,GAAS,QAAQ,KAAKA,GAAS,MAAO68B,EAAQ,CAGpD,CAAC,CACH,CACF,EACAD,EAAY,CACd,CACF,EACAX,GAAa,aAAe,IAAIA,GAEhC,IAAIgB,GAASxqB,GAAM,KACnB,SAASyqB,IAAe,CACtB,IAAIlH,EAAQ,KACR5kB,EAAQ,CAAC,EACTiW,EAAO,CAAC,EACRoB,EAAS,CAAC,EACV0U,EAAa,CAAC,EACdjgB,EAAM,SAAU1gB,GAAM,CACxB,GAAIisB,EAAOjsB,EAAI,EACb,OAAOisB,EAAOjsB,EAAI,EAAE,QAGxB,EACI4gC,EAAe,SAAU5gC,GAAM,CACjC,IAAIwO,GACJ,OAAIyd,EAAOjsB,EAAI,IACbwO,GAASyd,EAAOjsB,EAAI,EAAE,cAEjBwO,IAAU,CAAC,CACpB,EACIqyB,EAAkB,SAAU7gC,GAAM8gC,GAAW,CAC/C,IAAIC,GAAWL,GAAa,SAC5B,GAAIK,IAAYL,GAAa,eAAiB,GAAO,CACnD,GAAII,IAEF,GADAA,GAAY,IAAMA,GAAY,IAC1BA,GAAU,QAAQ,IAAMC,GAAS,OAAO,EAAG,CAAC,EAAI,GAAG,IAAM,GAC3DA,GAAWA,GAAS,OAAO,EAAG,CAAC,UACtBD,GAAU,QAAQ,IAAMC,GAAW,GAAG,IAAM,GACrD,OAGJtB,GAAa,aAAa,IAAI5U,EAAK7qB,EAAI,EAAI,UAAY+gC,GAAW,KAAK,CACzE,CACF,EACItP,EAAM,SAAUh2B,GAAIulC,GAAOJ,GAAc,CAC3ChsB,EAAM,KAAKosB,EAAK,EAChB/U,EAAOxwB,EAAE,EAAI,CACX,SAAUulC,GACV,aAAcJ,EAChB,EACA,IAAIpyB,GAASvQ,GAAU0iC,EAAY,SAAUM,GAAU,CACrD,OAAOA,GAAS,OAASxlC,EAC3B,CAAC,EACD,OAAAklC,EAAanyB,GAAO,KACpBiyB,GAAOjyB,GAAO,KAAM,SAAUyyB,GAAU,CACtCA,GAAS,SAAS,CACpB,CAAC,EACMD,EACT,EACIpgB,EAAS,SAAU5gB,GAAM,CAC3B,OAAO6qB,EAAK7qB,EAAI,EAChB,OAAOisB,EAAOjsB,EAAI,CACpB,EACIkhC,EAAY,SAAUC,GAASC,GAAK,CACtC,OAAI,OAAOA,IAAQ,SACVA,GAEF,OAAOD,IAAY,SAAW,CACnC,OAAQ,GACR,SAAUC,GACV,OAAQ,EACV,EAAI,CACF,OAAQD,GAAQ,OAChB,SAAUC,GACV,OAAQD,GAAQ,MAClB,CACF,EACIE,EAAgB,SAAUC,GAAYnB,GAAS,CACjD,IAAIoB,GAAY/H,EAAM,KAAK8H,EAAU,EACrCb,GAAON,GAAS,SAAUqB,GAAQ,CAChC/B,GAAa,aAAa,IAAI8B,GAAY,IAAMC,EAAM,CACxD,CAAC,CACH,EACIC,EAAmB,SAAUzhC,GAAM0hC,GAAU5W,GAASlrB,GAAO,CAC/D,IAAI+hC,GAAOf,EAAa5gC,EAAI,EAC5BygC,GAAOkB,GAAM,SAAUP,GAAK,CAC1B,IAAIQ,GAASV,EAAUQ,GAAUN,EAAG,EACpC3X,EAAKmY,GAAO,SAAUA,GAAQ,OAAW,MAAS,CACpD,CAAC,EACG9W,KACElrB,GACFkrB,GAAQ,KAAKlrB,EAAK,EAElBkrB,GAAQ,KAAK2U,EAAY,EAG/B,EACIhW,EAAO,SAAUzpB,GAAM0hC,GAAU5W,GAASlrB,GAAOmrB,GAAS,CAC5D,GAAI,CAAAF,EAAK7qB,EAAI,EAGb,KAAI6hC,GAAY,OAAOH,IAAa,SAAWA,GAAWA,GAAS,OAASA,GAAS,SAAWA,GAAS,OACrGG,GAAU,QAAQ,GAAG,IAAM,GAAKA,GAAU,QAAQ,KAAK,IAAM,KAC/DA,GAAYnB,GAAa,QAAU,IAAMmB,IAE3ChX,EAAK7qB,EAAI,EAAI6hC,GAAU,UAAU,EAAGA,GAAU,YAAY,GAAG,CAAC,EAC1D5V,EAAOjsB,EAAI,EACbyhC,EAAiBzhC,GAAM0hC,GAAU5W,GAASlrB,EAAK,EAE/C6/B,GAAa,aAAa,IAAIoC,GAAW,UAAY,CACnD,OAAOJ,EAAiBzhC,GAAM0hC,GAAU5W,GAASlrB,EAAK,CACxD,EAAGA,GAAOmrB,EAAO,EAErB,EACI+W,EAAU,SAAU9hC,GAAMwD,GAAU,CAClCyoB,EAAO,eAAejsB,EAAI,EAC5BwD,GAAS,EAETm9B,EAAW,KAAK,CACd,KAAM3gC,GACN,SAAUwD,EACZ,CAAC,CAEL,EACA,MAAO,CACL,MAAOoR,EACP,KAAMiW,EACN,OAAQoB,EACR,WAAY0U,EACZ,IAAKjgB,EACL,aAAckgB,EACd,gBAAiBC,EACjB,IAAKpP,EACL,OAAQ7Q,EACR,UAAWsgB,EACX,cAAeG,EACf,KAAM5X,EACN,QAASqY,CACX,CACF,EACC,SAAUpB,EAAc,CACvBA,EAAa,cAAgBA,EAAa,EAC1CA,EAAa,aAAeA,EAAa,CAC3C,GAAEA,KAAiBA,GAAe,CAAC,EAAE,EAErC,IAAIqB,GAAS,SAAUzc,EAAQ7hB,EAAS,CACtC,IAAIu+B,EAAW/0B,GAAOqY,CAAM,EAC5B0c,EAAS,KAAK,SAAU9lC,EAAG,CACzBA,EAAE,IAAI,EAAE,aAAauH,EAAQ,IAAI,EAAG6hB,EAAO,IAAI,CAAC,CAClD,CAAC,CACH,EACI2c,GAAQ,SAAU3c,EAAQ7hB,EAAS,CACrC,IAAI2V,EAAUiK,GAAYiC,CAAM,EAChClM,EAAQ,KAAK,UAAY,CACvB,IAAI4oB,EAAW/0B,GAAOqY,CAAM,EAC5B0c,EAAS,KAAK,SAAU9lC,EAAG,CACzBgmC,GAAOhmC,EAAGuH,CAAO,CACnB,CAAC,CACH,EAAG,SAAUvH,EAAG,CACd6lC,GAAO7lC,EAAGuH,CAAO,CACnB,CAAC,CACH,EACI0+B,GAAU,SAAUl1B,EAAQxJ,EAAS,CACvC,IAAI2+B,EAAe1e,GAAWzW,CAAM,EACpCm1B,EAAa,KAAK,UAAY,CAC5BF,GAAOj1B,EAAQxJ,CAAO,CACxB,EAAG,SAAUvH,EAAG,CACd+Q,EAAO,IAAI,EAAE,aAAaxJ,EAAQ,IAAI,EAAGvH,EAAE,IAAI,CAAC,CAClD,CAAC,CACH,EACIgmC,GAAS,SAAUj1B,EAAQxJ,EAAS,CACtCwJ,EAAO,IAAI,EAAE,YAAYxJ,EAAQ,IAAI,CAAC,CACxC,EACI4+B,GAAS,SAAU5+B,EAAS4T,EAAS,CACvC0qB,GAAOt+B,EAAS4T,CAAO,EACvB6qB,GAAO7qB,EAAS5T,CAAO,CACzB,EAEI6+B,GAAW,SAAUhd,EAAQvX,EAAU,CACzChQ,GAAKgQ,EAAU,SAAUxT,EAAG,CAC1BwnC,GAAOzc,EAAQ/qB,CAAC,CAClB,CAAC,CACH,EACIgoC,GAAW,SAAUt1B,EAAQc,EAAU,CACzChQ,GAAKgQ,EAAU,SAAUxT,EAAG,CAC1B2nC,GAAOj1B,EAAQ1S,CAAC,CAClB,CAAC,CACH,EAEIioC,GAAQ,SAAU/+B,EAAS,CAC7BA,EAAQ,IAAI,EAAE,YAAc,GAC5B1F,GAAKuJ,GAAS7D,CAAO,EAAG,SAAUg/B,EAAO,CACvCC,GAASD,CAAK,CAChB,CAAC,CACH,EACIC,GAAW,SAAUj/B,EAAS,CAChC,IAAI2c,EAAM3c,EAAQ,IAAI,EAClB2c,EAAI,aAAe,MACrBA,EAAI,WAAW,YAAYA,CAAG,CAElC,EACIuiB,GAAS,SAAUtrB,EAAS,CAC9B,IAAIurB,EAAat7B,GAAS+P,CAAO,EAC7BurB,EAAW,OAAS,GACtBN,GAASjrB,EAASurB,CAAU,EAE9BF,GAASrrB,CAAO,CAClB,EAEI3I,GAAQ,SAAUjU,EAAIooC,EAAM,CAC9B,IAAI1+B,EAAQ,KACR2+B,EAAS,UAAY,CACnB3+B,IAAU,OACZtK,EAAW,aAAasK,CAAK,EAC7BA,EAAQ,KAEZ,EACI4+B,EAAW,UAAY,CAEzB,QADI7oC,EAAO,CAAC,EACHC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCD,EAAKC,CAAE,EAAI,UAAUA,CAAE,EAErBgK,IAAU,OACZA,EAAQtK,EAAW,WAAW,UAAY,CACxCY,EAAG,MAAM,KAAMP,CAAI,EACnBiK,EAAQ,IACV,EAAG0+B,CAAI,EAEX,EACA,MAAO,CACL,OAAQC,EACR,SAAUC,CACZ,CACF,EACIC,GAAS,SAAUvoC,EAAIooC,EAAM,CAC/B,IAAI1+B,EAAQ,KACR2+B,EAAS,UAAY,CACnB3+B,IAAU,OACZtK,EAAW,aAAasK,CAAK,EAC7BA,EAAQ,KAEZ,EACI4+B,EAAW,UAAY,CAEzB,QADI7oC,EAAO,CAAC,EACHC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCD,EAAKC,CAAE,EAAI,UAAUA,CAAE,EAErBgK,IAAU,MACZtK,EAAW,aAAasK,CAAK,EAE/BA,EAAQtK,EAAW,WAAW,UAAY,CACxCY,EAAG,MAAM,KAAMP,CAAI,EACnBiK,EAAQ,IACV,EAAG0+B,CAAI,CACT,EACA,MAAO,CACL,OAAQC,EACR,SAAUC,CACZ,CACF,EAEIE,GAAO,SAAUC,EAAS,CAC5B,IAAI7oC,EAAQ6oC,EACRxiB,EAAM,UAAY,CACpB,OAAOrmB,CACT,EACIkmB,EAAM,SAAUrkB,EAAG,CACrB7B,EAAQ6B,CACV,EACIq+B,EAAQ,UAAY,CACtB,OAAO0I,GAAKviB,EAAI,CAAC,CACnB,EACA,MAAO,CACL,IAAKA,EACL,IAAKH,EACL,MAAOga,CACT,CACF,EAEI4I,GAAO,SAAU1/B,EAASqM,EAAM,CAClC,IAAIzV,EAAQqmB,GAAIjd,EAASqM,CAAI,EAC7B,OAAOzV,IAAU,QAAaA,IAAU,GAAK,CAAC,EAAIA,EAAM,MAAM,GAAG,CACnE,EACIo3B,GAAM,SAAUhuB,EAASqM,EAAMrU,EAAI,CACrC,IAAImQ,EAAMu3B,GAAK1/B,EAASqM,CAAI,EACxBoK,EAAKtO,EAAI,OAAO,CAACnQ,CAAE,CAAC,EACxB,OAAA8kB,GAAI9c,EAASqM,EAAMoK,EAAG,KAAK,GAAG,CAAC,EACxB,EACT,EACIkpB,GAAW,SAAU3/B,EAASqM,EAAMrU,EAAI,CAC1C,IAAIye,EAAK7b,GAAO8kC,GAAK1/B,EAASqM,CAAI,EAAG,SAAU5T,EAAG,CAChD,OAAOA,IAAMT,CACf,CAAC,EACD,OAAIye,EAAG,OAAS,EACdqG,GAAI9c,EAASqM,EAAMoK,EAAG,KAAK,GAAG,CAAC,EAE/B0G,GAAOnd,EAASqM,CAAI,EAEf,EACT,EAEIuzB,GAAW,SAAU5/B,EAAS,CAChC,OAAOA,EAAQ,IAAI,EAAE,YAAc,MACrC,EACI6/B,GAAQ,SAAU7/B,EAAS,CAC7B,OAAO0/B,GAAK1/B,EAAS,OAAO,CAC9B,EACI8/B,GAAQ,SAAU9/B,EAAS+/B,EAAO,CACpC,OAAO/R,GAAIhuB,EAAS,QAAS+/B,CAAK,CACpC,EACIC,GAAW,SAAUhgC,EAAS+/B,EAAO,CACvC,OAAOJ,GAAS3/B,EAAS,QAAS+/B,CAAK,CACzC,EAEIE,GAAQ,SAAUjgC,EAAS+/B,EAAO,CAChCH,GAAS5/B,CAAO,EAClBA,EAAQ,IAAI,EAAE,UAAU,IAAI+/B,CAAK,EAEjCD,GAAM9/B,EAAS+/B,CAAK,CAExB,EACIG,GAAa,SAAUlgC,EAAS,CAClC,IAAImgC,EAAYP,GAAS5/B,CAAO,EAAIA,EAAQ,IAAI,EAAE,UAAY6/B,GAAM7/B,CAAO,EACvEmgC,EAAU,SAAW,GACvBhjB,GAAOnd,EAAS,OAAO,CAE3B,EACIogC,GAAW,SAAUpgC,EAAS+/B,EAAO,CACvC,GAAIH,GAAS5/B,CAAO,EAAG,CACrB,IAAImgC,EAAYngC,EAAQ,IAAI,EAAE,UAC9BmgC,EAAU,OAAOJ,CAAK,CACxB,MACEC,GAAShgC,EAAS+/B,CAAK,EAEzBG,GAAWlgC,CAAO,CACpB,EACIqgC,GAAQ,SAAUrgC,EAAS+/B,EAAO,CACpC,OAAOH,GAAS5/B,CAAO,GAAKA,EAAQ,IAAI,EAAE,UAAU,SAAS+/B,CAAK,CACpE,EAEIO,GAAc,SAAUnkC,EAAOuU,EAAW,CAC5C,IAAI3F,EAAS,CAAC,EACd,OAAAzQ,GAAKuJ,GAAS1H,CAAK,EAAG,SAAUrF,EAAG,CAC7B4Z,EAAU5Z,CAAC,IACbiU,EAASA,EAAO,OAAO,CAACjU,CAAC,CAAC,GAE5BiU,EAASA,EAAO,OAAOu1B,GAAYxpC,EAAG4Z,CAAS,CAAC,CAClD,CAAC,EACM3F,CACT,EAEIw1B,GAAgB,SAAUpkC,EAAOyL,EAAU,CAC7C,OAAOzQ,GAAIyQ,EAAUzL,CAAK,CAC5B,EAEA,SAASqkC,GAAmBvvB,EAAIwvB,EAAUtkC,EAAO9D,EAAGmnB,EAAQ,CAC1D,OAAOvO,EAAG9U,EAAO9D,CAAC,EAAIQ,EAAO,KAAKsD,CAAK,EAAI7C,EAAWkmB,CAAM,GAAKA,EAAOrjB,CAAK,EAAItD,EAAO,KAAK,EAAI4nC,EAAStkC,EAAO9D,EAAGmnB,CAAM,CAC5H,CAEA,IAAIihB,GAAW,SAAUtkC,EAAOuU,EAAW8O,EAAQ,CAGjD,QAFIxf,EAAU7D,EAAM,IAAI,EACpBsjB,EAAOnmB,EAAWkmB,CAAM,EAAIA,EAAS7oB,EAAS,EAAK,EAChDqJ,EAAQ,YAAY,CACzBA,EAAUA,EAAQ,WAClB,IAAIyV,EAAKsF,GAAQ,QAAQ/a,CAAO,EAChC,GAAI0Q,EAAU+E,CAAE,EACd,OAAO5c,EAAO,KAAK4c,CAAE,EAChB,GAAIgK,EAAKhK,CAAE,EAChB,KAEJ,CACA,OAAO5c,EAAO,KAAK,CACrB,EACI6nC,GAAU,SAAUvkC,EAAOuU,EAAW8O,EAAQ,CAChD,IAAIvO,EAAK,SAAU9Y,EAAGwoC,EAAM,CAC1B,OAAOA,EAAKxoC,CAAC,CACf,EACA,OAAOqoC,GAAkBvvB,EAAIwvB,GAAUtkC,EAAOuU,EAAW8O,CAAM,CACjE,EAEIohB,GAAa,SAAUzkC,EAAOyL,EAAU4X,EAAQ,CAClD,OAAOihB,GAAStkC,EAAO,SAAU2C,EAAG,CAClC,OAAO6f,GAAK7f,EAAG8I,CAAQ,CACzB,EAAG4X,CAAM,CACX,EACIqhB,GAAa,SAAU1kC,EAAOyL,EAAU,CAC1C,OAAOiX,GAAIjX,EAAUzL,CAAK,CAC5B,EACI2kC,GAAY,SAAU3kC,EAAOyL,EAAU4X,EAAQ,CACjD,OAAOghB,GAAkB7hB,GAAMiiB,GAAYzkC,EAAOyL,EAAU4X,CAAM,CACpE,EAEIuhB,GAAapqC,EAAS,gBAAgB,EACtCqqC,GAAiBrqC,EAAS,qBAAqB,EAC/CsqC,GAAmBtqC,EAAS,yBAAyB,EAErDuqC,GAAW,SAAUrgC,EAAQsgC,EAAgB,CAC/C,IAAIC,EAAMvgC,EAAO,UAAU,OAAO,EAC9B2K,EAAQuP,GAAQ,QAAQqmB,EAAI,cAAc,EAC1C5vB,EAAOuJ,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EACvC+G,EAAWu5B,EAAe,KAAK,UAAY,CAC7C,MAAO,IAAMJ,GAAW,CAC1B,EAAG,SAAUM,EAAI,CACf,MAAO,IAAML,GAAe,EAAI,KAAOK,EAAK,IAC9C,CAAC,EACGC,EAAWvhB,GAAMvU,EAAO41B,EAAI,WAAW,EAAE,MAAM51B,CAAK,EACpDk1B,EAAUI,GAAUQ,EAAU15B,EAAU,SAAU3P,EAAG,CACvD,OAAOL,GAAGK,EAAGuZ,CAAI,CACnB,CAAC,EACG+vB,EAAU,SAAU1vB,EAAGwL,EAAU,CACnC,OAAIH,GAAMrL,EAAGwL,CAAQ,EACZxkB,EAAO,KAAKokB,GAAIpL,EAAGwL,CAAQ,CAAC,EAE5BxkB,EAAO,KAAK,CAEvB,EACA,OAAO6nC,EAAQ,KAAK,SAAU7uB,EAAG,CAC/B,OAAO0vB,EAAQ1vB,EAAG,GAAKovB,GAAiB,CAAC,EAAE,KAAK,SAAUO,EAAK,CAC7D,OAAOD,EAAQ1vB,EAAG,GAAKmvB,GAAe,CAAC,EAAE,IAAI,SAAUzkC,EAAM,CAC3D,IAAI+N,EAAWm3B,GAAY5gC,EAAQ2gC,CAAG,EACtC,MAAO,CACL,IAAKA,EACL,KAAMjlC,EACN,SAAU+N,CACZ,CACF,CAAC,CACH,CAAC,CACH,CAAC,CACH,EACIo3B,GAAe,SAAU17B,EAAM,CACjC,OAAO8V,EAAU9V,CAAI,GAAKq6B,GAAMr6B,EAAM+6B,GAAW,CAAC,CACpD,EACIU,GAAc,SAAU5gC,EAAQ2gC,EAAK,CACvC,IAAIv/B,EAAO8Y,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAC3C,OAAO0/B,GAAct+B,EAAM,IAAMg/B,GAAiB,EAAI,KAAOO,EAAM,IAAI,CACzE,EACIG,GAAU,SAAU9gC,EAAQtE,EAAM,CACpC,IAAI0F,EAAO8Y,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EACvC+gC,EAAUrB,GAAct+B,EAAM,IAAM++B,GAAe,EAAI,KAAOzkC,EAAO,IAAI,EACzEslC,EAAY,CAAC,EACjB,OAAAvnC,GAAKsnC,EAAS,SAAUl4B,EAAG,CACzB,IAAI83B,EAAMvkB,GAAIvT,EAAGu3B,GAAiB,CAAC,EAC/Ba,EAAeD,EAAU,eAAeL,CAAG,EAAIK,EAAUL,CAAG,EAAI,CAAC,EACrEK,EAAUL,CAAG,EAAIM,EAAa,OAAO,CAACp4B,CAAC,CAAC,CAC1C,CAAC,EACMm4B,CACT,EAEIE,GAAQ,SAAUlhC,EAAQmhC,EAAU,CACtC,IAAIC,EAAkBzC,GAAK,CAAC,CAAC,EACzB0C,EAAW,UAAY,CACzB,MAAO,CACL,UAAW,CAAC,EACZ,SAAU1C,GAAK3mC,EAAO,KAAK,CAAC,CAC9B,CACF,EACIspC,EAAgB,SAAU5lC,EAAMlF,EAAG,CACrC+qC,EAAgB7lC,EAAM,SAAUuF,EAAM,CACpC,OAAAzK,EAAEyK,CAAI,EACCA,CACT,CAAC,CACH,EACIsgC,EAAkB,SAAU7lC,EAAMlF,EAAG,CACvC,IAAIgrC,EAAcJ,EAAgB,IAAI,EAClCngC,EAAOugC,EAAY,eAAe9lC,CAAI,EAAI8lC,EAAY9lC,CAAI,EAAI2lC,EAAS,EACvEI,EAAajrC,EAAEyK,CAAI,EACvBugC,EAAY9lC,CAAI,EAAI+lC,EACpBL,EAAgB,IAAII,CAAW,CACjC,EACIE,EAAgB,SAAUhmC,EAAMilC,EAAKl3B,EAAU,CACjD63B,EAAc5lC,EAAM,SAAUuF,EAAM,CAClCxH,GAAKwH,EAAK,UAAW,SAAUzK,EAAG,CAChC,OAAOA,EAAE,GAAMkF,EAAM,CACnB,IAAKilC,EACL,MAAOnnC,GAAIiQ,EAAU,SAAUtE,GAAM,CACnC,OAAOA,GAAK,IAAI,CAClB,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC,CACH,EACIw8B,EAAmB,SAAUjmC,EAAM,CACrC4lC,EAAc5lC,EAAM,SAAUuF,EAAM,CAClCxH,GAAKwH,EAAK,UAAW,SAAUzK,EAAG,CAChC,OAAOA,EAAE,GAAOkF,CAAI,CACtB,CAAC,CACH,CAAC,CACH,EACIkmC,EAAelD,GAAO,UAAY,CACpC,IAAI8C,EAAcJ,EAAgB,IAAI,EAClCS,EAAchnC,GAAK+M,GAAK45B,CAAW,CAAC,EACxC/nC,GAAKooC,EAAa,SAAUnmC,EAAM,CAChC6lC,EAAgB7lC,EAAM,SAAUuF,EAAM,CACpC,IAAI6gC,EAAO7gC,EAAK,SAAS,IAAI,EAC7B,OAAAo/B,GAASrgC,EAAQhI,EAAO,KAAK0D,CAAI,CAAC,EAAE,KAAK,UAAY,CAC/ComC,EAAK,OAAO,IACdH,EAAiBjmC,CAAI,EACrBuF,EAAK,SAAS,IAAIjJ,EAAO,KAAK,CAAC,EAEnC,EAAG,SAAU+pC,GAAI,CACf,IAAIpB,GAAMoB,GAAG,IAAKrmC,GAAOqmC,GAAG,KAAMt4B,GAAWs4B,GAAG,SAC3CD,EAAK,GAAGnB,EAAG,IACde,EAAchmC,GAAMilC,GAAKl3B,EAAQ,EACjCxI,EAAK,SAAS,IAAIjJ,EAAO,KAAK2oC,EAAG,CAAC,EAEtC,CAAC,EACM,CACL,SAAU1/B,EAAK,SACf,UAAWA,EAAK,SAClB,CACF,CAAC,CACH,CAAC,CACH,EAAG,EAAE,EACLjB,EAAO,GAAG,SAAU,UAAY,CAC9B4hC,EAAa,OAAO,CACtB,CAAC,EACD5hC,EAAO,GAAG,aAAc,UAAY,CAClC4hC,EAAa,SAAS,CACxB,CAAC,EACD,IAAII,EAAc,SAAUtmC,EAAMlF,EAAG,CACnC+qC,EAAgB7lC,EAAM,SAAUuF,EAAM,CACpC,MAAO,CACL,SAAUA,EAAK,SACf,UAAWA,EAAK,UAAU,OAAO,CAACzK,CAAC,CAAC,CACtC,CACF,CAAC,CACH,EACA,MAAO,CAAE,YAAawrC,CAAY,CACpC,EAEIC,GAAU,SAAUjiC,EAAQmhC,EAAU,CACxC,IAAIe,EAAqB,SAAUC,EAAM,CACvC,IAAIC,EAAgBpqC,EAAO,KAAKmqC,EAAK,WAAW,IAAIhC,GAAe,CAAC,CAAC,EACrE,OAAOiC,EAAc,KAAKjB,EAAS,MAAM,CAC3C,EACAnhC,EAAO,GAAG,OAAQ,UAAY,CAC5BA,EAAO,WAAW,cAAc,OAAQ,SAAUqiC,EAAO,CACvD5oC,GAAK4oC,EAAO,SAAUF,EAAM,CAC1BD,EAAmBC,CAAI,EAAE,KAAK,SAAUrd,EAAU,CAC5CA,EAAS,aAAe,IAC1Bqd,EAAK,OAAO,CAEhB,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC,CACH,EAEIG,GAAW,UAAY,CACzB,IAAIT,EAAc,CAAC,EACfU,EAAW,SAAU7mC,EAAMopB,EAAU,CACvC+c,EAAYnmC,CAAI,EAAI,CAClB,KAAMA,EACN,SAAUopB,CACZ,CACF,EACI6C,EAAS,SAAUjsB,EAAM,CAC3B,OAAOmmC,EAAY,eAAenmC,CAAI,EAAI1D,EAAO,KAAK6pC,EAAYnmC,CAAI,CAAC,EAAE,IAAI,SAAU,EAAG,CACxF,OAAO,EAAE,QACX,CAAC,EAAI1D,EAAO,KAAK,CACnB,EACA,MAAO,CACL,SAAUuqC,EACV,OAAQ5a,CACV,CACF,EAEI6a,GAAW,UAAY,CACzB,OAAAA,GAAW,OAAO,QAAU,SAAkB,EAAG,CAC/C,QAASlrC,EAAGgC,EAAI,EAAGlC,EAAI,UAAU,OAAQkC,EAAIlC,EAAGkC,IAAK,CACnDhC,EAAI,UAAUgC,CAAC,EACf,QAASkC,KAAKlE,EACR,OAAO,UAAU,eAAe,KAAKA,EAAGkE,CAAC,IAC3C,EAAEA,CAAC,EAAIlE,EAAEkE,CAAC,EAChB,CACA,OAAO,CACT,EACOgnC,GAAS,MAAM,KAAM,SAAS,CACvC,EACA,SAASC,GAAOnrC,EAAG2G,EAAG,CACpB,IAAI+c,EAAI,CAAC,EACT,QAASxf,KAAKlE,EACR,OAAO,UAAU,eAAe,KAAKA,EAAGkE,CAAC,GAAKyC,EAAE,QAAQzC,CAAC,EAAI,IAC/Dwf,EAAExf,CAAC,EAAIlE,EAAEkE,CAAC,GACd,GAAIlE,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WACvD,QAASgC,EAAI,EAAGkC,EAAI,OAAO,sBAAsBlE,CAAC,EAAGgC,EAAIkC,EAAE,OAAQlC,IAC7D2E,EAAE,QAAQzC,EAAElC,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKhC,EAAGkE,EAAElC,CAAC,CAAC,IAC3E0hB,EAAExf,EAAElC,CAAC,CAAC,EAAIhC,EAAEkE,EAAElC,CAAC,CAAC,GAEtB,OAAO0hB,CACT,CACA,SAAS0nB,IAAiB,CACxB,QAASprC,EAAI,EAAGgC,EAAI,EAAGqpC,EAAK,UAAU,OAAQrpC,EAAIqpC,EAAIrpC,IACpDhC,GAAK,UAAUgC,CAAC,EAAE,OACpB,QAAS,EAAI,MAAMhC,CAAC,EAAGgkB,EAAI,EAAGhiB,EAAI,EAAGA,EAAIqpC,EAAIrpC,IAC3C,QAAS9B,EAAI,UAAU8B,CAAC,EAAGuN,EAAI,EAAG+7B,EAAKprC,EAAE,OAAQqP,EAAI+7B,EAAI/7B,IAAKyU,IAC5D,EAAEA,CAAC,EAAI9jB,EAAEqP,CAAC,EACd,OAAO,CACT,CAEA,IAAIg8B,GAAS,EACTC,GAAW,SAAUrT,EAAQ,CAC/B,IAAIsT,EAAO,IAAI,KACXvjC,EAAOujC,EAAK,QAAQ,EACpBC,EAAS,KAAK,MAAM,KAAK,OAAO,EAAI,GAAU,EAClD,OAAAH,KACOpT,EAAS,IAAMuT,EAASH,GAAS,OAAOrjC,CAAI,CACrD,EAEIyjC,GAAQ,SAAU9jC,EAAS+jC,EAAS,CACtCzpC,GAAKypC,EAAS,SAAUjtC,EAAG,CACzBmpC,GAAMjgC,EAASlJ,CAAC,CAClB,CAAC,CACH,EAEIggC,GAAQ,SAAUkN,EAAUC,EAAQ,CACtC,OAAOlpB,GAAQ,QAAQipB,EAAS,IAAI,EAAE,UAAUC,CAAM,CAAC,CACzD,EACIrc,GAAU,SAAUoc,EAAU,CAChC,OAAOlN,GAAMkN,EAAU,EAAK,CAC9B,EACIjN,GAAO,SAAUiN,EAAU,CAC7B,OAAOlN,GAAMkN,EAAU,EAAI,CAC7B,EAEIE,GAAa,SAAUhxB,EAAM/W,EAAO,CACtC,IAAI6F,EAAM7F,GAAS/F,EAAW,SAC1BskB,EAAM1Y,EAAI,cAAc,KAAK,EACjC,OAAA0Y,EAAI,UAAYxH,EACTrP,GAASkX,GAAQ,QAAQL,CAAG,CAAC,CACtC,EAEIypB,GAAQ,SAAUnkC,EAAS,CAC7B,OAAOA,EAAQ,IAAI,EAAE,SACvB,EACIokC,GAAQ,SAAUpkC,EAASgV,EAAS,CACtC,IAAIqvB,EAAUhlB,GAAMrf,CAAO,EACvBskC,EAASD,EAAQ,IAAI,EACrBE,EAAWxpB,GAAQ,QAAQupB,EAAO,uBAAuB,CAAC,EAC1DE,EAAkBN,GAAWlvB,EAASsvB,CAAM,EAChDxF,GAASyF,EAAUC,CAAe,EAClCzF,GAAM/+B,CAAO,EACby+B,GAAOz+B,EAASukC,CAAQ,CAC1B,EAEIE,GAAO,SACPC,GAAS,SAAUzY,EAAK,CAC1B,OAAOA,IAAQwY,EACjB,EACIE,GAAS,SAAU14B,EAAM,CAC3B,OAAOA,EAAK,QAAQ,IAAI,OAAOw4B,GAAM,GAAG,EAAG,EAAE,CAC/C,EACIG,GAAO,CACT,OAAQF,GACR,KAAMD,GACN,KAAME,EACR,EAEIE,GAAcha,GAAS,UACvBia,GAAWja,GAAS,OACpBka,GAAwB,SAAUz7B,EAAM,CAC1C,OAAIw7B,GAASx7B,CAAI,IACfA,EAAOA,EAAK,YAEPu7B,GAAYv7B,CAAI,GAAKA,EAAK,aAAa,gBAAgB,CAChE,EACI07B,GAAyB,SAAU17B,EAAM,CAC3C,OAAOw7B,GAASx7B,CAAI,GAAKs7B,GAAK,OAAOt7B,EAAK,IAAI,CAChD,EACI27B,GAAmB,SAAU37B,EAAM,CACrC,OAAOy7B,GAAsBz7B,CAAI,GAAK07B,GAAuB17B,CAAI,CACnE,EACI47B,GAAa,SAAU57B,EAAM,CAC/B,OAAOA,EAAK,aAAeA,EAAK,WAAa,CAACuhB,GAAS,KAAKvhB,EAAK,UAAU,CAC7E,EACI67B,GAAe,SAAU77B,EAAMg1B,EAAQ,CACzC,IAAIt8B,EAAK2T,EAASyvB,EAAUC,EAI5B,GAHArjC,EAAMsH,EAAK,cACX87B,EAAWpjC,EAAI,eAAe4iC,GAAK,IAAI,EACvCS,EAAa/7B,EAAK,WACbg1B,EAgBE,CAEL,GADA3oB,EAAUrM,EAAK,gBACXw7B,GAASnvB,CAAO,EAAG,CACrB,GAAIsvB,GAAiBtvB,CAAO,EAC1B,OAAOA,EAET,GAAI2vB,GAAuB3vB,CAAO,EAChC,OAAOA,EAAQ,UAAUA,EAAQ,KAAK,OAAS,CAAC,CAEpD,CACA0vB,EAAW,aAAaD,EAAU97B,CAAI,CACxC,KA3Ba,CAEX,GADAqM,EAAUrM,EAAK,YACXw7B,GAASnvB,CAAO,EAAG,CACrB,GAAIsvB,GAAiBtvB,CAAO,EAC1B,OAAOA,EAET,GAAI4vB,GAAyB5vB,CAAO,EAClC,OAAAA,EAAQ,UAAU,CAAC,EACZA,CAEX,CACIrM,EAAK,YACP+7B,EAAW,aAAaD,EAAU97B,EAAK,WAAW,EAElD+7B,EAAW,YAAYD,CAAQ,CAEnC,CAYA,OAAOA,CACT,EACII,GAAiB,SAAUjwB,EAAK,CAClC,IAAInS,EAAYmS,EAAI,UAAU,EAC9B,MAAI,CAACA,GAAO,CAACsV,GAAS,OAAOznB,CAAS,EAC7B,GAEFA,EAAU,KAAK,OAAOmS,EAAI,OAAO,CAAC,IAAMqvB,GAAK,MAAQrvB,EAAI,UAAU,GAAKyvB,GAAuB5hC,EAAU,eAAe,CACjI,EACIqiC,GAAgB,SAAUlwB,EAAK,CACjC,IAAInS,EAAYmS,EAAI,UAAU,EAC9B,MAAI,CAACA,GAAO,CAACsV,GAAS,OAAOznB,CAAS,EAC7B,GAEFA,EAAU,KAAK,OAAOmS,EAAI,OAAO,EAAI,CAAC,IAAMqvB,GAAK,MAAQrvB,EAAI,QAAQ,GAAKyvB,GAAuB5hC,EAAU,WAAW,CAC/H,EACIsiC,GAAgB,UAAY,CAC9B,IAAIC,EAAKvvC,EAAW,SAAS,cAAc,IAAI,EAC/C,OAAAuvC,EAAG,aAAa,iBAAkB,GAAG,EAC9BA,CACT,EACIC,GAAc,SAAUC,EAAWv8B,EAAMg1B,EAAQ,CACnD,IAAIt8B,EAAK8jC,EAAWT,EACpB,OAAArjC,EAAMsH,EAAK,cACXw8B,EAAY9jC,EAAI,cAAc6jC,CAAS,EACvCC,EAAU,aAAa,iBAAkBxH,EAAS,SAAW,OAAO,EACpEwH,EAAU,aAAa,iBAAkB,KAAK,EAC9CA,EAAU,YAAYJ,GAAc,CAAC,EACrCL,EAAa/7B,EAAK,WACbg1B,EAOH+G,EAAW,aAAaS,EAAWx8B,CAAI,EANnCA,EAAK,YACP+7B,EAAW,aAAaS,EAAWx8B,EAAK,WAAW,EAEnD+7B,EAAW,YAAYS,CAAS,EAK7BA,CACT,EACIP,GAA2B,SAAUj8B,EAAM,CAC7C,OAAOw7B,GAASx7B,CAAI,GAAKA,EAAK,KAAK,CAAC,IAAMs7B,GAAK,IACjD,EACIU,GAAyB,SAAUh8B,EAAM,CAC3C,OAAOw7B,GAASx7B,CAAI,GAAKA,EAAK,KAAKA,EAAK,KAAK,OAAS,CAAC,IAAMs7B,GAAK,IACpE,EACImB,GAAc,SAAUnxB,EAAK,CAC/B,IAAIoxB,EAAMpxB,EAAI,qBAAqB,IAAI,EACnCqxB,EAASD,EAAIA,EAAI,OAAS,CAAC,EAC3Bnb,GAAS,QAAQob,CAAM,GACzBA,EAAO,WAAW,YAAYA,CAAM,CAExC,EACIC,GAA0B,SAAUC,EAAgB,CACtD,OAAIA,GAAkBA,EAAe,aAAa,gBAAgB,GAChEJ,GAAYI,CAAc,EAC1BA,EAAe,gBAAgB,gBAAgB,EAC/CA,EAAe,gBAAgB,gBAAgB,EAC/CA,EAAe,gBAAgB,OAAO,EACtCA,EAAe,gBAAgB,aAAa,EACrCA,GAEF,IACT,EACIC,GAA+B,SAAUC,EAAO,CAClD,OAAOtB,GAAsBsB,EAAM,cAAc,CACnD,EAEIC,GAA0Bzb,GAAS,sBACnC0b,GAA2B1b,GAAS,uBACpC2b,GAAS3b,GAAS,KAClB4b,GAAW5b,GAAS,OACpB6b,GAAuB7b,GAAS,eAAe,uBAAuB,EACtE8b,GAAiB9b,GAAS,eAAe,iDAAiD,EAC1F+b,GAAY/b,GAAS,eAAe,OAAO,EAC3Cgc,GAAqB5B,GACrB6B,GAAmB,SAAUx9B,EAAM,CACrC,OAAIu9B,GAAmBv9B,CAAI,EAClB,GAELm9B,GAASn9B,CAAI,EACX,CAAAo9B,GAAqBp9B,EAAK,UAAU,EAKnCq9B,GAAer9B,CAAI,GAAKk9B,GAAOl9B,CAAI,GAAKs9B,GAAUt9B,CAAI,GAAKy9B,GAA4Bz9B,CAAI,CACpG,EACI09B,GAAiB,SAAU19B,EAAM,CACnC,OAAOuhB,GAAS,UAAUvhB,CAAI,GAAKA,EAAK,aAAa,cAAc,IAAM,MAC3E,EACIy9B,GAA8B,SAAUz9B,EAAM,CAChD,OAAO09B,GAAe19B,CAAI,IAAM,IAASi9B,GAAyBj9B,CAAI,CACxE,EACI29B,GAAe,SAAU39B,EAAMkI,EAAM,CACvC,IAAKlI,EAAOA,EAAK,WAAYA,GAAQA,IAASkI,EAAMlI,EAAOA,EAAK,WAAY,CAC1E,GAAIy9B,GAA4Bz9B,CAAI,EAClC,MAAO,GAET,GAAIg9B,GAAwBh9B,CAAI,EAC9B,MAAO,EAEX,CACA,MAAO,EACT,EACI49B,GAA+B,SAAU59B,EAAM,CACjD,OAAKy9B,GAA4Bz9B,CAAI,EAG9BvO,GAAMgB,GAAOuN,EAAK,qBAAqB,GAAG,CAAC,EAAG,SAAUyB,EAAQ6J,EAAK,CAC1E,OAAO7J,GAAUu7B,GAAwB1xB,CAAG,CAC9C,EAAG,EAAK,IAAM,GAJL,EAKX,EACIuyB,GAAW,SAAU79B,EAAM,CAC7B,OAAOq9B,GAAer9B,CAAI,GAAK49B,GAA6B59B,CAAI,CAClE,EACI89B,GAA2B,SAAU99B,EAAMkI,EAAM,CACnD,OAAOs1B,GAAiBx9B,CAAI,GAAK29B,GAAa39B,EAAMkI,CAAI,CAC1D,EAEI61B,GAAQ,KAAK,MACbC,GAAU,SAAUC,EAAM,CAC5B,OAAKA,EAUE,CACL,KAAMF,GAAME,EAAK,IAAI,EACrB,IAAKF,GAAME,EAAK,GAAG,EACnB,OAAQF,GAAME,EAAK,MAAM,EACzB,MAAOF,GAAME,EAAK,KAAK,EACvB,MAAOF,GAAME,EAAK,KAAK,EACvB,OAAQF,GAAME,EAAK,MAAM,CAC3B,EAhBS,CACL,KAAM,EACN,IAAK,EACL,OAAQ,EACR,MAAO,EACP,MAAO,EACP,OAAQ,CACV,CAUJ,EACIC,GAAW,SAAUD,EAAME,EAAS,CACtC,OAAAF,EAAOD,GAAQC,CAAI,EACfE,IAGFF,EAAK,KAAOA,EAAK,KAAOA,EAAK,OAC7BA,EAAK,MAAQA,EAAK,KAEpBA,EAAK,MAAQ,EACNA,CACT,EACIG,GAAU,SAAUC,EAAOC,EAAO,CACpC,OAAOD,EAAM,OAASC,EAAM,MAAQD,EAAM,MAAQC,EAAM,KAAOD,EAAM,SAAWC,EAAM,QAAUD,EAAM,QAAUC,EAAM,KACxH,EACIC,GAAkB,SAAUC,EAAWH,EAAOC,EAAO,CACvD,OAAOE,GAAa,GAAKA,GAAa,KAAK,IAAIH,EAAM,OAAQC,EAAM,MAAM,EAAI,CAC/E,EACIG,GAAU,SAAUJ,EAAOC,EAAO,CACpC,IAAII,EAAa,KAAK,IAAIJ,EAAM,OAAS,EAAGD,EAAM,OAAS,CAAC,EAC5D,OAAIA,EAAM,OAASK,EAAaJ,EAAM,IAC7B,GAELD,EAAM,IAAMC,EAAM,OACb,GAEFC,GAAgBD,EAAM,IAAMD,EAAM,OAAQA,EAAOC,CAAK,CAC/D,EACIK,GAAU,SAAUN,EAAOC,EAAO,CACpC,OAAID,EAAM,IAAMC,EAAM,OACb,GAELD,EAAM,OAASC,EAAM,IAChB,GAEFC,GAAgBD,EAAM,OAASD,EAAM,IAAKA,EAAOC,CAAK,CAC/D,EACIM,GAAa,SAAUX,EAAMY,EAASC,EAAS,CACjD,OAAOD,GAAWZ,EAAK,MAAQY,GAAWZ,EAAK,OAASa,GAAWb,EAAK,KAAOa,GAAWb,EAAK,MACjG,EACIc,GAAY,SAAUC,EAAOC,EAAO,CACtC,OAAIA,EAAM,KAAOD,EAAM,MAAQC,EAAM,MAAQD,EAAM,MAC1C,EAEAC,EAAM,KAAOD,EAAM,KAAOC,EAAM,KAAOD,EAAM,KAAOC,EAAM,MAAQD,EAAM,KAEnF,EACIR,GAAY,SAAUQ,EAAOC,EAAO,CACtC,OAAIA,EAAM,IAAMD,EAAM,KAAOC,EAAM,OAASD,EAAM,OACzC,EAEAC,EAAM,IAAMD,EAAM,IAAMC,EAAM,IAAMD,EAAM,IAAMC,EAAM,OAASD,EAAM,MAEhF,EACIE,GAAc,SAAUF,EAAOC,EAAO,CACxC,MAAO,CACL,EAAGF,GAAUC,EAAOC,CAAK,EACzB,EAAGT,GAAUQ,EAAOC,CAAK,CAC3B,CACF,EAEIE,GAAkB,SAAUpC,EAAO,CACrC,IAAIqC,EAAiBrC,EAAM,eAAgBsC,EAActC,EAAM,YAC/D,OAAIqC,EAAe,cAAc,GAAKrC,EAAM,YAAcsC,EAAc,EAC/DD,EAAe,WAAWC,CAAW,EAEvC,IACT,EACIC,GAAU,SAAUxlC,EAAWgS,EAAQ,CACzC,OAAIhS,EAAU,WAAa,GAAKA,EAAU,cAAc,IAClDgS,GAAUhS,EAAU,WAAW,SACjCgS,EAAShS,EAAU,WAAW,OAAS,GAEzCA,EAAYA,EAAU,WAAWgS,CAAM,GAElChS,CACT,EAEIylC,GAAiB,IAAI,OAAO,isEAAqyE,EACj0EC,GAAkB,SAAUC,EAAI,CAClC,OAAO,OAAOA,GAAO,UAAYA,EAAG,WAAW,CAAC,GAAK,KAAOF,GAAe,KAAKE,CAAE,CACpF,EAEIC,GAAQ,SAAUC,EAAIC,EAAI7xC,EAAG,CAC/B,OAAO4xC,EAAG,OAAO,GAAKC,EAAG,OAAO,EAAIrwC,EAAO,KAAKxB,EAAE4xC,EAAG,SAAS,EAAGC,EAAG,SAAS,CAAC,CAAC,EAAIrwC,EAAO,KAAK,CACjG,EACIswC,GAAQ,SAAUF,EAAIC,EAAIE,EAAI/xC,EAAG,CACnC,OAAO4xC,EAAG,OAAO,GAAKC,EAAG,OAAO,GAAKE,EAAG,OAAO,EAAIvwC,EAAO,KAAKxB,EAAE4xC,EAAG,SAAS,EAAGC,EAAG,SAAS,EAAGE,EAAG,SAAS,CAAC,CAAC,EAAIvwC,EAAO,KAAK,CAC/H,EAEIwwC,GAAU,CAAC,EAAE,MACbxkB,GAAK,UAAY,CAEnB,QADI/tB,EAAI,CAAC,EACAJ,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCI,EAAEJ,CAAE,EAAI,UAAUA,CAAE,EAEtB,IAAID,EAAO4yC,GAAQ,KAAK,SAAS,EACjC,OAAO,SAAUvyC,EAAG,CAClB,QAASqD,EAAI,EAAGA,EAAI1D,EAAK,OAAQ0D,IAC/B,GAAI1D,EAAK0D,CAAC,EAAErD,CAAC,EACX,MAAO,GAGX,MAAO,EACT,CACF,EACIwyC,GAAM,UAAY,CAEpB,QADIxyC,EAAI,CAAC,EACAJ,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCI,EAAEJ,CAAE,EAAI,UAAUA,CAAE,EAEtB,IAAID,EAAO4yC,GAAQ,KAAK,SAAS,EACjC,OAAO,SAAUvyC,EAAG,CAClB,QAASqD,EAAI,EAAGA,EAAI1D,EAAK,OAAQ0D,IAC/B,GAAI,CAAC1D,EAAK0D,CAAC,EAAErD,CAAC,EACZ,MAAO,GAGX,MAAO,EACT,CACF,EACIyyC,GAAY,CACd,IAAKD,GACL,GAAIzkB,EACN,EAEI2kB,GAAc3e,GAAS,UACvB4e,GAAqB3C,GACrB4C,GAAY7e,GAAS,iBAAiB,UAAW,aAAa,EAC9D8e,GAAY9e,GAAS,iBAAiB,QAAS,YAAY,EAC3D+e,GAA+BL,GAAU,IAAIC,GAAaC,GAAoBryC,EAAIuyC,EAAS,CAAC,EAC5FE,GAAWzyC,EAAIyzB,GAAS,iBAAiB,cAAe,uBAAuB,CAAC,EAChFif,GAAWjf,GAAS,OACpBkf,GAASlf,GAAS,KAClBtf,GAAYowB,GAAW,UACvBqO,GAAepB,GACfqB,GAAc,SAAUjoC,EAAK,CAC/B,MAAO,gBAAiBA,EAAMA,EAAI,YAAY,EAAI25B,GAAW,IAAI,UAAU,CAC7E,EACIuO,GAAe,SAAUje,EAAK,CAChC,OAAOA,GAAO,YAAY,KAAKA,CAAG,CACpC,EACIke,GAAU,SAAU/I,EAAK,CAC3B,MAAO,CAAC,CAACA,EAAI,UAAY,CAAC,CAACA,EAAI,MACjC,EACIgJ,GAA0B,SAAU/D,EAAO,CAC7C,IAAIjjC,EAAYijC,EAAM,eAClBjxB,EAASixB,EAAM,YACfp6B,EACJ,MAAI,GAAAi+B,GAAa7D,EAAM,SAAS,CAAC,GAAKwD,GAASzmC,EAAU,UAAU,GAAKynB,GAAS,OAAOznB,CAAS,IAC/F6I,EAAO7I,EAAU,KACb8mC,GAAaj+B,EAAKmJ,EAAS,CAAC,CAAC,GAAK80B,GAAaj+B,EAAKmJ,EAAS,CAAC,CAAC,GAKvE,EACIi1B,GAAkB,SAAUC,EAAQ,CACtC,IAAItoC,EAAMsoC,EAAO,cACblJ,EAAM6I,GAAYjoC,CAAG,EACrBuoC,EAAOvoC,EAAI,eAAe,MAAM,EAChCqjC,EAAaiF,EAAO,WACpBE,EACJ,OAAAnF,EAAW,aAAakF,EAAMD,CAAM,EACpClJ,EAAI,SAASmJ,EAAM,CAAC,EACpBnJ,EAAI,OAAOmJ,EAAM,CAAC,EAClBC,EAAalD,GAAQlG,EAAI,sBAAsB,CAAC,EAChDiE,EAAW,YAAYkF,CAAI,EACpBC,CACT,EACIC,GAAkC,SAAUrJ,EAAK,CACnD,IAAIsJ,EAAKtJ,EAAI,eACTuJ,EAAKvJ,EAAI,aACTwJ,EAAKxJ,EAAI,YACTyJ,EAAKzJ,EAAI,UACb,GAAIsJ,IAAOC,GAAM9f,GAAS,OAAO8f,CAAE,GAAKC,IAAO,GAAKC,IAAO,EAAG,CAC5D,IAAIC,EAAS1J,EAAI,WAAW,EAC5B,OAAA0J,EAAO,YAAYH,CAAE,EACdI,GAAsBD,CAAM,CACrC,KACE,QAAO,IAEX,EACIE,GAAa,SAAUjxC,EAAG,CAC5B,OAAOA,EAAE,OAAS,GAAKA,EAAE,QAAU,GAAKA,EAAE,MAAQ,GAAKA,EAAE,SAAW,CACtE,EACIgxC,GAAwB,SAAU96B,EAAM,CAC1C,IAAIu6B,EAAYS,EAOhB,OANAA,EAAch7B,EAAK,eAAe,EAC9Bg7B,EAAY,OAAS,EACvBT,EAAalD,GAAQ2D,EAAY,CAAC,CAAC,EAEnCT,EAAalD,GAAQr3B,EAAK,sBAAsB,CAAC,EAE/C,CAACk6B,GAAQl6B,CAAI,GAAK85B,GAAO95B,CAAI,GAAK+6B,GAAWR,CAAU,EAClDH,GAAgBp6B,CAAI,EAEzB+6B,GAAWR,CAAU,GAAKL,GAAQl6B,CAAI,EACjCw6B,GAAgCx6B,CAAI,EAEtCu6B,CACT,EACIU,GAA0B,SAAUV,EAAY/C,EAAS,CAC3D,IAAI0D,EAAgB3D,GAASgD,EAAY/C,CAAO,EAChD,OAAA0D,EAAc,MAAQ,EACtBA,EAAc,MAAQA,EAAc,KAAO,EACpCA,CACT,EACIC,GAA8B,SAAUC,EAAe,CACzD,IAAIJ,EAAc,CAAC,EACfK,EAAYhiC,EACZiiC,EAAwB,SAAUf,EAAY,CAC5CA,EAAW,SAAW,IAGtBS,EAAY,OAAS,GACnBvD,GAAQ8C,EAAYS,EAAYA,EAAY,OAAS,CAAC,CAAC,GAI7DA,EAAY,KAAKT,CAAU,EAC7B,EACIgB,EAAqB,SAAUpoC,EAAWgS,EAAQ,CACpD,IAAIixB,EAAQ4D,GAAY7mC,EAAU,aAAa,EAC/C,GAAIgS,EAAShS,EAAU,KAAK,OAAQ,CAClC,GAAI0lC,GAAgB1lC,EAAU,KAAKgS,CAAM,CAAC,EACxC,OAAO61B,EAET,GAAInC,GAAgB1lC,EAAU,KAAKgS,EAAS,CAAC,CAAC,IAC5CixB,EAAM,SAASjjC,EAAWgS,CAAM,EAChCixB,EAAM,OAAOjjC,EAAWgS,EAAS,CAAC,EAC9B,CAACg1B,GAAwB/D,CAAK,GAChC,OAAAkF,EAAsBL,GAAwBH,GAAsB1E,CAAK,EAAG,EAAK,CAAC,EAC3E4E,CAGb,CACI71B,EAAS,IACXixB,EAAM,SAASjjC,EAAWgS,EAAS,CAAC,EACpCixB,EAAM,OAAOjjC,EAAWgS,CAAM,EACzBg1B,GAAwB/D,CAAK,GAChCkF,EAAsBL,GAAwBH,GAAsB1E,CAAK,EAAG,EAAK,CAAC,GAGlFjxB,EAAShS,EAAU,KAAK,SAC1BijC,EAAM,SAASjjC,EAAWgS,CAAM,EAChCixB,EAAM,OAAOjjC,EAAWgS,EAAS,CAAC,EAC7Bg1B,GAAwB/D,CAAK,GAChCkF,EAAsBL,GAAwBH,GAAsB1E,CAAK,EAAG,EAAI,CAAC,EAGvF,EACA,GAAIyD,GAASuB,EAAc,UAAU,CAAC,EACpC,OAAAG,EAAmBH,EAAc,UAAU,EAAGA,EAAc,OAAO,CAAC,EAC7DJ,EAET,GAAIzB,GAAY6B,EAAc,UAAU,CAAC,EACvC,GAAIA,EAAc,QAAQ,EACxB/hC,EAAO0gC,GAAaqB,EAAc,UAAU,EAAGA,EAAc,OAAO,CAAC,EACjEvB,GAASxgC,CAAI,GACfkiC,EAAmBliC,EAAMA,EAAK,KAAK,MAAM,EAEvCsgC,GAA6BtgC,CAAI,GAAK,CAACygC,GAAOzgC,CAAI,GACpDiiC,EAAsBL,GAAwBH,GAAsBzhC,CAAI,EAAG,EAAK,CAAC,MAE9E,CAKL,GAJAA,EAAO0gC,GAAaqB,EAAc,UAAU,EAAGA,EAAc,OAAO,CAAC,EACjEvB,GAASxgC,CAAI,GACfkiC,EAAmBliC,EAAM,CAAC,EAExBsgC,GAA6BtgC,CAAI,GAAK+hC,EAAc,QAAQ,EAC9D,OAAAE,EAAsBL,GAAwBH,GAAsBzhC,CAAI,EAAG,EAAK,CAAC,EAC1E2hC,EAETK,EAAatB,GAAaqB,EAAc,UAAU,EAAGA,EAAc,OAAO,EAAI,CAAC,EAC3EzB,GAA6B0B,CAAU,GAAK,CAACvB,GAAOuB,CAAU,IAC5D5B,GAAU4B,CAAU,GAAK5B,GAAUpgC,CAAI,GAAK,CAACsgC,GAA6BtgC,CAAI,IAChFiiC,EAAsBL,GAAwBH,GAAsBO,CAAU,EAAG,EAAK,CAAC,EAGvF1B,GAA6BtgC,CAAI,GACnCiiC,EAAsBL,GAAwBH,GAAsBzhC,CAAI,EAAG,EAAI,CAAC,CAEpF,CAEF,OAAO2hC,CACT,EACA,SAASQ,GAAcroC,EAAWgS,EAAQ61B,EAAa,CACrD,IAAIS,EAAY,UAAY,CAC1B,OAAI5B,GAAS1mC,CAAS,EACbgS,IAAW,CAGtB,EACIu2B,EAAU,UAAY,CACxB,OAAI7B,GAAS1mC,CAAS,EACbgS,GAAUhS,EAAU,KAAK,OAE3BgS,GAAUhS,EAAU,WAAW,MACxC,EACIwoC,EAAU,UAAY,CACxB,IAAIvF,EACJ,OAAAA,EAAQ4D,GAAY7mC,EAAU,aAAa,EAC3CijC,EAAM,SAASjjC,EAAWgS,CAAM,EAChCixB,EAAM,OAAOjjC,EAAWgS,CAAM,EACvBixB,CACT,EACIwF,EAAiB,UAAY,CAC/B,OAAKZ,IACHA,EAAcG,GAA4BK,GAAcroC,EAAWgS,CAAM,CAAC,GAErE61B,CACT,EACIa,EAAY,UAAY,CAC1B,OAAOD,EAAe,EAAE,OAAS,CACnC,EACInE,EAAU,SAAU2D,EAAe,CACrC,OAAOA,GAAiBjoC,IAAcioC,EAAc,UAAU,GAAKj2B,IAAWi2B,EAAc,OAAO,CACrG,EACIzC,EAAU,SAAUtK,EAAQ,CAC9B,OAAO0L,GAAa5mC,EAAWk7B,EAASlpB,EAAS,EAAIA,CAAM,CAC7D,EACA,MAAO,CACL,UAAWze,EAASyM,CAAS,EAC7B,OAAQzM,EAASye,CAAM,EACvB,QAASw2B,EACT,eAAgBC,EAChB,UAAWC,EACX,UAAWJ,EACX,QAASC,EACT,QAASjE,EACT,QAASkB,CACX,CACF,EACC,SAAU6C,EAAe,CACxBA,EAAc,eAAiB,SAAUpF,EAAO,CAC9C,OAAOoF,EAAcpF,EAAM,eAAgBA,EAAM,WAAW,CAC9D,EACAoF,EAAc,aAAe,SAAUpF,EAAO,CAC5C,OAAOoF,EAAcpF,EAAM,aAAcA,EAAM,SAAS,CAC1D,EACAoF,EAAc,MAAQ,SAAUniC,EAAM,CACpC,OAAOmiC,EAAcniC,EAAK,WAAYiC,GAAUjC,CAAI,EAAI,CAAC,CAC3D,EACAmiC,EAAc,OAAS,SAAUniC,EAAM,CACrC,OAAOmiC,EAAcniC,EAAK,WAAYiC,GAAUjC,CAAI,CAAC,CACvD,EACAmiC,EAAc,QAAU,SAAUM,EAAMC,EAAM,CAC5C,OAAOhD,GAAMntC,GAAKmwC,EAAK,eAAe,CAAC,EAAGlwC,GAAKiwC,EAAK,eAAe,CAAC,EAAGhE,EAAO,EAAE,MAAM,EAAK,CAC7F,EACA0D,EAAc,QAAU,SAAUM,EAAMC,EAAM,CAC5C,OAAOhD,GAAMltC,GAAKkwC,EAAK,eAAe,CAAC,EAAGnwC,GAAKkwC,EAAK,eAAe,CAAC,EAAG9D,EAAO,EAAE,MAAM,EAAK,CAC7F,EACAwD,EAAc,UAAY,SAAUl2B,EAAK,CACvC,OAAOA,EAAMA,EAAI,UAAU,EAAI,EACjC,EACAk2B,EAAc,QAAU,SAAUl2B,EAAK,CACrC,OAAOA,EAAMA,EAAI,QAAQ,EAAI,EAC/B,EACAk2B,EAAc,eAAiB,SAAUl2B,EAAK,CAC5C,OAAOA,EAAMsV,GAAS,OAAOtV,EAAI,UAAU,CAAC,EAAI,EAClD,EACAk2B,EAAc,kBAAoB,SAAUl2B,EAAK,CAC/C,OAAOk2B,EAAc,eAAel2B,CAAG,IAAM,EAC/C,CACF,GAAEk2B,KAAkBA,GAAgB,CAAC,EAAE,EACvC,IAAIQ,GAAkBR,GAElBS,GAAWrhB,GAAS,OACpBshB,GAAYthB,GAAS,QACrBuhB,GAAczQ,GAAW,UACzB0Q,GAAmB,SAAU/iC,EAAM,CACrC,IAAI+7B,EAAa/7B,EAAK,WACtB,OAAI6iC,GAAU9G,CAAU,EACfgH,GAAiBhH,CAAU,EAE7BA,CACT,EACIiH,GAAgB,SAAUhjC,EAAM,CAClC,OAAKA,EAGEuH,GAAS,OAAOvH,EAAK,WAAY,SAAUyB,EAAQzB,EAAM,CAC9D,OAAI6iC,GAAU7iC,CAAI,GAAKA,EAAK,WAAa,KACvCyB,EAASA,EAAO,OAAOuhC,GAAchjC,CAAI,CAAC,EAE1CyB,EAAO,KAAKzB,CAAI,EAEXyB,CACT,EAAG,CAAC,CAAC,EATI,CAAC,CAUZ,EACIwhC,GAAuB,SAAUjjC,EAAM8L,EAAQ,CACjD,MAAO9L,EAAOA,EAAK,kBACZ4iC,GAAS5iC,CAAI,GAGlB8L,GAAU9L,EAAK,KAAK,OAEtB,OAAO8L,CACT,EACIo3B,GAAQ,SAAUn0C,EAAG,CACvB,OAAO,SAAUM,EAAG,CAClB,OAAON,IAAMM,CACf,CACF,EACI8zC,GAAsB,SAAUnjC,EAAM,CACxC,IAAIoL,EAAOxE,EAAOw8B,EAClB,OAAAh4B,EAAQ43B,GAAcD,GAAiB/iC,CAAI,CAAC,EAC5C4G,EAAQW,GAAS,UAAU6D,EAAO83B,GAAMljC,CAAI,EAAGA,CAAI,EACnDoL,EAAQA,EAAM,MAAM,EAAGxE,EAAQ,CAAC,EAChCw8B,EAAmB77B,GAAS,OAAO6D,EAAO,SAAU3J,EAAQzB,EAAMnP,EAAG,CACnE,OAAI+xC,GAAS5iC,CAAI,GAAK4iC,GAASx3B,EAAMva,EAAI,CAAC,CAAC,GACzC4Q,IAEKA,CACT,EAAG,CAAC,EACJ2J,EAAQ7D,GAAS,OAAO6D,EAAOmW,GAAS,eAAevhB,EAAK,QAAQ,CAAC,EACrE4G,EAAQW,GAAS,UAAU6D,EAAO83B,GAAMljC,CAAI,EAAGA,CAAI,EAC5C4G,EAAQw8B,CACjB,EACIC,GAAiB,SAAUrjC,EAAM,CACnC,IAAI/M,EACJ,OAAI2vC,GAAS5iC,CAAI,EACf/M,EAAO,SAEPA,EAAO+M,EAAK,SAAS,YAAY,EAE5B/M,EAAO,IAAMkwC,GAAoBnjC,CAAI,EAAI,GAClD,EACIsjC,GAAe,SAAUp7B,EAAMlI,EAAMoH,EAAW,CAClD,IAAI6O,EAAU,CAAC,EACf,IAAKjW,EAAOA,EAAK,WAAYA,IAASkI,GAChC,EAAAd,GAAaA,EAAUpH,CAAI,GADWA,EAAOA,EAAK,WAItDiW,EAAQ,KAAKjW,CAAI,EAEnB,OAAOiW,CACT,EACIstB,GAAW,SAAUr7B,EAAM65B,EAAe,CAC5C,IAAIjoC,EAAWgS,EAAQnZ,EAAO,CAAC,EAAG6wC,EAAcC,EAAYxtB,EAC5D,OAAAnc,EAAYioC,EAAc,UAAU,EACpCj2B,EAASi2B,EAAc,OAAO,EAC1Ba,GAAS9oC,CAAS,EACpB0pC,EAAeP,GAAqBnpC,EAAWgS,CAAM,GAErD23B,EAAa3pC,EAAU,WACnBgS,GAAU23B,EAAW,QACvBD,EAAe,QACf13B,EAAS23B,EAAW,OAAS,GAE7BD,EAAe,SAEjB1pC,EAAY2pC,EAAW33B,CAAM,GAE/BnZ,EAAK,KAAK0wC,GAAevpC,CAAS,CAAC,EACnCmc,EAAUqtB,GAAap7B,EAAMpO,CAAS,EACtCmc,EAAU1O,GAAS,OAAO0O,EAASnoB,EAAIyzB,GAAS,OAAO,CAAC,EACxD5uB,EAAOA,EAAK,OAAO4U,GAAS,IAAI0O,EAAS,SAAUjW,EAAM,CACvD,OAAOqjC,GAAerjC,CAAI,CAC5B,CAAC,CAAC,EACKrN,EAAK,QAAQ,EAAE,KAAK,GAAG,EAAI,IAAM6wC,CAC1C,EACIE,GAAkB,SAAU1jC,EAAM/M,EAAM2T,EAAO,CACjD,IAAIwE,EAAQ43B,GAAchjC,CAAI,EAC9B,OAAAoL,EAAQ7D,GAAS,OAAO6D,EAAO,SAAUpL,EAAM4G,EAAO,CACpD,MAAO,CAACg8B,GAAS5iC,CAAI,GAAK,CAAC4iC,GAASx3B,EAAMxE,EAAQ,CAAC,CAAC,CACtD,CAAC,EACDwE,EAAQ7D,GAAS,OAAO6D,EAAOmW,GAAS,eAAetuB,CAAI,CAAC,EACrDmY,EAAMxE,CAAK,CACpB,EACI+8B,GAAmB,SAAU7pC,EAAWgS,EAAQ,CAElD,QADI9L,EAAOlG,EAAW8pC,EAAe,EAAGC,EACjCjB,GAAS5iC,CAAI,GAAG,CAErB,GADA6jC,EAAU7jC,EAAK,KAAK,OAChB8L,GAAU83B,GAAgB93B,GAAU83B,EAAeC,EAAS,CAC9D/pC,EAAYkG,EACZ8L,EAASA,EAAS83B,EAClB,KACF,CACA,GAAI,CAAChB,GAAS5iC,EAAK,WAAW,EAAG,CAC/BlG,EAAYkG,EACZ8L,EAAS+3B,EACT,KACF,CACAD,GAAgBC,EAChB7jC,EAAOA,EAAK,WACd,CACA,OAAI4iC,GAAS9oC,CAAS,GAAKgS,EAAShS,EAAU,KAAK,SACjDgS,EAAShS,EAAU,KAAK,QAEnB6oC,GAAgB7oC,EAAWgS,CAAM,CAC1C,EACIg4B,GAAY,SAAU57B,EAAMvV,EAAM,CACpC,IAAIC,EAAOkH,EAAWgS,EAiBtB,MAhBI,CAACnZ,IAGLC,EAAQD,EAAK,MAAM,GAAG,EACtBA,EAAOC,EAAM,CAAC,EAAE,MAAM,GAAG,EACzBkZ,EAASlZ,EAAM,OAAS,EAAIA,EAAM,CAAC,EAAI,SACvCkH,EAAYyN,GAAS,OAAO5U,EAAM,SAAU8O,EAAQnU,EAAO,CAEzD,OADAA,EAAQ,4BAA4B,KAAKA,CAAK,EACzCA,GAGDA,EAAM,CAAC,IAAM,WACfA,EAAM,CAAC,EAAI,SAENo2C,GAAgBjiC,EAAQnU,EAAM,CAAC,EAAG,SAASA,EAAM,CAAC,EAAG,EAAE,CAAC,GALtD,IAMX,EAAG4a,CAAI,EACH,CAACpO,GACI,KAEJ8oC,GAAS9oC,CAAS,EAQhB6pC,GAAiB7pC,EAAW,SAASgS,EAAQ,EAAE,CAAC,GAPjDA,IAAW,QACbA,EAASg3B,GAAYhpC,CAAS,EAAI,EAElCgS,EAASg3B,GAAYhpC,CAAS,EAEzB6oC,GAAgB7oC,EAAU,WAAYgS,CAAM,EAGvD,EAEIi4B,GAAoB,SAAU1wB,EAAKrT,EAAM,CACvCuhB,GAAS,OAAOvhB,CAAI,GAAKA,EAAK,KAAK,SAAW,GAChDqT,EAAI,OAAOrT,CAAI,CAEnB,EACIgkC,GAAa,SAAU3wB,EAAKykB,EAAK93B,EAAM,CACzC83B,EAAI,WAAW93B,CAAI,EACnB+jC,GAAkB1wB,EAAKrT,EAAK,eAAe,EAC3C+jC,GAAkB1wB,EAAKrT,EAAK,WAAW,CACzC,EACIikC,GAAiB,SAAU5wB,EAAKykB,EAAKhuB,EAAM,CAC7C,IAAI6M,EAAapnB,EAAO,KAAKua,EAAK,UAAU,EACxC8M,EAAYrnB,EAAO,KAAKua,EAAK,SAAS,EAC1CguB,EAAI,WAAWhuB,CAAI,EACnB6M,EAAW,KAAK,SAAUF,EAAO,CAC/B,OAAOstB,GAAkB1wB,EAAKoD,EAAM,eAAe,CACrD,CAAC,EACDG,EAAU,KAAK,SAAUH,EAAO,CAC9B,OAAOstB,GAAkB1wB,EAAKoD,EAAM,WAAW,CACjD,CAAC,CACH,EACIytB,GAAkB,SAAU7wB,EAAKykB,EAAK93B,EAAM,CAC1CuhB,GAAS,mBAAmBvhB,CAAI,EAClCikC,GAAe5wB,EAAKykB,EAAK93B,CAAI,EAE7BgkC,GAAW3wB,EAAKykB,EAAK93B,CAAI,CAE7B,EAEImkC,GAA2B5iB,GAAS,uBACpC6iB,GAA0B,SAAU38B,EAAM3N,EAAWgS,EAAQ,CAC/D,IAAI9L,EAAMqkC,EAEV,IADAA,EAAgB58B,EAAK3N,EAAU,KAAK,MAAM,EAAGgS,CAAM,CAAC,EAAE,OACjD9L,EAAOlG,EAAU,gBAAiBkG,GAAQuhB,GAAS,OAAOvhB,CAAI,EAAGA,EAAOA,EAAK,gBAChFqkC,GAAiB58B,EAAKzH,EAAK,IAAI,EAAE,OAEnC,OAAOqkC,CACT,EACIC,GAAW,SAAUjxB,EAAK5L,EAAM6kB,EAAYwL,EAAK51B,EAAO,CAC1D,IAAIpI,EAAYg+B,EAAI51B,EAAQ,iBAAmB,cAAc,EACzD4J,EAASgsB,EAAI51B,EAAQ,cAAgB,WAAW,EAChDqiC,EAAQ,CAAC,EACTd,EAAYvO,EAAQ,EACpBhtB,EAAOmL,EAAI,QAAQ,EAWvB,IAVIkO,GAAS,OAAOznB,CAAS,EAC3ByqC,EAAM,KAAKjY,EAAa8X,GAAwB38B,EAAM3N,EAAWgS,CAAM,EAAIA,CAAM,GAEjF23B,EAAa3pC,EAAU,WACnBgS,GAAU23B,EAAW,QAAUA,EAAW,SAC5CvO,EAAQ,EACRppB,EAAS,KAAK,IAAI,EAAG23B,EAAW,OAAS,CAAC,GAE5Cc,EAAM,KAAKlxB,EAAI,UAAUowB,EAAW33B,CAAM,EAAGwgB,CAAU,EAAI4I,CAAK,GAE3Dp7B,GAAaA,IAAcoO,EAAMpO,EAAYA,EAAU,WAC5DyqC,EAAM,KAAKlxB,EAAI,UAAUvZ,EAAWwyB,CAAU,CAAC,EAEjD,OAAOiY,CACT,EACIC,GAAc,SAAU/8B,EAAMg9B,EAAWnY,EAAYwL,EAAK,CAC5D,IAAIzkB,EAAMoxB,EAAU,IAAKC,EAAW,CAAC,EACrC,OAAAA,EAAS,MAAQJ,GAASjxB,EAAK5L,EAAM6kB,EAAYwL,EAAK,EAAI,EACrD2M,EAAU,YAAY,IACzBC,EAAS,IAAMJ,GAASjxB,EAAK5L,EAAM6kB,EAAYwL,EAAK,EAAK,GAEpD4M,CACT,EACIC,GAAc,SAAUtxB,EAAKpgB,EAAMyD,EAAS,CAC9C,IAAI2C,EAAQ,EACZ,OAAA6P,GAAM,KAAKmK,EAAI,OAAOpgB,CAAI,EAAG,SAAU+M,EAAM,CAC3C,GAAIA,EAAK,aAAa,gBAAgB,IAAM,MAG5C,IAAIA,IAAStJ,EACX,MAAO,GAET2C,IACF,CAAC,EACMA,CACT,EACIurC,GAAe,SAAU9M,EAAK51B,EAAO,CACvC,IAAIpI,EAAWgS,EAAQ23B,EACnBzc,EAAS9kB,EAAQ,QAAU,MAC/BpI,EAAYg+B,EAAI9Q,EAAS,WAAW,EACpClb,EAASgsB,EAAI9Q,EAAS,QAAQ,EAC1BzF,GAAS,UAAUznB,CAAS,GAAKA,EAAU,WAAa,OAC1D2pC,EAAa3pC,EAAU,WACvBA,EAAY2pC,EAAW,KAAK,IAAIvhC,EAAQ4J,EAASA,EAAS,EAAG23B,EAAW,OAAS,CAAC,CAAC,EAC/E3pC,IACFgS,EAAS5J,EAAQ,EAAIpI,EAAU,WAAW,OAC1Cg+B,EAAI,OAAS51B,EAAQ,QAAU,MAAM,EAAEpI,EAAWgS,CAAM,GAG9D,EACI+4B,GAA8B,SAAU/M,EAAK,CAC/C,OAAA8M,GAAa9M,EAAK,EAAI,EACtB8M,GAAa9M,EAAK,EAAK,EAChBA,CACT,EACI1Z,GAAc,SAAUpe,EAAM8L,EAAQ,CACxC,IAAIO,EACJ,GAAIkV,GAAS,UAAUvhB,CAAI,IACzBA,EAAOs/B,GAAQt/B,EAAM8L,CAAM,EACvBq4B,GAAyBnkC,CAAI,GAC/B,OAAOA,EAGX,GAAI27B,GAAiB37B,CAAI,IACnBuhB,GAAS,OAAOvhB,CAAI,GAAKy7B,GAAsBz7B,CAAI,IACrDA,EAAOA,EAAK,YAEdqM,EAAUrM,EAAK,gBACXmkC,GAAyB93B,CAAO,IAGpCA,EAAUrM,EAAK,YACXmkC,GAAyB93B,CAAO,IAClC,OAAOA,CAGb,EACIy4B,GAAsC,SAAUhN,EAAK,CACvD,OAAO1Z,GAAY0Z,EAAI,eAAgBA,EAAI,WAAW,GAAK1Z,GAAY0Z,EAAI,aAAcA,EAAI,SAAS,CACxG,EACIiN,GAAoB,SAAUt9B,EAAM6kB,EAAYmY,EAAW,CAC7D,IAAI/tC,EAAU+tC,EAAU,QAAQ,EAC5BxxC,EAAOyD,EAAUA,EAAQ,SAAW,KACpCohC,EAAM2M,EAAU,OAAO,EAC3B,GAAIN,GAAyBztC,CAAO,GAAKzD,IAAS,MAChD,MAAO,CACL,KAAMA,EACN,MAAO0xC,GAAYF,EAAU,IAAKxxC,EAAMyD,CAAO,CACjD,EAEF,IAAI2V,EAAUy4B,GAAoChN,CAAG,EACrD,OAAIzrB,GACFpZ,EAAOoZ,EAAQ,QACR,CACL,KAAMpZ,EACN,MAAO0xC,GAAYF,EAAU,IAAKxxC,EAAMoZ,CAAO,CACjD,GAEKm4B,GAAY/8B,EAAMg9B,EAAWnY,EAAYwL,CAAG,CACrD,EACIkN,GAAmB,SAAUP,EAAW,CAC1C,IAAI3M,EAAM2M,EAAU,OAAO,EAC3B,MAAO,CACL,MAAOlB,GAASkB,EAAU,IAAI,QAAQ,EAAG9B,GAAgB,eAAe7K,CAAG,CAAC,EAC5E,IAAKyL,GAASkB,EAAU,IAAI,QAAQ,EAAG9B,GAAgB,aAAa7K,CAAG,CAAC,CAC1E,CACF,EACImN,GAAmB,SAAUR,EAAW,CAC1C,MAAO,CAAE,IAAKA,EAAU,OAAO,CAAE,CACnC,EACIS,GAAqB,SAAU7xB,EAAK3kB,EAAIy2C,EAAQ,CAClD,IAAIh4C,EAAO,CACT,gBAAiB,WACjB,GAAMuB,EACN,MAAS,iCACX,EACA,OAAOy2C,EAAS9xB,EAAI,OAAO,OAAQlmB,EAAM,UAAU,EAAIkmB,EAAI,OAAO,OAAQlmB,CAAI,CAChF,EACIi4C,GAAwB,SAAUX,EAAWU,EAAQ,CACvD,IAAI9xB,EAAMoxB,EAAU,IAChB3M,EAAM2M,EAAU,OAAO,EACvB/1C,EAAK2kB,EAAI,SAAS,EAClBgyB,EAAYZ,EAAU,YAAY,EAClC/tC,EAAU+tC,EAAU,QAAQ,EAC5BxxC,EAAOyD,EAAQ,SACnB,GAAIzD,IAAS,MACX,MAAO,CACL,KAAMA,EACN,MAAO0xC,GAAYtxB,EAAKpgB,EAAMyD,CAAO,CACvC,EAEF,IAAI4uC,EAAOT,GAA4B/M,EAAI,WAAW,CAAC,EACvD,GAAI,CAACuN,EAAW,CACdC,EAAK,SAAS,EAAK,EACnB,IAAIC,EAAkBL,GAAmB7xB,EAAK3kB,EAAK,OAAQy2C,CAAM,EACjEjB,GAAgB7wB,EAAKiyB,EAAMC,CAAe,CAC5C,CACAzN,EAAM+M,GAA4B/M,CAAG,EACrCA,EAAI,SAAS,EAAI,EACjB,IAAI0N,EAAoBN,GAAmB7xB,EAAK3kB,EAAK,SAAUy2C,CAAM,EACrE,OAAAjB,GAAgB7wB,EAAKykB,EAAK0N,CAAiB,EAC3Cf,EAAU,eAAe,CACvB,GAAI/1C,EACJ,KAAM,CACR,CAAC,EACM,CAAE,GAAIA,CAAG,CAClB,EACI+2C,GAAc,SAAUhB,EAAW/0C,EAAM48B,EAAY,CACvD,OAAI58B,IAAS,EACJq1C,GAAkBzJ,GAAK,KAAMhP,EAAYmY,CAAS,EAChD/0C,IAAS,EACXs1C,GAAiBP,CAAS,EACxB/0C,EACFu1C,GAAiBR,CAAS,EAE1BW,GAAsBX,EAAW,EAAK,CAEjD,EACIiB,GAAc,CAChB,YAAaD,GACb,gBAAiBh4C,EAAMs3C,GAAmBx3C,EAAU,EAAI,EACxD,sBAAuB63C,EACzB,EAEIO,GAAW,aACXC,GAAc,SAAU5lC,EAAM,CAChC,OAAOuhB,GAAS,UAAUvhB,CAAI,GAAKA,EAAK,KAAO2lC,EACjD,EACIE,GAA0B,SAAUltC,EAAMqH,EAAM,CAClD,KAAOA,GAAQA,IAASrH,GAAM,CAC5B,GAAIqH,EAAK,KAAO2lC,GACd,OAAO3lC,EAETA,EAAOA,EAAK,UACd,CACA,OAAO,IACT,EAEI8lC,GAAcvkB,GAAS,UACvBwkB,GAAWxkB,GAAS,OACpBykB,GAAa,SAAUhmC,EAAM,CAC/B,IAAI+7B,EAAa/7B,EAAK,WAClB+7B,GACFA,EAAW,YAAY/7B,CAAI,CAE/B,EACIimC,GAAe,SAAUjmC,EAAM,CACjC,GAAI,CACF,OAAOA,EAAK,SACd,MAAa,CACX,MAAO,EACT,CACF,EACIkmC,GAAe,SAAUlmC,EAAM2C,EAAM,CACnCA,EAAK,SAAW,EAClBqjC,GAAWhmC,CAAI,EAEfA,EAAK,UAAY2C,CAErB,EACIwjC,GAAY,SAAUxjC,EAAM,CAC9B,IAAIyjC,EAAc9K,GAAK,KAAK34B,CAAI,EAChC,MAAO,CACL,MAAOA,EAAK,OAASyjC,EAAY,OACjC,KAAMA,CACR,CACF,EACIC,GAAkB,SAAUxJ,EAAgB5wB,EAAK,CACnD,OAAAq6B,GAASzJ,CAAc,EAChB5wB,CACT,EACIs6B,GAA0B,SAAU1J,EAAgB5wB,EAAK,CAC3D,IAAI+oB,EAASmR,GAAUtJ,EAAe,KAAK,OAAO,EAAG5wB,EAAI,OAAO,CAAC,CAAC,EAC9DipB,EAAQiR,GAAUtJ,EAAe,KAAK,OAAO5wB,EAAI,OAAO,CAAC,CAAC,EAC1DtJ,EAAOqyB,EAAO,KAAOE,EAAM,KAC/B,OAAIvyB,EAAK,OAAS,GAChBujC,GAAarJ,EAAgBl6B,CAAI,EAC1BggC,GAAgB9F,EAAgB5wB,EAAI,OAAO,EAAI+oB,EAAO,KAAK,GAE3D/oB,CAEX,EACIu6B,GAA6B,SAAU3J,EAAgB5wB,EAAK,CAC9D,IAAI8vB,EAAa9vB,EAAI,UAAU,EAC3Bw6B,EAAcl2C,GAAQkC,GAAOspC,EAAW,UAAU,EAAGc,CAAc,EAAE,IAAI,SAAUj2B,EAAO,CAC5F,OAAOA,EAAQqF,EAAI,OAAO,EAAI02B,GAAgB5G,EAAY9vB,EAAI,OAAO,EAAI,CAAC,EAAIA,CAChF,CAAC,EAAE,MAAMA,CAAG,EACZ,OAAAq6B,GAASzJ,CAAc,EAChB4J,CACT,EACIC,GAA2B,SAAU7J,EAAgB5wB,EAAK,CAC5D,OAAO85B,GAASlJ,CAAc,GAAK5wB,EAAI,UAAU,IAAM4wB,EAAiB0J,GAAwB1J,EAAgB5wB,CAAG,EAAIo6B,GAAgBxJ,EAAgB5wB,CAAG,CAC5J,EACI06B,GAA8B,SAAU9J,EAAgB5wB,EAAK,CAC/D,OAAOA,EAAI,UAAU,IAAM4wB,EAAe,WAAa2J,GAA2B3J,EAAgB5wB,CAAG,EAAIo6B,GAAgBxJ,EAAgB5wB,CAAG,CAC9I,EACI26B,GAAsB,SAAU9sC,EAAWmS,EAAK,CAClD,OAAO02B,GAAgB,eAAe12B,CAAG,EAAIy6B,GAAyB5sC,EAAWmS,CAAG,EAAI06B,GAA4B7sC,EAAWmS,CAAG,CACpI,EACIq6B,GAAW,SAAUO,EAAoB,CAQ3C,GAPIf,GAAYe,CAAkB,GAAKlL,GAAiBkL,CAAkB,IACpEjL,GAAWiL,CAAkB,EAC/BA,EAAmB,gBAAgB,gBAAgB,EAEnDb,GAAWa,CAAkB,GAG7Bd,GAASc,CAAkB,EAAG,CAChC,IAAIlkC,EAAO24B,GAAK,KAAK2K,GAAaY,CAAkB,CAAC,EACrDX,GAAaW,EAAoBlkC,CAAI,CACvC,CACF,EACImkC,GAAuB,CACzB,oBAAqBF,GACrB,OAAQN,EACV,EAEIS,GAAY71B,GAAoB,OAAO,EAAE,QACzC81B,GAA2BzlB,GAAS,uBACpC0lB,GAAgB,SAAUjnC,EAAM,CAClC,OAAOuhB,GAAS,UAAUvhB,CAAI,GAAK,aAAa,KAAKA,EAAK,OAAO,CACnE,EACIknC,GAAwB,SAAUh/B,EAAMxR,EAASs+B,EAAQ,CAC3D,IAAIkM,EAAahD,GAASxnC,EAAQ,sBAAsB,EAAGs+B,CAAM,EAC7DjpB,EAAQo7B,EAASC,EAASC,EAAQC,EACtC,OAAIp/B,EAAK,UAAY,QACnB6D,EAAS7D,EAAK,cAAc,gBAC5Bi/B,EAAUj/B,EAAK,YAAc6D,EAAO,WACpCq7B,EAAUl/B,EAAK,WAAa6D,EAAO,YAEnCu7B,EAAWp/B,EAAK,sBAAsB,EACtCi/B,EAAUj/B,EAAK,WAAao/B,EAAS,KACrCF,EAAUl/B,EAAK,UAAYo/B,EAAS,KAEtCpG,EAAW,MAAQiG,EACnBjG,EAAW,OAASiG,EACpBjG,EAAW,KAAOkG,EAClBlG,EAAW,QAAUkG,EACrBlG,EAAW,MAAQ,EACnBmG,EAAS3wC,EAAQ,YAAcA,EAAQ,YACnC2wC,EAAS,IACPrS,IACFqS,GAAU,IAEZnG,EAAW,MAAQmG,EACnBnG,EAAW,OAASmG,GAEfnG,CACT,EACIqG,GAA4B,SAAUr/B,EAAM,CAC9C,IAAIs/B,EAA2BxnC,EAAMqM,EAASxb,EAAG2H,EAEjD,IADAgvC,EAA4Br9B,GAAS,2BAA4BjC,CAAI,EAChErX,EAAI,EAAGA,EAAI22C,EAA0B,OAAQ32C,IAChDmP,EAAOwnC,EAA0B32C,CAAC,EAClCwb,EAAUrM,EAAK,gBACXg8B,GAAuB3vB,CAAO,IAChC7T,EAAO6T,EAAQ,KACX7T,EAAK,SAAW,EAClB6T,EAAQ,WAAW,YAAYA,CAAO,EAEtCA,EAAQ,WAAW7T,EAAK,OAAS,EAAG,CAAC,GAGzC6T,EAAUrM,EAAK,YACXi8B,GAAyB5vB,CAAO,IAClC7T,EAAO6T,EAAQ,KACX7T,EAAK,SAAW,EAClB6T,EAAQ,WAAW,YAAYA,CAAO,EAEtCA,EAAQ,WAAW,EAAG,CAAC,EAI/B,EACIo7B,GAAY,SAAUv/B,EAAMkX,EAASsoB,EAAU,CACjD,IAAIC,EAAkBzR,GAAK3mC,EAAO,KAAK,CAAC,EACpCq4C,EAAgBf,EAChBzW,EAAO,SAAU4E,EAAQt+B,EAAS,CACpC,IAAIwqC,EAAYpJ,GAEhB,GADAzH,EAAK,EACD4W,GAAcvwC,CAAO,EACvB,OAAO,KAET,GAAI0oB,EAAQ1oB,CAAO,EAAG,CACpBmwC,EAAqBvK,GAAY,IAAK5lC,EAASs+B,CAAM,EACrDkM,EAAagG,GAAsBh/B,EAAMxR,EAASs+B,CAAM,EACxD7qB,GAAS08B,CAAkB,EAAE,IAAI,MAAO3F,EAAW,GAAG,EACtD,IAAI2G,GAAQ19B,GAAS,2DAA2D,EAAE,IAAI+2B,CAAU,EAAE,SAASh5B,CAAI,EAAE,CAAC,EAClHy/B,EAAgB,IAAIp4C,EAAO,KAAK,CAC9B,MAAOs4C,GACP,QAASnxC,EACT,OAAQs+B,CACV,CAAC,CAAC,EACF2S,EAAgB,IAAI,EAAE,KAAK,SAAUG,GAAY,CAC3C9S,GACF7qB,GAAS29B,GAAW,KAAK,EAAE,SAAS,yBAAyB,CAEjE,CAAC,EACDC,EAAW,EACXjQ,GAAMphC,EAAQ,cAAc,YAAY,EACxCohC,GAAI,SAAS+O,EAAoB,CAAC,EAClC/O,GAAI,OAAO+O,EAAoB,CAAC,CAClC,KACE,QAAAA,EAAqBhL,GAAanlC,EAASs+B,CAAM,EACjD8C,GAAMphC,EAAQ,cAAc,YAAY,EACpCswC,GAAyBH,EAAmB,WAAW,GACzD/O,GAAI,SAAS+O,EAAoB,CAAC,EAClC/O,GAAI,OAAO+O,EAAoB,CAAC,IAEhC/O,GAAI,SAAS+O,EAAoB,CAAC,EAClC/O,GAAI,OAAO+O,EAAoB,CAAC,GAE3B/O,GAET,OAAOA,EACT,EACIzH,EAAO,UAAY,CACrBkX,GAA0Br/B,CAAI,EAC1B2+B,IACFC,GAAqB,OAAOD,CAAkB,EAC9CA,EAAqB,MAEvBc,EAAgB,IAAI,EAAE,KAAK,SAAUG,EAAY,CAC/C39B,GAAS29B,EAAW,KAAK,EAAE,OAAO,EAClCH,EAAgB,IAAIp4C,EAAO,KAAK,CAAC,CACnC,CAAC,EACD,cAAcq4C,CAAc,CAC9B,EACIG,EAAa,UAAY,CAC3BH,EAAiBtwC,GAAM,YAAY,UAAY,CACzCowC,EAAS,EACXv9B,GAAS,uBAAwBjC,CAAI,EAAE,YAAY,yBAAyB,EAE5EiC,GAAS,uBAAwBjC,CAAI,EAAE,SAAS,yBAAyB,CAE7E,EAAG,GAAG,CACR,EACI8/B,EAAa,UAAY,CAC3BL,EAAgB,IAAI,EAAE,KAAK,SAAUG,EAAY,CAC/C,IAAI5G,EAAagG,GAAsBh/B,EAAM4/B,EAAW,QAASA,EAAW,MAAM,EAClF39B,GAAS29B,EAAW,KAAK,EAAE,IAAI5G,CAAU,CAC3C,CAAC,CACH,EACIhP,EAAU,UAAY,CACxB,OAAO56B,GAAM,cAAcswC,CAAc,CAC3C,EACIK,EAAS,UAAY,CACvB,MAAO,sOACT,EACA,MAAO,CACL,KAAM7X,EACN,KAAMC,EACN,OAAQ4X,EACR,WAAYD,EACZ,QAAS9V,CACX,CACF,EACIgW,GAA0B,UAAY,CACxC,OAAOnB,GAAU,KAAK,GAAKA,GAAU,OAAO,GAAKA,GAAU,UAAU,CACvE,EACIoB,GAAoB,SAAUnoC,EAAM,CACtC,OAAOgnC,GAAyBhnC,CAAI,GAAKuhB,GAAS,QAAQvhB,CAAI,GAAKkoC,GAAwB,CAC7F,EAEIE,GAA2B7mB,GAAS,uBACpC8mB,GAAc9mB,GAAS,iBAAiB,UAAW,gDAAgD,EACnG+mB,GAAqB3M,GACrB4M,GAA0B9M,GAC1B+M,GAAcjnB,GAAS,UACvBknB,GAAqBjL,GACrBkL,GAAa,SAAUC,EAAW,CACpC,OAAOA,EAAY,CACrB,EACIC,GAAc,SAAUD,EAAW,CACrC,OAAOA,EAAY,CACrB,EACIE,GAAsB,SAAUlgC,EAAM2V,EAAS,CAEjD,QADIte,EACGA,EAAO2I,EAAK2V,CAAO,GACxB,GAAI,CAACiqB,GAAwBvoC,CAAI,EAC/B,OAAOA,EAGX,OAAO,IACT,EACI8oC,GAAW,SAAU9oC,EAAM2oC,EAAWI,EAAa5qB,EAAUG,EAAS,CACxE,IAAIgT,EAAS,IAAIrT,GAAWje,EAAMme,CAAQ,EAC1C,GAAIyqB,GAAYD,CAAS,EAAG,CAC1B,IAAIP,GAAyBpoC,CAAI,GAAKuoC,GAAwBvoC,CAAI,KAChEA,EAAO6oC,GAAoBvX,EAAO,KAAM,EAAI,EACxCyX,EAAY/oC,CAAI,GAClB,OAAOA,EAGX,KAAOA,EAAO6oC,GAAoBvX,EAAO,KAAMhT,CAAO,GACpD,GAAIyqB,EAAY/oC,CAAI,EAClB,OAAOA,CAGb,CACA,GAAI0oC,GAAWC,CAAS,EAAG,CACzB,IAAIP,GAAyBpoC,CAAI,GAAKuoC,GAAwBvoC,CAAI,KAChEA,EAAO6oC,GAAoBvX,EAAO,KAAM,EAAI,EACxCyX,EAAY/oC,CAAI,GAClB,OAAOA,EAGX,KAAOA,EAAO6oC,GAAoBvX,EAAO,KAAMhT,CAAO,GACpD,GAAIyqB,EAAY/oC,CAAI,EAClB,OAAOA,CAGb,CACA,OAAO,IACT,EACIgpC,GAAiB,SAAUhpC,EAAMme,EAAU,CAC7C,KAAOne,GAAQA,IAASme,GAAU,CAChC,GAAIkqB,GAAYroC,CAAI,EAClB,OAAOA,EAETA,EAAOA,EAAK,UACd,CACA,OAAO,IACT,EACIipC,GAAgB,SAAUC,EAAgBC,EAAgBhrB,EAAU,CACtE,OAAO6qB,GAAeE,EAAe,UAAU,EAAG/qB,CAAQ,IAAM6qB,GAAeG,EAAe,UAAU,EAAGhrB,CAAQ,CACrH,EACIirB,GAA+B,SAAUC,EAAgBtH,EAAe,CAC1E,IAAIjoC,EAAWgS,EAMf,MALI,CAACi2B,IAGLjoC,EAAYioC,EAAc,UAAU,EACpCj2B,EAASi2B,EAAc,OAAO,EAC1B,CAACyG,GAAY1uC,CAAS,GACjB,KAEFA,EAAU,WAAWgS,EAASu9B,CAAc,CACrD,EACIC,GAAc,SAAUtU,EAAQh1B,EAAM,CACxC,IAAI+8B,EAAQ/8B,EAAK,cAAc,YAAY,EAC3C,OAAIg1B,GACF+H,EAAM,eAAe/8B,CAAI,EACzB+8B,EAAM,aAAa/8B,CAAI,IAEvB+8B,EAAM,cAAc/8B,CAAI,EACxB+8B,EAAM,YAAY/8B,CAAI,GAEjB+8B,CACT,EACIwM,GAAqB,SAAUrhC,EAAMshC,EAAOC,EAAO,CACrD,OAAOT,GAAeQ,EAAOthC,CAAI,IAAM8gC,GAAeS,EAAOvhC,CAAI,CACnE,EACIwhC,GAAO,SAAUlf,EAAMtiB,EAAMlI,EAAM,CACrC,IAAIqM,EAASC,EAMb,IALIke,EACFle,EAAc,kBAEdA,EAAc,cAETtM,GAAQA,IAASkI,GAAM,CAK5B,GAJAmE,EAAUrM,EAAKsM,CAAW,EACtBg8B,GAAmBj8B,CAAO,IAC5BA,EAAUA,EAAQC,CAAW,GAE3B87B,GAAyB/7B,CAAO,EAAG,CACrC,GAAIk9B,GAAmBrhC,EAAMmE,EAASrM,CAAI,EACxC,OAAOqM,EAET,KACF,CACA,GAAIo8B,GAAmBp8B,CAAO,EAC5B,MAEFrM,EAAOA,EAAK,UACd,CACA,OAAO,IACT,EACI2pC,GAAWl8C,EAAM67C,GAAa,EAAI,EAClCM,GAAUn8C,EAAM67C,GAAa,EAAK,EAClCO,GAAiB,SAAUlB,EAAWzgC,EAAM60B,EAAO,CACrD,IAAI/8B,EAAMlG,EAAWgS,EAAQg+B,EACzBC,EAAWt8C,EAAMi8C,GAAM,GAAMxhC,CAAI,EACjC8hC,EAAYv8C,EAAMi8C,GAAM,GAAOxhC,CAAI,EAGvC,GAFApO,EAAYijC,EAAM,eAClBjxB,EAASixB,EAAM,YACXtB,GAAsB3hC,CAAS,EAAG,CAKpC,GAJK0uC,GAAY1uC,CAAS,IACxBA,EAAYA,EAAU,YAExBgwC,EAAWhwC,EAAU,aAAa,gBAAgB,EAC9CgwC,IAAa,WACf9pC,EAAOlG,EAAU,YACbquC,GAAkBnoC,CAAI,GACxB,OAAO2pC,GAAS3pC,CAAI,EAGxB,GAAI8pC,IAAa,UACf9pC,EAAOlG,EAAU,gBACbquC,GAAkBnoC,CAAI,GACxB,OAAO4pC,GAAQ5pC,CAAI,CAGzB,CACA,GAAI,CAAC+8B,EAAM,UACT,OAAOA,EAET,GAAIxb,GAAS,OAAOznB,CAAS,EAAG,CAC9B,GAAIwuC,GAAmBxuC,CAAS,EAAG,CACjC,GAAI6uC,IAAc,EAAG,CAEnB,GADA3oC,EAAOgqC,EAAUlwC,CAAS,EACtBkG,EACF,OAAO2pC,GAAS3pC,CAAI,EAGtB,GADAA,EAAO+pC,EAASjwC,CAAS,EACrBkG,EACF,OAAO4pC,GAAQ5pC,CAAI,CAEvB,CACA,GAAI2oC,IAAc,GAAI,CAEpB,GADA3oC,EAAO+pC,EAASjwC,CAAS,EACrBkG,EACF,OAAO4pC,GAAQ5pC,CAAI,EAGrB,GADAA,EAAOgqC,EAAUlwC,CAAS,EACtBkG,EACF,OAAO2pC,GAAS3pC,CAAI,CAExB,CACA,OAAO+8B,CACT,CACA,GAAIf,GAAuBliC,CAAS,GAAKgS,GAAUhS,EAAU,KAAK,OAAS,EACzE,OAAI6uC,IAAc,IAChB3oC,EAAOgqC,EAAUlwC,CAAS,EACtBkG,GACK2pC,GAAS3pC,CAAI,EAGjB+8B,EAET,GAAId,GAAyBniC,CAAS,GAAKgS,GAAU,EACnD,OAAI68B,IAAc,KAChB3oC,EAAO+pC,EAASjwC,CAAS,EACrBkG,GACK4pC,GAAQ5pC,CAAI,EAGhB+8B,EAET,GAAIjxB,IAAWhS,EAAU,KAAK,OAE5B,OADAkG,EAAOgqC,EAAUlwC,CAAS,EACtBkG,EACK2pC,GAAS3pC,CAAI,EAEf+8B,EAET,GAAIjxB,IAAW,EAEb,OADA9L,EAAO+pC,EAASjwC,CAAS,EACrBkG,EACK4pC,GAAQ5pC,CAAI,EAEd+8B,CAEX,CACA,OAAOA,CACT,EACIkN,GAAoB,SAAUpoC,EAASkgC,EAAe,CACxD,OAAOxyC,EAAO,KAAK65C,GAA6BvnC,EAAU,EAAI,GAAIkgC,CAAa,CAAC,EAAE,OAAOqG,EAAwB,CACnH,EACI8B,GAA6B,SAAUvB,EAAWzgC,EAAM60B,EAAO,CACjE,IAAIoN,EAAkBN,GAAelB,EAAWzgC,EAAM60B,CAAK,EAC3D,OAAI4L,IAAc,GACTxG,GAAc,eAAegI,CAAe,EAE9ChI,GAAc,aAAagI,CAAe,CACnD,EACIC,GAAyB,SAAUn+B,EAAK,CAC1C,OAAO1c,EAAO,KAAK0c,EAAI,QAAQ,CAAC,EAAE,IAAIwF,GAAQ,OAAO,CACvD,EACI44B,GAA6B,SAAUp+B,EAAK,CAC9C,OAAO1c,EAAO,KAAK0c,EAAI,QAAQ,EAAI,CAAC,EAAE,IAAIwF,GAAQ,OAAO,CAC3D,EACI64B,GAAyB,SAAUC,EAAQxI,EAAe,CAC5D,KAAOA,EAAgBwI,EAAOxI,CAAa,GACzC,GAAIA,EAAc,UAAU,EAC1B,OAAOA,EAGX,OAAOA,CACT,EACIyI,GAAwB,SAAUl7C,EAAMm7C,EAAI,CAC9C,IAAIC,EAAczB,GAAc35C,EAAMm7C,CAAE,EACxC,MAAI,CAACC,GAAenpB,GAAS,KAAKjyB,EAAK,QAAQ,CAAC,EACvC,GAEFo7C,CACT,EAEIC,IACH,SAAUA,EAAY,CACrBA,EAAWA,EAAW,UAAe,EAAE,EAAI,YAC3CA,EAAWA,EAAW,SAAc,CAAC,EAAI,UAC3C,GAAEA,KAAeA,GAAa,CAAC,EAAE,EACjC,IAAIC,GAA2BrpB,GAAS,uBACpCspB,GAAWtpB,GAAS,OACpBupB,GAAcvpB,GAAS,UACvBwpB,GAASxpB,GAAS,KAClBypB,GAAqBxN,GACrByN,GAAapN,GACbqN,GAA6BpN,GAC7BpP,GAAa,SAAU1uB,EAAMkI,EAAM,CAErC,QADI+N,EAAU,CAAC,EACRjW,GAAQA,IAASkI,GACtB+N,EAAQ,KAAKjW,CAAI,EACjBA,EAAOA,EAAK,WAEd,OAAOiW,CACT,EACIk1B,GAAc,SAAUrxC,EAAWgS,EAAQ,CAC7C,OAAIhS,EAAU,cAAc,GAAKgS,EAAShS,EAAU,WAAW,OACtDA,EAAU,WAAWgS,CAAM,EAE7B,IACT,EACIs/B,GAA4B,SAAUzC,EAAW3oC,EAAM,CACzD,GAAI0oC,GAAWC,CAAS,EAAG,CACzB,GAAIqC,GAAmBhrC,EAAK,eAAe,GAAK,CAAC6qC,GAAS7qC,EAAK,eAAe,EAC5E,OAAO2iC,GAAgB,OAAO3iC,CAAI,EAEpC,GAAI6qC,GAAS7qC,CAAI,EACf,OAAO2iC,GAAgB3iC,EAAM,CAAC,CAElC,CACA,GAAI4oC,GAAYD,CAAS,EAAG,CAC1B,GAAIqC,GAAmBhrC,EAAK,WAAW,GAAK,CAAC6qC,GAAS7qC,EAAK,WAAW,EACpE,OAAO2iC,GAAgB,MAAM3iC,CAAI,EAEnC,GAAI6qC,GAAS7qC,CAAI,EACf,OAAO2iC,GAAgB3iC,EAAMA,EAAK,KAAK,MAAM,CAEjD,CACA,OAAI4oC,GAAYD,CAAS,EACnBoC,GAAO/qC,CAAI,EACN2iC,GAAgB,OAAO3iC,CAAI,EAE7B2iC,GAAgB,MAAM3iC,CAAI,EAE5B2iC,GAAgB,OAAO3iC,CAAI,CACpC,EACIqrC,GAAoB,SAAUnjC,EAAMojC,EAAU,CAChD,IAAIh1B,EAAcg1B,EAAS,YAC3B,OAAIh1B,GAAe00B,GAAmB10B,CAAW,EAC3Cu0B,GAASv0B,CAAW,EACfqsB,GAAgBrsB,EAAa,CAAC,EAE9BqsB,GAAgB,OAAOrsB,CAAW,EAGpCi1B,GAAkBZ,GAAW,SAAUhI,GAAgB,MAAM2I,CAAQ,EAAGpjC,CAAI,CAEvF,EACIqjC,GAAoB,SAAU5C,EAAW6C,EAAUtjC,EAAM,CAC3D,IAAIlI,EAAMsrC,EAAUG,EAChBC,EAA6B3J,EACjC,GAAI,CAAC+I,GAAY5iC,CAAI,GAAK,CAACsjC,EACzB,OAAO,KAET,GAAIA,EAAS,QAAQ7I,GAAgB,MAAMz6B,CAAI,CAAC,GAAKA,EAAK,WAExD,GADA65B,EAAgBY,GAAgB,MAAMz6B,EAAK,SAAS,EAChD0gC,GAAYD,CAAS,GAAKqC,GAAmB9iC,EAAK,SAAS,GAAK4iC,GAAY5iC,EAAK,SAAS,EAC5F,OAAO6iC,GAAO7iC,EAAK,SAAS,EAAIy6B,GAAgB,OAAOz6B,EAAK,SAAS,EAAI65B,OAG3EA,EAAgByJ,EAElB,IAAI1xC,EAAYioC,EAAc,UAAU,EACpCj2B,EAASi2B,EAAc,OAAO,EAClC,GAAI8I,GAAS/wC,CAAS,EAAG,CACvB,GAAI8uC,GAAYD,CAAS,GAAK78B,EAAS,EACrC,OAAO62B,GAAgB7oC,EAAW,EAAEgS,CAAM,EAE5C,GAAI48B,GAAWC,CAAS,GAAK78B,EAAShS,EAAU,OAC9C,OAAO6oC,GAAgB7oC,EAAW,EAAEgS,CAAM,EAE5C9L,EAAOlG,CACT,KAAO,CACL,GAAI8uC,GAAYD,CAAS,GAAK78B,EAAS,IACrCw/B,EAAWH,GAAYrxC,EAAWgS,EAAS,CAAC,EACxCk/B,GAAmBM,CAAQ,GAC7B,MAAI,CAACL,GAAWK,CAAQ,IACtBG,EAAY3C,GAASwC,EAAU3C,EAAWuC,GAA4BI,CAAQ,EAC1EG,GACEZ,GAASY,CAAS,EACb9I,GAAgB8I,EAAWA,EAAU,KAAK,MAAM,EAElD9I,GAAgB,MAAM8I,CAAS,EAGtCZ,GAASS,CAAQ,EACZ3I,GAAgB2I,EAAUA,EAAS,KAAK,MAAM,EAEhD3I,GAAgB,OAAO2I,CAAQ,EAG1C,GAAI5C,GAAWC,CAAS,GAAK78B,EAAShS,EAAU,WAAW,SACzDwxC,EAAWH,GAAYrxC,EAAWgS,CAAM,EACpCk/B,GAAmBM,CAAQ,GAC7B,OAAIP,GAAOO,CAAQ,EACVD,GAAkBnjC,EAAMojC,CAAQ,EAErC,CAACL,GAAWK,CAAQ,IACtBG,EAAY3C,GAASwC,EAAU3C,EAAWuC,GAA4BI,CAAQ,EAC1EG,GACEZ,GAASY,CAAS,EACb9I,GAAgB8I,EAAW,CAAC,EAE9B9I,GAAgB,OAAO8I,CAAS,EAGvCZ,GAASS,CAAQ,EACZ3I,GAAgB2I,EAAU,CAAC,EAE7B3I,GAAgB,MAAM2I,CAAQ,EAGzCtrC,EAAOsrC,GAAsBvJ,EAAc,QAAQ,CACrD,CACA,OAAI2G,GAAWC,CAAS,GAAK5G,EAAc,QAAQ,GAAK6G,GAAYD,CAAS,GAAK5G,EAAc,UAAU,KACxG/hC,EAAO8oC,GAAS9oC,EAAM2oC,EAAWt7C,EAAS,EAAI,EAAG6a,EAAM,EAAI,EACvDgjC,GAA2BlrC,EAAMkI,CAAI,GAChCkjC,GAA0BzC,EAAW3oC,CAAI,GAGpDsrC,EAAWxC,GAAS9oC,EAAM2oC,EAAWuC,GAA4BhjC,CAAI,EACrEwjC,EAA8BnkC,GAAS,KAAKjW,GAAOo9B,GAAW50B,EAAWoO,CAAI,EAAG0iC,EAAwB,CAAC,EACrGc,IAAgC,CAACJ,GAAY,CAACI,EAA4B,SAASJ,CAAQ,IACzF5C,GAAWC,CAAS,EACtB5G,EAAgBY,GAAgB,MAAM+I,CAA2B,EAEjE3J,EAAgBY,GAAgB,OAAO+I,CAA2B,EAE7D3J,GAELuJ,EACKF,GAA0BzC,EAAW2C,CAAQ,EAE/C,KACT,EACIK,GAAc,SAAUzjC,EAAM,CAChC,MAAO,CACL,KAAM,SAAU65B,EAAe,CAC7B,OAAOwJ,GAAkBZ,GAAW,SAAU5I,EAAe75B,CAAI,CACnE,EACA,KAAM,SAAU65B,EAAe,CAC7B,OAAOwJ,GAAkBZ,GAAW,UAAW5I,EAAe75B,CAAI,CACpE,CACF,CACF,EAEI0jC,GAAmB,SAAU/pC,EAASqG,EAAMhG,EAAO,CACrD,IAAI2pC,EAAWhqC,EAAU8gC,GAAgB,OAAOzgC,CAAK,EAAIygC,GAAgB,MAAMzgC,CAAK,EACpF,OAAO4pC,GAAajqC,EAASqG,EAAM2jC,CAAQ,CAC7C,EACIE,GAAe,SAAU/rC,EAAM,CACjC,OAAOuhB,GAAS,KAAKvhB,CAAI,EAAI2iC,GAAgB,OAAO3iC,CAAI,EAAI2iC,GAAgB,MAAM3iC,CAAI,CACxF,EACIgsC,GAAkB,SAAUH,EAAU,CACxC,OAAIlJ,GAAgB,eAAekJ,CAAQ,EAClCA,EAAS,OAAO,IAAM,EAEtBrO,GAAiBqO,EAAS,QAAQ,CAAC,CAE9C,EACII,GAAe,SAAUJ,EAAU,CACrC,GAAIlJ,GAAgB,eAAekJ,CAAQ,EAAG,CAC5C,IAAI/xC,EAAY+xC,EAAS,UAAU,EACnC,OAAOA,EAAS,OAAO,IAAM/xC,EAAU,KAAK,MAC9C,KACE,QAAO0jC,GAAiBqO,EAAS,QAAQ,EAAI,CAAC,CAElD,EACIK,GAA2B,SAAU58C,EAAMm7C,EAAI,CACjD,MAAO,CAAC9H,GAAgB,eAAerzC,CAAI,GAAK,CAACqzC,GAAgB,eAAe8H,CAAE,GAAKn7C,EAAK,QAAQ,IAAMm7C,EAAG,QAAQ,EAAI,CAC3H,EACI0B,GAAS,SAAUN,EAAU,CAC/B,MAAO,CAAClJ,GAAgB,eAAekJ,CAAQ,GAAKtqB,GAAS,KAAKsqB,EAAS,QAAQ,CAAC,CACtF,EACIO,GAAqB,SAAUvqC,EAASvS,EAAMm7C,EAAI,CACpD,OAAI5oC,EACK,CAACqqC,GAAyB58C,EAAMm7C,CAAE,GAAK,CAAC0B,GAAO78C,CAAI,GAAK28C,GAAa38C,CAAI,GAAK08C,GAAgBvB,CAAE,EAEhG,CAACyB,GAAyBzB,EAAIn7C,CAAI,GAAK08C,GAAgB18C,CAAI,GAAK28C,GAAaxB,CAAE,CAE1F,EACIqB,GAAe,SAAUjqC,EAASqG,EAAM+D,EAAK,CAC/C,IAAIqlB,EAASqa,GAAYzjC,CAAI,EAC7B,OAAO3Y,EAAO,KAAKsS,EAAUyvB,EAAO,KAAKrlB,CAAG,EAAIqlB,EAAO,KAAKrlB,CAAG,CAAC,CAClE,EACIogC,GAAW,SAAUxqC,EAASqG,EAAM5Y,EAAM,CAC5C,OAAOw8C,GAAajqC,EAASqG,EAAM5Y,CAAI,EAAE,KAAK,SAAUm7C,EAAI,CAC1D,OAAIxB,GAAc35C,EAAMm7C,EAAIviC,CAAI,GAAKkkC,GAAmBvqC,EAASvS,EAAMm7C,CAAE,EAChEqB,GAAajqC,EAASqG,EAAMuiC,CAAE,EAE9Bl7C,EAAO,KAAKk7C,CAAE,CAEzB,CAAC,CACH,EACI6B,GAAiB,SAAUzqC,EAASqG,EAAM5Y,EAAMi9C,EAAc,CAChE,OAAOF,GAASxqC,EAASqG,EAAM5Y,CAAI,EAAE,KAAK,SAAU2c,EAAK,CACvD,OAAOsgC,EAAatgC,CAAG,EAAIqgC,GAAezqC,EAASqG,EAAM+D,EAAKsgC,CAAY,EAAIh9C,EAAO,KAAK0c,CAAG,CAC/F,CAAC,CACH,EACIugC,GAAa,SAAU3qC,EAASnL,EAAS,CAC3C,IAAIwnB,EAAYrc,EAAUnL,EAAQ,WAAaA,EAAQ,UACvD,OAAI6qB,GAAS,OAAOrD,CAAS,EACpB3uB,EAAO,KAAKozC,GAAgBzkB,EAAWrc,EAAU,EAAIqc,EAAU,KAAK,MAAM,CAAC,EACzEA,EACLsf,GAAiBtf,CAAS,EACrB3uB,EAAO,KAAKsS,EAAU8gC,GAAgB,OAAOzkB,CAAS,EAAI6tB,GAAa7tB,CAAS,CAAC,EAEjF0tB,GAAiB/pC,EAASnL,EAASwnB,CAAS,EAG9C3uB,EAAO,KAAK,CAEvB,EACIk9C,GAAeh/C,EAAMq+C,GAAc,EAAI,EACvCY,GAAej/C,EAAMq+C,GAAc,EAAK,EACxCa,GAAc,CAChB,aAAcb,GACd,aAAcW,GACd,aAAcC,GACd,SAAUL,GACV,eAAgBC,GAChB,WAAYE,GACZ,gBAAiB/+C,EAAM++C,GAAY,EAAI,EACvC,eAAgB/+C,EAAM++C,GAAY,EAAK,CACzC,EAEII,GAAuB,SAAUlI,EAAU,CAC7C,OAAO,OAAOA,EAAS,OAAU,QACnC,EACImI,GAAkB,SAAUnI,EAAU,CACxC,OAAOA,EAAS,eAAe,KAAK,CACtC,EACIoI,GAAe,SAAUpI,EAAU,CACrC,OAAOA,EAAS,eAAe,IAAI,CACrC,EACIqI,GAAkB,SAAUrI,EAAU,CACxC,OAAOA,EAAS,eAAe,MAAM,CACvC,EACIsI,GAAiB,SAAUtI,EAAU,CACvC,OAAOx7B,GAAM,QAAQw7B,EAAS,KAAK,CACrC,EAEIuI,GAAW,SAAU55B,EAAKrT,EAAM,CAClC,OAAIuhB,GAAS,UAAUvhB,CAAI,GAAKqT,EAAI,QAAQrT,CAAI,GAAK,CAACA,EAAK,WAAa,CAACnL,GAAI,KAC3EmL,EAAK,UAAY,6BAEZA,CACT,EACIktC,GAA+B,SAAU75B,EAAKqxB,EAAU,CAC1D,IAAI5M,EAAK7rB,EACT,OAAA6rB,EAAMzkB,EAAI,UAAU,EACpBpH,EAAM63B,GAAUzwB,EAAI,QAAQ,EAAGqxB,EAAS,KAAK,EAC7C5M,EAAI,SAAS7rB,EAAI,UAAU,EAAGA,EAAI,OAAO,CAAC,EAC1CA,EAAM63B,GAAUzwB,EAAI,QAAQ,EAAGqxB,EAAS,GAAG,EAC3C5M,EAAI,OAAO7rB,EAAI,UAAU,EAAGA,EAAI,OAAO,CAAC,EACjC6rB,CACT,EACIqV,GAAa,SAAUntC,EAAM83B,EAAK,CACpC,IAAIgE,EAAW97B,EAAK,cAAc,eAAes7B,GAAK,IAAI,EAC1Dt7B,EAAK,YAAY87B,CAAQ,EACzBhE,EAAI,SAASgE,EAAU,CAAC,EACxBhE,EAAI,OAAOgE,EAAU,CAAC,CACxB,EACIzK,GAAU,SAAUrxB,EAAM,CAC5B,OAAOA,EAAK,cAAc,IAAM,EAClC,EACIotC,GAAuB,SAAUptC,EAAM83B,EAAK,CAC9C,OAAO6U,GAAY,eAAe3sC,CAAI,EAAE,KAAK,UAAY,CACvD,MAAO,EACT,EAAG,SAAUiM,EAAK,CAChB,OAAA6rB,EAAI,SAAS7rB,EAAI,UAAU,EAAGA,EAAI,OAAO,CAAC,EAC1C6rB,EAAI,OAAO7rB,EAAI,UAAU,EAAGA,EAAI,OAAO,CAAC,EACjC,EACT,CAAC,CACH,EACIohC,GAAyB,SAAUnlC,EAAMlI,EAAM83B,EAAK,CACtD,OAAIzG,GAAQrxB,CAAI,GAAK6lC,GAAwB39B,EAAMlI,CAAI,GACrDmtC,GAAWntC,EAAM83B,CAAG,EACb,IAEA,EAEX,EACIwV,GAAc,SAAUj6B,EAAKnR,EAAOwiC,EAAU5M,EAAK,CACrD,IAAIyM,EAAQG,EAASxiC,EAAQ,QAAU,KAAK,EACxCrR,EAAGmP,EAAM8L,EAAQvR,EACjB2N,EAAOmL,EAAI,QAAQ,EACvB,GAAIkxB,EAAO,CAET,IADAz4B,EAASy4B,EAAM,CAAC,EACXvkC,EAAOkI,EAAMrX,EAAI0zC,EAAM,OAAS,EAAG1zC,GAAK,EAAGA,IAAK,CAEnD,GADA0J,EAAWyF,EAAK,WACZqtC,GAAuBnlC,EAAMlI,EAAM83B,CAAG,EACxC,MAAO,GAET,GAAIyM,EAAM1zC,CAAC,EAAI0J,EAAS,OAAS,EAC/B,OAAI8yC,GAAuBnlC,EAAMlI,EAAM83B,CAAG,EACjC,GAEFsV,GAAqBptC,EAAM83B,CAAG,EAEvC93B,EAAOzF,EAASgqC,EAAM1zC,CAAC,CAAC,CAC1B,CACImP,EAAK,WAAa,IACpB8L,EAAS,KAAK,IAAIy4B,EAAM,CAAC,EAAGvkC,EAAK,UAAU,MAAM,GAE/CA,EAAK,WAAa,IACpB8L,EAAS,KAAK,IAAIy4B,EAAM,CAAC,EAAGvkC,EAAK,WAAW,MAAM,GAEhDkC,EACF41B,EAAI,SAAS93B,EAAM8L,CAAM,EAEzBgsB,EAAI,OAAO93B,EAAM8L,CAAM,CAE3B,CACA,MAAO,EACT,EACIyhC,GAAkB,SAAUvtC,EAAM,CACpC,OAAOuhB,GAAS,OAAOvhB,CAAI,GAAKA,EAAK,KAAK,OAAS,CACrD,EACIwtC,GAAkB,SAAUn6B,EAAK8W,EAAQua,EAAU,CACrD,IAAInsB,EAASlF,EAAI,IAAIqxB,EAAS,GAAK,IAAMva,CAAM,EAAGnqB,EAAMsC,EAAKmrC,EAAMpU,EAC/DqU,EAAOhJ,EAAS,KAChB5qC,EAAWgS,EACf,GAAIyM,EAAQ,CAwCV,GAvCAvY,EAAOuY,EAAO,WACV4R,IAAW,SACRujB,EAGCn1B,EAAO,cAAc,GACvBvY,EAAOuY,EAAO,WACdjW,EAAM,GACGirC,GAAgBh1B,EAAO,WAAW,GAC3CvY,EAAOuY,EAAO,YACdjW,EAAM,GACGirC,GAAgBh1B,EAAO,eAAe,GAC/CvY,EAAOuY,EAAO,gBACdjW,EAAMiW,EAAO,gBAAgB,KAAK,SAElCvY,EAAOuY,EAAO,WACdjW,EAAM+Q,EAAI,UAAUkF,CAAM,EAAI,GAbhCjW,EAAM+Q,EAAI,UAAUkF,CAAM,EAgB5Bze,EAAYkG,EACZ8L,EAASxJ,IAEJorC,EAGCn1B,EAAO,cAAc,GACvBvY,EAAOuY,EAAO,WACdjW,EAAM,GACGirC,GAAgBh1B,EAAO,eAAe,GAC/CvY,EAAOuY,EAAO,gBACdjW,EAAMiW,EAAO,gBAAgB,KAAK,SAElCvY,EAAOuY,EAAO,WACdjW,EAAM+Q,EAAI,UAAUkF,CAAM,GAV5BjW,EAAM+Q,EAAI,UAAUkF,CAAM,EAa5Bze,EAAYkG,EACZ8L,EAASxJ,GAEP,CAACorC,EAAM,CAQT,IAPArU,EAAO9gB,EAAO,gBACdk1B,EAAOl1B,EAAO,YACdrP,GAAM,KAAKA,GAAM,KAAKqP,EAAO,UAAU,EAAG,SAAUvY,EAAM,CACpDuhB,GAAS,OAAOvhB,CAAI,IACtBA,EAAK,UAAYA,EAAK,UAAU,QAAQ,UAAW,EAAE,EAEzD,CAAC,EACMuY,EAASlF,EAAI,IAAIqxB,EAAS,GAAK,IAAMva,CAAM,GAChD9W,EAAI,OAAOkF,EAAQ,EAAI,EAErB8gB,GAAQoU,GAAQpU,EAAK,WAAaoU,EAAK,UAAYlsB,GAAS,OAAO8X,CAAI,GAAK,CAACxkC,GAAI,QACnFyN,EAAM+2B,EAAK,UAAU,OACrBA,EAAK,WAAWoU,EAAK,SAAS,EAC9Bp6B,EAAI,OAAOo6B,CAAI,EAEb3zC,EAAYu/B,EACZvtB,EAASxJ,EAMf,CACA,OAAO/S,EAAO,KAAKozC,GAAgB7oC,EAAWgS,CAAM,CAAC,CACvD,KACE,QAAOvc,EAAO,KAAK,CAEvB,EACIo+C,GAAM,SAAUC,EAAIC,EAAI,CAC1B,OAAOD,EAAG,OAAO,EAAIA,EAAKC,CAC5B,EACIC,GAAe,SAAUz6B,EAAKqxB,EAAU,CAC1C,IAAI5M,EAAMzkB,EAAI,UAAU,EACxB,OAAIi6B,GAAYj6B,EAAK,GAAMqxB,EAAU5M,CAAG,GAAKwV,GAAYj6B,EAAK,GAAOqxB,EAAU5M,CAAG,EACzEvoC,EAAO,KAAKuoC,CAAG,EAEfvoC,EAAO,KAAK,CAEvB,EACIw+C,GAAY,SAAU16B,EAAKqxB,EAAU,CACvC,IAAI8G,EAAWgC,GAAgBn6B,EAAK,QAASqxB,CAAQ,EACjDsJ,EAASR,GAAgBn6B,EAAK,MAAOqxB,CAAQ,EACjD,OAAOhF,GAAM8L,EAAUmC,GAAIK,EAAQxC,CAAQ,EAAG,SAAUyC,EAAMC,EAAM,CAClE,IAAIpW,EAAMzkB,EAAI,UAAU,EACxB,OAAAykB,EAAI,SAASmV,GAAS55B,EAAK46B,EAAK,UAAU,CAAC,EAAGA,EAAK,OAAO,CAAC,EAC3DnW,EAAI,OAAOmV,GAAS55B,EAAK66B,EAAK,UAAU,CAAC,EAAGA,EAAK,OAAO,CAAC,EAClDpW,CACT,CAAC,CACH,EACIqW,GAAiB,SAAU96B,EAAKqxB,EAAU,CAC5C,OAAOn1C,EAAO,KAAK8jB,EAAI,OAAOqxB,EAAS,IAAI,EAAEA,EAAS,KAAK,CAAC,EAAE,IAAI,SAAUp5B,EAAK,CAC/E,IAAIwsB,EAAMzkB,EAAI,UAAU,EACxB,OAAAykB,EAAI,WAAWxsB,CAAG,EACXwsB,CACT,CAAC,CACH,EACIsW,GAAY,SAAU3J,EAAWC,EAAU,CAC7C,IAAIrxB,EAAMoxB,EAAU,IACpB,GAAIC,EAAU,CACZ,GAAIsI,GAAetI,CAAQ,EACzB,OAAOoJ,GAAaz6B,EAAKqxB,CAAQ,EAC5B,GAAIkI,GAAqBlI,CAAQ,EACtC,OAAOn1C,EAAO,KAAK29C,GAA6B75B,EAAKqxB,CAAQ,CAAC,EACzD,GAAIoI,GAAapI,CAAQ,EAC9B,OAAOqJ,GAAU16B,EAAKqxB,CAAQ,EACzB,GAAIqI,GAAgBrI,CAAQ,EACjC,OAAOyJ,GAAe96B,EAAKqxB,CAAQ,EAC9B,GAAImI,GAAgBnI,CAAQ,EACjC,OAAOn1C,EAAO,KAAKm1C,EAAS,GAAG,CAEnC,CACA,OAAOn1C,EAAO,KAAK,CACrB,EACI8+C,GAAkB,CAAE,QAASD,EAAU,EAEvCE,GAAgB,SAAU7J,EAAW/0C,EAAM48B,EAAY,CACzD,OAAOoZ,GAAY,YAAYjB,EAAW/0C,EAAM48B,CAAU,CAC5D,EACIiiB,GAAiB,SAAU9J,EAAWC,EAAU,CAClD2J,GAAgB,QAAQ5J,EAAWC,CAAQ,EAAE,KAAK,SAAU5M,EAAK,CAC/D2M,EAAU,OAAO3M,CAAG,CACtB,CAAC,CACH,EACI0W,GAAmB,SAAUxuC,EAAM,CACrC,OAAOuhB,GAAS,UAAUvhB,CAAI,GAAKA,EAAK,UAAY,QAAUA,EAAK,aAAa,eAAe,IAAM,UACvG,EACIyuC,GAAY,CACd,YAAaH,GACb,eAAgBC,GAChB,eAAgBC,EAClB,EAEIE,GAAgB,SAAU1uC,EAAM,CAClC,OAAOA,GAAQ,UAAU,KAAKA,EAAK,QAAQ,CAC7C,EACI2uC,GAAY,SAAUt7B,EAAKoxB,EAAW3M,EAAK,CAC7C,IAAIhsB,EAASgsB,EAAI,YACbh+B,EAAYg+B,EAAI,eAAgBxG,EAAQtxB,EAAMoL,EAClD,GAAI,EAAA0sB,EAAI,iBAAmBA,EAAI,cACzB4W,GAAc5W,EAAI,eAAe,WAAWA,EAAI,WAAW,CAAC,IAI9Dh+B,EAAU,WAAa,GAUzB,IATAsR,EAAQtR,EAAU,WACdgS,EAASV,EAAM,QACjBtR,EAAYsR,EAAMU,CAAM,EACxBwlB,EAAS,IAAIrT,GAAWnkB,EAAWuZ,EAAI,UAAUvZ,EAAWuZ,EAAI,OAAO,CAAC,IAExEvZ,EAAYsR,EAAMA,EAAM,OAAS,CAAC,EAClCkmB,EAAS,IAAIrT,GAAWnkB,EAAWuZ,EAAI,UAAUvZ,EAAWuZ,EAAI,OAAO,CAAC,EACxEie,EAAO,KAAK,EAAI,GAEbtxB,EAAOsxB,EAAO,QAAQ,EAAGtxB,EAAMA,EAAOsxB,EAAO,KAAK,EACrD,GAAItxB,EAAK,WAAa,GAAK,CAAC4uC,GAAiB5uC,CAAI,EAAG,CAClD83B,EAAI,SAAS93B,EAAM,CAAC,EACpBykC,EAAU,OAAO3M,CAAG,EACpB,MACF,EAGN,EACI+W,GAA0B,SAAU7uC,EAAMytC,EAAMqB,EAAK,CACvD,GAAI9uC,GAEF,IADAytC,EAAOA,EAAO,cAAgB,kBACzBztC,EAAO8uC,EAAM9uC,EAAOA,EAAKytC,CAAI,EAAGztC,EAAMA,EAAOA,EAAKytC,CAAI,EACzD,GAAIztC,EAAK,WAAa,GAAK,CAAC4uC,GAAiB5uC,CAAI,EAC/C,OAAOA,EAIf,EACI+uC,GAAgB,SAAUx3C,EAAQtE,EAAM,CAC1C,OAAIA,EAAK,WACPA,EAAOA,EAAK,UAEP,CAAC,CAACsE,EAAO,OAAO,qBAAqB,EAAEtE,EAAK,YAAY,CAAC,CAClE,EACIg2B,GAAU,SAAU+lB,EAAI9uC,EAAQuW,EAAO,CACzC,OAAOu4B,EAAG,OAAO,aAAa9uC,EAAQuW,CAAK,CAC7C,EACIm4B,GAAmB,SAAU5uC,EAAM,CACrC,OAAOA,GAAQA,EAAK,WAAa,GAAK,kBAAkB,KAAKA,EAAK,SAAS,CAC7E,EACIivC,GAAc,SAAU3hD,EAAO4hD,EAAM,CACvC,OAAI,OAAO5hD,GAAU,SACnBA,EAAQA,EAAM4hD,CAAI,EACTA,IACT5hD,EAAQA,EAAM,QAAQ,UAAW,SAAUoa,EAAKzU,EAAM,CACpD,OAAOi8C,EAAKj8C,CAAI,GAAKyU,CACvB,CAAC,GAEIpa,CACT,EACI6hD,GAAO,SAAUC,EAAMhkB,EAAM,CAC/B,OAAAgkB,EAAOA,GAAQ,GACfhkB,EAAOA,GAAQ,GACfgkB,EAAO,IAAMA,EAAK,UAAYA,GAC9BhkB,EAAO,IAAMA,EAAK,UAAYA,GACvBgkB,EAAK,YAAY,IAAMhkB,EAAK,YAAY,CACjD,EACIikB,GAAsB,SAAUh8B,EAAK/lB,EAAO2F,EAAM,CACpD,OAAIA,IAAS,SAAWA,IAAS,qBAC/B3F,EAAQ+lB,EAAI,MAAM/lB,CAAK,GAErB2F,IAAS,cAAgB3F,IAAU,MACrCA,EAAQ,QAEN2F,IAAS,eACX3F,EAAQA,EAAM,QAAQ,UAAW,EAAE,EAAE,QAAQ,QAAS,GAAG,GAEpD,GAAKA,CACd,EACI4gC,GAAW,SAAU7a,EAAKrT,EAAM/M,EAAM,CACxC,OAAOo8C,GAAoBh8B,EAAKA,EAAI,SAASrT,EAAM/M,CAAI,EAAGA,CAAI,CAChE,EACIq8C,GAAoB,SAAUj8B,EAAKrT,EAAM,CAC3C,IAAIuvC,EACJ,OAAAl8B,EAAI,UAAUrT,EAAM,SAAUrR,EAAG,CAC/B,OAAA4gD,EAAal8B,EAAI,SAAS1kB,EAAG,iBAAiB,EACvC4gD,GAAcA,IAAe,MACtC,CAAC,EACMA,CACT,EACIC,GAAe,SAAUn8B,EAAKrT,EAAM1B,EAAU,CAChD,OAAO+U,EAAI,WAAWrT,EAAM1B,EAAU+U,EAAI,QAAQ,CAAC,CACrD,EACIo8B,GAAc,CAChB,cAAef,GACf,UAAWC,GACX,wBAAyBE,GACzB,YAAaE,GACb,QAAS9lB,GACT,iBAAkB2lB,GAClB,YAAaK,GACb,KAAME,GACN,oBAAqBE,GACrB,SAAUnhB,GACV,kBAAmBohB,GACnB,WAAYE,EACd,EAEIE,GAAmBjB,GAAU,eAC7BkB,GAAeF,GAAY,WAAYG,GAAqBH,GAAY,iBAAkBI,GAAgBJ,GAAY,YACtHK,GAAW,SAAU9vC,EAAM8L,EAAQ,CAIrC,IAHI,OAAOA,EAAW,MACpBA,EAAS9L,EAAK,WAAa,EAAIA,EAAK,OAASA,EAAK,WAAW,QAExDA,GAAQA,EAAK,cAAc,GAChCA,EAAOA,EAAK,WAAW8L,CAAM,EACzB9L,IACF8L,EAAS9L,EAAK,WAAa,EAAIA,EAAK,OAASA,EAAK,WAAW,QAGjE,MAAO,CACL,KAAMA,EACN,OAAQ8L,CACV,CACF,EACIikC,GAA4B,SAAUC,EAAcC,EAAW,CACjE,IAAIC,EAAOJ,GAASE,EAAcC,CAAS,EAC3C,GAAIC,EAAK,KAAM,CACb,KAAOA,EAAK,MAAQA,EAAK,SAAW,GAAKA,EAAK,KAAK,iBACjDA,EAAOJ,GAASI,EAAK,KAAK,eAAe,EAEvCA,EAAK,MAAQA,EAAK,OAAS,GAAKA,EAAK,KAAK,WAAa,GAAKA,EAAK,KAAK,UAAU,OAAOA,EAAK,OAAS,CAAC,IAAM,KAC1GA,EAAK,OAAS,IAChBF,EAAeE,EAAK,KACpBF,EAAa,UAAUE,EAAK,OAAS,CAAC,EAG5C,CACA,OAAOF,CACT,EACIG,GAAY,SAAUnwC,EAAM,CAC9B,OAAOA,EAAK,WAAa,MAAQA,EAAK,aAAa,gBAAgB,GAAK,CAACA,EAAK,WAChF,EACIowC,GAA4B,SAAU/8B,EAAKrT,EAAM,CAEnD,QADIE,EAASF,EACNE,GAAQ,CACb,GAAIA,EAAO,WAAa,GAAKmT,EAAI,mBAAmBnT,CAAM,EACxD,OAAOmT,EAAI,mBAAmBnT,CAAM,IAAM,QAAUA,EAASF,EAE/DE,EAASA,EAAO,UAClB,CACA,OAAOF,CACT,EACIqwC,GAAY,SAAUnuC,EAAO2R,EAAQ7T,EAAM8L,EAAQ,CACrD,IAAIG,EAAKy2B,EACLh7B,EAAM1H,EAAK,UACf,OAAI,OAAO8L,EAAW,MACpBA,EAAS5J,EAAQwF,EAAI,OAAS,GAE5BxF,GACF+J,EAAMvE,EAAI,YAAY,IAAKoE,CAAM,EACjC42B,EAAOh7B,EAAI,YAAY,OAAQoE,CAAM,EACrCG,EAAMA,EAAMy2B,EAAOz2B,EAAMy2B,EACrBz2B,IAAQ,IAAM,CAAC4H,IAAW5H,EAAMH,GAAU,CAAC5J,IAAU+J,GAAOvE,EAAI,QAClEuE,MAGFA,EAAMvE,EAAI,QAAQ,IAAKoE,CAAM,EAC7B42B,EAAOh7B,EAAI,QAAQ,OAAQoE,CAAM,EACjCG,EAAMA,IAAQ,KAAOy2B,IAAS,IAAMz2B,EAAMy2B,GAAQz2B,EAAMy2B,GAEnDz2B,CACT,EACIqkC,GAAmB,SAAUj9B,EAAK1a,EAAMmB,EAAWgS,EAAQ5J,EAAO2R,EAAQ,CAC5E,IAAIyd,EAAQtxB,EAAMiM,EAAKskC,EACvB,GAAIz2C,EAAU,WAAa,EAAG,CAE5B,GADAmS,EAAMokC,GAAUnuC,EAAO2R,EAAQ/Z,EAAWgS,CAAM,EAC5CG,IAAQ,GACV,MAAO,CACL,UAAWnS,EACX,OAAQmS,CACV,EAEFskC,EAAez2C,CACjB,CAEA,IADAw3B,EAAS,IAAIrT,GAAWnkB,EAAWuZ,EAAI,UAAUvZ,EAAWuZ,EAAI,OAAO,GAAK1a,CAAI,EACzEqH,EAAOsxB,EAAOpvB,EAAQ,OAAS,MAAM,EAAE,GAC5C,GAAIlC,EAAK,WAAa,GAAK,CAAC0vC,GAAiB1vC,EAAK,UAAU,GAG1D,GAFAuwC,EAAevwC,EACfiM,EAAMokC,GAAUnuC,EAAO2R,EAAQ7T,CAAI,EAC/BiM,IAAQ,GACV,MAAO,CACL,UAAWjM,EACX,OAAQiM,CACV,UAEOoH,EAAI,QAAQrT,CAAI,GAAKyvC,GAAY,KAAKzvC,EAAM,IAAI,EACzD,MAGJ,GAAIuwC,EACF,OAAIruC,EACF4J,EAAS,EAETA,EAASykC,EAAa,OAEjB,CACL,UAAWA,EACX,OAAQzkC,CACV,CAEJ,EACI0kC,GAAuB,SAAUn9B,EAAKo9B,EAAQ3Y,EAAKh+B,EAAWwS,EAAa,CAC7E,IAAI2J,EAASplB,EAAGmb,EAAG0kC,EAKnB,IAJI52C,EAAU,WAAa,GAAKA,EAAU,UAAU,SAAW,GAAKA,EAAUwS,CAAW,IACvFxS,EAAYA,EAAUwS,CAAW,GAEnC2J,EAAU05B,GAAat8B,EAAKvZ,CAAS,EAChCjJ,EAAI,EAAGA,EAAIolB,EAAQ,OAAQplB,IAC9B,IAAKmb,EAAI,EAAGA,EAAIykC,EAAO,OAAQzkC,IAE7B,GADA0kC,EAAYD,EAAOzkC,CAAC,EAChB,gBAAe0kC,GAAaA,EAAU,YAAc5Y,EAAI,YAGxDzkB,EAAI,GAAG4C,EAAQplB,CAAC,EAAG6/C,EAAU,QAAQ,EACvC,OAAOz6B,EAAQplB,CAAC,EAItB,OAAOiJ,CACT,EACI62C,GAAoB,SAAUp5C,EAAQk5C,EAAQ32C,EAAWwS,EAAa,CACxE,IAAItM,EACAqT,EAAM9b,EAAO,IACb2Q,EAAOmL,EAAI,QAAQ,EAIvB,GAHKo9B,EAAO,CAAC,EAAE,UACbzwC,EAAOqT,EAAI,UAAUvZ,EAAW22C,EAAO,CAAC,EAAE,MAAOvoC,CAAI,GAEnD,CAAClI,EAAM,CACT,IAAI4wC,EAAYv9B,EAAI,UAAUvZ,EAAW,UAAU,EACnDkG,EAAOqT,EAAI,UAAUvZ,EAAU,WAAa,EAAIA,EAAU,WAAaA,EAAW,SAAUkG,EAAM,CAChG,OAAOA,IAASkI,GAAQ2nC,GAAct4C,EAAQyI,CAAI,CACpD,EAAG4wC,CAAS,CACd,CAIA,GAHI5wC,GAAQywC,EAAO,CAAC,EAAE,UACpBzwC,EAAO2vC,GAAat8B,EAAKrT,EAAM,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAKA,GAEtD,CAACA,EAEH,IADAA,EAAOlG,EACAkG,EAAKsM,CAAW,GAAK,CAAC+G,EAAI,QAAQrT,EAAKsM,CAAW,CAAC,IACxDtM,EAAOA,EAAKsM,CAAW,EACnB,CAAAmjC,GAAY,KAAKzvC,EAAM,IAAI,IAA/B,CAKJ,OAAOA,GAAQlG,CACjB,EACI+2C,GAAsB,SAAUx9B,EAAKo9B,EAAQrR,EAAgBC,EAAa2Q,EAAcC,EAAW/tC,EAAO,CAC5G,IAAIpI,EAAWoG,EAAQmM,EAASC,EAAapE,EAI7C,GAHApO,EAAYoG,EAASgC,EAAQk9B,EAAiB4Q,EAC9C1jC,EAAcpK,EAAQ,kBAAoB,cAC1CgG,EAAOmL,EAAI,QAAQ,EACfvZ,EAAU,WAAa,GAAK,CAAC81C,GAAmB91C,CAAS,IACvDoI,EAAQm9B,EAAc,EAAI4Q,EAAYn2C,EAAU,UAAU,QAC5D,OAAOA,EAGX,OAAa,CACX,GAAI,CAAC22C,EAAO,CAAC,EAAE,cAAgBp9B,EAAI,QAAQnT,CAAM,EAC/C,OAAOA,EAET,IAAKmM,EAAUnM,EAAOoM,CAAW,EAAGD,EAASA,EAAUA,EAAQC,CAAW,EACxE,GAAI,CAACojC,GAAiBrjC,CAAO,GAAK,CAACujC,GAAmBvjC,CAAO,GAAK,CAAC8jC,GAAU9jC,CAAO,EAClF,OAAOnM,EAGX,GAAIA,IAAWgI,GAAQhI,EAAO,aAAegI,EAAM,CACjDpO,EAAYoG,EACZ,KACF,CACAA,EAASA,EAAO,UAClB,CACA,OAAOpG,CACT,EACIg3C,GAAY,SAAUv5C,EAAQugC,EAAK2Y,EAAQ58B,EAAQ,CACrD,IAAIk9B,EAAU3R,EAAiBtH,EAAI,eAAgBuH,EAAcvH,EAAI,YAAakY,EAAelY,EAAI,aAAcmY,EAAYnY,EAAI,UAC/HzkB,EAAM9b,EAAO,IACjB,OAAI6nC,EAAe,WAAa,GAAKA,EAAe,cAAc,IAChEA,EAAiBE,GAAQF,EAAgBC,CAAW,EAChDD,EAAe,WAAa,IAC9BC,EAAc,IAGd2Q,EAAa,WAAa,GAAKA,EAAa,cAAc,IAC5DA,EAAe1Q,GAAQ0Q,EAAclY,EAAI,UAAYmY,EAAYA,EAAY,CAAC,EAC1ED,EAAa,WAAa,IAC5BC,EAAYD,EAAa,UAAU,SAGvC5Q,EAAiBgR,GAA0B/8B,EAAK+rB,CAAc,EAC9D4Q,EAAeI,GAA0B/8B,EAAK28B,CAAY,GACtDN,GAAiBtQ,EAAe,UAAU,GAAKsQ,GAAiBtQ,CAAc,KAChFA,EAAiBsQ,GAAiBtQ,CAAc,EAAIA,EAAiBA,EAAe,WAChFtH,EAAI,UACNsH,EAAiBA,EAAe,iBAAmBA,EAEnDA,EAAiBA,EAAe,aAAeA,EAE7CA,EAAe,WAAa,IAC9BC,EAAcvH,EAAI,UAAYsH,EAAe,OAAS,KAGtDsQ,GAAiBM,EAAa,UAAU,GAAKN,GAAiBM,CAAY,KAC5EA,EAAeN,GAAiBM,CAAY,EAAIA,EAAeA,EAAa,WACxElY,EAAI,UACNkY,EAAeA,EAAa,aAAeA,EAE3CA,EAAeA,EAAa,iBAAmBA,EAE7CA,EAAa,WAAa,IAC5BC,EAAYnY,EAAI,UAAY,EAAIkY,EAAa,SAG7ClY,EAAI,YACNiZ,EAAWT,GAAiBj9B,EAAK9b,EAAO,QAAQ,EAAG6nC,EAAgBC,EAAa,GAAMxrB,CAAM,EACxFk9B,IACF3R,EAAiB2R,EAAS,UAC1B1R,EAAc0R,EAAS,QAEzBA,EAAWT,GAAiBj9B,EAAK9b,EAAO,QAAQ,EAAGy4C,EAAcC,EAAW,GAAOp8B,CAAM,EACrFk9B,IACFf,EAAee,EAAS,UACxBd,EAAYc,EAAS,SAGrBN,EAAO,CAAC,EAAE,SACZT,EAAen8B,EAASm8B,EAAeD,GAA0BC,EAAcC,CAAS,IAEtFQ,EAAO,CAAC,EAAE,QAAUA,EAAO,CAAC,EAAE,iBAC5B,CAACA,EAAO,CAAC,EAAE,QAAWrR,EAAe,WAAa,GAAKC,IAAgB,KACzED,EAAiByR,GAAoBx9B,EAAKo9B,EAAQrR,EAAgBC,EAAa2Q,EAAcC,EAAW,EAAI,IAE1G,CAACQ,EAAO,CAAC,EAAE,QAAWT,EAAa,WAAa,GAAKC,IAAcD,EAAa,UAAU,UAC5FA,EAAea,GAAoBx9B,EAAKo9B,EAAQrR,EAAgBC,EAAa2Q,EAAcC,EAAW,EAAK,IAG3GQ,EAAO,CAAC,EAAE,UAAYA,EAAO,CAAC,EAAE,SAAW,IAAS,CAACA,EAAO,CAAC,EAAE,SACjErR,EAAiBoR,GAAqBn9B,EAAKo9B,EAAQ3Y,EAAKsH,EAAgB,iBAAiB,EACzF4Q,EAAeQ,GAAqBn9B,EAAKo9B,EAAQ3Y,EAAKkY,EAAc,aAAa,IAE/ES,EAAO,CAAC,EAAE,OAASA,EAAO,CAAC,EAAE,YAC/BrR,EAAiBuR,GAAkBp5C,EAAQk5C,EAAQrR,EAAgB,iBAAiB,EACpF4Q,EAAeW,GAAkBp5C,EAAQk5C,EAAQT,EAAc,aAAa,EACxES,EAAO,CAAC,EAAE,QACPp9B,EAAI,QAAQ+rB,CAAc,IAC7BA,EAAiByR,GAAoBx9B,EAAKo9B,EAAQrR,EAAgBC,EAAa2Q,EAAcC,EAAW,EAAI,GAEzG58B,EAAI,QAAQ28B,CAAY,IAC3BA,EAAea,GAAoBx9B,EAAKo9B,EAAQrR,EAAgBC,EAAa2Q,EAAcC,EAAW,EAAK,KAI7G7Q,EAAe,WAAa,IAC9BC,EAAchsB,EAAI,UAAU+rB,CAAc,EAC1CA,EAAiBA,EAAe,YAE9B4Q,EAAa,WAAa,IAC5BC,EAAY58B,EAAI,UAAU28B,CAAY,EAAI,EAC1CA,EAAeA,EAAa,YAEvB,CACL,eAAgB5Q,EAChB,YAAaC,EACb,aAAc2Q,EACd,UAAWC,CACb,CACF,EACIe,GAAc,CAAE,UAAWF,EAAU,EAErCG,GAAS/nC,GAAM,KACfgoC,GAAc,SAAUp3C,EAAW8M,EAAO,CAC5C,IAAI68B,EAAa3pC,EAAU,WAC3B,OAAA8M,IACIA,EAAQ68B,EAAW,OAAS,EAC9B78B,EAAQ68B,EAAW,OAAS,EACnB78B,EAAQ,IACjBA,EAAQ,GAEH68B,EAAW78B,CAAK,GAAK9M,CAC9B,EACIq3C,GAAS,SAAU99B,EAAKykB,EAAKrhC,EAAU,CACzC,IAAI2oC,EAAiBtH,EAAI,eACrBuH,EAAcvH,EAAI,YAClBkY,EAAelY,EAAI,aACnBmY,EAAYnY,EAAI,UAChBX,EACAia,EACAL,EACA/wC,EACAE,EACAmxC,EACAjmC,EAEJ,GADAA,EAAQiI,EAAI,OAAO,6CAA6C,EAC5DjI,EAAM,OAAS,EAAG,CACpB6lC,GAAO7lC,EAAO,SAAUpL,GAAM,CAC5BvJ,EAAS,CAACuJ,EAAI,CAAC,CACjB,CAAC,EACD,MACF,CACA,IAAIsxC,EAAU,SAAUlmC,GAAO,CAC7B,IAAIpL,GACJ,OAAAA,GAAOoL,GAAM,CAAC,EACVpL,GAAK,WAAa,GAAKA,KAASo/B,GAAkBC,GAAer/B,GAAK,UAAU,QAClFoL,GAAM,OAAO,EAAG,CAAC,EAEnBpL,GAAOoL,GAAMA,GAAM,OAAS,CAAC,EACzB6kC,IAAc,GAAK7kC,GAAM,OAAS,GAAKpL,KAASgwC,GAAgBhwC,GAAK,WAAa,GACpFoL,GAAM,OAAOA,GAAM,OAAS,EAAG,CAAC,EAE3BA,EACT,EACImmC,GAAkB,SAAUvxC,GAAM/M,GAAMu+C,GAAS,CAEnD,QADIH,GAAW,CAAC,EACTrxC,IAAQA,KAASwxC,GAASxxC,GAAOA,GAAK/M,EAAI,EAC/Co+C,GAAS,KAAKrxC,EAAI,EAEpB,OAAOqxC,EACT,EACII,GAAe,SAAUzxC,GAAMkI,GAAM,CACvC,EAAG,CACD,GAAIlI,GAAK,aAAekI,GACtB,OAAOlI,GAETA,GAAOA,GAAK,UACd,OAASA,GACX,EACI0xC,GAAe,SAAUxzB,GAAWszB,GAAS/D,GAAM,CACrD,IAAInhC,GAAcmhC,GAAO,cAAgB,kBACzC,IAAKztC,EAAOke,GAAWhe,EAASF,EAAK,WAAYA,GAAQA,IAASwxC,GAASxxC,EAAOE,EAChFA,EAASF,EAAK,WACdqxC,EAAWE,GAAgBvxC,IAASke,GAAYle,EAAOA,EAAKsM,EAAW,EAAGA,EAAW,EACjF+kC,EAAS,SACN5D,IACH4D,EAAS,QAAQ,EAEnB56C,EAAS66C,EAAQD,CAAQ,CAAC,EAGhC,EAOA,GANIjS,EAAe,WAAa,GAAKA,EAAe,cAAc,IAChEA,EAAiBA,EAAe,WAAWC,CAAW,GAEpD2Q,EAAa,WAAa,GAAKA,EAAa,cAAc,IAC5DA,EAAekB,GAAYlB,EAAcC,CAAS,GAEhD7Q,IAAmB4Q,EACrB,OAAOv5C,EAAS66C,EAAQ,CAAClS,CAAc,CAAC,CAAC,EAG3C,IADAjI,EAAW9jB,EAAI,mBAAmB+rB,EAAgB4Q,CAAY,EACzDhwC,EAAOo/B,EAAgBp/B,EAAMA,EAAOA,EAAK,WAAY,CACxD,GAAIA,IAASgwC,EACX,OAAO0B,GAAatS,EAAgBjI,EAAU,EAAI,EAEpD,GAAIn3B,IAASm3B,EACX,KAEJ,CACA,IAAKn3B,EAAOgwC,EAAchwC,EAAMA,EAAOA,EAAK,WAAY,CACtD,GAAIA,IAASo/B,EACX,OAAOsS,GAAa1B,EAAc7Y,CAAQ,EAE5C,GAAIn3B,IAASm3B,EACX,KAEJ,CACAia,EAAaK,GAAarS,EAAgBjI,CAAQ,GAAKiI,EACvD2R,EAAWU,GAAazB,EAAc7Y,CAAQ,GAAK6Y,EACnD0B,GAAatS,EAAgBgS,EAAY,EAAI,EAC7CC,EAAWE,GAAgBH,IAAehS,EAAiBgS,EAAaA,EAAW,YAAa,cAAeL,IAAaf,EAAee,EAAS,YAAcA,CAAQ,EACtKM,EAAS,QACX56C,EAAS66C,EAAQD,CAAQ,CAAC,EAE5BK,GAAa1B,EAAce,CAAQ,CACrC,EACIY,GAAY,CAAE,KAAMR,EAAO,EAE3BS,GAAY,UAAY,CAC1B,MAAO,QACT,EAEA,SAASC,GAAWlqC,EAAI1U,EAAM,CAC5B,IAAI0gB,EAAM,SAAUjd,EAAS,CAC3B,GAAI,CAACiR,EAAGjR,CAAO,EACb,MAAM,IAAI,MAAM,gBAAkBzD,EAAO,eAAiBA,EAAO,OAAO,EAE1E,OAAO6+C,EAAUp7C,CAAO,EAAE,MAAM,EAAE,CACpC,EACIo7C,EAAY,SAAUp7C,EAAS,CACjC,OAAOiR,EAAGjR,CAAO,EAAInH,EAAO,KAAKmH,EAAQ,IAAI,EAAE,SAAS,EAAInH,EAAO,KAAK,CAC1E,EACIikB,EAAM,SAAU9c,EAASpJ,EAAO,CAClC,GAAI,CAACqa,EAAGjR,CAAO,EACb,MAAM,IAAI,MAAM,oBAAsBzD,EAAO,eAAiBA,EAAO,OAAO,EAE9EyD,EAAQ,IAAI,EAAE,UAAYpJ,CAC5B,EACA,MAAO,CACL,IAAKqmB,EACL,UAAWm+B,EACX,IAAKt+B,CACP,CACF,CAEA,IAAIu+B,GAAMF,GAAUp/B,EAAQ,MAAM,EAC9Bu/B,GAAQ,SAAUt7C,EAAS,CAC7B,OAAOq7C,GAAI,IAAIr7C,CAAO,CACxB,EAEIu7C,GAAc,SAAUv1C,EAAM,CAChC,OAAO+V,EAAO/V,CAAI,GAAKs1C,GAAMt1C,CAAI,IAAMk1C,GAAU,CACnD,EACIrzC,GAAU,SAAUhH,EAAQmF,EAAMw1C,EAAU7wC,EAAU,CACxD,OAAOnB,GAAOxD,CAAI,EAAE,KAAK,UAAY,CACnC,MAAO,UACT,EAAG,SAAUwD,EAAQ,CACnB,OAAImB,IAAa,MAAQ4wC,GAAYv1C,CAAI,EAChC,QACE07B,GAAa17B,CAAI,EACnB,WACEkpC,GAAYlpC,CAAI,EAClB,QACE,CAAC+yC,GAAY,QAAQl4C,EAAQ26C,EAAU7wC,CAAQ,GAAK,CAACouC,GAAY,QAAQl4C,EAAQtE,GAAKiN,CAAM,EAAGgyC,CAAQ,EACzG,gBAEA,OAEX,CAAC,CACH,EAEIC,GAA8B,SAAUra,EAAK,CAC/C,OAAOA,EAAI,eAAe,WAAa,GAAKA,EAAI,eAAe,UAAU,QAAUA,EAAI,aAAeA,EAAI,eAAe,UAAUA,EAAI,WAAW,IAAM,MAC1J,EACIsa,GAAgB,SAAU76C,EAAQugC,EAAK,CACzC,IAAIrnC,EAAIugD,GAAY,UAAUz5C,EAAQugC,EAAK,CAAC,CAAE,OAAQ,EAAK,CAAC,EAAGqa,GAA4Bra,CAAG,CAAC,EAC/FA,EAAI,SAASrnC,EAAE,eAAgBA,EAAE,WAAW,EAC5CqnC,EAAI,OAAOrnC,EAAE,aAAcA,EAAE,SAAS,EACtC8G,EAAO,UAAU,OAAOugC,CAAG,CAC7B,EACIua,GAAiB,SAAUC,EAAMhZ,EAAIzB,EAAgB0a,EAAU,CACjE,IAAIC,EAAKlZ,EAAG,IAAKpB,EAAMsa,IAAO,OAASnY,GAAS,gBAAgB,EAAImY,EAAIh6C,EAAOwhC,GAAOV,EAAI,CAAC,KAAK,CAAC,EAC7FmZ,EAAShhC,GAAQ,QAAQ,OAAQ6gC,CAAI,EACzC3b,GAAM8b,EAAQhb,GAAW,CAAC,EAC1BjkB,GAAIi/B,EAAQ,GAAK9a,GAAiB,EAAGO,CAAG,EACxC1kB,GAAIi/B,EAAQ,GAAK/a,GAAe,EAAGG,CAAc,EACjD,IAAI6a,EAAKH,EAASra,EAAK1/B,CAAI,EAAGm6C,EAAKD,EAAG,WAAY51C,EAAa61C,IAAO,OAAS,CAAC,EAAIA,EAAIC,EAAKF,EAAG,QAASjY,EAAUmY,IAAO,OAAS,CAAC,EAAIA,EACxI,OAAAn/B,GAAOg/B,EAAQ31C,CAAU,EACzB09B,GAAMiY,EAAQhY,CAAO,EACdgY,CACT,EACII,GAAW,SAAUt7C,EAAQugC,EAAKD,EAAgB0a,EAAU/5C,EAAM,CACpE,IAAIs6C,EAAc,CAAC,EACfL,EAASJ,GAAe96C,EAAO,OAAO,EAAGiB,EAAMq/B,EAAgB0a,CAAQ,EACvEjoC,EAAU4rB,GAAK3mC,EAAO,KAAK,CAAC,EAC5BwjD,EAAgB,UAAY,CAC9BzoC,EAAQ,IAAI/a,EAAO,KAAK,CAAC,CAC3B,EACIyjD,EAAmB,UAAY,CACjC,OAAO1oC,EAAQ,IAAI,EAAE,WAAW,UAAY,CAC1C,IAAI6C,EAAKmR,GAAQm0B,CAAM,EACvB,OAAAK,EAAY,KAAK3lC,CAAE,EACnB7C,EAAQ,IAAI/a,EAAO,KAAK4d,CAAE,CAAC,EACpBA,CACT,CAAC,CACH,EACI8lC,EAAkB,SAAUnuC,EAAO,CACrC9T,GAAK8T,EAAOouC,CAAc,CAC5B,EACIA,EAAiB,SAAUx2C,EAAM,CACnC,IAAIy2C,EAAM50C,GAAQhH,EAAQmF,EAAM,OAAQzJ,GAAKyJ,CAAI,CAAC,EAClD,OAAQy2C,EAAK,CACb,IAAK,gBAAiB,CAClBJ,EAAc,EACd,IAAIld,GAAat7B,GAASmC,CAAI,EAC9Bu2C,EAAgBpd,EAAU,EAC1Bkd,EAAc,EACd,KACF,CACF,IAAK,QAAS,CACV,IAAI3kB,GAAI4kB,EAAiB,EACzB1d,GAAO54B,EAAM0xB,EAAC,EACd,KACF,CACF,IAAK,WACL,IAAK,WACL,IAAK,QACL,CACF,EACIglB,EAAe,SAAUhoC,EAAO,CAClC,IAAItG,EAAQ/T,GAAIqa,EAAOqG,GAAQ,OAAO,EACtCwhC,EAAgBnuC,CAAK,CACvB,EACA,OAAA6sC,GAAU,KAAKp6C,EAAO,IAAKugC,EAAK,SAAU1sB,EAAO,CAC/C2nC,EAAc,EACdK,EAAahoC,CAAK,CACpB,CAAC,EACM0nC,CACT,EACIO,GAAuB,SAAU97C,EAAQtE,EAAMopB,EAAU7jB,EAAM,CACjEjB,EAAO,YAAY,SAAS,UAAY,CACtC,IAAI+7C,EAAa/7C,EAAO,UAAU,OAAO,EAIzC,GAHI+7C,EAAW,WACblB,GAAc76C,EAAQ+7C,CAAU,EAE9B/7C,EAAO,UAAU,OAAO,EAAE,UAAW,CACvC,IAAI+S,EAAU+nC,GAAe96C,EAAO,OAAO,EAAGiB,EAAMvF,EAAMopB,EAAS,QAAQ,EAC3Eye,GAAMxwB,EAAS,MAAM,EACrB/S,EAAO,UAAU,OAAO,EAAE,WAAW+S,EAAQ,IAAI,CAAC,EAClD/S,EAAO,UAAU,OAAO+S,EAAQ,IAAI,CAAC,CACvC,KAAO,CACL,IAAIo6B,EAAWgB,GAAY,sBAAsBnuC,EAAO,UAAW,EAAK,EACpEugC,EAAMvgC,EAAO,UAAU,OAAO,EAClCs7C,GAASt7C,EAAQugC,EAAK7kC,EAAMopB,EAAS,SAAU7jB,CAAI,EACnDjB,EAAO,UAAU,eAAemtC,CAAQ,CAC1C,CACF,CAAC,CACH,EAEA,SAAS6O,GAAWh8C,EAAQ,CAC1B,IAAImhC,EAAWmB,GAAS,EACxBL,GAAQjiC,EAAQmhC,CAAQ,EACxB,IAAI8a,EAAU/a,GAAMlhC,CAAM,EAC1B,MAAO,CACL,SAAU,SAAUtE,EAAMopB,EAAU,CAClCqc,EAAS,SAASzlC,EAAMopB,CAAQ,CAClC,EACA,SAAU,SAAUppB,EAAMuF,EAAM,CAC9BkgC,EAAS,OAAOzlC,CAAI,EAAE,KAAK,SAAUopB,EAAU,CAC7Cg3B,GAAqB97C,EAAQtE,EAAMopB,EAAU7jB,CAAI,CACnD,CAAC,CACH,EACA,kBAAmB,SAAUvF,EAAMwD,EAAU,CAC3C+8C,EAAQ,YAAYvgD,EAAMwD,CAAQ,CACpC,EACA,OAAQ,SAAUxD,EAAM,CACtB2kC,GAASrgC,EAAQhI,EAAO,KAAK0D,CAAI,CAAC,EAAE,KAAK,SAAUqmC,EAAI,CACrD,IAAIt4B,EAAWs4B,EAAG,SAClBtoC,GAAKgQ,EAAU40B,EAAM,CACvB,CAAC,CACH,EACA,OAAQ,SAAU3iC,EAAM,CACtB,IAAIslC,EAAYF,GAAQ9gC,EAAQtE,CAAI,EACpC,OAAO6f,GAAMylB,EAAW,SAAUzzB,EAAO,CACvC,OAAO/T,GAAI+T,EAAO,SAAUpI,EAAM,CAChC,OAAOA,EAAK,IAAI,CAClB,CAAC,CACH,CAAC,CACH,CACF,CACF,CAEA,IAAI+2C,GAAkB,SAAUzzC,EAAM,CACpC,OAAOA,EAAK,YAAcA,EAAK,aAAeA,EAAK,SACrD,EACI0zC,GAAgB,SAAU1zC,EAAM,CAClC,OAAOA,EAAK,OAAS,MAAQA,EAAK,QAAU,MAC9C,EACI2zC,GAAqB,SAAUxvB,EAAQnkB,EAAM,CAC/C,IAAI4zC,EAAgBzvB,EAAO,iBAAiB,EAC5C,OAAOyvB,EAAc5zC,EAAK,IAAI,GAAKyzC,GAAgBzzC,CAAI,GAAK0zC,GAAc1zC,EAAK,UAAU,CAC3F,EACI6zC,GAAyB,SAAU1vB,EAAQnkB,EAAM,CACnD,IAAI8zC,EAAmB3vB,EAAO,oBAAoB,EAClD,OAAOnkB,IAASA,EAAK,QAAQ8zC,CAAgB,GAAKH,GAAmBxvB,EAAQnkB,CAAI,EACnF,EACI+zC,GAAiB,SAAU5vB,EAAQ8W,EAAU,CAC/C,IAAItkB,EAAaskB,EAAS,WACtBrkB,EAAYqkB,EAAS,UAUzB,OATItkB,GAAcA,EAAW,OAAS,SACpCA,EAAaA,EAAW,MAEtBC,GAAaA,EAAU,KAAK,IAAI,IAAM,eACxCA,EAAYA,EAAU,MAEpBi9B,GAAuB1vB,EAAQvN,CAAS,IAC1CA,EAAYA,EAAU,MAEpB,CAACD,GAAcA,IAAeC,EACzB,GAEFD,EAAW,OAAS,MAAQA,EAAW,OAAS,IACzD,EACIq9B,GAAqB,SAAUC,EAAa,CAC9C,IAAIt9B,EAAas9B,EAAY,WACzBr9B,EAAYq9B,EAAY,UAC5B,OAAIt9B,GAAcA,EAAW,WAAa,QACxCA,EAAW,WAAW,YAAYA,CAAU,EAE1CC,GAAaA,EAAU,KAAO,cAChCA,EAAU,WAAW,YAAYA,CAAS,EAErCq9B,CACT,EACIC,GAAgB,SAAU7gC,EAAK8gC,EAAYlZ,EAAU,CACvD,IAAIrxB,EAAOuqC,EAAW,UAAUlZ,CAAQ,EACpCgZ,EAAc5gC,EAAI,eAAezJ,CAAI,EACzC,OAAOoqC,GAAmBC,CAAW,CACvC,EACIG,GAAc,SAAU9oC,EAAK,CAC/B,OAAOpC,GAAM,KAAKoC,EAAI,WAAY,SAAUmL,EAAO,CACjD,OAAOA,EAAM,WAAa,IAC5B,CAAC,CACH,EACI49B,GAAY,SAAUr0C,EAAM,CAC9B,OAAOA,EAAK,OAAS,QAAUuhB,GAAS,KAAKvhB,CAAI,CACnD,EACIs0C,GAAmB,SAAUt0C,EAAM,CACrC,OAAOA,GAAQA,EAAK,YAAcA,EAAK,aAAeA,EAAK,WAAaq0C,GAAUr0C,EAAK,UAAU,CACnG,EACIu0C,GAAkB,SAAUjpC,EAAK,CACnC,MAAO,CAACA,EAAI,YAAcgpC,GAAiBhpC,CAAG,CAChD,EACIkpC,GAAgB,SAAU/lB,EAAM,CAClC,OAAOA,EAAK,OAAS,GAAK8lB,GAAgB9lB,EAAKA,EAAK,OAAS,CAAC,CAAC,EAAIA,EAAK,MAAM,EAAG,EAAE,EAAIA,CACzF,EACIgmB,GAAc,SAAUphC,EAAKrT,EAAM,CACrC,IAAI00C,EAAcrhC,EAAI,UAAUrT,EAAMqT,EAAI,OAAO,EACjD,OAAOqhC,GAAeA,EAAY,WAAa,KAAOA,EAAc,IACtE,EACIC,GAAkB,SAAUthC,EAAKrT,EAAM,CACzC,MAAO,CAAC,CAACy0C,GAAYphC,EAAKrT,CAAI,CAChC,EACI40C,GAAW,SAAU7Y,EAAYjE,EAAK,CACxC,IAAI+c,EAAY/c,EAAI,WAAW,EAC3Bgd,EAAWhd,EAAI,WAAW,EAC9B,OAAA+c,EAAU,eAAe9Y,CAAU,EACnC+Y,EAAS,YAAY/Y,CAAU,EACxB,CACL8Y,EAAU,cAAc,EACxBC,EAAS,cAAc,CACzB,CACF,EACIC,GAAc,SAAU/0C,EAAMme,EAAU,CAC1C,IAAI62B,EAAWrS,GAAgB,OAAO3iC,CAAI,EACtCi1C,EAActJ,GAAYxtB,CAAQ,EAClC+2B,EAAcD,EAAY,KAAKD,CAAQ,EAC3C,OAAOE,EAAcA,EAAY,QAAQ,EAAI,IAC/C,EACIC,GAAa,SAAUn1C,EAAMme,EAAU,CACzC,IAAI62B,EAAWrS,GAAgB,MAAM3iC,CAAI,EACrCi1C,EAActJ,GAAYxtB,CAAQ,EAClC+2B,EAAcD,EAAY,KAAKD,CAAQ,EAC3C,OAAOE,EAAcA,EAAY,QAAQ,EAAI,IAC/C,EACIE,GAAe,SAAUp9C,EAAQy2B,EAAMtQ,EAAU2Z,EAAK,CACxD,IAAIllC,EAAQgiD,GAAS58C,EAAQ8/B,CAAG,EAC5B3I,EAAYn3B,EAAO,WACvB,OAAAm3B,EAAU,aAAav8B,EAAM,CAAC,EAAGoF,CAAM,EACvCkR,GAAM,KAAKulB,EAAM,SAAU4mB,EAAI,CAC7BlmB,EAAU,aAAakmB,EAAIr9C,CAAM,CACnC,CAAC,EACDm3B,EAAU,aAAav8B,EAAM,CAAC,EAAGoF,CAAM,EACvCm3B,EAAU,YAAYn3B,CAAM,EACrBm9C,GAAW1mB,EAAKA,EAAK,OAAS,CAAC,EAAGtQ,CAAQ,CACnD,EACIm3B,GAAe,SAAUt9C,EAAQy2B,EAAMtQ,EAAU,CACnD,IAAIgR,EAAYn3B,EAAO,WACvB,OAAAkR,GAAM,KAAKulB,EAAM,SAAUnjB,EAAK,CAC9B6jB,EAAU,aAAa7jB,EAAKtT,CAAM,CACpC,CAAC,EACM+8C,GAAY/8C,EAAQmmB,CAAQ,CACrC,EACIuS,GAAc,SAAU14B,EAAQy2B,EAAMtQ,EAAU9K,EAAK,CACvD,OAAAA,EAAI,YAAYob,EAAK,QAAQ,EAAGz2B,CAAM,EAC/Bm9C,GAAW1mB,EAAK,CAAC,EAAGtQ,CAAQ,CACrC,EACIo3B,GAAgB,SAAUpB,EAAY9gC,EAAKykB,EAAKmD,EAAU,CAC5D,IAAIgZ,EAAcC,GAAc7gC,EAAK8gC,EAAYlZ,CAAQ,EACrDua,EAAWf,GAAYphC,EAAKykB,EAAI,cAAc,EAC9C2d,EAASjB,GAAcJ,GAAYH,EAAY,UAAU,CAAC,EAC1DyB,EAAY,EAAGC,EAAM,EACrBx3B,EAAW9K,EAAI,QAAQ,EACvBuiC,EAAO,SAAU9L,EAAU,CAC7B,IAAIkL,EAAWrS,GAAgB,eAAe7K,CAAG,EAC7Cmd,EAActJ,GAAYt4B,EAAI,QAAQ,CAAC,EACvCwiC,EAAS/L,IAAa4L,EAAYT,EAAY,KAAKD,CAAQ,EAAIC,EAAY,KAAKD,CAAQ,EAC5F,OAAOa,EAASpB,GAAYphC,EAAKwiC,EAAO,QAAQ,CAAC,IAAML,EAAW,EACpE,EACA,OAAII,EAAKF,CAAS,EACTJ,GAAaE,EAAUC,EAAQt3B,CAAQ,EACrCy3B,EAAKD,CAAG,EACVjlB,GAAY8kB,EAAUC,EAAQt3B,EAAU9K,CAAG,EAE7C+hC,GAAaI,EAAUC,EAAQt3B,EAAU2Z,CAAG,CACrD,EACIge,GAAa,CACf,eAAgB/B,GAChB,cAAewB,GACf,gBAAiBZ,GACjB,cAAeH,GACf,UAAWJ,EACb,EAEI2B,GAAS7sC,GAAM,KACf8sC,GAAe,SAAU3iC,EAAK,CAChC,KAAK,QAAU,SAAUm2B,EAAOC,EAAO,CACrC,GAAID,EAAM,WAAaC,EAAM,SAC3B,MAAO,GAET,IAAIpc,EAAa,SAAUrtB,EAAM,CAC/B,IAAIi2C,EAAU,CAAC,EACf,OAAAF,GAAO1iC,EAAI,WAAWrT,CAAI,EAAG,SAAU+C,EAAM,CAC3C,IAAI9P,EAAO8P,EAAK,SAAS,YAAY,EACjC9P,EAAK,QAAQ,GAAG,IAAM,GAAKA,IAAS,SAAWA,EAAK,QAAQ,OAAO,IAAM,IAC3EgjD,EAAQhjD,CAAI,EAAIogB,EAAI,UAAUrT,EAAM/M,CAAI,EAE5C,CAAC,EACMgjD,CACT,EACIC,EAAiB,SAAUC,EAAMC,EAAM,CACzC,IAAI9oD,EAAO2F,EACX,IAAKA,KAAQkjD,EACX,GAAIA,EAAK,eAAeljD,CAAI,EAAG,CAK7B,GAJA3F,EAAQ8oD,EAAKnjD,CAAI,EACb,OAAO3F,EAAU,KAGjB6oD,EAAKljD,CAAI,IAAM3F,EACjB,MAAO,GAET,OAAO8oD,EAAKnjD,CAAI,CAClB,CAEF,IAAKA,KAAQmjD,EACX,GAAIA,EAAK,eAAenjD,CAAI,EAC1B,MAAO,GAGX,MAAO,EACT,EAIA,MAHI,CAACijD,EAAe7oB,EAAWmc,CAAK,EAAGnc,EAAWoc,CAAK,CAAC,GAGpD,CAACyM,EAAe7iC,EAAI,WAAWA,EAAI,UAAUm2B,EAAO,OAAO,CAAC,EAAGn2B,EAAI,WAAWA,EAAI,UAAUo2B,EAAO,OAAO,CAAC,CAAC,EACvG,GAEF,CAACgF,GAAU,eAAejF,CAAK,GAAK,CAACiF,GAAU,eAAehF,CAAK,CAC5E,CACF,EAEI4M,GAAkB,SAAU/qC,EAAK,CAGnC,QAFI/Q,EAAW,CAAC,EACZ+7C,EAAUhrC,EAAI,IAAI,EACfgrC,GACL/7C,EAAS,KAAKkX,GAAQ,QAAQ6kC,CAAO,CAAC,EACtCA,EAAUA,EAAQ,UAEpB,OAAO/7C,CACT,EACIg8C,GAAmB,SAAUjrC,EAAK,CACpC,IAAIkrC,EAASvf,GAAc3rB,EAAK,IAAI,EAChCoxB,EAAMprC,GAAO+kD,GAAgB/qC,CAAG,EAAE,MAAM,EAAE,EAAGgU,CAAI,EACjDk3B,EAAO,SAAW9Z,EAAI,QACxB1rC,GAAK0rC,EAAK/G,EAAQ,CAEtB,EACI8gB,GAAoB,SAAUnrC,EAAK,CACrCmqB,GAAMnqB,CAAG,EACT6pB,GAAO7pB,EAAKmG,GAAQ,SAAS,yBAAyB,CAAC,CACzD,EACIilC,GAAoB,SAAUprC,EAAK,CACrC,OAAOmH,EAAOnH,CAAG,EAAI0mC,GAAM1mC,CAAG,IAAM,OAASgU,EAAKhU,CAAG,CACvD,EACIqrC,GAAkB,SAAUrrC,EAAK,CACnC,OAAOha,GAAOiJ,GAAS+Q,CAAG,EAAGorC,EAAiB,EAAE,SAAW,CAC7D,EACIE,GAAsB,SAAUtrC,EAAK,CACvCsL,GAAUtL,CAAG,EAAE,KAAK,SAAUsL,EAAW,CACvCP,GAAYO,CAAS,EAAE,KAAK,SAAUigC,EAAsB,CACtDz3B,EAAQ9T,CAAG,GAAKgU,EAAK1I,CAAS,GAAKwI,EAAQy3B,CAAoB,GACjElhB,GAAS/e,CAAS,CAEtB,CAAC,CACH,CAAC,CACH,EACIkgC,GAAY,CACd,iBAAkBP,GAClB,kBAAmBE,GACnB,gBAAiBE,GACjB,oBAAqBC,EACvB,EAEIG,GAAY7tC,GAAM,QACtB,SAAS8tC,GAAQ36B,EAAU,CACzB,IAAIzS,EAAO,CAAC,EACRqtC,EAAQC,EAAcC,EAAavsB,EAAQwsB,EAC/C,OAAA/6B,EAAWA,GAAY,CAAC,EACxB46B,EAAS56B,EAAS,OAClB66B,EAAeH,GAAU16B,EAAS,eAAiB,EAAE,EACrD86B,EAAcJ,GAAU16B,EAAS,cAAgB,EAAE,EACnDuO,EAASnH,GAAS,cAAcpH,EAAS,iBAAmB,MAAOA,EAAS,QAAQ,EACpF+6B,EAAa/6B,EAAS,iBAAmB,OAClC,CACL,MAAO,SAAUppB,EAAMygB,EAAO+hB,EAAO,CACnC,IAAI5kC,EAAGgJ,EAAGkJ,EAAMzV,EAQhB,GAPI2pD,GAAUC,EAAajkD,CAAI,GAAK2W,EAAK,OAAS,IAChDtc,EAAQsc,EAAKA,EAAK,OAAS,CAAC,EACxBtc,EAAM,OAAS,GAAKA,IAAU;AAAA,GAChCsc,EAAK,KAAK;AAAA,CAAI,GAGlBA,EAAK,KAAK,IAAK3W,CAAI,EACfygB,EACF,IAAK7iB,EAAI,EAAGgJ,EAAI6Z,EAAM,OAAQ7iB,EAAIgJ,EAAGhJ,IACnCkS,EAAO2Q,EAAM7iB,CAAC,EACd+Y,EAAK,KAAK,IAAK7G,EAAK,KAAM,KAAM6nB,EAAO7nB,EAAK,MAAO,EAAI,EAAG,GAAG,EAG7D,CAAC0yB,GAAS2hB,EACZxtC,EAAKA,EAAK,MAAM,EAAI,IAEpBA,EAAKA,EAAK,MAAM,EAAI,MAElB6rB,GAASwhB,GAAUE,EAAYlkD,CAAI,GAAK2W,EAAK,OAAS,IACxDtc,EAAQsc,EAAKA,EAAK,OAAS,CAAC,EACxBtc,EAAM,OAAS,GAAKA,IAAU;AAAA,GAChCsc,EAAK,KAAK;AAAA,CAAI,EAGpB,EACA,IAAK,SAAU3W,EAAM,CACnB,IAAI3F,EACJsc,EAAK,KAAK,KAAM3W,EAAM,GAAG,EACrBgkD,GAAUE,EAAYlkD,CAAI,GAAK2W,EAAK,OAAS,IAC/Ctc,EAAQsc,EAAKA,EAAK,OAAS,CAAC,EACxBtc,EAAM,OAAS,GAAKA,IAAU;AAAA,GAChCsc,EAAK,KAAK;AAAA,CAAI,EAGpB,EACA,KAAM,SAAUjH,EAAM2R,EAAK,CACrB3R,EAAK,OAAS,IAChBiH,EAAKA,EAAK,MAAM,EAAI0K,EAAM3R,EAAOioB,EAAOjoB,CAAI,EAEhD,EACA,MAAO,SAAUA,EAAM,CACrBiH,EAAK,KAAK,YAAajH,EAAM,KAAK,CACpC,EACA,QAAS,SAAUA,EAAM,CACvBiH,EAAK,KAAK,OAAQjH,EAAM,KAAK,CAC/B,EACA,GAAI,SAAU1P,EAAM0P,EAAM,CACpBA,EACFiH,EAAK,KAAK,KAAM3W,EAAM,IAAK23B,EAAOjoB,CAAI,EAAG,IAAI,EAE7CiH,EAAK,KAAK,KAAM3W,EAAM,IAAI,EAExBgkD,GACFrtC,EAAK,KAAK;AAAA,CAAI,CAElB,EACA,QAAS,SAAUjH,EAAM,CACvBiH,EAAK,KAAK,YAAajH,EAAM,IAAKs0C,EAAS;AAAA,EAAO,EAAE,CACtD,EACA,MAAO,UAAY,CACjBrtC,EAAK,OAAS,CAChB,EACA,WAAY,UAAY,CACtB,OAAOA,EAAK,KAAK,EAAE,EAAE,QAAQ,MAAO,EAAE,CACxC,CACF,CACF,CAEA,SAASytC,GAAgBh7B,EAAU8H,EAAQ,CACrCA,IAAW,SACbA,EAASe,GAAO,GAElB,IAAIoyB,EAASN,GAAO36B,CAAQ,EAC5BA,EAAWA,GAAY,CAAC,EACxBA,EAAS,SAAW,aAAcA,EAAWA,EAAS,SAAW,GACjE,IAAIk7B,EAAY,SAAUv3C,EAAM,CAC9B,IAAIw3C,EAAUC,EACdA,EAAWp7B,EAAS,SACpBm7B,EAAW,CACT,EAAG,SAAUx3C,EAAM,CACjBs3C,EAAO,KAAKt3C,EAAK,MAAOA,EAAK,GAAG,CAClC,EACA,EAAG,SAAUA,EAAM,CACjBs3C,EAAO,QAAQt3C,EAAK,KAAK,CAC3B,EACA,EAAG,SAAUA,EAAM,CACjBs3C,EAAO,GAAGt3C,EAAK,KAAMA,EAAK,KAAK,CACjC,EACA,GAAI,SAAUA,EAAM,CAClBs3C,EAAO,QAAQt3C,EAAK,KAAK,CAC3B,EACA,EAAG,SAAUA,EAAM,CACjBs3C,EAAO,MAAMt3C,EAAK,KAAK,CACzB,EACA,GAAI,SAAUA,EAAM,CAClB,GAAIA,EAAOA,EAAK,WACd,GACE2I,EAAK3I,CAAI,QACFA,EAAOA,EAAK,KAEzB,CACF,EACAs3C,EAAO,MAAM,EACb,IAAI3uC,EAAO,SAAU3I,EAAM,CACzB,IAAI03C,EAAUF,EAASx3C,EAAK,IAAI,EAC5B/M,EAAMo+B,EAAS3d,EAAO+M,EAAUC,EAAWi3B,GAAa9mD,GAAGgJ,GAAG+9C,GAClE,GAAKF,EA4CHA,EAAQ13C,CAAI,MA5CA,CAIZ,GAHA/M,EAAO+M,EAAK,KACZqxB,EAAUrxB,EAAK,WACf0T,EAAQ1T,EAAK,WACTy3C,GAAY/jC,GAASA,EAAM,OAAS,IACtCikC,GAAc,CAAC,EACfA,GAAY,IAAM,CAAC,EACnBC,GAAczzB,EAAO,eAAenkB,EAAK,IAAI,EACzC43C,IAAa,CACf,IAAK/mD,GAAI,EAAGgJ,GAAI+9C,GAAY,gBAAgB,OAAQ/mD,GAAIgJ,GAAGhJ,KACzD4vB,EAAWm3B,GAAY,gBAAgB/mD,EAAC,EACpC4vB,KAAY/M,EAAM,MACpBgN,EAAYhN,EAAM,IAAI+M,CAAQ,EAC9Bk3B,GAAY,IAAIl3B,CAAQ,EAAIC,EAC5Bi3B,GAAY,KAAK,CACf,KAAMl3B,EACN,MAAOC,CACT,CAAC,GAGL,IAAK7vB,GAAI,EAAGgJ,GAAI6Z,EAAM,OAAQ7iB,GAAIgJ,GAAGhJ,KACnC4vB,EAAW/M,EAAM7iB,EAAC,EAAE,KACd4vB,KAAYk3B,GAAY,MAC5Bj3B,EAAYhN,EAAM,IAAI+M,CAAQ,EAC9Bk3B,GAAY,IAAIl3B,CAAQ,EAAIC,EAC5Bi3B,GAAY,KAAK,CACf,KAAMl3B,EACN,MAAOC,CACT,CAAC,GAGLhN,EAAQikC,EACV,CAGF,GADAL,EAAO,MAAMt3C,EAAK,KAAM0T,EAAO2d,CAAO,EAClC,CAACA,EAAS,CACZ,GAAIrxB,EAAOA,EAAK,WACd,GACE2I,EAAK3I,CAAI,QACFA,EAAOA,EAAK,MAEvBs3C,EAAO,IAAIrkD,CAAI,CACjB,CACF,CAGF,EACA,OAAI+M,EAAK,OAAS,GAAK,CAACqc,EAAS,MAC/B1T,EAAK3I,CAAI,EAETw3C,EAAS,EAAE,EAAEx3C,CAAI,EAEZs3C,EAAO,WAAW,CAC3B,EACA,MAAO,CAAE,UAAWC,CAAU,CAChC,CAEA,IAAIM,GAAgB,SAAUzW,EAAIE,EAAID,EAAIE,EAAI,CAC5C,IAAIzJ,EAAMhrC,EAAW,SAAS,YAAY,EAC1C,OAAAgrC,EAAI,SAASsJ,EAAIE,CAAE,EACnBxJ,EAAI,OAAOuJ,EAAIE,CAAE,EACVzJ,CACT,EACIggB,GAA+B,SAAUhgB,EAAK,CAChD,IAAI0T,EAAW7I,GAAgB,eAAe7K,CAAG,EAC7CkW,EAASrL,GAAgB,aAAa7K,CAAG,EACzC3Z,EAAW2Z,EAAI,wBACnB,OAAO6U,GAAY,aAAa,GAAOxuB,EAAU6vB,CAAM,EAAE,IAAI,SAAU+J,EAAW,CAChF,MAAI,CAAC9O,GAAcuC,EAAUwC,EAAQ7vB,CAAQ,GAAK8qB,GAAcuC,EAAUuM,EAAW55B,CAAQ,EACpF05B,GAAcrM,EAAS,UAAU,EAAGA,EAAS,OAAO,EAAGuM,EAAU,UAAU,EAAGA,EAAU,OAAO,CAAC,EAEhGjgB,CAEX,CAAC,EAAE,MAAMA,CAAG,CACd,EACIkgB,GAAY,SAAUlgB,EAAK,CAC7B,OAAOA,EAAI,UAAYA,EAAMggB,GAA6BhgB,CAAG,CAC/D,EACImgB,GAAkB,CAAE,UAAWD,EAAU,EAEzCE,GAAc,SAAUp+C,EAAWgS,EAAQ,CAC7C,OAAOyV,GAAS,OAAOznB,CAAS,GAAKA,EAAU,UAAUgS,EAAS,CAAC,IAAM,MAC3E,EACIqsC,GAAqB,SAAUrgB,EAAKluB,EAAM,CAC5C,IAAI9P,EAAWgS,EACfhS,EAAYg+B,EAAI,eAChBhsB,EAASgsB,EAAI,YACb,IAAIsgB,EAAiB,SAAU9rC,EAAa,CAC1C,OAAOxS,EAAUwS,CAAW,GAAKxS,EAAUwS,CAAW,EAAE,WAAa,CACvE,EACA,OAAIxS,EAAU,WAAa,IACrBgS,EAAS,EACXlC,EAAOA,EAAK,QAAQ,UAAW,GAAG,EACxBwuC,EAAe,iBAAiB,IAC1CxuC,EAAOA,EAAK,QAAQ,KAAM,QAAQ,GAEhCkC,EAAShS,EAAU,OACrB8P,EAAOA,EAAK,QAAQ,iBAAkB,GAAG,EAC/BwuC,EAAe,aAAa,IACtCxuC,EAAOA,EAAK,QAAQ,qBAAsB,QAAQ,IAG/CA,CACT,EACIyuC,GAAiC,SAAUvgB,EAAKxqC,EAAO,CACzD,IAAIwM,EAAWgS,EACf,OAAAhS,EAAYg+B,EAAI,eAChBhsB,EAASgsB,EAAI,YACTh+B,EAAU,WAAa,GAAKg+B,EAAI,YAC9Bh+B,EAAU,KAAKgS,CAAM,IAAM,QAC7BhS,EAAU,WAAWgS,EAAQ,CAAC,EACzB,cAAc,KAAKxe,CAAK,IAC3BA,GAAS,MAEFwM,EAAU,KAAKgS,EAAS,CAAC,IAAM,SACxChS,EAAU,WAAWgS,EAAS,EAAG,CAAC,EAC7B,cAAc,KAAKxe,CAAK,IAC3BA,EAAQ,IAAMA,KAIbA,CACT,EAEIgrD,GAAgB/2B,GAAS,eAAe,OAAO,EAC/Cg3B,GAAsB,SAAUhhD,EAAQmU,EAAS,CACnD,IAAIosB,EAAMvgC,EAAO,UAAU,OAAO,EAC9BuC,EAAYg+B,EAAI,eAChBhsB,EAASgsB,EAAI,YACbA,EAAI,WAAaogB,GAAYp+C,EAAWgS,CAAM,GAAKyV,GAAS,OAAOznB,CAAS,IAC9EA,EAAU,WAAWgS,EAAS,EAAG,GAAG,EACpChS,EAAU,WAAWgS,EAAQ,CAAC,EAC9BgsB,EAAI,SAASh+B,EAAWgS,CAAM,EAC9BgsB,EAAI,OAAOh+B,EAAWgS,CAAM,EAC5BvU,EAAO,UAAU,OAAOugC,CAAG,GAE7BvgC,EAAO,UAAU,WAAWmU,CAAO,CACrC,EACI8sC,GAAiB,SAAUjhD,EAAQjK,EAAOyuC,EAAY,CACxD,GAAIA,EAAW,aAAa,gBAAgB,IAAM,MAChDA,EAAW,WAAW,aAAaxkC,EAAO,IAAI,eAAejK,CAAK,EAAGyuC,CAAU,MAC1E,CACL,IAAI/7B,EAAO+7B,EAAW,WAClB0N,EAAQ1N,EAAW,UACnB,CAAC/7B,GAAQA,IAASypC,GAASzpC,EAAK,WAAa,KAC/CzI,EAAO,IAAI,QAAQwkC,EAAYzuC,CAAK,EAEpCirD,GAAoBhhD,EAAQjK,CAAK,CAErC,CACF,EACImrD,GAAuB,SAAUplC,EAAK/H,EAAK,CAC7C/b,EAAO,KAAK8jB,EAAI,UAAU/H,EAAK,OAAO,CAAC,EAAE,IAAImG,GAAQ,OAAO,EAAE,KAAKqlC,GAAU,mBAAmB,CAClG,EACI4B,GAA2B,SAAUnhD,EAAQohD,EAAO,CACtD,IAAIC,EAAqBrhD,EAAO,OAAO,sBAAsB,EACzD8b,EAAM9b,EAAO,IACjB,GAAIohD,EAAO,CACT,IAAIE,EAASthD,EAAO,QAAQ,EAAGuhD,EAAiB,IAAI9C,GAAa3iC,CAAG,EACpEnK,GAAM,KAAKmK,EAAI,OAAO,sBAAsB,EAAG,SAAUrT,EAAM,CAC7D,QAAS+4C,EAAW/4C,EAAK,WAAY+4C,GAAYA,IAAaF,EAAQE,EAAWA,EAAS,WACpFH,EAAmB54C,EAAK,SAAS,YAAY,CAAC,GAAK84C,EAAe,QAAQC,EAAU/4C,CAAI,GAC1FqT,EAAI,OAAOrT,EAAM,EAAI,CAG3B,CAAC,CACH,CACF,EACIg5C,GAAuB,SAAU/d,EAAU,CAE7C,QADIj7B,EAAOi7B,EACJj7B,EAAOA,EAAK,KAAK,GAClBA,EAAK,OAAS,GAChBA,EAAK,KAAK,oBAAqB,GAAG,CAGxC,EACIi5C,GAAwB,SAAU3tC,EAAK,CACzCpC,GAAM,KAAKoC,EAAI,qBAAqB,GAAG,EAAG,SAAUA,EAAK,CACvDA,EAAI,gBAAgB,mBAAmB,CACzC,CAAC,CACH,EACI4tC,GAAmB,SAAUl5C,EAAM,CACrC,MAAO,CAAC,CAACA,EAAK,aAAa,mBAAmB,CAChD,EACIm5C,GAAkB,SAAU5hD,EAAQyI,EAAM,CAC5C,OAAOA,GAAQ,CAACzI,EAAO,OAAO,sBAAsB,EAAEyI,EAAK,QAAQ,CACrE,EACIo5C,GAAwB,SAAU7hD,EAAQghB,EAAQ,CACpD,IAAI8gC,EAAwB3E,EAAa4E,EACrCjmC,EAAM9b,EAAO,IAAKktC,EAAYltC,EAAO,UACrCyI,EAAMypC,EACN8P,EAAgC,SAAUv5C,EAAM,CAElD,QADIkI,EAAO3Q,EAAO,QAAQ,EACnByI,GAAQA,IAASkI,EAAMlI,EAAOA,EAAK,WACxC,GAAIzI,EAAO,IAAI,mBAAmByI,CAAI,IAAM,QAC1C,OAAOA,EAGX,OAAO,IACT,EACA,GAAKuY,EAKL,IAFAhhB,EAAO,UAAU,eAAeghB,CAAM,EACtC8gC,EAAyBE,EAA8BhhC,CAAM,EACzD8gC,EAAwB,CAC1BhmC,EAAI,OAAOkF,CAAM,EACjBksB,EAAU,OAAO4U,CAAsB,EACvC,MACF,CACA,IAAIvhB,EAAMzkB,EAAI,UAAU,EACxBrT,EAAOuY,EAAO,gBACVvY,GAAQA,EAAK,WAAa,GAC5B83B,EAAI,SAAS93B,EAAMA,EAAK,UAAU,MAAM,EACnCnL,GAAI,KACP40C,EAAQlxB,EAAO,YACXkxB,GAASA,EAAM,WAAa,IAC9BzpC,EAAK,WAAWypC,EAAM,IAAI,EAC1BA,EAAM,WAAW,YAAYA,CAAK,MAItC3R,EAAI,eAAevf,CAAM,EACzBuf,EAAI,aAAavf,CAAM,GAEzB,IAAIihC,EAAmB,SAAU1hB,EAAK,CACpC,IAAIkd,EAAWrS,GAAgB,eAAe7K,CAAG,EAC7Cmd,EAActJ,GAAYp0C,EAAO,QAAQ,CAAC,EAE9C,GADAy9C,EAAWC,EAAY,KAAKD,CAAQ,EAChCA,EACF,OAAOA,EAAS,QAAQ,CAE5B,EACAN,EAAcrhC,EAAI,UAAUkF,EAAQlF,EAAI,OAAO,EAC/CA,EAAI,OAAOkF,CAAM,EACbm8B,GAAerhC,EAAI,QAAQqhC,CAAW,IACxCn9C,EAAO,EAAEm9C,CAAW,EAAE,MAAM,EAC5B5c,EAAI,SAAS4c,EAAa,CAAC,EAC3B5c,EAAI,OAAO4c,EAAa,CAAC,EACrB,CAAC4D,GAAc5D,CAAW,GAAK,CAACwE,GAAiBxE,CAAW,IAAM4E,EAAUE,EAAiB1hB,CAAG,IAClGA,EAAMwhB,EACNjmC,EAAI,OAAOqhC,CAAW,GAEtBrhC,EAAI,IAAIqhC,EAAarhC,EAAI,OAAO,KAAM,CAAE,iBAAkB,GAAI,CAAC,CAAC,GAGpEoxB,EAAU,OAAO3M,CAAG,EACtB,EACI2hB,GAAoB,SAAUliD,EAAQjK,EAAOosD,EAAS,CACxD,IAAIC,EAAQxF,EAAYpY,EAAY5d,EAAU8c,EAAU9tC,EACpDorB,EAAQuf,EAAK93B,EAAM45C,EAAcjB,EACjClU,EAAYltC,EAAO,UAAW8b,GAAM9b,EAAO,IAe/C,GAdI,QAAQ,KAAKjK,CAAK,IACpBA,EAAQ6qD,GAAmB1T,EAAU,OAAO,EAAGn3C,CAAK,GAEtDqsD,EAASpiD,EAAO,OAChBohD,EAAQe,EAAQ,MAChBvF,EAAakD,GAAe,CAAE,SAAU9/C,EAAO,SAAS,QAAS,EAAGA,EAAO,MAAM,EACjFqiD,EAAe,yEACfzsD,EAAO,CACL,QAASG,EACT,OAAQ,OACR,UAAW,GACX,MAAOosD,EAAQ,KACjB,EACAvsD,EAAOoK,EAAO,KAAK,mBAAoBpK,CAAI,EACvCA,EAAK,mBAAmB,EAAG,CAC7BoK,EAAO,KAAK,aAAc,CACxB,QAASpK,EAAK,QACd,OAAQ,OACR,UAAW,GACX,MAAOusD,EAAQ,KACjB,CAAC,EACD,MACF,CACApsD,EAAQH,EAAK,QACTG,EAAM,QAAQ,UAAU,IAAM,KAChCA,GAAS,YAEXA,EAAQA,EAAM,QAAQ,cAAessD,CAAY,EACjD9hB,EAAM2M,EAAU,OAAO,EACvB,IAAIoV,GAAe/hB,EAAI,iBAAmBA,EAAI,cAAgBA,EAAI,cAAc,EAAI,MAChFn/B,GAAOpB,EAAO,QAAQ,EACtBsiD,KAAiBlhD,IAAQ8rC,EAAU,YAAY,GAC7CpxB,GAAI,QAAQ1a,GAAK,UAAU,GAAKwgD,GAAgB5hD,EAAQoB,GAAK,UAAU,GAAK0a,GAAI,QAAQ1a,GAAK,UAAU,IACzGm/B,EAAMzkB,GAAI,UAAU,EACpBykB,EAAI,SAASn/B,GAAK,WAAY,CAAC,EAC/Bm/B,EAAI,OAAOn/B,GAAK,WAAY,CAAC,EAC7B8rC,EAAU,OAAO3M,CAAG,GAGnB2M,EAAU,YAAY,IACzBltC,EAAO,UAAU,OAAO0gD,GAAgB,UAAU1gD,EAAO,UAAU,OAAO,CAAC,CAAC,EAC5EA,EAAO,OAAO,EAAE,YAAY,SAAU,GAAO,IAAI,EACjDjK,EAAQ+qD,GAA+B9gD,EAAO,UAAU,OAAO,EAAGjK,CAAK,GAEzEyuC,EAAa0I,EAAU,QAAQ,EAC/B,IAAIqV,GAAa,CACf,QAAS/d,EAAW,SAAS,YAAY,EACzC,KAAM2d,EAAQ,KACd,OAAQ,EACV,EAEA,GADAze,EAAW0e,EAAO,MAAMrsD,EAAOwsD,EAAU,EACrCJ,EAAQ,QAAU,IAAQ5D,GAAW,eAAev+C,EAAO,OAAQ0jC,CAAQ,GAAK6a,GAAW,gBAAgBziC,GAAK0oB,CAAU,EAAG,CAC/HjE,EAAMge,GAAW,cAAc3B,EAAY9gC,GAAK9b,EAAO,UAAU,OAAO,EAAG0jC,CAAQ,EACnF1jC,EAAO,UAAU,OAAOugC,CAAG,EAC3BvgC,EAAO,KAAK,aAAcpK,CAAI,EAC9B,MACF,CAGA,GAFA6rD,GAAqB/d,CAAQ,EAC7Bj7B,EAAOi7B,EAAS,UACZj7B,EAAK,KAAK,IAAI,IAAM,cAEtB,IADAuY,EAASvY,EACJA,EAAOA,EAAK,KAAMA,EAAMA,EAAOA,EAAK,KAAK,EAAI,EAChD,GAAIA,EAAK,OAAS,GAAK,CAACqT,GAAI,QAAQrT,EAAK,IAAI,EAAG,CAC1CzI,EAAO,OAAO,aAAayI,EAAK,OAAO,KAAM,MAAM,GACrDA,EAAK,OAAO,OAAOuY,EAAQvY,EAAMA,EAAK,OAAS,IAAI,EAErD,KACF,EAIJ,GADAzI,EAAO,oBAAoB,wBAAwBwkC,CAAU,EACzD,CAAC+d,GAAW,QACdxsD,EAAQ6mD,EAAW,UAAUlZ,CAAQ,EACrCud,GAAejhD,EAAQjK,EAAOyuC,CAAU,MACnC,CASL,IARAwc,GAAoBhhD,EAAQqiD,CAAY,EACxC7d,EAAa0I,EAAU,QAAQ,EAC/BtmB,EAAW5mB,EAAO,QAAQ,EACtBwkC,EAAW,WAAa,EAC1BA,EAAa/7B,EAAOme,EAEpBne,EAAO+7B,EAEF/7B,IAASme,GACd4d,EAAa/7B,EACbA,EAAOA,EAAK,WAEd1S,EAAQyuC,IAAe5d,EAAWA,EAAS,UAAY9K,GAAI,aAAa0oB,CAAU,EAClFzuC,EAAQ6mD,EAAW,UAAUwF,EAAO,MAAMrsD,EAAM,QAAQ,oDAAqD,UAAY,CACvH,OAAO6mD,EAAW,UAAUlZ,CAAQ,CACtC,CAAC,CAAC,CAAC,EACCc,IAAe5d,EACjB9K,GAAI,QAAQ8K,EAAU7wB,CAAK,EAE3B+lB,GAAI,aAAa0oB,EAAYzuC,CAAK,CAEtC,CACAorD,GAAyBnhD,EAAQohD,CAAK,EACtCS,GAAsB7hD,EAAQ8b,GAAI,IAAI,YAAY,CAAC,EACnD4lC,GAAsB1hD,EAAO,QAAQ,CAAC,EACtCkhD,GAAqBlhD,EAAO,IAAKA,EAAO,UAAU,SAAS,CAAC,EAC5DA,EAAO,KAAK,aAAcpK,CAAI,EAC9BoK,EAAO,UAAU,CACnB,EACIwiD,GAAe,SAAUzsD,EAAO,CAClC,IAAIosD,EACJ,OAAI,OAAOpsD,GAAU,UACnBosD,EAAUxwC,GAAM,OAAO,CACrB,MAAO5b,EAAM,MACb,KAAM,CAAE,MAAOA,EAAM,KAAM,CAC7B,EAAGA,CAAK,EACD,CACL,QAASA,EAAM,QACf,QAASosD,CACX,GAEK,CACL,QAASpsD,EACT,QAAS,CAAC,CACZ,CACF,EACI0sD,GAAkB,SAAUziD,EAAQjK,EAAO,CAC7C,IAAImU,EAASs4C,GAAazsD,CAAK,EAC/BmsD,GAAkBliD,EAAQkK,EAAO,QAASA,EAAO,OAAO,CAC1D,EACIw4C,GAAgB,CAAE,cAAeD,EAAgB,EAEjDE,GAAY,4CACZC,GAAe,SAAUx3C,EAAM,CACjC,OAAOu3C,GAAU,KAAKv3C,CAAI,CAC5B,EAEIy3C,GAAiB,SAAU7iD,EAAQtE,EAAMozB,EAAc,CACzD,IAAI/4B,EAAQiK,EAAO,SAAStE,EAAMozB,CAAY,EAC9C,GAAI/4B,EAAM,QAAQ,GAAG,IAAM,GAAI,CAC7B,IAAI+sD,EAAU9iD,EAAO,SAAStE,EAAM,GAAI,MAAM,EAC9C,OAAOonD,EAAQ,eAAe9iD,EAAO,EAAE,EAAI8iD,EAAQ9iD,EAAO,EAAE,EAAI8uB,CAClE,KACE,QAAO/4B,CAEX,EACIgtD,GAAiB,SAAU/iD,EAAQ,CACrC,OAAOA,EAAO,SAAS,eAAgB,CAAC,CAAC,CAC3C,EACIgjD,GAAa,SAAUhjD,EAAQ,CACjC,OAAOA,EAAO,SAAS,UAAW,iBAAiB,CACrD,EACIijD,GAAqB,SAAUjjD,EAAQ,CACzC,OAAOA,EAAO,SAAS,oBAAqB,EAAE,CAChD,EACIkjD,GAAY,SAAUljD,EAAQ,CAChC,OAAO6iD,GAAe7iD,EAAQ,UAAW,SAAS,CACpD,EACImjD,GAAe,SAAUnjD,EAAQ,CACnC,OAAO6iD,GAAe7iD,EAAQ,aAAc,EAAE,CAChD,EACIojD,GAA2B,SAAUpjD,EAAQ,CAC/C,OAAOA,EAAO,SAAS,0BAA2B,EAAE,CACtD,EACIqjD,GAAmB,SAAUrjD,EAAQ,CACvC,OAAOA,EAAO,SAAS,YAAa,EAAI,CAC1C,EACIsjD,GAAqB,SAAUtjD,EAAQ,CACzC,GAAIA,EAAO,SAAS,mBAAoB,EAAK,EAC3C,MAAO,IAET,IAAIujD,EAAQvjD,EAAO,SAAS,oBAAqB,GAAG,EACpD,OAAOujD,IAAU,GAAQ,GAAKA,CAChC,EACIC,GAA0B,SAAUxjD,EAAQ,CAC9C,OAAOA,EAAO,SAAS,0BAA2B,CAAC,CAAC,CACtD,EACIyjD,GAAuB,SAAUzjD,EAAQ,CAC3C,OAAOA,EAAO,SAAS,sBAAuB,gCAAgC,CAChF,EACI0jD,GAAuB,SAAU1jD,EAAQ,CAC3C,OAAOA,EAAO,SAAS,sBAAuB,EAAE,CAClD,EACI2jD,GAAmB,SAAU3jD,EAAQ,CACvC,OAAOA,EAAO,SAAS,cAAe,EAAI,CAC5C,EACI4jD,GAAiC,SAAU5jD,EAAQ,CACrD,OAAOA,EAAO,SAAS,+BAAgC,EAAK,CAC9D,EACI6jD,GAAqB,SAAU7jD,EAAQ,CACzC,OAAO2R,GAAM,QAAQ3R,EAAO,SAAS,yBAA0B,EAAE,CAAC,CACpE,EACI8jD,GAAqB,SAAU9jD,EAAQ,CACzC,OAAO2R,GAAM,QAAQ3R,EAAO,SAAS,oBAAqB,EAAE,CAAC,CAC/D,EACI+jD,GAAyB,SAAU/jD,EAAQ,CAC7C,OAAOA,EAAO,SAAS,wBAAyBlK,EAAS,EAAI,EAAG,UAAU,CAC5E,EACIkuD,GAA4B,SAAUhkD,EAAQ,CAChD,OAAOA,EAAO,SAAS,oBAAqB,GAAM,SAAS,CAC7D,EACIikD,GAAsB,SAAUjkD,EAAQ,CAC1C,OAAOA,EAAO,SAAS,wBAAyB,GAAO,SAAS,CAClE,EACIkkD,GAAwB,SAAUlkD,EAAQ,CAC5C,OAAOA,EAAO,SAAS,2BAA4B,GAAM,SAAS,CACpE,EACImkD,GAAoB,SAAUnkD,EAAQ,CACxC,OAAOA,EAAO,SAAS,oBAAqB,GAAI,QAAQ,CAC1D,EACIokD,GAAyB,SAAUpkD,EAAQ,CAC7C,OAAOA,EAAO,SAAS,0BAA2B,GAAI,QAAQ,CAChE,EACIqkD,GAA6B,SAAUrkD,EAAQ,CACjD,OAAOA,EAAO,SAAS,4BAA6B,GAAO,SAAS,CACtE,EACIskD,GAAyB,SAAUtkD,EAAQ,CAC7C,OAAOA,EAAO,SAAS,wBAAyB,KAAM,UAAU,CAClE,EACIukD,GAA0B,SAAUvkD,EAAQ,CAC9C,OAAOA,EAAO,SAAS,mBAAoB,GAAO,SAAS,CAC7D,EACIwkD,GAA4B,SAAUxkD,EAAQ,CAChD,OAAOA,EAAO,SAAS,6BAA8B,+BAAgC,QAAQ,CAC/F,EACIykD,GAAW,CACb,eAAgB1B,GAChB,WAAYC,GACZ,mBAAoBC,GACpB,UAAWC,GACX,aAAcC,GACd,yBAA0BC,GAC1B,iBAAkBC,GAClB,mBAAoBC,GACpB,wBAAyBE,GACzB,qBAAsBC,GACtB,qBAAsBC,GACtB,iBAAkBC,GAClB,+BAAgCC,GAChC,mBAAoBC,GACpB,mBAAoBC,GACpB,uBAAwBC,GACxB,0BAA2BC,GAC3B,oBAAqBC,GACrB,sBAAuBC,GACvB,kBAAmBC,GACnB,uBAAwBC,GACxB,2BAA4BC,GAC5B,uBAAwBC,GACxB,wBAAyBC,GACzB,0BAA2BC,EAC7B,EAEIE,GAAiB,SAAU1kD,EAAQ+T,EAAK,CAC1C,OAAO+J,GAAK5D,GAAQ,QAAQnG,CAAG,EAAG0wC,GAAS,0BAA0BzkD,CAAM,CAAC,CAC9E,EACI2kD,GAAQ,SAAUxlD,EAAS,CAC7B,OAAO27B,GAAW,IAAI,SAAS37B,EAAS,YAAa,EAAI,IAAM,OAASyjD,GAAazjD,EAAQ,WAAW,CAC1G,EACIylD,GAAoB,SAAUF,EAAgB99B,EAAUlS,EAAK,CAC/D,OAAO3a,GAAO+gC,GAAW,IAAI,WAAWpmB,EAAI,UAAU,EAAG,IAAKkS,CAAQ,EAAG89B,CAAc,CACzF,EACIG,GAAiB,SAAUH,EAAgB99B,EAAUlS,EAAK,CAC5D,IAAIgK,EAAUkmC,GAAkBF,EAAgB99B,EAAUlS,CAAG,EAC7D,OAAO1c,EAAO,KAAK0mB,EAAQA,EAAQ,OAAS,CAAC,CAAC,CAChD,EACIomC,GAAqB,SAAUl+B,EAAUqrB,EAAOC,EAAO,CACzD,IAAI6S,EAAStT,GAAeQ,EAAOrrB,CAAQ,EACvCo+B,EAASvT,GAAeS,EAAOtrB,CAAQ,EAC3C,OAAOm+B,GAAUA,IAAWC,CAC9B,EACIC,GAAW,SAAUvwC,EAAK,CAC5B,OAAOiwB,GAAejwB,CAAG,GAAKkwB,GAAclwB,CAAG,CACjD,EACIwwC,GAAoB,SAAU56C,EAASoK,EAAK,CAC9C,GAAI,CAACA,EACH,OAAOA,EAET,IAAInS,EAAYmS,EAAI,UAAU,EAAGH,EAASG,EAAI,OAAO,EACrD,OAAIpK,EACE65B,GAAuB5hC,CAAS,EAC9BynB,GAAS,OAAOznB,EAAU,WAAW,EAChC6oC,GAAgB7oC,EAAU,YAAa,CAAC,EAExC6oC,GAAgB,MAAM7oC,CAAS,EAGjCoiC,GAAejwB,CAAG,EAAI02B,GAAgB7oC,EAAWgS,EAAS,CAAC,EAAIG,EAGpEyvB,GAAuB5hC,CAAS,EAC9BynB,GAAS,OAAOznB,EAAU,eAAe,EACpC6oC,GAAgB7oC,EAAU,gBAAiBA,EAAU,gBAAgB,KAAK,MAAM,EAEhF6oC,GAAgB,OAAO7oC,CAAS,EAGlCqiC,GAAclwB,CAAG,EAAI02B,GAAgB7oC,EAAWgS,EAAS,CAAC,EAAIG,CAG3E,EACIywC,GAAoBjvD,EAAMgvD,GAAmB,EAAI,EACjDE,GAAqBlvD,EAAMgvD,GAAmB,EAAK,EACnDG,GAAc,CAChB,eAAgBX,GAChB,eAAgBG,GAChB,MAAOF,GACP,SAAUM,GACV,kBAAmBC,GACnB,kBAAmBC,GACnB,mBAAoBC,GACpB,mBAAoBN,EACtB,EAEIQ,GAAe,SAAU1+B,EAAU,CACrC,OAAO,SAAU7S,EAAK,CACpB,OAAOhd,GAAG6vB,EAAU1M,GAAQ,QAAQnG,EAAI,IAAI,EAAE,UAAU,CAAC,CAC3D,CACF,EACIwxC,GAAmB,SAAU3+B,EAAU7S,EAAK,CAC9C,OAAOwK,GAAWqI,EAAU7S,CAAG,EAAI8rB,GAAQ9rB,EAAK,SAAU5U,EAAS,CACjE,OAAO6oB,EAAY7oB,CAAO,GAAK+oB,GAAW/oB,CAAO,CACnD,EAAGmmD,GAAa1+B,CAAQ,CAAC,EAAI5uB,EAAO,KAAK,CAC3C,EACIwtD,GAAwB,SAAUxlD,EAAQ,CAC5C,IAAIoB,EAAOpB,EAAO,QAAQ,EACtByI,EAAOrH,EAAK,YAAcpB,EAAO,IAAI,QAAQoB,EAAK,UAAU,EAAIA,EAAK,WAAaA,EACtFpB,EAAO,UAAU,kBAAkByI,EAAM,CAAC,CAC5C,EACIg9C,GAAgB,SAAUzlD,EAAQ,CAChCA,EAAO,IAAI,QAAQA,EAAO,QAAQ,CAAC,IACrCA,EAAO,WAAW,EAAE,EACpBwlD,GAAsBxlD,CAAM,EAEhC,EACI0lD,GAAkC,SAAUp7C,EAASq7C,EAAS5xC,EAAK,CACrE,OAAOo0B,GAAMiN,GAAY,gBAAgBrhC,CAAG,EAAGqhC,GAAY,eAAerhC,CAAG,EAAG,SAAU6xC,EAAUC,EAAS,CAC3G,IAAIC,EAAqBT,GAAY,kBAAkB,GAAMO,CAAQ,EACjEG,EAAoBV,GAAY,kBAAkB,GAAOQ,CAAO,EAChEG,EAAoBX,GAAY,kBAAkB,GAAOM,CAAO,EACpE,OAAIr7C,EACK8qC,GAAY,aAAarhC,EAAKiyC,CAAiB,EAAE,IAAI,SAAUC,EAAS,CAC7E,OAAOA,EAAQ,QAAQF,CAAiB,GAAKJ,EAAQ,QAAQG,CAAkB,CACjF,CAAC,EAAE,MAAM,EAAK,EAEP1Q,GAAY,aAAarhC,EAAKiyC,CAAiB,EAAE,IAAI,SAAUE,EAAS,CAC7E,OAAOA,EAAQ,QAAQJ,CAAkB,GAAKH,EAAQ,QAAQI,CAAiB,CACjF,CAAC,EAAE,MAAM,EAAK,CAElB,CAAC,EAAE,MAAM,EAAI,CACf,EACII,GAAc,CAChB,eAAgBZ,GAChB,cAAeE,GACf,gCAAiCC,EACnC,EAEIU,GAAa,SAAU9qD,EAAOyL,EAAU4X,EAAQ,CAClD,OAAOohB,GAAWzkC,EAAOyL,EAAU4X,CAAM,EAAE,OAAO,CACpD,EAEI0nC,GAA8B,SAAUz/B,EAAUne,EAAM,CAC1D,IAAI69C,EAAcpsC,GAAQ,QAAQ0M,CAAQ,EACtCD,EAAYzM,GAAQ,QAAQzR,CAAI,EACpC,OAAO29C,GAAWz/B,EAAW,WAAYzwB,EAAMa,GAAIuvD,CAAW,CAAC,CACjE,EACIC,GAAe,SAAU3/B,EAAUne,EAAM,CAC3C,OAAOuhB,GAAS,OAAOvhB,CAAI,GAAK,eAAe,KAAKA,EAAK,IAAI,GAAK49C,GAA4Bz/B,EAAUne,CAAI,IAAM,EACpH,EACI+9C,GAAgB,SAAU/9C,EAAM,CAClC,OAAOuhB,GAAS,UAAUvhB,CAAI,GAAKA,EAAK,WAAa,KAAOA,EAAK,aAAa,MAAM,CACtF,EACIg+C,GAAY,SAAU7/B,EAAUne,EAAM,CACxC,OAAOw9B,GAAiBx9B,CAAI,GAAK89C,GAAa3/B,EAAUne,CAAI,IAAM,IAAS+9C,GAAc/9C,CAAI,GAAKi+C,GAAWj+C,CAAI,CACnH,EACIi+C,GAAa18B,GAAS,aAAa,mBAAmB,EACtD28B,GAAY38B,GAAS,aAAa,gBAAgB,EAClD48B,GAAe58B,GAAS,kBAAkB,iBAAkB,KAAK,EACjE68B,GAAc,SAAUC,EAAY,CACtC,IAAI/sB,EAAQtxB,EAAMuxB,EAAU,EAC5B,GAAIysB,GAAUK,EAAYA,CAAU,EAClC,MAAO,GAGP,GADAr+C,EAAOq+C,EAAW,WACd,CAACr+C,EACH,MAAO,GAETsxB,EAAS,IAAIrT,GAAWje,EAAMq+C,CAAU,EACxC,EAAG,CACD,GAAIF,GAAan+C,CAAI,EAAG,CACtBA,EAAOsxB,EAAO,KAAK,EAAI,EACvB,QACF,CACA,GAAI4sB,GAAUl+C,CAAI,EAAG,CACnBA,EAAOsxB,EAAO,KAAK,EACnB,QACF,CACA,GAAI/P,GAAS,KAAKvhB,CAAI,EAAG,CACvBuxB,IACAvxB,EAAOsxB,EAAO,KAAK,EACnB,QACF,CACA,GAAI0sB,GAAUK,EAAYr+C,CAAI,EAC5B,MAAO,GAETA,EAAOsxB,EAAO,KAAK,CACrB,OAAStxB,GACT,OAAOuxB,GAAW,CAEtB,EACI+sB,GAAY,SAAUhzC,EAAK,CAC7B,OAAO8yC,GAAY9yC,EAAI,IAAI,CAAC,CAC9B,EACIizC,GAAQ,CAAE,QAASD,EAAU,EAE7BE,GAAgB/pC,GAAU,QAAS,UAAU,EAC7CgqC,GAAgBhqC,GAAU,OAAQ,IAAI,EACtCiqC,GAAmB,SAAUvgC,EAAUlS,EAAK,CAC9C,IAAIsL,EAAU9F,GAAQ,QAAQ0M,CAAQ,EAClCwgC,EAAeltC,GAAQ,QAAQxF,EAAI,UAAU,CAAC,EAClD,OAAOyxC,GAAY,eAAenmC,EAASonC,CAAY,EAAE,IAAI,SAAU7D,EAAO,CAC5E,OAAO0D,GAAc1D,EAAO7uC,CAAG,CACjC,CAAC,CACH,EACI2yC,GAAoB,SAAUC,EAAe,CAC/C,OAAOvwD,GAAGuwD,EAAc,KAAK,EAAE,MAAM,EAAGA,EAAc,GAAG,EAAE,MAAM,CAAC,IAAM,EAC1E,EACIC,GAAgB,SAAUD,EAAe,CAC3C,OAAO3+C,GAAO2+C,EAAc,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,SAAUE,EAAS,CAClE,OAAO7+C,GAAO2+C,EAAc,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,SAAUG,EAAS,CAClE,OAAO1wD,GAAGywD,EAASC,CAAO,CAC5B,CAAC,CACH,CAAC,EAAE,OAAO,CACZ,EACIC,GAAa,SAAUJ,EAAe,CACxC,OAAOt9B,GAAS,uBAAuBs9B,EAAc,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,IAAM,IAASt9B,GAAS,uBAAuBs9B,EAAc,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,IAAM,EAChK,EACIK,GAAa,SAAU/gC,EAAUtc,EAASs9C,EAAe,CAC3D,OAAI59B,GAAS,KAAK49B,EAAc,SAAS,EAAE,QAAQ,CAAC,GAAKZ,GAAM,QAAQY,EAAc,MAAM,CAAC,IAAM,GACzFxS,GAAY,WAAW,GAAOwS,EAAc,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,SAAUC,EAAqB,CACpG,OAAIA,EAAoB,QAAQD,EAAc,SAAS,CAAC,EAC/CxS,GAAY,aAAa9qC,EAASsc,EAAUihC,CAAmB,EAAE,KAAK,SAAU3U,EAAI,CACzF,OAAOiU,GAAiBvgC,EAAUssB,CAAE,CACtC,CAAC,EAEMl7C,EAAO,KAAK4vD,CAAa,CAEpC,CAAC,EAAE,MAAMA,CAAa,EAEfA,CAEX,EACIE,GAAgB,SAAUlhC,EAAUtc,EAASi2B,EAAK,CACpD,IAAIwnB,EAAeZ,GAAiBvgC,EAAUwkB,GAAgB,eAAe7K,CAAG,CAAC,EAC7EynB,EAAaD,EAAa,KAAK,SAAUE,EAAU,CACrD,OAAO7S,GAAY,aAAa9qC,EAASsc,EAAUqhC,EAAS,SAAS,CAAC,EAAE,KAAK,SAAU/U,EAAI,CACzF,OAAOiU,GAAiBvgC,EAAUssB,CAAE,EAAE,IAAI,SAAU+U,EAAU,CAC5D,OAAON,GAAW/gC,EAAUtc,EAAS29C,CAAQ,CAC/C,CAAC,CACH,CAAC,CACH,CAAC,EACD,OAAO9f,GAAM4f,EAAcC,EAAYd,EAAa,EAAE,OAAO,SAAUI,EAAe,CACpF,OAAOD,GAAkBC,CAAa,GAAKC,GAAcD,CAAa,GAAKI,GAAWJ,CAAa,CACrG,CAAC,CACH,EACIY,GAAS,SAAUthC,EAAUtc,EAASi2B,EAAK,CAC7C,OAAOA,EAAI,UAAYunB,GAAclhC,EAAUtc,EAASi2B,CAAG,EAAIvoC,EAAO,KAAK,CAC7E,EACImwD,GAAqB,CAAE,KAAMD,EAAO,EAEpCE,GAAW,SAAUnvD,EAAI,CAC3B,OAAOA,EAAG,MAAM,EAAG,EAAE,CACvB,EACIovD,GAAiB,SAAU19C,EAAOgG,EAAMd,EAAW,CACrD,OAAI0O,GAAW5N,EAAMhG,CAAK,EACjBy9C,GAAS1pC,GAAQ/T,EAAO,SAAUoJ,EAAK,CAC5C,OAAOlE,EAAUkE,CAAG,GAAKhd,GAAGgd,EAAKpD,CAAI,CACvC,CAAC,CAAC,EAEK,CAAC,CAEZ,EACI23C,GAAY,SAAU39C,EAAOgG,EAAM,CACrC,OAAO03C,GAAe19C,EAAOgG,EAAM7a,EAAS,EAAK,CAAC,CACpD,EACIyyD,GAAiB,SAAU59C,EAAOgG,EAAM,CAC1C,MAAO,CAAChG,CAAK,EAAE,OAAO29C,GAAU39C,EAAOgG,CAAI,CAAC,CAC9C,EACI63C,GAAU,CACZ,aAAcH,GACd,QAASC,GACT,eAAgBC,EAClB,EAEIE,GAAgC,SAAUlF,EAAO,CACnD,IAAIjlB,EAAat7B,GAASugD,CAAK,EAC/B,OAAOnpD,GAAUkkC,EAAYzW,CAAO,EAAE,KAAK,UAAY,CACrD,OAAOyW,CACT,EAAG,SAAUjvB,EAAO,CAClB,OAAOivB,EAAW,MAAM,EAAGjvB,CAAK,CAClC,CAAC,CACH,EACIq5C,GAAkB,SAAUnF,EAAO,CACrC,IAAIvgD,EAAWylD,GAA8BlF,CAAK,EAClD,OAAA9pD,GAAKuJ,EAAUo7B,EAAQ,EAChBp7B,CACT,EACI2lD,GAAkB,SAAU/hC,EAAU28B,EAAO,CAC/C,IAAI7kC,EAAU8pC,GAAQ,eAAejF,EAAO38B,CAAQ,EACpD,OAAOzsB,GAAKukB,EAAQ,QAAQ,EAAGsoC,GAAM,OAAO,EAAE,KAAK5oB,EAAQ,CAC7D,EACIwqB,GAAgB,SAAUh0C,EAAI,CAChC,OAAO7a,GAAOilB,GAAapK,CAAE,EAAG,SAAUA,EAAI,CAC5C,MAAO,CAACoyC,GAAM,QAAQpyC,CAAE,CAC1B,CAAC,EAAE,SAAW,CAChB,EACIi0C,GAAmB,SAAUjiC,EAAUkiC,EAAWC,EAASC,EAAgB,CAC7E,GAAIhC,GAAM,QAAQ+B,CAAO,EACvB,OAAAxJ,GAAU,kBAAkBwJ,CAAO,EAC5B3T,GAAY,gBAAgB2T,EAAQ,IAAI,CAAC,EAE9CH,GAAcI,CAAc,GAAKhC,GAAM,QAAQ8B,CAAS,GAC1DrrB,GAAOurB,EAAgB9uC,GAAQ,QAAQ,IAAI,CAAC,EAE9C,IAAIo6B,EAAWc,GAAY,aAAa2T,EAAQ,IAAI,EAAG3d,GAAgB,OAAO4d,EAAe,IAAI,CAAC,CAAC,EACnG,OAAAvvD,GAAKivD,GAAgBI,CAAS,EAAG,SAAU5pC,EAAO,CAChDue,GAAOurB,EAAgB9pC,CAAK,CAC9B,CAAC,EACDypC,GAAgB/hC,EAAUkiC,CAAS,EAC5BxU,CACT,EACI2U,GAAqB,SAAUriC,EAAUkiC,EAAWC,EAAS,CAC/D,GAAI/B,GAAM,QAAQ+B,CAAO,EACvB,OAAA3qB,GAAS2qB,CAAO,EACZ/B,GAAM,QAAQ8B,CAAS,GACzBvJ,GAAU,kBAAkBuJ,CAAS,EAEhC1T,GAAY,gBAAgB0T,EAAU,IAAI,CAAC,EAEpD,IAAIxU,EAAWc,GAAY,eAAe2T,EAAQ,IAAI,CAAC,EACvD,OAAAtvD,GAAKivD,GAAgBI,CAAS,EAAG,SAAU5pC,EAAO,CAChD0e,GAAOmrB,EAAS7pC,CAAK,CACvB,CAAC,EACDypC,GAAgB/hC,EAAUkiC,CAAS,EAC5BxU,CACT,EACI4U,GAAqB,SAAUH,EAASxF,EAAO,CACjD,IAAIgF,EAAiBC,GAAQ,eAAejF,EAAOwF,CAAO,EAC1D,OAAO/wD,EAAO,KAAKuwD,EAAeA,EAAe,OAAS,CAAC,CAAC,CAC9D,EACIY,GAAoB,SAAUL,EAAWC,EAAS,CACpD,OAAOxqC,GAAWwqC,EAASD,CAAS,EAAII,GAAmBH,EAASD,CAAS,EAAI9wD,EAAO,KAAK,CAC/F,EACIoxD,GAAS,SAAUh/C,EAAOm5C,EAAO,CACnCnO,GAAY,WAAWhrC,EAAOm5C,EAAM,IAAI,CAAC,EAAE,IAAI,SAAUjP,EAAU,CACjE,OAAOA,EAAS,QAAQ,CAC1B,CAAC,EAAE,IAAIp6B,GAAQ,OAAO,EAAE,OAAO6N,CAAI,EAAE,KAAKqW,EAAQ,CACpD,EACIirB,GAAiB,SAAUziC,EAAUkiC,EAAWC,EAAS,CAC3D,OAAAK,GAAO,GAAMN,CAAS,EACtBM,GAAO,GAAOL,CAAO,EACdI,GAAkBL,EAAWC,CAAO,EAAE,KAAK7yD,EAAM+yD,GAAoBriC,EAAUkiC,EAAWC,CAAO,EAAG7yD,EAAM2yD,GAAkBjiC,EAAUkiC,EAAWC,CAAO,CAAC,CAClK,EACIO,GAAc,SAAU1iC,EAAUtc,EAASy6C,EAAQC,EAAQ,CAC7D,OAAO16C,EAAU++C,GAAeziC,EAAUo+B,EAAQD,CAAM,EAAIsE,GAAeziC,EAAUm+B,EAAQC,CAAM,CACrG,EACIuE,GAAc,CAAE,YAAaD,EAAY,EAEzCE,GAAkB,SAAUxpD,EAAQsK,EAAS,CAC/C,IAAIgqC,EACA1tB,EAAW1M,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAC/C,OAAAs0C,EAAW6T,GAAmB,KAAKvhC,EAAS,IAAI,EAAGtc,EAAStK,EAAO,UAAU,OAAO,CAAC,EAAE,KAAK,SAAUsnD,EAAe,CACnH,OAAOiC,GAAY,YAAY3iC,EAAUtc,EAASg9C,EAAc,KAAK,EAAE,MAAM,EAAGA,EAAc,GAAG,EAAE,MAAM,CAAC,CAC5G,CAAC,EACDhT,EAAS,KAAK,SAAU5/B,EAAK,CAC3B1U,EAAO,UAAU,OAAO0U,EAAI,QAAQ,CAAC,CACvC,CAAC,EACM4/B,EAAS,OAAO,CACzB,EACImV,GAAsB,CAAE,gBAAiBD,EAAgB,EAEzDE,GAAyB,SAAU9iC,EAAUsmB,EAAW,CAC1D,IAAI3M,EAAM2M,EAAU,OAAO,EAC3B,OAAO/E,GAAMge,GAAY,eAAev/B,EAAU1M,GAAQ,QAAQqmB,EAAI,cAAc,CAAC,EAAG4lB,GAAY,eAAev/B,EAAU1M,GAAQ,QAAQqmB,EAAI,YAAY,CAAC,EAAG,SAAUwkB,EAAQC,EAAQ,CACzL,OAAIjuD,GAAGguD,EAAQC,CAAM,IAAM,IACzBzkB,EAAI,eAAe,EACnBgpB,GAAY,YAAY3iC,EAAU,GAAMm+B,EAAQC,CAAM,EAAE,KAAK,SAAUtwC,EAAK,CAC1Ew4B,EAAU,OAAOx4B,EAAI,QAAQ,CAAC,CAChC,CAAC,EACM,IAEA,EAEX,CAAC,EAAE,MAAM,EAAK,CAChB,EACIi1C,GAAmB,SAAUh5C,EAAMouC,EAAS,CAC9C,IAAIt2C,EAAOyR,GAAQ,QAAQ6kC,CAAO,EAC9BpgC,EAASzoB,EAAMa,GAAI4Z,CAAI,EAC3B,OAAOivB,GAASn3B,EAAM4f,GAAa1J,CAAM,EAAE,OAAO,CACpD,EACIirC,GAAqB,SAAUj5C,EAAM4vB,EAAK,CAC5C,OAAOopB,GAAiBh5C,EAAM4vB,EAAI,cAAc,GAAKopB,GAAiBh5C,EAAM4vB,EAAI,YAAY,CAC9F,EACIspB,GAAuB,SAAUl5C,EAAM4vB,EAAK,CAC9C,IAAIupB,EAAa1U,GAAY,aAAazkC,EAAK,IAAI,EAAGy6B,GAAgB,eAAe7K,CAAG,CAAC,EAAE,OAAO,EAC9FwpB,EAAS3U,GAAY,aAAazkC,EAAK,IAAI,EAAGy6B,GAAgB,aAAa7K,CAAG,CAAC,EAAE,OAAO,EAC5F,MAAO,CAACqpB,GAAmBj5C,EAAM4vB,CAAG,GAAKupB,GAAcC,CACzD,EACIC,GAAc,SAAUhqD,EAAQ,CAClC,OAAAA,EAAO,WAAW,EAAE,EACpBA,EAAO,UAAU,kBAAkB,EAC5B,EACT,EACIiqD,GAAc,SAAUjqD,EAAQ,CAClC,IAAI4mB,EAAW1M,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAC3CugC,EAAMvgC,EAAO,UAAU,OAAO,EAClC,OAAO6pD,GAAqBjjC,EAAU2Z,CAAG,EAAIypB,GAAYhqD,CAAM,EAAI0pD,GAAuB9iC,EAAU5mB,EAAO,SAAS,CACtH,EACIkqD,GAAoB,SAAUlqD,EAAQsK,EAAS,CACjD,OAAOtK,EAAO,UAAU,YAAY,EAAI,GAAQiqD,GAAYjqD,CAAM,CACpE,EACImqD,GAAmB,CAAE,gBAAiBD,EAAkB,EAExDE,GAAa,SAAUC,EAAO,CAChC,GAAI,CAAC/xD,EAAQ+xD,CAAK,EAChB,MAAM,IAAI,MAAM,wBAAwB,EAE1C,GAAIA,EAAM,SAAW,EACnB,MAAM,IAAI,MAAM,iCAAiC,EAEnD,IAAIC,EAAe,CAAC,EAChBC,EAAM,CAAC,EACX,OAAA9wD,GAAK4wD,EAAO,SAAUG,EAAO1oD,EAAO,CAClC,IAAI2oD,EAAS7iD,GAAK4iD,CAAK,EACvB,GAAIC,EAAO,SAAW,EACpB,MAAM,IAAI,MAAM,gCAAgC,EAElD,IAAI3iD,EAAM2iD,EAAO,CAAC,EACd10D,EAAQy0D,EAAM1iD,CAAG,EACrB,GAAIyiD,EAAIziD,CAAG,IAAM,OACf,MAAM,IAAI,MAAM,0BAA4BA,CAAG,EAC1C,GAAIA,IAAQ,OACjB,MAAM,IAAI,MAAM,uCAAuC,EAClD,GAAI,CAACxP,EAAQvC,CAAK,EACvB,MAAM,IAAI,MAAM,iCAAiC,EAEnDu0D,EAAa,KAAKxiD,CAAG,EACrByiD,EAAIziD,CAAG,EAAI,UAAY,CACrB,IAAI4iD,EAAY,UAAU,OAC1B,GAAIA,IAAc30D,EAAM,OACtB,MAAM,IAAI,MAAM,qCAAuC+R,EAAM,cAAgB/R,EAAM,OAAS,KAAOA,EAAQ,UAAY20D,CAAS,EAGlI,QADI90D,EAAO,IAAI,MAAM80D,CAAS,EACrBpxD,EAAI,EAAGA,EAAI1D,EAAK,OAAQ0D,IAC/B1D,EAAK0D,CAAC,EAAI,UAAUA,CAAC,EAEvB,IAAI6N,EAAQ,SAAUwjD,EAAU,CAC9B,IAAIC,EAAahjD,GAAK+iD,CAAQ,EAC9B,GAAIL,EAAa,SAAWM,EAAW,OACrC,MAAM,IAAI,MAAM,iDAAmDN,EAAa,KAAK,GAAG,EAAI;AAAA,UAAeM,EAAW,KAAK,GAAG,CAAC,EAEjI,IAAIC,EAAUtwD,GAAO+vD,EAAc,SAAUQ,GAAQ,CACnD,OAAO3xD,GAASyxD,EAAYE,EAAM,CACpC,CAAC,EACD,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,gEAAkED,EAAW,KAAK,IAAI,EAAI;AAAA,YAAiBN,EAAa,KAAK,IAAI,CAAC,EAEpJ,OAAOK,EAAS7iD,CAAG,EAAE,MAAM,KAAMlS,CAAI,CACvC,EACA,MAAO,CACL,KAAM,UAAY,CAChB,GAAI,UAAU,SAAWy0D,EAAM,OAC7B,MAAM,IAAI,MAAM,+CAAiDA,EAAM,OAAS,SAAW,UAAU,MAAM,EAE7G,IAAI5pD,EAAS,UAAUqB,CAAK,EAC5B,OAAOrB,EAAO,MAAM,KAAM7K,CAAI,CAChC,EACA,MAAOuR,EACP,IAAK,SAAU4jD,EAAO,CACpBx1D,EAAW,QAAQ,IAAIw1D,EAAO,CAC5B,aAAcT,EACd,YAAaxiD,EACb,OAAQlS,CACV,CAAC,CACH,CACF,CACF,CACF,CAAC,EACM20D,CACT,EACIS,GAAM,CAAE,SAAUZ,EAAW,EAE7Ba,GAAS,SAAUv2C,EAAK,CAC1B,OAAOm+B,GAAuBn+B,CAAG,EAAE,OAAOqT,CAAI,CAChD,EACImjC,GAAS,SAAU5gD,EAASqG,EAAM+D,EAAK,CACzC,IAAIy2C,EAAepxD,GAAOyuD,GAAQ,eAAetuC,GAAQ,QAAQxF,EAAI,UAAU,CAAC,EAAG/D,CAAI,EAAGkX,CAAO,EAC7FvsB,EAAQN,GAAKmwD,CAAY,EAAE,MAAMx6C,CAAI,EACzC,OAAOykC,GAAY,aAAa9qC,EAAShP,EAAM,IAAI,EAAGoZ,CAAG,EAAE,OAAOu2C,EAAM,CAC1E,EACIG,GAAa,SAAUz6C,EAAM+D,EAAK,CACpC,OAAOm+B,GAAuBn+B,CAAG,EAAE,OAAOqT,CAAI,GAAKmjC,GAAO,GAAMv6C,EAAM+D,CAAG,EAAE,OAAO,CACpF,EACI22C,GAAY,SAAU16C,EAAM+D,EAAK,CACnC,OAAOo+B,GAA2Bp+B,CAAG,EAAE,OAAOqT,CAAI,GAAKmjC,GAAO,GAAOv6C,EAAM+D,CAAG,EAAE,OAAO,CACzF,EACI42C,GAAiBp1D,EAAMg1D,GAAQ,EAAK,EACpCK,GAAar1D,EAAMg1D,GAAQ,EAAI,EAE/BM,GAAO,SAAUC,EAAU,CAC7B,OAAO,SAAU7vD,EAAQ,CACvB,OAAO6vD,IAAa7vD,CACtB,CACF,EACI8vD,GAASF,GAAK,MAAM,EACpBG,GAAiB,SAAUvgC,EAAK,CAClC,MAAO,cAAc,KAAKA,CAAG,CAC/B,EACIwgC,GAAc,SAAUxgC,EAAK,CAC/B,MAAO,CAACugC,GAAevgC,CAAG,GAAK,CAACsgC,GAAOtgC,CAAG,CAC5C,EAEIygC,GAAS,SAAUvhD,EAASuF,EAAW6E,EAAK,CAC9C,OAAO1c,EAAO,KAAK0c,EAAI,UAAU,CAAC,EAAE,OAAOsV,GAAS,MAAM,EAAE,OAAO,SAAU5e,EAAM,CACjF,IAAI0gD,EAAQxhD,EAAU,EAAI,GAC1B,OAAOuF,EAAUzE,EAAK,KAAK,OAAOsJ,EAAI,OAAO,EAAIo3C,CAAK,CAAC,CACzD,CAAC,CACH,EACIC,GAAgB71D,EAAM21D,GAAQ,GAAMF,EAAc,EAClDK,GAAe91D,EAAM21D,GAAQ,GAAOF,EAAc,EAClDM,GAAc,SAAUv3C,EAAK,CAC/B,IAAInS,EAAYmS,EAAI,UAAU,EAC9B,OAAOsV,GAAS,OAAOznB,CAAS,GAAKA,EAAU,KAAK,SAAW,CACjE,EACI2pD,GAA+B,SAAUpa,EAAgBtH,EAAe,CAC1E,IAAI/hC,EAAOopC,GAA6BC,EAAgBtH,CAAa,EACrE,OAAOxgB,GAAS,uBAAuBvhB,CAAI,GAAK,CAACuhB,GAAS,WAAWvhB,CAAI,CAC3E,EACI0jD,GAA+Bj2D,EAAMg2D,GAA8B,CAAC,EACpEE,GAA8Bl2D,EAAMg2D,GAA8B,EAAE,EACpEG,GAAgB,SAAUva,EAAgBtH,EAAe,CAC3D,OAAOxgB,GAAS,QAAQ6nB,GAA6BC,EAAgBtH,CAAa,CAAC,CACrF,EACI8hB,GAAgBp2D,EAAMm2D,GAAe,CAAC,EACtCE,GAAer2D,EAAMm2D,GAAe,EAAE,EAEtCG,GAAoB,SAAU/jD,EAAM,CACtC,OAAO4f,GAAYnO,GAAQ,QAAQzR,CAAI,CAAC,GAAKyf,GAAWhO,GAAQ,QAAQzR,CAAI,CAAC,CAC/E,EACIgkD,GAAezB,GAAI,SAAS,CAC9B,CAAE,OAAQ,CAAC,SAAS,CAAE,EACtB,CAAE,cAAe,CAAC,SAAS,CAAE,EAC7B,CAAE,eAAgB,CAAC,UAAU,CAAE,CACjC,CAAC,EACG0B,GAAgC,SAAUpiD,EAASvS,EAAM,CAC3D,IAAIgc,EAAMhc,EAAK,QAAQuS,IAAY,EAAK,EACpCqiD,EAAgBriD,EAAU,QAAU,SACxC,OAAO0f,GAAS,UAAUjW,CAAG,GAAKA,EAAI,aAAa,gBAAgB,IAAM44C,CAC3E,EACIC,GAAiC,SAAUj8C,EAAMrG,EAASvS,EAAMm7C,EAAI,CACtE,IAAIC,EAAc,SAAUp/B,EAAK,CAC/B,OAAO+T,EAAS5N,GAAQ,QAAQnG,CAAG,CAAC,GAAK,CAAC29B,GAAc35C,EAAMm7C,EAAIviC,CAAI,CACxE,EACA,OAAO+hC,GAAkB,CAACpoC,EAASvS,CAAI,EAAE,KAAK,UAAY,CACxD,OAAO26C,GAAkBpoC,EAAS4oC,CAAE,EAAE,KAAKp9C,EAAS,EAAK,EAAGq9C,CAAW,CACzE,EAAGA,CAAW,CAChB,EACI0Z,GAA8B,SAAUl8C,EAAMrG,EAASvS,EAAMm7C,EAAI,CACnE,IAAI4Z,EAAW5Z,EAAG,QAAQ5oC,IAAY,EAAK,EAC3C,OAAO67C,GAAY,eAAejsC,GAAQ,QAAQvJ,CAAI,EAAGuJ,GAAQ,QAAQniB,EAAK,QAAQ,CAAC,CAAC,EAAE,IAAI,SAAUg1D,EAAU,CAChH,OAAO/F,GAAM,QAAQ+F,CAAQ,EAAIN,GAAa,OAAOM,EAAS,IAAI,CAAC,EAAIN,GAAa,cAAcK,CAAQ,CAC5G,CAAC,EAAE,QAAQ,UAAY,CACrB,OAAO90D,EAAO,KAAKy0D,GAAa,cAAcK,CAAQ,CAAC,CACzD,CAAC,CACH,EACIE,GAAkB,SAAUr8C,EAAMrG,EAASvS,EAAM,CACnD,OAAOq9C,GAAY,aAAa9qC,EAASqG,EAAM5Y,CAAI,EAAE,KAAK,SAAUm7C,EAAI,CACtE,OAAIsZ,GAAkBtZ,EAAG,QAAQ,CAAC,GAEvB0Z,GAA+Bj8C,EAAMrG,EAASvS,EAAMm7C,CAAE,EADxDl7C,EAAO,KAAK,EAGVsS,GAAW0f,GAAS,uBAAuBkpB,EAAG,QAAQ,CAAC,GAEvD5oC,IAAY,IAAS0f,GAAS,uBAAuBkpB,EAAG,QAAQ,EAAI,CAAC,EADvE2Z,GAA4Bl8C,EAAMrG,EAASvS,EAAMm7C,CAAE,EAGjD5oC,GAAW8hD,GAA4Br0D,CAAI,GAE3CuS,IAAY,IAAS6hD,GAA6Bp0D,CAAI,EADxDC,EAAO,KAAKy0D,GAAa,eAAevZ,CAAE,CAAC,EAI3Cl7C,EAAO,KAAK,CAEvB,CAAC,CACH,EACIi1D,GAAgC,SAAU3iD,EAASyJ,EAAK,CAC1D,OAAIzJ,GAAW0f,GAAS,uBAAuBjW,EAAI,WAAW,EACrD/b,EAAO,KAAKy0D,GAAa,cAAc14C,EAAI,WAAW,CAAC,EACrDzJ,IAAY,IAAS0f,GAAS,uBAAuBjW,EAAI,eAAe,EAC1E/b,EAAO,KAAKy0D,GAAa,cAAc14C,EAAI,eAAe,CAAC,EAE3D/b,EAAO,KAAK,CAEvB,EACIk1D,GAAyC,SAAUv8C,EAAM5Y,EAAMo1D,EAAc,CAC/E,OAAOA,EAAa,KAAK,SAAUp5C,EAAK,CACtC,OAAO/b,EAAO,KAAKy0D,GAAa,OAAO14C,CAAG,CAAC,CAC7C,EAAG,SAAUA,EAAK,CAChB,OAAO/b,EAAO,KAAKy0D,GAAa,cAAc14C,CAAG,CAAC,CACpD,EAAG,SAAUm/B,EAAI,CACf,OAAIxB,GAAc35C,EAAMm7C,EAAIviC,CAAI,EACvB3Y,EAAO,KAAK,EAEZA,EAAO,KAAKy0D,GAAa,eAAevZ,CAAE,CAAC,CAEtD,CAAC,CACH,EACIka,GAA2B,SAAUz8C,EAAMrG,EAASvS,EAAM,CAC5D,OAAI20D,GAA8BpiD,EAASvS,CAAI,EACtCk1D,GAA8B3iD,EAASvS,EAAK,QAAQuS,IAAY,EAAK,CAAC,EAAE,KAAK,UAAY,CAC9F,OAAO0iD,GAAgBr8C,EAAMrG,EAASvS,CAAI,CAC5C,EAAGC,EAAO,IAAI,EAEPg1D,GAAgBr8C,EAAMrG,EAASvS,CAAI,EAAE,KAAK,SAAUo1D,EAAc,CACvE,OAAOD,GAAuCv8C,EAAM5Y,EAAMo1D,CAAY,CACxE,CAAC,CAEL,EACIE,GAAS,SAAU18C,EAAMrG,EAASi2B,EAAK,CACzC,IAAIqS,EAAkBN,GAAehoC,EAAU,EAAI,GAAIqG,EAAM4vB,CAAG,EAC5DxoC,EAAOqzC,GAAgB,eAAewH,CAAe,EACrD0T,EAAcpsC,GAAQ,QAAQvJ,CAAI,EACtC,OAAIrG,IAAY,IAAS8hD,GAA4Br0D,CAAI,EAChDC,EAAO,KAAKy0D,GAAa,OAAO10D,EAAK,QAAQ,EAAI,CAAC,CAAC,EACjDuS,GAAW6hD,GAA6Bp0D,CAAI,EAC9CC,EAAO,KAAKy0D,GAAa,OAAO10D,EAAK,QAAQ,CAAC,CAAC,EAC7CuS,IAAY,IAAS6hD,GAA6Bp0D,CAAI,GAAKszD,GAAU/E,EAAavuD,CAAI,EACxFuzD,GAAehF,EAAavuD,CAAI,EAAE,IAAI,SAAU+sC,EAAI,CACzD,OAAO2nB,GAAa,OAAO3nB,EAAG,QAAQ,CAAC,CACzC,CAAC,EACQx6B,GAAW8hD,GAA4Br0D,CAAI,GAAKqzD,GAAW9E,EAAavuD,CAAI,EAC9EwzD,GAAWjF,EAAavuD,CAAI,EAAE,IAAI,SAAU+sC,EAAI,CACrD,OAAO2nB,GAAa,OAAO3nB,EAAG,QAAQ,CAAC,CACzC,CAAC,EAEMsoB,GAAyBz8C,EAAMrG,EAASvS,CAAI,CAEvD,EAEIu1D,GAA0B,SAAUt8C,EAAG,CACzC,MAAO;AAAA,OAAgB,QAAQA,CAAC,IAAM,EACxC,EACIu8C,GAAmB,SAAUp5C,EAASq5C,EAAkBC,EAAgB,CAC1E,IAAIvjD,EAAShQ,GAAMia,EAAQ,MAAM,EAAE,EAAG,SAAUla,EAAK+W,EAAG,CACtD,OAAIs8C,GAAwBt8C,CAAC,GAAKA,IAAM,OAClC/W,EAAI,qBAAuBA,EAAI,MAAQ,IAAMuzD,GAAoBvzD,EAAI,IAAI,SAAWka,EAAQ,OAAS,GAAKs5C,EACrG,CACL,oBAAqB,GACrB,IAAKxzD,EAAI,IAAM,MACjB,EAEO,CACL,oBAAqB,GACrB,IAAKA,EAAI,IAAM,GACjB,EAGK,CACL,oBAAqB,GACrB,IAAKA,EAAI,IAAM+W,CACjB,CAEJ,EAAG,CACD,oBAAqB,GACrB,IAAK,EACP,CAAC,EACD,OAAO9G,EAAO,GAChB,EACIwjD,GAAc,SAAUjlD,EAAM8L,EAAQzS,EAAO,CAC/C,GAAIA,IAAU,EAGd,KAAIuD,EAAaoD,EAAK,KAAK,MAAM8L,EAAQA,EAASzS,CAAK,EACnD2rD,EAAiBl5C,EAASzS,GAAS2G,EAAK,KAAK,OAC7C+kD,EAAmBj5C,IAAW,EAClC9L,EAAK,YAAY8L,EAAQzS,EAAOyrD,GAAiBloD,EAAYmoD,EAAkBC,CAAc,CAAC,EAChG,EACIE,GAA2B,SAAUllD,EAAM8L,EAAQ,CACrD,IAAIJ,EAAU1L,EAAK,KAAK,MAAM8L,CAAM,EAChCq5C,EAAkBz5C,EAAQ,OAAS8E,GAAM9E,CAAO,EAAE,OACtD,OAAOu5C,GAAYjlD,EAAM8L,EAAQq5C,CAAe,CAClD,EACIC,GAA4B,SAAUplD,EAAM8L,EAAQ,CACtD,IAAIJ,EAAU1L,EAAK,KAAK,MAAM,EAAG8L,CAAM,EACnCq5C,EAAkBz5C,EAAQ,OAAS+E,GAAM/E,CAAO,EAAE,OACtD,OAAOu5C,GAAYjlD,EAAM8L,EAASq5C,EAAiBA,CAAe,CACpE,EACIE,GAAiB,SAAUC,EAAUha,EAAUia,EAAqB,CACtE,IAAIC,EAAmB/0C,GAAM60C,EAAS,IAAI,EAAE,OAC5C,OAAAA,EAAS,WAAWha,EAAS,IAAI,EACjC3V,GAASlkB,GAAQ,QAAQ65B,CAAQ,CAAC,EAC9Bia,GACFL,GAAyBI,EAAUE,CAAgB,EAE9CF,CACT,EAEIG,GAAkB,SAAUx5C,EAAKX,EAAK,CACxC,IAAIxR,EAAYmS,EAAI,UAAU,EAC1BH,EAASG,EAAI,OAAO,EACxB,OAAO02B,GAAgB,eAAe12B,CAAG,IAAM,IAASnS,IAAcwR,EAAI,YAAcQ,EAAS62B,GAAgB,OAAOr3B,CAAG,EAAE,OAAO,CACtI,EACI08B,GAAa,SAAU18B,EAAKW,EAAK,CACnC,OAAOw5C,GAAgBx5C,EAAKX,CAAG,EAAIq3B,GAAgB12B,EAAI,UAAU,EAAGA,EAAI,OAAO,EAAI,CAAC,EAAIA,CAC1F,EACIy5C,GAAkB,SAAU1lD,EAAM,CACpC,OAAOuhB,GAAS,OAAOvhB,CAAI,EAAI2iC,GAAgB3iC,EAAM,CAAC,EAAI2iC,GAAgB,OAAO3iC,CAAI,CACvF,EACI2lD,GAAe,SAAU3lD,EAAM,CACjC,OAAOuhB,GAAS,OAAOvhB,CAAI,EAAI2iC,GAAgB3iC,EAAMA,EAAK,KAAK,MAAM,EAAI2iC,GAAgB,MAAM3iC,CAAI,CACrG,EACI4lD,GAAkC,SAAUt6C,EAAK,CACnD,OAAIkyB,GAAiBlyB,EAAI,eAAe,EAC/B/b,EAAO,KAAKo2D,GAAar6C,EAAI,eAAe,CAAC,EAE7CA,EAAI,gBAAkBqhC,GAAY,eAAerhC,EAAI,eAAe,EAAI/b,EAAO,KAAK,CAE/F,EACIs2D,GAA8B,SAAUv6C,EAAK,CAC/C,OAAIkyB,GAAiBlyB,EAAI,WAAW,EAC3B/b,EAAO,KAAKm2D,GAAgBp6C,EAAI,WAAW,CAAC,EAE5CA,EAAI,YAAcqhC,GAAY,gBAAgBrhC,EAAI,WAAW,EAAI/b,EAAO,KAAK,CAExF,EACIu2D,GAAoC,SAAUjI,EAAavyC,EAAK,CAClE,IAAIy6C,EAAgBpjB,GAAgB,OAAOr3B,EAAI,gBAAkBA,EAAI,gBAAkBA,EAAI,UAAU,EACrG,OAAOqhC,GAAY,aAAakR,EAAakI,CAAa,EAAE,KAAK,UAAY,CAC3E,OAAOpZ,GAAY,aAAakR,EAAalb,GAAgB,MAAMr3B,CAAG,CAAC,CACzE,EAAG/b,EAAO,IAAI,CAChB,EACIy2D,GAAmC,SAAUnI,EAAavyC,EAAK,CACjE,OAAOqhC,GAAY,aAAakR,EAAalb,GAAgB,MAAMr3B,CAAG,CAAC,EAAE,KAAK,UAAY,CACxF,OAAOqhC,GAAY,aAAakR,EAAalb,GAAgB,OAAOr3B,CAAG,CAAC,CAC1E,EAAG/b,EAAO,IAAI,CAChB,EACI02D,GAA6B,SAAUpI,EAAavyC,EAAK,CAC3D,OAAOs6C,GAAgCt6C,CAAG,EAAE,QAAQ,UAAY,CAC9D,OAAOu6C,GAA4Bv6C,CAAG,CACxC,CAAC,EAAE,QAAQ,UAAY,CACrB,OAAOw6C,GAAkCjI,EAAavyC,CAAG,CAC3D,CAAC,CACH,EACI46C,GAA2B,SAAUrI,EAAavyC,EAAK,CACzD,OAAOu6C,GAA4Bv6C,CAAG,EAAE,QAAQ,UAAY,CAC1D,OAAOs6C,GAAgCt6C,CAAG,CAC5C,CAAC,EAAE,QAAQ,UAAY,CACrB,OAAO06C,GAAiCnI,EAAavyC,CAAG,CAC1D,CAAC,CACH,EACI66C,GAAsB,SAAUtkD,EAASg8C,EAAavyC,EAAK,CAC7D,OAAOzJ,EAAUqkD,GAAyBrI,EAAavyC,CAAG,EAAI26C,GAA2BpI,EAAavyC,CAAG,CAC3G,EACI86C,GAAoC,SAAUvkD,EAASg8C,EAAavyC,EAAK,CAC3E,OAAO66C,GAAoBtkD,EAASg8C,EAAavyC,CAAG,EAAE,IAAI7d,EAAMu6C,GAAY18B,CAAG,CAAC,CAClF,EACI+6C,GAAe,SAAU9uD,EAAQsK,EAASoK,EAAK,CACjDA,EAAI,KAAK,UAAY,CACnB1U,EAAO,MAAM,CACf,EAAG,SAAU0U,EAAK,CAChB1U,EAAO,UAAU,OAAO0U,EAAI,QAAQ,EAAGpK,CAAO,CAChD,CAAC,CACH,EACIykD,GAAY,SAAUhQ,EAAS,CACjC,OAAO,SAAUhrC,EAAK,CACpB,OAAOA,EAAI,IAAI,IAAMgrC,CACvB,CACF,EACIiQ,GAAY,SAAUhvD,EAAQ+T,EAAK,CACrC,OAAOA,GAAO/T,EAAO,OAAO,iBAAiB,EAAE,eAAetE,GAAKqY,CAAG,CAAC,CACzE,EACIk7C,GAAiB,SAAUl7C,EAAK,CAClC,GAAIizC,GAAM,QAAQjzC,CAAG,EAAG,CACtB,IAAI+wB,EAAK5qB,GAAQ,SAAS,yBAAyB,EACnD,OAAAgkB,GAAMnqB,CAAG,EACT6pB,GAAO7pB,EAAK+wB,CAAE,EACP9sC,EAAO,KAAKozC,GAAgB,OAAOtG,EAAG,IAAI,CAAC,CAAC,CACrD,KACE,QAAO9sC,EAAO,KAAK,CAEvB,EACIk3D,GAAmB,SAAUn7C,EAAKo7C,EAAmBnB,EAAqB,CAC5E,IAAIoB,EAActwC,GAAY/K,CAAG,EAAE,OAAOmH,CAAM,EAC5Cm0C,EAActwC,GAAYhL,CAAG,EAAE,OAAOmH,CAAM,EAChD,OAAAkjB,GAASrqB,CAAG,EACLu0B,GAAM8mB,EAAaC,EAAaF,EAAmB,SAAUrtB,EAAMoU,EAAMxhC,EAAK,CACnF,IAAIq5C,EAAWjsB,EAAK,IAAI,EAAGiS,EAAWmC,EAAK,IAAI,EAC3C3hC,EAASw5C,EAAS,KAAK,OAC3B,OAAAD,GAAeC,EAAUha,EAAUia,CAAmB,EAC/Ct5C,EAAI,UAAU,IAAMq/B,EAAW3I,GAAgB2iB,EAAUx5C,CAAM,EAAIG,CAC5E,CAAC,EAAE,QAAQ,UAAY,CACrB,OAAIs5C,IACFoB,EAAY,KAAK,SAAUr7C,EAAK,CAC9B,OAAO85C,GAA0B95C,EAAI,IAAI,EAAGA,EAAI,IAAI,EAAE,MAAM,CAC9D,CAAC,EACDs7C,EAAY,KAAK,SAAUt7C,EAAK,CAC9B,OAAO45C,GAAyB55C,EAAI,IAAI,EAAG,CAAC,CAC9C,CAAC,GAEIo7C,CACT,CAAC,CACH,EACIG,GAAkB,SAAUtvD,EAAQb,EAAS,CAC/C,OAAOyc,GAAI5b,EAAO,OAAO,sBAAsB,EAAGtE,GAAKyD,CAAO,CAAC,CACjE,EACIowD,GAAgB,SAAUvvD,EAAQsK,EAASyJ,EAAKy7C,EAAW,CACzDA,IAAc,SAChBA,EAAY,IAEd,IAAIC,EAAiBZ,GAAkCvkD,EAAStK,EAAO,QAAQ,EAAG+T,EAAI,IAAI,CAAC,EACvFopC,EAAcvd,GAAS7rB,EAAK7d,EAAM84D,GAAWhvD,CAAM,EAAG+uD,GAAU/uD,EAAO,QAAQ,CAAC,CAAC,EACjF0vD,EAA2BR,GAAiBn7C,EAAK07C,EAAgBH,GAAgBtvD,EAAQ+T,CAAG,CAAC,EAC7F/T,EAAO,IAAI,QAAQA,EAAO,QAAQ,CAAC,GACrCA,EAAO,WAAW,EAAE,EACpBA,EAAO,UAAU,kBAAkB,GAEnCm9C,EAAY,KAAK8R,EAAc,EAAE,KAAK,UAAY,CAC5CO,GACFV,GAAa9uD,EAAQsK,EAASolD,CAAwB,CAE1D,EAAG,SAAUC,EAAS,CAChBH,GACFV,GAAa9uD,EAAQsK,EAAStS,EAAO,KAAK23D,CAAO,CAAC,CAEtD,CAAC,CAEL,EACIC,GAAgB,CAAE,cAAeL,EAAc,EAE/CM,GAAkB,SAAU7vD,EAAQsK,EAAS,CAC/C,OAAO,SAAUnL,EAAS,CACxB,OAAAa,EAAO,oBAAoB,cAAc,EACzC4vD,GAAc,cAAc5vD,EAAQsK,EAAS4P,GAAQ,QAAQ/a,CAAO,CAAC,EAC9D,EACT,CACF,EACI2wD,GAAgB,SAAU9vD,EAAQsK,EAAS,CAC7C,OAAO,SAAUnL,EAAS,CACxB,IAAIuV,EAAMpK,EAAU8gC,GAAgB,OAAOjsC,CAAO,EAAIisC,GAAgB,MAAMjsC,CAAO,EACnF,OAAAa,EAAO,UAAU,OAAO0U,EAAI,QAAQ,CAAC,EAC9B,EACT,CACF,EACIq7C,GAAiB,SAAU/vD,EAAQ,CACrC,OAAO,SAAU0U,EAAK,CACpB,OAAA1U,EAAO,UAAU,OAAO0U,EAAI,QAAQ,CAAC,EAC9B,EACT,CACF,EACIs7C,GAAuB,SAAUhwD,EAAQsK,EAAS,CACpD,IAAIJ,EAASmjD,GAAOrtD,EAAO,QAAQ,EAAGsK,EAAStK,EAAO,UAAU,OAAO,CAAC,EAAE,IAAI,SAAUmtD,EAAc,CACpG,OAAOA,EAAa,KAAK0C,GAAgB7vD,EAAQsK,CAAO,EAAGwlD,GAAc9vD,EAAQsK,CAAO,EAAGylD,GAAe/vD,CAAM,CAAC,CACnH,CAAC,EACD,OAAOkK,EAAO,MAAM,EAAK,CAC3B,EACI+lD,GAA2B,SAAU3J,EAAa,CACpD7sD,GAAKimC,GAAc4mB,EAAa,0BAA0B,EAAGloB,EAAQ,CACvE,EACI8xB,GAAuB,SAAUlwD,EAAQsK,EAAS,CACpD,IAAI6lD,EAAkBnwD,EAAO,UAAU,QAAQ,EAC/C,OAAIgqB,GAAS,uBAAuBmmC,CAAe,GACjDF,GAAyB/1C,GAAQ,QAAQla,EAAO,QAAQ,CAAC,CAAC,EAC1D4vD,GAAc,cAAc5vD,EAAQsK,EAAS4P,GAAQ,QAAQla,EAAO,UAAU,QAAQ,CAAC,CAAC,EACxFmmD,GAAY,cAAcnmD,CAAM,EACzB,IAEA,EAEX,EACIowD,GAAyB,SAAUz/C,EAAMlI,EAAM,CACjD,KAAOA,GAAQA,IAASkI,GAAM,CAC5B,GAAIqZ,GAAS,sBAAsBvhB,CAAI,GAAKuhB,GAAS,uBAAuBvhB,CAAI,EAC9E,OAAOA,EAETA,EAAOA,EAAK,UACd,CACA,OAAO,IACT,EACI4nD,GAAmB,SAAUrwD,EAAQ,CACvC,IAAI8kC,EACAwrB,EAASF,GAAuBpwD,EAAO,QAAQ,EAAGA,EAAO,UAAU,QAAQ,CAAC,EAChF,OAAIgqB,GAAS,sBAAsBsmC,CAAM,GAAKtwD,EAAO,IAAI,QAAQswD,CAAM,GAAKtwD,EAAO,IAAI,QAAQswD,CAAM,IACnGxrB,EAAK9kC,EAAO,IAAI,OAAO,KAAM,CAAE,iBAAkB,GAAI,CAAC,EACtDA,EAAO,IAAI,QAAQswD,EAAQ,EAAE,EAC7BA,EAAO,YAAYxrB,CAAE,EACrB9kC,EAAO,UAAU,OAAOorC,GAAgB,OAAOtG,CAAE,EAAE,QAAQ,CAAC,GAEvD,EACT,EACIyrB,GAAoB,SAAUvwD,EAAQsK,EAAS,CACjD,OAAItK,EAAO,UAAU,YAAY,EACxBgwD,GAAqBhwD,EAAQsK,CAAO,EAEpC4lD,GAAqBlwD,EAAQsK,CAAO,CAE/C,EACIkmD,GAAY,CACd,gBAAiBD,GACjB,iBAAkBF,EACpB,EAEII,GAAWzmC,GAAS,OACpB0mC,GAA6B,SAAUjoD,EAAM,CAC/C,OAAOgoD,GAAShoD,CAAI,GAAKA,EAAK,KAAK,CAAC,IAAMs7B,GAAK,IACjD,EACI4sB,GAA2B,SAAUloD,EAAM,CAC7C,OAAOgoD,GAAShoD,CAAI,GAAKA,EAAK,KAAKA,EAAK,KAAK,OAAS,CAAC,IAAMs7B,GAAK,IACpE,EACI6sB,GAAa,SAAUnoD,EAAM,CAC/B,OAAOA,EAAK,cAAc,eAAes7B,GAAK,IAAI,CACpD,EACI8sB,GAAiB,SAAUpoD,EAAM,CACnC,GAAIgoD,GAAShoD,EAAK,eAAe,EAC/B,OAAIkoD,GAAyBloD,EAAK,eAAe,GAG/CA,EAAK,gBAAgB,WAAWs7B,GAAK,IAAI,EAClCt7B,EAAK,gBAET,GAAIgoD,GAAShoD,CAAI,EACtB,OAAIioD,GAA2BjoD,CAAI,GAGjCA,EAAK,WAAW,EAAGs7B,GAAK,IAAI,EACrBt7B,EAGT,IAAIqoD,EAAUF,GAAWnoD,CAAI,EAC7B,OAAAA,EAAK,WAAW,aAAaqoD,EAASroD,CAAI,EACnCqoD,CAEX,EACIC,GAAgB,SAAUtoD,EAAM,CAClC,GAAIgoD,GAAShoD,EAAK,WAAW,EAC3B,OAAIioD,GAA2BjoD,EAAK,WAAW,GAG7CA,EAAK,YAAY,WAAW,EAAGs7B,GAAK,IAAI,EACjCt7B,EAAK,YAET,GAAIgoD,GAAShoD,CAAI,EACtB,OAAIkoD,GAAyBloD,CAAI,GAG/BA,EAAK,WAAWs7B,GAAK,IAAI,EAClBt7B,EAGT,IAAIqoD,EAAUF,GAAWnoD,CAAI,EAC7B,OAAIA,EAAK,YACPA,EAAK,WAAW,aAAaqoD,EAASroD,EAAK,WAAW,EAEtDA,EAAK,WAAW,YAAYqoD,CAAO,EAE9BA,CAEX,EACIE,GAAiB,SAAUvzB,EAAQh1B,EAAM,CAC3C,OAAOg1B,EAASozB,GAAepoD,CAAI,EAAIsoD,GAActoD,CAAI,CAC3D,EACIwoD,GAAqB/6D,EAAM86D,GAAgB,EAAI,EAC/CE,GAAoBh7D,EAAM86D,GAAgB,EAAK,EAE/CG,GAAkB,SAAUz8C,EAAK+oB,EAAQ,CAC3C,OAAIzT,GAAS,OAAOtV,EAAI,UAAU,CAAC,EAC1Bs8C,GAAevzB,EAAQ/oB,EAAI,UAAU,CAAC,EAEtCs8C,GAAevzB,EAAQ/oB,EAAI,QAAQ,CAAC,CAE/C,EACI08C,GAAsB,SAAU18C,EAAK47B,EAAO,CAC9C,IAAI+gB,EAAY/gB,EAAM,IAAI,EAC1B,OAAO+gB,GAAa38C,EAAI,UAAU,IAAM28C,GAAaltB,GAAuBktB,CAAS,CACvF,EACIC,GAAc,SAAUhhB,EAAOiC,EAAU,CAC3C,OAAOA,EAAS,KAAK,SAAUpzC,EAAS,CACtCowC,GAAqB,OAAOe,EAAM,IAAI,CAAC,EACvC,IAAIllC,EAAO6lD,GAAmB9xD,CAAO,EACrC,OAAAmxC,EAAM,IAAIllC,CAAI,EACPpT,EAAO,KAAKozC,GAAgBhgC,EAAMA,EAAK,OAAS,CAAC,CAAC,CAC3D,EAAG,SAAUjM,EAAS,CACpB,OAAOi2C,GAAY,gBAAgBj2C,CAAO,EAAE,IAAI,SAAUuV,EAAK,CAC7D,GAAK08C,GAAoB18C,EAAK47B,CAAK,EAMjC,OAAOlF,GAAgBkF,EAAM,IAAI,EAAG,CAAC,EALrCf,GAAqB,OAAOe,EAAM,IAAI,CAAC,EACvC,IAAIllC,EAAO+lD,GAAgBz8C,EAAK,EAAI,EACpC,OAAA47B,EAAM,IAAIllC,CAAI,EACPggC,GAAgBhgC,EAAM,CAAC,CAIlC,CAAC,CACH,EAAG,SAAUjM,EAAS,CACpB,OAAOi2C,GAAY,eAAej2C,CAAO,EAAE,IAAI,SAAUuV,EAAK,CAC5D,GAAK08C,GAAoB18C,EAAK47B,CAAK,EAMjC,OAAOlF,GAAgBkF,EAAM,IAAI,EAAGA,EAAM,IAAI,EAAE,OAAS,CAAC,EAL1Df,GAAqB,OAAOe,EAAM,IAAI,CAAC,EACvC,IAAIllC,EAAO+lD,GAAgBz8C,EAAK,EAAK,EACrC,OAAA47B,EAAM,IAAIllC,CAAI,EACPggC,GAAgBhgC,EAAMA,EAAK,OAAS,CAAC,CAIhD,CAAC,CACH,EAAG,SAAUjM,EAAS,CACpBowC,GAAqB,OAAOe,EAAM,IAAI,CAAC,EACvC,IAAIllC,EAAO8lD,GAAkB/xD,CAAO,EACpC,OAAAmxC,EAAM,IAAIllC,CAAI,EACPpT,EAAO,KAAKozC,GAAgBhgC,EAAM,CAAC,CAAC,CAC7C,CAAC,CACH,EACImmD,GAAgB,CAAE,YAAaD,EAAY,EAE3CE,GAAgB,SAAUC,EAAK77D,EAAM,CACvC,QAAS0D,EAAI,EAAGA,EAAIm4D,EAAI,OAAQn4D,IAAK,CACnC,IAAI4Q,EAASunD,EAAIn4D,CAAC,EAAE,MAAM,KAAM1D,CAAI,EACpC,GAAIsU,EAAO,OAAO,EAChB,OAAOA,CAEX,CACA,OAAOlS,EAAO,KAAK,CACrB,EACI05D,GAAgB,CAAE,cAAeF,EAAc,EAE/CG,GAAW3G,GAAI,SAAS,CAC1B,CAAE,OAAQ,CAAC,SAAS,CAAE,EACtB,CAAE,MAAO,CAAC,SAAS,CAAE,EACrB,CAAE,IAAK,CAAC,SAAS,CAAE,EACnB,CAAE,MAAO,CAAC,SAAS,CAAE,CACvB,CAAC,EACG4G,GAAU,SAAUhrC,EAAUne,EAAM,CACtC,IAAI00C,EAAc1L,GAAehpC,EAAMme,CAAQ,EAC/C,OAAOu2B,GAA4Bv2B,CACrC,EACIirC,GAAW,SAAUnN,EAAgB99B,EAAUlS,EAAK,CACtD,IAAIo9C,EAAOzM,GAAY,kBAAkB3wC,CAAG,EACxCpZ,EAAQs2D,GAAQhrC,EAAUkrC,EAAK,UAAU,CAAC,EAC9C,OAAOzM,GAAY,eAAeX,EAAgBppD,EAAOw2D,CAAI,EAAE,KAAK,UAAY,CAC9E,OAAO1c,GAAY,aAAa95C,EAAOw2D,CAAI,EAAE,KAAK57D,EAAMmvD,GAAY,eAAgBX,EAAgBppD,CAAK,CAAC,EAAE,IAAI,SAAU80B,EAAQ,CAChI,OAAOuhC,GAAS,OAAOvhC,CAAM,CAC/B,CAAC,CACH,EAAGp4B,EAAO,IAAI,CAChB,EACI+5D,GAAkC,SAAUnrC,EAAU7S,EAAK,CAC7D,OAAOu6B,GAAwB1nB,EAAU7S,CAAG,IAAM,IACpD,EACIi+C,GAAuB,SAAUtN,EAAgB99B,EAAUlS,EAAK,CAClE,OAAO2wC,GAAY,eAAeX,EAAgB99B,EAAUlS,CAAG,EAAE,OAAOxe,EAAM67D,GAAiCnrC,CAAQ,CAAC,CAC1H,EACIjc,GAAQ,SAAU+5C,EAAgB99B,EAAUlS,EAAK,CACnD,IAAIo9C,EAAOzM,GAAY,mBAAmB3wC,CAAG,EAC7C,OAAOs9C,GAAqBtN,EAAgB99B,EAAUkrC,CAAI,EAAE,KAAK,SAAU1hC,EAAQ,CACjF,IAAI81B,EAAU9Q,GAAY,aAAahlB,EAAQ0hC,CAAI,EACnD,OAAO5L,EAAQ,OAAO,EAAIluD,EAAO,KAAK25D,GAAS,MAAMvhC,CAAM,CAAC,EAAIp4B,EAAO,KAAK,CAC9E,CAAC,CACH,EACIi6D,GAAM,SAAUvN,EAAgB99B,EAAUlS,EAAK,CACjD,IAAIo9C,EAAOzM,GAAY,kBAAkB3wC,CAAG,EAC5C,OAAOs9C,GAAqBtN,EAAgB99B,EAAUkrC,CAAI,EAAE,KAAK,SAAU1hC,EAAQ,CACjF,IAAI61B,EAAU7Q,GAAY,aAAahlB,EAAQ0hC,CAAI,EACnD,OAAO7L,EAAQ,OAAO,EAAIjuD,EAAO,KAAK25D,GAAS,IAAIvhC,CAAM,CAAC,EAAIp4B,EAAO,KAAK,CAC5E,CAAC,CACH,EACIk6D,GAAU,SAAUxN,EAAgB99B,EAAUlS,EAAK,CACrD,IAAIo9C,EAAOzM,GAAY,mBAAmB3wC,CAAG,EACzCpZ,EAAQs2D,GAAQhrC,EAAUkrC,EAAK,UAAU,CAAC,EAC9C,OAAOzM,GAAY,eAAeX,EAAgBppD,EAAOw2D,CAAI,EAAE,KAAK,UAAY,CAC9E,OAAO1c,GAAY,aAAa95C,EAAOw2D,CAAI,EAAE,KAAK57D,EAAMmvD,GAAY,eAAgBX,EAAgBppD,CAAK,CAAC,EAAE,IAAI,SAAU80B,EAAQ,CAChI,OAAOuhC,GAAS,MAAMvhC,CAAM,CAC9B,CAAC,CACH,EAAGp4B,EAAO,IAAI,CAChB,EACIm6D,GAAkB,SAAU5f,EAAU,CACxC,OAAO8S,GAAY,MAAM+M,GAAW7f,CAAQ,CAAC,IAAM,EACrD,EACI8f,GAAe,SAAU3N,EAAgB99B,EAAUlS,EAAK,CAC1D,IAAI69B,EAAWmf,GAAc,cAAc,CACzCG,GACAlnD,GACAsnD,GACAC,EACF,EAAG,CACDxN,EACA99B,EACAlS,CACF,CAAC,EACD,OAAO69B,EAAS,OAAO4f,EAAe,CACxC,EACIC,GAAa,SAAU7f,EAAU,CACnC,OAAOA,EAAS,KAAKv8C,EAAUA,EAAUA,EAAUA,CAAQ,CAC7D,EACIs8D,GAAU,SAAU/f,EAAU,CAChC,OAAOA,EAAS,KAAKz8C,EAAS,QAAQ,EAAGA,EAAS,OAAO,EAAGA,EAAS,KAAK,EAAGA,EAAS,OAAO,CAAC,CAChG,EACIy8D,GAAU,SAAUhgB,EAAU,CAChC,OAAOA,EAAS,KAAKof,GAAS,OAAQA,GAAS,OAAQA,GAAS,MAAOA,GAAS,KAAK,CACvF,EACIa,GAAS,SAAUjgB,EAAU,CAC/B,OAAOA,EAAS,KAAKof,GAAS,MAAOA,GAAS,MAAOA,GAAS,IAAKA,GAAS,GAAG,CACjF,EACIc,GAAS,SAAUC,EAAWC,EAAW,CAC3C,OAAOL,GAAQI,CAAS,IAAMJ,GAAQK,CAAS,GAAKP,GAAWM,CAAS,IAAMN,GAAWO,CAAS,CACpG,EACIC,GAAiB,SAAUtoD,EAASo6C,EAAgB99B,EAAU7uB,EAAMm7C,EAAIX,EAAU,CACpF,OAAOpK,GAAMkd,GAAY,eAAeX,EAAgB99B,EAAU7uB,CAAI,EAAGstD,GAAY,eAAeX,EAAgB99B,EAAUssB,CAAE,EAAG,SAAU2f,EAAYC,EAAU,CACjK,OAAID,IAAeC,GAAYzN,GAAY,mBAAmBz+B,EAAUisC,EAAYC,CAAQ,EACnFnB,GAAS,MAAMrnD,EAAUuoD,EAAaC,CAAQ,EAE9CvgB,CAEX,CAAC,EAAE,MAAMA,CAAQ,CACnB,EACIwgB,GAAiB,SAAUC,EAAcC,EAAY,CACvD,OAAOD,EAAa,KAAKl9D,EAAS,EAAI,EAAG,SAAUk9D,EAAc,CAC/D,MAAO,CAACP,GAAOO,EAAcC,CAAU,CACzC,CAAC,CACH,EACIC,GAAuB,SAAU5oD,EAASo6C,EAAgB99B,EAAUosC,EAAct+C,EAAK,CACzF,IAAI3c,EAAOstD,GAAY,kBAAkB/6C,EAASoK,CAAG,EACjDw+B,EAAKkC,GAAY,aAAa9qC,EAASsc,EAAU7uB,CAAI,EAAE,IAAI7B,EAAMmvD,GAAY,kBAAmB/6C,CAAO,CAAC,EACxGioC,EAAWW,EAAG,KAAK,UAAY,CACjC,OAAO8f,EAAa,IAAIT,EAAO,CACjC,EAAG,SAAUrf,EAAI,CACf,OAAOmf,GAAa3N,EAAgB99B,EAAUssB,CAAE,EAAE,IAAIh9C,EAAM08D,GAAgBtoD,EAASo6C,EAAgB99B,EAAU7uB,EAAMm7C,CAAE,CAAC,EAAE,OAAOh9C,EAAM68D,GAAgBC,CAAY,CAAC,CACtK,CAAC,EACD,OAAOzgB,EAAS,OAAO4f,EAAe,CACxC,EACIgB,GAAqB,SAAU7oD,EAASioC,EAAU,CACpD,OAAIjoC,EACKioC,EAAS,KAAK98C,EAAQuC,EAAO,KAAM25D,GAAS,KAAK,EAAG35D,EAAO,KAAMvC,EAAQuC,EAAO,KAAM25D,GAAS,KAAK,EAAG35D,EAAO,IAAI,EAElHu6C,EAAS,KAAKv6C,EAAO,KAAMvC,EAAQuC,EAAO,KAAM25D,GAAS,MAAM,EAAG35D,EAAO,KAAMvC,EAAQuC,EAAO,KAAM25D,GAAS,GAAG,CAAC,CAE5H,EACIyB,GAAe,SAAU9oD,EAASo6C,EAAgB99B,EAAUlS,EAAK,CACnE,IAAI3c,EAAOstD,GAAY,kBAAkB/6C,EAASoK,CAAG,EACjDs+C,EAAeX,GAAa3N,EAAgB99B,EAAU7uB,CAAI,EAC9D,OAAOs6D,GAAa3N,EAAgB99B,EAAU7uB,CAAI,EAAE,KAAK7B,EAAMi9D,GAAoB7oD,CAAO,CAAC,EAAE,QAAQ,UAAY,CAC/G,OAAO4oD,GAAqB5oD,EAASo6C,EAAgB99B,EAAUosC,EAAct+C,CAAG,CAClF,CAAC,CACH,EACI2+C,GAAmB,CACrB,aAAchB,GACd,aAAce,GACd,aAAcl9D,EAAMk9D,GAAc,EAAK,EACvC,aAAcl9D,EAAMk9D,GAAc,EAAI,EACtC,WAAYhB,GACZ,QAASG,GACT,OAAQC,EACV,EAEIc,GAAwB,SAAUtzD,EAAQ,CAC5C,OAAOvH,EAAWuH,EAAO,UAAU,OAAO,EAAE,MAAM,CACpD,EACIuzD,GAAU,SAAUjpD,EAAS4iC,EAAWx4B,EAAK,CAC/C,IAAIo3C,EAAQxhD,EAAU,EAAI,GAC1B,OAAA4iC,EAAU,OAAO9B,GAAgB12B,EAAI,UAAU,EAAGA,EAAI,OAAO,EAAIo3C,CAAK,EAAE,QAAQ,CAAC,EACjF5e,EAAU,OAAO,EAAE,OAAO,OAAQ5iC,EAAU,UAAY,WAAY,MAAM,EACnE,EACT,EACIkpD,GAAa,SAAUlpD,EAAStK,EAAQ,CAC1C,IAAIugC,EAAMvgC,EAAO,UAAU,OAAO,EAC9B0U,EAAMpK,EAAU8gC,GAAgB,aAAa7K,CAAG,EAAI6K,GAAgB,eAAe7K,CAAG,EAC1F,OAAK+yB,GAAsBtzD,CAAM,EAEtBsK,GAAWq6B,GAAejwB,CAAG,EAC/B6+C,GAAQ,GAAMvzD,EAAO,UAAW0U,CAAG,EACjC,CAACpK,GAAWs6B,GAAclwB,CAAG,EAC/B6+C,GAAQ,GAAOvzD,EAAO,UAAW0U,CAAG,EAEpC,GANA,EAQX,EACI++C,GAAgB,CAClB,sBAAuBH,GACvB,WAAYE,EACd,EAEIE,GAAmB,SAAU1zD,EAAQ0U,EAAK,CAC5C,IAAI6rB,EAAMvgC,EAAO,IAAI,UAAU,EAC/BugC,EAAI,SAAS7rB,EAAI,UAAU,EAAGA,EAAI,OAAO,CAAC,EAC1C6rB,EAAI,OAAO7rB,EAAI,UAAU,EAAGA,EAAI,OAAO,CAAC,EACxC1U,EAAO,UAAU,OAAOugC,CAAG,CAC7B,EACIozB,GAAmB,SAAU3zD,EAAQ,CACvC,OAAOA,EAAO,SAAS,oBAAsB,EAC/C,EACI4zD,GAAc,SAAUx/C,EAAOL,EAAK,CAClCK,EACFL,EAAI,aAAa,oBAAqB,iBAAiB,EAEvDA,EAAI,gBAAgB,mBAAmB,CAE3C,EACI8/C,GAAsB,SAAU7zD,EAAQswC,EAAOiC,EAAU,CAC3D,OAAOgf,GAAc,YAAYjhB,EAAOiC,CAAQ,EAAE,IAAI,SAAU79B,EAAK,CACnE,OAAAg/C,GAAiB1zD,EAAQ0U,CAAG,EACrB69B,CACT,CAAC,CACH,EACIuhB,GAAiB,SAAU9zD,EAAQswC,EAAOhmC,EAAS,CACrD,IAAIsc,EAAW5mB,EAAO,QAAQ,EAC1BjI,EAAOqzC,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,EAC/D0kD,EAAiBxuD,EAAMmvD,GAAY,eAAgBrlD,CAAM,EACzDuyC,EAAW8gB,GAAiB,aAAa/oD,EAASo6C,EAAgB99B,EAAU7uB,CAAI,EACpF,OAAOw6C,EAAS,KAAK,SAAUA,EAAU,CACvC,OAAOshB,GAAoB7zD,EAAQswC,EAAOiC,CAAQ,CACpD,CAAC,CACH,EACIwhB,GAAgB,SAAUrP,EAAgB5oC,EAAKob,EAAM,CACvD,IAAI88B,EAAkBj6D,GAAO+hB,EAAI,OAAO,wCAAwC,EAAG4oC,CAAc,EAC7FuP,EAAgBl6D,GAAOm9B,EAAMwtB,CAAc,EAC/CjrD,GAAKgB,GAAWu5D,EAAiBC,CAAa,EAAG/9D,EAAM09D,GAAa,EAAK,CAAC,EAC1En6D,GAAKgB,GAAWw5D,EAAeD,CAAe,EAAG99D,EAAM09D,GAAa,EAAI,CAAC,CAC3E,EACIM,GAA2B,SAAUl0D,EAAQswC,EAAO,CACtD,GAAItwC,EAAO,UAAU,YAAY,GAAKA,EAAO,YAAc,IAAQswC,EAAM,IAAI,EAAG,CAC9E,IAAI57B,EAAM02B,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,EAC9DorC,GAAgB,eAAe12B,CAAG,GAAK2wC,GAAY,SAAS3wC,CAAG,IAAM,KACvEg/C,GAAiB1zD,EAAQuvC,GAAqB,oBAAoBe,EAAM,IAAI,EAAG57B,CAAG,CAAC,EACnF47B,EAAM,IAAI,IAAI,EAElB,CACF,EACI6jB,GAA0B,SAAUzP,EAAgB1kD,EAAQswC,EAAOpZ,EAAM,CAC3E,GAAIl3B,EAAO,UAAU,YAAY,EAAG,CAClC,IAAIo0D,EAAUr6D,GAAOm9B,EAAMwtB,CAAc,EACzCjrD,GAAK26D,EAAS,SAAUhkC,EAAQ,CAC9B,IAAI1b,EAAM02B,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,EAClEqzD,GAAiB,aAAa3O,EAAgB1kD,EAAO,QAAQ,EAAG0U,CAAG,EAAE,KAAK,SAAU69B,EAAU,CAC5F,OAAOshB,GAAoB7zD,EAAQswC,EAAOiC,CAAQ,CACpD,CAAC,CACH,CAAC,CACH,CACF,EACI8hB,GAAO,SAAUr0D,EAAQswC,EAAOhmC,EAAS,CAC3C,OAAO,UAAY,CACjB,OAAOqpD,GAAiB3zD,CAAM,EAAI8zD,GAAe9zD,EAAQswC,EAAOhmC,CAAO,EAAE,OAAO,EAAI,EACtF,CACF,EACIgqD,GAAW,SAAUhqD,EAAStK,EAAQswC,EAAO,CAC/C,OAAO,UAAY,CACjB,OAAOqjB,GAAiB3zD,CAAM,EAAIyzD,GAAc,WAAWnpD,EAAStK,CAAM,EAAI,EAChF,CACF,EACIu0D,GAAqB,SAAUv0D,EAAQ,CACzC,IAAIswC,EAAQ3R,GAAK,IAAI,EACjB+lB,EAAiBxuD,EAAMmvD,GAAY,eAAgBrlD,CAAM,EAC7D,OAAAA,EAAO,GAAG,aAAc,SAAU/B,EAAG,CAC/B01D,GAAiB3zD,CAAM,IACzB+zD,GAAcrP,EAAgB1kD,EAAO,IAAK/B,EAAE,OAAO,EACnDi2D,GAAyBl0D,EAAQswC,CAAK,EACtC6jB,GAAwBzP,EAAgB1kD,EAAQswC,EAAOryC,EAAE,OAAO,EAEpE,CAAC,EACMqyC,CACT,EACIkkB,GAAet+D,EAAMo+D,GAAU,EAAI,EACnCG,GAAev+D,EAAMo+D,GAAU,EAAK,EACpCI,GAAoB,CACtB,KAAML,GACN,aAAcG,GACd,aAAcC,GACd,mBAAoBF,GACpB,iBAAkBb,EACpB,EAEIiB,GAAqB,SAAU30D,EAAQ,CACzC,OAAOA,EAAO,SAAS,oBAAsB,EAC/C,EACI40D,GAAqB,SAAU78D,EAAMm7C,EAAI,CAC3C,IAAI1N,EAAQjwC,EAAW,SAAS,YAAY,EAC5C,OAAAiwC,EAAM,SAASztC,EAAK,UAAU,EAAGA,EAAK,OAAO,CAAC,EAC9CytC,EAAM,OAAO0N,EAAG,UAAU,EAAGA,EAAG,OAAO,CAAC,EACjC1N,CACT,EACIqvB,GAAgC,SAAU9gD,EAAK,CACjD,OAAOo0B,GAAMiN,GAAY,gBAAgBrhC,CAAG,EAAGqhC,GAAY,eAAerhC,CAAG,EAAG,SAAU6xC,EAAUC,EAAS,CAC3G,IAAIC,EAAqBT,GAAY,kBAAkB,GAAMO,CAAQ,EACjEG,EAAoBV,GAAY,kBAAkB,GAAOQ,CAAO,EACpE,OAAOzQ,GAAY,aAAarhC,EAAK+xC,CAAkB,EAAE,IAAI,SAAUpxC,EAAK,CAC1E,OAAOA,EAAI,QAAQqxC,CAAiB,CACtC,CAAC,EAAE,MAAM,EAAI,CACf,CAAC,EAAE,MAAM,EAAI,CACf,EACI+O,GAAmB,SAAU90D,EAAQswC,EAAO,CAC9C,OAAO,SAAUiC,EAAU,CACzB,OAAOgf,GAAc,YAAYjhB,EAAOiC,CAAQ,EAAE,IAAI,SAAU79B,EAAK,CACnE,OAAAggD,GAAkB,iBAAiB10D,EAAQ0U,CAAG,EACvC,EACT,CAAC,EAAE,MAAM,EAAK,CAChB,CACF,EACIqgD,GAAe,SAAU/0D,EAAQswC,EAAOv4C,EAAMm7C,EAAI,CACpD,IAAItsB,EAAW5mB,EAAO,QAAQ,EAC1B0kD,EAAiBxuD,EAAMmvD,GAAY,eAAgBrlD,CAAM,EAC7DA,EAAO,YAAY,OAAO,UAAY,CACpCA,EAAO,UAAU,OAAO40D,GAAmB78D,EAAMm7C,CAAE,CAAC,EACpDlzC,EAAO,YAAY,QAAQ,EAC3BqzD,GAAiB,aAAa3O,EAAgB99B,EAAUwkB,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,CAAC,EAAE,IAAIqzD,GAAiB,MAAM,EAAE,IAAIyB,GAAiB90D,EAAQswC,CAAK,CAAC,CACrL,CAAC,EACDtwC,EAAO,YAAY,CACrB,EACIg1D,GAAY,SAAUpuC,EAAUne,EAAM,CACxC,IAAI00C,EAAc1L,GAAehpC,EAAMme,CAAQ,EAC/C,OAAOu2B,GAA4Bv2B,CACrC,EACIquC,GAA2B,SAAUj1D,EAAQswC,EAAOhmC,EAASvS,EAAM,CACrE,IAAI6uB,EAAWouC,GAAUh1D,EAAO,QAAQ,EAAGjI,EAAK,UAAU,CAAC,EACvD2sD,EAAiBxuD,EAAMmvD,GAAY,eAAgBrlD,CAAM,EACzDgzD,EAAeK,GAAiB,aAAa3O,EAAgB99B,EAAU7uB,CAAI,EAC/E,OAAOi7D,EAAa,KAAK,SAAUzgB,EAAU,CAC3C,OAAIjoC,EACKioC,EAAS,KAAKz8C,EAASkC,EAAO,KAAKq7D,GAAiB,OAAO9gB,CAAQ,CAAC,CAAC,EAAGv6C,EAAO,KAAMlC,EAASkC,EAAO,KAAKq7D,GAAiB,QAAQ9gB,CAAQ,CAAC,CAAC,EAAGv6C,EAAO,IAAI,EAE3Ju6C,EAAS,KAAKv6C,EAAO,KAAMlC,EAASkC,EAAO,KAAKq7D,GAAiB,QAAQ9gB,CAAQ,CAAC,CAAC,EAAGv6C,EAAO,KAAMlC,EAASkC,EAAO,KAAKq7D,GAAiB,OAAO9gB,CAAQ,CAAC,CAAC,CAAC,CAEtK,CAAC,EAAE,IAAIuiB,GAAiB90D,EAAQswC,CAAK,CAAC,EAAE,WAAW,UAAY,CAC7D,IAAI4kB,EAAa9f,GAAY,SAAS9qC,EAASsc,EAAU7uB,CAAI,EACzDk7D,EAAaiC,EAAW,KAAK,SAAUxgD,EAAK,CAC9C,OAAO2+C,GAAiB,aAAa3O,EAAgB99B,EAAUlS,CAAG,CACpE,CAAC,EACD,OAAIs+C,EAAa,OAAO,GAAKC,EAAW,OAAO,EACtC5N,GAAY,eAAeX,EAAgB99B,EAAU7uB,CAAI,EAAE,IAAI,SAAUgc,EAAK,CACnF,OAAI8gD,GAA8B9gD,CAAG,GACnC67C,GAAc,cAAc5vD,EAAQsK,EAAS4P,GAAQ,QAAQnG,CAAG,CAAC,EAC1D,IAEA,EAEX,CAAC,EAAE,MAAM,EAAK,EAEPk/C,EAAW,KAAK,SAAUzsD,EAAG,CAClC,OAAO0uD,EAAW,IAAI,SAAUhiB,EAAI,CAClC,OAAI5oC,EACFyqD,GAAa/0D,EAAQswC,EAAOv4C,EAAMm7C,CAAE,EAEpC6hB,GAAa/0D,EAAQswC,EAAO4C,EAAIn7C,CAAI,EAE/B,EACT,CAAC,CACH,CAAC,EAAE,MAAM,EAAK,CAElB,CAAC,CACH,EACIo9D,GAAoB,SAAUn1D,EAAQswC,EAAOhmC,EAAS,CACxD,GAAItK,EAAO,UAAU,YAAY,GAAK20D,GAAmB30D,CAAM,EAAG,CAChE,IAAIjI,EAAOqzC,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,EACnE,OAAOi1D,GAAyBj1D,EAAQswC,EAAOhmC,EAASvS,CAAI,CAC9D,CACA,MAAO,EACT,EACIq9D,GAAuB,CAAE,gBAAiBD,EAAkB,EAE5DE,GAAen4C,GAAU,QAAS,KAAK,EACvCo4C,GAAiBp4C,GAAU,MAAO,QAAS,OAAO,EAClDiwC,GAAenC,GAAI,SAAS,CAC9B,CAAE,YAAa,CAAC,SAAS,CAAE,EAC3B,CAAE,WAAY,CAAC,OAAO,CAAE,CAC1B,CAAC,EACGuK,GAAoB,SAAU5kD,EAAM,CACtC,OAAOza,EAAMa,GAAI4Z,CAAI,CACvB,EACI6kD,GAAiB,SAAUjzD,EAAWoc,EAAQ,CAChD,OAAOshB,GAAU/lB,GAAQ,QAAQ3X,CAAS,EAAG,QAASoc,CAAM,CAC9D,EACI82C,GAAkB,SAAUC,EAAM/2C,EAAQ,CAC5C,OAAOohB,GAAW21B,EAAM,QAAS/2C,CAAM,CACzC,EACIg3C,GAAoB,SAAUC,EAAS,CACzC,OAAO7+D,GAAG6+D,EAAQ,MAAM,EAAGA,EAAQ,IAAI,CAAC,IAAM,EAChD,EACIC,GAAsB,SAAUD,EAASj3C,EAAQ,CACnD,OAAO82C,GAAgBG,EAAQ,MAAM,EAAGj3C,CAAM,EAAE,KAAK,SAAUm3C,EAAkB,CAC/E,OAAOL,GAAgBG,EAAQ,IAAI,EAAGj3C,CAAM,EAAE,KAAK,SAAUo3C,EAAgB,CAC3E,OAAOh/D,GAAG++D,EAAkBC,CAAc,EAAI/9D,EAAO,KAAK89D,CAAgB,EAAI99D,EAAO,KAAK,CAC5F,CAAC,CACH,CAAC,CACH,EACIg+D,GAAgB,SAAUC,EAAO,CACnC,OAAOv2B,GAAcu2B,EAAO,OAAO,CACrC,EACIC,GAA6B,SAAUN,EAASj3C,EAAQ,CAC1D,OAAO82C,GAAgBG,EAAQ,MAAM,EAAGj3C,CAAM,EAAE,KAAK,SAAUs3C,EAAO,CACpE,OAAOh7D,GAAK+6D,GAAcC,CAAK,CAAC,EAAE,IAAI,SAAUE,EAAS,CACvD,OAAOd,GAAaO,EAAQ,MAAM,EAAGO,CAAO,CAC9C,CAAC,CACH,CAAC,CACH,EACIC,GAAmB,SAAUz3C,EAAQ4hB,EAAK,CAC5C,IAAI81B,EAAYb,GAAej1B,EAAI,eAAgB5hB,CAAM,EACrDw3C,EAAUX,GAAej1B,EAAI,aAAc5hB,CAAM,EACrD,OAAO4hB,EAAI,UAAYvoC,EAAO,KAAK,EAAImwC,GAAMkuB,EAAWF,EAASd,EAAY,EAAE,KAAK,UAAY,CAC9F,OAAOgB,EAAU,KAAK,UAAY,CAChC,OAAOF,EAAQ,KAAK,SAAUA,EAAS,CACrC,OAAOV,GAAgBU,EAASx3C,CAAM,EAAE,KAAK,SAAUs3C,EAAO,CAC5D,OAAOj7D,GAAKg7D,GAAcC,CAAK,CAAC,EAAE,IAAI,SAAUI,EAAW,CACzD,OAAOhB,GAAagB,EAAWF,CAAO,CACxC,CAAC,CACH,CAAC,CACH,CAAC,CACH,EAAG,SAAUE,EAAW,CACtB,OAAOZ,GAAgBY,EAAW13C,CAAM,EAAE,KAAK,SAAUs3C,EAAO,CAC9D,OAAOh7D,GAAK+6D,GAAcC,CAAK,CAAC,EAAE,IAAI,SAAUE,EAAS,CACvD,OAAOd,GAAagB,EAAWF,CAAO,CACxC,CAAC,CACH,CAAC,CACH,CAAC,CACH,EAAG,SAAUP,EAAS,CACpB,OAAOU,GAAkB33C,EAAQi3C,CAAO,EAAI59D,EAAO,KAAK,EAAIk+D,GAA2BN,EAASj3C,CAAM,CACxG,CAAC,CACH,EACI23C,GAAoB,SAAU33C,EAAQi3C,EAAS,CACjD,OAAOC,GAAoBD,EAASj3C,CAAM,EAAE,OAAO,CACrD,EACI43C,GAAa,SAAUh2B,EAAK5hB,EAAQ,CACtC,IAAI03C,EAAYb,GAAej1B,EAAI,eAAgB5hB,CAAM,EACrDw3C,EAAUX,GAAej1B,EAAI,aAAc5hB,CAAM,EACrD,OAAOwpB,GAAMkuB,EAAWF,EAASd,EAAY,EAAE,OAAOM,EAAiB,EAAE,OAAO,SAAUC,EAAS,CACjG,OAAOU,GAAkB33C,EAAQi3C,CAAO,CAC1C,CAAC,EAAE,QAAQ,UAAY,CACrB,OAAOQ,GAAiBz3C,EAAQ4hB,CAAG,CACrC,CAAC,CACH,EACIi2B,GAA+B,SAAUZ,EAASj3C,EAAQ,CAC5D,OAAOk3C,GAAoBD,EAASj3C,CAAM,EAAE,IAAI,SAAUs3C,EAAO,CAC/D,OAAOX,GAAeM,EAASK,EAAOD,GAAcC,CAAK,CAAC,CAC5D,CAAC,CACH,EACIQ,GAA2B,SAAU9lD,EAAM4vB,EAAK,CAClD,IAAI5hB,EAAS42C,GAAkB5kD,CAAI,EACnC,OAAO4lD,GAAWh2B,EAAK5hB,CAAM,EAAE,KAAK,SAAUi3C,EAAS,CACrD,OAAOY,GAA6BZ,EAASj3C,CAAM,CACrD,CAAC,CACH,EACI+3C,GAAe,SAAUC,EAAOjB,EAAM,CACxC,OAAOt7D,GAAUu8D,EAAO,SAAU1gE,EAAG,CACnC,OAAOc,GAAGd,EAAGy/D,CAAI,CACnB,CAAC,CACH,EACIkB,GAAmB,SAAUtB,EAAgB,CAC/C,OAAOntB,GAAMuuB,GAAapB,EAAe,MAAM,EAAGA,EAAe,IAAI,EAAE,MAAM,CAAC,EAAGoB,GAAapB,EAAe,MAAM,EAAGA,EAAe,IAAI,EAAE,IAAI,CAAC,EAAG,SAAUuB,EAAYC,EAAU,CACjL,OAAOxB,EAAe,MAAM,EAAE,MAAMuB,EAAYC,EAAW,CAAC,CAC9D,CAAC,CACH,EACIC,GAAY,SAAUzB,EAAgB,CACxC,OAAOsB,GAAiBtB,CAAc,EAAE,IAAI,SAAU0B,EAAU,CAC9D,IAAIL,EAAQrB,EAAe,MAAM,EACjC,OAAO0B,EAAS,SAAWL,EAAM,OAASxJ,GAAa,YAAYmI,EAAe,MAAM,CAAC,EAAInI,GAAa,WAAW6J,CAAQ,CAC/H,CAAC,CACH,EACIC,GAAqB,SAAUN,EAAO,CACxC,OAAOxJ,GAAa,WAAWwJ,CAAK,CACtC,EACIO,GAAqB,SAAUvmD,EAAM4vB,EAAK,CAC5C,OAAOk2B,GAAyB9lD,EAAM4vB,CAAG,EAAE,KAAKw2B,EAAS,CAC3D,EACII,GAAoB,CACtB,mBAAoBD,GACpB,mBAAoBD,EACtB,EAEIG,GAAY,SAAUlqB,EAAW,CACnC,IAAImqB,EAAS,CAAC,EACd,GAAInqB,EACF,QAAS5zC,EAAI,EAAGA,EAAI4zC,EAAU,WAAY5zC,IACxC+9D,EAAO,KAAKnqB,EAAU,WAAW5zC,CAAC,CAAC,EAGvC,OAAO+9D,CACT,EACIC,GAAmB,SAAUD,EAAQ,CACvC,OAAO1/D,GAAK0/D,EAAQ,SAAU7xB,EAAO,CACnC,IAAI/8B,EAAOm/B,GAAgBpC,CAAK,EAChC,OAAO/8B,EAAO,CAACyR,GAAQ,QAAQzR,CAAI,CAAC,EAAI,CAAC,CAC3C,CAAC,CACH,EACI8uD,GAAoB,SAAUrqB,EAAW,CAC3C,OAAOkqB,GAAUlqB,CAAS,EAAE,OAAS,CACvC,EACIsqB,GAAa,CACf,UAAWJ,GACX,iBAAkBE,GAClB,kBAAmBC,EACrB,EAEIE,GAAqB,SAAUJ,EAAQ,CACzC,OAAOt9D,GAAOy9D,GAAW,iBAAiBH,CAAM,EAAGhvC,EAAW,CAChE,EACIqvC,GAAsB,SAAU3jD,EAAK,CACvC,IAAI4jD,EAAgBj4B,GAAc3rB,EAAK,6CAA6C,EACpF,OAAO4jD,CACT,EACIC,GAA8B,SAAUP,EAAQl4D,EAAS,CAC3D,IAAIw4D,EAAgBD,GAAoBv4D,CAAO,EAC3C04D,EAAaJ,GAAmBJ,CAAM,EAC1C,OAAOM,EAAc,OAAS,EAAIA,EAAgBE,CACpD,EACIC,GAAqB,SAAU93D,EAAQ,CACzC,OAAO43D,GAA4BJ,GAAW,UAAUx3D,EAAO,UAAU,OAAO,CAAC,EAAGka,GAAQ,QAAQla,EAAO,QAAQ,CAAC,CAAC,CACvH,EACI+3D,GAAqB,CACvB,mBAAoBN,GACpB,oBAAqBC,GACrB,4BAA6BE,GAC7B,mBAAoBE,EACtB,EAEIE,GAAa,SAAUh4D,EAAQ22D,EAAO,CACxC,OAAAl9D,GAAKk9D,EAAOpX,GAAU,iBAAiB,EACvCv/C,EAAO,UAAU,kBAAkB22D,EAAM,CAAC,EAAE,IAAI,EAAG,CAAC,EAC7C,EACT,EACIsB,GAAqB,SAAUj4D,EAAQi2D,EAAO,CAChD,OAAArG,GAAc,cAAc5vD,EAAQ,GAAOi2D,CAAK,EACzC,EACT,EACIiC,GAAkB,SAAUl4D,EAAQggB,EAASugB,EAAK,CACpD,OAAO42B,GAAkB,mBAAmBn3C,EAASugB,CAAG,EAAE,IAAI,SAAU43B,EAAQ,CAC9E,OAAOA,EAAO,KAAKjiE,EAAM+hE,GAAoBj4D,CAAM,EAAG9J,EAAM8hE,GAAYh4D,CAAM,CAAC,CACjF,CAAC,CACH,EACIo4D,GAAqB,SAAUp4D,EAAQ2f,EAAS,CAClD,OAAO04C,GAAar4D,EAAQ2f,CAAO,CACrC,EACI24C,GAAmB,SAAUt4D,EAAQggB,EAASugB,EAAKg4B,EAAU,CAC/D,OAAOC,GAAiBx4C,EAASu4C,CAAQ,EAAE,KAAK,UAAY,CAC1D,OAAOL,GAAgBl4D,EAAQggB,EAASugB,CAAG,CAC7C,EAAG,SAAU5gB,EAAS,CACpB,OAAOy4C,GAAmBp4D,EAAQ2f,CAAO,CAC3C,CAAC,EAAE,MAAM,EAAK,CAChB,EACI84C,GAAgB,SAAUz4D,EAAQu4D,EAAU,CAC9C,IAAI3xC,EAAW1M,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAC3CugC,EAAMvgC,EAAO,UAAU,OAAO,EAC9B23D,EAAgBI,GAAmB,mBAAmB/3D,CAAM,EAChE,OAAO23D,EAAc,SAAW,EAAIK,GAAWh4D,EAAQ23D,CAAa,EAAIW,GAAiBt4D,EAAQ4mB,EAAU2Z,EAAKg4B,CAAQ,CAC1H,EACIG,GAAgB,SAAU14C,EAASjM,EAAK,CAC1C,OAAO5Z,GAAKquD,GAAQ,eAAez0C,EAAKiM,CAAO,EAAGqI,EAAW,CAC/D,EACImwC,GAAmB,SAAUx4C,EAASjM,EAAK,CAC7C,OAAO5Z,GAAKquD,GAAQ,eAAez0C,EAAKiM,CAAO,EAAG,SAAUjM,EAAK,CAC/D,OAAOrY,GAAKqY,CAAG,IAAM,SACvB,CAAC,CACH,EACI4kD,GAAqB,SAAU34D,EAAQggB,EAAS1V,EAASsuD,EAAU7gE,EAAM,CAC3E,OAAOq9C,GAAY,SAAS9qC,EAAStK,EAAO,QAAQ,EAAGjI,CAAI,EAAE,KAAK,SAAUm7C,EAAI,CAC9E,OAAOwlB,GAAc14C,EAAS9F,GAAQ,QAAQg5B,EAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,SAAU2lB,EAAQ,CACjF,OAAO9hE,GAAG8hE,EAAQD,CAAQ,IAAM,EAClC,CAAC,CACH,CAAC,CACH,EACIP,GAAe,SAAUr4D,EAAQ+T,EAAK,CACxC,OAAAwrC,GAAU,kBAAkBxrC,CAAG,EAC/B/T,EAAO,UAAU,kBAAkB+T,EAAI,IAAI,EAAG,CAAC,EACxC/b,EAAO,KAAK,EAAI,CACzB,EACI8gE,GAAwB,SAAUC,EAAazuD,EAASvS,EAAMm7C,EAAI,CACpE,OAAOkC,GAAY,gBAAgB2jB,EAAY,IAAI,CAAC,EAAE,KAAK,SAAU3uD,EAAO,CAC1E,OAAOgrC,GAAY,eAAe2jB,EAAY,IAAI,CAAC,EAAE,IAAI,SAAU99D,EAAM,CACvE,OAAOqP,EAAUvS,EAAK,QAAQqS,CAAK,GAAK8oC,EAAG,QAAQj4C,CAAI,EAAIlD,EAAK,QAAQkD,CAAI,GAAKi4C,EAAG,QAAQ9oC,CAAK,CACnG,CAAC,CACH,CAAC,EAAE,MAAM,EAAI,CACf,EACI4uD,GAAoB,SAAUh5D,EAAQ+T,EAAK,CAC7C,OAAOskD,GAAar4D,EAAQ+T,CAAG,CACjC,EACIklD,GAAuB,SAAUj5C,EAAS+4C,EAAa7lB,EAAI,CAC7D,OAAOslB,GAAiBx4C,EAAS9F,GAAQ,QAAQg5B,EAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,SAAUgmB,EAAW,CACvF,OAAOniE,GAAGmiE,EAAWH,CAAW,IAAM,EACxC,CAAC,CACH,EACII,GAA2B,SAAUn5D,EAAQggB,EAAS1V,EAASyuD,EAAahhE,EAAM,CACpF,OAAOq9C,GAAY,SAAS9qC,EAAStK,EAAO,QAAQ,EAAGjI,CAAI,EAAE,KAAK,SAAUm7C,EAAI,CAC9E,OAAO4lB,GAAsBC,EAAazuD,EAASvS,EAAMm7C,CAAE,EAAI8lB,GAAkBh5D,EAAQ+4D,CAAW,EAAIE,GAAqBj5C,EAAS+4C,EAAa7lB,CAAE,CACvJ,CAAC,EAAE,GAAGl7C,EAAO,KAAK,EAAI,CAAC,CACzB,EACIohE,GAAmB,SAAUp5D,EAAQsK,EAAS0V,EAASu4C,EAAU,CACnE,IAAIxgE,EAAOqzC,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,EACnE,OAAO04D,GAAc14C,EAASu4C,CAAQ,EAAE,KAAK,SAAUK,EAAU,CAC/D,OAAO5R,GAAM,QAAQ4R,CAAQ,EAAIP,GAAar4D,EAAQ44D,CAAQ,EAAID,GAAmB34D,EAAQggB,EAAS1V,EAASsuD,EAAU7gE,CAAI,CAC/H,CAAC,CACH,EACIshE,GAAqB,SAAUr5D,EAAQsK,EAAS0V,EAAS+4C,EAAa,CACxE,IAAIhhE,EAAOqzC,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,EACnE,OAAOgnD,GAAM,QAAQ+R,CAAW,EAAIV,GAAar4D,EAAQ+4D,CAAW,EAAII,GAAyBn5D,EAAQggB,EAAS1V,EAASyuD,EAAahhE,CAAI,CAC9I,EACIuhE,GAAc,SAAUt5D,EAAQsK,EAASiuD,EAAU,CACrD,IAAIv4C,EAAU9F,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAC9C,OAAOw4D,GAAiBx4C,EAASu4C,CAAQ,EAAE,KAAK,UAAY,CAC1D,OAAOa,GAAiBp5D,EAAQsK,EAAS0V,EAASu4C,CAAQ,CAC5D,EAAG,SAAUQ,EAAa,CACxB,OAAOM,GAAmBr5D,EAAQsK,EAAS0V,EAAS+4C,CAAW,CACjE,CAAC,EAAE,MAAM,EAAK,CAChB,EACIQ,GAAoB,SAAUv5D,EAAQsK,EAAS,CACjD,IAAIiuD,EAAWr+C,GAAQ,QAAQla,EAAO,UAAU,SAAS,EAAI,CAAC,EAC1D22D,EAAQoB,GAAmB,mBAAmB/3D,CAAM,EACxD,OAAOA,EAAO,UAAU,YAAY,GAAK22D,EAAM,SAAW,EAAI2C,GAAYt5D,EAAQsK,EAASiuD,CAAQ,EAAIE,GAAcz4D,EAAQu4D,CAAQ,CACvI,EACIiB,GAAc,CAAE,gBAAiBD,EAAkB,EAEnDE,GAASvhB,GAAY,KACrBwhB,GAAmC,SAAUjiB,EAAIhvC,EAAM/M,EAAM,CAC/D,IAAIi+D,EAAaliB,EAAG,UAAU,IAAI/7C,CAAI,EACtC,GAAIi+D,GACF,QAASrgE,EAAI,EAAGA,EAAIqgE,EAAW,OAAQrgE,IACrC,GAAIqgE,EAAWrgE,CAAC,EAAE,UAAY,IAASm+C,EAAG,IAAI,GAAGhvC,EAAMkxD,EAAWrgE,CAAC,EAAE,QAAQ,EAC3E,MAAO,GAIb,MAAO,EACT,EACIsgE,GAAe,SAAU55D,EAAQyI,EAAM/M,EAAMi8C,EAAM,CACrD,IAAIhnC,EAAO3Q,EAAO,IAAI,QAAQ,EAC9B,OAAIyI,IAASkI,EACJ,IAETlI,EAAOzI,EAAO,IAAI,UAAUyI,EAAM,SAAUA,EAAM,CAChD,OAAIixD,GAAiC15D,EAAQyI,EAAM/M,CAAI,EAC9C,GAEF+M,EAAK,aAAekI,GAAQ,CAAC,CAACkpD,GAAU75D,EAAQyI,EAAM/M,EAAMi8C,EAAM,EAAI,CAC/E,CAAC,EACMkiB,GAAU75D,EAAQyI,EAAM/M,EAAMi8C,CAAI,EAC3C,EACImiB,GAAY,SAAUh+C,EAAKrT,EAAMywC,EAAQ,CAI3C,GAHIugB,GAAOhxD,EAAMywC,EAAO,MAAM,GAG1BugB,GAAOhxD,EAAMywC,EAAO,KAAK,EAC3B,MAAO,GAET,GAAIA,EAAO,SACT,OAAOzwC,EAAK,WAAa,GAAKqT,EAAI,GAAGrT,EAAMywC,EAAO,QAAQ,CAE9D,EACI6gB,GAAa,SAAUj+C,EAAKrT,EAAMywC,EAAQ8gB,EAAUC,EAAStiB,EAAM,CACrE,IAAI7vC,EAAK/R,EACLua,EAAQ4oC,EAAO8gB,CAAQ,EACvB1gE,EACJ,GAAI4/C,EAAO,QACT,OAAOA,EAAO,QAAQzwC,EAAMywC,EAAQ8gB,CAAQ,EAE9C,GAAI1pD,GACF,GAAI,OAAOA,EAAM,OAAW,KAC1B,IAAKxI,KAAOwI,EACV,GAAIA,EAAM,eAAexI,CAAG,IACtBkyD,IAAa,aACfjkE,EAAQ+lB,EAAI,UAAUrT,EAAMX,CAAG,EAE/B/R,EAAQmiD,GAAY,SAASp8B,EAAKrT,EAAMX,CAAG,EAEzCmyD,GAAW,CAAClkE,GAAS,CAACmjD,EAAO,QAG5B,CAAC+gB,GAAW/gB,EAAO,QAAU,CAACugB,GAAO1jE,EAAOmiD,GAAY,oBAAoBp8B,EAAKo8B,GAAY,YAAY5nC,EAAMxI,CAAG,EAAG6vC,CAAI,EAAG7vC,CAAG,CAAC,GACnI,WAKN,KAAKxO,EAAI,EAAGA,EAAIgX,EAAM,OAAQhX,IAC5B,GAAI0gE,IAAa,aAAel+C,EAAI,UAAUrT,EAAM6H,EAAMhX,CAAC,CAAC,EAAI4+C,GAAY,SAASp8B,EAAKrT,EAAM6H,EAAMhX,CAAC,CAAC,EACtG,OAAO4/C,EAKf,OAAOA,CACT,EACI2gB,GAAY,SAAUpiB,EAAIhvC,EAAM/M,EAAMi8C,EAAMsiB,EAAS,CACvD,IAAIN,EAAaliB,EAAG,UAAU,IAAI/7C,CAAI,EAClCw9C,EAAQ5/C,EAAGrD,EAAGitC,EACdpnB,EAAM27B,EAAG,IACb,GAAIkiB,GAAclxD,GAChB,IAAKnP,EAAI,EAAGA,EAAIqgE,EAAW,OAAQrgE,IAEjC,GADA4/C,EAASygB,EAAWrgE,CAAC,EACjBwgE,GAAUriB,EAAG,IAAKhvC,EAAMywC,CAAM,GAAK6gB,GAAWj+C,EAAKrT,EAAMywC,EAAQ,aAAc+gB,EAAStiB,CAAI,GAAKoiB,GAAWj+C,EAAKrT,EAAMywC,EAAQ,SAAU+gB,EAAStiB,CAAI,EAAG,CAC3J,GAAIzU,EAAUgW,EAAO,SACnB,IAAKjjD,EAAI,EAAGA,EAAIitC,EAAQ,OAAQjtC,IAC9B,GAAI,CAACwhD,EAAG,IAAI,SAAShvC,EAAMy6B,EAAQjtC,CAAC,CAAC,EACnC,OAIN,OAAOijD,CACT,EAGN,EACI/xC,GAAQ,SAAUnH,EAAQtE,EAAMi8C,EAAMlvC,EAAM,CAC9C,IAAIke,EACJ,OAAIle,EACKmxD,GAAa55D,EAAQyI,EAAM/M,EAAMi8C,CAAI,GAE9ClvC,EAAOzI,EAAO,UAAU,QAAQ,EAC5B,GAAA45D,GAAa55D,EAAQyI,EAAM/M,EAAMi8C,CAAI,IAGzChxB,EAAY3mB,EAAO,UAAU,SAAS,EAClC2mB,IAAcle,GACZmxD,GAAa55D,EAAQ2mB,EAAWjrB,EAAMi8C,CAAI,IAKlD,EACIuiB,GAAW,SAAUl6D,EAAQwC,EAAOm1C,EAAM,CAC5C,IAAIwiB,EACAC,EAAqB,CAAC,EACtBC,EAAa,CAAC,EAClB,OAAAF,EAAen6D,EAAO,UAAU,SAAS,EACzCA,EAAO,IAAI,UAAUm6D,EAAc,SAAU1xD,EAAM,CACjD,IAAInP,EAAGoC,EACP,IAAKpC,EAAI,EAAGA,EAAIkJ,EAAM,OAAQlJ,IAC5BoC,EAAO8G,EAAMlJ,CAAC,EACV,CAAC+gE,EAAW3+D,CAAI,GAAKm+D,GAAU75D,EAAQyI,EAAM/M,EAAMi8C,CAAI,IACzD0iB,EAAW3+D,CAAI,EAAI,GACnB0+D,EAAmB,KAAK1+D,CAAI,EAGlC,EAAGsE,EAAO,IAAI,QAAQ,CAAC,EAChBo6D,CACT,EACIE,GAAW,SAAUt6D,EAAQtE,EAAM,CACrC,IAAIi+D,EAAa35D,EAAO,UAAU,IAAItE,CAAI,EACtCirB,EAAWjI,EAASplB,EAAGrD,EAAG8Q,EAC1B+U,EAAM9b,EAAO,IACjB,GAAI25D,EAGF,IAFAhzC,EAAY3mB,EAAO,UAAU,SAAS,EACtC0e,EAAUw5B,GAAY,WAAWp8B,EAAK6K,CAAS,EAC1C1wB,EAAI0jE,EAAW,OAAS,EAAG1jE,GAAK,EAAGA,IAAK,CAE3C,GADA8Q,EAAW4yD,EAAW1jE,CAAC,EAAE,SACrB,CAAC8Q,GAAY4yD,EAAW1jE,CAAC,EAAE,aAC7B,MAAO,GAET,IAAKqD,EAAIolB,EAAQ,OAAS,EAAGplB,GAAK,EAAGA,IACnC,GAAIwiB,EAAI,GAAG4C,EAAQplB,CAAC,EAAGyN,CAAQ,EAC7B,MAAO,EAGb,CAEF,MAAO,EACT,EACIwzD,GAAc,CAChB,UAAWV,GACX,UAAWC,GACX,MAAO3yD,GACP,SAAU+yD,GACV,SAAUI,GACV,iCAAkCZ,EACpC,EAEIc,GAAY,SAAU/xD,EAAM8L,EAAQ,CACtC,OAAO9L,EAAK,UAAU8L,CAAM,CAC9B,EACIkmD,GAAU,SAAUl6B,EAAK,CAC3B,IAAIsH,EAAiBtH,EAAI,eAAgBuH,EAAcvH,EAAI,YAAakY,EAAelY,EAAI,aAAcmY,EAAYnY,EAAI,UACzH,OAAIsH,IAAmB4Q,GAAgBzuB,GAAS,OAAO6d,CAAc,EAC/DC,EAAc,GAAKA,EAAcD,EAAe,UAAU,SAC5D4Q,EAAe+hB,GAAU3yB,EAAgBC,CAAW,EACpDD,EAAiB4Q,EAAa,gBAC1BC,EAAY5Q,GACd4Q,EAAYA,EAAY5Q,EACxBD,EAAiB4Q,EAAe+hB,GAAU/hB,EAAcC,CAAS,EAAE,gBACnEA,EAAYD,EAAa,UAAU,OACnC3Q,EAAc,GAEd4Q,EAAY,IAIZ1uB,GAAS,OAAO6d,CAAc,GAAKC,EAAc,GAAKA,EAAcD,EAAe,UAAU,SAC/FA,EAAiB2yB,GAAU3yB,EAAgBC,CAAW,EACtDA,EAAc,GAEZ9d,GAAS,OAAOyuB,CAAY,GAAKC,EAAY,GAAKA,EAAYD,EAAa,UAAU,SACvFA,EAAe+hB,GAAU/hB,EAAcC,CAAS,EAAE,gBAClDA,EAAYD,EAAa,UAAU,SAGhC,CACL,eAAgB5Q,EAChB,YAAaC,EACb,aAAc2Q,EACd,UAAWC,CACb,CACF,EACIgiB,GAAa,CAAE,MAAOD,EAAQ,EAE9BE,GAAS52B,GAAK,KAAM62B,GAAa,aACjCC,GAAa,SAAUC,EAAeryD,EAAM,CAC9C,OAAOqyD,EAAc,WAAWryD,EAAM,EAAI,CAC5C,EACIsyD,GAA0B,SAAUtyD,EAAM,CAE5C,QADIoL,EAAQ,CAAC,EACNpL,GAAM,CACX,GAAIA,EAAK,WAAa,GAAKA,EAAK,YAAckyD,IAAUlyD,EAAK,WAAW,OAAS,EAC/E,MAAO,CAAC,EAENA,EAAK,WAAa,GACpBoL,EAAM,KAAKpL,CAAI,EAEjBA,EAAOA,EAAK,UACd,CACA,OAAOoL,CACT,EACImnD,GAAwB,SAAUvyD,EAAM,CAC1C,OAAOsyD,GAAwBtyD,CAAI,EAAE,OAAS,CAChD,EACIwyD,GAAoB,SAAUxyD,EAAM,CACtC,IAAIsxB,EACJ,GAAItxB,GAEF,IADAsxB,EAAS,IAAIrT,GAAWje,EAAMA,CAAI,EAC7BA,EAAOsxB,EAAO,QAAQ,EAAGtxB,EAAMA,EAAOsxB,EAAO,KAAK,EACrD,GAAItxB,EAAK,WAAa,EACpB,OAAOA,EAIb,OAAO,IACT,EACIyyD,GAAuB,SAAUC,EAAM,CACzC,IAAI71B,EAAiBprB,GAAQ,QAAQ,MAAM,EAC3C,OAAAgC,GAAOopB,EAAgB,CACrB,GAAMs1B,GACN,iBAAkB,IAClB,gBAAiB,cACnB,CAAC,EACGO,GACFv9B,GAAO0H,EAAgBprB,GAAQ,SAASygD,EAAM,CAAC,EAE1Cr1B,CACT,EACI81B,GAA6B,SAAU9rB,EAAoB,CAC7D,IAAI/K,EAAW02B,GAAkB3rB,CAAkB,EACnD,OAAI/K,GAAYA,EAAS,UAAU,OAAO,CAAC,IAAMo2B,IAC/Cp2B,EAAS,WAAW,EAAG,CAAC,EAEnBA,CACT,EACI82B,GAA2B,SAAUr7D,EAAQyI,EAAM+mD,EAAW,CAC5DA,IAAc,SAChBA,EAAY,IAEd,IAAI1zC,EAAM9b,EAAO,IAAKktC,EAAYltC,EAAO,UACzC,GAAIg7D,GAAsBvyD,CAAI,EAC5BmnD,GAAc,cAAc5vD,EAAQ,GAAOka,GAAQ,QAAQzR,CAAI,EAAG+mD,CAAS,MACtE,CACL,IAAIjvB,EAAM2M,EAAU,OAAO,EACvBqW,EAAQznC,EAAI,UAAUrT,EAAMqT,EAAI,OAAO,EACvCyoB,EAAW62B,GAA2B3yD,CAAI,EAC1C83B,EAAI,iBAAmBgE,GAAYhE,EAAI,YAAc,GACvDA,EAAI,SAASgE,EAAUhE,EAAI,YAAc,CAAC,EAExCA,EAAI,eAAiBgE,GAAYhE,EAAI,UAAY,GACnDA,EAAI,OAAOgE,EAAUhE,EAAI,UAAY,CAAC,EAExCzkB,EAAI,OAAOrT,EAAM,EAAI,EACjB86C,GAASznC,EAAI,QAAQynC,CAAK,GAC5BhE,GAAU,kBAAkBrlC,GAAQ,QAAQqpC,CAAK,CAAC,EAEpDrW,EAAU,OAAO3M,CAAG,CACtB,CACF,EACI+6B,GAAuB,SAAUt7D,EAAQyI,EAAM+mD,EAAW,CACxDA,IAAc,SAChBA,EAAY,IAEd,IAAI1zC,EAAM9b,EAAO,IAAKktC,EAAYltC,EAAO,UACzC,GAAKyI,EAQH4yD,GAAyBr7D,EAAQyI,EAAM+mD,CAAS,UAPhD/mD,EAAO6lC,GAAwBtuC,EAAO,QAAQ,EAAGktC,EAAU,SAAS,CAAC,EACjE,CAACzkC,EACH,KAAOA,EAAOqT,EAAI,IAAI8+C,EAAU,GAC9BS,GAAyBr7D,EAAQyI,EAAM,EAAK,CAMpD,EACI8yD,GAA2B,SAAUv7D,EAAQslC,EAAgBk2B,EAAY,CAC3E,IAAI1/C,EAAM9b,EAAO,IAAKujD,EAAQznC,EAAI,UAAU0/C,EAAYtlE,EAAMgiD,GAAY,YAAal4C,CAAM,CAAC,EAC1FujD,GAASznC,EAAI,QAAQynC,CAAK,EAC5BiY,EAAW,WAAW,aAAal2B,EAAgBk2B,CAAU,GAE7Djc,GAAU,iBAAiBrlC,GAAQ,QAAQshD,CAAU,CAAC,EAClD1/C,EAAI,QAAQ0/C,CAAU,EACxBA,EAAW,WAAW,aAAal2B,EAAgBk2B,CAAU,EAE7D1/C,EAAI,YAAYwpB,EAAgBk2B,CAAU,EAGhD,EACIC,GAAa,SAAUj3B,EAAY/7B,EAAM,CAC3C,OAAA+7B,EAAW,YAAY/7B,CAAI,EACpBA,CACT,EACIizD,GAAsC,SAAUC,EAAar2B,EAAgB,CAC/E,IAAIs2B,EAAsB5hE,GAAM2hE,EAAa,SAAUn3B,EAAYg3B,EAAY,CAC7E,OAAOC,GAAWj3B,EAAYg3B,EAAW,UAAU,EAAK,CAAC,CAC3D,EAAGl2B,CAAc,EACjB,OAAOm2B,GAAWG,EAAqBA,EAAoB,cAAc,eAAejB,EAAM,CAAC,CACjG,EACIkB,GAAmB,SAAU77D,EAAQtE,EAAMi8C,EAAM,CACnD,IAAIpX,EAAK+E,EAAgBf,EAAUhwB,EAAQ44B,EAAU5qC,EAAW6I,EAC5D8hC,EAAYltC,EAAO,UACvBugC,EAAM2M,EAAU,OAAO,EAAI,EAC3B34B,EAASgsB,EAAI,YACbh+B,EAAYg+B,EAAI,eAChBn1B,EAAO7I,EAAU,UACjB+iC,EAAiBgJ,GAAwBtuC,EAAO,QAAQ,EAAGktC,EAAU,SAAS,CAAC,EAC3E5H,IACFf,EAAW02B,GAAkB31B,CAAc,GAE7C,IAAIw2B,EAAgB,gCAChB1wD,GAAQmJ,EAAS,GAAKA,EAASnJ,EAAK,QAAU0wD,EAAc,KAAK1wD,EAAK,OAAOmJ,CAAM,CAAC,GAAKunD,EAAc,KAAK1wD,EAAK,OAAOmJ,EAAS,CAAC,CAAC,GACrI44B,EAAWD,EAAU,YAAY,EACjC3M,EAAI,SAAS,EAAI,EACjBA,EAAMkZ,GAAY,UAAUz5C,EAAQugC,EAAKvgC,EAAO,UAAU,IAAItE,CAAI,CAAC,EACnE6kC,EAAMm6B,GAAW,MAAMn6B,CAAG,EAC1BvgC,EAAO,UAAU,MAAMtE,EAAMi8C,EAAMpX,CAAG,EACtC2M,EAAU,eAAeC,CAAQ,KAE7B,CAAC7H,GAAkBf,EAAS,YAAco2B,MAC5Cr1B,EAAiBu1B,GAAW76D,EAAO,OAAO,EAAGk7D,GAAqB,EAAI,EAAE,IAAI,CAAC,EAC7E32B,EAAWe,EAAe,WAC1B/E,EAAI,WAAW+E,CAAc,EAC7B/wB,EAAS,GACTvU,EAAO,UAAU,MAAMtE,EAAMi8C,EAAMrS,CAAc,EAInD4H,EAAU,kBAAkB3I,EAAUhwB,CAAM,EAEhD,EACIwnD,GAAoB,SAAU/7D,EAAQtE,EAAMi8C,EAAMsiB,EAAS,CAC7D,IAAIn+C,EAAM9b,EAAO,IAAKktC,EAAYltC,EAAO,UACrCuC,EAAWgS,EAAQ44B,EACnB6uB,EAAiBvzD,EAAM+yD,EACvB98C,EAAU,CAAC,EAAG6hB,EAAM2M,EAAU,OAAO,EACrC5H,EAUJ,IATA/iC,EAAYg+B,EAAI,eAChBhsB,EAASgsB,EAAI,YACb93B,EAAOlG,EACHA,EAAU,WAAa,IACrBgS,IAAWhS,EAAU,UAAU,SACjCy5D,EAAkB,IAEpBvzD,EAAOA,EAAK,YAEPA,GAAM,CACX,GAAI8xD,GAAY,UAAUv6D,EAAQyI,EAAM/M,EAAMi8C,EAAMsiB,CAAO,EAAG,CAC5DuB,EAAa/yD,EACb,KACF,CACIA,EAAK,cACPuzD,EAAkB,IAEpBt9C,EAAQ,KAAKjW,CAAI,EACjBA,EAAOA,EAAK,UACd,CACA,GAAK+yD,EAGL,GAAIQ,EAAiB,CACnB7uB,EAAWD,EAAU,YAAY,EACjC3M,EAAI,SAAS,EAAI,EACjB,IAAI07B,GAAcxiB,GAAY,UAAUz5C,EAAQugC,EAAKvgC,EAAO,UAAU,IAAItE,CAAI,EAAG,EAAI,EACrFugE,GAAcvB,GAAW,MAAMuB,EAAW,EAC1Cj8D,EAAO,UAAU,OAAOtE,EAAMi8C,EAAMskB,EAAW,EAC/C/uB,EAAU,eAAeC,CAAQ,CACnC,KAAO,CACL7H,EAAiBgJ,GAAwBtuC,EAAO,QAAQ,EAAGw7D,CAAU,EACrE,IAAIU,GAAoBhB,GAAqB,EAAK,EAAE,IAAI,EACpD7J,GAAYqK,GAAoCh9C,EAASw9C,EAAiB,EAC1E52B,EACFi2B,GAAyBv7D,EAAQk8D,GAAmB52B,CAAc,EAElEi2B,GAAyBv7D,EAAQk8D,GAAmBV,CAAU,EAEhEH,GAAyBr7D,EAAQslC,EAAgB,EAAK,EACtD4H,EAAU,kBAAkBmkB,GAAW,CAAC,EACpCv1C,EAAI,QAAQ0/C,CAAU,GACxB1/C,EAAI,OAAO0/C,CAAU,CAEzB,CACF,EACIW,GAAwB,SAAUn8D,EAAQo8D,EAAS,CACrD,IAAIlvB,EAAYltC,EAAO,UAAWoB,EAAOpB,EAAO,QAAQ,EACxDs7D,GAAqBt7D,EAAQ,KAAM,EAAK,GACnCo8D,IAAY,GAAKA,IAAY,KAAOlvB,EAAU,YAAY,GAAKA,EAAU,SAAS,EAAE,YAAcytB,IACrGW,GAAqBt7D,EAAQsuC,GAAwBltC,EAAM8rC,EAAU,SAAS,CAAC,CAAC,GAE9EkvB,IAAY,IAAMA,IAAY,KAChCd,GAAqBt7D,EAAQsuC,GAAwBltC,EAAM8rC,EAAU,SAAS,CAAC,CAAC,CAEpF,EACImvB,GAAU,SAAUr8D,EAAQ,CAC9BA,EAAO,GAAG,kBAAmB,SAAU/B,EAAG,CACxCk+D,GAAsBn8D,EAAQ/B,EAAE,OAAO,CACzC,CAAC,CACH,EACIq+D,GAAyB,SAAUxV,EAAY6U,EAAa,CAC9D,IAAIr2B,EAAiB41B,GAAqB,EAAK,EAC3CqB,EAAYb,GAAoCC,EAAar2B,EAAe,IAAI,CAAC,EACrF,OAAA7H,GAAOvjB,GAAQ,QAAQ4sC,CAAU,EAAGxhB,CAAc,EAClDlH,GAASlkB,GAAQ,QAAQ4sC,CAAU,CAAC,EAC7B1b,GAAgBmxB,EAAW,CAAC,CACrC,EACIC,GAAkB,SAAUx8D,EAAQb,EAAS,CAC/C,IAAIs9D,EAAiBz8D,EAAO,OAAO,sBAAsB,EACzD,OAAOy8D,EAAe,eAAe/gE,GAAKyD,CAAO,CAAC,GAAK,CAACkvC,GAAYlvC,EAAQ,IAAI,CAAC,GAAK,CAAC6qB,GAAS,QAAQ7qB,EAAQ,IAAI,CAAC,CACvH,EACIu9D,GAA4B,SAAUv9D,EAAS,CACjD,OAAOkvC,GAAYlvC,EAAQ,IAAI,CAAC,GAAK67D,GAAsB77D,EAAQ,IAAI,CAAC,CAC1E,EAEIw9D,GAAmB,SAAU38C,EAASu4C,EAAU,CAClD,IAAI75C,EAAU8pC,GAAQ,eAAe+P,EAAUv4C,CAAO,EACtD,OAAO5lB,GAAUskB,EAASmJ,CAAO,EAAE,KAAK/xB,EAAS4oB,CAAO,EAAG,SAAUrP,EAAO,CAC1E,OAAOqP,EAAQ,MAAM,EAAGrP,CAAK,CAC/B,CAAC,CACH,EACIutD,GAAoB,SAAU7oD,EAAK,CACrC,OAAO/Q,GAAS+Q,CAAG,EAAE,SAAW,CAClC,EACI8oD,GAAqB,SAAUvyD,EAAStK,EAAQS,EAAQq8D,EAAe,CACzE,IAAIC,EAAoB7mE,EAAMsmE,GAAiBx8D,CAAM,EACjD27D,EAAcniE,GAAIO,GAAO+iE,EAAeC,CAAiB,EAAG,SAAUhpD,EAAK,CAC7E,OAAOA,EAAI,IAAI,CACjB,CAAC,EACD,GAAI4nD,EAAY,SAAW,EACzB/L,GAAc,cAAc5vD,EAAQsK,EAAS7J,CAAM,MAC9C,CACL,IAAIiU,EAAM4nD,GAAuB77D,EAAO,IAAI,EAAGk7D,CAAW,EAC1D37D,EAAO,UAAU,OAAO0U,EAAI,QAAQ,CAAC,CACvC,CACF,EACIsoD,GAAgB,SAAUh9D,EAAQsK,EAAS,CAC7C,IAAI0V,EAAU9F,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAC1Cu4D,EAAWr+C,GAAQ,QAAQla,EAAO,UAAU,SAAS,CAAC,EACtD88D,EAAgB/iE,GAAO4iE,GAAiB38C,EAASu4C,CAAQ,EAAGqE,EAAiB,EACjF,OAAO3hE,GAAK6hE,CAAa,EAAE,IAAI,SAAUr8D,EAAQ,CAC/C,IAAIklD,EAAUva,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,EACtE,OAAImmD,GAAY,gCAAgC77C,EAASq7C,EAASllD,EAAO,IAAI,CAAC,GAAK,CAACi8D,GAA0Bj8D,CAAM,GAClHo8D,GAAmBvyD,EAAStK,EAAQS,EAAQq8D,CAAa,EAClD,IAEA,EAEX,CAAC,EAAE,MAAM,EAAK,CAChB,EACIG,GAAoB,SAAUj9D,EAAQsK,EAAS,CACjD,OAAOtK,EAAO,UAAU,YAAY,EAAIg9D,GAAch9D,EAAQsK,CAAO,EAAI,EAC3E,EACI4yD,GAAqB,CAAE,gBAAiBD,EAAkB,EAE1DE,GAAW,SAAUppD,EAAK,CAG5B,QAFI9d,EAAI,EAAGwe,EAAI,EACXwL,EAAelM,EACZkM,GAAgBA,EAAa,UAClChqB,GAAKgqB,EAAa,YAAc,EAChCxL,GAAKwL,EAAa,WAAa,EAC/BA,EAAeA,EAAa,aAE9B,MAAO,CACL,EAAGhqB,EACH,EAAGwe,CACL,CACF,EACI2oD,GAA0B,SAAUp9D,EAAQ+T,EAAKspD,EAAY,CAC/D,IAAIC,EAAc,CAChB,IAAKvpD,EACL,WAAYspD,CACd,EACA,OAAAr9D,EAAO,KAAK,iBAAkBs9D,CAAW,EAClCA,EAAY,mBAAmB,CACxC,EACIC,GAAwB,SAAUv9D,EAAQ+T,EAAKspD,EAAY,CAC7D,IAAI5oD,EAAG+oD,EACH1hD,EAAM9b,EAAO,IACb2Q,EAAOmL,EAAI,QAAQ,EACnB2hD,EAAWC,EAAWC,EAAU,EACpC,GAAI,CAAAP,GAAwBp9D,EAAQ+T,EAAKspD,CAAU,GAG9CrzC,GAAS,UAAUjW,CAAG,EAM3B,IAHIspD,IAAe,KACjBM,EAAU5pD,EAAI,cAEZpD,EAAK,WAAa,OAAQ,CAC5B,IAAIitD,EAAkB59D,EAAO,UAAU,mBAAmB,EAC1D,GAAI49D,EAAiB,CACnBnpD,EAAI0oD,GAASppD,CAAG,EAAE,EAAIopD,GAASS,CAAe,EAAE,EAAID,EACpDD,EAAYE,EAAgB,aAC5BH,EAAYG,EAAgB,WACxBnpD,EAAIgpD,GAAahpD,EAAI,GAAKgpD,EAAYC,KACxCE,EAAgB,UAAYnpD,EAAIgpD,EAAYhpD,EAAIA,EAAIipD,EAAY,IAElE,MACF,CACF,CACAF,EAAW1hD,EAAI,YAAY9b,EAAO,OAAO,CAAC,EAC1CyU,EAAIqH,EAAI,OAAO/H,CAAG,EAAE,EAAI4pD,EACxBF,EAAYD,EAAS,EACrBE,EAAYF,EAAS,GACjB/oD,EAAI+oD,EAAS,GAAK/oD,EAAI,GAAKgpD,EAAYC,IACzC19D,EAAO,OAAO,EAAE,SAAS,EAAGyU,EAAIgpD,EAAYhpD,EAAIA,EAAIipD,EAAY,EAAE,EAEtE,EACIG,GAAkB,SAAU79D,EAAQ,CACtC,GAAIA,EAAO,OACT,OAAOA,EAAO,QAAQ,EAAE,sBAAsB,EAE9C,IAAIsB,EAAMtB,EAAO,OAAO,EACxB,MAAO,CACL,KAAM,EACN,MAAOsB,EAAI,WACX,IAAK,EACL,OAAQA,EAAI,YACZ,MAAOA,EAAI,WACX,OAAQA,EAAI,WACd,CAEJ,EACIw8D,GAAW,SAAU99D,EAAQ+9D,EAAIC,EAAI,CACnCh+D,EAAO,QACTA,EAAO,QAAQ,EAAE,YAAc+9D,EAC/B/9D,EAAO,QAAQ,EAAE,WAAag+D,GAE9Bh+D,EAAO,OAAO,EAAE,SAAS+9D,EAAIC,CAAE,CAEnC,EACIC,GAAsB,SAAUj+D,EAAQugC,EAAK,CAC/CvlC,GAAK4vC,GAAc,eAAerK,CAAG,EAAE,eAAe,CAAC,EAAE,KAAK,SAAU29B,EAAS,CAC/E,IAAIC,EAAWN,GAAgB79D,CAAM,EACjCo+D,EAAWz2B,GAAYw2B,EAAUD,CAAO,EACxCpuB,EAAS,EACTiuB,EAAKK,EAAS,EAAI,EAAIA,EAAS,EAAItuB,EAASsuB,EAAS,EAAItuB,EACzDkuB,EAAKI,EAAS,EAAI,EAAIA,EAAS,EAAItuB,EAASsuB,EAAS,EAAItuB,EAC7DguB,GAAS99D,EAAQo+D,EAAS,IAAM,EAAIL,EAAK,EAAGK,EAAS,IAAM,EAAIJ,EAAK,CAAC,CACvE,CAAC,CACH,EACIK,GAAiB,CACnB,sBAAuBd,GACvB,oBAAqBU,EACvB,EAEIK,GAA0Bt0C,GAAS,sBACnCu0C,GAA2Bv0C,GAAS,uBACpCw0C,GAAY,SAAUptB,EAAWpxC,EAAQyI,EAAMg1B,EAAQghC,EAAgB,CACzE,OAAOz+D,EAAO,oBAAoB,UAAUoxC,EAAW3oC,EAAMg1B,EAAQghC,CAAc,CACrF,EACIC,GAAe,SAAUj2D,EAAM,CACjC,IAAI83B,EAAM93B,EAAK,cAAc,YAAY,EACzC,OAAA83B,EAAI,WAAW93B,CAAI,EACZ83B,CACT,EACIo+B,GAAa,SAAU3+D,EAAQyI,EAAM,CACvC,IAAIxK,EAAI+B,EAAO,KAAK,uBAAwB,CAAE,OAAQyI,CAAK,CAAC,EAC5D,OAAIxK,EAAE,mBAAmB,EAChB,KAEFygE,GAAaj2D,CAAI,CAC1B,EACIm2D,GAAqB,SAAU5+D,EAAQwlC,EAAOi5B,EAAgB,CAChE,IAAI7rB,EAAkBN,GAAe,EAAGtyC,EAAO,QAAQ,EAAGwlC,CAAK,EAC3DgF,EAAgBY,GAAgB,eAAewH,CAAe,EAC9DisB,EAAoBr0B,EAAc,QAAQ,EAC9C,GAAI+zB,GAAyBM,CAAiB,EAC5C,OAAOL,GAAU,EAAGx+D,EAAQ6+D,EAAmB,CAACr0B,EAAc,QAAQ,EAAG,EAAK,EAEhF,IAAIs0B,EAA0Bt0B,EAAc,QAAQ,EAAI,EACxD,GAAI+zB,GAAyBO,CAAuB,EAClD,OAAON,GAAU,EAAGx+D,EAAQ8+D,EAAyB,GAAO,EAAK,EAEnE,IAAIxO,EAAStwD,EAAO,IAAI,UAAUwqC,EAAc,QAAQ,EAAG,SAAU/hC,EAAM,CACzE,OAAO81D,GAAyB91D,CAAI,GAAK61D,GAAwB71D,CAAI,CACvE,CAAC,EACD,OAAI81D,GAAyBjO,CAAM,EAC1BkO,GAAU,EAAGx+D,EAAQswD,EAAQ,GAAOmO,CAAc,EAEpD,IACT,EACIM,GAAmB,SAAU/+D,EAAQwlC,EAAOi5B,EAAgB,CAC9D,GAAI,CAACj5B,GAAS,CAACA,EAAM,UACnB,OAAOA,EAET,IAAIw5B,EAAaJ,GAAmB5+D,EAAQwlC,EAAOi5B,CAAc,EACjE,OAAIO,GAGGx5B,CACT,EACIy5B,GAAc,SAAUj/D,EAAQugC,EAAK,CACvCvgC,EAAO,UAAU,OAAOugC,CAAG,EAC3B89B,GAAe,oBAAoBr+D,EAAQA,EAAO,UAAU,OAAO,CAAC,CACtE,EAEIk/D,GAAsB,SAAUpjD,EAAKrT,EAAM,CACzCuhB,GAAS,OAAOvhB,CAAI,GAAKA,EAAK,KAAK,SAAW,GAChDqT,EAAI,OAAOrT,CAAI,CAEnB,EACI02D,GAA4B,SAAUn/D,EAAQwlC,EAAO/8B,EAAM2oC,EAAW9mC,EAAS80D,EAAmB,CACpG,IAAIJ,EAAaR,GAAUptB,EAAWpxC,EAAQo/D,EAAkB,QAAQ,CAAC90D,CAAO,EAAGA,EAAS,EAAI,EAChG,GAAIk7B,EAAM,UAAW,CACnB,IAAIykB,EAAczkB,EAAM,WAAW,EAC/Bl7B,EACF2/C,EAAY,OAAO+U,EAAW,eAAgBA,EAAW,WAAW,EAEpE/U,EAAY,SAAS+U,EAAW,aAAcA,EAAW,SAAS,EAEpE/U,EAAY,eAAe,CAC7B,MACEzkB,EAAM,eAAe,EAEvB,OAAAxlC,EAAO,UAAU,OAAOg/D,CAAU,EAClCE,GAAoBl/D,EAAO,IAAKyI,CAAI,EAC7B,EACT,EACI42D,GAAwB,SAAUr/D,EAAQsK,EAAS,CACrD,IAAIk7B,EAAQxlC,EAAO,UAAU,OAAO,EACpC,GAAI,CAACgqB,GAAS,OAAOwb,EAAM,uBAAuB,EAChD,MAAO,GAET,IAAI4L,EAAY9mC,EAAU8oC,GAAW,SAAWA,GAAW,UACvDsK,EAActJ,GAAYp0C,EAAO,QAAQ,CAAC,EAC1Cs/D,EAA6BppE,EAAM68C,GAAwB2K,EAAY,IAAI,EAC3E6hB,EAA6BrpE,EAAM68C,GAAwB2K,EAAY,IAAI,EAC3E8hB,EAAel1D,EAAUg1D,EAA6BC,EACtDE,EAAiCn1D,EAAU6hD,GAA+BC,GAC1E5hB,EAAgBmI,GAA2BvB,EAAWpxC,EAAO,QAAQ,EAAGwlC,CAAK,EAC7Ek6B,EAAoBra,GAAY,kBAAkB/6C,EAASk1D,EAAah1B,CAAa,CAAC,EAC1F,GAAKk1B,GAEE,GAAID,EAA+BC,CAAiB,EACzD,OAAOP,GAA0Bn/D,EAAQwlC,EAAOgF,EAAc,QAAQ,EAAG4G,EAAW9mC,EAASo1D,CAAiB,MAF9G,OAAO,GAIT,IAAIN,EAAoBI,EAAaE,CAAiB,EACtD,OAAIN,GAAqBK,EAA+BL,CAAiB,GACnEnsB,GAAsBysB,EAAmBN,CAAiB,EACrDD,GAA0Bn/D,EAAQwlC,EAAOgF,EAAc,QAAQ,EAAG4G,EAAW9mC,EAAS80D,CAAiB,EAG3G,EACT,EACIO,GAAoB,SAAU3/D,EAAQsK,EAAS,CACjD,OAAO+0D,GAAsBr/D,EAAQsK,CAAO,CAC9C,EACIs1D,GAAoB,CAAE,gBAAiBD,EAAkB,EAEzDE,GAAgB,SAAU7/D,EAAQ8/D,EAAS,CAC7C9/D,EAAO,OAAO,EAAE,YAAY8/D,EAAS,GAAO,IAAI,CAClD,EACIC,GAAgB,SAAU//D,EAAQ,CACpC,GAAI,CAAAwwD,GAAU,gBAAgBxwD,EAAQ,EAAK,EAEpC,IAAI4/D,GAAkB,gBAAgB5/D,EAAQ,EAAK,EACxD,OACK,GAAIo1D,GAAqB,gBAAgBp1D,EAAQ,EAAK,EAC3D,OACK,GAAIypD,GAAoB,gBAAgBzpD,EAAQ,EAAK,EAC1D,OACK,GAAIw5D,GAAY,gBAAgBx5D,CAAM,EAC3C,OACK,GAAImqD,GAAiB,gBAAgBnqD,EAAQ,EAAK,EACvD,OACK,GAAIk9D,GAAmB,gBAAgBl9D,EAAQ,EAAK,EACzD,OAEA6/D,GAAc7/D,EAAQ,QAAQ,EAC9BmmD,GAAY,cAAcnmD,CAAM,EAEpC,EACIggE,GAAuB,SAAUhgE,EAAQ,CAC3C,GAAI,CAAAwwD,GAAU,gBAAgBxwD,EAAQ,EAAI,EAEnC,IAAI4/D,GAAkB,gBAAgB5/D,EAAQ,EAAI,EACvD,OACK,GAAIo1D,GAAqB,gBAAgBp1D,EAAQ,EAAI,EAC1D,OACK,GAAIypD,GAAoB,gBAAgBzpD,EAAQ,EAAI,EACzD,OACK,GAAIw5D,GAAY,gBAAgBx5D,CAAM,EAC3C,OACK,GAAImqD,GAAiB,gBAAgBnqD,EAAQ,EAAI,EACtD,OACK,GAAIk9D,GAAmB,gBAAgBl9D,EAAQ,EAAI,EACxD,OAEA6/D,GAAc7/D,EAAQ,eAAe,EAEzC,EACIigE,GAAiB,CACnB,cAAeF,GACf,qBAAsBC,EACxB,EAEIE,GAAuB,SAAUn3C,EAAU/I,EAASjM,EAAK,CAC3D,IAAIosD,EAAc,SAAUpsD,EAAK,CAC/B,OAAO+I,GAAO/I,EAAKgV,CAAQ,CAC7B,EACIpK,EAAS,SAAU5K,EAAK,CAC1B,OAAOhd,GAAGmjB,GAAQ,QAAQ8F,CAAO,EAAGjM,CAAG,CACzC,EACA,OAAO8rB,GAAQ3lB,GAAQ,QAAQnG,CAAG,EAAG,SAAUA,EAAK,CAClD,OAAOosD,EAAYpsD,CAAG,EAAE,OAAO,CACjC,EAAG4K,CAAM,EAAE,KAAKwhD,CAAW,CAC7B,EACIC,GAAU,SAAUC,EAAQC,EAAW,CACzC,IAAIC,EAAS,KAAK,IAAI,GAAID,CAAS,EACnC,OAAO,KAAK,MAAMD,EAASE,CAAM,EAAIA,CACvC,EACIC,GAAO,SAAUC,EAAUH,EAAW,CACxC,MAAI,aAAa,KAAKG,CAAQ,EACrBL,GAAQ,SAASK,EAAU,EAAE,EAAI,GAAK,GAAIH,GAAa,CAAC,EAAI,KAE9DG,CACT,EACIC,GAAsB,SAAUC,EAAY,CAC9C,OAAOA,EAAW,QAAQ,YAAa,EAAE,EAAE,QAAQ,QAAS,GAAG,CACjE,EACIC,GAAsB,SAAU73C,EAAUhV,EAAK,CACjD,OAAO/b,EAAO,KAAK8iC,GAAW,IAAI,SAAS/mB,EAAKgV,EAAU,EAAI,CAAC,CACjE,EACI83C,GAAc,SAAU93C,EAAU,CACpC,OAAO,SAAU/I,EAASjM,EAAK,CAC7B,OAAO/b,EAAO,KAAK+b,CAAG,EAAE,IAAImG,GAAQ,OAAO,EAAE,OAAOe,CAAS,EAAE,KAAK,SAAU9b,EAAS,CACrF,OAAO+gE,GAAqBn3C,EAAU/I,EAAS7gB,EAAQ,IAAI,CAAC,EAAE,GAAGyhE,GAAoB73C,EAAU5pB,EAAQ,IAAI,CAAC,CAAC,CAC/G,CAAC,EAAE,MAAM,EAAE,CACb,CACF,EACI2hE,GAAW,CACb,YAAaD,GAAY,WAAW,EACpC,cAAeprE,EAAQirE,GAAqBG,GAAY,aAAa,CAAC,EACtE,KAAML,EACR,EAEIO,GAAwB,SAAU/gE,EAAQ,CAC5C,OAAOo1C,GAAY,gBAAgBp1C,EAAO,QAAQ,CAAC,EAAE,IAAI,SAAUswC,EAAO,CACxE,IAAI/tC,EAAY+tC,EAAM,UAAU,EAChC,OAAOtmB,GAAS,OAAOznB,CAAS,EAAIA,EAAU,WAAaA,CAC7D,CAAC,CACH,EACIy+D,GAAuB,SAAUzgC,EAAK5vB,EAAM,CAC9C,OAAO4vB,EAAI,iBAAmB5vB,GAAQ4vB,EAAI,cAAgB,CAC5D,EACI0gC,GAAkB,SAAUjhE,EAAQ,CACtC,OAAOhI,EAAO,KAAKgI,EAAO,UAAU,OAAO,CAAC,EAAE,KAAK,SAAUugC,EAAK,CAChE,IAAI5vB,EAAO3Q,EAAO,QAAQ,EAC1B,OAAOghE,GAAqBzgC,EAAK5vB,CAAI,EAAI3Y,EAAO,KAAK,EAAIA,EAAO,KAAKgI,EAAO,UAAU,SAAS,EAAI,CAAC,CACtG,CAAC,CACH,EACIkhE,GAAqB,SAAUlhE,EAAQjK,EAAO,CAChD,GAAI,aAAa,KAAKA,CAAK,EAAG,CAC5B,IAAIorE,EAAiB,SAASprE,EAAO,EAAE,EACvC,GAAIorE,GAAkB,GAAKA,GAAkB,EAAG,CAC9C,IAAIC,EAAY3c,GAAS,mBAAmBzkD,CAAM,EAC9CqhE,EAAc5c,GAAS,mBAAmBzkD,CAAM,EACpD,OAAIqhE,EACKA,EAAYF,EAAiB,CAAC,GAAKprE,EAEnCqrE,EAAUD,EAAiB,CAAC,GAAKprE,CAE5C,KACE,QAAOA,CAEX,KACE,QAAOA,CAEX,EACIurE,GAAiB,SAAUthE,EAAQjK,EAAO,CAC5CiK,EAAO,UAAU,OAAO,WAAY,CAAE,MAAOkhE,GAAmBlhE,EAAQjK,CAAK,CAAE,CAAC,EAChFiK,EAAO,YAAY,CACrB,EACIuhE,GAAgB,SAAUvhE,EAAQ,CACpC,OAAOihE,GAAgBjhE,CAAM,EAAE,KAAK,UAAY,CAC9C,OAAO+gE,GAAsB/gE,CAAM,EAAE,IAAI,SAAUsiD,EAAc,CAC/D,OAAOwe,GAAS,cAAc9gE,EAAO,QAAQ,EAAGsiD,CAAY,CAC9D,CAAC,EAAE,MAAM,EAAE,CACb,EAAG,SAAUA,EAAc,CACzB,OAAOwe,GAAS,cAAc9gE,EAAO,QAAQ,EAAGsiD,CAAY,CAC9D,CAAC,CACH,EACIkf,GAAiB,SAAUxhE,EAAQjK,EAAO,CAC5CiK,EAAO,UAAU,OAAO,WAAY,CAAE,MAAOkhE,GAAmBlhE,EAAQjK,CAAK,CAAE,CAAC,EAChFiK,EAAO,YAAY,CACrB,EACIyhE,GAAgB,SAAUzhE,EAAQ,CACpC,OAAOihE,GAAgBjhE,CAAM,EAAE,KAAK,UAAY,CAC9C,OAAO+gE,GAAsB/gE,CAAM,EAAE,IAAI,SAAUsiD,EAAc,CAC/D,OAAOwe,GAAS,YAAY9gE,EAAO,QAAQ,EAAGsiD,CAAY,CAC5D,CAAC,EAAE,MAAM,EAAE,CACb,EAAG,SAAUA,EAAc,CACzB,OAAOwe,GAAS,YAAY9gE,EAAO,QAAQ,EAAGsiD,CAAY,CAC5D,CAAC,CACH,EAEIof,GAAS,SAAUC,EAAM5zB,EAAM,CACjC,OAAO4zB,GAAQ5zB,GAAS4zB,EAAK,iBAAmB5zB,EAAK,gBAAkB4zB,EAAK,cAAgB5zB,EAAK,aAAiB4zB,EAAK,eAAiB5zB,EAAK,cAAgB4zB,EAAK,YAAc5zB,EAAK,SACvL,EACI6zB,GAAe,CAAE,KAAMF,EAAO,EAE9BG,GAAa,SAAUp5D,EAAMme,EAAU/W,EAAW,CACpD,KAAOpH,GAAQA,IAASme,GAAU,CAChC,GAAI/W,EAAUpH,CAAI,EAChB,OAAOA,EAETA,EAAOA,EAAK,UACd,CACA,OAAO,IACT,EACIq5D,GAAY,SAAUr5D,EAAMme,EAAU/W,EAAW,CACnD,OAAOgyD,GAAWp5D,EAAMme,EAAU/W,CAAS,IAAM,IACnD,EACIkyD,GAAoB,SAAUt5D,EAAMme,EAAUlrB,EAAM,CACtD,OAAOomE,GAAUr5D,EAAMme,EAAU,SAAUne,EAAM,CAC/C,OAAOA,EAAK,WAAa/M,CAC3B,CAAC,CACH,EACIsmE,GAAY,SAAUv5D,EAAM,CAC9B,OAAOA,GAAQA,EAAK,WAAa,OACnC,EACIw5D,GAAgB,SAAUx5D,EAAM,CAClC,OAAOA,GAAQ,oBAAoB,KAAKA,EAAK,QAAQ,CACvD,EACIy5D,GAA0B,SAAUz5D,EAAMme,EAAU,CACtD,OAAOwd,GAAiB37B,CAAI,GAAKq5D,GAAUr5D,EAAMme,EAAUynB,EAAW,IAAM,EAC9E,EACI8zB,GAAmB,SAAUrmD,EAAKrT,EAAMwqB,EAAM,CAEhD,QADI8G,EAAS,IAAIrT,GAAWje,EAAMqT,EAAI,UAAUrT,EAAK,WAAYqT,EAAI,OAAO,GAAKA,EAAI,QAAQ,CAAC,EACvFrT,EAAOsxB,EAAO9G,EAAO,OAAS,MAAM,EAAE,GAC3C,GAAIjJ,GAAS,KAAKvhB,CAAI,EACpB,MAAO,EAGb,EACI25D,GAAa,SAAU35D,EAAM/M,EAAM,CACrC,OAAO+M,EAAK,iBAAmBA,EAAK,gBAAgB,WAAa/M,CACnE,EACI2mE,GAAgC,SAAUjhE,EAAMqH,EAAM,CACxD,KAAOA,GAAQA,IAASrH,GAAM,CAC5B,GAAI4oB,GAAS,uBAAuBvhB,CAAI,EACtC,MAAO,GAETA,EAAOA,EAAK,UACd,CACA,MAAO,EACT,EACI65D,GAAuB,SAAUxmD,EAAKymD,EAAaz0B,EAAW7a,EAAMtM,EAAW,CACjF,IAAIoT,EAAQyoC,EAAmBC,EAC3BrhE,EAAO0a,EAAI,QAAQ,EACnBrT,EACA6lB,EAAsBxS,EAAI,OAAO,oBAAoB,EAEzD,GADA2mD,EAAuB3mD,EAAI,UAAU6K,EAAU,WAAY7K,EAAI,OAAO,GAAK1a,EACvE6xB,GAAQjJ,GAAS,KAAKrD,CAAS,GAAK47C,GAAezmD,EAAI,QAAQ2mD,CAAoB,EACrF,OAAOzqE,EAAO,KAAK4yC,GAAcjkB,EAAU,WAAY7K,EAAI,UAAU6K,CAAS,CAAC,CAAC,EAGlF,IADAoT,EAAS,IAAIrT,GAAWC,EAAW87C,CAAoB,EAChDh6D,EAAOsxB,EAAO9G,EAAO,OAAS,MAAM,EAAE,GAAG,CAC9C,GAAInX,EAAI,yBAAyBrT,CAAI,IAAM,SAAWy5D,GAAwBz5D,EAAMrH,CAAI,EACtF,OAAOpJ,EAAO,KAAK,EAErB,GAAIgyB,GAAS,OAAOvhB,CAAI,GAAKA,EAAK,UAAU,OAAS,EACnD,OAAIs5D,GAAkBt5D,EAAMrH,EAAM,GAAG,IAAM,GAClCpJ,EAAO,KAAK4yC,GAAcniC,EAAMwqB,EAAOxqB,EAAK,UAAU,OAAS,CAAC,CAAC,EAEnEzQ,EAAO,KAAK,EAErB,GAAI8jB,EAAI,QAAQrT,CAAI,GAAK6lB,EAAoB7lB,EAAK,SAAS,YAAY,CAAC,EACtE,OAAOzQ,EAAO,KAAK,EAErBwqE,EAAoB/5D,CACtB,CACA,OAAIqlC,GAAa00B,EACRxqE,EAAO,KAAK4yC,GAAc43B,EAAmB,CAAC,CAAC,EAEjDxqE,EAAO,KAAK,CACrB,EACI0qE,GAAoB,SAAU5mD,EAAKgyB,EAAWnjC,EAAO41B,EAAK,CAC5D,IAAIh+B,EAAWgS,EAAQwlB,EACnB34B,EAAO0a,EAAI,QAAQ,EACnBrT,EAAM6lB,EACNq0C,EAAeJ,EAAaxtC,EAAa,GAM7C,GALAxyB,EAAYg+B,GAAK51B,EAAQ,QAAU,OAAS,WAAW,EACvD4J,EAASgsB,GAAK51B,EAAQ,QAAU,OAAS,QAAQ,EACjD43D,EAAcv4C,GAAS,UAAUznB,CAAS,GAAKgS,IAAWhS,EAAU,WAAW,OAC/E+rB,EAAsBxS,EAAI,OAAO,oBAAoB,EACrD6mD,EAAgBh4D,EACZy5B,GAAiB7hC,CAAS,EAC5B,OAAOvK,EAAO,KAAK,EASrB,GAPIgyB,GAAS,UAAUznB,CAAS,GAAKgS,EAAShS,EAAU,WAAW,OAAS,IAC1EogE,EAAgB,IAEd34C,GAAS,WAAWznB,CAAS,IAC/BA,EAAYnB,EACZmT,EAAS,GAEPhS,IAAcnB,EAAM,CACtB,GAAIuhE,IACFl6D,EAAOlG,EAAU,WAAWgS,EAAS,EAAIA,EAAS,EAAI,CAAC,EACnD9L,IACE27B,GAAiB37B,CAAI,GAGrB6lB,EAAoB7lB,EAAK,QAAQ,GAAKu5D,GAAUv5D,CAAI,IACtD,OAAOzQ,EAAO,KAAK,EAIzB,GAAIuK,EAAU,cAAc,EAAG,CAO7B,GANAgS,EAAS,KAAK,IAAI,CAACouD,GAAiBpuD,EAAS,EAAIA,EAAS,EAAIA,EAAQhS,EAAU,WAAW,OAAS,CAAC,EACrGA,EAAYA,EAAU,WAAWgS,CAAM,EACvCA,EAASyV,GAAS,OAAOznB,CAAS,GAAKggE,EAAchgE,EAAU,KAAK,OAAS,EACzE,CAACurC,GAAavrC,IAAcnB,EAAK,WAAa4gE,GAAUz/D,CAAS,GAGjE8/D,GAA8BjhE,EAAMmB,CAAS,GAAK6hC,GAAiB7hC,CAAS,EAC9E,OAAOvK,EAAO,KAAK,EAErB,GAAIuK,EAAU,cAAc,GAAKy/D,GAAUz/D,CAAS,IAAM,GAAO,CAC/DkG,EAAOlG,EACPw3B,EAAS,IAAIrT,GAAWnkB,EAAWnB,CAAI,EACvC,EAAG,CACD,GAAI4oB,GAAS,uBAAuBvhB,CAAI,GAAK27B,GAAiB37B,CAAI,EAAG,CACnEssB,EAAa,GACb,KACF,CACA,GAAI/K,GAAS,OAAOvhB,CAAI,GAAKA,EAAK,UAAU,OAAS,EAAG,CACtD8L,EAASouD,EAAgB,EAAIl6D,EAAK,UAAU,OAC5ClG,EAAYkG,EACZssB,EAAa,GACb,KACF,CACA,GAAIzG,EAAoB7lB,EAAK,SAAS,YAAY,CAAC,GAAK,CAACw5D,GAAcx5D,CAAI,EAAG,CAC5E8L,EAASuH,EAAI,UAAUrT,CAAI,EAC3BlG,EAAYkG,EAAK,WACZk6D,GACHpuD,IAEFwgB,EAAa,GACb,KACF,CACF,OAAStsB,EAAOk6D,EAAgB5oC,EAAO,KAAK,EAAIA,EAAO,KAAK,EAC9D,CACF,CACF,CACA,OAAI+T,IACE9jB,GAAS,OAAOznB,CAAS,GAAKgS,IAAW,GAC3C+tD,GAAqBxmD,EAAKymD,EAAaz0B,EAAW,GAAMvrC,CAAS,EAAE,KAAK,SAAUmS,EAAK,CACrFnS,EAAYmS,EAAI,UAAU,EAC1BH,EAASG,EAAI,OAAO,EACpBqgB,EAAa,EACf,CAAC,EAEC/K,GAAS,UAAUznB,CAAS,IAC9BkG,EAAOlG,EAAU,WAAWgS,CAAM,EAC7B9L,IACHA,EAAOlG,EAAU,WAAWgS,EAAS,CAAC,GAEpC9L,GAAQuhB,GAAS,KAAKvhB,CAAI,GAAK,CAAC25D,GAAW35D,EAAM,GAAG,GAAK,CAAC05D,GAAiBrmD,EAAKrT,EAAM,EAAK,GAAK,CAAC05D,GAAiBrmD,EAAKrT,EAAM,EAAI,GACnI65D,GAAqBxmD,EAAKymD,EAAaz0B,EAAW,GAAMrlC,CAAI,EAAE,KAAK,SAAUiM,EAAK,CAChFnS,EAAYmS,EAAI,UAAU,EAC1BH,EAASG,EAAI,OAAO,EACpBqgB,EAAa,EACf,CAAC,IAIH4tC,GAAiB,CAAC70B,GAAa9jB,GAAS,OAAOznB,CAAS,GAAKgS,IAAWhS,EAAU,UAAU,QAC9F+/D,GAAqBxmD,EAAKymD,EAAaz0B,EAAW,GAAOvrC,CAAS,EAAE,KAAK,SAAUmS,EAAK,CACtFnS,EAAYmS,EAAI,UAAU,EAC1BH,EAASG,EAAI,OAAO,EACpBqgB,EAAa,EACf,CAAC,EAEIA,EAAa/8B,EAAO,KAAK4yC,GAAcroC,EAAWgS,CAAM,CAAC,EAAIvc,EAAO,KAAK,CAClF,EACI4qE,GAAc,SAAU9mD,EAAKykB,EAAK,CACpC,IAAIuN,EAAYvN,EAAI,UAAWsiC,EAAUtiC,EAAI,WAAW,EACpD0T,EAAWrJ,GAAc,eAAerK,CAAG,EAC/C,OAAAmiC,GAAkB5mD,EAAKgyB,EAAW,GAAM+0B,CAAO,EAAE,KAAK,SAAUnuD,EAAK,EAC/D,CAACo5B,GAAa,CAAClD,GAAc,QAAQqJ,EAAUv/B,CAAG,IACpDmuD,EAAQ,SAASnuD,EAAI,UAAU,EAAGA,EAAI,OAAO,CAAC,CAElD,CAAC,EACIo5B,GACH40B,GAAkB5mD,EAAKgyB,EAAW,GAAO+0B,CAAO,EAAE,KAAK,SAAUnuD,EAAK,CACpEmuD,EAAQ,OAAOnuD,EAAI,UAAU,EAAGA,EAAI,OAAO,CAAC,CAC9C,CAAC,EAECo5B,GACF+0B,EAAQ,SAAS,EAAI,EAEhBjB,GAAa,KAAKrhC,EAAKsiC,CAAO,EAAI7qE,EAAO,KAAK,EAAIA,EAAO,KAAK6qE,CAAO,CAC9E,EACIC,GAAiB,CAAE,UAAWF,EAAY,EAE1CG,GAAsB,SAAUn2C,EAAQrqB,EAAW46C,EAAa,CAIlE,QAHIpjB,EAAS,IAAIrT,GAAWnkB,EAAW46C,CAAW,EAC9C10C,EACA6lB,EAAsB1B,EAAO,oBAAoB,EAC9CnkB,EAAOsxB,EAAO,KAAK,GACxB,GAAIzL,EAAoB7lB,EAAK,SAAS,YAAY,CAAC,GAAKA,EAAK,OAAS,EACpE,MAAO,EAGb,EACIu6D,GAAa,SAAUlnD,EAAKoxB,EAAW+1B,EAAO,CAChD,IAAIjiD,EAASlF,EAAI,OAAO,OAAQ,CAAC,EAAG,QAAQ,EAC5CmnD,EAAM,WAAW,aAAajiD,EAAQiiD,CAAK,EAC3C/1B,EAAU,eAAelsB,CAAM,EAC/BlF,EAAI,OAAOkF,CAAM,CACnB,EACIkiD,GAAoB,SAAUpnD,EAAKoxB,EAAW+1B,EAAOE,EAAS,CAChE,IAAI5iC,EAAMzkB,EAAI,UAAU,EACnBqnD,GAIH5iC,EAAI,eAAe0iC,CAAK,EACxB1iC,EAAI,aAAa0iC,CAAK,IAJtB1iC,EAAI,cAAc0iC,CAAK,EACvB1iC,EAAI,YAAY0iC,CAAK,GAKvB/1B,EAAU,OAAO3M,CAAG,CACtB,EACI6iC,GAAkB,SAAUpjE,EAAQoC,EAAK,CAC3C,IAAI8qC,EAAYltC,EAAO,UACnB8b,EAAM9b,EAAO,IACbugC,EAAM2M,EAAU,OAAO,EACvB+1B,EACAE,EACJL,GAAe,UAAUhnD,EAAKykB,CAAG,EAAE,KAAK,SAAUsiC,EAAS,CACzDtiC,EAAI,SAASsiC,EAAQ,eAAgBA,EAAQ,WAAW,EACxDtiC,EAAI,OAAOsiC,EAAQ,aAAcA,EAAQ,SAAS,CACpD,CAAC,EACD,IAAItuD,EAASgsB,EAAI,YACbh+B,EAAYg+B,EAAI,eACpB,GAAIh+B,EAAU,WAAa,GAAKA,EAAU,cAAc,EAAG,CACzD,IAAI8gE,EAA6B9uD,EAAShS,EAAU,WAAW,OAAS,EACxEA,EAAYA,EAAU,WAAW,KAAK,IAAIgS,EAAQhS,EAAU,WAAW,OAAS,CAAC,CAAC,GAAKA,EACnF8gE,GAA8B9gE,EAAU,WAAa,EACvDgS,EAAShS,EAAU,UAAU,OAE7BgS,EAAS,CAEb,CACA,IAAI4oC,EAAcrhC,EAAI,UAAUvZ,EAAWuZ,EAAI,OAAO,EAClDwnD,EAAiBnmB,EAAcrhC,EAAI,UAAUqhC,EAAY,WAAYrhC,EAAI,OAAO,EAAI,KACpFynD,EAAqBD,EAAiBA,EAAe,SAAS,YAAY,EAAI,GAC9EE,EAAephE,GAAOA,EAAI,QAC1BmhE,IAAuB,MAAQ,CAACC,IAClCrmB,EAAcmmB,GAEZ/gE,GAAaA,EAAU,WAAa,GAAKgS,GAAUhS,EAAU,UAAU,SACpEwgE,GAAoB/iE,EAAO,OAAQuC,EAAW46C,CAAW,IAC5D8lB,EAAQnnD,EAAI,OAAO,IAAI,EACvBykB,EAAI,WAAW0iC,CAAK,EACpB1iC,EAAI,cAAc0iC,CAAK,EACvB1iC,EAAI,YAAY0iC,CAAK,EACrBE,EAAU,KAGdF,EAAQnnD,EAAI,OAAO,IAAI,EACvB6wB,GAAgB7wB,EAAKykB,EAAK0iC,CAAK,EAC/BD,GAAWlnD,EAAKoxB,EAAW+1B,CAAK,EAChCC,GAAkBpnD,EAAKoxB,EAAW+1B,EAAOE,CAAO,EAChDnjE,EAAO,YAAY,IAAI,CACzB,EACIyjE,GAAiB,SAAUzjE,EAAQowB,EAAQ,CAC7C,IAAI0U,EAAK5qB,GAAQ,QAAQ,IAAI,EAC7BujB,GAAOvjB,GAAQ,QAAQkW,CAAM,EAAG0U,CAAE,EAClC9kC,EAAO,YAAY,IAAI,CACzB,EACI0jE,GAAgB,SAAU1jE,EAAQowB,EAAQ,CACvCuzC,GAAW3jE,EAAO,QAAQ,EAAGowB,CAAM,GACtCuN,GAAMzjB,GAAQ,QAAQkW,CAAM,EAAGlW,GAAQ,QAAQ,IAAI,CAAC,EAEtD,IAAI4qB,EAAK5qB,GAAQ,QAAQ,IAAI,EAC7ByjB,GAAMzjB,GAAQ,QAAQkW,CAAM,EAAG0U,CAAE,EACjCk+B,GAAWhjE,EAAO,IAAKA,EAAO,UAAW8kC,EAAG,IAAI,CAAC,EACjDo+B,GAAkBljE,EAAO,IAAKA,EAAO,UAAW8kC,EAAG,IAAI,EAAG,EAAK,EAC/D9kC,EAAO,YAAY,IAAI,CACzB,EACI4jE,GAAe,SAAUlvD,EAAK,CAChC,OAAOsV,GAAS,KAAKtV,EAAI,QAAQ,CAAC,CACpC,EACIivD,GAAa,SAAU/8C,EAAUD,EAAW,CAC9C,OAAIi9C,GAAax4B,GAAgB,MAAMzkB,CAAS,CAAC,EACxC,GAEAyuB,GAAY,aAAaxuB,EAAUwkB,GAAgB,MAAMzkB,CAAS,CAAC,EAAE,IAAI,SAAUjS,EAAK,CAC7F,OAAOsV,GAAS,KAAKtV,EAAI,QAAQ,CAAC,CACpC,CAAC,EAAE,MAAM,EAAK,CAElB,EACImvD,GAAe,SAAU9vD,EAAK,CAChC,OAAOA,GAAOA,EAAI,WAAa,KAAO,SAAUA,CAClD,EACI+vD,GAAiB,SAAUvxB,EAAU,CACvC,OAAOA,EAAS,KAAKz8C,EAAS,EAAK,EAAG+tE,GAAcA,GAAc/tE,EAAS,EAAK,CAAC,CACnF,EACIiuE,GAA2B,SAAU/jE,EAAQ,CAC/C,IAAI0kD,EAAiBxuD,EAAMmvD,GAAY,eAAgBrlD,CAAM,EACzDs0C,EAAWlJ,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,EACvE,OAAOqzD,GAAiB,aAAa3O,EAAgB1kD,EAAO,QAAQ,EAAGs0C,CAAQ,EAAE,OAAOwvB,EAAc,CACxG,EACIE,GAAwB,SAAUhkE,EAAQuyC,EAAU,CACtDA,EAAS,KAAK/8C,EAAMU,EAAMutE,GAAgBzjE,CAAM,EAAG9J,EAAMwtE,GAAe1jE,CAAM,EAAGxK,CAAI,CACvF,EACIyuE,GAAS,SAAUjkE,EAAQoC,EAAK,CAClC,IAAI8hE,EAAiBH,GAAyB/jE,CAAM,EAChDkkE,EAAe,OAAO,EACxBA,EAAe,KAAKhuE,EAAM8tE,GAAuBhkE,CAAM,CAAC,EAExDojE,GAAgBpjE,EAAQoC,CAAG,CAE/B,EACI+hE,GAAW,CAAE,OAAQF,EAAO,EAE5BG,GAAWlnD,GAAU,QAAS,UAAW,SAAU,SAAS,EAC5DmnD,GAAW,CAAE,OAAQD,EAAS,EAE9B7Z,GAAMS,GAAI,SAAS,CACrB,CAAE,OAAQ,CAAC,SAAS,CAAE,EACtB,CACE,GAAI,CACF,UACA,QACF,CACF,EACA,CAAE,MAAO,CAAC,SAAS,CAAE,CACvB,CAAC,EACGsZ,GAAO,SAAUC,EAASC,EAAUC,EAAMC,EAAS,CACrD,OAAOH,EAAQ,KAAKC,EAAUC,EAAMC,CAAO,CAC7C,EACIC,GAAW,SAAUC,EAAM,CAC7B,OAAOA,EAAK,KAAK5uE,EAAUA,EAAUA,CAAQ,CAC/C,EACI6uE,GAAWta,GAAI,OACfua,GAAKva,GAAI,GACTwa,GAAUxa,GAAI,MACdya,GAAO,CACT,OAAQH,GACR,GAAIC,GACJ,MAAOC,GACP,KAAMT,GACN,SAAUK,EACZ,EAEIM,GAAQja,GAAI,SAAS,CACvB,CAAE,SAAU,CAAC,KAAK,CAAE,EACpB,CACE,SAAU,CACR,YACA,YACF,CACF,EACA,CACE,MAAO,CACL,QACA,UACA,SACA,SACF,CACF,CACF,CAAC,EACGka,GAAiB,SAAUC,EAAU,CACvC,OAAOF,GAAM,MAAME,EAAS,MAAM,EAAGA,EAAS,QAAQ,EAAGA,EAAS,OAAO,EAAGA,EAAS,QAAQ,CAAC,CAChG,EACIC,GAAa,SAAUl4B,EAAW,CACpC,OAAOA,EAAU,MAAM,CACrB,SAAU,SAAU3M,EAAK,CACvB,OAAOrmB,GAAQ,QAAQqmB,EAAI,cAAc,CAC3C,EACA,SAAU,SAAU8kC,EAAWC,EAAY,CACzC,OAAON,GAAK,SAASK,CAAS,CAChC,EACA,MAAO,SAAU16D,EAAO46D,EAASC,EAAQC,EAAS,CAChD,OAAO96D,CACT,CACF,CAAC,CACH,EACI+6D,GAAWT,GAAM,SACjBU,GAAWV,GAAM,SACjBW,GAAQX,GAAM,MACdY,GAAS,SAAU34B,EAAW,CAChC,IAAIviC,EAAQy6D,GAAWl4B,CAAS,EAChC,OAAOzuB,GAAY9T,CAAK,CAC1B,EACI66B,GAAQ6+B,GAAS,OACjByB,GAAY,CACd,SAAUJ,GACV,SAAUC,GACV,MAAOC,GACP,eAAgBV,GAChB,OAAQW,GACR,MAAOrgC,EACT,EAEIugC,GAAYpsD,GAAoB,OAAO,EAAE,QACzCqsD,GAAQ,SAAUzxD,EAAQpV,EAAS,CACrC,IAAI8mE,EAAM/qD,EAAO/b,CAAO,EAAIs7C,GAAMt7C,CAAO,EAAE,OAAS6D,GAAS7D,CAAO,EAAE,OAAS,EAC/E,OAAIoV,EAAS0xD,EACJA,EACE1xD,EAAS,EACX,EAEFA,CACT,EACI2xD,GAAe,SAAU3lC,EAAK,CAChC,OAAOulC,GAAU,MAAMvlC,EAAI,MAAM,EAAGylC,GAAMzlC,EAAI,QAAQ,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,OAAO,EAAGylC,GAAMzlC,EAAI,QAAQ,EAAGA,EAAI,OAAO,CAAC,CAAC,CACzH,EACI4lC,GAAe,SAAUx1D,EAAMoD,EAAK,CACtC,MAAO,CAACiW,GAAS,iBAAiBjW,EAAI,IAAI,CAAC,IAAMwK,GAAW5N,EAAMoD,CAAG,GAAKhd,GAAG4Z,EAAMoD,CAAG,EACxF,EACIqyD,GAAc,SAAUz1D,EAAM,CAChC,OAAO,SAAU4vB,EAAK,CACpB,OAAO4lC,GAAax1D,EAAM4vB,EAAI,MAAM,CAAC,GAAK4lC,GAAax1D,EAAM4vB,EAAI,OAAO,CAAC,CAC3E,CACF,EACI8lC,GAAc,SAAUrmE,EAAQ,CAClC,OAAOA,EAAO,SAAW,IAAQ+lE,GAAU,KAAK,CAClD,EACIO,GAA8B,SAAUptE,EAAG,CAC7C,OAAO4sE,GAAU,MAAM5rD,GAAQ,QAAQhhB,EAAE,cAAc,EAAGA,EAAE,YAAaghB,GAAQ,QAAQhhB,EAAE,YAAY,EAAGA,EAAE,SAAS,CACvH,EACIqtE,GAAY,SAAUjlE,EAAK,CAC7B,IAAI4rC,EAAY5rC,EAAI,aAAa,EAC7Bi/B,EAAM,CAAC2M,GAAaA,EAAU,aAAe,EAAIl1C,EAAO,KAAK,EAAIA,EAAO,KAAKk1C,EAAU,WAAW,CAAC,CAAC,EACxG,OAAO3M,EAAI,IAAI+lC,EAA2B,CAC5C,EACIE,GAAgB,SAAU71D,EAAM,CAClC,IAAIrP,EAAMmd,GAAY9N,CAAI,EAC1B,OAAO41D,GAAUjlE,EAAI,IAAI,CAAC,EAAE,OAAO8kE,GAAYz1D,CAAI,CAAC,CACtD,EACIuvC,GAAW,SAAUvvC,EAAMw8B,EAAU,CACvC,OAAOn1C,EAAO,KAAKm1C,CAAQ,EAAE,OAAOi5B,GAAYz1D,CAAI,CAAC,EAAE,IAAIu1D,EAAY,CACzE,EACIO,GAAsB,SAAUt5B,EAAU,CAC5C,IAAI5M,EAAMhrC,EAAW,SAAS,YAAY,EAC1C,GAAI,CACF,OAAAgrC,EAAI,SAAS4M,EAAS,MAAM,EAAE,IAAI,EAAGA,EAAS,QAAQ,CAAC,EACvD5M,EAAI,OAAO4M,EAAS,OAAO,EAAE,IAAI,EAAGA,EAAS,QAAQ,CAAC,EAC/Cn1C,EAAO,KAAKuoC,CAAG,CACxB,MAAY,CACV,OAAOvoC,EAAO,KAAK,CACrB,CACF,EACI0uE,GAAQ,SAAU1mE,EAAQ,CAC5B,IAAI2mE,EAAcN,GAAYrmE,CAAM,EAAIwmE,GAActsD,GAAQ,QAAQla,EAAO,QAAQ,CAAC,CAAC,EAAIhI,EAAO,KAAK,EACvGgI,EAAO,SAAW2mE,EAAY,OAAO,EAAIA,EAAc3mE,EAAO,QAChE,EACI4mE,GAAc,SAAU5mE,EAAQugC,EAAK,CACvC,IAAI5vB,EAAOuJ,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EACvCwlC,EAAQ6gC,GAAYrmE,CAAM,EAAIhI,EAAO,KAAKuoC,CAAG,EAAIvoC,EAAO,KAAK,EAC7D2uE,EAAcnhC,EAAM,IAAI8gC,EAA2B,EAAE,OAAOF,GAAYz1D,CAAI,CAAC,EACjF3Q,EAAO,SAAW2mE,EAAY,OAAO,EAAIA,EAAc3mE,EAAO,QAChE,EACI6mE,GAAS,SAAU7mE,EAAQ,CAC7B,IAAImtC,EAAWntC,EAAO,SAAWA,EAAO,SAAWhI,EAAO,KAAK,EAC/D,OAAOm1C,EAAS,KAAKj3C,EAAMgqD,GAAUhmC,GAAQ,QAAQla,EAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAKymE,EAAmB,CACnG,EACIK,GAAU,SAAU9mE,EAAQ,CAC9B6mE,GAAO7mE,CAAM,EAAE,KAAK,SAAUugC,EAAK,CACjCvgC,EAAO,UAAU,OAAOugC,CAAG,CAC7B,CAAC,CACH,EACIwmC,GAAoB,CACtB,MAAOL,GACP,YAAaE,GACb,UAAWL,GACX,QAASO,GACT,OAAQD,GACR,YAAaL,GACb,SAAUtmB,EACZ,EAEI8mB,GAAgB,SAAUlrD,EAAKgkD,EAASmH,EAAWlxE,EAAOmxE,EAAM/nE,EAAS,CAC3E,GAAI2c,EAAI,mBAAmB3c,CAAO,IAAM,QAGxC,KAAIgoE,EAAkBF,EAAY,SAAW,UAG7C,GAFAE,EAAkBhoE,EAAQ,WAAa,QAAU,SAAWgoE,EAC5DA,GAAmBrrD,EAAI,SAAS3c,EAAS,YAAa,EAAI,IAAM,MAAQ,QAAU,OAC9E2gE,IAAY,UAAW,CACzB,IAAIsH,EAAa,KAAK,IAAI,EAAG,SAASjoE,EAAQ,MAAMgoE,CAAe,GAAK,EAAG,EAAE,EAAIpxE,CAAK,EACtF+lB,EAAI,SAAS3c,EAASgoE,EAAiBC,EAAaA,EAAaF,EAAO,EAAE,CAC5E,KAAO,CACL,IAAIE,EAAa,SAASjoE,EAAQ,MAAMgoE,CAAe,GAAK,EAAG,EAAE,EAAIpxE,EAAQmxE,EAC7EprD,EAAI,SAAS3c,EAASgoE,EAAiBC,CAAU,CACnD,EACF,EACIC,GAAkB,SAAUzyD,EAAI,CAClC,OAAOqT,GAAOrT,CAAE,GAAKsT,GAAWtT,CAAE,CACpC,EACI0yD,GAAwB,SAAU1yD,EAAI,CACxC,OAAOjM,GAAOiM,CAAE,EAAE,IAAIyyD,EAAe,EAAE,MAAM,EAAK,CACpD,EACIE,GAAoB,SAAUvnE,EAAQ,CACxC,OAAOjG,GAAOP,GAAIwG,EAAO,UAAU,kBAAkB,EAAGka,GAAQ,OAAO,EAAG,SAAUtF,EAAI,CACtF,MAAO,CAACyyD,GAAgBzyD,CAAE,GAAK,CAAC0yD,GAAsB1yD,CAAE,CAC1D,CAAC,CACH,EACI/W,GAAS,SAAUmC,EAAQ8/D,EAAS,CACtC,IAAIh7C,EAAW9kB,EAAO,SAAU8b,EAAM9b,EAAO,IAAKktC,EAAYltC,EAAO,UAAWwnE,EAAYxnE,EAAO,UAC/FynE,EAAa,YAAY,KAAK3iD,EAAS,WAAW,EAAE,CAAC,EACrD4iD,EAAc,SAAS5iD,EAAS,YAAa,EAAE,EAC/CmiD,EAAYjnE,EAAO,SAAS,oBAAqB,EAAK,EACtD,CAACA,EAAO,kBAAkB,qBAAqB,GAAK,CAACA,EAAO,kBAAkB,mBAAmB,GAC/F,CAAC8kB,EAAS,mBAAqB,CAAChJ,EAAI,UAAUoxB,EAAU,QAAQ,EAAGpxB,EAAI,OAAO,GAChF0rD,EAAU,MAAM,KAAK,EAGzB/tE,GAAK8tE,GAAkBvnE,CAAM,EAAG,SAAUujD,EAAO,CAC/CyjB,GAAclrD,EAAKgkD,EAASmH,EAAWS,EAAaD,EAAYlkB,EAAM,IAAI,CAAC,CAC7E,CAAC,CACH,EAEIokB,GAASh2D,GAAM,KAAMi2D,GAAWj2D,GAAM,OACtCk2D,GAAQl2D,GAAM,IAAKm2D,GAAYn2D,GAAM,QACzC,SAASo2D,GAAgB/nE,EAAQ,CAC/B,IAAI8b,EAAKoxB,EAAWs6B,EAChBQ,EAAW,CACb,MAAO,CAAC,EACR,KAAM,CAAC,EACP,MAAO,CAAC,CACV,EACIljD,EAAW9kB,EAAO,SAAUmtC,EAChCntC,EAAO,GAAG,UAAW,UAAY,CAC/B8b,EAAM9b,EAAO,IACbktC,EAAYltC,EAAO,UACnB8kB,EAAW9kB,EAAO,SAClBwnE,EAAYxnE,EAAO,SACrB,CAAC,EACD,IAAIioE,EAAc,SAAUnI,GAASoI,GAAInyE,GAAOH,GAAM,CACpD,IAAIkK,GAAMqoE,GAAe/zD,GAAQ,GACjC,GAAI,CAAApU,EAAO,QAaX,IAVI,CAAC,mEAAmE,KAAK8/D,EAAO,IAAM,CAAClqE,IAAQ,CAACA,GAAK,YACvGoK,EAAO,MAAM,EAEb+mE,GAAkB,QAAQ/mE,CAAM,EAElCpK,GAAOoK,EAAO,KAAK,oBAAqB,CACtC,QAAS8/D,GACT,GAAIoI,GACJ,MAAOnyE,EACT,CAAC,EACGH,GAAK,mBAAmB,EAC1B,MAAO,GAGT,GADAuyE,GAAgBrI,GAAQ,YAAY,EAChChgE,GAAOkoE,EAAS,KAAKG,EAAa,EACpC,OAAAroE,GAAKqoE,GAAeD,GAAInyE,EAAK,EAC7BiK,EAAO,KAAK,cAAe,CACzB,QAAS8/D,GACT,GAAIoI,GACJ,MAAOnyE,EACT,CAAC,EACM,GAaT,GAXA4xE,GAAO3nE,EAAO,QAAS,SAAUxE,GAAG,CAClC,GAAIA,GAAE,aAAeA,GAAE,YAAYskE,GAASoI,GAAInyE,EAAK,EACnD,OAAAiK,EAAO,KAAK,cAAe,CACzB,QAAS8/D,GACT,GAAIoI,GACJ,MAAOnyE,EACT,CAAC,EACDqe,GAAQ,GACD,EAEX,CAAC,EACGA,GACF,OAAOA,GAET,GAAIpU,EAAO,OAASA,EAAO,MAAM,aAAeA,EAAO,MAAM,YAAY8/D,GAASoI,GAAInyE,EAAK,EACzF,OAAAiK,EAAO,KAAK,cAAe,CACzB,QAAS8/D,GACT,GAAIoI,GACJ,MAAOnyE,EACT,CAAC,EACM,GAET,GAAI,CACFqe,GAAQpU,EAAO,OAAO,EAAE,YAAY8/D,GAASoI,GAAInyE,EAAK,CACxD,MAAa,CACb,CACA,OAAIqe,IACFpU,EAAO,KAAK,cAAe,CACzB,QAAS8/D,GACT,GAAIoI,GACJ,MAAOnyE,EACT,CAAC,EACM,IAEF,GACT,EACIqyE,EAAoB,SAAUtI,GAAS,CACzC,IAAIhgE,GACJ,GAAI,EAAAE,EAAO,OAAO,SAAS,GAAKA,EAAO,SAIvC,IADA8/D,GAAUA,GAAQ,YAAY,EAC1BhgE,GAAOkoE,EAAS,MAAMlI,EAAO,EAC/B,OAAOhgE,GAAKggE,EAAO,EAErB,GAAI,CACF,OAAO9/D,EAAO,OAAO,EAAE,kBAAkB8/D,EAAO,CAClD,MAAa,CACb,CACA,MAAO,GACT,EACIuI,EAAoB,SAAUvI,GAAS,CACzC,IAAIhgE,GACJ,GAAI,EAAAE,EAAO,OAAO,SAAS,GAAKA,EAAO,SAIvC,IADA8/D,GAAUA,GAAQ,YAAY,EAC1BhgE,GAAOkoE,EAAS,MAAMlI,EAAO,EAC/B,OAAOhgE,GAAKggE,EAAO,EAErB,GAAI,CACF,OAAO9/D,EAAO,OAAO,EAAE,kBAAkB8/D,EAAO,CAClD,MAAa,CACb,EACF,EACIwI,EAAc,SAAUC,GAAapwE,GAAM,CAC7CA,GAAOA,IAAQ,OACfwvE,GAAOY,GAAa,SAAUrpE,GAAU4gE,GAAS,CAC/C6H,GAAO7H,GAAQ,YAAY,EAAE,MAAM,GAAG,EAAG,SAAUA,GAAS,CAC1DkI,EAAS7vE,EAAI,EAAE2nE,EAAO,EAAI5gE,EAC5B,CAAC,CACH,CAAC,CACH,EACIspE,EAAa,SAAU1I,GAAS5gE,GAAU5D,GAAO,CACnDwkE,GAAUA,GAAQ,YAAY,EAC9BkI,EAAS,KAAKlI,EAAO,EAAI,SAAUA,GAASoI,GAAInyE,GAAOH,GAAM,CAC3D,OAAOsJ,GAAS,KAAK5D,IAAS0E,EAAQkoE,GAAInyE,GAAOH,EAAI,CACvD,CACF,EACI6yE,EAAwB,SAAU3I,GAAS,CAE7C,GADAA,GAAUA,GAAQ,YAAY,EAC1BkI,EAAS,KAAKlI,EAAO,EACvB,MAAO,GAET,GAAI,CACF,OAAO9/D,EAAO,OAAO,EAAE,sBAAsB8/D,EAAO,CACtD,MAAa,CACb,CACA,MAAO,EACT,EACI4I,EAAuB,SAAU5I,GAAS5gE,GAAU5D,GAAO,CAC7DwkE,GAAUA,GAAQ,YAAY,EAC9BkI,EAAS,MAAMlI,EAAO,EAAI,UAAY,CACpC,OAAO5gE,GAAS,KAAK5D,IAAS0E,CAAM,CACtC,CACF,EACI2oE,EAAuB,SAAU7I,GAAS5gE,GAAU5D,GAAO,CAC7DwkE,GAAUA,GAAQ,YAAY,EAC9BkI,EAAS,MAAMlI,EAAO,EAAI,UAAY,CACpC,OAAO5gE,GAAS,KAAK5D,IAAS0E,CAAM,CACtC,CACF,EACI4oE,GAAmB,SAAU9I,GAAS,CACxC,OAAAA,GAAUA,GAAQ,YAAY,EACvB,CAAC,CAACkI,EAAS,KAAKlI,EAAO,CAChC,EACA8H,GAAS,KAAM,CACb,YAAaK,EACb,kBAAmBG,EACnB,kBAAmBC,EACnB,sBAAuBI,EACvB,YAAaH,EACb,WAAYE,EACZ,qBAAsBE,EACtB,qBAAsBC,EACtB,iBAAkBC,EACpB,CAAC,EACD,IAAIC,GAAoB,SAAU/I,GAASoI,GAAInyE,GAAO,CACpD,OAAImyE,KAAO,SACTA,GAAK,IAEHnyE,KAAU,SACZA,GAAQ,MAEHiK,EAAO,OAAO,EAAE,YAAY8/D,GAASoI,GAAInyE,EAAK,CACvD,EACI+yE,GAAgB,SAAUptE,GAAM,CAClC,OAAO8rE,EAAU,MAAM9rE,EAAI,CAC7B,EACIqtE,GAAe,SAAUrtE,GAAM3F,GAAO,CACxCyxE,EAAU,OAAO9rE,GAAM3F,GAAQ,CAAE,MAAOA,EAAM,EAAI,MAAS,EAC3DiK,EAAO,YAAY,CACrB,EACIgpE,GAAiB,SAAU7wE,GAAM,CACnCg1C,EAAWD,EAAU,YAAY/0C,EAAI,CACvC,EACI8wE,GAAmB,UAAY,CACjC/7B,EAAU,eAAeC,CAAQ,CACnC,EACAm7B,EAAY,CACV,uCAAwC,UAAY,CACpD,EACA,kCAAmC,UAAY,CAC7CtoE,EAAO,YAAY,IAAI,CACzB,EACA,iBAAkB,SAAU8/D,GAAS,CACnC,IAAI3+D,GAAMnB,EAAO,OAAO,EACpBylB,GACJ,GAAI,CACFojD,GAAkB/I,EAAO,CAC3B,MAAa,CACXr6C,GAAS,EACX,CAIA,GAHIq6C,KAAY,SAAW,CAAC3+D,GAAI,oBAAoB2+D,EAAO,IACzDr6C,GAAS,IAEPA,IAAU,CAACtkB,GAAI,sBAAsB2+D,EAAO,EAAG,CACjD,IAAIppE,GAAMsJ,EAAO,UAAU,oHAA0H,EACjJ1C,GAAI,MACN5G,GAAMA,GAAI,QAAQ,UAAW,SAAS,GAExCsJ,EAAO,oBAAoB,KAAK,CAC9B,KAAMtJ,GACN,KAAM,OACR,CAAC,CACH,CACF,EACA,OAAU,UAAY,CACpB,GAAIw2C,EAAU,YAAY,EAAG,CAC3B,IAAIn5B,GAAM/T,EAAO,IAAI,UAAUA,EAAO,UAAU,SAAS,EAAG,GAAG,EAC3D+T,IACF/T,EAAO,IAAI,OAAO+T,GAAK,EAAI,EAE7B,MACF,CACAyzD,EAAU,OAAO,MAAM,CACzB,EACA,iEAAkE,SAAU1H,GAAS,CACnF,IAAIoJ,GAAQpJ,GAAQ,UAAU,CAAC,EAC3BoJ,KAAU,SACZA,GAAQ,WAEVvB,GAAO,4BAA4B,MAAM,GAAG,EAAG,SAAUjsE,GAAM,CACzDwtE,KAAUxtE,IACZ8rE,EAAU,OAAO,QAAU9rE,EAAI,CAEnC,CAAC,EACGwtE,KAAU,QACZH,GAAa,QAAUG,EAAK,CAEhC,EACA,wCAAyC,SAAUpJ,GAAS,CAC1D,IAAIqJ,GAASC,GACbP,GAAkB/I,EAAO,EACzBqJ,GAAUrtD,EAAI,UAAUoxB,EAAU,QAAQ,EAAG,OAAO,EAChDi8B,KACFC,GAAaD,GAAQ,WACjB,2BAA2B,KAAKC,GAAW,QAAQ,IACrDJ,GAAe,EACfltD,EAAI,MAAMstD,GAAYD,EAAO,EAC7BF,GAAiB,GAGvB,EACA,4DAA6D,SAAUnJ,GAAS,CAC9EiJ,GAAajJ,EAAO,CACtB,EACA,wBAAyB,SAAUA,GAASoI,GAAInyE,GAAO,CACrDgzE,GAAajJ,GAAS/pE,EAAK,CAC7B,EACA,SAAY,SAAU+pE,GAASoI,GAAInyE,GAAO,CACxCurE,GAAethE,EAAQjK,EAAK,CAC9B,EACA,SAAY,SAAU+pE,GAASoI,GAAInyE,GAAO,CACxCyrE,GAAexhE,EAAQjK,EAAK,CAC9B,EACA,aAAgB,SAAU+pE,GAAS,CACjC0H,EAAU,OAAO1H,EAAO,CAC1B,EACA,cAAiB,UAAY,CAC3BiJ,GAAa,YAAY,CAC3B,EACA,YAAe,SAAUjJ,GAASoI,GAAInyE,GAAO,CAC3C,OAAOgzE,GAAahzE,IAAS,GAAG,CAClC,EACA,WAAc,UAAY,CACxB,IAAIo3C,GAAWD,EAAU,YAAY,EACrCltC,EAAO,WAAWA,EAAO,WAAW,CAAC,EACrCktC,EAAU,eAAeC,EAAQ,CACnC,EACA,cAAiB,SAAU2yB,GAASoI,GAAInyE,GAAO,CAC7C,IAAI0S,GAAO1S,IAASm3C,EAAU,QAAQ,EAClCzkC,KAASzI,EAAO,QAAQ,IAC1BgpE,GAAe,EACfhpE,EAAO,IAAI,OAAOyI,GAAM,EAAI,EAC5BwgE,GAAiB,EAErB,EACA,mBAAsB,SAAUnJ,GAASoI,GAAInyE,GAAO,CAClD,IAAIs/B,GAAU,EACdvZ,EAAI,UAAUoxB,EAAU,QAAQ,EAAG,SAAUzkC,GAAM,CACjD,GAAIA,GAAK,WAAa,GAAK4sB,OAAct/B,GACvC,OAAAm3C,EAAU,OAAOzkC,EAAI,EACd,EAEX,EAAGzI,EAAO,QAAQ,CAAC,CACrB,EACA,cAAiB,SAAU8/D,GAASoI,GAAInyE,GAAO,CAC7Cm3C,EAAU,OAAOn3C,EAAK,CACxB,EACA,iBAAoB,SAAU+pE,GAASoI,GAAInyE,GAAO,CAChD2sD,GAAc,cAAc1iD,EAAQjK,EAAK,CAC3C,EACA,iBAAoB,SAAU+pE,GAASoI,GAAInyE,GAAO,CAChDm3C,EAAU,WAAW,iBAAiB,EACtC,IAAI/4B,GAAUnU,EAAO,WAAW,EAChCA,EAAO,WAAWmU,GAAQ,QAAQ,mBAAoB,UAAY,CAChE,OAAOpe,EACT,CAAC,CAAC,CACJ,EACA,gBAAmB,SAAU+pE,GAASoI,GAAInyE,GAAO,CAC/CgzE,GAAahzE,EAAK,CACpB,EACA,cAAiB,SAAU+pE,GAASoI,GAAInyE,GAAO,CAC7CiK,EAAO,WAAWjK,EAAK,CACzB,EACA,iBAAkB,SAAU+pE,GAAS,CACnCjiE,GAAOmC,EAAQ8/D,EAAO,CACxB,EACA,WAAc,UAAY,CAC1B,EACA,qBAAwB,UAAY,CAClC9/D,EAAO,YAAY,mBAAoB,GAAO,QAAQ,CACxD,EACA,mBAAsB,UAAY,CAChCA,EAAO,UAAY,CAACA,EAAO,UAC3BA,EAAO,UAAU,CACnB,EACA,kBAAqB,SAAU8/D,GAASoI,GAAInyE,GAAO,CACjDiK,EAAO,YAAY,mBAAoB,GAAOjK,GAAM,QAAQ,mBAAoBm3C,EAAU,WAAW,CAAE,OAAQ,MAAO,CAAC,CAAC,CAAC,CAC3H,EACA,cAAiB,SAAU4yB,GAASoI,GAAInyE,GAAO,CAC7C,IAAIszE,GACA,OAAOtzE,IAAU,WACnBA,GAAQ,CAAE,KAAMA,EAAM,GAExBszE,GAASvtD,EAAI,UAAUoxB,EAAU,QAAQ,EAAG,GAAG,EAC/Cn3C,GAAM,KAAOA,GAAM,KAAK,QAAQ,IAAK,KAAK,GACtC,CAACszE,IAAU,CAACtzE,GAAM,OACpByxE,EAAU,OAAO,MAAM,EAErBzxE,GAAM,MACRyxE,EAAU,MAAM,OAAQzxE,GAAOszE,EAAM,CAEzC,EACA,UAAa,UAAY,CACvB,IAAIC,GAAcxtD,EAAI,UAAUoxB,EAAU,SAAS,EAAGljB,GAAS,qBAAqB,EACpF,GAAIs/C,GAAa,CACf,IAAI/oC,GAAMzkB,EAAI,UAAU,EACxBykB,GAAI,mBAAmB+oC,EAAW,EAClCp8B,EAAU,OAAO3M,EAAG,CACtB,CACF,EACA,OAAU,UAAY,CACpB0/B,GAAe,cAAcjgE,CAAM,CACrC,EACA,cAAiB,UAAY,CAC3BigE,GAAe,qBAAqBjgE,CAAM,CAC5C,EACA,eAAkB,UAAY,CAC5BA,EAAO,WAAW,EAAE,CACtB,EACA,gBAAmB,SAAU8/D,GAASoI,GAAInyE,GAAO,CAC/C,OAAAouE,GAAS,OAAOnkE,EAAQjK,EAAK,EACtB,EACT,CACF,CAAC,EACD,IAAIwzE,GAAc,SAAU7tE,GAAM,CAChC,OAAO,UAAY,CACjB,IAAImY,GAAQq5B,EAAU,YAAY,EAAI,CAACpxB,EAAI,UAAUoxB,EAAU,QAAQ,EAAGpxB,EAAI,OAAO,CAAC,EAAIoxB,EAAU,kBAAkB,EAClHhpC,GAAU2jE,GAAMh0D,GAAO,SAAUpL,GAAM,CACzC,MAAO,CAAC,CAAC++D,EAAU,UAAU/+D,GAAM/M,EAAI,CACzC,CAAC,EACD,OAAOosE,GAAU5jE,GAAS,EAAI,IAAM,EACtC,CACF,EACAokE,EAAY,CACV,YAAeiB,GAAY,WAAW,EACtC,cAAiBA,GAAY,aAAa,EAC1C,aAAgBA,GAAY,YAAY,EACxC,YAAeA,GAAY,cAAc,EACzC,4DAA6D,SAAUzJ,GAAS,CAC9E,OAAOgJ,GAAchJ,EAAO,CAC9B,EACA,cAAiB,UAAY,CAC3B,OAAOgJ,GAAc,YAAY,CACnC,EACA,QAAW,UAAY,CACrB,IAAIrgE,GACJ,OAAIqc,EAAS,iBACNrc,GAAOqT,EAAI,UAAUoxB,EAAU,SAAS,EAAGpxB,EAAI,OAAO,IAAM,SAASrT,GAAK,MAAM,YAAa,EAAE,EAAI,IAGnGA,GAAOqT,EAAI,UAAUoxB,EAAU,OAAO,EAAGpxB,EAAI,OAAO,IAAM,SAASrT,GAAK,MAAM,YAAa,EAAE,EAAI,GAC7F,GAGJ2/D,EAAkB,qBAAqB,GAAKA,EAAkB,mBAAmB,GAAK,CAACtjD,EAAS,eAAiB,CAAC,CAAChJ,EAAI,UAAUoxB,EAAU,QAAQ,EAAG,YAAY,CAC3K,EACA,wCAAyC,SAAU4yB,GAAS,CAC1D,IAAI0J,GAAO1tD,EAAI,UAAUoxB,EAAU,QAAQ,EAAG,OAAO,EACrD,OAAOs8B,KAAS1J,KAAY,uBAAyB0J,GAAK,UAAY,MAAQ1J,KAAY,qBAAuB0J,GAAK,UAAY,KACpI,CACF,EAAG,OAAO,EACVlB,EAAY,CACV,KAAM,UAAY,CAChBtoE,EAAO,YAAY,KAAK,CAC1B,EACA,KAAM,UAAY,CAChBA,EAAO,YAAY,KAAK,CAC1B,CACF,CAAC,EACD2oE,EAAqB,WAAY,UAAY,CAC3C,OAAOpH,GAAcvhE,CAAM,CAC7B,EAAG,IAAI,EACP2oE,EAAqB,WAAY,UAAY,CAC3C,OAAOlH,GAAczhE,CAAM,CAC7B,EAAG,IAAI,CACT,CAEA,IAAIypE,GAAe93D,GAAM,QAAQ,6VAA6W,GAAG,EAC7Y+3D,GAAa,SAAU5kD,EAAU,CACnC,IAAIptB,EAAO,KACP4D,EAAOquE,EAAW,CAAC,EAAGC,EACtBrpE,EAAc,UAAY,CAC5B,MAAO,EACT,EACID,EAAa,UAAY,CAC3B,MAAO,EACT,EACAwkB,EAAWA,GAAY,CAAC,EACxBxpB,EAAQwpB,EAAS,OAASptB,EAC1BkyE,EAAc9kD,EAAS,aAAevkB,EACtC,IAAIi6B,EAAO,SAAU9+B,EAAM9F,EAAM,CAC/B,IAAIqqD,EAAU3mD,GAAGgJ,GAAGpD,GAyBpB,GAxBAxD,EAAOA,EAAK,YAAY,EACxB9F,EAAOA,GAAQ,CAAC,EAChBA,EAAK,KAAO8F,EACP9F,EAAK,SACRA,EAAK,OAAS0F,GAEX1F,EAAK,iBACRA,EAAK,eAAiB,UAAY,CAChCA,EAAK,mBAAqB0K,CAC5B,EACA1K,EAAK,gBAAkB,UAAY,CACjCA,EAAK,qBAAuB0K,CAC9B,EACA1K,EAAK,yBAA2B,UAAY,CAC1CA,EAAK,8BAAgC0K,CACvC,EACA1K,EAAK,mBAAqB2K,EAC1B3K,EAAK,qBAAuB2K,EAC5B3K,EAAK,8BAAgC2K,GAEnCukB,EAAS,YACXA,EAAS,WAAWlvB,CAAI,EAE1BqqD,EAAW0pB,EAASjuE,CAAI,EACpBukD,EACF,IAAK3mD,GAAI,EAAGgJ,GAAI29C,EAAS,OAAQ3mD,GAAIgJ,GAAGhJ,KAAK,CAK3C,GAJA4F,GAAW+gD,EAAS3mD,EAAC,EACjB4F,GAAS,MACX2qE,EAAInuE,EAAMwD,GAAS,IAAI,EAErBtJ,EAAK,8BAA8B,EACrC,OAAAA,EAAK,gBAAgB,EACdA,EAET,GAAIsJ,GAAS,KAAK,KAAK5D,EAAO1F,CAAI,IAAM,GACtC,OAAAA,EAAK,eAAe,EACbA,CAEX,CAEF,OAAOA,CACT,EACIkvE,EAAK,SAAUppE,EAAMwD,EAAU2+B,EAASisC,GAAO,CACjD,IAAI7pB,GAAUz9C,GAAOlJ,GAIrB,GAHI4F,IAAa,KACfA,EAAWqB,GAETrB,EAOF,IANAA,EAAW,CAAE,KAAMA,CAAS,EACxB4qE,IACFn4D,GAAM,OAAOzS,EAAU4qE,EAAK,EAE9BtnE,GAAQ9G,EAAK,YAAY,EAAE,MAAM,GAAG,EACpCpC,GAAIkJ,GAAM,OACHlJ,MACLoC,EAAO8G,GAAMlJ,EAAC,EACd2mD,GAAW0pB,EAASjuE,CAAI,EACnBukD,KACHA,GAAW0pB,EAASjuE,CAAI,EAAI,CAAC,EAC7BkuE,EAAYluE,EAAM,EAAI,GAEpBmiC,EACFoiB,GAAS,QAAQ/gD,CAAQ,EAEzB+gD,GAAS,KAAK/gD,CAAQ,EAI5B,OAAOxH,CACT,EACImyE,EAAM,SAAUnuE,EAAMwD,EAAU,CAClC,IAAI5F,EAAG2mD,GAAU8pB,GAAavnE,GAAOwnE,GACrC,GAAItuE,EAGF,IAFA8G,GAAQ9G,EAAK,YAAY,EAAE,MAAM,GAAG,EACpCpC,EAAIkJ,GAAM,OACHlJ,KAAK,CAGV,GAFAoC,EAAO8G,GAAMlJ,CAAC,EACd2mD,GAAW0pB,EAASjuE,CAAI,EACpB,CAACA,EAAM,CACT,IAAKquE,MAAeJ,EAClBC,EAAYG,GAAa,EAAK,EAC9B,OAAOJ,EAASI,EAAW,EAE7B,OAAOryE,CACT,CACA,GAAIuoD,GAAU,CACZ,GAAI,CAAC/gD,EACH+gD,GAAS,OAAS,MAGlB,KADA+pB,GAAK/pB,GAAS,OACP+pB,MACD/pB,GAAS+pB,EAAE,EAAE,OAAS9qE,IACxB+gD,GAAWA,GAAS,MAAM,EAAG+pB,EAAE,EAAE,OAAO/pB,GAAS,MAAM+pB,GAAK,CAAC,CAAC,EAC9DL,EAASjuE,CAAI,EAAIukD,IAIlBA,GAAS,SACZ2pB,EAAYluE,EAAM,EAAK,EACvB,OAAOiuE,EAASjuE,CAAI,EAExB,CACF,KACK,CACL,IAAKA,KAAQiuE,EACXC,EAAYluE,EAAM,EAAK,EAEzBiuE,EAAW,CAAC,CACd,CACA,OAAOjyE,CACT,EACIuyE,EAAO,SAAUvuE,EAAMwD,EAAU2+B,EAAS,CAC5C,OAAOinC,EAAGppE,EAAMwD,EAAU2+B,EAAS,CAAE,KAAM,EAAK,CAAC,CACnD,EACIjiB,EAAM,SAAUlgB,EAAM,CACxB,OAAAA,EAAOA,EAAK,YAAY,EACjB,EAAE,CAACiuE,EAASjuE,CAAI,GAAKiuE,EAASjuE,CAAI,EAAE,SAAW,EACxD,EACAhE,EAAK,KAAO8iC,EACZ9iC,EAAK,GAAKotE,EACVptE,EAAK,IAAMmyE,EACXnyE,EAAK,KAAOuyE,EACZvyE,EAAK,IAAMkkB,CACb,EACA8tD,GAAW,SAAW,SAAUhuE,EAAM,CACpC,MAAO,CAAC,CAAC+tE,GAAa/tE,EAAK,YAAY,CAAC,CAC1C,EAEA,IAAIwuE,GAAqB,SAAUn7D,EAAK,CACtC,OAAKA,EAAI,mBACPA,EAAI,iBAAmB,IAAI26D,GAAW,CACpC,MAAO36D,EACP,YAAa,SAAUrT,EAAM0Y,EAAO,CAC9Bs1D,GAAW,SAAShuE,CAAI,GAAKqT,EAAI,mBACnCA,EAAI,kBAAkBrT,EAAM0Y,CAAK,CAErC,CACF,CAAC,GAEIrF,EAAI,gBACb,EACIo7D,GAAa,CACf,KAAM,SAAUzuE,EAAM9F,EAAMw0E,EAAQ,CAClC,IAAI1yE,EAAO,KACX,GAAIA,EAAK,SAAWgE,IAAS,UAAYA,IAAS,SAChD,OAAO9F,EAGT,GADAA,EAAOs0E,GAAmBxyE,CAAI,EAAE,KAAKgE,EAAM9F,EAAMw0E,CAAM,EACnDA,IAAW,IAAS1yE,EAAK,OAE3B,QADIiR,EAASjR,EAAK,OAAO,EAClBiR,GAAU,CAAC/S,EAAK,qBAAqB,GAC1C+S,EAAO,KAAKjN,EAAM9F,EAAM,EAAK,EAC7B+S,EAASA,EAAO,OAAO,EAG3B,OAAO/S,CACT,EACA,GAAI,SAAU8F,EAAMwD,EAAU2+B,EAAS,CACrC,OAAOqsC,GAAmB,IAAI,EAAE,GAAGxuE,EAAMwD,EAAU2+B,CAAO,CAC5D,EACA,IAAK,SAAUniC,EAAMwD,EAAU,CAC7B,OAAOgrE,GAAmB,IAAI,EAAE,IAAIxuE,EAAMwD,CAAQ,CACpD,EACA,KAAM,SAAUxD,EAAMwD,EAAU,CAC9B,OAAOgrE,GAAmB,IAAI,EAAE,KAAKxuE,EAAMwD,CAAQ,CACrD,EACA,kBAAmB,SAAUxD,EAAM,CACjC,OAAOwuE,GAAmB,IAAI,EAAE,IAAIxuE,CAAI,CAC1C,CACF,EAEI2uE,GAAiB,SAAUrqE,EAAQpK,EAAM,CAC3C,OAAOoK,EAAO,KAAK,aAAcpK,CAAI,CACvC,EACI00E,GAAkB,SAAUtqE,EAAQpK,EAAM,CAC5C,OAAOoK,EAAO,KAAK,cAAepK,CAAI,CACxC,EACI20E,GAAa,SAAUvqE,EAAQ,CACjC,OAAOA,EAAO,KAAK,QAAQ,CAC7B,EACIwqE,GAAa,SAAUxqE,EAAQ,CACjC,OAAOA,EAAO,KAAK,QAAQ,CAC7B,EACIyqE,GAAiB,SAAUzqE,EAAQ0tB,EAAM,CAC3C,OAAO1tB,EAAO,KAAK,aAAc,CAAE,KAAM0tB,CAAK,CAAC,CACjD,EACIg9C,GAAwB,SAAU1qE,EAAQS,EAAQkqE,EAAOC,EAAQ,CACnE5qE,EAAO,KAAK,oBAAqB,CAC/B,OAAQS,EACR,MAAOkqE,EACP,OAAQC,CACV,CAAC,CACH,EACIC,GAAoB,SAAU7qE,EAAQS,EAAQkqE,EAAOC,EAAQ,CAC/D5qE,EAAO,KAAK,gBAAiB,CAC3B,OAAQS,EACR,MAAOkqE,EACP,OAAQC,CACV,CAAC,CACH,EACIE,GAAS,CACX,eAAgBT,GAChB,gBAAiBC,GACjB,WAAYC,GACZ,WAAYC,GACZ,eAAgBC,GAChB,sBAAuBC,GACvB,kBAAmBG,EACrB,EAEIE,GAAwB,SAAU/qE,EAAQgrE,EAAK52D,EAAO,CACxD,GAAI,CACFpU,EAAO,OAAO,EAAE,YAAYgrE,EAAK,GAAO52D,CAAK,CAC/C,MAAa,CACb,CACF,EACIqkB,GAAc,SAAU1kB,EAAK2kB,EAAKtkB,EAAO,CACvCorB,GAAMzrB,EAAK2kB,CAAG,GAAKtkB,IAAU,GAC/BmrB,GAASxrB,EAAK2kB,CAAG,EACRtkB,GACTgrB,GAAMrrB,EAAK2kB,CAAG,CAElB,EACIuyC,GAAiB,SAAUjrE,EAAQoU,EAAO,CAC5CqkB,GAAYve,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAAG,uBAAwBoU,CAAK,EACxEA,GACFpU,EAAO,UAAU,iBAAiB,eAAe,EACjDA,EAAO,SAAW,GAClBA,EAAO,QAAQ,EAAE,gBAAkB,UAEnCA,EAAO,SAAW,GAClBA,EAAO,QAAQ,EAAE,gBAAkB,OACnC+qE,GAAsB/qE,EAAQ,eAAgB,EAAK,EACnD+qE,GAAsB/qE,EAAQ,2BAA4B,EAAK,EAC/D+qE,GAAsB/qE,EAAQ,uBAAwB,EAAK,EAC3DA,EAAO,MAAM,EACbA,EAAO,YAAY,EAEvB,EACIkrE,GAAU,SAAUlrE,EAAQ0tB,EAAM,CAChCA,IAASy9C,GAAQnrE,CAAM,IAGvBA,EAAO,YACTirE,GAAejrE,EAAQ0tB,IAAS,UAAU,EAE1C1tB,EAAO,GAAG,OAAQ,UAAY,CAC5BirE,GAAejrE,EAAQ0tB,IAAS,UAAU,CAC5C,CAAC,EAEHo9C,GAAO,eAAe9qE,EAAQ0tB,CAAI,EACpC,EACIy9C,GAAU,SAAUnrE,EAAQ,CAC9B,OAAOA,EAAO,SAAW,WAAa,QACxC,EACIorE,GAAa,SAAUprE,EAAQ,CACjC,OAAOA,EAAO,WAAa,EAC7B,EAEIqrE,GAAQvwC,GAAW,IACnBwwC,GACAC,GAAiB,SAAUvrE,EAAQwrE,EAAW,CAChD,OAAIA,IAAc,kBACTxrE,EAAO,OAAO,EAEnB,CAACA,EAAO,QAAU,uDAAuD,KAAKwrE,CAAS,EAClFxrE,EAAO,OAAO,EAAE,gBAErBA,EAAO,SAAS,YACbA,EAAO,YACVA,EAAO,UAAYqrE,GAAM,OAAOrrE,EAAO,SAAS,UAAU,EAAE,CAAC,GAExDA,EAAO,WAETA,EAAO,QAAQ,CACxB,EACIyrE,GAAc,SAAUzrE,EAAQ,CAClC,MAAO,CAACA,EAAO,QAAU,CAACA,EAAO,QACnC,EACI0rE,GAAY,SAAU1rE,EAAQwrE,EAAWvtE,EAAG,CAC1CwtE,GAAYzrE,CAAM,EACpBA,EAAO,KAAKwrE,EAAWvtE,CAAC,EACfmtE,GAAWprE,CAAM,GAC1B/B,EAAE,eAAe,CAErB,EACI0tE,GAAoB,SAAU3rE,EAAQwrE,EAAW,CACnD,IAAII,EAAcC,EAIlB,GAHK7rE,EAAO,YACVA,EAAO,UAAY,CAAC,GAElB,EAAAA,EAAO,UAAUwrE,CAAS,GAAKxrE,EAAO,SAI1C,GADA4rE,EAAeL,GAAevrE,EAAQwrE,CAAS,EAC3CxrE,EAAO,SAAS,WAAY,CAe9B,GAdKsrE,KACHA,GAA2B,CAAC,EAC5BtrE,EAAO,cAAc,GAAG,eAAgB,UAAY,CAClD,IAAItE,EACJ,GAAI,CAACsE,EAAO,cAAc,cACpBsrE,GAA0B,CAC5B,IAAK5vE,KAAQ4vE,GACXtrE,EAAO,IAAI,OAAOurE,GAAevrE,EAAQtE,CAAI,CAAC,EAEhD4vE,GAA2B,IAC7B,CAEJ,CAAC,GAECA,GAAyBE,CAAS,EACpC,OAEFK,EAAW,SAAU5tE,EAAG,CAItB,QAHIwC,EAASxC,EAAE,OACX6tE,EAAU9rE,EAAO,cAAc,IAAI,EACnC1G,EAAIwyE,EAAQ,OACTxyE,KAAK,CACV,IAAI8H,EAAO0qE,EAAQxyE,CAAC,EAAE,QAAQ,GAC1B8H,IAASX,GAAU4qE,GAAM,UAAU5qE,EAAQW,CAAI,IACjDsqE,GAAUI,EAAQxyE,CAAC,EAAGkyE,EAAWvtE,CAAC,CAEtC,CACF,EACAqtE,GAAyBE,CAAS,EAAIK,EACtCR,GAAM,KAAKO,EAAcJ,EAAWK,CAAQ,CAC9C,MACEA,EAAW,SAAU5tE,EAAG,CACtBytE,GAAU1rE,EAAQwrE,EAAWvtE,CAAC,CAChC,EACAotE,GAAM,KAAKO,EAAcJ,EAAWK,CAAQ,EAC5C7rE,EAAO,UAAUwrE,CAAS,EAAIK,CAElC,EACIE,GAAmB,CACrB,0BAA2B,UAAY,CACrC,IAAIr0E,EAAO,KACXia,GAAM,KAAKja,EAAK,qBAAsB,SAAUgE,EAAM,CACpDiwE,GAAkBj0E,EAAMgE,CAAI,CAC9B,CAAC,CACH,EACA,kBAAmB,SAAUA,EAAM0Y,EAAO,CACxC,IAAI1c,EAAO,KACPgE,IAAS,SAAWA,IAAS,SAG7B0Y,EACE1c,EAAK,YACPi0E,GAAkBj0E,EAAMgE,CAAI,EAEvBhE,EAAK,qBAGRA,EAAK,qBAAqB,KAAKgE,CAAI,EAFnChE,EAAK,qBAAuB,CAACgE,CAAI,EAK5BhE,EAAK,cACdA,EAAK,IAAI,OAAO6zE,GAAe7zE,EAAMgE,CAAI,EAAGA,EAAMhE,EAAK,UAAUgE,CAAI,CAAC,EACtE,OAAOhE,EAAK,UAAUgE,CAAI,GAE9B,EACA,sBAAuB,UAAY,CACjC,IAAIhE,EAAO,KACP0J,EAAO1J,EAAK,QAAQ,EACpBokB,EAAMpkB,EAAK,IACXgE,EACJ,GAAIhE,EAAK,UAAW,CAClB,IAAKgE,KAAQhE,EAAK,UAChBA,EAAK,IAAI,OAAO6zE,GAAe7zE,EAAMgE,CAAI,EAAGA,EAAMhE,EAAK,UAAUgE,CAAI,CAAC,EAExE,OAAOhE,EAAK,SACd,CACI,CAACA,EAAK,QAAU0J,GAAQ0a,IAC1B1a,EAAK,OAAS,KACd0a,EAAI,OAAOpkB,EAAK,OAAO,CAAC,EACxBokB,EAAI,OAAOpkB,EAAK,OAAO,CAAC,GAEtBokB,IACFA,EAAI,OAAO1a,CAAI,EACf0a,EAAI,OAAOpkB,EAAK,aAAa,CAAC,EAElC,CACF,EACAq0E,GAAmBp6D,GAAM,OAAO,CAAC,EAAGw4D,GAAY4B,EAAgB,EAChE,IAAIC,GAAqBD,GAErBE,GAAgB/uD,GAAU,WAAY,UAAU,EAChDgvD,GAAYvyD,GAAoB,OAAO,EACvCxB,GAAU+zD,GAAU,WAAW,QAAQ,EACvCC,GAAgB,CAClB,QACA,WACA,UACF,EACIC,GAAwB,CAAE,MAAO,QAAS,EAC1CC,GAAmB,SAAUC,EAAS,CACxC,IAAIC,EAAcj0E,EAAQg0E,CAAO,EAAIA,EAAQ,KAAK,GAAG,EAAIA,EACrDE,EAAiBhzE,GAAIpB,EAASm0E,CAAW,EAAIA,EAAY,MAAM,GAAG,EAAI,CAAC,EAAGvzD,EAAM,EACpF,OAAOjf,GAAOyyE,EAAgB,SAAUp9D,EAAM,CAC5C,OAAOA,EAAK,OAAS,CACvB,CAAC,CACH,EACIq9D,GAAsB,SAAUH,EAAS,CAC3C,OAAOvyE,GAAOuyE,EAASp2E,EAAMiD,GAAUgzE,EAAa,CAAC,CACvD,EACIO,GAAkB,SAAU9kE,EAAMkd,EAAU,CAC9C,IAAI5a,EAASwR,GAASoJ,EAAU,SAAU/uB,EAAO+R,EAAK,CACpD,OAAO3O,GAASyO,EAAME,CAAG,CAC3B,CAAC,EACD,OAAOmkE,GAAc/hE,EAAO,EAAGA,EAAO,CAAC,CACzC,EACIyiE,GAAa,SAAUV,EAAevwE,EAAMuZ,EAAU,CACxD,IAAI23D,EAAWX,EAAc,SAAS,EAClCY,EAAkBD,EAAS,eAAelxE,CAAI,EAAIkxE,EAASlxE,CAAI,EAAI,CAAC,EACxE,OAAOiW,GAAM,OAAO,CAAC,EAAGsD,EAAU43D,CAAe,CACnD,EACIC,GAAa,SAAUb,EAAevwE,EAAM,CAC9C,OAAOuwE,EAAc,SAAS,EAAE,eAAevwE,CAAI,CACrD,EACIqxE,GAAqB,SAAU51E,EAAI61E,EAAiBhtE,EAAQ,CAC9D,MAAO,CACL,GAAI7I,EACJ,MAAO,SACP,YAAa,EACb,aAAc,EACd,UAAW,GACX,QAAS,GACT,kBAAmB61E,EACnB,wBAAyB,GACzB,aAAc,GACd,mBAAoB,GACpB,aAAc,GACd,cAAe,GACf,mBAAoB,GACpB,gBAAiB,GACjB,QAAS,kBACT,OAAQ,GACR,uBAAwB,uDACxB,wBAAyB,oDACzB,kBAAmB,IACnB,aAAc,GACd,UAAW,GACX,YAAa,OACb,cAAe,GACf,uBAAwB,GACxB,OAAQ,SACR,cAAe,oMACf,aAAc,oMACd,gBAAiB,QACjB,cAAehtE,EAAO,WACtB,oBAAqBA,EACrB,WAAY,EACd,CACF,EACIitE,GAAqB,SAAUC,EAAkBpoD,EAAU,CAC7D,IAAIqoD,EAA6BroD,EAAS,iBAAmBA,EAAS,iBAAmB,CAAC,EAC1F,OAAIooD,GAAoBA,EAAiB,iBAChCv7D,GAAM,OAAO,CAAC,EAAGu7D,EAAiB,iBAAkBC,CAA0B,EAE9EA,CAEX,EACIC,GAAiB,SAAUC,EAAef,EAAS,CACrD,MAAO,CAAC,EAAE,OAAOD,GAAiBgB,CAAa,CAAC,EAAE,OAAOhB,GAAiBC,CAAO,CAAC,CACpF,EACIgB,GAAiB,SAAUC,EAAetB,EAAeuB,EAAyB1oD,EAAU,CAC9F,IAAIuoD,EAAgBhB,GAAiBmB,EAAwB,cAAc,EACvElB,EAAUD,GAAiBvnD,EAAS,OAAO,EAC3C2oD,EAAkBF,GAAiBT,GAAWb,EAAe,QAAQ,EAAIQ,GAAoBH,CAAO,EAAIA,EACxGoB,EAAkBN,GAAeC,EAAeI,CAAe,EACnE,OAAO97D,GAAM,OAAOmT,EAAU,CAAE,QAAS4oD,EAAgB,KAAK,GAAG,CAAE,CAAC,CACtE,EACIC,GAAa,SAAUJ,EAAetB,EAAe,CACvD,IAAInkD,EAAWmkD,EAAc,SAAS,EAAE,OACxC,OAAOsB,GAAiBT,GAAWb,EAAe,QAAQ,GAAK,CAACnkD,CAClE,EACI8lD,GAAkB,SAAUL,EAAeM,EAAiBL,EAAyB1oD,EAAU,CACjG,IAAImnD,EAAgBS,GAAgB,CAAC,QAAQ,EAAG5nD,CAAQ,EACpDgpD,EAAmBn8D,GAAM,OAAOk8D,EAAiBL,EAAyBvB,EAAc,SAAS,EAAG0B,GAAWJ,EAAetB,CAAa,EAAIU,GAAWV,EAAe,SAAUG,EAAqB,EAAI,CAAC,EAAG,CAClN,SAAU,GACV,iBAAkBH,EAAc,SAAS,EAAE,OAC3C,iBAAkBgB,GAAmBO,EAAyBvB,EAAc,SAAS,CAAC,CACxF,CAAC,EACD,OAAOqB,GAAeC,EAAetB,EAAeuB,EAAyBM,CAAgB,CAC/F,EACIC,GAAoB,SAAU/tE,EAAQ7I,EAAI61E,EAAiBQ,EAAyB1oD,EAAU,CAChG,IAAI+oD,EAAkBd,GAAmB51E,EAAI61E,EAAiBhtE,CAAM,EACpE,OAAO4tE,GAAgBz1D,GAAS01D,EAAiBL,EAAyB1oD,CAAQ,CACpF,EACIkpD,GAAc,SAAUn+D,EAAW7P,EAAQtE,EAAM,CACnD,OAAO1D,EAAO,KAAKgI,EAAO,SAAStE,CAAI,CAAC,EAAE,OAAOmU,CAAS,CAC5D,EACIo+D,GAAiB,SAAUl4E,EAAO,CACpC,IAAIuE,EAAS,CAAC,EACd,OAAI,OAAOvE,GAAU,SACnB0D,GAAK1D,EAAM,QAAQ,GAAG,EAAI,EAAIA,EAAM,MAAM,2BAA2B,EAAIA,EAAM,MAAM,GAAG,EAAG,SAAU8I,EAAK,CACxG,IAAI/E,EAAM+E,EAAI,MAAM,GAAG,EACnB/E,EAAI,OAAS,EACfQ,EAAOqX,GAAM,KAAK7X,EAAI,CAAC,CAAC,CAAC,EAAI6X,GAAM,KAAK7X,EAAI,CAAC,CAAC,EAE9CQ,EAAOqX,GAAM,KAAK7X,EAAI,CAAC,CAAC,CAAC,EAAI6X,GAAM,KAAK7X,CAAG,CAE/C,CAAC,EAEDQ,EAASvE,EAEJuE,CACT,EACI4zE,GAAY,SAAU1yE,EAAG,CAC3B,OAAO,SAAUhE,EAAG,CAClB,OAAOc,EAAQd,CAAC,GAAK+C,GAAO/C,EAAGgE,CAAC,CAClC,CACF,EACI2yE,GAAW,SAAUnuE,EAAQtE,EAAMm6B,EAAY19B,EAAM,CACvD,IAAIpC,EAAQ2F,KAAQsE,EAAO,SAAWA,EAAO,SAAStE,CAAI,EAAIm6B,EAC9D,OAAI19B,IAAS,OACJ81E,GAAel4E,CAAK,EAClBoC,IAAS,SACX61E,GAAY51E,EAAU4H,EAAQtE,CAAI,EAAE,MAAMm6B,CAAU,EAClD19B,IAAS,SACX61E,GAAYt1E,GAAUsH,EAAQtE,CAAI,EAAE,MAAMm6B,CAAU,EAClD19B,IAAS,UACX61E,GAAYx1E,GAAWwH,EAAQtE,CAAI,EAAE,MAAMm6B,CAAU,EACnD19B,IAAS,SACX61E,GAAY31E,EAAU2H,EAAQtE,CAAI,EAAE,MAAMm6B,CAAU,EAClD19B,IAAS,QACX61E,GAAY11E,EAAS0H,EAAQtE,CAAI,EAAE,MAAMm6B,CAAU,EACjD19B,IAAS,WACX61E,GAAYE,GAAU91E,CAAQ,EAAG4H,EAAQtE,CAAI,EAAE,MAAMm6B,CAAU,EAC7D19B,IAAS,WACX61E,GAAYv1E,EAAYuH,EAAQtE,CAAI,EAAE,MAAMm6B,CAAU,EAEtD9/B,CAEX,EAEIq4E,GAASz8D,GAAM,KAAM08D,GAAY18D,GAAM,QACvC28D,GAAgB,CAClB,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,IAAK,IACL,IAAK,IACL,IAAK,GACP,EACIC,GAAgB58D,GAAM,QAAQ,4BAA4B,EAC9D,SAAS68D,GAAWxuE,EAAQ,CAC1B,IAAItI,EAAO,KACP+2E,EAAY,CAAC,EACbC,EAAkB,CAAC,EACnBC,EAAgB,SAAU5kE,EAAS,CACrC,IAAI5S,EAAI2Q,EACJ8mE,EAAW,CAAC,EAChBR,GAAOC,GAAUtkE,EAAS,GAAG,EAAG,SAAUhU,EAAO,CAC3CA,KAASw4E,GACXK,EAAS74E,CAAK,EAAI,GAEd,cAAc,KAAKA,CAAK,EAC1B64E,EAAS,QAAU,SAAS74E,EAAO,EAAE,GAErC64E,EAAS,SAAW74E,EAAM,WAAW,CAAC,EACtC64E,EAAS,QAAUN,GAAcv4E,CAAK,GAAKA,EAAM,YAAY,EAAE,WAAW,CAAC,EAGjF,CAAC,EACDoB,EAAK,CAACy3E,EAAS,OAAO,EACtB,IAAK9mE,KAAOymE,GACNK,EAAS9mE,CAAG,EACd3Q,EAAG,KAAK2Q,CAAG,EAEX8mE,EAAS9mE,CAAG,EAAI,GAGpB,OAAA8mE,EAAS,GAAKz3E,EAAG,KAAK,GAAG,EACrBy3E,EAAS,SACXA,EAAS,IAAM,GACXtxE,GAAI,IACNsxE,EAAS,KAAO,GAEhBA,EAAS,MAAQ,IAGjBA,EAAS,OACPtxE,GAAI,IACNsxE,EAAS,KAAO,IAEhBA,EAAS,KAAO,GAChBA,EAAS,KAAO,KAGbA,CACT,EACIC,EAAiB,SAAU9kE,EAAS+kE,EAAMC,EAASzzE,EAAO,CAC5D,IAAImzE,EACJ,OAAAA,EAAY98D,GAAM,IAAI08D,GAAUtkE,EAAS,GAAG,EAAG4kE,CAAa,EAC5DF,EAAUA,EAAU,OAAS,CAAC,EAAI98D,GAAM,OAAO88D,EAAUA,EAAU,OAAS,CAAC,EAAG,CAC9E,KAAMM,EACN,MAAOzzE,GAAS0E,CAClB,CAAC,EACM2R,GAAM,OAAO88D,EAAU,CAAC,EAAG,CAChC,KAAMzuE,EAAO,UAAU8uE,CAAI,EAC3B,YAAaL,EAAU,MAAM,CAAC,CAChC,CAAC,CACH,EACIO,EAAc,SAAU/wE,EAAG,CAC7B,OAAOA,EAAE,QAAUA,EAAE,SAAWA,EAAE,OACpC,EACIgxE,EAAgB,SAAUhxE,EAAG,CAC/B,OAAOA,EAAE,OAAS,WAAaA,EAAE,SAAW,KAAOA,EAAE,SAAW,GAClE,EACIixE,EAAgB,SAAUjxE,EAAG2wE,EAAU,CAOzC,MANI,CAACA,GAGDA,EAAS,OAAS3wE,EAAE,SAAW2wE,EAAS,OAAS3wE,EAAE,SAGnD2wE,EAAS,MAAQ3wE,EAAE,QAAU2wE,EAAS,QAAU3wE,EAAE,SAC7C,GAELA,EAAE,UAAY2wE,EAAS,SAAW3wE,EAAE,UAAYA,EAAE,WAAa2wE,EAAS,UAC1E3wE,EAAE,eAAe,EACV,IAEF,EACT,EACIkxE,EAAwB,SAAUP,EAAU,CAC9C,OAAOA,EAAS,KAAOA,EAAS,KAAK,KAAKA,EAAS,KAAK,EAAI,IAC9D,EACA5uE,EAAO,GAAG,yBAA0B,SAAU/B,EAAG,EAC1C+wE,EAAY/wE,CAAC,GAAKgxE,EAAchxE,CAAC,IAAM,CAACA,EAAE,mBAAmB,IAChEmwE,GAAOK,EAAW,SAAUG,EAAU,CACpC,GAAIM,EAAcjxE,EAAG2wE,CAAQ,EAC3B,OAAAF,EAAkBE,EAAS,YAAY,MAAM,CAAC,EAC1C3wE,EAAE,OAAS,WACbkxE,EAAsBP,CAAQ,EAEzB,EAEX,CAAC,EACGM,EAAcjxE,EAAGywE,EAAgB,CAAC,CAAC,IACjCA,EAAgB,SAAW,GACzBzwE,EAAE,OAAS,WACbkxE,EAAsBT,EAAgB,CAAC,CAAC,EAG5CA,EAAgB,MAAM,GAG5B,CAAC,EACDh3E,EAAK,IAAM,SAAUqS,EAAS+kE,EAAMC,EAASzzE,EAAO,CAClD,IAAI0vE,EACJ,OAAAA,EAAM+D,EACF,OAAOA,GAAY,SACrBA,EAAU,UAAY,CACpB/uE,EAAO,YAAYgrE,EAAK,GAAO,IAAI,CACrC,EACSr5D,GAAM,QAAQq5D,CAAG,IAC1B+D,EAAU,UAAY,CACpB/uE,EAAO,YAAYgrE,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,CAC3C,GAEFoD,GAAOC,GAAU18D,GAAM,KAAK5H,EAAQ,YAAY,CAAC,CAAC,EAAG,SAAUA,GAAS,CACtE,IAAI6kE,GAAWC,EAAe9kE,GAAS+kE,EAAMC,EAASzzE,CAAK,EAC3DmzE,EAAUG,GAAS,EAAE,EAAIA,EAC3B,CAAC,EACM,EACT,EACAl3E,EAAK,OAAS,SAAUqS,EAAS,CAC/B,IAAI6kE,EAAWC,EAAe9kE,CAAO,EACrC,OAAI0kE,EAAUG,EAAS,EAAE,GACvB,OAAOH,EAAUG,EAAS,EAAE,EACrB,IAEF,EACT,CACF,CAEA,IAAIz+B,GAAW,SAAUhxC,EAAS,CAChC,IAAIgC,EAAMqd,GAAMrf,CAAO,EAAE,IAAI,EAC7B,OAAOA,EAAQ,IAAI,IAAMgC,EAAI,aAC/B,EACIiuE,GAAS,SAAUC,EAAM,CAC3B,IAAIluE,EAAMkuE,IAAS,OAAYA,EAAK,IAAI,EAAI95E,EAAW,SACvD,OAAOyC,EAAO,KAAKmJ,EAAI,aAAa,EAAE,IAAI+Y,GAAQ,OAAO,CAC3D,EACIo1D,GAAS,SAAUnwE,EAAS,CAC9B,OAAOiwE,GAAO5wD,GAAMrf,CAAO,CAAC,EAAE,OAAO,SAAUlB,EAAG,CAChD,OAAOkB,EAAQ,IAAI,EAAE,SAASlB,EAAE,IAAI,CAAC,CACvC,CAAC,CACH,EAEIsxE,GAAyB,SAAUvvE,EAAQyI,EAAM,CACnD,OAAOzI,EAAO,IAAI,UAAUyI,EAAM,SAAUA,EAAM,CAChD,OAAOzI,EAAO,IAAI,mBAAmByI,CAAI,IAAM,MACjD,CAAC,CACH,EACI+mE,GAAmB,SAAUjvC,EAAK,CACpC,OAAOA,EAAI,UAAYvoC,EAAO,KAAK+vC,GAAQxH,EAAI,eAAgBA,EAAI,WAAW,CAAC,EAAE,IAAIrmB,GAAQ,OAAO,EAAIliB,EAAO,KAAK,CACtH,EACIy3E,GAAoB,SAAU9+D,EAAM4vB,EAAK,CAC3C,OAAOivC,GAAiBjvC,CAAG,EAAE,KAAK,SAAU93B,EAAM,CAChD,OAAI2f,GAAe3f,CAAI,EACdzQ,EAAO,KAAKyQ,CAAI,EACd8V,GAAW5N,EAAMlI,CAAI,IAAM,GAC7BzQ,EAAO,KAAK2Y,CAAI,EAEhB3Y,EAAO,KAAK,CAEvB,CAAC,CACH,EACI03E,GAAqB,SAAU1vE,EAAQugC,EAAK,CAC9CkvC,GAAkBv1D,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAAGugC,CAAG,EAAE,KAAK,SAAUxsB,EAAK,CAC5E,OAAOqhC,GAAY,gBAAgBrhC,EAAI,IAAI,CAAC,CAC9C,CAAC,EAAE,KAAK,UAAY,CAClB/T,EAAO,UAAU,UAAU,CAE7B,EAAG,SAAUy9C,EAAU,CACrB,OAAOz9C,EAAO,UAAU,OAAOy9C,EAAS,QAAQ,CAAC,CACnD,CAAC,CACH,EACIkyB,GAAY,SAAUvuE,EAAM,CAC9B,GAAIA,EAAK,UACP,GAAI,CACFA,EAAK,UAAU,CACjB,MAAa,CACXA,EAAK,MAAM,CACb,MAEAA,EAAK,MAAM,CAEf,EACIwuE,GAAkB,SAAU77D,EAAK,CACnC,OAAOo8B,GAASp8B,CAAG,GAAKu7D,GAAOv7D,CAAG,EAAE,OAAO,CAC7C,EACI87D,GAAiB,SAAU7vE,EAAQ,CACrC,OAAOA,EAAO,eAAiBmwC,GAASj2B,GAAQ,QAAQla,EAAO,aAAa,CAAC,CAC/E,EACI8vE,GAAiB,SAAU9vE,EAAQ,CACrC,IAAI+vE,EAAU/vE,EAAO,QAAQ,EAC7B,OAAO+vE,GAAWH,GAAgB11D,GAAQ,QAAQ61D,CAAO,CAAC,CAC5D,EACIC,GAAa,SAAUhwE,EAAQ,CACjC,OAAOA,EAAO,OAAS8vE,GAAe9vE,CAAM,EAAI6vE,GAAe7vE,CAAM,CACvE,EACIiwE,GAAc,SAAUjwE,EAAQ,CAClC,IAAIktC,EAAYltC,EAAO,UAAW3C,EAAkB2C,EAAO,SAAS,iBAChEoB,EAAOpB,EAAO,QAAQ,EACtBugC,EAAM2M,EAAU,OAAO,EAC3BltC,EAAO,OAAO,uBAAuB,EACrC,IAAIkwE,EAAsBX,GAAuBvvE,EAAQktC,EAAU,QAAQ,CAAC,EAC5E,GAAIltC,EAAO,EAAE,SAASoB,EAAM8uE,CAAmB,EAAG,CAChDP,GAAUO,CAAmB,EAC7BR,GAAmB1vE,EAAQugC,CAAG,EAC9B4vC,GAAenwE,CAAM,EACrB,MACF,CACIA,EAAO,WAAa,QAAagwE,GAAWhwE,CAAM,IAAM,IAC1D+mE,GAAkB,OAAO/mE,CAAM,EAAE,KAAK,SAAUowE,EAAa,CAC3DpwE,EAAO,UAAU,OAAOowE,CAAW,EACnC7vC,EAAM6vC,CACR,CAAC,EAEE/yE,IACEC,GAAI,OACPqyE,GAAUvuE,CAAI,EAEhBpB,EAAO,OAAO,EAAE,MAAM,IAEpB1C,GAAI,OAASD,KACfsyE,GAAUvuE,CAAI,EACdsuE,GAAmB1vE,EAAQugC,CAAG,GAEhC4vC,GAAenwE,CAAM,CACvB,EACImwE,GAAiB,SAAUnwE,EAAQ,CACrC,OAAOA,EAAO,cAAc,UAAUA,CAAM,CAC9C,EACIqwE,GAAQ,SAAUrwE,EAAQswE,EAAW,CACnCtwE,EAAO,UAGXswE,EAAYH,GAAenwE,CAAM,EAAIiwE,GAAYjwE,CAAM,EACzD,EACIuwE,GAAc,CAChB,MAAOF,GACP,SAAUL,EACZ,EAEIQ,GAAU,SAAUznD,EAAUhV,EAAK,CACrC,IAAI08D,EAAS18D,EAAI,IAAI,EACrB,OAAO08D,EAAO1nD,CAAQ,CACxB,EACI2nD,GAAsB,SAAU3nD,EAAUhV,EAAK,CACjD,OAAO,SAAS4I,EAAM5I,EAAKgV,CAAQ,EAAG,EAAE,CAC1C,EACI4nD,GAAiBz6E,EAAMs6E,GAAS,aAAa,EAC7CI,GAAkB16E,EAAMs6E,GAAS,cAAc,EAC/CK,GAAe36E,EAAMw6E,GAAqB,YAAY,EACtDI,GAAgB56E,EAAMw6E,GAAqB,aAAa,EACxDK,GAA0B,SAAUh9D,EAAK,CAC3C,OAAOA,EAAI,IAAI,EAAE,sBAAsB,CACzC,EACIi9D,GAA6B,SAAUC,EAAS3pC,EAASC,EAAS,CACpE,IAAI2pC,EAAcP,GAAeM,CAAO,EACpCE,EAAeP,GAAgBK,CAAO,EAC1C,OAAO3pC,GAAW,GAAKC,GAAW,GAAKD,GAAW4pC,GAAe3pC,GAAW4pC,CAC9E,EACIC,GAAY,SAAUhhD,EAAQrc,EAAKuzB,EAASC,EAAS,CACvD,IAAIoC,EAAaonC,GAAwBh9D,CAAG,EACxCs9D,EAASjhD,EAASuZ,EAAW,KAAO51B,EAAI,IAAI,EAAE,WAAa+8D,GAAc/8D,CAAG,EAAI,EAChFu9D,EAASlhD,EAASuZ,EAAW,IAAM51B,EAAI,IAAI,EAAE,UAAY88D,GAAa98D,CAAG,EAAI,EAC7E9d,EAAIqxC,EAAU+pC,EACd58D,EAAI8yB,EAAU+pC,EAClB,MAAO,CACL,EAAGr7E,EACH,EAAGwe,CACL,CACF,EACI88D,GAAoB,SAAUvxE,EAAQsnC,EAASC,EAAS,CAC1D,IAAI0pC,EAAU/2D,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAC1CwxE,EAAYxxE,EAAO,OAASixE,EAAUzoE,GAAgByoE,CAAO,EAC7DQ,EAAkBL,GAAUpxE,EAAO,OAAQwxE,EAAWlqC,EAASC,CAAO,EAC1E,OAAOypC,GAA2BQ,EAAWC,EAAgB,EAAGA,EAAgB,CAAC,CACnF,EACIC,GAAc,SAAUjpE,EAAM,CAChC,OAAOzQ,EAAO,KAAKyQ,CAAI,EAAE,IAAIyR,GAAQ,OAAO,CAC9C,EACIy3D,GAAwB,SAAU3xE,EAAQ,CAC5C,IAAI4xE,EAAe5xE,EAAO,OAASA,EAAO,QAAQ,EAAIA,EAAO,wBAAwB,EACrF,OAAO0xE,GAAYE,CAAY,EAAE,IAAI,SAAUrvE,EAAW,CACxD,OAAOgc,GAAWC,GAAMjc,CAAS,EAAGA,CAAS,CAC/C,CAAC,EAAE,MAAM,EAAK,CAChB,EACIsvE,GAAa,CACf,kBAAmBN,GACnB,sBAAuBI,EACzB,EAEA,SAASG,IAA2B,CAClC,IAAIC,EAAgB,UAAY,CAC9B,MAAM,IAAI,MAAM,6DAA6D,CAC/E,EACA,MAAO,CACL,KAAMA,EACN,MAAOA,EACP,WAAYA,EACZ,QAASA,CACX,CACF,CAEA,SAASC,GAAqBhyE,EAAQ,CACpC,IAAIiyE,EAAgB,CAAC,EACjBC,EAAoB,UAAY,CAClC,IAAIC,EAAQnyE,EAAO,MACnB,OAAOmyE,GAASA,EAAM,2BAA6BA,EAAM,2BAA2B,EAAIL,GAAwB,CAClH,EACIM,EAAqB,UAAY,CACnC,OAAOp6E,EAAO,KAAKi6E,EAAc,CAAC,CAAC,CACrC,EACIprC,EAAU,SAAUrvC,EAAGM,EAAG,CAC5B,OAAON,EAAE,OAASM,EAAE,MAAQN,EAAE,OAASM,EAAE,MAAQ,CAACN,EAAE,aAAe,CAACA,EAAE,SAAW,CAACM,EAAE,aAAe,CAACA,EAAE,OACxG,EACI24C,EAAa,UAAY,CACvBwhC,EAAc,OAAS,GACzBC,EAAkB,EAAE,WAAWD,CAAa,CAEhD,EACII,EAAkB,SAAUC,EAAc,CAC5CL,EAAc,KAAKK,CAAY,CACjC,EACIC,EAAoB,SAAUD,EAAc,CAC9Cl4E,GAAU63E,EAAe,SAAUO,EAAmB,CACpD,OAAOA,IAAsBF,CAC/B,CAAC,EAAE,KAAK,SAAUjjE,EAAO,CACvB4iE,EAAc,OAAO5iE,EAAO,CAAC,CAC/B,CAAC,CACH,EACIojE,EAAO,SAAU78E,EAAM,CACzB,GAAI,EAAAoK,EAAO,SAAW,CAAC6xE,GAAW,sBAAsB7xE,CAAM,GAG9D,OAAO7F,GAAK83E,EAAe,SAAUK,EAAc,CACjD,OAAOzrC,EAAQqrC,EAAkB,EAAE,QAAQI,CAAY,EAAG18E,CAAI,CAChE,CAAC,EAAE,WAAW,UAAY,CACxBoK,EAAO,cAAc,UAAUA,CAAM,EACrC,IAAIsyE,EAAeJ,EAAkB,EAAE,KAAKt8E,EAAM,UAAY,CAC5D28E,EAAkBD,CAAY,EAC9B7hC,EAAW,CACb,CAAC,EACD,OAAA4hC,EAAgBC,CAAY,EAC5B7hC,EAAW,EACJ6hC,CACT,CAAC,CACH,EACII,EAAQ,UAAY,CACtBN,EAAmB,EAAE,KAAK,SAAUE,EAAc,CAChDJ,EAAkB,EAAE,MAAMI,CAAY,EACtCC,EAAkBD,CAAY,EAC9B7hC,EAAW,CACb,CAAC,CACH,EACIkiC,EAAmB,UAAY,CACjC,OAAOV,CACT,EACIW,EAAiB,SAAU5yE,EAAQ,CACrCA,EAAO,GAAG,aAAc,UAAY,CAClC,IAAI6yE,EAAiB7yE,EAAO,SAAS,gBACjC6yE,GACFJ,EAAK,CACH,KAAMI,EACN,KAAM,UACN,QAAS,EACT,KAAM,EACR,CAAC,CAEL,CAAC,EACD7yE,EAAO,GAAG,4BAA6B,UAAY,CACjDD,GAAM,sBAAsB0wC,CAAU,CACxC,CAAC,EACDzwC,EAAO,GAAG,SAAU,UAAY,CAC9BvG,GAAKw4E,EAAc,MAAM,EAAG,SAAUK,EAAc,CAClDJ,EAAkB,EAAE,MAAMI,CAAY,CACxC,CAAC,CACH,CAAC,CACH,EACA,OAAAM,EAAe5yE,CAAM,EACd,CACL,KAAMyyE,EACN,MAAOC,EACP,iBAAkBC,CACpB,CACF,CAEA,SAASG,IAAqB,CAC5B,IAAIf,EAAgB,UAAY,CAC9B,MAAM,IAAI,MAAM,uDAAuD,CACzE,EACA,MAAO,CACL,KAAMA,EACN,MAAOA,EACP,QAASA,EACT,MAAOA,EACP,UAAWA,EACX,UAAWA,CACb,CACF,CAEA,SAASgB,GAAe/yE,EAAQ,CAC9B,IAAIgX,EAAU,CAAC,EACXk7D,EAAoB,UAAY,CAClC,IAAIC,GAAQnyE,EAAO,MACnB,OAAOmyE,IAASA,GAAM,qBAAuBA,GAAM,qBAAqB,EAAIW,GAAkB,CAChG,EACIE,EAAW,SAAU13E,GAAO9E,GAAG,CACjC,OAAO,UAAY,CACjB,OAAOA,GAAIA,GAAE,MAAM8E,GAAO,SAAS,EAAI,MACzC,CACF,EACI23E,EAAgB,SAAU3xE,GAAK,CACjCtB,EAAO,KAAK,aAAc,CAAE,IAAKsB,EAAI,CAAC,CACxC,EACI4xE,EAAiB,SAAU5xE,GAAK,CAClCtB,EAAO,KAAK,cAAe,CAAE,IAAKsB,EAAI,CAAC,CACzC,EACI6xE,EAAY,SAAU7xE,GAAK,CAC7B0V,EAAQ,KAAK1V,EAAG,EAChB2xE,EAAc3xE,EAAG,CACnB,EACI8xE,EAAc,SAAU9xE,GAAK,CAC/BlH,GAAU4c,EAAS,SAAUq8D,GAAa,CACxC,OAAOA,KAAgB/xE,EACzB,CAAC,EAAE,KAAK,SAAU+N,GAAO,CACvB2H,EAAQ,OAAO3H,GAAO,CAAC,EACvB6jE,EAAe5xE,EAAG,EACd0V,EAAQ,SAAW,GACrBhX,EAAO,MAAM,CAEjB,CAAC,CACH,EACIszE,EAAe,UAAY,CAC7B,OAAOt7E,EAAO,KAAKgf,EAAQA,EAAQ,OAAS,CAAC,CAAC,CAChD,EACIy7D,EAAO,SAAU78E,GAAM29E,GAAQ,CACjCvzE,EAAO,cAAc,UAAUA,CAAM,EACrC+mE,GAAkB,MAAM/mE,CAAM,EAC9B,IAAIsB,GAAM4wE,EAAkB,EAAE,KAAKt8E,GAAM29E,GAAQH,CAAW,EAC5D,OAAAD,EAAU7xE,EAAG,EACNA,EACT,EACIkyE,EAAQ,SAAUhvD,GAAStlB,GAAU5D,GAAO,CAC9C,IAAIgG,GAAM4wE,EAAkB,EAAE,MAAM1tD,GAASwuD,EAAS13E,IAAgB,KAAM4D,EAAQ,EAAGk0E,CAAW,EAClGD,EAAU7xE,EAAG,CACf,EACImyE,EAAU,SAAUjvD,GAAStlB,GAAU5D,GAAO,CAChD,IAAIgG,GAAM4wE,EAAkB,EAAE,QAAQ1tD,GAASwuD,EAAS13E,IAAgB,KAAM4D,EAAQ,EAAGk0E,CAAW,EACpGD,EAAU7xE,EAAG,CACf,EACIoxE,EAAQ,UAAY,CACtBY,EAAa,EAAE,KAAK,SAAUhyE,GAAK,CACjC4wE,EAAkB,EAAE,MAAM5wE,EAAG,EAC7B8xE,EAAY9xE,EAAG,CACjB,CAAC,CACH,EACIoyE,EAAY,UAAY,CAC1B,OAAOJ,EAAa,EAAE,IAAIpB,EAAkB,EAAE,SAAS,EAAE,MAAM,IAAI,CACrE,EACIyB,EAAY,SAAUJ,GAAQ,CAChCD,EAAa,EAAE,KAAK,SAAUhyE,GAAK,CACjC4wE,EAAkB,EAAE,UAAU5wE,GAAKiyE,EAAM,CAC3C,CAAC,CACH,EACIK,GAAa,UAAY,CAC3B,OAAO58D,CACT,EACA,OAAAhX,EAAO,GAAG,SAAU,UAAY,CAC9BvG,GAAKud,EAAQ,MAAM,CAAC,EAAG,SAAU1V,GAAK,CACpC4wE,EAAkB,EAAE,MAAM5wE,EAAG,CAC/B,CAAC,CACH,CAAC,EACM,CACL,QAAS0V,EACT,KAAMy7D,EACN,MAAOe,EACP,QAASC,EACT,MAAOf,EACP,UAAWgB,EACX,UAAWC,EACX,WAAYC,EACd,CACF,CAEA,IAAI3yE,GAAO,CAAC,EACR4yE,GAAO,KACPC,GAAO,CACT,QAAS,SAAUC,EAAS,CACtBA,IACFF,GAAOE,EACP,KAAK,IAAM,KAAK,KAAKA,CAAO,EAAI,KAAK,KAAKA,CAAO,EAAE,OAAS,MAAQ,GAExE,EACA,QAAS,UAAY,CACnB,OAAOF,EACT,EACA,IAAK,GACL,IAAK,SAAUA,EAAMvjE,EAAO,CAC1B,IAAI0jE,EAAW/yE,GAAK4yE,CAAI,EACnBG,IACH/yE,GAAK4yE,CAAI,EAAIG,EAAW,CAAC,GAE3B,QAASt4E,KAAQ4U,EACf0jE,EAASt4E,CAAI,EAAI4U,EAAM5U,CAAI,EAE7B,KAAK,QAAQm4E,CAAI,CACnB,EACA,UAAW,SAAUzoE,EAAM,CACzB,IAAI4oE,EAAW/yE,GAAK4yE,EAAI,GAAK,CAAC,EAC1BI,EAAW,SAAUllE,EAAK,CAC5B,OAAI4C,GAAM,GAAG5C,EAAK,UAAU,EACnB,OAAO,UAAU,SAAS,KAAKA,CAAG,EAEnC+qB,EAAQ/qB,CAAG,EAAe,GAAX,GAAKA,CAC9B,EACI+qB,EAAU,SAAU1uB,EAAM,CAC5B,OAAOA,IAAS,IAAMA,IAAS,MAAQuG,GAAM,GAAGvG,EAAM,WAAW,CACnE,EACI8oE,EAAc,SAAU9oE,EAAM,CAChC,OAAAA,EAAO6oE,EAAS7oE,CAAI,EACbuG,GAAM,OAAOqiE,EAAU5oE,CAAI,EAAI6oE,EAASD,EAAS5oE,CAAI,CAAC,EAAIA,CACnE,EACA,GAAI0uB,EAAQ1uB,CAAI,EACd,MAAO,GAET,GAAIuG,GAAM,GAAGvG,EAAM,QAAQ,GAAKuG,GAAM,OAAOvG,EAAM,KAAK,EACtD,OAAO6oE,EAAS7oE,EAAK,GAAG,EAE1B,GAAIuG,GAAM,GAAGvG,EAAM,OAAO,EAAG,CAC3B,IAAI+oE,EAAW/oE,EAAK,MAAM,CAAC,EAC3BA,EAAO8oE,EAAY9oE,EAAK,CAAC,CAAC,EAAE,QAAQ,gBAAiB,SAAUgpE,EAAIC,EAAI,CACrE,OAAO1iE,GAAM,OAAOwiE,EAAUE,CAAE,EAAIJ,EAASE,EAASE,CAAE,CAAC,EAAID,CAC/D,CAAC,CACH,CACA,OAAOF,EAAY9oE,CAAI,EAAE,QAAQ,iBAAkB,EAAE,CACvD,EACA,KAAMnK,EACR,EAEIqzE,GAAgBl4C,GAAa,cAC7Bm4C,GAAoB,SAAUC,EAAW5hD,EAAQ,CACnD,QAASl3B,KAAQ44E,GAAc,KAAM,CACnC,IAAIG,EAAWH,GAAc,KAAK54E,CAAI,EAAI,UAAYk3B,EAAS,MAC/D,GAAI6hD,IAAaD,EACf,OAAO94E,CAEX,CACA,OAAO,IACT,EACIg5E,GAAqB,SAAU10E,EAAQlE,EAAK,CAC9C,IAAI64E,EAASJ,GAAkBz4E,EAAKkE,EAAO,MAAM,EACjD,OAAO20E,EAASb,GAAK,UAAU,CAC7B,0CACAa,EACA74E,CACF,CAAC,EAAIg4E,GAAK,UAAU,CAClB,iCACAh4E,CACF,CAAC,CACH,EACI84E,GAAsB,SAAU50E,EAAQwkB,EAAS,CACnDxkB,EAAO,oBAAoB,KAAK,CAC9B,KAAM,QACN,KAAMwkB,CACR,CAAC,CACH,EACIqwD,GAAe,SAAU70E,EAAQwkB,EAAS,CACxCxkB,EAAO,YACT40E,GAAoB50E,EAAQwkB,CAAO,EAEnCxkB,EAAO,GAAG,aAAc,UAAY,CAClC40E,GAAoB50E,EAAQwkB,CAAO,CACrC,CAAC,CAEL,EACIswD,GAAc,SAAU90E,EAAQwkB,EAAS,CAC3CqwD,GAAa70E,EAAQ8zE,GAAK,UAAU,CAClC,8BACAtvD,CACF,CAAC,CAAC,CACJ,EACIuwD,GAAkB,SAAU/0E,EAAQlE,EAAK,CAC3C+4E,GAAa70E,EAAQ00E,GAAmB10E,EAAQlE,CAAG,CAAC,CACtD,EACIk5E,GAAkB,SAAUh1E,EAAQtE,EAAMkmB,EAAK,CACjD,IAAI4C,EAAUsvD,GAAK,UAAU,CAC3B,mCACAp4E,CACF,CAAC,EACDu5E,GAAUzwD,EAAS5C,CAAG,EACtBizD,GAAa70E,EAAQwkB,CAAO,CAC9B,EACIywD,GAAY,SAAUzwD,EAAS,CAEjC,QADIvuB,EAAI,CAAC,EACAJ,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCI,EAAEJ,EAAK,CAAC,EAAI,UAAUA,CAAE,EAE1B,IAAIq/E,EAAU3/E,EAAW,OAAO,QAC5B2/E,IACEA,EAAQ,MACVA,EAAQ,MAAM,MAAMA,EAAS,SAAS,EAEtCA,EAAQ,IAAI,MAAMA,EAAS,SAAS,EAG1C,EACIC,GAAgB,CAClB,gBAAiBJ,GACjB,gBAAiBC,GACjB,YAAaF,GACb,aAAcD,GACd,UAAWI,EACb,EAEIG,GAAkBh5C,GAAa,cAE/Bi5C,GAAej5C,GAAa,aAEhC,SAASk5C,IAAkB,CACzB,IAAI9+E,EAAIqF,GAAS,SAAS,gBAAgB,EAC1C,OAAO,IAAIrF,CACb,CAEA,SAAS++E,GAAUC,EAAc1wD,EAAU,CACzC,IAAI2wD,EAAkB,CAAC,EACnBC,EAAW,SAAUC,EAAOC,GAAO,CACrC,OAAID,EACKA,EAAM,QAAQ,MAAO,EAAE,EAAI,IAAMC,GAAM,QAAQ,MAAO,EAAE,EAE1DA,EACT,EACIC,EAAiB,SAAUC,EAAUtvD,GAASC,GAASsvD,GAAU,CACnE,IAAIC,GAAKC,GACTD,GAAMV,GAAe,EACrBU,GAAI,KAAK,OAAQlxD,EAAS,GAAG,EAC7BkxD,GAAI,gBAAkBlxD,EAAS,YAC/BkxD,GAAI,OAAO,WAAa,SAAU/3E,GAAG,CACnC83E,GAAS93E,GAAE,OAASA,GAAE,MAAQ,GAAG,CACnC,EACA+3E,GAAI,QAAU,UAAY,CACxBvvD,GAAQ,2DAA6DuvD,GAAI,MAAM,CACjF,EACAA,GAAI,OAAS,UAAY,CACvB,IAAIE,GACJ,GAAIF,GAAI,OAAS,KAAOA,GAAI,QAAU,IAAK,CACzCvvD,GAAQ,eAAiBuvD,GAAI,MAAM,EACnC,MACF,CAEA,GADAE,GAAO,KAAK,MAAMF,GAAI,YAAY,EAC9B,CAACE,IAAQ,OAAOA,GAAK,UAAa,SAAU,CAC9CzvD,GAAQ,iBAAmBuvD,GAAI,YAAY,EAC3C,MACF,CACAxvD,GAAQkvD,EAAS5wD,EAAS,SAAUoxD,GAAK,QAAQ,CAAC,CACpD,EACAD,GAAW,IAAI1gF,EAAW,SAC1B0gF,GAAS,OAAO,OAAQH,EAAS,KAAK,EAAGA,EAAS,SAAS,CAAC,EAC5DE,GAAI,KAAKC,EAAQ,CACnB,EACIE,EAAW,UAAY,CACzB,OAAO,IAAIp3E,GAAW,SAAUxD,EAAS,CACvCA,EAAQ,CAAC,CAAC,CACZ,CAAC,CACH,EACI66E,EAAiB,SAAUN,EAAUh6E,GAAK,CAC5C,MAAO,CACL,IAAKA,GACL,SAAUg6E,EACV,OAAQ,EACV,CACF,EACIO,EAAiB,SAAUP,EAAUvxD,GAAO,CAC9C,MAAO,CACL,IAAK,GACL,SAAUuxD,EACV,OAAQ,GACR,MAAOvxD,EACT,CACF,EACI+xD,EAAiB,SAAUC,EAASrsE,GAAQ,CAC9CyH,GAAM,KAAK8jE,EAAgBc,CAAO,EAAG,SAAUh7E,GAAS,CACtDA,GAAQ2O,EAAM,CAChB,CAAC,EACD,OAAOurE,EAAgBc,CAAO,CAChC,EACIC,EAAiB,SAAUV,EAAU31B,GAASs2B,GAAkB,CAClE,OAAAjB,EAAa,YAAYM,EAAS,QAAQ,CAAC,EACpC,IAAI/2E,GAAW,SAAUxD,GAAS,CACvC,IAAI+2E,GAAcyD,GACdvgF,GAAO,UAAY,CACvB,EACA,GAAI,CACF,IAAIkhF,GAAsB,UAAY,CAChCpE,KACFA,GAAa,MAAM,EACnByD,GAAWvgF,GAEf,EACIgxB,GAAU,SAAU1qB,GAAK,CAC3B46E,GAAoB,EACpBlB,EAAa,aAAaM,EAAS,QAAQ,EAAGh6E,EAAG,EACjDw6E,EAAeR,EAAS,QAAQ,EAAGM,EAAeN,EAAUh6E,EAAG,CAAC,EAChEP,GAAQ66E,EAAeN,EAAUh6E,EAAG,CAAC,CACvC,EACI2qB,GAAU,SAAUlC,GAAO,CAC7BmyD,GAAoB,EACpBlB,EAAa,aAAaM,EAAS,QAAQ,CAAC,EAC5CQ,EAAeR,EAAS,QAAQ,EAAGO,EAAeP,EAAUvxD,EAAK,CAAC,EAClEhpB,GAAQ86E,EAAeP,EAAUvxD,EAAK,CAAC,CACzC,EACAwxD,GAAW,SAAUY,GAAS,CACxBA,GAAU,GAAKA,GAAU,MAGxBrE,KACHA,GAAemE,GAAiB,GAElCnE,GAAa,YAAY,MAAMqE,EAAO,EACxC,EACAx2B,GAAQ21B,EAAUtvD,GAASC,GAASsvD,EAAQ,CAC9C,OAASr3E,GAAI,CACXnD,GAAQ86E,EAAeP,EAAUp3E,GAAG,OAAO,CAAC,CAC9C,CACF,CAAC,CACH,EACIk4E,EAAmB,SAAUz2B,EAAS,CACxC,OAAOA,IAAY01B,CACrB,EACIgB,EAAwB,SAAUf,EAAU,CAC9C,IAAIS,GAAUT,EAAS,QAAQ,EAC/B,OAAO,IAAI/2E,GAAW,SAAUxD,GAAS,CACvCk6E,EAAgBc,EAAO,EAAId,EAAgBc,EAAO,GAAK,CAAC,EACxDd,EAAgBc,EAAO,EAAE,KAAKh7E,EAAO,CACvC,CAAC,CACH,EACIu7E,EAAc,SAAUC,EAAWN,GAAkB,CACvD,OAAAM,EAAYplE,GAAM,KAAKolE,EAAW,SAAUjB,GAAU,CACpD,MAAO,CAACN,EAAa,WAAWM,GAAS,QAAQ,CAAC,CACpD,CAAC,EACM/2E,GAAW,IAAI4S,GAAM,IAAIolE,EAAW,SAAUjB,GAAU,CAC7D,OAAON,EAAa,UAAUM,GAAS,QAAQ,CAAC,EAAIe,EAAsBf,EAAQ,EAAIU,EAAeV,GAAUhxD,EAAS,QAAS2xD,EAAgB,CACnJ,CAAC,CAAC,CACJ,EACIO,EAAS,SAAUD,EAAWN,GAAkB,CAClD,MAAO,CAAC3xD,EAAS,KAAO8xD,EAAiB9xD,EAAS,OAAO,EAAIqxD,EAAS,EAAIW,EAAYC,EAAWN,EAAgB,CACnH,EACA,OAAIh+E,EAAWqsB,EAAS,OAAO,IAAM,KACnCA,EAAS,QAAU+wD,GAEd,CAAE,OAAQmB,CAAO,CAC1B,CAEA,SAASC,IAAc,CACrB,IAAIzgF,EAAIqF,GAAS,SAAS,YAAY,EACtC,OAAO,IAAIrF,CACb,CAEA,SAAS0gF,GAAYp9E,EAAK,CACxB,IAAItD,EAAIqF,GAAS,SAAS,YAAY,EACtC,OAAO,IAAIrF,EAAEsD,CAAG,CAClB,CAEA,IAAIq9E,GAA0B,SAAUj4E,EAAU,CAChD,IAAI1I,EAAIqF,GAAS,SAAS,uBAAuB,EACjDrF,EAAE0I,CAAQ,CACZ,EACIk4E,GAAO,SAAUC,EAAQ,CAC3B,IAAI7gF,EAAIqF,GAAS,SAAS,MAAM,EAChC,OAAOrF,EAAE6gF,CAAM,CACjB,EACIC,GAAS,CACX,KAAMF,GACN,sBAAuBD,EACzB,EAEII,GAAgB,SAAUz7E,EAAK,CACjC,OAAO,IAAIiD,GAAW,SAAUxD,EAASoC,EAAQ,CAC/C,IAAI65E,EAAkB,UAAY,CAChC75E,EAAO,kBAAoB7B,EAAM,wDAAwD,CAC3F,EACA,GAAI,CACF,IAAIk6E,EAAMV,GAAe,EACzBU,EAAI,KAAK,MAAOl6E,EAAK,EAAI,EACzBk6E,EAAI,aAAe,OACnBA,EAAI,OAAS,UAAY,CACnB,KAAK,SAAW,IAClBz6E,EAAQ,KAAK,QAAQ,EAErBi8E,EAAgB,CAEpB,EACAxB,EAAI,QAAUwB,EACdxB,EAAI,KAAK,CACX,MAAa,CACXwB,EAAgB,CAClB,CACF,CAAC,CACH,EACIC,GAAe,SAAUC,EAAK,CAChC,IAAIv/E,EAAM+L,EACNyzE,EAAW,mBAAmBD,CAAG,EAAE,MAAM,GAAG,EAChD,OAAAxzE,EAAU,eAAe,KAAKyzE,EAAS,CAAC,CAAC,EACrCzzE,IACF/L,EAAO+L,EAAQ,CAAC,GAEX,CACL,KAAM/L,EACN,KAAMw/E,EAAS,CAAC,CAClB,CACF,EACIC,GAAgB,SAAUF,EAAK,CACjC,OAAO,IAAI34E,GAAW,SAAUxD,EAAS,CACvC,IAAI4U,EAAKrW,EAAKR,EACVq+E,EAAWF,GAAaC,CAAG,EAC/B,GAAI,CACFvnE,EAAMmnE,GAAO,KAAKK,EAAS,IAAI,CACjC,MAAY,CACVp8E,EAAQ,IAAIhG,EAAW,KAAK,CAAC,CAAC,CAAC,EAC/B,MACF,CAEA,IADAuE,EAAMo9E,GAAW/mE,EAAI,MAAM,EACtB7W,EAAI,EAAGA,EAAIQ,EAAI,OAAQR,IAC1BQ,EAAIR,CAAC,EAAI6W,EAAI,WAAW7W,CAAC,EAE3BiC,EAAQ,IAAIhG,EAAW,KAAK,CAACuE,CAAG,EAAG,CAAE,KAAM69E,EAAS,IAAK,CAAC,CAAC,CAC7D,CAAC,CACH,EACIE,GAAY,SAAU/7E,EAAK,CAC7B,OAAIA,EAAI,QAAQ,OAAO,IAAM,EACpBy7E,GAAcz7E,CAAG,EAEtBA,EAAI,QAAQ,OAAO,IAAM,EACpB87E,GAAc97E,CAAG,EAEnB,IACT,EACIg8E,GAAgB,SAAU97E,EAAM,CAClC,OAAO,IAAI+C,GAAW,SAAUxD,EAAS,CACvC,IAAIw8E,EAASd,GAAW,EACxBc,EAAO,UAAY,UAAY,CAC7Bx8E,EAAQw8E,EAAO,MAAM,CACvB,EACAA,EAAO,cAAc/7E,CAAI,CAC3B,CAAC,CACH,EACIg8E,GAAc,CAChB,UAAWH,GACX,cAAeC,GACf,aAAcL,EAChB,EAEI31E,GAAQ,EACRk3B,GAAW,SAAUvJ,EAAQ,CAC/B,OAAQA,GAAU,UAAY3tB,IAChC,EACIm2E,GAAkB,SAAUC,EAAWC,EAAK58E,EAASoC,EAAQ,CAC/D,IAAI05E,EAAQvB,EACZ,GAAIqC,EAAI,IAAI,QAAQ,OAAO,IAAM,EAAG,CAClCrC,EAAWoC,EAAU,SAASC,EAAI,GAAG,EACjCrC,EACFv6E,EAAQ,CACN,MAAO48E,EACP,SAAUrC,CACZ,CAAC,EAEDkC,GAAY,UAAUG,EAAI,GAAG,EAAE,KAAK,SAAUn8E,EAAM,CAClDg8E,GAAY,cAAch8E,CAAI,EAAE,KAAK,SAAUo8E,EAAS,CACtDf,EAASW,GAAY,aAAaI,CAAO,EAAE,KAC3CtC,EAAWoC,EAAU,OAAOl/C,GAAS,EAAGh9B,EAAMq7E,CAAM,EACpDa,EAAU,IAAIpC,CAAQ,EACtBv6E,EAAQ,CACN,MAAO48E,EACP,SAAUrC,CACZ,CAAC,CACH,CAAC,CACH,EAAG,SAAUl0D,EAAK,CAChBjkB,EAAOikB,CAAG,CACZ,CAAC,EAEH,MACF,CACAy1D,EAASW,GAAY,aAAaG,EAAI,GAAG,EAAE,KAC3CrC,EAAWoC,EAAU,UAAU,SAAUG,EAAgB,CACvD,OAAOA,EAAe,OAAO,IAAMhB,CACrC,CAAC,EACGvB,EACFv6E,EAAQ,CACN,MAAO48E,EACP,SAAUrC,CACZ,CAAC,EAEDkC,GAAY,UAAUG,EAAI,GAAG,EAAE,KAAK,SAAUn8E,EAAM,CAClD85E,EAAWoC,EAAU,OAAOl/C,GAAS,EAAGh9B,EAAMq7E,CAAM,EACpDa,EAAU,IAAIpC,CAAQ,EACtBv6E,EAAQ,CACN,MAAO48E,EACP,SAAUrC,CACZ,CAAC,CACH,EAAG,SAAUl0D,EAAK,CAChBjkB,EAAOikB,CAAG,CACZ,CAAC,CAEL,EACI02D,GAAe,SAAUvkE,EAAK,CAChC,OAAOA,EAAM7Y,GAAO6Y,EAAI,qBAAqB,KAAK,CAAC,EAAI,CAAC,CAC1D,EACA,SAASwkE,GAAc/C,EAAc0C,EAAW,CAC9C,IAAIM,EAAiB,CAAC,EAClB13C,EAAU,SAAU/sB,EAAKlE,EAAW,CACtC,IAAI4oE,EACC5oE,IACHA,EAAY/Z,EAAS,EAAI,GAE3B2iF,EAAS1+E,GAAOu+E,GAAavkE,CAAG,EAAG,SAAUokE,EAAK,CAChD,IAAIO,EAAMP,EAAI,IAUd,MATI,CAAC76E,GAAI,SAGL66E,EAAI,aAAa,gBAAgB,GAGjCA,EAAI,aAAa,sBAAsB,GAGvC,CAACO,GAAOA,IAAQp7E,GAAI,eACf,GAELo7E,EAAI,QAAQ,OAAO,IAAM,EACpB,CAAClD,EAAa,WAAWkD,CAAG,GAAK7oE,EAAUsoE,CAAG,EAEnDO,EAAI,QAAQ,OAAO,IAAM,EACpB7oE,EAAUsoE,CAAG,EAEf,EACT,CAAC,EACD,IAAIQ,EAAWn/E,GAAIi/E,EAAQ,SAAUN,EAAK,CACxC,GAAIK,EAAeL,EAAI,GAAG,EACxB,OAAO,IAAIp5E,GAAW,SAAUxD,EAAS,CACvCi9E,EAAeL,EAAI,GAAG,EAAE,KAAK,SAAUS,EAAW,CAChD,GAAI,OAAOA,GAAc,SACvB,OAAOA,EAETr9E,EAAQ,CACN,MAAO48E,EACP,SAAUS,EAAU,QACtB,CAAC,CACH,CAAC,CACH,CAAC,EAEH,IAAIC,EAAa,IAAI95E,GAAW,SAAUxD,EAASoC,EAAQ,CACzDs6E,GAAgBC,EAAWC,EAAK58E,EAASoC,CAAM,CACjD,CAAC,EAAE,KAAK,SAAUuM,EAAQ,CACxB,cAAOsuE,EAAetuE,EAAO,MAAM,GAAG,EAC/BA,CACT,CAAC,EAAE,MAAM,SAAUqa,EAAO,CACxB,cAAOi0D,EAAeL,EAAI,GAAG,EACtB5zD,CACT,CAAC,EACD,OAAAi0D,EAAeL,EAAI,GAAG,EAAIU,EACnBA,CACT,CAAC,EACD,OAAO95E,GAAW,IAAI45E,CAAQ,CAChC,EACA,MAAO,CAAE,QAAS73C,CAAQ,CAC5B,CAEA,IAAIg4C,GAAU,EACV5xE,GAAO,UAAY,CACrB,IAAI6xE,EAAM,UAAY,CACpB,OAAO,KAAK,MAAM,KAAK,OAAO,EAAI,UAAU,EAAE,SAAS,EAAE,CAC3D,EACIC,EAAM,IAAI,KAAK,EAAE,QAAQ,EAC7B,MAAO,IAAMA,EAAI,SAAS,EAAE,EAAID,EAAI,EAAIA,EAAI,EAAIA,EAAI,CACtD,EACIE,GAAO,SAAUxpD,EAAQ,CAC3B,OAAOA,EAASqpD,KAAY5xE,GAAK,CACnC,EACIgyE,GAAO,CAAE,KAAMD,EAAK,EAExB,SAASE,IAAa,CACpB,IAAItxE,EAAQ,CAAC,EACTuxE,EAAY,SAAUC,EAAM,CAC9B,IAAIC,EAAQ,CACV,aAAc,MACd,YAAa,MACb,YAAa,MACb,YAAa,KACf,EACA,OAAOA,EAAMD,EAAK,YAAY,CAAC,GAAK,KACtC,EACI3oE,EAAS,SAAU1Z,EAAGgF,EAAMq7E,EAAQkC,EAAU,CAChD,GAAInhF,EAASpB,CAAC,EAAG,CACf,IAAIG,EAAKH,EACT,OAAOwiF,EAAW,CAChB,GAAIriF,EACJ,KAAMoiF,EACN,KAAMv9E,EACN,OAAQq7E,CACV,CAAC,CACH,KAAO,IAAIh/E,EAASrB,CAAC,EACnB,OAAOwiF,EAAWxiF,CAAC,EAEnB,MAAM,IAAI,MAAM,oBAAoB,EAExC,EACIwiF,EAAa,SAAUxiF,EAAG,CAC5B,IAAIG,EAAIuE,EACR,GAAI,CAAC1E,EAAE,MAAQ,CAACA,EAAE,OAChB,MAAM,IAAI,MAAM,sFAAsF,EAExG,OAAAG,EAAKH,EAAE,IAAMkiF,GAAK,KAAK,QAAQ,EAC/Bx9E,EAAO1E,EAAE,MAAQG,EACV,CACL,GAAIrB,EAASqB,CAAE,EACf,KAAMrB,EAAS4F,CAAI,EACnB,SAAU5F,EAAS4F,EAAO,IAAM09E,EAAUpiF,EAAE,KAAK,IAAI,CAAC,EACtD,KAAMlB,EAASkB,EAAE,IAAI,EACrB,OAAQlB,EAASkB,EAAE,MAAM,EACzB,QAASlB,EAASkB,EAAE,SAAWmF,GAAI,gBAAgBnF,EAAE,IAAI,CAAC,EAC1D,IAAKlB,EAASkB,EAAE,GAAG,CACrB,CACF,EACIm2B,EAAM,SAAU2oD,EAAU,CACvB15D,EAAI05D,EAAS,GAAG,CAAC,GACpBjuE,EAAM,KAAKiuE,CAAQ,CAEvB,EACI15D,EAAM,SAAUjlB,EAAI,CACtB,OAAOsiF,EAAU,SAAUpB,EAAgB,CACzC,OAAOA,EAAe,GAAG,IAAMlhF,CACjC,CAAC,CACH,EACIsiF,EAAY,SAAU5pE,EAAW,CACnC,OAAO9V,GAAO8N,EAAOgI,CAAS,EAAE,CAAC,CACnC,EACI6pE,EAAW,SAAUnD,EAAS,CAChC,OAAOkD,EAAU,SAAU3D,EAAU,CACnC,OAAOA,EAAS,QAAQ,IAAMS,CAChC,CAAC,CACH,EACIoD,EAAc,SAAUpD,EAAS,CACnC1uE,EAAQ9N,GAAO8N,EAAO,SAAUiuE,EAAU,CACxC,OAAIA,EAAS,QAAQ,IAAMS,GACzBp6E,GAAI,gBAAgB25E,EAAS,QAAQ,CAAC,EAC/B,IAEF,EACT,CAAC,CACH,EACIn7C,EAAU,UAAY,CACxBlhC,GAAKoO,EAAO,SAAUwwE,EAAgB,CACpCl8E,GAAI,gBAAgBk8E,EAAe,QAAQ,CAAC,CAC9C,CAAC,EACDxwE,EAAQ,CAAC,CACX,EACA,MAAO,CACL,OAAQ6I,EACR,IAAKyc,EACL,IAAK/Q,EACL,SAAUs9D,EACV,UAAWD,EACX,YAAaE,EACb,QAASh/C,CACX,CACF,CAEA,SAASi/C,IAAgB,CACvB,IAAIC,EAAU,EAAGC,EAAW,EACxBC,EAAkB,CAAC,EACnBC,EAAe,SAAUC,EAAQC,EAAW,CAC9C,MAAO,CACL,OAAQD,EACR,UAAWC,CACb,CACF,EACIC,EAAa,SAAU5D,EAAS,CAClC,OAAOA,KAAWwD,CACpB,EACIK,EAAe,SAAU7D,EAAS,CACpC,IAAIrsE,EAAS6vE,EAAgBxD,CAAO,EACpC,OAAOrsE,EAASA,EAAO,UAAY,IACrC,EACImwE,EAAY,SAAU9D,EAAS,CACjC,OAAO4D,EAAW5D,CAAO,EAAIwD,EAAgBxD,CAAO,EAAE,SAAWsD,EAAU,EAC7E,EACIS,EAAa,SAAU/D,EAAS,CAClC,OAAO4D,EAAW5D,CAAO,EAAIwD,EAAgBxD,CAAO,EAAE,SAAWuD,EAAW,EAC9E,EACIS,EAAc,SAAUhE,EAAS,CACnCwD,EAAgBxD,CAAO,EAAIyD,EAAaH,EAAS,IAAI,CACvD,EACIW,EAAe,SAAUjE,EAAS2D,EAAW,CAC/CH,EAAgBxD,CAAO,EAAIyD,EAAaF,EAAUI,CAAS,CAC7D,EACIO,EAAe,SAAUlE,EAAS,CACpC,OAAOwD,EAAgBxD,CAAO,CAChC,EACI57C,EAAU,UAAY,CACxBo/C,EAAkB,CAAC,CACrB,EACA,MAAO,CACL,WAAYI,EACZ,aAAcC,EACd,UAAWC,EACX,WAAYC,EACZ,YAAaC,EACb,aAAcC,EACd,aAAcC,EACd,QAAS9/C,CACX,CACF,CAEA,SAAS+/C,GAAc16E,EAAQ,CAC7B,IAAIk4E,EAAYiB,GAAU,EACtBwB,EAAUC,EACVpF,EAAeoE,GAAa,EAC5BiB,EAAa,CAAC,EACdC,EAAa,SAAU57E,GAAU,CACnC,OAAO,SAAUgL,GAAQ,CACvB,OAAIlK,EAAO,UACFd,GAASgL,EAAM,EAEjB,CAAC,CACV,CACF,EACI6wE,EAAmB,UAAY,CACjC,MAAO,IAAM,IAAI,KAAK,EAAE,QAAQ,CAClC,EACIC,EAAgB,SAAU7mE,GAASm7D,GAAQh2C,GAAS,CACtD,IAAIjqB,GAAQ,EACZ,GACEA,GAAQ8E,GAAQ,QAAQm7D,GAAQjgE,EAAK,EACjCA,KAAU,KACZ8E,GAAUA,GAAQ,UAAU,EAAG9E,EAAK,EAAIiqB,GAAUnlB,GAAQ,OAAO9E,GAAQigE,GAAO,MAAM,EACtFjgE,IAASiqB,GAAQ,OAASg2C,GAAO,OAAS,SAErCjgE,KAAU,IACnB,OAAO8E,EACT,EACI8mE,EAAkB,SAAU9mE,GAASqgE,GAAW0G,GAAgB,CAClE,OAAA/mE,GAAU6mE,EAAc7mE,GAAS,QAAUqgE,GAAY,IAAK,QAAU0G,GAAiB,GAAG,EAC1F/mE,GAAU6mE,EAAc7mE,GAAS,iBAAmBqgE,GAAY,IAAK,iBAAmB0G,GAAiB,GAAG,EACrG/mE,EACT,EACIgnE,EAAwB,SAAU3G,GAAW0G,GAAgB,CAC/DzhF,GAAKuG,EAAO,YAAY,KAAM,SAAUo7E,GAAO,CACzCA,GAAM,OAAS,aACjBA,GAAM,UAAY5hF,GAAI4hF,GAAM,UAAW,SAAU13C,GAAU,CACzD,OAAOu3C,EAAgBv3C,GAAU8wC,GAAW0G,EAAc,CAC5D,CAAC,EAEDE,GAAM,QAAUH,EAAgBG,GAAM,QAAS5G,GAAW0G,EAAc,CAE5E,CAAC,CACH,EACIzE,EAAmB,UAAY,CACjC,OAAOz2E,EAAO,oBAAoB,KAAK,CACrC,KAAMA,EAAO,UAAU,oBAAoB,EAC3C,KAAM,OACN,QAAS,GACT,YAAa,EACf,CAAC,CACH,EACIq7E,EAAkB,SAAUC,GAAOpB,GAAW,CAChDhC,EAAU,YAAYoD,GAAM,GAAG,EAC/BH,EAAsBG,GAAM,IAAKpB,EAAS,EAC1Cl6E,EAAO,EAAEs7E,EAAK,EAAE,KAAK,CACnB,IAAO72B,GAAS,oBAAoBzkD,CAAM,EAAIk6E,GAAYa,EAAiB,EAAIb,GAC/E,eAAgBl6E,EAAO,WAAWk6E,GAAW,KAAK,CACpD,CAAC,CACH,EACIqB,EAAe,SAAUr8E,GAAU,CACrC,OAAKy7E,IACHA,EAAWpF,GAASC,EAAc,CAChC,IAAK/wB,GAAS,kBAAkBzkD,CAAM,EACtC,SAAUykD,GAAS,uBAAuBzkD,CAAM,EAChD,YAAaykD,GAAS,2BAA2BzkD,CAAM,EACvD,QAASykD,GAAS,uBAAuBzkD,CAAM,CACjD,CAAC,GAEIw7E,GAAc,EAAE,KAAKV,EAAW,SAAUW,GAAY,CAC3D,IAAI1E,GACJ,OAAAA,GAAYv9E,GAAIiiF,GAAY,SAAU7C,GAAW,CAC/C,OAAOA,GAAU,QACnB,CAAC,EACM+B,EAAS,OAAO5D,GAAWN,CAAgB,EAAE,KAAKqE,EAAW,SAAU5wE,GAAQ,CACpF,IAAIwxE,GAAiBliF,GAAI0Q,GAAQ,SAAUyxE,GAAYtsE,GAAO,CAC5D,IAAIisE,GAAQG,GAAWpsE,EAAK,EAAE,MAC9B,OAAIssE,GAAW,QAAUl3B,GAAS,sBAAsBzkD,CAAM,EAC5Dq7E,EAAgBC,GAAOK,GAAW,GAAG,EAC5BA,GAAW,OACpBxG,GAAc,YAAYn1E,EAAQ27E,GAAW,KAAK,EAE7C,CACL,QAASL,GACT,OAAQK,GAAW,MACrB,CACF,CAAC,EACD,OAAIz8E,IACFA,GAASw8E,EAAc,EAElBA,EACT,CAAC,CAAC,CACJ,CAAC,CAAC,CACJ,EACIE,EAAmB,SAAU18E,GAAU,CACzC,GAAIulD,GAAS,0BAA0BzkD,CAAM,EAC3C,OAAOu7E,EAAar8E,EAAQ,CAEhC,EACI28E,GAAsB,SAAUC,GAAQ,CAC1C,GAAIvhF,GAAOsgF,EAAY,SAAU9gF,GAAQ,CACrC,OAAOA,GAAO+hF,EAAM,CACtB,CAAC,IAAM,GACP,MAAO,GAET,GAAIA,GAAO,aAAa,KAAK,EAAE,QAAQ,OAAO,IAAM,EAAG,CACrD,IAAIC,GAAgBt3B,GAAS,uBAAuBzkD,CAAM,EAC1D,OAAO+7E,GAAcD,EAAM,CAC7B,CACA,MAAO,EACT,EACIE,GAAY,SAAUjiF,GAAQ,CAChC8gF,EAAW,KAAK9gF,EAAM,CACxB,EACIyhF,GAAgB,UAAY,CAC9B,OAAKZ,IACHA,EAAerC,GAAa/C,EAAc0C,CAAS,GAE9C0C,EAAa,QAAQ56E,EAAO,QAAQ,EAAG67E,EAAmB,EAAE,KAAKf,EAAW,SAAU5wE,GAAQ,CACnG,OAAAA,GAASnQ,GAAOmQ,GAAQ,SAAU+xE,GAAY,CAC5C,OAAI,OAAOA,IAAe,UACxB9G,GAAc,aAAan1E,EAAQi8E,EAAU,EACtC,IAEF,EACT,CAAC,EACDxiF,GAAKyQ,GAAQ,SAAU+xE,GAAY,CACjCd,EAAsBc,GAAW,MAAM,IAAKA,GAAW,SAAS,QAAQ,CAAC,EACzEA,GAAW,MAAM,IAAMA,GAAW,SAAS,QAAQ,EACnDA,GAAW,MAAM,gBAAgB,cAAc,CACjD,CAAC,EACM/xE,EACT,CAAC,CAAC,CACJ,EACIywB,GAAU,UAAY,CACxBu9C,EAAU,QAAQ,EAClB1C,EAAa,QAAQ,EACrBoF,EAAeD,EAAW,IAC5B,EACIuB,GAAkB,SAAU/nE,GAAS,CACvC,OAAOA,GAAQ,QAAQ,sBAAuB,SAAUhN,GAAOovE,GAAS,CACtE,IAAI2D,GAAY1E,EAAa,aAAae,EAAO,EACjD,GAAI2D,GACF,MAAO,QAAUA,GAAY,IAE/B,IAAIpE,GAAWoC,EAAU,SAAS3B,EAAO,EAMzC,GALKT,KACHA,GAAW57E,GAAM8F,EAAO,cAAc,IAAI,EAAG,SAAUkK,GAAQlK,GAAQ,CACrE,OAAOkK,IAAUlK,GAAO,cAAgBA,GAAO,aAAa,UAAU,SAASu2E,EAAO,CACxF,EAAG,IAAI,GAELT,GAAU,CACZ,IAAI95E,GAAO85E,GAAS,KAAK,EACzB,MAAO,aAAe95E,GAAK,KAAO,WAAa85E,GAAS,OAAO,EAAI,GACrE,CACA,OAAO3uE,EACT,CAAC,CACH,EACA,OAAAnH,EAAO,GAAG,aAAc,UAAY,CAC9BykD,GAAS,0BAA0BzkD,CAAM,EAC3C47E,EAAiB,EAEjBJ,GAAc,CAElB,CAAC,EACDx7E,EAAO,GAAG,iBAAkB,SAAU/B,GAAG,CACvCA,GAAE,QAAUi+E,GAAgBj+E,GAAE,OAAO,CACvC,CAAC,EACD+B,EAAO,GAAG,aAAc,SAAU/B,GAAG,CAC/BA,GAAE,aAAeA,GAAE,SAAW,QAGlCA,GAAE,QAAUi+E,GAAgBj+E,GAAE,OAAO,EACvC,CAAC,EACD+B,EAAO,GAAG,aAAc,UAAY,CAClCA,EAAO,OAAO,cAAc,MAAO,SAAUy4E,GAAQ,CACnDh/E,GAAKg/E,GAAQ,SAAUN,GAAK,CAC1B,IAAIO,GAAMP,GAAI,KAAK,KAAK,EACxB,GAAI,CAAAD,EAAU,SAASQ,EAAG,EAG1B,KAAIwB,GAAY1E,EAAa,aAAakD,EAAG,EACzCwB,IACF/B,GAAI,KAAK,MAAO+B,EAAS,EAE7B,CAAC,CACH,CAAC,CACH,CAAC,EACM,CACL,UAAWhC,EACX,UAAW8D,GACX,aAAcT,EACd,iBAAkBK,EAClB,cAAeJ,GACf,QAAS7gD,EACX,CACF,CAEA,IAAIwhD,GAAiB,SAAU9/B,EAAe5zC,EAAM,CAClD,OAAO4zC,EAAc,eAAe5zC,EAAK,QAAQ,CACnD,EACI2zE,GAAgB,SAAU//B,EAAe5zC,EAAM,CACjD,OAAIuhB,GAAS,OAAOvhB,CAAI,EACf,GACEuhB,GAAS,UAAUvhB,CAAI,EACzB,CAAC0zE,GAAe9/B,EAAe5zC,CAAI,GAAK,CAACyuC,GAAU,eAAezuC,CAAI,EAEtE,EAEX,EACI4zE,GAAiB,SAAUhgC,EAAe1rC,EAAMlI,EAAM,CACxD,OAAOrP,GAAOovD,GAAQ,QAAQtuC,GAAQ,QAAQzR,CAAI,EAAGyR,GAAQ,QAAQvJ,CAAI,CAAC,EAAG,SAAUoD,EAAK,CAC1F,OAAOooE,GAAe9/B,EAAetoC,EAAI,IAAI,CAAC,CAChD,CAAC,CACH,EACIuoE,GAAuB,SAAUjgC,EAAe5zC,EAAM,CACxD,GAAIuhB,GAAS,OAAOvhB,CAAI,EAAG,CACzB,GAAIA,EAAK,UAAU,SAAW,EAC5B,MAAO,GACF,GAAI,QAAQ,KAAKA,EAAK,SAAS,IAAM,CAACA,EAAK,aAAe0zE,GAAe9/B,EAAe5zC,EAAK,WAAW,GAC7G,MAAO,EAEX,CACA,MAAO,EACT,EACI8zE,GAAgB,SAAUv8E,EAAQ,CACpC,IAAI8kB,EAAW9kB,EAAO,SAAU8b,EAAM9b,EAAO,IAAKktC,EAAYltC,EAAO,UACjE4sB,EAAS5sB,EAAO,OAAQq8C,EAAgBzvB,EAAO,iBAAiB,EAChEnkB,EAAOykC,EAAU,SAAS,EAC1BtmB,EAAW5mB,EAAO,QAAQ,EAC1BugC,EACAsH,EAAgBC,EAAa2Q,EAAcC,EAAW8jC,EACtDC,EAAUC,GAASzT,GACnB0T,GAAcC,GAElB,GADAA,GAAkB93D,EAAS,kBACvB,GAACrc,GAAQ,CAACuhB,GAAS,UAAUvhB,CAAI,GAAK,CAACm0E,MAG3CD,GAAe/1D,EAAS,SAAS,YAAY,EACzC,GAACgG,EAAO,aAAa+vD,GAAcC,GAAgB,YAAY,CAAC,GAAKP,GAAehgC,EAAez1B,EAAUne,CAAI,IAUrH,KAPA83B,EAAM2M,EAAU,OAAO,EACvBrF,EAAiBtH,EAAI,eACrBuH,EAAcvH,EAAI,YAClBkY,EAAelY,EAAI,aACnBmY,EAAYnY,EAAI,UAChB0oC,GAAmBsH,GAAY,SAASvwE,CAAM,EAC9CyI,EAAOme,EAAS,WACTne,GACL,GAAI2zE,GAAc//B,EAAe5zC,CAAI,EAAG,CACtC,GAAI6zE,GAAqBjgC,EAAe5zC,CAAI,EAAG,CAC7Cg0E,EAAWh0E,EACXA,EAAOA,EAAK,YACZqT,EAAI,OAAO2gE,CAAQ,EACnB,QACF,CACKD,IACHA,EAAgB1gE,EAAI,OAAO8gE,GAAiB58E,EAAO,SAAS,uBAAuB,EACnFyI,EAAK,WAAW,aAAa+zE,EAAe/zE,CAAI,EAChDi0E,GAAU,IAEZD,EAAWh0E,EACXA,EAAOA,EAAK,YACZ+zE,EAAc,YAAYC,CAAQ,CACpC,MACED,EAAgB,KAChB/zE,EAAOA,EAAK,YAGZi0E,IAAWzT,KACb1oC,EAAI,SAASsH,EAAgBC,CAAW,EACxCvH,EAAI,OAAOkY,EAAcC,CAAS,EAClCxL,EAAU,OAAO3M,CAAG,EACpBvgC,EAAO,YAAY,GAEvB,EACI68E,GAAU,SAAU78E,EAAQ,CAC1BA,EAAO,SAAS,mBAClBA,EAAO,GAAG,aAAc9J,EAAMqmF,GAAev8E,CAAM,CAAC,CAExD,EACI88E,GAAc,CAAE,MAAOD,EAAQ,EAE/BE,GAAe,SAAUx8C,EAAK,CAChC,IAAIsJ,EAAKtJ,EAAI,eAAgBwJ,EAAKxJ,EAAI,YACtC,OAAIvW,GAAS,OAAO6f,CAAE,EACbE,IAAO,EAAI/xC,EAAO,KAAKkiB,GAAQ,QAAQ2vB,CAAE,CAAC,EAAI7xC,EAAO,KAAK,EAE1DA,EAAO,KAAK6xC,EAAG,WAAWE,CAAE,CAAC,EAAE,IAAI7vB,GAAQ,OAAO,CAE7D,EACI8iE,GAAa,SAAUz8C,EAAK,CAC9B,IAAIuJ,EAAKvJ,EAAI,aAAcyJ,EAAKzJ,EAAI,UACpC,OAAIvW,GAAS,OAAO8f,CAAE,EACbE,IAAOF,EAAG,KAAK,OAAS9xC,EAAO,KAAKkiB,GAAQ,QAAQ4vB,CAAE,CAAC,EAAI9xC,EAAO,KAAK,EAEvEA,EAAO,KAAK8xC,EAAG,WAAWE,EAAK,CAAC,CAAC,EAAE,IAAI9vB,GAAQ,OAAO,CAEjE,EACI+iE,GAAmB,SAAUx0E,EAAM,CACrC,OAAO2W,GAAW3W,CAAI,EAAE,KAAK3S,EAAS,CAAC2S,CAAI,CAAC,EAAG,SAAUyW,EAAO,CAC9D,MAAO,CAACzW,CAAI,EAAE,OAAOw0E,GAAiB/9D,CAAK,CAAC,CAC9C,CAAC,CACH,EACIg+D,GAAoB,SAAUz0E,EAAM,CACtC,OAAO4W,GAAU5W,CAAI,EAAE,KAAK3S,EAAS,CAAC2S,CAAI,CAAC,EAAG,SAAUyW,EAAO,CAC7D,OAAIxjB,GAAKwjB,CAAK,IAAM,KACXJ,GAAYI,CAAK,EAAE,IAAI,SAAUpK,EAAS,CAC/C,MAAO,CAACrM,CAAI,EAAE,OAAOy0E,GAAkBpoE,CAAO,CAAC,CACjD,CAAC,EAAE,MAAM,CAAC,CAAC,EAEJ,CAACrM,CAAI,EAAE,OAAOy0E,GAAkBh+D,CAAK,CAAC,CAEjD,CAAC,CACH,EACIi+D,GAAyB,SAAUppE,EAAKwsB,EAAK,CAC/C,OAAO4H,GAAM40C,GAAax8C,CAAG,EAAGy8C,GAAWz8C,CAAG,EAAG,SAAU5Z,EAAWszB,EAAS,CAC7E,IAAItvC,EAAQxQ,GAAK8iF,GAAiBlpE,CAAG,EAAG7d,EAAMa,GAAI4vB,CAAS,CAAC,EACxDsrC,EAAM93D,GAAK+iF,GAAkBnpE,CAAG,EAAG7d,EAAMa,GAAIkjD,CAAO,CAAC,EACzD,OAAOtvC,EAAM,OAAO,GAAKsnD,EAAI,OAAO,CACtC,CAAC,EAAE,MAAM,EAAK,CAChB,EACImrB,GAAiB,SAAUthE,EAAKykB,EAAK93B,EAAMkC,EAAO,CACpD,IAAIgG,EAAOlI,EAAMsxB,EAAS,IAAIrT,GAAWje,EAAMkI,CAAI,EAC/C2d,EAAsBxS,EAAI,OAAO,oBAAoB,EACzD,EAAG,CACD,GAAIrT,EAAK,WAAa,GAAKkJ,GAAM,KAAKlJ,EAAK,SAAS,EAAE,SAAW,EAAG,CAC9DkC,EACF41B,EAAI,SAAS93B,EAAM,CAAC,EAEpB83B,EAAI,OAAO93B,EAAMA,EAAK,UAAU,MAAM,EAExC,MACF,CACA,GAAI6lB,EAAoB7lB,EAAK,QAAQ,GAAK,CAAC,YAAY,KAAKA,EAAK,QAAQ,EAAG,CACtEkC,EACF41B,EAAI,eAAe93B,CAAI,EAEnBA,EAAK,WAAa,KACpB83B,EAAI,aAAa93B,CAAI,EAErB83B,EAAI,YAAY93B,CAAI,EAGxB,MACF,CACA,GAAInL,GAAI,IAAMA,GAAI,GAAK,IAAMwe,EAAI,QAAQrT,CAAI,GAAKqT,EAAI,QAAQrT,CAAI,EAAG,CAC/DkC,EACF41B,EAAI,SAAS93B,EAAM,CAAC,EAEpB83B,EAAI,OAAO93B,EAAM,CAAC,EAEpB,MACF,CACF,OAASA,EAAOkC,EAAQovB,EAAO,KAAK,EAAIA,EAAO,KAAK,GAChDppB,EAAK,WAAa,SAChBhG,EACF41B,EAAI,SAAS5vB,EAAM,CAAC,EAEpB4vB,EAAI,OAAO5vB,EAAMA,EAAK,WAAW,MAAM,EAG7C,EACI0sE,GAAe,SAAUr9E,EAAQ,CACnC,IAAIs9E,EAAMt9E,EAAO,UAAU,OAAO,EAClC,OAAOs9E,GAAOA,EAAI,WAAa,CACjC,EAEA,SAASC,GAAYv9E,EAAQ,CAC3B,IAAIw9E,EAASC,EAAW,CAAC,EACrBC,EAAoB,SAAUnlB,EAAU,CAC1C,IAAIj/D,EAAGqkF,EAEP,GADAA,EAAc39E,EAAO,EAAEu4D,CAAQ,EAAE,aAAav4D,EAAO,QAAQ,CAAC,EAAE,IAAIu4D,CAAQ,EACxEolB,EAAY,SAAWF,EAAS,OAAQ,CAC1C,IAAKnkF,EAAIqkF,EAAY,OAAQrkF,GAAK,GAC5BqkF,EAAYrkF,CAAC,IAAMmkF,EAASnkF,CAAC,EADEA,IACnC,CAIF,GAAIA,IAAM,GACR,OAAAmkF,EAAWE,EACJ,EAEX,CACA,OAAAF,EAAWE,EACJ,EACT,EACM,sBAAuB39E,EAAO,OAAO,GACzCA,EAAO,GAAG,uCAAwC,SAAU/B,EAAG,CAC7D,IAAI2/E,EAAWC,EACfD,EAAY59E,EAAO,UAAU,OAAO,EACpC69E,EAAU,CACR,eAAgBD,EAAU,eAC1B,YAAaA,EAAU,YACvB,aAAcA,EAAU,aACxB,UAAWA,EAAU,SACvB,GACI3/E,EAAE,OAAS,cAAgB,CAAC2jE,GAAa,KAAKic,EAASL,CAAO,IAChEx9E,EAAO,KAAK,iBAAiB,EAE/Bw9E,EAAUK,CACZ,CAAC,EAEH79E,EAAO,GAAG,cAAe,UAAY,CACnCA,EAAO,KAAK,iBAAiB,CAC/B,CAAC,EACDA,EAAO,GAAG,kBAAmB,UAAY,CACvC,IAAIu4D,EAAWv4D,EAAO,UAAU,SAAS,EAAI,EACzC,CAACu4D,GAAY,CAACj7D,GAAI,OAAS0C,EAAO,UAAU,YAAY,GAGxDq9E,GAAar9E,CAAM,GAAK,CAAC09E,EAAkBnlB,CAAQ,GAAKv4D,EAAO,IAAI,UAAUu4D,EAAUv4D,EAAO,QAAQ,CAAC,GACzGA,EAAO,YAAY,CAAE,gBAAiB,EAAK,CAAC,CAEhD,CAAC,EACDA,EAAO,GAAG,UAAW,SAAU/B,EAAG,CAC5B,CAACA,EAAE,mBAAmB,GAAKo/E,GAAar9E,CAAM,IAC5CA,EAAO,UAAU,QAAQ,EAAE,WAAa,MAC1CD,GAAM,iBAAiBC,EAAQ,UAAY,CACzCA,EAAO,YAAY,CACrB,CAAC,EAEDA,EAAO,YAAY,EAGzB,CAAC,EACD,KAAK,YAAc,SAAUpK,EAAM,CACjC,IAAIs3C,EAAYltC,EAAO,UACnByI,EAAMiW,EAAS/N,EACf3Q,EAAO,aAAektC,GAAa,CAACltC,EAAO,SAAS,oBAAsB,CAACA,EAAO,WACpF2Q,EAAO3Q,EAAO,QAAQ,EACtByI,EAAOykC,EAAU,SAAS,EAAI,GAAKv8B,GAC/BlI,EAAK,gBAAkBzI,EAAO,OAAO,GAAK,CAACA,EAAO,IAAI,UAAUyI,EAAMkI,CAAI,KAC5ElI,EAAOkI,GAET+N,EAAU,CAAC,EACX1e,EAAO,IAAI,UAAUyI,EAAM,SAAUA,EAAM,CACzC,GAAIA,IAASkI,EACX,MAAO,GAET+N,EAAQ,KAAKjW,CAAI,CACnB,CAAC,EACD7S,EAAOA,GAAQ,CAAC,EAChBA,EAAK,QAAU6S,EACf7S,EAAK,QAAU8oB,EACf1e,EAAO,KAAK,aAAcpK,CAAI,EAElC,CACF,CAEA,IAAIkoF,GAAK,CACP,UAAW,EACX,OAAQ,GACR,KAAM,GACN,MAAO,GACP,KAAM,GACN,MAAO,GACP,SAAU,GACV,IAAK,EACL,GAAI,GACJ,IAAK,GACL,KAAM,GACN,gBAAiB,SAAU,EAAG,CAC5B,OAAO,EAAE,UAAY,EAAE,SAAW,EAAE,QAAU,KAAK,eAAe,CAAC,CACrE,EACA,eAAgB,SAAU,EAAG,CAC3B,OAAOxgF,GAAI,IAAM,EAAE,QAAU,EAAE,SAAW,CAAC,EAAE,MAC/C,CACF,EAEIygF,GAAqB,SAAUt1E,EAAM,CACvC,IAAIu1E,EAAkB,SAAU5zC,EAAa,CAC3C,OAAO5wC,GAAI4wC,EAAa,SAAUT,EAAY,CAC5C,OAAAA,EAAalD,GAAQkD,CAAU,EAC/BA,EAAW,KAAOlhC,EACXkhC,CACT,CAAC,CACH,EACA,GAAI3f,GAAS,UAAUvhB,CAAI,EACzB,OAAOu1E,EAAgBv1E,EAAK,eAAe,CAAC,EAE9C,GAAIuhB,GAAS,OAAOvhB,CAAI,EAAG,CACzB,IAAI83B,EAAM93B,EAAK,cAAc,YAAY,EACzC,OAAA83B,EAAI,SAAS93B,EAAM,CAAC,EACpB83B,EAAI,OAAO93B,EAAMA,EAAK,KAAK,MAAM,EAC1Bu1E,EAAgBz9C,EAAI,eAAe,CAAC,CAC7C,CACF,EACIyK,GAAiB,SAAUviC,EAAM,CACnC,OAAOvO,GAAMuO,EAAM,SAAUyB,EAAQzB,EAAM,CACzC,OAAOyB,EAAO,OAAO6zE,GAAmBt1E,CAAI,CAAC,CAC/C,EAAG,CAAC,CAAC,CACP,EAEIw1E,IACH,SAAUA,EAAY,CACrBA,EAAWA,EAAW,GAAQ,EAAE,EAAI,KACpCA,EAAWA,EAAW,KAAU,CAAC,EAAI,MACvC,GAAEA,KAAeA,GAAa,CAAC,EAAE,EACjC,IAAIC,GAAY,SAAU9sC,EAAWzgC,EAAM6gC,EAAa/oC,EAAM,CAC5D,KAAOA,EAAO8oC,GAAS9oC,EAAM2oC,EAAW7K,GAA0B51B,CAAI,GACpE,GAAI6gC,EAAY/oC,CAAI,EAClB,MAGN,EACI01E,GAAY,SAAU/sC,EAAWgtC,EAAWC,EAAY1tE,EAAM6gC,EAAahH,EAAe,CAC5F,IAAI8zC,EAAO,EAAG71E,EACVyB,EAAS,CAAC,EACVq0E,EACApxD,EAAM,SAAU1kB,EAAM,CACxB,IAAInP,EAAGqwC,EAAYS,EAKnB,IAJAA,EAAcY,GAAe,CAACviC,CAAI,CAAC,EAC/B2oC,IAAc,KAChBhH,EAAcA,EAAY,QAAQ,GAE/B9wC,EAAI,EAAGA,EAAI8wC,EAAY,OAAQ9wC,IAElC,GADAqwC,EAAaS,EAAY9wC,CAAC,EACtB,CAAA+kF,EAAW10C,EAAY40C,CAAgB,EAO3C,IAJIr0E,EAAO,OAAS,GAAKk0E,EAAUz0C,EAAY35B,GAAS,KAAK9F,CAAM,CAAC,GAClEo0E,IAEF30C,EAAW,KAAO20C,EACd9sC,EAAY7H,CAAU,EACxB,MAAO,GAETz/B,EAAO,KAAKy/B,CAAU,EAE1B,EAEA,OADA40C,EAAmBvuE,GAAS,KAAKw6B,EAAc,eAAe,CAAC,EAC1D+zC,IAGL91E,EAAO+hC,EAAc,QAAQ,EAC7Brd,EAAI1kB,CAAI,EACRy1E,GAAU9sC,EAAWzgC,EAAMwc,EAAK1kB,CAAI,GAC7ByB,CACT,EACIs0E,GAAkB,SAAUC,EAAY90C,EAAY,CACtD,OAAOA,EAAW,KAAO80C,CAC3B,EACIC,GAAe,SAAUD,EAAY90C,EAAY,CACnD,OAAOA,EAAW,OAAS80C,CAC7B,EACIE,GAAUzoF,EAAMioF,GAAWF,GAAW,GAAI/2C,GAASE,EAAO,EAC1Dw3C,GAAY1oF,EAAMioF,GAAWF,GAAW,KAAM72C,GAASF,EAAO,EAC9D23C,GAAiB,SAAUztC,EAAWzgC,EAAM6gC,EAAa/oC,EAAM,CACjE,IAAIi1C,EAActJ,GAAYzjC,CAAI,EAC9BqiC,EAAQ8rC,EAAWV,EAAW5zC,EAC9BtgC,EAAS,CAAC,EACVo0E,EAAO,EAAG30C,EAAY40C,EACtBQ,EAAgB,SAAUv0C,EAAe,CAC3C,OACSx6B,GAAS,KAAKw6B,EAAc,eAAe,CAAC,CAGvD,EACI4G,IAAc,GAChB4B,EAAS0K,EAAY,KACrBohC,EAAY13C,GACZg3C,EAAYl3C,GACZsD,EAAgBY,GAAgB,MAAM3iC,CAAI,IAE1CuqC,EAAS0K,EAAY,KACrBohC,EAAY53C,GACZk3C,EAAYh3C,GACZoD,EAAgBY,GAAgB,OAAO3iC,CAAI,GAE7C81E,EAAmBQ,EAAcv0C,CAAa,EAC9C,EACE,IAAKA,EAAc,UAAU,IAG7Bb,EAAao1C,EAAcv0C,CAAa,EACpC,CAAA4zC,EAAUz0C,EAAY40C,CAAgB,GAS1C,IANIr0E,EAAO,OAAS,GAAK40E,EAAUn1C,EAAY35B,GAAS,KAAK9F,CAAM,CAAC,GAClEo0E,IAEF30C,EAAalD,GAAQkD,CAAU,EAC/BA,EAAW,SAAWa,EACtBb,EAAW,KAAO20C,EACd9sC,EAAY7H,CAAU,EACxB,OAAOz/B,EAETA,EAAO,KAAKy/B,CAAU,QACfa,EAAgBwI,EAAOxI,CAAa,GAC7C,OAAOtgC,CACT,EACI80E,GAAc,SAAUP,EAAY,CACtC,OAAO,SAAU90C,EAAY,CAC3B,OAAO60C,GAAgBC,EAAY90C,CAAU,CAC/C,CACF,EACIs1C,GAAS,SAAUR,EAAY,CACjC,OAAO,SAAU90C,EAAY,CAC3B,OAAO+0C,GAAaD,EAAY90C,CAAU,CAC5C,CACF,EAEIu1C,GAA2Bl1D,GAAS,uBACpCm1D,GAAa5tC,GACb6tC,GAAqB,SAAUz1C,EAAYrC,EAAS,CACtD,OAAO,KAAK,IAAIqC,EAAW,KAAOrC,CAAO,CAC3C,EACI+3C,GAAsB,SAAU11C,EAAYrC,EAAS,CACvD,OAAO,KAAK,IAAIqC,EAAW,MAAQrC,CAAO,CAC5C,EACIg4C,GAAW,SAAUh4C,EAASqC,EAAY,CAC5C,OAAOrC,GAAWqC,EAAW,MAAQrC,GAAWqC,EAAW,KAC7D,EACI41C,GAAwB,SAAUn1C,EAAa9C,EAAS,CAC1D,OAAOt3B,GAAS,OAAOo6B,EAAa,SAAUo1C,EAAe71C,EAAY,CACvE,IAAI81C,EAAaC,EAGjB,OAFAD,EAAc,KAAK,IAAIL,GAAmBI,EAAel4C,CAAO,EAAG+3C,GAAoBG,EAAel4C,CAAO,CAAC,EAC9Go4C,EAAc,KAAK,IAAIN,GAAmBz1C,EAAYrC,CAAO,EAAG+3C,GAAoB11C,EAAYrC,CAAO,CAAC,EACpGg4C,GAASh4C,EAASqC,CAAU,EACvBA,EAEL21C,GAASh4C,EAASk4C,CAAa,EAC1BA,EAELE,IAAgBD,GAAeP,GAAyBv1C,EAAW,IAAI,GAGvE+1C,EAAcD,EACT91C,EAEF61C,CACT,CAAC,CACH,EACIG,GAAc,SAAUvuC,EAAWzgC,EAAM6gC,EAAa/oC,EAAM,CAC9D,KAAOA,EAAO02E,GAAW12E,EAAM2oC,EAAW7K,GAA0B51B,CAAI,GACtE,GAAI6gC,EAAY/oC,CAAI,EAClB,MAGN,EACIm3E,GAAoB,SAAUjvE,EAAMkvE,EAAgB,CACtD,IAAIz1C,EAAc,CAAC,EACfhT,EAAU,SAAU0oD,EAAYr3E,EAAM,CACxC,IAAIs3E,EACJ,OAAAA,EAAYhmF,GAAOixC,GAAe,CAACviC,CAAI,CAAC,EAAG,SAAUkhC,EAAY,CAC/D,MAAO,CAACm2C,EAAWn2C,EAAYk2C,CAAc,CAC/C,CAAC,EACDz1C,EAAcA,EAAY,OAAO21C,CAAS,EACnCA,EAAU,SAAW,CAC9B,EACA,OAAA31C,EAAY,KAAKy1C,CAAc,EAC/BF,GAAY1B,GAAW,GAAIttE,EAAMza,EAAMkhC,EAAS8P,EAAO,EAAG24C,EAAe,IAAI,EAC7EF,GAAY1B,GAAW,KAAMttE,EAAMza,EAAMkhC,EAASgQ,EAAO,EAAGy4C,EAAe,IAAI,EACxEz1C,CACT,EACI41C,GAAsB,SAAUrvE,EAAM,CACxC,OAAO5W,GAAOmB,GAAOyV,EAAK,qBAAqB,GAAG,CAAC,EAAGigC,EAAiB,CACzE,EACIqvC,GAAY,SAAUt2C,EAAYrC,EAAS,CAC7C,MAAO,CACL,KAAMqC,EAAW,KACjB,OAAQy1C,GAAmBz1C,EAAYrC,CAAO,EAAI+3C,GAAoB11C,EAAYrC,CAAO,CAC3F,CACF,EACI44C,GAAe,SAAUvvE,EAAM22B,EAASC,EAAS,CACnD,IAAI44C,EACAC,EAAgCp1C,GAAeg1C,GAAoBrvE,CAAI,CAAC,EACxE0vE,EAAkBtmF,GAAOqmF,EAA+B,SAAU15C,EAAM,CAC1E,OAAOa,GAAWb,EAAK,KAAOa,GAAWb,EAAK,MAChD,CAAC,EAED,OADAy5C,EAAkBZ,GAAsBc,EAAiB/4C,CAAO,EAC5D64C,IACFA,EAAkBZ,GAAsBK,GAAkBjvE,EAAMwvE,CAAe,EAAG74C,CAAO,EACrF64C,GAAmBvvC,GAAkBuvC,EAAgB,IAAI,GACpDF,GAAUE,EAAiB74C,CAAO,EAGtC,IACT,EAEIg5C,GAAkB,SAAUh5C,EAASC,EAAS/B,EAAO,CACvD,GAAIA,EAAM,UACR,MAAO,GAET,GAAIloC,GAAI,IAAMA,GAAI,IAAM,IAAMkoC,EAAM,cAAgBA,EAAM,UAAY,GAAKA,EAAM,iBAAmBA,EAAM,aAAc,CACtH,IAAIzxB,EAAMyxB,EAAM,eAAe,WAAWA,EAAM,WAAW,EAC3D,GAAIxb,GAAS,UAAUjW,CAAG,EACxB,OAAO3a,GAAO2a,EAAI,eAAe,EAAG,SAAU2yB,EAAM,CAClD,OAAOW,GAAWX,EAAMY,EAASC,CAAO,CAC1C,CAAC,CAEL,CACA,OAAOnuC,GAAOosC,EAAM,eAAe,EAAG,SAAUkB,EAAM,CACpD,OAAOW,GAAWX,EAAMY,EAASC,CAAO,CAC1C,CAAC,CACH,EACIg5C,GAAa,CAAE,gBAAiBD,EAAgB,EAEhDE,GAAsB,SAAUzsE,EAAK,CACvC,IAAI5S,EAAK2C,EAASxC,EAAKqoC,EACvB,OAAAA,EAAa51B,EAAI,sBAAsB,EACvC5S,EAAM4S,EAAI,cACVjQ,EAAU3C,EAAI,gBACdG,EAAMH,EAAI,YACH,CACL,IAAKwoC,EAAW,IAAMroC,EAAI,YAAcwC,EAAQ,UAChD,KAAM6lC,EAAW,KAAOroC,EAAI,YAAcwC,EAAQ,UACpD,CACF,EACI28E,GAAkB,SAAUzgF,EAAQ,CACtC,OAAOA,EAAO,OAASwgF,GAAoBxgF,EAAO,QAAQ,CAAC,EAAI,CAC7D,KAAM,EACN,IAAK,CACP,CACF,EACI0gF,GAAoB,SAAU1gF,EAAQ,CACxC,IAAIoB,EAAOpB,EAAO,QAAQ,EAC1B,OAAOA,EAAO,OAAS,CACrB,KAAMoB,EAAK,WACX,IAAKA,EAAK,SACZ,EAAI,CACF,KAAM,EACN,IAAK,CACP,CACF,EACIu/E,GAAgB,SAAU3gF,EAAQ,CACpC,IAAIoB,EAAOpB,EAAO,QAAQ,EAAGwU,EAASxU,EAAO,OAAO,EAAE,gBAClD4gF,EAAe,CACjB,KAAMx/E,EAAK,WACX,IAAKA,EAAK,SACZ,EACIy/E,EAAe,CACjB,KAAMz/E,EAAK,YAAcoT,EAAO,WAChC,IAAKpT,EAAK,WAAaoT,EAAO,SAChC,EACA,OAAOxU,EAAO,OAAS4gF,EAAeC,CACxC,EACIC,GAAmB,SAAU9gF,EAAQK,EAAO,CAC9C,GAAIA,EAAM,OAAO,gBAAkBL,EAAO,OAAO,EAAG,CAClD,IAAI+gF,EAAiBP,GAAoBxgF,EAAO,wBAAwB,CAAC,EACrEghF,EAAiBL,GAAc3gF,CAAM,EACzC,MAAO,CACL,KAAMK,EAAM,MAAQ0gF,EAAe,KAAOC,EAAe,KACzD,IAAK3gF,EAAM,MAAQ0gF,EAAe,IAAMC,EAAe,GACzD,CACF,CACA,MAAO,CACL,KAAM3gF,EAAM,MACZ,IAAKA,EAAM,KACb,CACF,EACI4gF,GAAoB,SAAUC,EAAcF,EAAgBG,EAAe,CAC7E,MAAO,CACL,MAAOA,EAAc,KAAOD,EAAa,KAAOF,EAAe,KAC/D,MAAOG,EAAc,IAAMD,EAAa,IAAMF,EAAe,GAC/D,CACF,EACII,GAAO,SAAUphF,EAAQK,EAAO,CAClC,OAAO4gF,GAAkBR,GAAgBzgF,CAAM,EAAG0gF,GAAkB1gF,CAAM,EAAG8gF,GAAiB9gF,EAAQK,CAAK,CAAC,CAC9G,EACIghF,GAAgB,CAAE,KAAMD,EAAK,EAE7BE,GAA2Bt3D,GAAS,uBAAwBu3D,GAA0Bv3D,GAAS,sBAC/Fw3D,GAAc,SAAUxhE,EAASjM,EAAK,CACxC,OAAOutE,GAAyBvtE,CAAG,GAAKA,IAAQiM,CAClD,EACIyhE,GAAoB,SAAUzhF,EAAQ0hF,EAAeC,EAAa,CAIpE,MAHI,EAAAD,IAAkBC,GAAe3hF,EAAO,IAAI,UAAU0hF,EAAeC,CAAW,GAGhFL,GAAyBI,CAAa,EAI5C,EACIE,GAAe,SAAU7tE,EAAK,CAChC,IAAI8tE,EAAW9tE,EAAI,UAAU,EAAI,EACjC,OAAA8tE,EAAS,gBAAgB,mBAAmB,EACrCA,CACT,EACIC,GAAc,SAAU9hF,EAAQ+T,EAAK42D,EAAOC,EAAQ,CACtD,IAAImX,EAAYhuE,EAAI,UAAU,EAAI,EAClC/T,EAAO,IAAI,UAAU+hF,EAAW,CAC9B,MAAOpX,EACP,OAAQC,CACV,CAAC,EACD5qE,EAAO,IAAI,UAAU+hF,EAAW,oBAAqB,IAAI,EACzD,IAAIC,EAAWhiF,EAAO,IAAI,OAAO,MAAO,CACtC,MAAS,qBACT,iBAAkB,MAClB,aAAgB,KAChB,gBAAmB,OACrB,CAAC,EACD,OAAAA,EAAO,IAAI,UAAUgiF,EAAU,CAC7B,SAAU,WACV,QAAS,GACT,SAAU,SACV,OAAQ,EACR,QAAS,EACT,OAAQ,EACR,MAAOrX,EACP,OAAQC,CACV,CAAC,EACD5qE,EAAO,IAAI,UAAU+hF,EAAW,CAC9B,OAAQ,EACR,UAAW,YACb,CAAC,EACDC,EAAS,YAAYD,CAAS,EACvBC,CACT,EACIC,GAAoB,SAAUD,EAAU/Q,EAAS,CAC/C+Q,EAAS,aAAe/Q,GAC1BA,EAAQ,YAAY+Q,CAAQ,CAEhC,EACIE,GAAY,SAAUF,EAAU1tC,EAAUq2B,EAAOC,EAAQuX,EAAMC,EAAM,CACvE,IAAI56C,EAAY,EAAGP,EAAY,EAC/B+6C,EAAS,MAAM,KAAO1tC,EAAS,MAAQ,KACvC0tC,EAAS,MAAM,IAAM1tC,EAAS,MAAQ,KAClCA,EAAS,MAAQq2B,EAAQwX,IAC3B36C,EAAY8M,EAAS,MAAQq2B,EAAQwX,GAEnC7tC,EAAS,MAAQs2B,EAASwX,IAC5Bn7C,EAAYqN,EAAS,MAAQs2B,EAASwX,GAExCJ,EAAS,MAAM,MAAQrX,EAAQnjC,EAAY,KAC3Cw6C,EAAS,MAAM,OAASpX,EAAS3jC,EAAY,IAC/C,EACIo7C,GAAgB,SAAUtuE,EAAK,CAC7BA,GAAOA,EAAI,YACbA,EAAI,WAAW,YAAYA,CAAG,CAElC,EACIuuE,GAA2B,SAAU,EAAG,CAC1C,OAAO,EAAE,SAAW,CACtB,EACIC,GAAsB,SAAUnuE,EAAO,CACzC,OAAOA,EAAM,OACf,EACIouE,GAAc,SAAUpuE,EAAOkgC,EAAU,CAC3C,MAAO,CACL,MAAOA,EAAS,MAAQlgC,EAAM,KAC9B,MAAOkgC,EAAS,MAAQ,CAC1B,CACF,EACImuC,GAAU,SAAUruE,EAAOpU,EAAQ,CACrC,OAAO,SAAU/B,EAAG,CAClB,GAAIqkF,GAAyBrkF,CAAC,EAAG,CAC/B,IAAIykF,EAAQvoF,GAAK6F,EAAO,IAAI,WAAW/B,EAAE,MAAM,EAAGyqC,GAAU,GAAG44C,GAA0BC,EAAuB,CAAC,EAAE,MAAM,IAAI,EAC7H,GAAIC,GAAYxhF,EAAO,QAAQ,EAAG0iF,CAAK,EAAG,CACxC,IAAIC,EAAS3iF,EAAO,IAAI,OAAO0iF,CAAK,EAChCzR,EAAUjxE,EAAO,QAAQ,EACzBwU,EAASxU,EAAO,OAAO,EAAE,gBAC7BoU,EAAM,QAAUsuE,EAChBtuE,EAAM,QAAUnW,EAAE,QAClBmW,EAAM,QAAUnW,EAAE,QAClBmW,EAAM,MAAQpU,EAAO,OAASixE,EAAQ,YAAcz8D,EAAO,aAAe,EAC1EJ,EAAM,MAAQpU,EAAO,OAASixE,EAAQ,aAAez8D,EAAO,cAAgB,EAC5EJ,EAAM,KAAOnW,EAAE,MAAQ0kF,EAAO,EAC9BvuE,EAAM,KAAOnW,EAAE,MAAQ0kF,EAAO,EAC9BvuE,EAAM,MAAQsuE,EAAM,YACpBtuE,EAAM,OAASsuE,EAAM,aACrBtuE,EAAM,MAAQ0tE,GAAY9hF,EAAQ0iF,EAAOtuE,EAAM,MAAOA,EAAM,MAAM,CACpE,CACF,CACF,CACF,EACIwuE,GAAS,SAAUxuE,EAAOpU,EAAQ,CACpC,IAAI6iF,EAAwB9iF,GAAM,SAAS,SAAUunC,EAASC,EAAS,CACrEvnC,EAAO,oBAAoB,cAAc,EACzCA,EAAO,UAAU,aAAasnC,EAASC,CAAO,CAChD,EAAG,CAAC,EACJ,OAAO,SAAUtpC,EAAG,CAClB,IAAI6kF,EAAW,KAAK,IAAI,KAAK,IAAI7kF,EAAE,QAAUmW,EAAM,OAAO,EAAG,KAAK,IAAInW,EAAE,QAAUmW,EAAM,OAAO,CAAC,EAChG,GAAImuE,GAAoBnuE,CAAK,GAAK,CAACA,EAAM,UAAY0uE,EAAW,GAAI,CAClE,IAAIltF,EAAOoK,EAAO,KAAK,YAAa,CAAE,OAAQoU,EAAM,OAAQ,CAAC,EAC7D,GAAIxe,EAAK,mBAAmB,EAC1B,OAEFwe,EAAM,SAAW,GACjBpU,EAAO,MAAM,CACf,CACA,GAAIoU,EAAM,SAAU,CAClB,IAAI2uE,EAAYP,GAAYpuE,EAAOitE,GAAc,KAAKrhF,EAAQ/B,CAAC,CAAC,EAChEgkF,GAAkB7tE,EAAM,MAAOpU,EAAO,QAAQ,CAAC,EAC/CkiF,GAAU9tE,EAAM,MAAO2uE,EAAW3uE,EAAM,MAAOA,EAAM,OAAQA,EAAM,KAAMA,EAAM,IAAI,EACnFyuE,EAAsB5kF,EAAE,QAASA,EAAE,OAAO,CAC5C,CACF,CACF,EACI+kF,GAAe,SAAU91C,EAAW,CACtC,IAAI3M,EAAM2M,EAAU,OAAO,EAAE,WAAW,CAAC,EACrCrF,EAAiBtH,EAAI,eACzB,OAAOsH,EAAe,WAAa,EAAIA,EAAe,WAAaA,CACrE,EACIo7C,GAAO,SAAU7uE,EAAOpU,EAAQ,CAClC,OAAO,SAAU/B,EAAG,CAClB,GAAImW,EAAM,UACJqtE,GAAkBzhF,EAAQgjF,GAAahjF,EAAO,SAAS,EAAGoU,EAAM,OAAO,EAAG,CAC5E,IAAI8uE,EAAgBtB,GAAaxtE,EAAM,OAAO,EAC1Cxe,EAAOoK,EAAO,KAAK,OAAQ,CAC7B,YAAakjF,EACb,QAASjlF,EAAE,QACX,QAASA,EAAE,OACb,CAAC,EACIrI,EAAK,mBAAmB,IAC3BstF,EAAgBttF,EAAK,YACrBoK,EAAO,YAAY,SAAS,UAAY,CACtCqiF,GAAcjuE,EAAM,OAAO,EAC3BpU,EAAO,cAAcA,EAAO,IAAI,aAAakjF,CAAa,CAAC,EAC3DljF,EAAO,oBAAoB,cAAc,CAC3C,CAAC,EAEL,CAEFmjF,GAAgB/uE,CAAK,CACvB,CACF,EACIwK,GAAO,SAAUxK,EAAOpU,EAAQ,CAClC,OAAO,UAAY,CACboU,EAAM,UACRpU,EAAO,KAAK,SAAS,EAEvBmjF,GAAgB/uE,CAAK,CACvB,CACF,EACI+uE,GAAkB,SAAU/uE,EAAO,CACrCA,EAAM,SAAW,GACjBA,EAAM,QAAU,KAChBiuE,GAAcjuE,EAAM,KAAK,CAC3B,EACIgvE,GAAqB,SAAUpjF,EAAQ,CACzC,IAAIoU,EAAQ,CAAC,EACTivE,EAASC,EAAkBC,EAAaC,EAAaC,EAAgBC,EACzEL,EAAUvoD,GAAW,IACrB4oD,EAAenuF,EAAW,SAC1B+tF,EAAmBb,GAAQruE,EAAOpU,CAAM,EACxCujF,EAAcX,GAAOxuE,EAAOpU,CAAM,EAClCwjF,EAAcP,GAAK7uE,EAAOpU,CAAM,EAChCyjF,EAAiB7kE,GAAKxK,EAAOpU,CAAM,EACnCA,EAAO,GAAG,YAAasjF,CAAgB,EACvCtjF,EAAO,GAAG,YAAaujF,CAAW,EAClCvjF,EAAO,GAAG,UAAWwjF,CAAW,EAChCH,EAAQ,KAAKK,EAAc,YAAaH,CAAW,EACnDF,EAAQ,KAAKK,EAAc,UAAWD,CAAc,EACpDzjF,EAAO,GAAG,SAAU,UAAY,CAC9BqjF,EAAQ,OAAOK,EAAc,YAAaH,CAAW,EACrDF,EAAQ,OAAOK,EAAc,UAAWD,CAAc,CACxD,CAAC,CACH,EACIE,GAAc,SAAU3jF,EAAQ,CAClCA,EAAO,GAAG,OAAQ,SAAU/B,EAAG,CAC7B,IAAI2lF,EAAa,OAAO3lF,EAAE,QAAY,IAAc+B,EAAO,OAAO,EAAE,iBAAiB/B,EAAE,QAASA,EAAE,OAAO,EAAI,MACzGqjF,GAAyBsC,CAAU,GAAKtC,GAAyBthF,EAAO,IAAI,yBAAyB4jF,CAAU,CAAC,IAClH3lF,EAAE,eAAe,CAErB,CAAC,CACH,EACI4lF,GAAO,SAAU7jF,EAAQ,CAC3BojF,GAAmBpjF,CAAM,EACzB2jF,GAAY3jF,CAAM,CACpB,EACI8jF,GAAoB,CAAE,KAAMD,EAAK,EAEjCE,GAAU,SAAU/jF,EAAQ,CAC9B,IAAIgkF,EAAmB55E,GAAM,UAAY,CACvC,GAAI,CAACpK,EAAO,QAAS,CACnB,IAAIugC,EAAMvgC,EAAO,UAAU,OAAO,EAClC,GAAIugC,EAAI,UAAW,CACjB,IAAIy+B,EAAaD,GAAiB/+D,EAAQA,EAAO,UAAU,OAAO,EAAG,EAAK,EAC1EA,EAAO,UAAU,OAAOg/D,CAAU,CACpC,CACF,CACF,EAAG,CAAC,EACJh/D,EAAO,GAAG,QAAS,UAAY,CAC7BgkF,EAAiB,SAAS,CAC5B,CAAC,EACDhkF,EAAO,GAAG,OAAQ,UAAY,CAC5BgkF,EAAiB,OAAO,CAC1B,CAAC,CACH,EACIC,GAAW,CAAE,MAAOF,EAAQ,EAE5BG,GAA0Bl6D,GAAS,sBACnCm6D,GAA2Bn6D,GAAS,uBACpCo6D,GAA2B,SAAUpkF,EAAQyI,EAAM,CAErD,QADIkI,EAAO3Q,EAAO,QAAQ,EACnByI,GAAQA,IAASkI,GAAM,CAC5B,GAAIuzE,GAAwBz7E,CAAI,GAAK07E,GAAyB17E,CAAI,EAChE,OAAOA,EAETA,EAAOA,EAAK,UACd,CACA,OAAO,IACT,EACI47E,GAAqB,SAAUrkF,EAAQ,CACzC,IAAI6nB,EAAU,SAAUpf,GAAM,CAC5B,OAAOzI,EAAO,IAAI,QAAQyI,EAAI,CAChC,EACIme,EAAW5mB,EAAO,QAAQ,EAC1BskF,EAAYp0C,GAAUlwC,EAAO,QAAQ,EAAG6nB,EAAS,UAAY,CAC/D,OAAO0oD,GAAY,SAASvwE,CAAM,CACpC,CAAC,EACGukF,EAAkB,OAASvkF,EAAO,IAAI,SAAS,EAC/CwkF,EACAC,EAAyB,SAAU1wE,GAAK,CAC1C,OAAO/T,EAAO,IAAI,SAAS+T,GAAK,yBAAyB,CAC3D,EACI2wE,EAA0B,UAAY,CACxC,IAAIniF,GAAYvC,EAAO,IAAI,IAAIukF,CAAe,EAC9C,OAAOhiF,IAAYA,GAAU,qBAAqB,GAAG,EAAE,CAAC,CAC1D,EACIoiF,EAAW,SAAUn/C,GAAO,CAC1BA,IACFxlC,EAAO,UAAU,OAAOwlC,EAAK,CAEjC,EACIo/C,EAAW,UAAY,CACzB,OAAO5kF,EAAO,UAAU,OAAO,CACjC,EACIw+D,EAAY,SAAUptB,GAAW3oC,GAAMg1B,GAAQghC,GAAgB,CAC7DA,KAAmB,SACrBA,GAAiB,IAEnB,IAAIxgE,GAMJ,OALAA,GAAI+B,EAAO,KAAK,YAAa,CAC3B,OAAQyI,GACR,UAAW2oC,GACX,OAAQ3T,EACV,CAAC,EACGx/B,GAAE,mBAAmB,EAChB,MAELwgE,IACFz+D,EAAO,UAAU,eAAeyI,GAAM2oC,KAAc,EAAE,EAEjDkzC,EAAU,KAAK7mD,GAAQh1B,EAAI,EACpC,EACIkqC,EAA6B,SAAUvB,GAAW5L,GAAO,CAE3D,OADAA,GAAQ8M,GAAelB,GAAWxqB,EAAU4e,EAAK,EAC7C4L,KAAc,GACThG,GAAgB,eAAe5F,EAAK,EAEtC4F,GAAgB,aAAa5F,EAAK,CAC3C,EACIq/C,EAA0B,SAAUC,GAAqB,CACvDA,GAAoB,aAAa,gBAAgB,IACnDz/C,GAAwBy/C,EAAmB,EAC3CH,EAASC,EAAS,CAAC,EACnB5kF,EAAO,UAAU,eAAe8kF,GAAoB,CAAC,CAAC,EAE1D,EACIlS,EAAiB,UAAY,CAC/B5yE,EAAO,GAAG,UAAW,SAAU/B,GAAG,CAChC,IAAIunC,GAAQo/C,EAAS,EACjBp/C,GAAM,WAAaqsC,GAAW,kBAAkB7xE,EAAQ/B,GAAE,QAASA,GAAE,OAAO,GAC9E0mF,EAAS/lB,GAAmB5+D,EAAQwlC,GAAO,EAAK,CAAC,CAErD,CAAC,EACDxlC,EAAO,GAAG,QAAS,SAAU/B,GAAG,CAC9B,IAAI8mF,GACJA,GAAsBX,GAAyBpkF,EAAQ/B,GAAE,MAAM,EAC3D8mF,KACEZ,GAAyBY,EAAmB,IAC9C9mF,GAAE,eAAe,EACjB+B,EAAO,MAAM,GAEXkkF,GAAwBa,EAAmB,GACzC/kF,EAAO,IAAI,UAAU+kF,GAAqB/kF,EAAO,UAAU,QAAQ,CAAC,GACtEglF,GAA+B,EAIvC,CAAC,EACDhlF,EAAO,GAAG,gBAAiB,UAAY,CACrCglF,GAA+B,CACjC,CAAC,EACDhlF,EAAO,GAAG,sCAAuC,UAAY,CAC3D,OAAOskF,EAAU,WAAW,CAC9B,CAAC,EACD,IAAIW,GAAoB,SAAUjlF,GAAQ,CACxC,IAAIklF,GAAQ,GACZllF,GAAO,GAAG,aAAc,UAAY,CAClCklF,GAAQ,EACV,CAAC,EACDllF,GAAO,GAAG,YAAa,UAAY,CACjCklF,GAAQ,EACV,CAAC,EACDllF,GAAO,GAAG,WAAY,SAAU/B,GAAG,CACjC,IAAI8mF,GAAsBX,GAAyBpkF,GAAQ/B,GAAE,MAAM,EAC/DkmF,GAAyBY,EAAmB,IACzCG,KACHjnF,GAAE,eAAe,EACjBknF,GAA4BxmB,GAAW3+D,GAAQ+kF,EAAmB,CAAC,GAGzE,CAAC,CACH,EACIK,GAAyB,SAAUrxE,GAAK,CAC1C,IAAI2pC,GAActJ,GAAYrgC,EAAG,EACjC,GAAI,CAACA,GAAI,WACP,MAAO,GAET,IAAIkgC,GAAW7I,GAAgB,OAAOr3B,GAAI,UAAU,EAChDuqC,GAASZ,GAAY,KAAKzJ,EAAQ,EACtC,OAAOqK,IAAU,CAAC6N,GAA6B7N,EAAM,GAAK,CAAC8N,GAA4B9N,EAAM,CAC/F,EACI5M,GAAgB,SAAUO,GAAOC,GAAO,CAC1C,IAAI6S,GAAS/kD,EAAO,IAAI,UAAUiyC,GAAOjyC,EAAO,IAAI,OAAO,EACvDglD,GAAShlD,EAAO,IAAI,UAAUkyC,GAAOlyC,EAAO,IAAI,OAAO,EAC3D,OAAO+kD,KAAWC,EACpB,EACIqgC,GAAuB,SAAUv+B,GAAYuK,GAAW,CAC1D,IAAIi0B,GAActlF,EAAO,IAAI,UAAU8mD,GAAY9mD,EAAO,IAAI,OAAO,EACjEulF,GAAavlF,EAAO,IAAI,UAAUqxD,GAAWrxD,EAAO,IAAI,OAAO,EACnE,OAAIslF,IAAetlF,EAAO,IAAI,UAAUslF,GAAaC,EAAU,GAAKpB,GAAyBC,GAAyBpkF,EAAQslF,EAAW,CAAC,IAAM,GACvI,GAEFA,IAAe,CAAC5zC,GAAc4zC,GAAaC,EAAU,GAAKH,GAAuBE,EAAW,CACrG,EACAL,GAAkBjlF,CAAM,EACxBA,EAAO,GAAG,YAAa,SAAU/B,GAAG,CAClC,IAAI8mF,GACAvT,GAAYvzE,GAAE,OAClB,GAAI,EAAAuzE,KAAc5qD,GAAY4qD,GAAU,WAAa,QAAU,CAACxxE,EAAO,IAAI,UAAUwxE,GAAW5qD,CAAQ,IAGpGirD,GAAW,kBAAkB7xE,EAAQ/B,GAAE,QAASA,GAAE,OAAO,IAAM,IAInE,GADA8mF,GAAsBX,GAAyBpkF,EAAQwxE,EAAS,EAC5DuT,GACEZ,GAAyBY,EAAmB,GAC9C9mF,GAAE,eAAe,EACjBknF,GAA4BxmB,GAAW3+D,EAAQ+kF,EAAmB,CAAC,IAEnEC,GAA+B,EAC3B,EAAEd,GAAwBa,EAAmB,GAAK9mF,GAAE,WAAa,CAACsiF,GAAW,gBAAgBtiF,GAAE,QAASA,GAAE,QAAS+B,EAAO,UAAU,OAAO,CAAC,IAC9IwlF,GAAc,EACdxlF,EAAO,UAAU,aAAa/B,GAAE,QAASA,GAAE,OAAO,YAG7C2yC,GAAkB4gC,EAAS,IAAM,GAAO,CACjDwT,GAA+B,EAC/BQ,GAAc,EACd,IAAIvF,GAAYC,GAAat5D,EAAU3oB,GAAE,QAASA,GAAE,OAAO,EAC3D,GAAIgiF,IACE,CAACoF,GAAqBpnF,GAAE,OAAQgiF,GAAU,IAAI,EAAG,CACnDhiF,GAAE,eAAe,EACjB,IAAIunC,GAAQg5B,EAAU,EAAGyhB,GAAU,KAAMA,GAAU,OAAQ,EAAK,EAChEjgF,EAAO,QAAQ,EAAE,MAAM,EACvB2kF,EAASn/C,EAAK,CAChB,CAEJ,EACF,CAAC,EACDxlC,EAAO,GAAG,WAAY,SAAU/B,GAAG,CACjC,GAAI,CAAA6/E,GAAG,gBAAgB7/E,EAAC,EAGxB,OAAQA,GAAE,QAAS,CACnB,QACMkmF,GAAyBnkF,EAAO,UAAU,QAAQ,CAAC,GACrD/B,GAAE,eAAe,EAEnB,KACF,CACF,CAAC,EACD+B,EAAO,GAAG,oBAAqB,SAAU/B,GAAG,CAC1C,IAAIsiC,GAAMtiC,GAAE,MACZ,GAAIumF,EAA6B,CAC/B,GAAI,CAACA,EAA4B,WAAY,CAC3CA,EAA8B,KAC9B,MACF,CACAjkD,GAAMA,GAAI,WAAW,EACrBA,GAAI,WAAWikD,CAA2B,EAC1CvmF,GAAE,MAAQsiC,EACZ,CACF,CAAC,EACDvgC,EAAO,GAAG,oBAAqB,SAAU/B,GAAG,CAC1CA,GAAE,MAAQwnF,GAAoCxnF,GAAE,KAAK,EACrD,IAAIsiC,GAAM4kD,GAA4BlnF,GAAE,MAAOA,GAAE,OAAO,EACpDsiC,KACFtiC,GAAE,MAAQsiC,GAEd,CAAC,EACD,IAAImlD,GAAa,SAAUj9E,GAAM,CAC/B,OAAOA,GAAK,KAAO,aACrB,EACAzI,EAAO,GAAG,yBAA0B,SAAU/B,GAAG,CAC/C,IAAIsiC,GAAMtiC,GAAE,MACR,CAAC0nF,GAAwBplD,EAAG,GAAK,CAACmlD,GAAWnlD,GAAI,eAAe,UAAU,GAC5EilD,GAAc,EAEXf,EAAuBlkD,GAAI,eAAe,UAAU,GACvDykD,GAA+B,CAEnC,CAAC,EACDhlF,EAAO,GAAG,OAAQ,SAAU/B,GAAG,CAC7B,IAAI2nF,GAAgB3nF,GAAE,cACtB,GAAI,CAACA,GAAE,mBAAmB,GAAKA,GAAE,eAAiB,CAACX,GAAI,GAAI,CACzD,IAAIuoF,GAAuBnB,EAAwB,EAC/CmB,KACF5nF,GAAE,eAAe,EACjB2nF,GAAc,UAAU,EACxBA,GAAc,QAAQ,YAAaC,GAAqB,SAAS,EACjED,GAAc,QAAQ,aAAcC,GAAqB,SAAS,EAEtE,CACF,CAAC,EACD/B,GAAkB,KAAK9jF,CAAM,EAC7BikF,GAAS,MAAMjkF,CAAM,CACvB,EACI8lF,EAAS,UAAY,CACvB,IAAIlpE,GAAS5c,EAAO,cAAe+lF,GAAY,oBAC/CnpE,GAAO,KAAK0nE,EAAU,OAAO,CAAC,EAC9B1nE,GAAO,KAAKmpE,GAAY,2FAAiHA,GAAY,+CAA2DA,GAAY,0CAAoD,CAClR,EACIC,GAAyB,SAAUv9E,GAAM,CAC3C,OAAO27B,GAAiB37B,EAAI,GAAKi8B,GAAyBj8B,EAAI,GAAKg8B,GAAuBh8B,EAAI,CAChG,EACIk9E,GAA0B,SAAUplD,GAAK,CAC3C,OAAOylD,GAAuBzlD,GAAI,cAAc,GAAKylD,GAAuBzlD,GAAI,YAAY,CAC9F,EACIklD,GAAsC,SAAUllD,GAAK,CACvD,IAAI0lD,GAAqBjmF,EAAO,OAAO,sBAAsB,EACzDiqC,GAASjqC,EAAO,IAAI,UAAU,EAC9B6nC,GAAiBtH,GAAI,eACrBuH,GAAcvH,GAAI,YAClBkY,GAAelY,GAAI,aACnBmY,GAAYnY,GAAI,UACpB,OAAI3kB,GAAIqqE,GAAoBp+C,GAAe,SAAS,YAAY,CAAC,EAC3DC,KAAgB,EAClBmC,GAAO,eAAepC,EAAc,EAEpCoC,GAAO,cAAcpC,EAAc,EAGrCoC,GAAO,SAASpC,GAAgBC,EAAW,EAEzClsB,GAAIqqE,GAAoBxtC,GAAa,SAAS,YAAY,CAAC,EACzDC,KAAc,EAChBzO,GAAO,aAAawO,EAAY,EAEhCxO,GAAO,YAAYwO,EAAY,EAGjCxO,GAAO,OAAOwO,GAAcC,EAAS,EAEhCzO,EACT,EACIk7C,GAA8B,SAAU3/C,GAAOl7B,GAAS,CAC1D,IAAI7B,GACAitB,GAAI11B,EAAO,EACX8b,GAAM9b,EAAO,IACbkmF,GAAyB5I,GAAKz1C,GAAgBC,GAAa4Q,GAAWz6C,GAAGusC,GAAe27C,GAAaC,GACzG,GAAI,CAAC5gD,GACH,OAAO,KAET,GAAIA,GAAM,UAAW,CACnB,GAAI,CAACmgD,GAAwBngD,EAAK,EAChC,GAAIl7B,KAAY,GAAO,CAErB,GADAkgC,GAAgBmI,EAA2B,GAAInN,EAAK,EAChDoL,GAAkBpG,GAAc,QAAQ,EAAI,CAAC,EAC/C,OAAOg0B,EAAU,GAAIh0B,GAAc,QAAQ,EAAI,EAAG,GAAO,EAAK,EAEhE,GAAIoG,GAAkBpG,GAAc,QAAQ,CAAC,EAC3C,OAAOg0B,EAAU,GAAIh0B,GAAc,QAAQ,EAAG,CAACA,GAAc,QAAQ,EAAG,EAAK,CAEjF,KAAO,CAEL,GADAA,GAAgBmI,EAA2B,EAAGnN,EAAK,EAC/CoL,GAAkBpG,GAAc,QAAQ,CAAC,EAC3C,OAAOg0B,EAAU,EAAGh0B,GAAc,QAAQ,EAAG,CAACA,GAAc,QAAQ,EAAG,EAAK,EAE9E,GAAIoG,GAAkBpG,GAAc,QAAQ,EAAI,CAAC,EAC/C,OAAOg0B,EAAU,EAAGh0B,GAAc,QAAQ,EAAI,EAAG,GAAO,EAAK,CAEjE,CAEF,OAAO,IACT,CAuBA,OAtBA3C,GAAiBrC,GAAM,eACvBsC,GAActC,GAAM,YACpBkT,GAAYlT,GAAM,UACdqC,GAAe,WAAa,GAAKC,KAAgB,GAAKq8C,GAAyBt8C,GAAe,UAAU,IAC1GA,GAAiBA,GAAe,WAChCC,GAAchsB,GAAI,UAAU+rB,EAAc,EAC1CA,GAAiBA,GAAe,YAE9BA,GAAe,WAAa,IAG5B6Q,KAAc5Q,GAAc,GAAKD,KAAmBrC,GAAM,eAC5D/8B,GAAOo/B,GAAe,WAAWC,EAAW,GAE1C,CAACq8C,GAAyB17E,EAAI,KAGlC09E,GAAcC,GAAkB39E,GAAK,UAAU,EAAI,EACnDxK,GAAI+B,EAAO,KAAK,iBAAkB,CAChC,OAAQyI,GACR,YAAa09E,EACf,CAAC,EACGloF,GAAE,mBAAmB,GAChB,MAETioF,GAA0BlmD,GAAW9lB,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAAG,IAAMukF,CAAe,EAAE,KAAK,UAAY,CAC9G,OAAO7uD,GAAE,CAAC,CAAC,CACb,EAAG,SAAU3hB,GAAK,CAChB,OAAO2hB,GAAE,CAAC3hB,GAAI,IAAI,CAAC,CAAC,CACtB,CAAC,EACDoyE,GAAcloF,GAAE,YACZioF,GAAwB,SAAW,IACrCA,GAA0BxwD,GAAE,kEAAkE,EAAE,KAAK,KAAM6uD,CAAe,EAC1H2B,GAAwB,SAASlmF,EAAO,QAAQ,CAAC,GAEnDwlC,GAAQxlC,EAAO,IAAI,UAAU,EACzBmmF,KAAgBC,IAAmB9oF,GAAI,IACzC4oF,GAAwB,MAAM,EAAE,OAAO,uDAAuD,EAAE,OAAOC,EAAW,EAClH3gD,GAAM,cAAc0gD,GAAwB,CAAC,EAAE,WAAW,UAAU,EACpE1gD,GAAM,YAAY2gD,EAAW,IAE7BD,GAAwB,MAAM,EAAE,OAAO,MAAM,EAAE,OAAOC,EAAW,EAAE,OAAO,MAAM,EAChF3gD,GAAM,SAAS0gD,GAAwB,CAAC,EAAE,WAAY,CAAC,EACvD1gD,GAAM,OAAO0gD,GAAwB,CAAC,EAAE,UAAW,CAAC,GAEtDA,GAAwB,IAAI,CAAE,IAAKpqE,GAAI,OAAOrT,GAAMzI,EAAO,QAAQ,CAAC,EAAE,CAAE,CAAC,EACzEkmF,GAAwB,CAAC,EAAE,MAAM,EACjC5I,GAAMt9E,EAAO,UAAU,OAAO,EAC9Bs9E,GAAI,gBAAgB,EACpBA,GAAI,SAAS93C,EAAK,EAClB/rC,GAAKimC,GAAcxlB,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAAG,sBAAsB,EAAG,SAAU+T,GAAK,CAC5FuI,GAAOvI,GAAK,mBAAmB,CACjC,CAAC,EACDtL,GAAK,aAAa,oBAAqB,GAAG,EAC1C+7E,EAA8B/7E,GAC9B+8E,GAAc,EACPhgD,GACT,EACIw/C,GAAiC,UAAY,CAC3CR,IACFA,EAA4B,gBAAgB,mBAAmB,EAC/DxkD,GAAW9lB,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAAG,IAAMukF,CAAe,EAAE,KAAKnmD,EAAQ,EAClFomD,EAA8B,MAEhCxkD,GAAW9lB,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAAG,IAAMukF,CAAe,EAAE,KAAKnmD,EAAQ,EAClFomD,EAA8B,IAChC,EACI7pD,GAAU,UAAY,CACxB2pD,EAAU,QAAQ,EAClBE,EAA8B,IAChC,EACIgB,GAAgB,UAAY,CAC9BlB,EAAU,KAAK,CACjB,EACA,OAAIhnF,GAAI,UACNs1E,EAAe,EACfkT,EAAO,GAEF,CACL,UAAWtnB,EACX,wBAAyBqmB,EACzB,cAAeW,GACf,QAAS7qD,EACX,CACF,EAEI0rD,GAAwB,SAAU3qF,EAAM,CAC1C,OAAOA,EAAK,QAAQ,OAAO,IAAM,GAAKA,EAAK,QAAQ,OAAO,IAAM,CAClE,EACI4qF,GAAe,SAAUl7E,EAAM,CAEjC,QADIm7E,EAAgBn7E,EACb,cAAc,KAAKm7E,CAAa,GACrCA,EAAgBA,EAAc,QAAQ,cAAe,EAAE,EAEzD,OAAOA,CACT,EACIC,GAAe,SAAU1hE,EAAU4yD,EAAK,CAC1C,OAAI5yD,EAAS,qBACJ,GACE,iBAAiB,KAAK4yD,CAAG,EAC3B5yD,EAAS,sBAAwB,IAAS,yBAAyB,KAAK4yD,CAAG,EAE3E,UAAU,KAAKA,CAAG,CAE7B,EACI+O,GAAkB,SAAU75D,EAAQva,EAAMwkD,EAAY,CACxD,IAAI/0D,EAAQ,EAAGuN,EAAOnL,EAASwiF,EAAaT,EAI5C,IAHAA,EAAqBr5D,EAAO,sBAAsB,EAClD85D,EAAc,iGACdA,EAAY,UAAYr3E,EAAQwnD,EACzB3yD,EAAUwiF,EAAY,KAAKr0E,CAAI,GAAG,CAEvC,GADAhD,EAAQq3E,EAAY,UAChBxiF,EAAQ,CAAC,IAAM,IACjBpC,YACS,CAACoC,EAAQ,CAAC,EAAG,CACtB,GAAIA,EAAQ,CAAC,IAAK+hF,EAChB,SAEFnkF,GACF,CACA,GAAIA,IAAU,EACZ,KAEJ,CACA,OAAOuN,CACT,EACIs3E,GAAsB,SAAUC,EAAQC,EAAY,CACtD,IAAI3iF,EAAU0iF,EAAO,KAAKC,CAAU,EACpC,GAAI3iF,EAAS,CACX,IAAIxI,EAAOwI,EAAQ,CAAC,EAChBnO,EAAQmO,EAAQ,CAAC,EACrB,OAAO,OAAOxI,GAAS,UAAYA,EAAK,YAAY,IAAM,iBAAmB3F,EAAQ,IACvF,KACE,QAAO,IAEX,EACA,SAAS+wF,GAAUhiE,EAAU8H,EAAQ,CAC/BA,IAAW,SACbA,EAASe,GAAO,GAElB,IAAIn4B,EAAO,UAAY,CACvB,EACAsvB,EAAWA,GAAY,CAAC,EACpBA,EAAS,mBAAqB,KAChCA,EAAS,iBAAmB,IAE9B,IAAIiiE,EAAUjiE,EAAS,QAAUA,EAAS,QAAUtvB,EAChDwxF,EAAQliE,EAAS,MAAQA,EAAS,MAAQtvB,EAC1C4V,EAAO0Z,EAAS,KAAOA,EAAS,KAAOtvB,EACvCmV,EAAQma,EAAS,MAAQA,EAAS,MAAQtvB,EAC1Cy8D,EAAMntC,EAAS,IAAMA,EAAS,IAAMtvB,EACpCyxF,EAAKniE,EAAS,GAAKA,EAAS,GAAKtvB,EACjC0xF,EAAUpiE,EAAS,QAAUA,EAAS,QAAUtvB,EAChD2xF,EAAQ,SAAU90E,EAAM,CAC1B,IAAInO,EAASmL,EAAQ,EAAGtZ,EAAOqxF,GAC3BC,GAAQ,CAAC,EACTC,GAAUhuF,GAAGiuF,GAAU7rF,GACvB8rF,GAAmBC,GAAwBxB,GAAoByB,GAAcC,GAC7EznC,GAAUG,GAAaunC,GAAgBp8E,GAAMq8E,GAAcC,GAAoBC,GAC/EC,GAAoBC,GAAmBC,GAAkBC,GACzDC,GAAuBC,GAAa3B,GAAa4B,GAAY35D,GAAiBxF,GAAWpE,GAAU,EACnGiH,GAASE,GAAS,OAClBq8D,GACAC,GAAmB72E,GAAM,QAAQ,uDAAuD,EACxF82E,GAAkB,4BAClBC,GAAgB,SAAUhtF,GAAM,CAClC,IAAIgZ,GAAKpb,GAET,IADAob,GAAM2yE,GAAM,OACL3yE,MACD2yE,GAAM3yE,EAAG,EAAE,OAAShZ,IAAxB,CAIF,GAAIgZ,IAAO,EAAG,CACZ,IAAKpb,GAAI+tF,GAAM,OAAS,EAAG/tF,IAAKob,GAAKpb,KACnCoC,GAAO2rF,GAAM/tF,EAAC,EACVoC,GAAK,OACPu2D,EAAIv2D,GAAK,IAAI,EAGjB2rF,GAAM,OAAS3yE,EACjB,CACF,EACIi0E,GAAiB,SAAUxhF,GAAOzL,GAAM3F,GAAO6yF,GAAMC,GAAM,CAC7D,IAAIC,GAAUxvF,GACVyvF,GAAa,sBAGjB,GAFArtF,GAAOA,GAAK,YAAY,EACxB3F,GAAQ2F,MAAQgsF,GAAehsF,GAAOswB,GAAOj2B,IAAS6yF,IAAQC,IAAQ,EAAE,EACpE3oC,IAAY,CAACsnC,IAAqBnB,GAAsB3qF,EAAI,IAAM,GAAO,CAE3E,GADAotF,GAAWhB,GAAmBpsF,EAAI,EAC9B,CAACotF,IAAYf,GAAwB,CAEvC,IADAzuF,GAAIyuF,GAAuB,OACpBzuF,OACLwvF,GAAWf,GAAuBzuF,EAAC,EAC/B,CAAAwvF,GAAS,QAAQ,KAAKptF,EAAI,IAA9B,CAIEpC,KAAM,KACRwvF,GAAW,KAEf,CAIA,GAHI,CAACA,IAGDA,GAAS,aAAe,EAAE/yF,MAAS+yF,GAAS,aAC9C,MAEJ,CACA,GAAIN,GAAiB9sF,EAAI,GAAK,CAACopB,EAAS,kBAAmB,CACzD,IAAI4yD,GAAM3hF,GAAM,QAAQgzF,GAAY,EAAE,EACtC,GAAI,CACFrR,GAAM,mBAAmBA,EAAG,CAC9B,MAAa,CACXA,GAAM,SAASA,EAAG,CACpB,CAIA,GAHI+Q,GAAgB,KAAK/Q,EAAG,GAGxB8O,GAAa1hE,EAAU4yD,EAAG,EAC5B,MAEJ,CACI8P,KAAsB9rF,MAAQ8sF,IAAoB9sF,GAAK,QAAQ,IAAI,IAAM,KAG7E4rF,GAAS,IAAI5rF,EAAI,EAAI3F,GACrBuxF,GAAS,KAAK,CACZ,KAAM5rF,GACN,MAAO3F,EACT,CAAC,EACH,EAWA,IAVA2wF,GAAc,IAAI,OAAO,kRAA0T,GAAG,EACtV4B,GAAa,iFACbrC,GAAqBr5D,EAAO,sBAAsB,EAClDy7D,GAAcvjE,EAAS,uBAAyB8H,EAAO,uBAAuB,EAC9E86D,GAAe96D,EAAO,aAAa,EACnCszB,GAAWp7B,EAAS,SACpB2iE,GAAyB3iE,EAAS,iBAClCyjE,GAAiBzjE,EAAS,iBAC1B6J,GAAkB/B,EAAO,mBAAmB,EAC5Cu7D,GAAc91E,EAAO,IACdnO,EAAUwiF,GAAY,KAAKyB,EAAW,GAAG,CAI9C,GAHI94E,EAAQnL,EAAQ,OAClBkH,EAAK4gB,GAAO3Z,EAAK,OAAOhD,EAAOnL,EAAQ,MAAQmL,CAAK,CAAC,CAAC,EAEpDtZ,EAAQmO,EAAQ,CAAC,EACnBnO,EAAQA,EAAM,YAAY,EACtBA,EAAM,OAAO,CAAC,IAAM,MACtBA,EAAQA,EAAM,OAAO,CAAC,GAExB2yF,GAAc3yF,CAAK,UACVA,EAAQmO,EAAQ,CAAC,EAAG,CAC7B,GAAIA,EAAQ,MAAQA,EAAQ,CAAC,EAAE,OAASmO,EAAK,OAAQ,CACnDjH,EAAK4gB,GAAO3Z,EAAK,OAAOnO,EAAQ,KAAK,CAAC,CAAC,EACvCmL,EAAQnL,EAAQ,MAAQA,EAAQ,CAAC,EAAE,OACnC,QACF,CACAnO,EAAQA,EAAM,YAAY,EACtBA,EAAM,OAAO,CAAC,IAAM,MACtBA,EAAQA,EAAM,OAAO,CAAC,GAExB4xF,GAAe5xF,KAASkwF,GACpBsC,IAAkBF,GAAYtyF,CAAK,GAAKsxF,GAAM,OAAS,GAAKA,GAAMA,GAAM,OAAS,CAAC,EAAE,OAAStxF,GAC/F2yF,GAAc3yF,CAAK,EAErB,IAAIizF,GAAarC,GAAoB2B,GAAYpkF,EAAQ,CAAC,CAAC,EAC3D,GAAI8kF,KAAe,KAAM,CACvB,GAAIA,KAAe,MAAO,CACxB35E,EAAQo3E,GAAgB75D,EAAQva,EAAMq0E,GAAY,SAAS,EAC3DA,GAAY,UAAYr3E,EACxB,QACF,CACAu4E,GAAiB,EACnB,CACA,GAAI,CAAC1nC,KAAaG,GAAczzB,EAAO,eAAe72B,CAAK,GAAI,CAkB7D,GAjBA6xF,GAAiB,GACb1nC,KACF4nC,GAAqBznC,GAAY,WACjC0nC,GAAyB1nC,GAAY,oBAEnCwnC,GAAe3jF,EAAQ,CAAC,IAC1BsjF,GAAoBK,GAAa,QAAQ,eAAe,IAAM,GAC1DL,IAAqBC,KACvBG,GAAiB,IAEnBN,GAAW,CAAC,EACZA,GAAS,IAAM,CAAC,EAChBO,GAAa,QAAQS,GAAYK,EAAc,IAE/CrB,GAAW,CAAC,EACZA,GAAS,IAAM,CAAC,GAEdpnC,IAAY,CAACsnC,GAAmB,CAQlC,GAPAQ,GAAqB3nC,GAAY,mBACjC4nC,GAAoB5nC,GAAY,kBAChC6nC,GAAmB7nC,GAAY,iBAC/B+nC,GAAwB/nC,GAAY,iBAChC+nC,IAAyB,CAACd,GAAS,SACrCM,GAAiB,IAEfM,GAEF,IADA5uF,GAAI4uF,GAAiB,OACd5uF,MACLkS,GAAO08E,GAAiB5uF,EAAC,EACzBoC,GAAO8P,GAAK,KACZ2d,GAAY3d,GAAK,MACb2d,KAAc,WAChBA,GAAY,OAASpE,MAEvBuiE,GAAS,IAAI5rF,EAAI,EAAIytB,GACrBm+D,GAAS,KAAK,CACZ,KAAM5rF,GACN,MAAOytB,EACT,CAAC,EAGL,GAAI8+D,GAEF,IADA3uF,GAAI2uF,GAAkB,OACf3uF,MACLkS,GAAOy8E,GAAkB3uF,EAAC,EAC1BoC,GAAO8P,GAAK,KACN9P,MAAQ4rF,GAAS,MACrBn+D,GAAY3d,GAAK,MACb2d,KAAc,WAChBA,GAAY,OAASpE,MAEvBuiE,GAAS,IAAI5rF,EAAI,EAAIytB,GACrBm+D,GAAS,KAAK,CACZ,KAAM5rF,GACN,MAAOytB,EACT,CAAC,GAIP,GAAI6+D,GAAoB,CAEtB,IADA1uF,GAAI0uF,GAAmB,OAChB1uF,MACD,EAAA0uF,GAAmB1uF,EAAC,IAAKguF,GAAS,MAAtC,CAIEhuF,KAAM,KACRsuF,GAAiB,GAErB,CACA,GAAIp8E,GAAO87E,GAAS,IAAI,gBAAgB,EAAG,CACzC,GAAI97E,KAAS,MAAO,CAClB6D,EAAQo3E,GAAgB75D,EAAQva,EAAMq0E,GAAY,SAAS,EAC3DA,GAAY,UAAYr3E,EACxB,QACF,CACAu4E,GAAiB,EACnB,CACF,CACIA,IACFj9E,EAAM5U,EAAOuxF,GAAUK,EAAY,CAEvC,MACEC,GAAiB,GAEnB,GAAIR,GAAYz4D,GAAgB54B,CAAK,EAAG,CACtCqxF,GAAU,UAAY/3E,EAAQnL,EAAQ,MAAQA,EAAQ,CAAC,EAAE,QACrDA,EAAUkjF,GAAU,KAAK/0E,CAAI,IAC3Bu1E,KACFL,GAAWl1E,EAAK,OAAOhD,EAAOnL,EAAQ,MAAQmL,CAAK,GAErDA,EAAQnL,EAAQ,MAAQA,EAAQ,CAAC,EAAE,SAEnCqjF,GAAWl1E,EAAK,OAAOhD,CAAK,EAC5BA,EAAQgD,EAAK,QAEXu1E,KACEL,GAAS,OAAS,GACpBn8E,EAAKm8E,GAAU,EAAI,EAErBt1B,EAAIl8D,CAAK,GAEX2wF,GAAY,UAAYr3E,EACxB,QACF,CACKs4E,KACC,CAACE,IAAgBA,GAAa,QAAQ,GAAG,IAAMA,GAAa,OAAS,EACvER,GAAM,KAAK,CACT,KAAMtxF,EACN,MAAO6xF,EACT,CAAC,EACQA,IACT31B,EAAIl8D,CAAK,EAGf,MAAWA,EAAQmO,EAAQ,CAAC,IACtBnO,EAAM,OAAO,CAAC,IAAM,MACtBA,EAAQ,IAAMA,GAEZ,CAAC+uB,EAAS,4BAA8B/uB,EAAM,OAAO,EAAG,CAAC,EAAE,YAAY,IAAM,QAC/EA,EAAQ,IAAMA,GAEhBgxF,EAAQhxF,CAAK,IACJA,EAAQmO,EAAQ,CAAC,GAC1B8iF,EAAMV,GAAavwF,CAAK,CAAC,GAChBA,EAAQmO,EAAQ,CAAC,GAC1BgjF,EAAQnxF,CAAK,GACJA,EAAQmO,EAAQ,CAAC,IAC1B+iF,EAAGlxF,EAAOmO,EAAQ,CAAC,CAAC,EAEtBmL,EAAQnL,EAAQ,MAAQA,EAAQ,CAAC,EAAE,MACrC,CAIA,IAHImL,EAAQgD,EAAK,QACfjH,EAAK4gB,GAAO3Z,EAAK,OAAOhD,CAAK,CAAC,CAAC,EAE5B/V,GAAI+tF,GAAM,OAAS,EAAG/tF,IAAK,EAAGA,KACjCvD,EAAQsxF,GAAM/tF,EAAC,EACXvD,EAAM,OACRk8D,EAAIl8D,EAAM,IAAI,CAGpB,EACA,MAAO,CAAE,MAAOoxF,CAAM,CACxB,EACC,SAAUL,EAAW,CACpBA,EAAU,WAAaL,EACzB,GAAEK,KAAcA,GAAY,CAAC,EAAE,EAC/B,IAAImC,GAAcnC,GAEdoC,GAAW,SAAUC,EAAW92E,EAAM,CACxC,IAAI+2E,EAAoB,IAAI,OAAO,CAAC,QAAUD,EAAU,KAAK,GAAG,EAAI,WAAW,EAAE,KAAK,GAAG,EAAG,IAAI,EAChG,OAAO92E,EAAK,QAAQ+2E,EAAmB,EAAE,CAC3C,EACIC,GAAe,SAAUzsC,EAAYvqC,EAAM,CAC7C,IAAI8B,EAAU9B,EACVi3E,EAAiB,0CACjBC,EAAal6E,EAAOm6E,EAAatlF,EAAS+hF,EAC1Cr5D,EAASgwB,EAAW,OAGxB,IAFAzoC,EAAU+0E,GAAStsC,EAAW,aAAa,EAAGzoC,CAAO,EACrD8xE,EAAqBr5D,EAAO,sBAAsB,EAC3C1oB,EAAUolF,EAAe,KAAKn1E,CAAO,GAC1C9E,EAAQi6E,EAAe,UACvBE,EAActlF,EAAQ,CAAC,EAAE,OACrB+hF,EAAmB/hF,EAAQ,CAAC,CAAC,EAC/BqlF,EAAcl6E,EAEdk6E,EAAcN,GAAY,WAAWr8D,EAAQzY,EAAS9E,CAAK,EAE7D8E,EAAUA,EAAQ,UAAU,EAAG9E,EAAQm6E,CAAW,EAAIr1E,EAAQ,UAAUo1E,CAAW,EACnFD,EAAe,UAAYj6E,EAAQm6E,EAErC,OAAOzlD,GAAK,KAAK5vB,CAAO,CAC1B,EACIs1E,GAAeJ,GACfK,GAAW,CACb,aAAcD,GACd,aAAcJ,EAChB,EAEIM,GAAO,EAAGC,GAAS,EAAGC,GAAS,EAC/B3hF,GAAO,SAAU+qB,EAAMF,EAAO,CAChC,IAAIiE,EAAO/D,EAAK,OAASF,EAAM,OAAS,EACpC+2D,EAAQ,IAAI,MAAM9yD,CAAI,EACtB+yD,EAAM,IAAI,MAAM/yD,CAAI,EACpBgzD,EAAQ,SAAUr/E,EAAOsnD,EAAKg4B,EAAM,CACtC,MAAO,CACL,MAAOt/E,EACP,IAAKsnD,EACL,KAAMg4B,CACR,CACF,EACIC,EAAc,SAAUC,EAAQC,EAAMC,EAAQC,EAAMptD,EAAQ,CAC9D,IAAIqtD,GAASC,EAAeL,EAAQC,EAAMC,EAAQC,CAAI,EACtD,GAAIC,KAAW,MAAQA,GAAO,QAAUH,GAAQG,GAAO,OAASH,EAAOE,GAAQC,GAAO,MAAQJ,GAAUI,GAAO,OAASJ,EAASE,EAG/H,QAFI/wF,GAAI6wF,EACJtjF,GAAIwjF,EACD/wF,GAAI8wF,GAAQvjF,GAAIyjF,GACjBhxF,GAAI8wF,GAAQvjF,GAAIyjF,GAAQr3D,EAAK35B,EAAC,IAAMy5B,EAAMlsB,EAAC,GAC7Cq2B,EAAO,KAAK,CACVysD,GACA12D,EAAK35B,EAAC,CACR,CAAC,EACD,EAAEA,GACF,EAAEuN,IAEEujF,EAAOD,EAASG,EAAOD,GACzBntD,EAAO,KAAK,CACV2sD,GACA52D,EAAK35B,EAAC,CACR,CAAC,EACD,EAAEA,KAEF4jC,EAAO,KAAK,CACV0sD,GACA72D,EAAMlsB,EAAC,CACT,CAAC,EACD,EAAEA,QAIH,CACLqjF,EAAYC,EAAQI,GAAO,MAAOF,EAAQE,GAAO,MAAQA,GAAO,KAAMrtD,CAAM,EAC5E,QAASutD,GAAKF,GAAO,MAAOE,GAAKF,GAAO,IAAK,EAAEE,GAC7CvtD,EAAO,KAAK,CACVysD,GACA12D,EAAKw3D,EAAE,CACT,CAAC,EAEHP,EAAYK,GAAO,IAAKH,EAAMG,GAAO,IAAMA,GAAO,KAAMD,EAAMptD,CAAM,CACtE,CACF,EACIwtD,EAAa,SAAU//E,EAAOs/E,EAAMG,EAAME,EAAM,CAElD,QADIr4B,EAAMtnD,EACHsnD,EAAMg4B,EAAOK,GAAQr4B,EAAMm4B,GAAQn3D,EAAKg/B,CAAG,IAAMl/B,EAAMk/B,EAAMg4B,CAAI,GACtE,EAAEh4B,EAEJ,OAAO+3B,EAAMr/E,EAAOsnD,EAAKg4B,CAAI,CAC/B,EACIO,EAAiB,SAAUL,EAAQC,EAAMC,EAAQC,EAAM,CACzD,IAAIzhF,EAAIuhF,EAAOD,EACX/yF,GAAIkzF,EAAOD,EACf,GAAIxhF,IAAM,GAAKzR,KAAM,EACnB,OAAO,KAET,IAAI00D,GAAQjjD,EAAIzR,GACZuzF,GAAMvzF,GAAIyR,EACV0L,IAAUo2E,GAAM,IAAM,EAAIA,GAAMA,GAAM,GAAK,EAC/Cb,EAAM,EAAIv1E,EAAM,EAAI41E,EACpBJ,EAAI,EAAIx1E,EAAM,EAAI61E,EAAO,EACzB,IAAI54E,GAAG8J,GAAGhiB,GAAGrD,GAAGwe,GAChB,IAAKjD,GAAI,EAAGA,IAAK+C,GAAQ,EAAE/C,GAAG,CAC5B,IAAK8J,GAAI,CAAC9J,GAAG8J,IAAK9J,GAAG8J,IAAK,EAAG,CAS3B,IARAhiB,GAAIgiB,GAAI/G,GACJ+G,KAAM,CAAC9J,IAAK8J,KAAM9J,IAAKs4E,EAAMxwF,GAAI,CAAC,EAAIwwF,EAAMxwF,GAAI,CAAC,EACnDwwF,EAAMxwF,EAAC,EAAIwwF,EAAMxwF,GAAI,CAAC,EAEtBwwF,EAAMxwF,EAAC,EAAIwwF,EAAMxwF,GAAI,CAAC,EAAI,EAE5BrD,GAAI6zF,EAAMxwF,EAAC,EACXmb,GAAIxe,GAAIk0F,EAASE,EAAS/uE,GACnBrlB,GAAIm0F,GAAQ31E,GAAI61E,GAAQr3D,EAAKh9B,EAAC,IAAM88B,EAAMte,EAAC,GAChDq1E,EAAMxwF,EAAC,EAAI,EAAErD,GACb,EAAEwe,GAEJ,GAAIq3C,GAAQ,IAAM,GAAKA,GAAQt6C,IAAK8J,IAAKA,IAAKwwC,GAAQt6C,IAChDu4E,EAAIzwF,GAAIwyD,EAAK,GAAKg+B,EAAMxwF,EAAC,EAC3B,OAAOoxF,EAAWX,EAAIzwF,GAAIwyD,EAAK,EAAGxwC,GAAI6uE,EAASE,EAAQD,EAAME,CAAI,CAGvE,CACA,IAAKhvE,GAAIwwC,GAAQt6C,GAAG8J,IAAKwwC,GAAQt6C,GAAG8J,IAAK,EAAG,CAS1C,IARAhiB,GAAIgiB,GAAI/G,GAASu3C,GACbxwC,KAAMwwC,GAAQt6C,IAAK8J,KAAMwwC,GAAQt6C,IAAKu4E,EAAIzwF,GAAI,CAAC,GAAKywF,EAAIzwF,GAAI,CAAC,EAC/DywF,EAAIzwF,EAAC,EAAIywF,EAAIzwF,GAAI,CAAC,EAAI,EAEtBywF,EAAIzwF,EAAC,EAAIywF,EAAIzwF,GAAI,CAAC,EAEpBrD,GAAI8zF,EAAIzwF,EAAC,EAAI,EACbmb,GAAIxe,GAAIk0F,EAASE,EAAS/uE,GACnBrlB,IAAKk0F,GAAU11E,IAAK41E,GAAUp3D,EAAKh9B,EAAC,IAAM88B,EAAMte,EAAC,GACtDs1E,EAAIzwF,EAAC,EAAIrD,KACTwe,KAEF,GAAIq3C,GAAQ,IAAM,GAAK,CAACt6C,IAAK8J,IAAKA,IAAK9J,IACjCu4E,EAAIzwF,EAAC,GAAKwwF,EAAMxwF,GAAIwyD,EAAK,EAC3B,OAAO4+B,EAAWX,EAAIzwF,EAAC,EAAGgiB,GAAI6uE,EAASE,EAAQD,EAAME,CAAI,CAG/D,CACF,CACF,EACIptD,EAAS,CAAC,EACd,OAAAgtD,EAAY,EAAGj3D,EAAK,OAAQ,EAAGF,EAAM,OAAQmK,CAAM,EAC5CA,CACT,EACI0tD,GAAO,CACT,KAAMjB,GACN,OAAQE,GACR,OAAQD,GACR,KAAM1hF,EACR,EAEI2iF,GAAe,SAAU92E,EAAK,CAChC,OAAIiW,GAAS,UAAUjW,CAAG,EACjBA,EAAI,UACFiW,GAAS,OAAOjW,CAAG,EACrBmY,GAAS,UAAUnY,EAAI,KAAM,EAAK,EAChCiW,GAAS,UAAUjW,CAAG,EACxB,OAASA,EAAI,KAAO,MAEtB,EACT,EACI+2E,GAAmB,SAAUz4E,EAAM,CACrC,IAAIE,EAAM9J,EAAMlG,EAMhB,IALAA,EAAYhN,EAAW,SAAS,cAAc,KAAK,EACnDgd,EAAOhd,EAAW,SAAS,uBAAuB,EAC9C8c,IACF9P,EAAU,UAAY8P,GAEjB5J,EAAOlG,EAAU,YACtBgQ,EAAK,YAAY9J,CAAI,EAEvB,OAAO8J,CACT,EACIw4E,GAAW,SAAUh3E,EAAK1B,EAAMhD,EAAO,CACzC,IAAIq0B,EAAWonD,GAAiBz4E,CAAI,EACpC,GAAI0B,EAAI,cAAc,GAAK1E,EAAQ0E,EAAI,WAAW,OAAQ,CACxD,IAAItT,EAASsT,EAAI,WAAW1E,CAAK,EACjC5O,EAAO,WAAW,aAAaijC,EAAUjjC,CAAM,CACjD,MACEsT,EAAI,YAAY2vB,CAAQ,CAE5B,EACIsnD,GAAW,SAAUj3E,EAAK1E,EAAO,CACnC,GAAI0E,EAAI,cAAc,GAAK1E,EAAQ0E,EAAI,WAAW,OAAQ,CACxD,IAAItT,EAASsT,EAAI,WAAW1E,CAAK,EACjC5O,EAAO,WAAW,YAAYA,CAAM,CACtC,CACF,EACIwqF,GAAY,SAAU/iF,EAAM6L,EAAK,CACnC,IAAI1E,EAAQ,EACZ5V,GAAKyO,EAAM,SAAUiwD,EAAQ,CACvBA,EAAO,CAAC,IAAMyyB,GAAK,KACrBv7E,IACS8oD,EAAO,CAAC,IAAMyyB,GAAK,QAC5BG,GAASh3E,EAAKokD,EAAO,CAAC,EAAG9oD,CAAK,EAC9BA,KACS8oD,EAAO,CAAC,IAAMyyB,GAAK,QAC5BI,GAASj3E,EAAK1E,CAAK,CAEvB,CAAC,CACH,EACI67E,GAAS,SAAUn3E,EAAK,CAC1B,OAAOha,GAAOP,GAAI0B,GAAO6Y,EAAI,UAAU,EAAG82E,EAAY,EAAG,SAAUz7E,EAAM,CACvE,OAAOA,EAAK,OAAS,CACvB,CAAC,CACH,EACI+7E,GAAQ,SAAUC,EAAWr3E,EAAK,CACpC,IAAIs3E,EAAmB7xF,GAAI0B,GAAO6Y,EAAI,UAAU,EAAG82E,EAAY,EAC/D,OAAAI,GAAUL,GAAK,KAAKS,EAAkBD,CAAS,EAAGr3E,CAAG,EAC9CA,CACT,EACIu3E,GAAY,CACd,KAAMJ,GACN,MAAOC,EACT,EAEII,GAAoB5sD,GAAK3mC,EAAO,KAAK,CAAC,EACtCwzF,GAAmB,UAAY,CACjC,OAAOD,GAAkB,IAAI,EAAE,WAAW,UAAY,CACpD,IAAIpqF,EAAM5L,EAAW,SAAS,eAAe,mBAAmB,MAAM,EACtE,OAAAg2F,GAAkB,IAAIvzF,EAAO,KAAKmJ,CAAG,CAAC,EAC/BA,CACT,CAAC,CACH,EACIsqF,GAAa,SAAUp5E,EAAM,CAC/B,OAAOA,EAAK,QAAQ,WAAW,IAAM,EACvC,EACIq5E,GAAwB,SAAUN,EAAW,CAC/C,MAAO,CACL,KAAM,aACN,UAAWA,EACX,QAAS,GACT,SAAU,KACV,eAAgB,IAClB,CACF,EACIO,GAAsB,SAAUx3E,EAAS,CAC3C,MAAO,CACL,KAAM,WACN,UAAW,KACX,QAASA,EACT,SAAU,KACV,eAAgB,IAClB,CACF,EACIy3E,GAAmB,SAAU5rF,EAAQ,CACvC,IAAIorF,EAAWj3E,EAAS03E,EACxB,OAAAT,EAAYE,GAAU,KAAKtrF,EAAO,QAAQ,CAAC,EAC3C6rF,EAAmBl0F,GAAKyzF,EAAW,SAAU/4E,EAAM,CACjD,IAAIy5E,EAAUpC,GAAS,aAAa1pF,EAAO,WAAYqS,CAAI,EAC3D,OAAOy5E,EAAQ,OAAS,EAAI,CAACA,CAAO,EAAI,CAAC,CAC3C,CAAC,EACD33E,EAAU03E,EAAiB,KAAK,EAAE,EAC3BJ,GAAWt3E,CAAO,EAAIu3E,GAAsBG,CAAgB,EAAIF,GAAoBx3E,CAAO,CACpG,EACI43E,GAAgB,SAAU/rF,EAAQo7E,EAAO39C,EAAQ,CAC/C29C,EAAM,OAAS,aACjBkQ,GAAU,MAAMlQ,EAAM,UAAWp7E,EAAO,QAAQ,CAAC,EAEjDA,EAAO,WAAWo7E,EAAM,QAAS,CAAE,OAAQ,KAAM,CAAC,EAEpDp7E,EAAO,UAAU,eAAey9B,EAAS29C,EAAM,eAAiBA,EAAM,QAAQ,CAChF,EACI4Q,GAAkB,SAAU5Q,EAAO,CACrC,OAAOA,EAAM,OAAS,aAAeA,EAAM,UAAU,KAAK,EAAE,EAAIA,EAAM,OACxE,EACI6Q,GAAuB,SAAU7Q,EAAO,CAC1C,IAAIrnE,EAAMmG,GAAQ,QAAQ,OAAQsxE,GAAiB,CAAC,EACpD,OAAAjoD,GAAMxvB,EAAKi4E,GAAgB5Q,CAAK,CAAC,EACjC3hF,GAAKimC,GAAc3rB,EAAK,mBAAmB,EAAGsqB,EAAM,EAC7CiF,GAAMvvB,CAAG,CAClB,EACIm4E,GAAkB,SAAUC,EAAQC,EAAQ,CAC9C,OAAOJ,GAAgBG,CAAM,IAAMH,GAAgBI,CAAM,CAC3D,EACIC,GAAyB,SAAUF,EAAQC,EAAQ,CACrD,OAAOH,GAAqBE,CAAM,IAAMF,GAAqBG,CAAM,CACrE,EACIE,GAAS,SAAUH,EAAQC,EAAQ,CACrC,MAAI,CAACD,GAAU,CAACC,EACP,GACEF,GAAgBC,EAAQC,CAAM,EAChC,GAEAC,GAAuBF,EAAQC,CAAM,CAEhD,EACIG,GAAS,CACX,sBAAuBb,GACvB,oBAAqBC,GACrB,iBAAkBC,GAClB,cAAeG,GACf,KAAMO,EACR,EAEA,SAASE,GAAaxsF,EAAQ,CAC5B,IAAItI,EAAO,KAAM2X,EAAQ,EAAGpO,EAAO,CAAC,EAAGwrF,EAAgBC,EAAuBC,EAAQ,EAClFC,EAAa,UAAY,CAC3B,OAAOD,IAAU,CACnB,EACIE,EAAY,SAAUC,EAAQ,CAC5BF,EAAW,IACbl1F,EAAK,OAASo1F,EAElB,EACIC,EAAW,SAAU34E,EAAO,CAC9BpU,EAAO,SAASoU,CAAK,CACvB,EACI44E,EAAwB,SAAU/uF,EAAG,CACvC4uF,EAAU,EAAK,EACfn1F,EAAK,IAAI,CAAC,EAAGuG,CAAC,CAChB,EACIgvF,EAAY,UAAY,CACtBv1F,EAAK,SACPm1F,EAAU,EAAK,EACfn1F,EAAK,IAAI,EAEb,EACAsI,EAAO,GAAG,OAAQ,UAAY,CAC5BtI,EAAK,IAAI,CACX,CAAC,EACDsI,EAAO,GAAG,oBAAqB,SAAU/B,EAAG,CAC1C,IAAI+sE,GAAM/sE,EAAE,QACR+sE,KAAQ,QAAUA,KAAQ,QAAUA,KAAQ,eAC9CiiB,EAAU,EACVv1F,EAAK,aAAa,EAEtB,CAAC,EACDsI,EAAO,GAAG,cAAe,SAAU/B,EAAG,CACpC,IAAI+sE,GAAM/sE,EAAE,QACR+sE,KAAQ,QAAUA,KAAQ,QAAUA,KAAQ,cAC9CgiB,EAAsB/uF,CAAC,CAE3B,CAAC,EACD+B,EAAO,GAAG,wBAAyB,UAAY,CAC7CtI,EAAK,aAAa,CACpB,CAAC,EACDsI,EAAO,GAAG,iCAAkCgtF,CAAqB,EACjEhtF,EAAO,GAAG,UAAWgtF,CAAqB,EAC1ChtF,EAAO,GAAG,QAAS,SAAU/B,EAAG,CAC9B,IAAIm+D,GAAUn+D,EAAE,QACZA,EAAE,mBAAmB,KAGrBm+D,IAAW,IAAMA,IAAW,IAAMA,IAAW,IAAMA,IAAW,IAAMA,KAAY,IAAMn+D,EAAE,WAC1F+uF,EAAsB,EACtBhtF,EAAO,YAAY,IAEjBo8D,KAAY,IAAMA,KAAY,IAChCp8D,EAAO,YAAY,EAEjB0sF,GAAyBh1F,EAAK,QAAU60F,GAAO,KAAKA,GAAO,iBAAiBvsF,CAAM,EAAGiB,EAAK,CAAC,CAAC,IAAM,KAChGjB,EAAO,QAAQ,IAAM,KACvB+sF,EAAS,EAAI,EACb/sF,EAAO,KAAK,SAAU,CACpB,MAAOiB,EAAK,CAAC,EACb,UAAW,IACb,CAAC,GAEHjB,EAAO,KAAK,YAAY,EACxB0sF,EAAwB,GACxB1sF,EAAO,YAAY,GAEvB,CAAC,EACDA,EAAO,GAAG,UAAW,SAAU/B,EAAG,CAChC,IAAIm+D,GAAUn+D,EAAE,QAChB,GAAI,CAAAA,EAAE,mBAAmB,EAGzB,IAAIm+D,IAAW,IAAMA,IAAW,IAAMA,IAAW,IAAMA,IAAW,IAAMA,KAAY,GAAI,CAClF1kE,EAAK,QACPs1F,EAAsB/uF,CAAC,EAEzB,MACF,CACA,IAAIivF,GAASjvF,EAAE,SAAW,CAACA,EAAE,QAAUA,EAAE,SACpCm+D,GAAU,IAAMA,GAAU,KAAOA,KAAY,KAAOA,KAAY,IAAM,CAAC1kE,EAAK,QAAU,CAACw1F,KAC1Fx1F,EAAK,aAAa,EAClBm1F,EAAU,EAAI,EACdn1F,EAAK,IAAI,CAAC,EAAGuG,CAAC,EACdyuF,EAAwB,IAE5B,CAAC,EACD1sF,EAAO,GAAG,YAAa,SAAU/B,EAAG,CAC9BvG,EAAK,QACPs1F,EAAsB/uF,CAAC,CAE3B,CAAC,EACD,IAAIkvF,EAA0B,SAAU9sF,EAAO,CAC7C,OAAOA,EAAM,YAAc,uBAC7B,EACI+sF,EAAuB,SAAU/sF,EAAO,CAC1C,OAAOA,EAAM,YAAc,cAAgBA,EAAM,OAAS,IAC5D,EACA,OAAAL,EAAO,GAAG,QAAS,SAAU/B,EAAG,CAC1BA,EAAE,YAAckvF,EAAwBlvF,CAAC,GAAKmvF,EAAqBnvF,CAAC,IACtE+uF,EAAsB/uF,CAAC,CAE3B,CAAC,EACD+B,EAAO,YAAY,SAAU,GAAI,MAAM,EACvCA,EAAO,YAAY,sBAAuB,GAAI,MAAM,EACpDA,EAAO,GAAG,+BAAgC,SAAU/B,EAAG,CAChDA,EAAE,mBAAmB,GACxB+B,EAAO,YAAY,CAEvB,CAAC,EACDtI,EAAO,CACL,KAAMuJ,EACN,OAAQ,GACR,aAAc,UAAY,CACpB2rF,EAAW,IACbH,EAAiBt+C,GAAY,gBAAgBnuC,EAAO,SAAS,EAEjE,EACA,IAAK,SAAUo7E,EAAO/6E,GAAO,CAC3B,IAAI/G,GACAwrB,GAAW9kB,EAAO,SAClBqtF,GAAWC,GAef,GAdAA,GAAef,GAAO,iBAAiBvsF,CAAM,EAC7Co7E,EAAQA,GAAS,CAAC,EAClBA,EAAQzpE,GAAM,OAAOypE,EAAOkS,EAAY,EACpCV,EAAW,IAAM,IAAS5sF,EAAO,UAGrCqtF,GAAYpsF,EAAKoO,CAAK,EAClBrP,EAAO,KAAK,gBAAiB,CAC7B,MAAOo7E,EACP,UAAWiS,GACX,cAAehtF,EACjB,CAAC,EAAE,mBAAmB,IAGpBgtF,IAAad,GAAO,KAAKc,GAAWjS,CAAK,EAC3C,OAAO,KAKT,GAHIn6E,EAAKoO,CAAK,IACZpO,EAAKoO,CAAK,EAAE,eAAiBo9E,GAE3B3nE,GAAS,yBACP7jB,EAAK,OAAS6jB,GAAS,wBAAyB,CAClD,IAAKxrB,GAAI,EAAGA,GAAI2H,EAAK,OAAS,EAAG3H,KAC/B2H,EAAK3H,EAAC,EAAI2H,EAAK3H,GAAI,CAAC,EAEtB2H,EAAK,SACLoO,EAAQpO,EAAK,MACf,CAEFm6E,EAAM,SAAWjtC,GAAY,gBAAgBnuC,EAAO,SAAS,EACzDqP,EAAQpO,EAAK,OAAS,IACxBA,EAAK,OAASoO,EAAQ,GAExBpO,EAAK,KAAKm6E,CAAK,EACf/rE,EAAQpO,EAAK,OAAS,EACtB,IAAIrL,GAAO,CACT,MAAOwlF,EACP,UAAWiS,GACX,cAAehtF,EACjB,EACA,OAAAL,EAAO,KAAK,UAAWpK,EAAI,EACvByZ,EAAQ,IACV09E,EAAS,EAAI,EACb/sF,EAAO,KAAK,SAAUpK,EAAI,GAErBwlF,CACT,EACA,KAAM,UAAY,CAChB,IAAIA,EACJ,OAAI1jF,EAAK,SACPA,EAAK,IAAI,EACTA,EAAK,OAAS,GACdm1F,EAAU,EAAK,GAEbx9E,EAAQ,IACV+rE,EAAQn6E,EAAK,EAAEoO,CAAK,EACpBk9E,GAAO,cAAcvsF,EAAQo7E,EAAO,EAAI,EACxC2R,EAAS,EAAI,EACb/sF,EAAO,KAAK,OAAQ,CAAE,MAAOo7E,CAAM,CAAC,GAE/BA,CACT,EACA,KAAM,UAAY,CAChB,IAAIA,EACJ,OAAI/rE,EAAQpO,EAAK,OAAS,IACxBm6E,EAAQn6E,EAAK,EAAEoO,CAAK,EACpBk9E,GAAO,cAAcvsF,EAAQo7E,EAAO,EAAK,EACzC2R,EAAS,EAAI,EACb/sF,EAAO,KAAK,OAAQ,CAAE,MAAOo7E,CAAM,CAAC,GAE/BA,CACT,EACA,MAAO,UAAY,CACjBn6E,EAAO,CAAC,EACRoO,EAAQ,EACR3X,EAAK,OAAS,GACdA,EAAK,KAAOuJ,EACZjB,EAAO,KAAK,YAAY,CAC1B,EACA,QAAS,UAAY,CACnB,OAAOqP,EAAQ,GAAK3X,EAAK,QAAUuJ,EAAK,CAAC,GAAK,CAACsrF,GAAO,KAAKA,GAAO,iBAAiBvsF,CAAM,EAAGiB,EAAK,CAAC,CAAC,CACrG,EACA,QAAS,UAAY,CACnB,OAAOoO,EAAQpO,EAAK,OAAS,GAAK,CAACvJ,EAAK,MAC1C,EACA,SAAU,SAAUwH,EAAU,CAC5B,OAAA+tF,EAAU,EACVv1F,EAAK,aAAa,EAClBA,EAAK,OAAOwH,CAAQ,EACbxH,EAAK,IAAI,CAClB,EACA,OAAQ,SAAUwH,EAAU,CAC1B,GAAI,CACFytF,IACAztF,EAAS,CACX,QAAE,CACAytF,GACF,CACF,EACA,MAAO,SAAUY,EAAWC,GAAW,CACrC,IAAIH,GAAWlgD,GACXz1C,EAAK,SAAS61F,CAAS,IACzBpgD,GAAWlsC,EAAKoO,CAAK,EAAE,SACvBg+E,GAAYpsF,EAAKoO,EAAQ,CAAC,EAC1Bk9E,GAAO,cAAcvsF,EAAQqtF,GAAW,EAAI,EACxC31F,EAAK,SAAS81F,EAAS,IACzBvsF,EAAKoO,EAAQ,CAAC,EAAE,eAAiB89B,IAGvC,CACF,EACOz1C,CACT,CAEA,IAAI+1F,GAAmB,CAAC,EAAGC,GAAW19E,GAAS,OAAQ29E,GAAS39E,GAAS,KACrE49E,GAAqB,SAAUlyF,EAAMoY,EAAM,CAC7C,IAAIuB,EAAQo4E,GAAiB/xF,CAAI,EAC5B2Z,IACHo4E,GAAiB/xF,CAAI,EAAI2Z,EAAQ,CAAC,GAEpCo4E,GAAiB/xF,CAAI,EAAE,KAAKoY,CAAI,CAClC,EACI+5E,GAAc,SAAUnyF,EAAMsE,EAAQ,CACxC2tF,GAAOF,GAAiB/xF,CAAI,EAAG,SAAUoY,EAAM,CAC7CA,EAAK9T,CAAM,CACb,CAAC,CACH,EACA4tF,GAAmB,MAAO,SAAU5tF,EAAQ,CAC1C,IAAIugC,EAAMvgC,EAAO,UAAU,OAAO,EAC9B8tF,EAAO7mE,EACP8mE,EAAgB,SAAUC,EAAK,CACjC,OAAOF,EAAME,EAAI,eAAe,GAAKh+E,GAAS,QAAQiX,EAAQ+mE,EAAI,eAAe,IAAM,EACzF,EACIC,EAAU,SAAUC,EAAMC,EAAM,CAClCv7E,GAASu7E,CAAI,EAAE,OAAO,EACtBv7E,GAASs7E,CAAI,EAAE,OAAO,UAAU,EAAE,OAAOC,EAAK,UAAU,CAC1D,EACAL,EAAQ9jE,GAAS,eAAe,KAAK,EAChCuW,EAAI,YACPtZ,EAASjnB,EAAO,UAAU,kBAAkB,EAC5C2tF,GAAOD,GAASA,GAASzmE,EAAQ6mE,CAAK,EAAGC,CAAa,EAAG,SAAUC,EAAK,CACtEC,EAAQD,EAAI,gBAAiBA,CAAG,CAClC,CAAC,EAEL,CAAC,EACD,IAAII,GAAQ,CAAE,YAAaP,EAAY,EAEnCQ,GAAc,qBACdC,GAAS38E,GAAM,KACf48E,GAASr2C,GAAY,KACrBs2C,GAAgB,SAAU/lF,EAAM,CAClC,MAAO,YAAY,KAAKA,EAAK,QAAQ,CACvC,EACIgmF,GAAwB,SAAU3yE,EAAKrT,EAAME,EAAQ,CACvD,OAAOmT,EAAI,UAAUrT,EAAME,CAAM,GAAKF,IAASE,GAAU,CAACmT,EAAI,QAAQnT,CAAM,CAC9E,EACI+lF,GAAe,SAAUj3C,EAAIlX,EAAK51B,EAAO,CAC3C,IAAIpI,EAAWgS,EAAQo6E,EACvB,OAAApsF,EAAYg+B,EAAI51B,EAAQ,iBAAmB,cAAc,EACzD4J,EAASgsB,EAAI51B,EAAQ,cAAgB,WAAW,EAC5Cqf,GAAS,UAAUznB,CAAS,IAC9BosF,EAAUpsF,EAAU,WAAW,OAAS,EACpC,CAACoI,GAAS4J,GACZA,IAEFhS,EAAYA,EAAU,WAAWgS,EAASo6E,EAAUA,EAAUp6E,CAAM,GAElEyV,GAAS,OAAOznB,CAAS,GAAKoI,GAAS4J,GAAUhS,EAAU,UAAU,SACvEA,EAAY,IAAImkB,GAAWnkB,EAAWk1C,EAAG,QAAQ,CAAC,EAAE,KAAK,GAAKl1C,GAE5DynB,GAAS,OAAOznB,CAAS,GAAK,CAACoI,GAAS4J,IAAW,IACrDhS,EAAY,IAAImkB,GAAWnkB,EAAWk1C,EAAG,QAAQ,CAAC,EAAE,KAAK,GAAKl1C,GAEzDA,CACT,EACIqsF,GAAS,SAAU9yE,EAAKrT,EAAM/M,EAAMygB,EAAO,CAC7C,IAAIpJ,EAAU+I,EAAI,OAAOpgB,EAAMygB,CAAK,EACpC,OAAA1T,EAAK,WAAW,aAAasK,EAAStK,CAAI,EAC1CsK,EAAQ,YAAYtK,CAAI,EACjBsK,CACT,EACI87E,GAAmB,SAAU/yE,EAAKrT,EAAMytC,EAAMx6C,EAAMygB,EAAO,CAC7D,IAAIxR,EAAQuP,GAAQ,QAAQzR,CAAI,EAC5BsK,EAAUmH,GAAQ,QAAQ4B,EAAI,OAAOpgB,EAAMygB,CAAK,CAAC,EACjD29B,EAAW5D,EAAOj3B,GAAatU,CAAK,EAAIqU,GAAarU,CAAK,EAC9D,OAAAszB,GAASlrB,EAAS+mC,CAAQ,EACtB5D,GACFzY,GAAO9yB,EAAOoI,CAAO,EACrB8qB,GAAQ9qB,EAASpI,CAAK,IAEtBgzB,GAAMhzB,EAAOoI,CAAO,EACpB6qB,GAAO7qB,EAASpI,CAAK,GAEhBoI,EAAQ,IAAI,CACrB,EACI+7E,GAAc,SAAUhzE,EAAKrT,EAAMywC,EAAQ,CAI7C,GAHIq1C,GAAO9lF,EAAMywC,EAAO,MAAM,GAG1Bq1C,GAAO9lF,EAAMywC,EAAO,KAAK,EAC3B,MAAO,GAET,GAAIA,EAAO,SACT,OAAOlvB,GAAS,UAAUvhB,CAAI,GAAKqT,EAAI,GAAGrT,EAAMywC,EAAO,QAAQ,CAEnE,EACI61C,GAAyB,SAAUtmF,EAAMywC,EAAQ,CACnD,OAAOA,EAAO,OAASzwC,EAAK,UAAY,GAC1C,EACIumF,GAAS,SAAUlzE,EAAKrT,EAAMytC,EAAMqB,EAAK,CAC3C,OAAA9uC,EAAOyvC,GAAY,wBAAwBzvC,EAAMytC,EAAMqB,CAAG,EACnD,CAAC9uC,GAASA,EAAK,WAAa,MAAQqT,EAAI,QAAQrT,CAAI,CAC7D,EACIwmF,GAAe,SAAUx3C,EAAIhvC,EAAMywC,EAAQ,CAC7C,IAAI1U,EAAa/7B,EAAK,WAClBymF,EACApzE,EAAM27B,EAAG,IAAKmlC,EAAkBnlC,EAAG,SAAS,kBAC5CyB,EAAO,QACJ0jC,EAUCp4C,IAAe1oB,EAAI,QAAQ,IACzB,CAACo9B,EAAO,YAAc,CAACq1C,GAAO9lF,EAAMywC,EAAO,UAAU,IACvDo1C,GAAO38E,GAAM,KAAKlJ,EAAK,UAAU,EAAG,SAAUA,EAAM,CAC9CyvC,GAAY,QAAQT,EAAImlC,EAAiBn0E,EAAK,SAAS,YAAY,CAAC,EACjEymF,EAIHA,EAAa,YAAYzmF,CAAI,GAH7BymF,EAAeN,GAAO9yE,EAAKrT,EAAMm0E,CAAe,EAChD9gE,EAAI,WAAWozE,EAAcz3C,EAAG,SAAS,uBAAuB,GAKlEy3C,EAAe,CAEnB,CAAC,EAtBDpzE,EAAI,QAAQrT,CAAI,GAAK,CAACqT,EAAI,QAAQ0oB,CAAU,IAC1C,CAACwqD,GAAOlzE,EAAKrT,EAAM,EAAK,GAAK,CAACumF,GAAOlzE,EAAKrT,EAAK,WAAY,GAAM,CAAC,GACpEA,EAAK,aAAaqT,EAAI,OAAO,IAAI,EAAGrT,EAAK,UAAU,EAEjD,CAACumF,GAAOlzE,EAAKrT,EAAM,EAAI,GAAK,CAACumF,GAAOlzE,EAAKrT,EAAK,UAAW,GAAO,CAAC,GACnEA,EAAK,YAAYqT,EAAI,OAAO,IAAI,CAAC,IAsBrC,EAAAo9B,EAAO,UAAYA,EAAO,QAAU,CAACq1C,GAAOr1C,EAAO,OAAQzwC,CAAI,IAGnEqT,EAAI,OAAOrT,EAAM,CAAC,CACpB,EACI0mF,GAAe,SAAU13C,EAAIyB,EAAQvB,EAAMlvC,EAAM2mF,EAAa,CAChE,IAAI91F,EAAG6iB,EAAOkzE,EACVvzE,EAAM27B,EAAG,IACb,GAAI,CAACq3C,GAAYhzE,EAAKrT,EAAMywC,CAAM,GAAK,CAAC61C,GAAuBtmF,EAAMywC,CAAM,EACzE,MAAO,GAET,GAAIA,EAAO,SAAW,MAuDpB,IAtDAo1C,GAAOp1C,EAAO,OAAQ,SAAUnjD,EAAO2F,EAAM,CAC3C3F,EAAQmiD,GAAY,oBAAoBp8B,EAAKo8B,GAAY,YAAYniD,EAAO4hD,CAAI,EAAGj8C,CAAI,EACnF,OAAOA,GAAS,WAClBA,EAAO3F,EACPq5F,EAAc,IAEZl2C,EAAO,gBAAmB,CAACk2C,GAAeb,GAAOr2C,GAAY,SAASp8B,EAAKszE,EAAa1zF,CAAI,EAAG3F,CAAK,IACtG+lB,EAAI,SAASrT,EAAM/M,EAAM,EAAE,EAE7B2zF,EAAiB,CACnB,CAAC,EACGA,GAAkBvzE,EAAI,UAAUrT,EAAM,OAAO,IAAM,KACrDA,EAAK,gBAAgB,OAAO,EAC5BA,EAAK,gBAAgB,gBAAgB,GAEvC6lF,GAAOp1C,EAAO,WAAY,SAAUnjD,EAAO2F,EAAM,CAC/C,IAAI4zF,EAMJ,GALAv5F,EAAQmiD,GAAY,YAAYniD,EAAO4hD,CAAI,EACvC,OAAOj8C,GAAS,WAClBA,EAAO3F,EACPq5F,EAAc,GAEZ,CAACA,GAAeb,GAAOzyE,EAAI,UAAUszE,EAAa1zF,CAAI,EAAG3F,CAAK,EAAG,CACnE,GAAI2F,IAAS,UACX3F,EAAQ+lB,EAAI,UAAUrT,EAAM/M,CAAI,EAC5B3F,IACFu5F,EAAW,GACXhB,GAAOv4F,EAAM,MAAM,KAAK,EAAG,SAAU2iC,EAAK,CACpC,WAAW,KAAKA,CAAG,IACrB42D,IAAaA,EAAW,IAAM,IAAM52D,EAExC,CAAC,EACG42D,IAAU,CACZxzE,EAAI,UAAUrT,EAAM/M,EAAM4zF,CAAQ,EAClC,MACF,CAGA5zF,IAAS,SACX+M,EAAK,gBAAgB,WAAW,EAE9B4lF,GAAY,KAAK3yF,CAAI,GACvB+M,EAAK,gBAAgB,YAAc/M,CAAI,EAEzC+M,EAAK,gBAAgB/M,CAAI,CAC3B,CACF,CAAC,EACD4yF,GAAOp1C,EAAO,QAAS,SAAUnjD,EAAO,CACtCA,EAAQmiD,GAAY,YAAYniD,EAAO4hD,CAAI,GACvC,CAACy3C,GAAetzE,EAAI,SAASszE,EAAar5F,CAAK,IACjD+lB,EAAI,YAAYrT,EAAM1S,CAAK,CAE/B,CAAC,EACDomB,EAAQL,EAAI,WAAWrT,CAAI,EACtBnP,EAAI,EAAGA,EAAI6iB,EAAM,OAAQ7iB,IAAK,CACjC,IAAI4vB,EAAW/M,EAAM7iB,CAAC,EAAE,SACxB,GAAI4vB,EAAS,QAAQ,GAAG,IAAM,GAAKA,EAAS,QAAQ,OAAO,IAAM,EAC/D,MAAO,EAEX,CAEF,GAAIgwB,EAAO,SAAW,OACpB,OAAA+1C,GAAax3C,EAAIhvC,EAAMywC,CAAM,EACtB,EAEX,EACIq2C,GAAiB,SAAUvvF,EAAQuC,EAAW7G,EAAMi8C,EAAMsiB,EAAS,CACrE,IAAIu1B,EACJ,OAAAlB,GAAOp2C,GAAY,WAAWl4C,EAAO,IAAKuC,EAAU,UAAU,EAAE,QAAQ,EAAG,SAAUoG,EAAQ,CAC3F,IAAIuwC,EACA,CAACs2C,GAAc7mF,EAAO,KAAO,UAAYA,EAAO,KAAO,SACzDuwC,EAASqhB,GAAY,UAAUv6D,EAAQ2I,EAAQjN,EAAMi8C,EAAMsiB,CAAO,EAC9D/gB,GAAUA,EAAO,QAAU,KAC7Bs2C,EAAa7mF,GAGnB,CAAC,EACM6mF,CACT,EACIC,GAAe,SAAUzvF,EAAQ25D,EAAY61B,EAAYjtF,EAAW9B,EAAQisB,EAAOwsB,EAAQvB,EAAM,CACnG,IAAIhvC,EAAQstB,EAAOy5D,EAAWC,EAAYr2F,EAAGs2F,EACzC9zE,EAAM9b,EAAO,IACjB,GAAIwvF,EAAY,CAEd,IADAI,EAAmBJ,EAAW,WACzB7mF,EAASpG,EAAU,WAAYoG,GAAUA,IAAWinF,EAAkBjnF,EAASA,EAAO,WAAY,CAErG,IADAstB,EAAQna,EAAI,MAAMnT,EAAQ,EAAK,EAC1BrP,EAAI,EAAGA,EAAIqgE,EAAW,OAAQrgE,IACjC,GAAI61F,GAAanvF,EAAQ25D,EAAWrgE,CAAC,EAAGq+C,EAAM1hB,EAAOA,CAAK,EAAG,CAC3DA,EAAQ,EACR,KACF,CAEEA,IACEy5D,GACFz5D,EAAM,YAAYy5D,CAAS,EAExBC,IACHA,EAAa15D,GAEfy5D,EAAYz5D,EAEhB,CACIvJ,IAAU,CAACwsB,EAAO,OAAS,CAACp9B,EAAI,QAAQ0zE,CAAU,KACpDjtF,EAAYuZ,EAAI,MAAM0zE,EAAYjtF,CAAS,GAEzCmtF,IACFjvF,EAAO,WAAW,aAAaivF,EAAWjvF,CAAM,EAChDkvF,EAAW,YAAYlvF,CAAM,EAEjC,CACA,OAAO8B,CACT,EACIstF,GAAW,SAAUp4C,EAAI/7C,EAAMi8C,EAAMlvC,EAAMwxD,EAAS,CACtD,IAAIN,EAAaliB,EAAG,UAAU,IAAI/7C,CAAI,EAAGw9C,EAASygB,EAAW,CAAC,EAC1DxsB,EAAU5M,EAAKljC,EAAkB,GACjCye,EAAM27B,EAAG,IACTvK,EAAYuK,EAAG,UACfq4C,EAAoB,SAAUvtF,GAAW,CAC3C,IAAIitF,GAAaD,GAAe93C,EAAIl1C,GAAW7G,EAAMi8C,EAAMsiB,CAAO,EAClE,OAAOw1B,GAAah4C,EAAIkiB,EAAY61B,GAAYjtF,GAAWA,GAAW,GAAM22C,EAAQvB,CAAI,CAC1F,EACIo4C,EAAuB,SAAUtnF,GAAM,CACzC,OAAOyuC,GAAU,eAAezuC,EAAI,GAAKuhB,GAAS,UAAUvhB,EAAI,IAAMA,GAAK,KAAO,UAAYA,GAAK,KAAO,OAC5G,EACI+X,EAAU,SAAU/X,GAAM,CAC5B,IAAIzF,GAAU1J,GAAGgJ,GAAG0tF,GAAqBxmE,GAOzC,GANIQ,GAAS,UAAUvhB,EAAI,GAAKqT,EAAI,mBAAmBrT,EAAI,IACzDunF,GAAsB3yF,EACtBA,EAAkBye,EAAI,mBAAmBrT,EAAI,IAAM,OACnD+gB,GAA0B,IAE5BxmB,GAAW2O,GAAM,KAAKlJ,GAAK,UAAU,EACjCpL,GAAmB,CAACmsB,GACtB,IAAKlwB,GAAI,EAAGgJ,GAAIq3D,EAAW,OAAQrgE,GAAIgJ,IACjC,CAAA6sF,GAAa13C,EAAIkiB,EAAWrgE,EAAC,EAAGq+C,EAAMlvC,GAAMA,EAAI,EADZnP,KACxC,CAKJ,GAAI4/C,EAAO,MACLl2C,GAAS,OAAQ,CACnB,IAAK1J,GAAI,EAAGgJ,GAAIU,GAAS,OAAQ1J,GAAIgJ,GAAGhJ,KACtCknB,EAAQxd,GAAS1J,EAAC,CAAC,EAEjBkwB,KACFnsB,EAAkB2yF,GAEtB,CAEJ,EACI3xD,GAAS,SAAU1zB,GAAO,CAC5B,IAAIlC,GAAOqT,EAAI,IAAInR,GAAQ,SAAW,MAAM,EACxCwE,GAAM1G,GAAKkC,GAAQ,aAAe,WAAW,EACjD,OAAIolF,EAAqB5gF,EAAG,IAC1BA,GAAMA,GAAIxE,GAAQ,aAAe,WAAW,GAE1Cqf,GAAS,OAAO7a,EAAG,GAAKA,GAAI,KAAK,SAAW,IAC9CA,GAAMxE,GAAQlC,GAAK,iBAAmBA,GAAK,YAAcA,GAAK,aAAeA,GAAK,iBAEpFqT,EAAI,OAAOrT,GAAM,EAAI,EACd0G,EACT,EACI8gF,GAAiB,SAAU1vD,GAAK,CAClC,IAAIsH,GAAgB4Q,GAChBy3C,GAA0B3vD,GAAI,wBAElC,GADAA,GAAMkZ,GAAY,UAAUhC,EAAIlX,GAAKo5B,EAAY,EAAI,EACjDzgB,EAAO,MAAO,CAIhB,GAHA3Y,GAAMm6B,GAAW,MAAMn6B,EAAG,EAC1BsH,GAAiB6mD,GAAaj3C,EAAIlX,GAAK,EAAI,EAC3CkY,GAAei2C,GAAaj3C,EAAIlX,EAAG,EAC/BsH,KAAmB4Q,GAAc,CAWnC,GAVI,eAAe,KAAK5Q,GAAe,QAAQ,GAAKA,GAAe,aAC7DA,GAAe,WAAa,KAC9BA,GAAiBA,GAAe,WAAW,YAAcA,GAEzDA,GAAiBA,GAAe,YAAcA,IAG9CqoD,IAA2B,wBAAwB,KAAKA,GAAwB,QAAQ,GAAK1B,GAAc/1C,EAAY,GAAKA,GAAa,aAC3IA,GAAeA,GAAa,YAAcA,IAExCg2C,GAAsB3yE,EAAK+rB,GAAgB4Q,EAAY,EAAG,CAC5D,IAAIz3B,GAAShpB,EAAO,KAAK6vC,GAAe,UAAU,EAAE,MAAMA,EAAc,EACxEioD,EAAkBjB,GAAiB/yE,EAAKkF,GAAQ,GAAM,OAAQ,CAC5D,GAAM,SACN,gBAAiB,UACnB,CAAC,CAAC,EACFqd,GAAO,EAAI,EACX,MACF,CACA,GAAIowD,GAAsB3yE,EAAK28B,GAAc5Q,EAAc,EAAG,CAC5D,IAAI7mB,GAAShpB,EAAO,KAAKygD,GAAa,SAAS,EAAE,MAAMA,EAAY,EACnEq3C,EAAkBjB,GAAiB/yE,EAAKkF,GAAQ,GAAO,OAAQ,CAC7D,GAAM,OACN,gBAAiB,UACnB,CAAC,CAAC,EACFqd,GAAO,EAAK,EACZ,MACF,CACAwJ,GAAiB+mD,GAAO9yE,EAAK+rB,GAAgB,OAAQ,CACnD,GAAM,SACN,gBAAiB,UACnB,CAAC,EACD4Q,GAAem2C,GAAO9yE,EAAK28B,GAAc,OAAQ,CAC/C,GAAM,OACN,gBAAiB,UACnB,CAAC,EACDq3C,EAAkBjoD,EAAc,EAChCioD,EAAkBr3C,EAAY,EAC9B5Q,GAAiBxJ,GAAO,EAAI,EAC5Boa,GAAepa,GAAO,CACxB,MACEwJ,GAAiB4Q,GAAeq3C,EAAkBjoD,EAAc,EAElEtH,GAAI,eAAiBsH,GAAe,WAAaA,GAAe,WAAaA,GAC7EtH,GAAI,YAAczkB,EAAI,UAAU+rB,EAAc,EAC9CtH,GAAI,aAAekY,GAAa,WAAaA,GAAa,WAAaA,GACvElY,GAAI,UAAYzkB,EAAI,UAAU28B,EAAY,EAAI,CAChD,CACA2B,GAAU,KAAKt+B,EAAKykB,GAAK,SAAU1sB,GAAO,CACxCy6E,GAAOz6E,GAAO,SAAUpL,GAAM,CAC5B+X,EAAQ/X,EAAI,EACRuhB,GAAS,UAAUvhB,EAAI,GAAKgvC,EAAG,IAAI,SAAShvC,GAAM,iBAAiB,IAAM,aAAeA,GAAK,YAAcyvC,GAAY,kBAAkBp8B,EAAKrT,GAAK,UAAU,IAAM,aACrK0mF,GAAa13C,EAAI,CACf,KAAM,GACN,MAAO,GACP,OAAQ,OACR,OAAQ,CAAE,eAAgB,WAAY,CACxC,EAAG,KAAMhvC,EAAI,CAEjB,CAAC,CACH,CAAC,CACH,EACA,GAAIA,EAAM,CACJA,EAAK,UACP83B,EAAMzkB,EAAI,UAAU,EACpBykB,EAAI,eAAe93B,CAAI,EACvB83B,EAAI,YAAY93B,CAAI,EACpBwnF,GAAe1vD,CAAG,GAElB0vD,GAAexnF,CAAI,EAErB,MACF,CACA,GAAIqT,EAAI,mBAAmBoxB,EAAU,QAAQ,CAAC,IAAM,QAAS,CAC3DzkC,EAAOykC,EAAU,QAAQ,EACzB,QAAS5zC,GAAI,EAAGgJ,GAAIq3D,EAAW,OAAQrgE,GAAIgJ,IACrC,EAAAq3D,EAAWrgE,EAAC,EAAE,iBACZ61F,GAAa13C,EAAIkiB,EAAWrgE,EAAC,EAAGq+C,EAAMlvC,EAAMA,CAAI,GAFVnP,KAC5C,CAMF,MACF,CACI,CAAC4zC,EAAU,YAAY,GAAK,CAACgM,EAAO,QAAUp9B,EAAI,OAAO,6CAA6C,EAAE,QAC1GqxB,EAAWgB,GAAY,sBAAsBsJ,EAAG,UAAW,EAAI,EAC/Dw4C,GAAe/iD,EAAU,OAAO,CAAC,EACjCA,EAAU,eAAeC,CAAQ,EAC7B+L,EAAO,QAAUqhB,GAAY,MAAM9iB,EAAI/7C,EAAMi8C,EAAMzK,EAAU,SAAS,CAAC,GACzEgL,GAAY,UAAUp8B,EAAKoxB,EAAWA,EAAU,OAAO,CAAC,EAE1DuK,EAAG,YAAY,GAEfskB,GAAkBtkB,EAAI/7C,EAAMi8C,EAAMsiB,CAAO,CAE7C,EACIk2B,GAAe,CACjB,aAAchB,GACd,OAAQU,EACV,EAEIO,GAASz+E,GAAM,KACf0+E,GAAgB,SAAU5nF,EAAM,CAClC,OAAOA,GAAQA,EAAK,WAAa,GAAK,CAACyuC,GAAU,eAAezuC,CAAI,GAAK,CAAC4lC,GAAY5lC,CAAI,GAAK,CAACuhB,GAAS,QAAQvhB,CAAI,CACvH,EACI6nF,GAAqB,SAAU7nF,EAAMsM,EAAa,CACpD,IAAID,EACJ,IAAKA,EAAUrM,EAAMqM,EAASA,EAAUA,EAAQC,CAAW,EAAG,CAC5D,GAAID,EAAQ,WAAa,GAAKA,EAAQ,UAAU,SAAW,EACzD,OAAOrM,EAET,GAAIqM,EAAQ,WAAa,GAAK,CAACoiC,GAAU,eAAepiC,CAAO,EAC7D,OAAOA,CAEX,CACA,OAAOrM,CACT,EACI8nF,GAAqB,SAAUz0E,EAAKgmB,EAAMoU,EAAM,CAClD,IAAIphC,EAAS07E,EACTC,EAAe,IAAIhyC,GAAa3iC,CAAG,EACvC,GAAIgmB,GAAQoU,IACVpU,EAAOwuD,GAAmBxuD,EAAM,iBAAiB,EACjDoU,EAAOo6C,GAAmBp6C,EAAM,aAAa,EACzCu6C,EAAa,QAAQ3uD,EAAMoU,CAAI,GAAG,CACpC,IAAKphC,EAAUgtB,EAAK,YAAahtB,GAAWA,IAAYohC,GACtDs6C,EAAa17E,EACbA,EAAUA,EAAQ,YAClBgtB,EAAK,YAAY0uD,CAAU,EAE7B,OAAA10E,EAAI,OAAOo6B,CAAI,EACfvkC,GAAM,KAAKA,GAAM,KAAKukC,EAAK,UAAU,EAAG,SAAUztC,EAAM,CACtDq5B,EAAK,YAAYr5B,CAAI,CACvB,CAAC,EACMq5B,CACT,CAEF,OAAOoU,CACT,EACIw6C,GAAuB,SAAUjoF,EAAM1O,EAAQymB,EAAS,CAC1D4vE,GAAO3nF,EAAK,WAAY,SAAUA,EAAM,CAClC4nF,GAAc5nF,CAAI,IAChB1O,EAAO0O,CAAI,GACb+X,EAAQ/X,CAAI,EAEVA,EAAK,cAAc,GACrBioF,GAAqBjoF,EAAM1O,EAAQymB,CAAO,EAGhD,CAAC,CACH,EACImwE,GAAW,SAAU70E,EAAKpgB,EAAM,CAClC,OAAOxF,EAAM,SAAUwF,EAAM+M,EAAM,CACjC,MAAO,CAAC,EAAEA,GAAQyvC,GAAY,SAASp8B,EAAKrT,EAAM/M,CAAI,EACxD,EAAGA,CAAI,CACT,EACIk1F,GAAa,SAAU90E,EAAKpgB,EAAM3F,EAAO,CAC3C,OAAOG,EAAM,SAAUwF,EAAM3F,EAAO0S,EAAM,CACxCqT,EAAI,SAASrT,EAAM/M,EAAM3F,CAAK,EAC1B0S,EAAK,aAAa,OAAO,IAAM,IACjCA,EAAK,gBAAgB,OAAO,EAE9BooF,GAAgB/0E,EAAKrT,CAAI,CAC3B,EAAG/M,EAAM3F,CAAK,CAChB,EACI86F,GAAkB,SAAU/0E,EAAKrT,EAAM,CACrCA,EAAK,WAAa,QAAUqT,EAAI,WAAWrT,CAAI,EAAE,SAAW,GAC9DqT,EAAI,OAAOrT,EAAM,EAAI,CAEzB,EACIqoF,GAA2B,SAAUh1E,EAAKrT,EAAM,CAClD,IAAIsoF,EACAtoF,EAAK,WAAa,GAAKA,EAAK,YAAcA,EAAK,WAAW,WAAa,IACzEsoF,EAAiB74C,GAAY,kBAAkBp8B,EAAKrT,EAAK,UAAU,EAC/DqT,EAAI,SAASrT,EAAM,OAAO,GAAKsoF,EACjCj1E,EAAI,SAASrT,EAAM,kBAAmBsoF,CAAc,EAC3Cj1E,EAAI,SAASrT,EAAM,iBAAiB,IAAMsoF,GACnDj1E,EAAI,SAASrT,EAAM,kBAAmB,IAAI,EAGhD,EACIuoF,GAAyB,SAAUl1E,EAAKo9B,EAAQvB,EAAMlvC,EAAM,EAC1DywC,EAAO,OAAO,OAASA,EAAO,OAAO,kBACvCvnC,GAAM,KAAKlJ,EAAMvS,EAAM46F,GAA0Bh1E,CAAG,EAAG,YAAY,EACnEg1E,GAAyBh1E,EAAKrT,CAAI,EAEtC,EACIwoF,GAAkC,SAAUn1E,EAAKo9B,EAAQvB,EAAMlvC,EAAM,CACnEywC,EAAO,QAAUA,EAAO,OAAO,iBACjCw3C,GAAqBjoF,EAAMkoF,GAAS70E,EAAK,UAAU,EAAG80E,GAAW90E,EAAK,kBAAmBo8B,GAAY,YAAYgB,EAAO,OAAO,gBAAiBvB,CAAI,CAAC,CAAC,CAE1J,EACIu5C,GAAc,SAAUp1E,EAAKo9B,EAAQvB,EAAMlvC,EAAM,EAC/CywC,EAAO,SAAW,OAASA,EAAO,SAAW,SAC/Cw3C,GAAqBjoF,EAAMkoF,GAAS70E,EAAK,UAAU,EAAG80E,GAAW90E,EAAK,WAAY,EAAE,CAAC,EACrFA,EAAI,OAAOA,EAAI,OAAOo9B,EAAO,SAAW,MAAQ,MAAQ,MAAOzwC,CAAI,EAAG,EAAI,EAE9E,EACI0oF,GAAgB,SAAUr1E,EAAKo9B,EAAQvB,EAAMlvC,EAAM,CACjDA,GAAQywC,EAAO,iBAAmB,KACpCzwC,EAAO8nF,GAAmBz0E,EAAKo8B,GAAY,wBAAwBzvC,CAAI,EAAGA,CAAI,EAC9EA,EAAO8nF,GAAmBz0E,EAAKrT,EAAMyvC,GAAY,wBAAwBzvC,EAAM,EAAI,CAAC,EAExF,EACI2oF,GAAmB,SAAUt1E,EAAKo9B,EAAQzwC,EAAM,CAClD,GAAIywC,EAAO,mBAAoB,CAC7B,IAAInyC,EAAWmyC,EAAO,MAAQ,WAAa,IAC3Ck3C,GAAOt0E,EAAI,OAAO/U,EAAU0B,CAAI,EAAG,SAAUA,EAAM,CAC7C4nF,GAAc5nF,CAAI,GACpB2nF,GAAOl3C,EAAO,OAAQ,SAAUnjD,EAAO2F,EAAM,CAC3CogB,EAAI,SAASrT,EAAM/M,EAAM,EAAE,CAC7B,CAAC,CAEL,CAAC,CACH,CACF,EACI21F,GAAoB,SAAUrxF,EAAQ25D,EAAYhiB,EAAMlvC,EAAM,CAChE2nF,GAAOz2B,EAAY,SAAUzgB,EAAQ,CACnCk3C,GAAOpwF,EAAO,IAAI,OAAOk5C,EAAO,OAAQzwC,CAAI,EAAG,SAAUyW,EAAO,CACzDmxE,GAAcnxE,CAAK,GAGxBixE,GAAa,aAAanwF,EAAQk5C,EAAQvB,EAAMz4B,EAAOg6B,EAAO,MAAQh6B,EAAQ,IAAI,CACpF,CAAC,EACDkyE,GAAiBpxF,EAAO,IAAKk5C,EAAQzwC,CAAI,CAC3C,CAAC,CACH,EACI6oF,GAAmB,SAAUtxF,EAAQk5C,EAAQx9C,EAAMi8C,EAAMlvC,EAAM,CAC7D8xD,GAAY,UAAUv6D,EAAQyI,EAAK,WAAY/M,EAAMi8C,CAAI,GACvDw4C,GAAa,aAAanwF,EAAQk5C,EAAQvB,EAAMlvC,CAAI,GAItDywC,EAAO,oBACTl5C,EAAO,IAAI,UAAUyI,EAAK,WAAY,SAAUE,EAAQ,CACtD,GAAI4xD,GAAY,UAAUv6D,EAAQ2I,EAAQjN,EAAMi8C,CAAI,EAClD,OAAAw4C,GAAa,aAAanwF,EAAQk5C,EAAQvB,EAAMlvC,CAAI,EAC7C,EAEX,CAAC,CAEL,EACI8oF,GAAe,CACjB,kBAAmBF,GACnB,uBAAwBL,GACxB,gCAAiCC,GACjC,YAAaC,GACb,cAAeC,GACf,iBAAkBG,EACpB,EAEIE,GAAS7/E,GAAM,KACf8/E,GAAkB,SAAUhpF,EAAM,CACpC,OAAOA,GAAQA,EAAK,WAAa,GAAK,CAACyuC,GAAU,eAAezuC,CAAI,GAAK,CAAC4lC,GAAY5lC,CAAI,GAAK,CAACuhB,GAAS,QAAQvhB,CAAI,CACvH,EACIipF,GAAc,SAAUj6C,EAAI/7C,EAAMi8C,EAAMlvC,EAAM,CAChD,IAAIkxD,EAAaliB,EAAG,UAAU,IAAI/7C,CAAI,EAClCw9C,EAASygB,EAAW,CAAC,EACrBxsB,EAAU5M,EACVoxD,EAAc,CAAClpF,GAAQgvC,EAAG,UAAU,YAAY,EAChD37B,EAAM27B,EAAG,IAAKvK,EAAYuK,EAAG,UAC7Bm6C,EAAmB,SAAU79E,GAAK89E,GAAK,CAEzC,GADAA,GAAMA,IAAO34C,EACTnlC,GAAK,CAOP,GANI89E,GAAI,UACNA,GAAI,SAAS99E,GAAK89E,GAAKl6C,EAAMlvC,CAAI,EAEnC+oF,GAAOK,GAAI,OAAQ,SAAU97F,GAAO2F,GAAM,CACxCogB,EAAI,SAAS/H,GAAKrY,GAAMw8C,GAAY,YAAYniD,GAAO4hD,CAAI,CAAC,CAC9D,CAAC,EACGk6C,GAAI,OAAQ,CACd,IAAIC,GAAWh2E,EAAI,UAAU/H,GAAK,OAAO,EACrC+9E,IACF/9E,GAAI,aAAa,iBAAkB+9E,EAAQ,CAE/C,CACAN,GAAOK,GAAI,WAAY,SAAU97F,GAAO2F,GAAM,CAC5CogB,EAAI,UAAU/H,GAAKrY,GAAMw8C,GAAY,YAAYniD,GAAO4hD,CAAI,CAAC,CAC/D,CAAC,EACD65C,GAAOK,GAAI,QAAS,SAAU97F,GAAO,CACnCA,GAAQmiD,GAAY,YAAYniD,GAAO4hD,CAAI,EACtC77B,EAAI,SAAS/H,GAAKhe,EAAK,GAC1B+lB,EAAI,SAAS/H,GAAKhe,EAAK,CAE3B,CAAC,CACH,CACF,EACIg8F,EAAiB,SAAUp4B,GAAYlxD,GAAM,CAC/C,IAAIupF,GAAQ,GACZ,OAAK94C,EAAO,UAGZs4C,GAAO73B,GAAY,SAAUzgB,GAAQ,CACnC,GAAI,gBAAeA,IAAUA,GAAO,YAAcy4C,IAG9C71E,EAAI,GAAGrT,GAAMywC,GAAO,QAAQ,GAAK,CAAC7K,GAAY5lC,EAAI,EACpD,OAAAmpF,EAAiBnpF,GAAMywC,EAAM,EAC7B84C,GAAQ,GACD,EAEX,CAAC,EACMA,IAZE,EAaX,EACIC,EAAgB,SAAUn2E,GAAKykB,GAAK4M,GAAU+kD,GAAc,CAC9D,IAAI32C,GAAc,CAAC,EACfZ,GAAUw3C,GAAS90F,GAAkB,GACzCs9C,GAAWzB,EAAO,QAAUA,EAAO,MACnCi5C,GAAUr2E,GAAI,OAAO6+B,EAAQ,EAC7Bi3C,EAAiBO,EAAO,EACxB/3C,GAAU,KAAKt+B,GAAKykB,GAAK,SAAU1sB,GAAO,CACxC,IAAIu+E,GACA5xE,GAAU,SAAU/X,GAAM,CAC5B,IAAIqB,GAAUuoF,GAAY7oE,GAAyBwmE,GASnD,GARAA,GAAsB3yF,GACtByM,GAAWrB,GAAK,SAAS,YAAY,EACrC4pF,GAAa5pF,GAAK,WAAW,SAAS,YAAY,EAC9CA,GAAK,WAAa,GAAKqT,GAAI,mBAAmBrT,EAAI,IACpDunF,GAAsB3yF,GACtBA,GAAkBye,GAAI,mBAAmBrT,EAAI,IAAM,OACnD+gB,GAA0B,IAExB0uB,GAAY,KAAKpuC,GAAU,IAAI,EAAG,CACpCsoF,GAAiB,EACbl5C,EAAO,OACTp9B,GAAI,OAAOrT,EAAI,EAEjB,MACF,CACA,GAAIywC,EAAO,SAAWqhB,GAAY,UAAU9iB,EAAIhvC,GAAM/M,EAAMi8C,CAAI,EAAG,CACjEy6C,GAAiB,EACjB,MACF,CACA,GAAI/0F,IAAmB,CAACmsB,IAA2B0vB,EAAO,OAAS,CAACA,EAAO,SAAWhB,GAAY,YAAYT,EAAI3tC,EAAQ,GAAKouC,GAAY,QAAQT,EAAI46C,GAAY13C,EAAQ,EAAG,CAC5KlyC,GAAOqT,GAAI,OAAOrT,GAAMkyC,EAAQ,EAChCi3C,EAAiBnpF,EAAI,EACrB8yC,GAAY,KAAK9yC,EAAI,EACrB2pF,GAAiB,EACjB,MACF,CACA,GAAIl5C,EAAO,SAAU,CACnB,IAAI84C,GAAQD,EAAep4B,EAAYlxD,EAAI,EAC3C,GAAI,CAACywC,EAAO,QAAU84C,GAAO,CAC3BI,GAAiB,EACjB,MACF,CACF,CACI/0F,IAAmB,CAACmsB,IAA2B0uB,GAAY,QAAQT,EAAIkD,GAAU7wC,EAAQ,GAAKouC,GAAY,QAAQT,EAAI46C,GAAY13C,EAAQ,GAAK,EAAE,CAACu3C,IAAgBzpF,GAAK,WAAa,GAAKA,GAAK,UAAU,SAAW,GAAKA,GAAK,UAAU,WAAW,CAAC,IAAM,QAAU,CAAC4lC,GAAY5lC,EAAI,IAAM,CAACywC,EAAO,QAAU,CAACp9B,GAAI,QAAQrT,EAAI,IAC1T2pF,KACHA,GAAiBt2E,GAAI,MAAMq2E,GAAS,EAAK,EACzC1pF,GAAK,WAAW,aAAa2pF,GAAgB3pF,EAAI,EACjD8yC,GAAY,KAAK62C,EAAc,GAEjCA,GAAe,YAAY3pF,EAAI,IAE/B2pF,GAAiB,EACjBZ,GAAO7/E,GAAM,KAAKlJ,GAAK,UAAU,EAAG+X,EAAO,EACvCgJ,KACFnsB,GAAkB2yF,IAEpBoC,GAAiB,EAErB,EACAZ,GAAO39E,GAAO2M,EAAO,CACvB,CAAC,EACG04B,EAAO,QAAU,IACnBs4C,GAAOj2C,GAAa,SAAU9yC,GAAM,CAClC,IAAI+X,GAAU,SAAU/X,GAAM,CACxBA,GAAK,WAAa,KACpBmpF,EAAiBnpF,GAAMywC,CAAM,EAE/Bs4C,GAAO7/E,GAAM,KAAKlJ,GAAK,UAAU,EAAG+X,EAAO,CAC7C,EACAA,GAAQ/X,EAAI,CACd,CAAC,EAEH+oF,GAAOj2C,GAAa,SAAU9yC,GAAM,CAClC,IAAI6pF,GACAC,GAAgB,SAAU9pF,GAAM,CAClC,IAAI3G,GAAQ,EACZ,OAAA0vF,GAAO/oF,GAAK,WAAY,SAAUA,GAAM,CAClC,CAACyvC,GAAY,iBAAiBzvC,EAAI,GAAK,CAACyuC,GAAU,eAAezuC,EAAI,GACvE3G,IAEJ,CAAC,EACMA,EACT,EACI0wF,GAAsB,SAAU7hF,GAAM,CACxC,IAAIuO,GAAQ,GACZ,OAAAsyE,GAAO7gF,GAAK,WAAY,SAAUlI,GAAM,CACtC,GAAIgpF,GAAgBhpF,EAAI,EACtB,OAAAyW,GAAQzW,GACD,EAEX,CAAC,EACMyW,EACT,EACIuzE,GAAc,SAAUhqF,GAAM,CAChC,IAAIyW,GAAO+W,GACX,OAAA/W,GAAQszE,GAAoB/pF,EAAI,EAC5ByW,IAAS,CAACg4B,GAAU,eAAeh4B,EAAK,GAAKq7C,GAAY,UAAUz+C,GAAKoD,GAAOg6B,CAAM,IACvFjjB,GAAQna,GAAI,MAAMoD,GAAO,EAAK,EAC9B0yE,EAAiB37D,EAAK,EACtBna,GAAI,QAAQma,GAAOxtB,GAAM,EAAI,EAC7BqT,GAAI,OAAOoD,GAAO,CAAC,GAEd+W,IAASxtB,EAClB,EAEA,GADA6pF,GAAaC,GAAc9pF,EAAI,GAC1B8yC,GAAY,OAAS,GAAK,CAACz/B,GAAI,QAAQrT,EAAI,IAAM6pF,KAAe,EAAG,CACtEx2E,GAAI,OAAOrT,GAAM,CAAC,EAClB,MACF,EACIywC,EAAO,QAAUA,EAAO,WACtB,CAACA,EAAO,OAASo5C,KAAe,IAClC7pF,GAAOgqF,GAAYhqF,EAAI,GAEzB8oF,GAAa,kBAAkB95C,EAAIkiB,EAAYhiB,EAAMlvC,EAAI,EACzD8oF,GAAa,iBAAiB95C,EAAIyB,EAAQx9C,EAAMi8C,EAAMlvC,EAAI,EAC1D8oF,GAAa,gCAAgCz1E,GAAKo9B,EAAQvB,EAAMlvC,EAAI,EACpE8oF,GAAa,YAAYz1E,GAAKo9B,EAAQvB,EAAMlvC,EAAI,EAChD8oF,GAAa,cAAcz1E,GAAKo9B,EAAQvB,EAAMlvC,EAAI,EAEtD,CAAC,CACH,EACA,GAAIqT,EAAI,mBAAmBoxB,EAAU,QAAQ,CAAC,IAAM,QAAS,CAC3DzkC,EAAOykC,EAAU,QAAQ,EACzB,QAAS5zC,EAAI,EAAGgJ,GAAIq3D,EAAW,OAAQrgE,EAAIgJ,GAAGhJ,IAC5C,GAAIqgE,EAAWrgE,CAAC,EAAE,iBAAmBwiB,EAAI,GAAGrT,EAAMkxD,EAAWrgE,CAAC,EAAE,QAAQ,EAAG,CACzEs4F,EAAiBnpF,EAAMkxD,EAAWrgE,CAAC,CAAC,EACpC,MACF,CAEF,MACF,CACA,GAAI4/C,EAAQ,CACV,GAAIzwC,EACEA,EAAK,SACFspF,EAAep4B,EAAYlxD,CAAI,IAClC83B,EAAMzkB,EAAI,UAAU,EACpBykB,EAAI,eAAe93B,CAAI,EACvB83B,EAAI,YAAY93B,CAAI,EACpBwpF,EAAcn2E,EAAK29B,GAAY,UAAUhC,EAAIlX,EAAKo5B,CAAU,EAAG,KAAM,EAAI,GAG3Es4B,EAAcn2E,EAAKrT,EAAM,KAAM,EAAI,UAGjC,CAACkpF,GAAe,CAACz4C,EAAO,QAAUp9B,EAAI,OAAO,6CAA6C,EAAE,OAAQ,CACtG,IAAI42E,GAAaj7C,EAAG,UAAU,QAAQ,EAClC,CAACA,EAAG,SAAS,mBAAqBkiB,EAAW,CAAC,EAAE,cAAgB,CAAC79C,EAAI,UAAU42E,GAAY52E,EAAI,OAAO,GACxG41E,GAAYj6C,EAAIkiB,EAAW,CAAC,EAAE,YAAY,EAE5CliB,EAAG,UAAU,OAAOiJ,GAAgB,UAAUjJ,EAAG,UAAU,OAAO,CAAC,CAAC,EACpEtK,EAAWgB,GAAY,sBAAsBsJ,EAAG,UAAW,EAAI,EAC/Dw6C,EAAcn2E,EAAK29B,GAAY,UAAUhC,EAAIvK,EAAU,OAAO,EAAGysB,CAAU,CAAC,EACxEzgB,EAAO,QACTq4C,GAAa,uBAAuBz1E,EAAKo9B,EAAQvB,EAAM+6C,EAAU,EAEnExlD,EAAU,eAAeC,CAAQ,EACjC+K,GAAY,UAAUp8B,EAAKoxB,EAAWA,EAAU,OAAO,CAAC,EACxDuK,EAAG,YAAY,CACjB,MACEokB,GAAiBpkB,EAAI/7C,EAAMi8C,CAAI,EAGnCy2C,GAAM,YAAY1yF,EAAM+7C,CAAE,CAC5B,CACF,EACIk7C,GAAc,CAAE,YAAajB,EAAY,EAEzCkB,GAASjhF,GAAM,KACfkhF,GAAU,SAAUC,EAAkB9yF,EAAQ,CAChD,IAAI+yF,EAAiB,CAAC,EACtBD,EAAiB,IAAI,CAAC,CAAC,EACvB9yF,EAAO,GAAG,aAAc,SAAU/B,EAAG,CACnC,IAAIygB,EAAUw5B,GAAY,WAAWl4C,EAAO,IAAK/B,EAAE,OAAO,EACtD+0F,EAAiB,CAAC,EACtBt0E,EAAU/M,GAAM,KAAK+M,EAAS,SAAUjW,EAAM,CAC5C,OAAOA,EAAK,WAAa,GAAK,CAACA,EAAK,aAAa,gBAAgB,CACnE,CAAC,EACDmqF,GAAOE,EAAiB,IAAI,EAAG,SAAUtwE,EAAW02B,EAAQ,CAC1D05C,GAAOl0E,EAAS,SAAUjW,EAAM,CAC9B,GAAIzI,EAAO,UAAU,UAAUyI,EAAMywC,EAAQ,CAAC,EAAG12B,EAAU,OAAO,EAChE,OAAKuwE,EAAe75C,CAAM,IACxB05C,GAAOpwE,EAAW,SAAUtjB,EAAU,CACpCA,EAAS,GAAM,CACb,KAAMuJ,EACN,OAAQywC,EACR,QAASx6B,CACX,CAAC,CACH,CAAC,EACDq0E,EAAe75C,CAAM,EAAI12B,GAE3BwwE,EAAe95C,CAAM,EAAI12B,EAClB,GAET,GAAI+3C,GAAY,iCAAiCv6D,EAAQyI,EAAMywC,CAAM,EACnE,MAAO,EAEX,CAAC,CACH,CAAC,EACD05C,GAAOG,EAAgB,SAAUvwE,EAAW02B,EAAQ,CAC7C85C,EAAe95C,CAAM,IACxB,OAAO65C,EAAe75C,CAAM,EAC5B05C,GAAOpwE,EAAW,SAAUtjB,EAAU,CACpCA,EAAS,GAAO,CACd,KAAMjB,EAAE,QACR,OAAQi7C,EACR,QAASx6B,CACX,CAAC,CACH,CAAC,EAEL,CAAC,CACH,CAAC,CACH,EACIu0E,GAAe,SAAUH,EAAkBI,EAASh0F,EAAU+6D,EAAS,CACzE,IAAIk5B,EAAoBL,EAAiB,IAAI,EAC7CF,GAAOM,EAAQ,MAAM,GAAG,EAAG,SAAUh6C,EAAQ,CACtCi6C,EAAkBj6C,CAAM,IAC3Bi6C,EAAkBj6C,CAAM,EAAI,CAAC,EAC7Bi6C,EAAkBj6C,CAAM,EAAE,QAAU+gB,GAEtCk5B,EAAkBj6C,CAAM,EAAE,KAAKh6C,CAAQ,CACzC,CAAC,EACD4zF,EAAiB,IAAIK,CAAiB,CACxC,EACIC,GAAgB,SAAUpzF,EAAQqzF,EAAmBH,EAASh0F,EAAU+6D,EAAS,CAC/Eo5B,EAAkB,IAAI,IAAM,MAC9BR,GAAQQ,EAAmBrzF,CAAM,EAEnCizF,GAAaI,EAAmBH,EAASh0F,EAAU+6D,CAAO,CAC5D,EACIq5B,GAAgB,CAAE,cAAeF,EAAc,EAE/CG,GAAQ,SAAUz3E,EAAK,CACzB,IAAIo3E,EAAU,CACZ,UAAW,CAAC,CACR,SAAU,QACV,OAAQ,CAAE,cAAe,KAAM,CACjC,CAAC,EACH,aAAc,CAAC,CACX,SAAU,QACV,OAAQ,CAAE,cAAe,QAAS,CACpC,CAAC,EACH,aAAc,CAAC,CACX,SAAU,QACV,OAAQ,CAAE,cAAe,QAAS,CACpC,CAAC,EACH,UAAW,CACT,CACE,SAAU,eACV,UAAW,GACX,QAAS,aACT,gBAAiB,GACjB,QAAS,uBACX,EACA,CACE,SAAU,mDACV,OAAQ,CAAE,UAAW,MAAO,EAC5B,QAAS,GACT,QAAS,GACT,aAAc,KAChB,EACA,CACE,SAAU,YACV,UAAW,GACX,OAAQ,CAAE,MAAO,MAAO,EACxB,QAAS,uBACX,CACF,EACA,YAAa,CACX,CACE,SAAU,mDACV,OAAQ,CAAE,UAAW,QAAS,EAC9B,QAAS,GACT,QAAS,wBACT,aAAc,KAChB,EACA,CACE,SAAU,eACV,UAAW,GACX,QAAS,eACT,gBAAiB,GACjB,QAAS,uBACX,EACA,CACE,SAAU,MACV,UAAW,GACX,OAAQ,CACN,QAAS,QACT,WAAY,OACZ,YAAa,MACf,EACA,QAAS,EACX,EACA,CACE,SAAU,QACV,UAAW,GACX,OAAQ,CACN,WAAY,OACZ,YAAa,MACf,EACA,QAAS,uBACX,CACF,EACA,WAAY,CACV,CACE,SAAU,eACV,UAAW,GACX,QAAS,cACT,gBAAiB,GACjB,QAAS,uBACX,EACA,CACE,SAAU,mDACV,OAAQ,CAAE,UAAW,OAAQ,EAC7B,QAAS,GACT,QAAS,wBACT,aAAc,KAChB,EACA,CACE,SAAU,YACV,UAAW,GACX,OAAQ,CAAE,MAAO,OAAQ,EACzB,QAAS,uBACX,CACF,EACA,aAAc,CAAC,CACX,SAAU,mDACV,OAAQ,CAAE,UAAW,SAAU,EAC/B,QAAS,GACT,aAAc,MACd,QAAS,uBACX,CAAC,EACH,KAAM,CACJ,CACE,OAAQ,SACR,OAAQ,KACV,EACA,CACE,OAAQ,OACR,OAAQ,CAAE,WAAY,MAAO,CAC/B,EACA,CACE,OAAQ,IACR,OAAQ,KACV,CACF,EACA,OAAQ,CACN,CACE,OAAQ,KACR,OAAQ,KACV,EACA,CACE,OAAQ,OACR,OAAQ,CAAE,UAAW,QAAS,CAChC,EACA,CACE,OAAQ,IACR,OAAQ,KACV,CACF,EACA,UAAW,CACT,CACE,OAAQ,OACR,OAAQ,CAAE,eAAgB,WAAY,EACtC,MAAO,EACT,EACA,CACE,OAAQ,IACR,OAAQ,KACV,CACF,EACA,cAAe,CACb,CACE,OAAQ,OACR,OAAQ,CAAE,eAAgB,cAAe,EACzC,MAAO,EACT,EACA,CACE,OAAQ,SACR,OAAQ,KACV,CACF,EACA,UAAW,CACT,OAAQ,OACR,OAAQ,CAAE,MAAO,QAAS,EAC1B,MAAO,GACP,eAAgB,GAChB,mBAAoB,EACtB,EACA,YAAa,CACX,OAAQ,OACR,OAAQ,CAAE,gBAAiB,QAAS,EACpC,MAAO,GACP,eAAgB,GAChB,mBAAoB,EACtB,EACA,SAAU,CACR,OAAQ,OACR,OAAQ,GACR,OAAQ,CAAE,WAAY,QAAS,EAC/B,mBAAoB,EACtB,EACA,SAAU,CACR,OAAQ,OACR,OAAQ,GACR,OAAQ,CAAE,SAAU,QAAS,EAC7B,mBAAoB,EACtB,EACA,eAAgB,CACd,OAAQ,OACR,WAAY,CAAE,MAAO,QAAS,CAChC,EACA,WAAY,CACV,MAAO,aACP,QAAS,EACT,OAAQ,KACV,EACA,UAAW,CAAE,OAAQ,KAAM,EAC3B,YAAa,CAAE,OAAQ,KAAM,EAC7B,KAAM,CAAE,OAAQ,MAAO,EACvB,KAAM,CACJ,OAAQ,IACR,SAAU,IACV,OAAQ,MACR,MAAO,GACP,KAAM,GACN,QAAS,UAAY,CACnB,MAAO,EACT,EACA,SAAU,SAAUn/E,EAAK89E,EAAKl6C,EAAM,CAClChmC,GAAM,KAAKgmC,EAAM,SAAU5hD,EAAO+R,EAAK,CACrCgU,EAAI,UAAU/H,EAAKjM,EAAK/R,CAAK,CAC/B,CAAC,CACH,CACF,EACA,aAAc,CACZ,CACE,SAAU,gFACV,OAAQ,MACR,MAAO,GACP,OAAQ,GACR,aAAc,GACd,KAAM,EACR,EACA,CACE,SAAU,OACV,WAAY,CACV,QACA,OACF,EACA,OAAQ,QACR,MAAO,GACP,OAAQ,GACR,KAAM,EACR,EACA,CACE,SAAU,IACV,WAAY,CACV,QACA,OACF,EACA,MAAO,GACP,OAAQ,GACR,KAAM,EACR,CACF,CACF,EACA,OAAA4b,GAAM,KAAK,qDAAqD,MAAM,IAAI,EAAG,SAAUjW,EAAM,CAC3Fw3F,EAAQx3F,CAAI,EAAI,CACd,MAAOA,EACP,OAAQ,KACV,CACF,CAAC,EACMw3F,CACT,EACIM,GAAiB,CAAE,IAAKD,EAAM,EAElC,SAASE,GAAgBzzF,EAAQ,CAC/B,IAAIkzF,EAAU,CAAC,EACX92E,EAAM,SAAU1gB,EAAM,CACxB,OAAOA,EAAOw3F,EAAQx3F,CAAI,EAAIw3F,CAChC,EACI3wD,EAAW,SAAU7mC,EAAMw9C,EAAQ,CACjCx9C,IACE,OAAOA,GAAS,SAClBiW,GAAM,KAAKjW,EAAM,SAAUw9C,EAAQx9C,EAAM,CACvC6mC,EAAS7mC,EAAMw9C,CAAM,CACvB,CAAC,GAEDA,EAASA,EAAO,OAASA,EAAS,CAACA,CAAM,EACzCvnC,GAAM,KAAKunC,EAAQ,SAAUA,EAAQ,CAC/B,OAAOA,EAAO,KAAS,MACzBA,EAAO,KAAO,CAACA,EAAO,UAEpB,OAAOA,EAAO,MAAU,MAC1BA,EAAO,MAAQ,CAACA,EAAO,UAAYA,EAAO,QAExC,OAAOA,EAAO,OAAW,KAAeA,EAAO,UAAY,CAACA,EAAO,SACrEA,EAAO,OAAS,QAEdA,EAAO,UAAYA,EAAO,SAC5BA,EAAO,MAAQ,GACfA,EAAO,aAAe,IAEpB,OAAOA,EAAO,SAAY,WAC5BA,EAAO,QAAUA,EAAO,QAAQ,MAAM,KAAK,EAE/C,CAAC,EACDg6C,EAAQx3F,CAAI,EAAIw9C,GAGtB,EACIw6C,EAAa,SAAUh4F,EAAM,CAC/B,OAAIA,GAAQw3F,EAAQx3F,CAAI,GACtB,OAAOw3F,EAAQx3F,CAAI,EAEdw3F,CACT,EACA,OAAA3wD,EAASixD,GAAe,IAAIxzF,EAAO,GAAG,CAAC,EACvCuiC,EAASviC,EAAO,SAAS,OAAO,EACzB,CACL,IAAKoc,EACL,SAAUmmB,EACV,WAAYmxD,CACd,CACF,CAEA,IAAIC,GAAShiF,GAAM,KACfmK,GAAMgf,GAAW,IACjB84D,GAAuB,SAAUC,EAAU7zF,EAAQ,CACrD,IAAI+T,EAAK3E,EAAMs0B,EACX9W,EAAS5sB,GAAUA,EAAO,QAAU2tB,GAAO,CAAC,CAAC,EAC7CqtB,EAAW,SAAUjnC,EAAK3E,EAAM,CAC9BA,EAAK,QAAQ,QACf0M,GAAI,SAAS/H,EAAK3E,EAAK,QAAQ,KAAK,GAAG,CAAC,EAE1C0M,GAAI,WAAW/H,EAAK3E,EAAK,KAAK,CAChC,EACI0kF,EAAgB,SAAUC,EAAO,CACnC,IAAIhgF,EACJ,OAAA3E,EAAO,OAAO2kF,GAAU,SAAW,CACjC,KAAMA,EACN,QAAS,CAAC,EACV,MAAO,CAAC,CACV,EAAIA,EACJhgF,EAAM+H,GAAI,OAAO1M,EAAK,IAAI,EAC1B4rC,EAASjnC,EAAK3E,CAAI,EACX2E,CACT,EACIigF,EAAoB,SAAUjgF,EAAKyE,EAAW,CAChD,IAAI9c,EAAO,OAAOqY,GAAQ,SAAWA,EAAI,SAAS,YAAY,EAAIA,EAC9DkgF,EAAUrnE,EAAO,eAAelxB,CAAI,EACpCw4F,EAAkBD,GAAWA,EAAQ,gBACzC,OAAIC,GAAmBA,EAAgB,OAC9B17E,GAAa7G,GAAM,QAAQuiF,EAAiB17E,CAAS,IAAM,GAAKA,EAAY07E,EAAgB,CAAC,EAE7F,EAEX,EACIC,EAAa,SAAUpgF,EAAK8/E,EAAU/5C,EAAU,CAClD,IAAInxC,EAAQyrF,EAAiBC,GACzBz0D,GAAWi0D,EAAS,OAAS,GAAKA,EAAS,CAAC,EAC5CS,GAAe10D,IAAYA,GAAS,KAExC,GADAy0D,GAAiBL,EAAkBjgF,EAAKugF,EAAY,EAChDD,GACEC,KAAiBD,IACnBD,EAAkBP,EAAS,CAAC,EAC5BA,EAAWA,EAAS,MAAM,CAAC,GAE3BO,EAAkBC,WAEXz0D,GACTw0D,EAAkBP,EAAS,CAAC,EAC5BA,EAAWA,EAAS,MAAM,CAAC,UAClB,CAAC/5C,EACV,OAAO/lC,EAET,OAAIqgF,IACFzrF,EAASmrF,EAAcM,CAAe,EACtCzrF,EAAO,YAAYoL,CAAG,GAEpB+lC,IACGnxC,IACHA,EAASmT,GAAI,OAAO,KAAK,EACzBnT,EAAO,YAAYoL,CAAG,GAExBpC,GAAM,KAAKmoC,EAAU,SAAUhlC,GAAS,CACtC,IAAIy/E,GAAaT,EAAch/E,EAAO,EACtCnM,EAAO,aAAa4rF,GAAYxgF,CAAG,CACrC,CAAC,GAEIogF,EAAWxrF,EAAQkrF,EAAUO,GAAmBA,EAAgB,QAAQ,CACjF,EACA,OAAIP,GAAYA,EAAS,QACvBzkF,EAAOykF,EAAS,CAAC,EACjB9/E,EAAM+/E,EAAc1kF,CAAI,EACxBs0B,EAAW5nB,GAAI,OAAO,KAAK,EAC3B4nB,EAAS,YAAYywD,EAAWpgF,EAAK8/E,EAAS,MAAM,CAAC,EAAGzkF,EAAK,QAAQ,CAAC,EAC/Ds0B,GAEA,EAEX,EACI8wD,GAAiB,SAAUztF,EAAU/G,EAAQ,CAC/C,OAAO4zF,GAAqBa,GAAc1tF,CAAQ,EAAG/G,CAAM,CAC7D,EACI00F,GAAoB,SAAUtlF,EAAM,CACtC,IAAIulF,EACA5lF,EAAM,CACR,QAAS,CAAC,EACV,MAAO,CAAC,CACV,EACA,OAAAK,EAAOL,EAAI,SAAW4C,GAAM,KAAKvC,CAAI,EACjCA,IAAS,MACXulF,EAAUvlF,EAAK,QAAQ,4CAA6C,SAAUwlF,EAAIxgB,EAAIC,EAAIwgB,EAAIC,EAAI,CAChG,OAAQ1gB,EAAI,CACZ,IAAK,IACHrlE,EAAI,MAAM,GAAKslE,EACf,MACF,IAAK,IACHtlE,EAAI,QAAQ,KAAKslE,CAAE,EACnB,MACF,IAAK,IACC1iE,GAAM,QAAQ,8CAA8C,MAAM,GAAG,EAAG0iE,CAAE,IAAM,KAClFtlE,EAAI,MAAMslE,CAAE,EAAIA,GAElB,KACF,CACA,GAAIwgB,IAAO,IAAK,CACd,IAAIhsF,EAAIisF,EAAG,MAAM,4BAA4B,EACzCjsF,IACFkG,EAAI,MAAMlG,EAAE,CAAC,CAAC,EAAIA,EAAE,CAAC,EAEzB,CACA,MAAO,EACT,CAAC,GAEHkG,EAAI,KAAO4lF,GAAW,MACf5lF,CACT,EACI0lF,GAAgB,SAAU1tF,EAAU,CACtC,MAAI,CAACA,GAAY,OAAOA,GAAa,SAC5B,CAAC,GAEVA,EAAWA,EAAS,MAAM,SAAS,EAAE,CAAC,EACtCA,EAAWA,EAAS,QAAQ,sBAAuB,IAAI,EAChD4K,GAAM,IAAI5K,EAAS,MAAM,yBAAyB,EAAG,SAAUqI,EAAM,CAC1E,IAAI0qC,EAAWnoC,GAAM,IAAIvC,EAAK,MAAM,cAAc,EAAGslF,EAAiB,EAClE3lF,EAAM+qC,EAAS,IAAI,EACvB,OAAIA,EAAS,SACX/qC,EAAI,SAAW+qC,GAEV/qC,CACT,CAAC,EAAE,QAAQ,EACb,EACIgmF,GAAa,SAAU/0F,EAAQk5C,EAAQ,CACzC,IAAIx9C,EAAMs5F,EAAaC,EAAY3kF,EAC/B4kF,EAAa,GAAIC,EAAgBC,EAErC,GADAA,EAAgBp1F,EAAO,SAAS,eAC5Bo1F,IAAkB,GACpB,MAAO,GAEL,OAAOA,GAAkB,WAC3BA,EAAgB,+IAElB,IAAIC,EAAa,SAAUx2F,EAAK,CAC9B,OAAOA,EAAI,QAAQ,UAAW,EAAE,CAClC,EACA,GAAI,OAAOq6C,GAAW,SAAU,CAE9B,GADAA,EAASl5C,EAAO,UAAU,IAAIk5C,CAAM,EAChC,CAACA,EACH,OAEFA,EAASA,EAAO,CAAC,CACnB,CACA,MAAI,YAAaA,IACfk8C,EAAgBl8C,EAAO,QACnBk8C,IAAkB,IACb,IAGX15F,EAAOw9C,EAAO,OAASA,EAAO,QAAU,OACxC5oC,EAAQmkF,GAAcv7C,EAAO,QAAQ,EACjC5oC,EAAM,QACHA,EAAM,CAAC,EAAE,OACZA,EAAM,CAAC,EAAE,KAAO5U,GAElBA,EAAOw9C,EAAO,SACd87C,EAAcpB,GAAqBtjF,EAAOtQ,CAAM,GAEhDg1F,EAAcpB,GAAqB,CAACl4F,CAAI,EAAGsE,CAAM,EAEnDi1F,EAAan5E,GAAI,OAAOpgB,EAAMs5F,CAAW,EAAE,CAAC,GAAKA,EAAY,WAC7DrB,GAAOz6C,EAAO,OAAQ,SAAUnjD,EAAO2F,EAAM,CAC3C3F,EAAQs/F,EAAWt/F,CAAK,EACpBA,GACF+lB,GAAI,SAASm5E,EAAYv5F,EAAM3F,CAAK,CAExC,CAAC,EACD49F,GAAOz6C,EAAO,WAAY,SAAUnjD,EAAO2F,EAAM,CAC/C3F,EAAQs/F,EAAWt/F,CAAK,EACpBA,GACF+lB,GAAI,UAAUm5E,EAAYv5F,EAAM3F,CAAK,CAEzC,CAAC,EACD49F,GAAOz6C,EAAO,QAAS,SAAUnjD,EAAO,CACtCA,EAAQs/F,EAAWt/F,CAAK,EACnB+lB,GAAI,SAASm5E,EAAYl/F,CAAK,GACjC+lB,GAAI,SAASm5E,EAAYl/F,CAAK,CAElC,CAAC,EACDiK,EAAO,KAAK,gBAAgB,EAC5B8b,GAAI,UAAUk5E,EAAa,CACzB,SAAU,WACV,KAAM,MACR,CAAC,EACDh1F,EAAO,QAAQ,EAAE,YAAYg1F,CAAW,EACxCG,EAAiBr5E,GAAI,SAAS9b,EAAO,QAAQ,EAAG,WAAY,EAAI,EAChEm1F,EAAiB,MAAM,KAAKA,CAAc,EAAI,SAASA,EAAgB,EAAE,EAAI,EAC7ExB,GAAOyB,EAAc,MAAM,GAAG,EAAG,SAAU15F,EAAM,CAC/C,IAAI3F,EAAQ+lB,GAAI,SAASm5E,EAAYv5F,EAAM,EAAI,EAC/C,GAAI,EAAAA,IAAS,oBAAsB,oCAAoC,KAAK3F,CAAK,IAC/EA,EAAQ+lB,GAAI,SAAS9b,EAAO,QAAQ,EAAGtE,EAAM,EAAI,EAC7CogB,GAAI,MAAM/lB,CAAK,EAAE,YAAY,IAAM,aAIrC,EAAA2F,IAAS,SACPogB,GAAI,MAAM/lB,CAAK,EAAE,YAAY,IAAM,WAIzC,IAAI2F,IAAS,aACP,QAAQ,KAAK3F,CAAK,EAAG,CACvB,GAAIo/F,IAAmB,EACrB,OAEF,IAAIG,EAAW,WAAWv/F,CAAK,GAAK,KAAK,KAAKA,CAAK,EAAI,IAAM,GAC7DA,EAAQu/F,EAAWH,EAAiB,IACtC,CAEEz5F,IAAS,UAAY3F,IACvBm/F,GAAc,kBAEhBA,GAAcx5F,EAAO,IAAM3F,EAAQ,IACrC,CAAC,EACDiK,EAAO,KAAK,qBAAqB,EACjC8b,GAAI,OAAOk5E,CAAW,EACfE,EACT,EACIK,GAAU,CACZ,WAAYR,GACZ,cAAeN,GACf,eAAgBD,EAClB,EAEIgB,GAAS,SAAUx1F,EAAQkzF,EAASx3F,EAAMi8C,EAAMlvC,EAAM,CACxD,IAAIopF,EAAMqB,EAAQ,IAAIx3F,CAAI,EACtB6+D,GAAY,MAAMv6D,EAAQtE,EAAMi8C,EAAMlvC,CAAI,IAAM,EAAE,WAAYopF,EAAI,CAAC,IAAMA,EAAI,CAAC,EAAE,QAClF1B,GAAa,OAAOnwF,EAAQtE,EAAMi8C,EAAMlvC,CAAI,EAE5CkqF,GAAY,YAAY3yF,EAAQtE,EAAMi8C,EAAMlvC,CAAI,CAEpD,EACIgtF,GAAe,CAAE,OAAQD,EAAO,EAEhCE,GAAU,SAAU11F,EAAQ,CAC9BA,EAAO,YAAY,SAAU,GAAI,MAAM,EACvCA,EAAO,YAAY,SAAU,GAAI,QAAQ,EACzCA,EAAO,YAAY,SAAU,GAAI,WAAW,EAC5C,QAAS1G,EAAI,EAAGA,GAAK,EAAGA,IACtB0G,EAAO,YAAY,UAAY1G,EAAG,GAAI,CACpC,cACA,GACA,IAAMA,CACR,CAAC,EAEH0G,EAAO,YAAY,WAAY,GAAI,CACjC,cACA,GACA,GACF,CAAC,EACDA,EAAO,YAAY,WAAY,GAAI,CACjC,cACA,GACA,KACF,CAAC,EACDA,EAAO,YAAY,WAAY,GAAI,CACjC,cACA,GACA,SACF,CAAC,CACH,EACI21F,GAAkB,CAAE,MAAOD,EAAQ,EAEvC,SAASE,GAAW51F,EAAQ,CAC1B,IAAIkzF,EAAUO,GAAezzF,CAAM,EAC/BqzF,EAAoB10D,GAAK,IAAI,EACjC,OAAAg3D,GAAgB,MAAM31F,CAAM,EAC5Bq8D,GAAQr8D,CAAM,EACP,CACL,IAAKkzF,EAAQ,IACb,SAAUA,EAAQ,SAClB,WAAYA,EAAQ,WACpB,MAAOh9F,EAAMy8F,GAAY,YAAa3yF,CAAM,EAC5C,OAAQ9J,EAAMi6F,GAAa,OAAQnwF,CAAM,EACzC,OAAQ9J,EAAMu/F,GAAa,OAAQz1F,EAAQkzF,CAAO,EAClD,MAAOh9F,EAAMqkE,GAAY,MAAOv6D,CAAM,EACtC,SAAU9J,EAAMqkE,GAAY,SAAUv6D,CAAM,EAC5C,UAAW9J,EAAMqkE,GAAY,UAAWv6D,CAAM,EAC9C,SAAU9J,EAAMqkE,GAAY,SAAUv6D,CAAM,EAC5C,cAAe9J,EAAMo9F,GAAc,cAAetzF,EAAQqzF,CAAiB,EAC3E,WAAYn9F,EAAMq/F,GAAQ,WAAYv1F,CAAM,CAC9C,CACF,CAEA,IAAI61F,GAAmB,OAAO,UAAU,eACpCC,GAAY,SAAUxuF,EAAKsO,EAAI,CACjC,OAAOA,CACT,EACImgF,GAAY,SAAUC,EAAQ,CAChC,OAAO,UAAY,CAEjB,QADIC,EAAU,IAAI,MAAM,UAAU,MAAM,EAC/B38F,EAAI,EAAGA,EAAI28F,EAAQ,OAAQ38F,IAClC28F,EAAQ38F,CAAC,EAAI,UAAUA,CAAC,EAE1B,GAAI28F,EAAQ,SAAW,EACrB,MAAM,IAAI,MAAM,0BAA2B,EAG7C,QADIj4F,EAAM,CAAC,EACF6I,EAAI,EAAGA,EAAIovF,EAAQ,OAAQpvF,IAAK,CACvC,IAAIqvF,EAAYD,EAAQpvF,CAAC,EACzB,QAASiB,KAAOouF,EACVL,GAAiB,KAAKK,EAAWpuF,CAAG,IACtC9J,EAAI8J,CAAG,EAAIkuF,EAAOh4F,EAAI8J,CAAG,EAAGouF,EAAUpuF,CAAG,CAAC,EAGhD,CACA,OAAO9J,CACT,CACF,EACIojD,GAAQ20C,GAAUD,EAAS,EAE3BvzD,GAAW,SAAU4zD,EAAYrxE,EAAUhJ,EAAK,CAClDq6E,EAAW,mBAAmB,oBAAqB,SAAUtiF,EAAOnY,EAAM,CAExE,QADIpC,EAAIua,EAAM,OAAQpL,EACfnP,KACLmP,EAAOoL,EAAMva,CAAC,EACdmP,EAAK,KAAK,WAAYA,EAAK,WAAW,IAAI,mBAAmB,CAAC,EAC9DA,EAAK,KAAK/M,EAAM,IAAI,CAExB,CAAC,EACDy6F,EAAW,mBAAmB,iBAAkB,SAAUtiF,EAAOnY,EAAM,CAKrE,QAJIpC,EAAIua,EAAM,OAAQpL,EAAM1S,EACxBqgG,EAAe,YAAc16F,EAC7B+2B,EAAe3N,EAAS,cACxB4N,EAAoB5N,EAAS,oBAC1BxrB,KACLmP,EAAOoL,EAAMva,CAAC,EACdvD,EAAQ0S,EAAK,WAAW,IAAI2tF,CAAY,EACpCrgG,IAAU,QACZ0S,EAAK,KAAK/M,EAAM3F,EAAM,OAAS,EAAIA,EAAQ,IAAI,EAC/C0S,EAAK,KAAK2tF,EAAc,IAAI,IAE5BrgG,EAAQ0S,EAAK,WAAW,IAAI/M,CAAI,EAC5BA,IAAS,QACX3F,EAAQ+lB,EAAI,eAAeA,EAAI,WAAW/lB,CAAK,EAAG0S,EAAK,IAAI,EAClDgqB,IACT18B,EAAQ08B,EAAa,KAAKC,EAAmB38B,EAAO2F,EAAM+M,EAAK,IAAI,GAErEA,EAAK,KAAK/M,EAAM3F,EAAM,OAAS,EAAIA,EAAQ,IAAI,EAGrD,CAAC,EACDogG,EAAW,mBAAmB,QAAS,SAAUtiF,EAAO,CAEtD,QADIva,EAAIua,EAAM,OAAQpL,EAAM1S,EACrBuD,KACLmP,EAAOoL,EAAMva,CAAC,EACdvD,EAAQ0S,EAAK,KAAK,OAAO,EACrB1S,IACFA,EAAQ0S,EAAK,KAAK,OAAO,EAAE,QAAQ,8BAA+B,EAAE,EACpEA,EAAK,KAAK,QAAS1S,EAAM,OAAS,EAAIA,EAAQ,IAAI,EAGxD,CAAC,EACDogG,EAAW,mBAAmB,gBAAiB,SAAUtiF,EAAOnY,EAAM9F,EAAM,CAE1E,QADI0D,EAAIua,EAAM,OAAQpL,EACfnP,KAEL,GADAmP,EAAOoL,EAAMva,CAAC,EACVmP,EAAK,WAAW,IAAI,eAAe,IAAM,YAAc,CAAC7S,EAAK,QAAS,CACxE,IAAIygG,EAAcr+F,EAAO,KAAKyQ,EAAK,UAAU,EAAE,OAAO,SAAU2W,EAAY,CAC1E,MAAO,CAAC2kB,GAAK,OAAO3kB,EAAW,KAAK,CACtC,CAAC,EACGi3E,EACF5tF,EAAK,OAAO,EAEZA,EAAK,OAAO,CAEhB,CAEJ,CAAC,EACD0tF,EAAW,cAAc,WAAY,SAAUtiF,EAAO,CAEpD,QADIva,EAAIua,EAAM,OAAQpL,EACfnP,KACLmP,EAAOoL,EAAMva,CAAC,EAAE,WACZmP,IACFA,EAAK,MAAQyjB,GAAS,OAAOzjB,EAAK,KAAK,EAG7C,CAAC,EACD0tF,EAAW,cAAc,eAAgB,SAAUtiF,EAAOnY,EAAM,CAK9D,QAJIpC,EAAIua,EAAM,OAAQpL,EAAM1S,EAAOoC,EAC/B+X,EAAO,SAAUna,EAAO,CAC1B,OAAOA,EAAM,QAAQ,2BAA4B;AAAA,CAAI,EAAE,QAAQ,qBAAsB,EAAE,EAAE,QAAQ,0HAA2H,EAAE,EAAE,QAAQ,4GAA6G,EAAE,CACzV,EACOuD,KACLmP,EAAOoL,EAAMva,CAAC,EACdvD,EAAQ0S,EAAK,WAAaA,EAAK,WAAW,MAAQ,GAC9C/M,IAAS,UACXvD,EAAOsQ,EAAK,KAAK,MAAM,EACnBtQ,GACFsQ,EAAK,KAAK,OAAQtQ,IAAS,cAAgB,KAAOA,EAAK,QAAQ,SAAU,EAAE,CAAC,EAE1E2sB,EAAS,iBAAmB,SAAW/uB,EAAM,OAAS,IACxD0S,EAAK,WAAW,MAAQ;AAAA,EAAmByH,EAAKna,CAAK,EAAI;AAAA,UAGvD+uB,EAAS,iBAAmB,SAAW/uB,EAAM,OAAS,IACxD0S,EAAK,WAAW,MAAQ;AAAA,EAAWyH,EAAKna,CAAK,EAAI;AAAA,KAIzD,CAAC,EACDogG,EAAW,cAAc,WAAY,SAAUtiF,EAAO,CAEpD,QADIva,EAAIua,EAAM,OAAQpL,EACfnP,KACLmP,EAAOoL,EAAMva,CAAC,EACVmP,EAAK,MAAM,QAAQ,SAAS,IAAM,GACpCA,EAAK,KAAO,SACZA,EAAK,KAAO,EACZA,EAAK,MAAQA,EAAK,MAAM,QAAQ,oBAAqB,EAAE,GAC9CA,EAAK,MAAM,QAAQ,gBAAgB,IAAM,IAClDA,EAAK,KAAO,QACZA,EAAK,KAAO,EACZA,EAAK,IAAM,GACXA,EAAK,MAAQ,SAASA,EAAK,KAAK,EAAE,OAAO,EAAE,EAGjD,CAAC,EACD0tF,EAAW,cAAc,sBAAuB,SAAUtiF,EAAOnY,EAAM,CAErE,QADIpC,EAAIua,EAAM,OAAQpL,EACfnP,KACLmP,EAAOoL,EAAMva,CAAC,EACVmP,EAAK,OAAS,EAChBA,EAAK,OAAO,EACHA,EAAK,OAAS,GACnB/M,IAAS,SAAW,EAAE,SAAU+M,EAAK,WAAW,MAClDA,EAAK,KAAK,OAAQ,MAAM,CAIhC,CAAC,EACD0tF,EAAW,mBAAmB,gBAAiB,SAAUtiF,EAAO,CAC9Dpa,GAAKoa,EAAO,SAAUpL,EAAM,CACtBA,EAAK,KAAK,eAAe,IAAM,iBAC7BA,EAAK,QAAQ0tF,EAAW,OAAO,oBAAoB,CAAC,EACtD1tF,EAAK,OAAO,EAEZA,EAAK,OAAO,EAGlB,CAAC,CACH,CAAC,EACD0tF,EAAW,mBAAmB,6GAAwH,SAAUtiF,EAAOnY,EAAM,CAE3K,QADIpC,EAAIua,EAAM,OACPva,KACLua,EAAMva,CAAC,EAAE,KAAKoC,EAAM,IAAI,CAE5B,CAAC,CACH,EACI46F,GAAiB,SAAU1vE,EAAU,CACvC,IAAI2vE,EAASC,EACTzuE,EAAO,SAAUtf,EAAM,CACzB,OAAOA,GAAQA,EAAK,OAAS,IAC/B,EACA8tF,EAAU3vE,EAAS,UACfmB,EAAKwuE,CAAO,IACdC,EAAUD,EAAQ,KACdxuE,EAAKyuE,CAAO,IACdD,EAAQ,OAAO,EACfC,EAAQ,OAAO,GAGrB,EACIC,GAAuB,CACzB,SAAUl0D,GACV,eAAgB+zD,EAClB,EAEII,GAAa,SAAU12F,EAAQyI,EAAM7S,EAAM,CAC7C,IAAI+gG,EAAMx1F,EAAKy1F,EACX96E,EAAM9b,EAAO,IACjB,OAAAyI,EAAOA,EAAK,UAAU,EAAI,EAC1BkuF,EAAOphG,EAAW,SAAS,eACvBohG,EAAK,qBACPx1F,EAAMw1F,EAAK,mBAAmB,EAAE,EAChChlF,GAAM,KAAKlJ,EAAK,WAAa,OAASA,EAAK,WAAa,CAACA,CAAI,EAAG,SAAUA,EAAM,CAC9EtH,EAAI,KAAK,YAAYA,EAAI,WAAWsH,EAAM,EAAI,CAAC,CACjD,CAAC,EACGA,EAAK,WAAa,OACpBA,EAAOtH,EAAI,KAAK,WAEhBsH,EAAOtH,EAAI,KAEby1F,EAAS96E,EAAI,IACbA,EAAI,IAAM3a,GAEZ2pE,GAAO,eAAe9qE,EAAQohD,GAAMxrD,EAAM,CAAE,KAAM6S,CAAK,CAAC,CAAC,EACrDmuF,IACF96E,EAAI,IAAM86E,GAELnuF,CACT,EACIouF,GAAkB,SAAU72F,EAAQpK,EAAM,CAC5C,OAAOoK,GAAUA,EAAO,kBAAkB,YAAY,GAAK,CAACpK,EAAK,SACnE,EACI4qB,GAAU,SAAUxgB,EAAQyI,EAAM7S,EAAM,CAC1C,OAAOihG,GAAgB72F,EAAQpK,CAAI,EAAI8gG,GAAW12F,EAAQyI,EAAM7S,CAAI,EAAI6S,CAC1E,EACIquF,GAA0B,CAAE,QAASt2E,EAAQ,EAE7Cu2E,GAAc,SAAUtuF,EAAMjG,EAAO,CACvC/I,GAAK+I,EAAO,SAAU9G,EAAM,CAC1B+M,EAAK,KAAK/M,EAAM,IAAI,CACtB,CAAC,CACH,EACIs7F,GAAuB,SAAUC,EAAWr6E,EAAQwkD,EAAW,CACjE61B,EAAU,cAAc,OAAQ,SAAUpjF,EAAO,CAC/Cpa,GAAKoa,EAAO,SAAUpL,EAAM,CAC1B,IAAI4S,EAAQuB,EAAO,MAAMnU,EAAK,KAAK,OAAO,CAAC,EACvC8pB,EAAQ9pB,EAAK,KAAK,OAAO,EACzByuF,EAAOzuF,EAAK,KAAK,MAAM,EACvBuuB,EAAOvuB,EAAK,KAAK,MAAM,EACvB8pB,IACFlX,EAAM,MAAQkX,GAEZ2kE,IACF77E,EAAM,aAAa,EAAI67E,GAErBlgE,IACF3b,EAAM,WAAW,EAAI+lD,EAAU,SAAS34D,EAAK,KAAK,MAAM,EAAG,EAAE,EAAI,CAAC,GAEpEA,EAAK,KAAO,OACZA,EAAK,KAAK,QAASmU,EAAO,UAAUvB,CAAK,CAAC,EAC1C07E,GAAYtuF,EAAM,CAChB,QACA,OACA,MACF,CAAC,CACH,CAAC,CACH,CAAC,CACH,EACI0uF,GAAwB,SAAUF,EAAWr6E,EAAQ,CACvDq6E,EAAU,cAAc,SAAU,SAAUpjF,EAAO,CACjDpa,GAAKoa,EAAO,SAAUpL,EAAM,CAC1B,IAAI4S,EAAQuB,EAAO,MAAMnU,EAAK,KAAK,OAAO,CAAC,EAC3C4S,EAAM,iBAAiB,EAAI,eAC3B5S,EAAK,KAAO,OACZA,EAAK,KAAK,QAASmU,EAAO,UAAUvB,CAAK,CAAC,CAC5C,CAAC,CACH,CAAC,CACH,EACI+7E,GAAa,SAAUH,EAAWnyE,EAAU,CAC9C,IAAIlI,EAASmV,GAAO,EAChBjN,EAAS,wBACXkyE,GAAqBC,EAAWr6E,EAAQjL,GAAM,QAAQmT,EAAS,uBAAuB,CAAC,EAEzFqyE,GAAsBF,EAAWr6E,CAAM,CACzC,EACIy6E,GAAa,SAAUJ,EAAWnyE,EAAU,CAC1CA,EAAS,eACXsyE,GAAWH,EAAWnyE,CAAQ,CAElC,EACIwyE,GAAe,CAAE,SAAUD,EAAW,EAEtCE,GAAqB,eACrBC,GAAa,CACf,QAAS,EACT,WAAY,EACZ,SAAU,EACV,MAAO,EACP,WAAY,GACZ,qBAAsB,EACxB,EACIC,GAAS,SAAUhvF,EAAMkI,EAAMmxB,EAAM,CACvC,IAAIhtB,EACAnM,EACAme,EAAYgb,EAAO,YAAc,aACjC/sB,EAAc+sB,EAAO,OAAS,OAClC,GAAIr5B,EAAKqe,CAAS,EAChB,OAAOre,EAAKqe,CAAS,EAEvB,GAAIre,IAASkI,EAAM,CAEjB,GADAmE,EAAUrM,EAAKsM,CAAW,EACtBD,EACF,OAAOA,EAET,IAAKnM,EAASF,EAAK,OAAQE,GAAUA,IAAWgI,EAAMhI,EAASA,EAAO,OAEpE,GADAmM,EAAUnM,EAAOoM,CAAW,EACxBD,EACF,OAAOA,CAGb,CACF,EACI4iF,GAAS,UAAY,CACvB,SAAS/5E,EAAKjiB,EAAMvD,EAAM,CACxB,KAAK,KAAOuD,EACZ,KAAK,KAAOvD,EACRA,IAAS,IACX,KAAK,WAAa,CAAC,EACnB,KAAK,WAAW,IAAM,CAAC,EAE3B,CACA,OAAAwlB,EAAK,OAAS,SAAUjiB,EAAMygB,EAAO,CACnC,IAAI1T,EAAMygB,EAEV,GADAzgB,EAAO,IAAIkV,EAAKjiB,EAAM87F,GAAW97F,CAAI,GAAK,CAAC,EACvCygB,EACF,IAAK+M,KAAY/M,EACf1T,EAAK,KAAKygB,EAAU/M,EAAM+M,CAAQ,CAAC,EAGvC,OAAOzgB,CACT,EACAkV,EAAK,UAAU,QAAU,SAAUlV,EAAM,CACvC,IAAI/Q,EAAO,KACX,OAAI+Q,EAAK,QACPA,EAAK,OAAO,EAEd/Q,EAAK,OAAO+Q,EAAM/Q,CAAI,EACtBA,EAAK,OAAO,EACLA,CACT,EACAimB,EAAK,UAAU,KAAO,SAAUjiB,EAAM3F,EAAO,CAC3C,IAAI2B,EAAO,KACPykB,EAAO7iB,EACX,GAAI,OAAOoC,GAAS,SAAU,CAC5B,IAAKpC,KAAKoC,EACRhE,EAAK,KAAK4B,EAAGoC,EAAKpC,CAAC,CAAC,EAEtB,OAAO5B,CACT,CACA,GAAIykB,EAAQzkB,EAAK,WAAY,CAC3B,GAAI3B,IAAU,OAAW,CACvB,GAAIA,IAAU,KAAM,CAClB,GAAI2F,KAAQygB,EAAM,KAGhB,IAFA,OAAOA,EAAM,IAAIzgB,CAAI,EACrBpC,EAAI6iB,EAAM,OACH7iB,KACL,GAAI6iB,EAAM7iB,CAAC,EAAE,OAASoC,EACpB,OAAAygB,EAAQA,EAAM,OAAO7iB,EAAG,CAAC,EAClB5B,EAIb,OAAOA,CACT,CACA,GAAIgE,KAAQygB,EAAM,KAEhB,IADA7iB,EAAI6iB,EAAM,OACH7iB,KACL,GAAI6iB,EAAM7iB,CAAC,EAAE,OAASoC,EAAM,CAC1BygB,EAAM7iB,CAAC,EAAE,MAAQvD,EACjB,KACF,OAGFomB,EAAM,KAAK,CACT,KAAMzgB,EACN,MAAO3F,CACT,CAAC,EAEH,OAAAomB,EAAM,IAAIzgB,CAAI,EAAI3F,EACX2B,CACT,CACA,OAAOykB,EAAM,IAAIzgB,CAAI,CACvB,CACF,EACAiiB,EAAK,UAAU,MAAQ,UAAY,CACjC,IAAIjmB,EAAO,KACPu+B,EAAQ,IAAItY,EAAKjmB,EAAK,KAAMA,EAAK,IAAI,EACrC4B,EAAGgJ,EAAGq1F,EAAWC,EAAUC,EAC/B,GAAIF,EAAYjgG,EAAK,WAAY,CAG/B,IAFAmgG,EAAa,CAAC,EACdA,EAAW,IAAM,CAAC,EACbv+F,EAAI,EAAGgJ,EAAIq1F,EAAU,OAAQr+F,EAAIgJ,EAAGhJ,IACvCs+F,EAAWD,EAAUr+F,CAAC,EAClBs+F,EAAS,OAAS,OACpBC,EAAWA,EAAW,MAAM,EAAI,CAC9B,KAAMD,EAAS,KACf,MAAOA,EAAS,KAClB,EACAC,EAAW,IAAID,EAAS,IAAI,EAAIA,EAAS,OAG7C3hE,EAAM,WAAa4hE,CACrB,CACA,OAAA5hE,EAAM,MAAQv+B,EAAK,MACnBu+B,EAAM,WAAav+B,EAAK,WACjBu+B,CACT,EACAtY,EAAK,UAAU,KAAO,SAAU5K,EAAS,CACvC,IAAIrb,EAAO,KACX,OAAAA,EAAK,OAAO,OAAOqb,EAASrb,CAAI,EAChCqb,EAAQ,OAAOrb,CAAI,EACZA,CACT,EACAimB,EAAK,UAAU,OAAS,UAAY,CAClC,IAAIjmB,EAAO,KACP+Q,EAAMytC,EACV,IAAKztC,EAAO/Q,EAAK,WAAY+Q,GAC3BytC,EAAOztC,EAAK,KACZ/Q,EAAK,OAAO+Q,EAAM/Q,EAAM,EAAI,EAC5B+Q,EAAOytC,EAETx+C,EAAK,OAAO,CACd,EACAimB,EAAK,UAAU,OAAS,UAAY,CAClC,IAAIjmB,EAAO,KAAMiR,EAASjR,EAAK,OAAQw+C,EAAOx+C,EAAK,KAAMoqC,EAAOpqC,EAAK,KACrE,OAAIiR,IACEA,EAAO,aAAejR,GACxBiR,EAAO,WAAautC,EAChBA,IACFA,EAAK,KAAO,OAGdpU,EAAK,KAAOoU,EAEVvtC,EAAO,YAAcjR,GACvBiR,EAAO,UAAYm5B,EACfA,IACFA,EAAK,KAAO,OAGdoU,EAAK,KAAOpU,EAEdpqC,EAAK,OAASA,EAAK,KAAOA,EAAK,KAAO,MAEjCA,CACT,EACAimB,EAAK,UAAU,OAAS,SAAUlV,EAAM,CACtC,IAAI/Q,EAAO,KACPuD,EACJ,OAAIwN,EAAK,QACPA,EAAK,OAAO,EAEdxN,EAAOvD,EAAK,UACRuD,GACFA,EAAK,KAAOwN,EACZA,EAAK,KAAOxN,EACZvD,EAAK,UAAY+Q,GAEjB/Q,EAAK,UAAYA,EAAK,WAAa+Q,EAErCA,EAAK,OAAS/Q,EACP+Q,CACT,EACAkV,EAAK,UAAU,OAAS,SAAUlV,EAAMqvF,EAASr6D,EAAQ,CACvD,IAAI90B,EACJ,OAAIF,EAAK,QACPA,EAAK,OAAO,EAEdE,EAASmvF,EAAQ,QAAU,KACvBr6D,GACEq6D,IAAYnvF,EAAO,WACrBA,EAAO,WAAaF,EAEpBqvF,EAAQ,KAAK,KAAOrvF,EAEtBA,EAAK,KAAOqvF,EAAQ,KACpBrvF,EAAK,KAAOqvF,EACZA,EAAQ,KAAOrvF,IAEXqvF,IAAYnvF,EAAO,UACrBA,EAAO,UAAYF,EAEnBqvF,EAAQ,KAAK,KAAOrvF,EAEtBA,EAAK,KAAOqvF,EAAQ,KACpBrvF,EAAK,KAAOqvF,EACZA,EAAQ,KAAOrvF,GAEjBA,EAAK,OAASE,EACPF,CACT,EACAkV,EAAK,UAAU,OAAS,SAAUjiB,EAAM,CACtC,IAAIhE,EAAO,KACP+Q,EACAgH,EAAa,CAAC,EAClB,IAAKhH,EAAO/Q,EAAK,WAAY+Q,EAAMA,EAAOgvF,GAAOhvF,EAAM/Q,CAAI,EACrD+Q,EAAK,OAAS/M,GAChB+T,EAAW,KAAKhH,CAAI,EAGxB,OAAOgH,CACT,EACAkO,EAAK,UAAU,MAAQ,UAAY,CACjC,IAAIjmB,EAAO,KACPmc,EAAOva,EAAGmP,EACd,GAAI/Q,EAAK,WAAY,CAEnB,IADAmc,EAAQ,CAAC,EACJpL,EAAO/Q,EAAK,WAAY+Q,EAAMA,EAAOgvF,GAAOhvF,EAAM/Q,CAAI,EACzDmc,EAAM,KAAKpL,CAAI,EAGjB,IADAnP,EAAIua,EAAM,OACHva,KACLmP,EAAOoL,EAAMva,CAAC,EACdmP,EAAK,OAASA,EAAK,WAAaA,EAAK,UAAYA,EAAK,KAAOA,EAAK,KAAO,IAE7E,CACA,OAAA/Q,EAAK,WAAaA,EAAK,UAAY,KAC5BA,CACT,EACAimB,EAAK,UAAU,QAAU,SAAUlU,EAAUpE,EAAYwK,EAAW,CAClE,IAAInY,EAAO,KACP+Q,EAAO/Q,EAAK,WAAY4B,EAAGoC,EAE/B,GADA2J,EAAaA,GAAc,CAAC,EACxBoD,EACF,EAAG,CACD,GAAIA,EAAK,OAAS,EAAG,CACnB,GAAIA,EAAK,WAAW,IAAI,gBAAgB,EACtC,SAEF,GAAIgB,EAAShB,EAAK,IAAI,EACpB,MAAO,GAGT,IADAnP,EAAImP,EAAK,WAAW,OACbnP,KAEL,GADAoC,EAAO+M,EAAK,WAAWnP,CAAC,EAAE,KACtBoC,IAAS,QAAUA,EAAK,QAAQ,mBAAmB,IAAM,EAC3D,MAAO,EAGb,CAUA,GATI+M,EAAK,OAAS,GAGdA,EAAK,OAAS,GAAK,CAAC8uF,GAAmB,KAAK9uF,EAAK,KAAK,GAGtDA,EAAK,OAAS,GAAKA,EAAK,QAAUpD,EAAWoD,EAAK,OAAO,IAAI,GAAK8uF,GAAmB,KAAK9uF,EAAK,KAAK,GAGpGoH,GAAaA,EAAUpH,CAAI,EAC7B,MAAO,EAEX,OAASA,EAAOgvF,GAAOhvF,EAAM/Q,CAAI,GAEnC,MAAO,EACT,EACAimB,EAAK,UAAU,KAAO,SAAUmkB,EAAM,CACpC,OAAO21D,GAAO,KAAM,KAAM31D,CAAI,CAChC,EACOnkB,CACT,EAAE,EAEEo6E,GAAgB,SAAUjzE,EAAUlvB,EAAMymD,EAAe5zC,EAAM,CACjE,IAAIuvF,EAAclzE,EAAS,oBAAsBlvB,EAAK,OAClDoiG,GAAe37C,EAAc5zC,EAAK,IAAI,EACxCA,EAAK,MAAM,EAAE,OAAO,IAAIivF,GAAO,KAAM,CAAC,CAAC,EAAE,WAAa,GAEtDjvF,EAAK,MAAM,EAAE,OAAO,IAAIivF,GAAO,QAAS,CAAC,CAAC,EAAE,MAAQ,MAExD,EACIO,GAAmB,SAAUxvF,EAAM,CACrC,OAAOyvF,GAAazvF,EAAM,OAAO,GAAKA,EAAK,WAAW,QAAU,MAClE,EACIyvF,GAAe,SAAUzvF,EAAM/M,EAAM,CACvC,OAAO+M,GAAQA,EAAK,YAAcA,EAAK,aAAeA,EAAK,WAAaA,EAAK,WAAW,OAAS/M,CACnG,EACIy8F,GAAW,SAAUvrE,EAAQnkB,EAAM,CACrC,IAAI0nB,EAAOvD,EAAO,eAAenkB,EAAK,IAAI,EAC1C,OAAO0nB,GAAQA,EAAK,SACtB,EACIioE,GAAY,SAAUxrE,EAAQ2vB,EAAkB87C,EAAoB5vF,EAAM,CAC5E,OAAOA,EAAK,QAAQ8zC,EAAkB87C,EAAoB,SAAU5vF,EAAM,CACxE,OAAO0vF,GAASvrE,EAAQnkB,CAAI,CAC9B,CAAC,CACH,EACI6vF,GAAkB,SAAU7vF,EAAM4zC,EAAe,CACnD,OAAO5zC,IAAS4zC,EAAc5zC,EAAK,IAAI,GAAKA,EAAK,OAAS,KAC5D,EAEI8vF,GAAa,SAAUn2C,EAAQt9B,EAAU,CAC3C,IAAI8H,EAASw1B,EAAO,OAChBt9B,EAAS,qBACXs9B,EAAO,cAAc,KAAM,SAAUvuC,EAAOrN,EAAG5Q,EAAM,CACnD,IAAI0D,EACAgJ,EAAIuR,EAAM,OACVpL,EACA4zC,EAAgB1qC,GAAM,OAAO,CAAC,EAAGib,EAAO,iBAAiB,CAAC,EAC1D2vB,EAAmB3vB,EAAO,oBAAoB,EAC9CjkB,EAAQqK,EAAY8uB,EAAM02D,EAC1BC,GAAqB7rE,EAAO,sBAAsB,EAClDyzB,GAAa9b,GAEjB,IADA8X,EAAc,KAAO,EAChB/iD,EAAI,EAAGA,EAAIgJ,EAAGhJ,IAGjB,GAFAmP,EAAOoL,EAAMva,CAAC,EACdqP,EAASF,EAAK,OACV4zC,EAAc5zC,EAAK,OAAO,IAAI,GAAKA,IAASE,EAAO,UAAW,CAEhE,IADAm5B,EAAOr5B,EAAK,KACLq5B,GAAM,CAEX,GADA02D,EAAW12D,EAAK,KACZ02D,IAAa,QAAU12D,EAAK,KAAK,eAAe,IAAM,WAAY,CACpE,GAAI02D,IAAa,KACf,MAEF,GAAIA,IAAa,KAAM,CACrB/vF,EAAO,KACP,KACF,CACF,CACAq5B,EAAOA,EAAK,IACd,CACIr5B,IACFA,EAAK,OAAO,EACR2vF,GAAUxrE,EAAQ2vB,EAAkBk8C,GAAoB9vF,CAAM,IAChE03C,GAAczzB,EAAO,eAAejkB,EAAO,IAAI,EAC3C03C,KACEA,GAAY,YACd13C,EAAO,OAAO,EACL03C,GAAY,WACrB03C,GAAcjzE,EAAUlvB,EAAMymD,EAAe1zC,CAAM,IAK7D,KAAO,CAEL,IADAqK,EAAavK,EACNE,GAAUA,EAAO,aAAeqK,GAAcrK,EAAO,YAAcqK,IACxEA,EAAarK,EACT,CAAA0zC,EAAc1zC,EAAO,IAAI,IAG7BA,EAASA,EAAO,OAEdqK,IAAerK,GAAUmc,EAAS,qBAAuB,KAC3Dyf,GAAW,IAAImzD,GAAO,QAAS,CAAC,EAChCnzD,GAAS,MAAQ,OACjB97B,EAAK,QAAQ87B,EAAQ,EAEzB,CAEJ,CAAC,EAEH6d,EAAO,mBAAmB,OAAQ,SAAUvuC,EAAO,CACjD,IAAIva,EAAIua,EAAM,OAAQpL,EAClBiwF,EAAY,SAAUC,EAAK,CAC7B,IAAIt9F,EAAQs9F,EAAI,MAAM,GAAG,EAAE,OAAO,SAAUn9F,EAAG,CAC7C,OAAOA,EAAE,OAAS,CACpB,CAAC,EACD,OAAOH,EAAM,OAAO,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,CACnD,EACIu9F,EAAc,SAAUD,EAAK,CAC/B,IAAIE,EAASF,EAAMhnF,GAAM,KAAKgnF,CAAG,EAAI,GACrC,MAAK,kBAAkB,KAAKE,CAAM,EAGzBA,EAFAH,EAAUG,CAAM,CAI3B,EACA,GAAI,CAAC/zE,EAAS,yBACZ,KAAOxrB,KACLmP,EAAOoL,EAAMva,CAAC,EACVmP,EAAK,OAAS,KAAOA,EAAK,KAAK,QAAQ,IAAM,UAC/CA,EAAK,KAAK,MAAOmwF,EAAYnwF,EAAK,KAAK,KAAK,CAAC,CAAC,CAItD,CAAC,EACIqc,EAAS,4BACZs9B,EAAO,mBAAmB,UAAW,SAAUvuC,EAAO,CAEpD,QADIva,EAAIua,EAAM,OAAQiB,EAASgK,EAAanW,EAAQF,EAC7CnP,KAEL,GADAmP,EAAOoL,EAAMva,CAAC,EACVmP,EAAK,OAAS,KAAOA,EAAK,YAAc,CAACA,EAAK,KAAK,MAAM,EAAG,CAC9DE,EAASF,EAAK,OACdqM,EAAUrM,EAAK,UACf,GACEqW,EAAchK,EAAQ,KACtBnM,EAAO,OAAOmM,EAASrM,CAAI,EAC3BqM,EAAUgK,QACHhK,EACX,CAEJ,CAAC,EAECgQ,EAAS,mBACXs9B,EAAO,cAAc,QAAS,SAAUvuC,EAAO,CAE7C,QADIva,EAAIua,EAAM,OAAQpL,EAAM+7B,EACrBlrC,KAGL,GAFAmP,EAAOoL,EAAMva,CAAC,EACdkrC,EAAa/7B,EAAK,OACd+7B,EAAW,OAAS,MAAQA,EAAW,OAAS,KAClD,GAAI/7B,EAAK,MAAQA,EAAK,KAAK,OAAS,KAClCA,EAAK,KAAK,OAAOA,CAAI,MAChB,CACL,IAAIq1C,EAAK,IAAI45C,GAAO,KAAM,CAAC,EAC3B55C,EAAG,KAAK,QAAS,uBAAuB,EACxCr1C,EAAK,KAAKq1C,CAAE,CACd,CAGN,CAAC,EAECh5B,EAAS,UAAY8H,EAAO,gBAAgB,GAC9Cw1B,EAAO,mBAAmB,QAAS,SAAUvuC,EAAO,CAIlD,QAHIva,EAAIua,EAAM,OAAQpL,EAAM62B,EAAWx8B,EAAImG,EAAW6vF,EAClD1qE,EAAexB,EAAO,gBAAgB,EACtCmsE,EAAiBC,EACd1/F,KAAK,CAIV,IAHAmP,EAAOoL,EAAMva,CAAC,EACdgmC,EAAY72B,EAAK,KAAK,OAAO,EAAE,MAAM,GAAG,EACxCqwF,EAAa,GACRh2F,EAAK,EAAGA,EAAKw8B,EAAU,OAAQx8B,IAClCmG,EAAYq2B,EAAUx8B,CAAE,EACxBk2F,EAAQ,GACRD,EAAkB3qE,EAAa,GAAG,EAC9B2qE,GAAmBA,EAAgB9vF,CAAS,IAC9C+vF,EAAQ,IAEVD,EAAkB3qE,EAAa3lB,EAAK,IAAI,EACpC,CAACuwF,GAASD,GAAmBA,EAAgB9vF,CAAS,IACxD+vF,EAAQ,IAENA,IACEF,IACFA,GAAc,KAEhBA,GAAc7vF,GAGb6vF,EAAW,SACdA,EAAa,MAEfrwF,EAAK,KAAK,QAASqwF,CAAU,CAC/B,CACF,CAAC,CAEL,EAEIG,GAAYtnF,GAAM,QAASunF,GAASvnF,GAAM,KAAMwnF,GAAYxnF,GAAM,QAASynF,GAAWznF,GAAM,OAChG,SAAS0nF,GAAWv0E,EAAU8H,EAAQ,CAChCA,IAAW,SACbA,EAASe,GAAO,GAElB,IAAI2rE,EAAc,CAAC,EACfC,EAAmB,CAAC,EACpBC,EAAe,CAAC,EAChBC,EAAoB,CAAC,EACzB30E,EAAWA,GAAY,CAAC,EACxBA,EAAS,SAAW,aAAcA,EAAWA,EAAS,SAAW,GACjEA,EAAS,UAAYA,EAAS,WAAa,OAC3C,IAAI40E,EAAqB,SAAU7lF,EAAO,CACxC,IAAIuZ,GAAI3kB,GAAME,GAAQ+V,GAASi7E,GAAWC,GAAand,GAAUod,GAAWvgG,GACxEijD,GAAkB87C,GAAoByB,GAAsBC,GAAmBprE,GAAiB7Z,GAASi/B,GAM7G,IALA+lD,GAAuBb,GAAU,kCAAkC,EACnE18C,GAAmB3vB,EAAO,oBAAoB,EAC9CyrE,GAAqBzrE,EAAO,sBAAsB,EAClDmtE,GAAoBntE,EAAO,qBAAqB,EAChD+B,GAAkB/B,EAAO,mBAAmB,EACvCQ,GAAK,EAAGA,GAAKvZ,EAAM,OAAQuZ,KAE9B,GADA3kB,GAAOoL,EAAMuZ,EAAE,EACX,GAAC3kB,GAAK,QAAUA,GAAK,OAGzB,IAAIsxF,GAAkBtxF,GAAK,IAAI,GAAKA,GAAK,OAAO,OAAS,KAAM,CAE7D,IADAqM,GAAUrM,GAAK,KACRqM,IACDilF,GAAkBjlF,GAAQ,IAAI,GADpB,CAEZA,GAAQ,KAAO,KACfA,GAAQ,MAAQ,GAChBrM,GAAK,OAAO,OAAOqM,GAASrM,GAAK,MAAM,EAIzCqM,GAAUA,GAAQ,IACpB,CACArM,GAAK,OAAOA,EAAI,EAChB,QACF,CAEA,IADAiW,GAAU,CAACjW,EAAI,EACVE,GAASF,GAAK,OAAQE,IAAU,CAACikB,EAAO,aAAajkB,GAAO,KAAMF,GAAK,IAAI,GAAK,CAACqxF,GAAqBnxF,GAAO,IAAI,EAAGA,GAASA,GAAO,OACvI+V,GAAQ,KAAK/V,EAAM,EAErB,GAAIA,IAAU+V,GAAQ,OAAS,EAAG,CAGhC,IAFAA,GAAQ,QAAQ,EAChBi7E,GAAYC,GAAcI,EAAWt7E,GAAQ,CAAC,EAAE,MAAM,CAAC,EAClDplB,GAAI,EAAGA,GAAIolB,GAAQ,OAAS,EAAGplB,KAAK,CAOvC,IANIszB,EAAO,aAAagtE,GAAY,KAAMl7E,GAAQplB,EAAC,EAAE,IAAI,GACvDmjF,GAAWud,EAAWt7E,GAAQplB,EAAC,EAAE,MAAM,CAAC,EACxCsgG,GAAY,OAAOnd,EAAQ,GAE3BA,GAAWmd,GAERC,GAAYn7E,GAAQplB,EAAC,EAAE,WAAYugG,IAAaA,KAAcn7E,GAAQplB,GAAI,CAAC,GAC9Ey6C,GAAW8lD,GAAU,KACrBpd,GAAS,OAAOod,EAAS,EACzBA,GAAY9lD,GAEd6lD,GAAcnd,EAChB,CACK2b,GAAUxrE,EAAQ2vB,GAAkB87C,GAAoBsB,EAAS,EAIpEhxF,GAAO,OAAOF,GAAMiW,GAAQ,CAAC,EAAG,EAAI,GAHpC/V,GAAO,OAAOgxF,GAAWj7E,GAAQ,CAAC,EAAG,EAAI,EACzC/V,GAAO,OAAOF,GAAMkxF,EAAS,GAI/BhxF,GAAS+V,GAAQ,CAAC,GACd05E,GAAUxrE,EAAQ2vB,GAAkB87C,GAAoB1vF,EAAM,GAAKuvF,GAAavvF,GAAQ,IAAI,IAC9FA,GAAO,MAAM,EAAE,OAAO,CAE1B,SAAWF,GAAK,OAAQ,CACtB,GAAIA,GAAK,OAAS,KAAM,CAEtB,GADAqM,GAAUrM,GAAK,KACXqM,KAAYA,GAAQ,OAAS,MAAQA,GAAQ,OAAS,MAAO,CAC/DA,GAAQ,OAAOrM,EAAI,EACnB,QACF,CAEA,GADAqM,GAAUrM,GAAK,KACXqM,KAAYA,GAAQ,OAAS,MAAQA,GAAQ,OAAS,MAAO,CAC/DA,GAAQ,OAAOrM,GAAMqM,GAAQ,WAAY,EAAI,EAC7C,QACF,CACArM,GAAK,KAAKuxF,EAAW,IAAItC,GAAO,KAAM,CAAC,CAAC,CAAC,EACzC,QACF,CACI9qE,EAAO,aAAankB,GAAK,OAAO,KAAM,KAAK,GAAKmkB,EAAO,aAAa,MAAOnkB,GAAK,IAAI,EACtFA,GAAK,KAAKuxF,EAAW,IAAItC,GAAO,MAAO,CAAC,CAAC,CAAC,EAEtC/oE,GAAgBlmB,GAAK,IAAI,EAC3BA,GAAK,MAAM,EAAE,OAAO,EAEpBA,GAAK,OAAO,CAGlB,EAEJ,EACIuxF,EAAa,SAAUvxF,EAAM,CAC/B,IAAInP,GAAGoC,GAAM8tE,GAWb,IAVA9tE,GAAO+M,EAAK,MACR/M,MAAQ49F,KACV9vB,GAAOgwB,EAAa99F,EAAI,EACpB8tE,GACFA,GAAK,KAAK/gE,CAAI,EAEd+wF,EAAa99F,EAAI,EAAI,CAAC+M,CAAI,GAG9BnP,GAAIigG,EAAiB,OACdjgG,MACLoC,GAAO69F,EAAiBjgG,EAAC,EAAE,KACvBoC,MAAQ+M,EAAK,WAAW,MAC1B+gE,GAAOiwB,EAAkB/9F,EAAI,EACzB8tE,GACFA,GAAK,KAAK/gE,CAAI,EAEdgxF,EAAkB/9F,EAAI,EAAI,CAAC+M,CAAI,GAIrC,OAAOA,CACT,EACIwxF,EAAgB,SAAUv+F,EAAMwD,GAAU,CAC5Cg6F,GAAOC,GAAUz9F,CAAI,EAAG,SAAUA,GAAM,CACtC,IAAI8tE,GAAO8vB,EAAY59F,EAAI,EACtB8tE,KACH8vB,EAAY59F,EAAI,EAAI8tE,GAAO,CAAC,GAE9BA,GAAK,KAAKtqE,EAAQ,CACpB,CAAC,CACH,EACIg7F,EAAiB,UAAY,CAC/B,IAAI/qF,EAAM,CAAC,EACX,QAASzT,MAAQ49F,EACXA,EAAY,eAAe59F,EAAI,GACjCyT,EAAI,KAAK,CACP,KAAMzT,GACN,UAAW49F,EAAY59F,EAAI,CAC7B,CAAC,EAGL,OAAOyT,CACT,EACIgrF,EAAqB,SAAUz+F,EAAMwD,GAAU,CACjDg6F,GAAOC,GAAUz9F,CAAI,EAAG,SAAUA,GAAM,CACtC,IAAIpC,GACJ,IAAKA,GAAI,EAAGA,GAAIigG,EAAiB,OAAQjgG,KACvC,GAAIigG,EAAiBjgG,EAAC,EAAE,OAASoC,GAAM,CACrC69F,EAAiBjgG,EAAC,EAAE,UAAU,KAAK4F,EAAQ,EAC3C,MACF,CAEFq6F,EAAiB,KAAK,CACpB,KAAM79F,GACN,UAAW,CAACwD,EAAQ,CACtB,CAAC,CACH,CAAC,CACH,EACIk7F,EAAsB,UAAY,CACpC,MAAO,CAAC,EAAE,OAAOb,CAAgB,CACnC,EACIpS,EAAQ,SAAU90E,EAAMzc,GAAM,CAChC,IAAIwsD,GAAQvuC,GAAOva,GAAGgJ,GAAG+3F,GAAIC,GAAI9wB,GAAM9tE,GACnC2gD,GACAk+C,GAAkB,CAAC,EACnBC,GACA/xF,GACJ7S,GAAOA,IAAQ,CAAC,EAChB4jG,EAAe,CAAC,EAChBC,EAAoB,CAAC,EACrBp9C,GAAgB+8C,GAASH,GAAU,8CAA8C,EAAGrsE,EAAO,iBAAiB,CAAC,EAC7G,IAAI2vB,GAAmB3vB,EAAO,oBAAoB,EAC9C5pB,GAAW4pB,EAAO,SAClBszB,GAAWp7B,EAAS,SACpB21E,GAAgB,sBAAuB7kG,GAAOA,GAAK,kBAAoBkvB,EAAS,kBAChF2zE,GAAqB7rE,EAAO,sBAAsB,EAClD8tE,GAAwB,cACxBC,GAAsB,cACtBC,GAAsB,cACtBC,GAAwB,eAC5BL,GAAiC/B,GAAmB,eAAe7iG,GAAK,OAAO,GAAK6iG,GAAmB,eAAe3zE,EAAS,SAAS,EACxI,IAAIy3D,GAAgB,UAAY,CAC9B,IAAI9zE,GAAOme,GAAS,WAAYsvB,GAAMsmC,GAClCtsE,GAAO,SAAUssE,GAAe,CAC9BA,KACF/zE,GAAO+zE,GAAc,WACjB/zE,IAAQA,GAAK,OAAS,IACxBA,GAAK,MAAQA,GAAK,MAAM,QAAQiyF,GAAuB,EAAE,GAE3DjyF,GAAO+zE,GAAc,UACjB/zE,IAAQA,GAAK,OAAS,IACxBA,GAAK,MAAQA,GAAK,MAAM,QAAQkyF,GAAqB,EAAE,GAG7D,EACA,GAAK/tE,EAAO,aAAahG,GAAS,KAAM6zE,GAAc,YAAY,CAAC,EAGnE,MAAOhyF,IACLytC,GAAOztC,GAAK,KACRA,GAAK,OAAS,GAAKA,GAAK,OAAS,GAAKA,GAAK,OAAS,KAAO,CAAC4zC,GAAc5zC,GAAK,IAAI,GAAK,CAACA,GAAK,KAAK,eAAe,GAC/G+zE,KACHA,GAAgBse,GAAWL,GAAe,CAAC,EAC3Cje,GAAc,KAAK13D,EAAS,uBAAuB,EACnD8B,GAAS,OAAO41D,GAAe/zE,EAAI,GACnC+zE,GAAc,OAAO/zE,EAAI,IAK3ByH,GAAKssE,EAAa,EAClBA,GAAgB,MAElB/zE,GAAOytC,GAEThmC,GAAKssE,EAAa,EACpB,EACIse,GAAa,SAAUp/F,GAAMvD,GAAM,CACrC,IAAIsQ,GAAO,IAAIivF,GAAOh8F,GAAMvD,EAAI,EAC5BqxE,GACJ,OAAI9tE,MAAQ49F,IACV9vB,GAAOgwB,EAAa99F,EAAI,EACpB8tE,GACFA,GAAK,KAAK/gE,EAAI,EAEd+wF,EAAa99F,EAAI,EAAI,CAAC+M,EAAI,GAGvBA,EACT,EACIsyF,GAAyB,SAAUtyF,GAAM,CAC3C,IAAI87B,GAAUy2D,GAAcC,GAASnmF,GACjCunC,GAAgBzvB,EAAO,iBAAiB,EAC5C,IAAK2X,GAAW97B,GAAK,KAAM87B,IAAYA,GAAS,OAAS,GAAI,CAE3D,GADA02D,GAAU12D,GAAS,MAAM,QAAQo2D,GAAqB,EAAE,EACpDM,GAAQ,OAAS,EAAG,CACtB12D,GAAS,MAAQ02D,GACjB,MACF,CAEA,GADAD,GAAez2D,GAAS,KACpBy2D,GAAc,CAChB,GAAIA,GAAa,OAAS,GAAKA,GAAa,MAAM,OAAQ,CACxDz2D,GAAWA,GAAS,KACpB,QACF,CACA,GAAI,CAAC8X,GAAc2+C,GAAa,IAAI,GAAKA,GAAa,OAAS,UAAYA,GAAa,OAAS,QAAS,CACxGz2D,GAAWA,GAAS,KACpB,QACF,CACF,CACAzvB,GAAUyvB,GAAS,KACnBA,GAAS,OAAO,EAChBA,GAAWzvB,EACb,CACF,EACIomF,GAAwB,SAAUjwF,GAAO,CAC3C,IAAIvP,GACApB,GAAS,CAAC,EACd,IAAKoB,MAAQuP,GACPvP,KAAS,MAAQA,KAAS,MAC5BpB,GAAOoB,EAAI,EAAIuP,GAAMvP,EAAI,GAG7B,OAAOpB,EACT,EACA8nD,GAAS6mC,GAAY,CACnB,SAAU/oC,GACV,kBAAmBp7B,EAAS,kBAC5B,2BAA4BA,EAAS,2BACrC,sBAAuBo2E,GAAsBtuE,EAAO,uBAAuB,CAAC,EAC5E,MAAO,SAAUxhB,GAAM,CACrB3C,GAAK,OAAOqyF,GAAW,SAAU,CAAC,CAAC,EAAE,MAAQ1vF,EAC/C,EACA,KAAM,SAAUA,GAAM2R,GAAK,CACzB,IAAIwnB,GACCi2D,KACHpvF,GAAOA,GAAK,QAAQwvF,GAAqB,GAAG,EACxCtC,GAAgB7vF,GAAK,UAAW4zC,EAAa,IAC/CjxC,GAAOA,GAAK,QAAQsvF,GAAuB,EAAE,IAG7CtvF,GAAK,SAAW,IAClBm5B,GAAWu2D,GAAW,QAAS,CAAC,EAChCv2D,GAAS,IAAM,CAAC,CAACxnB,GACjBtU,GAAK,OAAO87B,EAAQ,EAAE,MAAQn5B,GAElC,EACA,QAAS,SAAUA,GAAM,CACvB3C,GAAK,OAAOqyF,GAAW,WAAY,CAAC,CAAC,EAAE,MAAQ1vF,EACjD,EACA,GAAI,SAAU1P,GAAM0P,GAAM,CACxB3C,GAAK,OAAOqyF,GAAWp/F,GAAM,CAAC,CAAC,EAAE,MAAQ0P,GACzC2vF,GAAuBtyF,EAAI,CAC7B,EACA,QAAS,SAAU2C,GAAM,CACvB,IAAI0lD,GACJA,GAAUroD,GAAK,OAAOqyF,GAAW,WAAY,EAAE,CAAC,EAChDhqC,GAAQ,MAAQ1lD,GAChB2vF,GAAuBtyF,EAAI,CAC7B,EACA,MAAO,SAAU/M,GAAMygB,GAAO+hB,GAAO,CACnC,IAAI4yB,GAASqqC,GAAgB96C,GAAan3B,GAAUvgB,GAEpD,GADA03C,GAAcH,GAAWtzB,EAAO,eAAelxB,EAAI,EAAI,CAAC,EACpD2kD,GAAa,CAUf,IATAyQ,GAAUgqC,GAAWz6C,GAAY,YAAc3kD,GAAM,CAAC,EACtDo1D,GAAQ,WAAa30C,GACrB20C,GAAQ,WAAa5yB,GACrBz1B,GAAK,OAAOqoD,EAAO,EACnBnoD,GAAS3F,GAASyF,GAAK,IAAI,EACvBE,IAAU3F,GAAS8tD,GAAQ,IAAI,GAAK,CAACnoD,GAAOmoD,GAAQ,IAAI,GAC1DypC,GAAgB,KAAKzpC,EAAO,EAE9BqqC,GAAiB5B,EAAiB,OAC3B4B,MACLjyE,GAAWqwE,EAAiB4B,EAAc,EAAE,KACxCjyE,MAAY/M,GAAM,MACpBqtD,GAAOiwB,EAAkBvwE,EAAQ,EAC7BsgD,GACFA,GAAK,KAAK1Y,EAAO,EAEjB2oC,EAAkBvwE,EAAQ,EAAI,CAAC4nC,EAAO,GAIxCzU,GAAc3gD,EAAI,GACpBq/F,GAAuBjqC,EAAO,EAE3B5yB,KACHz1B,GAAOqoD,IAEL,CAAC0pC,IAAkC/B,GAAmB/8F,EAAI,IAC5D8+F,GAAiC,GAErC,CACF,EACA,IAAK,SAAU9+F,GAAM,CACnB,IAAI6oC,GAAU8b,GAAaj1C,GAAM0J,GAAS2nE,GAE1C,GADAp8B,GAAcH,GAAWtzB,EAAO,eAAelxB,EAAI,EAAI,CAAC,EACpD2kD,GAAa,CACf,GAAIhE,GAAc3gD,EAAI,GAChB,CAAC8+F,GAAgC,CAEnC,GADAj2D,GAAW97B,GAAK,WACZ87B,IAAYA,GAAS,OAAS,EAEhC,GADAn5B,GAAOm5B,GAAS,MAAM,QAAQm2D,GAAuB,EAAE,EACnDtvF,GAAK,OAAS,EAChBm5B,GAAS,MAAQn5B,GACjBm5B,GAAWA,GAAS,SAKpB,KAHAzvB,GAAUyvB,GAAS,KACnBA,GAAS,OAAO,EAChBA,GAAWzvB,GACJyvB,IAAYA,GAAS,OAAS,GACnCn5B,GAAOm5B,GAAS,MAChBzvB,GAAUyvB,GAAS,MACfn5B,GAAK,SAAW,GAAKyvF,GAAsB,KAAKzvF,EAAI,KACtDm5B,GAAS,OAAO,EAChBA,GAAWzvB,IAEbyvB,GAAWzvB,GAKjB,GADAyvB,GAAW97B,GAAK,UACZ87B,IAAYA,GAAS,OAAS,EAEhC,GADAn5B,GAAOm5B,GAAS,MAAM,QAAQo2D,GAAqB,EAAE,EACjDvvF,GAAK,OAAS,EAChBm5B,GAAS,MAAQn5B,GACjBm5B,GAAWA,GAAS,SAKpB,KAHAzvB,GAAUyvB,GAAS,KACnBA,GAAS,OAAO,EAChBA,GAAWzvB,GACJyvB,IAAYA,GAAS,OAAS,GACnCn5B,GAAOm5B,GAAS,MAChBzvB,GAAUyvB,GAAS,MACfn5B,GAAK,SAAW,GAAKyvF,GAAsB,KAAKzvF,EAAI,KACtDm5B,GAAS,OAAO,EAChBA,GAAWzvB,IAEbyvB,GAAWzvB,EAInB,CAKF,GAHI0lF,IAAkC/B,GAAmB/8F,EAAI,IAC3D8+F,GAAiC,IAE/Bn6C,GAAY,aAAe+3C,GAAUxrE,EAAQ2vB,GAAkBk8C,GAAoBhwF,EAAI,GACrF,CAACA,GAAK,WAAW,IAAI,MAAQ,CAACA,GAAK,KAAK,IAAI,EAAG,CACjDg0E,GAAWh0E,GAAK,OACZ4zC,GAAc5zC,GAAK,IAAI,EACzBA,GAAK,MAAM,EAAE,OAAO,EAEpBA,GAAK,OAAO,EAEdA,GAAOg0E,GACP,MACF,CAEEp8B,GAAY,YAAc43C,GAAiBxvF,EAAI,GAAK2vF,GAAUxrE,EAAQ2vB,GAAkBk8C,GAAoBhwF,EAAI,IAClHsvF,GAAcjzE,EAAUlvB,GAAMymD,GAAe5zC,EAAI,EAEnDA,GAAOA,GAAK,MACd,CACF,CACF,EAAGmkB,CAAM,EACT,IAAIhG,GAAWne,GAAO,IAAIivF,GAAO9hG,GAAK,SAAWkvB,EAAS,UAAW,EAAE,EAYvE,GAXAs9B,GAAO,MAAM/vC,CAAI,EACb6tC,IAAYq6C,GAAgB,SACzB3kG,GAAK,QAGRA,GAAK,QAAU,GAFf8jG,EAAmBa,EAAe,GAKlCE,KAAkB7zE,GAAS,OAAS,QAAUhxB,GAAK,gBACrD2mF,GAAc,EAEZ,CAAC3mF,GAAK,QAAS,CACjB,IAAK8F,MAAQ89F,EAAc,CAIzB,IAHAhwB,GAAO8vB,EAAY59F,EAAI,EACvBmY,GAAQ2lF,EAAa99F,EAAI,EACzB2+F,GAAKxmF,GAAM,OACJwmF,MACAxmF,GAAMwmF,EAAE,EAAE,QACbxmF,GAAM,OAAOwmF,GAAI,CAAC,EAGtB,IAAK/gG,GAAI,EAAGgJ,GAAIknE,GAAK,OAAQlwE,GAAIgJ,GAAGhJ,KAClCkwE,GAAKlwE,EAAC,EAAEua,GAAOnY,GAAM9F,EAAI,CAE7B,CACA,IAAK0D,GAAI,EAAGgJ,GAAIi3F,EAAiB,OAAQjgG,GAAIgJ,GAAGhJ,KAE9C,GADAkwE,GAAO+vB,EAAiBjgG,EAAC,EACrBkwE,GAAK,QAAQiwB,EAAmB,CAGlC,IAFA5lF,GAAQ4lF,EAAkBjwB,GAAK,IAAI,EACnC6wB,GAAKxmF,GAAM,OACJwmF,MACAxmF,GAAMwmF,EAAE,EAAE,QACbxmF,GAAM,OAAOwmF,GAAI,CAAC,EAGtB,IAAKA,GAAK,EAAGC,GAAK9wB,GAAK,UAAU,OAAQ6wB,GAAKC,GAAID,KAChD7wB,GAAK,UAAU6wB,EAAE,EAAExmF,GAAO21D,GAAK,KAAM5zE,EAAI,CAE7C,CAEJ,CACA,OAAOgxB,EACT,EACIvxB,EAAU,CACZ,OAAQu3B,EACR,mBAAoButE,EACpB,oBAAqBC,EACrB,cAAeH,EACf,eAAgBC,EAChB,WAAYF,EACZ,MAAO7S,CACT,EACA,OAAAoR,GAAWljG,EAASyvB,CAAQ,EAC5BwyE,GAAa,SAASjiG,EAASyvB,CAAQ,EAChCzvB,CACT,CAEA,IAAI+lG,GAAc,SAAUjF,EAAYhN,EAAWztF,EAAM,CACnDiW,GAAM,QAAQw3E,EAAWztF,CAAI,IAAM,KACrCy6F,EAAW,mBAAmBz6F,EAAM,SAAUmY,EAAOnY,EAAM,CAEzD,QADIpC,EAAIua,EAAM,OACPva,KACLua,EAAMva,CAAC,EAAE,KAAKoC,EAAM,IAAI,CAE5B,CAAC,EACDytF,EAAU,KAAKztF,CAAI,EAEvB,EACI2/F,GAAgB,SAAUr7F,EAAQpK,EAAMue,EAAS,CACnD,GAAI,CAACve,EAAK,WAAaoK,EAAQ,CAC7B,IAAIs7F,EAAUxwB,GAAO,gBAAgB9qE,EAAQohD,GAAMxrD,EAAM,CAAE,QAASue,CAAQ,CAAC,CAAC,EAC9E,OAAOmnF,EAAQ,OACjB,KACE,QAAOnnF,CAEX,EACIonF,GAAkB,SAAUz/E,EAAKrT,EAAM7S,EAAM,CAC/C,IAAIyc,EAAO0xB,GAAK,KAAKnuC,EAAK,SAAW6S,EAAK,UAAYqT,EAAI,aAAarT,CAAI,CAAC,EAC5E,OAAO7S,EAAK,WAAa0yB,GAAoBpO,GAAQ,QAAQzR,CAAI,CAAC,EAAI4J,EAAOV,GAAM,KAAKU,CAAI,CAC9F,EACImpF,GAAY,SAAUrF,EAAY9jF,EAAMzc,EAAM,CAChD,IAAI2sD,EAAa3sD,EAAK,UAAYwrD,GAAM,CAAE,kBAAmB,EAAM,EAAGxrD,CAAI,EAAIA,EAC1EgxB,EAAWuvE,EAAW,MAAM9jF,EAAMkwC,CAAU,EAChD,OAAAk0C,GAAqB,eAAe7vE,CAAQ,EACrCA,CACT,EACI60E,GAAgB,SAAU32E,EAAU8H,EAAQnkB,EAAM,CACpD,IAAIizF,EAAiB57C,GAAeh7B,EAAU8H,CAAM,EACpD,OAAO8uE,EAAe,UAAUjzF,CAAI,CACtC,EACIkzF,GAAS,SAAU37F,EAAQ8kB,EAAU8H,EAAQhG,EAAUhxB,EAAM,CAC/D,IAAIue,EAAUsnF,GAAc32E,EAAU8H,EAAQhG,CAAQ,EACtD,OAAOy0E,GAAcr7F,EAAQpK,EAAMue,CAAO,CAC5C,EACA,SAASynF,GAAe92E,EAAU9kB,EAAQ,CACxC,IAAI8b,EAAK8Q,EAAQupE,EACbhN,EAAY,CAAC,mBAAmB,EACpCrtE,EAAM9b,GAAUA,EAAO,IAAMA,EAAO,IAAM86B,GAAW,IACrDlO,EAAS5sB,GAAUA,EAAO,OAASA,EAAO,OAAS2tB,GAAO7I,CAAQ,EAClEA,EAAS,gBAAkBA,EAAS,iBAAmB,QACvDA,EAAS,oBAAsB,wBAAyBA,EAAWA,EAAS,oBAAsB,GAClGqxE,EAAakD,GAAUv0E,EAAU8H,CAAM,EACvC6pE,GAAqB,SAASN,EAAYrxE,EAAUhJ,CAAG,EACvD,IAAIkkC,EAAY,SAAUv3C,EAAM85C,EAAY,CAC1C,IAAI3sD,EAAOwrD,GAAM,CAAE,OAAQ,MAAO,EAAGmB,GAA0B,CAAC,CAAC,EAC7DuE,EAAagwC,GAAwB,QAAQ92F,EAAQyI,EAAM7S,CAAI,EAC/Dyc,EAAOkpF,GAAgBz/E,EAAKgrC,EAAYlxD,CAAI,EAC5CgxB,EAAW40E,GAAUrF,EAAY9jF,EAAMzc,CAAI,EAC/C,OAAOA,EAAK,SAAW,OAASgxB,EAAW+0E,GAAO37F,EAAQ8kB,EAAU8H,EAAQhG,EAAUhxB,CAAI,CAC5F,EACA,MAAO,CACL,OAAQg3B,EACR,cAAeupE,EAAW,cAC1B,mBAAoBA,EAAW,mBAC/B,UAAWn2C,EACX,SAAU,SAAU67C,EAAO,CACzBjvE,EAAO,iBAAiBivE,CAAK,CAC/B,EACA,SAAU,SAAUA,EAAO,CACzBjvE,EAAO,iBAAiBivE,CAAK,CAC/B,EACA,YAAa3lG,EAAMklG,GAAajF,EAAYhN,CAAS,EACrD,aAAc,UAAY,CACxB,OAAOA,CACT,CACF,CACF,CAEA,SAAS2S,GAAiBh3E,EAAU9kB,EAAQ,CAC1C,IAAI+7F,EAAgBH,GAAc92E,EAAU9kB,CAAM,EAClD,MAAO,CACL,OAAQ+7F,EAAc,OACtB,cAAeA,EAAc,cAC7B,mBAAoBA,EAAc,mBAClC,UAAWA,EAAc,UACzB,SAAUA,EAAc,SACxB,SAAUA,EAAc,SACxB,YAAaA,EAAc,YAC3B,aAAcA,EAAc,YAC9B,CACF,CAEA,SAASC,GAAgB9uD,EAAW,CAClC,MAAO,CACL,YAAah3C,EAAMghD,GAAU,YAAahK,CAAS,EACnD,eAAgBh3C,EAAMghD,GAAU,eAAgBhK,CAAS,CAC3D,CACF,EACC,SAAU8uD,EAAiB,CAC1BA,EAAgB,eAAiB9kD,GAAU,cAC7C,GAAE8kD,KAAoBA,GAAkB,CAAC,EAAE,EAC3C,IAAIC,GAAoBD,GAEpBE,GAA2BlyE,GAAS,uBACpCmyE,GAA0BnyE,GAAS,sBACnCoyE,GAA2B,SAAUzrF,EAAMlI,EAAM,CACnD,KAAOA,GAAQA,IAASkI,GAAM,CAC5B,GAAIwrF,GAAwB1zF,CAAI,GAAKyzF,GAAyBzzF,CAAI,EAChE,OAAOA,EAETA,EAAOA,EAAK,UACd,CACA,OAAO,IACT,EACI4zF,GAAmB,SAAUnvD,EAAWltC,EAAQ,CAClD,IAAI8b,EAAM9b,EAAO,IAAKvG,EAAOkY,GAAM,KAC/B2qF,EAAaC,EAAkBC,EAAcC,EAAeC,EAC5DC,EAAQC,EAAQC,EAAcC,EAAcC,EAAQC,EAAQC,GAAOC,GACnEvyB,GAAOC,GACPuyB,GAAcn9F,EAAO,OAAO,EAAG0jF,GAAenuF,EAAW,SACzD6nG,GAAM,KAAK,IAAK52D,GAAQ,KAAK,MAAO8f,GAActmD,EAAO,QAAQ,EACjEq9F,GAAkBC,GACtBb,EAAgB,CACd,GAAI,CACF,EACA,EACA,GACA,EACF,EACA,GAAI,CACF,EACA,EACA,EACA,EACF,EACA,GAAI,CACF,EACA,EACA,EACA,CACF,EACA,GAAI,CACF,EACA,EACA,GACA,CACF,CACF,EACA,IAAI1W,GAAY,oBAChB/lF,EAAO,cAAc,KAAK+lF,GAAY,oJAA8LA,GAAY,8CAA0DA,GAAY,2BAA6BA,GAAY,iEAAkFA,GAAY,8CAAqDzoF,GAAI,MAAQ,GAAK,8BAAgC,wDAAyEyoF,GAAY,6QAAwV,EACh9B,IAAIwX,GAAU,SAAUxpF,GAAK,CAC3B,OAAOA,KAAQA,GAAI,WAAa,OAAS/T,EAAO,IAAI,GAAG+T,GAAK,cAAc,EAC5E,EACIypF,GAA6B,SAAUp7F,GAAKojC,GAAO,CACrD,OAAO+3D,GAAQn7F,GAAI,MAAM,GAAK,CAACm+E,GAAW,gBAAgBn+E,GAAI,QAASA,GAAI,QAASojC,EAAK,CAC3F,EACIi4D,GAAyB,SAAUr7F,GAAK,CAC1C,IAAI3B,GAAS2B,GAAI,OACbo7F,GAA2Bp7F,GAAKpC,EAAO,UAAU,OAAO,CAAC,GAAK,CAACoC,GAAI,mBAAmB,GACxFpC,EAAO,UAAU,OAAOS,EAAM,CAElC,EACIi9F,GAAkB,SAAU3pF,GAAK,CACnC,OAAO/T,EAAO,IAAI,GAAG+T,GAAK,cAAc,EAAIA,GAAI,cAAc,KAAK,EAAIA,EACzE,EACI4pF,GAAc,SAAU5pF,GAAK,CAC/B,IAAIhN,GAAW/G,EAAO,SAAS,gBAU/B,OATI+G,KAAa,IAASzJ,GAAI,MAG1B,OAAOyJ,IAAa,WACtBA,GAAW,8BAETgN,GAAI,aAAa,iBAAiB,IAAM,UAGxCA,KAAQ/T,EAAO,QAAQ,EAClB,GAEF8d,GAAK5D,GAAQ,QAAQnG,EAAG,EAAGhN,EAAQ,CAC5C,EACI62F,GAAqB,SAAU3/F,GAAG,CACpC,IAAIozE,GAAQC,GAAQusB,GAChBC,GAAeC,GACnB1sB,GAASpzE,GAAE,QAAU0+F,EACrBrrB,GAASrzE,GAAE,QAAU2+F,EACrBjyB,GAAQ0G,GAASqrB,EAAe,CAAC,EAAIK,EACrCnyB,GAAS0G,GAASorB,EAAe,CAAC,EAAIM,EACtCryB,GAAQA,GAAQ,EAAI,EAAIA,GACxBC,GAASA,GAAS,EAAI,EAAIA,GACtB2yB,GAAQjB,CAAW,GAAKt8F,EAAO,SAAS,0BAA4B,GACtE69F,GAAe,CAAC/f,GAAG,gBAAgB7/E,EAAC,EAEpC4/F,GAAe/f,GAAG,gBAAgB7/E,EAAC,GAAKs/F,GAAQjB,CAAW,GAAKI,EAAe,CAAC,EAAIA,EAAe,CAAC,IAAM,EAExGmB,KACET,GAAI/rB,EAAM,EAAI+rB,GAAI9rB,EAAM,GAC1B1G,GAASpkC,GAAMmkC,GAAQsyB,EAAK,EAC5BtyB,GAAQnkC,GAAMokC,GAASqyB,EAAK,IAE5BtyB,GAAQnkC,GAAMokC,GAASqyB,EAAK,EAC5BryB,GAASpkC,GAAMmkC,GAAQsyB,EAAK,IAGhCnhF,EAAI,UAAU4hF,GAAgBnB,CAAgB,EAAG,CAC/C,MAAO5xB,GACP,OAAQC,EACV,CAAC,EACDkzB,GAAgBpB,EAAe,SAAS,EAAIrrB,GAC5C0sB,GAAgBrB,EAAe,SAAS,EAAIprB,GAC5CwsB,GAAgBA,GAAgB,EAAIA,GAAgB,EACpDC,GAAgBA,GAAgB,EAAIA,GAAgB,EACpDjiF,EAAI,UAAU0gF,EAAc,CAC1B,KAAMsB,GACN,IAAKC,GACL,QAAS,OACX,CAAC,EACDvB,EAAa,UAAY7xB,GAAQ,YAAcC,GAC3C8xB,EAAe,CAAC,EAAI,GAAKH,EAAiB,aAAe5xB,IAC3D7uD,EAAI,SAASygF,EAAkB,OAAQM,GAAgBE,EAASpyB,GAAM,EAEpE+xB,EAAe,CAAC,EAAI,GAAKH,EAAiB,cAAgB3xB,IAC5D9uD,EAAI,SAASygF,EAAkB,MAAOO,GAAgBE,EAASpyB,GAAO,EAExEyG,GAAS/qB,GAAY,YAAc+2C,GACnC/rB,GAAShrB,GAAY,aAAeg3C,GAChCjsB,GAASC,KAAW,GACtBx1D,EAAI,UAAU0gF,EAAc,CAC1B,KAAMsB,GAAgBzsB,GACtB,IAAK0sB,GAAgBzsB,EACvB,CAAC,EAEE4rB,KACHpyB,GAAO,sBAAsB9qE,EAAQs8F,EAAaS,EAAQC,CAAM,EAChEE,GAAgB,GAEpB,EACIc,GAAiB,UAAY,CAC/Bd,GAAgB,GAChB,IAAIe,GAAc,SAAUviG,GAAM3F,GAAO,CACnCA,KACEumG,EAAY,MAAM5gG,EAAI,GAAK,CAACsE,EAAO,OAAO,QAAQs8F,EAAY,SAAS,YAAY,EAAG5gG,EAAI,EAC5FogB,EAAI,SAAS4hF,GAAgBpB,CAAW,EAAG5gG,GAAM3F,EAAK,EAEtD+lB,EAAI,UAAU4hF,GAAgBpB,CAAW,EAAG5gG,GAAM3F,EAAK,EAG7D,EACAkoG,GAAY,QAAStzB,EAAK,EAC1BszB,GAAY,SAAUrzB,EAAM,EAC5B9uD,EAAI,OAAOqhF,GAAa,YAAaS,EAAkB,EACvD9hF,EAAI,OAAOqhF,GAAa,UAAWa,EAAc,EAC7Cta,KAAiByZ,KACnBrhF,EAAI,OAAO4nE,GAAc,YAAaka,EAAkB,EACxD9hF,EAAI,OAAO4nE,GAAc,UAAWsa,EAAc,GAEpDliF,EAAI,OAAOygF,CAAgB,EAC3BzgF,EAAI,OAAO0gF,CAAY,EACvB0B,GAAe5B,CAAW,EAC1BxxB,GAAO,kBAAkB9qE,EAAQs8F,EAAa3xB,GAAOC,EAAM,EAC3D9uD,EAAI,UAAUwgF,EAAa,QAASxgF,EAAI,UAAUwgF,EAAa,OAAO,CAAC,EACvEt8F,EAAO,YAAY,CACrB,EACIk+F,GAAiB,SAAU1sB,GAAW,CACxC,IAAIl9B,GAAU6pD,GAAaC,GAAcngG,GAAGyoC,GAC5C23D,GAAe,EACfC,GAAyB,EACzBhqD,GAAWx4B,EAAI,OAAO01D,GAAWlrB,EAAW,EAC5Cu2C,EAAevoD,GAAS,EACxBwoD,EAAexoD,GAAS,EACxB5N,GAAO8qC,GAAU,sBAAsB,EACvC2sB,GAAcz3D,GAAK,OAASA,GAAK,MAAQA,GAAK,KAC9C03D,GAAe13D,GAAK,QAAUA,GAAK,OAASA,GAAK,IAC7C41D,IAAgB9qB,KAClB8qB,EAAc9qB,GACd7G,GAAQC,GAAS,GAEnB3sE,GAAI+B,EAAO,KAAK,iBAAkB,CAAE,OAAQwxE,EAAU,CAAC,EACnDmsB,GAAYnsB,EAAS,GAAK,CAACvzE,GAAE,mBAAmB,EAClDxE,EAAKgjG,EAAe,SAAU5+F,GAAQnC,GAAM,CAC1C,IAAI6iG,GACAC,GAAY,SAAUvgG,GAAG,CAC3B0+F,EAAS1+F,GAAE,QACX2+F,EAAS3+F,GAAE,QACX8+F,EAASW,GAAgBpB,CAAW,EAAE,YACtCU,EAASU,GAAgBpB,CAAW,EAAE,aACtCW,GAAQD,EAASD,EACjBL,EAAiB7+F,GACjBA,GAAO,SAAW,CAChB,EAAGsgG,GAActgG,GAAO,CAAC,EAAIg/F,EAC7B,EAAGuB,GAAevgG,GAAO,CAAC,EAAIi/F,CAChC,EACAO,GAAmB/2C,GAAY,YAC/Bg3C,GAAoBh3C,GAAY,aAChCi2C,EAAmBD,EAAY,UAAU,EAAI,EAC7CxgF,EAAI,SAASygF,EAAkB,qBAAqB,EACpDzgF,EAAI,UAAUygF,EAAkB,iBAAkB,KAAK,EACvDA,EAAiB,gBAAkB,GACnCA,EAAiB,YAAc,GAC/BzgF,EAAI,UAAUygF,EAAkB,CAC9B,KAAMM,EACN,IAAKC,EACL,OAAQ,CACV,CAAC,EACDP,EAAiB,gBAAgB,mBAAmB,EACpDj2C,GAAY,YAAYi2C,CAAgB,EACxCzgF,EAAI,KAAKqhF,GAAa,YAAaS,EAAkB,EACrD9hF,EAAI,KAAKqhF,GAAa,UAAWa,EAAc,EAC3Cta,KAAiByZ,KACnBrhF,EAAI,KAAK4nE,GAAc,YAAaka,EAAkB,EACtD9hF,EAAI,KAAK4nE,GAAc,UAAWsa,EAAc,GAElDxB,EAAe1gF,EAAI,IAAIwqC,GAAa,MAAO,CACzC,MAAS,oBACT,iBAAkB,KACpB,EAAGy2C,EAAS,YAAcC,CAAM,CAClC,EACAuB,GAAYziF,EAAI,IAAI,kBAAoBpgB,EAAI,EACxC6iG,IACFziF,EAAI,OAAOyiF,EAAS,EAEtBA,GAAYziF,EAAI,IAAIwqC,GAAa,MAAO,CACtC,GAAM,kBAAoB5qD,GAC1B,iBAAkB,MAClB,MAAS,mBACT,aAAgB,GAChB,MAAS,UAAYA,GAAO,8BAC9B,CAAC,EACG4B,GAAI,KAAO,KACbihG,GAAU,gBAAkB,IAE9BziF,EAAI,KAAKyiF,GAAW,YAAa,SAAUtgG,GAAG,CAC5CA,GAAE,yBAAyB,EAC3BA,GAAE,eAAe,EACjBugG,GAAUvgG,EAAC,CACb,CAAC,EACDJ,GAAO,IAAM0gG,GACbziF,EAAI,UAAUyiF,GAAW,CACvB,KAAMJ,GAActgG,GAAO,CAAC,EAAIg/F,EAAe0B,GAAU,YAAc,EACvE,IAAKH,GAAevgG,GAAO,CAAC,EAAIi/F,EAAeyB,GAAU,aAAe,CAC1E,CAAC,CACH,CAAC,EAEDF,GAAe,EAEjB/B,EAAY,aAAa,oBAAqB,GAAG,CACnD,EACI+B,GAAiB,UAAY,CAC/B,IAAI3iG,GAAM6iG,GACVD,GAAyB,EACrBhC,GACFA,EAAY,gBAAgB,mBAAmB,EAEjD,IAAK5gG,MAAQ+gG,EACX8B,GAAYziF,EAAI,IAAI,kBAAoBpgB,EAAI,EACxC6iG,KACFziF,EAAI,OAAOyiF,EAAS,EACpBziF,EAAI,OAAOyiF,EAAS,EAG1B,EACIE,GAAmB,SAAUxgG,GAAG,CAClC,IAAIs6D,GAAUmmC,GACVC,GAAiB,SAAUl2F,GAAME,GAAQ,CAC3C,GAAIF,GACF,EACE,IAAIA,KAASE,GACX,MAAO,SAEFF,GAAOA,GAAK,WAEzB,EACA,GAAI,EAAAy0F,IAAiBl9F,EAAO,SAQ5B,IALAvG,EAAKqiB,EAAI,OAAO,8CAA8C,EAAG,SAAUq8D,GAAK,CAC9EA,GAAI,gBAAgB,mBAAmB,CACzC,CAAC,EACDumB,GAAazgG,GAAE,OAAS,YAAcA,GAAE,OAASivC,EAAU,QAAQ,EACnEwxD,GAAa5iF,EAAI,EAAE4iF,EAAU,EAAE,QAAQ,2BAA2B,EAAE,CAAC,EACjEC,GAAeD,GAAYp4C,EAAW,IACxCs4C,GAAmB,EACnBrmC,GAAWrrB,EAAU,SAAS,EAAI,EAC9ByxD,GAAepmC,GAAUmmC,EAAU,GAAKC,GAAezxD,EAAU,OAAO,EAAI,EAAGwxD,EAAU,GAAG,CAC9FR,GAAeQ,EAAU,EACzB,MACF,CAEFL,GAAe,EACjB,EACIQ,GAA+B,SAAU9qF,GAAK,CAChD,OAAOmoF,GAAyBE,GAAyBp8F,EAAO,QAAQ,EAAG+T,EAAG,CAAC,CACjF,EACIuqF,GAA2B,UAAY,CACzC,QAAS5iG,MAAQ+gG,EAAe,CAC9B,IAAI5+F,GAAS4+F,EAAc/gG,EAAI,EAC3BmC,GAAO,MACTie,EAAI,OAAOje,GAAO,GAAG,EACrB,OAAOA,GAAO,IAElB,CACF,EACI+gG,GAAqB,UAAY,CACnC,GAAI,CACF5+F,EAAO,OAAO,EAAE,YAAY,uBAAwB,GAAO,EAAK,CAClE,MAAa,CACb,CACF,EACAA,EAAO,GAAG,OAAQ,UAAY,CAC5B4+F,GAAmB,EACfthG,GAAI,IAAMA,GAAI,IAAM,KACtB0C,EAAO,GAAG,kBAAmB,SAAU/B,GAAG,CACxC,IAAIwC,GAASxC,GAAE,OAAQ6L,GAAWrJ,GAAO,SACrC,CAACy8F,IAAiB,mBAAmB,KAAKpzF,EAAQ,GAAK,CAAC+0F,GAA6Bp+F,EAAM,IACzFxC,GAAE,SAAW,GACf+B,EAAO,UAAU,OAAOS,GAAQqJ,KAAa,OAAO,EAElD7L,GAAE,OAAS,aACb+B,EAAO,YAAY,EAGzB,CAAC,EACDA,EAAO,IAAI,KAAKsmD,GAAa,kBAAmB,SAAUroD,GAAG,CAC3D,IAAI6gG,GAAgB,SAAUr2F,GAAM,CAClC1I,GAAM,iBAAiBC,EAAQ,UAAY,CACzCA,EAAO,UAAU,OAAOyI,EAAI,CAC9B,CAAC,CACH,EACA,GAAIo2F,GAA6B5gG,GAAE,MAAM,EAAG,CAC1CA,GAAE,eAAe,EACjB6gG,GAAc7gG,GAAE,MAAM,EACtB,MACF,CACI,mBAAmB,KAAKA,GAAE,OAAO,QAAQ,IAC3CA,GAAE,eAAe,EACbA,GAAE,OAAO,UAAY,OACvB6gG,GAAc7gG,GAAE,MAAM,EAG5B,CAAC,GAEH,IAAI8gG,GAA4Bh/F,GAAM,SAAS,SAAU9B,GAAG,CACrD+B,EAAO,WACVy+F,GAAiBxgG,EAAC,CAEtB,CAAC,EACD+B,EAAO,GAAG,mEAAoE++F,EAAyB,EACvG/+F,EAAO,GAAG,uBAAwB,SAAU/B,GAAG,CACzCq+F,GAAeA,EAAY,WAAa,SAC1CyC,GAA0B9gG,EAAC,CAE/B,CAAC,EACD+B,EAAO,GAAG,YAAaq+F,EAAc,EACrCr+F,EAAO,GAAG,cAAey9F,EAAsB,CACjD,CAAC,EACDz9F,EAAO,GAAG,SAAUs+F,EAAwB,EAC5C,IAAI3jE,GAAU,UAAY,CACxB2hE,EAAcC,EAAmB,IACnC,EACA,MAAO,CACL,YAAaoB,GACb,eAAgBO,GAChB,eAAgBG,GAChB,iBAAkBI,GAClB,QAAS9jE,EACX,CACF,EAEIqkE,GAAgB,SAAUv2F,EAAM,CAClC,OAAOuhB,GAAS,sBAAsBvhB,CAAI,GAAKuhB,GAAS,uBAAuBvhB,CAAI,CACrF,EACIw2F,GAAe,SAAUx2F,EAAMme,EAAU/W,EAAW,CACtD,KAAOpH,GAAQA,IAASme,GAAU,CAChC,GAAI/W,EAAUpH,CAAI,EAChB,OAAOA,EAETA,EAAOA,EAAK,UACd,CACA,OAAO,IACT,EACIy2F,GAAqB,SAAU53D,EAASC,EAASpmC,EAAK,CACxD,IAAIhC,EAASohC,EAAK4+D,EAalB,GAZAhgG,EAAUgC,EAAI,iBAAiBmmC,EAASC,CAAO,EAC/ChH,EAAMp/B,EAAI,KAAK,gBAAgB,GAC3B,CAAChC,GAAWA,EAAQ,UAAY,UAClCA,EAAUgC,EAAI,MAEhBo/B,EAAI,kBAAkBphC,CAAO,EAC7BggG,EAAQxtF,GAAM,QAAQ4uB,EAAI,eAAe,CAAC,EAC1C4+D,EAAQA,EAAM,KAAK,SAAU3nG,EAAGM,EAAG,CACjC,OAAAN,EAAI,KAAK,IAAI,KAAK,IAAIA,EAAE,IAAM+vC,EAAS/vC,EAAE,OAAS+vC,CAAO,CAAC,EAC1DzvC,EAAI,KAAK,IAAI,KAAK,IAAIA,EAAE,IAAMyvC,EAASzvC,EAAE,OAASyvC,CAAO,CAAC,EACnD/vC,EAAIM,CACb,CAAC,EACGqnG,EAAM,OAAS,EAAG,CACpB53D,GAAW43D,EAAM,CAAC,EAAE,OAASA,EAAM,CAAC,EAAE,KAAO,EAC7C,GAAI,CACF,OAAA5+D,EAAI,YAAY+G,EAASC,CAAO,EAChChH,EAAI,SAAS,EAAI,EACVA,CACT,MAAa,CACb,CACF,CACA,OAAO,IACT,EACI6+D,GAAgC,SAAU7+D,EAAK3Z,EAAU,CAC3D,IAAIy4E,EAAgB9+D,GAAOA,EAAI,cAAgBA,EAAI,cAAc,EAAI,KACrE,OAAOvW,GAAS,uBAAuBi1E,GAAaI,EAAez4E,EAAUo4E,EAAa,CAAC,EAAI,KAAOz+D,CACxG,EACI++D,GAAc,SAAUh4D,EAASC,EAASpmC,EAAK,CACjD,IAAIo/B,EAAKyM,EACLuyD,EAAWp+F,EACf,GAAIo+F,EAAS,uBACXvyD,EAAQuyD,EAAS,uBAAuBj4D,EAASC,CAAO,EACpDyF,IACFzM,EAAMp/B,EAAI,YAAY,EACtBo/B,EAAI,SAASyM,EAAM,WAAYA,EAAM,MAAM,EAC3CzM,EAAI,SAAS,EAAI,WAEVp/B,EAAI,oBACbo/B,EAAMp/B,EAAI,oBAAoBmmC,EAASC,CAAO,UACrCg4D,EAAS,KAAK,gBAAiB,CACxCh/D,EAAMg/D,EAAS,KAAK,gBAAgB,EACpC,GAAI,CACFh/D,EAAI,YAAY+G,EAASC,CAAO,EAChChH,EAAI,SAAS,EAAI,CACnB,MAAa,CACXA,EAAM2+D,GAAmB53D,EAASC,EAASpmC,CAAG,CAChD,CACA,OAAOi+F,GAA8B7+D,EAAKp/B,EAAI,IAAI,CACpD,CACA,OAAOo/B,CACT,EACIi/D,GAAsB,CAAE,UAAWF,EAAY,EAE/CG,GAAgB,SAAUz/F,EAAQq3D,EAAQ,CAC5C,OAAO79D,GAAI69D,EAAQ,SAAU7xB,EAAO,CAClC,IAAIpjC,EAAMpC,EAAO,KAAK,oBAAqB,CAAE,MAAOwlC,CAAM,CAAC,EAC3D,OAAOpjC,EAAI,QAAUojC,EAAQpjC,EAAI,MAAQojC,CAC3C,CAAC,CACH,EACIk6D,GAAqB,CAAE,cAAeD,EAAc,EAEpDE,GAAe,SAAUl2F,EAAUnO,EAAO,CAC5C,IAAI6F,EAAM7F,GAAS/F,EAAW,SAC1BmuC,EAAWviC,EAAI,uBAAuB,EAC1C,OAAA1H,GAAKgQ,EAAU,SAAUtK,EAAS,CAChCukC,EAAS,YAAYvkC,EAAQ,IAAI,CAAC,CACpC,CAAC,EACM+a,GAAQ,QAAQwpB,CAAQ,CACjC,EAEIk8D,GAAa1iF,GAAU,UAAW,QAAS,MAAM,EACjD2iF,GAAW3iF,GAAU,UAAW,OAAO,EACvC4iF,GAAe5iF,GAAU,IAAK,GAAG,EACjC6iF,GAAU,SAAUC,EAAIl4F,EAAK,CAC/B,IAAI/R,EAAQ,SAASqmB,GAAI4jF,EAAIl4F,CAAG,EAAG,EAAE,EACrC,OAAO,MAAM/R,CAAK,EAAI,EAAIA,CAC5B,EACIkqG,GAAU,SAAUhqC,EAAOhgE,EAAGwe,EAAGyrF,EAAIF,EAAI,CAI3C,QAHIG,EAAUJ,GAAQC,EAAI,SAAS,EAC/BI,EAAUL,GAAQC,EAAI,SAAS,EAC/BK,EAAOpqC,EAAM,KAAK,EACbqqC,EAAK7rF,EAAG6rF,EAAK7rF,EAAI0rF,EAASG,IAAM,CAClCD,EAAKC,CAAE,IACVD,EAAKC,CAAE,EAAIT,GAAS3pE,GAAKgqE,CAAE,EAAG,CAAC,CAAC,GAElC,QAASK,EAAKtqG,EAAGsqG,EAAKtqG,EAAImqG,EAASG,IAAM,CACvC,IAAI5pC,EAAQ0pC,EAAKC,CAAE,EAAE,MAAM,EAC3B3pC,EAAM4pC,CAAE,EAAID,IAAO7rF,GAAK8rF,IAAOtqG,EAAI+pG,EAAKj5E,GAAQi5E,CAAE,CACpD,CACF,CACF,EACIQ,GAAa,SAAUvqC,EAAOhgE,EAAGwe,EAAG,CACtC,IAAI4rF,EAAOpqC,EAAM,KAAK,EAClBU,EAAQ0pC,EAAK5rF,CAAC,EAAI4rF,EAAK5rF,CAAC,EAAE,MAAM,EAAI,CAAC,EACzC,MAAO,CAAC,CAACkiD,EAAM1gE,CAAC,CAClB,EACIwqG,GAAa,SAAUxqC,EAAOhgE,EAAGwe,EAAG,CACtC,KAAO+rF,GAAWvqC,EAAOhgE,EAAGwe,CAAC,GAC3Bxe,IAEF,OAAOA,CACT,EACIyqG,GAAW,SAAUL,EAAM,CAC7B,OAAOnmG,GAAMmmG,EAAM,SAAUpmG,EAAK0mG,EAAK,CACrC,OAAOA,EAAI,MAAM,EAAE,OAAS1mG,EAAM0mG,EAAI,MAAM,EAAE,OAAS1mG,CACzD,EAAG,CAAC,CACN,EACI2mG,GAAiB,SAAU3qC,EAAO92D,EAAS,CAE7C,QADIkhG,EAAOpqC,EAAM,KAAK,EACbxhD,EAAI,EAAGA,EAAI4rF,EAAK,OAAQ5rF,IAE/B,QADIkiD,EAAQ0pC,EAAK5rF,CAAC,EAAE,MAAM,EACjBxe,EAAI,EAAGA,EAAI0gE,EAAM,OAAQ1gE,IAChC,GAAIc,GAAG4/D,EAAM1gE,CAAC,EAAGkJ,CAAO,EACtB,OAAOnH,EAAO,KAAK8nG,GAAa7pG,EAAGwe,CAAC,CAAC,EAI3C,OAAOzc,EAAO,KAAK,CACrB,EACI6oG,GAAc,SAAU5qC,EAAO6qC,EAAIC,EAAIriG,EAAIsiG,EAAI,CAGjD,QAFIC,EAAU,CAAC,EACXZ,EAAOpqC,EAAM,KAAK,EACbxhD,EAAIssF,EAAItsF,GAAKusF,EAAIvsF,IAAK,CAC7B,IAAIkiD,EAAQ0pC,EAAK5rF,CAAC,EAAE,MAAM,EACtBxP,EAAQ67F,EAAKpiG,EAAKi4D,EAAM,MAAMmqC,EAAIpiG,EAAK,CAAC,EAAIi4D,EAAM,MAAMj4D,EAAIoiG,EAAK,CAAC,EACtEG,EAAQ,KAAKpB,GAASQ,EAAK5rF,CAAC,EAAE,QAAQ,EAAGxP,CAAK,CAAC,CACjD,CACA,OAAOg8F,CACT,EACIC,GAAW,SAAUjrC,EAAOhiB,EAAUwC,EAAQ,CAChD,IAAIqqD,EAAK7sD,EAAS,EAAE,EAAG8sD,EAAK9sD,EAAS,EAAE,EACnCv1C,EAAK+3C,EAAO,EAAE,EAAGuqD,EAAKvqD,EAAO,EAAE,EAC/BwqD,EAAUF,EAAKC,EAAKH,GAAY5qC,EAAO6qC,EAAIC,EAAIriG,EAAIsiG,CAAE,EAAIH,GAAY5qC,EAAO6qC,EAAIE,EAAItiG,EAAIqiG,CAAE,EAC9F,OAAOnB,GAAW3pC,EAAM,QAAQ,EAAGyqC,GAASO,CAAO,EAAGA,CAAO,CAC/D,EACIE,GAAiB,SAAUlrC,EAAOoqC,EAAM,CAC1C,IAAIe,EAAer6E,GAAQkvC,EAAM,QAAQ,CAAC,EACtCorC,EAAYnnF,GAAQ,QAAQ,OAAO,EACvC,OAAA+jB,GAASojE,EAAWhB,CAAI,EACxBziE,GAAOwjE,EAAcC,CAAS,EACvBD,CACT,EACIE,GAAqB,SAAUrrC,EAAO,CACxC,OAAOz8D,GAAIy8D,EAAM,KAAK,EAAG,SAAU0qC,EAAK,CACtC,IAAIhqC,EAAQn9D,GAAImnG,EAAI,MAAM,EAAG,SAAUjrC,EAAM,CAC3C,IAAIsqC,EAAK9pE,GAAKw/B,CAAI,EAClB,OAAAp5C,GAAO0jF,EAAI,SAAS,EACpB1jF,GAAO0jF,EAAI,SAAS,EACbA,CACT,CAAC,EACGE,EAAKn5E,GAAQ45E,EAAI,QAAQ,CAAC,EAC9B,OAAA1iE,GAASiiE,EAAIvpC,CAAK,EACXupC,CACT,CAAC,CACH,EACIqB,GAAY,SAAUC,EAAU,CAClC,IAAIvrC,EAAQ2pC,GAAW74E,GAAQy6E,CAAQ,EAAG,EAAG,CAAC,CAAC,EAC/C,OAAA/nG,GAAKimC,GAAc8hE,EAAU,IAAI,EAAG,SAAUtB,EAAIzrF,EAAG,CACnDhb,GAAKimC,GAAcwgE,EAAI,OAAO,EAAG,SAAUF,EAAI/pG,EAAG,CAChDgqG,GAAQhqC,EAAOwqC,GAAWxqC,EAAOhgE,EAAGwe,CAAC,EAAGA,EAAGyrF,EAAIF,CAAE,CACnD,CAAC,CACH,CAAC,EACMJ,GAAW3pC,EAAM,QAAQ,EAAGyqC,GAASzqC,EAAM,KAAK,CAAC,EAAGA,EAAM,KAAK,CAAC,CACzE,EACIwrC,GAAQ,SAAUxrC,EAAO,CAC3B,OAAOkrC,GAAelrC,EAAOqrC,GAAmBrrC,CAAK,CAAC,CACxD,EACIyrC,GAAa,SAAUzrC,EAAOkE,EAAcwnC,EAAY,CAC1D,OAAOf,GAAe3qC,EAAOkE,CAAY,EAAE,KAAK,SAAUlmB,EAAU,CAClE,OAAO2sD,GAAe3qC,EAAO0rC,CAAU,EAAE,IAAI,SAAUlrD,EAAQ,CAC7D,OAAOyqD,GAASjrC,EAAOhiB,EAAUwC,CAAM,CACzC,CAAC,CACH,CAAC,CACH,EACImrD,GAAmB,CACrB,QAASL,GACT,MAAOE,GACP,WAAYC,EACd,EAEIG,GAA0B,SAAUnjF,EAAS,CAC/C,OAAOvkB,GAAKukB,EAAS,SAAU3K,EAAK,CAClC,OAAOrY,GAAKqY,CAAG,IAAM,MAAQrY,GAAKqY,CAAG,IAAM,IAC7C,CAAC,CACH,EACI+tF,GAA+B,SAAUpjF,EAAS6hB,EAAK,CACzD,OAAOpmC,GAAKukB,EAAS,SAAU3K,EAAK,CAClC,OAAOrY,GAAKqY,CAAG,IAAM,MAAQopE,GAAuBppE,EAAKwsB,CAAG,CAC9D,CAAC,EAAE,KAAKzqC,EAAS,CAAC,CAAC,EAAG,SAAUgoD,EAAI,CAClC,OAAO+jD,GAAwBnjF,CAAO,EAAE,IAAI,SAAUqjF,EAAU,CAC9D,MAAO,CACL7nF,GAAQ,QAAQ,IAAI,EACpBA,GAAQ,QAAQxe,GAAKqmG,CAAQ,CAAC,CAChC,CACF,CAAC,EAAE,MAAM,CAAC,CAAC,CACb,CAAC,CACH,EACIC,GAAS,SAAUC,EAAU/qE,EAAM,CACrC,IAAIwlD,EAAUxiF,GAAMg9B,EAAM,SAAUj9B,EAAK8Z,EAAK,CAC5C,OAAA6pB,GAAO7pB,EAAK9Z,CAAG,EACR8Z,CACT,EAAGkuF,CAAQ,EACX,OAAO/qE,EAAK,OAAS,EAAIyoE,GAAa,CAACjjB,CAAO,CAAC,EAAIA,CACrD,EACIwlB,GAAqB,SAAUC,EAAuB,CACxD,OAAIj6E,GAAWi6E,CAAqB,EAC3Bx5F,GAAOw5F,CAAqB,EAAE,OAAOl6E,EAAM,EAAE,KAAKnyB,EAAS,CAAC,CAAC,EAAG,SAAUqzE,EAAS,CACxF,MAAO,CACLg5B,EACAh5B,CACF,CACF,CAAC,EAEMlhD,GAAOk6E,CAAqB,EAAI,CAACA,CAAqB,EAAI,CAAC,CAEtE,EACIC,GAAkB,SAAUx7E,EAAU2Z,EAAK,CAC7C,IAAI4hE,EAAwBjoF,GAAQ,QAAQqmB,EAAI,uBAAuB,EACnE7hB,EAAU8pC,GAAQ,eAAe25C,EAAuBv7E,CAAQ,EAChEy7E,EAAetoG,GAAO2kB,EAAS,SAAU3K,EAAK,CAChD,OAAO+T,EAAS/T,CAAG,GAAK6T,GAAU7T,CAAG,CACvC,CAAC,EACGuuF,EAAeR,GAA6BpjF,EAAS6hB,CAAG,EACxDgiE,EAAcF,EAAa,OAAOC,EAAa,OAASA,EAAeJ,GAAmBC,CAAqB,CAAC,EACpH,OAAO3oG,GAAI+oG,EAAax7E,EAAO,CACjC,EACIy7E,GAAgB,UAAY,CAC9B,OAAO7C,GAAa,CAAC,CAAC,CACxB,EACI8C,GAAuB,SAAU77E,EAAU2Z,EAAK,CAClD,OAAOyhE,GAAO9nF,GAAQ,QAAQqmB,EAAI,cAAc,CAAC,EAAG6hE,GAAgBx7E,EAAU2Z,CAAG,CAAC,CACpF,EACImiE,GAAiB,SAAU1iF,EAAS01C,EAAM,CAC5C,OAAO31B,GAAW21B,EAAM,QAASx/D,EAAMa,GAAIipB,CAAO,CAAC,CACrD,EACI2iF,GAAmB,SAAU/7E,EAAUg8E,EAAoB,CAC7D,OAAOF,GAAe97E,EAAUg8E,EAAmB,CAAC,CAAC,EAAE,KAAK,SAAUpB,EAAU,CAC9E,IAAIqB,EAAYD,EAAmB,CAAC,EAChCE,EAAWF,EAAmBA,EAAmB,OAAS,CAAC,EAC3DG,EAAiBnB,GAAiB,QAAQJ,CAAQ,EACtD,OAAOI,GAAiB,WAAWmB,EAAgBF,EAAWC,CAAQ,EAAE,IAAI,SAAUE,EAAqB,CACzG,OAAOrD,GAAa,CAACiC,GAAiB,MAAMoB,CAAmB,CAAC,CAAC,CACnE,CAAC,CACH,CAAC,EAAE,WAAWR,EAAa,CAC7B,EACIS,GAAuB,SAAUr8E,EAAUywC,EAAQ,CACrD,OAAOA,EAAO,OAAS,GAAKA,EAAO,CAAC,EAAE,UAAYmrC,GAAc,EAAIC,GAAqB77E,EAAUywC,EAAO,CAAC,CAAC,CAC9G,EACI6rC,GAAS,SAAUt8E,EAAUywC,EAAQ,CACvC,IAAIM,EAAgBI,GAAmB,4BAA4BV,EAAQzwC,CAAQ,EACnF,OAAO+wC,EAAc,OAAS,EAAIgrC,GAAiB/7E,EAAU+wC,CAAa,EAAIsrC,GAAqBr8E,EAAUywC,CAAM,CACrH,EACI8rC,GAAiB,CAAE,KAAMD,EAAO,EAEhCE,GAAiB,SAAUpjG,EAAQ,CACrC,OAAOhI,EAAO,KAAKgI,EAAO,UAAU,OAAO,CAAC,EAAE,IAAI,SAAUugC,EAAK,CAC/D,IAAI8iE,EAAMrjG,EAAO,IAAI,IAAIA,EAAO,QAAQ,EAAG,MAAO,CAChD,iBAAkB,MAClB,MAAS,+BACX,EAAGugC,EAAI,cAAc,CAAC,EAClBn1B,EAAO24B,GAAK,KAAKs/D,EAAI,SAAS,EAClC,OAAArjG,EAAO,IAAI,OAAOqjG,CAAG,EACdj4F,CACT,CAAC,EAAE,MAAM,EAAE,CACb,EACIk4F,GAAiB,SAAUtjG,EAAQpK,EAAM,CAC3C,IAAI2qC,EAAMvgC,EAAO,UAAU,OAAO,EAAGujG,EAASvjG,EAAO,IAAI,OAAO,MAAM,EAClEs9E,EAAMt9E,EAAO,UAAU,OAAO,EAC9B0jC,EACA2zB,EAASqoC,GAAmB,cAAc1/F,EAAQw3D,GAAW,UAAU8lB,CAAG,CAAC,EAC/E,OAAA55C,EAAW9tC,EAAK,WAAautG,GAAe,KAAKjpF,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAAGq3D,CAAM,EAAE,IAAI,EAAI92B,EAAI,cAAc,EAClHmD,GACF6/D,EAAO,YAAY7/D,CAAQ,EAEtB1jC,EAAO,UAAU,WAAW,UAAUujG,EAAQ3tG,CAAI,CAC3D,EACI4tG,GAAa,SAAUxjG,EAAQpK,EAAM,CAQvC,GAPIA,IAAS,SACXA,EAAO,CAAC,GAEVA,EAAK,IAAM,GACXA,EAAK,OAASA,EAAK,QAAU,OAC7BA,EAAK,UAAY,GACjBA,EAAOoK,EAAO,KAAK,mBAAoBpK,CAAI,EACvCA,EAAK,mBAAmB,EAC1B,OAAAoK,EAAO,KAAK,aAAcpK,CAAI,EACvBA,EAAK,QAEd,GAAIA,EAAK,SAAW,OAClB,OAAOwtG,GAAepjG,CAAM,EAE5BpK,EAAK,SAAW,GAChB,IAAIue,EAAUmvF,GAAetjG,EAAQpK,CAAI,EACzC,OAAIA,EAAK,SAAW,OACXue,GAEPve,EAAK,QAAUoK,EAAO,UAAU,YAAY,EAAI,GAAKmU,EACrDnU,EAAO,KAAK,aAAcpK,CAAI,EACvBA,EAAK,QAGlB,EACI6tG,GAAsB,CAAE,WAAYD,EAAW,EAE/CE,GAAY,SAAU9tG,EAAMue,EAAS,CACvC,OAAOquB,GAASA,GAAS,CAAE,OAAQ,MAAO,EAAG5sC,CAAI,EAAG,CAClD,IAAK,GACL,UAAW,GACX,QAASue,CACX,CAAC,CACH,EACIwvF,GAAe,SAAU3jG,EAAQpK,EAAM,CACzC,GAAIA,EAAK,SAAW,MAAO,CACzB,IAAI6S,EAAOzI,EAAO,OAAO,MAAMpK,EAAK,QAAS4sC,GAAS,CACpD,cAAe,GACf,kBAAmB,EACrB,EAAG5sC,CAAI,CAAC,EACR,OAAOkqD,GAAe,CAAE,SAAU9/C,EAAO,QAAS,EAAGA,EAAO,MAAM,EAAE,UAAUyI,CAAI,CACpF,KACE,QAAO7S,EAAK,OAEhB,EACIguG,GAAa,SAAU5jG,EAAQmU,EAASve,EAAM,CAChD,IAAIiuG,EAAcH,GAAU9tG,EAAMue,CAAO,EACrCosB,EAAMvgC,EAAO,UAAU,OAAO,EAAGqxD,EACjClwD,EAAMnB,EAAO,OAAO,EACpBuS,EAAMpF,EACV,GAAI,CAAC02F,EAAY,YACfA,EAAc7jG,EAAO,KAAK,mBAAoB6jG,CAAW,EACrDA,EAAY,mBAAmB,GAAG,CACpC7jG,EAAO,KAAK,aAAc6jG,CAAW,EACrC,MACF,CAGF,GADA1vF,EAAUwvF,GAAa3jG,EAAQ6jG,CAAW,EACtCtjE,EAAI,WAAY,CAClBpsB,GAAW,8BACPosB,EAAI,iBAAmBp/B,GAAOo/B,EAAI,eAAiBp/B,EACrDA,EAAI,KAAK,UAAYgT,GAErBosB,EAAI,eAAe,EACfp/B,EAAI,KAAK,WAAW,SAAW,EACjCA,EAAI,KAAK,UAAYgT,EAEjBosB,EAAI,yBACNA,EAAI,WAAWA,EAAI,yBAAyBpsB,CAAO,CAAC,GAEpD5B,EAAOpR,EAAI,uBAAuB,EAClCgM,EAAOhM,EAAI,cAAc,KAAK,EAC9BoR,EAAK,YAAYpF,CAAI,EACrBA,EAAK,UAAYgH,EACjBosB,EAAI,WAAWhuB,CAAI,IAIzB8+C,EAAYrxD,EAAO,IAAI,IAAI,SAAS,EACpCugC,EAAMp/B,EAAI,YAAY,EACtBo/B,EAAI,eAAe8wB,CAAS,EAC5B9wB,EAAI,aAAa8wB,CAAS,EAC1BrxD,EAAO,UAAU,OAAOugC,CAAG,EAC3BvgC,EAAO,IAAI,OAAO,SAAS,EAC3B,GAAI,CACFA,EAAO,UAAU,OAAOugC,CAAG,CAC7B,MAAa,CACb,CACF,KAAO,CACL,IAAIujE,EAASvjE,EACTujE,EAAO,OACT3iG,EAAI,YAAY,SAAU,GAAO,IAAI,EACrC2iG,EAAS9jG,EAAO,UAAU,OAAO,GAE/B,OAAO,KAAKmU,CAAO,GACrB2vF,EAAO,UAAU,gCAAkC3vF,CAAO,EAC1DnU,EAAO,IAAI,OAAO,WAAW,GAE7B8jG,EAAO,UAAU3vF,CAAO,CAE5B,CACK0vF,EAAY,WACf7jG,EAAO,KAAK,aAAc6jG,CAAW,CAEzC,EACIE,GAAsB,CAAE,WAAYH,EAAW,EAE/CI,GAAqB,SAAUrzF,EAAM4vB,EAAK51B,EAAOs5F,EAAM1oG,EAAS,CAClE,IAAIgH,EAAYoI,EAAQ41B,EAAI,eAAiBA,EAAI,aAC7ChsB,EAAS5J,EAAQ41B,EAAI,YAAcA,EAAI,UAC3C,OAAOvoC,EAAO,KAAKuK,CAAS,EAAE,IAAI2X,GAAQ,OAAO,EAAE,IAAI,SAAUnG,EAAK,CACpE,MAAO,CAACkwF,GAAQ,CAAC1jE,EAAI,UAAYrhB,GAAMnL,EAAKxY,EAAQwY,EAAKQ,CAAM,CAAC,EAAE,MAAMR,CAAG,EAAIA,CACjF,CAAC,EAAE,KAAK,SAAUA,EAAK,CACrB,OAAOkH,EAAUlH,CAAG,EAAI/b,EAAO,KAAK+b,CAAG,EAAIpL,GAAOoL,CAAG,CACvD,CAAC,EAAE,IAAI,SAAUA,EAAK,CACpB,OAAOA,EAAI,IAAI,CACjB,CAAC,EAAE,MAAMpD,CAAI,CACf,EACIuzF,GAAa,SAAUvzF,EAAM4vB,EAAK0jE,EAAM,CAC1C,OAAOD,GAAmBrzF,EAAM4vB,EAAK,GAAM0jE,EAAM,SAAUlwF,EAAKQ,EAAQ,CACtE,OAAO,KAAK,IAAI+K,GAAgBvL,CAAG,EAAGQ,CAAM,CAC9C,CAAC,CACH,EACI4vF,GAAS,SAAUxzF,EAAM4vB,EAAK0jE,EAAM,CACtC,OAAOD,GAAmBrzF,EAAM4vB,EAAK,GAAO0jE,EAAM,SAAUlwF,EAAKQ,EAAQ,CACvE,OAAOA,EAAS,EAAIA,EAAS,EAAIA,CACnC,CAAC,CACH,EACI6vF,GAAqB,SAAU37F,EAAM47F,EAAU,CAEjD,QADIC,EAAO77F,EACJA,GAAQuhB,GAAS,OAAOvhB,CAAI,GAAKA,EAAK,SAAW,GACtDA,EAAO47F,EAAW57F,EAAK,YAAcA,EAAK,gBAE5C,OAAOA,GAAQ67F,CACjB,EACIC,GAAY,SAAU5zF,EAAM4vB,EAAK,CACnC,IAAIxsB,EAAK8zB,EAAgB4Q,EAAc3Q,EAAa4Q,EACpD,OAAKnY,GAGLsH,EAAiBtH,EAAI,eACrBkY,EAAelY,EAAI,aACnBuH,EAAcvH,EAAI,YAClBmY,EAAYnY,EAAI,UAChBxsB,EAAMwsB,EAAI,wBACN,CAACA,EAAI,YACHsH,IAAmB4Q,GACjBC,EAAY5Q,EAAc,GACxBD,EAAe,cAAc,IAC/B9zB,EAAM8zB,EAAe,WAAWC,CAAW,GAI7CD,EAAe,WAAa,GAAK4Q,EAAa,WAAa,IACzD5Q,EAAe,SAAWC,EAC5BD,EAAiBu8D,GAAmBv8D,EAAe,YAAa,EAAI,EAEpEA,EAAiBA,EAAe,WAE9B6Q,IAAc,EAChBD,EAAe2rD,GAAmB3rD,EAAa,gBAAiB,EAAK,EAErEA,EAAeA,EAAa,WAE1B5Q,GAAkBA,IAAmB4Q,IAChC5Q,EAIT9zB,GAAOA,EAAI,WAAa,EACnBA,EAAI,WAENA,GAlCEpD,CAmCX,EACI6zF,GAAoB,SAAU1oF,EAAKykB,EAAKg4B,EAAUksC,EAAQ,CAC5D,IAAIh8F,EAAMkI,EACN+zF,EAAiB,CAAC,EAOtB,GANA/zF,EAAOmL,EAAI,QAAQ,EACnBy8C,EAAWz8C,EAAI,UAAUy8C,GAAY2rC,GAAWvzF,EAAM4vB,EAAKA,EAAI,SAAS,EAAGzkB,EAAI,OAAO,EACtF2oF,EAAS3oF,EAAI,UAAU2oF,GAAUN,GAAOxzF,EAAM4vB,EAAKA,EAAI,SAAS,EAAGzkB,EAAI,OAAO,EAC1Ey8C,GAAYA,IAAa5nD,GAC3B+zF,EAAe,KAAKnsC,CAAQ,EAE1BA,GAAYksC,GAAUlsC,IAAaksC,EAAQ,CAC7Ch8F,EAAO8vD,EAEP,QADIx+B,EAAS,IAAIrT,GAAW6xC,EAAU5nD,CAAI,GAClClI,EAAOsxB,EAAO,KAAK,IAAMtxB,IAASg8F,GACpC3oF,EAAI,QAAQrT,CAAI,GAClBi8F,EAAe,KAAKj8F,CAAI,CAG9B,CACA,OAAIg8F,GAAUlsC,IAAaksC,GAAUA,IAAW9zF,GAC9C+zF,EAAe,KAAKD,CAAM,EAErBC,CACT,EACIC,GAAW,SAAU7oF,EAAKrT,EAAM0L,EAAS,CAC3C,OAAOnc,EAAO,KAAKyQ,CAAI,EAAE,IAAI,SAAUA,EAAM,CAC3C,IAAIsC,EAAM+Q,EAAI,UAAUrT,CAAI,EACxB83B,EAAMzkB,EAAI,UAAU,EACxB,OAAAykB,EAAI,SAAS93B,EAAK,WAAYsC,CAAG,EACjCw1B,EAAI,OAAO93B,EAAK,WAAYsC,EAAM,CAAC,EAC/BoJ,IACFipE,GAAethE,EAAKykB,EAAK93B,EAAM,EAAI,EACnC20E,GAAethE,EAAKykB,EAAK93B,EAAM,EAAK,GAE/B83B,CACT,CAAC,CACH,EAEIqkE,GAASjzF,GAAM,KACfkzF,GAAsB,SAAUtkE,EAAK,CACvC,MAAO,CAAC,CAACA,EAAI,MACf,EACIukE,GAAkB,SAAUr8F,EAAM,CACpC,MAAO,CAAC,EAAEA,GAAQA,EAAK,gBAAkB8V,GAAWrE,GAAQ,QAAQzR,EAAK,aAAa,EAAGyR,GAAQ,QAAQzR,CAAI,CAAC,CAChH,EACIs8F,GAAe,SAAUxkE,EAAK,CAChC,OAAKA,EAEMskE,GAAoBtkE,CAAG,EACzB,GAEAukE,GAAgBvkE,EAAI,cAAc,GAAKukE,GAAgBvkE,EAAI,YAAY,EAJvE,EAMX,EACIykE,GAAc,SAAUlpF,EAAKxa,EAAKs7C,EAAY58C,EAAQ,CACxD,IAAIilG,EAAiBC,EACjBC,EAAeC,EAAeC,EAC9BC,EAAoB,SAAU78F,GAAM8L,GAAQ,CAC9C,IAAIgsB,GAAMzkB,EAAI,UAAU,EACnBrT,IAIH83B,GAAI,SAAS93B,GAAM8L,EAAM,EACzBgsB,GAAI,OAAO93B,GAAM8L,EAAM,EACvBgxF,GAAOhlE,EAAG,EACVoG,GAAS,EAAK,IANdy2C,GAAethE,EAAKykB,GAAKvgC,EAAO,QAAQ,EAAG,EAAI,EAC/CulG,GAAOhlE,EAAG,EAOd,EACIijE,EAAa,SAAU5tG,GAAM,CAC/B,OAAO6tG,GAAoB,WAAWzjG,EAAQpK,EAAI,CACpD,EACIguG,EAAa,SAAUzvF,GAASve,GAAM,CACxC,OAAOmuG,GAAoB,WAAW/jG,EAAQmU,GAASve,EAAI,CAC7D,EACI+uE,EAAW,SAAUs/B,GAAM,CAC7B,OAAOC,GAAWlkG,EAAO,QAAQ,EAAG6mE,GAAO,EAAGo9B,EAAI,CACpD,EACIuB,EAAW,SAAUvB,GAAM,CAC7B,OAAOE,GAAOnkG,EAAO,QAAQ,EAAG6mE,GAAO,EAAGo9B,EAAI,CAChD,EACI/1D,EAAc,SAAU/1C,GAAM48B,GAAY,CAC5C,OAAOkwE,EAAgB,YAAY9sG,GAAM48B,EAAU,CACrD,EACIiiB,GAAiB,SAAU7J,GAAU,CACvC,OAAO83D,EAAgB,eAAe93D,EAAQ,CAChD,EACI3pC,GAAS,SAAUiF,GAAM0L,GAAS,CACpC,OAAAwwF,GAAS7oF,EAAKrT,GAAM0L,EAAO,EAAE,KAAKoxF,EAAM,EACjC98F,EACT,EACIkpF,GAAc,UAAY,CAC5B,IAAIpxD,GAAMsmC,GAAO,EAAGyW,GAAMmoB,GAAO,EACjC,MAAI,CAACllE,IAAOA,GAAI,KACP,GAELA,GAAI,iBACCA,GAAI,iBAAiB,aAAcA,EAAG,IAAM,EAE9C,CAAC+8C,IAAO/8C,GAAI,SACrB,EACIoG,GAAW,SAAUC,GAAS,CAChC,IAAIrG,GAAMsmC,GAAO,EACjBtmC,GAAI,SAAS,CAAC,CAACqG,EAAO,EACtB2+D,GAAOhlE,EAAG,CACZ,EACIklE,GAAS,UAAY,CACvB,OAAOnkG,EAAI,aAAeA,EAAI,aAAa,EAAIA,EAAI,SAAS,SAC9D,EACIulE,GAAS,UAAY,CACvB,IAAI35B,GAAW3M,GAAKxsB,GAAK5S,GACrBukG,GAA2B,SAAUC,GAAKC,GAAaC,GAAkB,CAC3E,GAAI,CACF,OAAOD,GAAY,sBAAsBD,GAAKE,EAAgB,CAChE,MAAa,CACX,MAAO,EACT,CACF,EAKA,GAJI,CAACvkG,IAGLH,GAAMG,EAAI,SACN,OAAOH,GAAQ,KAAeA,KAAQ,MACxC,OAAO,KAET,GAAInB,EAAO,WAAa,QAAauwE,GAAY,SAASvwE,CAAM,IAAM,GAAO,CAC3E,IAAImtC,GAAW45B,GAAkB,OAAO/mE,CAAM,EAC9C,GAAImtC,GAAS,OAAO,EAClB,OAAOA,GAAS,IAAI,SAAUj0C,GAAG,CAC/B,OAAOwmG,GAAmB,cAAc1/F,EAAQ,CAAC9G,EAAC,CAAC,EAAE,CAAC,CACxD,CAAC,EAAE,MAAMiI,GAAI,YAAY,CAAC,CAE9B,CACA,GAAI,EACG+rC,GAAYu4D,GAAO,IAAM,CAACz7E,GAAS,iBAAiBkjB,GAAU,UAAU,IACvEA,GAAU,WAAa,EACzB3M,GAAM2M,GAAU,WAAW,CAAC,EAE5B3M,GAAM2M,GAAU,YAAcA,GAAU,YAAY,EAAI/rC,GAAI,YAAY,EAG9E,MAAa,CACb,CACA,OAAAo/B,GAAMm/D,GAAmB,cAAc1/F,EAAQ,CAACugC,EAAG,CAAC,EAAE,CAAC,EAClDA,KACHA,GAAMp/B,GAAI,YAAcA,GAAI,YAAY,EAAIA,GAAI,KAAK,gBAAgB,GAEnEo/B,GAAI,UAAYA,GAAI,eAAe,WAAa,GAAKA,GAAI,YAC3DxsB,GAAM+H,EAAI,QAAQ,EAClBykB,GAAI,SAASxsB,GAAK,CAAC,EACnBwsB,GAAI,OAAOxsB,GAAK,CAAC,GAEfoxF,GAAiBC,IACfM,GAAyBnlE,GAAI,eAAgBA,GAAK4kE,CAAa,IAAM,GAAKO,GAAyBnlE,GAAI,WAAYA,GAAK4kE,CAAa,IAAM,EAC7I5kE,GAAM6kE,GAEND,EAAgB,KAChBC,EAAgB,OAGb7kE,EACT,EACIglE,GAAS,SAAUhlE,GAAKj2B,GAAS,CACnC,IAAIgzE,GAAK70E,GAAMrG,GACf,GAAK2iG,GAAaxkE,EAAG,EAGrB,KAAIulE,GAAUjB,GAAoBtkE,EAAG,EAAIA,GAAM,KAC/C,GAAIulE,GAAS,CACXV,EAAgB,KAChB,GAAI,CACFU,GAAQ,OAAO,CACjB,MAAa,CACb,CACA,MACF,CAOA,GANAxoB,GAAMmoB,GAAO,EACbrjG,GAAMpC,EAAO,KAAK,oBAAqB,CACrC,MAAOugC,GACP,QAASj2B,EACX,CAAC,EACDi2B,GAAMn+B,GAAI,MACNk7E,GAAK,CACP8nB,EAAgB7kE,GAChB,GAAI,CACF+8C,GAAI,gBAAgB,EACpBA,GAAI,SAAS/8C,EAAG,CAClB,MAAa,CACb,CACIj2B,KAAY,IAASgzE,GAAI,SAC3BA,GAAI,SAAS/8C,GAAI,aAAcA,GAAI,SAAS,EAC5C+8C,GAAI,OAAO/8C,GAAI,eAAgBA,GAAI,WAAW,GAEhD4kE,EAAgB7nB,GAAI,WAAa,EAAIA,GAAI,WAAW,CAAC,EAAI,IAC3D,CACI,CAAC/8C,GAAI,WAAaA,GAAI,iBAAmBA,GAAI,cAAgB+8C,GAAI,kBAAoB,CAAChgF,GAAI,IACxFijC,GAAI,UAAYA,GAAI,YAAc,GAChCA,GAAI,eAAe,cAAc,IACnC93B,GAAO83B,GAAI,eAAe,WAAWA,GAAI,WAAW,EAChD93B,IAAQA,GAAK,UAAY,QAC3B60E,GAAI,iBAAiB/8C,GAAI,eAAgBA,GAAI,YAAaA,GAAI,aAAcA,GAAI,SAAS,GACrF+8C,GAAI,aAAe/8C,GAAI,gBAAkB+8C,GAAI,YAAc/8C,GAAI,eACjE+8C,GAAI,iBAAiB70E,GAAM,EAAGA,GAAM,CAAC,IAM/CzI,EAAO,KAAK,yBAA0B,CACpC,MAAOugC,GACP,QAASj2B,EACX,CAAC,EACH,EACIy7F,GAAU,SAAUhyF,GAAK,CAC3B,OAAA6vF,EAAW9nF,EAAI,aAAa/H,EAAG,CAAC,EACzBA,EACT,EACIg0B,GAAU,UAAY,CACxB,OAAOw8D,GAAUvkG,EAAO,QAAQ,EAAG6mE,GAAO,CAAC,CAC7C,EACIm/B,GAAsB,SAAUztC,GAAUksC,GAAQ,CACpD,OAAOD,GAAkB1oF,EAAK+qD,GAAO,EAAGtO,GAAUksC,EAAM,CAC1D,EACIwB,GAAY,UAAY,CAC1B,IAAI3oB,GAAMmoB,GAAO,EACbS,GAAaC,GACjB,MAAI,CAAC7oB,IAAO,CAACA,GAAI,YAAc,CAACA,GAAI,UAC3B,IAET4oB,GAAcpqF,EAAI,UAAU,EAC5BoqF,GAAY,SAAS5oB,GAAI,WAAYA,GAAI,YAAY,EACrD4oB,GAAY,SAAS,EAAI,EACzBC,GAAarqF,EAAI,UAAU,EAC3BqqF,GAAW,SAAS7oB,GAAI,UAAWA,GAAI,WAAW,EAClD6oB,GAAW,SAAS,EAAI,EACjBD,GAAY,sBAAsBA,GAAY,eAAgBC,EAAU,GAAK,EACtF,EACI1lD,GAAY,UAAY,CAC1B,IAAIlgB,GAAMsmC,GAAO,EACbyW,GAAMmoB,GAAO,EACjB,GAAI,CAACjuC,GAAW,kBAAkB8lB,EAAG,GAAKD,GAAar9E,CAAM,EAAG,CAC9D,IAAI6iE,GAAUC,GAAe,UAAUhnD,EAAKykB,EAAG,EAC/C,OAAAsiC,GAAQ,KAAK,SAAUA,GAAS,CAC9B0iC,GAAO1iC,GAASojC,GAAU,CAAC,CAC7B,CAAC,EACMpjC,GAAQ,MAAMtiC,EAAG,CAC1B,CACA,OAAOA,EACT,EACI6lE,GAAkB,SAAUr/F,GAAU7H,GAAU,CAClD,IAAImnG,GACJ,OAAKhB,IACHA,EAAsB,CAAC,EACvBgB,GAAmB,CAAC,EACpBrmG,EAAO,GAAG,aAAc,SAAU/B,GAAG,CACnC,IAAIwK,GAAOxK,GAAE,QAASygB,GAAU5C,EAAI,WAAWrT,GAAM,KAAMqT,EAAI,QAAQ,CAAC,EAAGwqF,GAAmB,CAAC,EAC/F1B,GAAOS,EAAqB,SAAU7iF,GAAWzb,GAAU,CACzD69F,GAAOlmF,GAAS,SAAUjW,GAAM,CAC9B,GAAIqT,EAAI,GAAGrT,GAAM1B,EAAQ,EACvB,OAAKs/F,GAAiBt/F,EAAQ,IAC5B69F,GAAOpiF,GAAW,SAAUtjB,GAAU,CACpCA,GAAS,GAAM,CACb,KAAMuJ,GACN,SAAU1B,GACV,QAAS2X,EACX,CAAC,CACH,CAAC,EACD2nF,GAAiBt/F,EAAQ,EAAIyb,IAE/B8jF,GAAiBv/F,EAAQ,EAAIyb,GACtB,EAEX,CAAC,CACH,CAAC,EACDoiF,GAAOyB,GAAkB,SAAU7jF,GAAWzb,GAAU,CACjDu/F,GAAiBv/F,EAAQ,IAC5B,OAAOs/F,GAAiBt/F,EAAQ,EAChC69F,GAAOpiF,GAAW,SAAUtjB,GAAU,CACpCA,GAAS,GAAO,CACd,KAAMuJ,GACN,SAAU1B,GACV,QAAS2X,EACX,CAAC,CACH,CAAC,EAEL,CAAC,CACH,CAAC,GAEE2mF,EAAoBt+F,EAAQ,IAC/Bs+F,EAAoBt+F,EAAQ,EAAI,CAAC,GAEnCs+F,EAAoBt+F,EAAQ,EAAE,KAAK7H,EAAQ,EACpC7J,EACT,EACIkxG,GAAqB,UAAY,CAGnC,QAFI3oC,GACAn1D,GAAOqT,EAAI,QAAQ,EAChBrT,IAAQA,GAAK,WAAa,QAAQ,CACvC,GAAIA,GAAK,aAAeA,GAAK,aAAc,CACzCm1D,GAAkBn1D,GAClB,KACF,CACAA,GAAOA,GAAK,UACd,CACA,OAAOm1D,EACT,EACIa,GAAiB,SAAU1qD,GAAKspD,GAAY,CAC9C,OAAOgB,GAAe,sBAAsBr+D,EAAQ+T,GAAKspD,EAAU,CACrE,EACImpC,GAAe,SAAUl/D,GAASC,GAAS,CAC7C,OAAOg+D,GAAO/F,GAAoB,UAAUl4D,GAASC,GAASvnC,EAAO,OAAO,CAAC,CAAC,CAChF,EACIkqC,GAAwB,UAAY,CACtC,IAAI3J,GAAMsmC,GAAO,EACjB,OAAOtmC,GAAI,UAAY6K,GAAgB,eAAe7K,EAAG,EAAE,eAAe,EAAE,CAAC,EAAIA,GAAI,sBAAsB,CAC7G,EACI5F,GAAU,UAAY,CACxBr5B,EAAM6jG,EAAgBC,EAAgB,KACtCF,EAAiB,QAAQ,CAC3B,EACI7vG,GAAU,CACZ,gBAAiB,KACjB,iBAAkB,KAClB,IAAKymB,EACL,IAAKxa,EACL,WAAYs7C,EACZ,OAAQ58C,EACR,SAAU2mC,GACV,kBAAmB2+D,EACnB,WAAY9B,EACZ,WAAYI,EACZ,YAAa11D,EACb,eAAgB8I,GAChB,OAAQxzC,GACR,YAAamuF,GACb,UAAWsU,GACX,QAASF,GACT,QAASh+D,GACT,OAAQ09D,GACR,OAAQF,GACR,OAAQ1+B,GACR,SAAUlC,EACV,OAAQ6gC,EACR,kBAAmBQ,GACnB,UAAWvlD,GACX,gBAAiB2lD,GACjB,mBAAoBG,GACpB,eAAgB9nC,GAChB,aAAc+nC,GACd,sBAAuBt8D,GACvB,QAASvP,EACX,EACA,OAAAsqE,EAAkBhJ,GAAkB5mG,EAAO,EAC3C6vG,EAAmB7I,GAAiBhnG,GAAS2K,CAAM,EACnD3K,GAAQ,gBAAkB4vG,EAC1B5vG,GAAQ,iBAAmB6vG,EACpB7vG,EACT,EAEIoxG,IACH,SAAUA,EAAW,CACpBA,EAAUA,EAAU,GAAQ,CAAC,EAAI,KACjCA,EAAUA,EAAU,MAAW,CAAC,EAAI,QACpCA,EAAUA,EAAU,KAAU,CAAC,EAAI,OACnCA,EAAUA,EAAU,IAAS,CAAC,EAAI,KACpC,GAAEA,KAAcA,GAAY,CAAC,EAAE,EAC/B,IAAIC,GAAO,SAAUt1D,EAAWu1D,EAAW,CACzC,OAAOv1D,IAAcgC,GAAW,UAAYuzD,EAAU,QAAQ,EAAIA,CACpE,EACIC,GAAS,SAAUx1D,EAAWsM,EAAahpC,EAAK,CAClD,OAAO08B,IAAcgC,GAAW,SAAWsK,EAAY,KAAKhpC,CAAG,EAAIgpC,EAAY,KAAKhpC,CAAG,CACzF,EACImyF,GAAe,SAAUvrG,EAAO81C,EAAW01D,EAAY7gD,EAAS,CAClE,OAAIj8B,GAAS,KAAKi8B,EAAQ,QAAQ7U,IAAcgC,GAAW,QAAQ,CAAC,EAC3DqzD,GAAU,GACR/0D,GAAco1D,EAAY7gD,CAAO,IAAM,GACzCwgD,GAAU,MAEVA,GAAU,IAErB,EACIM,GAAoB,SAAUl3F,EAAWuhC,EAAW91C,EAAOqP,EAAO,CAIpE,QAHI+yC,EAActJ,GAAY94C,CAAK,EAC/BwrG,EAAan8F,EAAOs7C,EACpB0gD,EAAY,CAAC,EACVG,IACL7gD,EAAU2gD,GAAOx1D,EAAWsM,EAAaopD,CAAU,EAC/C,EAAC7gD,IAFY,CAKjB,GAAIj8B,GAAS,KAAKi8B,EAAQ,QAAQ,EAAK,CAAC,EACtC,OAAI7U,IAAcgC,GAAW,SACpB,CACL,UAAWszD,GAAKt1D,EAAWu1D,CAAS,EAAE,OAAO,CAAC1gD,CAAO,CAAC,EACtD,UAAWwgD,GAAU,GACrB,QAASzuG,EAAO,KAAKiuD,CAAO,CAC9B,EAEO,CACL,UAAWygD,GAAKt1D,EAAWu1D,CAAS,EACpC,UAAWF,GAAU,GACrB,QAASzuG,EAAO,KAAKiuD,CAAO,CAC9B,EAGJ,GAAI,CAACA,EAAQ,UAAU,EAAG,CACxB6gD,EAAa7gD,EACb,QACF,CACA,GAAIp2C,EAAUi3F,EAAY7gD,CAAO,EAAG,CAClC,IAAI+gD,EAAYH,GAAavrG,EAAO81C,EAAW01D,EAAY7gD,CAAO,EAClE,MAAO,CACL,UAAWygD,GAAKt1D,EAAWu1D,CAAS,EACpC,UAAWK,EACX,QAAShvG,EAAO,KAAKiuD,CAAO,CAC9B,CACF,CACA0gD,EAAU,KAAK1gD,CAAO,EACtB6gD,EAAa7gD,CACf,CACA,MAAO,CACL,UAAWygD,GAAKt1D,EAAWu1D,CAAS,EACpC,UAAWF,GAAU,IACrB,QAASzuG,EAAO,KAAK,CACvB,CACF,EACIivG,GAA2B,SAAU71D,EAAW81D,EAAwB5rG,EAAOqP,EAAO,CACxF,OAAOu8F,EAAuB5rG,EAAOqP,CAAK,EAAE,QAAQ,IAAI,SAAU+J,EAAK,CACrE,IAAIiyF,EAAYO,EAAuB5rG,EAAOoZ,CAAG,EAAE,UACnD,OAAO08B,IAAcgC,GAAW,UAAYuzD,EAAU,OAAOjyF,CAAG,EAAI,CAACA,CAAG,EAAE,OAAOiyF,CAAS,CAC5F,CAAC,EAAE,MAAM,CAAC,CAAC,CACb,EACIQ,GAAyC,SAAUR,EAAW1wG,EAAG,CACnE,OAAOiE,GAAMysG,EAAW,SAAU1sG,EAAKqkD,EAAQ,CAC7C,OAAOrkD,EAAI,KAAK,UAAY,CAC1B,OAAOjC,EAAO,KAAKsmD,CAAM,CAC3B,EAAG,SAAUuH,EAAS,CACpB,OAAO1d,GAAMntC,GAAK6qD,EAAQ,eAAe,CAAC,EAAG7qD,GAAKsjD,EAAO,eAAe,CAAC,EAAG,SAAU8oD,EAAUC,EAAS,CACvG,IAAIC,EAAW,KAAK,IAAIrxG,EAAImxG,EAAS,IAAI,EACrCG,EAAU,KAAK,IAAItxG,EAAIoxG,EAAQ,IAAI,EACvC,OAAOE,GAAWD,EAAWhpD,EAASuH,CACxC,CAAC,EAAE,GAAG5rD,CAAG,CACX,CAAC,CACH,EAAGjC,EAAO,KAAK,CAAC,CAClB,EACIwvG,GAAgC,SAAUb,EAAWjyF,EAAK,CAC5D,OAAO1Z,GAAK0Z,EAAI,eAAe,CAAC,EAAE,KAAK,SAAU+yF,EAAY,CAC3D,OAAON,GAAuCR,EAAWc,EAAW,IAAI,CAC1E,CAAC,CACH,EACIC,GAAgCxxG,EAAM6wG,GAAmBn8D,GAAc,QAAS,EAAE,EAClF+8D,GAA4BzxG,EAAM6wG,GAAmBn8D,GAAc,QAAS,CAAC,EAC7Eg9D,GAAgB,SAAUtsG,EAAOoZ,EAAK,CACxC,OAAOgzF,GAA8BpsG,EAAOoZ,CAAG,EAAE,QAAQ,OAAO,CAClE,EACImzF,GAAe,SAAUvsG,EAAOoZ,EAAK,CACvC,OAAOizF,GAA0BrsG,EAAOoZ,CAAG,EAAE,QAAQ,OAAO,CAC9D,EACIozF,GAAoB5xG,EAAM+wG,GAA0B,GAAIS,EAA6B,EACrFK,GAAoB7xG,EAAM+wG,GAA0B,EAAGU,EAAyB,EAChFK,GAAwB,SAAU1sG,EAAO,CAC3C,OAAO85C,GAAY,gBAAgB95C,CAAK,EAAE,IAAI,SAAUoZ,EAAK,CAC3D,MAAO,CAACA,CAAG,EAAE,OAAOizF,GAA0BrsG,EAAOoZ,CAAG,EAAE,SAAS,CACrE,CAAC,EAAE,MAAM,CAAC,CAAC,CACb,EACIuzF,GAAuB,SAAU3sG,EAAO,CAC1C,OAAO85C,GAAY,eAAe95C,CAAK,EAAE,IAAI,SAAUoZ,EAAK,CAC1D,OAAOgzF,GAA8BpsG,EAAOoZ,CAAG,EAAE,UAAU,OAAOA,CAAG,CACvE,CAAC,EAAE,MAAM,CAAC,CAAC,CACb,EAEIwzF,GAA2Bl+E,GAAS,uBACpCm+E,GAAoBvgE,GACpBwgE,GAA4B,SAAUh3D,EAAWpxC,EAAQw/D,EAAch6B,EAAO,CAChF,IAAI6+D,EAAWjzD,IAAcgC,GAAW,SACpCqsB,EAAiC4kC,EAAWl4C,GAA+BC,GAC/E,GAAI,CAAC5mB,EAAM,UAAW,CACpB,IAAI/8B,EAAO0/F,GAAkB3iE,CAAK,EAClC,GAAI0iE,GAAyBz/F,CAAI,EAC/B,OAAO+1D,GAAUptB,EAAWpxC,EAAQyI,EAAM2oC,IAAcgC,GAAW,UAAW,EAAI,CAEtF,CACA,IAAIi1D,EAA0B9iE,GAA6BC,CAAK,EAC5DgF,EAAgBmI,GAA2BvB,EAAWpxC,EAAO,QAAQ,EAAGwlC,CAAK,EACjF,GAAIi6B,EAA+Bj1B,CAAa,EAC9C,OAAOm0B,GAAW3+D,EAAQwqC,EAAc,QAAQ,CAAC65D,CAAQ,CAAC,EAE5D,IAAI3kC,EAAoBra,GAAY,kBAAkBg/C,EAAU7kC,EAAah1B,CAAa,CAAC,EAC3F,GAAI,CAACk1B,EACH,OAAI2oC,EACK7iE,EAEF,KAET,GAAIi6B,EAA+BC,CAAiB,EAClD,OAAOlB,GAAUptB,EAAWpxC,EAAQ0/D,EAAkB,QAAQ,CAAC2kC,CAAQ,EAAGA,EAAU,EAAI,EAE1F,IAAIjlC,EAAoBI,EAAaE,CAAiB,EACtD,OAAIN,GAAqBK,EAA+BL,CAAiB,GACnEnsB,GAAsBysB,EAAmBN,CAAiB,EACrDZ,GAAUptB,EAAWpxC,EAAQo/D,EAAkB,QAAQ,CAACilC,CAAQ,EAAGA,EAAU,EAAI,EAGxFgE,EACKtpC,GAAiB/+D,EAAQ0/D,EAAkB,QAAQ,EAAG,EAAI,EAE5D,IACT,EACI4oC,GAA0B,SAAUl3D,EAAWpxC,EAAQuoG,EAAU/iE,EAAO,CAC1E,IAAIgF,EAAeg+D,EAAeC,EAC9BC,EAAqBC,EAAiBrhE,EACtCshE,EAAOC,EAAOC,EAYlB,GAXAA,EAA2BX,GAAkB3iE,CAAK,EAClDgF,EAAgBmI,GAA2BvB,EAAWpxC,EAAO,QAAQ,EAAGwlC,CAAK,EAC7EgjE,EAAgBD,EAASvoG,EAAO,QAAQ,EAAGg/E,GAAY,CAAC,EAAGx0C,CAAa,EACxEi+D,EAAoB1uG,GAAOyuG,EAAevpB,GAAO,CAAC,CAAC,EACnD0pB,EAAkB34F,GAAS,KAAKw6B,EAAc,eAAe,CAAC,GAC1D2hB,GAA6B3hB,CAAa,GAAK8hB,GAAc9hB,CAAa,KAC5Es+D,EAA2Bt+D,EAAc,QAAQ,IAE/C4hB,GAA4B5hB,CAAa,GAAK+hB,GAAa/hB,CAAa,KAC1Es+D,EAA2Bt+D,EAAc,QAAQ,EAAI,GAEnD,CAACm+D,EACH,OAAO,KAIT,GAFArhE,EAAUqhE,EAAgB,KAC1BD,EAAsBnpB,GAAsBkpB,EAAmBnhE,CAAO,EAClEohE,GACER,GAAyBQ,EAAoB,IAAI,EACnD,OAAAE,EAAQ,KAAK,IAAIthE,EAAUohE,EAAoB,IAAI,EACnDG,EAAQ,KAAK,IAAIvhE,EAAUohE,EAAoB,KAAK,EAC7ClqC,GAAUptB,EAAWpxC,EAAQ0oG,EAAoB,KAAME,EAAQC,EAAO,EAAI,EAGrF,GAAIC,EAA0B,CAC5B,IAAIC,EAAiBlqB,GAAeztC,EAAWpxC,EAAO,QAAQ,EAAGg/E,GAAY,CAAC,EAAG8pB,CAAwB,EAMzG,GALAJ,EAAsBnpB,GAAsBxlF,GAAOgvG,EAAgB9pB,GAAO,CAAC,CAAC,EAAG33C,CAAO,EAClFohE,IAGJA,EAAsB14F,GAAS,KAAKjW,GAAOgvG,EAAgB9pB,GAAO,CAAC,CAAC,CAAC,EACjEypB,GACF,OAAO3pC,GAAiB/+D,EAAQ0oG,EAAoB,SAAS,QAAQ,EAAG,EAAI,CAEhF,CACF,EACIM,GAAkB,SAAUhpG,EAAQ,CACtC,IAAIipG,EAAYjpG,EAAO,IAAI,OAAOykD,GAAS,mBAAmBzkD,CAAM,CAAC,EACrE,OAAI,CAAC1C,GAAI,IAAMA,GAAI,IAAM,MACvB2rG,EAAU,UAAY,2BAEjBA,CACT,EACIC,GAAe,SAAUlpG,EAAQoxC,EAAW5L,EAAO,CACrD,IAAIwoD,EAAKvwC,EAAU0rD,EACfzrD,EAActJ,GAAYp0C,EAAO,QAAQ,CAAC,EAC1Cs/D,EAA6BppE,EAAM68C,GAAwB2K,EAAY,IAAI,EAC3E6hB,EAA6BrpE,EAAM68C,GAAwB2K,EAAY,IAAI,EAC/E,GAAIlY,EAAM,WAAaxlC,EAAO,SAAS,kBAAmB,CAExD,GADAguF,EAAMhuF,EAAO,IAAI,UAAUwlC,EAAM,eAAgB,KAAK,EAClD,CAACwoD,EACH,OAEE58C,IAAc,EAChBqM,EAAW6hB,EAA2Bl0B,GAAgB,eAAe5F,CAAK,CAAC,EAE3EiY,EAAW8hB,EAA2Bn0B,GAAgB,eAAe5F,CAAK,CAAC,EAExEiY,IACH0rD,EAAWH,GAAgBhpG,CAAM,EAC7BoxC,IAAc,EAChBpxC,EAAO,EAAEguF,CAAG,EAAE,MAAMmb,CAAQ,EAE5BnpG,EAAO,EAAEguF,CAAG,EAAE,OAAOmb,CAAQ,EAE/BnpG,EAAO,UAAU,OAAOmpG,EAAU,EAAI,EACtCnpG,EAAO,UAAU,SAAS,EAE9B,CACF,EACIopG,GAAqB,SAAUppG,EAAQsK,EAAS,CAClD,IAAIozC,EAActJ,GAAYp0C,EAAO,QAAQ,CAAC,EAC1Cs/D,EAA6BppE,EAAM68C,GAAwB2K,EAAY,IAAI,EAC3E6hB,EAA6BrpE,EAAM68C,GAAwB2K,EAAY,IAAI,EAC3E2rD,EACAj4D,EAAY9mC,EAAU8oC,GAAW,SAAWA,GAAW,UACvDosB,EAAel1D,EAAUg1D,EAA6BC,EACtD/5B,EAAQxlC,EAAO,UAAU,OAAO,EAMpC,OALAqpG,EAAWjB,GAA0Bh3D,EAAWpxC,EAAQw/D,EAAch6B,CAAK,EACvE6jE,IAGJA,EAAWH,GAAalpG,EAAQoxC,EAAW5L,CAAK,EAC5C6jE,GACKA,EAEF,IACT,EACIC,GAAmB,SAAUtpG,EAAQupG,EAAM,CAC7C,IAAIF,EACAj4D,EAAYm4D,EAAO,EAAI,GACvBhB,EAAWgB,EAAO3qB,GAAYD,GAC9Bn5C,EAAQxlC,EAAO,UAAU,OAAO,EAMpC,OALAqpG,EAAWf,GAAwBl3D,EAAWpxC,EAAQuoG,EAAU/iE,CAAK,EACjE6jE,IAGJA,EAAWH,GAAalpG,EAAQoxC,EAAW5L,CAAK,EAC5C6jE,GACKA,EAEF,IACT,EACIG,GAAQ,SAAUxpG,EAAQsK,EAAS,CACrC,OAAO,UAAY,CACjB,IAAI2/B,EAASm/D,GAAmBppG,EAAQsK,CAAO,EAC/C,OAAI2/B,GACFg1B,GAAYj/D,EAAQiqC,CAAM,EACnB,IAEA,EAEX,CACF,EACIw/D,GAAQ,SAAUzpG,EAAQupG,EAAM,CAClC,OAAO,UAAY,CACjB,IAAIt/D,EAASq/D,GAAiBtpG,EAAQupG,CAAI,EAC1C,OAAIt/D,GACFg1B,GAAYj/D,EAAQiqC,CAAM,EACnB,IAEA,EAEX,CACF,EACIy/D,GAAgB,SAAUp/F,EAAS,CACrC,OAAO,SAAUoK,EAAK,CACpB,OAAOpK,EAAU8hD,GAA4B13C,CAAG,EAAIy3C,GAA6Bz3C,CAAG,CACtF,CACF,EACIi1F,GAAqB,SAAU3pG,EAAQsK,EAAS,CAClD,OAAO,UAAY,CACjB,IAAIvS,EAAOuS,EAAU8gC,GAAgB,aAAaprC,EAAO,UAAU,OAAO,CAAC,EAAIorC,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,EACnIkK,EAASI,EAAUq9F,GAA0B3nG,EAAO,QAAQ,EAAGjI,CAAI,EAAI2vG,GAA8B1nG,EAAO,QAAQ,EAAGjI,CAAI,EAC3Hm7C,EAAK5oC,EAAUrP,GAAKiP,EAAO,SAAS,EAAIlP,GAAKkP,EAAO,SAAS,EACjE,OAAOgpC,EAAG,OAAOw2D,GAAcp/F,CAAO,CAAC,EAAE,KAAKxU,EAAS,EAAK,EAAG,SAAU4e,EAAK,CAC5E,OAAA1U,EAAO,UAAU,OAAO0U,EAAI,QAAQ,CAAC,EAC9B,EACT,CAAC,CACH,CACF,EAEIk1F,GAAU,SAAUljE,EAAMolB,EAAO,CACnC,MAAO,CACL,KAAMplB,EAAK,KAAOolB,EAClB,IAAKplB,EAAK,IAAMolB,EAChB,MAAOplB,EAAK,MAAQolB,EAAQ,EAC5B,OAAQplB,EAAK,OAASolB,EAAQ,EAC9B,MAAOplB,EAAK,MAAQolB,EACpB,OAAQplB,EAAK,OAASolB,CACxB,CACF,EACI+9C,GAAa,SAAUC,EAAeC,EAAK,CAC7C,OAAOpyG,GAAKoyG,EAAK,SAAU/J,EAAI,CAC7B,IAAIt5D,EAAOkjE,GAAQnjE,GAAQu5D,EAAG,sBAAsB,CAAC,EAAG,EAAE,EAC1D,MAAO,CACL,CACE,EAAGt5D,EAAK,KACR,EAAGojE,EAAcpjE,CAAI,EACrB,KAAMs5D,CACR,EACA,CACE,EAAGt5D,EAAK,MACR,EAAGojE,EAAcpjE,CAAI,EACrB,KAAMs5D,CACR,CACF,CACF,CAAC,CACH,EACIgK,GAAoB,SAAUC,EAASh0G,EAAGwe,EAAG,CAC/C,OAAOva,GAAM+vG,EAAS,SAAUhwG,EAAKiwG,EAAW,CAC9C,OAAOjwG,EAAI,KAAK,UAAY,CAC1B,OAAOjC,EAAO,KAAKkyG,CAAS,CAC9B,EAAG,SAAUC,EAAW,CACtB,IAAIC,EAAU,KAAK,KAAK,KAAK,IAAID,EAAU,EAAIl0G,CAAC,EAAI,KAAK,IAAIk0G,EAAU,EAAI11F,CAAC,CAAC,EACzE8yF,EAAU,KAAK,KAAK,KAAK,IAAI2C,EAAU,EAAIj0G,CAAC,EAAI,KAAK,IAAIi0G,EAAU,EAAIz1F,CAAC,CAAC,EAC7E,OAAOzc,EAAO,KAAKuvG,EAAU6C,EAAUF,EAAYC,CAAS,CAC9D,CAAC,CACH,EAAGnyG,EAAO,KAAK,CAAC,CAClB,EACIqyG,GAAmB,SAAUP,EAAeQ,EAAgBr0C,EAAOhgE,EAAGwe,EAAG,CAC3E,IAAIkiD,EAAQj3B,GAAcxlB,GAAQ,QAAQ+7C,CAAK,EAAG,eAAe,EAAE,IAAI,SAAUh4D,EAAG,CAClF,OAAOA,EAAE,IAAI,CACf,CAAC,EACGgsG,EAAUlwG,GAAO8vG,GAAWC,EAAenzC,CAAK,EAAG,SAAU4zC,EAAQ,CACvE,OAAOD,EAAeC,EAAQ91F,CAAC,CACjC,CAAC,EACD,OAAOu1F,GAAkBC,EAASh0G,EAAGwe,CAAC,EAAE,IAAI,SAAU81F,EAAQ,CAC5D,OAAOA,EAAO,IAChB,CAAC,CACH,EACIC,GAAiB,SAAU9jE,EAAM,CACnC,OAAOA,EAAK,MACd,EACI+jE,GAAc,SAAU/jE,EAAM,CAChC,OAAOA,EAAK,GACd,EACIgkE,GAAY,SAAUH,EAAQ91F,EAAG,CACnC,OAAO81F,EAAO,EAAI91F,CACpB,EACIk2F,GAAY,SAAUJ,EAAQ91F,EAAG,CACnC,OAAO81F,EAAO,EAAI91F,CACpB,EACIm2F,GAAsB10G,EAAMm0G,GAAkBG,GAAgBE,EAAS,EACvEG,GAAsB30G,EAAMm0G,GAAkBI,GAAaE,EAAS,EACpEG,GAAiC,SAAU70C,EAAOvhD,EAAK,CACzD,OAAO1Z,GAAK0Z,EAAI,eAAe,CAAC,EAAE,KAAK,SAAUgyB,EAAM,CACrD,OAAOkkE,GAAoB30C,EAAOvvB,EAAK,KAAMA,EAAK,GAAG,CACvD,CAAC,EAAE,KAAK,SAAUgvB,EAAM,CACtB,OAAO8xC,GAA8BS,GAAqBvyC,CAAI,EAAGhhD,CAAG,CACtE,CAAC,CACH,EACIq2F,GAAiC,SAAU90C,EAAOvhD,EAAK,CACzD,OAAOzZ,GAAKyZ,EAAI,eAAe,CAAC,EAAE,KAAK,SAAUgyB,EAAM,CACrD,OAAOmkE,GAAoB50C,EAAOvvB,EAAK,KAAMA,EAAK,GAAG,CACvD,CAAC,EAAE,KAAK,SAAUgvB,EAAM,CACtB,OAAO8xC,GAA8BQ,GAAsBtyC,CAAI,EAAGhhD,CAAG,CACvE,CAAC,CACH,EAEIs2F,GAAe,SAAUjE,EAAmBzrG,EAAO2vG,EAAU,CAC/D,OAAOA,EAAS,QAAQ,IAAI,SAAUC,EAAU,CAC9C,OAAOnE,EAAkBzrG,EAAO4vG,CAAQ,EAAE,QAAQ,OAAO,CAC3D,CAAC,EAAE,MAAM,EAAK,CAChB,EACIC,GAAsB,SAAUF,EAAU,CAC5C,OAAOA,EAAS,YAAcxE,GAAU,MAAQwE,EAAS,UAAU,SAAW,CAChF,EACIG,GAAoB,SAAUH,EAAU,CAC1C,OAAOA,EAAS,YAAcxE,GAAU,IAAMwE,EAAS,UAAU,SAAW,CAC9E,EACII,GAAoB,SAAUtE,EAAmBzrG,EAAOoZ,EAAK,CAC/D,IAAIu2F,EAAWlE,EAAkBzrG,EAAOoZ,CAAG,EAC3C,OAAIy2F,GAAoBF,CAAQ,GAAK,CAACjhF,GAAS,KAAKtV,EAAI,QAAQ,CAAC,GAAK02F,GAAkBH,CAAQ,EACvF,CAACD,GAAajE,EAAmBzrG,EAAO2vG,CAAQ,EAEhDA,EAAS,QAAQ,OAAO,CAEnC,EACIK,GAAyBp1G,EAAMm1G,GAAmB3D,EAA6B,EAC/E6D,GAAwBr1G,EAAMm1G,GAAmB1D,EAAyB,EAC1E6D,GAA6B,SAAUlhG,EAASi2B,EAAK01B,EAAO,CAC9D,IAAIxY,EAAWrS,GAAgB,eAAe7K,CAAG,EACjD,OAAO6U,GAAY,WAAW,CAAC9qC,EAAS2rD,CAAK,EAAE,IAAI,SAAUvhD,EAAK,CAChE,OAAOA,EAAI,QAAQ+oC,CAAQ,CAC7B,CAAC,EAAE,MAAM,EAAK,CAChB,EACIguD,GAAuB,SAAUzrG,EAAQsK,EAAS2rD,EAAO+pC,EAAI,CAC/D,IAAIz/D,EAAMvgC,EAAO,UAAU,OAAO,EAC9BoxC,EAAY9mC,EAAU,EAAI,GAC9B,GAAIqmC,GAAwB,GAAK66D,GAA2BlhG,EAASi2B,EAAK01B,CAAK,EAAG,CAChF,IAAIhsB,EAASu0B,GAAUptB,EAAWpxC,EAAQi2D,EAAO,CAAC3rD,EAAS,EAAI,EAC/D,OAAA20D,GAAYj/D,EAAQiqC,CAAM,EACnB,EACT,CACA,MAAO,EACT,EACIyhE,GAA0B,SAAU/6F,EAAMslD,EAAOtrD,EAAO,CAC1D,OAAOmgG,GAA+B70C,EAAOtrD,CAAK,EAAE,QAAQ,UAAY,CACtE,OAAO3P,GAAK2P,EAAM,eAAe,CAAC,EAAE,KAAK,SAAU+7B,EAAM,CACvD,OAAOygE,GAAuCW,GAAkBn3F,EAAMy6B,GAAgB,OAAO6qB,CAAK,CAAC,EAAGvvB,EAAK,IAAI,CACjH,CAAC,CACH,CAAC,EAAE,MAAM0E,GAAgB,OAAO6qB,CAAK,CAAC,CACxC,EACI01C,GAA0B,SAAUh7F,EAAMslD,EAAOtrD,EAAO,CAC1D,OAAOogG,GAA+B90C,EAAOtrD,CAAK,EAAE,QAAQ,UAAY,CACtE,OAAO3P,GAAK2P,EAAM,eAAe,CAAC,EAAE,KAAK,SAAU+7B,EAAM,CACvD,OAAOygE,GAAuCY,GAAkBp3F,EAAMy6B,GAAgB,MAAM6qB,CAAK,CAAC,EAAGvvB,EAAK,IAAI,CAChH,CAAC,CACH,CAAC,EAAE,MAAM0E,GAAgB,MAAM6qB,CAAK,CAAC,CACvC,EACI21C,GAAW,SAAUC,EAAUn3F,EAAK,CACtC,IAAIjM,EAAOiM,EAAI,QAAQm3F,CAAQ,EAC/B,OAAO7hF,GAAS,UAAUvhB,CAAI,GAAKA,EAAK,WAAa,QAAUzQ,EAAO,KAAKyQ,CAAI,EAAIzQ,EAAO,KAAK,CACjG,EACI8zG,GAAc,SAAUvC,EAAMvpG,EAAQi2D,EAAOvhD,EAAK,CACpD,IAAIkoE,EAAkBn4B,GAAS,mBAAmBzkD,CAAM,EACpD48E,EACF58E,EAAO,YAAY,SAAS,UAAY,CACtC,IAAIb,EAAU+a,GAAQ,QAAQ0iE,CAAe,EAC7C1gE,GAAO/c,EAASslD,GAAS,wBAAwBzkD,CAAM,CAAC,EACxD49B,GAAOz+B,EAAS+a,GAAQ,QAAQ,IAAI,CAAC,EACjCqvF,EACF5rE,GAAMzjB,GAAQ,QAAQ+7C,CAAK,EAAG92D,CAAO,EAErCs+B,GAAOvjB,GAAQ,QAAQ+7C,CAAK,EAAG92D,CAAO,EAExC,IAAIohC,EAAMvgC,EAAO,IAAI,UAAU,EAC/BugC,EAAI,SAASphC,EAAQ,IAAI,EAAG,CAAC,EAC7BohC,EAAI,OAAOphC,EAAQ,IAAI,EAAG,CAAC,EAC3B8/D,GAAYj/D,EAAQugC,CAAG,CACzB,CAAC,EAED0+B,GAAYj/D,EAAQ0U,EAAI,QAAQ,CAAC,CAErC,EACI86C,GAAY,SAAUxvD,EAAQupG,EAAM70F,EAAK,CAC3C,IAAIuhD,EAAe21C,GAAP,EAAArC,EAAsB70F,CAAG,EACjCzZ,EAAOsuG,IAAS,GACpBtzC,EAAM,KAAK,UAAY,CACrB,OAAOgJ,GAAYj/D,EAAQ0U,EAAI,QAAQ,CAAC,CAC1C,EAAG,SAAUuhD,EAAO,CAClB,OAAO7gB,GAAY,WAAWn6C,EAAM+E,EAAO,QAAQ,CAAC,EAAE,OAAO,SAAU6lD,EAAS,CAC9E,OAAOA,EAAQ,QAAQnxC,CAAG,CAC5B,CAAC,EAAE,KAAK,UAAY,CAClB,OAAOuqD,GAAYj/D,EAAQ0U,EAAI,QAAQ,CAAC,CAC1C,EAAG,SAAUlO,EAAG,CACd,OAAOslG,GAAYvC,EAAMvpG,EAAQi2D,EAAOvhD,CAAG,CAC7C,CAAC,CACH,CAAC,CACH,EACIq3F,GAAqB,SAAU/rG,EAAQupG,EAAMtzC,EAAO+pC,EAAI,CAC1D,IAAIz/D,EAAMvgC,EAAO,UAAU,OAAO,EAC9B0U,EAAM02B,GAAgB,eAAe7K,CAAG,EACxC5vB,EAAO3Q,EAAO,QAAQ,EAC1B,GAAI,CAACupG,GAAQ+B,GAAuBtL,EAAItrF,CAAG,EAAG,CAC5C,IAAI4pC,EAASotD,GAAwB/6F,EAAMslD,EAAOvhD,CAAG,EACrD,OAAA86C,GAAUxvD,EAAQupG,EAAMjrD,CAAM,EACvB,EACT,SAAWirD,GAAQgC,GAAsBvL,EAAItrF,CAAG,EAAG,CACjD,IAAI4pC,EAASqtD,GAAwBh7F,EAAMslD,EAAOvhD,CAAG,EACrD,OAAA86C,GAAUxvD,EAAQupG,EAAMjrD,CAAM,EACvB,EACT,KACE,OAAO,EAEX,EACI0tD,GAAU,SAAUhsG,EAAQsK,EAAS,CACvC,OAAO,UAAY,CACjB,OAAOtS,EAAO,KAAKgI,EAAO,IAAI,UAAUA,EAAO,UAAU,QAAQ,EAAG,OAAO,CAAC,EAAE,KAAK,SAAUggG,EAAI,CAC/F,OAAOhoG,EAAO,KAAKgI,EAAO,IAAI,UAAUggG,EAAI,OAAO,CAAC,EAAE,IAAI,SAAU/pC,EAAO,CACzE,OAAOw1C,GAAqBzrG,EAAQsK,EAAS2rD,CAAK,CACpD,CAAC,CACH,CAAC,EAAE,MAAM,EAAK,CAChB,CACF,EACIg2C,GAAU,SAAUjsG,EAAQsK,EAAS,CACvC,OAAO,UAAY,CACjB,OAAOtS,EAAO,KAAKgI,EAAO,IAAI,UAAUA,EAAO,UAAU,QAAQ,EAAG,OAAO,CAAC,EAAE,KAAK,SAAUggG,EAAI,CAC/F,OAAOhoG,EAAO,KAAKgI,EAAO,IAAI,UAAUggG,EAAI,OAAO,CAAC,EAAE,IAAI,SAAU/pC,EAAO,CACzE,OAAO81C,GAAmB/rG,EAAQsK,EAAS2rD,EAAO+pC,CAAE,CACtD,CAAC,CACH,CAAC,EAAE,MAAM,EAAK,CAChB,CACF,EAEIkM,GAAW,SAAUzjG,EAAM,CAC7B,OAAOtP,GAAS,CAAC,YAAY,EAAGuC,GAAK+M,CAAI,CAAC,CAC5C,EACI0jG,GAAc,SAAU1rG,EAAQ,CAClC,IAAI8/B,EAAMhrC,EAAW,SAAS,YAAY,EAC1C,OAAAgrC,EAAI,eAAe9/B,EAAO,IAAI,CAAC,EAC/B8/B,EAAI,aAAa9/B,EAAO,IAAI,CAAC,EACtB8/B,CACT,EACI6rE,GAAgB,SAAUz7F,EAAMoD,EAAKzJ,EAAS,CAC5CA,EACFszB,GAAOjtB,EAAMoD,CAAG,EAEhB8pB,GAAQltB,EAAMoD,CAAG,CAErB,EACIs4F,GAAW,SAAU17F,EAAMrG,EAAS,CACtC,IAAIw6B,EAAK5qB,GAAQ,QAAQ,IAAI,EAC7B,OAAAkyF,GAAcz7F,EAAMm0B,EAAIx6B,CAAO,EACxB6hG,GAAYrnE,CAAE,CACvB,EACIwnE,GAAgB,SAAU37F,EAAMrG,EAAS06B,EAAW7oB,EAAO,CAC7D,IAAIonC,EAAQrpC,GAAQ,QAAQ8qB,CAAS,EACjCF,EAAK5qB,GAAQ,QAAQ,IAAI,EAC7B,OAAAgC,GAAOqnC,EAAOpnC,CAAK,EACnByhB,GAAO2lB,EAAOze,CAAE,EAChBsnE,GAAcz7F,EAAM4yC,EAAOj5C,CAAO,EAC3B6hG,GAAYrnE,CAAE,CACvB,EACIynE,GAAkB,SAAU57F,EAAM8pF,EAAet+E,EAAO7R,EAAS,CACnE,OAAImwF,IAAkB,GACb4R,GAAS17F,EAAMrG,CAAO,EAEtBgiG,GAAc37F,EAAMrG,EAASmwF,EAAet+E,CAAK,CAE5D,EACIqwF,GAAwB,SAAU93F,EAAK/D,EAAM,CAC/C,IAAIgO,EAASzoB,EAAMa,GAAI4Z,CAAI,EAC3B,OAAOkvB,GAAQ3lB,GAAQ,QAAQxF,EAAI,UAAU,CAAC,EAAGmT,EAASlJ,CAAM,EAAE,OAAOutF,EAAQ,CACnF,EACIO,GAAsB,SAAU97F,EAAMrG,EAASoK,EAAK,CACtD,OAAOpK,EAAUu9F,GAAal3F,EAAK,IAAI,EAAG+D,CAAG,EAAIkzF,GAAcj3F,EAAK,IAAI,EAAG+D,CAAG,CAChF,EACIg4F,GAA0B,SAAU1sG,EAAQsK,EAAS,CACvD,IAAIqG,EAAOuJ,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EACvC0U,EAAM02B,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,EAC9D2sG,EAAYloD,GAAS,mBAAmBzkD,CAAM,EAC9C4sG,EAAiBnoD,GAAS,wBAAwBzkD,CAAM,EAC5D,OAAOwsG,GAAsB93F,EAAK/D,CAAI,EAAE,OAAO,UAAY,CACzD,GAAI87F,GAAoB97F,EAAMrG,EAASoK,CAAG,EAAG,CAC3C,IAAI6rB,EAAMgsE,GAAgB57F,EAAMg8F,EAAWC,EAAgBtiG,CAAO,EAClE,OAAAtK,EAAO,UAAU,OAAOugC,CAAG,EACpB,EACT,KACE,OAAO,EAEX,CAAC,CACH,EACIssE,GAAU,SAAU7sG,EAAQsK,EAAS,CACvC,OAAO,UAAY,CACjB,OAAItK,EAAO,UAAU,YAAY,EACxB0sG,GAAwB1sG,EAAQsK,CAAO,EAEvC,EAEX,CACF,EAEIwiG,GAAkB,SAAUC,EAAU,CACxC,OAAOvzG,GAAIuzG,EAAU,SAAUhjG,EAAS,CACtC,OAAOq3C,GAAM,CACX,SAAU,GACV,OAAQ,GACR,QAAS,GACT,QAAS,GACT,QAAS,EACT,OAAQ5rD,CACV,EAAGuU,CAAO,CACZ,CAAC,CACH,EACIijG,GAAe,SAAUjjG,EAAS3H,EAAK,CACzC,OAAOA,EAAI,UAAY2H,EAAQ,SAAW3H,EAAI,WAAa2H,EAAQ,UAAY3H,EAAI,SAAW2H,EAAQ,QAAU3H,EAAI,UAAY2H,EAAQ,SAAW3H,EAAI,UAAY2H,EAAQ,OAC7K,EACIkjG,GAAU,SAAUF,EAAU3qG,EAAK,CACrC,OAAOzK,GAAKm1G,GAAgBC,CAAQ,EAAG,SAAUhjG,EAAS,CACxD,OAAOijG,GAAajjG,EAAS3H,CAAG,EAAI,CAAC2H,CAAO,EAAI,CAAC,CACnD,CAAC,CACH,EACIouD,GAAS,SAAU3hE,EAAG,CAExB,QADIP,EAAI,CAAC,EACAJ,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCI,EAAEJ,EAAK,CAAC,EAAI,UAAUA,CAAE,EAE1B,IAAID,EAAO,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,EAClD,OAAO,UAAY,CACjB,OAAOY,EAAE,MAAM,KAAMZ,CAAI,CAC3B,CACF,EACIs3G,GAAU,SAAUH,EAAU3qG,EAAK,CACrC,OAAOjI,GAAK8yG,GAAQF,EAAU3qG,CAAG,EAAG,SAAU2H,EAAS,CACrD,OAAOA,EAAQ,OAAO,CACxB,CAAC,CACH,EACIojG,GAAY,CACd,MAAOF,GACP,OAAQ90C,GACR,QAAS+0C,EACX,EAEIE,GAAyB,SAAUptG,EAAQswC,EAAOluC,EAAK,CACzD,IAAIwV,EAAK+B,GAAoB,OAAO,EAAE,GACtCwzF,GAAU,QAAQ,CAChB,CACE,QAASrvB,GAAG,MACZ,OAAQ0rB,GAAMxpG,EAAQ,EAAI,CAC5B,EACA,CACE,QAAS89E,GAAG,KACZ,OAAQ0rB,GAAMxpG,EAAQ,EAAK,CAC7B,EACA,CACE,QAAS89E,GAAG,GACZ,OAAQ2rB,GAAMzpG,EAAQ,EAAK,CAC7B,EACA,CACE,QAAS89E,GAAG,KACZ,OAAQ2rB,GAAMzpG,EAAQ,EAAI,CAC5B,EACA,CACE,QAAS89E,GAAG,MACZ,OAAQkuB,GAAQhsG,EAAQ,EAAI,CAC9B,EACA,CACE,QAAS89E,GAAG,KACZ,OAAQkuB,GAAQhsG,EAAQ,EAAK,CAC/B,EACA,CACE,QAAS89E,GAAG,GACZ,OAAQmuB,GAAQjsG,EAAQ,EAAK,CAC/B,EACA,CACE,QAAS89E,GAAG,KACZ,OAAQmuB,GAAQjsG,EAAQ,EAAI,CAC9B,EACA,CACE,QAAS89E,GAAG,MACZ,OAAQppB,GAAkB,KAAK10D,EAAQswC,EAAO,EAAI,CACpD,EACA,CACE,QAASwtC,GAAG,KACZ,OAAQppB,GAAkB,KAAK10D,EAAQswC,EAAO,EAAK,CACrD,EACA,CACE,QAASwtC,GAAG,MACZ,QAAS,CAAClmE,EAAG,MAAM,EACnB,OAAQA,EAAG,MAAM,EACjB,OAAQ88C,GAAkB,aAAa10D,EAAQswC,CAAK,CACtD,EACA,CACE,QAASwtC,GAAG,KACZ,QAAS,CAAClmE,EAAG,MAAM,EACnB,OAAQA,EAAG,MAAM,EACjB,OAAQ88C,GAAkB,aAAa10D,EAAQswC,CAAK,CACtD,EACA,CACE,QAASwtC,GAAG,GACZ,OAAQ+uB,GAAQ7sG,EAAQ,EAAK,CAC/B,EACA,CACE,QAAS89E,GAAG,KACZ,OAAQ+uB,GAAQ7sG,EAAQ,EAAI,CAC9B,CACF,EAAGoC,CAAG,EAAE,KAAK,SAAUoE,EAAG,CACxBpE,EAAI,eAAe,CACrB,CAAC,CACH,EACIirG,GAAU,SAAUrtG,EAAQswC,EAAO,CACrCtwC,EAAO,GAAG,UAAW,SAAUoC,EAAK,CAC9BA,EAAI,mBAAmB,IAAM,IAC/BgrG,GAAuBptG,EAAQswC,EAAOluC,CAAG,CAE7C,CAAC,CACH,EACIkrG,GAAY,CAAE,MAAOD,EAAQ,EAE7BE,GAA2B,SAAUvtG,EAAQswC,EAAOluC,EAAK,CAC3D+qG,GAAU,QAAQ,CAChB,CACE,QAASrvB,GAAG,UACZ,OAAQqvB,GAAU,OAAO38C,GAAU,gBAAiBxwD,EAAQ,EAAK,CACnE,EACA,CACE,QAAS89E,GAAG,OACZ,OAAQqvB,GAAU,OAAO38C,GAAU,gBAAiBxwD,EAAQ,EAAI,CAClE,EACA,CACE,QAAS89E,GAAG,UACZ,OAAQqvB,GAAU,OAAOvtC,GAAkB,gBAAiB5/D,EAAQ,EAAK,CAC3E,EACA,CACE,QAAS89E,GAAG,OACZ,OAAQqvB,GAAU,OAAOvtC,GAAkB,gBAAiB5/D,EAAQ,EAAI,CAC1E,EACA,CACE,QAAS89E,GAAG,UACZ,OAAQqvB,GAAU,OAAO/3C,GAAqB,gBAAiBp1D,EAAQswC,EAAO,EAAK,CACrF,EACA,CACE,QAASwtC,GAAG,OACZ,OAAQqvB,GAAU,OAAO/3C,GAAqB,gBAAiBp1D,EAAQswC,EAAO,EAAI,CACpF,EACA,CACE,QAASwtC,GAAG,UACZ,OAAQqvB,GAAU,OAAO3zC,GAAY,gBAAiBx5D,EAAQ,EAAK,CACrE,EACA,CACE,QAAS89E,GAAG,OACZ,OAAQqvB,GAAU,OAAO3zC,GAAY,gBAAiBx5D,EAAQ,EAAI,CACpE,EACA,CACE,QAAS89E,GAAG,UACZ,OAAQqvB,GAAU,OAAOhjD,GAAiB,gBAAiBnqD,EAAQ,EAAK,CAC1E,EACA,CACE,QAAS89E,GAAG,OACZ,OAAQqvB,GAAU,OAAOhjD,GAAiB,gBAAiBnqD,EAAQ,EAAI,CACzE,EACA,CACE,QAAS89E,GAAG,UACZ,OAAQqvB,GAAU,OAAO1jD,GAAoB,gBAAiBzpD,EAAQ,EAAK,CAC7E,EACA,CACE,QAAS89E,GAAG,OACZ,OAAQqvB,GAAU,OAAO1jD,GAAoB,gBAAiBzpD,EAAQ,EAAI,CAC5E,EACA,CACE,QAAS89E,GAAG,UACZ,OAAQqvB,GAAU,OAAOjwC,GAAmB,gBAAiBl9D,EAAQ,EAAK,CAC5E,EACA,CACE,QAAS89E,GAAG,OACZ,OAAQqvB,GAAU,OAAOjwC,GAAmB,gBAAiBl9D,EAAQ,EAAI,CAC3E,CACF,EAAGoC,CAAG,EAAE,KAAK,SAAUoE,EAAG,CACxBpE,EAAI,eAAe,CACrB,CAAC,CACH,EACIorG,GAAuB,SAAUxtG,EAAQoC,EAAK,CAChD+qG,GAAU,QAAQ,CAChB,CACE,QAASrvB,GAAG,UACZ,OAAQqvB,GAAU,OAAO38C,GAAU,iBAAkBxwD,CAAM,CAC7D,EACA,CACE,QAAS89E,GAAG,OACZ,OAAQqvB,GAAU,OAAO38C,GAAU,iBAAkBxwD,CAAM,CAC7D,CACF,EAAGoC,CAAG,CACR,EACIqrG,GAAU,SAAUztG,EAAQswC,EAAO,CACrCtwC,EAAO,GAAG,UAAW,SAAUoC,EAAK,CAC9BA,EAAI,mBAAmB,IAAM,IAC/BmrG,GAAyBvtG,EAAQswC,EAAOluC,CAAG,CAE/C,CAAC,EACDpC,EAAO,GAAG,QAAS,SAAUoC,EAAK,CAC5BA,EAAI,mBAAmB,IAAM,IAC/BorG,GAAqBxtG,EAAQoC,CAAG,CAEpC,CAAC,CACH,EACIsrG,GAAsB,CAAE,MAAOD,EAAQ,EAEvCE,GAAgC,SAAUllG,EAAM,CAClD,KAAOA,GAAM,CACX,GAAIA,EAAK,WAAa,GAAKA,EAAK,WAAa,GAAKA,EAAK,MAAQ,WAAW,KAAKA,EAAK,IAAI,EACtF,OAAOA,EAETA,EAAOA,EAAK,WACd,CACF,EACImlG,GAAsB,SAAU5tG,EAAQ2Q,EAAM,CAChD,IAAIopB,EAAQtxB,EAAM83B,EAAKstE,EAAWl9F,EAAMm9F,EACpChyF,EAAM9b,EAAO,IACbuuB,EAAoCvuB,EAAO,OAAO,kCAAkC,EACxF,GAAK2Q,EAGL,IAAI,eAAe,KAAKA,EAAK,QAAQ,EAAG,CACtC,IAAIyO,EAAauuF,GAA8Bh9F,EAAK,UAAU,EAC1DyO,GAAc,eAAe,KAAKA,EAAW,QAAQ,GACvDzO,EAAK,aAAamL,EAAI,IAAI,eAAe,MAAM,EAAGnL,EAAK,UAAU,CAErE,CAGA,GAFA4vB,EAAMzkB,EAAI,UAAU,EACpBnL,EAAK,UAAU,EACXA,EAAK,cAAc,EAAG,CAExB,IADAopB,EAAS,IAAIrT,GAAW/V,EAAMA,CAAI,EAC3BlI,EAAOsxB,EAAO,QAAQ,GAAG,CAC9B,GAAI/P,GAAS,OAAOvhB,CAAI,EAAG,CACzB83B,EAAI,SAAS93B,EAAM,CAAC,EACpB83B,EAAI,OAAO93B,EAAM,CAAC,EAClB,KACF,CACA,GAAI8lB,EAAkC9lB,EAAK,SAAS,YAAY,CAAC,EAAG,CAClE83B,EAAI,eAAe93B,CAAI,EACvB83B,EAAI,aAAa93B,CAAI,EACrB,KACF,CACAolG,EAAWplG,EACXA,EAAOsxB,EAAO,KAAK,CACrB,CACKtxB,IACH83B,EAAI,SAASstE,EAAU,CAAC,EACxBttE,EAAI,OAAOstE,EAAU,CAAC,EAE1B,MACM7jF,GAAS,KAAKrZ,CAAI,EAChBA,EAAK,aAAemL,EAAI,QAAQnL,EAAK,WAAW,GAClD4vB,EAAI,eAAe5vB,CAAI,EACvB4vB,EAAI,aAAa5vB,CAAI,IAErB4vB,EAAI,cAAc5vB,CAAI,EACtB4vB,EAAI,YAAY5vB,CAAI,IAGtB4vB,EAAI,SAAS5vB,EAAM,CAAC,EACpB4vB,EAAI,OAAO5vB,EAAM,CAAC,GAGtB3Q,EAAO,UAAU,OAAOugC,CAAG,EAC3BzkB,EAAI,OAAOgyF,CAAO,EAClB9tG,EAAO,UAAU,eAAe2Q,CAAI,EACtC,EACIo9F,GAAkB,SAAUjyF,EAAKrT,EAAM,CACzC,IAAIkI,EAAOmL,EAAI,QAAQ,EACnBnT,EAAQqlG,EAEZ,IADArlG,EAASF,EACFE,IAAWgI,GAAQmL,EAAI,mBAAmBnT,CAAM,IAAM,SACvDmT,EAAI,mBAAmBnT,CAAM,IAAM,SACrCqlG,EAAerlG,GAEjBA,EAASA,EAAO,WAElB,OAAOA,IAAWgI,EAAOq9F,EAAer9F,CAC1C,EACIs9F,GAAmB,SAAUjuG,EAAQ,CACvC,OAAOhI,EAAO,KAAKgI,EAAO,IAAI,UAAUA,EAAO,UAAU,SAAS,EAAI,EAAGA,EAAO,IAAI,OAAO,CAAC,CAC9F,EACIkuG,GAAqB,SAAUluG,EAAQ,CACzC,OAAOiuG,GAAiBjuG,CAAM,EAAE,KAAKlK,EAAS,EAAE,EAAG,SAAUqnD,EAAa,CACxE,OAAOA,EAAY,SAAS,YAAY,CAC1C,CAAC,CACH,EACIgxD,GAAwB,SAAUnuG,EAAQ,CAC5C,OAAOiuG,GAAiBjuG,CAAM,EAAE,OAAO,SAAU+T,EAAK,CACpD,OAAOmU,GAAWhO,GAAQ,QAAQnG,CAAG,CAAC,CACxC,CAAC,EAAE,OAAO,CACZ,EACIq6F,GAAe,CACjB,oBAAqBR,GACrB,gBAAiBG,GACjB,eAAgBE,GAChB,mBAAoBC,GACpB,sBAAuBC,EACzB,EAEIE,GAAgB,SAAUt6F,EAAKrY,EAAM,CACvC,OAAOqY,EAAI,YAAcA,EAAI,WAAW,WAAarY,CACvD,EACI4yG,GAAc,SAAUv6F,EAAKs+E,EAAY,CAC3C,OAAOt+E,GAAOA,EAAI,YAAcA,EAAI,WAAW,WAAas+E,CAC9D,EACIkc,GAAc,SAAUx6F,EAAK,CAC/B,OAAOA,GAAO,eAAe,KAAKA,EAAI,QAAQ,CAChD,EACIy6F,GAAe,SAAUz6F,EAAK,CAChC,OAAOw6F,GAAYx6F,CAAG,GAAKw6F,GAAYx6F,EAAI,UAAU,CACvD,EACI06F,GAAoB,SAAUnrC,EAAgB,CAChD,IAAIorC,EAAuBprC,EAAe,WAC1C,MAAI,eAAe,KAAKorC,EAAqB,QAAQ,EAC5CA,EAEFprC,CACT,EACIqrC,GAAkB,SAAUrrC,EAAgBnmB,EAAa/yC,EAAO,CAElE,QADI3B,EAAO66D,EAAel5D,EAAQ,aAAe,WAAW,EACrD3B,GACD,CAAAuhB,GAAS,UAAUvhB,CAAI,GAG3BA,EAAOA,EAAK2B,EAAQ,cAAgB,iBAAiB,EAEvD,OAAO3B,IAAS00C,CAClB,EACIyxD,GAAW,SAAU5uG,EAAQ6uG,EAAgBvrC,EAAgBnmB,EAAa2xD,EAAc,CAC1F,IAAIhzF,EAAM9b,EAAO,IACbugC,EAAMvgC,EAAO,UAAU,OAAO,EAClC,GAAIsjE,IAAmBtjE,EAAO,QAAQ,EAGtC,CAAIwuG,GAAalrC,CAAc,IAC7BwrC,EAAe,MAEjB,IAAI3F,EAAW2F,EAAeD,EAAeC,CAAY,EAAIhzF,EAAI,OAAO,IAAI,EAC5E,GAAI6yF,GAAgBrrC,EAAgBnmB,EAAa,EAAI,GAAKwxD,GAAgBrrC,EAAgBnmB,EAAa,EAAK,EACtGmxD,GAAYhrC,EAAgB,IAAI,EAClCxnD,EAAI,YAAYqtF,EAAUsF,GAAkBnrC,CAAc,CAAC,EAE3DxnD,EAAI,QAAQqtF,EAAU7lC,CAAc,UAE7BqrC,GAAgBrrC,EAAgBnmB,EAAa,EAAI,EACtDmxD,GAAYhrC,EAAgB,IAAI,GAClCxnD,EAAI,YAAYqtF,EAAUsF,GAAkBnrC,CAAc,CAAC,EAC3D6lC,EAAS,YAAYrtF,EAAI,IAAI,eAAe,GAAG,CAAC,EAChDqtF,EAAS,YAAY7lC,CAAc,GAEnCA,EAAe,WAAW,aAAa6lC,EAAU7lC,CAAc,UAExDqrC,GAAgBrrC,EAAgBnmB,EAAa,EAAK,EAC3DrhC,EAAI,YAAYqtF,EAAUsF,GAAkBnrC,CAAc,CAAC,MACtD,CACLA,EAAiBmrC,GAAkBnrC,CAAc,EACjD,IAAIyrC,EAASxuE,EAAI,WAAW,EAC5BwuE,EAAO,cAAc5xD,CAAW,EAChC4xD,EAAO,YAAYzrC,CAAc,EACjC,IAAI5/B,EAAWqrE,EAAO,gBAAgB,EAClCD,IAAiB,MAAQT,GAAc3qE,EAAU,IAAI,GACvDylE,EAAWzlE,EAAS,WACpB5nB,EAAI,YAAY4nB,EAAU4/B,CAAc,IAExCxnD,EAAI,YAAY4nB,EAAU4/B,CAAc,EACxCxnD,EAAI,YAAYqtF,EAAU7lC,CAAc,EAE5C,CACAxnD,EAAI,OAAOqhC,CAAW,EACtBixD,GAAa,oBAAoBpuG,EAAQmpG,CAAQ,EACnD,EACI6F,GAAW,CAAE,OAAQJ,EAAS,EAE9BK,GAAW,SAAUvrE,EAAU,CACjCjqC,GAAKgmC,GAAYvlB,GAAQ,QAAQwpB,CAAQ,EAAGxoB,CAAM,EAAG,SAAU9P,EAAM,CACnE,IAAI2zC,EAAU3zC,EAAK,IAAI,EACvB2zC,EAAQ,UAAYhb,GAAK,KAAKgb,EAAQ,SAAS,CACjD,CAAC,CACH,EACImwD,GAAgB,SAAUpzF,EAAK/H,EAAK,CACtC,OAAOA,GAAOA,EAAI,WAAa,KAAO+H,EAAI,QAAQ/H,CAAG,CACvD,EACIo7F,GAAgB,SAAU1mG,EAAM,CAClC,OAAOA,GAAQ,oBAAoB,KAAKA,EAAK,QAAQ,CACvD,EACI2mG,GAAa,SAAUr7F,EAAK,CAC9BA,EAAI,UAAY,yBAClB,EACIs7F,GAA0B,SAAU9sG,EAAWuH,EAAU,CAC3D,OAAOvH,EAAU,WAAauH,GAAYvH,EAAU,iBAAmBA,EAAU,gBAAgB,WAAauH,CAChH,EACIwlG,GAAgB,SAAUxzF,EAAKrT,EAAM,CACvC,OAAOA,GAAQqT,EAAI,QAAQrT,CAAI,GAAK,CAAC,yBAAyB,KAAKA,EAAK,QAAQ,GAAK,CAAC,qBAAqB,KAAKA,EAAK,MAAM,QAAQ,GAAKqT,EAAI,mBAAmBrT,CAAI,IAAM,MAC3K,EACI8mG,GAAsC,SAAUzzF,EAAKwS,EAAqBi1B,EAAO,CACnF,IAAI96C,EAAO86C,EACPisD,EAAc,CAAC,EACfl2G,EACJ,GAAKmP,EAGL,MAAOA,EAAOA,EAAK,YAAY,CAC7B,GAAIqT,EAAI,QAAQrT,CAAI,EAClB,OAEEuhB,GAAS,UAAUvhB,CAAI,GAAK,CAAC6lB,EAAoB7lB,EAAK,SAAS,YAAY,CAAC,GAC9E+mG,EAAY,KAAK/mG,CAAI,CAEzB,CAEA,IADAnP,EAAIk2G,EAAY,OACTl2G,KACLmP,EAAO+mG,EAAYl2G,CAAC,GAChB,CAACmP,EAAK,cAAc,GAAKA,EAAK,aAAeA,EAAK,WAAaA,EAAK,WAAW,YAAc,IAG3FymG,GAAcpzF,EAAKrT,CAAI,IACzBqT,EAAI,OAAOrT,CAAI,EAIvB,EACIgnG,GAAsB,SAAU9kG,EAAOpI,EAAWgS,EAAQ,CAC5D,OAAIyV,GAAS,OAAOznB,CAAS,IAAM,GAC1BgS,EACE5J,EACF4J,IAAW,GAAKhS,EAAU,KAAK,OAAOgS,EAAS,CAAC,IAAMwvB,GAAK,KAAO,EAAIxvB,EAEtEA,IAAWhS,EAAU,KAAK,OAAS,GAAKA,EAAU,KAAK,OAAOgS,CAAM,IAAMwvB,GAAK,KAAOxhC,EAAU,KAAK,OAASgS,CAEzH,EACIm7F,GAAqB,SAAUnvE,EAAK,CACtC,IAAI0J,EAAS1J,EAAI,WAAW,EAC5B,OAAA0J,EAAO,SAAS1J,EAAI,eAAgBkvE,GAAoB,GAAMlvE,EAAI,eAAgBA,EAAI,WAAW,CAAC,EAClG0J,EAAO,OAAO1J,EAAI,aAAckvE,GAAoB,GAAOlvE,EAAI,aAAcA,EAAI,SAAS,CAAC,EACpF0J,CACT,EACI0lE,GAAwB,SAAUlnG,EAAM,CAC1C,GACMuhB,GAAS,OAAOvhB,CAAI,IACtBA,EAAK,UAAYA,EAAK,UAAU,QAAQ,WAAY,EAAE,GAExDA,EAAOA,EAAK,iBACLA,EACX,EACImnG,GAAoB,SAAU9zF,EAAKrT,EAAM,CAC3C,IAAIkI,EAAOmL,EAAI,QAAQ,EACnBnT,EAAQqlG,EAEZ,IADArlG,EAASF,EACFE,IAAWgI,GAAQmL,EAAI,mBAAmBnT,CAAM,IAAM,SACvDmT,EAAI,mBAAmBnT,CAAM,IAAM,SACrCqlG,EAAerlG,GAEjBA,EAASA,EAAO,WAElB,OAAOA,IAAWgI,EAAOq9F,EAAer9F,CAC1C,EACIk/F,GAAkB,SAAU7vG,EAAQyI,EAAMqnG,EAAsB,CAClE93G,EAAO,KAAK83G,EAAqB,KAAK,EAAE,IAAI9vG,EAAO,IAAI,UAAU,EAAE,KAAK,SAAU+vG,EAAY,CAC5F,IAAIC,EAAgBhzF,GAAU9C,GAAQ,QAAQzR,CAAI,CAAC,EAC/CwnG,EAAYztE,GAASA,GAAS,CAAC,EAAGwtE,CAAa,EAAGD,CAAU,EAChE/vG,EAAO,IAAI,UAAUyI,EAAMwnG,CAAS,CACtC,CAAC,EACD,IAAIC,EAAiBl4G,EAAO,KAAK83G,EAAqB,KAAK,EAAE,IAAI,SAAUK,EAAa,CACtF,OAAOA,EAAY,MAAM,KAAK,CAChC,CAAC,EACGC,EAAoBp4G,EAAO,KAAKyQ,EAAK,SAAS,EAAE,IAAI,SAAU4nG,EAAgB,CAChF,OAAOt2G,GAAOs2G,EAAe,MAAM,KAAK,EAAG,SAAUnxE,EAAO,CAC1D,OAAOA,IAAU,EACnB,CAAC,CACH,CAAC,EACDiJ,GAAM+nE,EAAgBE,EAAmB,SAAUD,EAAaE,EAAgB,CAC9E,IAAIC,EAAkBv2G,GAAOs2G,EAAgB,SAAUnxE,EAAO,CAC5D,MAAO,CAAC/lC,GAASg3G,EAAajxE,CAAK,CACrC,CAAC,EACGqxE,EAAa7tE,GAAeytE,EAAaG,CAAe,EAC5DtwG,EAAO,IAAI,UAAUyI,EAAM,QAAS8nG,EAAW,KAAK,GAAG,CAAC,CAC1D,CAAC,EACD,IAAIC,EAAe,CACjB,QACA,OACF,EACIC,EAAiB/0F,GAASo0F,EAAsB,SAAUtpG,EAAG2V,EAAO,CACtE,MAAO,CAAChjB,GAASq3G,EAAcr0F,CAAK,CACtC,CAAC,EAAE,EACHnc,EAAO,IAAI,WAAWyI,EAAMgoG,CAAc,CAC5C,EACIC,GAAsB,SAAU1wG,EAAQyI,EAAM,CAChD,IAAIkoG,EAAsBlsD,GAAS,mBAAmBzkD,CAAM,EAC5D,GAAI2wG,GAAuBA,EAAoB,YAAY,IAAMloG,EAAK,QAAQ,YAAY,EAAG,CAC3F,IAAIqnG,EAAuBrrD,GAAS,wBAAwBzkD,CAAM,EAClE6vG,GAAgB7vG,EAAQyI,EAAMqnG,CAAoB,CACpD,CACF,EACIc,GAAoC,SAAU5wG,EAAQ8uG,EAAcvuE,EAAKh+B,EAAWgS,EAAQ,CAC9F,IAAI40F,EAAUhsD,EAAax2B,EAAWle,EAAMytC,EAAMukD,EAC9Cz1D,EAAY8pE,GAAgB,IAC5BhzF,EAAM9b,EAAO,IAAKguG,EAAe4B,GAAkB9zF,EAAKvZ,CAAS,EAErE,GADA46C,EAAcrhC,EAAI,UAAUvZ,EAAWuZ,EAAI,OAAO,EAC9C,CAACqhC,GAAe,CAACmyD,GAAcxzF,EAAKqhC,CAAW,EAAG,CAOpD,GANAA,EAAcA,GAAe6wD,EACzB7wD,IAAgBn9C,EAAO,QAAQ,GAAKmvG,GAAchyD,CAAW,EAC/Ds9C,EAAgBt9C,EAAY,SAAS,YAAY,EAEjDs9C,EAAgBt9C,EAAY,WAAW,SAAS,YAAY,EAE1D,CAACA,EAAY,cAAc,EAC7B,OAAAgsD,EAAWrtF,EAAI,OAAOkpB,CAAS,EAC/B0rE,GAAoB1wG,EAAQmpG,CAAQ,EACpChsD,EAAY,YAAYgsD,CAAQ,EAChC5oE,EAAI,SAAS4oE,EAAU,CAAC,EACxB5oE,EAAI,OAAO4oE,EAAU,CAAC,EACfA,EAGT,IADA1gG,EAAOlG,EACAkG,EAAK,aAAe00C,GACzB10C,EAAOA,EAAK,WAEd,KAAOA,GAAQ,CAACqT,EAAI,QAAQrT,CAAI,GAC9Bke,EAAYle,EACZA,EAAOA,EAAK,gBAEd,GAAIke,GAAa3mB,EAAO,OAAO,aAAay6F,EAAez1D,EAAU,YAAY,CAAC,EAAG,CAKnF,IAJAmkE,EAAWrtF,EAAI,OAAOkpB,CAAS,EAC/B0rE,GAAoB1wG,EAAQmpG,CAAQ,EACpCxiF,EAAU,WAAW,aAAawiF,EAAUxiF,CAAS,EACrDle,EAAOke,EACAle,GAAQ,CAACqT,EAAI,QAAQrT,CAAI,GAC9BytC,EAAOztC,EAAK,YACZ0gG,EAAS,YAAY1gG,CAAI,EACzBA,EAAOytC,EAET3V,EAAI,SAASh+B,EAAWgS,CAAM,EAC9BgsB,EAAI,OAAOh+B,EAAWgS,CAAM,CAC9B,CACF,CACA,OAAOhS,CACT,EACIsuG,GAAuB,SAAU/0F,EAAKynC,EAAO,CAC/C,IAAIlkC,EACJkkC,EAAM,UAAU,EAChBlkC,EAAYkkC,EAAM,WACd,CAAClkC,GAAa,mBAAmB,KAAKvD,EAAI,SAASuD,EAAW,QAAS,EAAI,CAAC,IAC9EvD,EAAI,IAAIynC,EAAO,IAAI,CAEvB,EACIutD,GAAW,SAAU9wG,EAAQoC,EAAK,CACpC,IAAI2sG,EAAQf,EAAczrG,EAAWgS,EAAQ4oC,EAAa4zD,EACtD5H,EAAUzlE,EAAU4/B,EAAgB0tC,EAAiBztC,EAAoBurC,EAAczrC,EACvFvnD,GAAM9b,EAAO,IACb4sB,GAAS5sB,EAAO,OAAQsuB,GAAsB1B,GAAO,oBAAoB,EACzE2T,GAAMvgC,EAAO,UAAU,OAAO,EAC9B6uG,GAAiB,SAAUnzG,GAAM,CACnC,IAAI+M,GAAOlG,EAAWghD,GAAO0tD,GAAY5/C,GACrChQ,GAAqBz0B,GAAO,sBAAsB,EAOtD,GANIlxB,IAAQs1G,IAAoB,SAAWA,IAAoB,KAC7DztD,GAAQznC,GAAI,OAAOpgB,IAAQozG,CAAY,EAEvCvrD,GAAQpG,EAAY,UAAU,EAAK,EAErCkU,GAAY9N,GACRkB,GAAS,iBAAiBzkD,CAAM,IAAM,GACxC8b,GAAI,UAAUynC,GAAO,QAAS,IAAI,EAClCznC,GAAI,UAAUynC,GAAO,QAAS,IAAI,MAElC,GACE,IAAIlC,GAAmB54C,GAAK,QAAQ,EAAG,CACrC,GAAI4lC,GAAY5lC,EAAI,GAAKyuC,GAAU,eAAezuC,EAAI,EACpD,SAEFwoG,GAAaxoG,GAAK,UAAU,EAAK,EACjCqT,GAAI,UAAUm1F,GAAY,KAAM,EAAE,EAC9B1tD,GAAM,cAAc,GACtB0tD,GAAW,YAAY1tD,GAAM,UAAU,EACvCA,GAAM,YAAY0tD,EAAU,IAE5B5/C,GAAY4/C,GACZ1tD,GAAM,YAAY0tD,EAAU,EAEhC,QACQxoG,GAAOA,GAAK,aAAeA,KAASulG,GAEhD,OAAA0C,GAAoB1wG,EAAQujD,EAAK,EACjC6rD,GAAW/9C,EAAS,EACb9N,EACT,EACI2tD,GAA6B,SAAUvmG,GAAO,CAChD,IAAIovB,GAAQtxB,GAAM/M,GAAMy1G,GAExB,GADAA,GAAmB1B,GAAoB9kG,GAAOpI,EAAWgS,CAAM,EAC3DyV,GAAS,OAAOznB,CAAS,IAAMoI,GAAQwmG,GAAmB,EAAIA,GAAmB5uG,EAAU,UAAU,QACvG,MAAO,GAKT,GAHIA,EAAU,aAAe46C,GAAekmB,GAA8B,CAAC14D,IAGvEA,IAASqf,GAAS,UAAUznB,CAAS,GAAKA,IAAc46C,EAAY,WACtE,MAAO,GAET,GAAIkyD,GAAwB9sG,EAAW,OAAO,GAAK8sG,GAAwB9sG,EAAW,IAAI,EACxF,OAAO8gE,GAA8B,CAAC14D,IAAS,CAAC04D,GAA8B14D,GAUhF,IARAovB,GAAS,IAAIrT,GAAWnkB,EAAW46C,CAAW,EAC1CnzB,GAAS,OAAOznB,CAAS,IACvBoI,IAASwmG,KAAqB,EAChCp3E,GAAO,KAAK,EACH,CAACpvB,IAASwmG,KAAqB5uG,EAAU,UAAU,QAC5Dw3B,GAAO,KAAK,GAGTtxB,GAAOsxB,GAAO,QAAQ,GAAG,CAC9B,GAAI/P,GAAS,UAAUvhB,EAAI,GACzB,GAAI,CAACA,GAAK,aAAa,gBAAgB,IACrC/M,GAAO+M,GAAK,SAAS,YAAY,EAC7B6lB,GAAoB5yB,EAAI,GAAKA,KAAS,MACxC,MAAO,WAGFsuB,GAAS,OAAOvhB,EAAI,GAAK,CAAC,eAAe,KAAKA,GAAK,SAAS,EACrE,MAAO,GAELkC,GACFovB,GAAO,KAAK,EAEZA,GAAO,KAAK,CAEhB,CACA,MAAO,EACT,EACIq3E,GAAsB,UAAY,CAChC,wBAAwB,KAAKJ,CAAe,GAAKztC,IAAuB,SAC1E4lC,EAAW0F,GAAeC,CAAY,EAEtC3F,EAAW0F,GAAe,EAExBpqD,GAAS,+BAA+BzkD,CAAM,GAAKsvG,GAAcxzF,GAAKwnD,CAAc,GAAKxnD,GAAI,QAAQqhC,CAAW,EAClHgsD,EAAWrtF,GAAI,MAAMwnD,EAAgBnmB,CAAW,EAEhDrhC,GAAI,YAAYqtF,EAAUhsD,CAAW,EAEvCixD,GAAa,oBAAoBpuG,EAAQmpG,CAAQ,CACnD,EAmBA,GAlBArmC,GAAe,UAAUhnD,GAAKykB,EAAG,EAAE,KAAK,SAAUsiC,GAAS,CACzDtiC,GAAI,SAASsiC,GAAQ,eAAgBA,GAAQ,WAAW,EACxDtiC,GAAI,OAAOsiC,GAAQ,aAAcA,GAAQ,SAAS,CACpD,CAAC,EACDtgE,EAAYg+B,GAAI,eAChBhsB,EAASgsB,GAAI,YACbuuE,EAAerqD,GAAS,mBAAmBzkD,CAAM,EACjD+wG,EAAW3uG,EAAI,SACX4nB,GAAS,UAAUznB,CAAS,GAAKA,EAAU,cAAc,IAC3D8gE,EAA6B9uD,EAAShS,EAAU,WAAW,OAAS,EACpEA,EAAYA,EAAU,WAAW,KAAK,IAAIgS,EAAQhS,EAAU,WAAW,OAAS,CAAC,CAAC,GAAKA,EACnF8gE,GAA8Br5C,GAAS,OAAOznB,CAAS,EACzDgS,EAAShS,EAAU,UAAU,OAE7BgS,EAAS,GAGby5F,EAAe4B,GAAkB9zF,GAAKvZ,CAAS,EAC3C,EAACyrG,EAeL,KAZIc,GAAgB,CAACiC,GAAY,CAACjC,GAAgBiC,KAChDxuG,EAAYquG,GAAkC5wG,EAAQ8uG,EAAcvuE,GAAKh+B,EAAWgS,CAAM,GAE5F4oC,EAAcrhC,GAAI,UAAUvZ,EAAWuZ,GAAI,OAAO,EAClDwnD,EAAiBnmB,EAAcrhC,GAAI,UAAUqhC,EAAY,WAAYrhC,GAAI,OAAO,EAAI,KACpFk1F,EAAkB7zD,EAAcA,EAAY,SAAS,YAAY,EAAI,GACrEomB,EAAqBD,EAAiBA,EAAe,SAAS,YAAY,EAAI,GAC1EC,IAAuB,MAAQ,CAACnhE,EAAI,UACtC+6C,EAAcmmB,EACdA,EAAiBA,EAAe,WAChC0tC,EAAkBztC,GAEhB,eAAe,KAAKytC,CAAe,GACjCl1F,GAAI,QAAQqhC,CAAW,EAAG,CAC5B6xD,GAAS,OAAOhvG,EAAQ6uG,GAAgBvrC,EAAgBnmB,EAAa2xD,CAAY,EACjF,MACF,CAEEA,GAAgB3xD,IAAgBn9C,EAAO,QAAQ,IAGnD8uG,EAAeA,GAAgB,IAC3B5qE,GAAsBiZ,CAAW,GACnCgsD,EAAW9jE,GAAwB8X,CAAW,EAC1CrhC,GAAI,QAAQqhC,CAAW,GACzBiyD,GAAWjyD,CAAW,EAExBuzD,GAAoB1wG,EAAQmpG,CAAQ,EACpCiF,GAAa,oBAAoBpuG,EAAQmpG,CAAQ,GACxC+H,GAA2B,EACpCE,GAAoB,EACXF,GAA2B,EAAI,GACxC/H,EAAWhsD,EAAY,WAAW,aAAa0xD,GAAe,EAAG1xD,CAAW,EAC5EixD,GAAa,oBAAoBpuG,EAAQqvG,GAAwBlyD,EAAa,IAAI,EAAIgsD,EAAWhsD,CAAW,IAE5G4xD,EAASW,GAAmBnvE,EAAG,EAAE,WAAW,EAC5CwuE,EAAO,YAAY5xD,CAAW,EAC9BzZ,EAAWqrE,EAAO,gBAAgB,EAClCE,GAASvrE,CAAQ,EACjBisE,GAAsBjsE,CAAQ,EAC9BylE,EAAWzlE,EAAS,WACpB5nB,GAAI,YAAY4nB,EAAUyZ,CAAW,EACrCoyD,GAAoCzzF,GAAKwS,GAAqB66E,CAAQ,EACtE0H,GAAqB/0F,GAAKqhC,CAAW,EACjCrhC,GAAI,QAAQqhC,CAAW,GACzBiyD,GAAWjyD,CAAW,EAExBgsD,EAAS,UAAU,EACfrtF,GAAI,QAAQqtF,CAAQ,GACtBrtF,GAAI,OAAOqtF,CAAQ,EACnBiI,GAAoB,IAEpBV,GAAoB1wG,EAAQmpG,CAAQ,EACpCiF,GAAa,oBAAoBpuG,EAAQmpG,CAAQ,IAGrDrtF,GAAI,UAAUqtF,EAAU,KAAM,EAAE,EAChCnpG,EAAO,KAAK,WAAY,CAAE,SAAUmpG,CAAS,CAAC,GAChD,EACIkI,GAAc,CAAE,OAAQP,EAAS,EAEjCQ,GAAkB,SAAUtxG,EAAQ+G,EAAU,CAChD,OAAOqnG,GAAa,eAAepuG,CAAM,EAAE,OAAO,SAAUm9C,EAAa,CACvE,OAAOp2C,EAAS,OAAS,GAAK+W,GAAK5D,GAAQ,QAAQijC,CAAW,EAAGp2C,CAAQ,CAC3E,CAAC,EAAE,OAAO,CACZ,EACIwqG,GAAiB,SAAUvxG,EAAQ,CACrC,OAAOsxG,GAAgBtxG,EAAQykD,GAAS,qBAAqBzkD,CAAM,CAAC,CACtE,EACIwxG,GAAqB,SAAUxxG,EAAQ,CACzC,OAAOsxG,GAAgBtxG,EAAQykD,GAAS,qBAAqBzkD,CAAM,CAAC,CACtE,EACIyxG,GAAmB,CACrB,eAAgBF,GAChB,mBAAoBC,EACtB,EAEIE,GAAgB1mD,GAAI,SAAS,CAC/B,CAAE,GAAI,CAAC,CAAE,EACT,CAAE,MAAO,CAAC,CAAE,EACZ,CAAE,KAAM,CAAC,CAAE,CACb,CAAC,EACG2mD,GAAuB,SAAU3xG,EAAQ+wG,EAAU,CACrD,OAAOU,GAAiB,mBAAmBzxG,CAAM,CACnD,EACI4xG,GAAW,SAAUC,EAAe,CACtC,OAAO,SAAU7xG,EAAQ+wG,EAAU,CACjC,IAAIe,EAASrtD,GAAS,mBAAmBzkD,CAAM,IAAM,GACrD,OAAO8xG,IAAWD,CACpB,CACF,EACIE,GAAc,SAAUF,EAAe,CACzC,OAAO,SAAU7xG,EAAQ+wG,EAAU,CACjC,OAAO3C,GAAa,sBAAsBpuG,CAAM,IAAM6xG,CACxD,CACF,EACIG,GAAU,SAAUhtE,EAAW6sE,EAAe,CAChD,OAAO,SAAU7xG,EAAQ+wG,EAAU,CACjC,IAAI38F,EAAQg6F,GAAa,mBAAmBpuG,CAAM,IAAMglC,EAAU,YAAY,EAC9E,OAAO5wB,IAAUy9F,CACnB,CACF,EACII,GAAa,SAAUJ,EAAe,CACxC,OAAOG,GAAQ,MAAOH,CAAa,CACrC,EACIK,GAAiB,UAAY,CAC/B,OAAOF,GAAQ,UAAW,EAAI,CAChC,EACIG,GAAqB,SAAUN,EAAe,CAChD,OAAO,SAAU7xG,EAAQ+wG,EAAU,CACjC,OAAOtsD,GAAS,iBAAiBzkD,CAAM,IAAM6xG,CAC/C,CACF,EACIO,GAAc,SAAUpyG,EAAQ+wG,EAAU,CAC5C,OAAOU,GAAiB,eAAezxG,CAAM,CAC/C,EACIqyG,GAAc,SAAUryG,EAAQ+wG,EAAU,CAC5C,OAAOA,CACT,EACIuB,GAA4B,SAAUtyG,EAAQ,CAChD,IAAI48E,EAAkBn4B,GAAS,mBAAmBzkD,CAAM,EACpDuyG,EAAenE,GAAa,gBAAgBpuG,EAAO,IAAKA,EAAO,UAAU,SAAS,CAAC,EACvF,OAAOuyG,GAAgBvyG,EAAO,OAAO,aAAauyG,EAAa,SAAU31B,GAAoC,GAAG,CAClH,EACI41B,GAAU,SAAUC,EAAYt6C,EAAQ,CAC1C,OAAO,SAAUn4D,EAAQ+wG,EAAU,CACjC,IAAI2B,EAAUx4G,GAAMu4G,EAAY,SAAU7zG,EAAKpD,EAAG,CAChD,OAAOoD,GAAOpD,EAAEwE,EAAQ+wG,CAAQ,CAClC,EAAG,EAAI,EACP,OAAO2B,EAAU16G,EAAO,KAAKmgE,CAAM,EAAIngE,EAAO,KAAK,CACrD,CACF,EACI26G,GAAc,SAAU3yG,EAAQoC,EAAK,CACvC,OAAOsvD,GAAc,cAAc,CACjC8gD,GAAQ,CAACb,EAAoB,EAAGD,GAAc,KAAK,CAAC,EACpDc,GAAQ,CAACN,GAAe,CAAC,EAAGR,GAAc,GAAG,CAAC,EAC9Cc,GAAQ,CACNP,GAAW,EAAI,EACfE,GAAmB,EAAK,EACxBE,EACF,EAAGX,GAAc,GAAG,CAAC,EACrBc,GAAQ,CACNP,GAAW,EAAI,EACfE,GAAmB,EAAK,CAC1B,EAAGT,GAAc,MAAM,CAAC,EACxBc,GAAQ,CACNP,GAAW,EAAI,EACfE,GAAmB,EAAI,EACvBE,EACF,EAAGX,GAAc,MAAM,CAAC,EACxBc,GAAQ,CACNP,GAAW,EAAI,EACfE,GAAmB,EAAI,CACzB,EAAGT,GAAc,GAAG,CAAC,EACrBc,GAAQ,CACNT,GAAY,EAAI,EAChBM,EACF,EAAGX,GAAc,GAAG,CAAC,EACrBc,GAAQ,CAACT,GAAY,EAAI,CAAC,EAAGL,GAAc,MAAM,CAAC,EAClDc,GAAQ,CACNZ,GAAS,EAAI,EACbS,GACAC,EACF,EAAGZ,GAAc,MAAM,CAAC,EACxBc,GAAQ,CAACZ,GAAS,EAAI,CAAC,EAAGF,GAAc,GAAG,CAAC,EAC5Cc,GAAQ,CAACJ,EAAW,EAAGV,GAAc,GAAG,CAAC,EACzCc,GAAQ,CACNZ,GAAS,EAAK,EACdS,EACF,EAAGX,GAAc,GAAG,CAAC,EACrBc,GAAQ,CAACF,EAAyB,EAAGZ,GAAc,MAAM,CAAC,CAC5D,EAAG,CACD1xG,EACAoC,EAAI,QACN,CAAC,EAAE,MAAMsvG,GAAc,KAAK,CAAC,CAC/B,EACIkB,GAAgB,CAAE,UAAWD,EAAY,EAEzCE,GAAW,SAAU7yG,EAAQoC,EAAK,CACpCwwG,GAAc,UAAU5yG,EAAQoC,CAAG,EAAE,KAAK,UAAY,CACpD+hE,GAAS,OAAOnkE,EAAQoC,CAAG,CAC7B,EAAG,UAAY,CACbivG,GAAY,OAAOrxG,EAAQoC,CAAG,CAChC,EAAG5M,CAAI,CACT,EACIs9G,GAAgB,CAAE,OAAQD,EAAS,EAEnCE,GAAiB,SAAUC,EAAa,CACtCA,EAAY,SACdA,EAAY,OAAS,GACrBA,EAAY,IAAI,EAEpB,EACIC,GAAsB,SAAUjzG,EAAQK,EAAO,CAC7CA,EAAM,mBAAmB,IAG7BA,EAAM,eAAe,EACrB0yG,GAAe/yG,EAAO,WAAW,EACjCA,EAAO,YAAY,SAAS,UAAY,CAClCA,EAAO,UAAU,YAAY,IAAM,IACrCA,EAAO,YAAY,QAAQ,EAE7B8yG,GAAc,OAAO9yG,EAAQK,CAAK,CACpC,CAAC,EACH,EACI6yG,GAAU,SAAUlzG,EAAQ,CAC9BA,EAAO,GAAG,UAAW,SAAUK,EAAO,CAChCA,EAAM,UAAYy9E,GAAG,OACvBm1B,GAAoBjzG,EAAQK,CAAK,CAErC,CAAC,CACH,EACI8yG,GAAW,CAAE,MAAOD,EAAQ,EAE5BE,GAAuB,SAAUhoG,EAAMsJ,EAAK,CAC9C,IAAInS,EAAYmS,EAAI,UAAU,EAC1BH,EAASG,EAAI,OAAO,EACxB,OAAIsV,GAAS,OAAOznB,CAAS,GAC3BA,EAAU,WAAWgS,EAAQnJ,CAAI,EAC1BpT,EAAO,KAAK4yC,GAAcroC,EAAWgS,EAASnJ,EAAK,MAAM,CAAC,GAE1DynC,GAAuBn+B,CAAG,EAAE,IAAI,SAAUX,EAAK,CACpD,IAAIwwB,EAAWrqB,GAAQ,SAAS9O,CAAI,EACpC,OAAIsJ,EAAI,QAAQ,EACdipB,GAAM5pB,EAAKwwB,CAAQ,EAEnB9G,GAAO1pB,EAAKwwB,CAAQ,EAEfqG,GAAcrG,EAAS,IAAI,EAAGn5B,EAAK,MAAM,CAClD,CAAC,CAEL,EACIioG,GAAuBn9G,EAAMk9G,GAAsB,MAAM,EACzDE,GAAwBp9G,EAAMk9G,GAAsB,GAAG,EAEvDG,GAA+B,SAAUjpG,EAASqG,EAAM5Y,EAAM,CAChE,OAAOq9C,GAAY,eAAe9qC,EAASqG,EAAM5Y,EAAMk0D,EAAW,CACpE,EACIunD,GAAkB,SAAU7iG,EAAM+D,EAAK,CACzC,OAAOva,GAAKquD,GAAQ,eAAetuC,GAAQ,QAAQxF,EAAI,UAAU,CAAC,EAAG/D,CAAI,EAAGkX,CAAO,CACrF,EACI4rF,GAA+B,SAAUnpG,EAASqG,EAAM+D,EAAK,CAC/D,OAAO6+F,GAA6BjpG,EAASqG,EAAK,IAAI,EAAG+D,CAAG,EAAE,OAAO,SAAU4pC,EAAQ,CACrF,OAAOk1D,GAAgB7iG,EAAM+D,CAAG,EAAE,KAAK,UAAY,CACjD,OAAOg9B,GAAc4M,EAAQ5pC,EAAK/D,EAAK,IAAI,CAAC,IAAM,EACpD,EAAG,SAAUm4C,EAAW,CACtB,OAAOpX,GAAc4M,EAAQ5pC,EAAK/D,EAAK,IAAI,CAAC,IAAM,IAAS4N,GAAWuqC,EAAW5uC,GAAQ,QAAQokC,EAAO,UAAU,CAAC,CAAC,CACtH,CAAC,CACH,CAAC,CACH,EACIo1D,GAAoB,SAAUppG,EAASqG,EAAM+D,EAAK,CACpD,OAAO8+F,GAAgB7iG,EAAM+D,CAAG,EAAE,KAAK,UAAY,CACjD,OAAO6+F,GAA6BjpG,EAASqG,EAAK,IAAI,EAAG+D,CAAG,EAAE,OAAO,SAAU4pC,EAAQ,CACrF,OAAO5M,GAAc4M,EAAQ5pC,EAAK/D,EAAK,IAAI,CAAC,IAAM,EACpD,CAAC,CACH,EAAG,SAAUhI,EAAQ,CACnB,OAAO4qG,GAA6BjpG,EAAS3B,EAAO,IAAI,EAAG+L,CAAG,EAAE,OAAO,CACzE,CAAC,CACH,EACIi/F,GAAmBz9G,EAAMw9G,GAAmB,EAAK,EACjDE,GAAiB19G,EAAMw9G,GAAmB,EAAI,EAC9CG,GAAgB39G,EAAMu9G,GAA8B,EAAK,EACzDK,GAAe59G,EAAMu9G,GAA8B,EAAI,EAEvD/pE,GAAO,OACPqqE,GAAmB,SAAUr/F,EAAK,CACpC,OAAOk2B,GAAc,eAAel2B,CAAG,GAAK,CAACA,EAAI,UAAU,GAAK,CAACA,EAAI,QAAQ,CAC/E,EACIs/F,GAAoB,SAAUrjG,EAAM+D,EAAK,CAC3C,IAAIy2C,EAAepxD,GAAOyuD,GAAQ,eAAetuC,GAAQ,QAAQxF,EAAI,UAAU,CAAC,EAAG/D,CAAI,EAAGkX,CAAO,EACjG,OAAO7sB,GAAKmwD,CAAY,EAAE,MAAMx6C,CAAI,CACtC,EACIsjG,GAAiB,SAAUtjG,EAAM+D,EAAK,CACxC,OAAIq/F,GAAiBr/F,CAAG,EACfs3C,GAAat3C,CAAG,EAEhBs3C,GAAat3C,CAAG,GAAK0gC,GAAY,aAAa4+D,GAAkBrjG,EAAM+D,CAAG,EAAE,IAAI,EAAGA,CAAG,EAAE,OAAOs3C,EAAY,CAErH,EACIkoD,GAAgB,SAAUvjG,EAAM+D,EAAK,CACvC,OAAIq/F,GAAiBr/F,CAAG,EACfq3C,GAAcr3C,CAAG,EAEjBq3C,GAAcr3C,CAAG,GAAK0gC,GAAY,aAAa4+D,GAAkBrjG,EAAM+D,CAAG,EAAE,IAAI,EAAGA,CAAG,EAAE,OAAOq3C,EAAa,CAEvH,EACIooD,GAAa,SAAUp+G,EAAO,CAChC,OAAOoD,GAAS,CACd,MACA,UACF,EAAGpD,CAAK,CACV,EACIq+G,GAAU,SAAU1/F,EAAK,CAC3B,OAAOm+B,GAAuBn+B,CAAG,EAAE,KAAK,SAAUX,EAAK,CACrD,OAAO8rB,GAAQ9rB,EAAKkH,CAAS,CAC/B,CAAC,EAAE,OAAO,SAAUlH,EAAK,CACvB,OAAOogG,GAAWx3F,EAAM5I,EAAK,aAAa,CAAC,CAC7C,CAAC,CACH,EACIsgG,GAAsB,SAAU1jG,EAAM+D,EAAK,CAC7C,OAAO0gC,GAAY,aAAazkC,EAAK,IAAI,EAAG+D,CAAG,EAAE,OAAO,CAC1D,EACI4/F,GAAgB,SAAU3jG,EAAM+D,EAAK,CACvC,OAAO0gC,GAAY,aAAazkC,EAAK,IAAI,EAAG+D,CAAG,EAAE,OAAO,CAC1D,EACI6/F,GAAmB,SAAU5jG,EAAM+D,EAAK,CAC1C,OAAO2/F,GAAoB1jG,EAAM+D,CAAG,GAAK4/F,GAAc3jG,EAAM+D,CAAG,GAAKi/F,GAAiBhjG,EAAM+D,CAAG,GAAKk/F,GAAejjG,EAAM+D,CAAG,GAAK22C,GAAU16C,EAAM+D,CAAG,GAAK02C,GAAWz6C,EAAM+D,CAAG,CAC/K,EACI8/F,GAAkB,SAAU7jG,EAAM+D,EAAK,CACzC,OAAI0/F,GAAQ1/F,CAAG,EACN,GAEA6/F,GAAiB5jG,EAAM+D,CAAG,GAAKu/F,GAAetjG,EAAM+D,CAAG,GAAKw/F,GAAcvjG,EAAM+D,CAAG,CAE9F,EACI+/F,GAAoB,SAAU9jG,EAAM+D,EAAK,CAC3C,OAAI0/F,GAAQ1/F,CAAG,EACN,GAEAi/F,GAAiBhjG,EAAM+D,CAAG,GAAKm/F,GAAcljG,EAAM+D,CAAG,GAAK22C,GAAU16C,EAAM+D,CAAG,GAAKu/F,GAAetjG,EAAM+D,CAAG,CAEtH,EACI+9B,GAAY,SAAU/9B,EAAK,CAC7B,IAAInS,EAAYmS,EAAI,UAAU,EAC1BH,EAASG,EAAI,OAAO,EACxB,OAAIsV,GAAS,OAAOznB,CAAS,GAAKgS,EAAShS,EAAU,KAAK,OACjDqoC,GAAcroC,EAAWgS,EAAS,CAAC,EAEnCG,CAEX,EACIggG,GAAqB,SAAU/jG,EAAM+D,EAAK,CAC5C,IAAIigG,EAAWliE,GAAU/9B,CAAG,EAC5B,OAAI0/F,GAAQO,CAAQ,EACX,GAEAf,GAAejjG,EAAMgkG,CAAQ,GAAKb,GAAanjG,EAAMgkG,CAAQ,GAAKvpD,GAAWz6C,EAAMgkG,CAAQ,GAAKT,GAAcvjG,EAAMgkG,CAAQ,CAEvI,EACIC,GAAgB,SAAUjkG,EAAM+D,EAAK,CACvC,OAAO+/F,GAAkB9jG,EAAM+D,CAAG,GAAKggG,GAAmB/jG,EAAM+D,CAAG,CACrE,EACImgG,GAAW,SAAUzpG,EAAMmJ,EAAQ,CACrC,OAAOm3C,GAAOtgD,EAAK,OAAOmJ,CAAM,CAAC,CACnC,EACIugG,GAAU,SAAUpgG,EAAK,CAC3B,IAAInS,EAAYmS,EAAI,UAAU,EAC9B,OAAOsV,GAAS,OAAOznB,CAAS,GAAKuW,GAAWvW,EAAU,KAAMmnC,EAAI,CACtE,EACIqrE,GAAsB,SAAU3pG,EAAM,CACxC,IAAI4pG,EAAQ5pG,EAAK,MAAM,EAAE,EACzB,OAAO5R,GAAIw7G,EAAO,SAAU5pF,EAAK9xB,EAAG,CAClC,OAAIoyD,GAAOtgC,CAAG,GAAK9xB,EAAI,GAAKA,EAAI07G,EAAM,OAAS,GAAKppD,GAAYopD,EAAM17G,EAAI,CAAC,CAAC,GAAKsyD,GAAYopD,EAAM17G,EAAI,CAAC,CAAC,EAChG,IAEA8xB,CAEX,CAAC,EAAE,KAAK,EAAE,CACZ,EACI6pF,GAAuB,SAAUtkG,EAAMlI,EAAM,CAC/C,IAAI2C,EAAO3C,EAAK,KACZm9C,EAAWhb,GAAcniC,EAAM,CAAC,EACpC,OAAIosG,GAASzpG,EAAM,CAAC,GAAK,CAACwpG,GAAcjkG,EAAMi1C,CAAQ,GACpDn9C,EAAK,KAAO,IAAM2C,EAAK,MAAM,CAAC,EACvB,IAEA,EAEX,EACI8pG,GAAkC,SAAUzsG,EAAM,CACpD,IAAI2C,EAAO3C,EAAK,KACZ0sG,EAAUJ,GAAoB3pG,CAAI,EACtC,OAAI+pG,IAAY/pG,GACd3C,EAAK,KAAO0sG,EACL,IAEA,EAEX,EACIC,GAAqB,SAAUzkG,EAAMlI,EAAM,CAC7C,IAAI2C,EAAO3C,EAAK,KACZo9C,EAAUjb,GAAcniC,EAAM2C,EAAK,OAAS,CAAC,EACjD,OAAIypG,GAASzpG,EAAMA,EAAK,OAAS,CAAC,GAAK,CAACwpG,GAAcjkG,EAAMk1C,CAAO,GACjEp9C,EAAK,KAAO2C,EAAK,MAAM,EAAG,EAAE,EAAI,IACzB,IAEA,EAEX,EACIiqG,GAAiB,SAAU1kG,EAAM+D,EAAK,CACxC,OAAO1c,EAAO,KAAK0c,CAAG,EAAE,OAAOogG,EAAO,EAAE,KAAK,SAAUpgG,EAAK,CAC1D,IAAInS,EAAYmS,EAAI,UAAU,EAC1BqgB,EAAakgF,GAAqBtkG,EAAMpO,CAAS,GAAK2yG,GAAgC3yG,CAAS,GAAK6yG,GAAmBzkG,EAAMpO,CAAS,EAC1I,OAAOwyB,EAAa/8B,EAAO,KAAK0c,CAAG,EAAI1c,EAAO,KAAK,CACrD,CAAC,CACH,EACIs9G,GAAyB,SAAUt1G,EAAQ,CAC7C,IAAI2Q,EAAOuJ,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EACvCA,EAAO,UAAU,YAAY,GAC/Bq1G,GAAe1kG,EAAMi6B,GAAc,eAAe5qC,EAAO,UAAU,OAAO,CAAC,CAAC,EAAE,KAAK,SAAU0U,EAAK,CAChG1U,EAAO,UAAU,OAAO0U,EAAI,QAAQ,CAAC,CACvC,CAAC,CAEL,EAEI6gG,GAA0B,SAAU5kG,EAAM,CAC5C,OAAO,SAAU4hC,EAAU,CACzB,OAAOA,EAAS,KAAK,SAAUpzC,EAAS,CACtC,OAAOi2C,GAAY,aAAazkC,EAAK,IAAI,EAAGy6B,GAAgB,OAAOjsC,CAAO,CAAC,CAC7E,EAAG,SAAUA,EAAS,CACpB,OAAOi2C,GAAY,gBAAgBj2C,CAAO,CAC5C,EAAG,SAAUA,EAAS,CACpB,OAAOi2C,GAAY,eAAej2C,CAAO,CAC3C,EAAG,SAAUA,EAAS,CACpB,OAAOi2C,GAAY,aAAazkC,EAAK,IAAI,EAAGy6B,GAAgB,MAAMjsC,CAAO,CAAC,CAC5E,CAAC,CACH,CACF,EACIq2G,GAAkC,SAAU7kG,EAAM+D,EAAK,CACzD,OAAO,SAAU+gG,EAAU,CACzB,OAAOjB,GAAgB7jG,EAAM8kG,CAAQ,EAAIpC,GAAqB3+F,CAAG,EAAI4+F,GAAsB5+F,CAAG,CAChG,CACF,EACIghG,GAAiB,SAAU11G,EAAQ,CACrC,OAAO,SAAU0U,EAAK,CACpB,OAAA1U,EAAO,UAAU,OAAO0U,EAAI,QAAQ,CAAC,EACrC1U,EAAO,YAAY,EACZ,EACT,CACF,EACI21G,GAA+B,SAAU31G,EAAQ,CACnD,IAAI0U,EAAM02B,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,EAC9D2Q,EAAOuJ,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAC3C,GAAIA,EAAO,UAAU,YAAY,EAAG,CAClC,IAAI0kD,EAAiBxuD,EAAMmvD,GAAY,eAAgBrlD,CAAM,EACzDwqC,EAAgBY,GAAgB,eAAeprC,EAAO,UAAU,OAAO,CAAC,EAC5E,OAAOqzD,GAAiB,aAAa3O,EAAgB1kD,EAAO,QAAQ,EAAGwqC,CAAa,EAAE,KAAK+qE,GAAwB5kG,CAAI,CAAC,EAAE,KAAK6kG,GAAgC7kG,EAAM+D,CAAG,CAAC,EAAE,OAAOghG,GAAe11G,CAAM,CAAC,CAC1M,KACE,OAAO,EAEX,EAEI41G,GAA2B,SAAU51G,EAAQoC,EAAK,CACpD+qG,GAAU,QAAQ,CAAC,CACf,QAASrvB,GAAG,SACZ,OAAQqvB,GAAU,OAAOwI,GAA8B31G,CAAM,CAC/D,CAAC,EAAGoC,CAAG,EAAE,KAAK,SAAUoE,EAAG,CAC3BpE,EAAI,eAAe,CACrB,CAAC,CACH,EACIyzG,GAAU,SAAU71G,EAAQ,CAC9BA,EAAO,GAAG,UAAW,SAAUoC,EAAK,CAC9BA,EAAI,mBAAmB,IAAM,IAC/BwzG,GAAyB51G,EAAQoC,CAAG,CAExC,CAAC,CACH,EACI0zG,GAAW,CAAE,MAAOD,EAAQ,EAE5BE,GAA0B,SAAU/1G,EAAQ,CAC9C,OAAOggC,GAAW9lB,GAAQ,QAAQla,EAAO,QAAQ,CAAC,EAAG,mBAAmB,EAAE,KAAKlK,EAAS,IAAI,EAAG,SAAUie,EAAK,CAC5G,OAAOA,EAAI,IAAI,CACjB,CAAC,CACH,EACIiiG,GAAsB,SAAUh2G,EAAQ,CAC1CA,EAAO,UAAU,OAAOA,EAAO,UAAU,OAAO,CAAC,CACnD,EACI6kF,GAA0B,SAAU7kF,EAAQ8kF,EAAqB,CAC/DA,EAAoB,aAAa,gBAAgB,IACnDz/C,GAAwBy/C,CAAmB,EAC3CkxB,GAAoBh2G,CAAM,EAC1BA,EAAO,UAAU,eAAe8kF,CAAmB,EAEvD,EACImxB,GAAuB,SAAUj2G,EAAQ/B,EAAG,CAC9C,IAAI6mF,EAAsBixB,GAAwB/1G,CAAM,EACxD,GAAK8kF,EAGL,IAAI7mF,EAAE,OAAS,mBAAoB,CACjCA,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAClB4mF,GAAwB7kF,EAAQ8kF,CAAmB,EACnD,MACF,CACIzgD,GAAWygD,CAAmB,IAChCD,GAAwB7kF,EAAQ8kF,CAAmB,EACnD9kF,EAAO,YAAY,IAAI,GAE3B,EACIk2G,GAAU,SAAUl2G,EAAQ,CAC9BA,EAAO,GAAG,yBAA0B9J,EAAM+/G,GAAsBj2G,CAAM,CAAC,CACzE,EACIm2G,GAAsB,CAAE,MAAOD,EAAQ,EAEvCE,GAAYz8F,GAAoB,OAAO,EAAE,QACzC08F,GAAe,SAAUr2G,EAAQ,CACnC,IAAIs2G,EAAmBlsG,GAAM,UAAY,CAClCpK,EAAO,WACVs1G,GAAuBt1G,CAAM,CAEjC,EAAG,CAAC,EACAo2G,GAAU,KAAK,IACjBp2G,EAAO,GAAG,WAAY,SAAU/B,EAAG,CACjCq4G,EAAiB,SAAS,CAC5B,CAAC,EACDt2G,EAAO,GAAG,SAAU,SAAU/B,EAAG,CAC/Bq4G,EAAiB,OAAO,CAC1B,CAAC,EAEL,EACIC,GAAU,SAAUv2G,EAAQ,CAC9Bq2G,GAAar2G,CAAM,EACnBA,EAAO,GAAG,QAAS,SAAU/B,EAAG,CAC1BA,EAAE,cAAgB,IACpBq3G,GAAuBt1G,CAAM,CAEjC,CAAC,CACH,EAEIw2G,GAA2B,SAAUx2G,EAAQoC,EAAK,CACpD+qG,GAAU,QAAQ,CAChB,CACE,QAASrvB,GAAG,IACZ,OAAQ6rB,GAAmB3pG,EAAQ,EAAI,CACzC,EACA,CACE,QAAS89E,GAAG,KACZ,OAAQ6rB,GAAmB3pG,EAAQ,EAAK,CAC1C,CACF,EAAGoC,CAAG,EAAE,KAAK,SAAUoE,EAAG,CACxBpE,EAAI,eAAe,CACrB,CAAC,CACH,EACIq0G,GAAU,SAAUz2G,EAAQ,CAC9BA,EAAO,GAAG,UAAW,SAAUoC,EAAK,CAC9BA,EAAI,mBAAmB,IAAM,IAC/Bo0G,GAAyBx2G,EAAQoC,CAAG,CAExC,CAAC,CACH,EACIs0G,GAAc,CAAE,MAAOD,EAAQ,EAE/BE,GAAU,SAAU32G,EAAQ,CAC9B,IAAIswC,EAAQokB,GAAkB,mBAAmB10D,CAAM,EACvDm2G,GAAoB,MAAMn2G,CAAM,EAChCstG,GAAU,MAAMttG,EAAQswC,CAAK,EAC7Bo9D,GAAoB,MAAM1tG,EAAQswC,CAAK,EACvC6iE,GAAS,MAAMnzG,CAAM,EACrB81G,GAAS,MAAM91G,CAAM,EACrBu2G,GAAQv2G,CAAM,EACd02G,GAAY,MAAM12G,CAAM,CAC1B,EACI42G,GAAoB,CAAE,MAAOD,EAAQ,EAEzC,SAASE,GAAQ72G,EAAQ,CACvB,IAAIvG,EAAOkY,GAAM,KACbmlG,EAAYh5B,GAAG,UAAW+L,EAAS/L,GAAG,OAAQhiE,EAAM9b,EAAO,IAAKktC,EAAYltC,EAAO,UAAW8kB,EAAW9kB,EAAO,SAAUoiD,EAASpiD,EAAO,OAC1I+2G,EAAUz5G,GAAI,MAAO82B,EAAO92B,GAAI,GAAI05G,EAAW15G,GAAI,OACnD25G,EAAuB,0BACvBC,EAAsB9iF,EAAO,OAAS,MACtC22C,EAAwB,SAAUC,GAAK52D,GAAO,CAChD,GAAI,CACFpU,EAAO,OAAO,EAAE,YAAYgrE,GAAK,GAAO52D,EAAK,CAC/C,MAAa,CACb,CACF,EACI+iG,EAAqB,SAAUl5G,GAAG,CACpC,OAAOA,GAAE,mBAAmB,CAC9B,EACIm5G,GAAwB,SAAUn5G,GAAG,CACvC,IAAIo5G,GAAeC,GACfr5G,GAAE,eACA+B,EAAO,UAAU,YAAY,GAAK/B,GAAE,OAAO,UAAY,OACzDivC,EAAU,OAAOjvC,GAAE,MAAM,EAE3Bo5G,GAAgBr3G,EAAO,UAAU,WAAW,EACxCq3G,GAAc,OAAS,IACzBC,GAAkBL,EAAuB,OAAOj3G,EAAO,EAAE,EAAI,IAAM,OAAOq3G,EAAa,EACvFp5G,GAAE,aAAa,QAAQi5G,EAAqBI,EAAe,GAGjE,EACIC,GAAwB,SAAUt5G,GAAG,CACvC,IAAIq5G,GACJ,OAAIr5G,GAAE,eACJq5G,GAAkBr5G,GAAE,aAAa,QAAQi5G,CAAmB,EACxDI,IAAmBA,GAAgB,QAAQL,CAAoB,GAAK,IACtEK,GAAkBA,GAAgB,OAAOL,EAAqB,MAAM,EAAE,MAAM,GAAG,EACxE,CACL,GAAI,SAASK,GAAgB,CAAC,CAAC,EAC/B,KAAM,SAASA,GAAgB,CAAC,CAAC,CACnC,GAGG,IACT,EACIE,GAA0B,SAAUrjG,GAASsjG,GAAU,CACrDz3G,EAAO,sBAAsB,2BAA2B,EAC1DA,EAAO,YAAY,4BAA6B,GAAO,CACrD,QAASmU,GACT,SAAUsjG,EACZ,CAAC,EAEDz3G,EAAO,YAAY,mBAAoB,GAAOmU,EAAO,CAEzD,EACIujG,GAA0B,UAAY,CACxC,IAAIC,GAAe,SAAUp3E,GAAK,CAChC,IAAIn/B,GAAO0a,EAAI,OAAO,MAAM,EACxB87F,GAAWr3E,GAAI,cAAc,EACjC,OAAAn/B,GAAK,YAAYw2G,EAAQ,EAClB1qE,EAAU,WAAW,UAAU9rC,GAAM,CAAE,OAAQ,MAAO,CAAC,CAChE,EACIy2G,GAAsB,SAAUt3E,GAAK,CACvC,IAAI2M,GAAYyqE,GAAap3E,EAAG,EAC5Bu3E,GAASh8F,EAAI,UAAU,EAC3Bg8F,GAAO,WAAW93G,EAAO,QAAQ,CAAC,EAClC,IAAI+3G,GAAeJ,GAAaG,EAAM,EACtC,OAAO5qE,KAAc6qE,EACvB,EACA/3G,EAAO,GAAG,UAAW,SAAU/B,GAAG,CAChC,IAAIm+D,GAAUn+D,GAAE,QACZ0zF,GAAavwF,GACjB,GAAI,CAAC+1G,EAAmBl5G,EAAC,IAAMm+D,KAAYytB,GAAUztB,KAAY06C,GAAY,CAM3E,GALAnlB,GAAc3xF,EAAO,UAAU,YAAY,EAC3CoB,GAAOpB,EAAO,QAAQ,EAClB2xF,IAAe,CAAC71E,EAAI,QAAQ1a,EAAI,GAGhC,CAACuwF,IAAe,CAACkmB,GAAoB73G,EAAO,UAAU,OAAO,CAAC,EAChE,OAEF/B,GAAE,eAAe,EACjB+B,EAAO,WAAW,EAAE,EAChBoB,GAAK,YAAc0a,EAAI,QAAQ1a,GAAK,UAAU,EAChDpB,EAAO,UAAU,kBAAkBoB,GAAK,WAAY,CAAC,EAErDpB,EAAO,UAAU,kBAAkBoB,GAAM,CAAC,EAE5CpB,EAAO,YAAY,CACrB,CACF,CAAC,CACH,EACIg4G,GAAY,UAAY,CAC1Bh4G,EAAO,UAAU,IAAI,SAAU,KAAM,WAAW,CAClD,EACIi4G,GAAmB,UAAY,CAC5Bj4G,EAAO,SAAS,kBACnB8b,EAAI,KAAK9b,EAAO,OAAO,EAAG,oBAAqB,SAAU/B,GAAG,CAC1D,IAAIsiC,GACJ,GAAItiC,GAAE,SAAW+B,EAAO,OAAO,EAAE,gBAG/B,GAFAugC,GAAM2M,EAAU,OAAO,EACvBltC,EAAO,QAAQ,EAAE,MAAM,EACnB/B,GAAE,OAAS,YAAa,CAC1B,GAAImmC,GAAiB7D,GAAI,cAAc,EACrC,OAEF2M,EAAU,aAAajvC,GAAE,QAASA,GAAE,OAAO,CAC7C,MACEivC,EAAU,OAAO3M,EAAG,CAG1B,CAAC,CAEL,EACI23E,GAAsB,UAAY,CACpCl4G,EAAO,GAAG,UAAW,SAAU/B,GAAG,CAChC,GAAI,CAACk5G,EAAmBl5G,EAAC,GAAKA,GAAE,UAAY64G,EAAW,CACrD,GAAI,CAAC92G,EAAO,QAAQ,EAAE,qBAAqB,IAAI,EAAE,OAC/C,OAEF,GAAIktC,EAAU,YAAY,GAAKA,EAAU,OAAO,EAAE,cAAgB,EAAG,CACnE,IAAIzkC,GAAOykC,EAAU,QAAQ,EACzBirE,GAAkB1vG,GAAK,gBAC3B,GAAIA,GAAK,WAAa,KAAM,CAC1BqT,EAAI,OAAOrT,EAAI,EACfxK,GAAE,eAAe,EACjB,MACF,CACIk6G,IAAmBA,GAAgB,UAAYA,GAAgB,SAAS,YAAY,IAAM,OAC5Fr8F,EAAI,OAAOq8F,EAAe,EAC1Bl6G,GAAE,eAAe,EAErB,CACF,CACF,CAAC,CACH,EACI0xE,GAAY,UAAY,CACrBp6E,EAAW,MAAM,UAAU,gBAC9ByK,EAAO,GAAG,YAAa,SAAU/B,GAAG,CAClC,GAAI,CAACk5G,EAAmBl5G,EAAC,GAAKA,GAAE,OAAO,WAAa,OAAQ,CAC1D,IAAIm6G,GAASp4G,EAAO,QAAQ,EAC5Bo4G,GAAO,KAAK,EACZr4G,GAAM,iBAAiBC,EAAQ,UAAY,CACzCo4G,GAAO,MAAM,CACf,CAAC,CACH,CACF,CAAC,CAEL,EACIC,GAAwB,UAAY,CACtCr4G,EAAO,GAAG,QAAS,SAAU/B,GAAG,CAC9B,IAAIwC,GAASxC,GAAE,OACX,aAAa,KAAKwC,GAAO,QAAQ,GAAKqb,EAAI,yBAAyBrb,EAAM,IAAM,UACjFxC,GAAE,eAAe,EACjB+B,EAAO,UAAU,OAAOS,EAAM,EAC9BT,EAAO,YAAY,GAEjBS,GAAO,WAAa,KAAOqb,EAAI,SAASrb,GAAQ,iBAAiB,IACnExC,GAAE,eAAe,EACjBivC,EAAU,OAAOzsC,EAAM,EAE3B,CAAC,CACH,EACI63G,GAA8C,UAAY,CAC5D,IAAIC,GAA4B,UAAY,CAC1C,IAAIC,GAAW18F,EAAI,WAAWoxB,EAAU,SAAS,EAAE,UAAU,EAAK,CAAC,EACnE,OAAO,UAAY,CACjB,IAAIzsC,GAASysC,EAAU,SAAS,EAC5BzsC,KAAWT,EAAO,QAAQ,IAC5B8b,EAAI,UAAUrb,GAAQ,QAAS,IAAI,EACnChH,EAAK++G,GAAU,SAAUhtG,GAAM,CAC7B/K,GAAO,iBAAiB+K,GAAK,UAAU,EAAI,CAAC,CAC9C,CAAC,EAEL,CACF,EACIitG,GAA4B,UAAY,CAC1C,MAAO,CAACvrE,EAAU,YAAY,GAAKpxB,EAAI,UAAUoxB,EAAU,SAAS,EAAGpxB,EAAI,OAAO,IAAMA,EAAI,UAAUoxB,EAAU,OAAO,EAAGpxB,EAAI,OAAO,CACvI,EACA9b,EAAO,GAAG,WAAY,SAAU/B,GAAG,CACjC,IAAI4xG,GACJ,GAAI,CAACsH,EAAmBl5G,EAAC,IAAMA,GAAE,UAAY,GAAKA,GAAE,UAAY,KAAOw6G,GAA0B,EAC/F,OAAA5I,GAAkB0I,GAA0B,EAC5Cv4G,EAAO,OAAO,EAAE,YAAY,SAAU,GAAO,IAAI,EACjD6vG,GAAgB,EAChB5xG,GAAE,eAAe,EACV,EAEX,CAAC,EACD6d,EAAI,KAAK9b,EAAO,OAAO,EAAG,MAAO,SAAU/B,GAAG,CAC5C,IAAI4xG,GACA,CAACsH,EAAmBl5G,EAAC,GAAKw6G,GAA0B,IACtD5I,GAAkB0I,GAA0B,EAC5Cx4G,GAAM,iBAAiBC,EAAQ,UAAY,CACzC6vG,GAAgB,CAClB,CAAC,EAEL,CAAC,CACH,EACI6I,GAA6B,UAAY,CAC3C14G,EAAO,GAAG,UAAW,SAAU/B,GAAG,CAChC,GAAI,CAACk5G,EAAmBl5G,EAAC,GAAKA,GAAE,UAAY64G,GACtC5pE,EAAU,YAAY,GAAKA,EAAU,OAAO,EAAE,cAAgB,EAAG,CACnE,IAAIirE,GAAkBjrE,EAAU,QAAQ,EAAE,gBAC1C,GAAIirE,IAAmBA,GAAgB,UAAYA,GAAgB,SAAS,YAAY,IAAM,QAC5F,OAAAl6G,GAAE,eAAe,EACV,EAEX,CAEJ,CAAC,CACH,EACI06G,GAA8B,UAAY,CAC5C34G,EAAO,GAAG,UAAW,SAAU/B,GAAG,CAChC,IAAIsiC,GAAKh+B,GAAWgS,GAAQ5D,GAAMhI,GAClC,GAAI,EAAAwuG,EAAmBl5G,EAAC,GAAKA,GAAE,UAAY6/E,GAAG,aAG9Cv9C,GAAM2M,EAAU,OAAO,EACvB3qC,GAAYg+B,GAAI,eAChBhsB,GAASgsB,GAAI,YACb5vB,GAAOmL,EAAI,QAAQ,EACnBnT,GAASpG,GACL,GAACg+B,GAAI,WAAahsB,KAAW,IAGjC,MAAO5L,IAAUA,GAAO,YAAcA,GAAO,WAAW,aAAeA,IAAUA,GAAO,aAAegI,IACrGhI,GAASA,GAAO,WAEdA,GAAO,UAAY,eACrB3I,EAAO,UAAU,OAAO,aAAc,KAAM2I,EAAM,EAClD43B,GAAMzkB,EAAI,UAAU,EACpBykB,GAAI,SAASh+B,GAAW,CAAC,EACzBg+B,GAAI,OAAOh+B,GAAW,CAAC,EACvB2qC,EAAU,OAAO3M,EAAG,GAExB,CAAC,CACH,EACIq4E,GAAyB,UAAY,CACvC,IAAIC,GAAU,UAAY,CACxB9tC,EAAsB,eAAgB,EAAK,EAC3CA,EAAsB,2BAA4B,EAAK,EAClDjmD,EAAS,iBACZimD,EAAsB,uBAAwB,EAAK,CAEvD,EACKjmD,EAAS,UACZ9kB,EAAO,GAAG,8BAA+B64G,EAAO,CAEpD,EACIC,GAAsB,UAAY,CACpC,IAAIC,GAAW,UAAY,CACzBt/G,EAAKqiB,EAAI,OAAO,GAAG,EAAG,SAAUrT,GAAM,CACpC,IAAI+7B,GAAa/7B,GAAK,WAClBkI,GAAOmL,EAAI,QAAQ,EACvB,GAAI0oB,GAAW,YAAc/7B,GAAM,CACjC,KAAO+7B,IAAc,CAAC1oB,EAAI,QAAQ0oB,EAAU,GAAG,CAC7C,GAAIA,GAAW,WAAW,YAAcA,IAAcA,KAAe7zB,GACnE,OAEF6zB,GAAaA,GAAW,UAC1B,CACA1oB,EAAI,IAAI0oB,GAAY,KAAM,CAAE,iBAAkB,CAAE,CAAC,CACnD,CACF,CAAC,CACH,EACAxkC,EAAO,GAAG,yBAA0B,SAAU/B,GAAG,EAC3CA,GAAE,OAAS,cAAgBA,GAAE,UAAY,kBAC3C86G,GAAS,CAEb,CAAC,CACH,EACIC,GAAsB,UAAY,CAChCl0F,EAAS,mBACX9kB,EAAO,GAAG,OAAQ,UAAY,CAC5B+qE,EAAsB,4BAA6BjmD,EAAS,iBAAiB,CAC/E,CAAC,CAEL,EACI4qD,GAAqB,UAAY,CACnC1vE,EAAO,GAAG,wBAAyB,SAAU/B,GAAG,CACzC6/E,GAAG,gBAAgB7/E,EAAC,GACvBivC,EAAU,UAAU,CAExB,EAAG,EAAI,CACT,EACI+rE,GAAsB,UAAY,CACpCj5G,EAAO,cAAc,KAAK,iFAAqG,CACjI,EACIk5G,GAAwB,UAAY,CACjCl5G,EAAO,QACVA,EAAO,GAAG,UAAW,UAAY,CAC3BzK,EAAW,SAAS,gBAAkBA,EAAW,SAAS,MAC5DyK,EAAO,OAAO,EAAE,MAAM,CAE1B,CAAC,CAEL,EACIm5G,GAAa,UAAY,CACtBn5G,EAAO,SACVA,EAAO,cAAc,KAAK,0BAA0B,EACpDA,EAAO,GAAG,QAAS,SAAU/B,GAAG,CAC9B,IAAIsiC,GACJ,GAAItiC,GAAE,OAAO,WAAa,OAAQ,CAChC,GAAIX,GAAI,GAAK,GAAI,CACf0C,EAAO,QAAQ,EAAE,MAAM,EACvB,MACF,CACAugC,GAAMvgC,EAAO,UAAU,OAAO,EAC9BA,EAAO,QAAQ,EAAE,MAAM,EACvBA,EAAO,UAAU,OAAOugC,EAAG,EAC3BvgC,EAAO,UAAU,UAAU,EAC3BA,EAAO,YAAY,CACrB,CACF,CAAC,EAEL,EACIo5G,GAA0B,UAAY,CACpC97G,GAAI,KACN0C,EAAO,GAAG,UAAW,SAAU/B,GAAG,CAC5B6/E,GAAG,eAAe7/E,EAAC,GAAK,CAACA,GAAE,WAAaA,GAAE,UAAY,IAAMA,GAAE,UAAY,MAC5EA,GAAE,eAAe,EACjB+B,EAAO,UAAU,OAAO,EAAE,OAAO,OAAQ/B,GAAE,UAAY,GAAK,WAAa,UAAW,cAAc,EAEtG,CAAC,CAEL,EACIo7G,GAAuB,UAAY,CACrCtuC,EAAsB,gBAAiB,EAAK,CAC9C,EACIuuC,GAAoB,UAAY,CAClCt5G,EAAO,GAAG,QAAS,SAAU/B,GAAG,CAC9B,IAAI8V,GAAM9V,GAAE,OACZ,EACE,IAAI8V,GAAI,UAAY,IAAK,CACvB9V,GAAE,eAAe,EACjB,MACF,OACO8V,GAAMA,GAAI,WACrB,CAAC,EACD/T,EAAO,cAAc,KAAK,iDAAiD,CAC7E,EACIu5G,GAA8B,UAAY,CAC5Cv5G,EAAO,GAAG,OAAQ,UAAY,CAC5BA,EAAO,IAAI,KAAKA,EAAO,QAAQ,EAAG,SAAU,SAAU/B,GAAG,CACvDA,GAAE,eAAe,CACnB,CAAC,CACH,CAAC,CACH,EACIu7G,GAA4B,UAAY,CAC1Cp3D,EAAO,cAAc,KAAM,SAAUvuC,GAAO,CAE1C,QADIva,GAAIua,GAAM,OACPva,MACDua,GAAMva,EAAC,EAAE,KAAK,OAAO,IAAM,6BAC7Bua,GAAMva,EAAC,EAAE,OAAO,CAGtB,CAAC,CACH,EACImgH,GAAwB,UAAY,CACtCz5G,EAAO,GAAG,YAAa,SAAU/B,GAAG,CAClCm5G,GAAsBn5G,EAAC,CACzB,CAAC,EACD+B,EAAO,GAAG,OAAQ,SAAU/B,GAAG,CAC7B,GAAI,CAACk5G,EAAmBl5G,EAAC,EAAG,CAC1B,IAAIq5G,GAAkBC,GAAsBt5G,EAAC,EAC7C,GAAIq5G,IAAmBA,GAAgB,KAAOt3G,EAAO,GAAI,CACvD/B,GAAE,eAAe,EACjB,IAAIsiC,GAAMi/D,GAAoB,UAAUvhG,GAAE,EAAGA,GAAE,EAAG+B,EAAO,OAAO,CAAC,EACjEktC,EAAU,OAAO3M,EAAG,EACpBi3E,GAAwBF,GAAgB,KAAM,EAAI,CACpD,CACF,CACF,CAAC,CACH,EACIoC,GAAyB,UAAY,CACzC,EACI3gF,GAAW,UAAY,CACzB,IAAIukD,GACJ,MAAI,CAACy5B,GAAW/2G,EAAO,QACd,GAETs9E,GAAMt9E,EAAO,UAAU,OAAO,EACvB,CAACs9E,IAAO,CAACA,GAAI,YAAcA,GAAI,aAAe,EACvD,EACA,OAAAq7B,GAA4B,EAC5BjB,GAAwB,EACnBp6G,GAAI,cACPoyE,GAAmB,EAEjBsnC,IACFiB,GAAiB,EACjBI,GAAsB,EACtBW,GAAoB,EACpBO,GAA4B,EAC5Bb,GAA2B,EAC3Bc,GAA0B,EACtBl8G,GAAI,KACN47G,GAAsB,EACtBC,GAAW,EACXG,GAAkB,GAElBtB,GAAU,GAGV16G,GAAI,IAAM,KACZ67G,GAAW,EACXT,GAA2B,GAEzBp7G,GAAI,KACN06G,GAAU,EACVqB,GAAqB,EACrBI,GAAsB,GAEpB1C,IACFmB,GAAoB,EACpBvoC,GAAU,EACV2oC,GAA4C,EAC5CM,GAAuB,EACvBE,GAAoB,EACpBG,GAAoB,EACpBG,GAAwB,EACxBV,GAA2B,GAEtB,CACL,uBAAwBgB,GACxB,SAAU3gF,EACZ,CACF,CAEA,IAAI4gF,GAAkB,SAAUlxG,EAAM,CACpC,OAAOuhB,GAAS,UAAUvhB,CAAI,GAAKuf,EAAY9N,GAAQ,QAAQzR,CAAI,CAAC,CACtE,EACImxG,GAAuB,SAAU55G,EAAQ,CAC3C,IAAIugC,EAAMvgC,EAAO,UAAU,OAAO,EAC9Bi0C,EAAWrJ,GAAc,eAAerK,CAAG,EAC3CkW,EAAS7L,GAAc,aAAarK,CAAG,EAC3C,GAAIqK,GAAc,kBAAkBqJ,CAAQ,EAAG,CAC7C,IAAI1xC,EAAY0xC,EAAS,UAAU,EAC/B0lE,GAAgBp3G,CAAS,GAC3B6yC,GAAY,gBAAgB7yC,CAAS,EAAE,KAAK,SAAUmS,EAAK,CACzD,OAAO6rB,EAAI,SAAS7rB,EAAI,UAAU,EAAGA,EAAI,OAAO,CAAC,CACnD,CAAC,CAEL,CACA,GAAIk2B,GAAc,kBAAkB6L,CAAM,EAAG,CAC3C,IAAIl0C,EAAY0xC,EAAS,UAAU,EAC/B0lE,GAAgBp3G,CAAS,GAC3B6yC,GAAY,eAAe7yC,CAAS,EAAE,KAAK,SAAUmS,EAAK,CACxD,OAAO6rB,EAAI,OAAO7rB,EAAI,UAAU,EAAGA,EAAI,OAAO,CAAC,CACjD,CAAC,CAEL,CACA1U,EAAO,UAAU,OAAO0gD,GAAgB,UAAUngB,CAAG,CAAC,CACxD,EACIs5E,GAAU,SAAU75G,EAAQ,CAC9BA,EAAO,GAAG,QAAS,SAAU/B,EAAG,CAC1BA,EAAE,QAAU,GACd27G,GAAqB55G,CAAM,CAE/B,CAAC,CACH,EAEI85G,GAAuB,SAAU95G,EAAQ,CAC3CA,EAAO,GAAG,QAAS,SAAU/B,EAAG,CAC1B+B,EAAO,IAAI,UAAU/B,EAAE,OAAQ,SAAS,GAC1CA,EAAE,eAAe,CAErB,CAAC,CACH,EACI87G,GAAgB,SAAU/5G,EAAQ,CACpCA,EAAO,OAAO,cAAc,UAAW,SAAUk3B,EAAM,CACrDz9B,GAAKy9B,EAAM,SAAUirB,EAAS,CAC5BA,EAAQ,KAAK,gBAAiBA,EAAQ,KAAK,MAAM,CAAC,EAClDA,EAAQ,KAAK,OAAQ,MAAM,CAC7B,CAAC,CACH,CAAC,EACDniD,EAAO,WAAW,cAAc,UAAW,SAAUk3B,EAAM,CACzDz9B,GAAKy9B,EAAM,SAAUirB,EAAS,CAC5B,IAAIswB,EAAOtwB,EAAQ,KAAK,eAAe,EACvCA,EAAQ,KAAK,OAAQ/pD,EAASq6E,CAAI,EAAIA,EAAO,IAAI,EACjDtwB,EAAQ,KAAK,gBAAiB,IAAI,CACpC,CAAC,CACH,CAAC,CACH,EACI63D,GAAU,SAAUh6G,EAAQ,CAC9B85G,GAAqB95G,CAAM,EAC3B+5G,GAAc/5G,CAAM,CACtB,EAEIi6G,GAAQn/E,GAAW,IACnBo/E,GAAc,SAAUl6G,EAAQoL,EAAM,CACxC,IAAIpQ,EAAOkf,GAAQ,QAAQla,EAAO,OAAO,EAAE,IAAI,EAC3C+I,EAAMmR,GAAQ,QAAQ,OAAO,EACjC+B,GAAIlT,EAAK,OAAQ,UAAU,EAC3B60B,GAAO70B,EAAKmR,GAAQ,SAAS9O,CAAI,CAAC,EAClCwyB,GAAO5iC,EAAM+N,CAAG,CAClB,EACIoxG,GAAe,SAAUn6G,EAAQ,CACnC,IAAIoiD,EAASi3C,GAAUr5F,EAAO,SAAUA,EAAO,MAAM,EACrD,OAAAoiD,EAAO,mBAAmB,0BAA2B,SAAUvuC,EAAOnY,EAAM,CAI1E,QAHIpC,EAAIua,EAAM,OAAQpL,EAClBqT,EAAM9b,EAAO,IACbjK,EAAOqgG,EACJ98F,KAIL,GAHAmP,EAAOoL,EAAMva,CAAC,EACdvD,EAAQ0S,EAAK,KAAK/M,CAAI,EACtB06F,EAAe,YAAc16F,EACzB,CAAC+M,EAAK,WAAW,IAAI2tF,CAAY,EAAG,CACtC,GAAIrgG,EAAM,QAAQ,OAAO,IAAM,GAAKA,EAAM,QAAQ,OAAO,IAAM,EAC7D,SAEE2F,IAAS,SACX3F,EAAQ+lB,EAAI,eAAeA,EAAI,WAAW/lB,CAAK,EAAG0S,EAAK,IAAI,EACtD1S,EAAM,SACTA,EAAQ,MAEV0S,EAAK,KAAK2tF,EAAcrgG,CAAK,EAC7B0S,EAAK,KAAK/M,EAAM3F,CAAK,GACZ2F,IAAS,YAClB+M,EAAK,KAAK2tF,EAAcrgG,CAAK,EAC7B0S,EAAK,KAAK/M,EAAM,IAAI,GAEpB+M,EAAK,KAAK2tF,EAAcp2F,EAAO,WAAWjK,EAAO2F,EAAM+M,EAAK,IAAI,CAAC,CAErE,CAEJ,CAAC,EACD25C,EAAO,cAAc,SAAU,SAAUvuC,EAAO,CAE9C,QADIva,EAAIua,EAAM,OAAQpL,EAAMtQ,EACrBmB,KACLmP,EAAOoL,EAAMva,CAAC,EACdnB,EAAOsQ,EAAK,KAAK,MAAM,GAAK,UACxBtQ,EAAK,QAAQ,MAAM,IAAM,GAC3BsQ,EAAK,KAAK,OAAQ,OAAStQ,CAAI,CAGrC,CAAC,EACDiqD,EAAO,cAAc,SAAU,SAAUvuC,EAAO,CAE9C,QADIva,EAAIua,EAAM,OAAQpL,EACfnP,KACLmP,EAAOoL,EAAMva,CAAC,EACdmP,EAAK,KAAO,EACZA,EAAK,KAAO,WACZA,EAAK,MAAQ,UAAYA,EAAK,MAAQ,IAE1C,CAAC,EACD25C,EAAO,cAAc,0BAA2B,SAAUvuC,EAAO,CAG/D,QAFIva,EAAIua,EAAM,OAAQpL,EAClB8zC,EAAmBv8C,EAAO,OAAO,oBAAoB,EAClD1G,KACLmP,EAAOoL,EAAMva,CAAC,EACVmP,EAAK,QAAQ8zC,CAAgB,GAAK9zC,EAAK,OAAO,IAAI,EAAE,SAAW,IACjEA,EAAK,OAAO,IAAIivF,GAAO,KAAM,CAAC,CAAC,EAAE,WAAa,GAGpD,CAAC,EACMt1C,CACT,EACIg4D,GAAY,SAAUp6G,EAAQ,CAC5BA,EAAO,SAAS,YAClBD,GAAM,iBAAiBC,EAAQ,UAAY,CACzC,IAAIiwE,EACAjwE,EAAO,SAAS,aAAe,GACjCiwE,EAAcjwE,EAEdiwE,EAAcjwE,EAAO,cAAc,IAAIA,EAAO,SAAS,UAAU,EAE9DiwE,EAAY,WACfA,EAAY,MAAM,CAEtB,EAAG,GAAG,CAEV,EACIoqC,GAAa,SAAUr6G,EAAQ,CACjCA,EAAO,0BAA0B,EACjCA,EAAO,YAAc,GACrBA,EAAO,KAAK,MAAM,EAClBA,EAAO,MAAM,EAAI,EACjBA,EAAO,YAAY,CAAE,QAAS,EAAK,CAAC,EACpCA,EAAO,aAAa,yBAA0BA,CAAM,EACpDo6G,GAAUp6G,CAAM,CAClB,EACIs6G,GAAsB,SAAUt6G,EAAQ,CAC1C,OAAOA,EAAO,OAASi6G,GAAM,iBAAmBj6G,EAAO,IAAI,gBAC7D,EACIu6G,GAAkB,SAAUv6G,EAAQw6G,EAAW,CACjD,IAAI11F,EAAW9kB,EAAO,SAClBwxE,EAAYxxE,EAAO,WAAW,EAC9BmB,EAAMnB,EAAO,OAAO,EAAGoB,EAAMq5G,EAC5B31F,EAAS,SACZ9kB,EAAO,WAAW,EAAE,MAAM,WAAaA,EAAO,eAE5C,CAACw6G,GAAa,CAAC11F,EAAS,mBAC1B3jB,EAAI,KAAK,EACTA,EAAI,MAAMnB,EAAO,UAAU,EAC3BmB,EAAI,MAAM,GAER2jB,EAAS,mBACX9kB,EAAO,GAAG,SAAU,UAAY,CAC9B,IAAI06G,EAAS,KAAK,QAAQ,EAC1BT,GAAM,YAAYS,EAAQ,kBAAkB,EAC5CT,GAAM,YAAYS,EAAQ,gBAAgB,EAC1CT,GAAM,UAAUS,EAAQ,kBAAmB,IAAI,CACjD,CAAC,EACDT,GAAM,SAASzoC,EAAW,kBAAkB,EAC5CxxE,EAAO,gBAAkBmB,EAAM2jB,EAAS,kBAAoBvvB,EAAW,SACvEyK,EAAO,cAAgB8kB,EAAS,gBAAkBvvB,EAAW,OAC7DyK,EAAO,YAAcwxE,EACrB1sD,EAAS,iBAAmBA,EAAS,eAAiB,KACtDA,EAAS,UAAY0sD,EAAU,SAAS,YAAY,GAEtDpwE,EAAOpB,EAAO,QAAQ,EACtBoB,EAAK,SAAW,GAChBpB,EAAO,SAAW8kB,EAAS,SACtB9kB,EAAO,WACNA,EAAO,QAAUi6G,GAAM,SAAS74G,EAAM,WAAY,EAAI,IAAM,WAC9DA,EAAK,MAAM,SAAW,YAExBA,EAAK,gBAAkBpB,EAAO,SAAS,yBAA0B,EAAI,GAEvEoB,EAAK,SAAW,GAChBpB,EAAO,aAAe06E,GAAa16E,CAAM,EACzCA,EAAO,OAAS2tB,GAAO7I,CAAQ,EAC/B9kB,EAAO,IAAM86B,GAAW35B,EAAK,CAC3B,YAAa,GACb,cAAenB,EAAO,WACtB,oBAAqBA,EACrB,WAAY8kB,EAAS,uBACrB,aAAcA,EAAS,aACvB,cAAe,GACf,aAAc9kB,EAAO,OAASA,EAAO,QAAQ,EAAI,KACjD,QAAS8kB,EAAS,iBAClB,OAAQ9kB,EAAO,OACf,eAAgBykD,GAAS,wBAAwBzkD,CAAM,EACvD,YAAa,SAAU/B,EAAG,CACxB+B,EAAO,KAAK,YAAa/B,CAAC,CAC5B,CACF,CAAC,EACD+B,EAAO,OAASm6G,GAAan6G,CAAM,EACnCA,EAAO,WAAa87F,GAAgBh3E,EAAU9kB,CAAM,EACpDA,EAAO,UAAYglG,GAAYhlG,EAAO,IAAKA,EAAO,OAAO,EAAGA,EAAO,WAAYA,CAAM,EACrFA,EAAO,UAAYg8C,GAAUh8C,CAAM,EACnCA,EAAO,UAAY41F,GAAU51F,CAAM,EACnCA,EAAO,YAAcwsF,GAAYxsF,CAAM,EACvCA,EAAO,sBAAwB,IAAIu9E,GAAWv9E,CAAM,EACpDA,EAAO,oBAAsBqkF,GAAmBrkF,CAAM,EACtDg6G,GAAQh6G,CAAM,EACd65G,GAAQ75G,CAAM,EACd42G,GAAkB,MAAM52G,CAAM,EAC9B88E,GAAY,MAAM98E,CAAM,EACxBA,EAAO,KAAK,SAAS,EACjB,CAAC8kB,EAAS,oBAAsB,CAACA,EAAS,mBAC5C3jB,EAAI,KAAK,WAAa,GACtB84G,GAAM,UAAU74G,EAAM,aAAc,OAAO,GAE7CpB,EAAO,OAAS62G,GAAO72G,CAAM,EAC7BA,EAAO,KAAK,YAAY,EACpB8kB,EAAS,iBACX1jB,EAAK,IAAM0jB,EAAS,gBAElBA,EAAS,SACX1jB,EAAK,MAAM,WAAa,UAEtB0jB,EAAS,SACX9kB,EAAO,GAAG,mBAAoB,SAAU/B,EAAG,CACzC0T,GAAM,KAAKmT,EAAS,QAAS,SAAU/a,EAAS,CAC9C9L,EAAE,QAAUA,EAAE,QAAQ,QAAQ8L,EAAS,SAAUoG,EAAK,CACpD,MAAO,qBAAuB,OAAOA,CAAG,EAAI,KAC9C,CAAC,CACH,CAAC,CACH,CAAC,EAEHnQ,EAAO,GAAG,aAAc,UAAY,CAClCA,EAAO,UAAUA,EAAO,QAAQ,CAAC,CACnC,CAAC,EACDA,EAAO,KAAK,CACV,QAAS,GACT,OAAQ,MACV,CAAC,EACDA,EAAO,aAAeA,EAAO,WAAW,CAAE,OAAQ,KAAM,CAAC,EACzDA,EAAO,GAAG,kCAAmC,SAAU/B,EAAG,CACxD+B,EAAO,UAAY/B,EAAE,OAAS,kBAChC,CAAC,EACG+B,EAAO,cAAc,OAAS,IAChCy6G,EAAiB,GACjB9oG,GAAM,KAAK3R,EAAO,cAAe,SAAUkU,EAAO,CAChDumG,GAAkBvmG,EAAQ;AAAA,CAC5B,CAAC,EACDlU,EAAO,IAAI,SAASy6G,CAAc,GAEpCH,GAAoBt6G,CAAM,EAAE,QAAQA,EAAO,WAAY,SAAUwG,EAAG,CAClE6zG,GAAWr6G,CAAM,CACnB,EAAG,SAAUumB,EAAM,CACjB8zF,GAAWr6G,CAAM,CACnB,CAAC,EACG8kB,EAAS,eACXo1F,GAAYl6G,EAAQ8kB,EAAS,aAAa,CAE9C,EACI61F,GAAkB,CAAE,gBAAiBJ,EAAgB,EAErDK,GAAQ9/E,GAAW,IACnB+/E,GAAc,SAAU76G,EAAQ86G,EAAK,CACvC,GAAIvlH,EAAW,SAAS,SAAWA,EAAW,OAAO,SAAS,UAAY+H,GAAI,IAAMA,GAAI,GAAK,GAAI,CAC/F,IAAIy9G,EAAW7hC,GAAK,KAAK,KAAK,EAC9Bl5E,EAAO+6G,CAAQ,EAAI,UAAY,CAC7BJ,GAAgB,gBAAgB36G,CAAM,CACxC,EACA,IAAIg7G,EAAiB,2DAAkEzlH,EAAW,SAAS,OAAS,yCAAgDyK,EAAO,GAAK,wDAA+D+6G,EAAW,cAC1P,OAAAH,GAAM,UAAUE,EAAK,MAAOE,CAAc,EACnC,EACT,CACA,MAAO,EACT,EACIC,GAAkB,SAAUrwC,EAAQ,CACtC,IAAIswC,EAAmB,OAAOtwC,GAAW,SAAWA,EAAS,KAAOA,EACpE,OAAOswC,GAAsC,EAC/C,EACIC,GAAsB,SAAUhkH,EAAIikH,EAAOxwC,EAAQywC,EAAa,CAClE,IAAIC,EAASphG,GAAQ,QAAQ,QAAQ,EACrC,OAAAgC,GAAOo/F,EAAQD,CAAW,EAC1Bn/F,GAAOo/F,EAAQ,CACb,GAAInkH,EAAK,OACT,YAAa,IACb,kBAAmB,OACnB,MAAOikH,CACT,CAAC,EACD3+F,GAAS6+F,EAAQ,CACf,MAAO,OACP,OAAQL,GAAgBrwC,CAAM,EAC9B,QAAS,OACX,CAAC,EACM0wC,CACT,EACIC,GAAgB,SAAUv7G,EAAQ,CACpC,IAAIw7G,EAAQC,EAAWC,EACvB,OAAAA,EAAaj3D,GAAS,WAAWzkD,CAAM,EAAI,eACvCykD,GAAS,mBAAmBzkD,CAAM,IAAMA,EAAO,kBACjD07G,GAAc,eAAiB17G,EAAO,gBAAgB,OAAO,EAAI,QAEnE07G,GAAc,wEACdF,EAAS/2D,GAAS,UAAUzkD,CAAM,EAClCy7G,EAAYh3D,GAAS,aAAazkD,CAAM,EACpCykD,GAAS,yBAAyBzkD,CAAM,IAC1C07G,GAAc,uDAAyDj3D,GAAS,yBAAyBzkD,CAAM,EAAI,QAErH07G,GAAc,oBAAsBF,EAAS,6BAA+BC,EAAY,cAAgBz7G,EAAO,GAAK,uBAC7G07G,CACT,EACIC,GAAe,SAAU37G,EAAQhJ,EAAG,CACtC,IAAIokH,EAAQp7G,EAAO,cAAc,UAAU,wFAA6F,EACpI86G,EAAMK,GAAoBn7G,EAAO,GAAIo7G,EAAOpkH,EAAE,OAAQytD,GAAS,eAAezkD,CAAM,CAAC,EAAE,IAAI,EAC/F86G,EAAI,OAAS,UAAY,CACvBA,EAAI,OAAS,KACb96G,EAAO,KAAK,MAAM,CACpB,EACA,IAAI47G,EAAkBf,GAAY76G,EAAQ86G,CAAG,EAC7C,OAAA96G,EAAO,qBAAuBhJ,EAAE,gBAChCgJ,EAAO,cAAgB86G,EACvB96G,EAAO,WAAau7G,GAAcv7G,CAAM,EACxC46G,GAAM,IAAI5jH,EAAE,gBAAiB8jH,CAAG,EACzBc,CACT,EACIC,GAAS,SAAU77G,EAAQ87G,EAAS,CACtC,IAAIF,EAAkBD,GAAa37G,EAAQ87G,CAAO,EAC9CA,EAAQ,kBACVlB,GAAM,IAAIkB,EAAQ,eAAe,EAAE,MAAM,QAAU97G,EAAO,WAC1DA,EAAO,OAAS46G,GAAM,SAASkB,EAAQ,eAAe,GAExD97G,EAAO,WAAW,EAAE,MAAM,QAAU,OACpC46G,GAAM,UAAU56G,EAAO,GAAI,cAAe,MAAM,EAC3C47G,GACHjB,GAAgB,gBAAgB36G,CAAM,CAE1C,EACI+7G,GAAa,CAAE,KAAMF,EAAO,EAE5BG,GAAQlhF,GAAW,IACnBmhF,GAAa,SAAUj8G,EAAQk8G,EAAoBvnC,EAAQ,CAC7D,IAAIwnC,EAAS/mC,GAAgB,IAAIT,CAAM,EACnC13C,EAAYm4C,GAAgB,KAAKT,CAAM,GAAK30E,EAAO,gBAAgB,QAAQ,MAAO,EAAE,EAExF,GADA20E,EAAShjE,GAAM,KAAKgjE,CAAM,EACtBwnC,GAAUxqG,GAAM,QAAQuqG,EAAoBvnC,CAAM,IAAM,GAAI,CAI9D,GAHAhjE,GAAM,KAAKyjE,GAAgB,aAAaT,CAAM,EAAG,SAAU73C,EAAK,CAC9Dm/E,GAAWj8G,EAAQk8G,EAAoBp/E,CAAG,CAC5C,CAAC,EACG98B,EAAO,QAAQ20E,CAAM,EACvB,OAEF,GAAI,CACF,IAAIynC,EAAiB,IAAID,EAAOn8G,EAAQi9B,EAAWj9B,EAAO,CAAC,EAC3DA,EAAO,QAAQ20E,CAAM,EAAIynC,EACrBA,EAAe,OACjBA,EAAe,KAAKp8G,EAAQi9B,CAAS,EACrCi/E,EAAmB,KAAKvnC,CAAM,EAElC,OAAS12E,EAAG,CACVk3E,GAAc,gBAAgBn1E,EAAQ20E,EAAQ12E,CAAC,CACjD,CACF,CACF,EACIo+G,GAAmB,SAAU3gH,EAAM,CACrC,OAAOA,EAAK,QAAQ,MAAO,EAAE,CAC/B,EACI4gH,GAAc,SAAUt8G,EAAQ,CAClC,IAAIk8G,EAAqB,CAAC,EAC1BvqG,GAAM,KAAK3R,EAAO,SAAS,QAAQ,MAAM,MAAM,EAAG,SAAUtE,EAAM,CAChEugH,GAAWj8G,EAAQk8G,EAAoBG,GAAiB3gH,CAAI,CAAC,CAC/D,CAAC,CACH,EACI6gH,GAAY,SAAUv8G,EAAQ,CAChC,IAAIw8G,EACArqC,EAAQnyE,EAAO,SAAS,MACxB5H,EAAS+5E,CAAK,GAChBnyE,EAAO,SAAS,MAAQq8G,GAAiBlqC,CAAK,EAC9CqqC,EAAQnnC,GAAa,IAAIlD,CAAK,EAC9BnyE,EAAO,MAAQ,IAAIw8G,EAAMx8G,EAAQq1E,GAAa,KAAKlD,CAAK,CAAC,EACrDnyE,EAAO,MAAM,MACfA,EAAO,MAAM,KAAKA,EAAQq1E,GAAa,KAAKlD,CAAK,GAAKnyE,EAAO,gBAAgB,QAAQ,MAAO,EAAE,EAAGA,EAAO,CAAC,GAG3GA,EAAO,MAAQ,CAAC,CAEpB,EACIy8G,GAAwB,SAAUz8G,EAAQ,CAC5C,IAAI62B,EAAGC,EAAG4lF,EAAWC,EAAI9lG,EACrBiO,EAAW9kB,EAAO,SAClB+T,EAAM/T,EAAO,WAAW,EAC5B,OAAA62B,EAAI/R,EAAS,OAASk3F,GAAM,SAASjoG,EAAK,OAAO,GAAK,OACtD+iB,EAAIhS,EAAS,QAAUk3F,GAAM,SAASjoG,EAAK,QAAQ,GAAKA,EAAI,aAC5D2oG,EAAY53F,EAAS,YAAc,IACnC63F,EAAK,mBACDA,EAAG,KAAK,GAAK9lF,CAAC,IAChBA,EAAI,KAAK,IAAI,SAASA,EAAG,EAAE,EAAG,GAAG,GAE/B8lF,EAAG,KAAK,GAAK7lF,CAAC,IAChBA,EAAI,KAAK,IAAI,SAASA,EAAG,EAAE,EAAG4lF,CAAS,GAEzC7lG,EAAO7W,EAAO,MAAM,SAAS,CAC3B,WAAY+T,EACZ,MAAO8iB,EACP,OAAQC,EACR,WAAYhS,EAAS,YACrB,YAAaA,EAAS,YACxB,CAAC,EACIA,EAAS,mBACZgS,GAAKjgB,EAAK,cAAgBigB,IAAM,OAAOA,GAAM,SAAWjgB,EAAK,aAAe,EAAI,IAC5EigB,EAAI4lF,IACN5lF,EAAI4lF,IAGR7lG,EAAK,OAASigB,EACPjgB,CACT,EACI+lG,GAAsB,SAAU58G,EAAQ,CAC1C,IAAI6W,EACA9C,EAAM/T,EAAO,WAAW,EAC5B,OAAA6W,EAAO7W,EAAO,SAAS,MAAMA,EAAQ+T,CAAG,EACpC8C,EAAK,gBAAgB,WACvBA,EAAK,gBAAgB,GAAKA,EAAK,gBAAgB,IAAM7W,EAAO,GAAK,WAE/D6W,EAAK,iBAAmBA,EAAK,gBAAgB,WAC/CA,EAAK,gBAAgB,GAAKA,EAAK,gBAAgB,IAAM7W,EAAO,GAAK,oBAEnE6W,EAAK,OAASA,EAAK,aAAeA,EAAK,aAAe9C,EAAI,aACnD8C,CACT,EACIgmG,GAAyB,SAAU19G,EAAS,CAC9C,MAAO,CACL,gBAAiBA,EACjB,gBAAiBA,CACnB,CACF,EACI29G,GAAyB,SAAUp7B,EAAe,CACpD,IAAIq7B,EAAkBf,GAAM,OAAO,KAAK,EACxC,OAAAA,GAAM,YAAYe,EAAiBr7B,CAAa,EACzCm7B,GAAuBE,CAAe,CAC/C,EACIC,GAAmB,SAAUh9G,EAAQ,CACvC,IAAI0hF,EAAgB1hF,EAAO,WAAW,EACtC,OAAOA,EAAO,OAAS68G,GAAuB,IAAI,EAAIC,GAAuBp7B,CAAa,CAC5F,EACIu7B,GAAgB,SAAUj9G,EAAQ,CACpC,IAAI8kB,EAAW9kB,EAAO,SAAU+T,EAAM/T,EAAO,WAAW,EAExD,OADAA,EAAO,WAAa+T,EAAI,MAAM,QAC1B3b,EAAS0sB,EAAS,KAAK,EAClB23F,GAAsBz8G,CAAM,EAC1BvH,EAAWqsB,EAAS,KAAK,EAC3B83F,GAAoB58G,CAAM,EAE1Bg9G,GAAiBh9G,CAAM,CAElC,EACIk9G,GAAS,SAAUl9G,EAAQ,CAC7B,IAAI8kB,EAAW9kB,EAAO,SAClB+T,EAAM/T,EAAO,WAAW,EACxB87G,EAcJ,OAbA97G,EAAO,IAAM8kB,EAAS,QAAU9kB,EAAO,cAAc,KAAK,IAC1DA,EAAO,cAAc,KAAK,QAAQ8kB,EAAS,QAAQ,EACnDA,EAAS,WAAaA,EAAS,YAAck3F,GAAM,UAAUjoG,EAAK,aAAc/T,EAAO,QAAQ,qBAAqB,CAAC,EACrHA,EAAO,KAAK,eAAe,EAC3Bu8G,GAAUv8G,CAAM,EAChBs8G,GAAYt8G,CAAM,EAClB87G,EAAUmB,GAAcj9G,CAAM,EAC9BA,EAAO,gBAAkB87G,EAAQ,gBAAkBA,EAAQ,gBAAkB,KACzEh3F,EAAS,aACXnT,GAAM,KAAKA,GAAM,QAAQmT,EAAS,WAAW,EAAG,SAAU5oB,EAAG,CAC3D8D,EAAO,WAAW,KAAKA,EAAO,gBAAgB,WAAW9D,CAAC,CAAC,CAC7D,CAAC,EAEC4oB,EAAS,iBACJ61F,GAAgB,gBAAgB36G,CAAM,EAEtC+7G,GAAW,KAAK/7G,EAAQ87G,CAAO,CAE1C,EACIqB,GAAO,CAAE,KAAMD,EAAO,EAEtBE,GAAQtiF,GAAW,IACnBuiF,GAAoB,SAAU3hH,EAAM,CACtC,OAAOA,EAAK,OAAO,CAAC,IAAM,GAC5B,EACI4hH,GAAe,SAAUC,EAAcv9G,EAAQ,CACjD,IAAI8kB,EAAW9kB,EAAO,SAClB8kB,EAAS,UAAYA,EAAS,WAAa,MAAQ,CAACA,EAAS,eAC/DA,EAAS,aAAe9kB,EAAO,cAAc,QAAU,UAAY8kB,EAAS,SAAW,OAErFA,EAAS,cAAgB,CAAC9kB,EAAO,cAAc,KAAK,KAAK8kB,EAAS,QAAQ,GAC5Ey4F,EAAa,IAAIz4F,EAAS,YAAY,CAE1C,EACI04F,GAAY,SAAUD,EAAcv9G,EAAQ4yB,EAAQ1zB,EAAU,CAChE,IAAI4lB,EAAW9kB,EAAO,SAAUmyE,EAAQrtD,EAAS,MACjD,GAAI1sB,EAAS+5E,CAAK,EAAG,CACnB,GAAI,CAACkrC,GAAkBlrC,CAAK,GAAK,CAACkD,GAAa,KAAK,eAAelD,CAAK,EAAG,CACzE,IAAIsrC,EAAW34F,EAAS,UACpB24F,EACFpoC,GAAa,KAAKlD,EAAOnyE,EAAO,gBAAgB,WAAWy9G,CAAQ,CAAC,EAEpEpoC,GAAa,KAAKlD,EAAO,UAAYA,EAAQ,SAAWv/C,EAAS,KAAK,CAE1E,CACA2qF,EAAa,UAAU,UAAY,CACjCloC,GAAa,QAAQlD,EAAOjzE,CAAQ,CACtC,CAAC,CACH,MACEA,EAAS,CAEb,EACIw+G,GAAc,SAAU54F,EAAU8N,EAAQ,CACxCjhB,GAAM,QAAQmT,EAAS,OAAO,IAChCA,EAAS,QAAUA,EAAS,QAAQ,KAAK,GAAG,GAE9CnT,GAAM,KAAKmT,EAAS,iBAAkB,SAAUhpB,EAAKJ,EAAM,CACzD05E,GAAgB,KAAK15E,EAAMI,CAAG,EAC9BgpB,EAAS,SAAW,IAAMppB,CAC5B,CAAC,EACDiW,GAAM,KAAKmT,EAAS,QAAQ,MAAM,MAAM,EAAG,SAAU6vD,EAAQ,CAE3D,GADAA,EAAShjE,GAAM,KAAKgjE,CAAM,EACtBA,GAAU,CAACS,GAAgB,KAAKT,CAAM,EACxC,GAAI0oC,GAAkB1oC,CAAM,EAAG,CAC7BA,EAASA,EAAO,OAAO,EAAGA,EAAO,MAAM,EACvC,IAAIr4C,EAAe84C,GAAgB,aAAaT,CAAM,EACtDhjE,GAAM,KAAK2qB,EAAc,SAAUQ,EAAK,CACtC,IAAI+wC,EAAkB,CACpB,OAAQ,WACR,SAAU/wC,EACV,OAAQ,UAAYlK,EAAS,KAC/B,EACAkK,EAAMs4C,GAAgB,UAAUvH,EAAiB/wC,CAAG,EACpDs4C,GAAgB,KAAKt4C,EAAI,SAAUA,CAAG,CACxC,CAAC,CACH,MACEs4C,GAAgB,KAAKT,EAAQ,CAC3B,OAAQ,WACR,SAAUA,EACV,OAAQ,UAAY/hD,EAAS,KAC/B,CAAC,CAGP,CAAC,CACH,EACIkJ,GAAc,SAAU97B,EAAQ4yB,EAAQ,CAC1C,IAAI2qF,EAAepiF,GAAa,aAChCqiF,GAAUD,EAAcv9G,EAAQ4yB,EAAQ,UAAY,CAClD0qF,GAAaC,EAAcv9G,CAAM,EACjC09G,GAAY19G,EAAO,SAAU4yB,CAAM,EACnC2qF,EAAa,UAAU,UAAY,CAC5Bv9G,EAAO,SACVm9G,GAAK,KAAKn9G,CAAM,CAEpB,EAAGA,EAAQ,SAAUumB,EAAM,CACzB4uD,GAAc,gBAAgBn1E,EAAQumB,EAAK,CAAC,CAAC,EACxCvmB,EAAO,SACVm9G,GAAK,KAAKn9G,CAAM,CAEpB,CAAC,CACH,CAAC,CACH,EACI29G,GAAS,SAAU39G,EAAQ,CAC7B,IAAI8kB,EAAW9kB,EAAO,SAAU7I,EAAK6I,EAAO,GACxCyB,EAAe,UAAY,CAC7B27G,GAAM,OAAO7nH,EAAW,OAAQ,QAASkM,CAAY,EACrDzB,EAAO,OAAO,CAChB,EACA,GAAI,CAAC4B,GAAW,MAAM,UAAW,CAC/Bw7G,GAAM,KAAK7nH,EAAW,OAAQ,QAASkM,CAAY,EACnD,MACF,CACA,GAAKzB,EAAO,WAAW,GAGlB1C,GAAI,gBAGT,CAAKwnB,EAAS,OAIZ9kB,EAAO,OAAS,IAHhBA,EAAO,cAAgBA,EAAO,WAAW,EAAE,MAAM,WACjDA,EAAO,WAAW,EAAE,MAAM,WAAa,UAIzC,IAAI49G,EAAO59G,EAAO,WAAW,EAAE,MAAQo9G,GAAM,UAAUjmH,EAAI,MAAM,EAC7DymH,IACF59G,EAAO,YAAc49G,EACjB94F,EAAS,cAAgB,CAAC,kBAAkB,KAAK9kB,EAAO,WAAW,EAAE,QAAQ,IAC/Eo9G,GAAM,YAAYA,GAAM,OAAO,QAAS,CACtC,KAAM,SACN,KAAMjmH,CACR,CAAC,EAAGA,CAAE,EACN6I,EAAO,eAAiB,IAE1BA,EAAO,kBAAoB,SAAU/B,EAAG,CACtC+B,EAAO,KAAK/B,EAAE,KAAMA,CAAC,CACvB,EACAm/G,GAAM,KAAKQ,EAAM,eAAgB59G,EAAO,iBAAiB,EACzDA,EAAO,GAAG,QAAS,UAAY,CAC7BA,EAAO,WAAWA,EAAO,aAAc,CAAE,OAAQ,KAAM,CAAC,CAC1D,CAAC,EACG8kB,EAAS,cAAgB,CAAC84F,EAAK,OAAO,UAAY,CAACA,EAAK,OAAO,QAAU,CAACA,EAAK,gBACjFA,EAAK,cAAgBA,EAAK,OAC1BA,EAAK,OAAS,UAAY,CACxB,OAAA59G,EAAO,cAAc,YAAY,EACjCA,EAAO,SAAS,EAAK,EACd49G,EAAK,cAAcA,CAAI,CAChC,IAGJ59G,EAAO,cAAgB+yE,GAAc/yE,CAAM,EAC3CA,EAAO,oBAAsBgyE,GAAoBhyE,CAAM,EACnD8kB,EAAS,WAAa,OACxB9kB,EAAO,GAAG,aAAc,SAAU/B,EAAG,CAC/BA,EAAE,OACJA,EAAE,QAAUm/G,GAAM,OAAOn/G,EAAE,OAAO,EAEtC,CAAC,EAEC6mB,EAAS,yBACX9kB,EAAO,GAAG,SAAU,UAAY,CAC1BA,EAAO,aACTA,EAAO,KAAK,CAEhB,CAAC,EAEC8kB,EAAS,qBACX9kB,EAAO,cAAgB,UAAY,CAC7BA,EAAO,aAAe,CAACA,EAAO,WAAa,CAACA,EAAO,SAAS,GAC9DA,EAAO,KAAK,CACV,OAAQ,MACR,UAAW,GACX,UAAW,EACb,CAAC,CAEL,EACAA,EAAO,cAAc,GAAG,eAAgBA,EAAO,aAAa,GAE9DA,EAAO,cAAc,IAAIA,CAAM,EAC/B87B,GAAY97B,EAAQA,EAAO,MAAM,EACnC,EACI69G,GAAS,CAAE,OAAQF,EAAO,EAE1BG,GAAQ,SAAU99G,EAAQtE,EAAMopB,EAAU,CAC5C,IAAIi5F,EAAW/9G,EAAO,SAAWA,EAAO,SAAW,CAAC,EACpD+9G,EAAS,KAAK,CACZ,KAAMriH,EACN,SAAUopB,CACZ,CAAC,EACD9kB,EAAO,SAAW+9G,CACpB,EACIC,GAAU,CAAE,IAAKF,EAAM,EAEvBG,GAAStsG,GAAM,KAAMusG,GAASvsG,GAAM,KACpCwsG,GAAa,uGAAuG,MAAM,GAAG,EAC7HC,GAAgB,CAClB,IAAK,GACL,KAAM,GACN,MAAO,IACP,OAAQ,EACV,EACIC,GAAM,SAAUviH,EAAKgpB,EAAU,CACjC,IAAIptB,EAAO,KACP4mH,EAASzhF,EAIb,GAHA/gC,EAAMoiH,GAAOpiH,CAAG,EAChBgpB,EAAWptB,EAAK,SAAWotB,GAAY,CAAC,EACxCw5F,EAAUx5F,EAAS,SACf,yBAAyB,KAAKhpB,CAAG,GAAK,QAAQ,KAAKA,CAAG,EAAG,CAC3DpE,EAAK,OAASoE,EACd,MACF,CACA,IAAIyiH,EAAqBziH,EAAI,QAAQ,IAAI,IAAM,EAC3CA,EAAI,QAAQ,GAAG,IAAM,GAAK,CAACyiH,IAC7BziH,GAAOwiH,GAAUA,EAAQ,UAAY,QAAmB,cAAgBxiH,GAErE,iBAAiB,KAAKA,CAAG,IAC5B+gC,EAAU/X,EAAS,SAAWA,EAAS,SAAS,KAAO,IAAIu5F,GAAI9oH,EAAW,SAAS,SAAS,IAAI,EAAE,UAC9FuvB,EAAS,SAAS,UAAY,GAChChpB,EAAM,aAAepE,EAAK,UAAUmlC,EAAS/gC,CAAG,GAEhDA,EAAM,oBAAoB,KAAKA,CAAG,EAClCA,GAAOwiH,GAAWA,EAAQ,UAAY,QAAU,cAAgB5mH,EAAK,UAAUmlC,EAAS/gC,EAAI,CAAC,CAAC,EAAIA,EAAI,CAAC,IAG3GA,EAAMA,EAAI,QAAQ,MAAO,UAAU,EACnCA,EAAM,mMAAmM,KAAKA,CAAG,EACjNmiH,GAAOE,GAAY,SAAUvmH,EAAG0B,EAAG,CACjC,IAAIklH,EAAO1iH,EAAIxC,CAAC,EACZklH,IACFA,EAAOA,EAAK,QAAQ,cAAe,IAAI,GAEzC9mH,EAAKE,CAAC,EAAI4mH,CACZ,CAAC,EACGF,IACG5mH,EAAK,WACRA,EAAK,SAAW4mH,EAAQ,UAErB5mH,EAAK,WACRA,EAAK,SAAW4mH,EAAQ,UAEtB,CAAC5mH,EAAK,MAAQA,EAAK,OAAS,aAC9BA,EAAK,KAAO4mH,EAAQ,OAElB,CAAC5mH,EAAK,MAAQA,EAAK,OAAS,cAC9BA,EAAK,KAAO4mH,EAAQ,MAEtB5mH,EAAK,OAAS,IAEZ6mH,IACF7mH,EAAK,SAAW,GAEpB,EACA2mH,GAAI,UAAY,CACd,QAAS,SAAUjjH,EAAM,CACvB,IAAI1D,EAAO,KACX0D,EAAO,mBAAmB,KAAKA,CAAI,EACnC1D,EAAK,KAAO0D,EAAK,CAAC,EAClB1D,EAAK,UAAY0D,EAAK,CAAC,EACvB1D,EAAK,KAAO0D,EAAK,CAAC,EAClB1D,EAAK,OAAS,GACdA,EAAK,OAAO,CACd,EACA,WAAY,SAAUggF,EAAK,CACzB,IAAIhgF,EAAO,KACP4C,EACJ,GAAIo9E,IAAQ,KACV,OAAOA,EAGT,GADAA,EAAM,IAAI2mC,GAAI3mC,EAAK,CAAE,SAAUhgF,CAAK,CAAC,EACjCggF,EAAI,OAAS,YAAchgF,EAAK,OAASggF,EAAI,MAAQA,EAAI,MAAQhgF,EAAK,OAASggF,EAAI,MAAQhgF,EAAK,WAAaggF,EAAI,UAAYA,EAAI,WAAa,GAChJ,OAAOA,EAAI,OAAO,EAEpB,IAAI+mC,EAAK/mH,EAAK,OAAO,EAAGgnH,EAAKhnC,EAAI,OAAO,EACxC,OAAI+mC,IAAOC,GAAMD,EAAG,OAAOA,EAAG,OAAS,CAAC,IAAM,KAAOA,EAAG,OAAO,EAAGA,EAAG,OAAS,CAAC,IAAMC,EAC5ED,GAETnkH,EAAS5C,EAAK,UAAUA,EAAK,KAAMggF,EAAI,IAAI,EACvCA,EAAI,QACNp9E,GAAU,IAAMo9E,EAAI,OAElBA,EAAI,SACNp9E,GAAU,IAAMo9E,EAAI,QAEfp9E,EACT,EACA,WAAY,SAAUo9E,EAAKinC,EAAQ,CACjC,OAAAjnC,EAAM,IAAI2mC,GAAI3mC,EAAK,CAAE,SAAU,IAAK,CAAC,EAC9BA,EAAI,OAAOinC,GAAU,KAAK,aAAajnC,CAAG,CAAC,CACpD,EACA,aAAc,SAAUA,EAAK,CAC3B,GAAI,KAAK,MAAQA,EAAI,MAAQ,KAAK,UAAYA,EAAI,SAAU,CAC1D,GAAI,KAAK,MAAQA,EAAI,KACnB,MAAO,GAET,IAAIknC,EAAcR,GAAc,KAAK,QAAQ,EAC7C,GAAIQ,IAAgB,KAAK,MAAQA,KAAiBlnC,EAAI,MAAQknC,GAC5D,MAAO,EAEX,CACA,MAAO,EACT,EACA,UAAW,SAAU1yG,EAAM9Q,EAAM,CAC/B,IAAIkV,EAAOuuG,EAAa,EAAG1vG,EAAM,GAAI7V,EAAGgJ,EAIxC,GAHA4J,EAAOA,EAAK,UAAU,EAAGA,EAAK,YAAY,GAAG,CAAC,EAC9CA,EAAOA,EAAK,MAAM,GAAG,EACrBoE,EAAQlV,EAAK,MAAM,GAAG,EAClB8Q,EAAK,QAAUoE,EAAM,QACvB,IAAKhX,EAAI,EAAGgJ,EAAI4J,EAAK,OAAQ5S,EAAIgJ,EAAGhJ,IAClC,GAAIA,GAAKgX,EAAM,QAAUpE,EAAK5S,CAAC,IAAMgX,EAAMhX,CAAC,EAAG,CAC7CulH,EAAavlH,EAAI,EACjB,KACF,EAGJ,GAAI4S,EAAK,OAASoE,EAAM,QACtB,IAAKhX,EAAI,EAAGgJ,EAAIgO,EAAM,OAAQhX,EAAIgJ,EAAGhJ,IACnC,GAAIA,GAAK4S,EAAK,QAAUA,EAAK5S,CAAC,IAAMgX,EAAMhX,CAAC,EAAG,CAC5CulH,EAAavlH,EAAI,EACjB,KACF,EAGJ,GAAIulH,IAAe,EACjB,OAAOzjH,EAET,IAAK9B,EAAI,EAAGgJ,EAAI4J,EAAK,QAAU2yG,EAAa,GAAIvlH,EAAIgJ,EAAGhJ,IACrD6V,GAAO,MAET,IAAK7V,EAAIulH,EAAa,EAAGv8G,EAAIgO,EAAM,OAAQhX,EAAIgJ,EAAGhJ,IAC5CA,IAAMulH,EAAa,EACrB1vG,GAAO,IAAMmB,EAAMhX,CAAC,EAEpB6V,GAAOmB,EAAMhX,CAAC,EAGlB,OAAO6V,CACT,EACA,UAAW,SAAUjD,EAAM9Q,EAAM,CAC/B,IAAI9B,EAAGwlH,EAAK,EAAG9nH,EAAI,CAAC,EAAGkpG,EAAI6e,EAU3B,IATA7e,EAAK,MAAM,KAAK9kG,CAAI,EAAI,IAAM,GAC9B8Q,EAAOA,EAAK,MAAM,GAAG,EACrB9Q,EAAOA,EAAK,MAAM,GAAG,EACrB6iH,GAAO/xG,EAAM,SAAUoP,EAAG,CACpBA,GACFtkB,EAAE,KAAKskB,CAAC,CAEZ,CAAC,EACDpP,EAAOlV,EACFsC,EAAI8B,EAAK,OAAS,EAAGpE,EAAI,CAAC,EAAGsC,GAAK,EAAGA,IACxC,GAAI,EAAA8B,EAAK9B,CAAC,EAAE,SAAW,GAAK8B,EAAK9B,CAAC,IAAM,KAGxC,IAAI8B,EAAK9B,CAAC,IAAM,KAAM,CACpBwlH,IACA,QACF,CACA,GAAIA,EAAK,EAAG,CACVA,IACA,QACF,CACA9nH,EAAE,KAAKoE,EAAK9B,CAAC,CAAC,EAEhB,OAAAA,EAAI4S,EAAK,OAAS4yG,EACdxlH,GAAK,EACPylH,EAAU/nH,EAAE,QAAQ,EAAE,KAAK,GAAG,EAE9B+nH,EAAU7yG,EAAK,MAAM,EAAG5S,CAAC,EAAE,KAAK,GAAG,EAAI,IAAMtC,EAAE,QAAQ,EAAE,KAAK,GAAG,EAE/D+nH,EAAQ,QAAQ,GAAG,IAAM,IAC3BA,EAAU,IAAMA,GAEd7e,GAAM6e,EAAQ,YAAY,GAAG,IAAMA,EAAQ,OAAS,IACtDA,GAAW7e,GAEN6e,CACT,EACA,OAAQ,SAAUC,EAAa,CAC7B,IAAI1nH,EACAI,EAAO,KACX,OAAI,CAACA,EAAK,QAAUsnH,KAClB1nH,EAAI,GACC0nH,IACCtnH,EAAK,SACPJ,GAAKI,EAAK,SAAW,MAErBJ,GAAK,KAEHI,EAAK,WACPJ,GAAKI,EAAK,SAAW,KAEnBA,EAAK,OACPJ,GAAKI,EAAK,MAERA,EAAK,OACPJ,GAAK,IAAMI,EAAK,OAGhBA,EAAK,OACPJ,GAAKI,EAAK,MAERA,EAAK,QACPJ,GAAK,IAAMI,EAAK,OAEdA,EAAK,SACPJ,GAAK,IAAMI,EAAK,QAElBA,EAAK,OAASJ,GAETI,EAAK,MACd,CACF,EACA2mH,GAAI,aAAe,SAAU3mC,EAAK,CAChC,IAAIv/E,EAAM+L,EACV,OAAAwzE,EAAM,mBAAmBA,CAAG,EAAE,MAAM,GAAG,EACvCxzE,EAAU,eAAe,KAAKwzE,EAAI,CAAC,CAAC,EAChCxzE,IACF/L,EAAO+L,EAAQ,CAAC,GAEX,CACL,KAAM/L,EACN,KAAMu/E,EAAI,CAAC,CACb,CACF,EACA2mC,GAAI,mBAAqB,SAAUY,EAAK,CACtC,IAAIpiF,EACJ,OAAIoiF,EAAI,SAAS,QAAQ,MAAM,IAAM,GAAKA,EAAI,WAAa,QACzDpiF,EAAUoiF,EAAI,KAEdpiF,EAAUoiF,EAAI,SAAW,KAAOA,EAAI,KAAOA,EAAI,SAE7C,yBAAyB,KAAKpiF,CAAO,IACvCA,EAAUA,EAAQ,QAAQ,WAAY,EAAE,EAAE,QAAQ,gBAAiB,EAAE,EAChE,UAAU,KAAKA,CAAO,IACzBA,GAAW,MAGRA,CACT,EAEA,IAAIqiF,GAAgB,OAChBC,GAAoB,SAAUn/G,EAAQqS,EAAM,CAC9C,IAAI2yB,EAAYyf,GAAS,mBAAmBzkD,CAAM,EAC9Co/G,EAAc,IAAI,OAAO,MAAQp6E,EAAY,+CAAiDA,EAAY;AAAA;AAAA,KAA4B,EAC1I,OAAO3yB,EAAK,QAAQ+sG,EAAa,EAAE,CACrC,EACIC,GAAqB,SAAUr/G,EAAQpK,EAAMwL,EAAM,CACrD,IAAI+S,EAOJ,GANAve,EAAK,OAASA,EAAK,OAASA,EAAK,OAASspH,GAC1CtpH,EAAK,IAAM,GACXA,EAAK,SAAW,GACXA,EAAK,WACRoK,EAAO,KAAK,mBAAoBpK,CAAI,EAElCA,EAAK,SAAW,MAClBue,EAAUxC,GAAM,KAAK+3E,GAAS,aAAa1pF,EAAO,WAAYoB,EAAK,SAAS,CAAC,UACpExL,EAAK,SAAW,OACzBue,EAAU4vB,GAAK,KAAK3iC,EAAK,WAAaA,EAAK,WAAW,MACjD,IAAIxL,EAAK,SAAW,OACzB,OAAOoK,EAAO,WAAW,UAAUoB,EAAMxL,CAAI,EAE7Cue,EAAUgrG,GAAkBn/G,EAAQA,EAAO,WAAW,UAAUoB,EAAMxL,CAAI,CAAC,EAE7E,OAAIA,EAAK,SAAW,QAAU,CAAC0yB,GAAoBpO,GAAQ,QAAQ9Y,CAAI,CAAC,EACtExL,EAAK,QAAU+b,GAAM,KAAKwC,CAAO,EAEjCve,EAAK,QAAUue,EAEZve,EAAK,WACRoK,EAAO,KAAK,aAAcpK,CAAI,EAEzBA,EAAK,OACd,EACI0pH,GAAe,SAAUt/G,EAAQpK,EAAM,CACzC,OAAIA,IAAS,SACXA,EAAO,CAAC,GAEHoC,EAAO,KAAKgI,EAAO,QAAQ,CAAC,EAAE,KAAKlK,EAASF,EAAK,SAAW,OAAS,IAAI8hG,GAAO,OAAQ,EAAE,EAAI,EAAE,EAAG,SAAUt2F,EAAM,CACxH,OAAOi+G,GAAmBr/G,EAAQpK,EAAMwL,CAAI,CAC9C,CAAC,CACH,EAEIm+G,GAAW,SAAU92G,EAAMtS,EAAI,CACjCA,EAAGsS,CAAI,EACHA,EAAK,YACP82G,GAAS92G,EAAK,WAAYtS,CAAE,EAE1BsS,EAAK,MACP82G,GAAS92G,EAAK,KAAMtS,CAAE,CAE1B,EACIqpH,GAAoB,SAAUlmB,EAAaC,EAAkB9wF,EAAM,CACrE,IAAIg3G,EAAc,CAAC,EACfC,EAAc,CAAC,EACfx7G,EAAU,CAAC,EACXuE,EAAK,YACP82G,GAAS92G,EAAK,WAAY,SAAUA,EAAM,CACxChP,GAAK6/F,EAAa,SAAUv/F,EAAQ,CAC9BA,EAAO,OAAS0O,EAAK,OACnBg3G,EAAY1lH,EAAO,IAAI,EACzB0lH,EAAY1lH,EAAO,IAAI,EAAE,MAAM,KAAK0O,CAAI,EAExCg3G,EAAY1lH,EAAO,IAAI,EAAI,CACzB,OAAQA,EACR,MAAO,CAAC0O,CAAI,CACd,EAGN,CAAC,EACDhP,GAAK8/F,EAAkB,SAAUx/F,EAAQ,CACnC,OAAO0O,EAAK,KAAK1O,EAAO,IAAI,GAAM,WAChC2lH,EAAY3lH,EAAO,IAAI,EACzB2lH,EAAY3lH,EAAO,IAAI,EAAE,MAAM,KAAK0O,CAAI,EAExCi3G,EAAY3lH,EAAO,IAAI,EAAI,CACzB,OAAQA,EACR,MAAO,CAAC0O,CAAI,CACd,EAGN,CAAC,CACH,CAAC,EAEH,QAAS/M,KAAQ+jH,EACXA,EAAY,eAAe/jH,CAAI,GACjCwI,EAAQ,KAAKu7G,EAAY/jH,CAAI,CAAC,EAGlC,QAASA,KAAQgkH,EACXA,EAAY,eAAehkH,CAAI,GACjCwI,EAAQ,KAAKw7G,EAAYhkH,CAAI,CAAC,EAGlC,OAAOwI,CACT,EACIy7G,GAAW,SAAUrmB,EAAaC,EAAkB9wF,EAAM,CAC5D,IAAIvE,EAAUs7G,GAAkBlmB,EAAaC,EAAkB9wF,CAAI,EACnEhP,GAAKyK,EAAS,SAAUiD,EAAO,CAC7B1N,GAAK0N,EAAM,OAAO,UAAW,SAAUjI,EAAU,CAC/CA,EAASiI,EAAM,MAAOA,EAAM,OAAO,KAAM,CAAC,CAAC,CAC7C,CAAC,CACH,CAAC,CACH,EAEIy4G,GAAkB,OAClBC,GAAa,SAAU1rG,EAAS,CAClC,OAAOA,aAAmBujF,EAC5B,EACIooB,GAAgB,SAAU9/G,EAAQ,CAChCuwE,GAAY,SAASvwE,CAAM,GAC7Bo1C,GAAY,gBAAgBp1C,EAAO,QAAQ,CAAC,EAAE,KAAK,SAAU0U,EAAK,CAChE,IAAIjM,EAAOiM,EAAI,QAAQ,EACnB+oC,EAAWzzB,GAAS,QAAQvhB,CAAI,EAAI2sC,GAAY,gBAAgB3sC,CAAI,EAAE,MAAMiM,CAAG,EAAIA,EACvF1U,EAAO,UAAU,OAAOy9C,EAAS,QAAQ,CAAC,CAC5C,CAAC,CAEL,EACIsiE,GAAgB,SAAU//G,EAAQqS,EAAM,CAC1CrS,EAAO,IAAI,QAAQA,EAAO,QAAQ,EAAGqS,CAAI,EACzCytG,GAAc9/G,CAAM,CACtB,EACIggH,GAAmB,SAAUhgH,EAAQoB,EAAM+S,EAASve,EAAM,CAC5D,IAAI+6G,EAAqBsP,EACzB,OAAI9rG,EAAQ,SAAW,GAAK,QAAQ,KAAKA,CAAO,GAC9C8rG,EAAO,0BACH7+G,EAAK,WAAa,QACpB+S,EAAU,WAAa8rG,EAAO,aACrB,YAAY,KAAK7+G,EAAK,QAAQ,IACvC+S,EAAU,OAAS8rG,EAAO,SAE5BtP,EAAsBlsD,GAAS,mBAAmBzkD,CAAM,EACpD2wG,GAAuB3wG,EAAO,OAAO,aAAaoB,EAAK,SAAS,YAAY,EAAGuvG,EAAoB,YAAY,CAAC,GAClHx8F,EAAU8rG,EACV9rG,EAAUnU,EAAO,IAAI,WAAW2wG,EAAqB3wG,EAAO,SAAS,wBAAyBmU,CAAO,GAC3FA,IACVA,EAAU,2BAEZ4rG,GAAc//G,EAAQmU,CAAO,EAC7BnU,EAAO,KAAK,aAAcpK,CAAI,IAE1BA,EAAK,SAAW,QAClBue,EAAU2rC,GAAe,CAAE,SAAU9/C,EAAO,QAAS,EAAGA,EAAO,MAAM,EAAE,UAAUA,EAAO,OAAO,MAAMmU,EAAS,CAC5G,cAAe,GACf,OAAQ,EACV,CAAC,CAAC,GAEJve,EAAK,QAAU0yB,GAAoBpO,GAAQ,QAAQ9Y,CAAI,CAAC,EAAI+S,EAAUxC,GAAM,KAAKwC,CAAO,EACxF4rG,GAAc//G,EAAQpK,EAAK,OAAO,EAC7BA,EAAK,WACRoK,EAAO,KAAK,aAAcpK,CAAI,GAG3BA,EAAK,OACd,EACIsqH,GAAiB,SAAUlgH,EAAQoB,EAAM+S,EAASve,EAAM,CAC1D+pH,GAAS3/G,EAAO,OAAO,eAAe,EAAGA,EAAO,OAAO,oBAAoB,EAAGmU,CAAO,EACrF,IAAI9B,EAAOytC,GAAe,CAAE,SAAU9/C,EAAO,QAAS,EAAGA,EAAO,MAAM,EAAE,UAAUmU,CAAO,EACzF,OAAAve,EAAK,QAAU0yB,GAAoBpO,GAAQ,QAAQ9Y,CAAI,CAAC,EAAIiR,EAAOV,GAAM,KAAKU,CAAI,EAClF0tG,GAAc//G,EAAQpK,EAAK,OAAO,EAC7BA,EAAK,WACRoK,EAAO,KAAK,aAAcpK,CAAI,EAEzBue,CACT,EACIgsG,GAAe,SAAUngH,EAAQmU,EAASve,EAAM,CAClD,OAAIA,IAAS,SACXA,EAAO,CAAC,GAEVA,EAAK,OAASA,EAAK,OAASA,EAAK,OAASgqH,GAC1ChqH,EAAK,IAAM,GACXA,EAAK,QAAUiqH,GAAW1rG,CAAO,EAAI,GAAKA,EACtC,CAAC0rG,GAAW1rG,CAAO,GAAK,CAACve,EAAK,YAChCoK,EAAO,KAAK,mBAAoBpK,CAAI,EACpCue,EAAUve,EAAK,SAEVoC,EAAO,KAAKgI,EAAO,QAAQ,CAAC,EAAE,KAAKlK,EAASqe,CAAO,EAAG,SAAU/S,EAAM,CAC3E,OAAOy+G,GAAW1rG,CAAO,EAAI+rG,GAAelgH,EAAQoB,EAAM+S,EAASve,CAAI,EAAIoqH,GAAiBhgH,EAAQoB,EAAM+S,EAASve,CAAI,CACzH,CAAC,CACH,EAEIwqH,GAAQtlF,GAAW,IACnBulF,GAAwB,SAAUrgH,EAAQ,CAC5CogH,GAAM,SAASpgH,EAAO,GAAI,UAAWA,EAAO,UAAU,CACxD,EACIsgH,GAAc,SAAUrqH,EAAG,CAC7B,OAAO+B,EAAO,KAAK/B,CAAC,EAAE,KAAK,SAAUA,EAAG,CACtC,OAAOA,EAAE,QAAQ,CACnB,CAAC,CACH,EACIsqH,GAAqB,SAAUvgH,EAAQ,CACzCA,EAAO,qBAAuBA,EAAO,YAAcA,EAAO,UAAYA,EAAO,gBAAkB,KAC/FA,EAAO,YAAcA,EAAO,gBAAkBA,EAAO,cAAgB,KACrEA,EAAO,cAAgBA,EAAO,UAAY,KACtCA,EAAO,YACTA,EAAO,UAAYA,EAAO,UAAU,IAAMA,EAAO,UAAU,IAAMA,EAAO,UAAU,IAAI,IAAM,KAEhG,EACIwgH,GAAc,SAAUxgH,EAAQ,CAClC,IAAI49G,EAAO59G,EAAO,YACd49G,IACEA,EAAK,gBACPA,EAAK,OAASA,EAAK,cACnBA,EAAK,cAAgB,MAEvBwC,GAAM,OAAOxC,EAAM,eAAgB59G,EAAO,iBAAiB,EAE/D,EACIygH,GAAW,SAAUzgH,EAAQ,CAC/B,GAAI,CAACA,EAAO,QAAS,CACnB,IAAI0gH,EAAsB1gH,EAAO,oBAAqB2gH,EAAe3gH,EAAO,aACxEoB,EAAOpB,EAAO,QAAQ,EACtBb,EAAUa,EAAO,WAAW,EAC5BoB,GACFpB,EAAO,KAAK,CAAE,YAAa,EAAK,CAAC,EAEnCA,EAAO,QAAU,GACjBA,EAAO,sBAAsB,EACzBA,EAAO,gBAAkBb,GAC3BihH,GAAM,OAAOjhH,EAAQ,WAAW,EAElC2rE,GAAO,WAAW9qE,CAAM,EACxBA,EAAO,cAAc,OAAOA,CAAM,EAC9B,CAACA,EAAO,QAAUoB,GACpBi/G,GAAsBrgH,CAAM,EAE9B8qE,GAAO,WAAW9qE,CAAM,EACxBogH,GAAM,OAAOpgH,EAAO,aAAa,CAAC,EAClCsgH,GAAYI,CAAmB,EAC/BJ,GAAYK,CAAY,EACxB3gH,EAAO,QAAQ,CACjB,CACF,EACI26B,GAAU,SAAU36B,EAAQ4gH,EAAW,CACzC,IAAI1zE,EAAYltC,EAAO,UAAW8b,EAAM9b,EAAO,IAC/C,GAAI,CAAAA,EAAO,UAGX,IAAI,CAAC4gH,GAAa,CAAC5gH,EAAO,QAAS,CACjCA,EAAO,OAAO,EACd,MACF,CACK4gH,IACH5gH,EAAO,cAAc,IAAI,eAAgBA,EAAO,aAAa,EACzDA,EAAO,OAASA,EAAO,MAAM,SAC/BA,EAAO,MAAM,QAAQ,EAEvBsgH,GAAYpzE,CAAS,EACrBozE,GAAYxkG,CAAG,GAEjB0kG,GAAYxgH,CAAM,EAClBugH,GAAmBvgH,CAAM,EACzBA,EAAO,UAAY,GACrB,EAEI6gH,GAAQ/lF,GAAW,IACnBgmF,GAAWnvG,GAAM,OAAQovG,GAASpvG,GAAM,KACxCqvG,GAAYrvG,GAAM,QAClBsvG,GAAO3jH,GAAI,GACX4jH,GAAS,SAAU/pH,EAAI2tB,EAAUq8F,EAAe,CAClD,IAAIzpH,EAAO,KACPs1E,EAAkBt1E,EAAK,gBAAkBypH,EAAc,gBACvD7C,EAAU6C,EAAc,QAC5Br8F,EAAWipD,GAAkBr2E,EAAMP,EAAI61E,EAAiBm0C,EAAc,gBAAiBr8F,CAAQ,EAC/FptB,EAAK,SAAWotB,EAChBsX,GAAa,SAAWtX,EAAS,UAAY,KAC7CsX,GAAa,aAAetX,EAAS,cACrCsX,GAAa,QAAU+kF,EAAc,QACrCzpH,EAAK,GAAKP,EACVO,EAAK,SAAS,EAAK,EACnBA,EAAK,QAAU,CAAC,EAChBA,EAAK,gBAAkB,IAAI2mH,GAAIv5F,EAAS,kBAAmB,CAAE,SAAUw5F,CAAQ,CAAC,EAChF5mH,EAAK,QAAU4mH,EACf5mH,EAAK,WAAa,CAAC,EACnBA,EAAK,cAAgB,CAAC,EACtBA,EAAK,UAAY,IAAI82E,GAAU92E,CAAI,EACnCA,EAAK,UAAY,CAAC,EAClBA,EAAK,eAAiB,IAAIqwE,GAAerwE,CAAI,EAC7CA,EAAK,OAASypH,EAAc,OAC5BzpH,EAAK,cAAgBypH,EACrBzpH,EAAK,OAASotB,EAAS,OACvBptB,EAAK,QAAU,CAAC,EAChBA,EAAK,UAAY,CAAC,EACdotB,EAAS,eACXxnB,GAAI,YAAcwnB,EAAS,aAAa,QAAQ,WAAY,EAAE,GAE5DA,EAAS,oBAAsB,KACjCxnB,GAAI,iBAAmB,IAEzB6jH,EAAc,KAAK,cAAe,CAAE,OAAQzpH,CAAK,CAAC,EAClDA,EAAK,aAAa,QAASA,CAAI,EAC/BA,EAAK,EAAIkb,GAAS,iBAAiB,UAAY,CAC7C,MAAO,CACL,QAASlb,EAAK,OAASA,EAAK,QAAQ,EAAIA,EAAK,OAAO,EACpD,QAASA,EAAK,QAAQ,CACxB,CACF,CAAC,CACH,EACAwpH,GAAO,UAAY,CACjB,OAAQ,UAAY,CAClBrD,GAAO,OAAO,IAAI,CACpB,EACA,MAAO,SAAUvtC,EAAW,CAC1BC,GAAY,MAAM,KAAMD,CAAS,CACnC,EACA,SAAU,UAAY,CACpB,OAAOC,GAAY,SAAS,IAAI,CAClC,EACA,aAAc,SAAU70E,EAAM,CAE5B,QADIzF,EAAI,CAAC,EACAJ,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCI,EAAEJ,EAAK,CAAC,EAAI,UAAUA,CAAE,EAE1B,IAAI6B,EAAO,KACPwH,EAAWxH,EAAK,SAASgE,CAAI,EAAGJ,EACpC,GAAK4D,EAGL,OAAIxH,EAAK,iBAAmB4D,EAAQ5D,EAAK,eAAegE,CAAI,KAC1DwD,EAAW5D,EAAM,KACjBA,EAAQA,EAAM,OAEZ,OAAO4D,GAAa,WACtB5D,EAAQ4D,EAAS,QAAQ,SAAU,EAAE,EACrC5D,EAAQA,EAAQ0lH,GAAU1lH,CAAK,EAAI,EACnC4D,EAAW8hH,GAAU9hH,CAAQ,EAC7BxH,EAAK,eAAiBA,EAAK,gBAAkB,CAAC,EAC9CA,EAAK,eAAegE,CAAI,EAAI,CAC1B,KAAMwD,EACN,MAAO5D,CACT,GAEK4D,EAAS,MAAM5D,GAAS5D,EAAM,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,CAAC,CAC/E,EACA,UAAW,SAAU0T,EAAM,CACzB,GAAIA,GAAQuG,GAAM,GAAGvG,EAAM,QAAQ,EAAG,CACpC,IAAIg2G,EAAS,KAAK,SAAS,UAAY,KAAMC,EAAS,KAAK,cAAc,KACzEj2G,EAAOi2G,EAAO,KAAKD,EAAS,IAAMh2G,CAAI,GAAKA,EAAK,QAAQ,kBAAmB,SAAU5T,EAAGM,EAAG,CACzF,OAAOupH,EAAO,KAAKD,EAAS,IAAMtpH,CAAC,GAAK,KAAOA,EAAI,GACrD,CAAC,CACH,CACA,OAAO,KAAK,cAAc,UAAUsT,CAAI,CAC1C,EACA,QAAS,SAAU1P,EAAMm6B,EAAY,CACnC,OAAO,KAAK,cAAc,KAAK,MAAM,KAAK,SAAS,UAAY,MAAQ,IAAMn6B,CAAI,IAAMm6B,IAAe,OAAYA,EAAa,KAAOn6B,EAAO,IAC/I,EACA,SAAU,SAAUA,EAAMm6B,EAAY19B,EAAM,CAC1C,OAAOg2E,GAAS,KAAMzyE,EAAMm6B,EAAY19B,CAAI,CAC9C,EACA,YAAa,SAAUvC,EAAM,CAC3B,KAAK,sBAAsB,YAAYA,CAAI,CAC7C,EACA,UAAW,SAAU8F,EAAMopB,EAAU,CACnC,IAAIptB,EAAO,KACPotB,EAAS,MACXA,EAAS,QAAU,UAAY,CAC7BptB,EAAK,YAAYotB,EAAS,GAAG,CAC/B,GAEEA,EAAS,eAAiB,OAAOA,EAAS,OAAW,MACvDA,EAAS,OAAS,IAEhB,CAACA,EAAS,MAAQ,CAACA,EAAS,OAC9BA,EAAS,KAAOppB,GAElBopB,EAAS,QAAUA,EAAS,SAAWA,EAAS,MAChDptB,EAAK,QAAQgE,CAAI,EAAIopB,CACvB,EACA,WAAY,SAAUppB,EAAMopB,EAAU,CACpC,OAAOk5F,GAAQ,IAAI,KAAMtiH,EAAMopB,CAAQ,CACzC,EACA,YAAa,SAAUppB,EAAMopB,EAAU,CACrC,IAAIptB,EAAO,KACPotB,EAAS,MACXA,EAAS,QAAU,UAAY,CAC7BptB,EAAK,YAAYotB,EAAS,GAAG,CAC/B,GAEFptB,EAAK,UAAUgE,CAAI,EAAIopB,CACzB,EACA,kBAAmB,SAAUjV,EAAWS,EAAO,CAC7C,IAAI5Y,EAAO,KACPqP,EACJrP,EAAK,gBAAkBA,EAAK,iBAAmB,CAAC,EAC5C,OAAOmY,GAAc,WACvB9I,EAAW8I,EACXA,EAAY,SAAUkE,EAAK,CACzB,OAAOrc,EAAK,IAAI,GAAGqc,EAAKhN,CAAQ,CAClC,GAEFrP,EAAK,gBAAgB,KAAK,CACxB,GAAIwhF,GAAK,KAAK,MAAM,EACpB,UAAWrpE,EACX,MAAOS,CACT,CAAC,CACH,EACA,WAAY,SAAU5U,EAAMwD,EAAU5D,EAAO,CAC3C,KAAK,eAAe,WAAWI,EAAMwD,EAAU5D,CAAK,CACtD,EACA,qBAAsB,SAAUI,EAAMwD,EAAU5D,EAAO,CACrD,KAAK,eAAe,qBAAqBI,EAAMwD,EAAU5D,CAAK,CAChE,EACA,qBAAsB,SAAUI,EAAMwD,EAAU5D,EAAO,CACrD,KAAK,eAAe,qBAAqBI,EAAMwD,EAAU5D,CAAK,CAChE,EACA,YAAa,SAAUyO,EAAS+kE,EAAMC,EAASzzE,EAAO,CACpD,KAAK,UAAU,IAAIyO,EAAS+kE,EAAMC,EAASzzE,CAAK,CAClD,EACA,YAAa,SAAU0vE,EAAK9C,EAAInyE,EAAOH,EAAM,CAC3C,OAAO,KAAK,eAAe,YAAYo1E,EAAK9C,EAAInyE,EAAOH,CAAI,CAC7D,EACA,kBAAmB,SAAUo1E,EAAK,CAChC,OAAO,KAAK,eAAe,kBAAkBA,CAAG,CAClD,EACA,kBAAmB,SAAUA,EAAK,CAChC,OAAO,KAAK,eAAe,kBAAkBA,CAAG,CAClD,EACA,sBAAuB,SAAUA,EAAK,CACpC,OAAO,KAAK,eAAe,sBAAsBA,CAAG,CACtD,EACA,KAAM,UAAY,CAChB,IAAItzE,EAAO,KACPA,EAAK,SACPA,EAAK,OAAS,GACVA,EAAK,OACPA,EAAK,QAAQ,EAAE,gBAAkB,IAEjCmpH,GAAM,KAAKnpH,EAAK,aAAa,CAAC,EAC9BmpH,GAAM,KAAKnpH,EAAK,EAAE,GAEpBA,EAAK,KAAK,EACVA,EAAK,KAAK,MAAM,EAEpB,EACA,KAAM,UAAY,CAChB,IAAIA,EAAO,KAAMyJ,EAAMzJ,EAAK,OAAO,EAC9BA,EAAK,SACJupH,IAAQ9/G,GAAO,CAACzJ,EAAK,QACvByJ,EAAI,YAAY,WAAW,EAE7BzJ,EAAK,KAAK,EACNA,EAAK,QACPA,EAAK,QAAQ,EAAE,gBAAkB,GAC7BA,IAASA,EAAK,cAAc,gBAC9BA,EAAK,cAAc,cAAgB,QAGrCmpH,GAAM,KAAKnpH,EAAK,aAAa,CAAC,EAC9BmpH,GAAM,SAASnpH,EAAK,GAAI,UAAWA,EAAK,UAAU,GAEpDA,EAAK,OAAS,GACdA,EAAK,KAAK,MAAM,EAEpB,EACA,SAAU,UAAY,CACpB,MAAO,CAAC,CAAC,KAAK,MAChB,EACA,iBAAkB,SAAU0c,EAAO5U,EAAM,CACvC,KAAK,KAAK,gBAAiB,CACzB,MAAO4U,EACP,KAAM5U,CACR,CAAC,CACH,EACA,KAAM,SAAU5J,EAAM,CACpB,IAAI8B,EAAO,KACPqc,EAAMrc,EAAK,WAAW,EAAG2a,EAC7B,GAAI3a,EAAK,QACP,MAAO,GAET,GAAIqc,EACF,OAAAne,EAAOA,GAAQ,CAAC,EAChBA,EAAK,KAAO,GACZyc,EAAO3a,EAAK,WAAWqc,EAAI,QAAU,OAAYA,EAAI,MAAQA,EAAI,UAAWne,CAAI,EAChFA,EAAK,QAAUme,EACVne,EAAK,WACR8B,EAAK,KAAK,cAAe9B,CAAI,EAE/BA,EAAK,QAAUme,EAAM,KACd1B,CAEX,EACA,KAAM,SAAUzc,EAAM,CACpB,IAAI8B,EAAO,KACPqc,EAAMrc,EAAK,WAAW,EAAG2a,EAAMurG,EACnC,GAAI,GAAC7pG,GAAO,CAACrc,EAAK,aAAeA,EAAK,SAGtC,OAAA9B,EAAOA,GAAQ,CAAC,EAChBA,EAAK,KAAO,GACZA,EAAK,QAAUme,EACf1B,EAAOzc,EAAK,QAAU8B,EAAK,WAAW9B,CAAI,EACrCA,EAAK,WACR8B,EAAK,KAAK,cAAe9B,CAAI,EAE3BA,EAAK,SAAW,OAClB8B,EAAK,KAAK,iBAAkB9B,CAAI,EAElCyc,EAAOzc,EAAK,QACP,kBAAkB,KAAKme,EAAI,QAAQ,EAatCA,EAAI,MAAQ1B,IAZRzc,EAAK,aAAe,CAAC8B,EAAK,UAC5Bqc,EAAI,UAAY1B,IAEdurG,EAAOiD,GAAM,UAAUnpH,EAAK,GAAI,MAAM,IACxCqpH,GAAOnD,EAAK,SAAU,SAAU7pG,EAAK,CACnC,GAAIA,EAAI,OAASrc,EAAK,GACpB,OAAAqc,EAAI,MAAQ1B,EACL,EAEX,CAAC,GAKLzc,EAAK,QAAUme,EAAM,KACjBne,EAAK,YAAc,IACrB8B,EAAK,SAAS,EAAK,EAEd2a,CACT,EACA,WAAY,SAAU8B,EAASve,EAAM,CACnC,OAAOuqH,GAAa,KAAMhsG,EAASve,CAAI,CACzC,EACA,WAAY,SAAUA,EAAM,CAC1B,OAAO0pH,GAAa,KAAM1pH,CAAI,CAChC,EACA,cAAe,SAAUue,EAASve,EAAM,CAClCA,IACFue,EAAU2sG,GAAS,CAAE,QAAS3sG,CAAQ,EAAGve,CAAI,GAE/C,KAAK,YAAY,mBAAoB,GAAOue,CAAO,CACrD,EACA,QAAS,UAAY,CACnB,MAAO,CAAC,KAAK,UACf,EACA,SAAU,SAAUC,EAAO,CACzB,IAAIktG,EAAW,CAAC,KAAK,WACrB,KAAK,WAAa,CAACltG,EACfA,GAASA,IAAUktG,GACrB,KAAK,KAAK,OAAO,CAErB,EACA,QAAS,SAAU5zF,EAAM,CACvBw9C,GAAQ,KAAMx9C,CAAI,CACpB,EACA,aAAc,UAAY,CACxB,IAAIh2B,EAAO,KACX,OAAKA,EAAK,YACRA,EAAK,UAAYmpH,GAAM,IAAInpH,EAAK,iBAAmBA,EAAK,GAAK,SAAS,GAEjEA,EAAK,SACd,EACA,wBAAyB,UAAY,CACnC,OAAO,KAAK,oBACd,EACA,WAAY,UAAY,CACtB,OAAK,KAAK,YACR,KAAK,UAAYmpH,GAAM,IAAI,KAAK,EAAE,GAE7B,KAAK,SACd,EACA,OAAQ,UAAY,CAClB,IAAInpH,EAAO,KACPqc,EACJ,OAAKrc,EAAK,gBACRqc,EAAMrc,EAAK,cACPqc,IACFrc,EAAK,cAAgBqc,EAAI,gBAGtBrc,EAAK,aACd,EACA,OAAQ,UAAY,CAClB,IAAIA,EAAO,KACP4J,EACJ,OAAK5J,EAAK,kBACR4J,EAAM5J,EAAK,OAAO,EACd4J,IACF5J,EAAK,gBAAkB4J,EAAI,WAGxB5J,EAAK,eACd,EACA,QAAS,UAAY,CACnB,IAAIyJ,EAAM,KAAK,OAAO,EACtB,OAAO,KAAK,cAAgBA,EAAMA,EAAI,KAAO,KAC/C,EACA,WAAY,SAAUrF,EAAKJ,EAAMqY,EAAK,CACpC,IAAIrc,EAAO,KAAMotB,EAAWptB,EAAK,SACjC,OAAIotB,EAAS,sBACJptB,EAAK,aAAa,wBAAyBoE,EAAKiY,EAAK,GAAMrY,CAAI,EAEpE,CAACopB,EAAS,cAAgB/Q,GAAOA,EAAI,WAAa,QAAUjY,EAAI,QAAQ,OAAO,IAAM,GAAKA,EAAI,SAAW,EACpGA,EAELgpB,EAAS,cACJptB,EAAK,gBAAgB,WAAWoE,CAAG,GAE5CA,EAAMpE,EAAK,gBAAgB,WAAWoE,EAAKgpB,EAAS,kBAAkB,EAC/DhpB,EACT,EACA,UAAW,SAAUiY,EAAK,CACxB,IAAIrc,EAAO,KACPotB,EAAWptB,EAAK,SAChBokB,EAAMpkB,EAAK,IACXghC,EACJ3kB,EAAMA,GAAOrc,EAAK,QAAQ,EACtBA,EAAK,YAAc,SACrBA,EAAK,UAAYotB,EAAS,QAE5Bi8F,GAAOjlG,EAAI,OAAO,UAAW/H,CAAG,EAAG,SAAUA,EAAK,CAChD,IAAIhe,EACJ,OAAQge,EAAI,SAAU,CACtB,IAAK,QACH2kB,EAAM5T,EAAS,oBAAsB,iBACrC/uB,EAAQ+lB,EAAI,UAAU/H,EAAK,QAAQ,GAC9B,CAAChe,GAASA,IAAU,MAAQ2B,EAAK,UACpCokB,EAAI,SAAS/H,EAAK2kB,CAAG,EAErB5c,EAAI,YAAY/H,EAAK2kB,CAAG,EAE1B,OACF,IAAK,IACE5c,EAAI,UAAU/H,EAAK,MAAM,IAC5Bhe,EAAQ+lB,EAAI,UAAU/H,EAAK,MAAM,GAAKA,EAAI,GAC1C2kB,EAAM5T,EAAS,qBAAuB,kBAClC/uB,GAAS2B,EAAK,UAChBokB,EAAI,SAAS/H,EAAK2kB,CAAG,EAErB5c,EAAI,YAAY/H,EAAK2kB,CAAG,GAG5B,MACF,CACF,CAAC,EACDhhC,EAAK,KAAK,YAAa,CACrB,QAASqc,EACT,UAAWrc,EAAK,SAClB,CAAC,CACH,EACA,OAAQ,UAAY,CAClB+oH,GAAS,IAAI,CACf,EACA,QAAS,SAAUG,EAAW,CAC5BjmF,GAAQ,KAAMimF,CAAS,CACzB,EACA,aAAc,SAAU1hH,EAAU,CAChC,OAAO,KAAK,aAAa,aAAaA,CAAQ,CAChD,EACA,eAAgB,UAAY,CAC1B,OAAO,KAAK,aAAa,cAAc,CACzC,CACF,EACA4hH,GAASI,GAAO,UAAWl1C,EAAkB,EAE7C,IAAIu1C,GAAoB,SAAUxtG,EAAK,CACrC,OAAOA,EAAI,UAAU,SAAS,EAAE,QAAQ,MAAM,IAAM,EACtD,EACIytG,GAAe,CAAE,kBAAmBD,EAAkB,EAEtDE,GAAqB,SAAU,EAAG,CACpC,OAAO,EAAE,OAAS,cAAgB,EAAE,eACtC,EACIC,GAAsB,SAAU1hH,EAAQ2hH,EAAgB,CAC1D,IAAIC,EAAc,UAAY,CAC5BD,EAAe,SAAS,CAC1B,EACA7mF,GAAW,IAAI,KAAKvlC,EAAW,SAAU,UAAWqsH,CAAW,EAC/D5hH,EAAO,GAAG,SAAU,UAAY,CAC9B86B,GAAW,IAAI,OAAOvlC,EAAW,SAAU,UAAWqsH,CAAW,CACnE,CAAC,CACH,EACIC,GAAmB,SAAU7hH,EAAQ,CACvCA,EAAO,GAAG,WAAY,UAAY,CAChC+mE,GAAkB,MAAM/mE,CAAM,CAChC,CAAC,CACH,EACI8hH,GAAkB,SAAU9hH,EAAQ2hH,EAAgB,CACtD3hH,EAAO,GAAG,mBAAoB,SAAU/B,EAAG,CACzC0jH,EAAe,SAAS,CAC1B,CAAC,CACH,EACII,GAAuB,SAAU/hH,EAAQ2hH,EAAgB,CAC3D,IAAI9pG,EAAU8B,GAAoB,OAAO,EAAE,QACvC9B,EAAQ,KAAK,EACfgqG,GAAiB7hH,CAAM,EAEvB8hH,GAAgB9hH,EAAQ2hH,CAAc,EAExC3hH,EAAO,GAAG,mBAAoB,SAAU/B,EAAG,CACpCwjH,GAAmBxjH,CAAC,GACvB8oE,GAAkB,MAAM/mE,CAAM,CAElC,CAAC,CACH,EACIgiH,GAAa,SAAUhiH,EAAQ,CACjC,IAAI2hH,EAAiBv3G,GAAM,UAAY,CACrC28D,GAAkB,MAAM/mE,CAAM,CAChC,EAAG,CAAC,EACAA,EAAO,QACT0hH,GAAoB1hH,EAAQ2hH,CAAc,EAE5C3hH,EAAO,GAAG,OAAQ,UAAY,CAC5B+hH,GAAqB/hH,EAAQ2hH,CAAc,CAC7C,CAAC,EACD3hH,EAAO,GAAG,SAAU,UAAY,CAC9B2hH,EAAe,OAAO,CACxB,CAAC,CACH,EACIM,GAAmB,CAAE,SAAUD,EAAW,EAE1CE,GACAC,GAAQrnF,GAAW,IACnBsnF,GAAsB,SAAUruG,EAAK,CACvC,OAAOytG,GAAa,kBAAkBztG,CAAG,CAC3C,EACIsuG,GAAc,SAAUriH,EAAQ+T,EAAK,CACvC,IAAIuuG,EAAiBtiH,EAASA,EAAO,SAAS,mBAAqB,GAC/D2I,EAASw5G,GAAM,UAAUpuG,EAAK,SAAUA,EAAK,CAC/C,OAAOquG,GAAoBruG,CAAG,IAAMuuG,EAAiBtiH,EAAO,IAAI,GAAG+T,EAAKuuG,CAAc,EAAI,GAC5F,CAAC,EACD,OAAO35G,IAAW,IACpB,EACI45G,GAAmB,UAAY,CACjC,GAAI,CACF,OAAOhtH,EAAW,SAAS,aAC7B,MAAa,CACX,OAAOA,EAAW,SAAS,IAC7B,CACF,EACIq9E,GAAiB,SAAUuuC,EAAeljH,EAAG,CAC/C,IAAI+B,EAAS/B,EAAE,OACfgkH,GAAiB,SAASjiH,CAAM,EAChCA,EAAO,GAAG,UAAW,UAAY,CAC/B,IAAItI,EAAO,KACP8qH,EAAgBrB,EAAc,cAC9BqB,IAAkB9qH,IAChB8qH,GACFA,EAAc,KAAK,OAAQ,CAAE,cAAe9qH,CAAK,CAAC,EAEpDypH,EAAc,UAAUzpH,CAAI,EAC5BypH,EAAc,cAAgBzpH,EAC9BA,EAAK,KAAK,QAAS,CAAE,cAAe8qH,CAAc,CAAC,EACnD9qH,EAAK,MAAM,EAAI,EAEnB,CAAC,EACDsI,EAAO,GAAG,WAAY,UAAY,CAChC,IAAItI,EAAO,KACXqI,GAAM,iBAAiBrI,EAAM,UAAY,CACvC,IAAI8qH,EAAgBrB,EAAc,cAC9B,CAACkB,GAAY3qH,EAAM6qH,GAAiB,CAAC,GAAKC,IAAkB9qH,IAC9DA,EAAK,KAAK,OAAQ,CAAE,cAAe,IAAK,CAAC,EACzCypH,EAAc,cAAgB,KAElC,CAAC,CACH,CAAC,EACIe,KACHA,GAAyB,SAAUjkH,EAAG,CACpC,IAAIwkH,EAAetB,EAAc,aAC7B1gH,EACJA,EAASxC,EAAE,OACPwkH,GAAgBhiH,EAAO,gBAAkBlL,EAAW,UAClDkL,IAAWlL,EAAW,SAAS,MAAQ,CAAC8sH,GAAYI,EAAchiH,CAAM,GAAK0gH,EAAc,gBAAkBsB,IAC/GA,EAAa,KAAK,OAAQ,CAAE,cAAe,IAAK,CAAC,EACjDtB,EAAc,cAAgB,KAGpC,EACAgB,GAAM,KAAK5sH,EAAW,SAAU,UAAW2sH,EAAsB,EAErE,EACIQ,GAA2B,SAAUvB,EAAeljH,EAAG,CACrDkjH,EAAc,gBAAkBljH,EAAE,SACpCkjH,EAAc,cAAgB,MAE3BA,EAAc,eACjBgB,GAAM,OAAO5sH,EAAW,SAAU,UAAW2sH,EAAsB,EACnEA,GAAyB,KAE7B,EACIS,GAAU,SAAUxB,EAAe,CACrCA,EAAc,GAAG,YAAajrH,EAAM08E,GAAgBuuC,CAAa,CAAC,EAClEA,EAAc,GAAG,eAAgBjrH,EAAMwsH,GAA0BvB,CAAa,CAAC,CACjF,EACIyB,GAAkB,CACpB,MAAOD,GACP,kBAAmBP,GACnB,YAAaC,EACf,EAEIQ,GAAQ/nF,GAAW,IACnBgoF,GAAYnxG,GAAM,QAASoxG,GAASpxG,GAAM,KAAMqxG,GAAWrxG,GAAM,OACjEsxG,GAAkB,EAAGC,GAAsBC,GAAeC,GAAoB,GAC9EC,GAAgB,CAAC,EACjBv3C,GAAU,CAAC,EACXw3C,GAAmB,SAAUnsH,EAAI,CACnC,OAAOA,IAAO,QAChB,EACIosH,GAAsB,SAAU,EAAG,CACrC,IAAIprH,EAAO,EAAE,KACb4qH,GAAOI,GAAc,IAAI,EAAG,SAAUnjH,EAAQ,CAC5C,OAAQ7H,EAAM,CACd,IAAK,SACH6H,EAAO,KAAK,eAAgB,CAAC,EAC7B,MACF,IAAK,SACHA,EAAO,KAAK,eAAgB,CAAC,EAC7B,KACF,CACF,CAAC,CACH,EACIwjH,GAAqB,SAAUpvG,EAAO,CACpCA,IAAUgvG,KACRhvG,EACFxB,GAAS,MAAM,EAAE,GAAG,gBAAiB2wG,EAAmB,EAExD3wG,GAAS,MAAM,EAAE,IAAI,gBAAiB2wG,EAAmB,EAE3DH,GAAoBhvG,EAExB,EACIqvG,GAAuB,SAAUC,EAAc,CACjD,IAAIC,EAAa73C,GACjB,OAAOu3C,GAAcK,EAAa,EAAE,EACpC,QAASpqH,EAAI,EAAGA,EAAI+pH,GAAc,OAAQ/pH,IACxC,GAAI+pH,GAAc/pH,CAAC,IAAMoqH,EAAc,CACrCL,GAAc,OAAO/pH,EAAG,CAAC,EACzB,KACF,CAEF,OAAAwyE,GAAU/xE,GAAO+xE,GAAS,SAAU9rE,EAAQ,CAC1C,OAAO0jH,IAAiB1jH,CAC1B,CAAC,EACGmjH,GAAc,eAAiBO,IACjCP,GAAc,aAAer3C,GAAQ,OAAS,EAAIA,GAAQ,CAAC,EAAI,MAE7Dq3C,GAAc,gBAAkBO,IAClCP,GAAc,cAAgB,MAEzBQ,EAAW,SAAW73C,GAAQ,MACvC,EACI83C,GAAuB,SAAU5jH,EAAQ,CAC3C,OAAIA,GAAUA,EAAO,aAAe,EAAEA,EAAO,aAAa,GAAKA,EAAO,QAAQ,GAAG,aAC/EyjH,GAAqBzjH,CAAM,EAC3BA,EAAO,sBAAsB,EAC7BA,EAAO,QAAQ,EAAI,EACnBA,EAAO,QAAU,GACjBA,EAAS,MAEJA,CACT,EACAmjH,GAAgB,CACd,gBAAiB,CAAC,EAClB,EAAGvwG,GACH,aAAc,IACd,aAAc,OACd,YAAa,aACb,QAASywG,GACT,KAAMvvC,GACN,aAAc,KACd,SAAU,CAAC,EACX,MAAO,UAAY,CACjB,IAAIp8E,EAAO,KACPmsH,EAASC,EAAiBlxF,EAAS,GACvCkxF,EAAkBzF,GAAI,mBAAmB9oH,EAAW,SAAS,QAAQ,EACjE,yBAAyB,KAAKuuH,CAAe,IAC/CA,EAAkBA,EAAgB,QAAQ,WAAY,EAAE,EAAE,QAAQ,gBAAiB,EAAE,EAChF,UAAU,KAAKA,CAAe,IACjCA,GAAmB,MAGvB,IAAIC,EAAU,OAAO,SAAW,OAAO,eACvC,GAAIA,EACFF,EAAUE,EAAQ,MAAQA,EAAQ,QAClCnxF,EAASmxF,EAAQ,WACZ,CAEL,QADIloF,EAAUtmC,EAAW,SAAS,qBAAqB,QAAQ,EACtD+D,EAAI,EAAGA,EAAIuiC,EAAQ,OAAQviC,IAAK,CACvC,IAAIo/E,EAAM78C,EAAQviC,CAAC,EAAE,KAAO,GAC5B,GAAIo/E,IAAQ,GAGZ,KAAIsrC,EAAYtrC,EAAI,UAAUA,EAAI,YAAY,GAAG,CAAC,EAClD,GAAI,8CAA8C,KAAKA,CAAG,EAAG,CACvDsrC,EAAU,QAAQ,MAAM,IAAM,KAChCpxF,EAAS,QAEXixF,EAAUnrC,EAAI,UAAU,EAAGA,EAAI,YAAY,GAAG,CAAC,EAC/C,KACF,EACF,CACA,GAAI,CAACmrC,GAAWtuH,EAAW,SAAS,cAAe,CACjD,IAAImjF,EAAMnjF,EAAW,SAAS,cAAc,IACxCmjF,EAAI,QAAQ,MAAM,IAAM,KAC1B9lD,EAAS,QAEXixF,EAAUnrC,EAAI,UAAU,EAAGA,EAAI,YAAY,GAAG,CAAC,CACjD,CACF,CACAhhF,EAAK,QAAU,IAAI2mH,GAAIyF,CAAe,EAAE,WAAWD,CAAO,EAC1DnsH,EAAK,gBAAkBosH,EACvBpsH,EAAK,QAAU,IAAI2mH,GAAI3mH,EAAK,OAAO,EACnCA,EAAK,OAASk7B,EACdgwF,GAAgB,MAAMlrH,CAAI,CAC5B,EACA,iBAAkB,SAAUm2E,EAAiB,CAC3C,IAAIhxC,EAASjK,EACbiK,EAAUgxC,EAAgB,SACtBhxC,IACF,KAAK,QAAU,IAAIwhF,GAAI,KAAK,eAAe,EAAE,WAAWxhF,EAAQ,QAAQ,OAAQ,EAAE,CAAC,EACnF,KAAK,QAAU,IAAIwhF,GAAI,KAAK,OAAO,GAErCzrF,EAASi7C,EAAgB,OACrBA,EAAgB,SAClB,KAAK,OAASj7C,GAEhB,KAAK,gBAAkBi7C,EACvB,IAAIo2C,EAAiBp2C,EAAgB,iBACrC,QAASnyE,KAAQuoH,EACf7nF,GAAa,cAAc,KAAK1gC,CAAI,EAAIuoH,EAAevoH,CAAI,CAE/D,EACA,KAAM,SAAUopB,EAAU,CACxB,IAAIptB,EAAO,KACPwS,EAAQg6G,EACZA,EAAuBvyG,GAAM,QAAQ,iMAAuM,GAAG,EAC/O,IAAIwyG,EAAwB,SAAUr/F,EAAU/Q,EAAK,CACnD,OAAO+Q,EAAS,QAAU/Q,EAAI,QAAQ,YAAY,IAAKmwG,CACzD,EACIE,EAAW,SAAUrwG,EAAK,CAC5B,IAAI5c,EAAK4c,EAAI,GACb,OAAK5c,IACHA,EAAK4c,EAAI,KACL5c,GAAM,CAAC0rH,GAAM,IAAI1rH,CAAE,EACrBA,EAAK4c,EAAI,KAET5c,EAAK0rH,GAAM,SAAS,EAEtB9uG,EAAI,aAAa,KAAM5c,CAAE,GAEpBA,CACT,EACIktH,EAAe,SAAU3oH,EAAM,CACjC,IAAIwD,EAAW4lB,EAASppB,CAAI,EAC5B,GAAKwD,EAGL,OAAOA,EAAS,MAAMxH,EAAM,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,CAAC,CACtE,EACImb,EAAW,SAAUkB,EAAK9K,EAAW,CACvC,OAAOA,EAAU,cAAgB,OAASA,EAAU,KAAK8K,EAAI,SAAS,EAAI8uG,GAAM,SAAS9uG,EAAK9K,CAAS,CACzG,EACIq7G,EAAc,SAAUx/F,EAAU,CACpC,IAAIxiB,EAAGiiH,EAAU,CAAC,EAClB,GAAIjnH,GAAI,IAAMA,GAAI,GAAK,GACrB,OAAA63E,GAAc,UAAU,gKAAqK,EACtL,CAAC,EAEV,GAAIrwD,EAAS,MACX,OAAAi+F,GAAOj+F,EAAS,MAAO,SAAU3sB,EAAM,CACrCosH,EAAUA,EAAQ,OAAO1B,GAAM,OAAO1qH,EAAK,QAAQ,CAAC,CACtD,CAAC,EACMosH,EACF,GAAIz/F,EAAS,SAClB,OAAO+9F,GAAM,OAAO/9F,EAAS,QAAQ,EAChC,GAAIA,EAAS,OAClB,MAAO,CAACA,EAAS,MAAM,EAEzB,OAAQA,EAAS,KAAM,CACvB,IAAK,QACHxiB,EAAIwiB,EAAS,UAAY,GACrBxiB,EAAE,OAAS,GACbygH,GAAOD,GAAUxgH,CAAC,EAAG,SAAUnL,EAAI,CACjC,IAAI4c,IACAA,GAAM8uG,GAAM,IAAI1rH,CAAE,GACpBotH,EAAQ,KAAKxwG,EAAG,EAEhBgvG,GAAOxtH,EAAW,SAAS,MAAO,SAAUiB,GAAG,CAC7CusH,GAAOvsH,GAAE,SAAU,SAAUyH,GAAG,CAC1BA,GAAE,OAAS9G,IACbA,EAAK,cAAgB8rH,KACrBJ,GAAM,UAAU5kH,GAAG,KAAM9G,CAAE,EAC3BotH,EAAQ,KAAKtmH,EAAC,EAElB,CAAC,CACH,CAAC,CAEL,CAAC,EAEH,MACF,IAAK,YACL,IAAK,qBACH8kH,GAAOF,GAAM,OAAO,UAAU,EAAG,SAAU9uG,EAAK,CAC1C+Q,EAAS,mBAAqBjS,EAASkB,EAAK+Q,EAAS,iBAAiB,IAGtE,CAACA,EAAS,iBAAmBjS,EAASkB,EAAK+Q,EAAS,eAAe,IACrEy/F,EAAQ,KAAKxwG,CAAG,CAEpB,CAAC,EACD,KACF,CACA,OAAOwwG,CACT,EACIC,EAAiB,SAAU14C,EAAS,CACtC5hE,EAAS4hE,CACX,EACI24C,EAAc,UAAY,CAC5B,IAAIC,EAAY,EACZ54C,EAAU,CAAC,EACXy4C,EACAI,EAAe,SAAUxtH,GAAI2tB,GAAU0sD,GAAW,CACpD,IAAIxxE,GAAS,IAAIkhH,GAAO/pH,GAAI2tB,GAAUptB,CAAI,EAC1Co0E,EAAQ,KAAK9rE,EAAM,EACnBA,GAAO,GAAG,OAAQ,UAAY,CACxB,EAAE0kH,IAAcH,EAAQ,QAC1BC,EAAe14C,CAAO,CAE1B,CAAC,EACD9rE,GAAO,UAAYA,GAAO,WAAawxE,GACvCxxE,GAAO,OAAO,CAChB,EAIA,GAHA6iH,GAAM,OAAO,OAAQ,QAAS4B,CAAW,EACzCJ,EAAa,YAAY,EACzBE,EAAU3xG,GAAS,OAAO0xG,EAAYx/F,CAAQ,CAAC,EAC3CA,EAAS,MAAO,CAClBi+F,GAAOj+F,EAAS,MAAO,SAAU3sB,GAAM,CACrCwZ,GAAM,KAAK4yG,EAAS,SAAUxwG,GAAK,CACjC,OAAI8uG,GAAM,GAAG9uG,GAAK5b,GAAK,QAAQ,GAC7BwsH,EAAaP,EAASrwG,EAAG,EAAGivG,GAAS,CAAC,EAAGl+F,EAAU3sB,EAAI,EAAG4b,EAAG,EACtD,IAEF,EACT,CAAC,CACH,CAAC,EACD,MACF,CACApC,GAAM,KAAK4yG,EAAS,SAAUxwG,GAAK,CACjC6vG,GAAqBlsH,EAAK,IAAIqc,GAAI,EAAE,CAAC,CACvC,CAAC,EACDwwG,EAAU5yG,GAAM,KAAK4yG,EAAS,SAAUxwG,GAAK,CAC3C,MAAO,CAACrc,EAAK,IAAIqc,GAAI,EAAE,CACzB,CAAC,EACGwwG,EAAQ,SAAW,EACrBC,EAAe,CAAC,CAAC,EAEjBzB,GAAOwB,EAAS,SAAUxwG,GAAK,CACzBowG,EAAsBr/F,EAAU/Q,EAAG,EACrCohE,GAAc,UAAU,sEAAuEphE,EAAG,EAElG4wG,EAAaP,EAASrwG,EAAG,EAAG+Q,EAAU/Q,EAAG,CAE7C,CAAC,CAEL,EACA,OAAArc,EAAK,SAAWotB,EAChB+9F,GAAM,KAAK,OAAQ,QAAS4B,CAAW,EAChC,IAAI1lH,GAAW,SAAUxD,EAAS,CACnC2O,EACF3O,EAAQ2O,CAAM,EAEds6G,EAAiB,SAAU14C,EAAS,CAClCvwE,EAAQuwE,CAAO,CACjB,CAEJ,CAAC,CACH,EACA,IAAK,SAAU30E,EAAI,CACjB,OAAI,UAAU,SAAW,EAChB20E,GAAQ,MAAM,CAAC,EACb1zE,EAASjB,CAAE,EACbgD,GAAK2xE,GAAS,SAAU9rE,EAAQ,CACrC,OAAOA,EAAO,KAAO7I,CACvB,CAAC,EAAE,MAAM,IAAI,EACJuB,GAASvB,CAAE,GACb20E,GAAQ30E,CAAE,EAAI20E,GAAQ30E,CAAE,EAExB,IAEX,EACA,IAAK,SAAU6I,EAAQ,CACrB,IAAItI,EAAO,KACPktH,EAEJ,OADAA,EAAiBvB,GAAcrjH,EAAO,EAAE,EACpC4kH,IAAmB5kH,IAGnBtI,EAAK,IAAIsI,EAAO,EAAE,IAAM,OACtBsjH,GAAiBtjH,EAAO,EAAE,IAC5BqjH,GAAcrjH,EAAO,EAAE,EAAIA,GAE7BqjH,GAAc,KAAKrjH,CAAM,EACzB8rE,GAAQ,KAAK9rE,CAAM,GAErBwjH,GAAmB,EAAI,EACvB9rH,EAAK,aAAesI,EACpBtI,EAAK,KAAK,YAAa,CAAE,OAAQsI,CAAO,CAAC,EACpCkjH,KACHA,GAAuB,UAAY,CACjCxrH,EAAK,KAAK,cAAc,CAC1B,EACAmrH,GAAM,KAAK,OAAQ,eAAgBK,EAAoB,IAElDljH,CACT,EACA,aAAc,SAAU7I,EAAI2tB,EAAU,CACpC,OAAO,KAAK,IAAI,IAAIo8F,GAAO/pH,EAAI2tB,EAAU,IAAI,CAAC,CAChD,EACA,OAAQ,SAAU/d,EAAU,CAC1B,IAAIrP,EAAO,KACP4B,EAAG0G,EACP,GAAI,CAAC+G,EAAU,CACb,IAAKzN,EAAIwyE,GAAQ,OAAS,EAAGxyE,GAAK,EAAGA,IACnC5B,EAAK,OAAOo0E,GAAQxyE,CAAC,CAAC,EAExB,MACF,CACA,GAAIlB,EAAS2O,CAAQ,EAAG,CACtBg8G,GAAOF,GAAM,OAAO97G,CAAQ,EAAG,SAAUgN,EAAK,CAC5C/T,EAAStI,EAAK,IAAIqc,EAAI,EAAE,EACpB/T,GACFtI,EAAK,OAAOsI,CAAM,CAEtB,CAAC,EACD,MACF,CAEA,OADAA,EAAS+G,EACLxO,GAAOb,EAAK,IAAIsI,EAAO,EAAE,CAAC,EACrB,MAELyjH,GAAqBzjH,CAAM,GAC7BtI,EAAK,KAAK,eAAgB,CAAE,OAAQsI,CAAO,CAAC,EAE1C8rE,GAAQ,SAAW,GACrB+2C,GAAM,OAAO,OAAQ,eAAgBK,EAAoB,EAE3DljH,EAAO,OAAO,EACdwjH,GAAmB13C,GAAQ,OAAS,CAAC,EAC9B9rE,EACT,EACA,YAAa,SAAUgrE,EAAK9C,EAAInyE,EAAO,CACrC,IAAI2B,EAAO,KAAMsI,EAAStI,EAAK,IAAI3B,CAAK,EACxC,OAAQi1E,EAAK,CACb,IAAK,eACH,OAAKtzE,EAAK,IAAI3B,CAAK,GACjB,IAAImrH,GAAOnrH,EAAO2B,EAAK,SAAUA,CAAI,EAAE,OAAO,EAEzC,GACT,IAAK,kBACH,OAAIsI,GACFA,EAAO,OAAO,EAET,GACT,IAAK,kBACH,OAAKA,GAIDA,EAAO,SAAS,EAClBA,EAAO,KAAK,EAEZA,EAAO,KAAK,EAEP,KARLtI,EAAK,YAAY,eAAgB,EAAG3B,CAAK,EAClC,GAQX,CACA,OAAI2B,EAAK,aACAA,EAAK,aAAa,YAAYszE,EAAK9C,EAAInyE,CAAK,EAE9C,EACT,EACA,YAAa,UAAY,CACvBgtH,GAAOj3C,GAAS,SAAU9rE,EAAQ,CAChCA,EAAO,KAAK,CACd,CAAC,CACH,EACA,QAAS,SAAU6zE,EAAMvjE,EAAO,CAC9BwjE,GAAK,IAAID,EAAMvjE,CAAK,CACtB,EACA,UAAW,SAAUlF,EAAM,CACzB,OAAO0oE,GAAK,UAAU1oE,CAAI,CAC5B,EACA,UAAW,SAAUpL,EAAQ,CAC3B,IAAIyiH,EAAe,KAAK,aACpB,KAAK,eAAiBziH,IACpByiH,GACFA,EAAa,KAAK,aAAc,CAAE,cAAeziH,CAAO,CAAC,EAE3DA,EAAO,KAAK,WAAY,CAAE,cAAeyiH,CAAa,CAAC,GAEzD,KAAK,aAAeziH,CACtB,CACF,EACAgjH,GAASG,GAAeh5C,EAAU,EAClCg5C,GAAc,MAAM,EACpB,IAAI0B,GAAkB1B,GAEtB,SAAS2B,GAAWhpG,EAAK,CACvB,IAAI1K,EAAO,SAAUmvB,EAAKrhC,EAAU,CAClC,OAAOk7C,GAAU,KAAKt+B,EAAKykB,EAAKrhC,CAAQ,CAC1C,EACIwtB,EAAQguC,GAAW,MACnBja,EAAY,SAAUlgB,EAAK,CAC7B,OAAOuiC,GAAe,UAAUhnD,EAAKykB,CAAG,EAAE,KAAKzqC,EAAS,EAAK,EAAG,SAAUivH,EAAe,CACvF,OAAAxkF,EAAI,SAASwkF,EAAc,eAAgBA,EAAc,WAAW,EACpExkF,EAAI,OAAOwkF,EAAc,aAAcA,EAAc,SAAS,EACvD,EACT,CAAC,CACH,EACA,MAAO,CACL,KAAM3zG,EACN,MAAOsb,EACP,UAAW+zB,CACb,CACF,EACC,SAAUqkE,EAAY,CACrBA,EAAW,cAAgBljD,GAAa,KACxCkjD,EAAW,uBAAyBtlB,GAAoB,UACxDslB,EAAW,gBAAkBl9E,GAC7Bk9E,EAAW,QAAU/8E,EACvB,GAAE+8E,KAAeA,GAAa,CAAC,EAAE,EACjC,IAAIE,GAAeF,GAEfG,GAAM,KAAK,IAAKh/C,GAAM,KAAK,IAAKi/C,GAAU,KAAK,MAC/CC,GAAmB,SAAUz+E,EAAM+gE,EAAY9O,EAAK,CACtD,IAAI1iG,EAAGwe,EAAGoiB,EAAGC,EAAGsuF,EAASC,EACzB,OAAApvH,EAAIwxG,EAAW,EACfhzF,EAAIgzF,EAAW,EACf5wE,EAAI6P,EAAK,EACT5P,EAAI4P,EAAK,EACT0+E,EAAU3d,EAAW,EACrB4d,EAAU5d,EAAW,EACrB9O,GAAOA,GAAO,IAAI,MAAM,EAAE,EACtBA,EAAI,CAAC,IAAM,MACblkF,GAAK4wG,GAEH1sB,EAAI,CAAC,IAAM,MACb1iG,GAAKmvH,GAEHzsB,EAAI,CAAC,IAAM,MACblkF,GAAKywG,GAAQG,EAAU,CAAC,GAEtB1sB,EAAI,CAAC,IAAM,MACb1iG,GAAKivH,GAAQE,EAAU,CAAC,GAEtBzsB,EAAI,CAAC,IAAM,MACblkF,GAAKqiB,GAEH6hE,EAAI,CAAC,IAAM,MACb1iG,GAAK4gC,GAEH8hE,EAAI,CAAC,IAAM,MACblkF,GAAKywG,GAAQpuF,EAAI,CAAC,GAEhB6hE,EAAI,CAAC,IAAM,MACb1iG,GAAKivH,GAAQruF,EAAI,CAAC,GAEbyuF,GAASrvH,EAAGwe,EAAGoiB,EAAGC,CAAC,CAC5B,EACIyuF,GAA2B,SAAU7+E,EAAM+gE,EAAY+d,EAAeC,EAAM,CAC9E,IAAI/wG,EAAKpb,EACT,IAAKA,EAAI,EAAGA,EAAImsH,EAAK,OAAQnsH,IAE3B,GADAob,EAAMywG,GAAiBz+E,EAAM+gE,EAAYge,EAAKnsH,CAAC,CAAC,EAC5Cob,EAAI,GAAK8wG,EAAc,GAAK9wG,EAAI,EAAIA,EAAI,GAAK8wG,EAAc,EAAIA,EAAc,GAAK9wG,EAAI,GAAK8wG,EAAc,GAAK9wG,EAAI,EAAIA,EAAI,GAAK8wG,EAAc,EAAIA,EAAc,EACjK,OAAOC,EAAKnsH,CAAC,EAGjB,OAAO,IACT,EACIosH,GAAU,SAAUh/E,EAAM7P,EAAGC,EAAG,CAClC,OAAOwuF,GAAS5+E,EAAK,EAAI7P,EAAG6P,EAAK,EAAI5P,EAAG4P,EAAK,EAAI7P,EAAI,EAAG6P,EAAK,EAAI5P,EAAI,CAAC,CACxE,EACI6uF,GAAY,SAAUj/E,EAAMk/E,EAAU,CACxC,IAAIC,EAAIC,EAAIvlB,EAAID,EAKhB,OAJAulB,EAAK5/C,GAAIv/B,EAAK,EAAGk/E,EAAS,CAAC,EAC3BE,EAAK7/C,GAAIv/B,EAAK,EAAGk/E,EAAS,CAAC,EAC3BrlB,EAAK0kB,GAAIv+E,EAAK,EAAIA,EAAK,EAAGk/E,EAAS,EAAIA,EAAS,CAAC,EACjDtlB,EAAK2kB,GAAIv+E,EAAK,EAAIA,EAAK,EAAGk/E,EAAS,EAAIA,EAAS,CAAC,EAC7CrlB,EAAKslB,EAAK,GAAKvlB,EAAKwlB,EAAK,EACpB,KAEFR,GAASO,EAAIC,EAAIvlB,EAAKslB,EAAIvlB,EAAKwlB,CAAE,CAC1C,EACIC,GAAU,SAAUr/E,EAAMs/E,EAAWC,EAAW,CAClD,IAAIC,EAAaC,EAAaC,EAAYC,EAAYR,EAAIC,EAAIvlB,EAAID,EAAIgmB,EAAKC,EAC3E,OAAAV,EAAKn/E,EAAK,EACVo/E,EAAKp/E,EAAK,EACV65D,EAAK75D,EAAK,EAAIA,EAAK,EACnB45D,EAAK55D,EAAK,EAAIA,EAAK,EACnB4/E,EAAMN,EAAU,EAAIA,EAAU,EAC9BO,EAAMP,EAAU,EAAIA,EAAU,EAC9BE,EAAcjgD,GAAI,EAAG+/C,EAAU,EAAIH,CAAE,EACrCM,EAAclgD,GAAI,EAAG+/C,EAAU,EAAIF,CAAE,EACrCM,EAAangD,GAAI,EAAGs6B,EAAK+lB,CAAG,EAC5BD,EAAapgD,GAAI,EAAGq6B,EAAKimB,CAAG,EAC5BV,GAAMK,EACNJ,GAAMK,EACFF,IACF1lB,GAAM2lB,EACN5lB,GAAM6lB,EACNN,GAAMO,EACNN,GAAMO,GAER9lB,GAAM6lB,EACN9lB,GAAM+lB,EACCf,GAASO,EAAIC,EAAIvlB,EAAKslB,EAAIvlB,EAAKwlB,CAAE,CAC1C,EACIR,GAAW,SAAUrvH,EAAGwe,EAAGoiB,EAAGC,EAAG,CACnC,MAAO,CACL,EAAG7gC,EACH,EAAGwe,EACH,EAAGoiB,EACH,EAAGC,CACL,CACF,EACI0vF,GAAiB,SAAU78E,EAAY,CACzC,OAAO27E,GAAS37E,EAAW,KAAMA,EAAW,IAAKA,EAAW,MAAOA,EAAW,MAAM,CACtF,EACI88E,GAAO,CACT,QAASf,GACT,iBAAkBP,GAClB,yBAA0BI,GAC1B,UAAWI,GACX,MAAOI,GACP,OAAQT,GACR,eAAgBkB,EAClB,EAEIE,GAAQ,CAAC,EACTC,GAAU,CACZ,IAAK,SAAUxuH,EAAMyuH,EAAW,CAC9BF,GAAMvuH,EAAK,YAAY,CAAC,EAAIyuH,CAC9B,EACA,IAAK,SAAUzuH,EAAM,CACnB,MAAO,CAAC,CAACuuH,GAAMvuH,EAAK,YAAY,CAAC,CACnC,EACA,IAAK,SAAUA,EAAM,CACnB,IAAI0uH,EAAS1uH,EAAK,YAAY,EAC1B2uH,EAAcJ,GAAM,eAAeG,CAAM,EAAIH,GAAMG,CAAM,EAAI,KACjE,GAAIC,IAAgB,KAClB,MAAM,IAAI,MAAM,mCAAqC3uH,CAAI,EAE3D,OAAO2uH,CACT,EACA,OAAQ,SAAU3uH,EAAM2sB,EAAU,CAChC,IAAIiiG,EAUJ,GATI,OAAO5uH,GAAS,UAClB2sB,EAAWA,GAAY,CAAC,EACxBA,EAAS,KAAO3sB,IAEhB2sB,EAAW3sB,EACXA,EAAO2sB,EAAS,MAElB3sB,EAAOA,EAAK,YAAY,EACxB4uH,EAAcL,GAAMvuH,CAAI,EACpB,CAAC4uH,EACH,MAAM,IAAI,MAAM,mCAAqC5uH,CAAI,EAE3D,OAAA4uH,EAAc,IAAIA,EAAYjiG,CAAQ,EACtCiiG,EAAY,KAAO5uH,EACZ4uH,CACT,CACF,EAEIC,GAASr1G,GAAM,KAAMs1G,GAAWt1G,GAAM,OACtCu1G,GAAaC,GACbC,GAAQ,UAAY,CACxB,EACAA,GAAM,OAASF,GAAc,SAAUz2G,EAAM,CAC3C,IAAI/Y,EAAO,KACP2vH,EAAS3vH,EAAK,UACd4vH,EAAW5rH,EAAM6rH,EACjBH,EAAQ,UAAY,CACtB,IAAI9tH,EAAGkuH,EAAQC,EACX/vH,EAAO,KACX,GAAI,CAACyvH,KACCzvH,EAAK,MACPA,EAAK,KAAK,MAAMA,EAAM,SAAS,EAEjC8vH,EAAS9vH,EAAK,OACV8vH,GAEF,IADAluH,EAAIkuH,EAAO,OACJluH,KACLmuH,EAAQD,EAAOluH,CAAC,EACZmuH,EAAM,MACRA,EAAM,KAAK,MAAM/vH,EAAM,SAAS,CAK1C,EACIgwH,EAAQ,UAAY,CACtB,OAAO,IACT,EACIC,EAAe,SAAUjsH,EAAMvF,EAAI,CACrC,OAAO,UAAY,CACjB,IAAIuB,EAAO,KACPsR,EAAMtR,EAAK,OACXsG,EACJ,OAAAtG,EAAK,OAAS2vH,EAAO3rH,CAAI,EACzBsC,EAAM7H,EAAG,MAAMuB,EAAM,SAAS,EAC9BA,EAAK,OAASsR,EACPhL,CACT,CACF,EACAmpH,GAAe,GACfG,EAAY,IAAI5vH,EAChByvH,GAAe,GACX12G,EAAK,SACPu2G,GAAOv2G,EAAK,OAAQ,SAAUg3G,EAAO,CACnC,QAASG,KAAUH,EACbG,IAAW,SACbn3G,EAAKm3G,CAAM,EAAIH,EAAMG,CAAM,EAGjC,CAAC,EACGP,EAAO,SACT52G,EAAK,OAAS42G,EAAO,OAAO,OAAO52G,EAAK,MAAM,IAG9CA,EAAK,SACPu2G,GAAOv2G,EAAK,QAAQ,MAAM,GAAG,EAAG,SAAU/U,EAAM,CAC9C+U,EAAK/U,CAAI,EAAIgsH,CACf,CAAC,EAECj3G,EAAK,YACPu2G,GAAOv2G,EAAK,WAAW,MAAM,GAAG,EAAG,SAAU/U,EAAM,CACjD,IAAImsH,EAAY,IAAMnsH,EACtB+U,EAAK/U,CAAI,EAAI,SAAU3F,EAAO,CAC5B,IAAI2B,EAAO,KACX,OAAI3B,IAAU,QACZ2B,EAAKmwH,CAAS,EAAI9xH,EACX2B,GAEFA,EAAKmwH,CAAS,CACvB,CACF,CAAC,EAECp3G,EAAK,SACPu2G,GAAOv2G,EAAK,QAAS,SAAU3Q,EAAMpE,EAAM,CACzC0rH,EAAM1rH,CAAI,EAAIoE,CAChB,CAAC,EAEC2Q,EAAK,UAAY42G,EAAO,WAC1B52G,EAAK,SAAWw2G,GAAS,CAAC,EAAGI,EAAO,SAAU52G,EAAK,QAAQ,GAE7D,IAAK/U,KAAQ+U,EACX82G,EAAS92G,EAAK/U,CAAI,EACd,OAAO6rH,GAAW,YAAcF,EAAO3rH,CAAI,EAC7C4rH,EAAU5rH,CAAI,EAAIisH,EAAajsH,EAAM6rH,CAAM,EAE3CD,EAAU5rH,CAAI,EAAI6rH,EAGtB,OAAAH,EAAM,UAAYE,EAClBF,EAAM,YAAcA,EACpBA,EAAM,OAASF,GACRE,CACT,EAEA,IAAIU,GAAQ,KAAK,IAAKC,GAAQ,KAAK,IAAKC,GAAU,KAAK,MACnDC,GAAQ,SAAUlyH,EAAO,CAC3B,IAAI2B,EAAO,CAAC,EACRwB,EAAI,EAAGqnB,EAAI,EAAGzoB,EAAI,EAClBowH,EAAU,SAAUhvH,EAAGqnB,EAAGzoB,EAAG,CAC/B,IAAIg/B,EAAGx/B,GAAGM,GAAG4Z,GAAG22G,GAAQC,GASxB,OARAtxF,EAAI,EACJx/B,GAAI,EACJM,GAAI,EACJsB,EAAIA,EAAI,IACRqnB,EAAIA,EAAI,IACRzoB,EAAIA,EAAI,IACRqwH,GAASL,GAAM5uH,EAAG4uH,GAAMvnG,EAAGzoB,CAAC,CAAC,EAC7BswH,GAASL,GAAM7uH,EAAG6uH,GAAMxnG,EAAGzoB,CAAC,CAAC,EACzBqwH,KAAWC,IACbxwH,GAAIuwH,GACG,CACL,EAAG,EACH,EAAG,EACH,EAAGvwH,GAAI,GACT,IAEF4Z,GAAItY,IAAMivH,GAAS5nG,EAAIzoB,EAAIA,IAAMqwH,GAASjvH,EAAIqnB,EAAIzoB,EAAIoB,EACtD49B,EAAI59B,IAAMivH,GAAS,EAAIrwH,IAAMqwH,GAAS,EAAI,EAC1CrxF,EAAI,IAAMA,EAAItlB,IAAK42G,GAASD,KAC5B7wH,IAAK8wH,GAASD,IAAUC,GACxBxwH,GAAIwwH,GACG,CACL,EAAGJ,GAAQlxF,CAAC,EACZ,EAAGkxF,GAAQ1wH,GAAI,GAAG,EAClB,EAAG0wH,GAAQpwH,GAAI,GAAG,CACpB,EACF,EACIywH,EAAW,SAAUC,EAAKC,EAAYC,EAAY,CACpD,IAAIC,EAAMC,GAAQzyH,GAAGkR,GAMrB,GALAmhH,GAAO,SAASA,EAAK,EAAE,GAAK,GAAK,IACjCC,EAAa,SAASA,EAAY,EAAE,EAAI,IACxCC,EAAa,SAASA,EAAY,EAAE,EAAI,IACxCD,EAAaR,GAAM,EAAGD,GAAMS,EAAY,CAAC,CAAC,EAC1CC,EAAaT,GAAM,EAAGD,GAAMU,EAAY,CAAC,CAAC,EACtCD,IAAe,EAAG,CACpBrvH,EAAIqnB,EAAIzoB,EAAIkwH,GAAQ,IAAMQ,CAAU,EACpC,MACF,CAKA,OAJAC,EAAOH,EAAM,GACbI,GAASF,EAAaD,EACtBtyH,GAAIyyH,IAAU,EAAI,KAAK,IAAID,EAAO,EAAI,CAAC,GACvCthH,GAAQqhH,EAAaE,GACb,KAAK,MAAMD,CAAI,EAAG,CAC1B,IAAK,GACHvvH,EAAIwvH,GACJnoG,EAAItqB,GACJ6B,EAAI,EACJ,MACF,IAAK,GACHoB,EAAIjD,GACJsqB,EAAImoG,GACJ5wH,EAAI,EACJ,MACF,IAAK,GACHoB,EAAI,EACJqnB,EAAImoG,GACJ5wH,EAAI7B,GACJ,MACF,IAAK,GACHiD,EAAI,EACJqnB,EAAItqB,GACJ6B,EAAI4wH,GACJ,MACF,IAAK,GACHxvH,EAAIjD,GACJsqB,EAAI,EACJzoB,EAAI4wH,GACJ,MACF,IAAK,GACHxvH,EAAIwvH,GACJnoG,EAAI,EACJzoB,EAAI7B,GACJ,MACF,QACEiD,EAAIqnB,EAAIzoB,EAAI,CACd,CACAoB,EAAI8uH,GAAQ,KAAO9uH,EAAIiO,GAAM,EAC7BoZ,EAAIynG,GAAQ,KAAOznG,EAAIpZ,GAAM,EAC7BrP,EAAIkwH,GAAQ,KAAOlwH,EAAIqP,GAAM,CAC/B,EACI0qB,EAAQ,UAAY,CACtB,IAAIC,EAAM,SAAUjzB,EAAK,CACvB,OAAAA,EAAM,SAASA,EAAK,EAAE,EAAE,SAAS,EAAE,EAC5BA,EAAI,OAAS,EAAIA,EAAM,IAAMA,CACtC,EACA,MAAO,IAAMizB,EAAI54B,CAAC,EAAI44B,EAAIvR,CAAC,EAAIuR,EAAIh6B,CAAC,CACtC,EACI6wH,EAAQ,UAAY,CACtB,MAAO,CACL,EAAGzvH,EACH,EAAGqnB,EACH,EAAGzoB,CACL,CACF,EACI8wH,EAAQ,UAAY,CACtB,OAAOV,EAAQhvH,EAAGqnB,EAAGzoB,CAAC,CACxB,EACIqvF,EAAQ,SAAUpxF,EAAO,CAC3B,IAAImO,EACJ,OAAI,OAAOnO,GAAU,SACf,MAAOA,GACTmD,EAAInD,EAAM,EACVwqB,EAAIxqB,EAAM,EACV+B,EAAI/B,EAAM,GACD,MAAOA,GAChBsyH,EAAStyH,EAAM,EAAGA,EAAM,EAAGA,EAAM,CAAC,GAGhCmO,EAAU,8DAA8D,KAAKnO,CAAK,IACpFmD,EAAI,SAASgL,EAAQ,CAAC,EAAG,EAAE,EAC3Bqc,EAAI,SAASrc,EAAQ,CAAC,EAAG,EAAE,EAC3BpM,EAAI,SAASoM,EAAQ,CAAC,EAAG,EAAE,IAClBA,EAAU,oCAAoC,KAAKnO,CAAK,IACjEmD,EAAI,SAASgL,EAAQ,CAAC,EAAG,EAAE,EAC3Bqc,EAAI,SAASrc,EAAQ,CAAC,EAAG,EAAE,EAC3BpM,EAAI,SAASoM,EAAQ,CAAC,EAAG,EAAE,IAClBA,EAAU,2BAA2B,KAAKnO,CAAK,KACxDmD,EAAI,SAASgL,EAAQ,CAAC,EAAIA,EAAQ,CAAC,EAAG,EAAE,EACxCqc,EAAI,SAASrc,EAAQ,CAAC,EAAIA,EAAQ,CAAC,EAAG,EAAE,EACxCpM,EAAI,SAASoM,EAAQ,CAAC,EAAIA,EAAQ,CAAC,EAAG,EAAE,GAG5ChL,EAAIA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,EAChCqnB,EAAIA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,EAChCzoB,EAAIA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,EACzBJ,CACT,EACA,OAAI3B,GACFoxF,EAAMpxF,CAAK,EAEb2B,EAAK,MAAQixH,EACbjxH,EAAK,MAAQkxH,EACblxH,EAAK,MAAQm6B,EACbn6B,EAAK,MAAQyvF,EACNzvF,CACT,EAEIsoD,GAAY,SAAUhpD,EAAG6xH,EAAO,CAClC,IAAIvvH,EAAG1B,EAAGojB,EAAGtf,EAEb,GADAmtH,EAAQA,GAAS,IACb7xH,IAAM,KACR,MAAO,OAGT,GADAgkB,EAAI,OAAOhkB,EACPgkB,IAAM,SACR,OAAApjB,EAAI;AAAA,iBACGixH,EAAQ7xH,EAAE,QAAQ,oCAAqC,SAAUQ,EAAGM,EAAG,CAC5E,OAAI+wH,IAAU,KAAOrxH,IAAM,IAClBA,GAET8B,EAAI1B,EAAE,QAAQE,CAAC,EACXwB,EAAI,EACC,KAAO1B,EAAE,OAAO0B,EAAI,CAAC,GAE9B9B,EAAIM,EAAE,WAAW,EAAE,SAAS,EAAE,EACvB,MAAQ,OAAO,UAAUN,EAAE,MAAM,EAAIA,GAC9C,CAAC,EAAIqxH,EAEP,GAAI7tG,IAAM,SAAU,CAClB,GAAIhkB,EAAE,gBAAkB,OAAO,UAAU,SAAS,KAAKA,CAAC,IAAM,iBAAkB,CAC9E,IAAKsC,EAAI,EAAG1B,EAAI,IAAK0B,EAAItC,EAAE,OAAQsC,IACjC1B,IAAM0B,EAAI,EAAI,IAAM,IAAM0mD,GAAUhpD,EAAEsC,CAAC,EAAGuvH,CAAK,EAEjD,OAAOjxH,EAAI,GACb,CACAA,EAAI,IACJ,IAAK8D,KAAQ1E,EACPA,EAAE,eAAe0E,CAAI,IACvB9D,GAAK,OAAOZ,EAAE0E,CAAI,GAAM,YAAc9D,EAAE,OAAS,EAAI,IAAMixH,EAAQA,GAASntH,EAAOmtH,EAAQ,IAAM7oE,GAAUhpD,EAAE0E,CAAI,EAAGmtH,CAAK,EAAI,IAGjI,OAAOjxH,EAAI,GACb,CACA,MAAO,GAAKZ,CACd,EACI8xH,GAAS,CACX,UAAW9oE,GACX,MAAO,SAAU50C,EAAM,CACrB,GAAI,CACF,OAAO,KAAK,MAAMA,CAAI,CACxB,MAAa,CACb,CACF,CACF,EAEI29G,GAAQ,CACV,UAAW,CAAC,EACZ,MAAO,EACP,KAAM,SAAUjkG,EAAU,CACxB,IAAIptB,EAAO,KAAMokB,EAAMgf,GAAW,IAAKh5B,EAAQgjB,EAAS,QAAU,OAAYA,EAAS,MAAQptB,EAAK,MAChGP,EAAK,iBAAmB2K,EAC5BpK,EAAK,UAAUoK,CAAK,EAAI,SAAUo0E,EAAM,CACtCp6D,EAAI,OAAO3kB,CAAE,EACb,OAAOO,EAAK,UAAUoK,CAAK,EAC3BgjB,EAAS,SAASoxD,CAAI,CACxB,EACAp6D,EAAI,IAAIA,EAAI,IAAI,KAAM,SAAU,CAC9B,GAAI3kB,EACJ,IAAK2tB,EAAS,IACd,KAAM,iBACR,CAAC,EACDptB,EAAK,OACP,CACF,EAEIsxH,GAAM,CACR,KAAM,SAAUlkG,EAAU,CACxB,IAAIkxD,EAAKl0E,EAAQ,EACbmnH,EAAQ,UAAY,CAClB,CAACnkG,EAAS,OAASkxD,EAAI,aAAe,GAAKl0E,IAAU,KACnDgjB,EAAS,SAAWhjB,EAAQ,KAASk0E,EAAI,SAAW,IACtDlxD,EAAS,QAAQ,KAAKA,EAAS,cAAe,GAAKkxD,EAAI,aAAcA,EAAKlxD,CAAQ,EACzEA,EAAS,OAClBA,EAAS,MAAM,KAAKA,EAAS,YAAahjB,EAAQ,IAAQ,YAAc,UAAWk0E,EAAKlxD,CAAQ,EAElGkxD,EAAM,MAEN,WAAWizC,EAAO,EAAE,CAExB,EAQA,GAPAnkG,EAAS,MAAQA,EAAS,OAAS,KACnCA,EAAS,cAAgBA,EAAS,eAAiBA,EAAS,MAC5DA,EAAS,YAAcA,EAAS,aAAeA,EAAS,MACxDA,EAAS,MAAQA,EAAS,QAAU,GACpCA,EAAS,KAAOA,EAAS,MAAQ,GACjCkkG,GAAI,KAAK,mBAAoB,CAAE,SAAUlkG,CAAS,CAAC,EACnDkxD,EAAMV,GAAe,EACjBU,EAAK,CAsBP,GArBIA,EAAI,kBACNA,EAAI,iBAAiBlxD,EAAS,YAAY,EAE5CkxD,EAAI,KAAKlxD,EAAS,OAASA,EAAS,KAAO,OAAS,OAAQA,EAAS,IAAKA,EAAS,KAAK,EACpFA,EAAS,cACXkxD,EAAI,gBAAkB,IAEpBlxD,EAAS,cACXkxD,EAAI,iBAAiB,eAAgBlxD,EAAS,YAAY,EAExDA,EAAS,gBACXnT,GAAM,KAAKmT,EAAS,eAAgB,SAAUokG,EAAQ,CACpDlzC,EAAI,iBAAiBkzC,EAAO,IAAKA,EAAO,KAAK,CAC/C,CAAC,EAEHlzC,EAAI,iBAAiB,mBAAoB,gBAAgB,EACzDA,EAAMgzC,GAAI,KAAK,aAAc,CAC3B,IAAKhzC,EACL,SAAUlxD,CACZ,CAAC,EAAE,IACHkxD,EAAI,KAAKlxD,EAAS,IAAI,EAClB,CAACA,EAAS,MACZ,OAAOmkG,EAAM,EAEf,WAAWA,EAAO,EAAE,CACtB,CACF,CACF,EACAt3G,GAAM,OAAOq3G,GAAK7+C,EAAU,EAE5B,IAAIg/C,GAAWx3G,GAAM,OACjBy3G,GAAc,SAAUtkG,EAAU,CACpC,KAAK,SAAWqkG,GAAS,CAAC,EAAGrkG,CAAQ,EACrC,KAAK,MAAQ,CACf,EACAskG,GAAY,QAAU,SAAUpyH,EAAG,CACjC,OAAO,IAAIoyH,GAAY,EAAE,KAAKpyH,CAAC,CACjC,EACAoyH,GAAY,UAAY,CACtB,KAAM,SAAUxzH,EAAM,CACpB,IAAIyzH,EAAMzzH,EAAK,MAAO0zH,EAAM1zH,EAAK,QACjCA,EAAOuzH,GAAS,KAAK,SAAUvzH,CAAI,EACnCA,EAAK,QAAU,SAAUob,EAAG/a,EAAG,CAC7B+a,EAAI83G,GAAO,MAAM93G,CAAC,EACd,OAAOA,EAAM,MACfA,EAAI,CAAE,MAAO,mBAAoB,GAE/BA,EAAE,MACJq4G,EAAI,KAAKzzH,EAAK,aAAeA,EAAK,MAAOob,EAAE,MAAO/a,CAAC,EAEnDqzH,EAAI,KAAK1zH,EAAK,eAAiBA,EAAK,MAAOob,EAAE,MAAM,CAEvD,EACApb,EAAK,MAAQ,SAAU2zH,EAAItzH,EAAG,CACxBozH,GACFA,EAAI,KAAKzzH,EAAK,aAAeA,EAAK,MAAO2zH,EAAItzH,CAAC,CAElD,EACAL,EAAK,KAAOkzH,GAAO,UAAU,CAC3B,GAAIlzH,EAAK,IAAM,IAAM,KAAK,QAC1B,OAAQA,EAAK,OACb,OAAQA,EAAK,MACf,CAAC,EACDA,EAAK,aAAe,mBACpBozH,GAAI,KAAKpzH,CAAI,CACf,CACF,EAEA,IAAI4zH,GAAW,UAAY,CACzB,OAAO,UAAY,CACjB,IAAIvoH,EAAO,CAAC,EACR2G,EAAO,CAAC,EACR6hH,EAAU,CACZ,QAAS,SAAU3hH,EAAK,CACtB,IAAIsH,EAAOnO,EAAK6G,CAAG,EACnB,OAAOsH,GAAc,IACvB,EACA,QAAS,SAAUtH,EAAK/R,EAAO,CAC7B6R,EAAK,KAAKE,CAAG,EACb7G,EAAK6G,CAAG,EAAI,OAAO/R,CAAK,CAC1B,EACA,IAAK,SAAUsZ,EAAO,CACpB,OAAOzH,EAAKyH,CAAK,CACnB,EACA,WAAY,SAAUvH,EAAK,CACzBF,EAAOA,EAAK,OAAO,SAAU0T,EAAG,CAC9B,OAAOA,IAAMxT,CACf,CAAC,EACD,OAAO7G,EAAK6G,CAAG,CACjB,EACA,MAAO,UAAY,CACjBF,EAAO,CAAC,EACR3G,EAAO,CAAC,CACV,EACA,OAAQ,CACV,EACA,cAAO,eAAewoH,EAAS,SAAU,CACvC,IAAK,UAAY,CACf,OAAO7hH,EAAK,MACd,EACA,aAAc,GACd,WAAY,EACd,CAAC,EACM6hH,CACT,EAAE,CACJ,EAEIC,GACJ,GAAI,CACFA,GAAen0H,EAAW,OAAO,YACnC,MAAY,CACVm0H,GAAeF,GAAS,CAC1B,CACA,IAAIG,GAAeD,GAEfE,GAAU/E,GACVgF,GAAY,CACd,KAAM,CAAE,KAAMpD,EAAK,EACnB,KAAM,CACJ,QAAS1nH,GACT,MAAOgB,GACP,MAAO4R,GACP,GAAImsE,GACJ,IAAKugC,GACL,MAAO+I,GACP,gBAAiB19C,GACjB,WAAYS,GACZ,KAAM2J,GACN,IAAKk1C,GACL,KAAMF,GACN,YAAaM,GACb,MAAOL,GACP,aAAcY,GACd,MAAO1B,EACT,EACA,IAAK,CACH,WAAYrmH,GACZ,OAAQkF,GACR,SAAU8L,GACV,WAAY8T,GACZ,SAAUoU,GACV,aAAcK,GACd,WAAY6pF,GACZ,WAAYlpB,GACZ,iBAAkBO,GAClB,gBAAiBJ,GACjB,UAAW+I,GACX,MAAOpjG,GAAW,KACpB,EACA,KAAM,CACJ,OAAQmwB,GACR,SAAU7F,GACV,KAAMwrE,GACN,OAAQ/pE,GACR,UAAWs7D,GACX,UAAWoQ,GACX,OAAQ55C,GACR,WAAYK,EACd,EACA,GAAI,CAAE,QAAS6mE,EAAQ,EACvB,IAAKrpH,GACL,aAAc8+B,GACd,UAAW4f,GACX,UAAW45C,GACX,YAAapJ,GACb,eAAgBzkB,GAChB,cAAegL,GACf,oBAAqBf,GACrB,iBAAkBhG,GAClB,UAAWwC,GACX,OAAQ0yC,GACR,aAAcM,GACd,cAAeqD,GACf,IAAK/pF,GAAW,IAChB,aAAcK,GAAa,aAC3B,cAAeiB,GAAa,cAC5B,aAAcA,GAAa,aAC3B,KAAMzqB,GAAM,KACZ,QAASA,GAAM,QACf,GAAIA,GAAM,GACV,QAASA,GAAM,QACf,QAASA,GAAM,QACf,KAAMA,GAAM,KACZ,IAAKA,GAAM,IACX,KAAMA,GAAM,KACZ,QAASA,GAAM,QACf,OAAQA,GAAM,OACd,OAAQA,GAAM,OACd,KAAMA,GAAM,KACZ,SAAUA,GAAM,SAChB,QAASA,GAAM,QACf,QAASA,GAAM,QACf,gBAAiBA,GAAM,gBACvB,QAASrU,GAAI,MACb,SAAUA,GAAI,OACd,KAAMA,GAAI,GACV,QAASA,GAAI,MACb,MAAOA,GAAI,GACb,EACAssH,GAAUj4G,GAAM,OAAOi4G,GAASC,EAAS,EACzC,IAAIC,GAAUF,GAEVG,GAAwB,SAAUH,EAAS,CAC7C,GAAI,OAAOt0H,IAAW,SACpB,GAAI,CACFA,GAAO,QAAUs0H,CACnB,MAAY,CACZ,CAEJ,EACII,GAAuB,SAAUJ,EAAS,CAC5C,OAAO,QAAUA,EACjB,OAAO,QAAUA,CACnB,EACAI,GAAqBF,EAAO,EAC5BC,GAAsBD,EAAO,CAEjC,GAAE,MAAM,CACR,GAAG,IC/y1BH,IAAAG,GAAAC,GAAA,MAAC,UAAY,CACb,IAAIC,EAAS,SAAUC,EAAY,CAC/B,aAEA,IAAIC,EAAS,QAAQ,KAAK,MAAM,QAAQ,uBAAuB,EAE3DC,EAAW,QAAQ,KAAK,MAAM,QAAQ,wBAAwB,EAE9DC,EAAW,QAAQ,KAAK,MAAM,QAAQ,wBAAwB,EAE9DC,EAAW,QAAQ,KAAK,MAAM,QAAQ,iBAAiB,EAEvDC,EAAW,QAAQ,KAAK,MAAM,QAAQ,6BAA6B,EAEnEC,EAAW,QAAQ,KAAK,MAAM,QAAQ,oBAAoB,EAE1DC,EAAW,QAAQ,KAAK,MAAM,QAAQ,sBAAsB,EAE5DC,EAAa,SAAUC,EAAM,CAC/B,OAAOA,GAAQA,EAAK,WAAa,CACnC,EACIC,EAAa,SAAUD,EAAM,CAC/B,OAAOA,GAAQ,eAAe,KAAKA,EAAK,QAAQ,CAClD,EACIE,EAAa,SAAUF,EAAM,CAC/B,OAAOA,GAAQ,YAAY,KAAKA,EAAK,QAAQ,CAC/C,EACIG,EAAiB,SAAUH,EAAM,CACnC,OAAOA,GAAQ,eAAe,KAAKA,EAAK,QAAQ,CAClD,EACII,EAAe,SAAUJ,EAAM,CACjC,OAAOA,GAAQ,YAAY,KAAKA,EAAK,QAAQ,CAC/C,EACIK,EAAkB,SAAUL,EAAM,CACpC,OAAOA,GAAQ,YAAY,KAAKA,EAAK,QAAQ,CAC/C,EACIM,EAAO,SAAUN,EAAM,CACzB,OAAOA,GAAQA,EAAK,WAAa,IACnC,EACIO,EAAe,SAAUP,EAAM,CACjC,OAAOA,EAAK,WAAW,aAAeA,CACxC,EACIQ,EAAc,SAAUR,EAAM,CAChC,OAAOA,EAAK,WAAW,YAAcA,CACvC,EACIS,EAAc,SAAUC,EAAQV,EAAM,CACxC,OAAOA,GAAQ,CAAC,CAACU,EAAO,OAAO,qBAAqB,EAAEV,EAAK,QAAQ,CACrE,EACIW,EAAU,SAAUX,EAAMY,EAAe,CAC3C,OAAOZ,GAAQA,EAAK,YAAYY,CAClC,EACIC,GAAY,SAAUC,EAAKd,EAAM,CACnC,OAAKM,EAAKN,CAAI,EAGV,GAAAc,EAAI,QAAQd,EAAK,WAAW,GAAK,CAACM,EAAKN,EAAK,eAAe,GAFtD,EAMX,EACIe,GAAU,SAAUD,EAAKE,EAAKC,GAAe,CAC/C,IAAIC,GAAQJ,EAAI,QAAQE,CAAG,EAC3B,OAAIC,IAAiBH,EAAI,OAAO,+BAAgCE,CAAG,EAAE,OAAS,EACrE,GAEFE,EACT,EACIC,EAAgB,SAAUL,EAAKE,EAAK,CACtC,OAAOF,EAAI,UAAUE,EAAKF,EAAI,QAAQ,CAAC,CACzC,EACIM,GAAW,CACb,WAAYrB,EACZ,WAAYE,EACZ,WAAYC,EACZ,aAAcE,EACd,eAAgBD,EAChB,gBAAiBE,EACjB,KAAMC,EACN,aAAcC,EACd,YAAaC,EACb,YAAaC,EACb,QAASE,EACT,UAAWE,GACX,QAASE,GACT,cAAeI,CACjB,EAEIE,GAAqB,SAAUC,EAAWC,EAAQ,CACpD,GAAIH,GAAS,WAAWE,CAAS,EAC/B,MAAO,CACL,UAAWA,EACX,OAAQC,CACV,EAEF,IAAIvB,GAAOP,EAAS,QAAQ6B,EAAWC,CAAM,EAC7C,OAAIH,GAAS,WAAWpB,EAAI,EACnB,CACL,UAAWA,GACX,OAAQuB,GAAUD,EAAU,WAAW,OAAStB,GAAK,KAAK,OAAS,CACrE,EACSA,GAAK,iBAAmBoB,GAAS,WAAWpB,GAAK,eAAe,EAClE,CACL,UAAWA,GAAK,gBAChB,OAAQA,GAAK,gBAAgB,KAAK,MACpC,EACSA,GAAK,aAAeoB,GAAS,WAAWpB,GAAK,WAAW,EAC1D,CACL,UAAWA,GAAK,YAChB,OAAQ,CACV,EAEK,CACL,UAAWsB,EACX,OAAQC,CACV,CACF,EACIC,GAAiB,SAAUC,EAAK,CAClC,IAAIC,EAASD,EAAI,WAAW,EACxBE,GAAaN,GAAmBI,EAAI,eAAgBA,EAAI,WAAW,EACvEC,EAAO,SAASC,GAAW,UAAWA,GAAW,MAAM,EACvD,IAAIC,GAAWP,GAAmBI,EAAI,aAAcA,EAAI,SAAS,EACjE,OAAAC,EAAO,OAAOE,GAAS,UAAWA,GAAS,MAAM,EAC1CF,CACT,EACIG,GAAQ,CACV,mBAAoBR,GACpB,eAAgBG,EAClB,EAEIM,GAAMhC,EAAS,IACfiC,GAAiB,SAAUN,EAAK,CAClC,IAAIO,EAAW,CAAC,EACZC,GAAgB,SAAUC,GAAO,CACnC,IAAIC,GAAYb,GAAWC,GAC3BD,GAAYG,EAAIS,GAAQ,iBAAmB,cAAc,EACzDX,GAASE,EAAIS,GAAQ,cAAgB,WAAW,EAC5CZ,GAAU,WAAa,IACzBa,GAAaL,GAAI,OAAO,OAAQ,CAAE,gBAAiB,UAAW,CAAC,EAC3DR,GAAU,cAAc,GAC1BC,GAAS,KAAK,IAAIA,GAAQD,GAAU,WAAW,OAAS,CAAC,EACrDY,GACFZ,GAAU,aAAaa,GAAYb,GAAU,WAAWC,EAAM,CAAC,EAE/DO,GAAI,YAAYK,GAAYb,GAAU,WAAWC,EAAM,CAAC,GAG1DD,GAAU,YAAYa,EAAU,EAElCb,GAAYa,GACZZ,GAAS,GAEXS,EAASE,GAAQ,iBAAmB,cAAc,EAAIZ,GACtDU,EAASE,GAAQ,cAAgB,WAAW,EAAIX,EAClD,EACA,OAAAU,GAAc,EAAI,EACbR,EAAI,WACPQ,GAAc,EAETD,CACT,EACII,GAAkB,SAAUJ,EAAU,CACxC,SAASK,EAAgBH,GAAO,CAC9B,IAAIZ,GAAWC,GAAQvB,GACnBsC,GAAY,SAAUhB,GAAW,CAEnC,QADItB,GAAOsB,GAAU,WAAW,WAAYiB,GAAM,EAC3CvC,IAAM,CACX,GAAIA,KAASsB,GACX,OAAOiB,IAELvC,GAAK,WAAa,GAAKA,GAAK,aAAa,eAAe,IAAM,aAChEuC,KAEFvC,GAAOA,GAAK,WACd,CACA,MAAO,EACT,EACAsB,GAAYtB,GAAOgC,EAASE,GAAQ,iBAAmB,cAAc,EACrEX,GAASS,EAASE,GAAQ,cAAgB,WAAW,EAChDZ,KAGDA,GAAU,WAAa,IACzBC,GAASe,GAAUhB,EAAS,EAC5BA,GAAYA,GAAU,WACtBQ,GAAI,OAAO9B,EAAI,EACX,CAACsB,GAAU,cAAc,GAAKQ,GAAI,QAAQR,EAAS,GACrDA,GAAU,YAAYQ,GAAI,OAAO,IAAI,CAAC,GAG1CE,EAASE,GAAQ,iBAAmB,cAAc,EAAIZ,GACtDU,EAASE,GAAQ,cAAgB,WAAW,EAAIX,GAClD,CACAc,EAAgB,EAAI,EACpBA,EAAgB,EAChB,IAAIZ,GAAMK,GAAI,UAAU,EACxB,OAAAL,GAAI,SAASO,EAAS,eAAgBA,EAAS,WAAW,EACtDA,EAAS,cACXP,GAAI,OAAOO,EAAS,aAAcA,EAAS,SAAS,EAE/CH,GAAM,eAAeJ,EAAG,CACjC,EACIe,GAAW,CACb,eAAgBT,GAChB,gBAAiBK,EACnB,EAEIK,GAAO,UAAY,CACvB,EACIC,GAAW,SAAUC,EAAO,CAC9B,OAAO,UAAY,CACjB,OAAOA,CACT,CACF,EACIC,GAAM,SAAUC,EAAG,CACrB,OAAO,UAAY,CAEjB,QADIC,EAAO,CAAC,EACHC,GAAK,EAAGA,GAAK,UAAU,OAAQA,KACtCD,EAAKC,EAAE,EAAI,UAAUA,EAAE,EAEzB,MAAO,CAACF,EAAE,MAAM,KAAMC,CAAI,CAC5B,CACF,EACIE,GAAQN,GAAS,EAAK,EACtBO,GAASP,GAAS,EAAI,EAEtBQ,GAAO,UAAY,CACrB,OAAOC,EACT,EACIA,GAAO,UAAY,CACrB,IAAIC,EAAK,SAAUC,GAAG,CACpB,OAAOA,GAAE,OAAO,CAClB,EACIC,EAAO,SAAUC,GAAO,CAC1B,OAAOA,GAAM,CACf,EACIC,GAAK,SAAUC,GAAG,CACpB,OAAOA,EACT,EACIC,GAAK,CACP,KAAM,SAAUD,GAAGE,GAAG,CACpB,OAAOF,GAAE,CACX,EACA,GAAIT,GACJ,OAAQA,GACR,OAAQC,GACR,MAAOO,GACP,WAAYF,EACZ,SAAU,SAAUM,GAAK,CACvB,MAAM,IAAI,MAAMA,IAAO,iCAAiC,CAC1D,EACA,UAAWlB,GAAS,IAAI,EACxB,eAAgBA,GAAS,MAAS,EAClC,GAAIc,GACJ,QAASF,EACT,IAAKJ,GACL,KAAMT,GACN,KAAMS,GACN,OAAQF,GACR,OAAQC,GACR,OAAQC,GACR,OAAQE,EACR,QAASA,EACT,QAAS,UAAY,CACnB,MAAO,CAAC,CACV,EACA,SAAUV,GAAS,QAAQ,CAC7B,EACA,OAAI,OAAO,QACT,OAAO,OAAOgB,EAAE,EAEXA,EACT,EAAE,EACEG,GAAO,SAAUC,EAAG,CACtB,IAAIC,EAAarB,GAASoB,CAAC,EACvBE,GAAO,UAAY,CACrB,OAAON,EACT,EACIO,GAAO,SAAUpB,GAAG,CACtB,OAAOA,GAAEiB,CAAC,CACZ,EACIJ,GAAK,CACP,KAAM,SAAUD,GAAGE,GAAG,CACpB,OAAOA,GAAEG,CAAC,CACZ,EACA,GAAI,SAAUI,GAAG,CACf,OAAOJ,IAAMI,EACf,EACA,OAAQjB,GACR,OAAQD,GACR,MAAOe,EACP,WAAYA,EACZ,SAAUA,EACV,UAAWA,EACX,eAAgBA,EAChB,GAAIC,GACJ,QAASA,GACT,IAAK,SAAUnB,GAAG,CAChB,OAAOgB,GAAKhB,GAAEiB,CAAC,CAAC,CAClB,EACA,KAAM,SAAUjB,GAAG,CACjBA,GAAEiB,CAAC,CACL,EACA,KAAMG,GACN,OAAQA,GACR,OAAQA,GACR,OAAQ,SAAUpB,GAAG,CACnB,OAAOA,GAAEiB,CAAC,EAAIJ,GAAKP,EACrB,EACA,QAAS,UAAY,CACnB,MAAO,CAACW,CAAC,CACX,EACA,SAAU,UAAY,CACpB,MAAO,QAAUA,EAAI,GACvB,EACA,OAAQ,SAAUT,GAAG,CACnB,OAAOA,GAAE,GAAGS,CAAC,CACf,EACA,QAAS,SAAUT,GAAGc,GAAW,CAC/B,OAAOd,GAAE,KAAKL,GAAO,SAAUoB,GAAG,CAChC,OAAOD,GAAUL,EAAGM,EAAC,CACvB,CAAC,CACH,CACF,EACA,OAAOV,EACT,EACIW,GAAO,SAAU1B,EAAO,CAC1B,OAAOA,GAAU,KAA8BQ,GAAOU,GAAKlB,CAAK,CAClE,EACI2B,GAAS,CACX,KAAMT,GACN,KAAMX,GACN,KAAMmB,EACR,EAEIE,GAAS,SAAUC,EAAG,CACxB,GAAIA,IAAM,KACR,MAAO,OAET,IAAIC,EAAI,OAAOD,EACf,OAAIC,IAAM,WAAa,MAAM,UAAU,cAAcD,CAAC,GAAKA,EAAE,aAAeA,EAAE,YAAY,OAAS,SAC1F,QAELC,IAAM,WAAa,OAAO,UAAU,cAAcD,CAAC,GAAKA,EAAE,aAAeA,EAAE,YAAY,OAAS,UAC3F,SAEFC,CACT,EACIC,GAAS,SAAUC,EAAM,CAC3B,OAAO,SAAUhC,EAAO,CACtB,OAAO4B,GAAO5B,CAAK,IAAMgC,CAC3B,CACF,EACIC,GAAWF,GAAO,QAAQ,EAC1BG,GAAUH,GAAO,OAAO,EACxBI,GAAYJ,GAAO,SAAS,EAC5BK,GAAaL,GAAO,UAAU,EAC9BM,GAAWN,GAAO,QAAQ,EAE1BO,GAAc,MAAM,UAAU,MAC9BC,GAAa,MAAM,UAAU,KAC7BC,GAAM,SAAUC,EAAIvC,EAAG,CAGzB,QAFIwC,GAAMD,EAAG,OACTE,GAAI,IAAI,MAAMD,EAAG,EACZE,GAAI,EAAGA,GAAIF,GAAKE,KAAK,CAC5B,IAAIf,GAAIY,EAAGG,EAAC,EACZD,GAAEC,EAAC,EAAI1C,EAAE2B,GAAGe,EAAC,CACf,CACA,OAAOD,EACT,EACIE,GAAO,SAAUJ,EAAIvC,EAAG,CAC1B,QAAS0C,GAAI,EAAGF,GAAMD,EAAG,OAAQG,GAAIF,GAAKE,KAAK,CAC7C,IAAIf,GAAIY,EAAGG,EAAC,EACZ1C,EAAE2B,GAAGe,EAAC,CACR,CACF,EACIE,GAAS,SAAUL,EAAIM,EAAM,CAE/B,QADIJ,GAAI,CAAC,EACAC,GAAI,EAAGF,GAAMD,EAAG,OAAQG,GAAIF,GAAKE,KAAK,CAC7C,IAAIf,GAAIY,EAAGG,EAAC,EACRG,EAAKlB,GAAGe,EAAC,GACXD,GAAE,KAAKd,EAAC,CAEZ,CACA,OAAOc,EACT,EACIK,GAAU,SAAUP,EAAIvC,EAAG,CAC7B,GAAIuC,EAAG,SAAW,EAChB,MAAO,CAAC,EAKR,QAHIQ,GAAU/C,EAAEuC,EAAG,CAAC,CAAC,EACjBE,GAAI,CAAC,EACLO,GAAQ,CAAC,EACJN,GAAI,EAAGF,GAAMD,EAAG,OAAQG,GAAIF,GAAKE,KAAK,CAC7C,IAAIf,GAAIY,EAAGG,EAAC,EACRZ,GAAO9B,EAAE2B,EAAC,EACVG,KAASiB,KACXN,GAAE,KAAKO,EAAK,EACZA,GAAQ,CAAC,GAEXD,GAAUjB,GACVkB,GAAM,KAAKrB,EAAC,CACd,CACA,OAAIqB,GAAM,SAAW,GACnBP,GAAE,KAAKO,EAAK,EAEPP,EAEX,EACIQ,GAAQ,SAAUV,EAAIvC,EAAGkD,GAAK,CAChC,OAAAP,GAAKJ,EAAI,SAAUZ,GAAG,CACpBuB,GAAMlD,EAAEkD,GAAKvB,EAAC,CAChB,CAAC,EACMuB,EACT,EACIC,GAAO,SAAUZ,EAAIM,EAAM,CAC7B,QAASH,GAAI,EAAGF,GAAMD,EAAG,OAAQG,GAAIF,GAAKE,KAAK,CAC7C,IAAIf,GAAIY,EAAGG,EAAC,EACZ,GAAIG,EAAKlB,GAAGe,EAAC,EACX,OAAOjB,GAAO,KAAKE,EAAC,CAExB,CACA,OAAOF,GAAO,KAAK,CACrB,EACI2B,GAAU,SAAUb,EAAI,CAE1B,QADIE,EAAI,CAAC,EACAC,GAAI,EAAGF,GAAMD,EAAG,OAAQG,GAAIF,GAAK,EAAEE,GAAG,CAC7C,GAAI,CAACV,GAAQO,EAAGG,EAAC,CAAC,EAChB,MAAM,IAAI,MAAM,oBAAsBA,GAAI,6BAA+BH,CAAE,EAE7EF,GAAW,MAAMI,EAAGF,EAAGG,EAAC,CAAC,CAC3B,CACA,OAAOD,CACT,EACIrB,GAAO,SAAUmB,EAAIvC,EAAG,CAC1B,IAAIqD,GAASf,GAAIC,EAAIvC,CAAC,EACtB,OAAOoD,GAAQC,EAAM,CACvB,EACIC,GAAU,SAAUf,EAAI,CAC1B,IAAIE,EAAIL,GAAY,KAAKG,EAAI,CAAC,EAC9B,OAAAE,EAAE,QAAQ,EACHA,CACT,EACIc,GAAO,SAAUhB,EAAI,CACvB,OAAOA,EAAG,SAAW,EAAId,GAAO,KAAK,EAAIA,GAAO,KAAKc,EAAG,CAAC,CAAC,CAC5D,EACIiB,GAAO,SAAUjB,EAAI,CACvB,OAAOA,EAAG,SAAW,EAAId,GAAO,KAAK,EAAIA,GAAO,KAAKc,EAAGA,EAAG,OAAS,CAAC,CAAC,CACxE,EACIkB,GAASvB,GAAW,MAAM,IAAI,EAAI,MAAM,KAAO,SAAUP,EAAG,CAC9D,OAAOS,GAAY,KAAKT,CAAC,CAC3B,EAEI+B,GAAS,OAAOhH,EAAW,OAAW,IAAcA,EAAW,OAAS,SAAS,cAAc,EAAE,EAEjGiH,GAAO,SAAUC,EAAOC,EAAO,CAEjC,QADIrD,GAA2BqD,GAAyBH,GAC/ChB,GAAI,EAAGA,GAAIkB,EAAM,QAAUpD,KAAM,QAAaA,KAAM,KAAM,EAAEkC,GACnElC,GAAIA,GAAEoD,EAAMlB,EAAC,CAAC,EAEhB,OAAOlC,EACT,EACIsD,GAAU,SAAUC,EAAGF,EAAO,CAChC,IAAID,GAAQG,EAAE,MAAM,GAAG,EACvB,OAAOJ,GAAKC,GAAOC,CAAK,CAC1B,EAEIG,GAAS,SAAUC,EAAMJ,EAAO,CAClC,OAAOC,GAAQG,EAAMJ,CAAK,CAC5B,EACIK,GAAW,SAAUD,EAAMJ,EAAO,CACpC,IAAIM,GAASH,GAAOC,EAAMJ,CAAK,EAC/B,GAA4BM,IAAW,KACrC,MAAM,IAAI,MAAMF,EAAO,gCAAgC,EAEzD,OAAOE,EACT,EACIC,GAAW,CAAE,SAAUF,EAAS,EAEhCG,GAAc,SAAUR,EAAO,CACjC,OAAOO,GAAS,SAAS,cAAeP,CAAK,CAC/C,EACIS,GAAgB,SAAU3C,EAAG,CAC/B,IAAIkC,EAAQC,GAAQ,4BAA6BnC,CAAC,EAClD,OAAO0C,GAAYR,CAAK,EAAE,UAAU,cAAclC,CAAC,CACrD,EACI4C,GAAc,CAAE,cAAeD,EAAc,EAE7CE,GAAW,QAAQ,KAAK,MAAM,QAAQ,sBAAsB,EAE5DC,GAAgB,SAAU5G,EAAQ,CACpC,IAAI6G,EAAiB7G,EAAO,UAAU,SAAS,EAAI,EACnD,OAAOA,EAAO,IAAI,UAAU6G,EAAgB,WAAYC,GAAsB9G,EAAQ6G,CAAc,CAAC,CACvG,EACIE,GAAuB,SAAUC,EAAYC,EAAgB,CAC/D,OAAOD,GAAcC,EAAe,SAAW,GAAKA,EAAe,CAAC,IAAMD,CAC5E,EACIE,GAAe,SAAUF,EAAY,CACvC,OAAO7H,EAAS,KAAK6H,EAAW,iBAAiB,UAAU,EAAG,SAAU1G,EAAK,CAC3E,OAAOI,GAAS,WAAWJ,CAAG,CAChC,CAAC,CACH,EACI6G,GAAsB,SAAUnH,EAAQ,CAC1C,IAAIgH,EAAaJ,GAAc5G,CAAM,EACjCiH,GAAiBjH,EAAO,UAAU,kBAAkB,EACxD,OAAI+G,GAAqBC,EAAYC,EAAc,EAC1CC,GAAaF,CAAU,EAEvB7H,EAAS,KAAK8H,GAAgB,SAAU3G,GAAK,CAClD,OAAOI,GAAS,WAAWJ,EAAG,GAAK0G,IAAe1G,EACpD,CAAC,CAEL,EACI8G,GAA2B,SAAUpH,EAAQqH,EAAM,CACrD,IAAIC,GAAgBnI,EAAS,IAAIkI,EAAM,SAAU/G,GAAK,CACpD,IAAIiH,GAAWvH,EAAO,IAAI,UAAUM,GAAK,WAAYwG,GAAsB9G,EAAQM,EAAG,CAAC,EACvF,OAAOiH,IAAsBjH,EAC/B,CAAC,EACD,OAAOqG,GAAS,OAAOW,EAAa,CACtC,EACIE,GAAuB,SAAUxH,EAAQ,CAC3C,IAAIiH,EAAiBjH,EAAO,UAAU,kBAAkB,EACxD,OAAOb,EAAS,KAAKiI,GAAyBpH,EAAQiH,CAAc,EAAG,SAAUQ,GAAO,CACtF,OAAO/G,GAAS,eAAe+G,EAAK,CACtC,CAAC,CACH,EACIC,GAAqB,SAAU1H,EAAQ,CACzC,OAAO+E,GAAOyC,GAAqBxH,CAAM,EAAGU,GAAS,YAAY,CACnE,EACIoG,GAAwB,SAAU9G,EAAQM,EAAK,CACjD,IAAIqH,GAAkB3H,EAAO,IAAI,WAAWM,EAAK,OAAO,EACpDsH,GAAOD,GAAgB,OAAS,EAAIA,GAAgB,CAAC,EAAI3H,EAAO,QAAQ,EAC5E,OAAO4H,EACT,EACIC,GAAyB,SAAU7H,EAAQM,EAAK,CAClD,IAAIwH,GAAc9H,EAAO,IAAI,WAAWM,EAAK,QAASwG,GAAsB9G,EAAQM,CAAG,CAAC,EACxF,OAAOqF,GAAKmC,EAAW,CACzB,EACIC,GAAmB,SAAU/H,EAAQ,CACvC,IAAIgI,EAAYH,GAAuB7H,EAAQA,EAAO,UAAU,SAAS,CAAC,EACtEiI,GAAkBlD,GAAO/E,EAAO,UAAU,kBAAkB,EAAGU,GAAS,UAAU,EACtF,OAAOsH,EAAU,QAAQ,EAAE,OAAOC,EAAe,CACnD,EACIC,GAAuB,SAAUlI,EAAQ,CAC3C,IAAImI,EAAgBJ,GAAiB/H,CAAM,EAC3C,OAAOoI,GAAmBpI,EAAQmI,CAAa,CACjD,EACIC,GAAqB,SAAUpI,EAAQpB,EAAO,CAChD,IAAIyJ,GAAY5D,GAAI7F,EAAO,SAAU0J,GAAM,CACzC,OAAOT,GAAuB7H,EAAQsI,EAAI,EAAE,MAAMA,EAAI,CACxD,CAAC,EACD,OAAO3B,GAAS,OAAO0B,EAAS,CAClC,EACIE,GAAS,SAAUvI,EAAQ,CAC7B,IAAIsI,EAAO1B,GAAc5G,CAAM,EAC/B,OAAO0G,GAAY,cAAc4B,CAAI,CACvC,EACIE,GAAY,CACd,OAAQD,GACR,cAAe3B,GACf,oBAAqBO,GACrB,qBAAsBK,GACtB,sBAAuBV,GACvB,mBAAoBY,GACpB,qBAAsBQ,EACxB,EAEIO,GAAW,SAAUC,EAAM1C,EAAO,CACpC,IAAI2C,GAAM3C,GAASnH,EAAW,SAC1B+J,GAAMD,GAAI,cAAc,KAAK,EAEjC,GADAC,GAAI,UAAYF,EACZ,CAACE,GAAI,cAAc,GAAKA,GAAI,WAAW,OAAS,EAClD,MAAA/J,EAAW,QAAQ,MAAM,wCAAyC6J,CAAI,EAChE,IAAI,MAAM,mCAAmC,EAErD,OAAOG,GAAQD,GAAI,WAAW,CAAC,CAAC,CAClC,EACIE,GAAU,SAAUC,EAAK/C,EAAO,CAClC,IAAI2C,GAAM3C,GAASnH,EAAW,SAC1BS,GAAOqJ,GAAI,cAAcI,CAAG,EAChC,OAAOF,GAAQvJ,EAAI,CACrB,EACI0J,GAAW,SAAUC,EAAMjD,EAAO,CACpC,IAAI2C,GAAM3C,GAASnH,EAAW,SAC1BS,GAAOqJ,GAAI,eAAeM,CAAI,EAClC,OAAOJ,GAAQvJ,EAAI,CACrB,EACIuJ,GAAU,SAAUvJ,EAAM,CAC5B,GAAIA,GAAS,KACX,MAAM,IAAI,MAAM,kCAAkC,EAEpD,MAAO,CAAE,IAAK0C,GAAS1C,CAAI,CAAE,CAC/B,EACI4J,GAAY,SAAUC,EAAQrF,EAAGsF,GAAG,CACtC,IAAIT,GAAMQ,EAAO,IAAI,EACrB,OAAOvF,GAAO,KAAK+E,GAAI,iBAAiB7E,EAAGsF,EAAC,CAAC,EAAE,IAAIP,EAAO,CAC5D,EACIQ,GAAU,CACZ,SAAUZ,GACV,QAASK,GACT,SAAUE,GACV,QAASH,GACT,UAAWK,EACb,EAEII,GAAQ,SAAUC,EAAIC,EAAIrH,GAAG,CAC/B,OAAOoH,EAAG,OAAO,GAAKC,EAAG,OAAO,EAAI5F,GAAO,KAAKzB,GAAEoH,EAAG,SAAS,EAAGC,EAAG,SAAS,CAAC,CAAC,EAAI5F,GAAO,KAAK,CACjG,EAEI6F,GAAe,SAAUC,EAAU1D,EAAO,CAC5C,IAAI2C,GAAM3C,GAASnH,EAAW,SAC1B8K,GAAWhB,GAAI,uBAAuB,EAC1C,OAAA7D,GAAK4E,EAAU,SAAUE,GAAS,CAChCD,GAAS,YAAYC,GAAQ,IAAI,CAAC,CACpC,CAAC,EACMP,GAAQ,QAAQM,EAAQ,CACjC,EAEIE,GAAY,UAAY,CAE1B,QADIC,EAAS,CAAC,EACLzH,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCyH,EAAOzH,CAAE,EAAI,UAAUA,CAAE,EAE3B,OAAO,UAAY,CAEjB,QADI0H,GAAS,CAAC,EACL1H,GAAK,EAAGA,GAAK,UAAU,OAAQA,KACtC0H,GAAO1H,EAAE,EAAI,UAAUA,EAAE,EAE3B,GAAIyH,EAAO,SAAWC,GAAO,OAC3B,MAAM,IAAI,MAAM,mDAAqDD,EAAO,OAAS,WAAaC,GAAO,OAAS,YAAY,EAEhI,IAAIC,GAAS,CAAC,EACd,OAAAlF,GAAKgF,EAAQ,SAAU1D,GAAMvB,GAAG,CAC9BmF,GAAO5D,EAAI,EAAIpE,GAAS+H,GAAOlF,EAAC,CAAC,CACnC,CAAC,EACMmF,EACT,CACF,EAEIC,GAAO,OAAO,KACdC,GAAS,SAAUC,EAAKhI,EAAG,CAE7B,QADIiI,GAAQH,GAAKE,CAAG,EACXE,GAAI,EAAG1F,GAAMyF,GAAM,OAAQC,GAAI1F,GAAK0F,KAAK,CAChD,IAAIxF,GAAIuF,GAAMC,EAAC,EACXvG,GAAIqG,EAAItF,EAAC,EACb1C,EAAE2B,GAAGe,EAAC,CACR,CACF,EAEIvF,GAAO,UAAY,CACrB,IAAI6C,EAAIoE,GAAS,SAAS,MAAM,EAChC,OAAOpE,CACT,EACImI,GAA0B,SAAUlH,EAAGM,EAAG6G,GAAO,CACnD,OAAQnH,EAAE,wBAAwBM,CAAC,EAAI6G,MAAW,CACpD,EACIC,GAA4B,SAAUpH,EAAGM,EAAG,CAC9C,OAAO4G,GAAwBlH,EAAGM,EAAGpE,GAAK,EAAE,2BAA2B,CACzE,EACImL,GAA8B,SAAUrH,EAAGM,EAAG,CAChD,OAAO4G,GAAwBlH,EAAGM,EAAGpE,GAAK,EAAE,8BAA8B,CAC5E,EACIoL,GAAO,CACT,0BAA2BF,GAC3B,4BAA6BC,EAC/B,EAEIE,GAAS,SAAUxI,EAAG,CACxB,IAAIyI,EAAS,GACThG,GACJ,OAAO,UAAY,CAEjB,QADIxC,GAAO,CAAC,EACHC,GAAK,EAAGA,GAAK,UAAU,OAAQA,KACtCD,GAAKC,EAAE,EAAI,UAAUA,EAAE,EAEzB,OAAKuI,IACHA,EAAS,GACThG,GAAIzC,EAAE,MAAM,KAAMC,EAAI,GAEjBwC,EACT,CACF,EAEIiG,GAAa,SAAUC,EAAS7H,EAAG,CACrC,QAAS4B,GAAI,EAAGA,GAAIiG,EAAQ,OAAQjG,KAAK,CACvC,IAAIf,GAAIgH,EAAQjG,EAAC,EACjB,GAAIf,GAAE,KAAKb,CAAC,EACV,OAAOa,EAEX,CAEF,EACIiH,GAAS,SAAUD,EAASE,EAAO,CACrC,IAAIpG,GAAIiG,GAAWC,EAASE,CAAK,EACjC,GAAI,CAACpG,GACH,MAAO,CACL,MAAO,EACP,MAAO,CACT,EAEF,IAAIO,GAAQ,SAAUN,GAAG,CACvB,OAAO,OAAOmG,EAAM,QAAQpG,GAAG,IAAMC,EAAC,CAAC,CACzC,EACA,OAAOoG,GAAG9F,GAAM,CAAC,EAAGA,GAAM,CAAC,CAAC,CAC9B,EACI+F,GAAS,SAAUC,EAAgBH,EAAO,CAC5C,IAAII,GAAe,OAAOJ,CAAK,EAAE,YAAY,EAC7C,OAAIG,EAAe,SAAW,EACrBE,GAAQ,EAEVN,GAAOI,EAAgBC,EAAY,CAC5C,EACIC,GAAU,UAAY,CACxB,OAAOJ,GAAG,EAAG,CAAC,CAChB,EACIA,GAAK,SAAUK,EAAOC,EAAO,CAC/B,MAAO,CACL,MAAOD,EACP,MAAOC,CACT,CACF,EACIC,GAAU,CACZ,GAAIP,GACJ,OAAQC,GACR,QAASG,EACX,EAEII,GAAO,OACPC,GAAS,SACTC,GAAK,KACLC,GAAQ,QACRC,GAAU,UACVC,GAAS,SACTC,GAAY,SAAU3F,EAAM4F,EAAS,CACvC,OAAO,UAAY,CACjB,OAAOA,IAAY5F,CACrB,CACF,EACI6F,GAAY,UAAY,CAC1B,OAAOC,GAAK,CACV,QAAS,OACT,QAASV,GAAQ,QAAQ,CAC3B,CAAC,CACH,EACIU,GAAO,SAAUC,EAAM,CACzB,IAAIH,EAAUG,EAAK,QACfC,GAAUD,EAAK,QACnB,MAAO,CACL,QAASH,EACT,QAASI,GACT,OAAQL,GAAUN,GAAMO,CAAO,EAC/B,SAAUD,GAAUL,GAAQM,CAAO,EACnC,KAAMD,GAAUJ,GAAIK,CAAO,EAC3B,QAASD,GAAUH,GAAOI,CAAO,EACjC,UAAWD,GAAUF,GAASG,CAAO,EACrC,SAAUD,GAAUD,GAAQE,CAAO,CACrC,CACF,EACIK,GAAU,CACZ,QAASJ,GACT,GAAIC,GACJ,KAAMlK,GAASyJ,EAAI,EACnB,OAAQzJ,GAAS0J,EAAM,EACvB,GAAI1J,GAAS2J,EAAE,EACf,MAAO3J,GAAS4J,EAAK,EACrB,QAAS5J,GAAS6J,EAAO,EACzB,OAAQ7J,GAAS8J,EAAM,CACzB,EAEIQ,GAAU,UACVC,GAAM,MACNC,GAAU,UACVC,GAAQ,QACRC,GAAM,MACNC,GAAU,UACVC,GAAU,UACVC,GAAO,SAAUzG,EAAM4F,EAAS,CAClC,OAAO,UAAY,CACjB,OAAOA,IAAY5F,CACrB,CACF,EACI0G,GAAY,UAAY,CAC1B,OAAOC,GAAK,CACV,QAAS,OACT,QAASvB,GAAQ,QAAQ,CAC3B,CAAC,CACH,EACIuB,GAAO,SAAUZ,EAAM,CACzB,IAAIH,EAAUG,EAAK,QACfC,GAAUD,EAAK,QACnB,MAAO,CACL,QAASH,EACT,QAASI,GACT,UAAWS,GAAKP,GAASN,CAAO,EAChC,MAAOa,GAAKN,GAAKP,CAAO,EACxB,UAAWa,GAAKL,GAASR,CAAO,EAChC,MAAOa,GAAKH,GAAKV,CAAO,EACxB,QAASa,GAAKJ,GAAOT,CAAO,EAC5B,UAAWa,GAAKF,GAASX,CAAO,EAChC,UAAWa,GAAKD,GAASZ,CAAO,CAClC,CACF,EACIgB,GAAkB,CACpB,QAASF,GACT,GAAIC,GACJ,QAAS/K,GAASsK,EAAO,EACzB,IAAKtK,GAASuK,EAAG,EACjB,QAASvK,GAASwK,EAAO,EACzB,MAAOxK,GAASyK,EAAK,EACrB,IAAKzK,GAAS0K,EAAG,EACjB,QAAS1K,GAAS2K,EAAO,EACzB,QAAS3K,GAAS4K,EAAO,CAC3B,EAEIK,GAAa,SAAUC,EAAIC,EAASC,GAAW,CACjD,IAAIC,GAASH,EAAG,MAAM,GAAK,QAAQ,KAAKE,EAAS,IAAM,GACnDE,GAAWJ,EAAG,MAAM,GAAK,CAACG,GAC1BE,GAAaL,EAAG,UAAU,GAAKA,EAAG,QAAQ,QAAU,EACpDM,GAAaN,EAAG,UAAU,GAAKA,EAAG,QAAQ,QAAU,EACpDO,GAAWJ,IAAUE,IAAcC,IAAc,UAAU,KAAKJ,EAAS,IAAM,GAC/EM,GAAUR,EAAG,MAAM,GAAKA,EAAG,UAAU,EACrCS,GAAUD,IAAW,CAACD,GACtBG,GAAaT,EAAQ,SAAS,GAAKD,EAAG,MAAM,GAAK,UAAU,KAAKE,EAAS,IAAM,GACnF,MAAO,CACL,OAAQpL,GAASqL,EAAM,EACvB,SAAUrL,GAASsL,EAAQ,EAC3B,SAAUtL,GAASyL,EAAQ,EAC3B,QAASzL,GAAS2L,EAAO,EACzB,QAAS3L,GAAS0L,EAAO,EACzB,UAAWR,EAAG,UACd,MAAOA,EAAG,MACV,UAAWlL,GAAS4L,EAAU,CAChC,CACF,EAEIC,GAAW,SAAUC,EAAYV,EAAW,CAC9C,IAAIpC,GAAQ,OAAOoC,CAAS,EAAE,YAAY,EAC1C,OAAO9H,GAAKwI,EAAY,SAAUC,GAAW,CAC3C,OAAOA,GAAU,OAAO/C,EAAK,CAC/B,CAAC,CACH,EACIgD,GAAgB,SAAUC,EAAUb,EAAW,CACjD,OAAOS,GAASI,EAAUb,CAAS,EAAE,IAAI,SAAUD,GAAS,CAC1D,IAAIf,GAAUZ,GAAQ,OAAO2B,GAAQ,eAAgBC,CAAS,EAC9D,MAAO,CACL,QAASD,GAAQ,KACjB,QAASf,EACX,CACF,CAAC,CACH,EACI8B,GAAW,SAAUC,EAAMf,EAAW,CACxC,OAAOS,GAASM,EAAMf,CAAS,EAAE,IAAI,SAAUF,GAAI,CACjD,IAAId,GAAUZ,GAAQ,OAAO0B,GAAG,eAAgBE,CAAS,EACzD,MAAO,CACL,QAASF,GAAG,KACZ,QAASd,EACX,CACF,CAAC,CACH,EACIgC,GAAW,CACb,cAAeJ,GACf,SAAUE,EACZ,EAEIG,GAAW,SAAUC,EAAKC,EAAQ,CACpC,OAAOD,EAAI,QAAQC,CAAM,IAAM,EACjC,EAEIC,GAAqB,sCACrBC,GAAgB,SAAUC,EAAQ,CACpC,OAAO,SAAUC,EAAU,CACzB,OAAON,GAASM,EAAUD,CAAM,CAClC,CACF,EACIT,GAAW,CACb,CACE,KAAM,OACN,eAAgB,CAAC,gCAAgC,EACjD,OAAQ,SAAUU,EAAU,CAC1B,OAAON,GAASM,EAAU,OAAO,GAAKN,GAASM,EAAU,QAAQ,GAAKN,GAASM,EAAU,QAAQ,GAAKN,GAASM,EAAU,aAAa,CACxI,CACF,EACA,CACE,KAAM,SACN,eAAgB,CACd,kCACAH,EACF,EACA,OAAQ,SAAUG,EAAU,CAC1B,OAAON,GAASM,EAAU,QAAQ,GAAK,CAACN,GAASM,EAAU,aAAa,CAC1E,CACF,EACA,CACE,KAAM,KACN,eAAgB,CACd,iCACA,4BACF,EACA,OAAQ,SAAUA,EAAU,CAC1B,OAAON,GAASM,EAAU,MAAM,GAAKN,GAASM,EAAU,SAAS,CACnE,CACF,EACA,CACE,KAAM,QACN,eAAgB,CACdH,GACA,gCACF,EACA,OAAQC,GAAc,OAAO,CAC/B,EACA,CACE,KAAM,UACN,eAAgB,CAAC,qCAAqC,EACtD,OAAQA,GAAc,SAAS,CACjC,EACA,CACE,KAAM,SACN,eAAgB,CACdD,GACA,+BACF,EACA,OAAQ,SAAUG,EAAU,CAC1B,OAAQN,GAASM,EAAU,QAAQ,GAAKN,GAASM,EAAU,SAAS,IAAMN,GAASM,EAAU,aAAa,CAC5G,CACF,CACF,EACIR,GAAO,CACT,CACE,KAAM,UACN,OAAQM,GAAc,KAAK,EAC3B,eAAgB,CAAC,uCAAuC,CAC1D,EACA,CACE,KAAM,MACN,OAAQ,SAAUE,EAAU,CAC1B,OAAON,GAASM,EAAU,QAAQ,GAAKN,GAASM,EAAU,MAAM,CAClE,EACA,eAAgB,CACd,sCACA,+BACA,qCACF,CACF,EACA,CACE,KAAM,UACN,OAAQF,GAAc,SAAS,EAC/B,eAAgB,CAAC,mCAAmC,CACtD,EACA,CACE,KAAM,MACN,OAAQA,GAAc,MAAM,EAC5B,eAAgB,CAAC,gCAAgC,CACnD,EACA,CACE,KAAM,QACN,OAAQA,GAAc,OAAO,EAC7B,eAAgB,CAAC,CACnB,EACA,CACE,KAAM,UACN,OAAQA,GAAc,OAAO,EAC7B,eAAgB,CAAC,CACnB,EACA,CACE,KAAM,UACN,OAAQA,GAAc,SAAS,EAC/B,eAAgB,CAAC,CACnB,CACF,EACIG,GAAe,CACjB,SAAU5M,GAASiM,EAAQ,EAC3B,KAAMjM,GAASmM,EAAI,CACrB,EAEIU,GAAW,SAAUzB,EAAW,CAClC,IAAIa,EAAWW,GAAa,SAAS,EACjCT,GAAOS,GAAa,KAAK,EACzBzB,GAAUiB,GAAS,cAAcH,EAAUb,CAAS,EAAE,KAAKf,GAAQ,QAASA,GAAQ,EAAE,EACtFa,GAAKkB,GAAS,SAASD,GAAMf,CAAS,EAAE,KAAKJ,GAAgB,QAASA,GAAgB,EAAE,EACxF8B,GAAa7B,GAAWC,GAAIC,GAASC,CAAS,EAClD,MAAO,CACL,QAASD,GACT,GAAID,GACJ,WAAY4B,EACd,CACF,EACIC,GAAoB,CAAE,OAAQF,EAAS,EAEvCG,GAAWrE,GAAO,UAAY,CAChC,IAAIyC,EAAYvO,EAAW,UAAU,UACrC,OAAOkQ,GAAkB,OAAO3B,CAAS,CAC3C,CAAC,EACG6B,GAAsB,CAAE,OAAQD,EAAS,EAEzCE,GAAYrQ,EAAW,KAAK,eAC5BsQ,GAAgBtQ,EAAW,KAAK,mBAChCuQ,GAAUvQ,EAAW,KAAK,aAC1BwQ,GAAWxQ,EAAW,KAAK,cAC3ByQ,GAAgBzQ,EAAW,KAAK,mBAChC0Q,GAAoB1Q,EAAW,KAAK,uBACpC2Q,GAAU3Q,EAAW,KAAK,aAC1B4Q,GAAO5Q,EAAW,KAAK,UACvB6Q,GAAyB7Q,EAAW,KAAK,4BACzC8Q,GAAmB9Q,EAAW,KAAK,sBACnC+Q,GAAS/Q,EAAW,KAAK,YACzBgR,GAAWhR,EAAW,KAAK,cAE3BiR,GAAYN,GACZO,GAAK,SAAUnG,EAASoG,EAAU,CACpC,IAAI5P,GAAMwJ,EAAQ,IAAI,EACtB,GAAIxJ,GAAI,WAAa0P,GACnB,MAAO,GAEP,IAAIG,GAAO7P,GACX,GAAI6P,GAAK,UAAY,OACnB,OAAOA,GAAK,QAAQD,CAAQ,EACvB,GAAIC,GAAK,oBAAsB,OACpC,OAAOA,GAAK,kBAAkBD,CAAQ,EACjC,GAAIC,GAAK,wBAA0B,OACxC,OAAOA,GAAK,sBAAsBD,CAAQ,EACrC,GAAIC,GAAK,qBAAuB,OACrC,OAAOA,GAAK,mBAAmBD,CAAQ,EAEvC,MAAM,IAAI,MAAM,gCAAgC,CAGtD,EAEItN,GAAK,SAAUwN,EAAIC,EAAI,CACzB,OAAOD,EAAG,IAAI,IAAMC,EAAG,IAAI,CAC7B,EACIC,GAAkB,SAAUF,EAAIC,EAAI,CACtC,IAAIE,GAAKH,EAAG,IAAI,EACZI,GAAKH,EAAG,IAAI,EAChB,OAAOE,KAAOC,GAAK,GAAQD,GAAG,SAASC,EAAE,CAC3C,EACIC,GAAa,SAAUL,EAAIC,EAAI,CACjC,OAAOzF,GAAK,4BAA4BwF,EAAG,IAAI,EAAGC,EAAG,IAAI,CAAC,CAC5D,EACIhD,GAAU8B,GAAoB,OAAO,EAAE,QACvCuB,GAAarD,GAAQ,KAAK,EAAIoD,GAAaH,GAC3CK,GAAOV,GAEPW,GAAS,SAAU9G,EAAS,CAC9B,OAAOhG,GAAO,KAAKgG,EAAQ,IAAI,EAAE,UAAU,EAAE,IAAIP,GAAQ,OAAO,CAClE,EACIsH,GAAW,SAAU/G,EAAS,CAChC,OAAOnF,GAAImF,EAAQ,IAAI,EAAE,WAAYP,GAAQ,OAAO,CACtD,EACIuH,GAAQ,SAAUhH,EAASiH,EAAO,CACpC,IAAIC,GAAKlH,EAAQ,IAAI,EAAE,WACvB,OAAOhG,GAAO,KAAKkN,GAAGD,CAAK,CAAC,EAAE,IAAIxH,GAAQ,OAAO,CACnD,EACI0H,GAAa,SAAUnH,EAAS,CAClC,OAAOgH,GAAMhH,EAAS,CAAC,CACzB,EACIoH,GAAY,SAAUpH,EAAS,CACjC,OAAOgH,GAAMhH,EAASA,EAAQ,IAAI,EAAE,WAAW,OAAS,CAAC,CAC3D,EACIqH,GAAOpH,GAAU,UAAW,QAAQ,EAEpCqH,EAAS,SAAUC,EAAQvH,EAAS,CACtC,IAAIwH,GAAWV,GAAOS,CAAM,EAC5BC,GAAS,KAAK,SAAU5N,GAAG,CACzBA,GAAE,IAAI,EAAE,aAAaoG,EAAQ,IAAI,EAAGuH,EAAO,IAAI,CAAC,CAClD,CAAC,CACH,EACIE,EAAS,SAAUX,EAAQ9G,EAAS,CACtC8G,EAAO,IAAI,EAAE,YAAY9G,EAAQ,IAAI,CAAC,CACxC,EAEI0H,EAAW,SAAUH,EAAQzH,EAAU,CACzC5E,GAAK4E,EAAU,SAAU5F,GAAG,CAC1BoN,EAAOC,EAAQrN,EAAC,CAClB,CAAC,CACH,EACIyN,EAAW,SAAUb,EAAQhH,EAAU,CACzC5E,GAAK4E,EAAU,SAAU5F,GAAG,CAC1BuN,EAAOX,EAAQ5M,EAAC,CAClB,CAAC,CACH,EAEI0N,GAAS,SAAU5H,EAAS,CAC9B,IAAIxJ,EAAMwJ,EAAQ,IAAI,EAClBxJ,EAAI,aAAe,MACrBA,EAAI,WAAW,YAAYA,CAAG,CAElC,EAEIgG,GAAO,SAAUwD,EAAS,CAC5B,IAAIhF,EAAIgF,EAAQ,IAAI,EAAE,SACtB,OAAOhF,EAAE,YAAY,CACvB,EACIX,GAAO,SAAU2F,EAAS,CAC5B,OAAOA,EAAQ,IAAI,EAAE,QACvB,EACI6H,GAAW,SAAU1N,EAAG,CAC1B,OAAO,SAAU6F,EAAS,CACxB,OAAO3F,GAAK2F,CAAO,IAAM7F,CAC3B,CACF,EACI2N,GAAYD,GAASjC,EAAO,EAE5BmC,GAAS,SAAUvR,EAAKwR,EAAK3P,GAAO,CACtC,GAAIiC,GAASjC,EAAK,GAAKmC,GAAUnC,EAAK,GAAKqC,GAASrC,EAAK,EACvD7B,EAAI,aAAawR,EAAK3P,GAAQ,EAAE,MAEhC,OAAApD,EAAW,QAAQ,MAAM,iCAAkC+S,EAAK,YAAa3P,GAAO,cAAe7B,CAAG,EAChG,IAAI,MAAM,gCAAgC,CAEpD,EACIyR,GAAS,SAAUjI,EAASkI,EAAO,CACrC,IAAI1R,GAAMwJ,EAAQ,IAAI,EACtBM,GAAO4H,EAAO,SAAUtO,GAAG6G,GAAG,CAC5BsH,GAAOvR,GAAKiK,GAAG7G,EAAC,CAClB,CAAC,CACH,EACIuO,GAAQ,SAAUnI,EAAS,CAC7B,OAAOxE,GAAMwE,EAAQ,IAAI,EAAE,WAAY,SAAUvE,EAAK2M,GAAM,CAC1D,OAAA3M,EAAI2M,GAAK,IAAI,EAAIA,GAAK,MACf3M,CACT,EAAG,CAAC,CAAC,CACP,EAEI4M,GAAc,SAAU7R,EAAK,CAC/B,OAAOA,EAAI,QAAU,QAAaiE,GAAWjE,EAAI,MAAM,gBAAgB,CACzE,EAEI8R,GAAc,SAAU9R,EAAK+R,EAAUlQ,GAAO,CAChD,GAAI,CAACiC,GAASjC,EAAK,EACjB,MAAApD,EAAW,QAAQ,MAAM,qCAAsCsT,EAAU,YAAalQ,GAAO,cAAe7B,CAAG,EACzG,IAAI,MAAM,+BAAiC6B,EAAK,EAEpDgQ,GAAY7R,CAAG,GACjBA,EAAI,MAAM,YAAY+R,EAAUlQ,EAAK,CAEzC,EACImQ,GAAM,SAAUxI,EAASuI,EAAUlQ,GAAO,CAC5C,IAAI7B,GAAMwJ,EAAQ,IAAI,EACtBsI,GAAY9R,GAAK+R,EAAUlQ,EAAK,CAClC,EAEIoQ,GAAU,SAAUC,EAAUC,EAAQ,CACxC,OAAOlJ,GAAQ,QAAQiJ,EAAS,IAAI,EAAE,UAAUC,CAAM,CAAC,CACzD,EACIC,GAAO,SAAUF,EAAU,CAC7B,OAAOD,GAAQC,EAAU,EAAI,CAC/B,EACIG,GAAY,SAAUH,EAAUvJ,EAAK,CACvC,IAAIkC,GAAK5B,GAAQ,QAAQN,CAAG,EACxB2J,GAAaX,GAAMO,CAAQ,EAC/B,OAAAT,GAAO5G,GAAIyH,EAAU,EACdzH,EACT,EACI0H,GAAS,SAAUL,EAAUvJ,EAAK,CACpC,IAAIkC,GAAKwH,GAAUH,EAAUvJ,CAAG,EAChCmI,EAAOoB,EAAUrH,EAAE,EACnB,IAAI2H,GAAajC,GAAS2B,CAAQ,EAClC,OAAAf,EAAStG,GAAI2H,EAAU,EACvBpB,GAAOc,CAAQ,EACRrH,EACT,EAEI4H,GAAc,SAAUnC,EAAQE,EAAO,CACzCS,EAAOX,EAAO,KAAME,EAAM,IAAI,CAChC,EACIkC,GAAe,SAAUC,EAAU,CACrC,QAASlO,EAAI,EAAGA,EAAIkO,EAAS,OAAQlO,IACnCgO,GAAYE,EAASlO,EAAI,CAAC,EAAGkO,EAASlO,CAAC,CAAC,CAE5C,EACImO,GAAiB,SAAUC,EAAQC,EAAM,CAC3C5J,GAAM3D,GAAKsN,CAAM,EAAGvN,GAAKwN,CAAI,EAAGL,EAAW,CAC7C,EACIM,GAAgB,SAAUnN,EAAOoN,EAAU,CAC7C,IAAIC,GAAU,CACZ,KAAMhK,GAAQ,QAAQ+J,EAAUpN,CAAK,EACrC,KAAMqD,GAAQ,QAAQ,KAAMrD,CAAK,CACnC,EACA,OAAAqL,EAAOgC,GAAQ,KAAMA,GAAQ,IAAI,EAC1BA,EACT,EACIC,GAAiB,SAAUtN,EAAOuN,EAAOC,GAAM,CAEjD,QADIT,GAAW,CAAC,EACPlO,GAAI,EAAGA,GAAI2O,GAAM3O,KACxBkO,GAAS,KAAKI,GAAcnN,EAAOuN,EAAM,QAAQ,CAAC,EAEpD,OAAOR,EACT,EACIU,GAAmB,SAAUV,EAAUQ,EAAO,CAChD,QAAS1O,GAAI,EAAGA,GAAIkO,EAAS,OAAS,EAAGlO,KACvCuN,GAAIW,EAASlO,EAAC,EAAE,KAAM,kBAAmB,MAAM,EAEjDc,GAAKoN,CAAQ,EAAE,KAAK,SAAUM,GAAS,CACrCxB,GAAOwB,GAAQ,KAAME,EAAM,cAAc,EACzC1B,GAAOwB,GAAQ,KAAME,EAAM,cAAc,EACzChC,EAAS8B,GAAQ,KAAME,EAAM,OAAO,CACtC,CAAC,CACH,EACIG,GAAmB,SAAUL,EAASE,EAAO,CAC3CnN,GAAKiN,EAAQ,IAAI,IAAME,EAAM,WAC/BF,EAAQ,KAAOV,GAAOU,EAAQ,KAAME,EAAM,QAAQ,GAEpD1B,GAAOwB,EAAQ,KAAME,EAAM,cAAc,CAC3C,EACII,GAAa,SAAU3N,EAAOgM,EAAM4B,GAAS,CAC/C,IAAIC,GAAOxK,GAAQ,QAAQ,KAAMrD,CAAK,EACtC,OAAA6L,GAAOgC,GAAM7B,CAAI,EACjBT,EAASsC,GAAMD,EAAO,EACfC,EACT,EACIC,GAAa,SAAUT,EAASQ,EAAM,CACxCxC,EAAOgC,EAAQ,KAAMQ,CAAI,EACzBR,EAAQ,KAAOQ,CACjB,EACIE,GAAe,SAAU/N,EAAOgO,EAAMT,GAAO,CAC/C,IAAIU,GAAUD,EAAK,MAAM,EAAGT,GAAM,KAAK,EACvC,OAAA5N,GAAKsO,EAAO,EAAE,KAAK,SAAUZ,GAAS,CACpC,IAAIQ,GAAOF,GAAW3N,EAAOuN,GAAM,eAAgBA,GAAM,OAAO,EAChEO,GAAWT,GAASQ,EAAI,EACxBH,GAAiBL,GAASE,EAAK,CACjC,CAAC,EACMU,EACT,EACIC,GAAY,SAAUlO,EAAOgO,EAAMT,GAAO,CAC5C,IAAIR,GAAWO,GAAetN,EAAOuN,GAAOA,GAAM,MAAQS,EAAK,MAAM,EACrE,OAAAlB,GAAaC,EAAQ,EACrBU,GAAiBV,GAAUQ,EAAK,EAChCP,GAAegB,EAAMjB,EAAQ,EACtBiB,EAAK,OAAOjB,EAAQ,CAC7B,EACIoB,GAAc,SAAUnO,EAAOoO,EAAS,CAC1C,IAAIJ,GAAO5O,GAAMgP,EAAS,SAAUJ,GAAMT,GAAO,CAC/C,OAAOA,GAAM,MAAQS,GAAK,OAASE,GAAUlO,EAAOgO,GAAMT,EAAK,EAAIQ,GAAa/N,EAAOgO,GAAMT,EAAK,CACpG,EAAG,CAAC,CAAC,EACL,OAAO7N,GAAKsO,EAAI,EAAE,IAAI,SAAUX,GAAS,CACvC,OAAOA,GAAQ,IACjB,CAAC,CACH,EAEIgB,GAAW,SAAUC,EAAI,CAC3B,OAAO7D,GAAK6D,EAAI,OAAO,CACzB,EACIC,GAAoB,SAAUD,EAAI,CACpC,OAAOvD,GAAWuD,CAAE,EAAE,IAAID,EAAQ,EAAE,MAAM,EAAK,CACjD,EACIG,GAAmB,SAAUF,EAAI,CACnC,OAAOtD,GAAUsD,CAAE,EAAE,IAAID,EAAQ,EAAE,MAAM,EAAK,CAChD,EAEII,GAAa,SAAUlB,EAAO,CAChC,OAAOA,EAAM,MAAQ,CACvB,EACImB,GAAa,SAAUnB,EAAO,CAChC,OAAOA,EAAM,UACf,EACIoB,GAAmB,SAAUC,EAAI,CACnC,IAAIhC,EAAajC,GAASiE,CAAE,EACxBhB,GAAUY,GAAiBI,CAAE,EAAIhC,EAAW,MAAM,EAAG,EAAE,EAAIA,EAC/D,OAAOnO,GAAImP,GAASpB,EAAI,CAC1B,EACIqC,GAAc,SAAUD,EAAIE,EAAOJ,GAAY,CACjD,OAAOhE,GAAOkE,CAAE,EAAE,OAAOlD,EAAS,EAAE,IAAI,SAAUpJ,GAAM,CACtD,MAAO,CACL,MAAOwM,EACP,WAAYJ,GACZ,QAASC,GAAiBC,CAAE,EAC5B,eAAgB7C,GAAM6C,CAAE,EACxB,eAAgB7C,GAAMzJ,EAAI,EAC1B,SAAUlC,GAAKkC,EAAI,CACrB,CACF,CAAC,CACH,EAEIyM,GAAc,SAAUC,EAAazB,EAAO,CAC9C,OAAQyB,EAAa,CACrB,IAAK,SACHzB,EAAM,QACN,MACF,IAAK,UACHA,EAAM,QACN,MACF,IAAK,UACHA,EAAM,MAAQ,CAChB,CACF,EAEI0B,GAAiB,OAAO,UAAU,eAClCC,GAAU,SAAUC,EAAKlK,EAAI,CAC/B,OAAOA,CACT,EACImK,GAAY,SAAUC,EAAQ,CAChC,OAAO,UAAY,CAEjB,QADIC,EAAU,IAAI,MAAM,UAAU,MAAM,EAC/BzQ,GAAI,EAAGA,GAAIyQ,EAAQ,OAAQzQ,KAClCyQ,EAAQzQ,EAAC,EAAI,UAAUA,EAAC,EAE1B,GAAIyQ,EAAQ,SAAW,EACrB,MAAM,IAAI,MAAM,0BAA2B,EAG7C,QADIC,GAAM,CAAC,EACFC,GAAI,EAAGA,GAAIF,EAAQ,OAAQE,KAAK,CACvC,IAAIC,GAAYH,EAAQE,EAAC,EACzB,QAAS5D,MAAO6D,GACVR,GAAe,KAAKQ,GAAW7D,EAAG,IACpC2D,GAAI3D,EAAG,EAAIyD,EAAOE,GAAI3D,EAAG,EAAG6D,GAAU7D,EAAG,CAAC,EAGhD,CACA,OAAO2D,EACT,CACF,EACIG,GAAQN,GAAUF,EAAO,EAEzBS,GAAsB,SAAUjH,EAAQkH,EAAQ,CAClDlH,EAAO,SAAWkH,EAAO,SACzBlH,EAAO,eAAiBgH,GAAM,CAAC,EAAGE,EAAO,cAAc,CACzD,EACIC,GAAuB,SAAUzB,EAAS5S,EAAO,CAEnD,QADIsT,GAAQV,EAAQ5S,CAAK,EAAE,MAClBqD,GAAIrD,EAAQ,EAAGqD,IAAK,EAAGA,KAAK,CACnC,GAAIuP,EAAQvP,EAAC,EAAE,QAAUiQ,GACvB,OAAOlR,GAAO,KAAKwQ,EAAQvP,EAAC,CAAC,EAE/B,GAAIuP,EAAQvP,EAAC,EAAE,MAAQiQ,GACrB,KAEJ,CACA,OAAOlR,GAAO,KAAK,CACrB,EACIkS,GAAmB,SAAU1B,EAAS,CACxCtP,GAAKsP,EAAS,SAAUb,EAAO1O,GAAG,CAChCgR,GAAqBzB,EAASvP,EAAC,EAAE,KAAK,SAAUkR,GAAe,CAC7DJ,GAAoBpC,EAAOwC,EAAa,CAC1C,CAAC,CACH,CAAC,CACH,EAEIC,GAAO,SAAUC,EAAS,CAC5B,IAAIhU,EAAQgU,EACRC,GAAM,UAAY,CACpB,OAAOjU,CACT,EACImQ,GAAM,SAAU5O,GAAG,CACrBvB,EAAQuB,EACV,EACIuO,GAAQ,UAAY,CACtB,OAAOiE,GAAKE,GAAI,CAAC,CACnB,EACA,MAAO,CACL,IAAKA,GACL,IAAK9D,GACL,MAAOL,EACT,CACF,EAEIoE,GAAY,SAAUrB,EAAOsB,EAAeC,GAAgBxC,GAAM,CACpE,OAAO9C,GAAW8C,EAAI,EAAE,OAAOQ,EAAQ,EAAE,KAAK,UAAY,CACxD+B,EAAc,KAAK,SAAUE,GAAW,CAClC5T,GAAG4T,GAAU,MAAOzC,EAAI,GAC1BwC,GAAe,IAAI,EAAI,CAE3B,CAAC,EACD,IAAIE,GAAmB1B,GAAYhB,GAAMiB,EAAOuB,GAAe,IAAI,CAAC,EACpED,EAAc,KAAK,SAAUE,GAAW,CAClC5T,GAAG4T,GAAU,IAAKzC,EAAI,GACxBwC,GAAe,IAAI,EAAK,CAE5B,CAAC,EACD,IAAIG,GAAmBxF,GAAU6C,EAAI,EAAE,OAAOQ,EAAQ,EAAE,IAAI,SAAU/L,GAAM,CAC1E,OAAOmO,GAAU3B,EAAOsB,EAAeC,GAAgB/N,EAAI,CAC7D,CAAC,EAAE,MAAM,CAAC,CAAC,EACX,OAAOiO,GAAiB,QAAQ,EAAE,OAAOC,EAAgB,CAC3D,EAAG,SAAUlO,GAAM,CACjB,OAAOmO,GAAU3B,EAAOsB,EAAeC,GAAgB/N,EAAI,CAC7D,CAAC,CACH,EACImO,GAAY,SAAU3B,EAAOsB,EAAeC,GAAgB/N,GAAM,CACpE,OAAO/E,GAAKoN,GAASrI,EAAI,EAAG,SAAUsB,GAAS,CAC7C,IAAI8M,GAASrC,GAASzK,EAAO,EAAI6M,GAAYN,GACzCQ,GAAW7B,EAAQ,EACvB,OAAO4B,GAAOC,GAAUP,EAAeC,GAAgBzM,EAAO,CAChE,CAAC,CACH,EACIgN,GAAa,SAAUhY,EAAOwX,EAAe,CAC/C,IAAIC,GAAiBL,GAAK,EAAK,EAC3Ba,GAAe,EACnB,OAAOpS,GAAI7F,EAAO,SAAU0J,GAAM,CAChC,MAAO,CACL,WAAYA,GACZ,QAASmO,GAAUI,GAAcT,EAAeC,GAAgB/N,EAAI,CACtE,CACF,CAAC,CACH,EAEIwO,GAAW,QAAQ,KAAK,MAAM,QAAQ,aAAa,EAEnDC,GAAkB,SAAU/W,EAAQgX,EAAa,CACnD,IAAI5W,GAAMJ,EAAO,IACbE,GAAgBF,EAAO,OAAO,iBAAiB,EAC/C2J,GAAWvJ,GAAI,eAAe,EAC9Bd,GAAM2X,GAAWC,GAAWC,GAahC,GAZInX,EAAO,SAAS,oBAClBkX,GAAYlX,EAAO,SAAS,mBAE1BkX,KACFD,GAAY7W,GAAI,OAAO8W,EAAS,EAC5BD,GAAU,UAAYjX,EAAO,SAAS,mBACxCI,GAAI,WAAW6W,GAAWjX,EAAO,SAAS,uBAAuB,EAE9DU,GAAS,QAAQsW,EAAY,WAAY9W,EAAa,GACzDyJ,GAAS,YAAYsN,EAAS,GAG9BD,EACF,KAAO1X,GAAO0X,EAAY,YAAY,CACpC,IAAII,GAAW9X,GAAK,SAChB,CAAC6X,KAAmBC,KAAa,QAAU9X,GAAK,aAAa,eAAe,IAAM,cACpF6X,GAAiB,IAEfzW,GAAS,QAAQpB,GAAMY,EAAa,GACtCyJ,GAAS,YAAYrK,EAAI,EACzB2X,GAAY,MAERC,IACGD,KACHA,GAAY7W,GAAI,OAAO8W,EAAS,EAChCvN,GAAS,YAAYsN,EAAS,GAEhCA,GAAU,YAAY3X,EAAI,GAE1BqK,GAAS,YAAYrK,EAAI,CAG/B,CAEF,OAAKU,EAAO,SAAS,kBAGf,CAACmX,KAAmB,CAACL,GAAS,IAAMA,GAAS,GAAK,KACpDG,GAAU,YAAY7W,GAAI,OAAO,KAAM,CAAE,iBAAkB,GAAI,CAAC,CAAC,EAHnEuJ,GAAS,YAAYvJ,GAAI,OAAO,IAAI,CAAC,EAMhCuJ,EACT,EAEI0N,GAAoB,SAAUrX,EAAQoU,EAAS,CACjD,OAAO3P,GAAI2P,EAAS,SAAUb,GAAO,CACnC,IAAIK,GAAUnK,GAAa8J,GAAM,OAAO,EACxC,OAAOlK,GAAQ,QAAQ0N,GAAgB/W,EAAQ4T,GAAQ,IAAI,CAAC,CAAC,CAC/D,CAAC,CACH,EACI0D,GAAmB,SAAUtX,EAAQoU,EAAS,CAChD,OAAA0B,GAAiB1B,CAAO,EACjBD,GAAYnU,EAAO,gBAAiBoU,CAAO,EAAE,QAAQ,CAC9D,EACImD,GAAiB,SAAUvX,EAAQoU,EAAS,CAC9C,OAAO7Q,GAAK0B,GAAQmP,EAASK,EAAU,EAAG,SAAUL,GAAS,CAC3D,IAAIoD,GAAkB9R,GAAK0O,EAAO,EAAE,IAAIK,EAAU,EAAE,MAAM,EAAK,EAC/D,OAAO+C,GAAkBF,GAAiBtX,EAAQoU,EAAO,EAAIiD,GAAkBrX,EAAQoU,EAAO,CAChG,CAAC,CACH,EACIqD,GAAwB,SAAUrD,EAASY,EAAa,CAC1DlQ,GAAKC,GAAOqP,EAASM,EAAU,EAAG,SAAUnB,GAAO,CACjD,OAAOwB,GAAYC,EAAazB,EAAK,CACvC,CAAC,CACH,EACImE,GAAmB,SAAU1X,EAAQ,CACvC,IAAI2X,EAAoBlT,GAAI+D,GAAU,qBAAqBxI,CAAM,EAAGqJ,GAAQ,OAAO,EACnF,OAAOC,GAAMhE,GAAKqS,EAAmBzV,GAAIqS,EAAiB,CAAC,EAAGjP,GAAKG,GAAQkS,CAAiB,EAAGzV,GAAIqS,EAAiB,CAAC,EAAG,SAAU/S,GAAOoW,GAAK,CAC5I,MAAO,CACL,MAAOpW,GACP,IAAKoW,EACP,CACF,CAAC,CACH,EACIC,GAAmB,SAAU7X,EAAQpB,EAAOoW,GAAa,CAC3D,IAAI8C,GAAYlB,GAAWhY,EAAO8Y,GAAiB1X,CAAM,CAAC,EAC1D8E,GAAKgT,GAAW,SAAUC,GAAU,CAClCN,GAAsBM,GAAS,QAAS/C,EAAW,EACnD1D,EAASyG,GAAS,WAAYR,GAAevX,EAAQ+X,GAAS,OAAO,CAAC,EACtEvG,GAAOuG,GAAS,UAAU,CAC5B,CAAC,CACH,EAEIC,GAAQ5Y,EAAS,IACjB6Y,GAAY,SAAUjY,EAAQkY,EAAItD,GAAI,CACxC,IAAIuD,GAAQxO,GAAUyO,GAAW9Y,GAAM+Y,GACnCC,GAAyB,SAAUC,GAAY,CACjDpZ,EAAS,KAAKiZ,GAAW,SAAU9Y,GAAM,CACvCiZ,GAAW,WAAW,aAAajZ,GAAMsV,GAAG,UAAU,CACxD,CAAC,EACDoD,GAAM,OAAOO,EAAU,CACzB,EAOA,IANAH,GAAYJ,GAAM,OAAO,iCAAkCE,CAAE,EAC7DG,GAAWtB,GAAgB/W,EAAQ4U,EAAE,EACrCuD,GAASH,GAAM,UAAU,EACzBG,GAAO,cAAcvD,EAAE,EACvBuD,GAAO,YAAYD,CAAE,EACrBvO,GAAWwO,GAAO,gBAAgB,EAC7B7Y,GAAOqK,GAAS,WAAYrK,GAAMA,GAAOA,GAAK,WACjD,GAAIA,GAAK,WAAa,MAAQU,EAAO,IAAI,QAAQV,EAAI,EAAG,CACtD0Y,GAAM,OAAO1Y,EAAI,EACjB,KACF,CAEGU,EAAO,IAAI,QAAQ2J,EAAQ,GAC9BqO,GAAM,YAAYrO,GAAUuO,CAAE,EAEhCF,GAAM,YAAYK,GAAUH,CAAE,EAC1BxX,GAAS,QAAQV,EAAO,IAAK4U,GAAG,UAAU,GAC5C0D,GAAuB1D,GAAG,UAAU,EAEtCoD,GAAM,OAAOpD,EAAE,EACXlU,GAAS,QAAQV,EAAO,IAAKkY,CAAE,GACjCF,GAAM,OAAOE,CAAE,CAEnB,EACIM,GAAY,CAAE,UAAWP,EAAU,EAEnCQ,GAAgB,SAAUzY,EAAQ6T,EAAM,CACtCpD,GAAKoD,EAAM,IAAI,EACjBlB,GAAOkB,EAAM,IAAI,EACRpD,GAAKoD,EAAM,IAAI,GACxBnD,GAAOmD,CAAI,EAAE,KAAK,SAAU6E,GAAI,CAC9B,OAAOF,GAAU,UAAUxY,EAAQ0Y,GAAG,IAAI,EAAG7E,EAAK,IAAI,CAAC,CACzD,CAAC,CAEL,EACI8E,GAAe,SAAU9E,EAAM,CAC7BpD,GAAKoD,EAAM,IAAI,GACjBlB,GAAOkB,EAAM,IAAI,CAErB,EACI+E,GAAgB,SAAU5Y,EAAQgV,EAAa6D,GAAS,CACtD7D,IAAgB,SAClBlQ,GAAK+T,GAASF,EAAY,EAE1B7T,GAAK+T,GAAS,SAAUhF,GAAM,CAC5B,OAAO4E,GAAczY,EAAQ6T,EAAI,CACnC,CAAC,CAEL,EAEIiF,GAAuB,SAAU9Y,EAAQgV,EAAa,CACxD,IAAIpW,GAAQ6F,GAAI+D,GAAU,qBAAqBxI,CAAM,EAAGqJ,GAAQ,OAAO,EACnEwP,GAAUpU,GAAI+D,GAAU,mBAAmBxI,CAAM,EAAGqJ,GAAQ,OAAO,EACnE0P,GAAY,GAChB,GAAIna,GAAM,QAAUia,GAAQ,OAAQ,CAClC,IAAIvX,GAAWtB,EAAO,UAAU,YAAY,EAC5C6X,GAAiB7X,EAAQpB,GAAOoW,CAAW,EAC3C4D,GAAc5Y,EAAQgV,EAAa6D,EAAO,EAC1C7Y,EAAO,UAAU,eAAesB,EAAQ,EACxCtB,EAAO,UAAU,OAAOmB,GAAM,eAAenB,EAAO,UAAU,OAAO,CAAC,CAAC,EACvEA,EAAO,YAAY,EACnB+Y,GAAY,EACd,CACA,OAAOA,EACT,EACIC,GAAsB,SAAUhZ,EAAQ,CAC1C,OAAO8Y,GAAqB9Y,EAAQ,QAAQ,CAC9C,EACIiZ,GAAuB,SAAUjZ,EAAQ,CAC3C,OAAO8Y,GAAqB9Y,EAAQ,SAAS,CAC/C,EACIkZ,GAAuB,SAAUlZ,EAAQ,CAC3C,OAAO8Y,GAAqB9Y,EAAQ,SAAS,CAC/C,EAEImZ,GAAkB,SAAU/Y,EAAKkU,EAAI8E,GAAQ,CAC/C,IAAInV,GAAOmV,GAAO,iBAAiB,EAAIA,GAAO,iBAAiB,EAAI,KACnEhZ,EAAI,SAASkU,EAAI,kBAAmBrQ,EAAI,CAC1C,EACIoV,GAAa,SAAU/Y,EAAKwR,EAAO,CACrC3S,EAAS,KAAK2S,EAAO,SAAU7P,GAAO2P,GAAK,CACzCtR,EAAI,aAAasR,GAAK3P,EAAK,CAC7B,CAAC,CACH,EACIqX,GAAkB,SAAUlZ,EAAKkU,EAAI8E,GAAQ,CAC/CC,GAAW/E,EAAI8E,GAAO,iBAAiB,CAAC,EACxCja,EAAS,KAAKiB,EAAI,OAAO,KAAMkU,CAAE,EAAG,SAAUM,GAAI,CAChDyE,GAAWzE,GAAIwE,GAAO,sBAAsB,CAAC,CAC/C,CAAC,CACH,EACIG,GAAwB,SAAUnZ,EAAKkU,EAAI8E,GAAQ,CACrDD,GAAgB/Y,EAAKkU,EAAI8E,EAAM,EAC/BE,GAAgBlZ,EAAKkU,EAAI8E,EAAM,CACjC,EACII,GAAe,SAAUpZ,EAAKwJ,EAAS6P,GAAQ,CACjDta,EAAS,KAAKsa,GAAQ,SAAUC,GAAO,CACrC,IAAIC,GACJ,OAAOvZ,EAAI,SAASwJ,GAAU+P,GAAK,CAAC,EAAGA,GAAGD,EAAK,EAAI,GAAIC,GAAG,CAC5D,CAAC,CACH,EACIC,GAAkB,SAAU5Z,EAAQe,EAAKS,GAAOoG,GAAM,CACxD,IAAIhH,GAAWC,GASf,IARAD,GAAYG,EAAIS,GAAQ,iBAAmB,cAAc,EACzDX,GAASE,EAAIS,GAAQ,cAAgB,WAAW,EAC5CZ,GAAU,WAAa,IACzBA,GAAYA,GAAU,WAAW,KAAK,IAAIC,GAAQD,GAAU,WAAW,OAAS,CAAC,CAAC,GAAKA,IAErF,CAACY,IAASd,GAAS,KAAKE,GAAU,WAAW,IAC/CA,GAAYA,GAAU,aAEjBA,GAAU,aAAegH,IAAM,CAIpC,GAHIlH,GAAS,YAAYV,EAAQY,EAAS,GAGtC,YAAY,KAAKA,GAAU,WAAW,QAAQ,EAChD,OAAOA,GAETA,GAAYA,GAAU,UACxB,CACA,OAAOA,EACT,EACIiZ,GAAwB,SAAU7Z,EAAQe,EAAK6G,GAAM,CAMvD,QALIkS,GAAa,CAAC,EAAG1Z,GAAMJ,EAAO,IAC9B+Z,GAAYH,GAAgB5Z,EAAQe,EAAK,GAAM6G,EAAI,EACnDoS,GAAUJ,GAAgB5Z,EAAQe,EAAK,GAAO6G,EAAI,EAClDH,GACAwS,GAAW,CAAC,EACP3a,GAAOya,GAAWza,KACzB2a,GAAS,KAAK3a,EAAI,EACdA,KAAS0a,IAFkB1a,GAAOA,GAAK,YAE3C,CAIF,OAAAH,EAAS,KAAK8a,GAAU,SAAU3a,GAAM,CACtC,GAAIoB,GAAS,YAAYV,EAAQV,EAAI,EAAG,CACtCwa,GAAW,KAAKxa,EAAI,EACpBmI,GAAQ,KACR,MACF,CACA,GAAIrH,GAAI,QAAQd,EAAI,GAAKoB,GAAS,KAAKpB,EAAI,EAAG,CACxCoB,GAAS,KAAKpB,EAAI,GACpBc,GAAI,OAAOd,EAAI,EAEjBmI,GAAQ,KACR,MACF,CACA,IAAIyS,GAAc5a,GAAK,YACvB,GAAIJ,EAAS,eAAeI,EAAI,IAC1BoB,GAAS,YAAYV,EAAQka,EAAW,GAAK,CAACA,IAAe5a,GAAK,aAAesI,IAAM,CACzFH,GAAQ,KACR,MACF,CAEGA,KACHA,GAAQrH,GAAI,OAAO,GAAG,EACtBd,GAAK,WAAW,aAAamI,GAAOnI,EAAI,EACxCwa,GAAW,KAAKrS,EAAK,GAEvBA,GAAM,YAAYnI,EAAI,CACxB,CAAC,EACMwa,EACT,EACIK,GAAqB,SAAU/Z,EAAKga,EAAKhB,GAAQ,CACnD,IAAIiB,GAAWja,EAAI,SAASga,EAAK,iBAAiB,EAC9CE,GAAclB,GAASA,GAAO,iBAAiB,EAAI,GACvD,OAAAkB,GAAcA,KAAgB,KAAO,GAAKA,GACnCD,KAAaC,EACtB,EACIC,GAAY,SAAUva,EAAQwa,EAAUpB,GAAQ,CAC9CA,KAAW,SACbA,GAAS,CAAC,GAEZ,IAAIrY,GAAMf,EAAO,UAAU,OAAO,EAAI,EAClCsB,GACAmZ,GAAe,KACf7S,GAAOY,GAAU,sBAAsBxI,EAAQA,EAAO,UAAU,SAAS,EAAI,CAAC,EAC9EI,GAAMJ,EAAO,IACbI,GAAI,mBAAmBJ,EAAO,UAAU,QAAQ,CAAC,IAAM,UAG3Dwa,EAAWA,EAAS,YAAY,EAC5BA,IAAa,OACfC,GAAe,MAEjBnZ,GAAWQ,GAAS,eAAef,EAAG,EACtC5B,EAAS,KAAK0a,GAAsB7Z,EAAQe,GAAK6G,EAAI,EAAG,SAAUH,GAAO,CACvE,IAAIiT,GAAWC,GACfA,GAAUlT,GAAM,gBACZkT,IAAWja,GAAS,WAAWia,EAAO,GAAKA,GAAQ,WAAaH,GAAYL,GAAmB/Z,GAAKua,GAASvB,EAAM,GACrHsB,GAAYC,GACZlT,GAAQrH,GAAI,OAAOqH,GAAOgT,EAAY,EACtCE,GAAQ,YAAYlT,EAAK,IAEzBiT,GAAYta,GAAI,OAAOoa,CAAQ,EAC/B/S,GAAM,WAAW,aAAaiT,GAAWjT,EAAK,EAC9CiT,GAAU,YAAYjT,EAAK,EAC3BA,GAAQrH,GAAI,OAAOqH,GAAOgT,EAAY,GAExCjB,GAAapZ,GAAKqH,GAAO,CACvB,SACA,eACA,gBACA,cACA,aACA,UACA,gBACA,iBACA,eACA,aACF,CAAC,EACD8R,GAAsBnZ,GAAKsa,GAAWtB,EAAM,EAC5CwB,GAAuB5a,EAAO,IAAK0a,EAAS,CAC9C,CAAC,EACD1a,EAAO,UAAU,OAAO8B,GAAS,gBAAgBR,EAAQ,CAAC,EAC5D,EACIuZ,GAAe,SAAUC,EAAOC,EAAO,CACzC,OAAOD,GAASC,GAASra,GAAS,WAAWoa,CAAK,GAAKA,EAAM,WAAaC,EAAM,QAClF,EACIC,GAAmB,SAAU5a,EAAK0a,EAAOC,GAAO,CAClD,IAAIE,GAAc7a,EAAI,SAAS0a,EAAO,kBAAmB,EAAI,EACzDpB,GAAQtZ,EAAI,SAAS2a,GAAO,kBAAmB,EAAI,EACvD,OAAOE,KAAgBvB,EACzB,EACIwB,GAAiB,SAAUC,EAAMC,EAAM,CACzC,OAAOD,EAAK,YAAcC,EAAK,SACjC,EACIC,GAAc,SAAUjb,EAAK0a,EAAOC,GAAO,CAC7C,OAAOF,GAAaC,EAAOC,EAAK,GAAKC,GAAiB5a,EAAK0a,EAAOC,EAAK,GAAKG,GAAeJ,EAAOC,EAAK,CACzG,EACIH,GAAyB,SAAUxa,EAAKsa,EAAW,CACrD,IAAIC,GAASrb,GAEb,GADAqb,GAAUD,EAAU,YAChBW,GAAYjb,EAAKsa,EAAWC,EAAO,EAAG,CACxC,KAAOrb,GAAOqb,GAAQ,YACpBD,EAAU,YAAYpb,EAAI,EAE5Bc,EAAI,OAAOua,EAAO,CACpB,CAEA,GADAA,GAAUD,EAAU,gBAChBW,GAAYjb,EAAKsa,EAAWC,EAAO,EAAG,CACxC,KAAOrb,GAAOqb,GAAQ,WACpBD,EAAU,aAAapb,GAAMob,EAAU,UAAU,EAEnDta,EAAI,OAAOua,EAAO,CACpB,CACF,EACIW,GAAa,SAAUlb,EAAKkI,EAAMkS,GAAUpB,GAAQ,CACtD,GAAI9Q,EAAK,WAAakS,GAAU,CAC9B,IAAIe,GAAUnb,EAAI,OAAOkI,EAAMkS,EAAQ,EACvCjB,GAAsBnZ,EAAKmb,GAASnC,EAAM,CAC5C,MACEG,GAAsBnZ,EAAKkI,EAAM8Q,EAAM,CAE3C,EACIoC,GAAsB,SAAUxb,EAAQgH,EAAYpI,GAAO4b,GAAUpB,GAAQ,CAC/E,GAAIpS,EAAW,WAAawT,IAAY,CAACiB,GAAmBrC,EAAM,EAChEF,GAAqBlZ,CAAM,MACtB,CACL,IAAIsB,GAAWQ,GAAS,eAAe9B,EAAO,UAAU,OAAO,EAAI,CAAC,EACpEb,EAAS,KAAK,CAAC6H,CAAU,EAAE,OAAOpI,EAAK,EAAG,SAAU0B,GAAK,CACvDgb,GAAWtb,EAAO,IAAKM,GAAKka,GAAUpB,EAAM,CAC9C,CAAC,EACDpZ,EAAO,UAAU,OAAO8B,GAAS,gBAAgBR,EAAQ,CAAC,CAC5D,CACF,EACIma,GAAqB,SAAUrC,EAAQ,CACzC,MAAO,oBAAqBA,CAC9B,EACIsC,GAAmB,SAAU1b,EAAQgH,EAAYwT,GAAUpB,GAAQ,CACrE,GAAIpS,IAAehH,EAAO,QAAQ,EAGlC,GAAIgH,EACF,GAAIA,EAAW,WAAawT,IAAY,CAACiB,GAAmBrC,EAAM,EAChEF,GAAqBlZ,CAAM,MACtB,CACL,IAAIsB,GAAWQ,GAAS,eAAe9B,EAAO,UAAU,OAAO,EAAI,CAAC,EACpEuZ,GAAsBvZ,EAAO,IAAKgH,EAAYoS,EAAM,EACpDwB,GAAuB5a,EAAO,IAAKA,EAAO,IAAI,OAAOgH,EAAYwT,EAAQ,CAAC,EAC1Exa,EAAO,UAAU,OAAO8B,GAAS,gBAAgBR,EAAQ,CAAC,CAC5D,MAEAiZ,GAAUva,EAAQwa,GAAUpB,EAAM,CAEtC,EACIuC,GAAa,SAAU3b,EAAQwa,EAAUpB,GAAQ,CACnD,IAAIpS,GAAawB,GAAU,cAAcxI,CAAM,EAC3C4b,GAAmBpT,GAAU,oBAAoBxI,CAAM,EAC3DoZ,GAASA,IAAkB,CAAC,EACxBpS,IAAc4U,GAAiB,OAAS,EAC1CJ,GAAoBxb,EAAQgH,GAAY4U,GAAkBpB,EAAUpB,EAAM,EAE1EsC,GAAiB1b,EAAQgH,GAAYwT,EAAUpB,EAAM,CAEzD,EACIyC,GAAa,CACf,WAAYF,GACZ,uBAAwBf,EAC1B,EAEIkB,GAAQ1c,EAAS,IACjB2c,GAAgB,SAAU3b,EAAK8X,EAAI,CACrC,IAAIyC,GACAqB,GAAa9D,EAAG,WAChB8D,GAAW,WAAa,MAAQA,GAAW,aAAe9D,IAC5DyC,GAAUqB,GAAW,gBACjBrB,IAAWA,GAAQ,WAAa,MAClCA,GAAQ,YAAYzC,CAAE,EAClBxX,GAAS,QAAQN,EAAK4b,EAAU,GAClCF,GAAM,OAAOE,EAAU,GAGzBF,GAAM,SAASE,GAAY,gBAAiB,MAAM,GAGlDtb,GAAS,WAAWsb,EAAU,IAChCrB,GAAUqB,GAAW,gBACjBrB,IAAWA,GAAQ,WAAa,MAClCA,GAAQ,YAAYzC,CAAE,EAG5B,EACI+D,GAAiB,SAAU7b,EAAKwJ,EAAS,CAC3CzK,EAAS,KAAKA,EAAS,KAAKiB,EAAI,OAAO,QAASwJ,CAAO,CAAC,EAAG,SAAUsO,GAAI,CACvE6D,GAAc3b,EAAK8X,EAAE,CACvB,CAAC,CACH,EACIgE,GAAiB,CACnB,cAAeH,GACf,eAAgBE,EAClB,EAEIE,GAAyB,SAAUnc,EAAQe,EAAKqb,GAAWxU,GAAM,CACnE,IAAItI,GAAOyB,EAAI,eACXF,GAASE,EAAI,YACbsb,GAAgBC,GACpB,GAAIhd,GAAK,WAAa,IAAM8c,GAAYvb,GAASvB,GAAK,KAAK,OAASuB,GAAS,GAC3E,OAAOvB,GAYT,IAVA+c,GAAiBrc,EAAO,OAAO,oBAAoB,EAC/CV,GAAK,WAAa,IACpBA,GAAOP,EAAS,QAAQO,GAAMuB,EAAM,GAEtCyb,GAAS,IAAItd,EAASM,GAAMsI,EAAI,EAC5BwU,IACE1b,GAAS,UAAUV,EAAO,IAAKV,EAAI,GACrCgd,GAAO,KAAK,EAGThd,GAAOgd,GAAOF,GAAY,OAAS,OAAO,EAAE,GAOjD,GANI9c,GAAK,WAAa,MAAQ,CAACA,GAAK,cAAc,GAG9C+c,GAAe/c,GAAK,QAAQ,GAG5BA,GAAK,WAAa,GAAKA,GAAK,KAAK,OAAS,EAC5C,OAAOA,EAGb,EACIid,GAAuB,SAAUnc,EAAKE,EAAK,CAC7C,IAAIkc,GAAalc,EAAI,WACrB,OAAOkc,GAAW,SAAW,GAAK,CAAC9b,GAAS,WAAW8b,GAAW,CAAC,CAAC,GAAKpc,EAAI,QAAQoc,GAAW,CAAC,CAAC,CACpG,EACIC,GAAyB,SAAUrc,EAAKE,EAAK,CAC3Cic,GAAqBnc,EAAKE,CAAG,GAC/BF,EAAI,OAAOE,EAAI,WAAY,EAAI,CAEnC,EACIoc,GAAe,SAAUtc,EAAKuc,EAASC,GAAO,CAChD,IAAItd,GAAMud,GAGV,GAFAA,GAAYN,GAAqBnc,EAAKwc,EAAK,EAAIA,GAAM,WAAaA,GAClEH,GAAuBrc,EAAKuc,CAAO,EAC/B,CAACjc,GAAS,QAAQN,EAAKuc,EAAS,EAAI,EACtC,KAAOrd,GAAOqd,EAAQ,YACpBE,GAAU,YAAYvd,EAAI,CAGhC,EACIwd,GAAkB,SAAU1c,EAAKuc,EAASC,GAAO,CACnD,IAAItd,GAAMyd,GACN7E,GAAKyE,EAAQ,WACjB,GAAI,GAACjc,GAAS,cAAcN,EAAKuc,CAAO,GAAK,CAACjc,GAAS,cAAcN,EAAKwc,EAAK,GAG/E,CAAIlc,GAAS,WAAWkc,GAAM,SAAS,IACrCG,GAAWH,GAAM,WAEf1E,KAAO0E,GAAM,WACXlc,GAAS,KAAKwX,GAAG,eAAe,GAClC9X,EAAI,OAAO8X,GAAG,eAAe,EAGjC5Y,GAAOsd,GAAM,UACTtd,IAAQoB,GAAS,KAAKpB,EAAI,GAAKqd,EAAQ,cAAc,GACvDvc,EAAI,OAAOd,EAAI,EAEboB,GAAS,QAAQN,EAAKwc,GAAO,EAAI,GACnCxc,EAAI,EAAEwc,EAAK,EAAE,MAAM,EAErBF,GAAatc,EAAKuc,EAASC,EAAK,EAC5BG,IACFH,GAAM,YAAYG,EAAQ,EAE5B,IAAI1O,GAAWmC,GAAWnH,GAAQ,QAAQuT,EAAK,EAAGvT,GAAQ,QAAQsT,CAAO,CAAC,EACtEK,GAAc3O,GAAWjO,EAAI,WAAWuc,EAASjc,GAAS,WAAYkc,EAAK,EAAI,CAAC,EACpFxc,EAAI,OAAOuc,CAAO,EAClB7X,GAAKkY,GAAa,SAAU1U,GAAM,CAC5B5H,GAAS,QAAQN,EAAKkI,EAAI,GAAKA,KAASlI,EAAI,QAAQ,GACtDA,EAAI,OAAOkI,EAAI,CAEnB,CAAC,EACH,EACI2U,GAAmB,SAAUjd,EAAQkd,EAAQC,GAAM,CACrDnd,EAAO,IAAI,EAAEmd,EAAI,EAAE,MAAM,EACzBL,GAAgB9c,EAAO,IAAKkd,EAAQC,EAAI,EACxCnd,EAAO,UAAU,kBAAkBmd,EAAI,CACzC,EACIC,GAAe,SAAUpd,EAAQe,EAAKmc,GAAQC,GAAM,CACtD,IAAI/c,GAAMJ,EAAO,IACjB,GAAII,GAAI,QAAQ+c,EAAI,EAClBF,GAAiBjd,EAAQkd,GAAQC,EAAI,MAChC,CACL,IAAI7b,GAAWQ,GAAS,eAAef,CAAG,EAC1C+b,GAAgB1c,GAAK8c,GAAQC,EAAI,EACjCnd,EAAO,UAAU,OAAO8B,GAAS,gBAAgBR,EAAQ,CAAC,CAC5D,CACF,EACI+b,GAAgB,SAAUrd,EAAQe,EAAKmc,GAAQC,GAAM,CACvD,IAAI7b,GAAWQ,GAAS,eAAef,CAAG,EAC1C+b,GAAgB9c,EAAO,IAAKkd,GAAQC,EAAI,EACxC,IAAIG,GAAmBxb,GAAS,gBAAgBR,EAAQ,EACxDtB,EAAO,UAAU,OAAOsd,EAAgB,CAC1C,EACIC,GAAqC,SAAUvd,EAAQoc,EAAW,CACpE,IAAIhc,GAAMJ,EAAO,IAAKsW,GAAYtW,EAAO,UACrCwd,GAAoBlH,GAAU,SAAS,EACvC1O,GAAOY,GAAU,sBAAsBxI,EAAQwd,EAAiB,EAChE5I,GAAKxU,GAAI,UAAUkW,GAAU,SAAS,EAAG,KAAM1O,EAAI,EACnDsQ,GAAInX,GAAK0c,GACb,GAAI7I,GAAI,CAEN,GADAsD,GAAKtD,GAAG,WACJsD,KAAOlY,EAAO,QAAQ,GAAKU,GAAS,QAAQN,GAAK8X,EAAE,EACrD,MAAO,GAIT,GAFAnX,GAAMI,GAAM,eAAemV,GAAU,OAAO,EAAI,CAAC,EACjDmH,GAAUrd,GAAI,UAAU+b,GAAuBnc,EAAQe,GAAKqb,EAAWxU,EAAI,EAAG,KAAMA,EAAI,EACpF6V,IAAWA,KAAY7I,GACzB,OAAIwH,EACFgB,GAAapd,EAAQe,GAAK0c,GAAS7I,EAAE,EAErCyI,GAAcrd,EAAQe,GAAK6T,GAAI6I,EAAO,EAEjC,GACF,GAAI,CAACA,IACN,CAACrB,EACH,OAAAlD,GAAqBlZ,CAAM,EACpB,EAGb,CACA,MAAO,EACT,EACI0d,GAAc,SAAUtd,EAAKqH,EAAOG,GAAM,CAC5C,IAAI+V,GAAcvd,EAAI,UAAUqH,EAAM,WAAYrH,EAAI,QAASwH,EAAI,EACnExH,EAAI,OAAOqH,CAAK,EACZkW,IAAevd,EAAI,QAAQud,EAAW,GACxCvd,EAAI,OAAOud,EAAW,CAE1B,EACIC,GAA+B,SAAU5d,EAAQoc,EAAW,CAC9D,IAAIhc,GAAMJ,EAAO,IACbwd,GAAoBxd,EAAO,UAAU,SAAS,EAC9C4H,GAAOY,GAAU,sBAAsBxI,EAAQwd,EAAiB,EAChE/V,GAAQrH,GAAI,UAAUod,GAAmBpd,GAAI,QAASwH,EAAI,EAC9D,GAAIH,IAASrH,GAAI,QAAQqH,EAAK,EAAG,CAC/B,IAAI1G,GAAMI,GAAM,eAAenB,EAAO,UAAU,OAAO,EAAI,CAAC,EACxD6d,GAAYzd,GAAI,UAAU+b,GAAuBnc,EAAQe,GAAKqb,EAAWxU,EAAI,EAAG,KAAMA,EAAI,EAC9F,GAAIiW,GACF,OAAA7d,EAAO,YAAY,SAAS,UAAY,CACtC0d,GAAYtd,GAAKqH,GAAOG,EAAI,EAC5BiU,GAAW,uBAAuBzb,GAAKyd,GAAU,UAAU,EAC3D7d,EAAO,UAAU,OAAO6d,GAAW,EAAI,EACvC7d,EAAO,UAAU,SAASoc,CAAS,CACrC,CAAC,EACM,EAEX,CACA,MAAO,EACT,EACI0B,GAAuB,SAAU9d,EAAQoc,EAAW,CACtD,OAAOmB,GAAmCvd,EAAQoc,CAAS,GAAKwB,GAA6B5d,EAAQoc,CAAS,CAChH,EACI2B,GAAuB,SAAU/d,EAAQ,CAC3C,IAAIwd,EAAoBxd,EAAO,UAAU,SAAS,EAC9C4H,GAAOY,GAAU,sBAAsBxI,EAAQwd,CAAiB,EAChEQ,GAAkBhe,EAAO,IAAI,UAAUwd,EAAmB,WAAY5V,EAAI,EAC9E,OAAIoW,IAAmBxV,GAAU,qBAAqBxI,CAAM,EAAE,OAAS,GACrEA,EAAO,YAAY,SAAS,UAAY,CACtCA,EAAO,YAAY,QAAQ,EAC3Bkc,GAAe,eAAelc,EAAO,IAAKA,EAAO,QAAQ,CAAC,CAC5D,CAAC,EACM,IAEF,EACT,EACIie,GAAkB,SAAUje,EAAQoc,EAAW,CACjD,OAAOpc,EAAO,UAAU,YAAY,EAAI8d,GAAqB9d,EAAQoc,CAAS,EAAI2B,GAAqB/d,CAAM,CAC/G,EACIke,GAAQ,SAAUle,EAAQ,CAC5BA,EAAO,GAAG,UAAW,SAAUme,EAAG,CAC5BA,EAAE,UAAYlf,EAAS,UACrBgf,GAAgBje,EAAQ,EAAK,GAC/Bme,EAAE,eAAe,EAEVA,EAAE,UAAYlf,EAAS,QAC5Bgf,GAAgBje,EAAQ,EAAI,GAC9Bme,EAAE,eAAe,CAGvB,CAAC,CACH,EACIC,GAAS,CACX,MAAOF,GACP,gBAAiBD,EACnB,EAEI/H,GAAM,SAAUlW,EAAQ,CAC1B,MAAO,CACL,gBAAiB,SAAUoc,EAAW,CACpCgC,GAAO,gBAAgBpe,EAAQoc,CAAS,CAC1C,CACF,CACF,EACIiC,GAAM,CAAE,IAAKnI,EAAI,EAEjBoI,GAAwB,SAAUte,EAAQwa,EAAU,CACtD,OAAO,UAAY,CACjB,IAAIxT,GAAahH,EAAO,IAAI,UAAUA,EAAO,UAAU,SAAS,EAAG,UAAU,EAC7E,OAAOgH,IAAcA,GAAW,WAAawT,CAC/C,CACF,EACI+D,GAAW,SAAUve,EAAQ,CAC/BA,EAAO,GAAG,oBAAqB,SAAUme,EAAG,CAC1C,IAAIK,GAAML,EAAE,QAAQ,YAAY,EAC5BK,KAAQ,SACVxF,GAAoBhZ,CAAM,EACjBwe,KAAQ,WACjBvF,GAAqBjZ,CAAM,CAE/B,CAAC,EACDA,EAAO,WAAW,sBAAuB,SAAUye,EAAIrF,GAAQ,CAC7DyC,GAAW,WAAW7b,EAAQ,KAAMoZ,EAAM,CAC5C,CAAC,EACDpZ,EAAO,WAAW,oBAAqB,SAAUye,EAAIrF,GAAQ,CAC3DyC,GAAW,WAAW7b,EAAQ,KAAMoZ,EAAM,CAC5C,CAAC,EACDpZ,EAAO,WAAW,uBAAwB,SAAUye,EAAIrF,GAAQ,CAC9DyC,GAAW,WAAW7b,EAAQ,KAAMoZ,EAAM,CAC5C,CAAC,EACDpZ,EAAO,WAAW,aAAc,UAAY,CAC1CkZ,GAAqBlZ,CAAM,CAC7B,CAAC,EACDA,EAAO,qBAAqB,sBAAuBse,GAAsBte,EAAQ,IAAI,CAAC,EACtFA,EAAO,qBAAqB,oBAAqBse,GAAsBte,EAAQ,IAAI,CAAC,EACpFA,EAAO,qBAAqB,uBAAwBse,GAAsBte,EAAQ,IAAI,CAAC,CACzF,EACI0e,GAAW,CAAE,SAAUH,EAAS,EAEhCI,GAAoB,SAAU3e,EAAQ,CACxC,OAAOA,EAAO,SAAS,sBAAuB,EAAI,CACpD,EACI4e,GAAW,CAAE,kBAAmBD,EAAkB,EAElDE,GAAc,SAAU7e,EAAQ,CAClCA,EAAO,GAAG,UAAW,SAAUme,EAAG,CAC5BA,EAAE,UAAYlf,EAAS,KAAOA,EAAS,eAAekf,CAAC,GAG3Dne,EAAO,YAAY,SAAS,UAAY,EAClCme,EAAE,SAAWlF,GAAqBjZ,CAAM,EAAIgZ,GAAoBhZ,CAAM,IACxEme,EAAE,eAAe,CAErB,CAAC,CACH,CAAC,CACH,EACIW,GAAU,SAAU9e,EAAQ,CAC1B4e,GAAS,kBAAkB5e,CAAM,GACnC6e,GAAY7e,CAAM,EAEpBoe,GAAO,MAAMpe,CAAM,CACrB,EACI+e,GAAW,CAAE,MAAOD,EAAQ,EAE5BE,GAAY,SAAU1W,EAAM2W,EAAW,CACzC,QAASpO,GAAQ,EAAGA,GAAQvI,EAAK,OAAQuI,KAAS,CAChD,IAAIjH,GAAUtB,EAAKuI,EAAK,EACxB,GAAIoO,EAAUrV,EAAO,EACnB,OAAOiH,EAEX,CACA,MAAO,EACT,EACIqO,GAAY,SAAUlf,EAAQwa,EAAU,CAC1C,OAAO,SAAU2D,GAAG,CAClB,IAAIgB,GAAOhB,GAAE,QACbne,EAAO,GAAG,aAAc,SAAUme,GAAG,CACnC,IAAIiB,GAAiBJ,GAAUb,GAAE,QAASzd,GAAS,eAAe,EAC9D2e,GAAUD,KAAmB,GAAKjB,GAAE,QAAQ,MAAM,EAAGiB,EAAc,EAAIjB,GAAE,QACzEvf,GAAQO,EAAS,KAAKkgB,GAAS3e,GAAS,UAAU,EACtDye,GAAK,OAAOvgB,GAAM,OAAS,GAAKA,GAAM,CAAC,EAAE,WAAa4b,CAAQ,CAChE,CAAC,CACH,CACF,EACI8E,GAAa,SAAUtf,EAAQ,CACjC,IAAIuf,EAAY,SAAUvf,GAAQwf,GAAQ,CACxC,IAAIC,GAAUzf,GAAO,SAAS,QAAUA,GAAO,SAAS,QAAU,GAClE,OAAOb,EAAS,QAAQsgB,GAAQ,MAAM,MAAM,EAAGD,EAAM,IAAM,EAC7D,EACKD,EAAUvf,EAAQ,SAAS,IAC9BA,EAAO,UAAU,UAAW,CAC1B,OAAQ,GACR,MAAO,gBACP,IAAK,oBACL,aAAckf,GAAUlf,EAAQ,IAAI,CACtC,CAAC,EACDA,EAAO,UAAU,UAAW,CAC1B,OAAQ,GACR,MAAO,cACP,IAAK,sBACL,aAAckf,GAAUlf,EAAQ,IAAI,CACtC,CAAC,GAEHA,EAAO,UAAU,SAAU,CACzB,KAAM,SACN,MAAO,kBACP,IAAK,QACP,CAAC,CACH,EACI0f,GAAU,CAAE,SAAUJ,EAAW,EAErCxgB,EAAO,IAAI,QAAS,SAAUkB,EAAQ,CACpC,OAAA+e,GAAS,MAAM/e,CAAM,EACrB0f,GAAQ,SAAS1f,CAAM,EACvB0e,GAAS,SAAS1e,CAAM,EACjBqe,GAAI,IAAIre,CAAM,CACvB,CAAC,EACD,SAAS2f,IAAU,CACnB,CAEA,OAAOA,EAEX,EAAE,MAAM,CACR,GAAG,ICnmEH,IAAAC,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAME,SAAUC,EAAQC,EAAS,CACzB,OAAOH,IAAY,UAAY,OAAOC,GAAW,IAAcA,GAAO,QAAUE,EAAQ,EACxF,OAAO,QAAW,YAAc,OAAO,IAAM,OAAOA,CAAO,EAC3DD,EAAO,OAASC,EAAQ,CAC5B,GAAEH,GAAO,UAAY,CAAE,aAEnB,IAAII,EAEJ,SAASC,GAAQ,CACb,OAAOD,EAAa,MAAM,KAAM,SAAS,CAC7C,CAIA,SAASE,EAAgBC,EAAU,CAC/BH,EAAeG,CACnB,CAEA,SAASC,EAAQC,EAAO,CACpB,OACIA,aAAiB,OACjB,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,gBAElD,CAEA,SAASC,EAASD,EAAO,CAGrB,OACIA,GAAS,MACT,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,iBAElD,CAEA,SAASE,EAAWC,EAAGC,EAAG,CACtB,OAAO,OAAO,UAAU,eAAe,KAAKD,EAAGC,CAAC,CACpD,CAEA,SAASC,EAAcC,EAAK,CACxB,GAAI,OAAO,oBACP,OAAO,OAAO,oBAAoBA,CAAG,EAAE,SAAW,EAElD,IAAIC,EACJ,IAAKA,KAAKD,EACN,GAAIJ,EAAWI,EAAKC,CAAC,EACjB,MAAO,GAGf,MAAO,EAEf,CAEA,SAASC,EAAYR,EAAO,CACxB,OAAOA,IAAU,MACrB,CAEA,SAASS,EAAST,EAAO,CACrB,OACI,OAAOA,GAAU,UACjB,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,iBAElD,CAEA,SAASU,EAAOV,EAAO,CACnB,OACIA,aAAiB,MACjB,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,eAElD,CAEA,SAASW,EAAIC,EAAKC,EAAI,CAClB,IAAIC,EAAM,CAAC,EACPC,EACAC,GAASJ,EAAI,OACjB,IAAKG,EAAI,EAAGA,EAAIC,GAAQ,EAAED,EACtBD,EAAI,KAAKD,EAAGD,EAAIG,CAAC,EAAGA,CAAC,CAAC,EAE1B,OAAOD,CACX,CAEA,SAASG,EAAOd,EAAGC,EAAG,CAClB,QAASW,KAAKX,EACNF,EAAWE,EAAGW,CAAC,IACfZ,EAAEY,CAAC,EAAIX,EAAEW,CAAC,GAIlB,OAAIb,EAAWE,EAAG,UAAU,IACxBD,EAAE,SAAWC,EAAE,UAGfF,EAAWE,EAAG,SAAS,IACvBD,EAAE,QAAUC,EAAE,SAGXD,CACX,CAEA,SAASe,EAAUlB,EAAOmB,EAAQC,EAAQC,EAAQ,CAC9C,OAAOC,GAAiBtB,EAAOmB,EAAQC,EAAQC,EAAQ,EAAI,EAAE,IAAI,CACrE,CAEA,SAASE,GAAsB,CAE3B,MAAO,CACH,MAAO,GACP,aAAc,CAAC,EACf,YAAa,CAAC,EACd,SAAU,GACV,cAAe,EACf,UAAW,GACX,WAAY,KACZ,aAAc,KACd,cAAe,GACf,gBAAiB,GACjB,IAAK,GACL,gBAAiB,CAAC,EAClB,IAAK,KACL,SAAU,KACV,QAAS,GACT,gBAAiB,EACrB,CACJ,CAEA,SAASC,EAAgBC,EAAG,CACxB,OAAIA,EAAE,KAAO,OACTA,EAAE,IAAMF,EAAoB,GAEzBE,EAAE,GACb,CAEA,IAAIC,EACA,MAAM,UAAU,KAChBA,EAAO,MAAM,UAAU,KAEvBA,EAAO,SAAUC,EAAK,CAClB,IAAIC,EAAI,OAAO,IAAI,EACfC,EAAMD,EAAE,SAAW,EACnBb,EAEJ,IAAKA,EAAI,EAAGA,EAAIc,EAAKd,IACjB,GAAIA,KAAKa,GAAKD,EAAI,KAAK,KAAMC,EAAEb,CAAC,EAAGA,EAAGa,CAAC,EACnC,MAAO,GAIf,MAAO,EACX,EAGJ,SAASE,EAAQL,EAAG,CAChB,IAAIM,EAAQ,KACRC,EAAc,GACdC,EAAaR,EAAE,IAAM,CAAC,MAAMA,EAAE,GAAG,QAAQ,CAAC,EAyB9C,GAxBIQ,IACAF,EAAQP,EAAgBC,CAAC,EACzBO,EAAcN,EAAK,KAAKK,EAAM,gBAAiB,SAAUhB,GAAG,CACxD,OAAOA,IAAK,IAChB,CAAC,EACDkB,EACIF,EAAM,SAAW,GACjB,CAACA,EAAM,OACP,CAACA,EAAM,YACP,CAACA,EAAM,cACP,CAACA,EAAM,gBACP,CAACA,EAAM,iBACP,CAACA,EAAM,WACP,CAACA,EAAM,eACP,CAACA,EAAM,kBACN,CAACA,EAAM,UAAaA,EAAM,UAAYC,GACvCP,EAAE,UACFQ,EACIA,GACAF,EAAM,gBAAkB,GACxBA,EAAM,aAAa,SAAW,GAC9BA,EAAM,UAAY,SAG1B,OAAO,UAAY,MAAQ,CAAC,OAAO,SAASN,CAAC,EAC7CA,EAAE,SAAWQ,MAEb,QAAOA,EAEX,OAAOR,EAAE,QACb,CAEA,SAASS,EAAcH,EAAO,CAC1B,IAAIN,EAAIP,EAAU,GAAG,EACrB,OAAIa,GAAS,KACTd,EAAOO,EAAgBC,CAAC,EAAGM,CAAK,EAEhCP,EAAgBC,CAAC,EAAE,gBAAkB,GAGlCA,CACX,CAIA,IAAIU,EAAoBvC,EAAM,iBAAmB,CAAC,EAC9CwC,EAAmB,GAEvB,SAASC,GAAWC,EAAIC,EAAM,CAC1B,IAAIxB,EACAyB,EACAC,GACAC,GAAsBP,EAAiB,OAiC3C,GA/BK3B,EAAY+B,EAAK,gBAAgB,IAClCD,EAAG,iBAAmBC,EAAK,kBAE1B/B,EAAY+B,EAAK,EAAE,IACpBD,EAAG,GAAKC,EAAK,IAEZ/B,EAAY+B,EAAK,EAAE,IACpBD,EAAG,GAAKC,EAAK,IAEZ/B,EAAY+B,EAAK,EAAE,IACpBD,EAAG,GAAKC,EAAK,IAEZ/B,EAAY+B,EAAK,OAAO,IACzBD,EAAG,QAAUC,EAAK,SAEjB/B,EAAY+B,EAAK,IAAI,IACtBD,EAAG,KAAOC,EAAK,MAEd/B,EAAY+B,EAAK,MAAM,IACxBD,EAAG,OAASC,EAAK,QAEhB/B,EAAY+B,EAAK,OAAO,IACzBD,EAAG,QAAUC,EAAK,SAEjB/B,EAAY+B,EAAK,GAAG,IACrBD,EAAG,IAAMd,EAAgBe,CAAI,GAE5B/B,EAAY+B,EAAK,OAAO,IACzBD,EAAG,QAAUC,EAAK,SAGlBG,GAAsB,EACtB,IAAK3B,EAAI,EAAGA,EAAI2B,GAAqB3B,IACjCyB,EAAOL,EAAiBpB,CAAC,EACzB0B,GAAMF,EAAKC,CAAI,EACVhC,EAAYiC,EAAG,IAChBH,EAAGE,CAAI,EAAIC,IAKvB,OAAOH,CACX,CAGA,SAASK,GAAOC,EAAQ,CACpBP,GAAW,KAAMO,CAAM,EACvB,KAAK,GAAK,IAAI,KAAKA,EAAO,IAAM,KAAOA,EAAO,GAAG,QAAQ,EAAI,GAAG,EAC3D,KAAK,QAAQ,IACd,KAAK,GAAK,IAAI,KAAK,GAAG,GAItBR,IAAqB,KACrBA,EAAmB,GACnBxC,EAAM,aAAa,IAAI,EACvBwC,EAAmB,GAE3B,CAEA,SAASS,EAASvC,EAAK,CACnB,OACIA,aAAeqC,IAAWrC,GAAO,MAAQA,EAAI,kBAAoB,IAEzE,CAEA,SAASwC,GAAKC,EAAK,CAEXnD,EAAM,8BAAgC,IACtC,OAAO,QAAY,KACnB,QAAQ,MAER,QAAQ,KAAK,wBAA0BmD,CAAG,CAElD,CAEA,SAASC,GAAUD,EAAKlC,EAAI,CACxB,IAAIoC,EAAY,GAEhB,OAAOhC,EAAO,UAAY,CAItB,GAHIrB,EAAM,oBAAsB,MAC5BA,EAAM,mBAAmB,KAAMmD,CAAG,EAElCE,EAAW,CACX,IAAIC,EAAO,CAAC,EACRC,GACApC,GACAqC,GACAC,GAAS,UAAU,OACvB,IAAKtC,GAAI,EAAGA,GAAIsC,GAAQtC,KAAK,CAEzB,GADAoC,GAAM,GACF,OAAO,UAAUpC,EAAC,GAAM,SAAU,CAClCoC,IAAO;AAAA,GAAQpC,GAAI,KACnB,IAAKqC,MAAO,UAAU,CAAC,EACflD,EAAW,UAAU,CAAC,EAAGkD,EAAG,IAC5BD,IAAOC,GAAM,KAAO,UAAU,CAAC,EAAEA,EAAG,EAAI,MAGhDD,GAAMA,GAAI,MAAM,EAAG,EAAE,CACzB,MACIA,GAAM,UAAUpC,EAAC,EAErBmC,EAAK,KAAKC,EAAG,CACjB,CACAL,GACIC,EACI;AAAA,aACA,MAAM,UAAU,MAAM,KAAKG,CAAI,EAAE,KAAK,EAAE,EACxC;AAAA,EACA,IAAI,MAAM,EAAE,KACpB,EACAD,EAAY,EAChB,CACA,OAAOpC,EAAG,MAAM,KAAM,SAAS,CACnC,EAAGA,CAAE,CACT,CAEA,IAAIyC,GAAe,CAAC,EAEpB,SAASC,GAAgBC,EAAMT,EAAK,CAC5BnD,EAAM,oBAAsB,MAC5BA,EAAM,mBAAmB4D,EAAMT,CAAG,EAEjCO,GAAaE,CAAI,IAClBV,GAAKC,CAAG,EACRO,GAAaE,CAAI,EAAI,GAE7B,CAEA5D,EAAM,4BAA8B,GACpCA,EAAM,mBAAqB,KAE3B,SAAS6D,GAAWzD,EAAO,CACvB,OACK,OAAO,SAAa,KAAeA,aAAiB,UACrD,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,mBAElD,CAEA,SAAS0D,GAAId,EAAQ,CACjB,IAAIJ,EAAMzB,EACV,IAAKA,KAAK6B,EACF1C,EAAW0C,EAAQ7B,CAAC,IACpByB,EAAOI,EAAO7B,CAAC,EACX0C,GAAWjB,CAAI,EACf,KAAKzB,CAAC,EAAIyB,EAEV,KAAK,IAAMzB,CAAC,EAAIyB,GAI5B,KAAK,QAAUI,EAIf,KAAK,+BAAiC,IAAI,QACrC,KAAK,wBAAwB,QAAU,KAAK,cAAc,QACvD,IACA,UAAU,MAClB,CACJ,CAEA,SAASe,GAAaC,EAAcC,EAAa,CAC7C,IAAI/C,EAAMG,EAAO,CAAC,EAAG2C,CAAY,EAC7BpB,EACJ,IAAKA,KAAQqB,EACL3D,EAAW2D,EAAarB,CAAI,IACxBvC,EAAS2D,EAAapB,CAAI,CAAC,GAAKvC,EAAS4D,EAAYrB,CAAI,CAAC,GAC1D1B,EAAI0B,CAAI,EAAI,CAAC,EACbvB,EAAOH,EAAI0B,CAAI,EAAGoB,EAAapB,CAAI,CAAC,EACpCvB,EAAOH,EAAI0B,CAAI,EAAGqB,EAAYrB,CAAI,CAAC,GAC5BqB,EAAYrB,CAAI,GAAK,KAC5B1B,EAAI0B,CAAI,EAAIqB,EAAYrB,CAAI,EAE5B,OAAO1B,EAAI0B,CAAI,GAI3B,IAAKA,KAAQoB,EAEL1D,EAAW0D,EAAcpB,CAAI,GAC7B,CAACtC,EAAW2D,EAAarB,CAAI,GAC7BvC,EAAS2D,EAAapB,CAAI,CAAC,IAG3B1B,EAAI0B,CAAI,EAAIvB,EAAO,CAAC,EAAGH,EAAI0B,CAAI,CAAC,GAGxC,OAAO1B,CACX,CAEA,SAASgD,GAAOlB,EAAQ,CAChBA,GAAU,MACV,KAAK,IAAIA,CAAM,CAEvB,CAEA,IAAImB,GAEA,OAAO,KACPA,GAAO,OAAO,KAEdA,GAAO,SAAUzD,EAAK,CAClB,IAAIS,EACAD,EAAM,CAAC,EACX,IAAKC,KAAKT,EACFJ,EAAWI,EAAKS,CAAC,GACjBD,EAAI,KAAKC,CAAC,EAGlB,OAAOD,CACX,EAGJ,IAAIkD,GAAkB,CAClB,QAAS,gBACT,QAAS,mBACT,SAAU,eACV,QAAS,oBACT,SAAU,sBACV,SAAU,GACd,EAEA,SAASC,GAASb,EAAKc,EAAKC,EAAK,CAC7B,IAAIC,EAAS,KAAK,UAAUhB,CAAG,GAAK,KAAK,UAAU,SACnD,OAAOK,GAAWW,CAAM,EAAIA,EAAO,KAAKF,EAAKC,CAAG,EAAIC,CACxD,CAEA,SAASC,GAASC,EAAQC,EAAcC,EAAW,CAC/C,IAAIC,EAAY,GAAK,KAAK,IAAIH,CAAM,EAChCI,GAAcH,EAAeE,EAAU,OACvCE,GAAOL,GAAU,EACrB,OACKK,GAAQH,EAAY,IAAM,GAAM,KACjC,KAAK,IAAI,GAAI,KAAK,IAAI,EAAGE,EAAW,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAC1DD,CAER,CAEA,IAAIG,GACI,yMACJC,GAAwB,6CACxBC,GAAkB,CAAC,EACnBC,GAAuB,CAAC,EAM5B,SAASC,GAAeC,EAAOC,EAAQC,EAASrF,EAAU,CACtD,IAAIsF,GAAOtF,EACP,OAAOA,GAAa,WACpBsF,GAAO,UAAY,CACf,OAAO,KAAKtF,CAAQ,EAAE,CAC1B,GAEAmF,IACAF,GAAqBE,CAAK,EAAIG,IAE9BF,IACAH,GAAqBG,EAAO,CAAC,CAAC,EAAI,UAAY,CAC1C,OAAOb,GAASe,GAAK,MAAM,KAAM,SAAS,EAAGF,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,CACrE,GAEAC,IACAJ,GAAqBI,CAAO,EAAI,UAAY,CACxC,OAAO,KAAK,WAAW,EAAE,QACrBC,GAAK,MAAM,KAAM,SAAS,EAC1BH,CACJ,CACJ,EAER,CAEA,SAASI,GAAuBrF,EAAO,CACnC,OAAIA,EAAM,MAAM,UAAU,EACfA,EAAM,QAAQ,WAAY,EAAE,EAEhCA,EAAM,QAAQ,MAAO,EAAE,CAClC,CAEA,SAASsF,GAAmBnE,EAAQ,CAChC,IAAIoE,EAAQpE,EAAO,MAAMyD,EAAgB,EACrC7D,EACAyE,EAEJ,IAAKzE,EAAI,EAAGyE,EAASD,EAAM,OAAQxE,EAAIyE,EAAQzE,IACvCgE,GAAqBQ,EAAMxE,CAAC,CAAC,EAC7BwE,EAAMxE,CAAC,EAAIgE,GAAqBQ,EAAMxE,CAAC,CAAC,EAExCwE,EAAMxE,CAAC,EAAIsE,GAAuBE,EAAMxE,CAAC,CAAC,EAIlD,OAAO,SAAUmD,GAAK,CAClB,IAAIE,GAAS,GACTrD,GACJ,IAAKA,GAAI,EAAGA,GAAIyE,EAAQzE,KACpBqD,IAAUX,GAAW8B,EAAMxE,EAAC,CAAC,EACvBwE,EAAMxE,EAAC,EAAE,KAAKmD,GAAK/C,CAAM,EACzBoE,EAAMxE,EAAC,EAEjB,OAAOqD,EACX,CACJ,CAGA,SAASqB,GAAahE,EAAGN,EAAQ,CAC7B,OAAKM,EAAE,QAAQ,GAIfN,EAASuE,GAAavE,EAAQM,EAAE,WAAW,CAAC,EAC5CqD,GAAgB3D,CAAM,EAClB2D,GAAgB3D,CAAM,GAAKmE,GAAmBnE,CAAM,EAEjD2D,GAAgB3D,CAAM,EAAEM,CAAC,GAPrBA,EAAE,WAAW,EAAE,YAAY,CAQ1C,CAEA,SAASiE,GAAavE,EAAQC,EAAQ,CAClC,IAAIL,EAAI,EAER,SAAS4E,EAA4B3F,GAAO,CACxC,OAAOoB,EAAO,eAAepB,EAAK,GAAKA,EAC3C,CAGA,IADA6E,GAAsB,UAAY,EAC3B9D,GAAK,GAAK8D,GAAsB,KAAK1D,CAAM,GAC9CA,EAASA,EAAO,QACZ0D,GACAc,CACJ,EACAd,GAAsB,UAAY,EAClC9D,GAAK,EAGT,OAAOI,CACX,CAEA,IAAIyE,GAAwB,CACxB,IAAK,YACL,GAAI,SACJ,EAAG,aACH,GAAI,eACJ,IAAK,sBACL,KAAM,2BACV,EAEA,SAASC,GAAezC,EAAK,CACzB,IAAIjC,EAAS,KAAK,gBAAgBiC,CAAG,EACjC0C,EAAc,KAAK,gBAAgB1C,EAAI,YAAY,CAAC,EAExD,OAAIjC,GAAU,CAAC2E,EACJ3E,GAGX,KAAK,gBAAgBiC,CAAG,EAAI0C,EACvB,MAAMlB,EAAgB,EACtB,IAAI,SAAUmB,EAAK,CAChB,OACIA,IAAQ,QACRA,IAAQ,MACRA,IAAQ,MACRA,IAAQ,OAEDA,EAAI,MAAM,CAAC,EAEfA,CACX,CAAC,EACA,KAAK,EAAE,EAEL,KAAK,gBAAgB3C,CAAG,EACnC,CAEA,IAAI4C,GAAqB,eAEzB,SAASC,IAAc,CACnB,OAAO,KAAK,YAChB,CAEA,IAAIC,GAAiB,KACjBC,GAAgC,UAEpC,SAAShB,GAAQb,EAAQ,CACrB,OAAO,KAAK,SAAS,QAAQ,KAAMA,CAAM,CAC7C,CAEA,IAAI8B,GAAsB,CACtB,OAAQ,QACR,KAAM,SACN,EAAG,gBACH,GAAI,aACJ,EAAG,WACH,GAAI,aACJ,EAAG,UACH,GAAI,WACJ,EAAG,QACH,GAAI,UACJ,EAAG,SACH,GAAI,WACJ,EAAG,UACH,GAAI,YACJ,EAAG,SACH,GAAI,UACR,EAEA,SAASC,GAAa/B,EAAQgC,EAAeC,EAAQC,EAAU,CAC3D,IAAIpC,GAAS,KAAK,cAAcmC,CAAM,EACtC,OAAO9C,GAAWW,EAAM,EAClBA,GAAOE,EAAQgC,EAAeC,EAAQC,CAAQ,EAC9CpC,GAAO,QAAQ,MAAOE,CAAM,CACtC,CAEA,SAASmC,GAAWC,EAAMtC,EAAQ,CAC9B,IAAIjD,EAAS,KAAK,cAAcuF,EAAO,EAAI,SAAW,MAAM,EAC5D,OAAOjD,GAAWtC,CAAM,EAAIA,EAAOiD,CAAM,EAAIjD,EAAO,QAAQ,MAAOiD,CAAM,CAC7E,CAEA,IAAIuC,GAAU,CACV,EAAG,OACH,MAAO,OACP,KAAM,OACN,EAAG,MACH,KAAM,MACN,IAAK,MACL,EAAG,UACH,SAAU,UACV,QAAS,UACT,EAAG,aACH,YAAa,aACb,WAAY,aACZ,IAAK,YACL,WAAY,YACZ,UAAW,YACX,EAAG,OACH,MAAO,OACP,KAAM,OACN,GAAI,cACJ,aAAc,cACd,YAAa,cACb,EAAG,SACH,QAAS,SACT,OAAQ,SACR,EAAG,QACH,OAAQ,QACR,MAAO,QACP,EAAG,UACH,SAAU,UACV,QAAS,UACT,EAAG,SACH,QAAS,SACT,OAAQ,SACR,GAAI,WACJ,UAAW,WACX,SAAU,WACV,GAAI,cACJ,aAAc,cACd,YAAa,cACb,EAAG,OACH,MAAO,OACP,KAAM,OACN,EAAG,UACH,SAAU,UACV,QAAS,UACT,EAAG,OACH,MAAO,OACP,KAAM,MACV,EAEA,SAASC,GAAeC,EAAO,CAC3B,OAAO,OAAOA,GAAU,SAClBF,GAAQE,CAAK,GAAKF,GAAQE,EAAM,YAAY,CAAC,EAC7C,MACV,CAEA,SAASC,GAAqBC,EAAa,CACvC,IAAIC,EAAkB,CAAC,EACnBC,EACAzE,EAEJ,IAAKA,KAAQuE,EACL7G,EAAW6G,EAAavE,CAAI,IAC5ByE,EAAiBL,GAAepE,CAAI,EAChCyE,IACAD,EAAgBC,CAAc,EAAIF,EAAYvE,CAAI,IAK9D,OAAOwE,CACX,CAEA,IAAIE,GAAa,CACb,KAAM,EACN,IAAK,GACL,QAAS,GACT,WAAY,GACZ,UAAW,EACX,KAAM,GACN,YAAa,GACb,OAAQ,GACR,MAAO,EACP,QAAS,EACT,OAAQ,GACR,SAAU,EACV,YAAa,EACb,KAAM,EACN,QAAS,EACT,KAAM,CACV,EAEA,SAASC,GAAoBC,EAAU,CACnC,IAAIP,EAAQ,CAAC,EACTQ,EACJ,IAAKA,KAAKD,EACFlH,EAAWkH,EAAUC,CAAC,GACtBR,EAAM,KAAK,CAAE,KAAMQ,EAAG,SAAUH,GAAWG,CAAC,CAAE,CAAC,EAGvD,OAAAR,EAAM,KAAK,SAAU1G,EAAGC,GAAG,CACvB,OAAOD,EAAE,SAAWC,GAAE,QAC1B,CAAC,EACMyG,CACX,CAEA,IAAIS,GAAS,KACTC,GAAS,OACTC,GAAS,QACTC,GAAS,QACTC,GAAS,aACTC,GAAY,QACZC,GAAY,YACZC,GAAY,gBACZC,GAAY,UACZC,GAAY,UACZC,GAAY,eACZC,GAAgB,MAChBC,GAAc,WACdC,GAAc,qBACdC,GAAmB,0BACnBC,GAAiB,uBAGjBC,GACI,wJACJC,GAAyB,YACzBC,GAAmB,gBACnBC,GAEJA,GAAU,CAAC,EAEX,SAASC,GAAczD,EAAO0D,EAAOC,EAAa,CAC9CH,GAAQxD,CAAK,EAAIxB,GAAWkF,CAAK,EAC3BA,EACA,SAAUE,EAAUC,GAAY,CAC5B,OAAOD,GAAYD,EAAcA,EAAcD,CACnD,CACV,CAEA,SAASI,GAAsB9D,EAAOrC,EAAQ,CAC1C,OAAK1C,EAAWuI,GAASxD,CAAK,EAIvBwD,GAAQxD,CAAK,EAAErC,EAAO,QAASA,EAAO,OAAO,EAHzC,IAAI,OAAOoG,GAAe/D,CAAK,CAAC,CAI/C,CAGA,SAAS+D,GAAeC,EAAG,CACvB,OAAOC,GACHD,EACK,QAAQ,KAAM,EAAE,EAChB,QACG,sCACA,SAAUE,EAASC,EAAIC,EAAIC,GAAIC,GAAI,CAC/B,OAAOH,GAAMC,GAAMC,IAAMC,EAC7B,CACJ,CACR,CACJ,CAEA,SAASL,GAAYD,EAAG,CACpB,OAAOA,EAAE,QAAQ,yBAA0B,MAAM,CACrD,CAEA,SAASO,GAASlF,EAAQ,CACtB,OAAIA,EAAS,EAEF,KAAK,KAAKA,CAAM,GAAK,EAErB,KAAK,MAAMA,CAAM,CAEhC,CAEA,SAASmF,GAAMC,EAAqB,CAChC,IAAIC,EAAgB,CAACD,EACjBE,EAAQ,EAEZ,OAAID,IAAkB,GAAK,SAASA,CAAa,IAC7CC,EAAQJ,GAASG,CAAa,GAG3BC,CACX,CAEA,IAAIC,GAAS,CAAC,EAEd,SAASC,GAAc7E,EAAOnF,EAAU,CACpC,IAAIiB,EACAqE,EAAOtF,EACPiK,GAUJ,IATI,OAAO9E,GAAU,WACjBA,EAAQ,CAACA,CAAK,GAEdxE,EAASX,CAAQ,IACjBsF,EAAO,SAAUpF,GAAOuF,GAAO,CAC3BA,GAAMzF,CAAQ,EAAI2J,GAAMzJ,EAAK,CACjC,GAEJ+J,GAAW9E,EAAM,OACZlE,EAAI,EAAGA,EAAIgJ,GAAUhJ,IACtB8I,GAAO5E,EAAMlE,CAAC,CAAC,EAAIqE,CAE3B,CAEA,SAAS4E,GAAkB/E,EAAOnF,EAAU,CACxCgK,GAAc7E,EAAO,SAAUjF,EAAOuF,EAAO3C,GAAQqC,GAAO,CACxDrC,GAAO,GAAKA,GAAO,IAAM,CAAC,EAC1B9C,EAASE,EAAO4C,GAAO,GAAIA,GAAQqC,EAAK,CAC5C,CAAC,CACL,CAEA,SAASgF,GAAwBhF,EAAOjF,EAAO4C,EAAQ,CAC/C5C,GAAS,MAAQE,EAAW2J,GAAQ5E,CAAK,GACzC4E,GAAO5E,CAAK,EAAEjF,EAAO4C,EAAO,GAAIA,EAAQqC,CAAK,CAErD,CAEA,SAASiF,GAAWC,EAAM,CACtB,OAAQA,EAAO,IAAM,GAAKA,EAAO,MAAQ,GAAMA,EAAO,MAAQ,CAClE,CAEA,IAAIC,GAAO,EACPC,GAAQ,EACRC,GAAO,EACPC,GAAO,EACPC,GAAS,EACTC,GAAS,EACTC,GAAc,EACdC,GAAO,EACPC,GAAU,EAId5F,GAAe,IAAK,EAAG,EAAG,UAAY,CAClC,IAAI6F,EAAI,KAAK,KAAK,EAClB,OAAOA,GAAK,KAAOxG,GAASwG,EAAG,CAAC,EAAI,IAAMA,CAC9C,CAAC,EAED7F,GAAe,EAAG,CAAC,KAAM,CAAC,EAAG,EAAG,UAAY,CACxC,OAAO,KAAK,KAAK,EAAI,GACzB,CAAC,EAEDA,GAAe,EAAG,CAAC,OAAQ,CAAC,EAAG,EAAG,MAAM,EACxCA,GAAe,EAAG,CAAC,QAAS,CAAC,EAAG,EAAG,MAAM,EACzCA,GAAe,EAAG,CAAC,SAAU,EAAG,EAAI,EAAG,EAAG,MAAM,EAIhD0D,GAAc,IAAKR,EAAW,EAC9BQ,GAAc,KAAMf,GAAWJ,EAAM,EACrCmB,GAAc,OAAQX,GAAWN,EAAM,EACvCiB,GAAc,QAASV,GAAWN,EAAM,EACxCgB,GAAc,SAAUV,GAAWN,EAAM,EAEzCoC,GAAc,CAAC,QAAS,QAAQ,EAAGM,EAAI,EACvCN,GAAc,OAAQ,SAAU9J,EAAOuF,EAAO,CAC1CA,EAAM6E,EAAI,EACNpK,EAAM,SAAW,EAAIJ,EAAM,kBAAkBI,CAAK,EAAIyJ,GAAMzJ,CAAK,CACzE,CAAC,EACD8J,GAAc,KAAM,SAAU9J,EAAOuF,EAAO,CACxCA,EAAM6E,EAAI,EAAIxK,EAAM,kBAAkBI,CAAK,CAC/C,CAAC,EACD8J,GAAc,IAAK,SAAU9J,EAAOuF,EAAO,CACvCA,EAAM6E,EAAI,EAAI,SAASpK,EAAO,EAAE,CACpC,CAAC,EAID,SAAS8K,GAAWX,EAAM,CACtB,OAAOD,GAAWC,CAAI,EAAI,IAAM,GACpC,CAIAvK,EAAM,kBAAoB,SAAUI,EAAO,CACvC,OAAOyJ,GAAMzJ,CAAK,GAAKyJ,GAAMzJ,CAAK,EAAI,GAAK,KAAO,IACtD,EAIA,IAAI+K,GAAaC,GAAW,WAAY,EAAI,EAE5C,SAASC,IAAgB,CACrB,OAAOf,GAAW,KAAK,KAAK,CAAC,CACjC,CAEA,SAASc,GAAWE,EAAMC,EAAU,CAChC,OAAO,SAAUvB,EAAO,CACpB,OAAIA,GAAS,MACTwB,GAAM,KAAMF,EAAMtB,CAAK,EACvBhK,EAAM,aAAa,KAAMuL,CAAQ,EAC1B,MAEAE,GAAI,KAAMH,CAAI,CAE7B,CACJ,CAEA,SAASG,GAAInH,EAAKgH,EAAM,CACpB,GAAI,CAAChH,EAAI,QAAQ,EACb,MAAO,KAGX,IAAIoH,EAAIpH,EAAI,GACRqH,EAAQrH,EAAI,OAEhB,OAAQgH,EAAM,CACV,IAAK,eACD,OAAOK,EAAQD,EAAE,mBAAmB,EAAIA,EAAE,gBAAgB,EAC9D,IAAK,UACD,OAAOC,EAAQD,EAAE,cAAc,EAAIA,EAAE,WAAW,EACpD,IAAK,UACD,OAAOC,EAAQD,EAAE,cAAc,EAAIA,EAAE,WAAW,EACpD,IAAK,QACD,OAAOC,EAAQD,EAAE,YAAY,EAAIA,EAAE,SAAS,EAChD,IAAK,OACD,OAAOC,EAAQD,EAAE,WAAW,EAAIA,EAAE,QAAQ,EAC9C,IAAK,MACD,OAAOC,EAAQD,EAAE,UAAU,EAAIA,EAAE,OAAO,EAC5C,IAAK,QACD,OAAOC,EAAQD,EAAE,YAAY,EAAIA,EAAE,SAAS,EAChD,IAAK,WACD,OAAOC,EAAQD,EAAE,eAAe,EAAIA,EAAE,YAAY,EACtD,QACI,MAAO,IACf,CACJ,CAEA,SAASF,GAAMlH,EAAKgH,EAAMtB,EAAO,CAC7B,IAAI0B,EAAGC,GAAOpB,GAAMqB,GAAOC,GAE3B,GAAI,GAACvH,EAAI,QAAQ,GAAK,MAAM0F,CAAK,GAOjC,QAHA0B,EAAIpH,EAAI,GACRqH,GAAQrH,EAAI,OAEJgH,EAAM,CACV,IAAK,eACD,OAAO,KAAMK,GACPD,EAAE,mBAAmB1B,CAAK,EAC1B0B,EAAE,gBAAgB1B,CAAK,GACjC,IAAK,UACD,OAAO,KAAM2B,GAAQD,EAAE,cAAc1B,CAAK,EAAI0B,EAAE,WAAW1B,CAAK,GACpE,IAAK,UACD,OAAO,KAAM2B,GAAQD,EAAE,cAAc1B,CAAK,EAAI0B,EAAE,WAAW1B,CAAK,GACpE,IAAK,QACD,OAAO,KAAM2B,GAAQD,EAAE,YAAY1B,CAAK,EAAI0B,EAAE,SAAS1B,CAAK,GAChE,IAAK,OACD,OAAO,KAAM2B,GAAQD,EAAE,WAAW1B,CAAK,EAAI0B,EAAE,QAAQ1B,CAAK,GAK9D,IAAK,WACD,MACJ,QACI,MACR,CAEAO,GAAOP,EACP4B,GAAQtH,EAAI,MAAM,EAClBuH,GAAOvH,EAAI,KAAK,EAChBuH,GAAOA,KAAS,IAAMD,KAAU,GAAK,CAACtB,GAAWC,EAAI,EAAI,GAAKsB,GACxDF,GACAD,EAAE,eAAenB,GAAMqB,GAAOC,EAAI,EAClCH,EAAE,YAAYnB,GAAMqB,GAAOC,EAAI,EACzC,CAIA,SAASC,GAAU7E,EAAO,CAEtB,OADAA,EAAQD,GAAeC,CAAK,EACxBpD,GAAW,KAAKoD,CAAK,CAAC,EACf,KAAKA,CAAK,EAAE,EAEhB,IACX,CAEA,SAAS8E,GAAU9E,EAAO+C,EAAO,CAC7B,GAAI,OAAO/C,GAAU,SAAU,CAC3BA,EAAQC,GAAqBD,CAAK,EAClC,IAAI+E,EAAczE,GAAoBN,CAAK,EACvC9F,EACA8K,GAAiBD,EAAY,OACjC,IAAK7K,EAAI,EAAGA,EAAI8K,GAAgB9K,IAC5B,KAAK6K,EAAY7K,CAAC,EAAE,IAAI,EAAE8F,EAAM+E,EAAY7K,CAAC,EAAE,IAAI,CAAC,CAE5D,SACI8F,EAAQD,GAAeC,CAAK,EACxBpD,GAAW,KAAKoD,CAAK,CAAC,EACtB,OAAO,KAAKA,CAAK,EAAE+C,CAAK,EAGhC,OAAO,IACX,CAEA,SAASkC,GAAIC,EAAGC,EAAG,CACf,OAASD,EAAIC,EAAKA,GAAKA,CAC3B,CAEA,IAAIC,GAEA,MAAM,UAAU,QAChBA,GAAU,MAAM,UAAU,QAE1BA,GAAU,SAAUC,EAAG,CAEnB,IAAInL,EACJ,IAAKA,EAAI,EAAGA,EAAI,KAAK,OAAQ,EAAEA,EAC3B,GAAI,KAAKA,CAAC,IAAMmL,EACZ,OAAOnL,EAGf,MAAO,EACX,EAGJ,SAASoL,GAAYhC,EAAMqB,EAAO,CAC9B,GAAI,MAAMrB,CAAI,GAAK,MAAMqB,CAAK,EAC1B,MAAO,KAEX,IAAIY,EAAWN,GAAIN,EAAO,EAAE,EAC5B,OAAArB,IAASqB,EAAQY,GAAY,GACtBA,IAAa,EACdlC,GAAWC,CAAI,EACX,GACA,GACJ,GAAOiC,EAAW,EAAK,CACjC,CAIApH,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,KAAM,UAAY,CAC7C,OAAO,KAAK,MAAM,EAAI,CAC1B,CAAC,EAEDA,GAAe,MAAO,EAAG,EAAG,SAAU7D,EAAQ,CAC1C,OAAO,KAAK,WAAW,EAAE,YAAY,KAAMA,CAAM,CACrD,CAAC,EAED6D,GAAe,OAAQ,EAAG,EAAG,SAAU7D,EAAQ,CAC3C,OAAO,KAAK,WAAW,EAAE,OAAO,KAAMA,CAAM,CAChD,CAAC,EAIDuH,GAAc,IAAKf,GAAWY,EAAsB,EACpDG,GAAc,KAAMf,GAAWJ,EAAM,EACrCmB,GAAc,MAAO,SAAUG,EAAUzH,EAAQ,CAC7C,OAAOA,EAAO,iBAAiByH,CAAQ,CAC3C,CAAC,EACDH,GAAc,OAAQ,SAAUG,EAAUzH,EAAQ,CAC9C,OAAOA,EAAO,YAAYyH,CAAQ,CACtC,CAAC,EAEDiB,GAAc,CAAC,IAAK,IAAI,EAAG,SAAU9J,EAAOuF,EAAO,CAC/CA,EAAM8E,EAAK,EAAIZ,GAAMzJ,CAAK,EAAI,CAClC,CAAC,EAED8J,GAAc,CAAC,MAAO,MAAM,EAAG,SAAU9J,EAAOuF,EAAO3C,EAAQqC,EAAO,CAClE,IAAIuG,GAAQ5I,EAAO,QAAQ,YAAY5C,EAAOiF,EAAOrC,EAAO,OAAO,EAE/D4I,IAAS,KACTjG,EAAM8E,EAAK,EAAImB,GAEfhK,EAAgBoB,CAAM,EAAE,aAAe5C,CAE/C,CAAC,EAID,IAAIqM,GACI,wFAAwF,MACpF,GACJ,EACJC,GACI,kDAAkD,MAAM,GAAG,EAC/DC,GAAmB,gCACnBC,GAA0BlE,GAC1BmE,GAAqBnE,GAEzB,SAASoE,GAAajL,EAAGN,EAAQ,CAC7B,OAAKM,EAKE1B,EAAQ,KAAK,OAAO,EACrB,KAAK,QAAQ0B,EAAE,MAAM,CAAC,EACtB,KAAK,SACA,KAAK,QAAQ,UAAY8K,IAAkB,KAAKpL,CAAM,EACjD,SACA,YACV,EAAEM,EAAE,MAAM,CAAC,EAVN1B,EAAQ,KAAK,OAAO,EACrB,KAAK,QACL,KAAK,QAAQ,UAS3B,CAEA,SAAS4M,GAAkBlL,EAAGN,EAAQ,CAClC,OAAKM,EAKE1B,EAAQ,KAAK,YAAY,EAC1B,KAAK,aAAa0B,EAAE,MAAM,CAAC,EAC3B,KAAK,aACD8K,GAAiB,KAAKpL,CAAM,EAAI,SAAW,YAC/C,EAAEM,EAAE,MAAM,CAAC,EARN1B,EAAQ,KAAK,YAAY,EAC1B,KAAK,aACL,KAAK,aAAa,UAOhC,CAEA,SAAS6M,GAAkBC,EAAW1L,EAAQE,EAAQ,CAClD,IAAIN,EACA+L,GACA5I,GACA6I,GAAMF,EAAU,kBAAkB,EACtC,GAAI,CAAC,KAAK,aAKN,IAHA,KAAK,aAAe,CAAC,EACrB,KAAK,iBAAmB,CAAC,EACzB,KAAK,kBAAoB,CAAC,EACrB9L,EAAI,EAAGA,EAAI,GAAI,EAAEA,EAClBmD,GAAMhD,EAAU,CAAC,IAAMH,CAAC,CAAC,EACzB,KAAK,kBAAkBA,CAAC,EAAI,KAAK,YAC7BmD,GACA,EACJ,EAAE,kBAAkB,EACpB,KAAK,iBAAiBnD,CAAC,EAAI,KAAK,OAAOmD,GAAK,EAAE,EAAE,kBAAkB,EAI1E,OAAI7C,EACIF,IAAW,OACX2L,GAAKb,GAAQ,KAAK,KAAK,kBAAmBc,EAAG,EACtCD,KAAO,GAAKA,GAAK,OAExBA,GAAKb,GAAQ,KAAK,KAAK,iBAAkBc,EAAG,EACrCD,KAAO,GAAKA,GAAK,MAGxB3L,IAAW,OACX2L,GAAKb,GAAQ,KAAK,KAAK,kBAAmBc,EAAG,EACzCD,KAAO,GACAA,IAEXA,GAAKb,GAAQ,KAAK,KAAK,iBAAkBc,EAAG,EACrCD,KAAO,GAAKA,GAAK,QAExBA,GAAKb,GAAQ,KAAK,KAAK,iBAAkBc,EAAG,EACxCD,KAAO,GACAA,IAEXA,GAAKb,GAAQ,KAAK,KAAK,kBAAmBc,EAAG,EACtCD,KAAO,GAAKA,GAAK,MAGpC,CAEA,SAASE,GAAkBH,EAAW1L,EAAQE,EAAQ,CAClD,IAAIN,EAAGmD,GAAKyE,GAEZ,GAAI,KAAK,kBACL,OAAOiE,GAAkB,KAAK,KAAMC,EAAW1L,EAAQE,CAAM,EAYjE,IATK,KAAK,eACN,KAAK,aAAe,CAAC,EACrB,KAAK,iBAAmB,CAAC,EACzB,KAAK,kBAAoB,CAAC,GAMzBN,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAmBrB,GAjBAmD,GAAMhD,EAAU,CAAC,IAAMH,CAAC,CAAC,EACrBM,GAAU,CAAC,KAAK,iBAAiBN,CAAC,IAClC,KAAK,iBAAiBA,CAAC,EAAI,IAAI,OAC3B,IAAM,KAAK,OAAOmD,GAAK,EAAE,EAAE,QAAQ,IAAK,EAAE,EAAI,IAC9C,GACJ,EACA,KAAK,kBAAkBnD,CAAC,EAAI,IAAI,OAC5B,IAAM,KAAK,YAAYmD,GAAK,EAAE,EAAE,QAAQ,IAAK,EAAE,EAAI,IACnD,GACJ,GAEA,CAAC7C,GAAU,CAAC,KAAK,aAAaN,CAAC,IAC/B4H,GACI,IAAM,KAAK,OAAOzE,GAAK,EAAE,EAAI,KAAO,KAAK,YAAYA,GAAK,EAAE,EAChE,KAAK,aAAanD,CAAC,EAAI,IAAI,OAAO4H,GAAM,QAAQ,IAAK,EAAE,EAAG,GAAG,GAI7DtH,GACAF,IAAW,QACX,KAAK,iBAAiBJ,CAAC,EAAE,KAAK8L,CAAS,EAEvC,OAAO9L,EACJ,GACHM,GACAF,IAAW,OACX,KAAK,kBAAkBJ,CAAC,EAAE,KAAK8L,CAAS,EAExC,OAAO9L,EACJ,GAAI,CAACM,GAAU,KAAK,aAAaN,CAAC,EAAE,KAAK8L,CAAS,EACrD,OAAO9L,CAEf,CACJ,CAIA,SAASkM,GAAS/I,EAAK0F,EAAO,CAC1B,GAAI,CAAC1F,EAAI,QAAQ,EAEb,OAAOA,EAGX,GAAI,OAAO0F,GAAU,UACjB,GAAI,QAAQ,KAAKA,CAAK,EAClBA,EAAQH,GAAMG,CAAK,UAEnBA,EAAQ1F,EAAI,WAAW,EAAE,YAAY0F,CAAK,EAEtC,CAACnJ,EAASmJ,CAAK,EACf,OAAO1F,EAKnB,IAAIsH,EAAQ5B,EACR6B,EAAOvH,EAAI,KAAK,EAEpB,OAAAuH,EAAOA,EAAO,GAAKA,EAAO,KAAK,IAAIA,EAAMU,GAAYjI,EAAI,KAAK,EAAGsH,CAAK,CAAC,EACjEtH,EAAI,OACJA,EAAI,GAAG,YAAYsH,EAAOC,CAAI,EAC9BvH,EAAI,GAAG,SAASsH,EAAOC,CAAI,EAC1BvH,CACX,CAEA,SAASgJ,GAAYtD,EAAO,CACxB,OAAIA,GAAS,MACTqD,GAAS,KAAMrD,CAAK,EACpBhK,EAAM,aAAa,KAAM,EAAI,EACtB,MAEAyL,GAAI,KAAM,OAAO,CAEhC,CAEA,SAAS8B,IAAiB,CACtB,OAAOhB,GAAY,KAAK,KAAK,EAAG,KAAK,MAAM,CAAC,CAChD,CAEA,SAASiB,GAAiBvE,EAAU,CAChC,OAAI,KAAK,mBACA3I,EAAW,KAAM,cAAc,GAChCmN,GAAmB,KAAK,IAAI,EAE5BxE,EACO,KAAK,wBAEL,KAAK,oBAGX3I,EAAW,KAAM,mBAAmB,IACrC,KAAK,kBAAoBsM,IAEtB,KAAK,yBAA2B3D,EACjC,KAAK,wBACL,KAAK,kBAEnB,CAEA,SAASyE,GAAYzE,EAAU,CAC3B,OAAI,KAAK,mBACA3I,EAAW,KAAM,cAAc,GAChCmN,GAAmB,KAAK,IAAI,EAE5BxE,EACO,KAAK,mBAEL,KAAK,eAGX3I,EAAW,KAAM,cAAc,IAChC,KAAK,aAAeuM,IAEjB,KAAK,oBAAsB5D,EAC5B,KAAK,mBACL,KAAK,aAEnB,CAEA,SAASwE,IAAqB,CAC1B,SAASE,EAAUpN,GAAGC,GAAG,CACrB,OAAOA,GAAE,OAASD,GAAE,MACxB,CAEA,IAAIqN,EAAc,CAAC,EACfC,EAAa,CAAC,EACdC,EAAc,CAAC,EACf3M,GACAmD,GACAyJ,GACAC,GACJ,IAAK7M,GAAI,EAAGA,GAAI,GAAIA,KAEhBmD,GAAMhD,EAAU,CAAC,IAAMH,EAAC,CAAC,EACzB4M,GAASzE,GAAY,KAAK,YAAYhF,GAAK,EAAE,CAAC,EAC9C0J,GAAQ1E,GAAY,KAAK,OAAOhF,GAAK,EAAE,CAAC,EACxCsJ,EAAY,KAAKG,EAAM,EACvBF,EAAW,KAAKG,EAAK,EACrBF,EAAY,KAAKE,EAAK,EACtBF,EAAY,KAAKC,EAAM,EAI3BH,EAAY,KAAKD,CAAS,EAC1BE,EAAW,KAAKF,CAAS,EACzBG,EAAY,KAAKH,CAAS,EAE1B,KAAK,aAAe,IAAI,OAAO,KAAOG,EAAY,KAAK,GAAG,EAAI,IAAK,GAAG,EACtE,KAAK,kBAAoB,KAAK,aAC9B,KAAK,mBAAqB,IAAI,OAC1B,KAAOD,EAAW,KAAK,GAAG,EAAI,IAC9B,GACJ,EACA,KAAK,wBAA0B,IAAI,OAC/B,KAAOD,EAAY,KAAK,GAAG,EAAI,IAC/B,GACJ,CACJ,CAEA,SAASK,GAAWhD,EAAGpJ,EAAG6J,EAAGwC,EAAGC,GAAG9E,GAAG+E,GAAI,CAGtC,IAAIvC,GAEJ,OAAIZ,EAAI,KAAOA,GAAK,GAEhBY,GAAO,IAAI,KAAKZ,EAAI,IAAKpJ,EAAG6J,EAAGwC,EAAGC,GAAG9E,GAAG+E,EAAE,EACtC,SAASvC,GAAK,YAAY,CAAC,GAC3BA,GAAK,YAAYZ,CAAC,GAGtBY,GAAO,IAAI,KAAKZ,EAAGpJ,EAAG6J,EAAGwC,EAAGC,GAAG9E,GAAG+E,EAAE,EAGjCvC,EACX,CAEA,SAASwC,GAAcpD,EAAG,CACtB,IAAIY,EAAMvI,EAEV,OAAI2H,EAAI,KAAOA,GAAK,GAChB3H,EAAO,MAAM,UAAU,MAAM,KAAK,SAAS,EAE3CA,EAAK,CAAC,EAAI2H,EAAI,IACdY,EAAO,IAAI,KAAK,KAAK,IAAI,MAAM,KAAMvI,CAAI,CAAC,EACtC,SAASuI,EAAK,eAAe,CAAC,GAC9BA,EAAK,eAAeZ,CAAC,GAGzBY,EAAO,IAAI,KAAK,KAAK,IAAI,MAAM,KAAM,SAAS,CAAC,EAG5CA,CACX,CAGA,SAASyC,GAAgB/D,EAAMgE,EAAKC,EAAK,CACrC,IACIC,EAAM,EAAIF,EAAMC,EAEhBE,IAAS,EAAIL,GAAc9D,EAAM,EAAGkE,CAAG,EAAE,UAAU,EAAIF,GAAO,EAElE,MAAO,CAACG,GAAQD,EAAM,CAC1B,CAGA,SAASE,GAAmBpE,EAAMqE,EAAMC,EAASN,EAAKC,GAAK,CACvD,IAAIM,IAAgB,EAAID,EAAUN,GAAO,EACrCQ,GAAaT,GAAgB/D,EAAMgE,EAAKC,EAAG,EAC3CQ,GAAY,EAAI,GAAKJ,EAAO,GAAKE,GAAeC,GAChDE,GACAC,GAEJ,OAAIF,IAAa,GACbC,GAAU1E,EAAO,EACjB2E,GAAehE,GAAW+D,EAAO,EAAID,IAC9BA,GAAY9D,GAAWX,CAAI,GAClC0E,GAAU1E,EAAO,EACjB2E,GAAeF,GAAY9D,GAAWX,CAAI,IAE1C0E,GAAU1E,EACV2E,GAAeF,IAGZ,CACH,KAAMC,GACN,UAAWC,EACf,CACJ,CAEA,SAASC,GAAW7K,EAAKiK,EAAKC,EAAK,CAC/B,IAAIO,EAAaT,GAAgBhK,EAAI,KAAK,EAAGiK,EAAKC,CAAG,EACjDI,GAAO,KAAK,OAAOtK,EAAI,UAAU,EAAIyK,EAAa,GAAK,CAAC,EAAI,EAC5DK,GACAH,GAEJ,OAAIL,GAAO,GACPK,GAAU3K,EAAI,KAAK,EAAI,EACvB8K,GAAUR,GAAOS,GAAYJ,GAASV,EAAKC,CAAG,GACvCI,GAAOS,GAAY/K,EAAI,KAAK,EAAGiK,EAAKC,CAAG,GAC9CY,GAAUR,GAAOS,GAAY/K,EAAI,KAAK,EAAGiK,EAAKC,CAAG,EACjDS,GAAU3K,EAAI,KAAK,EAAI,IAEvB2K,GAAU3K,EAAI,KAAK,EACnB8K,GAAUR,IAGP,CACH,KAAMQ,GACN,KAAMH,EACV,CACJ,CAEA,SAASI,GAAY9E,EAAMgE,EAAKC,EAAK,CACjC,IAAIO,EAAaT,GAAgB/D,EAAMgE,EAAKC,CAAG,EAC3Cc,GAAiBhB,GAAgB/D,EAAO,EAAGgE,EAAKC,CAAG,EACvD,OAAQtD,GAAWX,CAAI,EAAIwE,EAAaO,IAAkB,CAC9D,CAIAlK,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,KAAM,MAAM,EAC3CA,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,KAAM,SAAS,EAI9C0D,GAAc,IAAKf,GAAWY,EAAsB,EACpDG,GAAc,KAAMf,GAAWJ,EAAM,EACrCmB,GAAc,IAAKf,GAAWY,EAAsB,EACpDG,GAAc,KAAMf,GAAWJ,EAAM,EAErCyC,GACI,CAAC,IAAK,KAAM,IAAK,IAAI,EACrB,SAAUhK,EAAOwO,EAAM5L,EAAQqC,EAAO,CAClCuJ,EAAKvJ,EAAM,OAAO,EAAG,CAAC,CAAC,EAAIwE,GAAMzJ,CAAK,CAC1C,CACJ,EAMA,SAASmP,GAAWjL,EAAK,CACrB,OAAO6K,GAAW7K,EAAK,KAAK,MAAM,IAAK,KAAK,MAAM,GAAG,EAAE,IAC3D,CAEA,IAAIkL,GAAoB,CACpB,IAAK,EACL,IAAK,CACT,EAEA,SAASC,IAAuB,CAC5B,OAAO,KAAK,MAAM,GACtB,CAEA,SAASC,IAAuB,CAC5B,OAAO,KAAK,MAAM,GACtB,CAIA,SAASC,GAAWvP,EAAO,CACvB,IAAIwO,EAAO,KAAK,WAAW,EAAE,KAAK,IAAI,EACtC,OAAOxO,GAAS,KAAOwO,EAAO,KAAK,KAAKxO,EAAQwO,GAAQ,EAAG,GAAG,CAClE,CAEA,SAASgB,GAAcxP,EAAO,CAC1B,IAAIwO,EAAOO,GAAW,KAAM,EAAG,CAAC,EAAE,KAClC,OAAO/O,GAAS,KAAOwO,EAAO,KAAK,KAAKxO,EAAQwO,GAAQ,EAAG,GAAG,CAClE,CAIAxJ,GAAe,IAAK,EAAG,KAAM,KAAK,EAElCA,GAAe,KAAM,EAAG,EAAG,SAAU7D,EAAQ,CACzC,OAAO,KAAK,WAAW,EAAE,YAAY,KAAMA,CAAM,CACrD,CAAC,EAED6D,GAAe,MAAO,EAAG,EAAG,SAAU7D,EAAQ,CAC1C,OAAO,KAAK,WAAW,EAAE,cAAc,KAAMA,CAAM,CACvD,CAAC,EAED6D,GAAe,OAAQ,EAAG,EAAG,SAAU7D,EAAQ,CAC3C,OAAO,KAAK,WAAW,EAAE,SAAS,KAAMA,CAAM,CAClD,CAAC,EAED6D,GAAe,IAAK,EAAG,EAAG,SAAS,EACnCA,GAAe,IAAK,EAAG,EAAG,YAAY,EAItC0D,GAAc,IAAKf,EAAS,EAC5Be,GAAc,IAAKf,EAAS,EAC5Be,GAAc,IAAKf,EAAS,EAC5Be,GAAc,KAAM,SAAUG,EAAUzH,EAAQ,CAC5C,OAAOA,EAAO,iBAAiByH,CAAQ,CAC3C,CAAC,EACDH,GAAc,MAAO,SAAUG,EAAUzH,EAAQ,CAC7C,OAAOA,EAAO,mBAAmByH,CAAQ,CAC7C,CAAC,EACDH,GAAc,OAAQ,SAAUG,EAAUzH,EAAQ,CAC9C,OAAOA,EAAO,cAAcyH,CAAQ,CACxC,CAAC,EAEDmB,GAAkB,CAAC,KAAM,MAAO,MAAM,EAAG,SAAUhK,EAAOwO,EAAM5L,EAAQqC,EAAO,CAC3E,IAAIwJ,GAAU7L,EAAO,QAAQ,cAAc5C,EAAOiF,EAAOrC,EAAO,OAAO,EAEnE6L,IAAW,KACXD,EAAK,EAAIC,GAETjN,EAAgBoB,CAAM,EAAE,eAAiB5C,CAEjD,CAAC,EAEDgK,GAAkB,CAAC,IAAK,IAAK,GAAG,EAAG,SAAUhK,EAAOwO,EAAM5L,EAAQqC,EAAO,CACrEuJ,EAAKvJ,CAAK,EAAIwE,GAAMzJ,CAAK,CAC7B,CAAC,EAID,SAASyP,GAAazP,EAAOoB,EAAQ,CACjC,OAAI,OAAOpB,GAAU,SACVA,EAGN,MAAMA,CAAK,GAIhBA,EAAQoB,EAAO,cAAcpB,CAAK,EAC9B,OAAOA,GAAU,SACVA,EAGJ,MARI,SAASA,EAAO,EAAE,CASjC,CAEA,SAAS0P,GAAgB1P,EAAOoB,EAAQ,CACpC,OAAI,OAAOpB,GAAU,SACVoB,EAAO,cAAcpB,CAAK,EAAI,GAAK,EAEvC,MAAMA,CAAK,EAAI,KAAOA,CACjC,CAGA,SAAS2P,GAAcC,EAAI7D,EAAG,CAC1B,OAAO6D,EAAG,MAAM7D,EAAG,CAAC,EAAE,OAAO6D,EAAG,MAAM,EAAG7D,CAAC,CAAC,CAC/C,CAEA,IAAI8D,GACI,2DAA2D,MAAM,GAAG,EACxEC,GAA6B,8BAA8B,MAAM,GAAG,EACpEC,GAA2B,uBAAuB,MAAM,GAAG,EAC3DC,GAAuB1H,GACvB2H,GAA4B3H,GAC5B4H,GAA0B5H,GAE9B,SAAS6H,GAAe1O,EAAGN,EAAQ,CAC/B,IAAIiP,EAAWrQ,EAAQ,KAAK,SAAS,EAC/B,KAAK,UACL,KAAK,UACD0B,GAAKA,IAAM,IAAQ,KAAK,UAAU,SAAS,KAAKN,CAAM,EAChD,SACA,YACV,EACN,OAAOM,IAAM,GACPkO,GAAcS,EAAU,KAAK,MAAM,GAAG,EACtC3O,EACE2O,EAAS3O,EAAE,IAAI,CAAC,EAChB2O,CACZ,CAEA,SAASC,GAAoB5O,EAAG,CAC5B,OAAOA,IAAM,GACPkO,GAAc,KAAK,eAAgB,KAAK,MAAM,GAAG,EACjDlO,EACE,KAAK,eAAeA,EAAE,IAAI,CAAC,EAC3B,KAAK,cACjB,CAEA,SAAS6O,GAAkB7O,EAAG,CAC1B,OAAOA,IAAM,GACPkO,GAAc,KAAK,aAAc,KAAK,MAAM,GAAG,EAC/ClO,EACE,KAAK,aAAaA,EAAE,IAAI,CAAC,EACzB,KAAK,YACjB,CAEA,SAAS8O,GAAoBC,EAAarP,EAAQE,EAAQ,CACtD,IAAIN,EACA+L,GACA5I,GACA6I,GAAMyD,EAAY,kBAAkB,EACxC,GAAI,CAAC,KAAK,eAKN,IAJA,KAAK,eAAiB,CAAC,EACvB,KAAK,oBAAsB,CAAC,EAC5B,KAAK,kBAAoB,CAAC,EAErBzP,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACjBmD,GAAMhD,EAAU,CAAC,IAAM,CAAC,CAAC,EAAE,IAAIH,CAAC,EAChC,KAAK,kBAAkBA,CAAC,EAAI,KAAK,YAC7BmD,GACA,EACJ,EAAE,kBAAkB,EACpB,KAAK,oBAAoBnD,CAAC,EAAI,KAAK,cAC/BmD,GACA,EACJ,EAAE,kBAAkB,EACpB,KAAK,eAAenD,CAAC,EAAI,KAAK,SAASmD,GAAK,EAAE,EAAE,kBAAkB,EAI1E,OAAI7C,EACIF,IAAW,QACX2L,GAAKb,GAAQ,KAAK,KAAK,eAAgBc,EAAG,EACnCD,KAAO,GAAKA,GAAK,MACjB3L,IAAW,OAClB2L,GAAKb,GAAQ,KAAK,KAAK,oBAAqBc,EAAG,EACxCD,KAAO,GAAKA,GAAK,OAExBA,GAAKb,GAAQ,KAAK,KAAK,kBAAmBc,EAAG,EACtCD,KAAO,GAAKA,GAAK,MAGxB3L,IAAW,QACX2L,GAAKb,GAAQ,KAAK,KAAK,eAAgBc,EAAG,EACtCD,KAAO,KAGXA,GAAKb,GAAQ,KAAK,KAAK,oBAAqBc,EAAG,EAC3CD,KAAO,IACAA,IAEXA,GAAKb,GAAQ,KAAK,KAAK,kBAAmBc,EAAG,EACtCD,KAAO,GAAKA,GAAK,OACjB3L,IAAW,OAClB2L,GAAKb,GAAQ,KAAK,KAAK,oBAAqBc,EAAG,EAC3CD,KAAO,KAGXA,GAAKb,GAAQ,KAAK,KAAK,eAAgBc,EAAG,EACtCD,KAAO,IACAA,IAEXA,GAAKb,GAAQ,KAAK,KAAK,kBAAmBc,EAAG,EACtCD,KAAO,GAAKA,GAAK,QAExBA,GAAKb,GAAQ,KAAK,KAAK,kBAAmBc,EAAG,EACzCD,KAAO,KAGXA,GAAKb,GAAQ,KAAK,KAAK,eAAgBc,EAAG,EACtCD,KAAO,IACAA,IAEXA,GAAKb,GAAQ,KAAK,KAAK,oBAAqBc,EAAG,EACxCD,KAAO,GAAKA,GAAK,MAGpC,CAEA,SAAS2D,GAAoBD,EAAarP,EAAQE,EAAQ,CACtD,IAAIN,EAAGmD,GAAKyE,GAEZ,GAAI,KAAK,oBACL,OAAO4H,GAAoB,KAAK,KAAMC,EAAarP,EAAQE,CAAM,EAUrE,IAPK,KAAK,iBACN,KAAK,eAAiB,CAAC,EACvB,KAAK,kBAAoB,CAAC,EAC1B,KAAK,oBAAsB,CAAC,EAC5B,KAAK,mBAAqB,CAAC,GAG1BN,EAAI,EAAGA,EAAI,EAAGA,IAAK,CA6BpB,GA1BAmD,GAAMhD,EAAU,CAAC,IAAM,CAAC,CAAC,EAAE,IAAIH,CAAC,EAC5BM,GAAU,CAAC,KAAK,mBAAmBN,CAAC,IACpC,KAAK,mBAAmBA,CAAC,EAAI,IAAI,OAC7B,IAAM,KAAK,SAASmD,GAAK,EAAE,EAAE,QAAQ,IAAK,MAAM,EAAI,IACpD,GACJ,EACA,KAAK,oBAAoBnD,CAAC,EAAI,IAAI,OAC9B,IAAM,KAAK,cAAcmD,GAAK,EAAE,EAAE,QAAQ,IAAK,MAAM,EAAI,IACzD,GACJ,EACA,KAAK,kBAAkBnD,CAAC,EAAI,IAAI,OAC5B,IAAM,KAAK,YAAYmD,GAAK,EAAE,EAAE,QAAQ,IAAK,MAAM,EAAI,IACvD,GACJ,GAEC,KAAK,eAAenD,CAAC,IACtB4H,GACI,IACA,KAAK,SAASzE,GAAK,EAAE,EACrB,KACA,KAAK,cAAcA,GAAK,EAAE,EAC1B,KACA,KAAK,YAAYA,GAAK,EAAE,EAC5B,KAAK,eAAenD,CAAC,EAAI,IAAI,OAAO4H,GAAM,QAAQ,IAAK,EAAE,EAAG,GAAG,GAI/DtH,GACAF,IAAW,QACX,KAAK,mBAAmBJ,CAAC,EAAE,KAAKyP,CAAW,EAE3C,OAAOzP,EACJ,GACHM,GACAF,IAAW,OACX,KAAK,oBAAoBJ,CAAC,EAAE,KAAKyP,CAAW,EAE5C,OAAOzP,EACJ,GACHM,GACAF,IAAW,MACX,KAAK,kBAAkBJ,CAAC,EAAE,KAAKyP,CAAW,EAE1C,OAAOzP,EACJ,GAAI,CAACM,GAAU,KAAK,eAAeN,CAAC,EAAE,KAAKyP,CAAW,EACzD,OAAOzP,CAEf,CACJ,CAIA,SAAS2P,GAAgB1Q,EAAO,CAC5B,GAAI,CAAC,KAAK,QAAQ,EACd,OAAOA,GAAS,KAAO,KAAO,IAGlC,IAAI2Q,EAAMtF,GAAI,KAAM,KAAK,EACzB,OAAIrL,GAAS,MACTA,EAAQyP,GAAazP,EAAO,KAAK,WAAW,CAAC,EACtC,KAAK,IAAIA,EAAQ2Q,EAAK,GAAG,GAEzBA,CAEf,CAEA,SAASC,GAAsB5Q,EAAO,CAClC,GAAI,CAAC,KAAK,QAAQ,EACd,OAAOA,GAAS,KAAO,KAAO,IAElC,IAAIyO,GAAW,KAAK,IAAI,EAAI,EAAI,KAAK,WAAW,EAAE,MAAM,KAAO,EAC/D,OAAOzO,GAAS,KAAOyO,EAAU,KAAK,IAAIzO,EAAQyO,EAAS,GAAG,CAClE,CAEA,SAASoC,GAAmB7Q,EAAO,CAC/B,GAAI,CAAC,KAAK,QAAQ,EACd,OAAOA,GAAS,KAAO,KAAO,IAOlC,GAAIA,GAAS,KAAM,CACf,IAAIyO,EAAUiB,GAAgB1P,EAAO,KAAK,WAAW,CAAC,EACtD,OAAO,KAAK,IAAI,KAAK,IAAI,EAAI,EAAIyO,EAAUA,EAAU,CAAC,CAC1D,KACI,QAAO,KAAK,IAAI,GAAK,CAE7B,CAEA,SAASqC,GAAcjI,EAAU,CAC7B,OAAI,KAAK,qBACA3I,EAAW,KAAM,gBAAgB,GAClC6Q,GAAqB,KAAK,IAAI,EAE9BlI,EACO,KAAK,qBAEL,KAAK,iBAGX3I,EAAW,KAAM,gBAAgB,IAClC,KAAK,eAAiB8P,IAEnB,KAAK,sBAAwBnH,EAC9B,KAAK,qBACL,KAAK,eAEnB,CAEA,SAASmI,GAAmBnI,EAAU,CAClC,OAAI,KAAK,qBACA3I,EAAW,KAAM,gBAAgB,GAClC6Q,GAAqB,KAAK,IAAI,EAE9BlI,EACO,KAAK,0BAEL,KAAK,sBAGX3I,EAAW,KAAM,qBAAqB,IACvC,KAAK,oBAAsB+P,IAExB,KAAK,2BAA6BpH,EACnC,KAAK,0BACL,KAAK,oBAEnB,CAEA,SAASoI,GAAiBpI,EAAU,CAChC,OAAI,KAAK,qBACA3I,EAAW,KAAM,gBAAgB,GAClC6Q,GAAqB,KAAK,IAAI,EAE9BlI,EACO,KAAK,wBAEL,KAAK,oBAGX3I,EAAW,KAAM,mBAAmB,IACrC,KAAK,kBAAoBgQ,IAEtB,KAAK,yBAA2BrH,EACjC,KAAK,wBACL,KAAK,kBAEnB,CAEA,SAASkI,IAAuB,CAC5B,SAASxD,EAAUpN,GAAGC,GAAG,CACrB,OAAOA,GAAE,OAASD,GAAE,MACxB,CAEA,IAAI+Q,EAAY,CAAC,EACb1D,EAAc,CAAC,EACfC,EAAa,CAAC,EACdC,GAAc,CAAC,EACf3M,GACAmD,GACAiN,GACAC,GACAC,GACJ,IAAKtQ,GAAI,EAAGA,GAAI,EAAGA,KAEfmD,GAAMhD,EAAU,CAAC,IAAM,CAAC,CAAC,EAAE,IAAIH,EAAC,EAChCoQ,GAAOjI,GAAY,KAAK,YAAYhF,GAAK,EAAE,CAAC,EAC5CkN,GAASlI,GAAY,KAAK,cAAchF,GAAK,EAAE,CAAC,EAChDmN,GAAQnI,GAAY,KAAK,SAAShF,GAAK,EAAE,CAAC,EAC1CgN,EAAU,KAAKC,EAAI,EACnB3D,EAAY,KAAK4D,EAAM,EACvB3D,EAAW,KAAK4D,EAAK,EACrB3D,GAAY,KAAKyD,EAAI,EACrBzD,GAAY,KAAK0D,EAAM,EACvB1D,GAAY,KAAK2D,EAAK,EAI1BH,EAAU,KAAK3D,CAAS,EACxBC,EAAY,KAAKD,CAAS,EAC1BE,EAAW,KAAKF,CAAS,EACzBG,GAAY,KAAKH,CAAS,EAE1B,KAAK,eAAiB,IAAI,OAAO,KAAOG,GAAY,KAAK,GAAG,EAAI,IAAK,GAAG,EACxE,KAAK,oBAAsB,KAAK,eAChC,KAAK,kBAAoB,KAAK,eAE9B,KAAK,qBAAuB,IAAI,OAC5B,KAAOD,EAAW,KAAK,GAAG,EAAI,IAC9B,GACJ,EACA,KAAK,0BAA4B,IAAI,OACjC,KAAOD,EAAY,KAAK,GAAG,EAAI,IAC/B,GACJ,EACA,KAAK,wBAA0B,IAAI,OAC/B,KAAO0D,EAAU,KAAK,GAAG,EAAI,IAC7B,GACJ,CACJ,CAIA,SAASI,IAAU,CACf,OAAO,KAAK,MAAM,EAAI,IAAM,EAChC,CAEA,SAASC,IAAU,CACf,OAAO,KAAK,MAAM,GAAK,EAC3B,CAEAvM,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,EAAG,MAAM,EACxCA,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,EAAGsM,EAAO,EACzCtM,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,EAAGuM,EAAO,EAEzCvM,GAAe,MAAO,EAAG,EAAG,UAAY,CACpC,MAAO,GAAKsM,GAAQ,MAAM,IAAI,EAAIjN,GAAS,KAAK,QAAQ,EAAG,CAAC,CAChE,CAAC,EAEDW,GAAe,QAAS,EAAG,EAAG,UAAY,CACtC,MACI,GACAsM,GAAQ,MAAM,IAAI,EAClBjN,GAAS,KAAK,QAAQ,EAAG,CAAC,EAC1BA,GAAS,KAAK,QAAQ,EAAG,CAAC,CAElC,CAAC,EAEDW,GAAe,MAAO,EAAG,EAAG,UAAY,CACpC,MAAO,GAAK,KAAK,MAAM,EAAIX,GAAS,KAAK,QAAQ,EAAG,CAAC,CACzD,CAAC,EAEDW,GAAe,QAAS,EAAG,EAAG,UAAY,CACtC,MACI,GACA,KAAK,MAAM,EACXX,GAAS,KAAK,QAAQ,EAAG,CAAC,EAC1BA,GAAS,KAAK,QAAQ,EAAG,CAAC,CAElC,CAAC,EAED,SAASmN,GAASvM,EAAOwM,EAAW,CAChCzM,GAAeC,EAAO,EAAG,EAAG,UAAY,CACpC,OAAO,KAAK,WAAW,EAAE,SACrB,KAAK,MAAM,EACX,KAAK,QAAQ,EACbwM,CACJ,CACJ,CAAC,CACL,CAEAD,GAAS,IAAK,EAAI,EAClBA,GAAS,IAAK,EAAK,EAInB,SAASE,GAAc7I,EAAUzH,EAAQ,CACrC,OAAOA,EAAO,cAClB,CAEAsH,GAAc,IAAKgJ,EAAa,EAChChJ,GAAc,IAAKgJ,EAAa,EAChChJ,GAAc,IAAKf,GAAWa,EAAgB,EAC9CE,GAAc,IAAKf,GAAWY,EAAsB,EACpDG,GAAc,IAAKf,GAAWY,EAAsB,EACpDG,GAAc,KAAMf,GAAWJ,EAAM,EACrCmB,GAAc,KAAMf,GAAWJ,EAAM,EACrCmB,GAAc,KAAMf,GAAWJ,EAAM,EAErCmB,GAAc,MAAOd,EAAS,EAC9Bc,GAAc,QAASb,EAAS,EAChCa,GAAc,MAAOd,EAAS,EAC9Bc,GAAc,QAASb,EAAS,EAEhCiC,GAAc,CAAC,IAAK,IAAI,EAAGS,EAAI,EAC/BT,GAAc,CAAC,IAAK,IAAI,EAAG,SAAU9J,EAAOuF,EAAO3C,EAAQ,CACvD,IAAI+O,EAASlI,GAAMzJ,CAAK,EACxBuF,EAAMgF,EAAI,EAAIoH,IAAW,GAAK,EAAIA,CACtC,CAAC,EACD7H,GAAc,CAAC,IAAK,GAAG,EAAG,SAAU9J,EAAOuF,EAAO3C,EAAQ,CACtDA,EAAO,MAAQA,EAAO,QAAQ,KAAK5C,CAAK,EACxC4C,EAAO,UAAY5C,CACvB,CAAC,EACD8J,GAAc,CAAC,IAAK,IAAI,EAAG,SAAU9J,EAAOuF,EAAO3C,EAAQ,CACvD2C,EAAMgF,EAAI,EAAId,GAAMzJ,CAAK,EACzBwB,EAAgBoB,CAAM,EAAE,QAAU,EACtC,CAAC,EACDkH,GAAc,MAAO,SAAU9J,EAAOuF,EAAO3C,EAAQ,CACjD,IAAIgP,EAAM5R,EAAM,OAAS,EACzBuF,EAAMgF,EAAI,EAAId,GAAMzJ,EAAM,OAAO,EAAG4R,CAAG,CAAC,EACxCrM,EAAMiF,EAAM,EAAIf,GAAMzJ,EAAM,OAAO4R,CAAG,CAAC,EACvCpQ,EAAgBoB,CAAM,EAAE,QAAU,EACtC,CAAC,EACDkH,GAAc,QAAS,SAAU9J,EAAOuF,EAAO3C,EAAQ,CACnD,IAAIiP,EAAO7R,EAAM,OAAS,EACtB8R,GAAO9R,EAAM,OAAS,EAC1BuF,EAAMgF,EAAI,EAAId,GAAMzJ,EAAM,OAAO,EAAG6R,CAAI,CAAC,EACzCtM,EAAMiF,EAAM,EAAIf,GAAMzJ,EAAM,OAAO6R,EAAM,CAAC,CAAC,EAC3CtM,EAAMkF,EAAM,EAAIhB,GAAMzJ,EAAM,OAAO8R,EAAI,CAAC,EACxCtQ,EAAgBoB,CAAM,EAAE,QAAU,EACtC,CAAC,EACDkH,GAAc,MAAO,SAAU9J,EAAOuF,EAAO3C,EAAQ,CACjD,IAAIgP,EAAM5R,EAAM,OAAS,EACzBuF,EAAMgF,EAAI,EAAId,GAAMzJ,EAAM,OAAO,EAAG4R,CAAG,CAAC,EACxCrM,EAAMiF,EAAM,EAAIf,GAAMzJ,EAAM,OAAO4R,CAAG,CAAC,CAC3C,CAAC,EACD9H,GAAc,QAAS,SAAU9J,EAAOuF,EAAO3C,EAAQ,CACnD,IAAIiP,EAAO7R,EAAM,OAAS,EACtB8R,GAAO9R,EAAM,OAAS,EAC1BuF,EAAMgF,EAAI,EAAId,GAAMzJ,EAAM,OAAO,EAAG6R,CAAI,CAAC,EACzCtM,EAAMiF,EAAM,EAAIf,GAAMzJ,EAAM,OAAO6R,EAAM,CAAC,CAAC,EAC3CtM,EAAMkF,EAAM,EAAIhB,GAAMzJ,EAAM,OAAO8R,EAAI,CAAC,CAC5C,CAAC,EAID,SAASC,GAAW/R,EAAO,CAGvB,OAAQA,EAAQ,IAAI,YAAY,EAAE,OAAO,CAAC,IAAM,GACpD,CAEA,IAAIgS,GAA6B,gBAK7BC,GAAajH,GAAW,QAAS,EAAI,EAEzC,SAASkH,GAAeC,EAAOC,EAASC,EAAS,CAC7C,OAAIF,EAAQ,GACDE,EAAU,KAAO,KAEjBA,EAAU,KAAO,IAEhC,CAEA,IAAIC,GAAa,CACb,SAAUtO,GACV,eAAgB4B,GAChB,YAAaI,GACb,QAASE,GACT,uBAAwBC,GACxB,aAAcC,GAEd,OAAQiG,GACR,YAAaC,GAEb,KAAM8C,GAEN,SAAUS,GACV,YAAaE,GACb,cAAeD,GAEf,cAAekC,EACnB,EAGIO,GAAU,CAAC,EACXC,GAAiB,CAAC,EAClBC,GAEJ,SAASC,GAAaC,EAAMC,EAAM,CAC9B,IAAI7R,EACA8R,EAAO,KAAK,IAAIF,EAAK,OAAQC,EAAK,MAAM,EAC5C,IAAK7R,EAAI,EAAGA,EAAI8R,EAAM9R,GAAK,EACvB,GAAI4R,EAAK5R,CAAC,IAAM6R,EAAK7R,CAAC,EAClB,OAAOA,EAGf,OAAO8R,CACX,CAEA,SAASC,EAAgB1P,EAAK,CAC1B,OAAOA,GAAMA,EAAI,YAAY,EAAE,QAAQ,IAAK,GAAG,CACnD,CAKA,SAAS2P,EAAaC,EAAO,CAOzB,QANIjS,EAAI,EACJkS,EACAC,EACA9R,GACA+R,GAEGpS,EAAIiS,EAAM,QAAQ,CAKrB,IAJAG,GAAQL,EAAgBE,EAAMjS,CAAC,CAAC,EAAE,MAAM,GAAG,EAC3CkS,EAAIE,GAAM,OACVD,EAAOJ,EAAgBE,EAAMjS,EAAI,CAAC,CAAC,EACnCmS,EAAOA,EAAOA,EAAK,MAAM,GAAG,EAAI,KACzBD,EAAI,GAAG,CAEV,GADA7R,GAASgS,EAAWD,GAAM,MAAM,EAAGF,CAAC,EAAE,KAAK,GAAG,CAAC,EAC3C7R,GACA,OAAOA,GAEX,GACI8R,GACAA,EAAK,QAAUD,GACfP,GAAaS,GAAOD,CAAI,GAAKD,EAAI,EAGjC,MAEJA,GACJ,CACAlS,GACJ,CACA,OAAO0R,EACX,CAEA,SAASY,EAAiB7P,EAAM,CAG5B,MAAO,CAAC,EAAEA,GAAQA,EAAK,MAAM,aAAa,EAC9C,CAEA,SAAS4P,EAAW5P,EAAM,CACtB,IAAI8P,EAAY,KACZC,EAEJ,GACIhB,GAAQ/O,CAAI,IAAM,QAClB,OAAOhE,GAAW,KAClBA,IACAA,GAAO,SACP6T,EAAiB7P,CAAI,EAErB,GAAI,CACA8P,EAAYb,GAAa,MACzBc,EAAiBC,GACjBD,EAAe,YAAc/P,CAAI,EACjCiQ,GAAmBH,CAAS,CAChC,MAAY,CAGRf,GAAQ/O,CAAI,EAAI,IACpB,CAEJ,OAAO+O,GAAQ/O,CAAI,CACvB,CAKA,SAASiQ,GAAmBrQ,EAAKsQ,EAAQ,CACrC,IAAIC,EACJ,OAAIvQ,IACI5C,EAAYkT,CAAM,EAClBC,EAAOC,GAAUxQ,CAAG,EAEpBuQ,EAAOE,GAAazQ,EAAKsQ,CAAM,EAG/BC,EAEAlB,GAAekB,EAEX,OAAO,QAAY,KAAe,QAAQ,MAE1C,QAAQ,KACJ,UAAYvQ,EAAM,wCACtB,GAKLqP,GAAa,KACxB,CAEA,SAASoB,GAAarQ,EAAMZ,EAAQ,CAChC,GAAIA,IAAW,KAAM,CACjB,IAAIxB,EACAwC,EAAe0O,GAEnB,GADA1P,EAAO,KAAOY,EACV+O,GAAQ/O,CAAI,GAAK,KACjBD,GACI,uBACA,yOAIJ,EACAK,EAAe2O,GAAQ/O,CAAI,EAAE,gBACtBZ,EAAO,cAAgB,KAC9B,GAAI2P,GAAQ3P,EAAO,YAAY,GAAK,KAChCgB,EAAe2O,GAAQ3P,EAAO,YAAY,EAAE,gBAE5CxB,EAASgS,EAAWxQ,EAAO,YAAY,EACnCxB,GAAU,KACVwC,EAAexC,EAAO,YAEtB,QAAKoR,GAAe5P,EAAO,YAAY,IACnC4P,GAAe5P,EAAO,YAAY,EAAI,CAAC,GAE3C4P,GAAe5P,EAAO,YAAY,EAAE,KAAK,CACrC,KAAMY,EACN,OAAQZ,CACZ,CAAC,EACM,KAInB,OAAA2P,GAAQ/O,CAAI,EAAI,IAAIM,GAAOH,GAAaC,EAAchB,CAAM,CAAC,EAEzD4P,GAAehP,CAAI,GACnBgP,GAAehP,CAAI,EAAE,QAAQ,SAAUwI,GAAG,CACtC6H,GAAa7H,GAAE,KAAMA,GAAE,MAAM,CACjC,CAAC,EAMLyH,GAAmBjQ,CAAI,EAEhB+O,GAAQ/O,CAAI,CACvB,KAEI,eAAO+O,GAAQ/O,CAAI,EACZ,IAEf,CAEA,SAASsQ,GAAatQ,EAAMZ,EAAQ,CAChC,GAAIA,GAAU,KAAM,CAChB,IAAIxB,EACA2S,EACAnQ,GAAe0O,GAEfC,GAAQ/O,CAAI,GAAK,MAAQ+O,GAAQ/O,CAAI,EAAE,cAAgB,KAEvD+O,GAAQ/O,CAAI,EAAE,IAAIG,GAAa4O,GAAQ/O,CAAI,EAAE,QAASZ,CAAM,CAAC,GAG7DmR,EAAYX,EAAW5P,CAAI,EACvBuQ,GAAa,OACbnQ,GAAemQ,EAAU,SAE7BnR,EAASe,GAAaC,GAAchB,CAAM,EACtCmR,GAAa,OAIbnR,EAAO,KAAOY,GAElBpC,EAAS,IAAI0C,GAAOlB,CAAM,EAC1BxB,EAAO,aAAemR,GAAQ/O,CAAI,EAClC+O,GAAQ/O,CAAI,EAAIpC,GAIpBqS,GAAmBjQ,CAAI,CAC3B,MAEQ+O,GAAQ/O,CAAI,GAAK,OACb+O,GAAQ/O,CAAI,EAAE,cAAgB,MAC9B+O,GAAQ/O,CAAI,EAAI+O,GAAQ/O,CAAI,EAAE,aAC1BA,IAASiQ,GAAmB,GAC5BA,GAAmBjQ,CAAI,GAEpB+O,GAAQ/O,CAAI,GAAK,MACxB,OAAO+O,GAAQ/O,CAAI,GAI/B,OAAO+O,GAAQ/O,CAAI,CACvB,CAGA,SAASoQ,GAAUxQ,EAAK,CACpB,IAAIhC,EAMJ,GAJIgC,GAAOA,EAAI,SAAWA,EAAI,QAAQ,QAClCA,EAAMA,EAAI,QAAQ,OAGlB,CAACA,EACD,OAAOqP,GAGX,GAAI,CAAC1S,EAAQqD,CAAG,EAAG,CAGf,GADAhC,EAASgS,EAAWhQ,CAAG,EACnBhC,EACA,OAAOA,EAEXgC,EAAM,CAACA,CAAG,CACd,CAEA,OAAO2P,EAAa3P,CAAG,CAC3B,CAEA,SAAS4Q,IAAc,CACnB,OAAOjQ,GAAKwO,EAAO,CACvB,CAEA,SAAS0B,GAAcxS,EAAG,CACtB,IAAIyS,EACA/T,EAAIsB,EAAE,GAEV,OAAItB,GAAKqB,EAAgBC,CAAC,EAAE,WAAa,KACrCyS,EACI/T,EAAEkK,EAAK,EAAI,GAAKlK,EAAEkK,EAAK,EAAI,GACrBA,GACAlK,EAAEmK,EAAI,EAAI,GAAKnK,EAAEmK,EAAI,EAAI6B,GAAYhM,EAAEiK,EAAI,EAAGjK,EAAEkK,EAAK,CAAC,EACpDC,GACAnK,EAAEoK,EAAI,EAAI,GACRpK,EAAEoK,EAAI,EAAI,IACTpK,EAAEoK,EAAI,IAAM,KACRpK,EAAEqK,EAAM,IAAM,GACXrK,EAAEsK,EAAM,IAAM,GACdtK,EAAEuK,EAAW,IAAM,GAC3BH,GACApK,EAAEqK,EAAM,EAAI,GAAKrK,EAAEqK,EAAM,EAAI,GAC3BA,GACArK,EAAEsK,EAAM,EAAI,GAAKtK,EAAEsK,EAAM,EAAI,GAC3BA,GACAtK,EAAEuK,EAAW,EAAI,GAAKvK,EAAEuK,EAAW,EAAI,IACrCA,GACA,GAGhBlJ,EAAgBC,CAAC,EAAE,qBAClByS,EAAW9J,IAAQ8J,EAAW5J,MAE/B4J,EAAW5J,IAEX9I,EAAgBC,CAAC,EAAE,gBAAkByS,IAAa,KAClDA,EAAWvJ,IAEXnJ,EAAgBC,CAAC,EAAE,kBAAoByS,IAAa,KACpDA,EAAWtJ,IAGfpJ,EAAgBC,CAAC,EAAE,SAAWyS,GAG3BzS,CACX,CAIA,IAAI0S,GACI,iJACJC,GACI,6IACJC,GAAU,wBACVC,GAAW,CACP,CAAC,eAAgB,qBAAqB,EACtC,CAAC,aAAc,iBAAiB,EAChC,CAAC,eAAgB,gBAAgB,EACjC,CAAC,aAAc,cAAe,EAAK,EACnC,CAAC,WAAY,aAAa,EAC1B,CAAC,UAAW,aAAc,EAAK,EAC/B,CAAC,aAAc,YAAY,EAC3B,CAAC,WAAY,OAAO,EACpB,CAAC,aAAc,aAAa,EAC5B,CAAC,YAAa,cAAe,EAAK,EAClC,CAAC,UAAW,OAAO,EACnB,CAAC,SAAU,QAAS,EAAK,EACzB,CAAC,OAAQ,QAAS,EAAK,CAC3B,EAEAC,GAAW,CACP,CAAC,gBAAiB,qBAAqB,EACvC,CAAC,gBAAiB,oBAAoB,EACtC,CAAC,WAAY,gBAAgB,EAC7B,CAAC,QAAS,WAAW,EACrB,CAAC,cAAe,mBAAmB,EACnC,CAAC,cAAe,kBAAkB,EAClC,CAAC,SAAU,cAAc,EACzB,CAAC,OAAQ,UAAU,EACnB,CAAC,KAAM,MAAM,CACjB,EACAC,GAAkB,qBAElBC,GACI,0LACJC,GAAa,CACT,GAAI,EACJ,IAAK,EACL,IAAK,GAAK,GACV,IAAK,GAAK,GACV,IAAK,GAAK,GACV,IAAK,GAAK,GACV,IAAK,GAAK,GACV,IAAK,GAAK,GACV,IAAK,GAAK,GACV,IAAK,GAAK,EACd,EAGJ,SAASC,GAAc/R,EAAQ,CAC3B,IAAI7B,EACA6T,EACArO,EAAS3D,EAAO,GAChBiS,GAAQV,GAAiB,KAAK5N,CAAM,GAAK6N,GAAc,KAAK7N,CAAM,EAClEuO,GACAC,GACAC,GACAC,GACAC,GAAcZ,GAAS,OACvBa,GAAcZ,GAAS,OAE3B,GAAIM,GAAO,CAEP,IADArT,EAAgBoB,CAAM,EAAE,IAAM,GACzB7B,EAAI,EAAG6T,EAAIM,GAAanU,EAAI6T,EAAG7T,IAChC,GAAIuT,GAASvT,CAAC,EAAE,CAAC,EAAE,KAAK8T,GAAM,CAAC,CAAC,EAAG,CAC/BE,GAAaT,GAASvT,CAAC,EAAE,CAAC,EAC1B+T,GAAYR,GAASvT,CAAC,EAAE,CAAC,IAAM,GAC/B,KACJ,CAEJ,GAAIgU,IAAc,KAAM,CACpBnS,EAAO,SAAW,GAClB,MACJ,CACA,GAAIiS,GAAM,CAAC,EAAG,CACV,IAAK9T,EAAI,EAAG6T,EAAIO,GAAapU,EAAI6T,EAAG7T,IAChC,GAAIwT,GAASxT,CAAC,EAAE,CAAC,EAAE,KAAK8T,GAAM,CAAC,CAAC,EAAG,CAE/BG,IAAcH,GAAM,CAAC,GAAK,KAAON,GAASxT,CAAC,EAAE,CAAC,EAC9C,KACJ,CAEJ,GAAIiU,IAAc,KAAM,CACpBpS,EAAO,SAAW,GAClB,MACJ,CACJ,CACA,GAAI,CAACkS,IAAaE,IAAc,KAAM,CAClCpS,EAAO,SAAW,GAClB,MACJ,CACA,GAAIiS,GAAM,CAAC,EACP,GAAIR,GAAQ,KAAKQ,GAAM,CAAC,CAAC,EACrBI,GAAW,QACR,CACHrS,EAAO,SAAW,GAClB,MACJ,CAEJA,EAAO,GAAKmS,IAAcC,IAAc,KAAOC,IAAY,IAC3DG,GAA0BxS,CAAM,CACpC,MACIA,EAAO,SAAW,EAE1B,CAEA,SAASyS,GACLC,EACAC,EACAC,EACAC,EACAC,GACAC,GACF,CACE,IAAIC,GAAS,CACTC,GAAeP,CAAO,EACtBhJ,GAAyB,QAAQiJ,CAAQ,EACzC,SAASC,EAAQ,EAAE,EACnB,SAASC,EAAS,EAAE,EACpB,SAASC,GAAW,EAAE,CAC1B,EAEA,OAAIC,IACAC,GAAO,KAAK,SAASD,GAAW,EAAE,CAAC,EAGhCC,EACX,CAEA,SAASC,GAAeP,EAAS,CAC7B,IAAInL,EAAO,SAASmL,EAAS,EAAE,EAC/B,OAAInL,GAAQ,GACD,IAAOA,EACPA,GAAQ,IACR,KAAOA,EAEXA,CACX,CAEA,SAAS2L,GAAkB7M,EAAG,CAE1B,OAAOA,EACF,QAAQ,qBAAsB,GAAG,EACjC,QAAQ,WAAY,GAAG,EACvB,QAAQ,SAAU,EAAE,EACpB,QAAQ,SAAU,EAAE,CAC7B,CAEA,SAAS8M,GAAaC,EAAYC,EAAarT,EAAQ,CACnD,GAAIoT,EAAY,CAEZ,IAAIE,EAAkBpG,GAA2B,QAAQkG,CAAU,EAC/DG,GAAgB,IAAI,KAChBF,EAAY,CAAC,EACbA,EAAY,CAAC,EACbA,EAAY,CAAC,CACjB,EAAE,OAAO,EACb,GAAIC,IAAoBC,GACpB,OAAA3U,EAAgBoB,CAAM,EAAE,gBAAkB,GAC1CA,EAAO,SAAW,GACX,EAEf,CACA,MAAO,EACX,CAEA,SAASwT,GAAgBC,EAAWC,EAAgBC,EAAW,CAC3D,GAAIF,EACA,OAAO3B,GAAW2B,CAAS,EACxB,GAAIC,EAEP,MAAO,GAEP,IAAIE,EAAK,SAASD,EAAW,EAAE,EAC3B9U,GAAI+U,EAAK,IACT1I,IAAK0I,EAAK/U,IAAK,IACnB,OAAOqM,GAAI,GAAKrM,EAExB,CAGA,SAASgV,GAAkB7T,EAAQ,CAC/B,IAAIiS,EAAQJ,GAAQ,KAAKqB,GAAkBlT,EAAO,EAAE,CAAC,EACjD8T,EACJ,GAAI7B,EAAO,CASP,GARA6B,EAAcrB,GACVR,EAAM,CAAC,EACPA,EAAM,CAAC,EACPA,EAAM,CAAC,EACPA,EAAM,CAAC,EACPA,EAAM,CAAC,EACPA,EAAM,CAAC,CACX,EACI,CAACkB,GAAalB,EAAM,CAAC,EAAG6B,EAAa9T,CAAM,EAC3C,OAGJA,EAAO,GAAK8T,EACZ9T,EAAO,KAAOwT,GAAgBvB,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGA,EAAM,EAAE,CAAC,EAE3DjS,EAAO,GAAKqL,GAAc,MAAM,KAAMrL,EAAO,EAAE,EAC/CA,EAAO,GAAG,cAAcA,EAAO,GAAG,cAAc,EAAIA,EAAO,IAAI,EAE/DpB,EAAgBoB,CAAM,EAAE,QAAU,EACtC,MACIA,EAAO,SAAW,EAE1B,CAGA,SAAS+T,GAAiB/T,EAAQ,CAC9B,IAAIuG,EAAUqL,GAAgB,KAAK5R,EAAO,EAAE,EAC5C,GAAIuG,IAAY,KAAM,CAClBvG,EAAO,GAAK,IAAI,KAAK,CAACuG,EAAQ,CAAC,CAAC,EAChC,MACJ,CAGA,GADAwL,GAAc/R,CAAM,EAChBA,EAAO,WAAa,GACpB,OAAOA,EAAO,aAEd,QAIJ,GADA6T,GAAkB7T,CAAM,EACpBA,EAAO,WAAa,GACpB,OAAOA,EAAO,aAEd,QAGAA,EAAO,QACPA,EAAO,SAAW,GAGlBhD,EAAM,wBAAwBgD,CAAM,CAE5C,CAEAhD,EAAM,wBAA0BoD,GAC5B,gSAGA,SAAUJ,EAAQ,CACdA,EAAO,GAAK,IAAI,KAAKA,EAAO,IAAMA,EAAO,QAAU,OAAS,GAAG,CACnE,CACJ,EAGA,SAASgU,GAASzW,EAAGC,EAAGyW,EAAG,CACvB,OAAI1W,GAGAC,GAGGyW,CACX,CAEA,SAASC,GAAiBlU,EAAQ,CAE9B,IAAImU,EAAW,IAAI,KAAKnX,EAAM,IAAI,CAAC,EACnC,OAAIgD,EAAO,QACA,CACHmU,EAAS,eAAe,EACxBA,EAAS,YAAY,EACrBA,EAAS,WAAW,CACxB,EAEG,CAACA,EAAS,YAAY,EAAGA,EAAS,SAAS,EAAGA,EAAS,QAAQ,CAAC,CAC3E,CAMA,SAASC,GAAgBpU,EAAQ,CAC7B,IAAI7B,EACA0K,EACAzL,EAAQ,CAAC,EACTiX,GACAC,GACAC,GAEJ,GAAI,CAAAvU,EAAO,GAgCX,KA5BAqU,GAAcH,GAAiBlU,CAAM,EAGjCA,EAAO,IAAMA,EAAO,GAAG0H,EAAI,GAAK,MAAQ1H,EAAO,GAAGyH,EAAK,GAAK,MAC5D+M,GAAsBxU,CAAM,EAI5BA,EAAO,YAAc,OACrBuU,GAAYP,GAAShU,EAAO,GAAGwH,EAAI,EAAG6M,GAAY7M,EAAI,CAAC,GAGnDxH,EAAO,WAAakI,GAAWqM,EAAS,GACxCvU,EAAO,aAAe,KAEtBpB,EAAgBoB,CAAM,EAAE,mBAAqB,IAGjD6I,EAAOwC,GAAckJ,GAAW,EAAGvU,EAAO,UAAU,EACpDA,EAAO,GAAGyH,EAAK,EAAIoB,EAAK,YAAY,EACpC7I,EAAO,GAAG0H,EAAI,EAAImB,EAAK,WAAW,GAQjC1K,EAAI,EAAGA,EAAI,GAAK6B,EAAO,GAAG7B,CAAC,GAAK,KAAM,EAAEA,EACzC6B,EAAO,GAAG7B,CAAC,EAAIf,EAAMe,CAAC,EAAIkW,GAAYlW,CAAC,EAI3C,KAAOA,EAAI,EAAGA,IACV6B,EAAO,GAAG7B,CAAC,EAAIf,EAAMe,CAAC,EAClB6B,EAAO,GAAG7B,CAAC,GAAK,KAAQA,IAAM,EAAI,EAAI,EAAK6B,EAAO,GAAG7B,CAAC,EAK1D6B,EAAO,GAAG2H,EAAI,IAAM,IACpB3H,EAAO,GAAG4H,EAAM,IAAM,GACtB5H,EAAO,GAAG6H,EAAM,IAAM,GACtB7H,EAAO,GAAG8H,EAAW,IAAM,IAE3B9H,EAAO,SAAW,GAClBA,EAAO,GAAG2H,EAAI,EAAI,GAGtB3H,EAAO,IAAMA,EAAO,QAAUqL,GAAgBJ,IAAY,MACtD,KACA7N,CACJ,EACAkX,GAAkBtU,EAAO,QACnBA,EAAO,GAAG,UAAU,EACpBA,EAAO,GAAG,OAAO,EAInBA,EAAO,MAAQ,MACfA,EAAO,GAAG,cAAcA,EAAO,GAAG,cAAc,EAAIA,EAAO,IAAI,EAG/DA,EAAO,WACPA,EAAO,GAAG2H,EAAI,EAAI,IAKlB3H,EAAO,IACP,OAAOA,EAAO,GAAG,EAAM,KACvBA,EAAO,GAAG,IAAMsU,KAEhB1V,EAAgBoB,CAAM,EAAE,gBAAkB,IAElD,CAEA,SAASwU,GAAsBxU,EAAQ,CACnC,IAAIyU,EAAGC,EAAU9I,EAAMC,GAASN,GAAKC,GAAKmJ,GAAMC,GAAiBC,GAEjEJ,EAAIzU,EAAO,GACPyU,EAAE,IAAM,MAAQA,EAAE,GAAK,MAAQA,EAAE,GAAK,MACtClJ,GAAM,EACNC,GAAM,EAMNkJ,EAAWV,GACPS,EAAE,GACFzU,EAAO,GAAGwH,EAAI,EACd2E,GAAW2I,GAAY,EAAG,EAAG,CAAC,EAAE,IACpC,EACAlJ,EAAOoI,GAASS,EAAE,EAAG,CAAC,EACtB5I,GAAUmI,GAASS,EAAE,EAAG,CAAC,GACrB5I,GAAU,GAAKA,GAAU,KACzB+I,GAAkB,MAGtBrJ,GAAMvL,EAAO,QAAQ,MAAM,IAC3BwL,GAAMxL,EAAO,QAAQ,MAAM,IAE3B6U,GAAU1I,GAAW2I,GAAY,EAAGvJ,GAAKC,EAAG,EAE5CkJ,EAAWV,GAASS,EAAE,GAAIzU,EAAO,GAAGwH,EAAI,EAAGqN,GAAQ,IAAI,EAGvDjJ,EAAOoI,GAASS,EAAE,EAAGI,GAAQ,IAAI,EAE7BJ,EAAE,GAAK,MAEP5I,GAAU4I,EAAE,GACR5I,GAAU,GAAKA,GAAU,KACzB+I,GAAkB,KAEfH,EAAE,GAAK,MAEd5I,GAAU4I,EAAE,EAAIlJ,IACZkJ,EAAE,EAAI,GAAKA,EAAE,EAAI,KACjBG,GAAkB,KAItB/I,GAAUN,IAGdK,EAAO,GAAKA,EAAOS,GAAYqI,EAAUnJ,GAAKC,EAAG,EACjD5M,EAAgBoB,CAAM,EAAE,eAAiB,GAClC4U,IAAmB,KAC1BhW,EAAgBoB,CAAM,EAAE,iBAAmB,IAE3C2U,GAAOhJ,GAAmB+I,EAAU9I,EAAMC,GAASN,GAAKC,EAAG,EAC3DxL,EAAO,GAAGwH,EAAI,EAAImN,GAAK,KACvB3U,EAAO,WAAa2U,GAAK,UAEjC,CAGA3X,EAAM,SAAW,UAAY,CAAC,EAG9BA,EAAM,SAAW,UAAY,CAAC,EAG9B,SAASwV,GAA0BxS,EAAQ,CAEvC,GAAIA,EAAO,KAAOhD,EAAM,SAAU,CAC9B+U,GAAc/R,CAAM,EACpB,MACJ,CACA,GAAIA,EAAO,KAAOhD,EAAM,SAAU,CAC9B6W,GAAkB7T,CAAM,EACxB,MACJ,CACAA,EAAO,GAAK,CAAC,EACbpB,EAAgBoB,CAAM,EAAE,MAAQ,GAGhC,IAAI2D,EAAS,GAAK3D,EAAO,GACrB7B,EACAkV,EACApM,GACA5E,GACA0S,GACAC,GAAerR,EAAO,OACtBsR,GAAyB,EACzBC,GACA/N,GAKJ,IAHAF,GACInE,GAAa9C,EAAO,GAAIA,EAAO,OAAO,EAAE,MAAMgC,EAAgB,GAAK,CAAC,EACxEmF,GAAWF,GAAO,OACb9I,EAAI,EAAGA,EAAIgJ,GAAUhJ,IACtBkE,GAAQ4E,GAAO9I,CAAC,EAChBkV,GAAe1P,EAAO,MAAMwC,GAAsB9D,GAAOrC,CAAM,CAAC,GAC5D,CAAC,GAAG,CAAC,EACLqT,IACA0B,GAAUpR,EAAO,OAAO,EAAGA,EAAO,QAAQ0P,CAAW,CAAC,EAClD0B,GAAQ,OAAS,GACjBnW,EAAgBoB,CAAM,EAAE,YAAY,KAAK+U,EAAO,EAEpDpR,EAASA,EAAO,MACZA,EAAO,QAAQ0P,CAAW,EAAIA,EAAY,MAC9C,EACA4B,IAA0B5B,EAAY,QAGtClR,GAAqBE,EAAK,GACtBgR,EACAzU,EAAgBoB,CAAM,EAAE,MAAQ,GAEhCpB,EAAgBoB,CAAM,EAAE,aAAa,KAAKqC,EAAK,EAEnDgF,GAAwBhF,GAAOgR,EAAarT,CAAM,GAC3CA,EAAO,SAAW,CAACqT,GAC1BzU,EAAgBoB,CAAM,EAAE,aAAa,KAAKqC,EAAK,EAKvDzD,EAAgBoB,CAAM,EAAE,cACpBgV,GAAeC,GACftR,EAAO,OAAS,GAChB/E,EAAgBoB,CAAM,EAAE,YAAY,KAAK2D,CAAM,EAK/C3D,EAAO,GAAG2H,EAAI,GAAK,IACnB/I,EAAgBoB,CAAM,EAAE,UAAY,IACpCA,EAAO,GAAG2H,EAAI,EAAI,IAElB/I,EAAgBoB,CAAM,EAAE,QAAU,QAGtCpB,EAAgBoB,CAAM,EAAE,gBAAkBA,EAAO,GAAG,MAAM,CAAC,EAC3DpB,EAAgBoB,CAAM,EAAE,SAAWA,EAAO,UAE1CA,EAAO,GAAG2H,EAAI,EAAIwN,GACdnV,EAAO,QACPA,EAAO,GAAG2H,EAAI,EACd3H,EAAO,SACX,EAGAkV,GAAMtW,EAAgBoB,CAAM,EAAE,IAC1BkV,KAAQ,OACRlV,EAAO,GAAGwH,EAAI,EAAIxH,EAAO,QAAQ,gBAAgBkV,GAAKlV,EAAO,GAAGwH,EAAI,CAAC,GAGzE4M,GAAgBpU,CAAM,EACtBqR,GAAcrR,CAAM,CACxB,CAEA,SAASmV,GAAgB3W,EAAQ4W,EAAMxG,EAAU,CAC7C,IAAIyG,EAEJ,OAAIzG,GAAY,KAELwG,EAEP5W,EAAO,cAAgB,KAChBA,EAAO,aAAa4W,EAAMxG,CAAQ,GAClCpQ,EAAO,MAAQ,OAEtB6W,EAAO7W,EAAO,KAAKoQ,CAAQ,EACvByG,GAAQD,EAAO,KACfA,GAAQ,IAER,CAACC,GAAQD,IAAS,KAClBA,EAAO,IAEJA,EAKf,CAGA,SAASE,GAAyBtV,EAAQ,CACtC,IAAIuV,EACAC,EACAC,EACAtX,GACAuX,GACAC,GACAC,GAAoB,GACpBC,GAAa7V,EAAO,GAAG,OAE3B,GAAI6V,KAAe,EAAG,CAClBjX,EAAgBoB,CAAM,EAAE,cAAgB,GACxCA,EAAO,GAAK,IAAI,KAAK,GAAG,EACxB,MACJ,CAEA,IAAK7B,GAAI,EAAGA,GAAI0X,GAAY1X,KACxBuX,GAAe,EACfC,GAAmB,GACnBJ,EAAa9V,GAAW,CAAC,EAAGO,CAAM,EAC9BA,EAAO,SAAW,OAClBuV,EAAW,QAAUvV,EAAO,SAEhCuV,EAAW,GAAKvV,EAAO,GAAG7B,EAAC,EAC3BqU,GAA0B+C,CAAU,EAEhCrW,EAAQqW,CAAU,IAClBI,GAAmB,IAIvBD,IAAgB9W,EAAgB2W,CAAU,EAAE,cAG5CG,IAAgB9W,EAAgB2W,CAAU,EAAE,aAAa,OAAS,GAElE3W,EAAgB2W,CAAU,EAAE,MAAQG,GAE/BE,GAaGF,GAAeD,IACfA,EAAcC,GACdF,EAAaD,IAbbE,GAAe,MACfC,GAAeD,GACfE,MAEAF,EAAcC,GACdF,EAAaD,EACTI,KACAC,GAAoB,KAWpCvX,EAAO2B,EAAQwV,GAAcD,CAAU,CAC3C,CAEA,SAASO,GAAiB9V,EAAQ,CAC9B,GAAI,CAAAA,EAAO,GAIX,KAAI7B,EAAI+F,GAAqBlE,EAAO,EAAE,EAClC+V,EAAY5X,EAAE,MAAQ,OAAYA,EAAE,KAAOA,EAAE,IACjD6B,EAAO,GAAKjC,EACR,CAACI,EAAE,KAAMA,EAAE,MAAO4X,EAAW5X,EAAE,KAAMA,EAAE,OAAQA,EAAE,OAAQA,EAAE,WAAW,EACtE,SAAUT,EAAK,CACX,OAAOA,GAAO,SAASA,EAAK,EAAE,CAClC,CACJ,EAEA0W,GAAgBpU,CAAM,EAC1B,CAEA,SAASgW,GAAiBhW,EAAQ,CAC9B,IAAI9B,EAAM,IAAI6B,GAAOsR,GAAc4E,GAAcjW,CAAM,CAAC,CAAC,EACzD,OAAI9B,EAAI,WAEJA,EAAI,IAAI,EAAG,GAAG,EACdA,EAAI,SAAW,QAGZA,CACX,CAEA,SAAS+X,GAAcjW,EAAQ,CAC3B,IAAI5C,EAAQ4C,EAAO,GACfzB,EAASyB,EAAO,GAIpB,OAFAA,EAAO,QAAUA,EAAO,SAAWgR,GAAUhR,EAAO,EAAE,EAElD5C,IAAU,MAASmB,IAAW,QAAanB,IAAU,GAC9CkC,EAAc,CAAE,UAAW,EAAK,CAAC,GAGxC,OAAOlC,GAAU,WACjB4C,EAAO,GAAK5C,EAAQ4C,EAAO,QAAQ,SAAS5C,CAAK,GAGjD6C,EAAS7C,CAAK,EACP,IAAI2C,GAAOsR,GAAcjU,CAAK,CAAC,GAC/BU,EAAOV,CAAK,EACnB4C,EAAO,GAAK5C,EACLD,EAAQoB,CAAM,EACrB+W,GAAyBtV,CAAM,EACxBzB,EACPiU,GAA0BxS,CAAM,EAEhCkW,GAAgBlW,CAAM,EAGrBd,EAAQc,CAAM,IACfA,EAAO,GAAK,MAGTA,GACX,CAEA,SAASkW,GAAgBlW,EAAQ,CAC7B,IAAI5C,EAAQ4C,EAAO,GACfpC,EAAYR,CAAK,EACjB4C,EAAO,GAAK,IAAI,KAAKhD,EAAM,IAAI,CAAC,EACzBc,EAAOV,CAAK,EACnB4C,EAAO,GAAK,IAAI,KAAK5C,EAAM,QAAQ,CAAC,EAC7B,OAAOA,GAAU,SACxB2W,GAAiB/T,CAAM,EAChB7C,EAAQC,CAAK,GACpB4C,EAAO,GAAKjC,EAAIX,EAAM,MAAM,CAAC,EAAG,SAAUM,EAAK,CAC3C,OAAO,SAASA,EAAK,EAAE,CAC3B,CAAC,EACD0W,GAAgBpU,CAAM,GACf3C,EAASD,CAAK,EACrB0Y,GAAiB9V,CAAM,EAChBnC,EAAST,CAAK,EAErB4C,EAAO,GAAK,IAAI,KAAK5C,CAAK,EAE1BJ,EAAM,wBAAwBgD,CAAM,CAE5C,CAEA,SAAStB,GAAiBtB,EAAOmB,EAAQC,EAAQC,EAAQkK,GAAO,CAC5D,IAAIsL,GAAI,CAAC,EAET,OAAI1V,IAAW,IAAQA,IAAW,MAC9BE,EAASF,EACTA,EAAS,SAGTC,IAAW,IAAQA,IAAW,MAC9BC,EAASD,EACTA,EAAS,SAIRnB,EAASD,CAAK,GAAKK,EAAcL,CAAK,GACtCD,EAAQC,CAAK,GAAKA,EAAM,SAAW,KAEpCA,EAAQ,QAIZ6W,GAAE,iBAAmB,GACrBA,GAAE,QAAUA,GAAE,OAAStL,GACvBsL,GAAE,GAAKzV,EACPyV,GAAE,GAAK7W,EACP6W,GAAE,GAAK1V,EACP0V,GAAE,QAAUxV,EAELuX,GAAiB/B,EAAC,CAC7B,CAEA,SAASa,GAAY1X,EAAOmB,EAAQC,EAAQC,EAAQ,CAChD,OAAOC,GAAiBtB,EAAOmB,EAAQC,EAAQC,EAAQ,EAAK,CAChE,CAEA,IAAI0X,GAAe/V,GACX,qGACA,UAAY,CACR,IAAIgW,EAAQtB,GAAY,MAAM,KAAM,SAAS,EAC7C,OAAI,KAAK,QAAQ,GAAKsB,EAAM,QAAQ,EACzBA,EAAQ,KAAO,KAAOA,EAEtB9W,EAAc,CAE7B,CACJ,EACA+W,GAAejW,GACX,qGACA,UAAY,CACR,IAAIgW,EAAQtB,GAAY,MAAM,KAAM,SAAS,EAC7C,OAAI,KAAK,QAAQ,GAAKsB,EAAM,QAAQ,EACzBA,EAAQ,KAAO,KAAOA,EAEtB9W,EAAc,CAE7B,CACJ,EAOJ,SAASgX,GAAOrY,EAAIsY,EAAS,CACzB,IAAIrY,EAAKC,EAIT,GAHIoY,EAAQ,SAAW,GAAKpZ,EAAQoZ,EAAQ,CAAC,CAAC,IAC1CA,EAAUA,EAAQ,CAAC,GAEnB,CAACA,EAAQ,OACT,OAAOzB,GAAY,EAGvB,IADA5W,EAAMqY,EAAQ,CAAC,EACVpY,EAAI,EAAGA,EAAIoY,EAAQ,OAAQ,EAAEpY,GAC1B,CAACoY,EAAQpY,CAAC,EAAE,QAAQ,GAAKoY,EAAQpY,CAAC,EAAEF,CAAE,EAAEC,CAAG,KAC3CA,EAAMqY,EAAQpY,CAAC,GAGvB,OAAOD,CACX,CAGA,SAASsY,IAAM,CACX,IAAIlW,EAAO,CAAC,EAAE,MAAM,KAAK,UAAW,CAAC,EAErC,OAAOgW,GAAO,WAAYhW,CAAI,CAClC,CAEA,SAASmW,IAAM,CACX,IAAInW,EAAO,CAAC,EAAE,MAAM,KAAK,UAAW,CAAC,EAErC,OAAOgW,GAAO,UAAWhW,CAAI,CACjC,CAEA,IAAIiB,GAAM,UAAY,CAClB,OAAO,KAAK,IAAM,KAAK,IAAI,EAAI,CAAC,IAAI,IACxC,EAEImV,GAAW,CACX,OACA,UACA,QACA,OACA,MACA,OACA,SACA,SACA,aACJ,EAEA,SAASC,GAAgB9X,EAAG,CACxB,IAAI2B,EACAoW,EAAiB,GACjBzY,EACA0Y,GAAWH,GAAS,OACxB,IAAKlW,KAAO3B,EACR,GACIvB,EAAWuB,EAAG2B,CAAG,GACjB,EACI6I,GAAQ,KAAKqN,GAAUlW,CAAG,IAAM,KAC/B3B,EAAE2B,CAAG,GAAK,MAAQ,CAAC,MAAM3B,EAAE2B,CAAG,CAAC,IAGpC,MAAO,GAIf,IAAKrC,EAAI,EAAGA,EAAI0Y,GAAU,EAAE1Y,EACxB,GAAIU,EAAE6X,GAASvY,CAAC,CAAC,EAAG,CAChB,GAAIyY,EACA,MAAO,GAEP,WAAW/X,EAAE6X,GAASvY,CAAC,CAAC,CAAC,IAAM0I,GAAMhI,EAAE6X,GAASvY,CAAC,CAAC,CAAC,IACnDyY,EAAiB,GAEzB,CAGJ,MAAO,EACX,CAEA,SAASE,IAAY,CACjB,OAAO,KAAK,QAChB,CAEA,SAASC,IAAkB,CACvB,OAAOC,GAAe,GAAG,CAC7B,CAEA,SAASC,GAASC,EAAU,CACxB,IAAI9S,EAAkBF,GAAqBgT,CAAQ,EAC/CC,EAAQ/S,EAAgB,MAAQ,EAChCgT,EAAWhT,EAAgB,SAAW,EACtCiT,GAASjT,EAAgB,OAAS,EAClCkT,GAAQlT,EAAgB,MAAQA,EAAgB,SAAW,EAC3DmT,GAAOnT,EAAgB,KAAO,EAC9BmL,GAAQnL,EAAgB,MAAQ,EAChCoL,GAAUpL,EAAgB,QAAU,EACpCoT,GAAUpT,EAAgB,QAAU,EACpCqT,GAAerT,EAAgB,aAAe,EAElD,KAAK,SAAWuS,GAAgBvS,CAAe,EAG/C,KAAK,cACD,CAACqT,GACDD,GAAU,IACVhI,GAAU,IACVD,GAAQ,IAAO,GAAK,GAGxB,KAAK,MAAQ,CAACgI,GAAOD,GAAQ,EAI7B,KAAK,QAAU,CAACD,GAASD,EAAW,EAAID,EAAQ,GAEhD,KAAK,MAAQ,CAAC,EAEd,KAAK,QAAUnG,GAAU,EAEzB,KAAK,QAAQ,CACjB,CAEA,SAAS0G,GAAWha,EAAK,CACrB,OAAOA,aAAeuZ,EAC1B,CAEA,SAASU,GAASjW,EAAQ,CACtB,OAAIA,EAAS,EACF,KAAK,MAAM,GAAKA,CAAM,EAAI,GAE1B,KAAK,MAAMA,CAAM,CAEhC,CAGA,SAASkW,GAAcC,EAAQC,EAAQC,EAAa,CAChD,IAAI9Y,EAAM,KAAK,IAAI4Y,EAAO,OAAQC,EAAO,MAAM,EAC3CE,GAAa,KAAK,IAAIH,EAAO,OAASC,EAAO,MAAM,EACnDG,GAAQ,EACR9Z,GACJ,IAAKA,GAAI,EAAGA,GAAIc,EAAKd,MAEZ4Z,GAAeF,EAAO1Z,EAAC,IAAM2Z,EAAO3Z,EAAC,GACrC,CAAC4Z,GAAelR,GAAMgR,EAAO1Z,EAAC,CAAC,IAAM0I,GAAMiR,EAAO3Z,EAAC,CAAC,IAErD8Z,KAGR,OAAOA,GAAQD,EACnB,CAIA,SAASE,GAAO7V,EAAO8V,EAAW,CAC9B/V,GAAeC,EAAO,EAAG,EAAG,UAAY,CACpC,IAAI6V,EAAS,KAAK,UAAU,EACxBnW,EAAO,IACX,OAAImW,EAAS,IACTA,EAAS,CAACA,EACVnW,EAAO,KAGPA,EACAN,GAAS,CAAC,EAAEyW,EAAS,IAAK,CAAC,EAC3BC,EACA1W,GAAS,CAAC,CAACyW,EAAS,GAAI,CAAC,CAEjC,CAAC,CACL,CAEAA,GAAO,IAAK,GAAG,EACfA,GAAO,KAAM,EAAE,EAIfpS,GAAc,IAAKN,EAAgB,EACnCM,GAAc,KAAMN,EAAgB,EACpC0B,GAAc,CAAC,IAAK,IAAI,EAAG,SAAU9J,EAAOuF,EAAO3C,EAAQ,CACvDA,EAAO,QAAU,GACjBA,EAAO,KAAOoY,GAAiB5S,GAAkBpI,CAAK,CAC1D,CAAC,EAOD,IAAIib,GAAc,kBAElB,SAASD,GAAiBE,EAAS3U,EAAQ,CACvC,IAAI4U,GAAW5U,GAAU,IAAI,MAAM2U,CAAO,EACtCE,EACAC,GACAjJ,GAEJ,OAAI+I,IAAY,KACL,MAGXC,EAAQD,EAAQA,EAAQ,OAAS,CAAC,GAAK,CAAC,EACxCE,IAASD,EAAQ,IAAI,MAAMH,EAAW,GAAK,CAAC,IAAK,EAAG,CAAC,EACrD7I,GAAU,EAAEiJ,GAAM,CAAC,EAAI,IAAM5R,GAAM4R,GAAM,CAAC,CAAC,EAEpCjJ,KAAY,EAAI,EAAIiJ,GAAM,CAAC,IAAM,IAAMjJ,GAAU,CAACA,GAC7D,CAGA,SAASkJ,GAAgBtb,EAAOub,EAAO,CACnC,IAAIza,EAAK4F,EACT,OAAI6U,EAAM,QACNza,EAAMya,EAAM,MAAM,EAClB7U,GACK7D,EAAS7C,CAAK,GAAKU,EAAOV,CAAK,EAC1BA,EAAM,QAAQ,EACd0X,GAAY1X,CAAK,EAAE,QAAQ,GAAKc,EAAI,QAAQ,EAEtDA,EAAI,GAAG,QAAQA,EAAI,GAAG,QAAQ,EAAI4F,CAAI,EACtC9G,EAAM,aAAakB,EAAK,EAAK,EACtBA,GAEA4W,GAAY1X,CAAK,EAAE,MAAM,CAExC,CAEA,SAASwb,GAAc/Z,EAAG,CAGtB,MAAO,CAAC,KAAK,MAAMA,EAAE,GAAG,kBAAkB,CAAC,CAC/C,CAMA7B,EAAM,aAAe,UAAY,CAAC,EAclC,SAAS6b,GAAazb,EAAO0b,EAAeC,EAAa,CACrD,IAAIb,EAAS,KAAK,SAAW,EACzBc,GACJ,GAAI,CAAC,KAAK,QAAQ,EACd,OAAO5b,GAAS,KAAO,KAAO,IAElC,GAAIA,GAAS,KAAM,CACf,GAAI,OAAOA,GAAU,UAEjB,GADAA,EAAQgb,GAAiB5S,GAAkBpI,CAAK,EAC5CA,IAAU,KACV,OAAO,UAEJ,KAAK,IAAIA,CAAK,EAAI,IAAM,CAAC2b,IAChC3b,EAAQA,EAAQ,IAEpB,MAAI,CAAC,KAAK,QAAU0b,IAChBE,GAAcJ,GAAc,IAAI,GAEpC,KAAK,QAAUxb,EACf,KAAK,OAAS,GACV4b,IAAe,MACf,KAAK,IAAIA,GAAa,GAAG,EAEzBd,IAAW9a,IACP,CAAC0b,GAAiB,KAAK,kBACvBG,GACI,KACAjC,GAAe5Z,EAAQ8a,EAAQ,GAAG,EAClC,EACA,EACJ,EACQ,KAAK,oBACb,KAAK,kBAAoB,GACzBlb,EAAM,aAAa,KAAM,EAAI,EAC7B,KAAK,kBAAoB,OAG1B,IACX,KACI,QAAO,KAAK,OAASkb,EAASU,GAAc,IAAI,CAExD,CAEA,SAASM,GAAW9b,EAAO0b,EAAe,CACtC,OAAI1b,GAAS,MACL,OAAOA,GAAU,WACjBA,EAAQ,CAACA,GAGb,KAAK,UAAUA,EAAO0b,CAAa,EAE5B,MAEA,CAAC,KAAK,UAAU,CAE/B,CAEA,SAASK,GAAeL,EAAe,CACnC,OAAO,KAAK,UAAU,EAAGA,CAAa,CAC1C,CAEA,SAASM,GAAiBN,EAAe,CACrC,OAAI,KAAK,SACL,KAAK,UAAU,EAAGA,CAAa,EAC/B,KAAK,OAAS,GAEVA,GACA,KAAK,SAASF,GAAc,IAAI,EAAG,GAAG,GAGvC,IACX,CAEA,SAASS,IAA0B,CAC/B,GAAI,KAAK,MAAQ,KACb,KAAK,UAAU,KAAK,KAAM,GAAO,EAAI,UAC9B,OAAO,KAAK,IAAO,SAAU,CACpC,IAAIC,EAAQlB,GAAiB7S,GAAa,KAAK,EAAE,EAC7C+T,GAAS,KACT,KAAK,UAAUA,CAAK,EAEpB,KAAK,UAAU,EAAG,EAAI,CAE9B,CACA,OAAO,IACX,CAEA,SAASC,GAAqBnc,EAAO,CACjC,OAAK,KAAK,QAAQ,GAGlBA,EAAQA,EAAQ0X,GAAY1X,CAAK,EAAE,UAAU,EAAI,GAEzC,KAAK,UAAU,EAAIA,GAAS,KAAO,GAJhC,EAKf,CAEA,SAASoc,IAAuB,CAC5B,OACI,KAAK,UAAU,EAAI,KAAK,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GACnD,KAAK,UAAU,EAAI,KAAK,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,CAE3D,CAEA,SAASC,IAA8B,CACnC,GAAI,CAAC7b,EAAY,KAAK,aAAa,EAC/B,OAAO,KAAK,cAGhB,IAAIqW,EAAI,CAAC,EACLmC,EAEJ,OAAA3W,GAAWwU,EAAG,IAAI,EAClBA,EAAIgC,GAAchC,CAAC,EAEfA,EAAE,IACFmC,EAAQnC,EAAE,OAAS3V,EAAU2V,EAAE,EAAE,EAAIa,GAAYb,EAAE,EAAE,EACrD,KAAK,cACD,KAAK,QAAQ,GAAK2D,GAAc3D,EAAE,GAAImC,EAAM,QAAQ,CAAC,EAAI,GAE7D,KAAK,cAAgB,GAGlB,KAAK,aAChB,CAEA,SAASsD,IAAU,CACf,OAAO,KAAK,QAAQ,EAAI,CAAC,KAAK,OAAS,EAC3C,CAEA,SAASC,IAAc,CACnB,OAAO,KAAK,QAAQ,EAAI,KAAK,OAAS,EAC1C,CAEA,SAASC,IAAQ,CACb,OAAO,KAAK,QAAQ,EAAI,KAAK,QAAU,KAAK,UAAY,EAAI,EAChE,CAGA,IAAIC,GAAc,wDAIdC,GACI,sKAER,SAAS9C,GAAe5Z,EAAOoD,EAAK,CAChC,IAAI0W,EAAW9Z,EAEX6U,EAAQ,KACRlQ,GACAgY,GACAC,GAEJ,OAAItC,GAAWta,CAAK,EAChB8Z,EAAW,CACP,GAAI9Z,EAAM,cACV,EAAGA,EAAM,MACT,EAAGA,EAAM,OACb,EACOS,EAAST,CAAK,GAAK,CAAC,MAAM,CAACA,CAAK,GACvC8Z,EAAW,CAAC,EACR1W,EACA0W,EAAS1W,CAAG,EAAI,CAACpD,EAEjB8Z,EAAS,aAAe,CAAC9Z,IAErB6U,EAAQ4H,GAAY,KAAKzc,CAAK,IACtC2E,GAAOkQ,EAAM,CAAC,IAAM,IAAM,GAAK,EAC/BiF,EAAW,CACP,EAAG,EACH,EAAGrQ,GAAMoL,EAAMvK,EAAI,CAAC,EAAI3F,GACxB,EAAG8E,GAAMoL,EAAMtK,EAAI,CAAC,EAAI5F,GACxB,EAAG8E,GAAMoL,EAAMrK,EAAM,CAAC,EAAI7F,GAC1B,EAAG8E,GAAMoL,EAAMpK,EAAM,CAAC,EAAI9F,GAC1B,GAAI8E,GAAM8Q,GAAS1F,EAAMnK,EAAW,EAAI,GAAI,CAAC,EAAI/F,EACrD,IACQkQ,EAAQ6H,GAAS,KAAK1c,CAAK,IACnC2E,GAAOkQ,EAAM,CAAC,IAAM,IAAM,GAAK,EAC/BiF,EAAW,CACP,EAAG+C,GAAShI,EAAM,CAAC,EAAGlQ,EAAI,EAC1B,EAAGkY,GAAShI,EAAM,CAAC,EAAGlQ,EAAI,EAC1B,EAAGkY,GAAShI,EAAM,CAAC,EAAGlQ,EAAI,EAC1B,EAAGkY,GAAShI,EAAM,CAAC,EAAGlQ,EAAI,EAC1B,EAAGkY,GAAShI,EAAM,CAAC,EAAGlQ,EAAI,EAC1B,EAAGkY,GAAShI,EAAM,CAAC,EAAGlQ,EAAI,EAC1B,EAAGkY,GAAShI,EAAM,CAAC,EAAGlQ,EAAI,CAC9B,GACOmV,GAAY,KAEnBA,EAAW,CAAC,EAEZ,OAAOA,GAAa,WACnB,SAAUA,GAAY,OAAQA,KAE/B8C,GAAUE,GACNpF,GAAYoC,EAAS,IAAI,EACzBpC,GAAYoC,EAAS,EAAE,CAC3B,EAEAA,EAAW,CAAC,EACZA,EAAS,GAAK8C,GAAQ,aACtB9C,EAAS,EAAI8C,GAAQ,QAGzBD,GAAM,IAAI9C,GAASC,CAAQ,EAEvBQ,GAAWta,CAAK,GAAKE,EAAWF,EAAO,SAAS,IAChD2c,GAAI,QAAU3c,EAAM,SAGpBsa,GAAWta,CAAK,GAAKE,EAAWF,EAAO,UAAU,IACjD2c,GAAI,SAAW3c,EAAM,UAGlB2c,EACX,CAEA/C,GAAe,GAAKC,GAAS,UAC7BD,GAAe,QAAUD,GAEzB,SAASkD,GAASE,EAAKpY,EAAM,CAIzB,IAAI7D,EAAMic,GAAO,WAAWA,EAAI,QAAQ,IAAK,GAAG,CAAC,EAEjD,OAAQ,MAAMjc,CAAG,EAAI,EAAIA,GAAO6D,CACpC,CAEA,SAASqY,GAA0BC,EAAMjE,EAAO,CAC5C,IAAIlY,EAAM,CAAC,EAEX,OAAAA,EAAI,OACAkY,EAAM,MAAM,EAAIiE,EAAK,MAAM,GAAKjE,EAAM,KAAK,EAAIiE,EAAK,KAAK,GAAK,GAC9DA,EAAK,MAAM,EAAE,IAAInc,EAAI,OAAQ,GAAG,EAAE,QAAQkY,CAAK,GAC/C,EAAElY,EAAI,OAGVA,EAAI,aAAe,CAACkY,EAAQ,CAACiE,EAAK,MAAM,EAAE,IAAInc,EAAI,OAAQ,GAAG,EAEtDA,CACX,CAEA,SAASgc,GAAkBG,EAAMjE,EAAO,CACpC,IAAIlY,EACJ,OAAMmc,EAAK,QAAQ,GAAKjE,EAAM,QAAQ,GAItCA,EAAQsC,GAAgBtC,EAAOiE,CAAI,EAC/BA,EAAK,SAASjE,CAAK,EACnBlY,EAAMkc,GAA0BC,EAAMjE,CAAK,GAE3ClY,EAAMkc,GAA0BhE,EAAOiE,CAAI,EAC3Cnc,EAAI,aAAe,CAACA,EAAI,aACxBA,EAAI,OAAS,CAACA,EAAI,QAGfA,GAZI,CAAE,aAAc,EAAG,OAAQ,CAAE,CAa5C,CAGA,SAASoc,GAAYC,EAAW3Z,EAAM,CAClC,OAAO,SAAUf,EAAK2a,EAAQ,CAC1B,IAAIC,GAAKC,GAET,OAAIF,IAAW,MAAQ,CAAC,MAAM,CAACA,CAAM,IACjC7Z,GACIC,EACA,YACIA,EACA,uDACAA,EACA,gGAER,EACA8Z,GAAM7a,EACNA,EAAM2a,EACNA,EAASE,IAGbD,GAAMzD,GAAenX,EAAK2a,CAAM,EAChCvB,GAAY,KAAMwB,GAAKF,CAAS,EACzB,IACX,CACJ,CAEA,SAAStB,GAAY3X,EAAK4V,EAAUyD,EAAUC,EAAc,CACxD,IAAInD,GAAeP,EAAS,cACxBK,GAAOI,GAAST,EAAS,KAAK,EAC9BG,GAASM,GAAST,EAAS,OAAO,EAEjC5V,EAAI,QAAQ,IAKjBsZ,EAAeA,GAAuB,GAElCvD,IACAhN,GAAS/I,EAAKmH,GAAInH,EAAK,OAAO,EAAI+V,GAASsD,CAAQ,EAEnDpD,IACA/O,GAAMlH,EAAK,OAAQmH,GAAInH,EAAK,MAAM,EAAIiW,GAAOoD,CAAQ,EAErDlD,IACAnW,EAAI,GAAG,QAAQA,EAAI,GAAG,QAAQ,EAAImW,GAAekD,CAAQ,EAEzDC,GACA5d,EAAM,aAAasE,EAAKiW,IAAQF,EAAM,EAE9C,CAEA,IAAIwD,GAAMP,GAAY,EAAG,KAAK,EAC1BQ,GAAWR,GAAY,GAAI,UAAU,EAEzC,SAASS,GAAS3d,EAAO,CACrB,OAAO,OAAOA,GAAU,UAAYA,aAAiB,MACzD,CAGA,SAAS4d,GAAc5d,EAAO,CAC1B,OACI6C,EAAS7C,CAAK,GACdU,EAAOV,CAAK,GACZ2d,GAAS3d,CAAK,GACdS,EAAST,CAAK,GACd6d,GAAsB7d,CAAK,GAC3B8d,GAAoB9d,CAAK,GACzBA,IAAU,MACVA,IAAU,MAElB,CAEA,SAAS8d,GAAoB9d,EAAO,CAChC,IAAI+d,EAAa9d,EAASD,CAAK,GAAK,CAACK,EAAcL,CAAK,EACpDge,EAAe,GACfC,EAAa,CACT,QACA,OACA,IACA,SACA,QACA,IACA,OACA,MACA,IACA,QACA,OACA,IACA,QACA,OACA,IACA,UACA,SACA,IACA,UACA,SACA,IACA,eACA,cACA,IACJ,EACAld,GACAmd,GACAC,GAAcF,EAAW,OAE7B,IAAKld,GAAI,EAAGA,GAAIod,GAAapd,IAAK,EAC9Bmd,GAAWD,EAAWld,EAAC,EACvBid,EAAeA,GAAgB9d,EAAWF,EAAOke,EAAQ,EAG7D,OAAOH,GAAcC,CACzB,CAEA,SAASH,GAAsB7d,EAAO,CAClC,IAAIoe,EAAYre,EAAQC,CAAK,EACzBqe,EAAe,GACnB,OAAID,IACAC,EACIre,EAAM,OAAO,SAAUse,EAAM,CACzB,MAAO,CAAC7d,EAAS6d,CAAI,GAAKX,GAAS3d,CAAK,CAC5C,CAAC,EAAE,SAAW,GAEfoe,GAAaC,CACxB,CAEA,SAASE,GAAeve,EAAO,CAC3B,IAAI+d,EAAa9d,EAASD,CAAK,GAAK,CAACK,EAAcL,CAAK,EACpDge,EAAe,GACfC,EAAa,CACT,UACA,UACA,UACA,WACA,WACA,UACJ,EACAld,GACAmd,GAEJ,IAAKnd,GAAI,EAAGA,GAAIkd,EAAW,OAAQld,IAAK,EACpCmd,GAAWD,EAAWld,EAAC,EACvBid,EAAeA,GAAgB9d,EAAWF,EAAOke,EAAQ,EAG7D,OAAOH,GAAcC,CACzB,CAEA,SAASQ,GAAkBC,EAAUta,EAAK,CACtC,IAAIuC,EAAO+X,EAAS,KAAKta,EAAK,OAAQ,EAAI,EAC1C,OAAOuC,EAAO,GACR,WACAA,EAAO,GACL,WACAA,EAAO,EACL,UACAA,EAAO,EACL,UACAA,EAAO,EACL,UACAA,EAAO,EACL,WACA,UACpB,CAEA,SAASgY,GAAWC,EAAMC,EAAS,CAE3B,UAAU,SAAW,IAChB,UAAU,CAAC,EAGLhB,GAAc,UAAU,CAAC,CAAC,GACjCe,EAAO,UAAU,CAAC,EAClBC,EAAU,QACHL,GAAe,UAAU,CAAC,CAAC,IAClCK,EAAU,UAAU,CAAC,EACrBD,EAAO,SAPPA,EAAO,OACPC,EAAU,SAWlB,IAAIza,EAAMwa,GAAQjH,GAAY,EAC1BmH,EAAMvD,GAAgBnX,EAAK,IAAI,EAAE,QAAQ,KAAK,EAC9ChD,GAASvB,EAAM,eAAe,KAAMif,CAAG,GAAK,WAC5Cza,GACIwa,IACCnb,GAAWmb,EAAQzd,EAAM,CAAC,EACrByd,EAAQzd,EAAM,EAAE,KAAK,KAAMgD,CAAG,EAC9Bya,EAAQzd,EAAM,GAE5B,OAAO,KAAK,OACRiD,IAAU,KAAK,WAAW,EAAE,SAASjD,GAAQ,KAAMuW,GAAYvT,CAAG,CAAC,CACvE,CACJ,CAEA,SAAS2a,IAAQ,CACb,OAAO,IAAInc,GAAO,IAAI,CAC1B,CAEA,SAASoc,GAAQ/e,EAAO6G,EAAO,CAC3B,IAAImY,EAAanc,EAAS7C,CAAK,EAAIA,EAAQ0X,GAAY1X,CAAK,EAC5D,OAAM,KAAK,QAAQ,GAAKgf,EAAW,QAAQ,GAG3CnY,EAAQD,GAAeC,CAAK,GAAK,cAC7BA,IAAU,cACH,KAAK,QAAQ,EAAImY,EAAW,QAAQ,EAEpCA,EAAW,QAAQ,EAAI,KAAK,MAAM,EAAE,QAAQnY,CAAK,EAAE,QAAQ,GAN3D,EAQf,CAEA,SAASoY,GAASjf,EAAO6G,EAAO,CAC5B,IAAImY,EAAanc,EAAS7C,CAAK,EAAIA,EAAQ0X,GAAY1X,CAAK,EAC5D,OAAM,KAAK,QAAQ,GAAKgf,EAAW,QAAQ,GAG3CnY,EAAQD,GAAeC,CAAK,GAAK,cAC7BA,IAAU,cACH,KAAK,QAAQ,EAAImY,EAAW,QAAQ,EAEpC,KAAK,MAAM,EAAE,MAAMnY,CAAK,EAAE,QAAQ,EAAImY,EAAW,QAAQ,GANzD,EAQf,CAEA,SAASE,GAAU3c,EAAMD,EAAIuE,EAAOsY,EAAa,CAC7C,IAAIC,GAAYvc,EAASN,CAAI,EAAIA,EAAOmV,GAAYnV,CAAI,EACpD8c,GAAUxc,EAASP,CAAE,EAAIA,EAAKoV,GAAYpV,CAAE,EAChD,OAAM,KAAK,QAAQ,GAAK8c,GAAU,QAAQ,GAAKC,GAAQ,QAAQ,GAG/DF,EAAcA,GAAe,MAExBA,EAAY,CAAC,IAAM,IACd,KAAK,QAAQC,GAAWvY,CAAK,EAC7B,CAAC,KAAK,SAASuY,GAAWvY,CAAK,KACpCsY,EAAY,CAAC,IAAM,IACd,KAAK,SAASE,GAASxY,CAAK,EAC5B,CAAC,KAAK,QAAQwY,GAASxY,CAAK,IAT3B,EAWf,CAEA,SAASyY,GAAOtf,EAAO6G,EAAO,CAC1B,IAAImY,EAAanc,EAAS7C,CAAK,EAAIA,EAAQ0X,GAAY1X,CAAK,EACxDuf,EACJ,OAAM,KAAK,QAAQ,GAAKP,EAAW,QAAQ,GAG3CnY,EAAQD,GAAeC,CAAK,GAAK,cAC7BA,IAAU,cACH,KAAK,QAAQ,IAAMmY,EAAW,QAAQ,GAE7CO,EAAUP,EAAW,QAAQ,EAEzB,KAAK,MAAM,EAAE,QAAQnY,CAAK,EAAE,QAAQ,GAAK0Y,GACzCA,GAAW,KAAK,MAAM,EAAE,MAAM1Y,CAAK,EAAE,QAAQ,IAT1C,EAYf,CAEA,SAAS2Y,GAAcxf,EAAO6G,EAAO,CACjC,OAAO,KAAK,OAAO7G,EAAO6G,CAAK,GAAK,KAAK,QAAQ7G,EAAO6G,CAAK,CACjE,CAEA,SAAS4Y,GAAezf,EAAO6G,EAAO,CAClC,OAAO,KAAK,OAAO7G,EAAO6G,CAAK,GAAK,KAAK,SAAS7G,EAAO6G,CAAK,CAClE,CAEA,SAASH,GAAK1G,EAAO6G,EAAO6Y,EAAS,CACjC,IAAIC,EAAMC,GAAWxb,GAErB,GAAI,CAAC,KAAK,QAAQ,EACd,MAAO,KAKX,GAFAub,EAAOrE,GAAgBtb,EAAO,IAAI,EAE9B,CAAC2f,EAAK,QAAQ,EACd,MAAO,KAOX,OAJAC,IAAaD,EAAK,UAAU,EAAI,KAAK,UAAU,GAAK,IAEpD9Y,EAAQD,GAAeC,CAAK,EAEpBA,EAAO,CACX,IAAK,OACDzC,GAASyb,GAAU,KAAMF,CAAI,EAAI,GACjC,MACJ,IAAK,QACDvb,GAASyb,GAAU,KAAMF,CAAI,EAC7B,MACJ,IAAK,UACDvb,GAASyb,GAAU,KAAMF,CAAI,EAAI,EACjC,MACJ,IAAK,SACDvb,IAAU,KAAOub,GAAQ,IACzB,MACJ,IAAK,SACDvb,IAAU,KAAOub,GAAQ,IACzB,MACJ,IAAK,OACDvb,IAAU,KAAOub,GAAQ,KACzB,MACJ,IAAK,MACDvb,IAAU,KAAOub,EAAOC,IAAa,MACrC,MACJ,IAAK,OACDxb,IAAU,KAAOub,EAAOC,IAAa,OACrC,MACJ,QACIxb,GAAS,KAAOub,CACxB,CAEA,OAAOD,EAAUtb,GAASoF,GAASpF,EAAM,CAC7C,CAEA,SAASyb,GAAU1f,EAAGC,EAAG,CACrB,GAAID,EAAE,KAAK,EAAIC,EAAE,KAAK,EAGlB,MAAO,CAACyf,GAAUzf,EAAGD,CAAC,EAG1B,IAAI2f,GAAkB1f,EAAE,KAAK,EAAID,EAAE,KAAK,GAAK,IAAMC,EAAE,MAAM,EAAID,EAAE,MAAM,GAEnE4f,EAAS5f,EAAE,MAAM,EAAE,IAAI2f,EAAgB,QAAQ,EAC/CE,GACAC,GAEJ,OAAI7f,EAAI2f,EAAS,GACbC,GAAU7f,EAAE,MAAM,EAAE,IAAI2f,EAAiB,EAAG,QAAQ,EAEpDG,IAAU7f,EAAI2f,IAAWA,EAASC,MAElCA,GAAU7f,EAAE,MAAM,EAAE,IAAI2f,EAAiB,EAAG,QAAQ,EAEpDG,IAAU7f,EAAI2f,IAAWC,GAAUD,IAIhC,EAAED,EAAiBG,KAAW,CACzC,CAEArgB,EAAM,cAAgB,uBACtBA,EAAM,iBAAmB,yBAEzB,SAASsgB,IAAW,CAChB,OAAO,KAAK,MAAM,EAAE,OAAO,IAAI,EAAE,OAAO,kCAAkC,CAC9E,CAEA,SAASC,GAAYC,EAAY,CAC7B,GAAI,CAAC,KAAK,QAAQ,EACd,OAAO,KAEX,IAAIC,EAAMD,IAAe,GACrB3e,EAAI4e,EAAM,KAAK,MAAM,EAAE,IAAI,EAAI,KACnC,OAAI5e,EAAE,KAAK,EAAI,GAAKA,EAAE,KAAK,EAAI,KACpBgE,GACHhE,EACA4e,EACM,iCACA,8BACV,EAEA5c,GAAW,KAAK,UAAU,WAAW,EAEjC4c,EACO,KAAK,OAAO,EAAE,YAAY,EAE1B,IAAI,KAAK,KAAK,QAAQ,EAAI,KAAK,UAAU,EAAI,GAAK,GAAI,EACxD,YAAY,EACZ,QAAQ,IAAK5a,GAAahE,EAAG,GAAG,CAAC,EAGvCgE,GACHhE,EACA4e,EAAM,+BAAiC,4BAC3C,CACJ,CAQA,SAASC,IAAU,CACf,GAAI,CAAC,KAAK,QAAQ,EACd,MAAO,qBAAuB,KAAK,GAAK,OAE5C,IAAIlb,EAAO,SACPmb,EAAO,GACPC,EACArW,EACAsW,GACAC,GACJ,OAAK,KAAK,QAAQ,IACdtb,EAAO,KAAK,UAAU,IAAM,EAAI,aAAe,mBAC/Cmb,EAAO,KAEXC,EAAS,IAAMpb,EAAO,MACtB+E,EAAO,GAAK,KAAK,KAAK,GAAK,KAAK,KAAK,GAAK,KAAO,OAAS,SAC1DsW,GAAW,wBACXC,GAASH,EAAO,OAET,KAAK,OAAOC,EAASrW,EAAOsW,GAAWC,EAAM,CACxD,CAEA,SAASvf,GAAOwf,EAAa,CACpBA,IACDA,EAAc,KAAK,MAAM,EACnB/gB,EAAM,iBACNA,EAAM,eAEhB,IAAIwE,EAASqB,GAAa,KAAMkb,CAAW,EAC3C,OAAO,KAAK,WAAW,EAAE,WAAWvc,CAAM,CAC9C,CAEA,SAAS7B,GAAKoc,EAAMrY,EAAe,CAC/B,OACI,KAAK,QAAQ,IACXzD,EAAS8b,CAAI,GAAKA,EAAK,QAAQ,GAAMjH,GAAYiH,CAAI,EAAE,QAAQ,GAE1D/E,GAAe,CAAE,GAAI,KAAM,KAAM+E,CAAK,CAAC,EACzC,OAAO,KAAK,OAAO,CAAC,EACpB,SAAS,CAACrY,CAAa,EAErB,KAAK,WAAW,EAAE,YAAY,CAE7C,CAEA,SAASsa,GAAQta,EAAe,CAC5B,OAAO,KAAK,KAAKoR,GAAY,EAAGpR,CAAa,CACjD,CAEA,SAAShE,GAAGqc,EAAMrY,EAAe,CAC7B,OACI,KAAK,QAAQ,IACXzD,EAAS8b,CAAI,GAAKA,EAAK,QAAQ,GAAMjH,GAAYiH,CAAI,EAAE,QAAQ,GAE1D/E,GAAe,CAAE,KAAM,KAAM,GAAI+E,CAAK,CAAC,EACzC,OAAO,KAAK,OAAO,CAAC,EACpB,SAAS,CAACrY,CAAa,EAErB,KAAK,WAAW,EAAE,YAAY,CAE7C,CAEA,SAASua,GAAMva,EAAe,CAC1B,OAAO,KAAK,GAAGoR,GAAY,EAAGpR,CAAa,CAC/C,CAKA,SAASlF,GAAOgC,EAAK,CACjB,IAAI0d,EAEJ,OAAI1d,IAAQ,OACD,KAAK,QAAQ,OAEpB0d,EAAgBlN,GAAUxQ,CAAG,EACzB0d,GAAiB,OACjB,KAAK,QAAUA,GAEZ,KAEf,CAEA,IAAIC,GAAO/d,GACP,kJACA,SAAUI,EAAK,CACX,OAAIA,IAAQ,OACD,KAAK,WAAW,EAEhB,KAAK,OAAOA,CAAG,CAE9B,CACJ,EAEA,SAAS0F,IAAa,CAClB,OAAO,KAAK,OAChB,CAEA,IAAIkY,GAAgB,IAChBC,GAAgB,GAAKD,GACrBE,GAAc,GAAKD,GACnBE,IAAoB,IAAM,IAAM,IAAM,GAAKD,GAG/C,SAASE,GAAMC,EAAUC,EAAS,CAC9B,OAASD,EAAWC,EAAWA,GAAWA,CAC9C,CAEA,SAASC,GAAiB1W,EAAGpJ,EAAG6J,EAAG,CAE/B,OAAIT,EAAI,KAAOA,GAAK,EAET,IAAI,KAAKA,EAAI,IAAKpJ,EAAG6J,CAAC,EAAI6V,GAE1B,IAAI,KAAKtW,EAAGpJ,EAAG6J,CAAC,EAAE,QAAQ,CAEzC,CAEA,SAASkW,GAAe3W,EAAGpJ,EAAG6J,EAAG,CAE7B,OAAIT,EAAI,KAAOA,GAAK,EAET,KAAK,IAAIA,EAAI,IAAKpJ,EAAG6J,CAAC,EAAI6V,GAE1B,KAAK,IAAItW,EAAGpJ,EAAG6J,CAAC,CAE/B,CAEA,SAASmW,GAAQ5a,EAAO,CACpB,IAAI8X,EAAM+C,EAEV,GADA7a,EAAQD,GAAeC,CAAK,EACxBA,IAAU,QAAaA,IAAU,eAAiB,CAAC,KAAK,QAAQ,EAChE,OAAO,KAKX,OAFA6a,EAAc,KAAK,OAASF,GAAiBD,GAErC1a,EAAO,CACX,IAAK,OACD8X,EAAO+C,EAAY,KAAK,KAAK,EAAG,EAAG,CAAC,EACpC,MACJ,IAAK,UACD/C,EAAO+C,EACH,KAAK,KAAK,EACV,KAAK,MAAM,EAAK,KAAK,MAAM,EAAI,EAC/B,CACJ,EACA,MACJ,IAAK,QACD/C,EAAO+C,EAAY,KAAK,KAAK,EAAG,KAAK,MAAM,EAAG,CAAC,EAC/C,MACJ,IAAK,OACD/C,EAAO+C,EACH,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,KAAK,EAAI,KAAK,QAAQ,CAC/B,EACA,MACJ,IAAK,UACD/C,EAAO+C,EACH,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,KAAK,GAAK,KAAK,WAAW,EAAI,EACvC,EACA,MACJ,IAAK,MACL,IAAK,OACD/C,EAAO+C,EAAY,KAAK,KAAK,EAAG,KAAK,MAAM,EAAG,KAAK,KAAK,CAAC,EACzD,MACJ,IAAK,OACD/C,EAAO,KAAK,GAAG,QAAQ,EACvBA,GAAQyC,GACJzC,GAAQ,KAAK,OAAS,EAAI,KAAK,UAAU,EAAIsC,IAC7CC,EACJ,EACA,MACJ,IAAK,SACDvC,EAAO,KAAK,GAAG,QAAQ,EACvBA,GAAQyC,GAAMzC,EAAMsC,EAAa,EACjC,MACJ,IAAK,SACDtC,EAAO,KAAK,GAAG,QAAQ,EACvBA,GAAQyC,GAAMzC,EAAMqC,EAAa,EACjC,KACR,CAEA,YAAK,GAAG,QAAQrC,CAAI,EACpB/e,EAAM,aAAa,KAAM,EAAI,EACtB,IACX,CAEA,SAAS+hB,GAAM9a,EAAO,CAClB,IAAI8X,EAAM+C,EAEV,GADA7a,EAAQD,GAAeC,CAAK,EACxBA,IAAU,QAAaA,IAAU,eAAiB,CAAC,KAAK,QAAQ,EAChE,OAAO,KAKX,OAFA6a,EAAc,KAAK,OAASF,GAAiBD,GAErC1a,EAAO,CACX,IAAK,OACD8X,EAAO+C,EAAY,KAAK,KAAK,EAAI,EAAG,EAAG,CAAC,EAAI,EAC5C,MACJ,IAAK,UACD/C,EACI+C,EACI,KAAK,KAAK,EACV,KAAK,MAAM,EAAK,KAAK,MAAM,EAAI,EAAK,EACpC,CACJ,EAAI,EACR,MACJ,IAAK,QACD/C,EAAO+C,EAAY,KAAK,KAAK,EAAG,KAAK,MAAM,EAAI,EAAG,CAAC,EAAI,EACvD,MACJ,IAAK,OACD/C,EACI+C,EACI,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,KAAK,EAAI,KAAK,QAAQ,EAAI,CACnC,EAAI,EACR,MACJ,IAAK,UACD/C,EACI+C,EACI,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,KAAK,GAAK,KAAK,WAAW,EAAI,GAAK,CAC5C,EAAI,EACR,MACJ,IAAK,MACL,IAAK,OACD/C,EAAO+C,EAAY,KAAK,KAAK,EAAG,KAAK,MAAM,EAAG,KAAK,KAAK,EAAI,CAAC,EAAI,EACjE,MACJ,IAAK,OACD/C,EAAO,KAAK,GAAG,QAAQ,EACvBA,GACIuC,GACAE,GACIzC,GAAQ,KAAK,OAAS,EAAI,KAAK,UAAU,EAAIsC,IAC7CC,EACJ,EACA,EACJ,MACJ,IAAK,SACDvC,EAAO,KAAK,GAAG,QAAQ,EACvBA,GAAQsC,GAAgBG,GAAMzC,EAAMsC,EAAa,EAAI,EACrD,MACJ,IAAK,SACDtC,EAAO,KAAK,GAAG,QAAQ,EACvBA,GAAQqC,GAAgBI,GAAMzC,EAAMqC,EAAa,EAAI,EACrD,KACR,CAEA,YAAK,GAAG,QAAQrC,CAAI,EACpB/e,EAAM,aAAa,KAAM,EAAI,EACtB,IACX,CAEA,SAASgiB,IAAU,CACf,OAAO,KAAK,GAAG,QAAQ,GAAK,KAAK,SAAW,GAAK,GACrD,CAEA,SAASC,IAAO,CACZ,OAAO,KAAK,MAAM,KAAK,QAAQ,EAAI,GAAI,CAC3C,CAEA,SAASC,IAAS,CACd,OAAO,IAAI,KAAK,KAAK,QAAQ,CAAC,CAClC,CAEA,SAASC,IAAU,CACf,IAAItgB,EAAI,KACR,MAAO,CACHA,EAAE,KAAK,EACPA,EAAE,MAAM,EACRA,EAAE,KAAK,EACPA,EAAE,KAAK,EACPA,EAAE,OAAO,EACTA,EAAE,OAAO,EACTA,EAAE,YAAY,CAClB,CACJ,CAEA,SAASugB,IAAW,CAChB,IAAIvgB,EAAI,KACR,MAAO,CACH,MAAOA,EAAE,KAAK,EACd,OAAQA,EAAE,MAAM,EAChB,KAAMA,EAAE,KAAK,EACb,MAAOA,EAAE,MAAM,EACf,QAASA,EAAE,QAAQ,EACnB,QAASA,EAAE,QAAQ,EACnB,aAAcA,EAAE,aAAa,CACjC,CACJ,CAEA,SAASwgB,IAAS,CAEd,OAAO,KAAK,QAAQ,EAAI,KAAK,YAAY,EAAI,IACjD,CAEA,SAASC,IAAY,CACjB,OAAOpgB,EAAQ,IAAI,CACvB,CAEA,SAASqgB,IAAe,CACpB,OAAOlhB,EAAO,CAAC,EAAGO,EAAgB,IAAI,CAAC,CAC3C,CAEA,SAAS4gB,GAAY,CACjB,OAAO5gB,EAAgB,IAAI,EAAE,QACjC,CAEA,SAAS6gB,GAAe,CACpB,MAAO,CACH,MAAO,KAAK,GACZ,OAAQ,KAAK,GACb,OAAQ,KAAK,QACb,MAAO,KAAK,OACZ,OAAQ,KAAK,OACjB,CACJ,CAEArd,GAAe,IAAK,EAAG,EAAG,SAAS,EACnCA,GAAe,KAAM,EAAG,EAAG,SAAS,EACpCA,GAAe,MAAO,EAAG,EAAG,SAAS,EACrCA,GAAe,OAAQ,EAAG,EAAG,SAAS,EACtCA,GAAe,QAAS,EAAG,EAAG,WAAW,EAEzCA,GAAe,IAAK,CAAC,IAAK,CAAC,EAAG,KAAM,SAAS,EAC7CA,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,EAAG,SAAS,EAC3CA,GAAe,IAAK,CAAC,MAAO,CAAC,EAAG,EAAG,SAAS,EAC5CA,GAAe,IAAK,CAAC,OAAQ,CAAC,EAAG,EAAG,SAAS,EAE7C0D,GAAc,IAAK4Z,EAAY,EAC/B5Z,GAAc,KAAM4Z,EAAY,EAChC5Z,GAAc,MAAO4Z,EAAY,EACjC5Z,GAAc,OAAQ6Z,EAAY,EAClC7Z,GAAc,QAAS8Z,EAAc,EAErC1Y,GACI,CAAC,IAAK,KAAM,MAAO,OAAQ,OAAO,EAClC,SAAU9J,EAAOuF,EAAO3C,EAAQqC,EAAO,CACnC,IAAI6S,GAAMlV,EAAO,QAAQ,UAAU5C,EAAOiF,EAAOrC,EAAO,OAAO,EAC3DkV,GACAtW,EAAgBoB,CAAM,EAAE,IAAMkV,GAE9BtW,EAAgBoB,CAAM,EAAE,WAAa5C,CAE7C,CACJ,EAEA0I,GAAc,IAAKT,EAAa,EAChCS,GAAc,KAAMT,EAAa,EACjCS,GAAc,MAAOT,EAAa,EAClCS,GAAc,OAAQT,EAAa,EACnCS,GAAc,KAAM+Z,EAAmB,EAEvC3Y,GAAc,CAAC,IAAK,KAAM,MAAO,MAAM,EAAGM,EAAI,EAC9CN,GAAc,CAAC,IAAI,EAAG,SAAU9J,EAAOuF,EAAO3C,EAAQqC,EAAO,CACzD,IAAI4P,GACAjS,EAAO,QAAQ,uBACfiS,GAAQ7U,EAAM,MAAM4C,EAAO,QAAQ,oBAAoB,GAGvDA,EAAO,QAAQ,oBACf2C,EAAM6E,EAAI,EAAIxH,EAAO,QAAQ,oBAAoB5C,EAAO6U,EAAK,EAE7DtP,EAAM6E,EAAI,EAAI,SAASpK,EAAO,EAAE,CAExC,CAAC,EAED,SAAS0iB,GAAWjhB,EAAGN,EAAQ,CAC3B,IAAIJ,EACA6T,EACAnJ,GACAkX,GAAO,KAAK,OAAS/O,GAAU,IAAI,EAAE,MACzC,IAAK7S,EAAI,EAAG6T,EAAI+N,GAAK,OAAQ5hB,EAAI6T,EAAG,EAAE7T,EAAG,CACrC,OAAQ,OAAO4hB,GAAK5hB,CAAC,EAAE,MAAO,CAC1B,IAAK,SAED0K,GAAO7L,EAAM+iB,GAAK5hB,CAAC,EAAE,KAAK,EAAE,QAAQ,KAAK,EACzC4hB,GAAK5hB,CAAC,EAAE,MAAQ0K,GAAK,QAAQ,EAC7B,KACR,CAEA,OAAQ,OAAOkX,GAAK5hB,CAAC,EAAE,MAAO,CAC1B,IAAK,YACD4hB,GAAK5hB,CAAC,EAAE,MAAQ,IAChB,MACJ,IAAK,SAED0K,GAAO7L,EAAM+iB,GAAK5hB,CAAC,EAAE,KAAK,EAAE,QAAQ,KAAK,EAAE,QAAQ,EACnD4hB,GAAK5hB,CAAC,EAAE,MAAQ0K,GAAK,QAAQ,EAC7B,KACR,CACJ,CACA,OAAOkX,EACX,CAEA,SAASC,GAAgBC,EAAS1hB,EAAQE,EAAQ,CAC9C,IAAIN,EACA6T,GACA+N,GAAO,KAAK,KAAK,EACjBnf,GACAsf,GACAC,GAGJ,IAFAF,EAAUA,EAAQ,YAAY,EAEzB9hB,EAAI,EAAG6T,GAAI+N,GAAK,OAAQ5hB,EAAI6T,GAAG,EAAE7T,EAKlC,GAJAyC,GAAOmf,GAAK5hB,CAAC,EAAE,KAAK,YAAY,EAChC+hB,GAAOH,GAAK5hB,CAAC,EAAE,KAAK,YAAY,EAChCgiB,GAASJ,GAAK5hB,CAAC,EAAE,OAAO,YAAY,EAEhCM,EACA,OAAQF,EAAQ,CACZ,IAAK,IACL,IAAK,KACL,IAAK,MACD,GAAI2hB,KAASD,EACT,OAAOF,GAAK5hB,CAAC,EAEjB,MAEJ,IAAK,OACD,GAAIyC,KAASqf,EACT,OAAOF,GAAK5hB,CAAC,EAEjB,MAEJ,IAAK,QACD,GAAIgiB,KAAWF,EACX,OAAOF,GAAK5hB,CAAC,EAEjB,KACR,SACO,CAACyC,GAAMsf,GAAMC,EAAM,EAAE,QAAQF,CAAO,GAAK,EAChD,OAAOF,GAAK5hB,CAAC,CAGzB,CAEA,SAASiiB,GAAsBlL,EAAK3N,EAAM,CACtC,IAAI8Y,EAAMnL,EAAI,OAASA,EAAI,MAAQ,EAAK,GACxC,OAAI3N,IAAS,OACFvK,EAAMkY,EAAI,KAAK,EAAE,KAAK,EAEtBlY,EAAMkY,EAAI,KAAK,EAAE,KAAK,GAAK3N,EAAO2N,EAAI,QAAUmL,CAE/D,CAEA,SAASC,IAAa,CAClB,IAAIniB,EACA6T,EACAnS,EACAkgB,EAAO,KAAK,WAAW,EAAE,KAAK,EAClC,IAAK5hB,EAAI,EAAG6T,EAAI+N,EAAK,OAAQ5hB,EAAI6T,EAAG,EAAE7T,EAOlC,GALA0B,EAAM,KAAK,MAAM,EAAE,QAAQ,KAAK,EAAE,QAAQ,EAEtCkgB,EAAK5hB,CAAC,EAAE,OAAS0B,GAAOA,GAAOkgB,EAAK5hB,CAAC,EAAE,OAGvC4hB,EAAK5hB,CAAC,EAAE,OAAS0B,GAAOA,GAAOkgB,EAAK5hB,CAAC,EAAE,MACvC,OAAO4hB,EAAK5hB,CAAC,EAAE,KAIvB,MAAO,EACX,CAEA,SAASoiB,IAAe,CACpB,IAAIpiB,EACA6T,EACAnS,EACAkgB,EAAO,KAAK,WAAW,EAAE,KAAK,EAClC,IAAK5hB,EAAI,EAAG6T,EAAI+N,EAAK,OAAQ5hB,EAAI6T,EAAG,EAAE7T,EAOlC,GALA0B,EAAM,KAAK,MAAM,EAAE,QAAQ,KAAK,EAAE,QAAQ,EAEtCkgB,EAAK5hB,CAAC,EAAE,OAAS0B,GAAOA,GAAOkgB,EAAK5hB,CAAC,EAAE,OAGvC4hB,EAAK5hB,CAAC,EAAE,OAAS0B,GAAOA,GAAOkgB,EAAK5hB,CAAC,EAAE,MACvC,OAAO4hB,EAAK5hB,CAAC,EAAE,OAIvB,MAAO,EACX,CAEA,SAASqiB,IAAa,CAClB,IAAIriB,EACA6T,EACAnS,EACAkgB,EAAO,KAAK,WAAW,EAAE,KAAK,EAClC,IAAK5hB,EAAI,EAAG6T,EAAI+N,EAAK,OAAQ5hB,EAAI6T,EAAG,EAAE7T,EAOlC,GALA0B,EAAM,KAAK,MAAM,EAAE,QAAQ,KAAK,EAAE,QAAQ,EAEtCkgB,EAAK5hB,CAAC,EAAE,OAAS0B,GAAOA,GAAOkgB,EAAK5hB,CAAC,EAAE,OAGvC4hB,EAAK5hB,CAAC,EAAE,OAAS0B,GAAOA,GAAOkgB,EAAK5hB,CAAC,EAAE,MACvC,OAAO4hB,EAAK5hB,CAAC,EAAE,KAIvB,MAAO,EACX,CAEA,SAASsiB,IAAa,CAClB,IAAItiB,EACA6T,EACAqO,EACAxgB,EACAkgB,GAAO,KAAK,WAAW,EAAE,KAAK,EAClC,IAAK5hB,EAAI,EAAG6T,EAAI+N,GAAK,OAAQ5hB,EAAI6T,EAAG,EAAE7T,EAMlC,GALAkiB,EAAMN,GAAK5hB,CAAC,EAAE,OAAS4hB,GAAK5hB,CAAC,EAAE,MAAQ,EAAK,GAG5C0B,EAAM,KAAK,MAAM,EAAE,QAAQ,KAAK,EAAE,QAAQ,EAGrCkgB,GAAK5hB,CAAC,EAAE,OAAS0B,GAAOA,GAAOkgB,GAAK5hB,CAAC,EAAE,OACvC4hB,GAAK5hB,CAAC,EAAE,OAAS0B,GAAOA,GAAOkgB,GAAK5hB,CAAC,EAAE,MAExC,OACK,KAAK,KAAK,EAAInB,EAAM+iB,GAAK5hB,CAAC,EAAE,KAAK,EAAE,KAAK,GAAKkiB,EAC9CN,GAAK5hB,CAAC,EAAE,OAKpB,OAAO,KAAK,KAAK,CACrB,CAEA,SAASuiB,GAAcza,EAAU,CAC7B,OAAK3I,EAAW,KAAM,gBAAgB,GAClCqjB,GAAiB,KAAK,IAAI,EAEvB1a,EAAW,KAAK,eAAiB,KAAK,UACjD,CAEA,SAAS2a,GAAc3a,EAAU,CAC7B,OAAK3I,EAAW,KAAM,gBAAgB,GAClCqjB,GAAiB,KAAK,IAAI,EAEvB1a,EAAW,KAAK,eAAiB,KAAK,UACjD,CAEA,SAAS4a,GAAgB5a,EAAU,CAC/B,OAAK3I,EAAW,KAAM,kBAAkB,GACpCqjB,GAAiB,KAAK,IAAI,EAEvB1a,EAAW,KAAK,iBAAmB,KAAK,UACnD,CAEA,SAASyZ,GAAazZ,EAAUzH,EAAQ,CACpC,OAAOA,EAAO,cAAcyH,CAAQ,CACxC,CAEA,SAAS0Z,GAAa1Z,EAAUzH,EAAQ,CACpC,OAAOA,EAAO,cAAcyH,CAAQ,CACxC,CAEA,SAAS2Z,GAAe3Z,EAAUzH,EAAQ,CACtC,OAAOA,EAAO,gBAAgByH,CAAQ,CAC1C,CAEA,SAAS4Z,GAAoB5Z,EAAUzH,EAAQ,CAC3C,OAAOA,EAAO,sBAAwB6G,EAC1C,CAEA,SAASsb,IAAmB,CACxB,IAAIG,EAAa,CAAC,EACdC,EAAa,CAAC,EACdC,EAAe,CAAC,EAChBlW,EAAc,CAAC,EACf3M,GACA6T,GACAiP,GACAC,GACAC,GACApB,GAAO,KAAK,KAAK,EAErB,IAAK5hB,GAAI,EAAG6T,GAAI+N,GAAK,OAAQ5hB,GAAI6T,GAAG,EAAE7T,GAClC8iB,GAAW3a,GAAYyZ,GAAK5hB,EAAC,EAAE,IAAI,EACnC+iB,GAAW5a,GAAYyZ,GAAK5hB,EAAC,EAAE,IAAI,EACnCgjB,GAAa7a,GAAYyZ,GAAK5hB,EAAC,EAAE,MAAM,EAEvC4iB,EAAW,KAAKE,EAAQ,EACxBH,EAAW,KAAKI,EAAQ,EACxBF,EAAa,KAAKG,EAAU,EAC5BrW,EAAY,KAAKmW,EAAQ,EACzBnW,EAAY,KAAKoW,EAAQ,EACzBpW,EAAY,KAAKqW,EAAU,EAG/B,KAAK,WAAa,IAAI,OAAO,KAAOrW,EAAY,KAAK,GAAG,EAAI,IAAK,GAAG,EACpE,KAAK,eAAiB,IAAI,OAAO,KAAOiW,EAAW,KAAK,GAAG,EAAI,IAAK,GAAG,EACvE,KAAK,eAAiB,IAAI,OAAO,KAAOD,EAAW,KAAK,GAAG,EAAI,IAAK,GAAG,EACvE,KAAK,iBAAmB,IAAI,OACxB,KAAOE,EAAa,KAAK,GAAG,EAAI,IAChC,GACJ,CACJ,CAIA5e,GAAe,EAAG,CAAC,KAAM,CAAC,EAAG,EAAG,UAAY,CACxC,OAAO,KAAK,SAAS,EAAI,GAC7B,CAAC,EAEDA,GAAe,EAAG,CAAC,KAAM,CAAC,EAAG,EAAG,UAAY,CACxC,OAAO,KAAK,YAAY,EAAI,GAChC,CAAC,EAED,SAASgf,GAAuB/e,EAAOgf,EAAQ,CAC3Cjf,GAAe,EAAG,CAACC,EAAOA,EAAM,MAAM,EAAG,EAAGgf,CAAM,CACtD,CAEAD,GAAuB,OAAQ,UAAU,EACzCA,GAAuB,QAAS,UAAU,EAC1CA,GAAuB,OAAQ,aAAa,EAC5CA,GAAuB,QAAS,aAAa,EAM7Ctb,GAAc,IAAKR,EAAW,EAC9BQ,GAAc,IAAKR,EAAW,EAC9BQ,GAAc,KAAMf,GAAWJ,EAAM,EACrCmB,GAAc,KAAMf,GAAWJ,EAAM,EACrCmB,GAAc,OAAQX,GAAWN,EAAM,EACvCiB,GAAc,OAAQX,GAAWN,EAAM,EACvCiB,GAAc,QAASV,GAAWN,EAAM,EACxCgB,GAAc,QAASV,GAAWN,EAAM,EAExCsC,GACI,CAAC,OAAQ,QAAS,OAAQ,OAAO,EACjC,SAAUhK,EAAOwO,EAAM5L,EAAQqC,EAAO,CAClCuJ,EAAKvJ,EAAM,OAAO,EAAG,CAAC,CAAC,EAAIwE,GAAMzJ,CAAK,CAC1C,CACJ,EAEAgK,GAAkB,CAAC,KAAM,IAAI,EAAG,SAAUhK,EAAOwO,EAAM5L,EAAQqC,EAAO,CAClEuJ,EAAKvJ,CAAK,EAAIrF,EAAM,kBAAkBI,CAAK,CAC/C,CAAC,EAID,SAASkkB,GAAelkB,EAAO,CAC3B,OAAOmkB,GAAqB,KACxB,KACAnkB,EACA,KAAK,KAAK,EACV,KAAK,QAAQ,EAAI,KAAK,WAAW,EAAE,MAAM,IACzC,KAAK,WAAW,EAAE,MAAM,IACxB,KAAK,WAAW,EAAE,MAAM,GAC5B,CACJ,CAEA,SAASokB,EAAkBpkB,EAAO,CAC9B,OAAOmkB,GAAqB,KACxB,KACAnkB,EACA,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,EACA,CACJ,CACJ,CAEA,SAASqkB,IAAoB,CACzB,OAAOpV,GAAY,KAAK,KAAK,EAAG,EAAG,CAAC,CACxC,CAEA,SAASqV,IAA2B,CAChC,OAAOrV,GAAY,KAAK,YAAY,EAAG,EAAG,CAAC,CAC/C,CAEA,SAASsV,IAAiB,CACtB,IAAIC,EAAW,KAAK,WAAW,EAAE,MACjC,OAAOvV,GAAY,KAAK,KAAK,EAAGuV,EAAS,IAAKA,EAAS,GAAG,CAC9D,CAEA,SAASC,IAAqB,CAC1B,IAAID,EAAW,KAAK,WAAW,EAAE,MACjC,OAAOvV,GAAY,KAAK,SAAS,EAAGuV,EAAS,IAAKA,EAAS,GAAG,CAClE,CAEA,SAASL,GAAqBnkB,EAAOwO,EAAMC,EAASN,EAAKC,GAAK,CAC1D,IAAIsW,GACJ,OAAI1kB,GAAS,KACF+O,GAAW,KAAMZ,EAAKC,EAAG,EAAE,MAElCsW,GAAczV,GAAYjP,EAAOmO,EAAKC,EAAG,EACrCI,EAAOkW,KACPlW,EAAOkW,IAEJC,GAAW,KAAK,KAAM3kB,EAAOwO,EAAMC,EAASN,EAAKC,EAAG,EAEnE,CAEA,SAASuW,GAAWrN,EAAU9I,EAAMC,EAASN,EAAKC,GAAK,CACnD,IAAIwW,GAAgBrW,GAAmB+I,EAAU9I,EAAMC,EAASN,EAAKC,EAAG,EACpE3C,GAAOwC,GAAc2W,GAAc,KAAM,EAAGA,GAAc,SAAS,EAEvE,YAAK,KAAKnZ,GAAK,eAAe,CAAC,EAC/B,KAAK,MAAMA,GAAK,YAAY,CAAC,EAC7B,KAAK,KAAKA,GAAK,WAAW,CAAC,EACpB,IACX,CAIAzG,GAAe,IAAK,EAAG,KAAM,SAAS,EAItC0D,GAAc,IAAKpB,EAAM,EACzBwC,GAAc,IAAK,SAAU9J,EAAOuF,EAAO,CACvCA,EAAM8E,EAAK,GAAKZ,GAAMzJ,CAAK,EAAI,GAAK,CACxC,CAAC,EAID,SAAS6kB,GAAc7kB,EAAO,CAC1B,OAAOA,GAAS,KACV,KAAK,MAAM,KAAK,MAAM,EAAI,GAAK,CAAC,EAChC,KAAK,OAAOA,EAAQ,GAAK,EAAK,KAAK,MAAM,EAAI,CAAE,CACzD,CAIAgF,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,KAAM,MAAM,EAI3C0D,GAAc,IAAKf,GAAWY,EAAsB,EACpDG,GAAc,KAAMf,GAAWJ,EAAM,EACrCmB,GAAc,KAAM,SAAUG,EAAUzH,EAAQ,CAE5C,OAAOyH,EACDzH,EAAO,yBAA2BA,EAAO,cACzCA,EAAO,8BACjB,CAAC,EAED0I,GAAc,CAAC,IAAK,IAAI,EAAGQ,EAAI,EAC/BR,GAAc,KAAM,SAAU9J,EAAOuF,EAAO,CACxCA,EAAM+E,EAAI,EAAIb,GAAMzJ,EAAM,MAAM2H,EAAS,EAAE,CAAC,CAAC,CACjD,CAAC,EAID,IAAImd,GAAmB9Z,GAAW,OAAQ,EAAI,EAI9ChG,GAAe,MAAO,CAAC,OAAQ,CAAC,EAAG,OAAQ,WAAW,EAItD0D,GAAc,MAAOZ,EAAS,EAC9BY,GAAc,OAAQlB,EAAM,EAC5BsC,GAAc,CAAC,MAAO,MAAM,EAAG,SAAU9J,EAAOuF,EAAO3C,EAAQ,CAC3DA,EAAO,WAAa6G,GAAMzJ,CAAK,CACnC,CAAC,EAMD,SAAS+kB,GAAgB/kB,EAAO,CAC5B,IAAI4O,EACA,KAAK,OACA,KAAK,MAAM,EAAE,QAAQ,KAAK,EAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,GAAK,KACnE,EAAI,EACR,OAAO5O,GAAS,KAAO4O,EAAY,KAAK,IAAI5O,EAAQ4O,EAAW,GAAG,CACtE,CAIA5J,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,EAAG,QAAQ,EAI1C0D,GAAc,IAAKf,GAAWa,EAAgB,EAC9CE,GAAc,KAAMf,GAAWJ,EAAM,EACrCuC,GAAc,CAAC,IAAK,IAAI,EAAGU,EAAM,EAIjC,IAAIwa,GAAeha,GAAW,UAAW,EAAK,EAI9ChG,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,EAAG,QAAQ,EAI1C0D,GAAc,IAAKf,GAAWa,EAAgB,EAC9CE,GAAc,KAAMf,GAAWJ,EAAM,EACrCuC,GAAc,CAAC,IAAK,IAAI,EAAGW,EAAM,EAIjC,IAAIwa,GAAeja,GAAW,UAAW,EAAK,EAI9ChG,GAAe,IAAK,EAAG,EAAG,UAAY,CAClC,MAAO,CAAC,EAAE,KAAK,YAAY,EAAI,IACnC,CAAC,EAEDA,GAAe,EAAG,CAAC,KAAM,CAAC,EAAG,EAAG,UAAY,CACxC,MAAO,CAAC,EAAE,KAAK,YAAY,EAAI,GACnC,CAAC,EAEDA,GAAe,EAAG,CAAC,MAAO,CAAC,EAAG,EAAG,aAAa,EAC9CA,GAAe,EAAG,CAAC,OAAQ,CAAC,EAAG,EAAG,UAAY,CAC1C,OAAO,KAAK,YAAY,EAAI,EAChC,CAAC,EACDA,GAAe,EAAG,CAAC,QAAS,CAAC,EAAG,EAAG,UAAY,CAC3C,OAAO,KAAK,YAAY,EAAI,GAChC,CAAC,EACDA,GAAe,EAAG,CAAC,SAAU,CAAC,EAAG,EAAG,UAAY,CAC5C,OAAO,KAAK,YAAY,EAAI,GAChC,CAAC,EACDA,GAAe,EAAG,CAAC,UAAW,CAAC,EAAG,EAAG,UAAY,CAC7C,OAAO,KAAK,YAAY,EAAI,GAChC,CAAC,EACDA,GAAe,EAAG,CAAC,WAAY,CAAC,EAAG,EAAG,UAAY,CAC9C,OAAO,KAAK,YAAY,EAAI,GAChC,CAAC,EACDA,GAAe,EAAG,CAAC,YAAa,CAAC,EAAG,EAAG,UAAY,CAC/C,OAAO,KAAK,YAAY,EAAI,GAChC,CAAC,EAID0D,GAAc,IAAKZ,GAAWR,EAAM,EACpCoB,GAAc,KAAMZ,GAAWP,EAAM,EACrCmB,GAAc,MAAOZ,GAAWN,EAAM,EAEtC,IAAIvC,GAAOigB,GACX,IAAKjgB,GAAQ,OAAQA,GAAM,QAAU,EAAGA,IAAS,IAC7CyD,GAAczD,GAAOgD,EAAa,EAGtC,SAASkd,GAAQnlB,EAAOuF,EAAO,CAC3BA,EAAMmF,EAAW,EAAIjB,IAAO,KAAOzJ,GAAS,GAAI,CACpD,CAEA,IAAKiF,GAAQ,IAAKA,GAAM,QAAU,EAAGA,IAAS,IAC1C6E,GAAc7E,GAAOkgB,EAAO,EAGhCD,GAAoBla,GAAW,eAAgB,EAAK,EAIpDhG,GAAe,IAAK,EAAG,EAAG,UAAU,EACpCA,GAAe,KAAM,EAAG,EAAG,UAAU,EAIrC,SAASogB,IAAc,CACnB,OAAO,KAAK,OAAS,MAAQ,EACjC,CAEA,SAASC,IAAc,CACnB,OAAO,KAAK,OAAS,6BAA+B,EACxD,CAEA,IAAIC,GAAQ3iB,GAAO,UAEnB2iB,GAAM,IAAM7H,GACZ6H,GAAM,SAAW5G,GACjB4G,GAAM,MAAQxG,GACdwG,GAAM,KAAO5e,GACb4e,GAAM,MAAQ3D,GACd2D,GAAM,OAASnkB,GACfmkB,GAAM,KAAO/iB,GACb+iB,GAAM,QAAU1E,GAChB0E,GAAM,GAAKhjB,GACXgjB,GAAM,MAAQzE,GACdyE,GAAM,IAAM5Z,GACZ4Z,GAAM,UAAYlD,EAClBkD,GAAM,QAAUvG,GAChBuG,GAAM,SAAWrG,GACjBqG,GAAM,UAAYpG,GAClBoG,GAAM,OAAShG,GACfgG,GAAM,cAAgB9F,GACtB8F,GAAM,eAAiB7F,GACvB6F,GAAM,QAAUpD,GAChBoD,GAAM,KAAOvE,GACbuE,GAAM,OAASlkB,GACfkkB,GAAM,WAAaxc,GACnBwc,GAAM,IAAMrM,GACZqM,GAAM,IAAMvM,GACZuM,GAAM,aAAenD,GACrBmD,GAAM,IAAM3Z,GACZ2Z,GAAM,QAAU7D,GAChB6D,GAAM,SAAW5H,GACjB4H,GAAM,QAAUvD,GAChBuD,GAAM,SAAWtD,GACjBsD,GAAM,OAASxD,GACfwD,GAAM,YAAcnF,GACpBmF,GAAM,QAAUhF,GACZ,OAAO,OAAW,KAAe,OAAO,KAAO,OAC/CgF,GAAM,OAAO,IAAI,4BAA4B,CAAC,EAAI,UAAY,CAC1D,MAAO,UAAY,KAAK,OAAO,EAAI,GACvC,GAEJA,GAAM,OAASrD,GACfqD,GAAM,SAAWpF,GACjBoF,GAAM,KAAOzD,GACbyD,GAAM,QAAU1D,GAChB0D,GAAM,aAAejD,EACrBiD,GAAM,QAAUpC,GAChBoC,GAAM,UAAYnC,GAClBmC,GAAM,QAAUlC,GAChBkC,GAAM,QAAUjC,GAChBiC,GAAM,KAAOva,GACbua,GAAM,WAAara,GACnBqa,GAAM,SAAWpB,GACjBoB,GAAM,YAAclB,EACpBkB,GAAM,QAAUA,GAAM,SAAWT,GACjCS,GAAM,MAAQpY,GACdoY,GAAM,YAAcnY,GACpBmY,GAAM,KAAOA,GAAM,MAAQ/V,GAC3B+V,GAAM,QAAUA,GAAM,SAAW9V,GACjC8V,GAAM,YAAcf,GACpBe,GAAM,gBAAkBb,GACxBa,GAAM,eAAiBjB,GACvBiB,GAAM,sBAAwBhB,GAC9BgB,GAAM,KAAOR,GACbQ,GAAM,IAAMA,GAAM,KAAO5U,GACzB4U,GAAM,QAAU1U,GAChB0U,GAAM,WAAazU,GACnByU,GAAM,UAAYP,GAClBO,GAAM,KAAOA,GAAM,MAAQrT,GAC3BqT,GAAM,OAASA,GAAM,QAAUN,GAC/BM,GAAM,OAASA,GAAM,QAAUL,GAC/BK,GAAM,YAAcA,GAAM,aAAeJ,GACzCI,GAAM,UAAY7J,GAClB6J,GAAM,IAAMvJ,GACZuJ,GAAM,MAAQtJ,GACdsJ,GAAM,UAAYrJ,GAClBqJ,GAAM,qBAAuBnJ,GAC7BmJ,GAAM,MAAQlJ,GACdkJ,GAAM,QAAUhJ,GAChBgJ,GAAM,YAAc/I,GACpB+I,GAAM,MAAQ9I,GACd8I,GAAM,MAAQ9I,GACd8I,GAAM,SAAWF,GACjBE,GAAM,SAAWD,GACjBC,GAAM,MAAQtiB,GACV,kDACA8hB,EACJ,EACAQ,GAAM,OAAStiB,GACX,mDACAkK,EACJ,EACAoY,GAAM,MAAQtiB,GACV,iDACA+H,EACJ,EACAua,GAAM,KAAOtiB,GACT,2GACA8Y,EACJ,EACAwJ,GAAM,aAAetiB,GACjB,0GACAqZ,EACJ,EAEA,SAASkJ,GAAWvlB,EAAO,CACvB,OAAO0X,GAAY1X,EAAQ,GAAI,CACnC,CAEA,SAASwlB,IAAe,CACpB,OAAO9N,GAAY,MAAM,KAAM,SAAS,EAAE,UAAU,CACxD,CAEA,SAAS+N,GAAmBlf,EAAQ,CAChC,OAAOA,CACX,CAEA,IAAImf,GAAU5hB,GAAO,UAErB4hB,GAAQ,SAAWzhB,GACnByhB,GAAQ,eAAiB7f,GACzB6f,GAAQ,YAAczf,GACtByf,GAAQ,QAAUvgB,GAClBugB,GAAQ,SAAWD,GACnBC,GAAQ,WAAaD,GACrBC,GAAQ,aAAerf,GACvBqf,GAAQ,WAAajf,GACrBif,GAAQ,IAAMhiB,GACdgiB,GAAQ,KAAOhD,GACfgD,GAAQ,UAAY9C,GACpB8C,GAAQ,gBAAkB1C,GAC1B0C,GAAQ,cAAgBlC,GACxBkC,GAAQ,cAAgBpC,GACxBoC,GAAQ,gBAAkBjC,GAE1BiC,GAAQ,OAAShZ,GACjBgZ,GAAQ,YAAc/Y,GACtB+Y,GAAQ,YAAc1Y,GACtB0Y,GAAQ,YAAcpY,GACtBoY,GAAQ,iBAAmBtY,GAC3BsY,GAAQ,KAAOvW,GACfuW,GAAQ,eAAiBpW,GACzBoW,GAAQ,eAAiBrW,GAEzBqW,GAAQ,SAAWvV,GACnBuV,GAAQ,YAAcpV,GACtBoV,GAAQ,cAAgBrV,GACxBqV,GAAQ,cAAgBjV,GAExBiV,GAAQ,cAAgB5U,GACxB4U,GAAQ,mBAAqB1U,GAC7B0U,GAAQ,iBAAmBzU,GAE3ByU,GAAQ,KAAO3T,GACf2T,GAAQ,SAAWxT,GAEnB,SAASyT,GAAMxkB,EAAQykB,EAAOC,EAAOC,EAAQ,CACzC,IAAI1kB,GAASwS,GAAU,EACnByM,GAAMnf,EAAU,EAAE,IAAI4kB,EAAQF,CAAK,EACvC,OAAOxkB,GAAOykB,CAAK,EAAExF,GAAKlf,CAAM,CACpC,CAEA,SAAS4kB,GAAe5kB,EAAQykB,EAAOC,EAAO,CAQ1C,GAPIplB,EAASU,CAAM,IACfykB,EAAQzkB,EACRA,EAAS,QAGbA,EAASA,GAAU,GAEfykB,GAAS,KACT,OAAOD,GAAMxkB,EAAQykB,EAAOC,EAAO,OAAO,EAG9C,IAAI9kB,EACAilB,GAAM,CAAC,EACX,IAAKjlB,EAAI,EAAGA,EAAI,GAAIA,IAChBilB,GAAIjlB,CAAC,EAAI4kB,GAAMxkB,EAAQJ,EAAG8kB,EAAO,OAAO,EAE5C,OAAOG,EACX,CAUA,SAASC,GAAiBC,EAAc/kB,EAAQykB,EAAOC,EAAO,CACtD,OAAOK,GAAiB,WACpBzlB,EAASU,CAAM,IACfykB,EAAQzkB,EACRA,EAAS,QAGbA,EAASA,GAAU,KAEnBA,EAAS+kB,EACTN,EAAQzkB,EACR+kB,EAAe,GAEXzlB,EAASU,CAAM,IACfykB,EAAQzkB,EACRA,EAAS,QAGbA,EAASA,GAAU,IAGvB,IAAIC,GAASwS,GAAU,EACnBuS,GAAQD,EAAe9kB,GAAO,MAAM,IAAM,EAC1CL,GACAilB,GAAM,CAAC,EAEX,GAAIJ,GAAS,KACT,OAAOD,GAAMxkB,GAASykB,EAAQO,IAAS,EAAGN,EAAO,KAAK,EAG1D,IAAK9kB,GAAI,EAAGA,GAAI,EAAGA,KACfilB,GAAIjlB,EAAC,EAAI4kB,GAAMxkB,GAASJ,GAAIolB,IAAS,EAAGN,EAAO,KAAK,EAExD,OAAOG,EACX,CAEA,SAASI,GAAWjlB,EAAQykB,EAAO,CAC/B,OAAOG,GAAe5kB,EAAQykB,EAAO,QAAQ,CACjD,CAEA,SAASS,GAAgBllB,EAAQykB,EAAO,CACpC,OAAOG,GAAe5kB,EAAQykB,EAAO,aAAa,CACtD,CAEA,SAASU,GAAaJ,EAAc/kB,EAAQykB,EAAO,CAC/C,OAAOK,GAAiBC,EAAc/kB,EAAQykB,EAAO,UAAU,CACnE,CAEA,SAASW,GAAkBL,EAAc/kB,EAAQykB,EAAO,CACpD,OAAOK,GAAiBC,EAAc/kB,EAAQykB,EAAO,eAAe,CACxE,CAEA,SAASY,GAAgBN,EAAc/kB,EAAQykB,EAAO,CAClD,OAAOK,GAAiBC,EAAc/kB,EAAQykB,EAAO,aAAa,CACtE,CAEAnS,GAAmB,KAAM,CACrB,KAAM,CACF,CACI,MAAO,aACP,MAAO,IACP,OAAQ,EACR,KAAM,cACN,OAAQ,KACR,KAAM,IACV,EACA,CACI,MAAO,aACP,MAAO,KACP,OAAQ,EACR,KAAM,gBACN,OAAQ,KACR,KAAM,IACV,CACJ,EACA,uBAAwB,uBACxB,QAAS,SAAUnP,EAAQ,CACvB,IAAIlE,EAAIkE,EAAS,GACbF,EACIqF,GAAOnF,EAAS,IAAO,EAAE,IAAM,EACzB,KACAlE,IAAM,EACJ,KACAA,IAAM,EACJ,KACAA,IAAM,EACJ,KACA,KACpB,OAAOkE,EAASF,CACpB,CACJ,CAAC,EAIDxE,EAAM,KAAOoD,GACT,wDACAyQ,EACJ,EACA7T,EAAM,SAAWoD,GACb,gEACA4Q,EACJ,EAEA,IAAI6S,GAAU,KAAK,IAEnB,SAASC,IAAM,CACX,IAAI/S,EAAO,KAAK,MAEhB,YAAK,cAAgB8S,GAAQ,KAAK,aAAa,EAC/C,KAAK,MAAQA,GAAQ,KAAK,KAAK,EAC/B,KAAK,QAAUA,GAAQ,KAAK,OAAO,EAEnC9S,EAAK,aAAe8S,GAAQ9S,EAAK,YAAY,EAC7CA,EAAK,QAAU8S,GAAQ9S,EAAK,OAAO,EACnCA,EAAK,QAAU8S,GAAQ9S,EAAK,OAAO,EACnCA,EAAK,MAAQ8S,GAAQ9S,EAAK,KAAK,EAC/BA,EAAK,OAAS8S,GAAQ9S,EAAK,MAAM,EACjCA,EAAK,MAAQ8S,GAAQ9S,EAAK,KAAK,EAExB,IACX,CAEA,SAASgT,GAAc7M,EAAU9Z,EAAO4J,EAAOuT,EAAW,CACtD,IAAInE,GAAQY,GAAe5Z,EAAO4J,CAAK,EAEvC,OAAAkQ,EAAS,eAAiBqD,EAAYnE,GAAM,cAC5Cc,EAAS,OAASqD,EAAYnE,GAAM,MACpCc,EAAS,SAAWqD,EAAYnE,GAAM,QAE/Bc,EAAS,QAAQ,CAC5B,CAGA,SAAS8M,GAAM5mB,EAAO4J,EAAO,CACzB,OAAO+c,GAAc,KAAM3mB,EAAO4J,EAAO,CAAC,CAC9C,CAGA,SAASid,GAAW7mB,EAAO4J,EAAO,CAC9B,OAAO+c,GAAc,KAAM3mB,EAAO4J,EAAO,EAAE,CAC/C,CAEA,SAASkd,GAAQxiB,EAAQ,CACrB,OAAIA,EAAS,EACF,KAAK,MAAMA,CAAM,EAEjB,KAAK,KAAKA,CAAM,CAE/B,CAEA,SAASyiB,IAAS,CACd,IAAI1M,EAAe,KAAK,cACpBF,EAAO,KAAK,MACZF,EAAS,KAAK,QACdtG,EAAO,KAAK,MACZyG,GACAhI,GACAD,GACA4H,GACAiN,GAIJ,OAES3M,GAAgB,GAAKF,GAAQ,GAAKF,GAAU,GAC5CI,GAAgB,GAAKF,GAAQ,GAAKF,GAAU,IAGjDI,GAAgByM,GAAQG,GAAahN,CAAM,EAAIE,CAAI,EAAI,MACvDA,EAAO,EACPF,EAAS,GAKbtG,EAAK,aAAe0G,EAAe,IAEnCD,GAAU5Q,GAAS6Q,EAAe,GAAI,EACtC1G,EAAK,QAAUyG,GAAU,GAEzBhI,GAAU5I,GAAS4Q,GAAU,EAAE,EAC/BzG,EAAK,QAAUvB,GAAU,GAEzBD,GAAQ3I,GAAS4I,GAAU,EAAE,EAC7BuB,EAAK,MAAQxB,GAAQ,GAErBgI,GAAQ3Q,GAAS2I,GAAQ,EAAE,EAG3B6U,GAAiBxd,GAAS0d,GAAa/M,CAAI,CAAC,EAC5CF,GAAU+M,GACV7M,GAAQ2M,GAAQG,GAAaD,EAAc,CAAC,EAG5CjN,GAAQvQ,GAASyQ,EAAS,EAAE,EAC5BA,GAAU,GAEVtG,EAAK,KAAOwG,EACZxG,EAAK,OAASsG,EACdtG,EAAK,MAAQoG,GAEN,IACX,CAEA,SAASmN,GAAa/M,EAAM,CAGxB,OAAQA,EAAO,KAAQ,MAC3B,CAEA,SAAS8M,GAAahN,EAAQ,CAE1B,OAAQA,EAAS,OAAU,IAC/B,CAEA,SAASkN,GAAGtgB,EAAO,CACf,GAAI,CAAC,KAAK,QAAQ,EACd,MAAO,KAEX,IAAIsT,EACAF,EACAI,EAAe,KAAK,cAIxB,GAFAxT,EAAQD,GAAeC,CAAK,EAExBA,IAAU,SAAWA,IAAU,WAAaA,IAAU,OAGtD,OAFAsT,EAAO,KAAK,MAAQE,EAAe,MACnCJ,EAAS,KAAK,QAAUiN,GAAa/M,CAAI,EACjCtT,EAAO,CACX,IAAK,QACD,OAAOoT,EACX,IAAK,UACD,OAAOA,EAAS,EACpB,IAAK,OACD,OAAOA,EAAS,EACxB,KAIA,QADAE,EAAO,KAAK,MAAQ,KAAK,MAAM8M,GAAa,KAAK,OAAO,CAAC,EACjDpgB,EAAO,CACX,IAAK,OACD,OAAOsT,EAAO,EAAIE,EAAe,OACrC,IAAK,MACD,OAAOF,EAAOE,EAAe,MACjC,IAAK,OACD,OAAOF,EAAO,GAAKE,EAAe,KACtC,IAAK,SACD,OAAOF,EAAO,KAAOE,EAAe,IACxC,IAAK,SACD,OAAOF,EAAO,MAAQE,EAAe,IAEzC,IAAK,cACD,OAAO,KAAK,MAAMF,EAAO,KAAK,EAAIE,EACtC,QACI,MAAM,IAAI,MAAM,gBAAkBxT,CAAK,CAC/C,CAER,CAEA,SAASugB,GAAOC,EAAO,CACnB,OAAO,UAAY,CACf,OAAO,KAAK,GAAGA,CAAK,CACxB,CACJ,CAEA,IAAIC,GAAiBF,GAAO,IAAI,EAC5BG,GAAYH,GAAO,GAAG,EACtBI,GAAYJ,GAAO,GAAG,EACtBK,GAAUL,GAAO,GAAG,EACpBM,GAASN,GAAO,GAAG,EACnBO,GAAUP,GAAO,GAAG,EACpBQ,GAAWR,GAAO,GAAG,EACrBS,GAAaT,GAAO,GAAG,EACvBU,GAAUV,GAAO,GAAG,EACpBW,GAAYT,GAEhB,SAASU,IAAU,CACf,OAAOpO,GAAe,IAAI,CAC9B,CAEA,SAASqO,GAAMphB,EAAO,CAClB,OAAAA,EAAQD,GAAeC,CAAK,EACrB,KAAK,QAAQ,EAAI,KAAKA,EAAQ,GAAG,EAAE,EAAI,GAClD,CAEA,SAASqhB,GAAW1kB,EAAM,CACtB,OAAO,UAAY,CACf,OAAO,KAAK,QAAQ,EAAI,KAAK,MAAMA,CAAI,EAAI,GAC/C,CACJ,CAEA,IAAI6W,GAAe6N,GAAW,cAAc,EACxC9N,GAAU8N,GAAW,SAAS,EAC9B9V,GAAU8V,GAAW,SAAS,EAC9B/V,GAAQ+V,GAAW,OAAO,EAC1B/N,GAAO+N,GAAW,MAAM,EACxBjO,GAASiO,GAAW,QAAQ,EAC5BnO,GAAQmO,GAAW,OAAO,EAE9B,SAAShO,IAAQ,CACb,OAAO1Q,GAAS,KAAK,KAAK,EAAI,CAAC,CACnC,CAEA,IAAI2e,GAAQ,KAAK,MACbC,GAAa,CACT,GAAI,GACJ,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,KACH,EAAG,EACP,EAGJ,SAASC,GAAkB9hB,EAAQjC,EAAQgC,EAAeE,EAAUpF,GAAQ,CACxE,OAAOA,GAAO,aAAakD,GAAU,EAAG,CAAC,CAACgC,EAAeC,EAAQC,CAAQ,CAC7E,CAEA,SAAS8hB,GAAeC,EAAgBjiB,EAAe8hB,EAAYhnB,EAAQ,CACvE,IAAI0Y,GAAWF,GAAe2O,CAAc,EAAE,IAAI,EAC9CnO,GAAU+N,GAAMrO,GAAS,GAAG,GAAG,CAAC,EAChC1H,GAAU+V,GAAMrO,GAAS,GAAG,GAAG,CAAC,EAChC3H,GAAQgW,GAAMrO,GAAS,GAAG,GAAG,CAAC,EAC9BK,GAAOgO,GAAMrO,GAAS,GAAG,GAAG,CAAC,EAC7BG,GAASkO,GAAMrO,GAAS,GAAG,GAAG,CAAC,EAC/BI,GAAQiO,GAAMrO,GAAS,GAAG,GAAG,CAAC,EAC9BC,GAAQoO,GAAMrO,GAAS,GAAG,GAAG,CAAC,EAC9B3Z,GACKia,IAAWgO,EAAW,IAAM,CAAC,IAAKhO,EAAO,GACzCA,GAAUgO,EAAW,GAAK,CAAC,KAAMhO,EAAO,GACxChI,IAAW,GAAK,CAAC,GAAG,GACpBA,GAAUgW,EAAW,GAAK,CAAC,KAAMhW,EAAO,GACxCD,IAAS,GAAK,CAAC,GAAG,GAClBA,GAAQiW,EAAW,GAAK,CAAC,KAAMjW,EAAK,GACpCgI,IAAQ,GAAK,CAAC,GAAG,GACjBA,GAAOiO,EAAW,GAAK,CAAC,KAAMjO,EAAI,EAE3C,OAAIiO,EAAW,GAAK,OAChBjoB,GACIA,IACC+Z,IAAS,GAAK,CAAC,GAAG,GAClBA,GAAQkO,EAAW,GAAK,CAAC,KAAMlO,EAAK,GAE7C/Z,GAAIA,IACC8Z,IAAU,GAAK,CAAC,GAAG,GACnBA,GAASmO,EAAW,GAAK,CAAC,KAAMnO,EAAM,GACtCF,IAAS,GAAK,CAAC,GAAG,GAAM,CAAC,KAAMA,EAAK,EAEzC5Z,GAAE,CAAC,EAAImG,EACPnG,GAAE,CAAC,EAAI,CAACooB,EAAiB,EACzBpoB,GAAE,CAAC,EAAIiB,EACAinB,GAAkB,MAAM,KAAMloB,EAAC,CAC1C,CAGA,SAASqoB,GAA2BC,EAAkB,CAClD,OAAIA,IAAqB,OACdN,GAEP,OAAOM,GAAqB,YAC5BN,GAAQM,EACD,IAEJ,EACX,CAGA,SAASC,GAA4BC,EAAWC,EAAO,CACnD,OAAIR,GAAWO,CAAS,IAAM,OACnB,GAEPC,IAAU,OACHR,GAAWO,CAAS,GAE/BP,GAAWO,CAAS,EAAIC,EACpBD,IAAc,MACdP,GAAW,GAAKQ,EAAQ,GAErB,GACX,CAEA,SAASC,GAASC,EAAeC,EAAe,CAC5C,GAAI,CAAC,KAAK,QAAQ,EACd,OAAO,KAAK,WAAW,EAAE,YAAY,EAGzC,IAAIC,EAAa,GACbC,EAAKb,GACLhnB,GACAgD,GAEJ,OAAI,OAAO0kB,GAAkB,WACzBC,EAAgBD,EAChBA,EAAgB,IAEhB,OAAOA,GAAkB,YACzBE,EAAaF,GAEb,OAAOC,GAAkB,WACzBE,EAAK,OAAO,OAAO,CAAC,EAAGb,GAAYW,CAAa,EAC5CA,EAAc,GAAK,MAAQA,EAAc,IAAM,OAC/CE,EAAG,GAAKF,EAAc,EAAI,IAIlC3nB,GAAS,KAAK,WAAW,EACzBgD,GAASkkB,GAAe,KAAM,CAACU,EAAYC,EAAI7nB,EAAM,EAEjD4nB,IACA5kB,GAAShD,GAAO,WAAW,CAAC,KAAMgD,EAAM,GAGrChD,GAAO,WAAWgD,EAAM,CACnC,CAEA,IAAI8kB,GAAQ,KAAK,IAEjB,SAASvkB,GAAKqH,EAAG,CACb,OAAQA,EAAI,IAAMA,EAAI,IAAM,CAACA,CACjC,CAEA,SAASmd,IAAgB,CAQrB,GAAI,CAAC,KAAK,QAAQ,EACd,OAAO,KAAK,WAAW,EAAE,YAAY,EAGzC,IAAI/O,EAAU8O,GAAM,KAAK,aAAa,EAAI,IACtC/O,EAAO+O,GAAM,KAAK,KAAK,EACvBjP,EAASiP,GAAM,KAAK,OAAO,EAC3B9W,EACAD,GACA4H,GACA9Q,GACAmgB,GAAQ,KAAK,UAAU,EACvBC,GACAC,GACAC,GACAC,GAEJ,OAAKJ,IAOLhX,EAAU5I,GAAS4Q,EAAU,EAAE,EAC/BjI,GAAQ3I,GAAS4I,EAAU,EAAE,EAC7BgI,GAAW,GACXhI,GAAW,GAGX2H,GAAQvQ,GAASyQ,EAAS,EAAE,EAC5BA,GAAU,GAGVhR,GAAImR,EAAUA,EAAQ,QAAQ,CAAC,EAAE,QAAQ,SAAU,EAAE,EAAI,GAEzDiP,GAAYD,GAAQ,EAAI,IAAM,GAC9BE,GAAS3kB,GAAK,KAAK,OAAO,IAAMA,GAAKykB,EAAK,EAAI,IAAM,GACpDG,GAAW5kB,GAAK,KAAK,KAAK,IAAMA,GAAKykB,EAAK,EAAI,IAAM,GACpDI,GAAU7kB,GAAK,KAAK,aAAa,IAAMA,GAAKykB,EAAK,EAAI,IAAM,GAGvDC,GACA,KACCtP,GAAQuP,GAASvP,GAAQ,IAAM,KAC/BE,EAASqP,GAASrP,EAAS,IAAM,KACjCE,EAAOoP,GAAWpP,EAAO,IAAM,KAC/BhI,IAASC,GAAWgI,EAAU,IAAM,KACpCjI,GAAQqX,GAAUrX,GAAQ,IAAM,KAChCC,EAAUoX,GAAUpX,EAAU,IAAM,KACpCgI,EAAUoP,GAAUvgB,GAAI,IAAM,KA9BxB,KAgCf,CAEA,IAAIwgB,GAAU5P,GAAS,UAEvB4P,GAAQ,QAAU/P,GAClB+P,GAAQ,IAAM/C,GACd+C,GAAQ,IAAM7C,GACd6C,GAAQ,SAAW5C,GACnB4C,GAAQ,GAAKtC,GACbsC,GAAQ,eAAiBnC,GACzBmC,GAAQ,UAAYlC,GACpBkC,GAAQ,UAAYjC,GACpBiC,GAAQ,QAAUhC,GAClBgC,GAAQ,OAAS/B,GACjB+B,GAAQ,QAAU9B,GAClB8B,GAAQ,SAAW7B,GACnB6B,GAAQ,WAAa5B,GACrB4B,GAAQ,QAAU3B,GAClB2B,GAAQ,QAAU1B,GAClB0B,GAAQ,QAAU1C,GAClB0C,GAAQ,MAAQzB,GAChByB,GAAQ,IAAMxB,GACdwB,GAAQ,aAAepP,GACvBoP,GAAQ,QAAUrP,GAClBqP,GAAQ,QAAUrX,GAClBqX,GAAQ,MAAQtX,GAChBsX,GAAQ,KAAOtP,GACfsP,GAAQ,MAAQvP,GAChBuP,GAAQ,OAASxP,GACjBwP,GAAQ,MAAQ1P,GAChB0P,GAAQ,SAAWZ,GACnBY,GAAQ,YAAcN,GACtBM,GAAQ,SAAWN,GACnBM,GAAQ,OAASN,GACjBM,GAAQ,OAASroB,GACjBqoB,GAAQ,WAAa3gB,GAErB2gB,GAAQ,YAAczmB,GAClB,sFACAmmB,EACJ,EACAM,GAAQ,KAAO1I,GAIf/b,GAAe,IAAK,EAAG,EAAG,MAAM,EAChCA,GAAe,IAAK,EAAG,EAAG,SAAS,EAInC0D,GAAc,IAAKR,EAAW,EAC9BQ,GAAc,IAAKL,EAAc,EACjCyB,GAAc,IAAK,SAAU9J,EAAOuF,EAAO3C,EAAQ,CAC/CA,EAAO,GAAK,IAAI,KAAK,WAAW5C,CAAK,EAAI,GAAI,CACjD,CAAC,EACD8J,GAAc,IAAK,SAAU9J,EAAOuF,EAAO3C,EAAQ,CAC/CA,EAAO,GAAK,IAAI,KAAK6G,GAAMzJ,CAAK,CAAC,CACrC,CAAC,EAID,OAAAJ,EAAM,QAAU,SAEhBC,EAAgB6X,EAAW,EAE3B9X,EAAM,GAAK0lB,GACX1lB,EAAM,IAAMwZ,GACZxZ,EAAM,IAAMyZ,GACZzZ,EAAM,IAAMuE,GACZvE,EAAM,IAAMsB,EACZtB,EAAM,KAAO2lB,GACb3lB,EAAM,OAASwmB,GACfxmB,EAAM,OAASc,EACfd,EAAM,OAAS6T,GACf7T,EAAM,QAAUsC,EAChBtC,EAAM,SAAWga,GACjBha,EAAM,SAAWiD,EACjBjD,EAAM,SAAW0mB,GACjB1mB,EAAM,UAAY4lB,GAClB5lB,EAAM,WAAagU,GACnBhU,EAAM,WAAa0a,GACnB1a,EAAM,YAAcymB,GACpBzmB,EAAM,YAAc4mB,GACpB5mB,EAAM,aAAeiU,GACrBjU,EAAM,aAAekU,GACrBlU,EAAM,QAAUoU,GAChBpU,EAAM,cAAgB2mB,GACtB3mB,EAAM,eAAiBgH,GACvBhH,EAAM,qBAAuB4oB,GAC7B5oB,EAAM,sBAAwB8oB,GAC9B9oB,EAAM,eAAiB4e,GACvB5e,EAAM,UAAY0lB,GAGlB1lB,EAAM,UAAY,CACd,eAAgB,mBAChB,uBAAwB,sBACxB,kBAAmB,0BACnB,KAAM,aACN,KAAM,QACN,aAAc,WACd,QAAS,eACT,KAAM,aACN,MAAO,SACX,EAEOA,CAEX,CAAE,ICvjLF,IAAA8pB,GAAAC,GAAA,CAAAC,GAAAC,KAAA,EAKC,SAA0CC,EAAMC,EAAS,CACtD,OAAOH,IAAY,UAAY,OAAOC,IAAW,SACnDA,GAAO,QAAUE,EAAQ,KAAmB,IAAiB,EACtD,OAAO,QAAW,YAAc,OAAO,IAC9C,OAAO,CAAC,SAAU,QAAQ,EAAGA,CAAO,EAC7B,OAAOH,IAAY,SAC1BA,GAAQ,aAAkBG,EAAQ,KAAmB,IAAiB,EAEtED,EAAK,aAAkBC,EAAQD,EAAK,OAAWA,EAAK,MAAS,CAC/D,GAAG,OAAO,KAAS,IAAc,KAAOF,GAAM,SAASI,EAA+BC,EAA+B,CACrH,OAAiB,SAASC,EAAS,CAEzB,IAAIC,EAAmB,CAAC,EAGxB,SAASC,EAAoBC,EAAU,CAGtC,GAAGF,EAAiBE,CAAQ,EAC3B,OAAOF,EAAiBE,CAAQ,EAAE,QAGnC,IAAIR,EAASM,EAAiBE,CAAQ,EAAI,CACzC,EAAGA,EACH,EAAG,GACH,QAAS,CAAC,CACX,EAGA,OAAAH,EAAQG,CAAQ,EAAE,KAAKR,EAAO,QAASA,EAAQA,EAAO,QAASO,CAAmB,EAGlFP,EAAO,EAAI,GAGJA,EAAO,OACf,CAIA,OAAAO,EAAoB,EAAIF,EAGxBE,EAAoB,EAAID,EAGxBC,EAAoB,EAAI,SAASR,EAASU,EAAMC,EAAQ,CACnDH,EAAoB,EAAER,EAASU,CAAI,GACtC,OAAO,eAAeV,EAASU,EAAM,CACpC,aAAc,GACd,WAAY,GACZ,IAAKC,CACN,CAAC,CAEH,EAGAH,EAAoB,EAAI,SAASP,EAAQ,CACxC,IAAIU,EAASV,GAAUA,EAAO,WAC7B,UAAsB,CAAE,OAAOA,EAAO,OAAY,EAClD,UAA4B,CAAE,OAAOA,CAAQ,EAC9C,OAAAO,EAAoB,EAAEG,EAAQ,IAAKA,CAAM,EAClCA,CACR,EAGAH,EAAoB,EAAI,SAASI,EAAQC,EAAU,CAAE,OAAO,OAAO,UAAU,eAAe,KAAKD,EAAQC,CAAQ,CAAG,EAGpHL,EAAoB,EAAI,GAGjBA,EAAoBA,EAAoB,EAAI,GAAG,CACvD,EAEC,CAEH,SAASP,EAAQD,EAAS,CAEjCC,EAAO,QAAUG,CAEX,EACC,CAEA,SAASH,EAAQD,EAAS,CAQjC,IAAIc,EAAgB,OAAO,gBACtB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAUC,EAAGC,EAAG,CAAED,EAAE,UAAYC,CAAG,GAC1E,SAAUD,EAAGC,EAAG,CAAE,QAASC,KAAKD,EACxBA,EAAE,eAAeC,CAAC,IAClBF,EAAEE,CAAC,EAAID,EAAEC,CAAC,EAAG,EACzBjB,EAAQ,UAAY,SAAUe,EAAGC,EAAG,CAChCF,EAAcC,EAAGC,CAAC,EAClB,SAASE,GAAK,CAAE,KAAK,YAAcH,CAAG,CACtCA,EAAE,UAAYC,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKE,EAAG,UAAYF,EAAE,UAAW,IAAIE,EACnF,CAGM,EAEC,SAASjB,EAAQD,EAAS,CAEjCC,EAAO,QAAUI,CAEX,EAEC,SAASJ,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAImB,EAASX,EAAoB,CAAC,EAC9BY,EAAIZ,EAAoB,CAAC,EAK7B,SAASa,EAAiBC,GAAQC,GAAiB,CAC3CA,GAAgB,MAChBD,GAAO,IAAI,CACP,oBAAqB,EACrB,cAAeC,GAAgB,KAAO,CAC1C,CAAC,EAEDA,GAAgB,OAChBD,GAAO,IAAI,CACP,qBAAsB,EACtB,eAAgBC,GAAgB,MAAQ,CAC5C,CAAC,CAET,CACAvB,EAAQ,iBAAmBqB,EAE3B,SAASG,EAAmBF,GAAQ,CAChCA,GAAO,IAAI,CACP,cAAe,GACf,eAAgB,GAChB,oBAAqB,GACrB,qBAAsB,EAC1B,CAAC,CACL,CACAtB,EAAQ,mBAAqBwB,EAE7B,SAASC,GAAgB,CACrBL,EAAE,MAAM,EAAE,SAAS,gBAAgB,CACvC,CACApB,EAAQ,cAAgByB,EAExB,SAASC,GAAe,CACpBN,EAAE,MAAM,EAAE,YAAY,gBAAgB,CAC1C,CACApB,EAAQ,aAAe0B,EAKvB,SAASC,EAAiBC,GAAKC,GAAiBC,GAAoB,CAGhE,IAAIC,GAAa,KAAK,MAAMF,GAAkBD,GAAI,MAAM,EACpDI,GAAa,KAAK,MAAMH,GAAkBE,IAAcH,GAAI,OAAS,EAAE,EACvEK,GAAU,CAAC,EACXC,GAAc,CAAC,EACfC,GAAc,CAAC,EACfC,GAAa,EACjBC,EAAmBT,EAAG,EAGtBA,GAAI,KAAK,SAAUU,GAAGC,GAAI,CACtB,IAAIC,GAAYF,KAAMV,GAAI,OAAS,EAAII,GAAaD,GAChDU,GAAgBrB,EAAEmB,EAAE,EAAE,YAAY,EAAI,EACtCE,GAAgBD,IAChBP,GAAQ,KAAKM,EAAE,EACfL,GAAY,KAAKO,EAAa,EAC9BN,GAAY,KAAKf,EAAEmB,EAAE,EAAE,OAAO,CAAC,GAI/BH,IAAcK,EAEtB,CAAC,EAEGX,KACAD,IAAmBO,GACnBL,GAAa,KAAK,MAAMF,GAAkBI,GAAQ,MAAM,EACxDD,GAAa,KAAK,MAAMH,GAAkBE,IAAcE,GAAQ,OAAS,EAAE,GAG/Eb,EAAEa,EAAO,EAAE,KAAK,SAAUK,GAAGC,GAAI,CAC7B,IAAIC,GAAYF,KAAML,GAAQ,OAAS,EAAID,GAAaD,GACpDU,GAAgBP,GAAYI,EAAC,EAC7BI,GAAgBP,GAAYG,EAAC,EAC7BK,GAAYH,IAAaC,GAAgBC,IACzCD,GAAgBD,IAChBpB,EAAEmB,EAAE,EAAE,OAAOI,EAAS,CAE9B,CAAC,CACL,CACA3C,EAAQ,iBAAmB2B,EAE3B,SAASU,EAAmBT,GAAK,CAC7BA,GAAI,OAAO,EAAE,CACjB,CACA5B,EAAQ,mBAAqBqC,EAI7B,SAASO,EAAgBhB,GAAK,CAC1B,IAAIiB,GAAgB,EACpB,OAAAjB,GAAI,KAAK,KAAK,EAAE,KAAK,SAAUU,GAAGQ,GAAS,CACvC,IAAIC,GAAa3B,EAAE0B,EAAO,EAAE,WAAW,EACnCC,GAAaF,KACbA,GAAgBE,GAExB,CAAC,EACDF,KACAjB,GAAI,MAAMiB,EAAa,EAChBA,EACX,CACA7C,EAAQ,gBAAkB4C,EAG1B,SAASI,EAAsBC,GAASH,GAAS,CAC7C,IAAII,GAAOD,GAAQ,IAAIH,EAAO,EAC1BK,GAEJ,OAAAD,GAAK,IAAI,CACL,SAAU,WACV,KAAM,EACV,CAAC,EACDC,GAAOF,GAAQ,YAAY,EAAIH,GAAQ,YAAY,EACnDI,GAAK,IAAI,CAAE,SAAU,GAAI,KAAM,EAAG,CAAC,EAC5BC,EACX,CACAnD,EAAQ,sBAAwBgD,EAIhC,SAASI,EAAgBb,GAAI,CACzB,IAAIc,GAAWd,GAAG,IAAI,UAAU,EAC5Be,GAAef,GAAG,QAAQ,EAAE,OAAO,UAAY,CAC/C,IAAIgB,GAASnC,EAAE,IAAI,EACnB,MAAQ,gBAAiB,KAAKmC,GAAO,IAAI,UAAU,EAAIA,GAAO,IAAI,YAAY,EAAIA,GAAO,IAAI,YAAY,CAAC,CAC9G,CAAC,EAAE,GAAG,CAAC,EACP,OAAOF,KAAa,SAAW,CAACC,GAAa,OAASlC,EAAEmB,GAAG,CAAC,EAAE,eAAiB,QAAQ,EAAIe,EAC/F,CACAtD,EAAQ,gBAAkBoD,EAI1B,SAASI,EAAajB,GAAIkB,GAAQ,CAC9B,IAAIC,GAASnB,GAAG,OAAO,EACnBoB,GAAOD,GAAO,MAAQD,GAASA,GAAO,KAAO,GAC7CG,GAAMF,GAAO,KAAOD,GAASA,GAAO,IAAM,GAC9C,MAAO,CACH,KAAME,GACN,MAAOA,GAAOpB,GAAG,WAAW,EAC5B,IAAKqB,GACL,OAAQA,GAAMrB,GAAG,YAAY,CACjC,CACJ,CACAvC,EAAQ,aAAewD,EAMvB,SAASK,EAActB,GAAIkB,GAAQ,CAC/B,IAAIC,GAASnB,GAAG,OAAO,EACnBhB,GAAkBuC,EAAmBvB,EAAE,EACvCoB,GAAOD,GAAO,KAAOK,GAAYxB,GAAI,mBAAmB,EAAIhB,GAAgB,MAAQkC,GAASA,GAAO,KAAO,GAC3GG,GAAMF,GAAO,IAAMK,GAAYxB,GAAI,kBAAkB,EAAIhB,GAAgB,KAAOkC,GAASA,GAAO,IAAM,GAC1G,MAAO,CACH,KAAME,GACN,MAAOA,GAAOpB,GAAG,CAAC,EAAE,YACpB,IAAKqB,GACL,OAAQA,GAAMrB,GAAG,CAAC,EAAE,YACxB,CACJ,CACAvC,EAAQ,cAAgB6D,EAIxB,SAASG,EAAezB,GAAIkB,GAAQ,CAChC,IAAIC,GAASnB,GAAG,OAAO,EACnBoB,GAAOD,GAAO,KAAOK,GAAYxB,GAAI,mBAAmB,EAAIwB,GAAYxB,GAAI,cAAc,GACzFkB,GAASA,GAAO,KAAO,GACxBG,GAAMF,GAAO,IAAMK,GAAYxB,GAAI,kBAAkB,EAAIwB,GAAYxB,GAAI,aAAa,GACrFkB,GAASA,GAAO,IAAM,GAC3B,MAAO,CACH,KAAME,GACN,MAAOA,GAAOpB,GAAG,MAAM,EACvB,IAAKqB,GACL,OAAQA,GAAMrB,GAAG,OAAO,CAC5B,CACJ,CACAvC,EAAQ,eAAiBgE,EAIzB,SAASF,EAAmBvB,GAAI,CAC5B,IAAI0B,GAAiB1B,GAAG,CAAC,EAAE,YAAcA,GAAG,CAAC,EAAE,YAC3C2B,GAAc3B,GAAG,CAAC,EAAE,aAAeA,GAAG,CAAC,EAAE,aACzC4B,GACJ,OAAAF,GAAiBG,GAAuBH,EAAc,EACtDC,GAAcE,GAAuBF,EAAW,EAChDC,GAAS,CAAE,KAAM,EAAG,MAAO,EAAG,IAAK,EAAG,OAAQD,EAAY,EACtDG,EAAuB,GAAK9B,GAAG,IAAI,WAAW,IAAM,MACpD4B,GAAO,KAAOF,GAGdE,GAAO,MAAQF,GAEZE,EACX,CACAnE,EAAQ,mBAAqB8D,EAG7B,SAASM,GAAuBE,GAAO,CACnC,OAAAA,GAAQ,KAAK,IAAI,EAAGA,EAAK,EACzBA,GAAQ,KAAK,MAAMA,EAAK,EACjBA,EACX,CAEA,IAAIC,GAAuB,KAC3B,SAASF,GAAyB,CAC9B,OAAIE,KAAyB,OACzBA,GAAuBC,GAA2B,GAE/CD,EACX,CACA,SAASC,IAA6B,CAClC,IAAIjC,GAAKnB,EAAE,wBAAwB,EAC9B,IAAI,CACL,SAAU,WACV,IAAK,KACL,KAAM,EACN,OAAQ,EACR,QAAS,EACT,SAAU,SACV,UAAW,KACf,CAAC,EACI,SAAS,MAAM,EAChB0B,GAAUP,GAAG,SAAS,EACtBkC,GAAM3B,GAAQ,OAAO,EAAE,KAAOP,GAAG,OAAO,EAAE,KAC9C,OAAAA,GAAG,OAAO,EACHkC,EACX,CAGA,SAASV,GAAYxB,GAAImC,GAAM,CAC3B,OAAO,WAAWnC,GAAG,IAAImC,EAAI,CAAC,GAAK,CACvC,CAIA,SAASC,GAAqBC,GAAI,CAC9B,OAAOA,GAAG,QAAU,GAAK,CAACA,GAAG,OACjC,CACA5E,EAAQ,qBAAuB2E,GAC/B,SAASE,GAAOD,GAAI,CAChB,IAAIE,GAAUF,GAAG,cAAc,QAG/B,OAAIE,IAAWA,GAAQ,OACZA,GAAQ,CAAC,EAAE,MAEfF,GAAG,KACd,CACA5E,EAAQ,OAAS6E,GACjB,SAASE,GAAOH,GAAI,CAChB,IAAIE,GAAUF,GAAG,cAAc,QAG/B,OAAIE,IAAWA,GAAQ,OACZA,GAAQ,CAAC,EAAE,MAEfF,GAAG,KACd,CACA5E,EAAQ,OAAS+E,GACjB,SAASC,GAAaJ,GAAI,CACtB,MAAO,SAAS,KAAKA,GAAG,IAAI,CAChC,CACA5E,EAAQ,aAAegF,GACvB,SAASC,GAAiB1C,GAAI,CAC1BA,GAAG,SAAS,iBAAiB,EACxB,GAAG,cAAe2C,EAAc,CACzC,CACAlF,EAAQ,iBAAmBiF,GAC3B,SAASE,GAAe5C,GAAI,CACxBA,GAAG,YAAY,iBAAiB,EAC3B,IAAI,cAAe2C,EAAc,CAC1C,CACAlF,EAAQ,eAAiBmF,GAEzB,SAASD,GAAeN,GAAI,CACxBA,GAAG,eAAe,CACtB,CACA5E,EAAQ,eAAiBkF,GAIzB,SAASE,GAAeC,GAAOC,GAAO,CAClC,IAAIb,GAAM,CACN,KAAM,KAAK,IAAIY,GAAM,KAAMC,GAAM,IAAI,EACrC,MAAO,KAAK,IAAID,GAAM,MAAOC,GAAM,KAAK,EACxC,IAAK,KAAK,IAAID,GAAM,IAAKC,GAAM,GAAG,EAClC,OAAQ,KAAK,IAAID,GAAM,OAAQC,GAAM,MAAM,CAC/C,EACA,OAAIb,GAAI,KAAOA,GAAI,OAASA,GAAI,IAAMA,GAAI,OAC/BA,GAEJ,EACX,CACAzE,EAAQ,eAAiBoF,GAEzB,SAASG,GAAeC,GAAOC,GAAM,CACjC,MAAO,CACH,KAAM,KAAK,IAAI,KAAK,IAAID,GAAM,KAAMC,GAAK,IAAI,EAAGA,GAAK,KAAK,EAC1D,IAAK,KAAK,IAAI,KAAK,IAAID,GAAM,IAAKC,GAAK,GAAG,EAAGA,GAAK,MAAM,CAC5D,CACJ,CACAzF,EAAQ,eAAiBuF,GAEzB,SAASG,GAAcD,GAAM,CACzB,MAAO,CACH,MAAOA,GAAK,KAAOA,GAAK,OAAS,EACjC,KAAMA,GAAK,IAAMA,GAAK,QAAU,CACpC,CACJ,CACAzF,EAAQ,cAAgB0F,GAExB,SAASC,GAAWC,GAAQC,GAAQ,CAChC,MAAO,CACH,KAAMD,GAAO,KAAOC,GAAO,KAC3B,IAAKD,GAAO,IAAMC,GAAO,GAC7B,CACJ,CACA7F,EAAQ,WAAa2F,GAGrB,SAASG,GAAgBC,GAAO,CAC5B,IAAIC,GAAQ,CAAC,EACTC,GAAS,CAAC,EACV3D,GACA4D,GAUJ,IATI,OAAOH,IAAU,SACjBE,GAASF,GAAM,MAAM,SAAS,EAEzB,OAAOA,IAAU,WACtBE,GAAS,CAACF,EAAK,EAEV3E,EAAE,QAAQ2E,EAAK,IACpBE,GAASF,IAERzD,GAAI,EAAGA,GAAI2D,GAAO,OAAQ3D,KAC3B4D,GAAQD,GAAO3D,EAAC,EACZ,OAAO4D,IAAU,SACjBF,GAAM,KAAKE,GAAM,OAAO,CAAC,IAAM,IAC3B,CAAE,MAAOA,GAAM,UAAU,CAAC,EAAG,MAAO,EAAG,EACvC,CAAE,MAAOA,GAAO,MAAO,CAAE,CAAC,EAEzB,OAAOA,IAAU,YACtBF,GAAM,KAAK,CAAE,KAAME,EAAM,CAAC,EAGlC,OAAOF,EACX,CACAhG,EAAQ,gBAAkB8F,GAC1B,SAASK,GAAoBC,GAAMC,GAAMC,GAAYC,GAAcC,GAAc,CAC7E,IAAIlE,GACAmE,GACJ,IAAKnE,GAAI,EAAGA,GAAIgE,GAAW,OAAQhE,KAE/B,GADAmE,GAAMC,GAAmBN,GAAMC,GAAMC,GAAWhE,EAAC,EAAGiE,GAAcC,EAAY,EAC1EC,GACA,OAAOA,GAGf,MAAO,EACX,CACAzG,EAAQ,oBAAsBmG,GAC9B,SAASO,GAAmBN,GAAMC,GAAMM,GAAWJ,GAAcC,GAAc,CAC3E,GAAIG,GAAU,KACV,OAAOA,GAAU,KAAKP,GAAMC,EAAI,EAEpC,IAAIO,GAAOR,GAAKO,GAAU,KAAK,EAC3BE,GAAOR,GAAKM,GAAU,KAAK,EAC/B,OAAIC,IAAQ,MAAQL,KAChBK,GAAOL,GAAaI,GAAU,KAAK,GAEnCE,IAAQ,MAAQL,KAChBK,GAAOL,GAAaG,GAAU,KAAK,GAEhCG,GAAgBF,GAAMC,EAAI,GAAKF,GAAU,OAAS,EAC7D,CACA3G,EAAQ,mBAAqB0G,GAC7B,SAASI,GAAgBC,GAAG/F,GAAG,CAC3B,MAAI,CAAC+F,IAAK,CAAC/F,GACA,EAEPA,IAAK,KACE,GAEP+F,IAAK,KACE,EAEP3F,EAAE,KAAK2F,EAAC,IAAM,UAAY3F,EAAE,KAAKJ,EAAC,IAAM,SACjC,OAAO+F,EAAC,EAAE,cAAc,OAAO/F,EAAC,CAAC,EAErC+F,GAAI/F,EACf,CACAhB,EAAQ,gBAAkB8G,GAG1B9G,EAAQ,OAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EACjEA,EAAQ,UAAY,CAAC,OAAQ,QAAS,OAAQ,MAAO,OAAQ,SAAU,SAAU,aAAa,EAG9F,SAASgH,GAAYD,GAAG/F,GAAG,CACvB,OAAOG,EAAO,SAAS,CACnB,KAAM4F,GAAE,MAAM,EAAE,UAAU,EAAE,KAAK/F,GAAE,MAAM,EAAE,UAAU,EAAG,MAAM,EAC9D,GAAI+F,GAAE,KAAK,EAAI/F,GAAE,KAAK,CAC1B,CAAC,CACL,CACAhB,EAAQ,YAAcgH,GAEtB,SAASC,GAAQF,GAAG/F,GAAG,CACnB,OAAOG,EAAO,SAAS,CACnB,KAAM4F,GAAE,MAAM,EAAE,UAAU,EAAE,KAAK/F,GAAE,MAAM,EAAE,UAAU,EAAG,MAAM,CAClE,CAAC,CACL,CACAhB,EAAQ,QAAUiH,GAElB,SAASC,GAAWH,GAAG/F,GAAGmG,GAAM,CAC5B,OAAOhG,EAAO,SAAS,KAAK,MAAM4F,GAAE,KAAK/F,GAAGmG,GAAM,EAAI,CAAC,EACvDA,EAAI,CACR,CACAnH,EAAQ,WAAakH,GAIrB,SAASE,GAAoBC,GAAOC,GAAK,CACrC,IAAIhF,GACA6E,GACAI,GACJ,IAAKjF,GAAI,EAAGA,GAAItC,EAAQ,UAAU,SAC9BmH,GAAOnH,EAAQ,UAAUsC,EAAC,EAC1BiF,GAAMC,GAAeL,GAAME,GAAOC,EAAG,EACjC,EAAAC,IAAO,GAAKE,GAAMF,EAAG,IAHajF,KAGtC,CAIJ,OAAO6E,EACX,CACAnH,EAAQ,oBAAsBoH,GAE9B,SAASM,GAA4BC,GAAUC,GAAe,CAC1D,IAAIT,GAAOC,GAAoBO,EAAQ,EAEvC,OAAIR,KAAS,QAAU,OAAOS,IAAkB,UAAYA,GAAc,OACtET,GAAO,OAEJA,EACX,CACAnH,EAAQ,4BAA8B0H,GAKtC,SAASF,GAAeL,GAAME,GAAOC,GAAK,CACtC,OAAIA,IAAO,KACAA,GAAI,KAAKD,GAAOF,GAAM,EAAI,EAE5BhG,EAAO,WAAWkG,EAAK,EACrBA,GAAM,GAAGF,EAAI,EAGbE,GAAM,IAAI,KAAKA,GAAM,MAAOF,GAAM,EAAI,CAErD,CAEA,SAASU,GAAsBR,GAAOC,GAAKQ,GAAK,CAC5C,IAAIC,GACJ,OAAIC,GAAgBF,EAAG,GACXR,GAAMD,IAASS,IAE3BC,GAASD,GAAI,SAAS,EAClB,KAAK,IAAIC,EAAM,GAAK,GAAKN,GAAMM,EAAM,EAC9BT,GAAI,KAAKD,GAAO,SAAU,EAAI,EAAIU,GAEtCT,GAAI,KAAKD,GAAO,OAAQ,EAAI,EAAIS,GAAI,OAAO,EACtD,CACA9H,EAAQ,sBAAwB6H,GAEhC,SAASI,GAAyBC,GAAMC,GAAM,CAC1C,IAAIC,GACAC,GACJ,OAAIL,GAAgBE,EAAI,GAAKF,GAAgBG,EAAI,EACtCD,GAAOC,IAElBC,GAAUF,GAAK,SAAS,EACxBG,GAAUF,GAAK,SAAS,EACpB,KAAK,IAAIC,EAAO,GAAK,GAAKX,GAAMW,EAAO,GACvC,KAAK,IAAIC,EAAO,GAAK,GAAKZ,GAAMY,EAAO,EAChCD,GAAUC,GAEdH,GAAK,OAAO,EAAIC,GAAK,OAAO,EACvC,CACAnI,EAAQ,yBAA2BiI,GAEnC,SAASK,GAAiBR,GAAKS,GAAG,CAC9B,IAAIR,GACJ,OAAIC,GAAgBF,EAAG,EACZ3G,EAAO,SAAS2G,GAAMS,EAAC,GAElCR,GAASD,GAAI,SAAS,EAClB,KAAK,IAAIC,EAAM,GAAK,GAAKN,GAAMM,EAAM,EAC9B5G,EAAO,SAAS,CAAE,OAAQ4G,GAASQ,EAAE,CAAC,EAE1CpH,EAAO,SAAS,CAAE,KAAM2G,GAAI,OAAO,EAAIS,EAAE,CAAC,EACrD,CACAvI,EAAQ,iBAAmBsI,GAE3B,SAASN,GAAgBF,GAAK,CAC1B,MAAO,GAAQA,GAAI,MAAM,GAAKA,GAAI,QAAQ,GAAKA,GAAI,QAAQ,GAAKA,GAAI,aAAa,EACrF,CACA9H,EAAQ,gBAAkBgI,GAC1B,SAASQ,GAAazC,GAAO,CACzB,OAAO,OAAO,UAAU,SAAS,KAAKA,EAAK,IAAM,iBAAmBA,cAAiB,IACzF,CACA/F,EAAQ,aAAewI,GAEvB,SAASC,GAAaC,GAAK,CACvB,OAAO,OAAOA,IAAQ,UAClB,oCAAoC,KAAKA,EAAG,CACpD,CACA1I,EAAQ,aAAeyI,GAGvB,SAASE,IAAM,CAEX,QADIC,GAAO,CAAC,EACHC,GAAK,EAAGA,GAAK,UAAU,OAAQA,KACpCD,GAAKC,EAAE,EAAI,UAAUA,EAAE,EAE3B,IAAIC,GAAU,OAAO,QACrB,GAAIA,IAAWA,GAAQ,IACnB,OAAOA,GAAQ,IAAI,MAAMA,GAASF,EAAI,CAE9C,CACA5I,EAAQ,IAAM2I,GACd,SAASI,IAAO,CAEZ,QADIH,GAAO,CAAC,EACHC,GAAK,EAAGA,GAAK,UAAU,OAAQA,KACpCD,GAAKC,EAAE,EAAI,UAAUA,EAAE,EAE3B,IAAIC,GAAU,OAAO,QACrB,OAAIA,IAAWA,GAAQ,KACZA,GAAQ,KAAK,MAAMA,GAASF,EAAI,EAGhCD,GAAI,MAAM,KAAMC,EAAI,CAEnC,CACA5I,EAAQ,KAAO+I,GAGf,IAAIC,GAAmB,CAAC,EAAE,eAG1B,SAASC,GAAWC,GAAUC,GAAc,CACxC,IAAIC,GAAO,CAAC,EACR9G,GACA5B,GACA2I,GACAC,GACA/B,GACAgC,GACJ,GAAIJ,GACA,IAAK7G,GAAI,EAAGA,GAAI6G,GAAa,OAAQ7G,KAAK,CAItC,IAHA5B,GAAOyI,GAAa7G,EAAC,EACrB+G,GAAc,CAAC,EAEVC,GAAIJ,GAAS,OAAS,EAAGI,IAAK,EAAGA,KAElC,GADA/B,GAAM2B,GAASI,EAAC,EAAE5I,EAAI,EAClB,OAAO6G,IAAQ,SACf8B,GAAY,QAAQ9B,EAAG,UAElBA,KAAQ,OAAW,CACxB6B,GAAK1I,EAAI,EAAI6G,GACb,KACJ,CAGA8B,GAAY,SACZD,GAAK1I,EAAI,EAAIuI,GAAWI,EAAW,EAE3C,CAGJ,IAAK/G,GAAI4G,GAAS,OAAS,EAAG5G,IAAK,EAAGA,KAAK,CACvCiH,GAAQL,GAAS5G,EAAC,EAClB,IAAK5B,MAAQ6I,GACH7I,MAAQ0I,KACVA,GAAK1I,EAAI,EAAI6I,GAAM7I,EAAI,EAGnC,CACA,OAAO0I,EACX,CACApJ,EAAQ,WAAaiJ,GACrB,SAASO,GAAaC,GAAKL,GAAM,CAC7B,QAASM,MAAUD,GACXE,GAAWF,GAAKC,EAAM,IACtBN,GAAKM,EAAM,EAAID,GAAIC,EAAM,EAGrC,CACA1J,EAAQ,aAAewJ,GACvB,SAASG,GAAWC,GAAKlJ,GAAM,CAC3B,OAAOsI,GAAiB,KAAKY,GAAKlJ,EAAI,CAC1C,CACAV,EAAQ,WAAa2J,GACrB,SAASE,GAASC,GAAWC,GAASnB,GAAM,CAIxC,GAHIxH,EAAE,WAAW0I,EAAS,IACtBA,GAAY,CAACA,EAAS,GAEtBA,GAAW,CACX,IAAIxH,GAAI,OACJ0H,GAAM,OACV,IAAK1H,GAAI,EAAGA,GAAIwH,GAAU,OAAQxH,KAC9B0H,GAAMF,GAAUxH,EAAC,EAAE,MAAMyH,GAASnB,EAAI,GAAKoB,GAE/C,OAAOA,EACX,CACJ,CACAhK,EAAQ,SAAW6J,GACnB,SAASI,GAAeC,GAAOC,GAAU,CAGrC,QAFIC,GAAY,EACZ9H,GAAI,EACDA,GAAI4H,GAAM,QACTC,GAASD,GAAM5H,EAAC,CAAC,GACjB4H,GAAM,OAAO5H,GAAG,CAAC,EACjB8H,MAGA9H,KAGR,OAAO8H,EACX,CACApK,EAAQ,eAAiBiK,GACzB,SAASI,GAAYH,GAAOI,GAAU,CAGlC,QAFIF,GAAY,EACZ9H,GAAI,EACDA,GAAI4H,GAAM,QACTA,GAAM5H,EAAC,IAAMgI,IACbJ,GAAM,OAAO5H,GAAG,CAAC,EACjB8H,MAGA9H,KAGR,OAAO8H,EACX,CACApK,EAAQ,YAAcqK,GACtB,SAASE,GAAcC,GAAIC,GAAI,CAC3B,IAAIC,GAAMF,GAAG,OACTlI,GACJ,GAAIoI,IAAO,MAAQA,KAAQD,GAAG,OAC1B,MAAO,GAEX,IAAKnI,GAAI,EAAGA,GAAIoI,GAAKpI,KACjB,GAAIkI,GAAGlI,EAAC,IAAMmI,GAAGnI,EAAC,EACd,MAAO,GAGf,MAAO,EACX,CACAtC,EAAQ,cAAgBuK,GACxB,SAASI,IAAe,CAEpB,QADI/B,GAAO,CAAC,EACHC,GAAK,EAAGA,GAAK,UAAU,OAAQA,KACpCD,GAAKC,EAAE,EAAI,UAAUA,EAAE,EAE3B,QAASvG,GAAI,EAAGA,GAAIsG,GAAK,OAAQtG,KAC7B,GAAIsG,GAAKtG,EAAC,IAAM,OACZ,OAAOsG,GAAKtG,EAAC,CAGzB,CACAtC,EAAQ,aAAe2K,GACvB,SAASC,GAAWC,GAAG,CACnB,OAAQA,GAAI,IAAI,QAAQ,KAAM,OAAO,EAChC,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,QAAQ,EACtB,QAAQ,KAAM,QAAQ,EACtB,QAAQ,MAAO,MAAM,CAC9B,CACA7K,EAAQ,WAAa4K,GACrB,SAASE,GAAkBC,GAAM,CAC7B,OAAOA,GAAK,QAAQ,SAAU,EAAE,CACpC,CACA/K,EAAQ,kBAAoB8K,GAG5B,SAASE,GAASC,GAAU,CACxB,IAAIC,GAAa,CAAC,EAClB,OAAA9J,EAAE,KAAK6J,GAAU,SAAUvK,GAAM6G,GAAK,CAC9BA,IAAO,MACP2D,GAAW,KAAKxK,GAAO,IAAM6G,EAAG,CAExC,CAAC,EACM2D,GAAW,KAAK,GAAG,CAC9B,CACAlL,EAAQ,SAAWgL,GAGnB,SAASG,GAAWC,GAAO,CACvB,IAAIC,GAAQ,CAAC,EACb,OAAAjK,EAAE,KAAKgK,GAAO,SAAU1K,GAAM6G,GAAK,CAC3BA,IAAO,MACP8D,GAAM,KAAK3K,GAAO,KAAOkK,GAAWrD,EAAG,EAAI,GAAG,CAEtD,CAAC,EACM8D,GAAM,KAAK,GAAG,CACzB,CACArL,EAAQ,WAAamL,GACrB,SAASG,GAAsB5C,GAAK,CAChC,OAAOA,GAAI,OAAO,CAAC,EAAE,YAAY,EAAIA,GAAI,MAAM,CAAC,CACpD,CACA1I,EAAQ,sBAAwBsL,GAChC,SAASC,GAAexE,GAAG/F,GAAG,CAC1B,OAAO+F,GAAI/F,EACf,CACAhB,EAAQ,eAAiBuL,GACzB,SAAS9D,GAAMc,GAAG,CACd,OAAOA,GAAI,IAAM,CACrB,CACAvI,EAAQ,MAAQyH,GAIhB,SAAS+D,GAAM5B,GAAK6B,GAAY,CAC5B,IAAIC,GAAS9B,GAAI6B,EAAU,EAC3B,OAAO,UAAY,CACf,OAAOC,GAAO,MAAM9B,GAAK,SAAS,CACtC,CACJ,CACA5J,EAAQ,MAAQwL,GAMhB,SAASG,GAASC,GAAMC,GAAMC,GAAW,CACjCA,KAAc,SAAUA,GAAY,IACxC,IAAIC,GACAnD,GACAoD,GACAC,GACAC,GACAC,GAAQ,UAAY,CACpB,IAAIC,GAAO,CAAC,IAAI,KAASH,GACrBG,GAAOP,GACPE,GAAU,WAAWI,GAAON,GAAOO,EAAI,GAGvCL,GAAU,KACLD,KACDI,GAASN,GAAK,MAAMI,GAASpD,EAAI,EACjCoD,GAAUpD,GAAO,MAG7B,EACA,OAAO,UAAY,CACfoD,GAAU,KACVpD,GAAO,UACPqD,GAAY,CAAC,IAAI,KACjB,IAAII,GAAUP,IAAa,CAACC,GAC5B,OAAKA,KACDA,GAAU,WAAWI,GAAON,EAAI,GAEhCQ,KACAH,GAASN,GAAK,MAAMI,GAASpD,EAAI,EACjCoD,GAAUpD,GAAO,MAEdsD,EACX,CACJ,CACAlM,EAAQ,SAAW2L,EAGb,EAEC,SAAS1L,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAImB,EAASX,EAAoB,CAAC,EAC9B8L,EAAe9L,EAAoB,EAAE,EACrC+L,EAA8B,UAAY,CAC1C,SAASA,EAAaC,EAAYC,EAAU,CAGxC,KAAK,QAAU,GACf,KAAK,MAAQ,GACTtL,EAAO,SAASqL,CAAU,IAC1BA,EAAaA,EAAW,MAAM,EAAE,UAAU,GAE1CrL,EAAO,SAASsL,CAAQ,IACxBA,EAAWA,EAAS,MAAM,EAAE,UAAU,GAEtCD,IACA,KAAK,QAAUA,EAAW,QAAQ,GAElCC,IACA,KAAK,MAAQA,EAAS,QAAQ,EAEtC,CAMA,OAAAF,EAAa,aAAe,SAAUG,EAAQC,EAAiB,CAC3D,IAAIC,EAAiB,CAAC,EAClBC,EAAUF,EAAgB,QAC1BrK,EACAwK,EAGJ,IADAJ,EAAO,KAAKK,CAAoB,EAC3BzK,EAAI,EAAGA,EAAIoK,EAAO,OAAQpK,IAC3BwK,EAAYJ,EAAOpK,CAAC,EAEhBwK,EAAU,QAAUD,GACpBD,EAAe,KAAK,IAAIL,EAAaM,EAASC,EAAU,OAAO,CAAC,EAEhEA,EAAU,MAAQD,IAClBA,EAAUC,EAAU,OAI5B,OAAID,EAAUF,EAAgB,OAC1BC,EAAe,KAAK,IAAIL,EAAaM,EAASF,EAAgB,KAAK,CAAC,EAEjEC,CACX,EACAL,EAAa,UAAU,UAAY,SAAUS,EAAY,CACrD,IAAIH,EAAU,KAAK,QACfI,EAAQ,KAAK,MACbC,EAAW,KACf,OAAIF,EAAW,SAAW,OAClBH,GAAW,KACXA,EAAUG,EAAW,QAGrBH,EAAU,KAAK,IAAIA,EAASG,EAAW,OAAO,GAGlDA,EAAW,OAAS,OAChBC,GAAS,KACTA,EAAQD,EAAW,MAGnBC,EAAQ,KAAK,IAAIA,EAAOD,EAAW,KAAK,IAG5CH,GAAW,MAAQI,GAAS,MAAQJ,EAAUI,KAC9CC,EAAW,IAAIX,EAAaM,EAASI,CAAK,EAC1CC,EAAS,QAAU,KAAK,SAAWL,IAAY,KAAK,QACpDK,EAAS,MAAQ,KAAK,OAASD,IAAU,KAAK,OAE3CC,CACX,EACAX,EAAa,UAAU,eAAiB,SAAUS,EAAY,CAC1D,OAAQ,KAAK,OAAS,MAAQA,EAAW,SAAW,MAAQ,KAAK,MAAQA,EAAW,WAC/E,KAAK,SAAW,MAAQA,EAAW,OAAS,MAAQ,KAAK,QAAUA,EAAW,MACvF,EACAT,EAAa,UAAU,cAAgB,SAAUY,EAAY,CACzD,OAAQ,KAAK,SAAW,MAASA,EAAW,SAAW,MAAQA,EAAW,SAAW,KAAK,WACrF,KAAK,OAAS,MAASA,EAAW,OAAS,MAAQA,EAAW,OAAS,KAAK,MACrF,EAEAZ,EAAa,UAAU,aAAe,SAAUa,EAAM,CAClD,IAAIC,EAAKD,EAAK,QAAQ,EACtB,OAAQ,KAAK,SAAW,MAAQC,GAAM,KAAK,WACtC,KAAK,OAAS,MAAQA,EAAK,KAAK,MACzC,EAKAd,EAAa,UAAU,cAAgB,SAAUa,EAAM,CACnD,IAAIC,EAAKD,EAAK,QAAQ,EACtB,OAAI,KAAK,SAAW,MAAQC,EAAK,KAAK,UAClCA,EAAK,KAAK,SAEV,KAAK,OAAS,MAAQA,GAAM,KAAK,QACjCA,EAAK,KAAK,MAAQ,GAEfA,CACX,EACAd,EAAa,UAAU,OAAS,SAAUS,EAAY,CAClD,OAAO,KAAK,UAAYA,EAAW,SAAW,KAAK,QAAUA,EAAW,KAC5E,EACAT,EAAa,UAAU,MAAQ,UAAY,CACvC,IAAIe,EAAQ,IAAIf,EAAa,KAAK,QAAS,KAAK,KAAK,EACrD,OAAAe,EAAM,QAAU,KAAK,QACrBA,EAAM,MAAQ,KAAK,MACZA,CACX,EAIAf,EAAa,UAAU,SAAW,UAAY,CAC1C,OAAI,KAAK,SAAW,KACTD,EAAa,QAAQ,IAAI,KAAK,OAAO,EAAE,UAAU,EAErD,IACX,EAIAC,EAAa,UAAU,OAAS,UAAY,CACxC,OAAI,KAAK,OAAS,KACPD,EAAa,QAAQ,IAAI,KAAK,KAAK,EAAE,UAAU,EAEnD,IACX,EACAC,EAAa,UAAU,GAAK,SAAUpF,EAAM,CACxC,OAAOhG,EAAO,IAAI,KAAK,KAAK,EAAE,KAAKA,EAAO,IAAI,KAAK,OAAO,EAAGgG,EAAM,EAAI,CAC3E,EACOoF,CACX,EAAE,EACFvM,EAAQ,QAAUuM,EAIlB,SAASQ,EAAqBQ,EAAQC,EAAQ,CAC1C,OAAOD,EAAO,QAAUC,EAAO,OACnC,CAGM,EAEC,SAASvN,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BY,EAAIZ,EAAoB,CAAC,EACzBkN,EAAuBlN,EAAoB,EAAE,EAC7CmN,EAAUnN,EAAoB,EAAE,EAChCoN,EAAmBpN,EAAoB,EAAE,EACzCqN,EAA6B,SAAUC,EAAQ,CAC/CL,EAAQ,UAAUI,EAAaC,CAAM,EAGrC,SAASD,EAAYE,EAAU,CAC3B,IAAIC,EAAQF,EAAO,KAAK,IAAI,GAAK,KACjC,OAAAE,EAAM,SAAWD,EACjBC,EAAM,UAAY,CAAC,EACnBA,EAAM,IAAM,OAAOH,EAAY,MAAM,EAC9BG,CACX,CAIA,OAAAH,EAAY,MAAQ,SAAUI,EAAUF,EAAU,CAC9C,IAAIG,EAAS,IAAI,KAAKH,CAAQ,EAC9B,OAAI,OAAOE,GAAa,UAChBC,EAAO,WAAWD,CAAQ,EACnBC,EAGR,EACX,EACAL,EAAY,YAAc,SAAUM,EAAI,CACpC,OAAIA,EACO,OAAOA,CAAE,EAEb,IACX,EACAN,EAAY,UAAU,MAAQ,SAAUxG,EAAOC,EAAK8G,EAAU,CAE9D,EACAP,EAAY,UAAU,oBAAsB,SAAUQ,EAAY,CAElE,EACAR,EAAY,UAAU,mBAAqB,UAAY,CAEvD,EAIAA,EAAY,UAAU,aAAe,SAAUS,EAAa,CAE5D,EACAT,EAAY,UAAU,eAAiB,SAAUU,EAAc,CAC3D,IAAIjM,EACAkM,EACAC,EAAY,CAAC,EACjB,IAAKnM,EAAI,EAAGA,EAAIiM,EAAa,OAAQjM,IACjCkM,EAAW,KAAK,cAAcD,EAAajM,CAAC,CAAC,EACzCkM,GACAC,EAAU,KAAKD,CAAQ,EAG/B,OAAOC,CACX,EACAZ,EAAY,UAAU,cAAgB,SAAUI,EAAU,CACtD,IAAIS,EAAoB,KAAK,SAAS,IAAI,oBAAoB,EAC1DC,EAAkB,KAAK,mBAC3B,OAAID,IACAT,EAAWS,EAAkBT,EAAU,KAAK,QAAQ,GAEpDU,IACAV,EAAWU,EAAgBV,EAAU,KAAK,QAAQ,GAE/CL,EAAiB,QAAQ,MAAMK,EAAU,IAAI,CACxD,EACAJ,EAAY,UAAU,yBAA2B,SAAUe,EAAU,CACjE,OAAIA,EAAS,IAAM,OACf,KAAK,GAAKf,EAAY,YAAYe,EAAS,EAAE,GAG7CxN,EAAE,QAAQwN,EAAS,SAAS,EAC5B,KAAK,UAAYA,EAAS,UAErB,OAAOA,EAAS,WAAc,WACnC,KAAK,UAAYA,EAAS,UAAU,MAAM,KAAK,GAE5C,EACX,EACAf,EAAY,KAAO,EACnBA,EAAY,oBAAsBH,EAAqB,QAAQ,oBAC/DG,EAAY,0BAA4BH,EAAqB,QAAQ,0BAC9DG,CACX,EAAEF,EAAQ,OAAO,EACjB3N,EAAQ,QAAU6N,EAClBH,EAAqB,QAAQ,QAAQG,CAAW,EAGhDA,EAAY,oBAAoB,CAE5B,GAAI,GACJ,UAAW,GAEX,MAAO,GACP,gBAAiB,GACjB,YAAa,GACb,UAAW,GACX,SAAU,GACV,cAAe,GACf,iBAAkB,GAClB,UAAW,GACX,QAAS,GACT,WAAY,GACZ,cAAe,GACf,mBAAoB,EACxB,CAAC,CAGK,EAEC,SAAS5N,EAAQD,EAASQ,EAAqB,CActD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BY,EAAIZ,EAAoB,CAAC,EACzBqO,EAAUrO,EAAoB,EAAE,EAChCsO,EAAO,EACPC,EAA+B,SAAUjB,EAAQ,CACjDL,EAAQ,UAAUsB,EAAejB,CAAM,EACvC,SAASiB,GAAgB,CACrB,OAAOjB,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC/D,CAYA,OAAAiB,EAAc,UAAU,SAAW,SAAUC,EAAOC,EAAKC,EAAU,CAC/D,GAAI,OAAOD,GAAQ,SACf,QAASE,KAAaF,EACdA,EAAI,eAAeE,CAAS,GAC5B,KAAK,SAASH,EAAOG,EAAWF,EAAIE,CAAS,CAAC,OAIjD,OAAOF,GAAQ,UACpBD,EAAM,GAAGC,EAAM,IAAM,KAAK,qBAAqB,EAC/C7N,EAAE,MAAM8N,EAAU,IAAI,CAGtB,CAER,EAKAH,EAAc,UAAU,gBAAkB,SAAUC,EAAOG,EAAW,CAClEH,EAAM,KAAKG,GAAa,IAAM,IAAM,KAAK,qBAAqB,CAAC,CACnE,EAIAJ,EAAc,UAAU,qBAAuB,UAAY,CACvD,OAAI,KAAK,YAAc,OACnB,KAAK,WAAaD,KAEf,YAAc,KAAK,UAC9B,EACOC,CACX,EAAEF,EAAQ,OAAO,EACjB7O,EAAQ,QAAU+O,CAGZ,EACC,CAEA,SAAS9O,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/B4O,EAAa5O,EAAoB,EAAE,EACnC6O,EAAkB7O,EAAoB,EAAE,EACxC8O,EAAqB9O,EAAoB,EAAE,EAC3C+O,EAAgC,SAAUzB,EAAQ,CAClDL,EAAQ,UAAU8B,EAAgBzB,CAAM,EACxC,SAASyB,GAAiB,CACtB,OAAOzB,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC/D,CAIA,OAAAyB,EAAe,UAAU,eAAiB,UAAY,CAClD,MAAO,CAAC,KAAK,cAAc,CAAC,CAChC,EACAA,EAAe,UAAU,cAAgB,UAAY,CACjD,OAAO,IAAIF,EAAgB,QAAQ,KACnC,KAAK,WAAW,CACpB,EACAE,EAAe,UAAU,SAAW,UAAY,CAC5C,OAAO,KAAK,YAAY,SAAS,CACrC,EACAA,EAAe,UAAU,MAAQ,UAAY,CACzC,IAAIC,EAAM1B,EAAO,UAAU,MAAM,KAAK,IAAI,EAC1C,OAAA0B,EAAI,YAAc,KAAK,YAChBA,CACX,EACAD,EAAe,UAAU,OAAS,UAAY,CAC1C,IAAIxB,EAAW,KAAK,OAAO,SACvB0B,EAAc,KAAK,YACvB,KAAK,YAAc,IAAIH,EAAmB,QAAQvB,EAAS,OAAO0B,EAAY,KAAK,EAAGA,EAAY,IAAM1B,EAAS,OAAO0B,EAAY,GAAG,EAAI,KAAM1B,CAAQ,CAC7J,EAIAwB,EAAe,UAAU,yBAA2B,SAAUX,EAAU,CACpE,IAAIc,EAAe5B,EAAO,UAAU,yBAAyB,KAAK,KAAMc,CAAQ,EAC5Ea,EAAcH,EAAmB,QAAQ,MAAMV,EAAU,KAAK,MAAM,EACxE,OAAIa,GACA,KAAK,YAAcA,EAEfb,EAAS,MAAQ,OACjB,KAAK,UAAU,KAAOA,EAAS,MAE5Bc,GAGA,EAEf,EACOH,CACX,EAAEH,EAAW,OAAO,EACpBpP,EAAQ,QAAUuP,EAGlBA,EAAe,oBAAoB,CAC/B,MAAO,GACP,KAAM,GACN,IAAK,GACL,OAAQ,EACZ,CAAC,CAGK,EACE,CAED,SAAStP,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAImB,EAASX,EAAoB,CAAC,EAC9BY,EAAIZ,EAAoB,CAAC,EACzBmP,EAASnP,EAAoB,CAAC,EAC9BoP,EAAwB,kBACxBC,EAAuB,iGACvBC,EAAiB3O,EAAO,GAC5BnB,EAAQ,eAAiB8P,EACzB,IAAIC,EAAiB3O,EAAE,OAAO,CAAC,EAAG0O,CAAc,EAChD9P,EAAQ,eAAiB+P,EAEzB,IAAIC,EAAmB7O,EAAO,iBAC9B6O,EAAiB,KAAK,eAAe,EACrCA,EAAiB,KAAK,YAAY,EAClCA,EAAiB,KAAK,YAAY,EAIlC,SAASC,EAAgBC,EAAKC,EAAW,CACrC,OAAOJ,EAAe,OAAO,KAAKG,EAAKC,CAAS,CACpD,CACAnQ,EAAQ,gBAAkBiQ,EAO1B,IAAIG,EAAY,UAAY,CACxB,OAAOC,EAAW,SAAS,CAC/B,EACArQ,EAAQ,QAAUoQ,EAElBA,EAAU,IAAM,UAAY,CACxB,IAAIF,EAAMG,EAAW,UAAW,EAAI,EAGpC,OAAIH,EAAI,QAAQ,GACZA,EAAI,IAAI,EAELA,CACX,EAGAE,EAAU,UAAY,UAAY,CAC9B,OAAOC,EAAW,UAAW,GAAM,EAAI,CAC3C,EAMA,SAASA,EAAWzH,EAAM0H,EAAYC,EAAW,CACzCD,IAAe,SAAUA,EAAa,IACtCC,IAAc,SAAUA,EAAY,IACxC,IAAIxK,EAAQ6C,EAAK,CAAC,EACd4H,GAAiB5H,EAAK,SAAW,GAAK,OAAO7C,GAAU,SACvD0K,GACAC,EACAC,GACAT,GACJ,OAAI/O,EAAO,SAAS4E,CAAK,GAAK4J,EAAO,aAAa5J,CAAK,GAAKA,IAAU,OAClEmK,GAAM/O,EAAO,MAAM,KAAMyH,CAAI,GAG7B6H,GAAc,GACdC,EAAc,GACVF,GACIZ,EAAsB,KAAK7J,CAAK,GAEhCA,GAAS,MACT6C,EAAO,CAAC7C,CAAK,EACb0K,GAAc,GACdC,EAAc,KAERC,GAAad,EAAqB,KAAK9J,CAAK,KAClD0K,GAAc,CAACE,GAAW,CAAC,EAC3BD,EAAc,IAGbtP,EAAE,QAAQ2E,CAAK,IAEpB2K,EAAc,IAGdJ,GAAcG,GACdP,GAAM/O,EAAO,IAAI,MAAMA,EAAQyH,CAAI,EAGnCsH,GAAM/O,EAAO,MAAM,KAAMyH,CAAI,EAE7B6H,IACAP,GAAI,WAAa,GACjBA,GAAI,WAAa,IAEZK,IACDG,EACAR,GAAI,WAAa,GAEZM,IACLN,GAAI,UAAUnK,CAAK,IAI/BmK,GAAI,cAAgB,GACbA,EACX,CAKAJ,EAAe,KAAOA,EAAe,MAAQ,SAAU/J,EAAO,CAC1D,IAAI6K,EAAW,KAAK,QAAQ,uBAC5B,OAAI7K,GAAS,MAAQ,OAAO6K,GAAa,WAC9BA,EAAS,IAAI,EAEfA,IAAa,MACXb,EAAe,QAAQ,MAAM,KAAM,SAAS,EAEhDA,EAAe,KAAK,MAAM,KAAM,SAAS,CACpD,EAUAD,EAAe,KAAO,SAAUe,EAAM,CAGlC,GAAI,CAAC,KAAK,cACN,OAAOd,EAAe,KAAK,MAAM,KAAM,SAAS,EAEpD,GAAIc,GAAQ,KACR,OAAO1P,EAAO,SAAS,CACnB,MAAO,KAAK,MAAM,EAClB,QAAS,KAAK,QAAQ,EACtB,QAAS,KAAK,QAAQ,EACtB,aAAc,KAAK,aAAa,CACpC,CAAC,EAGD,KAAK,WAAa,GACd,CAACA,EAAO,WAAW0P,CAAI,GAAK,CAAC1P,EAAO,SAAS0P,CAAI,IACjDA,EAAO1P,EAAO,SAAS0P,CAAI,GAI/B,IAAIC,EAAW,EACf,OAAI3P,EAAO,WAAW0P,CAAI,IACtBC,EAAW,KAAK,MAAMD,EAAK,OAAO,CAAC,EAAI,IAIpC,KAAK,MAAMC,EAAWD,EAAK,MAAM,CAAC,EACpC,QAAQA,EAAK,QAAQ,CAAC,EACtB,QAAQA,EAAK,QAAQ,CAAC,EACtB,aAAaA,EAAK,aAAa,CAAC,CAE7C,EAIAf,EAAe,UAAY,UAAY,CACnC,OAAK,KAAK,aACN,KAAK,IAAI,EAAI,EAEb,KAAK,IAAI,CACL,MAAO,EACP,QAAS,EACT,QAAS,EACT,GAAI,CACR,CAAC,EAGD,KAAK,WAAa,GAClB,KAAK,WAAa,IAEf,IACX,EAEAA,EAAe,QAAU,UAAY,CACjC,MAAO,CAAC,KAAK,UACjB,EAMAA,EAAe,UAAY,UAAY,CACnC,IAAIiB,EACJ,OAAK,KAAK,aACNA,EAAe,KAAK,WACpB,KAAK,IAAI,EAAI,EAEb,KAAK,WAAaA,GAAgB,GAGlC,KAAK,WAAa,IAEf,IACX,EAEAjB,EAAe,QAAU,UAAY,CACjC,MAAO,CAAC,KAAK,UACjB,EAEAA,EAAe,MAAQ,SAAUkB,EAAe,CAG5C,OAAAjB,EAAe,MAAM,KAAK,KAAM,KAAK,YAAciB,CAAa,EAGhE,KAAK,WAAa,GAClB,KAAK,WAAa,GACX,IACX,EAEAlB,EAAe,IAAM,SAAUkB,EAAe,CAC1C,OAAAjB,EAAe,IAAI,KAAK,KAAMiB,CAAa,EAG3C,KAAK,WAAa,GAClB,KAAK,WAAa,GACX,IACX,EAEAlB,EAAe,UAAY,SAAUmB,EAAK,CACtC,OAAIA,GAAO,OAGP,KAAK,WAAa,GAClB,KAAK,WAAa,IAEflB,EAAe,UAAU,MAAM,KAAM,SAAS,CACzD,CAGM,EAEC,SAAS9P,EAAQD,EAAS,CAEjC,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAI5D,IAAIkR,EAAoC,UAAY,CAChD,SAASA,EAAmBC,EAAcC,EAAU,CAChD,KAAK,SAAW,GAChB,KAAK,aAAeD,EACpB,KAAK,SAAWC,CACpB,CAIA,OAAAF,EAAmB,UAAU,SAAW,SAAUnD,EAAU,CACxD,MAAO,CACH,MAAOA,EAAS,WAAW,KAAK,aAAa,QAAS,KAAK,QAAQ,EACnE,IAAKA,EAAS,WAAW,KAAK,aAAa,MAAO,KAAK,QAAQ,CACnE,CACJ,EACOmD,CACX,EAAE,EACFlR,EAAQ,QAAUkR,CAGZ,EAEC,SAASjR,EAAQD,EAASQ,EAAqB,CAetD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BY,EAAIZ,EAAoB,CAAC,EACzBqO,EAAUrO,EAAoB,EAAE,EAChC6Q,EAA8B,SAAUvD,EAAQ,CAChDL,EAAQ,UAAU4D,EAAcvD,CAAM,EACtC,SAASuD,GAAe,CACpB,OAAOvD,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC/D,CAGA,OAAAuD,EAAa,UAAU,GAAK,SAAUC,EAAOC,EAAS,CAClD,OAAAnQ,EAAE,IAAI,EAAE,GAAGkQ,EAAO,KAAK,kBAAkBC,CAAO,CAAC,EAC1C,IACX,EACAF,EAAa,UAAU,IAAM,SAAUC,EAAOC,EAAS,CACnD,OAAAnQ,EAAE,IAAI,EAAE,IAAIkQ,EAAO,KAAK,kBAAkBC,CAAO,CAAC,EAC3C,IACX,EACAF,EAAa,UAAU,kBAAoB,SAAUE,EAAS,CAI1D,IAAIC,EAAY,SAAU5M,EAAI6M,EAAO,CACjC,OAAOF,EAAQ,MAAME,EAAM,SAAW,KAAMA,EAAM,MAAQ,CAAC,CAAC,CAChE,EAKA,OAAKF,EAAQ,OACTA,EAAQ,KAAOnQ,EAAE,QAErBoQ,EAAU,KAAOD,EAAQ,KAClBC,CACX,EACAH,EAAa,UAAU,IAAM,SAAUC,EAAOC,EAAS,CACnD,OAAAnQ,EAAE,IAAI,EAAE,IAAIkQ,EAAOC,CAAO,EACnB,IACX,EACAF,EAAa,UAAU,QAAU,SAAUC,EAAO,CAE9C,QADI1I,EAAO,CAAC,EACHC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCD,EAAKC,EAAK,CAAC,EAAI,UAAUA,CAAE,EAG/B,OAAAzH,EAAE,IAAI,EAAE,eAAekQ,EAAO,CAAE,KAAM1I,CAAK,CAAC,EACrC,IACX,EACAyI,EAAa,UAAU,YAAc,SAAUC,EAAOtF,EAASpD,EAAM,CAGjE,OAAAxH,EAAE,IAAI,EAAE,eAAekQ,EAAO,CAAE,QAAStF,EAAS,KAAMpD,CAAK,CAAC,EACvD,IACX,EACAyI,EAAa,UAAU,YAAc,SAAUK,EAAM,CACjD,IAAIC,EAAOvQ,EAAE,MAAM,KAAM,QAAQ,EACjC,OAAOuQ,GAAQA,EAAKD,CAAI,GAAKC,EAAKD,CAAI,EAAE,OAAS,CACrD,EACOL,CACX,EAAExC,EAAQ,OAAO,EACjB7O,EAAQ,QAAUqR,CAGZ,EAEC,SAASpR,EAAQD,EAAS,CAEjC,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAI4R,EAA6B,UAAY,CACzC,SAASA,EAAYC,EAAW,CAC5B,KAAK,KAAOA,EAAU,SAAS,EAC/B,KAAK,UAAYA,CACrB,CACA,OAAAD,EAAY,UAAU,IAAM,SAAUlR,EAAM,CACxC,OAAO,KAAK,KAAK,IAAIA,CAAI,CAC7B,EACAkR,EAAY,UAAU,IAAM,UAAY,CAExC,EACOA,CACX,EAAE,EACF5R,EAAQ,QAAU4R,CAGZ,EAEC,SAAS3R,EAAQD,EAAS,CAEjC,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAI8R,EAAuB,UAAY,CACnC,SAASA,GAAQ,CACjB,CACA,OAAAA,EAAM,QAAU,SAAUC,EAAW,CACjC,IAAI/D,EAAQ,KACZ,OAAO,oBAAoB,KAAK,SAAS,EAAE,QAAQ,SAAUtN,EAAM,CAC1DqR,EAAU,UAAUrR,CAAI,IACzBqR,EAAU,UAAUrR,CAAI,EAAIsN,EAAM,UAAUtN,CAAI,EAExD,CAAC,CACL,EAKAoR,EAAM,QAAU,SAAUC,EAAW,CACjC,IAAI/D,EAAQ,KACZ,OAAO,oBAAoB,KAAK,SAAS,EAAE,QAAQ,SAAUtN,EAAM,CAC/DqR,EAAU,UAAUrR,CAAI,EAAIsN,EAAM,UAAUtN,CAAI,CACpD,CAAC,CACL,EACOoR,CACX,EAAE,EACF9R,EAAQ,QAAU8R,CAGZ,EAEC,SAAS7R,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIgS,EAAiBxR,EAAoB,CAAC,EAItCyR,EAAkC,UAAY,CAC9C,SAASA,EAAiB5K,EAAOC,EAAKyG,EAAU,CAC5C,KAAK,MAAQ1G,EACb,KAAK,IAAMC,GAAO,KAClB,KAAK,aAAe,KAAK,kBAAkByG,CAAQ,CACvD,CAIA,OAAAkE,EAAiB,MAAQ,SAAUrD,EAAUV,EAAQ,CACjD,IAAI1B,EAAaoC,EAAS,OAASA,EAAS,KACxCnC,EAAWmC,EAAS,IACxB,GAAI,CAACpC,EACD,MAAO,GAEX,IAAIuB,EAAWG,EAAO,SAClB7G,EAAQ0G,EAAS,OAAOvB,CAAU,EAClClF,EAAMmF,EAAWsB,EAAS,OAAOtB,CAAQ,EAAI,KAC7CyF,EAAetD,EAAS,OACxBuD,EAAqBpE,EAAS,IAAI,oBAAoB,EAC1D,OAAK1G,EAAM,QAAQ,GAGf6K,GAAgB,OAChBA,EAAehE,EAAO,cAClBgE,GAAgB,OAChBA,EAAenE,EAAS,IAAI,eAAe,IAG/CmE,IAAiB,IACjB7K,EAAM,UAAU,EACZC,GACAA,EAAI,UAAU,GAGb4K,IAAiB,KACjB7K,EAAM,QAAQ,GACfA,EAAM,KAAK,CAAC,EAEZC,GAAO,CAACA,EAAI,QAAQ,GACpBA,EAAI,KAAK,CAAC,GAGdA,IAAQ,CAACA,EAAI,QAAQ,GAAK,CAACA,EAAI,QAAQD,CAAK,KAC5CC,EAAM,MAEN,CAACA,GAAO6K,IACR7K,EAAMyG,EAAS,mBAAmB,CAAC1G,EAAM,QAAQ,EAAGA,CAAK,GAEtD,IAAI4K,EAAiB5K,EAAOC,EAAKyG,CAAQ,GA5BrC,EA6Bf,EACAkE,EAAiB,eAAiB,SAAUG,EAAU,CAClD,OAAOA,IAAa,SAAWA,IAAa,QAAUA,IAAa,OAASA,IAAa,QAC7F,EACAH,EAAiB,UAAU,SAAW,UAAY,CAC9C,MAAO,EAAE,KAAK,MAAM,QAAQ,GAAM,KAAK,KAAO,KAAK,IAAI,QAAQ,EACnE,EAIAA,EAAiB,UAAU,kBAAoB,SAAUlE,EAAU,CAC/D,IAAIlB,EAAU,KAAK,MAAM,MAAM,EAAE,UAAU,EAAE,QAAQ,EACjDI,EAAQ,KAAK,OAAOc,CAAQ,EAAE,UAAU,EAAE,QAAQ,EACtD,OAAO,IAAIiE,EAAe,QAAQnF,EAASI,CAAK,CACpD,EAIAgF,EAAiB,UAAU,OAAS,SAAUlE,EAAU,CACpD,OAAO,KAAK,IACR,KAAK,IAAI,MAAM,EAEfA,EAAS,mBAAmB,KAAK,SAAS,EAAG,KAAK,KAAK,CAC/D,EACOkE,CACX,EAAE,EACFjS,EAAQ,QAAUiS,CAGZ,EAEC,SAAShS,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BmP,EAASnP,EAAoB,CAAC,EAC9B6R,EAAiB7R,EAAoB,EAAE,EAOvC8R,EAAiC,SAAUxE,EAAQ,CACnDL,EAAQ,UAAU6E,EAAiBxE,CAAM,EACzC,SAASwE,EAAgBT,EAAWU,EAAS,CACzC,IAAIvE,EAAQF,EAAO,KAAK,KAAMyE,CAAO,GAAK,KAC1C,OAAAvE,EAAM,UAAY6D,EACX7D,CACX,CAGA,OAAAsE,EAAgB,UAAU,uBAAyB,SAAU1N,EAAI,CAC7D,IAAI4N,EAAY,KAAK,UACjBC,EACAC,EACAlN,EACJ,KAAK,UAAU,WAAW,EAC1B,KAAK,oBAAoB,EACrBZ,GACA8N,EAAY,CAAE,KAAM/C,EAAO,OAAO/K,CAAE,EAAG,IAAK+K,EAAO,OAAO/K,CAAE,CAAE,EAC9DY,EAAQkN,EAEJF,IACAC,EAAc9C,EAAO,aAAa6C,CAAS,EAC3ChN,EAAQmK,EAAO,eAAenK,EAAOiN,CAAW,GAEpD,KAAK,QAAU,KAAK,SAASjN,EAAM,KAAMA,EAAM,GAAG,EAE9CgN,GAAa,KAAK,QAAQ,gBAGtB,KAAK,UACLC,EAAc9C,EAAO,eAAe,KAAK,QAAS8C,CAAW,GACzDA,GAERjN,EAAQmK,EAAO,cAAc8C,CAAW,GAE5C,KAAK,YAAc9C,EAAO,WAAWnK,EAAOkN,CAAS,IAGrD,KAAK,QAAU,KACf,KAAK,YAAc,MAGvB5E,EAAO,UAAU,uBAAuB,KAAK,KAAMlJ,CAAE,CACzD,EAEA0N,EAAgB,UAAU,gBAAkB,SAAU1N,EAAI,CACtD,IAAI+N,EACJ7E,EAAO,UAAU,gBAAgB,KAAK,KAAMlJ,CAAE,EAE9C+N,EAAM,KAAK,SAAShD,EAAO,OAAO/K,CAAE,EAAG+K,EAAO,OAAO/K,CAAE,CAAC,EAGpD+N,GACA,KAAK,cAAcA,CAAG,CAE9B,EAEAL,EAAgB,UAAU,WAAa,SAAUM,EAAIC,EAAIjO,EAAI,CACzD,IAAI+N,EACJ7E,EAAO,UAAU,WAAW,KAAK,KAAM8E,EAAIC,EAAIjO,CAAE,EACjD+N,EAAM,KAAK,SAAShD,EAAO,OAAO/K,CAAE,EAAG+K,EAAO,OAAO/K,CAAE,CAAC,EACnDkO,EAAYH,EAAK,KAAK,GAAG,IACtB,KAAK,KACL,KAAK,aAAa,EAElBA,GACA,KAAK,cAAcA,CAAG,EAGlC,EAEAL,EAAgB,UAAU,cAAgB,SAAU1N,EAAI,CACpD,KAAK,cAAc,EACnBkJ,EAAO,UAAU,cAAc,KAAK,KAAMlJ,CAAE,CAChD,EAEA0N,EAAgB,UAAU,cAAgB,SAAUK,EAAK,CACrD,IAAII,EAASD,EAAYH,EAAK,KAAK,OAAO,EAC1C,KAAK,IAAMA,EACX,KAAK,QAAQ,UAAW,KAAK,IAAKI,EAAQ,KAAK,OAAO,CAC1D,EAEAT,EAAgB,UAAU,aAAe,UAAY,CAC7C,KAAK,MACL,KAAK,QAAQ,SAAU,KAAK,GAAG,EAC/B,KAAK,cAAc,EACnB,KAAK,IAAM,KAEnB,EAEAA,EAAgB,UAAU,cAAgB,UAAY,CAC9C,KAAK,KACL,KAAK,QAAQ,UAAW,KAAK,GAAG,CAExC,EAEAA,EAAgB,UAAU,qBAAuB,SAAU1N,EAAIoO,EAAa,CACxElF,EAAO,UAAU,qBAAqB,KAAK,KAAMlJ,EAAIoO,CAAW,EAChE,KAAK,QAAU,KACf,KAAK,IAAM,KACX,KAAK,UAAU,cAAc,CACjC,EAEAV,EAAgB,UAAU,gBAAkB,UAAY,CACpDxE,EAAO,UAAU,gBAAgB,KAAK,IAAI,EAGtC,KAAK,aACL,KAAK,UAAU,YAAY,EAC3B,KAAK,UAAU,YAAY,EAEnC,EAEAwE,EAAgB,UAAU,SAAW,SAAU3O,EAAMC,EAAK,CACtD,OAAI,KAAK,cACLD,GAAQ,KAAK,YAAY,KACzBC,GAAO,KAAK,YAAY,KAErB,KAAK,UAAU,SAASD,EAAMC,CAAG,CAC5C,EACO0O,CACX,EAAED,EAAe,OAAO,EACxBrS,EAAQ,QAAUsS,EAGlB,SAASQ,EAAYG,EAAMC,EAAM,CAC7B,MAAI,CAACD,GAAQ,CAACC,EACH,GAEPD,GAAQC,EACDD,EAAK,YAAcC,EAAK,WAC3BC,EAAiBF,EAAMC,CAAI,GAC3BC,EAAiBD,EAAMD,CAAI,EAE5B,EACX,CAEA,SAASE,EAAiBC,EAAQC,EAAU,CACxC,QAASjB,KAAYgB,EACjB,GAAI,CAAC,sCAAsC,KAAKhB,CAAQ,GAChDgB,EAAOhB,CAAQ,IAAMiB,EAASjB,CAAQ,EACtC,MAAO,GAInB,MAAO,EACX,CAGM,EAEC,SAASnS,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,EAAQ,QAAU,SAIlBA,EAAQ,mBAAqB,GAC7B,IAAI2P,EAASnP,EAAoB,CAAC,EAClCR,EAAQ,SAAW2P,EAAO,SAC1B3P,EAAQ,SAAW2P,EAAO,SAC1B3P,EAAQ,MAAQ2P,EAAO,MACvB3P,EAAQ,WAAa2P,EAAO,WAC5B3P,EAAQ,SAAW2P,EAAO,SAC1B3P,EAAQ,MAAQ2P,EAAO,MACvB3P,EAAQ,sBAAwB2P,EAAO,sBACvC3P,EAAQ,aAAe2P,EAAO,aAC9B3P,EAAQ,cAAgB2P,EAAO,cAC/B3P,EAAQ,eAAiB2P,EAAO,eAChC3P,EAAQ,mBAAqB2P,EAAO,mBACpC3P,EAAQ,eAAiB2P,EAAO,eAChC3P,EAAQ,gBAAkB2P,EAAO,gBACjC3P,EAAQ,oBAAsB2P,EAAO,oBACrC3P,EAAQ,mBAAqB2P,EAAO,mBACpC3P,EAAQ,gBAAkB2P,EAAO,gBACjC3P,EAAQ,oBAAsB2P,EAAO,oBACrC3P,EAAQ,sBAAwB2P,EAAO,sBACvC3P,EAAQ,yBAA2B2P,EAAO,yBAC1C3P,EAAQ,iBAAmB2P,EAAO,iBAClC3P,EAAQ,gBAAkB2P,EAAO,gBACjC3P,EAAQ,IAAM2P,EAAO,IACrB3P,EAAQ,KAAO2P,EAAO,KACtB3P,EAAQ,YAAc2P,EAAO,YAC7B3P,EAAQ,eAAiB2P,EAAO,eAChC3P,EAAQ,eAAiB2P,EAAO,eAChC3P,EAAQ,WAAa2P,EAAO,WAC5B3P,EAAQ,eAAiB2P,EAAO,eAChC3P,EAAQ,iBAAmB2P,EAAO,iBAClC3P,EAAQ,4BAA8B2P,EAAO,4BAC7C3P,EAAQ,eAAiB2P,EAAO,eAChC3P,EAAQ,aAAe2P,EAAO,aAC9B3P,EAAQ,WAAa2P,EAAO,WAC5B3P,EAAQ,QAAU2P,EAAO,QACzB3P,EAAQ,YAAc2P,EAAO,YAC7B3P,EAAQ,WAAa2P,EAAO,WAC5B3P,EAAQ,cAAgB2P,EAAO,cAC/B3P,EAAQ,iBAAmB2P,EAAO,iBAClC3P,EAAQ,aAAe2P,EAAO,aAC9B3P,EAAQ,aAAe2P,EAAO,aAC9B3P,EAAQ,aAAe2P,EAAO,aAC9B3P,EAAQ,OAAS2P,EAAO,OACxB3P,EAAQ,OAAS2P,EAAO,OACxB3P,EAAQ,cAAgB2P,EAAO,cAC/B3P,EAAQ,gBAAkB2P,EAAO,gBACjC3P,EAAQ,WAAa2P,EAAO,WAC5B3P,EAAQ,cAAgB2P,EAAO,cAC/B3P,EAAQ,aAAe2P,EAAO,aAC9B3P,EAAQ,qBAAuB2P,EAAO,qBACtC3P,EAAQ,aAAe2P,EAAO,aAC9B3P,EAAQ,gBAAkB2P,EAAO,gBACjC3P,EAAQ,WAAa2P,EAAO,WAC5B3P,EAAQ,iBAAmB2P,EAAO,iBAClC3P,EAAQ,eAAiB2P,EAAO,eAChC3P,EAAQ,kBAAoB2P,EAAO,kBACnC3P,EAAQ,sBAAwB2P,EAAO,sBACvC3P,EAAQ,mBAAqB2P,EAAO,mBACpC3P,EAAQ,mBAAqB2P,EAAO,mBACpC3P,EAAQ,OAAS2P,EAAO,OACxB3P,EAAQ,UAAY2P,EAAO,UAC3B,IAAI2D,EAAoB9S,EAAoB,EAAE,EAC9CR,EAAQ,WAAasT,EAAkB,WACvCtT,EAAQ,YAAcsT,EAAkB,YACxCtT,EAAQ,4BAA8BsT,EAAkB,4BACxD,IAAIC,EAAW/S,EAAoB,EAAE,EACrCR,EAAQ,iBAAmBuT,EAAS,iBACpCvT,EAAQ,OAASuT,EAAS,OAC1BvT,EAAQ,oBAAsBuT,EAAS,oBACvCvT,EAAQ,kCAAoCuT,EAAS,kCACrD,IAAIC,EAAShT,EAAoB,EAAE,EACnCR,EAAQ,0BAA4BwT,EAAO,0BAC3CxT,EAAQ,mCAAqCwT,EAAO,mCACpDxT,EAAQ,0BAA4BwT,EAAO,0BAC3CxT,EAAQ,4BAA8BwT,EAAO,4BAC7CxT,EAAQ,2BAA6BwT,EAAO,2BAC5C,IAAIlH,EAAe9L,EAAoB,EAAE,EACzCR,EAAQ,OAASsM,EAAa,QAC9B,IAAImH,EAAiBjT,EAAoB,EAAE,EAC3CR,EAAQ,aAAeyT,EAAe,QACtC,IAAIC,EAAkBlT,EAAoB,CAAC,EAC3CR,EAAQ,cAAgB0T,EAAgB,QACxC,IAAIC,EAAUnT,EAAoB,EAAE,EACpCR,EAAQ,MAAQ2T,EAAQ,QACxB,IAAIC,EAAgBpT,EAAoB,GAAG,EAC3CR,EAAQ,YAAc4T,EAAc,QACpC,IAAIC,EAAyBrT,EAAoB,EAAE,EACnDR,EAAQ,qBAAuB6T,EAAuB,QACtD,IAAI7B,EAAiBxR,EAAoB,CAAC,EAC1CR,EAAQ,aAAegS,EAAe,QACtC,IAAI8B,EAAuBtT,EAAoB,EAAE,EACjDR,EAAQ,mBAAqB8T,EAAqB,QAClD,IAAIC,EAA0BvT,EAAoB,GAAG,EACrDR,EAAQ,sBAAwB+T,EAAwB,QACxD,IAAIC,EAAgBxT,EAAoB,GAAG,EAC3CR,EAAQ,YAAcgU,EAAc,QACpC,IAAIC,EAAiBzT,EAAoB,GAAG,EAC5CR,EAAQ,aAAeiU,EAAe,QACtC,IAAI7E,GAAa5O,EAAoB,EAAE,EACvCR,EAAQ,SAAWoP,GAAW,QAC9B,IAAI8E,GAAqB1T,EAAoB,EAAE,EAC/CR,EAAQ,iBAAmBkU,GAAmB,QAC9C,IAAItG,EAAmBpN,EAAoB,EAAE,EAC7CR,EAAQ,eAAiB4N,EAAiB,QAC1C,IAAIyB,GAAkB7O,EAAoB,EAAE,EAC5CR,EAAQ,cAAgBqP,GAAgB,QACxC,IAAI8E,GAAe3T,EAAoB,EAAE,EACzCR,EAAQ,WAAamU,GAAa,QAClC,IAAIC,GAAsB5T,EAAoB,EAAE,EAChDR,EAAQ,kBAAoBoU,GAAoB,QAChD,IAAIC,GAAmB7T,EAAoB,CAAC,EAC5CR,EAAQ,eAAiBqU,GAAiB,QAC1C,IAAIC,GAAyB9T,EAAoB,EAAE,EACnDR,EAAQ,qBAAuBsU,GAAuB,QACtD,IAAIhF,GAAqB9O,EAAoB,EAAE,EAC/CR,EAAQ,iBAAmBsP,GAAmB,QAC9C,IAAIiF,GAAsB/T,EAAoB,EAAE,EAChDR,EAAQ,kBAAoBuU,GAAoB,QAChD,IAAIC,GAAgBhU,EAAoB,CAAC,EACzCR,EAAQ,YAAcwU,GAAc,QACpC,IAAIC,GAAkBjU,EAAoB,EAAE,EAC5CR,EAAQ,kBAAoByU,GAAgB,kBAC5CzU,EAAQ,oBAAsByU,GAAgB,oBAC9C,IAAIC,GAAuBlU,EAAoB,EAAE,EACjDR,EAAQ,mBAAqB0U,GAAqB,QAClD,IAAIC,GAAqBnU,EAAoB,EAAE,EAC/CR,EAAQ,iBAAmB2U,GAAmB,QAC9C,IAAIC,GAAoBpU,EAAoB,GAAG,EAC/CR,EAAQ,gBAAkB4U,GAAkB,QAC5C,IAAIC,GAAwBrU,EAAoB,GAAG,EACnDR,EAAQ,oBAAsB6U,GAAsB,QACpD,IAAIC,GAAmBtU,EAAoB,EAAE,EAC7CR,EAAQ,eAAiB8U,GAAiB,QAC1C,IAAInH,GAAUnN,EAAoB,EAAE,EACpCR,EAAQ,MAAQ2N,GAAQ,QACxB,IAAIkB,GAAUrO,EAAoB,EAAE,EACpCR,EAAQ,MAAQ6O,GAAQ,QACxB,IAAIkG,GAAevU,EAAoB,EAAE,EACzCR,EAAQ,WAAa+U,GAAa,QAClC,IAAIC,GAAaxU,EAAoB,GAAG,EACxCR,EAAQ,SAAWgV,GAAW,QAC9B,IAAI3C,GAAiB7R,EAAoB,EAAE,EAC3CR,EAAQ,aAAeqS,GAAe,QACtC,IAAI4C,GAAoBzU,EAAoB,EAAE,EAC9CR,EAAQ,gBAAkBiV,GAAkB,QAC5C,IAAIC,GAAkB1U,EAAoB,GAAG,EAC7CR,EAAQ,cAAgBkV,GAAgB,QACxC,IAAIxH,GAAuBlN,EAAoB,EAAE,EACjDR,EAAQ,mBAAqB0N,GAAqB,QAClD,IAAIyH,GAAY3U,EAAoB,GAAG,EACvCR,EAAQ,QAAUmV,GAAU,QAC5B,IAAIC,GAAY5U,EAAoB,EAAE,EACtCR,EAAQ,QAAUoV,GAAU,QAC5B,IAAIC,GAAc7U,EAAoB,GAAG,EACzCR,EAAQ,UAAYqV,GAAY,QAChC,IAAIC,GAAgB9U,EAAoB,GAAG,EAC3CR,EAAQ,YAAcsV,GAAc,QACpC,IAAIC,GAAa/U,EAAoB,EAAE,EACvCR,EAAQ,SAAWuV,GAAW,QAC9B,IAAIC,GAAUhV,EAAoB,EAAE,EACpCR,EAAQ,MAAQwV,GAAQ,QACxB,IAAIC,GAAcjV,EAAoB,GAAG,EACzCR,EAAQ,UAAYyV,GAAY,QAChC,IAAIC,GAAkBlV,EAAoB,GAAG,EAC7CR,EAAQ,cAAgB0V,GAAgB,QACxC,IAAIC,GAA6BnV,EAAoB,EAAE,EACvDR,EAAQ,yBAA2B2V,GAA2B,QAC9D,IAAIC,GAAapV,EAAoB,GAAG,EACxCR,EAAQ,SAAW4V,GAAW,QAC9B,IAAIC,GAASrV,EAAoB,EAAE,EACnCR,EAAQ,KAAO6V,GAAO,QACtB,IAAIC,GAAiBtV,EAAoB,EAAE,EAC3CR,EAAQ,WAAa8V,GAAe,WACpC9V,EAAQ,cAAgB8V,GAAe,cACvC,IAAIC,GAAkBvV,EAAoB,EAAE,EAC5CR,EAAQ,cAAgB+V,GAAgB,QACxC,IAAIC,GAAyBxV,EAAoB,EAAE,EACnDR,EAAQ,qBAAuBgW,GAAuB,QACtD,IAAIC,GAAkBzV,EAAoB,EAAE,EAC5CR,EAAQ,cAAgBiW,GAAgB,QACxC,IAAIC,GAAiB1V,EAAoB,EAAE,EAC3CR,EAAQ,aAAekW,GAAe,QACtC,IAAIC,GAAmB3V,EAAoB,EAAE,EAC7CR,EAAQ,eAAiBmW,GAAiB,QAC1C,IAAIC,GAAqB5V,EAAoB,GAAG,EAChDR,EAAQ,iBAAmBoW,GAAmB,QAC9C,IAAIC,GAAkB7V,EAAoB,GAAG,EAC7CR,EAAQ,cAAgBqW,GAAgB,QACxC,IAAIC,GAAkB9V,EAAoB,EAAE,EAC5CR,EAAQ,cAAgBsW,GAAgB,QACxC,IAAIC,GAAkB/V,EAAoB,GAAG,EAC7CR,EAAQ,cAAgBuW,GAAgB,QACxC,IAAIC,GAAkBhW,EAAoB,GAAG,EAC7CR,EAAQ,cAAgBwW,GAAgB,QACxC,IAAIC,GAAiBjW,EAAoB,GAAG,EAC5CR,EAAQ,aAAeyW,GAAe,QACtC,IAAIC,GAAgBlW,EAAoB,EAAE,EAC1CR,EAAQ,YAAc0W,GAAc,QACpC,IAAIC,GAA8BnW,EAAoB,EAAE,EACxDR,EAAQ,0BAA4B2W,GAA4B,QAChE,IAAIC,GAAepW,EAAoB,GAAG,EAC1CR,EAAQ,WAAa4W,GAAa,QAClC,IAAIC,GAAarW,EAAoB,GAAG,EACxCR,EAAQ,SAAW6W,GAAW,QAC9B,IAAIC,GAA0BtW,EAAoB,GAAG,EACrDR,EAAQ,sBAAwB8W,GAAwB,QACxD,IAAIC,GAAyBvW,EAAoB,GAAG,EACpDR,EAAQ,qBAAuB+W,GAAuB,QACtD,IAAIC,GAA2BxW,EAAoB,GAAG,EACtDR,EAAQ,uBAAyBgX,GAAyB,QAC1D,IAAIC,GAAYzW,EAAoB,EAAE,EACtCR,EAAQ,QAAUiX,GAAU,QAC5B,IAAIC,GAAyB1W,EAAoB,GAAG,EACpDR,EAAQ,qBAAuBkX,GAAuB,QACtD,IAAIC,GAAwB3W,EAAoB,GAAG,EACnDR,EAAQ,oBAAsBmX,GAAsB,QACpD,IAAIC,GAA0B5W,EAAoB,GAAG,EACrDR,EAAQ,sBAAwBoX,GAAwB,QACxD,IAAIC,GAAc7W,EAAoB,EAAE,EACxCR,EAAQ,UAAYqX,GAAY,QAChC,IAAIC,GAAkC9W,EAAoB,EAAE,EAC5DR,EAAQ,8BAAgCsX,GAAgC,QACxE,IAAIC,GAAc/W,EAAoB,GAAG,EACzCR,EAAQ,UAAYuX,GAAY,QAChC,IAAIC,GAAkChX,EAAoB,GAAG,EAC7DR,EAAQ,8BAAgCwX,GAAgC,QACxE,IAAIC,GAAajX,EAAoB,GAAG,EACxCR,EAAQ,SAAWyX,GAAW,QAC9B,IAAIC,GAAsBlX,EAAoB,GAAG,EACjDR,EAAQ,kBAAoB0X,GAAoB,QAChD,IAAIC,GAAsBnX,EAAoB,GAAG,EACjDR,EAAQ,kBAAoB2X,GAAoB,OAG1C,EAEC,SAAS1X,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAImU,EAAe3T,EAAoB,EAAE,EACrCsU,EAAmBtU,EAAoB,EAAE,EACzCsT,EAAuBtT,EAAoB,EAAE,EACjD,SAASoX,EAA0BnJ,EAAW0C,EAAc,CACxD,IAAI0G,EAAiB,CAAC,EAClBvV,EACJ,IAAKA,EAAI,EAAGA,EAAImM,EAAU,OAAQnM,IAC9BuV,EAAe,KAAK,MAAMA,EAC1BpJ,EAAUnM,CAAC,EAAE,eAAe6O,CAAY,CAAC,EAE7C,OAAO0G,CACX,CACA7X,EAAQ,0BAA4B4X,EACpC,SAASE,EAA0BC,EAAe,CAC9C,OAAO,IAAI5D,EAAa,QAAQ4D,EAAc,YAAY,aAAcA,EAAc,IAAKA,CAAa,CAC5G,CACA/X,EAAQ,0BAA4B8X,EACpC,SAASE,EAA2BC,EAAY,CAC5C,OAAO,IAAInD,EAAiB,QAAQ,IAAIhB,EAAqB,QAAQmE,EAAW,aAAcA,EAAW,SAAS,SAAS,CAAC,EAAGA,EAAW,SAAUA,EAAW,aAC/J,CACJ,CACAjY,EAAQ,2BAA6BgY,EACrC,SAASE,EAA4BH,EAAe,CAChD,OAAOA,EAAc,YAAY,YACrC,CACA/X,EAAQ,4BAA8BkY,EACtC,SAASC,EAAmCC,EAAgB,CACxD,OAAOA,EAAe,kBAC1B,CACApY,EAAQ,mCAAqCmY,CAGvC,EAEC,SAASlY,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIgS,EAAiBxR,EAAoB,CAAC,EACtCmP,EAASnP,EAAoB,EAAE,EAC/B2T,EAAe3T,EAAoB,EAAE,EAKrC6X,EAAoC,UAAY,CAChD,SAASA,EAAmBR,EAAgB,CACxC,KAAK,eAAiBA,GAAkB,CAAC,CAC7C,CACA,OAAAQ,EAAmB,UAAU,kBAAoB,SAAU1L,EAAiB,CACxE,OAAIA,EACO,KAAK,wBAAwBA,CAAe,EAG5C,KAAK,eAAe,IAAIgD,EAAO,yBAAyB,CAEvE,EACA0I,EAAmB,UAAU,kBAAoB,SAAU1L,EAAiB,CACxE,OAAI,KAAK,UAAU,EACR,KAAK,yBAAyBA,CAAe,EAG7C,KAAK,wBAAwBA,CAAe,CAE3D,EACA0L,EAAmB,UAAU,wBAA0B,SAAU1L,EAAiB,CAC9E,IAAIkL,EAAiB,KAAK,eACtBvV,EACAyV,EACAO,EACAC,EAAoB,CAAC,EACzB,IAAKjW,EAAI,EAAGA,EAAIuV,EAAe,OAAQvV,IACnCyV,EAAgBF,EAAevV,CAAC,EAChCgW,EAAcP,EAAc,YAAY,aAAa,UAAUpL,CAAe,EAC1E2L,GACAC,EAAkB,KAAK,IAAIpE,EAAa,QAAQmE,EAAaP,EAAc,IAAKA,CAAa,CAAC,EAGtG,OAAOQ,CACX,EACAF,EAAmB,UAAU,yBAA2B,SAAU1L,EAAiB,CAC/E,IAAI6L,EAAgB,KAAK,eAAe,IAAI7I,EAAO,2BAA2B,EAC1E8I,EAAW,KAAK,YAAY,EAChC,OAAAD,EAAgBxG,EAAe,QAAQ,aAAawG,EAAe7L,CAAe,EAC3E6L,EAAc,IAAI,SAAUrH,EAAc,CAC7C,OAAO,IAAIgD,EAAa,QAAQhD,EAAcsH,CAAQ,CAC1D,CAAC,CACL,EACAJ,EAAmB,UAAU,UAAY,UAAY,CACjD,OAAO,KAAK,YAAY,EAAE,oBAAoB,CAClD,EACAA,EAAmB,UAAU,YAAc,UAAY,CACnD,OAAO,KAAK,kBAAoB,KAAK,eAAe,CAAC,EAAE,GAC3D,EACOA,CACX,EAAE,EACFrY,EAAQ,QAAUqY,CAGZ,EAEC,SAASpY,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIoB,EAAIZ,EAAoB,CAAC,EACzBkY,EAAc,CACd,UAAW,SAAUC,EAAU,CAC3B,IAAIC,EAAWxX,EAAE,SAAS,EACtByX,EAAUD,EAAS,QAAQ,EAC/B,OAAI,OAAOD,GAAa,YACpBA,EAAS,SAAUpR,EAAK,CACpBqR,EAAS,QAAQrR,CAAG,EACpBuR,EAA+BD,EAAStR,CAAG,CAC/C,EAAG,UAAY,CACXqR,EAAS,OAAO,EAChBG,EAA+BF,CAAO,CAC1C,CAAC,EAEEA,CACX,EACA,QAAS,SAAUtR,EAAK,CACpB,IAAIqR,EAAWxX,EAAE,SAAS,EAAE,QAAQmG,CAAG,EACnCsR,EAAUD,EAAS,QAAQ,EAC/B,OAAAE,EAA+BD,EAAStR,CAAG,EACpCsR,CACX,EACA,OAAQ,UAAY,CAChB,IAAID,EAAWxX,EAAE,SAAS,EAAE,OAAO,EAC/ByX,EAAUD,EAAS,QAAQ,EAC/B,OAAAG,EAA+BF,CAAO,EAC/BA,CACX,CACJ,EACA7Y,EAAQ,QAAU0Y,EAClB,SAASI,EAA+BD,EAAStR,EAAK,CAClDsR,EAAQ,KAAO,SAAUG,EAAW,CAChC,OAAI,OAAOA,GAAc,WACdN,EAAY,QAAQM,EAAUzR,CAAG,CAAC,EAEtCsR,CACX,CACJ,CACA,SAASE,EAA+BF,EAAS,CAC7CA,EAAQ,KAAO,SAAUG,EAAWC,EAAU,CAC1C,OAAI,OAAOA,GAAa,YACpBA,EAAS,EAENJ,CACX,CACJ,CAGM,EAEC,SAAS5Y,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIoB,EAAIZ,EAAoB,CAAC,EACzB0Y,EAAuB,UAAY,CACnC,SAASA,EAAMC,EAAgB,CAC3B,KAAK,eAAiBA,EACtB,KAAK,oBAAoB,CAC7B,CACA,OAAAD,EAAM,UAAU,oBAAsB,UAAY,CAC1C,KAAK,oBACL,KAAK,gBAAgB,KAAK,eAAe,IAAI,KAAK,kBAAkB,CAAC,CAE7E,EACAA,EAAM,UAAU,gBAAkB,SAAUE,EAAkB,CAC1D,IAAIC,EACAC,EACJ,GAAIlY,EAAE,cAAcgY,CAAgB,EAAG,CACnCC,EAAkBjY,EAAE,OAAO,CAAC,EAAG,KAAK,WAAW,EAC/C,IAAKkY,KAAcF,EACfC,EAAgBC,CAAU,EAAI,KAAK,wBAAwBF,EAAiBE,CAAU,CAAC,EAE3F,KAAK,YAAcD,CACvB,MACSD,IAAqB,KAC1B,KAAK,YAAc,CAAC,EAE5B,EACAF,EAAM,UAAU,wBAA0B,SAAUK,EAAW,CAC3D,IAAIC,EAAS,KAAK,mBAClB,OAAIA,GAAUD,EAAU,QAAQC,CAAM,IAAM,IACxCD,EAAYC,EAASD,GAElBA,CACX,EACAL,EAAM,UAAU,SAAW,SAAUO,EAAK,CACtC,OAAO,KAAK,QAAQA,CAAG,GAAK,EAChC,EACAP,EAAM,UAAU,aAAe,SAAUI,EAAY,CACjD,IAAIC,EAAY,KAAK,YAAYD,CAAU,EAC3C,OAAIC,EACO,KAAK,cAAgB,IAAMA,EAE/B,EACX,EACAL,EAAM,UAAU,yBAA2B,SAAUQ,EAAmB,CACpE,IAAIH,EACJ,OAAI,KAAK,iCACLA,EAAYG,EAAkB,KAAK,8BAA8B,EAC7DH,GACO,KAAK,cAAgB,IAAM,KAAK,wBAAwBA,CAAS,EAGzE,EACX,EACOL,CACX,EAAE,EACFlZ,EAAQ,QAAUkZ,EAClBA,EAAM,UAAU,QAAU,CAAC,EAC3BA,EAAM,UAAU,YAAc,CAAC,EAC/BA,EAAM,UAAU,cAAgB,GAChCA,EAAM,UAAU,mBAAqB,EAG/B,EAEC,SAASjZ,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIoB,EAAIZ,EAAoB,CAAC,EACzBmZ,EAAcnZ,EAAoB,EAAE,EACpCiT,EAAiBjT,EAAoB,EAAE,EACvCkT,EAAkBlT,EAAoB,CAAC,EAC3CmZ,EAAY,qBAAuB,IACnC,IAAIC,EAAgB,KAChBC,EAAc,EAUdC,EAA+B,UAAY,CAC3C,SAASA,GAAgB,CACrB,KAAK,WAAa,GAClB,KAAK,iBAAmB,CAC5B,CAEA,OAAAA,EAAc,IAAM,UAAY,CAC5B,OAAKF,IACDA,EAAgB,IAAIE,EACpBF,EAAc,KAAK,GAEhBA,CACX,EAEAE,EAAc,OAAS,UAAY,CAC/BA,EAAc,IAAI,EAClBD,GACJ,EAEAC,EAAc,SAAW,UAAY,CACjCD,IACKA,IACDD,EAAc,OAAO,EACrBA,EAAgB,KAExB,EACAE,EAAc,UAAU,KAAO,UAAY,CACvC,IAAI9L,EAAQ,KACZ,KAAK,SAAS5M,EAAE,QAAQ,EAAG,CACvB,WAAY,KAAK,iBACjB,YAAa,KAAK,kBAClB,SAAU,KAAK,eACf,UAAW,KAAK,gBAChB,UAAW,KAAK,gBAChB,QAAS,KAAK,cACd,MAAO,KAAK,YACZ,YAAa,KAAK,kBAClB,YAAa,KAAK,iBACtB,CAAC,EAID,OAAO,iBAAiB,YAAa,KAAK,qBAAuB,SAAUwD,EAAI,CAC3EoJ,EAAM,gBAAgB5M,EAAE,MAAMwD,CAAE,CAAC,CACrC,EAAG,CAAE,QAAS,EAAM,CACpB,EAIA,OAAO,iBAAiB,SAAU,KAAK,kBAAoB,SAAUA,EAAI,CACrEoJ,EAAM,aAAa5M,EAAE,MAAMwD,CAAE,CAAC,CAClC,EAAG,EACH,CACJ,EACAkV,EAAc,UAAU,OAAS,UAAY,CACzC,KAAK,gBAAgB1Y,EAAE,QAAQ,CAAC,EAChC,OAAO,oBAAoB,YAAa,KAAK,qBAAsB,CAAE,QAAS,EAAM,CACpF,EACA,OAAO,oBAAoB,SAAU,KAAK,kBAAmB,EAC7D,CACJ,EAGA0Y,EAAc,UAAU,iBAAmB,SAAUlV,EAAI,CAGrD,KAAK,UAAUA,EAAI,EAAI,EACvB,KAAK,WAAa,GAClB,KAAK,QAAQ,aAAcA,CAAE,CACjC,EACAkV,EAAc,UAAU,gBAAkB,SAAUlV,EAAI,CAChD,KAAK,YACL,KAAK,QAAQ,YAAaA,CAAE,CAEpC,EACAkV,EAAc,UAAU,kBAAoB,SAAUlV,EAAI,CAClD,KAAK,aACL,KAAK,QAAQ,cAAeA,CAAE,EAG9B,KAAK,UAAUA,CAAE,EAEzB,EACAkV,EAAc,UAAU,eAAiB,SAAUlV,EAAI,CACnD,KAAK,UAAUA,CAAE,CACrB,EAGAkV,EAAc,UAAU,gBAAkB,SAAUlV,EAAI,CAC/C,KAAK,kBAAkB,GACxB,KAAK,QAAQ,YAAaA,CAAE,CAEpC,EACAkV,EAAc,UAAU,gBAAkB,SAAUlV,EAAI,CAC/C,KAAK,kBAAkB,GACxB,KAAK,QAAQ,YAAaA,CAAE,CAEpC,EACAkV,EAAc,UAAU,cAAgB,SAAUlV,EAAI,CAC7C,KAAK,kBAAkB,GACxB,KAAK,QAAQ,UAAWA,CAAE,CAElC,EACAkV,EAAc,UAAU,YAAc,SAAUlV,EAAI,CAC3C,KAAK,kBAAkB,GACxB,KAAK,QAAQ,QAASA,CAAE,CAEhC,EAGAkV,EAAc,UAAU,kBAAoB,SAAUlV,EAAI,CACtD,KAAK,QAAQ,cAAeA,CAAE,CAClC,EACAkV,EAAc,UAAU,kBAAoB,SAAUlV,EAAI,CACtD,KAAK,QAAQ,cAAeA,CAAE,CAClC,EACAkV,EAAc,UAAU,aAAe,SAAUlV,EAAI,CACjD,KAAK,QAAQ,SAAUA,CAAE,CAC7B,EAGAkV,EAAc,UAAU,UAAY,SAAUlV,EAAImV,EAAiB,CAC3DA,IAAoB,SAAUA,EAAkB,IAChD,KAAK,aACL,KAAK,WAAa,GAClB,KAAK,QAAQ,WAAYnV,CAAE,EACtBmV,GACD,KAAK,sBAAsB,EAGvC,EACAD,EAAc,UAAU,sBAAwB,UAAY,CACxD,IAAI9L,EAAQ,KACRnC,EAAO8N,EAAY,qBACnB9N,IACA,KAAK,mBACL,WAAW,UAAY,CACnBmC,EAAM,kBACV,EAAGnC,CAAI,EAEf,EACAiO,EAAc,UAAU,kBAAoB,UAAY,CACpD,OAAO,KAAK,YAAc,EAAQ,KAAK,gBAC3C,EACOA,CACX,EAAE,EACF9Z,EAAQ,QAAU8Z,EAClBpG,EAAgB,QAAQ,QAAQoG,CAAa,EAC7CrG,EAAe,QAAQ,QAAQqG,CAAa,CAGtC,EAEC,SAAS7Z,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAI2Z,EAAcnZ,EAAoB,EAAE,EACxCR,EAAQ,SAAW,CAAC,EACpB2Z,EAAY,MAAQ3Z,EAAQ,SAC5B,SAASga,EAAWC,EAAUC,EAAY,CACtCla,EAAQ,SAASia,CAAQ,EAAIC,CACjC,CACAla,EAAQ,WAAaga,EACrB,SAASG,EAAcF,EAAU,CAC7B,OAAOja,EAAQ,SAASia,CAAQ,CACpC,CACAja,EAAQ,cAAgBma,CAGlB,EACE,CACA,CACA,CACA,CACA,CACA,CACA,CAED,SAASla,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIoB,EAAIZ,EAAoB,CAAC,EACzBW,EAASX,EAAoB,CAAC,EAC9BmZ,EAAcnZ,EAAoB,EAAE,EACpC4Z,EAAY5Z,EAAoB,EAAE,EAClCmP,EAASnP,EAAoB,CAAC,EAClCR,EAAQ,iBAAmB,CAAC,EAC5B2Z,EAAY,QAAU3Z,EAAQ,iBAG9B,IAAIqa,EAAsB,CACtB,WAAY,SAAUC,EAAW,CAC7B,MAAO,CAEH,KAAM3K,EAAO,kBAAkB2K,EAAU,QAAQ,EACjD,KAAM3K,EAAO,kBAAkB2K,EAAU,QAAQ,EACjD,MAAO3K,EAAO,kBAAkB2K,EAAU,WAAW,CACzD,CACJ,EAEA,gBAAiB,SAAUA,EAAW,CAClC,OAAOA,EAAU,mBACb,QAAUA,EAAU,WAAa,SACjC,aAAeA,EAAU,WAAa,GAC9C,CACJ,EACIC,EAAuB,CAEvB,iBAAkB,SAAUC,EAAYC,EAAW,CAC/C,IAAIC,EAASF,EAAW,eAAe,GAAG,EAE1C,OAAAE,EAASA,EAAO,QAAQ,2BAA4B,EAAE,EAClDD,EAAU,MACVC,GAAU,OAGVA,EAAS,OAASA,EAEfA,CACX,EAEA,iBAAkB,SAAUF,EAAY,CACpC,OAAOA,EAAW,eAAe,IAAI,EAChC,QAAQ,SAAU,GAAG,CAC9B,EAEA,gBAAiB,SAAUA,EAAY,CACnC,OAAOA,EAAW,eAAe,IAAI,EAChC,QAAQ,MAAO,OAAO,EACtB,QAAQ,UAAW,MAAM,EACzB,QAAQ,SAAU,GAAG,CAC9B,EAEA,qBAAsB,SAAUA,EAAY,CACxC,OAAOA,EAAW,eAAe,IAAI,EAChC,QAAQ,MAAO,OAAO,EACtB,QAAQ,UAAW,MAAM,EACzB,QAAQ,SAAU,GAAG,CAC9B,EAEA,WAAY,SAAUA,EAAY,CAC9B,OAAOA,EAAW,eAAe,IAAI,EAChC,QAAQ,MAAO,EAAE,EACjB,QAAQ,UAAW,EAAE,EACrB,QAAQ,SAAU,GAAG,CAC9B,EAEA,qBAAsB,SAAUA,EAAY,CACxC,OAAOA,EAAW,eAAe,IAAI,EAChC,QAAQ,SAAU,EAAE,CAC7B,CACJ,EAIIG,EAA4B,CAE5B,mBAAoB,SAAUpI,EAAS,CACnC,OAAOA,EAAQ,MACX,OACA,MACR,EAEA,WAAY,SAAUA,EAAS,CAC3B,OAAOA,EAAQ,MACX,MAAQA,EAAQ,gBAAkB,IAClC,IAAMA,EAAQ,gBAAkB,KACxC,EAEA,gBAAiB,SAAUA,EAAS,CAChC,OAAOA,EAAQ,MACX,KAAOA,EAAQ,gBAAkB,IACjC,IAAMA,EAAQ,gBAAkB,IACxC,CACJ,EAEA,SAASqI,EAAkCrI,EAAS,CAChDnR,EAAE,KAAKuZ,EAA2B,SAAUja,EAAMkL,EAAM,CAChD2G,EAAQ7R,CAAI,GAAK,OACjB6R,EAAQ7R,CAAI,EAAIkL,EAAK2G,CAAO,EAEpC,CAAC,CACL,CACAvS,EAAQ,kCAAoC4a,EAG5C,SAASC,EAAiBC,EAAYC,EAAcT,EAAW,CAE3D,IAAIG,GAAYza,EAAQ,iBAAiB8a,CAAU,IAAM9a,EAAQ,iBAAiB8a,CAAU,EAAI,CAAC,GAEjGL,GAAU,MAAQH,EAAU,MAC5BG,GAAU,gBAAkBH,EAAU,WAEtClZ,EAAE,KAAKiZ,EAAqB,SAAU3Z,EAAMkL,GAAM,CAC9C6O,GAAU/Z,CAAI,EAAIkL,GAAK0O,CAAS,CACpC,CAAC,EACD,IAAIU,GAAe5Z,EAAE,WAEjB4Z,KAKAA,GAAa,SAASD,CAAY,EAC9BC,GAAa,SAASF,CAAU,EAC5BR,EAERU,GAAa,SAAS,GAAKA,GAAa,SAAS,EAAE,EAEnDA,GAAa,YAAYV,CAAS,EAE1C,CACAta,EAAQ,iBAAmB6a,EAE3B,SAASI,EAAOH,EAAYI,EAAc,CACtC,IAAIT,EACAD,GAEJC,EAAYza,EAAQ,iBAAiB8a,CAAU,IAAM9a,EAAQ,iBAAiB8a,CAAU,EAAI,CAAC,GAEzFI,IACAT,EAAYza,EAAQ,iBAAiB8a,CAAU,EAAIV,EAAU,aAAa,CAACK,EAAWS,CAAY,CAAC,GAKvGV,GAAaW,EAAoBL,CAAU,EAC3C1Z,EAAE,KAAKmZ,EAAsB,SAAU7Z,GAAMkL,EAAM,CAC3C6O,EAAU/Z,EAAI,GAAK,OACnB+Z,EAAU/Z,EAAI,EAAKkL,EAAM4O,GAAYC,CAAS,EAEtD,CAAC,EAEDL,EAAU,eAAe,OAASU,CACtC,CACA9a,EAAQ,OAASib,EAEjB,SAASE,EAAoBL,EAAY,CACrC,OAAO3Z,EAAO,WAAW2Z,CAAU,GAAK3Z,EAAO,WAAW,IAAI,CAClE,CACAnB,EAAQ,oBAAsBmb,EAG9BF,EAAO,KAAMb,EAAU,eAAe,CAGhC,EAEC,SAASna,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAI2P,EAASnP,EAAoB,CAAC,EAClCR,EAAQ,eAAiB,CACrB,oBAAqB,WACrB,gBAAiB,YACjB,0BAA2B,WAC3B,2BAA4B,CAAE,KAAM,CAAE,EACtC,mBAAoB,GACpB,iBAAkB,WAElB,aAAc,GACd,YAAa,QACb,YAAa,KACb,OAAQ,CACJ,KAAM,QACN,OAAQ,GACR,MAAO,iBACX,EACA,SAAU,GACV,YAAa,GACb,gBAAiB,IACjB,sBAAuB,QAGvB,WAAY,WACZ,QAAS,WACT,QAAS,WACT,oBAAqB,GAErB,aAAc,GACd,WAAY,QACZ,SAAU,MACV,cAAe,WACf,SAAU,GAGV,OAAQ,KACR,MAAO,GACP,WAAY,CACR,KAAM,OACN,KAAM,OACN,SAAU,YACV,SAAU,YACV,KAAM,OACN,MAAO,QACP,MAAO,QACP,KAAM,OACN,IAAK,KACT,EAEA,WAAY,UAEZ,qBAAsB,EAEtB,MAAO,GAGP,YAAa,IACb,mBAAoB,IACpB,WAAY,GAEZ,aAAc,GAEd,WAAY,IACZ,WAAY,QAEZ,WAAY,GACZ,eAAgB,OAChB,gBAAiB,UACjB,iBAAkB,KAClB,mBAAoB,GACpB,kBAAmB,IACnB,eAAgB,GACpB,EACAA,EAAQ,gBAAkB,CACtB,iBAAkB,cACtB,EACAA,EAAQ,YAAc,CAClB,OAAQ,CACJ,KAAM,kBACN,OAAQ,GACR,MAAO,OACX,EACA,YAAa,CACT,KAAM,qBACN,KAAM,oBACN,SAAU,qBACV,SAAU,mBACd,EACA,iBAAkB,CACd,KAAM,oBACN,KAAM,oBACN,SAAU,YACV,SAAU,WACd,CACJ,EACA,IAAIob,EAAiB,CACjB,SACA,SACA,aACA,cACA,kBACJ,EAEA,SAASC,EAAaC,EAAY,CAC9B,OAAO3L,EAAO,WAAW2L,EAAYF,CAAc,CACvD,CACApb,EAAQ,aAAeqb,CAGjB,EAEC,SAASpb,EAAQD,EAAS,CAEjC,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIub,EAAgC,UAAY,CAC5C,SAASA,EAAeC,EAAoBhN,EAAUuJ,EAAe,CACjE,KAAK,mBAAqByD,EAC1B,KAAK,SAAWhN,EACZuJ,IACA,KAAK,cAAgBA,EAE7B,CACA,OAAAwD,EAAe,UAAU,eAAiB,UAAY,CAClD,OAAQ,KAAK,eAAiB,KAAK,UAAU,SAAS,CAC1D,EACOA,CACX,EAAE,EACFvb,EAAQ,QAAUub,CAGZ,EAEC,SAAStb,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BmP,EAASnP,EAAoB,CAAC,EAE9Bib,EAAuB,UAAY,CACnC,SAASA,GAAQ,CACjB,CAGA,OAAAA,EAAM,OAAS,SAAUC,EAAS,CAC9B,IAAIC,EAA0B,SAAU7N,EAAQ,CAC5CL,EAAQ,UAAUkO,EAAU7N,CAAM,EAClC,SAAS6N,GAAW,CAChB,OAAO7N,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC/D,CACA,OAAO6N,CACX,EAAE,IAAI,EACN,OAAAhM,EAAO,aAAa+L,EAASC,EAAS,SAAS,EACxCA,CACX,EAGAF,EAAM,MAAQ,SAAUC,EAAS,CAC7B/L,EAAO,aAAa+L,EAAS,KAAK,SAAS,CAC/C,EACOD,CACX,EAAE,EACFzb,EAAQ,QAAUyb,CAGZ,EAEC,SAASxb,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAImB,EAASX,EAAoB,CAAC,EAC9BmP,EAASnP,EAAoB,CAAC,EAC9B6T,EAAmB7T,EAAoB,CAAC,EACxC4T,EAAsB5T,EAAoB,EAAE,EAChDR,EAAQ,QAAU,CACd,MAAO,SAAU4b,EAAY1N,EAAQ,CACjC,OAAIyB,EAAO,aAAaiM,EAAW,KAAK,GAAKza,EAAO,WAAWya,EAAW,KAAK,GAC3EjM,EAAO,aAAaiM,EAAW,GAAG,GAAKza,EAAO,WAAWya,EAAW,GAAG,EAChExH,EAAoB,QAAQ,MAAMwH,EAAY1N,CAAM,EAGpDmG,EAAiB,QAAQ,MAAMuH,EAAY1N,CAAM,CAEhE,CACJ,CAGM,EAEC,SAASjO,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIoB,EAAIZ,EAAoB,CAAC,EACzBkN,EAAuBlN,EAAoB,EAAE,EAC7Cqb,EAA0B,UAAY,CACtC,SAASA,EAAS3N,EAAQ,CACtB,KAAK,OAASA,EACd,KAAK,UAAY,CAAC,EAClB,KAAK,UAAY,CAAC,CACtB,CACA,OAAA2N,EAAS,MAAQ,SAAU5N,EAAUC,EAAQ,CACzC,IAAIsB,EAAM,IAAI,KAAKtB,CAAM,EACzB,OAAIsB,EAAI,WAAWvB,CAAQ,EAChBuB,EAEJ,EACX,EACAqM,EAAS,YAAc,SAAU1N,EAAI,CACjC,OAAO,OAAOA,CAAE,CACpB,EACA0N,EAAS,WAAa,UAAY,CAC9B,MAAO,MAASA,EAAS,MAC7B,EACAA,EAAS,UAAU,MAAQ,UAAY,CACnC,IAAIC,EAAO,IAAI,KAAK,YAAY,KAAK,MAAM,EAC3C,OAAAA,EAAK,GAAK,KAAK,GACfA,EAAK,MAAQ,KAAK,MAClBA,EAAK,IAAM,KAAK,IAChBD,EAAS,0BAA0B,KAAMC,CAAI,EAC7CA,EAAK,UAAY,KAAK,UAAU,MAAM,EACtCA,EAAK,UAAY1a,EAAE,OAAO,CAAC,EAAG,KAAK,SAAS,EACrC0a,CACX,EACAD,EAAS,UAAU,oBAAsB,UAAY,CACjD,OAAO,KAAK,aAAa,IAAM,oBACnC,EACAA,EAAS,UAAU,eAAiB,UAAY,CAC5C,IAAIE,EAAY,KAAK,aAAa,EAClC,OAAOA,IAAc,sBAAwBA,IAAc,YAC/D,EACAF,EAAS,UAAU,aAAe,UAAY,CAC1C,OAAI,KAAK,WAAa,KACX,KAAK,UAET,KAAK,OAAO,SACvB,EACAA,EAAS,UAAU,cAAgB,UAAY,CAC3C,OAAI,KAAK,YAAc,KACZ,KAAK,WAEZ,KAAK,OAAO,YAAc,KACnB,KAAK,OAAO,WAEhB,KAAK,OAAO,SAAS,IAAI,iBAAiB,CACrD,EACAA,EAAS,UAAU,WAAa,UAAY,CACxC,OAAI,KAAK,SAAW,KACT,KAAK,QAEZ,KAAK,OAAO,SAAW,KAChB,KAAK,OAAO,QAEhB,KAAK,OAAO,SAAS,IAAI,cAAc,CAClD,EACAA,EAAS,UAAU,0BAA4B,UAAY,CACvD,OAAI,KAAK,eAAiB,KACf,KAAK,cAET,KAAK,OAAO,aACvB,EACAA,EAAS,UAAU,6BAA+B,UAAY,CAC1D,OAAI,KAAK,kBAAoB,KAClB,KAAK,iBAET,KAAK,OAAO,gBACvB,EACAA,EAAS,UAAU,qBAAuB,UAAY,CAClD,OAAI,KAAK,UAAY,KACV,KAAK,SAET,KAAK,OAAO,QACvB,EACAA,EAAS,UAAU,SAAW,UAAY,CACtC,IAAIjS,EAAMxI,EAAE,OAAO,CAAC,EAAG,KAAK,SAAS,EACrC,OAAAwI,EAAI,IAAM,KAAK,IACfA,EAAI,OAAS,KAAK,OAClBA,EAAI,UAAY,KAAK,UAAU,MAAM,EACrCA,EAAI,OAAS,KAAK,SAAS,EACvB,KAAK,OAAS,OACdA,EAAI,GAAK,KAAK,OAElBiS,EAAS,0BAA0B,KAAMjS,CAAG,EACrCA,CACX,EACAiS,EAAS,UAAU,yBAA2B,SAAUjN,EAAU,CAC9D,OAAIA,EAAS,IAAM,KACf,KAAK,GAAKiN,EAAS,YAAa,KAAK,MAAQjN,EAAS,EAAG,EAGzD,KAAK,GAAKiN,EAAS,WAAW,EAE9BjN,EAAS,KAAO,KAChB,KAAK,IAAM,OAAOA,EAAS,GAAG,EAG9B,KAAK,IAAMiN,EAAS,WAAW,EAG/Bza,EAAE,QAAQwN,EAAS,SAAS,IAC5B,KAAK,UAAYA,EAAS,WAE1B,OAAOA,EAAS,WAAc,WAC9B,KAAK,UAAYA,EAAS,UAAU,MAAM,KAAK,GAE5C,EACX,EACAiN,EAAS,UAAU,eAAiB,SAAUjN,EAAU,CACpDxN,EAAE,OAAO,KAAK,UAAWwN,CAAQ,CACrC,EACAiN,EAAS,KAAO,EAChBA,EAAS,oBAAsBnO,EAAqB,QAAQ,oBAC5DmO,EAAS,0BAA4BnO,EAAqB,QAAQ,0BAC3DmO,CACX,EAAE,EACF7b,EAAQ,QAAU6b,EAClBnO,EAAqB,QAAQ,QAAQmO,CAAQ,EAC7CA,EAAS,oBAAoB,CAEzB,IAAK,GACL,GAAI,GACJ,UAAW,GACX,OAAQ,GAER,MAAO,GACP,IAAK,GACL,UAAW,GACX,WAAY,GACZ,QAAS,GACT,SAAU,GACV,cAAe,GACf,iBAAkB,GAClB,MAAO,GACP,gBAAiB,GACjB,YAAa,GACb,UAAW,EACf,CAAC,CAGK,EAEC,SAAS5b,EAAQD,EAAS,CAEjC,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,EAAQ,QAAU,CACd,cAAe,CAAC,EAChB,cAAe,SAAUgc,EAAkB,CACvC,KAAK,cAAc,QAAQA,CAAgB,CAC/C,EACA,MAAO,SAAU/N,EAAUF,EAAU,CACjC,IAAIkO,EAAgB,KAAK,cACrB3Z,EACA4Z,EACJ,IAAK5Z,EAAI,EAAGA,EAAI2Z,EAAc,OAAQ3Z,IAElC,GADA4Z,EAAcD,EAAc3Z,CAAC,EAAE,MAAM2L,EAAUF,CAAQ,EACnDmO,EACA,OAAOA,CAGnB,CACJ,CAGM,EAEC,SAASjc,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAI2P,EAASnP,EAAoB,CAAC,EAC9B8O,EAAqB9O,EAAoB,EAAE,EAC3C4O,EAAa5O,EAAoB,EAAE,EACnC8T,EAAyB9T,EAAoB,EAAE,EAC/C6T,EAAmB7T,EAAoB,CAAC,EACxC2b,EAAkC,UAAY,CAC9C,SAASA,GAAmB,CAC5B,CACA,OAAAA,EAAiB,mBAAqB,SAAUpE,EAAenJ,EAAUwN,EAAW,CAChF,IAAI5N,EAAWuJ,EAAc,IACzBsE,EAAY,CAAC,EACbC,EAAgB,CAAC,EACjBC,EAAY,CAAC,EACbC,EAAwB,CAAC,EACzBnO,GAAa,KACbkL,GAAY,KACZnH,EACA3C,GACAgN,GACAC,GACJ,IAAKtK,KAAYxD,EACTU,EAAmB,QAAQ,eAAe8C,CAAQ,EAClDiK,EAAUjK,CAAQ,EAAIxD,EAASwD,CAAQ,EAElC5D,EAAS,eAAe4D,CAAQ,EACrCkK,EAAclK,CAAQ,EAAIxD,EAASwD,CAAQ,EAEtC5D,EAAS,UAAU4D,CAAQ,IAAMxD,EAASwD,CAAQ,IACvDmK,EAAUnK,CAAQ,EAAIxD,EAASwD,CAAQ,GAG/C,OAAA3C,GAAcH,EAAmB,QAAQ,MAAM+M,EAAW7N,EAAS,MAAM,EACrEiB,KACAgN,GAAenI,EAAuB,QAAQ,eAAeyD,EAAc,YAAatI,GAAa2M,CAAS,GAE9GE,EAAc,KAAO9N,EAAS,KAC9BH,GAAaiO,EAAc,IAE1B3M,EAAO,cAAc2M,EAAc,UAAW9N,EAAS,SAAS,IACjE+K,GAAY+C,EAAc,WAE9BlN,EAAW,QAAQ,0BAA0BkN,EAC7CE,CACA,EACAE,GAAc,IAAIP,EAClBO,GAAY,WAAarO,GACzBqO,GAAY,UAAYnD,GACxBmD,GAAY,sBAAwBF,EACpCE,GAAY,UAAYH,EACpBE,KACAC,GAAY,aAAeD,IAExBC,EACX,EAKAP,EAAiB,UAAU,aAAe,SAAU3N,EAAU,CAC1D,IAAImO,EAyBJ,OAxBI,KAAK,eACLA,EAAkBnO,EAAS,YAC3BA,EAAS,YAAc,KAAK,aAAa,oBAAoBmO,EAAiBnO,EAAS,OAAO,QAAQ,GAItG,KAAK,YAAc,OACnBA,EAAS,GAAKY,EAAW,QAAQ,YAAaZ,EAAS,MAAQ,KAAK,UAAW,GAI/E,KAAK,YACLA,EAAS,UAAY,KAAK,WAG1B,KAAK,uBACL6F,EAAiB,QAAQ,0BAA0B,KAAK,sBACxD7F,CACA,EAGA,KAAK,WACLA,EAAS,eAAe,KAAK,SAAS,EAEtCmO,EACO,UAAY,CACfnO,EAAS,YAAcmO,CAC3B,EAGO,UAAY,CAAE,CAE7B,EACAR,EAAiB,UAAU,gBAAkB,SAAUM,EAAc,CAC7DA,GAAgB,CAACA,EAAa,QAAQ,EACtC,KAAK,aAAeA,EAGpB,KAAK,aAAe,IAE5B,EACAN,EAAiB,UAAU,QAAU,UAAY,CAC7C,MAAO,CAAC,KAAK,YACjB,EACOA,CACX,EAAE,EACFnc,EAAQ,QAAUmc,CAGZ,EAEC,SAASlc,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAI2P,EAASnP,EAAoB,CAAC,EAC9B8O,EAAqB9O,EAAoB,EAAE,EAC3Coc,EAAsC,UAAY,CAClD,SAASA,GAAuB,CAC5B,KAAK,SAAW,GAChB,KAAK,WAAa,GAClB,KAAK,YAAc,EACvB,CACA,OAAAA,EAAqB,eAAiB,SAAUC,EAAcC,EAAcV,EAAW,CACnF,IAAIW,EAAWF,EAAa,KAAO,CAACC,EAAa,IAC7CE,EAAaH,EAAa,SAAS,GAAK,CAACC,EAAa,SAAS,EAC/DG,EAAc,CAACJ,EAAa,SAAS,GAAKC,EAAa,SAAS,EAChEI,EACAC,EACAC,EACAC,EAEJ,SAASC,EAAcC,GAAOC,GAAO,CACjC,OAAIpB,EACOzM,EAAO,WAAW4N,GAAOC,GAAOpB,CAAS,EAE3CU,EAAa,SAAS,EACpBnN,EAAO,QAAQ4N,GAAOC,EAAK,EAG3B7N,EAAO,YAAY4N,GAAOC,EAAK,CAE9C,CACA,OAAAN,EAAYI,EAAcR,EAAa,MAAOD,EAAa,KAAK,EAC5DC,EAAa,MAEbK,EAAUG,EAAcR,EAAa,aAAa,OAAO,EAAGD,EAAa,aAAa,OAAO,CAAC,EAC9FO,EAAWD,EAAQ,SAASD,CAAS,GAEzCG,EAAW,IAAIT,EACfS,EAAS,SAAWN,EACpBM,EAAS,WAAaL,EACtBK,EAAS,YAAcJ,EACvBI,EAAS,aAAaH,CAAS,EAC/BG,EAAS,YAAYD,CAAQ,EACtBC,CACX,EAIAT,EAAqB,UAAU,oBAAsB,SAAUa,EAAkB1P,EAAU,CACvF,IAAI1G,EAAQoW,EAAiB,MAAM,MAAM,EACrCnW,EAAM,KACNoW,EAAe,GACnB,OAAID,EAAiB,KAAO,CAAC,KAAK,SAC9BnW,EAAMmW,EAAiB,IAAI,MAAM,EAE5B,KAAK,UAAY,CAACnW,IACvBA,EAAMyG,EAAS,mBAAmB0P,EAAiB,SAAS,EAAGpW,CAAK,GAEpE,KAAK,YACLqW,EAAe,GACVrW,EAAM,QAAQ,GACfA,EAAM,KAAK,CAAC,EAEZC,GAAO,CAACA,EAAI,QAAQ,GACpBA,EAAI,KAAK,CAAC,GAGT,KAAK,cACND,EAAM,QAAQ,GACdA,EAAM,UAAU,EAEhBC,GAAOA,EAAI,QAAQ,GACnBA,EAAI,UAAU,GAGlB,KAAK,YACLoW,EAAe,GACfrW,EAAM,IAAI,KAAK,SAAS,EACpBC,GACAA,EAAI,IAAI,KAAK,SAAS,GAI1B,KAAK,WACLoW,EAAe,GACfpW,EAAI,IAAI,KAAK,QAAQ,GAErB,KAAK,aACLoW,EAAe,GACfrW,EAAM,IAAI,KAAK,UAAU,GAEzBqW,IACArW,EAAQ0G,EAAS,cAAc1G,CAAK,EAChCC,IACAA,EAAMyG,EAAS,cAAczG,CAAG,IAIpC,CAACA,GAAOyG,EAAS,IAAI,oBAAoB,IACzCzG,EAAMyG,EAAS,mBAAmB0P,EAAiB,SAAS,EAAGpW,CAAK,GAEjE,IAAIiI,EAAmB,QAAQjI,EAAOC,EAAKyG,CAAQ,CAC9D,EACA6O,EAAqB,UAAU,aAAe,SAAUM,EAAW,CAC3DA,GAAaA,EAAU,QAAQ,EAC/B,KAAK,UAAYA,EAGjB,KAAK,UAAY,IAEzB,EACAN,EAAqB,UAAU,cAAgB,SAAUe,EAAY,CAC7DA,GAAcA,EAAW,QAAQ,EACjC,KAAK,WAAaA,EAGlB,KAAK,WAAa,IAE1B,EACAf,EAAqB,UAAU,YAAc,SAAUQ,EAAU,CACzDA,GAAYA,EAAS,QAAQ,EAC7B,KAAK,SAAWA,EAGhB,KAAK,SAAW,IAExB,EACAR,EAAqB,UAAU,QAAU,UAAY,CACjD,MAAO,CAAC,KAAK,UAAY,CAAC,KAAK,YAAc,CAAC,KAAK,aAC/C,CAAC,KAAK,WAAa,CAAC,KAAK,YAAc,CAAC,KAAK,QACrD,EACOA,CACX,EAAE,EACF5c,EAAQ,QAAU4c,CAGZ,EAEC,SAAS3c,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BY,EAAIZ,EAAoB,CAAC,EACzBmP,EAASnP,EAAoB,CAAC,EAC9BmN,EAAUnN,EAAoB,EAAE,EAIhCod,EAA0B,SAAU9P,EAAQ,CAC5CL,EAAQ,UAAUmQ,EAAU9P,CAAM,EAClC,SAAS8P,EAASrL,EAAS,CACvB,IAAIvE,EAAQF,EAAO,KAAK,IAAI,GAAK,KACjC,OAAAyE,EAAUA,GAAW,CAAC,EACtBvE,EAAM,UAAYuE,EAAQ,WAAaA,EAAQ,UAAY,OAC3DvE,EAAM,UAAYuE,EAAQ,WAAaA,EAAQ,UAAY,OACpDvE,CACX,CACA,OAAA4P,EAAS,UAAU,OAAS,UAAY,CACpC,KAAK,GAAK,KAAK,SAAS,EACxB,KAAK,cAAc,CACvB,EACAA,EAAS,UAAU,SAAW,UAAY,CACtC,OAAQ,KAAK,SAAWxc,EAAE,iCAAiC,CAC/D,EAEAwc,EAAS,UAAU,MAAQ,UAAY,CACnC,KAAK,UAAU,MAAM,EACrB,KAAK,cAAc,CACvB,EACAA,EAAS,UAAU,QAAU,UAAY,CACrC,KAAK,GAAG,OAAO,CACnB,EAGAA,EAAS,UAAU,cAAgB,UAAY,CAC3C,KAAK,SAAS,IAAI,CACd,aAAc,KAAK,UACnB,aAAc,KAAK,SACvB,CAAC,CACL,EAIAA,EAAS,UAAU,aAAe,SAAUrc,EAAiB,CACzD,IAAIsc,EAAY,KAAK,UACjBC,EAAY,KAAK,UACrBvc,EAAkBA,GAAmB,KAAK,mBAAmB,EACzDsc,IAAc,SACdA,EAAatc,EAAgB,KAAOA,EAAgB,QAEhD,KAAK,SAAS,CAAC,EAAE,YAAc,EAAI,KAAK,SAAS,CAAC,EAAE,YAEpD,SAAW,UAEfuc,IAAc,SACdA,EAAavc,EAAgB,MAAQA,EAAgB,OAEjD,KAAK,SAAS,CAAC,EAAE,aAAe,EAAI,KAAK,SAAS,CAAC,EAAE,aAErD,SAAW,UAEnB,KAAK,SAAS,IAAI,CAAE,aAAcsc,EAAW,aAAcC,CAAU,CAAC,CAC1E,EAGAF,EAAS,UAAU,UAAY,SAAUG,EAAQ,CAC7C,KAAK,SAAS,OAAOA,CAAM,CAC/B,EACAH,EAAS,UAAU,aAAe,UAAY,CAC1C,OAAO,KAAK,SAAS,UAAU,CACnC,EACAA,EAAS,UAAU,aAAe,SAAUha,EAAK,CAC7C,KAAK,SAAS,UAAUA,CAAG,CAC/B,EACAga,EAAS,UAAU,eAAiB,UAAY,CAC5C,OAAO,KAAK,SAAS,CAAC,EAAE,WAC5B,EACAA,EAAS,UAAU,gBAAkB,UAAY,CAC7C,OAAO,KAAK,SAAS,CAAC,EAAE,YAC5B,EACAA,EAAS,UAAU,mBAAqB,UAAY,CAChD,OAAOjO,EAAO,mBAAmB,KAAK,QAAQ,CAClD,EACOiO,CACX,EAAEjQ,EAAQ,OAAO,EACjB3N,EAAQ,QAAU4d,CAGZ,EAEC,SAAS3d,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BY,EAAIZ,EAAoB,CAAC,EACzBmP,EAASnP,EAAoB,CAAC,EAC9BkV,EAAkBlV,EAAoB,GAAG,EACzCwd,EAAkBxd,EAAoB,EAAE,EACxCyd,EAA0C,SAAUnQ,EAAQ,CAC5DL,EAAQ,UAAUwQ,EAA0BnQ,CAAM,EAClD,SAASmQ,EAAyBC,EAAOC,EAAU,CAC/C,IAAInQ,EAAQF,EAAO,KAAK,KAAMoQ,EAAOC,CAAQ,GAAK,KAElD,OAAAnQ,EAAM,YAAc,0BAChBA,EAAM,qBACNA,EAAM,aAAe,IAAIA,EAAM,kBAAkBA,CAAK,GAEtDA,EAAM,qBACNA,EAAM,cAAgB,IAAIA,EAAM,mBAAmBA,CAAK,GAExDA,EAAM,qBACNA,EAAM,cAAgB,IAAIA,EAAM,mBAAmBA,CAAK,GAExDA,EAAM,oBAAsBA,EAAM,gBAClCA,EAAM,cAAgB,IAAIA,EAAM,mBAAmBA,EAAOA,EAAM,aAAa,GAE7EA,EAAM,oBAAsBA,EAAM,gBAClCA,EAAM,cAAgB,IAAIA,EAAM,mBAAmBA,EAAOA,EAAM,aAAa,GAE7EA,EAAM,wBACNA,EAAM,iBAAmB,IAAIA,EAAM,sBAAsBA,CAAK,GAE3DA,CACX,CAGA,OAAAiQ,EAAyB,UAAU,WAAa,SAAU1b,EAAI,CAC1DuL,EAAO,UAAU,WAAW,KAAK,KAAMvL,CAAE,EACrC,KAAK,cACL,KAAK,aAAa,SAASA,CAAE,EAE7B,KAAK,eACL,KAAK,cAAc,SAASA,CAAE,EAElC,KAAK,uBAAuBA,CAAE,CAClC,EACA0b,EAAyB,UAAU,cAAgB,UAAY,CAC3D,KAAK,gBAAgB,EACrBnQ,EAAO,UAAU,cAAc,KAAK,IAAI,CAC5C,EACAmQ,EAAyB,UAAU,qBAAuB,UAAY,CAClE,KAAK,gBAAgB,EACrBnQ,EAAO,UAAU,qBAAqB,KAAK,IAAI,CACnD,EACAmQ,EAAyB,UAAU,mBAAqB,UAAY,CAChEnQ,EAAO,UAAU,mBAAmB,KAAK,IAAI,EACzC,KAAK,kBACL,KAAK,iBAAiB,eAAe,CAE7C,EACAmQ,EAAyB,UAAU,qBAAuB,UAAY,CAClEnQ,EAAO,UAAU,qBAAqB,KAAK,IAAI,EAC3C,KAAK,kBACL,KAAK,iBAAiB,mBAAmB,CAEjD,EACAmQ,EAAyB,UAAU,oBAAsB,SAAU1b,EAAI7B,EAAM6Q,EAAS,CAClF,IAAIvD,EAAQ,KAGZ,KAAK,GAAG,GAAGtN,EAAM,SAAUkE,EAAI,CAC3B,GAAI,CAACxD,EAAEwD,EAAG,MAAM,EAAE,GAAGoJ,EAAM,YAAc,oBACrCA,EAAM,YAAc,0CAGxB,EACI,OAAOuD,EAAQ,KAAKvD,EAAOpJ,CAAE,CAErC,CAAC,CACL,EACAqZ,EAAyB,UAAU,uBAAyB,SAAU1b,EAAI,CACtE,CACI,KAAK,cACL,KAAK,cACL,KAAK,aACT,EAAE,QAAQ,SAAU6b,EAAkB,CAC9BA,GACAA,EAAiB,SAAS7b,CAAE,CAEpC,CAAC,CACL,EACA0b,EAAyB,UAAU,mBAAqB,SAAU1b,EAAI7B,EAAM6Q,EAAS,CACjF,IAAIvD,EAAQ,KACZzL,EAAG,GAAG7B,EAAM,KAAK,YAAa,SAAUkE,EAAI,CACxC,IAAIyZ,EAAQjd,EAAEwD,EAAG,aAAa,EAC9B,GAAI,CAACyZ,EAAM,GAAG,YAAY,EAAG,CACzB,IAAIC,EAAMD,EAAM,KAAK,QAAQ,EAC7B,GAAIC,GAAO,CAACtQ,EAAM,0BAA0B,EACxC,OAAOuD,EAAQ,KAAKvD,EAAOsQ,EAAK1Z,CAAE,CAE1C,CACJ,CAAC,CACL,EACAqZ,EAAyB,UAAU,kBAAoB,UAAY,CAG/D,OAAOD,EAAgB,QAAQ,IAAI,EAAE,kBAAkB,CAC3D,EACAC,EAAyB,UAAU,kBAAoB,UAAY,CAC/D,IAAIM,EAAO,KAAK,SAAS,EAKzB,OAAOA,EAAK,YAAcA,EAAK,aACnC,EACAN,EAAyB,UAAU,0BAA4B,UAAY,CAEvE,OAAQ,KAAK,eAAiB,KAAK,cAAc,YAC5C,KAAK,eAAiB,KAAK,cAAc,UAClD,EACAA,EAAyB,UAAU,kBAAoB,SAAUK,EAAK1Z,EAAI,CACtE,OAAO+K,EAAO,aAAa/K,CAAE,GACzB,CAAC,KAAK,eAAe0Z,EAAK1Z,CAAE,IAC3B,KAAK,oBAAoB0Z,EAAI,UAAU,QAAQ,GAC5C,KAAK,oBAAoBA,EAAI,UAAU,QAAQ,EAC3D,EACAL,EAAyB,UAAU,aAAe,SAAUK,EAAK1Z,EAAI,CACjE,MAAO,CAAC,KAAK,eAAe0Z,EAAK1Z,CAAE,GAC/B,KAAK,oBAAoB0Z,EAAI,UAAU,QAAQ,CACvD,EACAL,EAAyB,UAAU,eAAiB,SAAUK,EAAK1Z,EAAI,CACnE,IAAI2Z,EAAO,KAAK,SAAS,EACrB/P,EAAW8P,EAAI,UAAU,SAC7B,OAAQ,CAAC3O,EAAO,aAAa/K,CAAE,GAAK2Z,EAAK,mBAAmB/P,CAAQ,IAChE,KAAK,oBAAoBA,CAAQ,GACjCpN,EAAEwD,EAAG,MAAM,EAAE,GAAG,aAAa,CACrC,EAIAqZ,EAAyB,UAAU,gBAAkB,UAAY,CAC7D,CACI,KAAK,aACL,KAAK,cACL,KAAK,cACL,KAAK,cACL,KAAK,aACT,EAAE,QAAQ,SAAUO,EAAa,CACzBA,GACAA,EAAY,IAAI,CAExB,CAAC,CACL,EAIAP,EAAyB,UAAU,oBAAsB,SAAUzP,EAAU,CACzE,OAAO,KAAK,wBAAwBA,CAAQ,CAChD,EACAyP,EAAyB,UAAU,wBAA0B,SAAUzP,EAAU,CAC7E,IAAIiQ,EAAajQ,EAAS,0BAA0B,EACpD,OAAIiQ,GAAc,OACdA,EAAa,KAAK,IAAI,oBAAoB,EACtCA,GAAc,OACdA,EAAa,KAAK,4BAA4BjQ,CAAQ,IAGvDiQ,CACX,EACAR,EAAyB,UAAU,4BAA8B,SAAUzP,EAAU,CACjF,IAAIiQ,EAAajQ,EAAS,qBAAqB,EAC/C,OAAIiQ,GAAc,OACdA,EAAa,KAAK,IAAI,UAAU,GAE7BA,CACX,EAIAR,EAAyB,UAAU,6BAA+B,SAAUzP,EAAU,CAClF,OAAO,KAAK,IAAI,yBAAyB,GAAK,KAAK,oBAAoBA,CAAQ,CACnF,EAEAyP,EAAyB,UAAU,2BAA6B,SAAUzP,EAAU,CAChF,OAAO,KAAK,oBAAoBA,CAAQ,CAC5C,EAEAyP,EAAyB,UAAU,oBAAsB,SAAUzP,EAAU,CACzE,IAAIkQ,EAAclQ,EAAS,6BAA6B,EACxD,OAAIkQ,GAAe,OACfA,EAAc,KAAK,IAAI,uBAAuB,EAC1CA,GAAe,OACfA,EAAc,KAAK,4BAA4BlQ,CAAQ,IAGxDkQ,CACX,EAKAT,EAAyB,UAAU,UAAY,SAAUlX,EAAG/F,EAAG,CAC3D,OAAI,KAAK,UACE2O,EAAO,WAAW5I,EAAG/F,EAAG,KAAK,SAAS,EAGtC2O,EAAO,YAAY5I,EAAG/F,CAAC,CAEtC,EAGAid,EAAyB,UAAU,4BAA8B,SAAUU,EAAoB,CAC3F,IAAIJ,EAAO,KAAK,SAAS,EACrB9O,EAAc,KAAK,YACnBmP,EAAkB,KAAK,6BAA6BD,EAAmB,kBAAkB,CAAC,EAC1Frc,EACJ,IAAKA,EAAI,EAAGA,EAAIsc,EAAgB,OAAQtc,IAEpC,GAAI,CAACmN,EAAY,kBAAkB,cAAcmP,EAAgBtc,CAAC,EAAE,mBAAmB,YAAY,EAC/F,MAAO,GAGf,OAAOic,EAAK,SAAS,YAAY,4BAA4BI,CAAkB,CACnF,EAGAV,EAAyB,UAAU,+BAAiC,SAAUU,EAAoB,CAC9F,IAAIJ,EAAO,KAAK,SAAS,EACrB9O,EAAc,KAAK,YACnBmP,EAAkB,KAAK,6BAA6BD,EAAmB,kBAAkB,CAAC,EAC1Frc,EACJ,IAAKA,EAAI,EAAGA,EAAIsc,EAAgB,OAAQtc,IACpC,GAAI,CAACmN,EAAY,kBAAkB,cAAcmP,EAAgBtc,CAAC,EAAE,mBAAmB,YAAY,EAC/F,MAAO,GAGf,IAAKA,EAAI,EAAGA,EAAIsc,EAAgB,OAAQtc,IAKpC,GAAI,CAACic,EAAK,SAAS,YAAY,4BAA4BK,EAAgBtc,CAAC,EAAE,kBAAkB,EAC5F,MAAO,GAGf,MAAO,EACX,EACO2b,CACX,EAAEvI,EAAgB,OAAO,EACzB1V,EAAQ,QAAUie,CAGZ,EAEC,SAAShe,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BY,EAAIZ,EAAoB,CAAC,EACzBW,EAASX,EAAoB,CAAC,EAC9BmP,EAASnP,EAAoB,CAAC,EAC9B8U,EAAgB9U,EAAoB,GAAG,EACvCqT,EAAyBrT,EAAoB,EAAE,EAC/CmV,EAA6BnV,EAAoB,EAAE,EACnDwd,EAAkBxd,EAAoB,EAAE,EACxCwR,EAAiBxR,EAAoB,CAAC,EAGtCqe,EAAsB,SAAU/Q,EAAQ,CACxCL,EAAQ,UAAUoR,EAAM/Q,CAAM,EAC9B,SAAS+Q,EAAK9Q,EAAU+Q,EAAU,CAC9B,IAAI9Q,EAAQF,EAAO,KAAK,KAAM,KAAMgR,EAAS,OAAO,GAAK,KACzD,OAAA9Q,EAAM,iBAAmB,EACzBA,EAAM,WAAa,GACnBA,EAAM,SAAWD,EACjBC,EAAM,SAAW8Q,EAEjB9Q,EAAM,KAAO8Q,EAAS,KAEtB9Q,EAAM,KAAOA,EAAM,KACnBA,EAAM,gBAAgB,EACtBA,EAAM,eAAe,EACrBA,EAAM,qBAAuB,IAAIA,EAAM,0BAA0BA,CAAK,EACtEA,EAAM,uBAAuB,EAC7BA,EAAM,gBAAkB2B,EAAO,gBAAgB3B,EAAM,IAAI,YAAY,CAAC,EAElEA,EAAM,YACNA,EAAM,WAAc,EAEjBA,CACX,CACA,OAAA6Q,EAAK,UAAU,SAAW,UAAY,CAClC,OAAO,IACX,EAEAA,EAAK,UAAU,IAAM,SAAUne,EAAM,CACjC,OAAO,KAAK,QAAQA,CAAI,CAC5B,EAGAme,EAAK,UAAU,gBAAkB,UAAY,CACzC,KAAK,YAAc,IAAIvJ,EAAc,QAAQ,CACzC,MAAO,KAAK,IAAI,iBAAiB,CACrC,CAAC,EACD,KAAK,YAAY,GAAG,QAAS,KAAK,mBAAmB,KAAK,IAAI,CAAC,EAC/D,KAAK,YAAY,GAAG,OAAQ,KAAK,kBAAkB,KAAK,IAAI,CAAC,EAC7D,KAAK,GAAG,gBAAiB,KAAK,gBAAgB,EAC9C,KAAK,GAAG,SAAU,KAAK,eAAe,CAC1C,EACAuJ,EAAK,UAAU,mBAAqB,UAAY,CAC5C,KAAK,SAAS,oBAAoB,EAClC,KAAK,UAAU,KAAK,YAAY,CAAC,CACrC,EACAA,EAAK,UAAU,kBAAoB,UAAY,CACvC,KAAK,SAAS,eAAe,GAC7B,KAAK,UAAU,EAEnB,KAAK,SAAS,kBAAkB,CACpC,EACAA,EAAK,UAAU,iBAAmB,UAAY,CACpC,KAAK,oBACP,KAAK,YAAY,MAAM,CAE/B,EACAA,EAAK,UAAU,gBAAkB,UAAY,CACnC,EAAE,KAAK,kBACT,KAAK,YAAY,OAAO,CAEhC,EACAA,EAAK,UAAU,cAAgB,SAAUjT,EAAMmT,EAAWC,EAAY,CAClE,KAAK,YAAY,MAAMpT,EAAMmT,EAAWC,CAAU,CACtD,EAEAH,EAAK,UAAU,gBAAkB,SAAUjT,EAAM,CACzC,KAAK,YAAY,UACjB,KAAK,YAAY,IAAI,OAAQA,EAAK,KAAK,IAAI,CAAC,EAG5CA,EAAK,KAAK,IAAI,CAEtB,EAIAiT,EAAK,UAAU,aAAe,SAAUpP,EAAa,CACjD,IAAI0B,EAEJ,MAAI,iBAAiB,KAAK1B,EAAY,gBAAgB,EAClD0B,EAAe1B,EAAY,oBAG3B0B,EAAe1B,EAAY,mBAExB,KAAK,YAAY,CACpB,MAAO,KAAK,SAAS,WAAW0B,EAAa,QAAS1B,EAAY,aAAa,EAC/E,IAAK,KAAK,SAAS,WAAW0B,EAAa,MAAO1B,EAAY,aAAa,CAC/E,EAAGA,EAAY,cAAe,KAAK,IAAI,aAAa,GAAK,KAAK,mBAAmBA,CAAW,EAAG,KAAK,IAAI,qBAAqB,CAAC,CAClI,EAGAoP,EAAK,UAAU,mBAAqB,SAAUpP,EAAa,CACvD,IAAIwP,EAAmBxP,EAAY,iBACnC,OAAIwP,IAAqB,OACd,OAEFA,IAAqB,QACnB,KAAK,IAAI,iBAAiB,EAE5BxP,EAAY,oBAAoB,GAAG,MAAM,EAAI,EAC3C,KAGA,IAEf,EAGAoP,EAAK,UAAU,QAAU,SAAUzR,EAAM,CACrC,IAAI8R,EAAqB,KAAK,IAAI,aAAa,EAC3CC,EAAiB,KAAK,qBAAqB,MAAM/R,EAAM,OAAW,EAAI,GACtE,CAAC8R,GACD,CAACA,EAAmB,mBAAmB,OAAOC,EAAe,kBAAkB,IAC/E,KAAK,IAAI,cAAeA,CAAc,CAE9C,EACAN,EAAK,UAAU,UAAY,UAAY,CACnC,KAAK,MAAM,aAAa,CAC5B,EAGAA,EAAK,UAAU,mBAAqB,SAAUpP,EAAa,CACvD,IAAI1B,EAAW,KAAK,SAChBkP,EAAcxN,EAAY,eAAiB,CAAC,KAAK,eACrD,OAAO1B,EAAS,cAAcA,EAAS,WAAW0B,EAAY,mBAAmB,QAASwN,CAAW,EAAGlP,EAAS,WAAW0B,EAAY,mBAAmB,MAAOwN,CAAW,CAAC,CAClL,EACA4B,EAAK,UAAU,iBAAmB,UAAY,CAC1C,KAAK,SAAS,KAAK,SAAU,cAAe,KAAK,WAAW,CAChE,EACAA,EAAK,UAAU,mBAAqB,UAAY,CAC5C,KAAK,gBAAgB,KAAK,SAAU,aAAa,CACrD,EACAA,EAAK,UAAU,UAAY,SAAUO,EAAe,CAChD,KAAK,IAAI,gBAAiBA,CAAa,EACvC,KAAK,IAAI,YAAa,EAAI,CAC9B,EACAP,EAAK,UAAU,YAAc,UAAY,CACrC,KAAK,MAAM,eAAe,EAC1B,KAAK,MAAM,WAAW,CAC1B,EACAA,EAAK,UAAU,YAAc,SAAUO,EAAe,CAClD,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,UAAUA,CAAa,EAC5B,KAAK,gBAAgB,CACzB,EAGAP,EAAK,UAAU,kBAAoB,SAAUpP,EAAa,CACtD,IAAIzB,EAAQ,KACZ,KAAK,cAAc,UAAY,CAC3BA,EAAM,kBAAkByB,CAAW,CACvC,EAAG,OAAQ,MAAM,CACrB,EACAoP,EAAK,UAAU,oBAAsB,UAAY,CAC7C,IAAI7Q,EAAQ,KACZ,KAAK,cAAc,UAAY,CAC3BA,EAAM,oBAAoB,CAC9B,EAAG,OAAQ,SAAS,CACxB,EAEA6Q,EAAK,UAAU,kBAAoB,SAAUpP,EAAa,CACtD3B,EAAO,UAAU,kBAAkB,KAAK,KAAM2B,CAAW,EACrD,KAAK,QACL,KAAK,OAAU,EAEnB,KAAK,QAAQ,eAAe,EAC5B,KAAK,UAAU,CAAE,WAAY,EAAK,CAAC,EACnC,KAAK,kBAAkB,CAC3B,EACAoP,EAAK,UAAU,oBAAsB,UAAY,CAC7C,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,QAAQ,wBAAwB,EACjC,KAAK,SACL,KAAK,QAAW,EAEpB/Q,EAAO,UAAU,oBAAoB,KAAK,IAAI,CAClD,EAGA+Q,EAAK,UAAU,uBAAyB,UAAY,CAChD,IAAI7Q,EAAQ,KACZ,KAAK,GAAG,gBAAiB,UAAY,CACjCA,EAAM,gBAAgBA,EAAM,iBAAiB,CACjD,CAAC,EACD,KAAK,GAAG,yBAA0B,UAAY,CAC1CA,EAAM,mBAAmB,CAC7B,CAAC,CACL,EACA6Q,EAAK,UAAU,kBAAoB,UAAY,CAC3C,KAAK,gBAAgB,aAAc,CAC/B,QAAS,KACT,KAAM,CAAC,KAAM,KAAK,EAAE,CACxB,CAAC,CACL,EACAA,EAAK,UAAU,mBAAqB,UAAY,CAC5C,KAAK,gBAAgB,cAAe,CAChC,QAAS,KACT,KAAM,CAAC,KAAM,KAAK,EAAE,CACxB,CAAC,CACL,EAGAA,EAAK,UAAU,oBAAsB,SAAUO,EAAe,CAC1D,IAAIpR,EAAQ,KACZ,KAAK,cAAc,UAAY,CAC3BA,EAAM,mBAAmBoR,CAAa,EACtCpR,EAAM,gBAAgBA,EAAM,0BAA0B,CAC1D,EAAG,QAAS,MAAM,CACtB,EACA6Q,EAAK,UAAU,sBAAwB,UAAY,CAC/C,IAAI7Q,EAAQ,KACZ,KAAK,cAAc,UAAY,CAC3BA,EAAM,6BAA6B,EACnCA,EAAM,qBAAqB,CAC/B,EAAG,QAAS,SAAS,CACzB,EAGA6Q,EAAK,UAAU,2BAA6B,SAAUQ,EAAuB,CACzE,IAAIrR,EAAQ,KACZ,KAAK,cAAc,UAAY,CAC3BA,EAAM,oBAAoBqR,CAAqB,CACnD,EAAG,gBAAiB,MAAM,CAC9B,EACAR,EAAK,UAAU,6BAA+B,UAAY,CACtD,IAAI7Q,EAAQ,KACZ,KAAK,cAAc,UAAY,CAC3BA,EAAM,sBAAsB,CAChC,EAAG,gBAAiB,SAAS,CACjC,EAIA6Q,EAAK,UAAU,mBAAqB,UAAY,CAC5C/Q,EAAO,UAAU,mBAAmB,KAAK,IAAI,EAC7C,KAAK,SAASkQ,EAAgB,QAAQ,IAAI,EAAG,CACzC,WAAY,KAAK,gBACjB,UAAW,KAAK,uBACpB,CAAC,CACL,EAEAa,EAAK,UAAU,qBAAuB,UAAY,CAC9C/Q,EAAO,UAAU,qBAAqB,KAAK,IAAI,EAC/C,KAAK,gBAAgBkQ,EAAgB,QAAQ,IAAI,CAAC,CACtD,EAMAa,EAAK,UAAU,kBAAoB,UAAY,CAC3C,IAAI7Q,EAAQ,KACR7G,EACAmY,EACAC,GACA,KAAK,IAAI,cAAc,IACvBpY,EAAO,KAAK,oBAAoB,EAC5BA,IACAmY,EAAS3P,EAAO,MAAM,KAAM,oBAAoB,EAChD,KAAK,eAAiB,KAAK,SAAS,OAAO,EAC3C,KAAK,oBAAsB,IAAI,KAAK,EAAE,QAAQ,EAE9C4P,GAAQ,KAAK,eAAe,MAAM,EAAE,QAAQpY,CAAI,EAAE,IAAI,EAAGA,CAAI,EAAE,QAAQ,EAAI,KAAK,eAAe,QAAQ,EACvG,KAAK,sBAAwB,WAAW,UAAY,CAChD6G,EAAM,sBAAwB,KAC9BsR,EAAO,EACPC,GAAQ,CAACpe,EAAO,SAAS,EAAGgG,CAAI,EAChCoY,GAAQ,KAAK,IAAI,IAAKA,EAAK,EAC3BvR,EAAM,uBAAyB,YAAYsR,EAAQC,EAAK,CAC5D,EAAGA,EAAK,GAIpB,EAGAV,EAAK,UAAU,mBAAqB,UAAY,CACxC,KAAK,iBACL,KAAK,iBAEL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,KAAK,eAAe,MAAM,EAAE,IAAI,IAAI,KAAK,EAAE,QAAQ,EAAI,KAAK,mBAAmB,CACvG,EACA,KAAK,uBAAyB,GAEtC,EAGAA,EAAK,UAAU,iBAAmB,UAAY,CACtC,KAAK,yBACD,KAAK,wBACL,aAAa,KAAK,qBAAqB,EACvC,KAAK,sBAAwB,MAE7B,KAAK,yBACL,cAAc,KAAK,sBAAsB,EACzC,KAAK,uBAAyB,MAElC,KAAK,qBAAqB,EAC1B,KAAK,uBAAyB,GAEtC,EAGAA,EAAK,UAAU,WAAa,SAAUW,EAAaC,EAAQC,EAAU,CAC7D,KAAK,UACL,KAAK,UAAaF,EAAaC,CAAM,EAGrC3R,EAAO,UAAU,WAAW,KAAK,KAAM0R,EAAaC,EAAQC,CAAQ,EAExE,KAAK,mBAAmB,CAC5B,EAGAb,EAAK,UAAU,UAAY,SAAUc,EAAQ,CACzC,IAAIC,EAAe,KAAK,eAAiB,KAAK,aAAe,CAAC,GAC9Dxe,EAAE,OAAOwe,EAAcD,CAAM,CACjC,EACAd,EAAK,UAAU,UAAY,UAAY,CACnC,KAAK,kBAAkB,EACvB,KAAK,aAAe,IACxB,EACAA,EAAK,UAAU,kBAAoB,UAAY,CACvC,KAAK,cACL,KAAK,YAAY,KAAK,YAAY,CAE1C,EACAA,EAAK,UAAU,YAAc,UAAY,CACrC,IAAIc,EAAS,CAAC,EACd,OAAI,KAAK,iBACLve,EAAE,OAAOue,EAAQ,KAAK,gBAAgB,CAAC,EAEpCA,CACX,EACAd,EAAK,UAAU,YAAc,SAAUc,EAAQ,CACvCA,EAAO,YAAc,KAAK,iBAC1Bve,EAAE,OAAOue,EAAQ,KAAK,yBAAyB,CAAC,EAEhD,KAAK,iBACL,KAAK,gBAAgBA,CAAM,CAEnC,EACAd,EAAK,UAAU,yBAA2B,UAAY,CAClD,MAAO,CAAC,CACZ,EACAA,EAAK,UAAU,gBAAkB,UAAY,CACzC,MAAO,CAAC,CACZ,EACAA,EAAK,UAAU,gBAAkB,SAAUc,EAAQ,CAEnD,EAGAd,EAAK,UAAU,gBAAkB,SAAU9G,EAAe8H,EAAetd,EAAIqC,GAAI,CAC7E,IAAIkb,GAAe,KAAK,SAAS,aAC7BC,EAAWD,GAAa,mBAAmB/H,EAAc,IAAI,GAAI8H,CAAa,EAC9EpD,GAAeoD,EAAc,aAE7BpD,KACA1E,EAAc,YAAc0E,GAAa,oBAAoB1E,EAAc,YAAa,KAAK,QAAQ,GAEzG,KAAK,iBAAiBA,EAErB0E,IAAgBA,GAAa,WAActb,EAAO,SAAS,EAAG4e,EAAUxd,EAAIqC,EAAE,CACnF,EAEAia,EAAK,UAAU,iBAAmB,SAAU9G,EAAemF,EAAW6C,EAAUxd,GAAIqC,GAAI,CACpF,KAAK,gBAAgB,YAAa,CAC9B,QAASrC,GAAG,CAAC,EACb,KAAM,CACFwV,EAAc,SAAS,EACvBmF,EACA6C,EACAnb,GACA,CAAC,EACD,IACJ,CACJ,CAAC,CACL,EAMAia,EAAK,UAAU,mBAAqB,SAAUmB,EAAgBC,EAASC,EAAU3d,GAAIqC,GAAIub,EAAI,CACrFF,GACA,KAAK,SAAS,aAAa,YAAYD,EAAgBE,CAAQ,EAEnE,KAAK,oBAAoBF,EAAgBC,EAAS1d,GAAIqC,GAAIub,CAAE,CAChE,EAEAtB,EAAK,UAAU,oBAAsB,SAAUmB,EAAgBC,EAAS1d,EAAIqC,GAAIub,GAAI,CAEhF,KAAK,gBAAgB,OAAQ,CACzB,QAAS5d,EAAG,CAAC,EACb,KAAM,CACFyd,EAAe,YAAY,MAAM,MAAM,EACvCpb,GACAub,GACA,IACJ,CACJ,CAAC,EACGF,GAEA,KAAK,gBAAgB,eAAgB,CACjC,QAAS,KACT,KAAM,CACFD,EAAe,cAAc,EAAE,SAAS,EACxC,IACJ,CACJ,CAAC,CAET,EAIAnB,EAAK,UAAU,kBAAoB,SAAU9G,EAAe8H,EAAetd,EAAIqC,GAAI,CAC/E,IAAIkb,GAAe,KAAK,SAAS,aAC7BC,EAAWD,GAAa,mBAAmB/H,EAAc,IAAI,GAAI8H,CAAa,EAElF9H,EAAc,YAAc8H,EAAc,aAAa,oBAAoB9H,EAAc,YAAa,KAAK,QAAQ,EACnH,IAAIqI,GAAcP,EAAc,aAAa,UAAYA,EAAc,aAAa,WACpF,KAAK,mBAAmB9H,EAAeqI,GAAaL,EAAUxd,EAAIqC,EAAE,CACxE,EAEAia,EAAK,UAAU,mBAAqB,SAAU9G,EAAeqI,EAAaL,EAAUxd,GAAIqC,GAAI,CACxF,KAAK,gBAAgB,cAAe,CAChC,QAASrC,GAAG,CAAC,EACb,KAAM,CACFwV,EAAc,SAAS,EACvBqI,EACAL,EACAnb,GACA,CAAC,EACD,IACJ,CACJ,CAAC,CACL,EAKAia,EAAK,UAAU,OAAS,SAAUwB,EAAWzb,EAAI,CAC7C,KAAK,SAASA,CAAE,EAChB,KAAK,yBAAyByb,CAAS,EACvC,KAAK,gBAAgBA,EAAWzb,CAAE,CACtC,EACAia,EAAK,UAAU,yBAA2B,SAAUwB,EAAW,CACvD,KAAK,gBACL,KAAK,gBAAmBA,EAAU,SAAS,KAAK,QAAQ,CAAC,EAGzDvS,EAAO,UAAU,yBAAyB,KAAK,KAAMuS,CAAS,CAEtE,EAEAxB,EAAK,UAAU,gBAAkB,SAAUwB,EAAWzb,EAAI,CACtD,KAAK,WAAa,GAClB,KAAK,cAAcyb,EAAWzb,CAAE,CACpC,EAEAia,EAAK,UAAU,cAAgB,SAAUwB,EAAWzb,EAAI,CACpD,IAAI6K,EAAc,KAAK,SAAS,uBAAuB4Q,CAAS,EAChE,KAAK,gBAAgB,SAAU,CAC3B,QAAS,KACT,KAAM,CACF5Q,EAAY,MACZA,EAAY,IACZ7K,EACA,IACJ,CACJ,CAAC,CACL,EAGAia,EAAK,UAAU,SAAW,SAAUja,EAAI,CAChC,KAAK,aACL,KAAK,WAAa,GACd,KAAK,kBACL,KAAK,iBAAoB,EAE7B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,WAAY,CAC7B,QAAS,KACT,KAAM,CAACA,EAAI,IAAI,CACnB,CAAC,EAET,EAGAia,EAAK,UAAU,oBAAsB,SAAU9G,EAAe,EACtD,CAAC,KAAK,uBACN,KAAK,wBAA0BA,KAC/B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAAE,QAAQ,SAAUuG,EAAK,CACnCA,EAAI,UAAU,gBAAkBvG,GAChCuG,EAAI,IAEJA,EAAI,GAAG,SAAS,aAAa,CAErC,CAAC,EACD,KAAK,sBAAwBvG,EAErC,EACA8G,EAAK,UAAU,sBAAwB,UAAY,CAC3C,KAAK,wBACL,KAAK,aAAa,EAAE,QAAQ,SAAUP,EAAK,CACnCA,EAAI,IACJA,EAAI,GAAG,YAAY,aAAa,CAExC,CAAC,EACD,KAAK,sBAAwB,KAErC,EACAO,EAAK,UAAU,mBAAqB,SAAUrQ,EAAU,CAGpD,OAAO,KAAK,uBAAyB,KAAK,sBAAsB,IAAI,KAAOA,EAAS,EACxF,EAKAqQ,EAAK,UAAU,wBAA0B,SAAUja,EAAI,CAC/C+K,EAAO,qBAAqB/K,CAAE,GAC9B,KAAK,gBAAgBA,CAAE,CAE/B,EACAia,EAAK,UAAU,gBAAkB,SAAUja,EAAI,CAC3C,KAAK,qBAAqBA,CAAE,EAC5B,KAAK,qBAAqBA,CAAE,CAChC,EACAia,EAAK,UAAU,qBAAuB,SAAUja,EAAI,CAChD,IAAI0b,EAEA,KAAK,YAAc,KAAK,IAAI,cAAc,IAE1CA,EAAS,KAAK,IAAI,gBAAgB,GAC9B,CAACA,GAAU,CAAClf,EAAEwD,EAAG,MAAM,EAAE,QAAQ0b,CAAM,EAAE,SACzC,KAAK,SAAS1b,CAAE,EAG5B,EACAia,EAAK,UAAU,qBAAuB,SAAUja,EAAI,CAC5C,KAAK,wBACAxD,EAAEwD,EAAG,MAAM,EAAE,QAAQ,cAAc,EAAE,QACtC,KAAK,sBAAsB,EAGvC,EAGAia,EAAK,UAAU,oBAAsB,UAAY,CAC7C,KAAK,gBAAgB,aAAc,CAC/B,QAAS,KACT,KAAM,CAAC,KAAM,KAAK,EAAE,CACxB,CAAC,CACL,EACAA,EAAK,UAAU,sBAAwB,UAAY,CAC/C,KAAK,gBAAgB,cAAe,CAChC,QAAS,KACT,KAAM,CAAC,KAAM,KAAK,EAAE,CACxB,CAAC,CACL,EAGAA,EAAK,UAAU,gBAAkB,SAAUwB,EAAWE,EAAO3b,EAAI,CAC7D,IAAI6K,GAAc,KAAK,SAAS,uBAAuB4Q,CAAS,EAChE,KAAK,gBAAgB,WAAY,CAC7B,QAASE,EACT,KAAM,CAAC9Q,GAAY,MAAO7K,EAAI,IAAI,CACtC,CAAC,CACL,EAIAia,EAAK,UAAU,mBAAqB,SAAUzR,EAAMqC,EAAa,CAC7D,MAAO,EACX,EAIAoP,EAAK,UAAU,sBAAwB,SAAUne,EAAM,CACnD,IAAI6G,EAAM,KAAK,IAAI7G,CAAI,EAIvB,GAHI,OAAO6G,GAAQ,aACfA,EAAMA,EAAI,MAAM,KAAM,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,CAAC,GAE9DA,EACA,OAAO,KAAK,SAAS,kBAAkBA,CAAG,CAElD,EAIAsX,EAAK,UAAU,eAAiB,UAAY,CACxC,IAAI2B,EAAa,KAAK,IAAI,YAAY,GAAK,CAAC,EACxCC,EAAkB,CAAC,EACnBC,EAAS,EACTpe,GAIJ,IAHI,KAAK,IAAI,UAAU,IAAM,IACzBke,EAAW,KAAK,EAAG,CAAC,EAEnBle,GAAI,EAAGA,GAAI,EAAGA,MACTme,EAAgBne,EAAC,EAAIlB,EAAE,QAAQkB,GAAGke,CAAU,IAAM,KACpDE,IAGR,GAAI,CAACA,EACD,MAAM,IAAI,MAAM,oBAAoB,EAExC,KAAK,gBAAkBD,CAC3B,EAGA5B,EAAK,UAAU,eAAiB,SAAU8B,EAAmB,CACzD,IAAItZ,EAAQsZ,EAAkB,SAAS,EACnCrZ,EAAMqZ,EAAkB,OAAO,EAOnC,OANItZ,IACAA,EAAQ,KAAK,eAAeA,CAAK,GAEjCC,IACAA,EAAM,KAAK,eAAeA,EAAK,GAAI,EAAI,GAEvCD,IAAU,MAAQC,IAAQ,MAAQD,EAAQC,EACnC,IAAI0K,EAAe,QAAQ3K,EAAOC,CAAG,EAEzC,IACX,EAGAuX,EAAK,UAAU,YAAc,SAAU+B,EAAK,CACxC,OAAIzf,EAAO,SAASyf,CAAG,IACnBA,EAAMA,EAAI,IAAI,GAEX,KAAK,gBAAgBA,CAAG,CACnC,EAMA/B,EAAK,UAAU,eAAiB,SAAUzR,EAAMyT,EAAKC,EAAa,CAC1DD,IAAQ,SAAUA,EAAM,GACxBC,IAAgB,SAAUA,EAAc,IAE5C,QADIC,GAAM3T,EAAK,MAAM,EACd,KAAK,iBAAiB2T,GAAI,IAAI,GAAKD,EAAcD,EAAM,GAAK,GAAK,CAAC,GACrEE,GAAI,IAAIF,EAAK,MAAM,EAEvB,OAAOE,EACX,EACOlC,CACX,EAAElJ,EAA2B,OAAO,EACpC3V,EAAQ,QAAU6e,EAClBA,EAAK,UAAU,eAAiB,GAChCA,EAAK,UAAU,0BAA4BhL,EAAuB,QAClEgL,EAAK,MAAM,kBAAmB,CAAC,UAAW,aAAa,EAAG,SAAUmC,EAAM,CACtE,KAAK,kBAAkBA,EAAK,WAAW,CAC3C,EAAG,UAAY,CACX,KAAK,oBAAoB,CAC7B,CAAC,EACDnC,EAAK,MAAM,0BAA2B,CAAC,kBAAmB,uBAAuB,EAAG,SAAUmC,EAAM,CAChG,KAAK,2BAA2BA,EAAK,qBAAqB,CAC9D,EAAG,UAAY,CACX,KAAK,6BAA6B,CACtC,CAAC,EACDnC,EAAK,MAAM,gBAAiB,CAAC,aAAa,EAAG,SAAUmC,EAAM,CACzD,OAAO,KAAK,mBAAmBA,EAAK,WAAW,CACnD,CAAC,EACDnC,EAAK,MAAM,gBAAiB,CAAC,eAAe,EAAG,SAAUmC,EAAM,CAC3D,KAAK,UAAUA,EAAK,aAAa,EACjC,KAAK,iBAAiB,CAC1B,EAAG,UAAY,CACX,KAAK,mBAAmB,EACxB,KAAK,YAAY,CACrB,CAAC,EACDnC,EAAK,MAAM,mBAAoB,CAAC,kBAAmB,WAAW,EAAG,UAAY,CACzE,KAAK,oBAAoB,KAAK,IAAI,eAAe,CAAC,CACtD,EAAG,UAAY,CACX,KAAK,sBAAsB,CAC/B,CAAC,EACDA,EAAK,MAAM,QAAS,CAAC,aAAa,EAAG,SAAUmC,EAAM,CACjD,OAAQ,KAAK,MAAQ,KAAK,aAAaA,EAAK,WAAW,CAC3D,CAAC,EACDnC,EAAK,MAAM,kBAAmB,CAAC,aAAa,EAAG,SAAUmC,EAAM,CAC3D,IAAIjT,EAAW,KAAK,SAChB0B,EAAcuR,EAAK,YAEvB,KAAK,MAAQjT,EAAS,WAAW0B,EAAY,mBAAmB,QAASA,EAAY,aAAa,EAClG,KAAK,IAAM1B,EAAS,WAAW0B,EAAY,mBAAmB,MAAOA,EAAY,aAAa,EAC9F,KAAK,cAAgB1B,EAAS,WAAW0B,EAAY,oBAAoB,QAASA,EAAY,aAAa,EAC3G,KAAK,YAAc1B,EAAS,WAAW0B,EAAY,oBAAoB,MAAOA,EAAY,aAAa,CAC3G,CAAC,CAGK,EAEC,SAASxP,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIoB,EAAIZ,EAAoB,CAAC,EACzBmP,EAASnP,EAAoB,CAAC,EAC9BygB,EAA+B,UAAY,CAC3C,SAASA,EAAcpP,EAAWqP,EAAc,CAC5C,KAAK,KAAOrP,EAAU,SAAS,EAC/B,KAAK,UAAYA,EACjB,KAAK,aAAeqP,CACxB,CACA,OAAAD,EAAc,UAAU,IAAM,SAAUvgB,EAAM,CAC1C,OAAO,KAAK,KAAK,IAAIA,CAAI,CAC7B,EAEAugB,EAAc,UAAU,aAAe,UAAY,CAC/C,IAAIE,EACAC,EACJ,KAAK,gBACD,KAAK,IAAI,iBAAiB,GACtB,KAAK,IAAI,YAAY,GACrB,KAAK,uBAAuB,EACpCD,EAAmB,KAAK,IAAI,kBAAkB,EAC1CA,GAAoB,OACpBA,EAAmB,KAAK,wBAAwB,GAEpDC,EAAkB,KAAK,IAAI,iBAAiB,EACxCA,GAAmB,OACnBA,EAAkB,KAAK,uBAAuB,GAElD,KAAK,iBAAmBD,EACxB,KAAK,gBAAkBC,CAC3B,EACAH,EAAc,UAAU,OAAS,SAAU7B,EAAe,CACtD,IAAI3P,EAAc,KAAK,UAAU,gBAAgB,EAC7CpB,EACAgT,EACAC,EACAC,EAAW,CAAC,EACZC,EAAW,CAAC,EAChB,IAAKnT,KAAc+Q,EACfiC,EAAgBjC,EAAc/Q,CAAU,EACxCiT,EAAcD,EAAc,kBAAkB5R,EAAY,kBAAkB,EACxE4R,EAAc,YAAY,EAAE,eAAe,EAC3CE,EAAS,KAAK,MAAMA,EAAUD,CAAW,EAGzCE,EAAS,KAAK,MAAMA,EAAUF,CAAW,EAGjD,KAAK,eAAeC,CAAQ,EAC5B,KAAK,eAAeC,CAAQ,CAChC,EACAP,EAAc,UAAU,SAAW,UAAY,CAC3C,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,CAC1B,EACAA,EAAc,UAAU,eAAiB,SAAUK,EAAa,CAC5D,IAAI1C,EAAkB,KAAK,UAAU,6BAA6B0C,CAAW,EACzEG,EAAO,KAAK,UAAU,sBAAsB7C,CAAe,EAG/D6C,EAAO,KAAK,eAAeA,CAAI,EAC3B,KAAK,aAAaA,CAAI,IAAM,KAC5B,KAAK,OAASA,EAEtB,EACAR,EAAc,UAAU,iBAAmB,UAAY,CACnD,KAAK,eAAe,KAAK,QAAU,CAAC,CAAC,EACrC,KAAK,OAAS,IAClB,EACAA,EAAc,UAAU,eAAiB,SAAUK,EAAa,CAC5D,IAAI1C,EAAkB,KAAK,UAAU,6BAA6B0C,CAAW,EACzEG,EAAO,KAAK,UAAU,sBAAsB7C,CAAe,EAC3D,KAAK,aAAa6C,CAAI,IAAM,KAC5B,KAAK,OAASA,EAEtB,EACAR,EAAc,UAAU,iBAAmB,UAAY,CACnD,KAAK,eAAe,EACpB,KAAK,OAAS,IAClB,EACAA,EAAc,UAAU,QAAU,UAAY,CAC1C,OAAQ,KAAK,QAAU,CAAC,GAAG,OAAO,KAAK,QAAU,CAAC,CAAC,CACvD,EAEAA,EAAc,UAAU,aAAe,SAAUQ,EAAM,CAGnD,MAAO,EACX,EAEAR,EAAc,UAAU,eAAiB,SAAUQ,EAAM,CAEzD,EACAR,EAAc,UAAU,aAAe,SAAUQ,EAAM,CACnD,IAAIzT,EAAQ,KACZ,GAAI,KAAK,aACL,KAAK,aAAa,WAAW,UAAWyT,EAAM,CAC1C,WAAY,SAAUnD,EAAK,CACvB,OAAOtQ,EAAM,aAAasQ,EAAI,UAAU,QAAQ,CACpD,EACA,OAAQ,SAAUA,EAAK,CACnB,MAAO,CACH,mBAAoBtQ,EAAM,WAAWsQ,EAAI,UAAU,QAAQ,CAC/D,CACJ,EACA,SAAU,SAAUA,EAAK/b,EAAI,CACzB,OAAOyL,EAAM,oBAAoBsQ,EAAI,UAAW/b,CAAE,CACtD,CACJ,CAAC,MAGD,OAAO,EAEf,EACA0e,EAAc,UAAU,eAAiB,UAAY,CAC7C,KAAK,cACL,KAAK,aAAa,SAAS,SAAS,CAE5C,EAGAA,EAAc,UAAU,eAAiB,SAAUQ,EAAMC,EAAiB,CACtE,IAAI1T,EAAQ,KACR0T,IAAoB,SAAUA,EAAkB,IACpD,IAAIC,EAAyB,KAAK,KAAK,kBAAkB,aAAa,EAClEC,EAAO,GACPC,EAAe,CAAC,EAChBvf,EACJ,GAAImf,EAAK,OAAQ,CAEb,IAAKnf,EAAI,EAAGA,EAAImf,EAAK,OAAQnf,IACzB,KAAK,gBAAgBmf,EAAKnf,CAAC,CAAC,EAC5Bsf,GAAQ,KAAK,UAAUH,EAAKnf,CAAC,EAAGof,CAAe,EAInDtgB,EAAEwgB,CAAI,EAAE,KAAK,SAAUtf,EAAGwf,EAAM,CAC5B,IAAIxD,EAAMmD,EAAKnf,CAAC,EACZC,EAAKnB,EAAE0gB,CAAI,EACXH,IACApf,EAAKyL,EAAM,oBAAoBsQ,EAAI,UAAW/b,CAAE,GAEhDA,IACAA,EAAG,KAAK,SAAU+b,CAAG,EACrBA,EAAI,GAAK/b,EACTsf,EAAa,KAAKvD,CAAG,EAE7B,CAAC,CACL,CACA,OAAOuD,CACX,EACAZ,EAAc,UAAU,gBAAkB,SAAU3C,EAAK,CACzD,EAEA2C,EAAc,UAAU,UAAY,SAAU3C,EAAKoD,EAAiB,CAEpE,EAEAT,EAAc,UAAU,cAAgB,SAAU3C,EAAKyD,EAAarD,EAAa,CAC7E,IAAIsD,EAAU,CACV,WACA1D,EAAI,QAAU,WAAa,eAC3BA,EAAI,MAAQ,SAAW,YAC3B,EAAE,OAAO,KAAK,WAAWA,EAAI,UAAU,QAAQ,CAAC,EAChD,OAAIyD,GACAC,EAAQ,KAAK,cAAc,EAE3BtD,GACAsD,EAAQ,KAAK,cAAc,EAG3B,KAAK,KAAK,mBAAmB1D,EAAI,UAAU,QAAQ,GACnD0D,EAAQ,KAAK,aAAa,EAEvBA,CACX,EAGAf,EAAc,UAAU,oBAAsB,SAAU7I,EAAgB7V,EAAI,CACxE,IAAI0f,EAAS7J,EAAe,eAAe,EACvC8J,EAAS,KAAK,KAAK,gBAAgB,cAAe,CAClD,QAASD,EACT,KAAM,CAACA,EAAQ1f,EAAI,KAAK,IAAI,CAChC,CAAC,EACD,OAAI2f,IAAW,GACX3f,EAAK,KAEA2f,GAAUA,IAAW,KAC1B3f,EAAKnB,EAAE8gB,CAAM,GAEV3f,CACX,EAMA0e,EAAc,UAAU,YAAc,SAAU7I,EAAgBjI,EAAWgS,EAAY,CACnF,OAAO,KAAK,aAAa/J,EAAe,cAAc,YAAY,MAAOA,EAAe,cAAc,YAAY,IAAKA,EAAe,mBAAmB,SAAUjI,EAAWgS,CAAU,CAC5L,EACAlB,EAAc,UAAU,aAAe,SAAU5Z,EAAOC,EAAK8J,EAAUjB,EAAWgS,EAAY,CAO1F,OANIhS,GAAa,OACbA,EAAY,KAAK,iBAEjBgS,GAAc,OACdA,EAAa,KAAK,iBAElB,KAAK,kBAAoB,CAAC/Q,EACtB+Q,GAAc7a,EACP,KAAK,KAAK,YAAY,CAAE,MAAOD,EAAO,IAAKC,CAAI,EAAG,GACzD6I,CAAS,EAGF9I,EAAM,OAAO8I,CAAS,EAG9B,EACX,EACA8Q,EAAc,UAAU,uBAAyB,UAAY,CACzD,OAAO,KAAK,IAAI,iBAAiB,CACrC,EACAA,EAAc,UAAU,wBAA0B,UAAY,CAC1D,MAAO,EACX,EACAA,EAAc,UAAU,uBAAyB,UAAY,CACzD,MAAO,EACX,EACAA,EAAc,UAAU,aAAe,SAAUzS,EAAU,CACvD,IAAI4T,EAAa,KAAK,WAAW5T,CAAQ,EACzC,OAAA4T,EAAW,KAAK,YAAY,EACrBA,CACX,EACAnB,EAAc,UAAU,WAAa,SAAUzS,EAAU,CACrD,IAAI6T,EAAO,KAAK,eAAe7T,CAAQ,EACnClM,EACA8f,EAAa,CAAC,EAClB,IAAK9f,EAAI,EAAGA,EAAI+f,EAAK,OAAQ/f,IACzB8f,EAAW,KAAK,MAChBA,EAAYC,EAAK/f,CAAC,EAAE,gBAAkB+f,EAAK/f,CAAC,EAAE,WAAa,CAAC,CAAC,EAEjE,OAAO8f,CACX,EAEAnB,EAAc,UAAU,WAAa,SAAUzS,EAAU,CACrD,MAAO,CACH,mBAAoB,KAAK,WAAWA,CAAQ,EAC5C,eAAgB,KAAK,eAAeA,CAAQ,EAC5C,MAAO,KAAK,aAAaA,CAAQ,CACrC,CACJ,EAEAyS,EAAc,UAAU,WAAa,SAAUzS,EAAU,CACrD,IAAI6T,EAAO,KAAK,eAAe7T,CAAQ,EACnClM,EACAiF,EACJ,IAAKjF,EAAI,EAAGA,EAAI+f,EAAK,QAAU,CAAC9a,EAAKjF,IACjCiF,EAAM8a,EAAK/f,CAAC,EAAE,sBAAwB+f,EAAK/f,CAAC,EAAE,YAC1C+f,EAAK/f,CAAC,EAAE,iBAAmB+f,EAAK/f,CAAC,EAAE,MAE3C,OAAKiF,IACDA,EAAM,KAAK,IAAI,sBAAsB,GAAK,KAAK,IAAI,YAAY,GAE5DA,CACX,EAEA0Z,EAAc,UAAU,eAAiB,SAAUzS,EAAU,CACzD,IAAI6T,EAAO,KAAK,eAAe7T,CAAQ,EACnClM,EACAiF,EACJ,IAAKjF,EAAI,EAAGA,EAAI+f,EAAK,QAAU,CAAC9a,EAAKjF,IACjCiF,EAAM8a,EAAK/f,CAAC,EAAE,kBAAoB+f,EAAK/f,CAAC,EAAE,YACtC+f,EAAK/f,CAAC,EAAE,aAAe+f,EAAK/f,CAAC,EAAE,MAEvC,OAAKiF,IACDA,EAAM,KAAK,IAAI,kBAAkB,GAAK,KAAK,IAAI,YAAY,GAExDA,CACX,EAEA0Z,EAAc,UAAU,aAAe,SAAUzS,EAAU,CACvD,IAAI6T,EAAO,KAAK,eAAe7T,CAAQ,EACnClM,EACAiF,EACJ,IAAKjF,EAAI,EAAGA,EAAI+f,EAAK,QAAU,CAAC9a,EAAKjF,IACjCiF,EAAM8a,EAAK/f,CAAC,EAAE,gBACV+f,EAAK/f,CAAC,EAAE,UAEhB,OAAKiF,IACDA,EAAM,KAAK,IAAI,gBAAgB,GAE5BA,CACX,EACA0Z,EAAc,UAAU,eAAiB,SAAUzS,EAAU,CACzD,IAAI6T,EAAO,KAAK,uBAAuB7T,CAAQ,EAC/C,OAAA6T,EAAK,QAAQ7T,CAAQ,EACd6T,CACX,EACApB,EAAc,UAAU,uBAAyB,SAAUzS,EAAU,CACjE,MAAO,CAACA,EAAS,MAAM,CAC3B,EACAyS,EAAc,UAAU,cAAgB,SAAUQ,EAAM,CACpDA,EAAK,KAAK9R,EAAO,MAAM,KAAM,kBAAkB,CAAC,CACpD,EAEAsR,EAAc,UAAU,iBAAmB,SAAUqB,EAAMC,EAAM,CAC7D,IAAIC,EAAKF,EAAK,UACVG,EAAKF,EAAK,UACVG,EAAMF,EAAG,mBACTG,EAAMF,EAAG,mBACTG,EAAKF,EAAI,aACTG,EAAKF,EAAI,aACb,OAAOC,EAAG,QAAUC,EAAG,SAClBA,EAAG,MAAQA,EAAG,SAAYD,EAAG,MAAQA,EAAG,UACzCD,EAAI,SAAWD,EAAI,UACnB/S,EAAO,oBAAoB6S,EAAG,SAAUC,EAAG,SAAU,KAAK,KAAK,gBAAiBD,EAAG,SAAS,UAAWC,EAAG,SAAS,SAAS,CACpI,EACOxB,CACX,EAAE,EACFjhB,EAAQ,QAAUihB,CAGZ,EACE,CACA,CACA,CACA,CAED,SAAShhB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIsM,EAAe9L,EAAoB,EAAE,EAGzC8L,EAAa,eAAe,OAAS,UAAY,CAC7C,OAAI,KAAK,eAAiB,UAAU,CAAC,EAC1BwW,EAAW,KAAM,UAAU,CAAC,CAAC,EAEpC,KAAK,WACExW,EAAa,gBAAgByW,EAAc,IAAI,EAAG,YAAY,EAErE,KAAK,WACEzW,EAAa,gBAAgByW,EAAc,IAAI,EAAG,uBAAuB,EAEhF,KAAK,cAEEzW,EAAa,gBAAgByW,EAAc,IAAI,CAAC,EAEpDzW,EAAa,eAAe,OAAO,MAAM,KAAM,SAAS,CACnE,EACAA,EAAa,eAAe,YAAc,UAAY,CAClD,OAAI,KAAK,WACEA,EAAa,gBAAgByW,EAAc,IAAI,EAAG,YAAY,EAErE,KAAK,WACEzW,EAAa,gBAAgByW,EAAc,IAAI,EAAG,uBAAuB,EAEhF,KAAK,cAGEzW,EAAa,eAAe,YAAY,MAAMyW,EAAc,IAAI,EAAG,SAAS,EAEhFzW,EAAa,eAAe,YAAY,MAAM,KAAM,SAAS,CACxE,EACA,SAASyW,EAAc7S,GAAK,CACxB,OAAIA,GAAI,OAAO,IAAM,KACVA,GAAI,MAAM,EAAE,OAAO,IAAI,EAE3BA,EACX,CAQA,IAAI8S,EAAiB,KAKjBC,EAAuB,IAKvBC,EAAe,IACfC,EAAe,IAAI,OAAOD,EAAe,MAAQA,EAAe,MAAQA,EAAc,GAAG,EAIzFE,EAAgB,CAChB,EAAG,SAAUhW,GAAM,CACf,OAAOd,EAAa,gBAAgBc,GAAM,GAAG,EAAE,OAAO,CAAC,CAC3D,EACA,EAAG,SAAUA,GAAM,CACf,OAAOd,EAAa,gBAAgBc,GAAM,GAAG,EAAE,OAAO,CAAC,CAC3D,CACJ,EAMIiW,EAAgB,CAChB,EAAG,CAAE,MAAO,EAAG,KAAM,MAAO,EAC5B,EAAG,CAAE,MAAO,EAAG,KAAM,OAAQ,EAC7B,EAAG,CAAE,MAAO,EAAG,KAAM,MAAO,EAC5B,EAAG,CAAE,MAAO,EAAG,KAAM,MAAO,EAC5B,EAAG,CAAE,MAAO,EAAG,KAAM,KAAM,EAC3B,EAAG,CAAE,MAAO,EAAG,KAAM,KAAM,CAC/B,EAMA,SAASP,EAAW1V,GAAM+C,GAAW,CACjC,OAAOmT,GAAuBC,EAAsBpT,EAAS,EAAE,iBAAkB/C,EAAI,CACzF,CACApN,EAAQ,WAAa8iB,EAUrB,SAASU,EAAYjG,GAAOkG,GAAOtT,GAAWuT,GAAWC,GAAO,CAC5D,IAAIC,GACJ,OAAArG,GAAQjR,EAAa,QAAQ,UAAUiR,EAAK,EAC5CkG,GAAQnX,EAAa,QAAQ,UAAUmX,EAAK,EAC5CG,GAAarG,GAAM,WAAW,EAI9BpN,GAAYyT,GAAW,eAAezT,EAAS,GAAKA,GAC7C0T,EAAmBN,EAAsBpT,EAAS,EAAGoN,GAAOkG,GAAOC,IAAa,MAAOC,EAAK,CACvG,CACA3jB,EAAQ,YAAcwjB,EAItB,SAASK,EAAmBC,GAAcvG,GAAOkG,GAAOC,GAAWC,GAAO,CACtE,IAAII,GAAYD,GAAa,UACzBE,GAAezG,GAAM,MAAM,EAAE,UAAU,EACvC0G,GAAeR,GAAM,MAAM,EAAE,UAAU,EACvCS,GAAiBC,GAA4BL,GAAa,iBAAkBvG,EAAK,EACjF6G,GAAiBD,GAA4BL,GAAa,iBAAkBL,EAAK,EACjFY,GACAC,GAAU,GACVC,GACAC,GAAW,GACXC,GACAC,GAAa,GACbC,GAAa,GACbC,GAAY,GAGhB,IAAKP,GAAQ,EAAGA,GAAQN,GAAU,SAAW,CAACA,GAAUM,EAAK,GAAKL,GAAa,OAAOC,GAAcF,GAAUM,EAAK,CAAC,GAAIA,KACpHC,IAAWJ,GAAeG,EAAK,EAGnC,IAAKE,GAASR,GAAU,OAAS,EAAGQ,GAASF,KAAU,CAACN,GAAUQ,EAAM,GAAKP,GAAa,OAAOC,GAAcF,GAAUQ,EAAM,CAAC,IAIxH,EAAAA,GAAS,IAAMF,IAASH,GAAeK,EAAM,IAAM,KAJyEA,KAOhIC,GAAWN,GAAeK,EAAM,EAAIC,GAIxC,IAAKC,GAAUJ,GAAOI,IAAWF,GAAQE,KACrCC,IAAcR,GAAeO,EAAO,EACpCE,IAAcP,GAAeK,EAAO,EAExC,OAAIC,IAAcC,MACVhB,GACAiB,GAAYD,GAAajB,GAAYgB,GAGrCE,GAAYF,GAAahB,GAAYiB,IAGtCE,GAAoBP,GAAUM,GAAYJ,EAAQ,CAC7D,CAGA,IAAIM,EAAuB,CAAC,EAI5B,SAASvB,EAAsBpT,GAAW,CACtC,OAAO2U,EAAqB3U,EAAS,IAChC2U,EAAqB3U,EAAS,EAAI4U,EAAkB5U,EAAS,EACtE,CASA,SAAS4U,EAAkB5U,GAAW,CAClC,IAAI6U,GAASC,EAAkB9U,EAAS,EACxC,MAAO,CACH,iBAAkB+U,GAAsBF,EAAM,EAC9C,UAAWG,EAAeH,EAAM,CACpC,CACJ,CAKA,SAASC,EAAkB9U,GAAW,CAMlC,QALI6U,GAAS,CAAC,EACVI,GAGAC,GAAU,6DACND,GAAQC,GAAQ,KAAKlV,EAAS,GAC9BiV,GAAM,CAAC,EACPJ,GAAO,KAAK,MAAMA,GAClBM,GAAmBF,GAAM,CAAC,CAAC,CAAC,EAEvBA,GAAM,CAAC,EACZJ,GAAO,KAAK,CAAE,MAAOC,EAAkBG,GAAM,CAAC,CAAC,CAAE,CAAC,EAE7CA,GAAM,CAAC,EACZJ,GAAO,KAAK,CAAE,MAAOI,GAAM,CAAC,CAAE,CAAC,EAE1BA,GAAM,CAAC,GACZJ,GAAO,KAAK,MAAMA,GAClBM,GAAmBF,GAAM,CAAC,CAAC,CAAC,EAGpC,OAAOJ,EACX,CAIA,SAASM,GAAmBza,GAAG,CAC3B,OAAIA,KAAM,KACC,CAAC,IAAK,GAAG,EAGT,CAACA,EAAC,CAEjB,CAKA,SAASqa,GAAsBF,GAAQ,CACnC,IAAI3Z,GAAQ,CAAC,EACT/I,GACAijB,GACJ,IAAKjjB,GAAI,EAAGA,GAAI0iB,GAAO,OAAQ1iB,KAC3BijB,GAAQP,GAAO1iB,EAAC,EACZ,OAAOijB,IAAU,SACjBla,GAAM,KAAK,IAAMka,GAAQ,GAAG,EAEvBA,GAAM,MACPA,GAAM,SAASnC,EACf/X,GAAM,KAAK4X,EACP,IAAMsC,GAAM,MAAQ,GACxB,EAGAla,GAAM,KAAKka,GAAM,KAAK,EAGrBA,GAAM,OACXla,GAAM,KAAK6X,EACPgC,GAAsBK,GAAM,KAAK,EACjCrC,CAAY,EAGxB,OAAO7X,GAAM,KAAK2X,CAAc,CACpC,CAMA,SAASmC,EAAeH,GAAQ,CAC5B,IAAIQ,GAAQ,CAAC,EACTljB,GACAijB,GACAE,GACJ,IAAKnjB,GAAI,EAAGA,GAAI0iB,GAAO,OAAQ1iB,KAC3BijB,GAAQP,GAAO1iB,EAAC,EACZijB,GAAM,OACNE,GAAYpC,EAAckC,GAAM,MAAM,OAAO,CAAC,CAAC,EAC/CC,GAAM,KAAKC,GAAYA,GAAU,KAAO,QAAQ,GAE3CF,GAAM,MACXC,GAAM,KAAK,MAAMA,GACjBL,EAAeI,GAAM,KAAK,CAAC,EAG3BC,GAAM,KAAK,IAAI,EAGvB,OAAOA,EACX,CAMA,SAASlC,GAAuBoC,GAAkBtY,GAAM,CACpD,OAAOyX,GAAoBV,GAA4BuB,GAAkBtY,EAAI,EAAE,KAAK,EAAE,CAAC,CAC3F,CAIA,SAAS+W,GAA4BuB,GAAkBtY,GAAM,CACzD,IAAI/B,GAAQ,CAAC,EACTsa,GAAarZ,EAAa,gBAAgBc,GAAMsY,EAAgB,EAChEE,GAAYD,GAAW,MAAM3C,CAAc,EAC3C1gB,GACAujB,GACJ,IAAKvjB,GAAI,EAAGA,GAAIsjB,GAAU,OAAQtjB,KAC9BujB,GAAWD,GAAUtjB,EAAC,EAClBujB,GAAS,OAAO,CAAC,IAAM5C,EACvB5X,GAAM,KAGN+X,EAAcyC,GAAS,UAAU,CAAC,CAAC,EAAEzY,EAAI,CAAC,EAG1C/B,GAAM,KAAKwa,EAAQ,EAG3B,OAAOxa,EACX,CAIA,SAASwZ,GAAoBha,GAAG,CAC5B,OAAOA,GAAE,QAAQsY,EAAc,SAAU2C,GAAIC,GAAI,CAC7C,OAAIA,GAAG,MAAM,OAAO,EACTA,GAGA,EAEf,CAAC,CACL,CAMA,SAASC,GAA4B7V,GAAW,CAC5C,IAAI6U,GAASC,EAAkB9U,EAAS,EACpC7N,GACAijB,GACAU,GACAC,GACJ,IAAK5jB,GAAI,EAAGA,GAAI0iB,GAAO,OAAQ1iB,KAC3BijB,GAAQP,GAAO1iB,EAAC,EACZijB,GAAM,QACNU,GAAY5C,EAAckC,GAAM,MAAM,OAAO,CAAC,CAAC,EAC3CU,KACI,CAACC,IAAQD,GAAU,MAAQC,GAAK,SAChCA,GAAOD,KAKvB,OAAIC,GACOA,GAAK,KAET,IACX,CACAlmB,EAAQ,4BAA8BgmB,EAGhC,EAEC,SAAS/lB,EAAQD,EAAS,CAEjC,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAImmB,EAA4B,UAAY,CACxC,SAASA,EAAWhV,EAAc3C,EAAUuJ,EAAe,CACvD,KAAK,aAAe5G,EACpB,KAAK,SAAW3C,EACZuJ,IACA,KAAK,cAAgBA,EAE7B,CACA,OAAOoO,CACX,EAAE,EACFnmB,EAAQ,QAAUmmB,CAGZ,EAEC,SAASlmB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BmN,EAAUnN,EAAoB,EAAE,EAChCiT,EAAiBjT,EAAoB,EAAE,EACvCkT,EAAkBlT,EAAoB,CAAC,EACvC4lB,EAAuB,SAAUtY,EAAQ,CACzCL,EAAQ,UAAU2Y,EAAOtY,CAAM,EAC/B,SAASsY,GAAQ,CACb,IAAIpY,EAAQF,EAAO,KAAK,IAAI,GAAK,KACjC,OAAAE,EAAM,UAAY,CAAC,EACnBA,EAAM,OAAS,CAAC,EAChBA,EAAM,oBAAoB,EAC1BA,EAAM,YAAY,EACXA,CACX,CACA,OAAAoY,EAAM,MAAQ,SAAU1lB,EAAM,CAE1B,QADIkI,EAAO,CAAC,EACHC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCD,EAAKC,EAAK,CAAC,EAAI,UAAUA,CAAE,EAI1B,KAAK,UAAU,eAAe,kBAAkB,IACjD,KAAK,UAAU,iBAAmB,OAAO,OAAO,KAAK,UAAU,gBAAgB,GAEnF,KAAK,UAAU,iBAAiBnI,CAAI,EAAIkI,CAC5C,EACAwd,EAAM,UAAU,YAAc,UAAY,CAE1C,EACAA,EAAM,UAAU,oBAAsB,UAAY,CAC9C,IAAIC,EAAM,KAAK,iBACX3lB,EACJ,IAAKA,KAAQ2lB,EACT,KAAK,MAAM,MAAM,KAAM,CAAC3lB,CAAI,EAAE,OAAO2lB,EAAI3lB,CAAI,CAAC,CAAC,CAEvD,EACA0lB,EAAM,UAAU,IAAM,SAAU1lB,EAAM,CAClC,OAAOA,KAAQ,KAAK,MACxB,EACA0lB,EAAM,UAAU,IAAM,SAAU1lB,EAAM,CAClC,OAAIA,IAAS,OACF,KAAK,OAET,KAAK,OAAOA,CAAI,CAC3B,EACA0lB,EAAM,UAAU,IAAM,SAAU1lB,EAAM6G,EAAK,CACvC,IAAI+e,EACA,OAAO5lB,GAAS,UAChB4lB,EAAW,CAAC,EACZA,EAAS5lB,CAAI,EAAI6G,IAAQ,OAAY,KAAOA,GAG5C+e,EAAW5lB,EAEf,KAAK,SAAS4lB,CAAQ,CAC1B,EACAF,EAAM,UAAU,MAAQ,SAAUE,EAAU,CACxC,IAAIC,EAAW,KAAK,OAChBC,EAAY,CAAC,EACb9lB,EACJ,IAAKA,KAAQ6lB,EACTC,EAAU9lB,CAAI,EAAI,OAEtB,IAAKA,KAAQ4lB,EACTE,EAAU9lB,CAAI,EAAI4lB,EAAS5lB,CAAI,EAEnC,KAAK,SAAS8lB,CAAS,CAC3B,EACAJ,EAAM,UAAU,MAAQ,SAAU1lB,EAAM,CACpC,IAAI4lB,EAAW,CAAC,EACZG,EACAnkB,EAOJ,IANI,OAAO5B,GAAS,SAChB+lB,EAAQ,CAAC/lB,CAAI,EAGb+lB,EAAQ/lB,EAEP4B,EAAI,EAAGA,EAAImkB,EAAM,OAAQnkB,IAC1BgkB,EAASG,EAAMnkB,CAAC,CAAC,EAAI,OAEzB,KAAK,SAASgkB,CAAQ,CAC1B,EACAF,EAAM,UAAU,SAAW,SAAUE,EAAU,CAC3C,IAAII,EAAe,CAAC,EAChBC,EAAa,EACbjmB,EACA6G,EACJ,IAAK7G,KAAQ4lB,EACT/e,EAAM+e,EAAS5lB,CAAI,GAIf,OAAO6G,GAAQ,UACfA,IAAQ,KAAK,OAAO7G,CAAI,KACxBgmB,EAAahmB,CAAI,EAAI6G,EACrBof,KAGR,GAAIA,EAAY,CACZ,KAAK,QAAQ,qBAAsBD,CAAY,EAC/C,IAAKhmB,KAAQgmB,EACTnf,EAAMmf,EAAahmB,CAAI,EACvB,KAAK,QAAQ,gBAAiBA,EAAM6G,CAAG,EACvC,KAAK,QAAQ,iBAAmB7G,EAAM6G,CAAG,EAE7C,IAAK7G,KAAQgmB,EACTnf,EAAMmf,EAAahmB,CAAI,EACnB6G,IAAQ,OACR,OAAO,KAAK,OAAO7G,CAAI,EAGvB,KAAK,OAAOA,CAAI,EAAI6G,EAExB,KAAK,QAAQ,UAAY7G,EAAM6G,CAAG,EAClC,KAAK,QAAQ,SAAU7G,EAAM6G,CAAG,EAEpC,KAAK,QAAQ,cAAemf,CAAY,CAC5C,CACJ,EACAN,EAAM,UAAU,MAAQ,SAAU1lB,EAAMkmB,EAASC,EAAWC,EAAU,CAClE,IAAI9Y,EAAQ,KACZ,KAAK,QAAQtN,CAAI,EACjB,KAAK,UAAUA,CAAI,EAAI,KAAK,WAAWkmB,EAAS,SAAU5F,EAAM,CAC5D,IAAIvc,EAAMoiB,EAAU,KAAK7Y,EAAOgT,CAAI,EAChCvc,GAAOA,EAAI,MACXuJ,EAAM,MAAMtN,CAAI,EAChB+D,EAAI,KAAK,SAAU8C,EAAK,CACpByG,EAAM,IAAItN,EAAM6G,CAAG,CACvB,CAAC,GAGDyG,EAAM,IAAItN,EAAM+D,CAAG,CAE3B,EAAG,SAAUuc,EAAM,CACfhT,EAAM,MAAMtN,CAAI,EACZomB,GACAA,EAAS,KAAK9Y,EAAOgT,CAAI,CAEjC,CAAC,CACL,EACAoF,EAAM,UAAU,QAAU,SAAU1lB,EAAM,CACtC,IAAIqmB,EAAU,KAAK,UAAUrmB,CAAI,EAC7BqmB,IACA,OAAO,KAAK,UAAUrmB,CAAI,EAC1BqmB,EAAQ,SAAS,EAEzB,EACAX,EAAM,UAAU,WAAa,SAAUQ,EAASC,EAAWC,EAAU,CACjE,IAAI9Y,EAAQ,KACRgZ,EAAkB,EAClBC,EAASL,EAAQ,OACjBM,EAAa,EACbC,EAAS,CAAC,EACVC,GAAa,CAAC,EACdC,GAAgB,GAChBC,EAAoB,SAAUC,GAAShgB,GAAKigB,GAAY,CACxDR,IACIA,IAAoB,GAChBE,IAAeD,IACfI,GAAgB,GAChBP,EAASK,CAAM,EACfE,GAAgB,GAG5B,EACII,GAAc,SAAUF,GAAShgB,GAAKigB,GAAY,CAC9CjgB,KAAQ,QAEJ,CAACigB,IAAcL,EAAOI,EAAO,IAAM,QACnCL,IAEJ,OAAOC,EAAOI,EAAO,IAIjB,CAACC,IAAcL,EAAOI,EAAO,IAAM,QACnCL,IAEJC,EAAOI,EAAO,EAAIhgB,IAEtByf,IACKA,GAEGE,IAAeD,IAGVI,IACDR,EAAUM,CAAM,EAIhC,EAEIO,GAAO,SAAUvY,GAAWoC,GAAS,CACrCvD,EAAM,GAAGmB,GAAWoC,EAAO,EAC3B6V,GAAW,KAAK,CAACjY,GAAWoC,EAAO,CAAC,CACxC,EAEA,OAAAqV,EAAQ,QAAQ,SAAUW,GAAS,CAC/B,IAAIC,GAAa,GACbD,GAAQ,OAAO,CAAC,IAAM,MACtBA,GAAUA,GAAQ,UAAU,CAAC,EAC7BC,GAAa,IAEjBE,GAAK,iBAAmBH,GAAS,SAAUhgB,GAAK,CAC5C+f,EAAkBC,GAAShgB,GAAKigB,EAAU,CAC9C,CAAC,EACDE,GAAK,UAAYH,GAAS,SAAUhgB,GAAK,CACrCkgB,GAAYF,GAAShgB,GAAKigB,EAAU,CACxC,CAAC,CACL,CAAC,EAEDZ,EAAQ,QAAQ,SAAUW,GAAS,CAC/B,IAAIC,GAAa,GACbD,GAAQ,OAAO,CAAC,IAAM,MACtBA,GAAUA,GAAQ,UAAU,CAAC,EAC7BC,GAAa,IAEbxZ,EAAM,IAAIuZ,EAAO,GACjBJ,EAAOI,EAAO,EAAIvZ,EAAM,IAAIuZ,EAAO,EACnCL,KAEKM,IACLN,GAER,CAAC,EAEGA,IAAeD,GACfJ,EAAUM,CAAM,EAEb,CACH,SAAU,UAAY,CAElB,QAAS7kB,GAAI,EAAGA,GAAI8kB,GAAW,OAAQ9kB,KACnC0L,EAAM,IAAIoZ,GAAW9kB,EAAC,EAAE,CAAC,EAAG8kB,GAAW9kB,EAAC,EAAE,CAAC,CAAC,EAEhD8kB,GAAa,KAETF,IAAeD,GACfH,EAAS,CAEjB,EACA,MAAO,UAAY,CACXI,IAAeD,IACfH,EAAS,EACTD,EAAUM,CAAM,EAExB,CACJ,CACJ,EACAf,EAAM,UAAU,MAAQ,SAAU1lB,EAAM,CACpC,IAAIqmB,EAAU,KAAK,UAAUrmB,CAAI,EAC7BqmB,GACAA,EAAQ,MAAM,CAEtB,EACOX,CACX,EAAEzY,EAAQ,OAAO,EACjB3N,EAAQ,QAAUomB,EAClBA,EAAM,UAAU,iBAAmB,CAAC,EACpC3S,EAAe,QAAQ,QAAQ2S,CAAK,EACpC1S,EAAgB,QAAQ,QAAQ0S,CAAK,CAG/B,EAEC,SAASnmB,EAAQD,EAASQ,EAAqB,CAetD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BmP,EAASnP,EAAoB,CAAC,EAC9BqO,EAAUrO,EAAoB,EAAE,EAChCmnB,EAAoC,SAAU7Z,EAAQ,CACtDL,EAAQ,UAAUka,EAAoB7Z,CAAM,EAC5C,SAAS6Z,GAAqB,CAC1B,OAAO7Z,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC/D,CACA,OAAA6Z,EAAmB,oBAAsB,SAAUC,EAAU,CACzD,IAAIC,EAAQ,KAAK,UACZA,EAAM,eAAe,iBAAiB,IACvCA,EAAM,gBAAkB,OAAO,OAAOA,EAAM,eAAe,GAE/DlY,EAAO,aAAaiY,EAAUC,EAAM,eAAe,CACvD,EACAF,EAAmB,0BAA4B,SAAUle,EAAKL,EAAM,CAChE,IAAIid,EAAM,KAAK,UAAU,gBACrBjU,EACJ,IAAKA,KAAYiU,EACT5c,EAAI2I,CAAQ,GAAK,MACjBiU,EAAIjU,CAAQ,IAAM,KAElBhJ,EAAKgJ,CAAQ,EAAI3I,EAAI2I,CAAQ,EAGzC,EAKAuV,EAAmB,UAAU,WAAa,SAAU/Y,EAAU,CAC1D,IAAIkZ,EAAkB,KAAK,gBACvBC,EAAc,CAAC,EACfxL,EAAY,CAAC,EACbnK,EACJ,IAAKA,KAAYxD,EACTkZ,EAAgB1V,CAAQ,IAAM,GAC9B,KAAKA,CAAQ,EAAIxD,EAASwD,CAAQ,EAE7B0V,EAAgB1V,CAAQ,IAAM,GACnC2V,EAAY3V,CAAQ,EAAIxD,EAASwD,CAAQ,EAGzCmK,EAAUnK,CAAQ,EAAIxD,EAASwD,CAAQ,EAG/C,YAAK,eAAemK,CAAS,EACtB,KAAK,yBAAyBwL,CAAW,CACpD,EAKAJ,EAAmB,UAAU,yBAA2B,SAAU/Y,EAAU,CACxE,MAAO,EACX,EAIA+Y,EAAmB,UAAU,eAAiB,SAAU/Y,EAAU,CAElE,EAIA+Y,EAAmB,UAAU,eAAiB,SAAUvV,EAAU,CAC9D,OAAOA,KAAY,KAAK,eAC5B,EACOuV,CACX,EAAE9Y,EAAQ,OAAO,EACjB7O,EAAQ,QAAU2nB,EAClBA,EAAmB,UAAU,gBAAkB,CAAC,CAG1C,EAEC,SAAS1nB,EAAQD,EAAS,CAEjC,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIgoB,EAA+B,UAAY,CAC3C,SAASA,EAAcxY,EAAKC,EAAa,CACrC,KAAK,IAAMD,EACX,KAAK,YAAcC,CACvB,CACA,OAAAuY,EAAc,UAAU,SAAW,UAAY,CAC3C,IAAIvY,EAAc,KAAK,YACnB7F,EAAM,KAAK,IAAI,SAAS,EAC5B,OAAAA,EAAI,MAAQ6F,EAAY,MAAM,MAAM,EACpC7F,EAAI,IAAM6F,EAAY,IAAMA,EAAY,IAAI,MAAM,EAAI,KAC/C7F,CACX,EACOoe,CACX,EAAE,EACFhoB,EAAQ,QAAUgoB,CAGZ,EAEC,SAAS/nB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BY,EAAIZ,EAAoB,CAAC,EACzBW,EAASX,EAAoB,CAAC,EAC9B4O,EAAa5O,EAAoB,EAAE,EACnC6O,EAAkB7O,EAAoB,EAAE,EACxC8O,EAAqB9O,EAAoB,EAAE,EAC3CynB,EAAmC,SAAUna,EAAQ,CACrDL,EAAQ,UAAUwa,EAAmBna,CAAM,EAC3C,SAASma,GAAoB,CACzB,OAAOna,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC/D,CACA,OAAAma,EAAkB,UAAU,SAAW,UAAY,CAC/C,MAAO,CAAC,KAAK,WAAa,CAAC,KAAK,OACpC,EACAA,EAAkB,UAAU,eAAiB,SAAU9W,EAAc,CAQjE,QAPIpD,EAAW,KAAK,OAAO,SACvBma,EAAc/W,EAAa,SAAS,EACpCgX,EAAahX,EAAa,OAAO,EACjCiX,EACAC,EACAC,GACAC,GAAY,CAAC,EACVL,EAAY,SAASC,CAAU,IAE9B,CAAC,KAAK,SAAW,KAAK,QAAQD,EAAY,IAAI,CAAC,KAC/CE,EAAgBra,EAAS,cAAcma,CAAW,EAClDG,EAAgBD,EAAc,MAAM,EACpCE,GAAc,KACV,KAAK,UACLD,EAAc,KAAK,KAAK,SAAS,EAGjCA,EAAc,UAAU,EAExB,KAAK,UACLC,GAAcF,EAAc,MAAM,EAAE,KAAK,KAAK,OAAO,GAEzDG,GAAU,KAAK,IAAIlZ,EAAgB,QAAQ,KAC3C,IAAIC,EAAmB,QAAQ+Y,EAAeC,GAAava,CAAQ,CAAC,CAAC,GAEzEma,EAAY,IAAI,EAAG,MAAM,EAE7B,OAAOK,EACX,EACAN,EAAkB,UAAU,OAAS,SAAUO,EAAY,CAClD,KAAK,UACN,KAAK,QAAU,CAAC,GAEpB,QAASlmB,EAAI,EAAGA,EAAIkmB,EAAW,OAAQlmB,IACnC,KAAK,QAAQkmB,EAAWlmB,CAAC,CAAC,EAAI,EAEtC,EACA2lB,EAAkB,UAAU,MAAQ,UAAY,CAC5C,IAAIzY,EAAM1B,EAAO,UAAU,MAAM,KAAK,IAAI,EAC1C,OAAI0B,EAAI,YACJA,EAAI,UAAYrO,EAAO,SAAS,KAAK,SAAS,GAE9CqO,EAAI,UACJA,EAAI,QAAUrO,EAAO,SAAS,KAAK,OAAO,GAE1C,KAAK,UACLqO,EAAI,QAAUpO,EAAE,OAAO,CAAC,EAAG,KAAK,OAAO,GAEpCoO,CACX,EACOyY,CACX,EAAE7Y,EAAW,OAAO,EACpBpP,EAAQ,QAAUioB,EAKlBA,EAAkB,UAAU,WAAa,SAAUrZ,EAAU,CACzD,IAAIc,EAAeN,EAAW,QAAQ,UAAU,WAAW,KAAK,KAAMR,CAAQ,EAC9E,OAAIA,EAAS,QACT,KAAK,UAAYzN,EAAO,SAASyN,EAAS,KAAK,GAE/CA,EAAS,MACT,KAAK,QAAUzN,EAAO,SAASyN,EAAS,GAAG,GAE3CA,EAAS,KACT,KAAK,OAAOA,EAAS,GAAG,EAErBc,CACX,EAGAuY,EAAkB,oBAAoB,CAClC,MAAO,GACP,IAAK,GACL,IAAK,EACT,CAAC,CAGK,EAEC,SAAShoB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAImB,EAASX,EAAoB,CAAC,EAC9BmP,EAASnP,EAAoB,CAAC,EAC9BwR,EAAiBxR,EAAoB,CAAC,EACtCioB,EAAsC,UAAY,CAClD,SAASA,EAAqBvK,EAAO,CACjC,KAAK,MAAQA,CACjB,CACA,OAAAuK,EAAqB,UAAU,IAAM,SAAU/nB,EAAM,CACjD,OAAO,KAAK,MAAM,IAAIA,CAAI,CAC9B,EACA+nB,EAAqB,UAAU,eAAiB,SAAUtX,EAAc,CACpE,OAAO,KAAK,MAAM,eAAeA,CAAY,CACjD,EACAsX,EAAqB,UAAU,cAAgB,SAAUpb,EAAI4P,EAAa,CACtE,OAAO,KAAK,MAAM,SAAS,cAAc5P,EAAI4P,CAAW,CAC5D,EAIAwL,EAAqB,UAAU,UAAY,SAAUvJ,EAAoB,CACrE,IAAIwJ,EAAWxJ,EAAmB,KAAK,MAAM,EACxC,QAAQA,EAAmB,gBAAgB,EAC3C,SAASA,EAAmB,aAAa,EAC9C,OAAO,KAAK,MAAMwJ,EAAU,EAAE,CAClC,EAEAD,EAAqB,UAAU,UAAY,SAAUvJ,EAAoB,CACrE,IAAIyJ,EAAWzJ,EAAmB,KAAK,MAAM,EACxC,QAAQA,EAAmB,gBAAgB,EAC3C,IAAIA,EAAmB,aAAa,EACzC,OAAO,KAAK,MAAMyJ,EAAU,CAAC,CACjC,EAIAF,EAAqB,UAAU,MAAQ,SAAUrb,EAAMwb,EAAWC,EAAc,CACxEA,IAAiB,SAAUA,EAAe,IAC9C,IAAIC,EAAe,CAAC1b,EAAK,QAAQ,EAC7B2b,EACAC,EAAU,KACVC,EAAU,KACVC,EACAC,EACAC,EACAC,GACAC,GACJ,OAAAP,EAAoB,KAAK,gBAAgB,EACzCA,EAAoB,KAAK,eAAeA,CAAiB,EACrDF,IACAzb,EAAO,KAAK,cAAc2b,EAAkB,cAAc3b,CAAI,EAC9D0b,CAAY,GAEhBI,EAAc,KAAK,sBAAsB9b,EAAMwb,CAAS,EACxDO,EAAgB,0BAA0B,KAAKD,EAAY,IAAI,EAC/DE,EAAqB,KAAK,iBAAiB,KAAK,eAAeF,EAAY,YAAY,EAAGA,EAAY,KAAMC,CAAa,EACzHC,EAAqB,KAAK,eAAeA,CAAkB,EAC3DC,GAAqBD,EAAmB,MAAM,EACzC,KAAK,IAAI,qBAAqB,IAC/BC,GAAqBA,GAAmB,UAAUH,EAAY,YAAY,GAE9EF,EAAU7nB,EAAO,SAAS,KAAK,IAAI,SAAS,CAAC,EAC7C8nB,EAAU9nB,EAAO,SAAS,KAAK,IAAI,SAAS,CAAC,EAC7CkoB,GAAqB,KAAK,kBAAkBA,GAAoBL,EAASC,CAAO,EAChFI,GAAqBA,GAAmB,UAAUN,CAAiB,EAC/DM,KACAjc,EAAO,KAAK,cAAcic,GAAmB,cAAcjc,CAAI,EAC/D0b,CAAY,GAIhBQ,GAAUJ,EAAY,aAAa,eAAeH,CAAiB,EAC5D,CAGH,kBAAmBA,EAGnB,oBAAqBG,EAAY,aAEjC,iBAAkBA,EAAY,KAC9B,cAAeC,EAGf,mBAAoBE,GAGpB,mBAAoBD,EAEpB,QAASJ,EAET,QAASC,EACT,QAASK,GACT,KAAMlc,EAEN,cAAe,KAAK,mBAAmB8b,EAAY,QAAQ,CAE/D,CACJ,EAIAT,EAAqB,UAAU,gBAAkB,UAAY,CACzD,OAAO,KAAK,MAAM,sBAAsB,aAAc,KAAK,MAAM,SAAS,OAAO,CAAC,GAC9E,IAAIzW,EAAe,OAC3B,EAMAyW,EAAqB,UAAU,sBAAwB,SAAUrb,EAAMwb,EAAW,CAC9E,IAAI9J,EAAW,KAAK,MAAM,SACtBnX,EAAW,KACXR,EAAO,KACPgK,EAAe,KACfoY,EACJ,OAAIzK,EAAS,UACTnX,EAAWmX,EAAS,SACpB3X,EAAO2X,EAAS,aAChB3N,EAAe,KAAK,uBAAuB/D,EAAMwb,EAAWjhB,EAAUR,CAAI,IAEpEoiB,EAAW,KAAK,IAAI,UAAU,IACpCpiB,EAAO,MACPgK,EAAe,KAAK,uBAAuB/D,EAAMwb,EAAWW,CAAQ,IAE9DpY,EAAe,KAAK,wBAAwB/D,CAAI,GACtDjG,EAAOwI,EAAO,oBAAoBwB,EAAa,SAAS,EAAGA,EAAa,OAAO,CAAC,GAGhFxJ,EAAW,KAAK,oBAAoB,EACpCR,EAAOwI,EAAO,oBAAoBhI,CAAQ,EAC1CwJ,EAAe,KAAK,uBAAuB/D,EAAMwb,EAAWjhB,EAAUR,CAAI,GAEvE,CAAE,SAAUQ,EAAU,KAAMR,EAAM,aAAcgK,CAAa,CACxE,EACAsX,EAAqB,UAAU,oBAAsB,UAAY,CAC7D,OAAOtnB,EAAO,SAAS,CAAE,KAAM,CAAE,CAAC,CACtC,EAGAsnB,EAAqB,UAAU,kBAAoB,SAAUtX,EAAc6X,EAASC,EAAS,CACzF,IAAI5hB,EAAQ8J,EAAa,SAAS,EAC9B7J,EAAM6J,EAAa,OAAO,EAC9B,OAAI,KAAK,MAAM,iBACP6X,EAAU,GACV3hB,EAAM,KAAK,CAAC,EAAE,IAAI2hB,CAAO,EAEzBC,EAAU,GAAK,GAAK,GAAK,KACzB3hB,EAAI,KAAK2hB,EAAW,GAAK,GAAK,GAAK,GAAK,GAGzC,IAAIjX,EAAe,QAAQ3K,EAAOC,CAAG,CAChD,EAIAmhB,EAAqB,UAAU,uBAAyB,SAAUrb,EAAMwb,EAAWjhB,EAAUR,EAAM,CAC/F,IAAIqiB,EAAY,KAAK,IAAI,eAAe,EACpCC,EACAC,EACAriB,EACAC,EACA7C,EAEC+kB,IACDC,EAAqB,KAAK,IAAI,eAAe,EACzCA,GACAC,EAAwBvoB,EAAO,SAASsoB,CAAkB,EAEtDC,EAAwB/hB,EACxB6hB,EAAY7Z,EAAO,4BAA4B+Z,EAAuBD,CAAkB,EAGxFD,EAAYriB,GAIhBqiB,EAAYriB,GAIhBQ,EAAS,GAAG,MAAM,GAAK,GACnB,KAAK,MAAM,YAAYN,CAAK,IAC5BA,EAAQ,KAAK,MAAM,eAAeA,EAAOuhB,CAAS,EAClDvhB,EAAM,QAAQ,KAAK,GAG3B,SAASsiB,IAAa,CAClBtiB,EAAQ+F,EAAK,MAAM,EAAE,QAAQoc,CAAS,EACtCliB,EAAMD,EAAM,MAAM,EAAE,IAAIM,CAAQ,EAChClD,EAAM,IAAIuN,EAAe,QAAQ3K,EAAOC,CAAG,CAC/C,CACA,OAAAqiB,GAAW,EAEN,KAAK,eAAellB,CAAG,IACxB2I,EAAO,KAAK,MAAM,eAAeA,EAAMwb,CAAS,EAChDe,GAAW,GAERllB,CACX,EAGAgkB,EAAqB,UAAU,uBAAyB,SAAUrb,EAAMwb,EAAWW,EAAU,CACzF,IAAIK,EAAkB,KAAK,IAAI,eAAe,EAC1CC,EAAe,EACfxiB,EACAC,EACJ,GAAIsiB,GAAmBhB,IAAc,GAAI,CACrCvhB,EAAQ+F,EAAK,MAAM,EACfwc,GACAviB,EAAM,QAAQuiB,CAAe,EAEjCviB,EAAM,QAAQ,KAAK,EACnBA,EAAQ,KAAK,MAAM,eAAeA,CAAK,EACvCC,EAAMD,EAAM,MAAM,EAClB,GACIC,EAAI,IAAI,EAAG,KAAK,EACX,KAAK,MAAM,YAAYA,CAAG,GAC3BuiB,UAECA,EAAeN,EAC5B,KACK,CACDjiB,EAAM8F,EAAK,MAAM,EAAE,QAAQ,KAAK,EAAE,IAAI,EAAG,KAAK,EAC9C9F,EAAM,KAAK,MAAM,eAAeA,EAAK,GAAI,EAAI,EAC7CD,EAAQC,EAAI,MAAM,EAClB,GACID,EAAM,IAAI,GAAI,KAAK,EACd,KAAK,MAAM,YAAYA,CAAK,GAC7BwiB,UAECA,EAAeN,EAC5B,CACA,OAAO,IAAIvX,EAAe,QAAQ3K,EAAOC,CAAG,CAChD,EAIAmhB,EAAqB,UAAU,wBAA0B,SAAUrb,EAAM,CACrE,IAAI0c,EAAsB,KAAK,MAAM,sBAAsB,eAAgB,KAAK,MAAM,SAAS,cAAc1c,CAAI,CACjH,EACA,OAAI0c,IAAwBA,EAAoB,SAAW,MAAQA,EAAoB,OAAS,MACrF,KAEJA,CACX,EAIArB,EAAqB,UAAU,iBAAmB,SAAUsB,EAAqB9K,EAAkBkK,EAAe,CAC9G,OAAOY,EAAoB,MAAM,CACrC,EAGAtB,EAAqB,UAAU,mBAAqB,SAAUuB,EAAU,CACpE,IAAIP,EAAqB,KAAK,IAAI,eAAe,EAC7CG,EACJ,OAAIH,EACOtoB,EAAO,SAASsoB,CAAkB,GAEnCG,EAAkB,KAAK,IAAI,eAAe,GACzCzoB,EAAO,SAAS,EAAGyoB,CAAe,EAEpCI,GAIE7oB,EAAO,SAAS,CAAE,KAAM,CAAE,CAAC,CAE1C,EACOsnB,CACX,EAAE,EACFzoB,EAAQ,QAAUyoB,CAGZ,EAEC,SAASxoB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BY,EAAIZ,EAAoB,CAAC,EACzBmP,EAASnP,EAAoB,CAAC,EAC9B4U,EAAY5U,EAAoB,EAAE,EAClCgU,EAAgBhU,EAAoB,CAAC,EACrC6T,EAAmB7T,EAAoB,CAAC,EACxCypB,EAAkC,SAAUnc,EAAQ,CACpDL,EAAQ,UAAUwc,EAAkBnc,CAAM,EAC1C,SAASmc,EAAiBlc,EAAU,CAChC,IAAIC,EAAQF,EAAO,KAAK,KAAMC,CAAQ,GAAK,KAC3C,OAAAC,EAAM,UAAY,CAAC,EACZA,CACX,CACA,OAAAic,EAAiB,MAAQ,SAAUhc,EAAUF,EAAU,CACnD,IAAIa,EAQJ,OANIxN,EAAE,QAAQ6M,EAAS,MAAM,EACzBW,EAAWX,EAEN7M,EAAE,QAAQ6M,CAAQ,IACvBW,EAAW,CAAE,OAAQX,CAAS,GAE9BW,EACO4F,EAAc,QAAQ,MAAM,KAAK,KAAM5F,EAAUb,CAAQ,EAE7D,EACX,EACAkc,EAAiB,UAAU,gBAAkB,SAAU1b,EAAc,CACjE,KAAK,aAAeA,EACpB,KAAK,UAAY,KAAK,eAAeA,CAAY,CACrD,EACA0b,EAAiB,UAAU,MAAQ,SAAU5iB,EAAOC,EAAK8G,EAAU,CAC/D,IAAIK,EAAY,KAAK,UACjBnM,EACJ,GAAI,KAAK,iBAAmB,MACxB,KAAK,kBAAoB8L,EACzB,IAAK9L,EAAI,EAAGA,EAAImM,EAAU,OAAQnM,IAC1BmM,EAAUnM,CAAC,YAAa+R,EAAiB,SACzC5F,EAAUnM,CAAC,EAAE,OAAO,EAIhC,YAAK,gBAAkB8L,EAChBgH,EAAU,QAAQ,QAAQ3G,CAAS,CAC9C,EACAwb,EAAiB,UAAU,YAAc,SAAUzb,EAAU,CACzD,KAAK,UAAU,KAAKA,CAAQ,CAChC,EAIAyb,EAAiB,UAAU,oBAAsB,SAAU5b,EAAY,CACnE,OAAOsB,EAAO,eAAe,KAAK,UAAW,SAAUnB,EAAU,CAC7D,OAAOA,EAAS,KAAOH,CAC3B,CAAC,CACL,EACA4b,EAAiB,UAAU,mBAAqB,UAAY,CACxD,KAAK,UAAY,CAAC,CACtB,EACAA,EAAiB,UAAU,aAAe,UAAY,CAClD,OAAO,KAAK,YAChB,EACAA,EAAiB,UAAU,yBAA2B,SAAUrb,EAAU,CACtE,IAAIc,EAAe5B,EAAO,UAAU,yBAAyB,KAAK,KAAMc,CAAQ,EAChF,YAAK,gBAAgBA,EAAS,MAAM,EAC7Bc,CACX,EACOua,CACX,EAAEzV,EAAc,OAAO,EACvBxU,EAAQ,QAAUiqB,EAClBA,EAAiB,oBAAoB,CACjC,OAAQ,EACZ,CAAC,CAGK,EAEC,SAAShqB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIkqB,EAAkB1pB,EAAoB,GAAG,EACzC2pB,EAAkB3pB,EAAoB,GAAG,EACzC4pB,EAAiB,CAAC,EACtB,SAASC,EAAkBC,EAAWC,EAAY,CAC9CH,EAAeE,CAAS,EAAIC,CAChC,CACAvqB,EAAQ,kBAAoBqqB,EAC5B,SAASG,EAAoBC,EAAc,CACvC,OAAKA,EAGIA,IAAiB,GACfN,EAAgB,QAGhBC,EAAeK,CAAY,EAN3BP,EAAgB,OAQ/B,CACAlqB,EAAQ,oBAAsBwqB,CAGxB,EAEC,SAASvqB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIoB,EAAIZ,EAAoB,CAAC,EACzBmP,EAASnP,EAAoB,CAAC,EAU9BkqB,EAA4B,UAAY,CACxC,SAASA,EAAWnY,EAAS,CACzB,KAAK,aAAe,GACpB,KAAK,WAAa,GAClB,KAAK,IAAMnR,EAAEmR,EAAQ,GAAG,EACxB,KAAK,aAAeA,EAAQ,aAC5B,KAAK,WAAaA,EAAQ,WAC1B,KAAK,qBAAuBA,EAAQ,aAAenR,EAAEmR,EAAQ,YAAY,EAAI,IACjF,CAGA,OAAAmY,EAAW,UAAU,MAAQ,UAAY,CACrC,IAAIC,EAAiB,KAAK,qBACtB,CAACA,GAAkB,KAAK,IAAI,OAAS,IACrCA,EAAiB,KAAK,IAAI,GAAG,CAAC,EAAE,aAAa,GAEjD,KAAK,OAASA,EACVA,EAAe,OAAO,EACtB,KACJ,KAAK,aAAe,KAAK,kBAAkB,EACvC,KAAK,cACL,KAAK,mBAAmB,EAExB,KAAK,YACL,KAAK,iBAAiB,CAE9B,EAEAD,EAAW,UAAU,MAAQ,UAAY,CACrC,KAAK,OAAS,KACd,KAAK,aAAe,KACpB,KAAK,MAAQ,KACb,KAAK,OAAS,KACd,KAAK,KAAO,KACZ,KAAK,QAAU,IACnB,EAEAA,EAAW,UAAU,YAAc,UAAY,CACtC,KAAK,QACN,KAAK,MAAM,CAEnB,EAEAA,EAAW,UAAU,mBAAqB,UAAY,CAClD,IAAIE,EAAQ,CAAC,EACTC,EAAS,CAAC,EACd,KAAK,IAAI,KAAK,SAAUvoB,EAAGwf,EAAM,CAC7B,IAAIvf,EAAKnB,EAAE0gB,CAAI,EACXne,EAAOpB,EAAG,OAAO,EAAE,KACnB+B,EAAQ/B,EAAG,WAAW,EAC1BqoB,EAAM,KAAKjnB,CAAI,EACfknB,EAAO,KAAKlnB,EAAOW,CAAK,CAC5B,CAAC,EACD,KAAK,MAAQsmB,EACb,KAAK,OAASC,CAClB,EAEAH,EAAW,UAAU,iBAAmB,UAAY,CAChD,IAAII,EAAO,CAAC,EACRC,EAAU,CAAC,EACf,KAAK,IAAI,KAAK,SAAUzoB,EAAGwf,EAAM,CAC7B,IAAIvf,EAAKnB,EAAE0gB,CAAI,EACXle,EAAMrB,EAAG,OAAO,EAAE,IAClBwb,EAASxb,EAAG,YAAY,EAC5BuoB,EAAK,KAAKlnB,CAAG,EACbmnB,EAAQ,KAAKnnB,EAAMma,CAAM,CAC7B,CAAC,EACD,KAAK,KAAO+M,EACZ,KAAK,QAAUC,CACnB,EAGAL,EAAW,UAAU,mBAAqB,SAAUM,EAAY,CAC5D,KAAK,YAAY,EACjB,IAAIJ,EAAQ,KAAK,MACbC,EAAS,KAAK,OACdngB,EAAMkgB,EAAM,OACZtoB,EACJ,IAAKA,EAAI,EAAGA,EAAIoI,EAAKpI,IACjB,GAAI0oB,GAAcJ,EAAMtoB,CAAC,GAAK0oB,EAAaH,EAAOvoB,CAAC,EAC/C,OAAOA,CAGnB,EAGAooB,EAAW,UAAU,iBAAmB,SAAUO,EAAW,CACzD,KAAK,YAAY,EACjB,IAAIH,EAAO,KAAK,KACZC,EAAU,KAAK,QACfrgB,EAAMogB,EAAK,OACXxoB,EACJ,IAAKA,EAAI,EAAGA,EAAIoI,EAAKpI,IACjB,GAAI2oB,GAAaH,EAAKxoB,CAAC,GAAK2oB,EAAYF,EAAQzoB,CAAC,EAC7C,OAAOA,CAGnB,EAEAooB,EAAW,UAAU,cAAgB,SAAUQ,EAAW,CACtD,YAAK,YAAY,EACV,KAAK,MAAMA,CAAS,CAC/B,EAEAR,EAAW,UAAU,gBAAkB,SAAUQ,EAAW,CACxD,YAAK,YAAY,EACV,KAAK,MAAMA,CAAS,EAAI,KAAK,OAAO,IAC/C,EAGAR,EAAW,UAAU,eAAiB,SAAUQ,EAAW,CACvD,YAAK,YAAY,EACV,KAAK,OAAOA,CAAS,CAChC,EAGAR,EAAW,UAAU,iBAAmB,SAAUQ,EAAW,CACzD,YAAK,YAAY,EACV,KAAK,OAAOA,CAAS,EAAI,KAAK,OAAO,IAChD,EAEAR,EAAW,UAAU,SAAW,SAAUQ,EAAW,CACjD,YAAK,YAAY,EACV,KAAK,OAAOA,CAAS,EAAI,KAAK,MAAMA,CAAS,CACxD,EAEAR,EAAW,UAAU,aAAe,SAAUS,EAAU,CACpD,YAAK,YAAY,EACV,KAAK,KAAKA,CAAQ,CAC7B,EAEAT,EAAW,UAAU,eAAiB,SAAUS,EAAU,CACtD,YAAK,YAAY,EACV,KAAK,KAAKA,CAAQ,EAAI,KAAK,OAAO,GAC7C,EAGAT,EAAW,UAAU,gBAAkB,SAAUS,EAAU,CACvD,YAAK,YAAY,EACV,KAAK,QAAQA,CAAQ,CAChC,EAGAT,EAAW,UAAU,kBAAoB,SAAUS,EAAU,CACzD,YAAK,YAAY,EACV,KAAK,QAAQA,CAAQ,EAAI,KAAK,OAAO,GAChD,EAEAT,EAAW,UAAU,UAAY,SAAUS,EAAU,CACjD,YAAK,YAAY,EACV,KAAK,QAAQA,CAAQ,EAAI,KAAK,KAAKA,CAAQ,CACtD,EAMAT,EAAW,UAAU,kBAAoB,UAAY,CACjD,IAAIU,EACJ,OAAI,KAAK,IAAI,OAAS,IAClBA,EAAiBzb,EAAO,gBAAgB,KAAK,IAAI,GAAG,CAAC,CAAC,EAClD,CAACyb,EAAe,GAAG,QAAQ,GAC3B,CAACA,EAAe,GAAG,WAAW,GAEvBzb,EAAO,cAAcyb,CAAc,EAG3C,IACX,EACAV,EAAW,UAAU,gBAAkB,SAAUM,EAAYC,EAAW,CACpE,OAAO,KAAK,eAAeD,CAAU,GAAK,KAAK,cAAcC,CAAS,CAC1E,EACAP,EAAW,UAAU,eAAiB,SAAUM,EAAY,CACxD,MAAO,CAAC,KAAK,cAAiBA,GAAc,KAAK,aAAa,MAAQA,EAAa,KAAK,aAAa,KACzG,EACAN,EAAW,UAAU,cAAgB,SAAUO,EAAW,CACtD,MAAO,CAAC,KAAK,cAAiBA,GAAa,KAAK,aAAa,KAAOA,EAAY,KAAK,aAAa,MACtG,EACOP,CACX,EAAE,EACF1qB,EAAQ,QAAU0qB,CAGZ,EAEC,SAASzqB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIoB,EAAIZ,EAAoB,CAAC,EACzBmP,EAASnP,EAAoB,CAAC,EAC9BkT,EAAkBlT,EAAoB,CAAC,EACvCwd,EAAkBxd,EAAoB,EAAE,EAIxC6qB,EAA8B,UAAY,CAC1C,SAASA,EAAa9Y,EAAS,CAC3B,KAAK,cAAgB,GACrB,KAAK,oBAAsB,GAC3B,KAAK,aAAe,GACpB,KAAK,WAAa,GAClB,KAAK,QAAU,GACf,KAAK,UAAY,GACjB,KAAK,wBAA0B,GAC/B,KAAK,kBAAoB,GACzB,KAAK,aAAe,GAEpB,KAAK,kBAAoB,GACzB,KAAK,YAAc,IACnB,KAAK,iBAAmB,GACxB,KAAK,QAAUA,GAAW,CAAC,CAC/B,CAGA,OAAA8Y,EAAa,UAAU,iBAAmB,SAAUzmB,EAAI0mB,EAAc,CAElE,GADIA,IAAiB,SAAUA,EAAe,CAAC,GAC3C1mB,EAAG,OAAS,YAAa,CACzB,GAAIoZ,EAAgB,QAAQ,IAAI,EAAE,kBAAkB,EAChD,OAEC,GAAKrO,EAAO,qBAAqB/K,CAAE,EAIpCA,EAAG,eAAe,MAHlB,OAKR,CACK,KAAK,gBAEN,KAAK,MAAQ+K,EAAO,aAAa2b,EAAa,MAAO,KAAK,QAAQ,MAAO,CAAC,EAC1E,KAAK,YAAc3b,EAAO,aAAa2b,EAAa,SAAU,KAAK,QAAQ,SAAU,CAAC,EACtF,KAAK,UAAY,KAAK,QAAQ,UAC9B3b,EAAO,iBAAiBvO,EAAE,MAAM,CAAC,EACjC,KAAK,cAAgB,GACrB,KAAK,QAAUuO,EAAO,aAAa/K,CAAE,EACrC,KAAK,UAAYA,EAAG,OAAS,YAC7B,KAAK,aAAe,GACpB,KAAK,oBAAsB,GAC3B,KAAK,QAAU+K,EAAO,OAAO/K,CAAE,EAC/B,KAAK,QAAU+K,EAAO,OAAO/K,CAAE,EAC/B,KAAK,SAAW+K,EAAO,gBAAgBvO,EAAEwD,EAAG,MAAM,CAAC,EACnD,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,uBAAuBA,CAAE,EAC9B,KAAK,WAAWA,CAAE,EACb,KAAK,aACN,KAAK,wBAAwBA,CAAE,EAG3C,EACAymB,EAAa,UAAU,uBAAyB,SAAUzmB,EAAI,CAC1D,KAAK,QAAQ,mBAAoBA,CAAE,CACvC,EACAymB,EAAa,UAAU,eAAiB,SAAUzmB,EAAIoO,EAAa,CAC3D,KAAK,gBACL,KAAK,QAAQpO,CAAE,EACX,KAAK,iBACL,aAAa,KAAK,cAAc,EAChC,KAAK,eAAiB,MAE1B,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,cAAgB,GACrB,KAAK,qBAAqBA,EAAIoO,CAAW,EACzCrD,EAAO,eAAevO,EAAE,MAAM,CAAC,EAEvC,EACAiqB,EAAa,UAAU,qBAAuB,SAAUzmB,EAAIoO,EAAa,CACrE,KAAK,QAAQ,iBAAkBpO,EAAIoO,GAAe,EAAK,CAC3D,EAGAqY,EAAa,UAAU,aAAe,UAAY,CAG9C,IAAIzR,EAAgBoE,EAAgB,QAAQ,IAAI,EAC5C,KAAK,UACL,KAAK,SAAS5c,EAAE,QAAQ,EAAG,CACvB,KAAM,KAAK,WACX,SAAU,KAAK,cACnB,CAAC,EAEI,KAAK,QACV,KAAK,SAASwY,EAAe,CACzB,UAAW,KAAK,gBAChB,SAAU,KAAK,eACf,OAAQ,KAAK,iBACjB,CAAC,EAGD,KAAK,SAASA,EAAe,CACzB,UAAW,KAAK,gBAChB,QAAS,KAAK,cAClB,CAAC,EAEL,KAAK,SAASA,EAAe,CACzB,YAAajK,EAAO,eACpB,YAAaA,EAAO,cACxB,CAAC,CACL,EACA0b,EAAa,UAAU,eAAiB,UAAY,CAChD,KAAK,gBAAgBrN,EAAgB,QAAQ,IAAI,CAAC,EAClD,KAAK,gBAAgB5c,EAAE,QAAQ,CAAC,CACpC,EAIAiqB,EAAa,UAAU,UAAY,SAAUzmB,EAAI0mB,EAAc,CAC3D,KAAK,iBAAiB1mB,EAAI0mB,CAAY,EACjC,KAAK,aACN,KAAK,WAAa,GAClB,KAAK,gBAAgB1mB,CAAE,EAE/B,EACAymB,EAAa,UAAU,gBAAkB,SAAUzmB,EAAI,CACnD,KAAK,QAAQ,YAAaA,CAAE,CAChC,EACAymB,EAAa,UAAU,WAAa,SAAUzmB,EAAI,CAC9C,IAAIgO,EAAKjD,EAAO,OAAO/K,CAAE,EAAI,KAAK,QAC9BiO,EAAKlD,EAAO,OAAO/K,CAAE,EAAI,KAAK,QAC9B2mB,EAAc,KAAK,YACnBC,EACC,KAAK,sBACNA,EAAa5Y,EAAKA,EAAKC,EAAKA,EACxB2Y,GAAcD,EAAcA,GAC5B,KAAK,wBAAwB3mB,CAAE,GAGnC,KAAK,YACL,KAAK,WAAWgO,EAAIC,EAAIjO,CAAE,CAElC,EAEAymB,EAAa,UAAU,WAAa,SAAUzY,EAAIC,EAAIjO,EAAI,CACtD,KAAK,QAAQ,OAAQgO,EAAIC,EAAIjO,CAAE,EAC/B,KAAK,iBAAiBA,CAAE,CAC5B,EACAymB,EAAa,UAAU,QAAU,SAAUzmB,EAAI,CACvC,KAAK,aACL,KAAK,WAAa,GAClB,KAAK,cAAcA,CAAE,EAE7B,EACAymB,EAAa,UAAU,cAAgB,SAAUzmB,EAAI,CACjD,KAAK,QAAQ,UAAWA,CAAE,CAC9B,EAGAymB,EAAa,UAAU,WAAa,SAAUI,EAAW,CACrD,IAAIzd,EAAQ,KACR,KAAK,MACL,KAAK,eAAiB,WAAW,UAAY,CACzCA,EAAM,eAAeyd,CAAS,CAClC,EAAG,KAAK,KAAK,EAGb,KAAK,eAAeA,CAAS,CAErC,EACAJ,EAAa,UAAU,eAAiB,SAAUI,EAAW,CACzD,KAAK,aAAe,GAChB,KAAK,qBACL,KAAK,UAAUA,CAAS,CAEhC,EAGAJ,EAAa,UAAU,wBAA0B,SAAUzmB,EAAI,CAC3D,KAAK,oBAAsB,GACvB,KAAK,cACL,KAAK,UAAUA,CAAE,CAEzB,EAGAymB,EAAa,UAAU,gBAAkB,SAAUzmB,EAAI,CAE/C,KAAK,YAAc,KAAK,yBACxBA,EAAG,eAAe,EAEtB,KAAK,WAAWA,CAAE,CACtB,EACAymB,EAAa,UAAU,gBAAkB,SAAUzmB,EAAI,CACnD,KAAK,WAAWA,CAAE,CACtB,EAGAymB,EAAa,UAAU,kBAAoB,SAAUzmB,EAAI,EAGjD,CAAC,KAAK,YAAc,KAAK,oBACzB,KAAK,eAAeA,EAAI,EAAI,CAEpC,EAKAymB,EAAa,UAAU,QAAU,SAAU3qB,EAAM,CAE7C,QADIkI,EAAO,CAAC,EACHC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCD,EAAKC,EAAK,CAAC,EAAI,UAAUA,CAAE,EAE3B,KAAK,QAAQnI,CAAI,GACjB,KAAK,QAAQA,CAAI,EAAE,MAAM,KAAMkI,CAAI,EAGnC,KAAK,IAAMlI,CAAI,GACf,KAAK,IAAMA,CAAI,EAAE,MAAM,KAAMkI,CAAI,CAEzC,EAGAyiB,EAAa,UAAU,eAAiB,UAAY,CAChD,IAAIK,EAAW,KAAK,SACpB,KAAK,aACD,KAAK,QAAQ,QACTA,GACA,CAACA,EAAS,GAAG,MAAM,GACnB,CAACA,EAAS,GAAG,QAAQ,EACzB,KAAK,cAEL,KAAK,SAASA,EAAU,SAAU/b,EAAO,SAAS,KAAK,sBAAuB,GAAG,CAAC,CAE1F,EACA0b,EAAa,UAAU,kBAAoB,UAAY,CACnD,KAAK,cAAc,EAEf,KAAK,cACL,KAAK,gBAAgB,KAAK,SAAU,QAAQ,CAEpD,EAEAA,EAAa,UAAU,oBAAsB,UAAY,CACjD,KAAK,eACL,KAAK,aAAe1b,EAAO,aAAa,KAAK,QAAQ,EAG7D,EAEA0b,EAAa,UAAU,iBAAmB,SAAUzmB,EAAI,CACpD,IAAI+mB,EAAc,KAAK,kBACnBC,EAAS,KAAK,aACdC,EACAC,EACAC,EACAC,EACAC,EAAS,EACTC,EAAU,EACVN,IAEAC,GAAgBF,GAAehc,EAAO,OAAO/K,CAAE,EAAIgnB,EAAO,MAAQD,EAClEG,GAAmBH,GAAeC,EAAO,OAASjc,EAAO,OAAO/K,CAAE,IAAM+mB,EACxEI,GAAiBJ,GAAehc,EAAO,OAAO/K,CAAE,EAAIgnB,EAAO,OAASD,EACpEK,GAAkBL,GAAeC,EAAO,MAAQjc,EAAO,OAAO/K,CAAE,IAAM+mB,EAGlEE,GAAgB,GAAKA,GAAgB,EACrCI,EAASJ,EAAe,KAAK,YAAc,GAEtCC,GAAmB,GAAKA,GAAmB,IAChDG,EAASH,EAAkB,KAAK,aAGhCC,GAAiB,GAAKA,GAAiB,EACvCG,EAAUH,EAAgB,KAAK,YAAc,GAExCC,GAAkB,GAAKA,GAAkB,IAC9CE,EAAUF,EAAiB,KAAK,cAGxC,KAAK,aAAaC,EAAQC,CAAO,CACrC,EAEAb,EAAa,UAAU,aAAe,SAAUY,EAAQC,EAAS,CAC7D,KAAK,aAAeD,EACpB,KAAK,cAAgBC,EACrB,KAAK,mBAAmB,GAEnB,KAAK,cAAgB,KAAK,gBAAkB,CAAC,KAAK,mBACnD,KAAK,iBAAmB,YAAYvc,EAAO,MAAM,KAAM,oBAAoB,EAC3E,KAAK,gBAAgB,EAE7B,EAEA0b,EAAa,UAAU,mBAAqB,UAAY,CACpD,IAAI9oB,EAAK,KAAK,SACV,KAAK,aAAe,EAChBA,EAAG,UAAU,GAAK,IAClB,KAAK,aAAe,GAGnB,KAAK,aAAe,GACrBA,EAAG,UAAU,EAAIA,EAAG,CAAC,EAAE,cAAgBA,EAAG,CAAC,EAAE,eAC7C,KAAK,aAAe,GAGxB,KAAK,cAAgB,EACjBA,EAAG,WAAW,GAAK,IACnB,KAAK,cAAgB,GAGpB,KAAK,cAAgB,GACtBA,EAAG,WAAW,EAAIA,EAAG,CAAC,EAAE,aAAeA,EAAG,CAAC,EAAE,cAC7C,KAAK,cAAgB,EAGjC,EAEA8oB,EAAa,UAAU,mBAAqB,UAAY,CACpD,IAAI9oB,EAAK,KAAK,SACV4pB,EAAO,KAAK,iBAAmB,IAE/B,KAAK,cACL5pB,EAAG,UAAUA,EAAG,UAAU,EAAI,KAAK,aAAe4pB,CAAI,EAEtD,KAAK,eACL5pB,EAAG,WAAWA,EAAG,WAAW,EAAI,KAAK,cAAgB4pB,CAAI,EAE7D,KAAK,mBAAmB,EAEpB,CAAC,KAAK,cAAgB,CAAC,KAAK,eAC5B,KAAK,cAAc,CAE3B,EAEAd,EAAa,UAAU,cAAgB,UAAY,CAC3C,KAAK,mBACL,cAAc,KAAK,gBAAgB,EACnC,KAAK,iBAAmB,KACxB,KAAK,gBAAgB,EAE7B,EAEAA,EAAa,UAAU,sBAAwB,UAAY,CAElD,KAAK,kBACN,KAAK,gBAAgB,CAE7B,EACAA,EAAa,UAAU,gBAAkB,UAAY,CAErD,EACOA,CACX,EAAE,EACFrrB,EAAQ,QAAUqrB,EAClB3X,EAAgB,QAAQ,QAAQ2X,CAAY,CAGtC,EAEC,SAASprB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BmP,EAASnP,EAAoB,CAAC,EAC9BqO,EAAUrO,EAAoB,EAAE,EAKhC4rB,EAA+B,SAAUte,EAAQ,CACjDL,EAAQ,UAAU2e,EAAete,CAAM,EACvC,SAASse,GAAgB,CACrB,OAAOte,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC/D,CAEA,OAAAse,EAAc,UAAU,eAAiB,UAAY,CAYjD,QAXIC,EAAI,KACJ9N,EAAO8N,EAAE,KACTte,EAAWwQ,EAAK,SAChBnR,EAAOW,EAAS,cAAcse,EAAE,YAAY,mBAAmB,QAAS,EAAI,EAC5E/kB,EAAMyG,EAAS,cAAcse,EAAE,YAAY,mBAAmB,MAAO,EAAI,EACzEC,EAAW,GACXC,EAAa,CAAC,EACdC,EAAW,CAAC,EACZC,EACAC,GACAC,GACGvf,EAAK,SAAS9F,CAAG,GAChBiX,EAAK,YAAYnR,CAAI,EACrBmf,EAAW,KAAKD,EAAW,EAAG,GAG9BA,IACAC,EAAW,KAAKD,CAAQ,EACxBE,EAAS,KAAKpf,EAAK,MAAM,CAAC,GAE9BA,EAAK,IAAI,EAAG,MAAM,EAEtB,GAAI,KAAK,aAAc,CAGnB,IADAsf,GAAWF,EAAS,CAAC,EAAE,IAAI,EACtBC,EAAa,EAAGA,EAAaD,EAAS,QACnCA,EAASC,CAAU,EAAE,IAAI,IAAMC,GADYD,IAC/C,CAIJE,GAAS,KAAK,KAAKH,EAAS,OAASC,CAAU,CACnD,MAEIE,GAAS,EACTF,EAAaD,EAAS,OAE1B,KAAK,SAAWA,EAChB,KAAK,WAAaD,EAClB,KAAK,WAAaE,EAClB,KAAK,OAASE,GACd,KAAK,mBAAmB,CAC5B,EAEAP,EAAc,UAAU,mBAAqB,UAAY,CACrD,KAAK,OAAS,KAAK,cAAc,EACjC,KAAK,cACD,KAAK,IAAI,oBAAoB,GACzB,KAAK,IAAI,cAAc,GACvB,KAAK,qBAAqB,CACtC,EAEAA,EAAc,UAAU,cAAgB,UAAY,CAChD,OAAO,KAAK,UAChB,EAEAA,EAAc,UAAU,YAAc,SAAUQ,EAAKC,EAAK,CACtD,OAAO,KAAK,SAAS,KAAK,gBAAgBD,EAAKC,CAAG,CAAC,EAAE,MAAM,CAC/D,EAEAT,EAAc,UAAU,aAAe,SAAUQ,EAAKC,EAAK,CACvD,IAAIxlB,EAAQ,KAAK,YAAYulB,EAAKC,CAAG,EACjCvlB,EAAMD,EAAM,MAAM,EAAE,IAAI,EAAG,MAAM,EACrC,MAAO,CAAE,MAAOA,EAAO,IAAKC,CAAI,CACpC,EAEA8kB,EAAc,UAAU,gBAAkB,SAAUQ,EAAKC,EAAK,CAC1D,OAAOD,EAAM,KAAK,WAAa,KAAK,eAAeC,CAAG,CAC1D,EAEAT,EAAc,UAAU,eAAiB,SAAUS,EAAK,CACpD,OAAI,KAAK,MACE,KAAK,OAAS,EAAIA,EAGlBA,CAEf,EAMAT,EAAc,UAAU,gBAAkB,SAAUhf,EAAM,CACtD,IAAImf,EAAa,KAAK,WAClBO,EAAY1f,EAAK,KAAK,KAAK,SAAS,CAAC,EAAG,MAAM,EAClD,OAAI0f,EAAY,EACLP,EAAW,CAAC,EAAI,EAElBO,GAAaP,EAAW,OACtBA,EAAWA,EAAW,OAAS,CAAC,EAAI,EAGpCA,EAAWO,CAAS,CAEnC,EAIAV,EAAc,UAAU,qBAAuB,UAAY,CAGvD,OAAI,KAAK,OAAS,GAAK,KAAK,OAAS,GAC1B,MAEF,KAAK,OAAS,EACZ,KAAK,IAAI,kBAAkB,EAG3B,MAEf,EAIAA,EAAc,UAAU,gBAAkB,SAAUjb,EAAc,CAC9D,IAAIsb,EAAa,KAAK,WAClBM,EAAc,KAAK,KAAK,gBAAgB5b,CAAY,EACpD6b,EAAa,KAAK,gBAAgBD,EAAY,KAAK,EACnDE,EAAY,KAAK,gBAAgBF,EAAY,IAAI,MAAM,EAAE,SAAS,EAAG,MAAM,CAAC,EAC5EtL,EAAO,CAAC,EACRmL,EACAM,EACAC,EACAC,GACAC,GACJ,IAAKT,EAAM,EAAGA,EAAM,KAAK,OAAQA,IAC7BM,EAAWN,EAAMH,EACjBU,EAAUD,EAAWT,EAAa,EAElCW,GAAW,KAAK,IAAIJ,EAAYE,CAAQ,EACxCG,GAAU,KAAK,IAAIJ,EAAWE,CAAO,EAErCC,GAAW,KAAK,KAAKA,EAAQ,EAC7BC,GAAU,KAAK,MAAMA,EAAO,EACxBD,IAAYC,IACZ5L,EAAK,KAAK,CACN,IAAKmL,EAEL,iBAAkBQ,GAAWF,EAC7B,gBAAiBG,GAAUH,EAE3B,QAASE,KAAaJ,EACtB,MAAOK,KAAYJ,CACvB,CAAC,EAGT,OAAOxL,CACX,EAGA2K,EAAc,UAAU,gBAAkB,SAAUjb,EAAc,CAC9D,IAAIsb,EAAa,KAAK,WAClBM,EAAc,KAAK,KAAK,gBAAgB5b,CAAY,EACpD6b,EAAa,KAAK,gBAAgBD,EAAY,KAAK,EACnDE,EAAY,KAAK,gBAAgBF,EAAY,IAAI,MAAM,EAAE,SAAS,EAAG,MAAM,CAAC,EAC5EtL,EAAO,CAAC,EACRmL,EACAM,EACAC,EACA7qB,GACA8qB,GACAC,EACJ,IAAKT,EAAM,EAAGA,EAAM,KAAK,OAAQA,IAG7B,IAFAM,EAAWN,EAAMH,EACjBU,EAAUD,EAAWT,EAAa,EAC7BnqB,GAAI4qB,EAAU5qB,IAAK6qB,EAAS7qB,KAE7B8qB,GAAW,KAAK,IAAIJ,EAAY1qB,EAAC,EACjC+qB,EAAU,KAAK,IAAIJ,EAAW3qB,EAAC,EAE/B8qB,GAAW,KAAK,KAAKA,EAAQ,EAC7BC,EAAU,KAAK,MAAMA,CAAO,EACxBD,IAAYC,GACZ5L,EAAK,KAAK,CACN,IAAKmL,EAEL,iBAAkBQ,GAAWF,EAC7B,gBAAiBG,EAAUH,EAE3B,QAASE,KAAaJ,EACtB,MAAOK,IAAYJ,CACvB,CAAC,EAIb,OAAOxL,CACX,EAGA2K,EAAc,UAAU,eAAiB,UAAY,CACjD,IAAIkB,EAAQ,KAAK,KAAK,SAAS,MAC/B,MAAO,sBACqBA,EAAM,SAAS,WAAW,EAAI,mBACnCA,EAAM,SAAS,WAAW,EAAI,YAEjD,KAAK,iBAAiB,EACtB,wBAGR,EACAlB,EAAc,UAAU,oBAAsB,UAAY,CACtD,OAAO,KAAK,gBAAgB,CAChC,EACAA,EAAc,UAAU,iBAAmB,UAAY,CACnD,MAAO,QAEF,KAAK,MAAQ,GAAK,KAAK,oBAAoB,GAC5C,KAAK,wBAAwB,GAC5B,KAAK,MAAQ,KAAK,oBAAoB,EAAI,IAC3C,OACR,EACAA,EAAc,UAAU,wBAA0B,UAAY,CAC1D,IAAImB,EAAQ,CAAC,EACTV,EACAzf,EACJ,IAAKyf,EAAM,EAAGA,EAAM,KAAK,OAAQA,IAC7Bzf,EAAO,KAAK,YAAY,EAAGyf,CAAG,EAC9BU,EAAM,KAAK,KAAK,uBAAuBngB,CAAI,CAAC,EAEhD,OAAOmgB,EAAM,KAAK,EAAE,CACxB,EAGAnB,EAAc,UAAU,uBAAyB,SAAUhf,EAAMogB,EAASC,EAAY,CAClF,IAAIpB,EAAI,KACJ9N,EAAO8N,EAAE,KACTqB,EAAcrB,EAAE,YAAY,mBAAmB,aAAajf,CAAI,EAChEgV,EAAa,CACb,gBACA7D,EAAK,SAAS,MAAM,SAAS,cAAc,CAC/C,EACIoP,EACJ,OAAI,OAAOtB,EAAE,IAAI,kBAAkB,GAAM,WACrCsB,EAAYtB,EAAE,IAAI,kBAAkB,EAAEjf,CAAI,EAErC,OAAOif,EAAE,IAAI,kBAAkB,GAAM,WAC1CsB,EAAYhe,EAAO,WAAW0c,EAAE,IAAI,kBAAkB,EAAEjf,CAAI,CAAC,EAG7DugB,EAAYhe,EAAO,WAAWvC,EAAK,OAAOif,EAAE,aAAa,CAAC,EAG1DA,EAAE,SAAW,EACbjK,EAAaA,EAAW,OAGxBiK,EAAE,cAAcjf,EAAM,EAAI,CAAC,EAG3BgV,EAAW,KAAK,MAAQzS,EAAO,OAAOvC,EAAK,IAAI,CAAC,CAAC,EAE9C,cACagV,EAAW,KAAK,GAAG,EAAI,MACrCsL,GAAerB,EAAE,UAAY,EAC3B,eAAiBjf,EAAK,OAAO,YAAY,EAAI,IAC7C,KACHogB,EAAU,EACP,aAAeA,EAAU,IACzB,KACHC,EACG,IAAMA,EACN,IACJ,KACCC,EAEGnP,EAAK,oBAAoB,CAAE,KAAMnR,EAAM,SAAUif,EAAE,OAAS,GAAKA,EAAE,SAAW,CAAE,EAAGsB,CAAS,EAE5FA,GACJ,OACR,EAGAvB,EAAc,UAAU,eAAiB,SAAUQ,EAAK,CACpD,MAAO,QAEF,KAAK,MAAQ,GAAK,KAAK,kBAAkBA,CAAG,GAC7C,KAAK,kBAAkBA,CAAG,GACzB,KAAK,MAAQ,KAAK,kBAAkBA,CAAG,EAAI,IAC5C,OACR,EACAR,EAAc,UAAU,kBAAoB,SAAUQ,EAAK,CACvD,OAAO,KAAK,gBAAgB,CAChC,EACAR,EAAc,UAAU,kBAAoB,SAAUQ,EAAK,CACvD,IAAIW,EAAQ,CAAC,EACTV,EACAzf,EACJ,IAAKyf,EAAM,EAAGA,EAAM,KAAK,OAAQA,IAC7Bzf,EAAO,KAAK,YAAYwf,EAAKC,CAAG,EAChCU,EAAM,KAAK,KAAK,iBAAiBngB,CAAI,CAAC,EAE1C,OAAOmgB,EAAM,KAAK,EAAE,CACxB,EACAnB,EAAc,UAAU,iBAAmB,SAAUhf,EAAMqgB,EAAY,CACnE,IAAIpB,EAAI,KACJ9N,EAAO8N,EAAE,KACTqB,EAAcrB,EAAE,YAAY,mBAAmB,aAAajf,CAAI,EAChE4U,EAAUqK,EAAE,cAAcjf,CAAI,EAClC,OAAA4U,EAAQ,QAAQ,SAAUzD,EAAK,SAAS,MAAM,SAAS,eAAe,CAAC,EAChE,cAAgByD,EAAQ,KAAK,GAAG,EAAI,KACtC0L,EACG,eAAiBtgB,EAAK,OAAO,YAAY,EAAI,IAC7C,KACHqgB,EACG,IAAMA,EACN,IACJ,QACR,EAGArB,EAAc,UAAU,gBAAkB,UAAY,CAEtD,EAQAA,EAAc,UAAU,aAAe,SAAUwB,EAAM,CACnD,IAAIC,EAAY,KAAK,gBAAgB,EACjCA,IACI,KAAK,MACLD,EAAK,OAAOC,CAAS,EAGrBD,EAAK,QAAQC,CAAS,EAGlC,EACOzB,CACX,EAAEvd,EAAQ,OAAO,EACjB7O,EAAQ,QAAUosB,CAGZ,EAEC,SAASnsB,EAAQD,EAAS,CAEjC,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAI8tB,EAAsC,UAAY,CAMlD,SAASA,EAAqBjc,EAAWqP,EAAc,CACnD,KAAK,UAAYrP,EACjB,KAAK,aAAeqP,CACxB,CACA,OAAA4M,EAAqB,UAAU,OAAS,SAAUzO,EAAuB,CACrE,IAAIxN,EAAY,KAAK,UACjBV,EAAeU,EAAU,gBAAgB,EAAE,mBAC3C8M,EAAqBU,EAAsB,wBAAwBxN,EAAU,uBAAwBV,CAAY,EACjHyN,EAAkBD,EAClB9M,EAAU,6BAA6B8M,EAAmB,kBAAkBxN,CAAY,CAAC,EACzF,CAAC,EACL,KAAK,sBAAsByN,CAAe,CAC9C,EACAkP,EAAqB,UAAU,sBAAwB,SAAUlP,EAAiB,CAC9E,IAAI6C,EAAO,KAAK,UAAU,sBAAsB7C,CAAe,EAC/D,KAAK,WAAW6C,CAAI,EACpB,KAAK,KAAOA,CAChB,EACAqM,EAAqB,UAAU,WAAa,SAAUrM,EAAM,CACpD,KAAK,cACL,KAAK,aAAa,WAAW,gBAAiBA,EAAM,CAChD,WAAY,SAAUnD,EAAK,CACvB,MAAO,CAAC,iBAAkB,YAAY,CAC1C,CACJ,CAAC,CAET,EACAwP,EAAqB,UAAU,SAAW,UAAY,CAC9C,KAAK,cACL,KAAK,aAAa,SAAS,eAAe,EAE9C,KAAK,KAAO,IAChB,EACAA,EAAqB,UAAU,QAAU,UAAY,CACjD,OAAO,KAAK,MAAQ,CAAC,CACzB,EACOA,CACX,EAAE,EACF9tB,EAAQ,QAAU8tB,CAGZ,EAEC,SAAS7tB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIoB,EAAIZ,EAAoB,CAAC,EACzBmP,EAASnP,EAAoB,CAAC,EAC9ButB,EAA8B,UAAY,CAC1C,SAASA,EAAalc,EAAW,CAC7B,KAAK,WAAa,MAClB,KAAK,UAAYA,EACjB,KAAK,UAAY,CAAC,CACtB,CACA,OAAAkc,EAAa,UAAU,gBAAkB,SAAUrc,EAAM8J,EAAoBjS,EAAO,CAChF,KAAK,WAAWmI,EAAM,KAAK,UAAU,yBAAyB8J,CAAkB,EAAGjS,CAAK,CAC5F,EACAwkB,EAAa,UAAU,WAAa,SAAUrc,EAAM+P,EAAMlY,EAAO,CAC7D,IAAI3H,EACJ,OAAA6f,EAAO,KAAK,YAAY/P,EAAM+P,EAAMlY,CAAK,EACzC3H,EAAM,KAAK,aAAa8P,EAAM+P,CAAI,EAC9B7f,GACA,KAAK,UAAU8P,EAAM9P,CAAG,EAErB6f,CACX,EAEAsM,EAAa,UAAU,SAAW,SAAUrc,EAAM,CAC9C,IAAInP,EAAK,KAAK,UAAUmP,CAAI,EACxBnP,IACAA,EAAG,OAAO,EACV,OAAO,KAAK,UAAUmP,CAAI,EAElC,EAGAqc,EAAa,UAAU,YAAc,SAAUrc,EAAM+P,EAAMlY,EAAO,CAC9D,IAAIyE,EAAQ,KACR4T,EAAO,GACPC,EAAe,CAAC,EAChBvf,EACJ,GAAImf,EAAK,OAAQ,CAEb,IAAKnf,EAAI,EAAGA,EAAImf,EAAK,OAAQnf,IACzBsf,GAAQ,KAAK,aAAalQ,EAAM+P,EAAKnf,CAAC,EAAGiH,CAAK,EAIlDnI,EAAEwgB,CAAI,EAAE,KAAK,SAAUtf,EAAGwf,EAAM,CAC5B,IAAIxD,EAAMmD,EAAKnf,CAAC,EACZC,EAAKnB,EAAE0gB,CAAI,EAEXvY,EAAM,WACNhH,EAAKgH,EAAM,SAAS+U,EAAK/b,CAAE,GAE3BA,IACAA,EAAKnB,EAAEmB,CAAE,EAELA,EAAG,GAAGyL,EAAM,UAAU,IACtBsQ,EAAI,GAAK/b,EACTsf,EAAa,KAAKvD,CAAG,GAGjC,CAAC,CACL,CACA,OAAOuD,CACX,EAEAkM,EAAa,UAAU,aAAe,SAAUrc,EAAM4M,EAAK/U,EAAO,CAE9D,IAAIyY,EAAUzY,EAAM,WAAaA,EAAM,WAAW+U,CAAG,EAAI,CAAC,EACtD0P,EAAMre,EAAO,SAASpG,EAAM,OAASA,EAAM,OAAO+U,CAAG,EAAI,CAAC,CAAC,EAC/D,MAAO,IAAM,KAAK,YACb0D,EAAQ,OAAS,WAAaA,EAAQ,KAAK,GAAG,EAAI,IAAM,KACxDgM,EAAM,WAAaA,EAAM,IAAM,IAChC,MAAQ,KAAK,WAAa,GAClC,EAEAD,EAAa,UAAU,aAAe,SAAUrc,EAAM+P,EAAM,CAE5D,EACAsM,EAAa,UAAU,UAAY,SAAUrc,EAAMuc,EAAO,CAClD,KAAK,UAAUvc,CAAI,EACnB,KAAK,UAAUA,CAAI,EAAI,KAAK,UAAUA,CAAI,EAAE,IAAIuc,CAAK,EAGrD,KAAK,UAAUvc,CAAI,EAAItQ,EAAE6sB,CAAK,CAEtC,EACOF,CACX,EAAE,EACF/tB,EAAQ,QAAU+tB,CAGZ,EAEC,SAAS9tB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIqU,EAAmB7T,EAAoB,CAAC,EACxCsU,EAAmBtU,EAAoB,EAAE,EACzCgU,EAAgBhU,EAAoB,CAAC,EACrC0tB,EAAgC,UAAY,CAC5C,SAASA,EAAerc,EAAWsc,EAAe,CAC9C,KAAK,KAAOtc,EAAU,SAAS,EAC/B,KAAK,UAAYA,EACjB,KAAK,cAAgBsc,CACzB,CACA,OAAAD,EAAe,UAAU,yBAA2B,SAAU1S,EAAoB,CAC9E,KAAK,sBAAsB,CACvB,KAAK,wBAAwBA,CAAkB,CACnD,CAAC,CACL,EACA0S,EAAe,UAAU,8BAAgC,SAAUtP,EAAiBwP,EAAWC,EAAS,CACpG,KAAK,sBAAsBzP,EAAiBwP,EAAW,cAAeC,EAAU,KAAO,KAAK,KAAK,IAAI,aAAa,CAAC,CACvH,EACAH,EAAe,UAAU,8BAAgC,SAAUtP,EAAiBwP,EAAWC,EAAS,CACpG,KAAK,sBAAsBzP,EAAiBwP,EAAW,aAAa,CACxE,EACAF,EAAe,UAAU,sBAAwB,SAAUtP,EAAiBwP,EAAWE,EAAiBC,EAAS,CAC7G,IAAI9M,EAAO,KAAK,UAAU,sBAAsB7C,CAAe,EAC3DwD,EAAa,cAAgBkM,GAAmB,IAChDhsB,EAGJ,IADAmf,EAAO,KAAK,cAAc,eAAeA,CAAI,EACxCnf,EAAI,EAAGA,EAAImf,EAAK,OAAQnf,IACzBmf,EAAKnf,CAAC,EAAE,GAAG,SAAS8f,CAAU,EAElC,GAAImM,GAAW,KACX,IAAKjsB,EAAI,EAAGA,EAAImf,EAAK,OAAQnf,IACzBmf,EAAKnf,CAAC,EAAE,GAAG,IAAI,UAAWisB,CAAO,EAGzC,KAAK,UAAY,KAAK,WAAW9M,EAAM2M,CAAS,CACpD,EAIAF,EAAe,UAAU,WAAa,SAAUzM,EAAM2M,EAAW,CAEjE,EACAF,EAAe,UAAU,SAAW,UAAY,CACxC,KAAK,YACL,KAAK,UAAU,OAAO,EACtB,KAAK,UAAY,KAEzB,EACAA,EAAe,UAAU,wBAA0B,SAAU1S,EAAoB,CAC7E,IAAIzN,EAAW,KAAK,KAAK,SACrB0P,EAAmB1P,EAAS,uBAAuByN,CAAkB,EACrEgT,EAAa,IAAIna,EAAiB,QAAQ,IAAIG,EAAc,QAAQzG,CAAQ,CAAC,EAC7E0gB,EACJ,OAAAD,EAAW,YAAc/Q,EACzBgR,EAAgBD,EAAW,cAAc,EAClC,IAAI1Z,EAAiB,QAAQ0G,EAAoBgT,EAAYC,CAAa,CACrF,EACOP,CACX,EAAE,EACFluB,EAAQ,QAAUkuB,CAGZ,EAEC,SAASjuB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/Bwd,EAAkBxd,EAAoB,EAAE,EACxCkW,EAAgBlW,EAAoB,EAAE,EACtCkuB,EAA+B,SAAU5gB,EAAQ,CACjDL,EAAQ,UAAUihB,EAAe5gB,CAAM,EACvC,SAAS4gB,GAAgB,CACrB,OAAO5gB,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC/D,CAKA,OAAA4gB,EAAc,UAAU,SAAW,SAAUnsB,EAAI,CAC7C,IAAIsP,EAAY,KAAK,UACrBA,EAAU,mBAAmBtP,EAAI,QAAS,KAAK,YAAY,KAAK,IAAI,CAAC,EACrEsP,EAAU,mBAAmBtP,EAAI,aAAc,KAAK,gBAAgB,KAAK,IAAI,CAAC,EAC9EsP,EAAU,mBAAmBtP,EAAI,aAAc,KAAK,eAAe,KAAK,IAAI,CAAC,CACjF,EACAmsB,EAAc,UAAU,YAAc,SAAUpQ,EAAK1Z,EAAI,CACrD,IAAIH,EAAM,KAAK,UAAU,gBAAgB,aAAc,CACnD,QAAS6Z,EAAI,GAAG,CAAC,EACjB,KAAM,CAACA,EAAI,UAAU,eAAe,EAAG1Z,EAAI,KAAK,IAAI,CACxD,CAAC,EACGH,IAAQ,IACRG,EAAG,eAAe,CAE1B,EAEA8pB,EAAc,UAAU,gBAAkB,SAAUpQ,EAAK1Z,EAAI,CACrD,CAACoZ,EAAgB,QAAQ,IAAI,EAAE,kBAAkB,GACjD,CAAC,KAAK,gBACN,KAAK,cAAgBM,EAEjB,KAAK,KAAK,oBAAoBA,EAAI,UAAU,QAAQ,GACpDA,EAAI,GAAG,SAAS,uBAAuB,EAE3C,KAAK,UAAU,gBAAgB,iBAAkB,CAC7C,QAASA,EAAI,GAAG,CAAC,EACjB,KAAM,CAACA,EAAI,UAAU,eAAe,EAAG1Z,EAAI,KAAK,IAAI,CACxD,CAAC,EAET,EAGA8pB,EAAc,UAAU,eAAiB,SAAUpQ,EAAK1Z,EAAI,CACpD,KAAK,gBACL,KAAK,cAAgB,KAEjB,KAAK,KAAK,oBAAoB0Z,EAAI,UAAU,QAAQ,GACpDA,EAAI,GAAG,YAAY,uBAAuB,EAE9C,KAAK,UAAU,gBAAgB,gBAAiB,CAC5C,QAASA,EAAI,GAAG,CAAC,EACjB,KAAM,CACFA,EAAI,UAAU,eAAe,EAC7B1Z,GAAM,CAAC,EACP,KAAK,IACT,CACJ,CAAC,EAET,EACA8pB,EAAc,UAAU,IAAM,UAAY,CAClC,KAAK,eACL,KAAK,eAAe,KAAK,aAAa,CAE9C,EACOA,CACX,EAAEhY,EAAc,OAAO,EACvB1W,EAAQ,QAAU0uB,CAGZ,EAEC,SAASzuB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BqO,EAAUrO,EAAoB,EAAE,EAChCiW,EAAiBjW,EAAoB,GAAG,EACxCgW,EAAkBhW,EAAoB,GAAG,EACzC8V,EAAkB9V,EAAoB,EAAE,EACxC+V,EAAkB/V,EAAoB,GAAG,EACzC6V,EAAkB7V,EAAoB,GAAG,EACzC4V,EAAqB5V,EAAoB,GAAG,EAC5CmuB,EAA2C,SAAU7gB,EAAQ,CAC7DL,EAAQ,UAAUkhB,EAA2B7gB,CAAM,EACnD,SAAS6gB,GAA4B,CACjC,OAAO7gB,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC/D,CACA,OAAO6gB,CACX,EAAE9f,EAAQ,OAAO,EACjB7O,EAAQ,QAAU2uB,EAClBA,EAA0B,UAAU,kBAAoBlY,EAAe,QACvEkY,EAA0B,UAAU,mBAAqBnY,EAAgB,QACzEmY,EAA0B,UAAU,mBAAqBrY,EAAgB,QACzEqY,EAA0B,UAAU,mBAAqBpY,EAAgB,QACzEoY,EAA0B,UAAU,mBAAqBtY,EAAgB,QACzEsY,EAA0B,UAAU,sBAAwBvY,EAAmB,OAGzE,EAEC,SAASnW,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BY,EAAIZ,EAAoB,CAAC,EACzBmP,EAASnP,EAAoB,CAAC,EAC9BuU,EAAevU,EAAoB,EAAE,EACrC2U,EAAY3U,EAAoB,GAAG,EACnCwR,EAAiBxR,EAAoB,CAAC,EACtCsT,EAAuBtT,EAAoB,EAAE,EAC7CsU,EAAmBtU,EAAoB,EAAE,EACzCwV,EAAyBxV,EAAoB,EAAE,EAC/CmW,EAA8BnW,EAAoB,EAAE,EACpDmV,EAA6BnV,EAAoB,EAAE,EACnDuV,EAAkBvV,EAAoB,EAAE,EACxC0W,EAAyB1W,EAAoB,GAAG,EAChD4W,EAA0B5W,EAAoB,GAAG,EACjD2W,EAAwB3W,EAAoB,GAAG,EAG/CouB,GAAyB,SAAU9gB,GAAQ,CAC3CL,EAAQ,UAAUmhB,EAAS9gB,EAAM,EACjC,SAAS8gB,EAAQrQ,GAAM,CACnB,IAAIvQ,GAAQF,GAAO,KAAK,KAAMyQ,EAAI,GAAK,KACvC,OAAAvQ,GAAM,uBAAyB,GAC/BA,GAAM,mBAAqB,EAG3BA,GAAM,QAAU,GAChBA,GAAM,uBAAyB,GACxBA,EACX,CAEA,OAAA4gB,EAAQ,UAAU,yBAA2B,SAAUpT,GAAoB,CACvE,IAAIiG,GAAO,KAAK,gBAAgBjG,GAAmB,YAAY,EAC3DlZ,GACAgc,GACJ,IAAKhc,GAAI,EAAGA,GAAImf,GAAK,OAAQnf,KACzBgc,GAAMmD,GAAKnf,EAAC,EACR,KAAK,OACLgc,GAAI,QAAU,KAAK,WAAa,EAAIA,GAAI,gBACxCA,GAAI,SAAW,KAAK,WAAa,EAAIA,GAAI,mBAGzCA,GAAI,QAAUA,GAAI,iBAClBA,GAAI,SAAWA,GAAI,iBAG3B,OAAOmD,EACX,EAGAmN,EAAQ,UAAU,YAAc,SAAUnf,GAAa,CACnD,KAAK,YAAcA,GACnB,KAAK,eAAe,EACpB,KAAK,WAAW,CACpB,EACAmf,EAAQ,UAAU,cAAgB,UAAY,CAC1C,KAAK,iBAAiB,CAC1B,EAEAA,EAAQ,UAAU,WAAa,UAAY,CACvC,IAAIrQ,GAAO,KAAK,KACZoO,GAAS,KAAK,OACdkC,GAAS,KAAK,OACdjN,GAAO,GACPgL,GACAC,GAIJ,IAHI,KAAK,iBACL,KAAK,gBAAgB,KAAK,KAAK,eAAe,CAAC,EAE9CD,GAAM,EAAGA,GAAMD,GAAQC,KACxBhL,IAAQ,KAAK,iBAAiBgL,GAAK,KAAK,OAAO,EAcnD,IAZA,KAAK,GAAG,KAAKhL,EAAI,EACjB,KAAK,OAAS,KAAK,GAAG,KAAK,SAAS,EACpC,KAAK,QAAU,KAAK,GAAG,KAAK,2BAA2B,EACvD,KAAK,cAAgB,IAAI7M,EAAa,QAAQ,CAC1C,IAAK,KAAK,OACV,WAAY,EAChB,CAAC,EACD,KAAK,cAAgB,IAAIA,EAAa,QAAQ,CAC1C,IAAK,KAAK,QAAQ,MAAM,EAAG,KAAK,MAAM,EACtC,aAAc,EAClB,CAAC,EAEI6X,GAAM,EAAGA,GAAMD,GAAQC,KACxB,IAAKC,GAAM,EAAGA,GAAMgC,GAAQhC,KACxB,KAAK,gBAAgB,YAAa,CAC9B,QAAStO,GACT,KAAM,CACF,KAAK,YAAYqO,GAAKC,EAAG,EACzB,KAAK,UAAUD,GAAKC,EAAG,EACvBtO,EACJ,CACJ,CAAC,CAGb,EAGAqQ,EAAQ,UAAU,iBAAmB,SAAUhC,GAAKkC,GAAS,CACzD,IAAIxB,GAAQ,KAAK,KAAK,SAAS,MAC3BtL,GAAU,CAAC,SAAU,UAAWsL,GAAM,SAAS,QAAQ,CAAC,EAC5D,OAAIwB,IACA9M,GAAQ,KAAK,UAAU,EAEpB,eACcA,GAAQ,KAAK,GAAG,EAAI,sCAElBsL,GAAM,SAAS,WAAW,EAAI,KACjD,KAAK,eAAeV,EAAG,EACvB,0DAIC,KAAK,oBAAoB,EACtB,UACI,KAAK,mBAAmBA,EAAG,EAC3B,WACJ,IACJ,sBAGR,EACAgC,EAAQ,UAAU,oBAAsB,UAAY,CAChD,OAAO,KAAK,uBAAuB,GAAK,KAAK,sBACjD,EACAA,EAAQ,UAAU,uBAAyB,UAAY,CACnD,OAAO,KAAK,OAAS,CACzB,EAGAA,EAAQ,UAAU,mBAAqB,SAAUhC,GAAK,CAClD,MAAO,QAEF,KAAK,MAAQ,GAAK,KAAK,sBAAsBA,EAAG,GACjD,KAAK,sBAAsBA,EAAG,GAC7B,KAAK,MAAQ,KAAK,sBAAsBA,EAAG,EAAI,IAChD,OACR,EACAgC,EAAQ,UAAU,sBAAwB,SAAUhC,GAAK,CACrD,OAAO,KAAK,gBAAgB,CAChC,EACAgC,EAAQ,UAAU,sBAAwB,SAAUhC,GAAK,CACrD,IAAIW,GAAQ,CAAC,EACTV,GACAzf,GACJ,IAAKyf,GAAM,EAAGA,GAAM,KAAK,OAAQA,KAC7Bzf,GAAO,KAAK,YAAYwf,GAAKC,EAAG,EAChCU,GAAM,KAAK,KAAK,qBAAqBngB,EAAI,CAAC,EAE9C,OAAOmgB,GAAM,KAAK,EAAE,CACxB,EAGAqB,EAAQ,UAAU,qBAAuB,SAAUxhB,GAAM,CACrD,IAAImR,GAAO,KAAK,KACZqD,GAAO,GACP8L,GAAc,KAAK,YAAY,mBAAmB,aAAatgB,EAAI,EACnE2hB,GAAqB,KAAK,uBAAuB,GAAKrB,GACtD1L,GACAgN,GACJ,MAAI,CAACD,IAAsB,CAAC,KAAK,uBAEtB,aAEX/M,GAAU,KAAK,cAAc5U,EAAI,EACjC4U,GAAQ,QAAQ,YAAY,EACxB,KAAK,yBAMD5U,GAAK,QAAQ,yBAA2B,MACxC4hB,GAAmB,EAGnBA,GAAmB5hB,GAAK,QAAQ,eAAe,GAGvDwU,IAAQ,cAAgBI,GAAQ,KAAK,GAAG,EAAI,KACvC0L,GACG,eAAiBtgB,GAAK,OAAO,EAAI,IACjC,IACJ,IACA,KAAK,wBAA2BA,GAAK,IAAI,IAAM4hB,KAC/CpN,IAAQrD,GAAK,oBAAoB,CAAE,KAAMnR,GAAM,KAAM,MAAO,EAAG,CAAE,MAAS,gBAAiB,EAAGA,GAAK,OAAO,GAAG,CAC7G,GAEA2hB,KACAnN,IAAQrD,GAAK,oBAAoBnR,GAAM,CAAE,MAAS,eAAgB,EAAGA,GAAK,OAAO,GAAG,CACpF,GAEJwU,IAAQ,QACDA,GACX,EAGAgN,EAAQ,UAAU,YAAc,UAAY,CACxC,KAAK,cAAc,MAAM,EACzB,KAAK,cAAc,MAAM,EACzB,KAAK,cAAc,QAAQ,KAAK,OAAS,CAAC,GAAK,KAAK,kBACxD,EACAA,EAAQ,UAAU,YAAc,UAAY,CACxC,KAAK,cAAc,MAAM,EACzB,KAAK,cAAc,MAAM,CAC7B,EACAA,EAAQ,UAAU,SAAW,SAAU5D,GAAYC,GAAW,CAC1D,GAAI,KAAK,cAAc,eAAeD,EAAU,GAAK,KAAK,cAAc,cAAcC,EAAS,EAAG,CAC9F,IAAI4B,GAAM,KAAK,cAAc,mBAAmB7B,EAAU,EACtD4B,GAAM,KAAK,cAAc,iBAAiB3B,EAAS,EACvD,GAAI2B,IAAO,MAAQC,IAAO,KACtB,OAAO,KAAK,WAAWD,GAAKC,EAAG,CAEvC,CACJ,EACA+B,EAAQ,UAAU,gBAAkB,SAAUjc,GAAK,CAC/C,IAAIrF,GAAQ,KAAK,aAAaqF,GAAI,IAAKA,GAAI,GAAG,EAC9C,OAAO,IAAImB,EAAqB,QAAQ,IAAI9B,EAAe,QAAQ1E,GAAM,MAAOA,GAAM,GAAG,EAAG,EAC5F,CACJ,EACAshB,EAAQ,UAAU,SAAW,SAAUjc,GAAK,CACxC,OAAO,KAAK,UAAUA,GAAI,IAAKA,GAAI,GAAG,CAC1C,EAIAic,EAAQ,UAAU,WAAa,SAAUhC,GAAKC,GAAK,CAC/C,MAAO,CACH,IAAKD,GACL,IAAKC,GACL,UAAW,KACX,KAAM,KAAK,cAAc,cAAcA,EAAG,EAC1C,MAAO,KAAK,cAAc,eAAeA,EAAG,EAC5C,IAAK,KAAK,cAAc,aAAaD,EAAG,EACxC,OAAQ,KAAK,cAAc,gBAAgBA,EAAG,CAClD,CACJ,EACAgC,EAAQ,UAAU,UAAY,SAAUhC,GAAKC,GAAK,CAC9C,OAAO,KAAK,QAAQ,GAAGD,GAAM,KAAK,OAASC,EAAG,CAClD,EAIA+B,EAAQ,UAAU,qBAAuB,UAAY,CACjD,KAAK,iBAAiB,EACtB9gB,GAAO,UAAU,qBAAqB,KAAK,IAAI,CACnD,EAEA8gB,EAAQ,UAAU,gBAAkB,UAAY,CAE5C,OAAO9gB,GAAO,UAAU,gBAAgB,KAAK,IAAI,EAAE,OAAO,KAAK,aAAe,CAAC,CAAC,CACpF,EAKA8gB,EAAQ,UAAU,WAAa,SAAUhQ,GAAiBN,GAAK+P,GAAS,CACpE,IAAI/rB,GACJ,IAAKA,GAAI,EAAGA,GAAIsc,GAAgB,OAAQtc,KACpC,KAAK,gBAAgBsc,GAAgBtc,EAAC,EAAE,kBAAkB,EAG9D,GAAIsc,GAAgB,QAAUN,IAAOA,GAAI,YAAc,KACnD,YAAK,eAAe,8BAA8BM,GAAiBN,GAAK+P,EAAO,EACxE,EAEf,EAEAO,EAAQ,UAAU,aAAe,UAAY,CACzC,KAAK,kBAAkB,EACvB,KAAK,eAAe,SAAS,CACjC,EAIAA,EAAQ,UAAU,kBAAoB,SAAUhQ,GAAiBN,GAAK+P,GAAS,CAC3E,IAAI/rB,GACJ,IAAKA,GAAI,EAAGA,GAAIsc,GAAgB,OAAQtc,KACpC,KAAK,gBAAgBsc,GAAgBtc,EAAC,EAAE,kBAAkB,EAE9D,KAAK,eAAe,8BAA8Bsc,GAAiBN,GAAK+P,EAAO,CACnF,EAEAO,EAAQ,UAAU,oBAAsB,UAAY,CAChD,KAAK,kBAAkB,EACvB,KAAK,eAAe,SAAS,CACjC,EAGAA,EAAQ,UAAU,iBAAmB,UAAY,CACzC,KAAK,YACL,KAAK,WAAW,KAAK,CAE7B,EAGAA,EAAQ,UAAU,UAAY,SAAUK,GAAY,CAChD,IAAIC,GAAa,KAAK,cAAc,YAAc,CAAC,EAC/CtC,GACAuC,GACJ,IAAKvC,GAAM,EAAGA,GAAMsC,GAAW,OAAQtC,KACnC,KAAK,WAAWA,EAAG,EACdqC,GAGI,OAAOA,IAAe,SAC3BE,GAAgBF,GAGhBE,GAAgB,KAAK,qBAAqBvC,EAAG,EAN7CuC,GAAgB,GAQhBA,KAAkB,IAClB,KAAK,SAASvC,GAAKuC,EAAa,CAG5C,EAIAP,EAAQ,UAAU,qBAAuB,SAAUhC,GAAK,CACpD,IAAIwC,GAAQ,KAAK,OAAO,GAAGxC,EAAG,EAC1ByC,GAAYD,GAAM,OAAO,EACzBE,GAAQ,KAAK,cAAc,WAAW1C,EAAG,EAAE,QAAQ,SAAS,EAC5DtqB,GACAsrB,GACA2B,GACJ,SAASC,GAAiBltB,GAAGmtB,GAAW,CACpCF,GAAW,KAAK,IAAIA,GAAUnuB,EAAEquB,EAAS,EAAE,YAAY,CAAC,CAC5D,CAEA,IAAKntB,GAAI,EAAGA,GAAIgtB,GAAM,OAAQhtB,KAM1B,GALAsrB,GAAO0B,GAAM,GAAGhtB,EAAC,EAAE,YAAY,YAAY,EAG3CitB,GAAW,EACX3B,GAAK,KAAK,qBAAqB,EAAE,KAAK4B,EAAgB,EAClD5B,GAAK,SAAS,EAAE,IAAM2B,GAAWF,GACjC,OAAO/sB,GAGf,MAAO,EACX,EAIAssB,EAAQ,UAAU,SAAW,SAAUhC,GAAKqC,GAAY,CACpD,IAAIjhB,GAAQ,KACR0hB,GAAY,KAAK,cAAc,WAAW9C,EAAG,EAC7C+C,GAAY,CAAC,EACb9C,GAAM,EACN+C,GACAC,GACAC,GACAxtB,GACAgc,GACAyR,GACAC,GACAC,GACAC,GACAC,GACAC,GACA9mB,GACA+mB,GACAC,GACAC,GAEAC,GAAkB,SAAUC,GAAQ,CACpC,KAAO5D,GAAM4D,IACTV,GAAY/hB,GAAM,YAAY4e,GAAKC,GAAKoC,EAAU,EAC9Cc,GAAU,SACVG,GAAKL,GAAWZ,GAAa,CAAC,EAAEpC,EAAG,EACnC0D,GAAWviB,GAAM,eAAe4e,GAAKC,GAAKkD,EAAS,EACnDO,GAAWlvB,EAAE,OAAO,EAAE,OAAOmvB,EAAQ,EACrCL,GAAG,OAAOI,EAAQ,EAClBX,GAAU,KAAKW,GAAS,CAAC,CAAC,GAE9BzD,IAER,EACA,GAAIoC,IAAcA,GAAaS,GAAU,UAAU,OAAQ,CAMvD,IALAE,GAAYF,GAAU,UAAUT,GAAa,CAAC,EAC9CY,GAAaH,GAAU,WACvBI,GAAeJ,GAAU,QAAQ,SAAS,EAAE,MAAMT,EAAU,EACvD,SAAS,YAAY,EAAE,IAAI,EAE3B3sB,GAAI,EAAGA,GAAIstB,GAAU,OAAQttB,KAAK,CAMnC,IALAgc,GAAMsR,GAAUttB,EAAC,EACjBkuB,GAAgBlS,GAAI,OAAO,EAE3B2R,GAAe,CAAC,EAChBD,GAAiB,EACVnD,IAAOvO,GAAI,UACdyR,GAAY,KAAK,YAAYnD,GAAKC,GAAKoC,EAAU,EACjDgB,GAAa,KAAKF,EAAS,EAC3BC,IAAkBD,GAAU,OAC5BlD,KAEJ,GAAImD,GAAgB,CAKhB,IAJAE,GAAKL,GAAWZ,GAAa,CAAC,EAAE3Q,GAAI,OAAO,EAC3C6R,GAAUD,GAAG,KAAK,SAAS,GAAK,EAChCE,GAAe,CAAC,EAEX9mB,GAAI,EAAGA,GAAI2mB,GAAa,OAAQ3mB,KACjC+mB,GAASjvB,EAAE,2BAA2B,EAAE,KAAK,UAAW+uB,EAAO,EAC/DJ,GAAYE,GAAa3mB,EAAC,EAC1BinB,GAAW,KAAK,eAAe3D,GAAKtO,GAAI,QAAUhV,GAAG,CAACgV,EAAG,EAAE,OAAOyR,EAAS,CAC3E,EACAO,GAAWlvB,EAAE,OAAO,EAAE,OAAOmvB,EAAQ,EACrCF,GAAO,OAAOC,EAAQ,EACtBF,GAAa,KAAKC,GAAO,CAAC,CAAC,EAC3BV,GAAU,KAAKU,GAAO,CAAC,CAAC,EAE5BH,GAAG,SAAS,YAAY,EAAE,MAAM9uB,EAAEgvB,EAAY,CAAC,EAC/CN,GAAa,KAAKI,GAAG,CAAC,CAAC,CAC3B,CACJ,CACAM,GAAgB,KAAK,MAAM,EAC3Bd,GAAU,QAAUtuB,EAAEuuB,EAAS,EAC/BD,GAAU,WAAatuB,EAAE0uB,EAAY,CACzC,CACJ,EAGAlB,EAAQ,UAAU,WAAa,SAAUhC,GAAK,CAC1C,IAAI8C,GAAY,KAAK,cAAc,WAAW9C,EAAG,EAC7C8C,GAAU,UACVA,GAAU,QAAQ,OAAO,EACzBA,GAAU,QAAU,MAEpBA,GAAU,aACVA,GAAU,WAAW,YAAY,YAAY,EAC7CA,GAAU,WAAa,KAE/B,EAGAd,EAAQ,UAAU,eAAiB,SAAUhC,GAAKC,GAAK6D,GAAY,CAC/D,IAAI1iB,GAAQ,KACRuQ,GAAO,KAAK,KAChB,OAAOnd,EAAE,qBAAqB,EACzB,KAAK,KAAK,gBAAgBsvB,GAAW,MAAM,CAAC,EAC5C,GAAG,QAAS,SAAU9rB,GAAI,CAC3B,IAAI+rB,GAAc3iB,GAAM,IAAI,iBAAiB,EACzCZ,GAAOY,GAAM,YAAY4e,GAAKC,EAAG,EACjC+D,GAASxvB,EAAEwD,GAAG,aAAa,EAC3B2b,GAAQvS,GAAM,UAAU4e,GAAKC,EAAG,EAChCgE,GAAU7iB,GAAM,YAAY4e,GAAKC,EAAG,EAEpCiE,GAAkB9iB,GAAM,eAAe6iB,GAASzjB,EAAI,EACpD2jB,GAAqB/iB,GAAM,eAAe0iB,GAAYtjB,EAAI,EAC1D,OAAOujB,IAAgB,aAEvBA,GAAc3iB,GAAM,gBAAgB,kBAAmB,CACnD,QAASuQ,GACT,KAAM,CACF,CACI,KAAMnR,GAAK,MAAM,EACjB,MAAOmT,GACP,OAAQqQ,GACR,KAAME,GACN,WAAYC,EAChB,EACAnsB,GACA2Z,EACJ,CACJ,CAAC,GAEDoS,KAAgB,UAChB3iB,GAAM,eAAe4e,GAAKC,GAAK+D,GAAQE,EAAe,EAEjD,OAAOH,IAAgB,UAC5BpS,GAAK,SAAS,OAAOnR,GAAMujB,EAAW,CAE9C,CAAC,CACL,EAEA/B,EAAQ,UAAU,eAAiB,SAAUhC,GAAKC,GAAK0D,GAAU9O,GAAM,CACnE,IAAIzT,GAAQ,KACRuQ,GAAO,KAAK,KACZ+R,GAAWC,GAAS,OAAO,EAC3BS,GACAze,GACA,KAAK,SAAW,EAChBye,GAAQzS,GAAK,GAGbyS,GAAQ,KAAK,OAAO,GAAGpE,EAAG,EAE9Bra,GAAU,CACN,UAAW,mBAAqBgM,GAAK,SAAS,MAAM,SAAS,SAAS,EACtE,QAAS,KAAK,wBAAwBqO,GAAKC,GAAKpL,EAAI,EACpD,SAAUlD,GAAK,GACf,IAAKyS,GAAM,OAAO,EAAE,IACpB,SAAU,GACV,kBAAmB,KAAK,IAAI,0BAA0B,EACtD,KAAM,UAAY,CAGVhjB,GAAM,aACNA,GAAM,gCAAgCA,GAAM,WAAW,EAE3DA,GAAM,WAAW,cAAc,EAC/BA,GAAM,WAAa,KACnBA,GAAM,YAAc,IACxB,CACJ,EAGI,KAAK,MACLuE,GAAQ,MAAQ+d,GAAS,OAAO,EAAE,KAAOA,GAAS,WAAW,EAAI,EAGjE/d,GAAQ,KAAO+d,GAAS,OAAO,EAAE,KAAO,EAE5C,KAAK,WAAa,IAAInb,EAAU,QAAQ5C,EAAO,EAC/C,KAAK,WAAW,KAAK,EAGrB,KAAK,uBAAuB,KAAK,WAAW,EAAE,EAC9C,KAAK,8BAA8BkP,EAAI,CAC3C,EAEAmN,EAAQ,UAAU,wBAA0B,SAAUhC,GAAKC,GAAKpL,GAAM,CAClE,IAAIlD,GAAO,KAAK,KACZ+O,GAAQ/O,GAAK,SAAS,MACtB0S,GAAQ,KAAK,YAAYrE,GAAKC,EAAG,EAAE,OAAO,KAAK,IAAI,kBAAkB,CAAC,EACtEqE,GAAU9vB,EAAE,yBAA2BksB,GAAM,SAAS,eAAe,EAAI,2BAC9CA,GAAM,aAAa,OAAO,EAAI,mCAEzD3d,EAAO,WAAWshB,EAAK,EACvB,gEAGyB3D,GAAM,SAAS,gBAAgB,EAAI,gDAEpD,EACR6D,GAAeD,GAAQ,KAAK,qBAAqB,EACjD5uB,GAIJ,IAFAmf,GAAO,KAAK,cAAc,eAAeA,GAAM,EAAI,EACnD,KAAK,YAAcA,GACdnf,GAAI,EAAGA,GAAImf,GAAK,OAAQnf,KAGzB,KAAK,WAAW,EAChBmf,GAAKnf,EAAC,EAAE,IAAM,KAAK,WAAWsqB,GAAKC,EAAG,EACtC,KAAK,cAAc,EACnBsE,GAAa,OAAO1P,GAAKnf,EAAC,EAAE,EAAE,EAElC,OAAO4uB,EACX,EAEAtC,EAAQ,UAAU,eAAiB,SAAUnN,GAAM2P,GAAS,CACxD,IAAIC,GAAWD,GAAQ,MAAM,EACzBE,GAASD,GAAS,MAAM,EAAE,IAAI,EAAG,MAAM,EACvCE,GAAW,IAAIvf,EAAe,QAAQqf,GAAUC,EAAM,EACtDE,GAAU,CAAC,EACXlvB,GACAgc,GACAhG,GACJ,IAAKhW,GAAI,EAAGA,GAAImf,GAAK,OAAQnf,KACzBgc,GAAMmD,GAAKnf,EAAC,EACZgW,GAAcgG,GAAI,UAAU,mBAAmB,aAAa,UAAUiT,EAAQ,EAC1EjZ,IACAkZ,GAAQ,KAAKpwB,EAAE,OAAO,CAAC,EAAGkd,GAAK,CAC3B,UAAW,IAAIxJ,EAAiB,QAAQ,IAAIhB,EAAqB,QAAQwE,GAAagG,GAAI,UAAU,mBAAmB,QAAQ,EAAGA,GAAI,UAAU,SAAUA,GAAI,UAAU,aAAa,EACrL,QAASA,GAAI,SAAWhG,GAAY,QACpC,MAAOgG,GAAI,OAAShG,GAAY,KACpC,CAAC,CAAC,EAKV,YAAK,cAAc,cAAckZ,EAAO,EACjCA,EACX,EAEA5C,EAAQ,UAAU,gBAAkB,SAAU6C,GAAK,CAC/C,IAAIC,GAAM,KAAK,IAAI,gBAAgB,EACnC,OAAI,OAAOA,IAAQ,WACRA,GAAID,EAAG,EAGP,IAAMA,GAAM,IAAMC,EAEjC,EAGA9C,EAAQ,UAAU,YAAc,SAAUhC,GAAKC,GAAK8E,GAAY,CAK5D,QAJIC,GAAY,KAAK,cAAc,WAAWhF,EAAG,EAAE,UAC/CiF,GAAQF,IAAc,EACtBlQ,GAAO,CAAC,EACRnD,GACGuT,GAAQD,GAAU,QACrBtT,GAAMsT,GAAUC,EAAK,EAAEhF,EAAG,EACtBvO,IACAmD,GAAK,KAAKnD,EAAG,EAEjBuT,KAEJ,OAAOpQ,EACX,EACOmN,CACX,EAAEjZ,EAA2B,OAAO,EACpC3V,EAAQ,QAAU4uB,GAClBA,GAAQ,UAAU,mBAAqB1X,EAAuB,QAC9D0X,GAAQ,UAAU,0BAA4B5Y,EAAuB,QACrE4Y,GAAQ,UAAU,oBAAsBxX,EAAwB,QAChEwX,GAAQ,UAAU,kBAAoBzX,EAAsB,QAC5DR,EAA4B,QAAQ,QAAQiY,EAAO,EACnD7Y,EAAgB,QAAQ,QAAQ6Y,EAAO,CAGjC,EAEC,SAAS3uB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BY,EAAIZ,EAAoB,CAAC,EACzBmP,EAASnP,EAAoB,CAAC,EAC9B+U,EAAa/U,EAAoB,EAAE,EACnCqV,EAASrV,EAAoB,EAAE,EAC/B8W,EAAkC9W,EAAoB,EAAE,EACxDyW,EAAYzW,EAAoB,EAAE,EAKlCsxB,EAA2B,SAAUhkB,EAAQ,CAC7CL,EAAQ,UAAUqkB,EAAWhkB,CAAM,EACnC,SAASgkB,EAAU/jB,EAAU+Q,EAAU,CACnC,IAAI9Q,EAAQF,EAAO,KAAK,KAAMC,EAAU+Q,CAAQ,GAAK,KACrD,OAAA9Q,EAAM,QAAUA,EAAM,mBAAmB,EACzCA,EAAM,QAAQ,QAAUA,EAAM,aAAa,EACvCA,EAAM,IAAI,aAAa,IACnBA,EAAM,IAAI,uBAAuB,GACjCA,EAAM,QAAQ,uBAAyB,GACvCA,EAAM,QAAQ,sBAAwB,KAGtCA,EAAM,QAAQ,uBAAyB,GACvCA,EAAM,QAAQ,sBAAwB,KAG9CA,EAAM,SAASA,EAAM,OAAO,EAC5BA,EAAM,SAAW,IAAIuH,EAAW,QAAQ,CACpC,UAAW,SACX,UAAW,MACf,CAAC,EACMvH,CACX,CAEA,OAAA8jB,EAAU,UAAU,mBAAqB,UAAY,CAGjD,IAAIC,EAAWC,EAAoB,KAAK,YAAY,EACpD,OAAO,IAAID,EAAS,IAAI,CAC5B,EACAD,EAAU,UAAU,kBAAoB,SAAUriB,EAAa,CAC3D,KAAK,QAAQ,aAAe,kBAAkB,KAAKA,EAAY,gBAAgB,EAC/E3B,EAAO,UAAU,kBAAkB,KAAK,KAAM2B,CAAW,CAC7D,EACAqiB,EAAU,UAAU,eAAiB,UAAY,CAC7C,IAAIG,EACAC,EACJ,KAAK,GAAG,SAAS,eAAe,EAAE,KAAK,KAAK,mBAAmB,CAAC,EAChE,KAAK,SAAS,OAAO,EACrBD,EAAqB,KAAK,SAAS,GAAG,SAAS,uBAAuB,EACtEC,EAAY9wB,EAAE,2BAA2B,EAAE,SAAS6wB,CAAkB,EACtE,KAAK,GAAG,KAAK,oBAAoB,EAAE,OAAOA,CAAkB,EAC5D,KAAK,QAAQ,gBAAkB,KAAK,GAAG,KAAK,oBAAoB,EAChE,KAAK,QAAQ,WAAWC,CAAS,CACrC,EACAJ,EAAU,UAAU,iBAAmB,UAAY,CAC/C,KAAK,QAAQ,cAAc,EAC3B,KAAK,SAAS,QAAQ,CAC1B,EAGAA,EAAU,UAAU,mBAAqB,UAAY,CACjD,IAAIxE,EAAQ,KAAK,SAAS,MAC1B,MAAO,iBACgBA,EAAM,SAAS,WAAW,EAAI,MAChD,KAAK,IAAI,cAAc,EACpB,2DAEsCA,EAAM,SAAS,cAAc,EAAI,6BAGvE,IACJ,yCAEgBA,EAAM,SAAS,eAAe,EAAI,8BAI1D,EAEAwE,EAAU,UAAU,oBAAsB,UAAY,CAClD,OAAI,KAAK,iBAAmB,KACjB,gBAAkB,KAAK,gBAAkB,MAE7C,EACX,EAEAA,EAAU,UAAU,aAAe,UAAY,CAC3C,IAAIK,EAAa,KAAK,IAAI,YAAY,EACtC,OAAOA,GAAc,OAAOA,GAAe,QAC/C,EAIAL,EAAU,UAAU,WAAa,SAAUtS,EAAaC,EAAQC,EAAU,CACtE,IAAIyS,EAAa,KAAK,IAAI,YAAY,EAClCC,GAAY,KAAK,QAAQ,gBAAgB,KAAK,SAAS,EACvDC,GACA9wB,EAGJ,GAAI,CAAC,KAAK,QAAQ,OAAQ,CACjBke,IACD4S,GAAiB,KAAK,sBAAsB7S,CAAW,EACvD,KAAK,SAAS,UAAU6S,EAAc,GAE1C,MACJ,CACAvkB,EAAO,UAAU,WAAW,KAAK,KAAM0R,EAAaC,EAAQC,CAAQ,EAChE,KAAK,QAAQ,wBAGb,KAAK,gBAAkB/P,EAAO,gBAAgB,KAAK,GAAG,KAAK,iBAAiB,CAAC,GAGjF,KAAK,SAAS,MAAM,EACpBA,EAAO,mBAAmByiB,EAAS,EACnC,KAAK,QAAQ,iBAAiB,EAE1BD,GAAc,OAAOA,GAAe,UACpC,KAAK,QAAQ,UAAUA,CAAU,EAIrCE,GAAiB,KAAK,sBAAsB7S,CAAW,EACvD,KAAK,cAAc6S,GAAgB5S,CAAM,EAErC0S,GAAc,OAAOA,GAAe,UACpC,KAAK,QAAQ,UAAUA,CAAU,EAEhC1S,IACD,KAAK,SAAS,UAAU4S,EAAc,EACtC9wB,EAAkB,KAAK,SAAS,mBAAmB,GAC/CA,EAAgB,MAAQA,EAAgB,SACxCoO,EAAO,iBAAiByiB,GAAW7wB,CAAe,EAElD8wB,GAAiB,KAAK,sBAAsB7S,CAAW,EACvD,KAAK,SAAS,UAAU6S,EAAc,GAG1C,KAAK,SAAS,aAAa9wB,CAAe,EAElD,EAEAuwB,EAAU,UAAU,sBAAwB,SAAUtS,EAAa,CAC/D,OAAOA,EACH7P,EAAO,sBAAsB,KAAK,GAAI,KAAK,SAAS,EAAE,CAC9D,EAEAmiB,EAAU,UAAU,cAAgB,SAAU/T,EAAQ0B,EAAQ,CACtDA,EACA9P,EAAO,mBAAmB,KAAK,QAAQ,MAAM,EAG7CA,EAAO,iBAAiB,KAAK,QAAQ,OAAQoO,EAAQ,EAAI,CAEjE,EAGA+T,EAAU,UAAU,yBAA2B,UAAY,CACvD,MAAO,CAAE,IAAK,CAAE,CACpB,EACAA,EAAU,UAAU,gBAAkB,UAAY,CAC9C,MAAO,CAAE,IAAK,KAAK,SAAS,aAAa,CAAE,CAC/C,EACAA,EAAU,UAAU,gBAAkB,SAAUnS,EAAQ,CAChDA,EAAO,MAAQ,QACf,KAAK,SAAS,aAAaA,EAAO,GAAG,CAE7C,EACOmS,CACX,EAAEjc,EAAO,OAAO,EAChB7V,EAAQ,QAAU8xB,EAClBA,EAAU,UAAU,0BAA4Bxa,EAAgC,QAChFwa,EAAU,UAAU,aAAe7a,EAAU,QAE7C,SAAS+a,EAAoBM,EAAY,CACrC,OAAsB,SAAUxkB,EAAQ,CACpCL,EAAQ,UAAUkO,EAAU7N,CAAM,EAClC,SAAS6N,GAAW,CAChB,IAAI3N,EAAQF,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,KAChE,OAAAE,EAAM,sBAAwB,GACvBA,CACX,CAEA,OAAA2N,EAAS,UAAU,oBAAsB,UAAY,CACjD,IAAI4C,EAAO,KAAK,KAChB,OAAI,KAAK,sBACE,6BAC4BA,EAAK,SAAS,MAAM,SAAS,cAAc,EAAI,KAAOA,EAAK,oBAAoB,EAAI,UAElH5O,EAAO,WAAW,KAAK,IAAI,iBAAiB,CAAC,EAC7C,eAGD,EACX,EAEAgM,EAAS,UAAU,sBAAwB,SAAUiR,EAAK,CACtD,IAAIrO,EAAO,KAAK,KACZgU,EAAY,KAAK,YAAY3F,EAAK,CAAC,EACvC,OAAI,KAAK,sBACE,8BAC6BrO,EAAK,oBAAoB,EAAI,IAC7DA,EAAK,oBACL,CAAE,KAAMgU,EAAW,KAAM,OAAQ,SAAU,KAAK,SAAW,CAAE,EAAGA,EAAU,OAAO,GAAG,CACpF,EACA,QAED,EACX,EAEA5W,EAAS,UAAU,kBAAoB,UAAY,CAC/C,IAAI4C,EAAO,KAAK,KAChB,OAAI,KAAK,sBACE,6BAA+BA,EAAK,SAAS,MAAM,SAAS,eAAe,EAAI,KAClFA,EAAK,oBAAoB,EAAI,SAE9B,EACX,EAGA5C,EAAS,UAAU,gBAAkB,UAAY,CAC7C,IAAI4C,EAAO,KAAK,KAChB,OAAI,KAAK,sBACE,8BAAgCA,EAAK,oBAAoB,EAAI,SAEjE,EACX,EACA5C,EAAS,UAAU,oBAAsB,UAAY,CACjD,OAAO1E,EAAU,QAAQ,UAAU,oBAAoB,MAAM,KAAM,SAAS,GAAK,KAAK,qBAC1F,EACO0E,CACX,EAAE2W,CAAU,CAChB,CAGM,EAEC,SAASryB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIyN,EAAUjN,EAAoB,CAAC,EAC/BwR,EAAiBxR,EAAoB,CAAC,EACtCqT,EAAyBrT,EAAoB,EAAE,EAC/CgyB,EAA+C,SAAU1kB,EAAQ,CACjEL,EAAQ,UAAU+kB,EAA+B1kB,CAAM,EACvD,SAAS0kB,GAAgC,CACrC,OAAO1kB,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC/D,CAEA,OAAA0kB,EAA8B,UAAU,iBAAmB,SAAUzI,EAAqB9K,EAAkBkK,EAAe,CACvH,IAAIC,EAAqBtb,EAAO,UAAU,iBAAiB,KAAK,KAAMic,EAAqB9K,EAAkBkK,CAAa,EACtH9hB,EAAQ,KAAK,cAAc+hB,EAAmB,QAASD,CAAa,EACpE7hB,EAAM,KAAK,cAAc8hB,EAAmB,MAAOD,CAAa,EAEpE,MAAI,iBAAiB,KAAKlK,CAAgB,IACtC5X,EAAM,QAAQ,MAAM,EAEhBC,EAAI,QAAQ,GACZA,EAAI,IAAI,EAAG,MAAM,EAAE,QAAQ,MAAM,GAGlC,IAAI0K,EAAe,QAAQ3K,EAAOC,CAAG,CAChD,EACOkrB,CACX,EAAE3e,EAAuB,OAAO,EAChC7T,EAAQ,QAAUwyB,CAGZ,EACE,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACC,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CAEF,SAASvyB,EAAQD,EAASQ,EAAqB,CAEtD,OAAO,eAAeR,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAIgS,EAAiBxR,EAAoB,CAAC,EACtCsT,EAAuBtT,EAAoB,EAAE,EAC7CoN,EAAmBpN,EAAoB,EAAE,EACzCgU,EAAgBhU,EAAoB,CAAC,EACrCmP,EAASnP,EAAoB,EAAE,EAC/BiyB,EAA6B,UAAY,CACzC,SAASA,EAAY3S,EAAc4S,EAAW,CAC1C,KAAK,aAAe5S,EACpB,KAAK,UAAY4S,CACrB,CACA,OAAAD,EAAY,UAAU,IAAM,SAAU/x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",
  "names": ["require_jquery", "__commonJSMin", "exports", "module", "global", "factory", "w", "window", "noGlobal", "arr", "getProto", "slice", "flat", "array", "push", "indexOf", "class2type", "toString", "hasOwn", "fnToString", "ObjectFunctionString", "support", "isFunction", "obj", "isWindow", "document", "preservedScriptAttributes", "DOMEval", "code", "node", "doc", "i", "val", "script", "toType", "version", "rhtmlSuffix", "jQuery", "selector", "context", "num", "elems", "ret", "callback", "elem", "_elem", "len", "j", "options", "name", "src", "copy", "copyIsArray", "clone", "target", "length", "deep", "msg", "proto", "Ctor", "isArrayLike", "nodeType", "results", "namespace", "docElem", "first", "second", "invert", "callbackInverse", "matches", "callbackExpect", "arg", "value", "_i", "type", "nodeName", "pop", "sort", "splice", "whitespace", "rtrimCSS", "a", "b", "bup", "rcssescape", "fcssescape", "ch", "asCodePoint", "sel", "preferredDoc", "pushNative", "Expr", "outermostContext", "sortInput", "hasDuplicate", "documentElement", "documentIsHTML", "rbuggyQSA", "expando", "dirruns", "done", "classCache", "createCache", "tokenCache", "compilerCache", "nonnativeSelectorCache", "sortOrder", "booleans", "identifier", "attributes", "pseudos", "rwhitespace", "rcomma", "rleadingCombinator", "rdescend", "rpseudo", "ridentifier", "matchExpr", "rinputs", "rheader", "rquickExpr", "rsibling", "runescape", "funescape", "escape", "nonHex", "high", "unloadHandler", "setDocument", "inDisabledFieldset", "addCombinator", "safeActiveElement", "els", "find", "seed", "m", "nid", "match", "groups", "newSelector", "newContext", "testContext", "tokenize", "toSelector", "select", "keys", "cache", "key", "markFunction", "fn", "assert", "el", "createInputPseudo", "createButtonPseudo", "createDisabledPseudo", "disabled", "createPositionalPseudo", "argument", "matchIndexes", "subWindow", "id", "attrId", "tag", "className", "input", "compare", "expr", "elements", "duplicates", "excess", "unquoted", "nodeNameSelector", "expectedNodeName", "pattern", "operator", "check", "result", "what", "_argument", "last", "simple", "forward", "ofType", "_context", "xml", "outerCache", "nodeIndex", "start", "dir", "parent", "useCache", "diff", "pseudo", "args", "idx", "matched", "matcher", "compile", "unmatched", "text", "lang", "elemLang", "hash", "attr", "_matchIndexes", "setFilters", "parseOnly", "tokens", "soFar", "preFilters", "cached", "combinator", "base", "skip", "checkNonElements", "doneName", "oldCache", "newCache", "elementMatcher", "matchers", "multipleContexts", "contexts", "condense", "map", "filter", "newUnmatched", "mapped", "setMatcher", "preFilter", "postFilter", "postFinder", "postSelector", "temp", "matcherOut", "preMap", "postMap", "preexisting", "matcherIn", "matcherFromTokens", "checkContext", "leadingRelative", "implicitRelative", "matchContext", "matchAnyContext", "matcherFromGroupMatchers", "elementMatchers", "setMatchers", "bySet", "byElement", "superMatcher", "outermost", "matchedCount", "setMatched", "contextBackup", "dirrunsUnique", "token", "compiled", "until", "truncate", "siblings", "n", "rneedsContext", "rsingleTag", "winnow", "qualifier", "not", "self", "rootjQuery", "init", "root", "rparentsprev", "guaranteedUnique", "targets", "l", "selectors", "cur", "sibling", "rnothtmlwhite", "createOptions", "object", "_", "flag", "firing", "memory", "fired", "locked", "list", "queue", "firingIndex", "fire", "add", "index", "Identity", "v", "Thrower", "ex", "adoptValue", "resolve", "reject", "noValue", "method", "func", "tuples", "state", "promise", "deferred", "fns", "newDefer", "tuple", "returned", "onFulfilled", "onRejected", "onProgress", "maxDepth", "depth", "handler", "special", "that", "mightThrow", "then", "process", "e", "stateString", "singleValue", "remaining", "resolveContexts", "resolveValues", "primary", "updateFunc", "rerrorNames", "error", "asyncError", "readyList", "wait", "completed", "access", "chainable", "emptyGet", "raw", "bulk", "_key", "rmsPrefix", "rdashAlpha", "fcamelCase", "_all", "letter", "camelCase", "string", "acceptData", "owner", "Data", "data", "prop", "dataPriv", "dataUser", "rbrace", "rmultiDash", "getData", "dataAttr", "attrs", "startLength", "hooks", "next", "setter", "tmp", "count", "defer", "pnum", "rcssNum", "cssExpand", "isAttached", "composed", "isHiddenWithinTree", "adjustCSS", "valueParts", "tween", "adjusted", "scale", "maxIterations", "currentValue", "initial", "unit", "initialInUnit", "defaultDisplayMap", "getDefaultDisplay", "display", "showHide", "show", "values", "rcheckableType", "rtagName", "rscriptType", "fragment", "div", "wrapMap", "getAll", "setGlobalEval", "refElements", "rhtml", "buildFragment", "scripts", "selection", "ignored", "wrap", "attached", "nodes", "rtypenamespace", "returnTrue", "returnFalse", "on", "types", "one", "origFn", "event", "handleObjIn", "eventHandle", "events", "t", "handleObj", "handlers", "namespaces", "origType", "elemData", "mappedTypes", "origCount", "nativeEvent", "handlerQueue", "matchedHandlers", "matchedSelectors", "delegateCount", "hook", "originalEvent", "leverageNative", "isSetup", "saved", "handle", "props", "delegateType", "focusMappedHandler", "attaches", "dataHolder", "orig", "fix", "related", "rnoInnerhtml", "rchecked", "rcleanScript", "manipulationTarget", "content", "disableScript", "restoreScript", "cloneCopyEvent", "dest", "pdataOld", "udataOld", "udataCur", "fixInput", "domManip", "collection", "hasScripts", "iNoClone", "valueIsFunction", "remove", "keepData", "html", "dataAndEvents", "deepDataAndEvents", "srcElements", "destElements", "inPage", "original", "insert", "rnumnonpx", "rcustomProp", "getStyles", "view", "swap", "old", "rboxStyle", "computeStyleTests", "container", "divStyle", "pixelPositionVal", "reliableMarginLeftVal", "roundPixelMeasures", "pixelBoxStylesVal", "boxSizingReliableVal", "scrollboxSizeVal", "measure", "reliableTrDimensionsVal", "table", "tr", "trChild", "trStyle", "curCSS", "computed", "width", "minWidth", "maxWidth", "isCustomProp", "style", "addGetHookIf", "conditionFn", "hookFn", "cssPrefixes", "emptyStyle", "vendorProps", "vendorPropName", "capName", "finalPropName", "final", "rdisplayswap", "cssShow", "cssNormalTransform", "setPositiveNumber", "subtract", "boxModelAdjustment", "dimension", "box", "isBorderBox", "styles", "computedVal", "extra", "delta", "marginDelta", "getWidthOrHeight", "boxSizingNeeded", "valueIsBorderBox", "offsetProp", "origName", "scrollboxSizeBuggy", "prefix", "suffix", "expanded", "parts", "Tween", "end", "easing", "percent", "eased", "p", "fxNow", "inProgress", "rfxtypes", "rrun", "schedule", "createFxNow", "genFx", "includeWidth", "which", "createTween", "animation", "Animation", "defaultPrefilter", "opts", "toggle", "oldfire", "propTween", "restoreDisplay", "isBox", "anim", "hidden", "dataShow", "propFilter", "specialEasing", "properties", "stopped", "tick", "currentTime", "gotoEnd", "prepend", "speed", "opt", "to", "empty", "optall", "doAnimation", "clearQueue", "stopQueue", "stop", "dequeue", "timers", "cssFn", "timer", "time", "timeout", "boolHook", "attrHandle", "nType", "attrNames", "getter", "isXML", "lowercaseName", "rfocusable", "rclickable", "tabindex", "stripAndCollapse", "getClass", "classesToArray", "classNames", "curValue", "finalValue", "stateVal", "isValidValue", "rreturn", "option", "max", "optionSet", "location", "nonce", "rquery", "parserErrorElem", "rfocusMorph", "stopPropagationCallback", "onlyHandlers", "bubbleType", "ontype", "lastElement", "eventPath", "rbracket", "rCRLF", "rsubmitterTypes", "rsubmittable", "buildParams", "traditional", "s", "valueOrFunction", "r20", "rhash", "rantiCache", "rheaders", "rlocalProtocol", "rnoContent", "rprotocol", "prefilters", "transports", "allTypes", "originAnchor", "addToPrefiltersOrTransports", "structure", "dataTypeExpression", "dataType", "dataTypes", "inspectPrefiltersOrTransports", "originalOptions", "jqXHR", "inspected", "seekingTransport", "inspect", "selected", "prefilterOrFactory", "dataTypeOrTransport", "ajaxExtend", "flatOptions", "ajaxHandleResponses", "responses", "ct", "finalDataType", "firstDataType", "contents", "ajaxConvert", "response", "isSuccess", "conv2", "current", "conv", "prev", "converters", "settings", "url", "transport", "cacheURL", "responseHeadersString", "responseHeaders", "timeoutTimer", "urlAnchor", "fireGlobals", "uncached", "callbackContext", "globalEventContext", "completeDeferred", "statusCode", "requestHeaders", "requestHeadersNames", "strAbort", "statusText", "finalText", "status", "nativeStatusText", "headers", "success", "modified", "htmlIsFunction", "xhrSuccessStatus", "xhrSupported", "errorCallback", "complete", "xhr", "evt", "oldCallbacks", "rjsonp", "originalSettings", "callbackName", "overwritten", "responseContainer", "jsonProp", "body", "keepScripts", "parsed", "params", "off", "responseText", "curPosition", "curLeft", "curCSSTop", "curTop", "curOffset", "curCSSLeft", "calculatePosition", "position", "curElem", "rect", "win", "offsetParent", "offset", "parentOffset", "top", "defaultExtra", "funcName", "margin", "fnOver", "fnOut", "rtrim", "proxy", "hold", "_jQuery", "_$", "isBrowser", "window", "document", "navigator", "timeoutDuration", "longerTimeoutBrowsers", "i", "length", "userAgent", "indexOf", "microtaskDebounce", "fn", "called", "Promise", "resolve", "then", "taskDebounce", "scheduled", "supportsMicroTasks", "debounce", "isFunction", "functionToCheck", "getType", "toString", "call", "getStyleComputedProperty", "element", "property", "nodeType", "ownerDocument", "defaultView", "css", "getComputedStyle", "getParentNode", "nodeName", "parentNode", "host", "getScrollParent", "body", "overflow", "_getStyleComputedProp", "overflowX", "overflowY", "test", "getReferenceNode", "reference", "referenceNode", "isIE11", "MSInputMethodContext", "documentMode", "isIE10", "isIE", "version", "getOffsetParent", "documentElement", "noOffsetParent", "offsetParent", "nextElementSibling", "isOffsetContainer", "firstElementChild", "getRoot", "node", "findCommonOffsetParent", "element1", "element2", "order", "compareDocumentPosition", "Node", "DOCUMENT_POSITION_FOLLOWING", "start", "end", "range", "createRange", "setStart", "setEnd", "commonAncestorContainer", "contains", "element1root", "getScroll", "side", "upperSide", "html", "scrollingElement", "includeScroll", "rect", "subtract", "scrollTop", "scrollLeft", "modifier", "top", "bottom", "left", "right", "getBordersSize", "styles", "axis", "sideA", "sideB", "parseFloat", "getSize", "computedStyle", "Math", "max", "parseInt", "getWindowSizes", "getClientRect", "offsets", "width", "height", "getBoundingClientRect", "result", "sizes", "clientWidth", "clientHeight", "horizScrollbar", "offsetWidth", "vertScrollbar", "offsetHeight", "getOffsetRectRelativeToArbitraryNode", "children", "parent", "fixedPosition", "runIsIE", "isHTML", "childrenRect", "parentRect", "scrollParent", "borderTopWidth", "borderLeftWidth", "marginTop", "marginLeft", "getViewportOffsetRectRelativeToArtbitraryNode", "excludeScroll", "relativeOffset", "innerWidth", "innerHeight", "offset", "isFixed", "getFixedPositionOffsetParent", "parentElement", "el", "getBoundaries", "popper", "padding", "boundariesElement", "boundaries", "boundariesNode", "_getWindowSizes", "isPaddingNumber", "getArea", "_ref", "computeAutoPlacement", "placement", "refRect", "rects", "sortedAreas", "Object", "keys", "map", "key", "sort", "a", "b", "area", "filteredAreas", "filter", "_ref2", "computedPlacement", "variation", "split", "getReferenceOffsets", "state", "commonOffsetParent", "getOuterSizes", "x", "marginBottom", "y", "marginRight", "getOppositePlacement", "hash", "replace", "matched", "getPopperOffsets", "referenceOffsets", "popperRect", "popperOffsets", "isHoriz", "mainSide", "secondarySide", "measurement", "secondaryMeasurement", "find", "arr", "check", "Array", "prototype", "findIndex", "prop", "value", "cur", "match", "obj", "runModifiers", "modifiers", "data", "ends", "modifiersToRun", "undefined", "slice", "forEach", "warn", "enabled", "update", "isDestroyed", "options", "positionFixed", "flip", "originalPlacement", "position", "isCreated", "onUpdate", "onCreate", "isModifierEnabled", "modifierName", "some", "name", "getSupportedPropertyName", "prefixes", "upperProp", "charAt", "toUpperCase", "prefix", "toCheck", "style", "destroy", "removeAttribute", "willChange", "disableEventListeners", "removeOnDestroy", "removeChild", "getWindow", "attachToScrollParents", "event", "callback", "scrollParents", "isBody", "target", "addEventListener", "passive", "push", "setupEventListeners", "updateBound", "scrollElement", "eventsEnabled", "enableEventListeners", "scheduleUpdate", "removeEventListeners", "removeEventListener", "isNumeric", "n", "isNaN", "isFinite", "setStyles", "unit", "setAttributes", "attributes", "setAttribute", "applyStyle", "instance", "arrowElement", "arrowStyles", "applyStyleOnLoad", "modifierOptions", "getRoundedOffsets", "shouldRound", "_data$offsets", "round", "floor", "noRound", "v", "referenceWidth", "popperWidth", "isVertical", "isVariation", "sameWidthParity", "bothOddWidth", "horizontalToInteger", "verticalToInteger", "isFirefox", "computeStyle", "legacyGpuAccelerationOption", "gpuAcceleration", "offsetParentRect", "devicePixelRatio", "prefixedProperty", "invertTop", "invertLeft", "_extends", "arrow", "isModifierRequired", "requestingName", "requestedName", "requesting", "isRequired", "requested", "querySelector", "len", "sideCapitalized", "toLowerCase", "altSide", "opSide", "arrowElementSize", "center", "popperMarginSide", "popperBorderSide", "sideValue", "min", "_data$offsets$arrow", "defineProperty", "getOppositeVariation", "placements", "validPlacements", "clockwise", "counter", "index", "concat", "reverse", "BEHAVIORS", "flipped", "placementOpposite", "flipOrder", "behavior", "FLIP", "CLOCKWISE", "COUNTERCLOCKWISE", "step", "refOffsets", "overlapsRef", "overflowsLeft", "overflowsRight", "overflowsTop", "overflowsBottom", "overflowsBoundaries", "flippedVariationByRef", "flipVariations", "flippedVariationByContent", "flipVariationsByContent", "flippedVariation", "keepTogether", "toValue", "str", "size", "parseOffset", "basePlacement", "useHeight", "fragments", "frag", "trim", "divider", "search", "splitRegex", "ops", "op", "mergeWithPrevious", "reduce", "index2", "preventOverflow", "transformProp", "popperStyles", "transform", "priority", "escapeWithReference", "shift", "shiftvariation", "shiftOffsets", "hide", "bound", "inner", "subtractLength", "Defaults", "Popper", "requestAnimationFrame", "_this", "bind", "jquery", "onLoad", "Utils", "global", "PopperUtils", "TRANSITION_END", "MAX_UID", "MILLISECONDS_MULTIPLIER", "toType", "obj", "toString", "call", "match", "toLowerCase", "getSpecialTransitionEndEvent", "bindType", "delegateType", "handle", "event", "$", "target", "is", "handleObj", "handler", "apply", "arguments", "transitionEndEmulator", "duration", "_this", "called", "one", "Util", "setTimeout", "triggerTransitionEnd", "setTransitionEndSupport", "fn", "emulateTransitionEnd", "special", "getUID", "prefix", "Math", "random", "document", "getElementById", "getSelectorFromElement", "element", "selector", "getAttribute", "hrefAttr", "trim", "querySelector", "getTransitionDurationFromElement", "transitionDuration", "css", "transitionDelay", "floatTransitionDuration", "parseFloat", "floatTransitionDelay", "split", "reflow", "offsetHeight", "trigger", "supportsTransitionEnd", "Boolean", "isElement", "nodeType", "typeCheckConfig", "componentName", "config", "configTypes", "property", "Object", "prototype", "hasOwnProperty", "expectedTypes", "value", "valueType", "RegExp", "test", "Error", "toUpperCase", "findShadowRoot", "documentElement", "attachShadow", "getRootNode", "root", "ShadowRoot", "parentNode", "jQueryDetection", "TypeError", "version", "jquery", "minMajor", "ltMajor", "minMinor", "minPatch", "maxMajor", "NAME", "VERSION", "DATA_KEY", "EVENT_KEY", "DATA_API_KEY", "JQUERY_NO_CONFLICT", "CLASS_NAME_ALERT", "CLASS_NAME_FADE", "CLASS_NAME_SHOW", "EVENT_CLOSE", "EVENT_CLOSED", "EVENT_CLICK_DATA_API", "SELECTOR_DISMISS", "Alert", "_element", "close", "rootElement", "_getRootElement", "customEvent", "_triggerCloseEvent", "isDefaultPrevented", "_removeElement", "dispose", "removeData", "parent", "closest", "closeEvent", "Event", "removeClass", "hasClass", "_destroyElement", "detach", "remove", "_jQueryInterface", "each", "$element", "data", "_handleDismiss", "alertInstance", "preventDefault", "on", "Constructor", "noConflict", "CLASS_NAME_ACTIVE", "CLASS_NAME_BUTTON", "CLASS_NAME_FOCUS", "EVENT_FOCUS_BLUR_DATA_API", "EVENT_LOAD_DATA_API", "SELECTOR_DATA_TOGGLE_CARROT", "SELECTOR_DATA_TOGGLES", "SELECTOR_DATA_TOGGLE", "SELECTOR_DATA_TOGGLES_BUTTONS", "SELECTOR_INPUT", "SELECTOR_ACTIVE", "SELECTOR_BUTTON", "Button", "shouldAvoidTriggerChange", "toggle", "triggerChangeEvent", "addAriaPressed", "input", "type", "checked", "classList", "contains", "activeElement", "focus", "hasAttribute", "setAttribute", "toggleClass", "avoidTriggerChange", "button", "initialButton", "inputBtn", "tagName", "window", "buttons", "slice", "querySelectorAll", "i", "len", "length", "add", "ARROW_LEFT_KEYCODE", "ARROW_RIGHT_KEYCODE", "TOUCHEVENT_COMPAT_WAIT", "SWIPE_THRESHOLD", "CLASS_NAME_CAROUSEL", "CLASS_NAME_SLIDE", "CLASS_NAME_RIGHT", "CLASS_NAME_LEFT", "CLASS_NAME_NEXT", "CLASS_NAME_PREV", "CLASS_NAME_POINTER_EVENT", "DIRECTION_NEXT", "DIRECTION_PREV", "DIRECTION_LEFT", "DIRECTION_RIGHT", "EVENT_SLIDE", "EVENT_SLID", "EVENT_KEYDOWN", "EVENT_MOUSEENTER", "EVENT_MOUSELEAVE", "EVENT_TOUCHSTART", "EVENT_TOUCHMOVE", "EVENT_TOUCHEND", "EVENT_POINTERDOWN", "EVENT_POINTERUP", "EVENT_DRAG_START", "SELECTOR_ACTIVE_ITEM", "SELECTOR_ITEM", "SELECTOR_ITEM_IMG", "SELECTOR_NEXT_PREV", "SELECTOR_INDICATORS", "SELECTOR_DATA_SLIDE", "SELECTOR_DATA_RIDE", "Default", "interval", "keyboard", "slide", "pause", "wrap", "touch", "DefaultType", "PointerType", "TOUCH", "PEN", "Carousel", "_items", "_interval", "_activeElement", "_isPaused", "_isSliding", "touchTimeout", "touchStartX", "touchDeltaX", "_config", "_getConfig", "_indicatorsElement", "_touchSupported", "navigator", "maxTouchPoints", "_pointerEvent", "PointerEvent", "MSPointerEvent", "_addEventListeners", "next", "_slide", "nextWhenVisible", "hidden", "prev", "cycle", "clearInterval", "_updateInterval", "setInterval", "visibilityState", "bind", "to", "index", "activeIndex", "_getItemIndex", "direction", "off", "_handleSwipe", "absDeltax", "abs", "_this2", "_keydown", "_addTouchEventListeners", "_this3", "start", "originalEvent", "pointerType", "clientX", "touches", "move", "end", "clearTimeout", "e", "which", "indexOf", "_getItemByDirection", "isNextDirection", "isPrevDirection", "lastItemIndex", "isGoingToWrap", "delta", "itemIndex", "_triggerSlideEvent", "relatedTarget", "eventDirectionName", "targetIndex", "fromIndex", "slideEvent", "from", "_setActiveIndicatorElement", "indicators", "nextIndicator", "children", "addClass", "elementInterval", "parseInt", "defaultInterval", "_this4", "activeElementIndex", "nextElement", "nextElementIndex", "isCycling", "directionalClassName", "orderClassName", "slidEvent", "action", "ride", "_dataApiClickHandler", "slideIndex", "carousels", "$carousel", "CLASS_NAME_COLLAPSE", "CLASS_NAME_COLLAPSING", "CLASS_NAME_COLLAPSED", "DIMENSION_WIDTH", "DIMENSION_HEIGHT", "EVENT_SHOW", "EVENT_SHOWN", "EVENT_HIDE", "EVENT_HIDDEN", "SELECTOR_ACTIVES", "Collapse", "_isTransitioning", "_triggerArray", "id", "toggleList", "elem", "filterElement", "filter", "foundElem", "_selector", "push", "_parent", "_getParent", "_addAriaAndCollapsedClass", "hide", "show", "actives", "activesData", "not", "startEvent", "dimension", "_getDimension", "style", "attr", "setTransitioning", "complete", "capitalizedDimension", "scrollSize", "getBoundingClientRect", "triggerArrayLength", "$elem", "isTransitioning", "hasWidth", "_getTargetFromElement", "triggerArray", "isOpen", "currentTarget", "$trigger", "selectors", "$target", "ESCAPE_KEYCODE", "SPACE_KEYCODE", "TAB_KEYCODE", "ARROW_UP_KEYCODE", "ARROW_DOWN_KEYCODE", "RIGHT_MOUSE_BUTTON_WHICH", "REGEXP_KEYDOWN", "CLASS_NAME_DISABLED", "CLASS_NAME_DROPUP", "CLASS_NAME_DROPRIGHT", "CLASS_NAME_DROPLEFT", "CLASS_NAME_MENURIGHT", "CLASS_NAME_POSITION_STATIC", "EVENT_CLICK", "EVENT_KEYDOWN_DATA_API", "EVENT_KEYUP_DATA_API", "SELECTOR_FORM_CHILD", "SELECTOR_MENU", "SELECTOR_NAVBAR_NAV", "SELECTOR_VISIBLE_ITEMS", "PLACEMENT_TOP", "PLACEMENT_TOPEND", "PLACEMENT_BOTTOM", "PLACEMENT_BOTTOMEND", "PLACEMENT_RIGHT", "PLACEMENT_LEFT", "offset", "flip", "boundary", "reference", "display", "popperConfig", "Dropdown", "_popper", "_menu", "_getMenuElement", "_inNavbar", "_detectNavbar", "disabled", "isActive", "_clearMenus", "usePopper", "showEvent", "_getParentFromElement", "Popper", "referenceElement", "_getPopperConfig", "body", "noop", "hideEvent", "destroy", "update", "scheduleUpdate", "stopPropagation", "_extends", "constructor", "_getPlacement", "$parentDropdown", "placement", "_getOffset", "offsets", "modifiers", "enabled", "preventOverflow", "boundariesElement", "applyStyle", "toggles", "context", "clickEvent", "dropdownMenu", "_dataApiKeydownHandler", "items", "item", "CLASS_NAME_SCROLLABLE", "CLASS_NAME_SCROLLBAR_MEASURER", "CLASS_NAME_BACKDROP", "CLASS_NAME_OPEN", "CLASS_NAME_STATIC", "EVENT_HIDE_PREVENTED", "EVENT_FOCUSIN", "EVENT_RESIZE", "EVENT_CLICK_DISMISS", "EVENT_KEYDOWN_DISMISS", "EVENT_MOUSEUP_DISMISS", "EVENT_MOUSEDOWN_DISMISS", "SELECTOR_DIALOG", "SELECTOR_MODAL_BODY", "SELECTOR_DATA_DISMISS", "SELECTOR_FIXED_CONTENT", "SELECTOR_STICKY_CONTENT", "backdrop", "Modal", "_dialog", "_backdrop", "_isShown", "_isBodyOverflowing", "_ignoreBackdropClick", "_scrollbarWidth", "_checkScrollbar", "_setScrollbar", "_adjustDialog", "_setEscapeEvent", "_setResizeEvent", "_showBackdrop", "_showElement", "transition", "_hideModal", "forEach", "htmlElement", "handleUpdate", "_triggerBackdropTransition", "hideEventPrevented", "isModalOverflowing", "scrollHeight", "clientHeight", "overflowY", "modalTransitionDuration", "modalBody", "Node", "ELEMENT_NODE", "appendChild", "removeAttribute", "scrollTop", "_enforceFocus", "shownEvent", "transitionComplete", "_this5", "has", "_this6", "_this7", "_this8", "_resetAdjustments", "_resetScrollbar", "_removeBackdrop", "callback", "_this9", "animate", "createElement", "className", "appendTo", "backdropTransitionDuration", "callbackRemove", "paddingLeft", "paddingRight", "rect", "round", "left", "right", "innerWidth", "_getScrollbarWidth", "_this10", "fixedContent", "stickyContent", "actualPadding", "calculatedPadding", "actualMargin", "marginRight", "calculatedMargin", "padding", "elements", "margin", "scrollDiv", "scrollbarWidth", "width", "clientWidth", "removeChild", "_this11", "uriAttrs", "ARIA_ATTRIBUTE_PATTERN", "DefaultWhitelist", "a", "area", "b", "br", "col", "code", "div", "em", "hr", "h1", "h2", "h3", "h4", "h5", "h6", "img", "li", "ol", "p", "pre", "s", "small", "span", "sub", "sup", "strong", "u", "ul", "SAFE_URL_PATTERN", "DATA_URL_PATTERN", "allowedAttribute", "allowedAttributeList", "attrName", "nodeName", "nodeValue", "regExp", "attrRegex", "sanitizeHtml", "unsafeHtml", "whiteList", "sanitizeFn", "domParser", "DOMParser", "createdDocument", "parseFromString", "whitelistKeys", "keys", "el", "elName", "attributeList", "attributes", "whitelistedAttributes", "concat", "innerHTML", "CLASS_PREFIX", "BSCLS_PREFIX_REGEX", "DISALLOWED_ATTRIBUTES", "HOVER_STATE_SHOW", "HOVER_STATE_OUT", "SELECTOR_TOOLTIP_INNER", "SELECTOR_ARROW", "TRIGGER_HOVER", "TRIGGER_FOCUS", "TRIGGER_CLICK", "TRIGGER_MANUAL", "AttachmentMap", "AUTO", "TOP", "RIGHT", "BOTTOM", "LEFT", "animation", "template", "title", "delay", "html", "container", "fallbackPlacement", "customClass", "sanitize", "HIDE", "HIDDEN", "SHOW", "SHOWN", "INSERTED", "CLICK", "FOCUSIN", "FOCUSOUT", "MOUSEENTER", "MOUSELEAVE", "Tooltip", "_isEnabled", "_timeout", "_hoverState", "_activeTrigger", "tip", "_setListeners", "enable", "disable", "toggleEnabled", "dataKey", "_getDelegateConfig", "click", "_isWithActiveTrigger", "_enter", "_leave", "getTipElement", "_hideModalHandler", "isWithContent", "shadowRoot", "isInTheDom", "ownerDocument", "tipId", "setContent", "attachment", "_getAttachment", "addAttachmentClass", "_getContainer", "_fixTransition", "prevHoverState", "_cleanTipClass", "getTitle", "setElementContent", "content", "empty", "append", "text", "defaultBsConfig", "behavior", "arrow", "onCreate", "originalPlacement", "_handlePopperPlacementChange", "onUpdate", "find", "triggers", "eventIn", "eventOut", "_fixTitle", "titleType", "dataAttributes", "dataAttr", "key", "$tip", "tabClass", "join", "popperData", "instance", "popper", "initConfigAnimation", "SELECTOR_TITLE", "SELECTOR_CONTENT", "Popover", "_getContent", "CLASS_NAME_DROPDOWN_ITEM", "EVENT_ACTIVATE", "EVENT_SCROLL", "METHOD_OFFSET", "METHOD_POSITION", "SELECTOR_DATA_SPY", "SELECTOR_NAV_LIST_GROUP", "SELECTOR_NAV_LINKS", "SELECTOR_NAV_ITEMS", "SELECTOR_LIST_ITEMS", "SELECTOR_DROPDOWN", "SELECTOR_DROPDOWN_ITEMS", "SELECTOR_DROPDOWN_TOGGLE", "method", "ScrollSpy", "_scrollElement", "_offsets", "_targets", "_activeTarget", "_scrollHeight", "_process", "refresh", "autoMethod", "offsetMethod", "offsetBase", "_getScrollTop", "_getScrollHeight", "targets", "map", "targetSelector", "targetBCR", "height", "top", "sort", "pageYOffset", "max", "_getOffsetHeight", "innerHeight", "maxScroll", "_activate", "_clear", "isActiveTarget", "queries", "$link", "parents", "node", "scrollSpys", "scrollSpysLength", "$spy", "CLASS_NAME_DROPDOWN_MENU", "SELECTOR_ACTIVE_UL", "SELECTOR_DROPDOWN_ACTIVE_CHILD", "Tab", "previous", "listElement", "itemSelector", "makeArray", "hiddenEvent", "activeElements", "active", "_transitionComplete", "dropdownChild", "dropdownElement", "dropdownToggleList", "$this", "CLASS_NAME_HIDE", "CLASS_NAME_SHOWING", "autohide", "Toast", "_clearTimeout", "_close", "require_rails_ujs", "__commonJSMin", "exports", "module", "context", "Rails", "nonce", "ref", "expando", "m", "element", "selector", "key", "value", "$", "csrfParam", "csrfToken", "meta", "xhr", "token", "param", "input", "CustomEvent", "fire", "matches", "preventDefault", "event", "params", "evt", "result", "obj", "name", "data", "e", "eventType", "handler", "target", "AcceptHeaders", "CSRFProtection", "createXHR", "cspNonce", "prepareOptions", "processResponse", "options", "response", "done", "type", "parser", "script", "url", "originAnchor", "urlAnchor", "error", "toArray", "additionalParam", "inputs", "option", "form", "el", "allowAction", "stopEverything", "answer", "callback", "message", "disableFormElement", "disableFormElements", "disableLinkElement", "enableFormElement", "enableFormElements", "enableLinkElement", "formElements", "getData", "setData", "replacement", "originalText", "formContent", "href", "link", "method", "ajax", "isCrossDomain", "isRemote", "serializeElement", "slice", "button", "dataType", "withCredentials", "args", "insignificantMetaClick", "metaClick", "nonPrimaryMouseClick", "delegate", "disableElement", "enableElement", "formSubmitButtonClick", "handleConfirm", "handleDisabledElement", "handleMethod", "handleRemote", "loadCSPNonce", "preventInsignificantClick", "refreshCSRFTokens", "originalOptions", "require_tinymce", "__commonJSMin", "exports", "module", "domGlobals", "noop", "compose", "fa", "fb", "args", "_i", "constant", "value", "identity", "x", "curry", "fn", "initialArgs", "restArgs", "all", "not", "f", "die", "msg", "never", "always", "none", "NONE", "eq", "o", "call", "thunk", "id", "n", "me", "s", "some", "a", "constant_a", "self", "bind", "v", "elementEq", "b", "from", "Option", "typeOf", "isType", "type", "isString", "isObject", "isArray", "isNull", "isBoolean", "isFunction", "isNumber", "nativeSlice", "nativeIndexOf", "nativePush", "rawIndexOf", "ts", "indexOf", "xs", "r", "contains", "exists", "pred", "i", "len", "map", "each", "eachr", "partition", "pass", "fail", "arr", "filter", "foldr", "acc", "foldl", "find", "findIndex", "flatten", "output", "forall", "reverse", "difference", "a1", "a2", "mapToObject", "sort", "comparator", "copy", "head", "last", "from$1", "Global", "path", "parts", "scope", "resolve", "p", "unsafe", "name", "getOrDie", "actual", "Global$1", "url", "createObjectURL", "blob", "revokeObjectURL", "u", "URL", "nav", "userAgent", "opera", "webkit", "ie", "ie11", "ie12", "gecko", "mac", "iDevice", "android", "fileApi", "phone", "tablet", "windowsPhone", "matchMediaQuery", "query", "contentEditable", "Env", "promise", "thisArg", "Promise", "doResolve", "reject", "asap", "handle", "deferred", "cb", "ret", "e", "newValue", "then", "finale", "Handler", "onFulfilled", "onRejected", "done", "reason", "ex", "remaining", "res", "val", "values", "promiseObj", "requestAnimationFramePromise", "requestAnimationFrame", "callback", "element", "requestAnimationFrameFunc", "vendors", "featurefill", "wrappedSetTimeout", "time", "wrappedSetInterval", "wrappedClearTimeout", "wrappedClearInterval", "debounce", "timer", "func", "Delay", "editor", "eventExpandoPrefix", "mouseEventRe", "deprecated", "hasIsDefaultPrevented", "event", "returnTrue", "returnFalse", "addEvent", "target", "capture", "removeEvent", "getTargetFromShadowDom", "defaultTarget", "composedPath", "fix", "originalEvent", "data", "eventDoc", "doc", "body", "bindOnReady", "win", "eventUtils", "isDocReady", "readyHandler", "waitForDomLoaded", "tryScroll", "EventUtils", "events", "count", "expando", "hasFocusIn", "hasMouseEnterLeave", "mouseEnterLeave", "executeHandlers", "evt", "callbackList", "l", "container", "names", "fakeName", "nativeHandler", "defaultNativeHandler", "current", "related", "ci", "eventMap", "children", "unbind", "support", "Expr", "getText", "isXML", "tokenize", "compile", "select", "outermostContext", "sortInput", "hasDuplicate", "setDocument", "document", "docElem", "documentIsHTML", "rbuggyQSA", "rbuggyMatches", "matches", "contains$1", "preferredDoc", "dirruns", "classCache", "createCache", "tokenCache", "compilerCache", "sortOrder", "strundefined", "MAX_NEGATIVE", "hasOwn", "pop", "push_native", "push", "slice", "indexOf$1", "elem", "booleans", "whitespace", "identifier", "attributes", "pseudos", "rtrim", "rcomma", "rcombinators", "rattributeQuotes", "rpseudo", "ridentifier", "matchExpr", "rinputs", "rheader", "rnative", "rquickExpr", "rsibling", "rescape", "runescape", "funescape", "_", "escaped", "escapedWhitespace", "high", "els", "j", "Sizzle", "selector", "context", "results", "seed", "match", "nodeType", "groups", "old", "nid", "newContext", "newSelector", "toSelector", "testContext", "keys", "cache", "key", "markFunction", "siblingCheck", "cur", "diff", "createInputPseudo", "createButtonPseudo", "createPositionalPseudo", "argument", "matchIndexes", "documentElement", "node", "hasCompare", "parent", "getTop", "m", "attrId", "tag", "tmp", "className", "adown", "bup", "compare", "aup", "ap", "bp", "expr", "elements", "duplicates", "excess", "unquoted", "nodeNameSelector", "nodeName", "pattern", "operator", "check", "result", "what", "first", "simple", "forward", "ofType", "xml", "outerCache", "nodeIndex", "start", "dir", "useCache", "pseudo", "idx", "matched", "input", "matcher", "unmatched", "text", "lang", "elemLang", "hash", "attr", "length", "setFilters", "parseOnly", "tokens", "soFar", "preFilters", "cached", "addCombinator", "combinator", "base", "checkNonElements", "doneName", "oldCache", "newCache", "elementMatcher", "matchers", "multipleContexts", "contexts", "condense", "newUnmatched", "mapped", "setMatcher", "preFilter", "postFilter", "postFinder", "postSelector", "temp", "preMap", "postMap", "preexisting", "elems", "matcherIn", "matcherOut", "matcherFromTokens", "checkContext", "leadingRelative", "implicitRelative", "matchContext", "matchAnyContext", "matcherFromGroupMatchers", "elementMatchers", "setMatchers", "bySet", "byElement", "superMatcher", "outermost", "matchedCount", "setMatched", "contextBackup", "dirrunsUnique", "token", "compiled", "isArray$1", "toArray", "obj", "array", "each$1", "map$1", "out", "item", "index", "filter$1", "indexOf$2", "reduce", "collection", "iteratee", "accumulator", "findIndex$1", "predicate", "find$1", "last$1", "ArrUtils", "whiteSpaceRegExp", "trim", "str", "is", "makeMap", "items", "delim", "hasOwnProperty", "prop", "create", "root", "sp", "ns", "cn", "scn", "c", "de", "extend", "ext", "walk", "createNS", "resolve$1", "explode", "d", "_addCacheSuffix", "cacheSuffix", "Tools", "push$1", "slice$1", "rquickExpr$1", "Event", "skipUniques", "isDefined", "isString$1", "isWindow", "createFragment", "html", "fragDoc", "frag", "domManipulate", "targetNodes", "sourceItem", "getElementDocument", "DomQuery", "hasClass", "wrap", "wrapper", "lastParent", "newWrapper", "numericCssMap", "booleanMap", "propFix", "cssFix", "attrHooks", "cssHooks", "inArray", "whiteSpaceRegExp$1", "trim$1", "each$2", "grep", "nodes", "hook", "elm", "camel", "dashed", "style", "content", "state", "existingClassName", "classState", "offset", "docElm", "y", "pos", "object", "el", "until", "sibling", "siblingName", "firstSibling", "defaults", "sub", "appendHooks", "targetHooks", "hooks", "called", "firstMatch", "regexes", "find$2", "agent", "group", "nu", "detect", "versionRegexes", "cleanedAgent", "unknown", "major", "minor", "Version", "edge", "chrome", "ie$1", "opera$1", "firefox", "safari", "isBrowser", "unknown$1", "nu$1", "info", "version", "Browser", "windows", "ios", "android$1", "linux", "osx", "solaris", "freebsd", "isOS", "unknown$2", "nu$2", "OperatingSystem", "DeviceType", "os", "browser", "isiPad", "isiPhone", "isAndroid3", "isAndroid4", "isTablet", "isTouch", "isPhone", "iOSwebview", "detect$1", "candidates", "candidate", "detectBrowser", "browsers", "detectOs", "oses", "UaString", "contains$2", "substr", "trim$2", "lTrim", "rTrim", "normalVersionRegex", "checkContains", "uastring", "PlatformInfo", "detect$2", "deviceType", "PlatformDetection", "detect$3", "PlatformDetection$1", "fromHtml", "div", "fromDom", "fromTag", "fromText", "fromPoint", "Element", "ATTRIBUTE", "CDATA_SECTION", "COMMENT", "DOCUMENT", "DOCUMENT_TYPE", "DOCUMENT_FRAGMENT", "ELEMENT", "TEXT", "PROCESSING_INSTRUCTION", "ENTITY_REFERENCE", "ENTITY", "NOTATION", "isType$1", "t", "isElement", "isText", "hasOwnProperty$1", "each$3", "props", "k", "map$2", "tupleMap", "tuple", "bifilter", "branch", "has", "isSupported", "dom", "inBody", "rawSet", "set", "setAll", "attrs", "get", "has$1", "remove", "internalSet", "property", "setAll$1", "css", "get$1", "styles", "getUnsafeProperty", "getRaw", "raw", "getAllRaw", "ruleName", "Immutable", "fields", "struct", "toArray$1", "recurse", "Recurse", "compareDocumentPosition", "documentPositionPreceding", "documentPositionContainedBy", "Node", "ELEMENT$1", "DOCUMENT$1", "is$1", "bypassSelector", "one", "e1", "e2", "regularContains", "d1", "d2", "ieContains", "contains$3", "owner", "defaultView", "parents", "isRoot", "stop", "rawParent", "prevSibling", "nextSibling", "prevSiblings", "nextSiblings", "child", "cs", "firstChild", "lastChild", "childNodesCount", "spot", "browser$1", "firstElement", "getTableCaptionDeltaY", "caption", "bodyTop", "captionTop", "captionHeight", "getPos", "rootElm", "offsetParent", "Position", "exports$1", "module$1", "define", "require", "g", "process", "cachedSetTimeout", "cachedClearTimeout", "defaultSetTimout", "defaultClearTimeout", "runTimeout", "fun", "runClearTimeout", "marker", "queue", "draining", "currentQueue", "queueIndex", "cleanUpNextTick", "drainQueue", "timeout", "Item", "setImmediate", "setTimeoutFunc", "prom", "err", "clearImmediate", "nextTick", "apply", "immediateIds", "nextImmediateId", "Timeout", "clearFn", "msecs", "promisePolyfill", "nu$3", "baseFn", "callbacks", "nCallback", "isReady", "run", "cbs", "pure", "LazyValue", "errorReporter", "make", "fab", "aFutureB", "anonBind", "futureB", "toLazy", "toCached", "toPromise", "nu$4", "pure$1", "Future", "par", "asyncValues", "asyncValue", "par$1", "futures", "or", "opt", "orThunk", "mapError", "fold", "onValue", "toOption", "error", "message", "getOrThunk", "onError", "fromOption", "Result", "StyleSheetLoader", "settings", "idCount", "loadedStates", "maxLoadTime", "appendToHead", "load", "loadedCallback", "errorCallback", "link", "startTime", "passed", "failed", "isOldWebKit", "webKitChunks", "wait", "testCallback", "waitCallback", "waitForWebKitLinkLoaded", "styleSheets", "styleSheet", "waitForGeckoLinkLoaded", "cssRules", "loadF", "unbox", "loadAll", "urls", "success", "failure", "TreeWalker", "startNode", "rootNode", "findSibling", "startName", "shallow", "findPreviousNode", "blocks", "voids", "tableCells", "tableSections", "textBlocks", "headings", "listItems", "lists", "wsElements", "lazyLookup", "lookup", "isHeading", "isBlock", "isInline", "isBr", "isTextBlock", "isList", "isListItem", "isVoid", "isTableSection", "isTableCell", "isWsPreserveElement", "isNodeType", "isRestrictedNode", "isElement$1", "matchNodeNames", "matchStyleValues", "cssValue", "computed", "hasPropValue", "propName", "propValue", "hasAttribute", "attrName", "attrValue", "hasAttributeValue", "isBogus", "isBogusAll", "isTable", "hasContentEditableState", "isText$1", "isComment", "isDocument", "isDocumentFragment", "isBr$1", "isContentEditableTrue", "isContentEditableFalse", "NodeType", "surroundedBySpans", "previousIsSpan", "nextIsSpan", "isBookmarkNode", "trimNode", "trimmedLength", "TrimNode", "makeMap$1", "namedEntities", "baseEntities", "reverseEntities", "attrsCharsRegExp", "textCharsRegExp", "rawCharsRegExp", "entityRegExp", "asciiMap", "nativeDecode", "buildEntitiesLookup", "radix", "chr", "entity", "encodeRaw", "encodeAllRaw", "encodeNumeric", "encodeNamed", "entities", "getEncodeFunc", "entitiesMap", "encodeNamedAndNumeric", "encodeCustomNamed", "nameMap", "decode", "numeric", "Entities", "mapCache", "dummyObj", "makeMap$2", "each$4", "extend$1", "explode$1", "inArray$1", "split", "compileSchema", "schema", "globalAttributes", "blockContent", "phrasingContent", "flowContent", "html4BlockContent", "html4PhrasingContent", "add", "ni", "attributesOrder", "arrayToMap", "addAttrs", "schemaItem", "compileElementMap", "mode", "Schema", "patternElements", "validStyles", "invalidStyles", "schemaItems", "whiteSpaceElementsMap", "selfClosingElementsMap", "shortEndedElementsMap", "boolAttrMap", "validClasses", "blockElementsMap", "nonEmptyElementsMap", "moveCaretBeforeOnEnterElementsMap", "textBlockElementsMap", "textInlineElementsMap", "customElementsMap", "specialElements", "createLookupTable", "option", "defaultValue", "extendWith", "patternToRegExp", "addValidElements", "validElements", "ei", "ai", "al", "attrData", "elementName", "attrType", "prefix", "outputName", "globalAttributesOrder", "elementRuleRegExp", "attrRuleRegExp", "hasPatternsRegExp", "setValidElements", "addCustomElements", "customElements", "customElementRegExp", "rule", "inline", "cloneName", "customRule", "elmName", "addValidChildren", "validChildren", "childRuleRegExp", "getElementRule", "getValidStyles", "getInvalidStyles", "getValidClasses", "getBoolAttrs", "getBlockElements", "getTextBlockElements", "getTextInlineElements", "getShortEndedElements", "getSelfClosingElements", "getNonEmptyElements", "getMoveCaretBeforeOnEnterElements", "getWhiteSpaceElements", "getSpecialElements", "isValidChild", "isValid", "attrPatterns", "getCustomElements", "toHex", "hex", "Styles", "rgbRegExp", "urlOrStrRegExp", "styleRegExp", "trimRightRegExp", "encodingLookup", "encodingItems", "invisibleChar", "color", "isEncoded", "urlConverter", "urlConverterScope", "compress", "suffix", "noJoin", "top", "right", "bottom", "left", "box", "canCompress", "compress2", "encode", "keepSlashes", "decodeSingleHexSequence", "escSeq", "decodeHexSequences", "processUrl", "url2", "url3", "str2", "scriptUrl", "serializeStyles", "styleList", "styleMap", "each$5", "grep$1", "isIE", "simpleSelectorRe", "whiteSpaceRegExp$2", "setupAttrHooks", "getContext", "keepValues", "keepUrlHook", "$elm", "updateInternalStyleAttr", "rawValue", "findNodeIndex", "normalized", "lastNodeType", "DOMUtils", "_this", "addedStyles", "files", "counter", "stdMode", "boxModel", "styleSheetLoader", "boundEvents", "$", "$$", "getAttrib", "defaultVal", "getAttribs", "setAttrib", "originalValue", "clone", "deep", "clone_1", "getRoot", "getViewPort", "argWin", "actWin", "setStyle", "setStyles", "stylesArg", "getStyle", "getSize", "w", "h", "getRect", "size", "selectors", "elms", "getParents", "collect", "selectorVal", "getParent", "_findSib", "getNext", "getPrev", "setAttribs", "setHTML", "parentElm", "newElm", "createHTML", "outHtml", "keepChildren", "$node", "removeAllAttribs", "parseStyle", "cssText", "serializeStyle", "addStyle", "styleElm", "loadCSS", "toggleClass", "cls", "addClass", "removeClass", "show", "hide", "isHidden", "uniqueId", "getOuterHTML", "setOuterHTML", "insertAfter", "reference", "referenceNode", "replace", "oldElm", "rename", "attrNode", "findCommonAncestor", "ps", "pe", "rgbVal", "isEmpty", "walker", "brCount", "bogusVal", "createRng", "splitElm", "replacementElm", "bef", "aft", "pa", "fire", "getContentEditable", "getContentEditableParent", "destroy", "isChildOf", "dumpRng", "DOMUtils$1", "DOM", "each$6", "grep$2", "isFunction$1", "ScriptLoader", "QUEUED", "LOADING", "LOADED", "FAILED", "states", "scriptLoadedCallbacks", "queueLoadedCallbacks", "loading", "loadScript", "scripts", "loadScripts", "failures", "execCallbacks", "loadingScripts", "notifyCallbacks", "each$7", "AddOnManager", "_listeners", "dependencies", "requireLangPack", "languages", "language", "addOn", "listener", "createUrl", "baseUrl", "dep", "addComponents", "pluginName", "pluginUrl", "script", "loadDependencies", "addOnUrl", "deps", "newUrl", "urlString", "waitFor", "before", "parent$1", "after", "append", "prepend", "firstChild$1", "wrap$1", "before$1", "append$1", "empty", "rogue", "remove$1", "unwrap", "children$1", "rate", "cancel", "throttle", "last$2", "Cell", "initial", "read", "remove$2", "supports", "get$2", "add$1", "clazz", "remove$3", "add$2", "cleanClass", "classList", "remove$4", "has$2", "descendants", "descendants$1", "ClosestOrAncestor", "ancestor", "closest", "test", "ancestor$1", "descendant", "closest$1", "annotation", "dataAnnotation", "dataAnnotationId", "identify", "annotationName", "rng", "an", "newStart", "getAttr", "uid", "findMarkers", "isAnnotation", "findAll", "markers", "directory", "nodesAlready", "setup", "registry", "changeCallbacks", "initData", "withCallbacks", "updateCallbacks", "callbackMap", "outputData", "fireCallbacks", "fireNoAnnotation", "onNodeChange", "annotations", "prev", "_a", "addListener", "setup$1", "identifyParserNode", "span", "optAnnotation", "spans", "create$1", "register", "__assign", "__rest", "__spreadArrays", "il", "jl", "unique", "generate", "date", "random", "add$3", "classes", "original", "isDeep", "fromHtml$1", "get$3", "set$1", "owner$1", "docDom", "fragment", "contentElements", "ZWSP", "isZwsp", "trim$3", "Zwsp", "isElement$2", "isText$2", "isCaretContainerBlock", "isCaretContainerInline", "isCaretContainer", "hasContent", "insertInline", "textNode", "parentNode", "endsWithCaretContainer", "startsWithCaretContainer", "isBeforeInline", "isAfterInline", "createBogusBr", "br", "insertBlock", "blockName", "blockNode", "trimBogusBr", "brs", "lastBr", "showCaretContainerBlock", "caretContainer", "isRangeInCaretContainerBlock", "range", "isContentEditableTrue$1", "isContentEditableFalse$1", "isBr$2", "isText$3", "isInvalidTextElement", "isAtomicInline", "isTable$1", "isCaretContainer$1", "isCaretCandidate", "isNonUiContentEditableFalse", "isUnselectable", "isInEditable", "isAtomicContentEditableFalse", "isAtomic", "isEditableCaretCandidate", "round", "clone$1", "rect", "collapse", "toStart", "isEqual", "rect1", "rect2", "isValidOverflow", "overflowY", "isAbove", "halfHeight", "isBelow", "containsXY", "clientX", "clientY", "overflowX", "outer", "inner", "getOverflow", "getSelectedNode", "startContainer", "startOffset", "getNode", "extendingChars", "isExtendingChar", "ch", "lift2", "oa", "ob", "lift3", "oc", "slice$2", "and", "Predicate", "isElement$3", "isCaretCandidate$1", "isBlock$1", "isFloated", "isValidElementCaretCandidate", "isNotPre", "isText$4", "isBr$3", "resolveIndex", "createRange", "isWhiteSpace", "isRange", "isHiddenWhiteSpaceRange", "getBrClientRect", "brNode", "nbsp", "clientRect", "getBoundingClientRectWebKitText", "sc", "ec", "so", "eo", "newRng", "getBoundingClientRect", "isZeroRect", "clientRects", "collapseAndInflateWidth", "newClientRect", "getCaretPositionClientRects", "caretPosition", "beforeNode", "addUniqueAndValidRect", "addCharacterOffset", "CaretPosition", "isAtStart", "isAtEnd", "toRange", "getClientRects", "isVisible", "pos1", "pos2", "CaretPosition$1", "isText$5", "isBogus$1", "nodeIndex$1", "normalizedParent", "getChildNodes", "normalizedTextOffset", "equal", "normalizedNodeIndex", "numTextFragments", "createPathItem", "parentsUntil", "create$2", "outputOffset", "childNodes", "resolvePathItem", "findTextPosition", "targetOffset", "dataLen", "resolve$2", "trimEmptyTextNode", "insertNode", "insertFragment", "rangeInsertNode", "isContentEditableFalse$2", "getNormalizedTextOffset", "trimmedOffset", "getPoint", "point", "getLocation", "selection", "bookmark", "findIndex$2", "moveEndPoint", "normalizeTableCellSelection", "findAdjacentContentEditableFalseElm", "getOffsetBookmark", "getCaretBookmark", "getRangeBookmark", "createBookmarkSpan", "filled", "getPersistentBookmark", "collapsed", "rng2", "endBookmarkNode", "startBookmarkNode", "getBookmark", "GetBookmark", "CARET_ID", "isCaretNode", "getParentCaretContainer", "isElement$4", "isText$6", "removeNode", "getNodeValue", "setNodeValue", "trimCount", "trimmedText", "removeUnchanged", "remove$5", "removeTextAndReposition", "removeElementAndReposition", "newPosition", "removeTextCaretContainer", "removeElementCaretContainer", "removeAndReposition", "caretContainerNode", "CaretContainerRemove", "browser$2", "isContentEditableFalse$3", "isTableCell$1", "getAbsoluteClientRect", "scrollX", "scrollY", "margin", "rootRect", "trimInlineCaretContainers", "contentEditableFalseNodes", "FakeCaret", "hasFocus", "lastVisualCaret", "cursorInterval", "caret", "caretState", "startBlink", "reposition", "getCss", "isFakeCaretTableBrowser", "isFakeCaretTarget", "isContentEditableFalse$4", "isBlockLike", "isCaretContainer$2", "isCaretContainerBlock$1", "isElement$5", "isCaretCandidate$2", "isForwards", "direction", "isBackwards", "skipCaretContainers", "findNode", "predicateFn", "getParentBlock", "isInSameBlock", "caretPosition1", "caretPosition2", "getChildNodeAtRelativeOffset", "relativeOffset", "beforeAfter", "isNodesInSameBlock", "node1", "node2", "lean", "before$2", "after$1", "normalizeRange", "location", "leanLeft", "leanRight", "getRelativeCefElm", "getNormalizedRangeEndPoint", "normalizedRange", "getElementFromPosition", "getElementFromPrevPosition", "getVisualCaretPosition", "walkFn", "isMoveInsideSameBlock", "to", "inSameBlock", "HDirection", "isContentEditableFalse$5", "isText$7", "isElement$6", "isBr$4", "isCaretCandidate$3", "isAtomic$1", "isEditableCaretCandidate$1", "nodeAtIndex", "getCaretCandidatePosition", "moveForwardFromBr", "nextNode", "findCaretPosition", "startPos", "innerNode", "rootContentEditableFalseElm", "CaretWalker", "walkToPositionIn", "position", "fromPosition", "afterElement", "isBeforeOrStart", "isAfterOrEnd", "isBeforeAfterSameElement", "isAtBr", "shouldSkipPosition", "navigate", "navigateIgnore", "ignoreFilter", "positionIn", "nextPosition", "prevPosition", "CaretFinder", "isStringPathBookmark", "isRangeBookmark", "isIdBookmark", "isIndexBookmark", "isPathBookmark", "addBogus", "resolveCaretPositionBookmark", "insertZwsp", "tryFindRangePosition", "padEmptyCaretContainer", "setEndPoint", "isValidTextNode", "restoreEndPoint", "next", "keep", "alt", "o1", "o2", "resolvePaths", "resolveId", "endPos", "spos", "epos", "resolveIndex$1", "resolve$3", "ResolveBookmark", "getBookmark$1", "moveToBookmark", "isBookmarkNode$1", "Bookmarks", "isInlineBlock", "moveStart", "isWhiteSpaceNode", "getNonWhiteSpaceSibling", "inc", "isTextBlock$1", "ed", "replaceVars", "vars", "isEq", "str1", "normalizeStyleValue", "getTextDecoration", "decoration", "getParents$1", "FormatUtils", "isBookmarkNode$2", "getParents$2", "isWhiteSpaceNode$1", "isTextBlock$2", "findLeaf", "excludeTrailingWhitespace", "endContainer", "endOffset", "leaf", "isBogusBr", "findParentContentEditable", "findSpace", "findWordEndPoint", "lastTextNode", "findSelectorEndPoint", "format", "curFormat", "findBlockEndPoint", "scopeRoot", "findParentContainer", "expandRng", "endPoint", "ExpandRange", "each$8", "getEndChild", "walk$1", "startPoint", "siblings", "exclude", "collectSiblings", "endNode", "findEndPoint", "walkBoundary", "RangeWalk", "zeroWidth", "NodeValue", "getOption", "api", "get$4", "isZeroWidth", "wrapName", "shouldApplyToTrailingSpaces", "applyWordGrab", "makeAnnotation", "eDoc", "decorate", "_b", "master", "_c", "_d", "_e", "annotate", "newWrappers", "finishWrapper", "getOrOpenWrapper", "processElements", "processElement", "ctx", "processNodes", "annotateWithBookmark", "initialRng", "Annotator", "changes", "hasOnlyOneChild", "isPaddingNode", "isPaddedEmptyBlock", "blockElements", "isEmptyFragmentElement", "nonEmptyElements", "isListFragment", "cleanupDomFragment", "domFragment", "toDomFragment", "serializer", "listItems$1", "isPadding", "isListItemPadded", "isEmptyOrPadded", "trimListItems", "getParentLi", "parentBlock", "isParentBlockLi", "getSplit", "beforeRng", "afterRng", "findFirstIn", "caretPos", "caretWalker", "newCaretPos", "findLastOf", "insertMiddle", "li", "insertBefore", "insertAtCaret", "liTarget", "liElms", "BEGINNING", "END", "isAt", "newPos", "InsertList", "each$9", "ElementUtils", "attribs", "compareObjects", "obj1", "obj2", "getLastChildren", "rawNode", "removeTrailingBr", "allBrs", "fillWithPaddingBr", "isPaddingContents", "isPaddedElement", "trimBlockTrailingBr", "lastChildPrevSibling", "PaddingBr", "makeMap$3", "Writer", "indent", "indentBefore", "indentAfter", "htmlOutput", "HtmlSerializer", "writer", "serialize", "handlers", "validate", "handler", "sortedAttrs", "elementRule", "createRange$1", "normalizeBlockSelectionRange", "newEndPos", "normalize", "RangeNormalizer", "isAfterNbsp", "trimOrPadLeftRight", "hasSiblingText", "trimNbspAfterDeleteAndPadValue", "isTableCell$2", "selectionSetContent", "validInsertion", "trimBrsFromTableCell", "reduceInlineTextElements", "merge", "textInlineElements", "root_1", "elementUtils_1", "testNode", "markFragmentElements", "umarkFragmentElements", "isPartOfFragment", "canHaveChildren", "moveSelectionToMarker", "parentEditableFalseElm", "nextRng", "getContentEditableFalseParent", "findNextCaretRng", "insertHtmlAtCaret", "details", "parser", "bookmarkHtml", "caretElement", "parserArgs", "processValue", "insertAtCaret$1", "InsertContent", "strongRtl", "hasStrongRtl", "getBodySetting", "bodyObj", "getIframeAttrs", "getDocType", "getDocumentBaseUrl", "getBodyId", "getBodyClass", "getContentSecurityPolicy", "shouldPutBrInPre", "getForcedRootBlock", "block", "getForcedRootBlockAttrs", "getBrNewLineSelector", "getNoNewLineSelector", "shouldKeepStyles", "shouldEndContainerOnEmptyBlock", "getFontStyleValues", "getFontSizeClasses", "getImagesDataImgFilter", "isAutomaticUploadsEnabled", "shouldReuseFileName", "shouldReplaceBlobUris", "getImageUploadUrl", "getImageUploadBasePath", "getImagesUploadCredentials", "getImagesUploadHandler", "shouldUseContentCssCors", "getInlineBoundarySelector", "Settings", "isInlineTarget", "isRtl", "findInlineParents", "findRootInline", "hasSameParentBlock", "block1", "block2", "isAtZwsp", "normalizePosition", "normalizeForwards", "normalizeBackwards", "InlineUtils", "isBeforeRoot", "getParentBlock$1", "placeCaretInEmptyBody", "paddEmptyBody", "willDeleteLastPositionInElement", "fromPos", "firstPos", "lastPos", "normalizedFirstPos", "normalizedLastPos", "normalizedFromPos", "nextPos", "prevPos", "DeleteUtils", "ancestor$2", "hasWhitespacePreserveParent", "rootElement", "isWhitespace", "isNamedAnchor", "isContent", "isBookmark", "isBogus$2", "isBogusAll$1", "isEmptyNode", "targetNode", "isEmpty$1", "Empty", "BlockPosition", "BlockBoundary", "getBlockPosition", "containerElm", "isDifferentBlocks", "blockBoundary", "hasSameParent", "parent1", "parent2", "isEditable", "skipLastBr", "blockPosition", "lastPositionInBlock", "readFromRange", "fromBlockPos", "toBlockPos", "blockPos", "read$1", "BlockMergeBoundary", "dropLast", "parentsUntil$1", "parents$1", "parentsAndSelf", "Parents", "getChildrenUntilBlockBoundary", "extractChildren", "removeEmptyRoot", "isEmptyBefore", "nestedBlockMerge", "fromBlock", "toBlock", "insertionPoint", "sidelongBlockMerge", "findInsertionPoint", "getInsertionPoint", "trimBr", "mergeBlockInto", "mergeBlocks", "MergeBlocks", "backspaceDelete", "BlockBoundaryDelete", "deleteRangeMergeBlocks", "isRawNodeInTable", "isSelectionInTable", "isEverythingSelected", "noPrevious", "noNext", "emptyEditor", "deleteRange", "backspaceDelete$1", "BlockRangeDelete", "generate$1", "cases", "constructors", "adt", "acase", "keys$1", "argLength", "branches", "branchKeys", "allReqd", "reqKey", "label", "Adt", "isBr$5", "findBr", "parentBlocks", "isBeforeBr", "isAfterBr", "findPreviousBr", "findNextBr", "is$2", "expected", "isNbsp", "isWhiteSpace$1", "isContent$1", "isChar", "delta", "isBeforeSpace", "isAfterSpace", "isEmptyText", "isNextToContentEditableFalse", "isBeforeContentEditableFalse", "isAfterContentEditableFalse", "isNextToTable", "isBeforeTable", "isAfterTable", "isCompoundElement", "DeleteAction", "isAtContentEditableBlockCaret", "caretLocation", "isDeleteFromCefDifferentBlocks", "deleteEmptyBlockOrMoveToCef", "toCefElm", "blockElm", "findCefPosition", "getContentEditableBlockAction", "skipMoveToActionFromInlineCefToContent", "deleteAction", "getContentEditableAction", "read$2", "isCollapsibleWhitespace", "normalizeContent", "isStartOfContent", "isEndOfContent", "normalize$1", "normalizeWhitespaceAfter", "whitespaceCount", "normalizeWhitespaceBefore", "mergeTextNodes", "prevNode", "normalizeWhitespace", "whitespaceOffset", "needsReposition", "beforeOrStartOf", "afterOrEndOf", "getPreviousSiblingCaretPosition", "getNextSiblingCaretPosition", "findCaretPositionBackwardsFromElm", "startPosition", "findCaretPositionForwardsFromElm", "findCaretPositionBackwards", "findCaretPositionForward", "findCaretPosition$1", "findCaretPosOutsideElmAfterDelete", "setSelection", "eqRawNode", "isBlock$2", "paddEmptyBlock", "deleteNormalized", "afterDeletePosOpt", "prevTextOpt", "nextTextOpt", "isInlineElement", "deleteElement", "moveCaret", "afterDeletePos", "normalizedAfterDeletePos", "paddPos", "DeleteElement", "deleteElement$1", "moveToElement", "moveToPosition", "backspaceDeleteCaret", "deleteOffscreenSelection", "backspaceDeleteRange", "selectedElement", "getContentEditableRoot", "paddEmptyElement", "ceRoot", "backspaceDelete$2", "CefDelete", "isText$8", "startsWithCaretContainer$1", "endsWithCaretContainer$1", "createZwsp", "insertBefore$1", "newNode", "insertAfter$1", "insertInline$1", "insertInlineBefore", "insertInlineAfter", "insertInlinePos", "isPosCaretContainer", "caretNode", "renderCaret", "BoundaryCaret", "evaluateUntil", "fns", "LazyEvaluator", "Location", "rescope", "before$3", "nPos", "isNotInsideFormatCaretContainer", "findInsideRootInline", "end", "after$2", "isValidLocation", "getElement", "readLocation", "getName", "outside", "inside", "isEq$1", "location1", "location2", "betweenInlines", "fromInline", "toInline", "skipNoMovement", "fromLocation", "toLocation", "findLocationTraverse", "findLocationSimple", "findLocation", "BoundaryLocation", "hasSelectionModifyApi", "moveRel", "moveByWord", "WordSelection", "setCaretPosition", "isFeatureEnabled", "setSelected", "renderCaretLocation", "findLocation$1", "toggleInlines", "selectedInlines", "targetInlines", "safeRemoveCaretContainer", "renderInsideInlineCaret", "inlines", "move", "moveWord", "setupSelectedState", "moveNextWord", "movePrevWord", "BoundarySelection", "isFeatureEnabled$1", "rangeFromPositions", "hasOnlyTwoOrLessPositionsLeft", "setCaretLocation", "deleteFromTo", "rescope$1", "backspaceDeleteCollapsed", "toPosition", "backspaceDelete$3", "InlineBoundaryDelete", "tableCellRng", "tableSelection", "isRootFromElement", "getClosestCell", "getClosestTable", "cell", "isExpandedCellRng", "cellRng", "getTableFromCellRng", "startParentTable", "endParentTable", "getTableCells", "table", "getCellRangeFromStartTable", "endCell", "partialSelection", "startCell", "isWithinSameTable", "getCellRng", "getTableSelectionFromCellRng", "getTableSelectionFromRng", "getCellIndex", "cells", "getSelectedCells", "startIndex", "endIndex", "getAction", "selected", "getActionFromCells", "getActionFromRange", "TableDeleteAction", "getRanges", "ranges", "getSelectedNodes", "hasMultipleRanges", "MultiRange", "getCellsFromRanges", "getCellsFromElement", "selectedCells", "getCellsFromElementOrRanges", "rangeCells", "getCellsFromEditor", "TableCellSelection", "emptyCells", "deleteTableElement", "deleteCellRange", "action", "deleteCaptionRange", "emptyElement", "deleteTableRange", "startElm", "getParentCaption", "deleteRange$1", "getParentCell", "deleteBetweenCells", "fromCell", "toCell", "isDeleteOfLastCharPos", "fromCaption", "emptyCaretCaption", "validateCaretCaption", "toCaption", "deleteCaretInsideCaption", "deleteCaretCells", "deleteCaretCaption", "deleteCaret", "backspaceDelete$4", "TableDelete", "isEq$2", "matchesUnInheritedFormatSelector", "formatList", "matchParents", "matchNode", "matchName", "matchItems", "itemName", "similar", "matchAll", "startElement", "matchedFormatNames", "checkedMap", "canApply", "MatchFormat", "splitText", "split$1", "SplitRange", "ZWSP$1", "CARET_ID$1", "importNode", "ownerDocument", "getEmptyCaretContainers", "isCaretContainerEmpty", "findFirstTextNode", "createCaretContainer", "fill", "trimZwspFromCaretContainer", "removeCaretContainerNode", "removeCaretContainer", "insertCaretContainerNode", "formatNode", "appendNode", "insertFormatNodesIntoCaretContainer", "formatNodes", "innerMostFormatNode", "applyCaretFormat", "wordcharRegex", "removeCaretFormat", "hasContentAfter", "expandedRng", "newCaretContainer", "disableCaretContainer", "keyCode", "setup$2", "replaceWithCaretFormat", "innerMost", "isFormatElement", "inlineElements", "isEmptyCaretFormatElement", "getParentInlines", "hasOnlyOneChild$1", "deleteLastPosition", "parentInlines", "isFormatElement$1", "deleteCaret$1", "backspaceDelete$5", "InlineFormatDelete", "getPos$1", "fireScrollIntoViewEvent", "alignToTop", "scrollEvent", "scrollElementIntoView", "viewPort", "viewPortY", "viewPortH", "offsetY", "scrollContainer", "getViewPortRect", "scrollBy", "dx", "dy", "scrollRangeIntoView", "rngRect", "bodyRect", "overflow", "ScrollIntoView", "isContentEditableTrue$2", "isContentEditableFalse$6", "showCaret", "scrollIntoView", "getNodeRange", "selectNode", "renderCaretAtRange", "caretPositionNode", "caretPositionBeforeNode", "renderRangeCaret", "caretRange", "moveToRange", "trimEmptyTextNode$1", "deleteContentAndShowCaret", "peekCaretPosition", "deleteCefBoundaryText", "getNextVisualCaretPosition", "getPrevVisualCaretPosition", "getNextPosFn", "isBeforeContentEditableFalseFn", "nextCaretPosition", "backspaceDelete$6", "CefBoundaryDelete", "nativeCommand", "command", "deleteCommand", "forwardDeleteCommand", "DeleteCommands", "getSpecifiedFontProp", "getProperty", "round$1", "number", "precision", "factor", "toPt", "fontSize", "normalizeFontFamily", "fontFamily", "getComputedFontProp", "getFontProp", "FontInfo", "findFirstCaretElement", "isRangeAtStartOfNode", "getCaretElement", "fromFontSizeNumber", "fontSizeNumber", "fontSizes", "fontClasses", "fontNameAction", "fontNameQuery", "fontSizeAction", "fontSizeQuery", "isEq$3", "rng1", "RangeCompare", "findParent", "hasParent", "hasParentWithName", "isTable$2", "isTableCell$3", "isCeFalseCaretContainer", "hasBrBeforeAfter", "isPrevNode", "hasContentEditableFalseParent", "findTextNodeRelative", "isAfterNode", "lastInlineElement", "parentBlockContainer", "normalizeEndPoint", "directionLeft", "normalize$2", "normRng", "NormalizeRange", "hasRightSideContent", "scrollToBr", "brElm", "moveSelectionToBr", "extraBr", "insertBrAtCaret", "isAfterLastNodeInContainer", "containerBlock", "containerBlockName", "isControlKey", "insertBrBefore", "insertBrAfter", "hasBrAfter", "isBeforeBr$1", "isAnchorLink", "isInsideAnchor", "readInlineAnchorLocation", "insertBrOutsideAnchor", "insert", "anchorLocation", "InsertBr", "create$3", "SimRange", "cata", "subject", "onBefore", "onOn", "onAfter", "getStart", "situ", "before$4", "on", "after$3", "Situ", "adt$1", "exactFromRange", "simRange", "getStart$1", "startSitu", "finishSitu", "soffset", "finish", "foffset", "domRange", "relative", "exact", "getWin", "Selection", "browser$3", "clamp", "max", "normalizeRng", "isOrContains", "isRngInRoot", "shouldStore", "nativeRangeToSelectionRange", "readRange", "getBookmark$2", "bookmarkToNativeRng", "store", "newBookmark", "storeNative", "getRng", "restore", "SelectionBookmark", "indentElement", "useMargin", "unit", "indentStyleName", "styleValue", "isListComponent", "parentIsListComponent", "getBlocksToIndent", "formatter", "indentUnit", "indentValue", "each$a", "extend$2", "map$3", "inArray$2", "EditorCommands", "commands", "execCommand", "ui", "customCommand", "queryCommandState", "queryCommandValue", "addCommands", "commandList", "addCommand", "queryCommandSupported", "addQueryStateHandler", "addQueryValueHandler", "hasCustomCommand", "execNativeCommand", "isFormatMatch", "toggleFormat", "storeSelection", "restoreSelection", "align", "listElm", "listParent", "anchor", "editingHost", "alignStates", "list", "nativeEvents", "Dispatcher", "bindings", "toggleEvent", "off", "extra", "bindingName", "hi", "once", "getEventDispatcher", "Observable", "bubble", "firePreProcess", "firePostProcess", "fireRemove", "fireDetach", "fireSwitchMode", "fireObjectResizeStart", "width", "height", "fireObjectResized", "Events", "setEditorCommandState", "cmd", "toggleReadOnly", "setMode", "getMode", "isReadOnly", "DOM$1", "customEventRootDelegates", "getEventTarget", "eventName", "isListening", "fireEvent", "bindEventDelegate", "eventRootElm", "delegate", "editors", "EditorObservable", "EditorObservable$1", "sectionResult", "detection", "mobilePlugins", "defaultMobileSettings", "normalizePlugins", "plugins", "pluginNames", "trimmedPlugins", "filterMobilePlugins", "extractSections", "getSection", "sections", "sectionSettings", "hasSection", "getDefaultSettings", "documentBaseUrl", "getExternalPlugins", "overrideSettings", "userDefinedExternalPlugins", "combinePlugins", "forcedPlugins", "processPlugins", "isTouchDevice", "defaultOverrideSettings", "platformPlugins", "combinedPlugins", "isOnMobile", "combineSettings", "defaultSettings", "extendedSettings", "getEditorSettings", "getFiltered", "getParamObject", "isArrayOf", "getParam", "each$b", "explode$2", "keyCodeLookup", "modifierNames", "Shortcuts", "shortcuts", "pendingPatterns", "parseShortcut", "shortcut", "createShortcut", "desc", "cmdFunc", "hasModifier", "isFunctionKey", "matchShortcut", "executeShortcutAction", "active", "_doc", "search", "getContentEditableHost", "getCollapsedNode", "getFocusInElement", "normalizeSelection", "focusBody", "hasElementFocus", "hasIframeFocus", "hasInlineFocus", "rawBody", "hasFocus$1", "focusEditor", "contentEditableHost", "activateEditor", "bookmarkRng", "focus", "skipFocus", "EditorFocus", "getProp", "rawElm", "getComputedSizeProp", "getClientWidth", "getClientHeight", "getMarginTop", "getMarginLeft", "getBoundingClientRect$1", "isInsideElementContentArea", "bodyElm", "clientWidth", "clientHeight", "transpose", "deltaX", "deltaY", "isXYInContentArea", "targetElm", "transposedPoint", "fromDomSafe", "isEditorAttachedToDom", "rawContainer", "EditorView", "NotificationManagerImpl", "unimplemented", "NotificationManager", "notifications", "getImplementation", "theme", "getTopNotification", "addNotification", "notification", "closeNotification", "otherNotification", "open", "close", "getNotifications", "registerEvents", "serviceMessage", "WindowManagerImpl", "WindowManager", "funcBind", "fireOpenEvent", "fireCloseEvent", "addWindow", "closeWindow", "otherWindow", "getTopWindow", "params", "alert", "confirm", "getParams", "setParams", "getWindows", "code", "I18n", "newCode", "langData", "toString", "getLangData", "values_1", "$1", "$2", "PluginManager", "resolvePluginName", "targetUrl", "matchUrl", "pluginUrlToMessage", "plugin", "displayNotification", "displayError", "uploadError", "pluginLoadError", "pluginInitError", "initError", "console", "ErrorReporter", "PluginManager$1", "ThemeManager", "XMLHttpRequest", "Uploader", "uploadStatus", "pendingPromises", "pathJoin", "path1", "path2", "defaultHandler", "blobInfo", "progress", "xhr", "formData", "json", "noUpload", "handlerSuccess", "handlerFailure", "resolvePending", "blobUri", "uploadBlobInfo", "openNotification", "closeNotification_1", "percent", "isDefaultHandler", "pendingUploadBlobInfo", "uploadBlobs", "blobInfos", "upload", "FileReader", "Uint8Array", "requestAnimationFrame$1", "atob", "base64", "Window", "blobUriToBlob", "rejectWithError", "parseDataUri", "uri", "uriParts", "dataUriToBlob", "uriToBlob", "blobToDataUri", "reader", "Conversions", "imageToBlobInfo", "blobCache", "img", "dataUri", "cachedBlobInfo", "getAllImages", "ImageScanner", "cachedPromises", "images", "src", "promises", "imageInfo", "newPromise", "count$1", "rnd", "now", "uuid", "Uuid", "BlobCache", "mimeToExt", "mime", "mimes", "filename", "toBlobInfo", "findFirst", "getByUri", "removeByUri", "UploadStatus", "PENDING", "UPLOADED", "blobUriStatuses", "createStatus", "status", "resultUri", "hasBlobUri", "getResultUri", "isPending", "isUploaded", "markPending", "markUploaded", "removeFailed", "EditorUpload", "uploader", "imageScanner", "urlFilters", "aliveGuard", "cacheInvalidator", "replaceString", "replaceImageUrl", "replacementUrl", "replaceUrlInUndoStack", "level", "replaceImageUri", "image", "uploadImages", "scanForImages", "imageInfos", "filteredResult", "uploadInfo", "uploadImagesAuto", "isValidDataUriImage", "imgElm", "dataImgFilter", "addFilter", "resultItem", "replaceBlobUris", "isBlockElement", "isValidTarget", "hasBlockParent", "shouldRemoveTextNode", "addRootBlocks", "rootBlockNode", "tempNode", "wrapped", "rootNodeName", "forcedRootBlock", "setup$3", "ForceBlocks", "getStartNode", "getEndNode", "getFirstChildren", "getLastChildren$1", "hasAllContentsSelected", "moveEndPoint$1", "hasAnyRanges", "sel", "NodeChange", "lastRng", "lastPath", "isSameElementPath", "currentPath", "nativeRng", "fakeRng", "VK", "getNodeClientRects", "toArrayWithNode", "VDirection", "findUntil", "walkUntil", "isAboveFn", "isBeflowFn", "line", "targetClientRect", "aboveLineNumber", "lineNumber", "isLineNumber", "upUntil", "downUntil", "positionsUntil", "isBelowFn", "getClientRect", "isAboveLine", "isLine", "isContentEditableFalse$7", "findNode$1", "distanceToRectLeft", "distanceToRectRight", "isInside", "findClosestClientRect", "oldClientRect", "oldDistance", "newDistance", "walkUntil$1", "findLineNodeRects", "targetNodeRect", "checkPosFn", "lineRects", "getFakeCaretTargets", "caretInfo", "closestCaret", "closestNodeRect", "contentEditableFalseNodeRects", "targetNodeRects", "isXYWithinRange", "RangePoint", "getAbsolutePosition", "getBodyPosition", "getScrollPosition", "getBodyScroll", "inlineScroll", "iframeScroll", "getMousePosition", "iframePosition", "scrollPosition", "calculatePosition", "bodyPosition", "mousePosition", "calc", "MousePosition", "isContentEditableFalse$8", "isContentEditableTrue$3", "isDraggable", "isValidDropTarget", "targetElement", "dragElement", "cloneElement", "cloneElm", "createGhost", "clonedElm", "ghostElm", "appendGhostToBody", "moveGhost", "maxX", "maxY", "removeElement", "isLeftMouseButtonPressed", "hasDraggableElement", "applyRelPos", "start$1", "ceElm", "elmPos", "move$1", "throttledPlaceCaretAt", "movement", "targetPos", "getRawTarget", "drop", "targetClone_1", "removeDragState", "bindFakeDragEvents", "pageDom", "dragStartHandler", "dragHandler", "dropHandler", "dragEndHandler", "rootDocument", "blockIeDrop", "realTarget", "init", "DragDropOverrides", "setup$4", "renderFocusCaret", "CefFocus", "isContentEditableTrue$4", "isContentEditableFalse$9", "getContentEditableRoot$1", "SelectionOverrides", "fakeCaret", "realSelectionId", "selectedContentEditableNode", "isFakeSelectionElement", "getRealSelectionElement", "setRange", "getRange", "showBlockCaretContainer", "blockCaretContainer", "contentEditableRoot", "removeContentEditableSelection", "handleTouchSelect", "moved", "setContentEditableSelection", "hasNormalCaretPosition", "hasBetterMouseTarget", "targetBlock", "caretBlock", "hideFakeCaret", "normalizeShortEndedElementSelection", "isPasteBin", "isRangeInCaretContainer", "clipboardData", "realSelectionElement", "addCss", "rootClass", "isWithinCaretContainer", "shortEndedElements", "$realSelectionContainer", "targetClone", "origTargetClone", "isValidPrefixAttrName", "trimComments", "sanitizedText", "isInvalidUri", "findEndTagIndex", "tokenRegExp", "checkBogusAttribute", "regExp", "attrString", "SaxParser", "comment", "cdata", "pi", "doctype", "parse", "endRegExp", "stack", "attrList", "textData", "isInternalElement", "removeInternalElements", "fillAttrsMap", "isShortEnded", "isValidElement", "attribsValue", "validAttributesMap", "validAttributePatterns", "attributesRequired", "attributesDefault", "attributesForced", "processHtml", "anyAttributesRequired", "selfClosing", "attrRegExp", "fixSelfClosing", "filteredUrlAttrs", "scriptUriRegExp", "processEndTag", "parseAttribute", "val2", "val3", "attrRule", "trimRegExp", "bogusValue", "SaxParser$1", "trimHtml", "tempAttrs", "trimContentRegExp", "trimInternal", "bogusAllRegExp", "endTagIndex", "matchLength", "trimExternal", "TrimHtml", "KEEP", "INSERT", "DELETE", "vDown", "vUp", "snake", "diag", "buildScript", "start1", "end1", "start2", "end2", "middle", "getMiddleSnake", "i2", "buildSnake", "sum", "Diff", "getOuterHtml", "createFragment$1", "insertAt", "removeAt", "applyDiff", "read$3", "write", "fragments", "currentFragments", "Fragments", "undoLevelDocument", "lazyTempDocument", "hasIframes", "createFragmentedLevel", "createCompleteLevel", "createFromEditor", "trimmedFragments", "trimmed", "applyToEditor", "getLevelContent", "getCleanLevelContent", "hasEqualContent", "level1", "level2", "hasEqualCleanedContent", "isEq$4", "Levels", "UndoManager", "beforeBookmark", "isFirstTypedCharacter", "locks", "isUnlocked", "setTyping", "typing", "setDirty", "addNonTypingUndoLevel", "endTyping", "modKey", "isInsertReplacementText", "isInsertTextDataNull", "lastLevel", "currentLevel", "callback1", "callback2", "postProcessHooks", "filter$2", "each$c", "addPostProcessHook", "postProcess", "isPre", "hasPreSibling", "pre", "joinPre", "pre1", "pre2", "Hooks", "MCE_ATTR_RE", "each$d", "isEq$5", "isTableCell$4", "isChildOfInlineParent", "getContainer", "lastIdx", "wrap$2", "wrapWithSiblings", "matchName$1", "isColorFormatAndAnchor", "find$3", "removeNode$1", "rootBlockElm", "removeFormat", "compareNode", "stylesModified", "valueOut", "findFormatRoot", "formatRoot", "wrapAndSplit", "lastClone", "firstClone", "formatRootParent", "remove$6", "splitToFormatRoot", "isRemoveBookmarkNode", "lastContentEditable", "removeRngStyle", "commonAncestorContainer", "RemoveFormat", "each$e", "isElementNode", "findElementSibling", "mergeSiblingsNodes", "tmpSibling", "elementUtils", "processChildElements", "hasStyle", "applyStyle", "unwrapEmptySpan", "processUnderlineAndColor", "textDecoration", "mergeUnderlineAndColor", "mergeBackgroundColorAndFontSize", "mergeSubSup", "mergeSiblings", "clearChildStyles", "mergeWithChildren", "mergeWithParents", "MergeFormats", "each$f", "isElementNode$1", "applyFormat", "isCollapsed", "setElementFormat", "fmt", "styleVal", "applyNodeStyle", "found", "applyRngStyle", "nodeSpecific", "wrapElm", "currentWrapElm", "parentName", "childCount", "getChildCount", "getChildElementNode", "mergeStyles", "curSelNode", "ApplyFormat", "each$g", "setup$5", "formatChangeData", "currentFormats", "matchedFormats", "addListeners", "formats", "formatChangeItems", "formatChanged", "formatChangeState", "FormatChanged", "get$5", "DefaultFormats", "FormatRegistry", "unregister", "each$h", "parsedSelectorToHtml", "ancestry", "createElement", "sItem", "getRequiredParent", "elmRule", "parentsRequired", "wrapInHtml", "parentCandidate", "parentRequired", "ancestorName", "siblingElm", "selectorToHtml", "parseSelector", "parseSelectorItem", "tagName", "$0", "$3", "$4", "getCssText", "previewFrag", "previewElm", "previewCss", "parentFontSize", "previewStyles", "removeVars", "numValue", "Preview", "toggle", "ToggleFormat", "setup$6", "FormatShortcuts", "Formatter", "hasOwnProperty$2", "shallow$1", "baseMerge", "merger", "objects", "curObject", "htmlParser", "internalName", "hasChildren", "trimTrailingBr", "brNode1", "brNode2", "DomSerializerFilters", "preProcess", "impl", "oldDoc", "shouldFireEvent", "DomSerializerPreProcess", "removeAttrs", "addFontToSpansFilter", "domParser", "face", "addStrikeToSpanFilter", "addFilters", "register$1", "LegacyFilter", "whiteSpaceRegExp$3", "typeLookup", "walk$2", "Node$1", "selfAttrs", "selfAttr", "cloneAttrs", "refNode", "paddEmptyNode", "brPreferred", "isPaddedWithNbsp", "hasOnlyChild", "isPadded", "isEmpty$2", "whitespaceElements", "isLineBreakNode", "register$2", "prevName", "whiteSpaceElements", "appendRel", "rel", "addNoOpener", "newRel", "classValue", "validClassesMap", "valid", "makeMap$4", "each$i", "explode$3", "extend$3", "DomParser", "nodeFilters", "attributeFilters", "matchedNodes", "matchedAttributes", "fixInvalidChildren", "newParent", "currentNode", "childNode", "nonSplitableElements", "textBlockElements", "filterNode", "addNodeFilter", "getNodeFilters", "addAttributeFilter", "getAttributeFilters", "fi", "fl", "invalidChildren", "isInWhiteSpacePreservedElement", "rootBlockName", "startWhiteSpaceRegExp", "endWhiteSpaceRegExp", "allWhiteSpaceRegExp", "isAllWhiteSpaceRegExp", "createNode", "removeWhitespaceBefore", "textNodeNext", "textVal", "cloneAndExcludeBlocks", "attrFiltersLen", "addTempAttr", "postProcess$1", "outArgs", "getHtmlFromNode", "parseHtml", "serializeNode", "htmlSerializer", "toHtml", "DomSerializer", "rules", "DomSerializer$1", "domSerializer", "BookmarkManager", "BookmarkManager$1", "isContentEditableFalse$a", "isContentEditableTrue$5", "getContentEditableRoot$2", "ControlSelection", "selectedElm", "selectedElmGhost", "resizeHelper", "resizeHandles", "selectedHandle", "startX", "startY", "selectedElmX", "selectedElmY", "startW", "startH", "ratio", "resizeStarted", "editableDoc", "abs", "startScrollWidth", "startScrollHeight", "isImage", "isEventOnImageOutsideRange", "contextMenuSelectImage", "getResizeTarget", "isResizable", "resizeGhostElement", "proportional", "resizeHelperX", "resizeHelperY", "endGhostResize", "setSizeProp", "showResizeRect", "targetWidth", "targetHeight", "hideResizeRect", "unbindResizeHandleEvents", "handleElm", "startDrag", "updateResizeRect", "controlElm", "isChildOrEqual", "disableGeckoResize", "isWithinContentEditableFalse", "delayedSelect", "throttledUpdateResizeRect", "hasCeProperty", "findParent$1", "findClosestIeRange", "rects", "moveOutOfContentEditableFalse", "parentElement", "fromPoint$1", "pointDoc", "CaretRangeFromPoint", "processRanges", "EventProcessRanges", "fromElements", "tableModel", "tableRow", "cellPosition", "getSpan", "td", "fillout", "tr", "rowspan", "colspan", "rows", "y2", "x2", "cellExists", "skipCellsX", "getWidth", "row", "findElementPos", "extractRows", "sx", "sy", "ey", "newRows", "subTable", "createDomTable", "tableElement", "tableBody", "modelRowsToDomRows", "fromDom$1", "tableElm", "toDom", "subsection", "endElement", "SimpleTableModel", "findParentListContainer", "getFullySelectedListWrappers", "listCont", "wrap$3", "innerElm", "directListWrappers", "commonAnchorContainer", "getWrapElements", "wrapElements", "listWrappers", "allWrappers", "emptyFragment", "getFragmentFromRange", "getParentTable", "getTableFragment", "selectedTableCells", "firstCell", "lastCell", "fullTableModel", "sectionedTableModel", "getSelectionFragment", "read$4", "FragmentReader", "getTextContent", "bin", "getHtmlContent", "tmpElm", "getContent", "GetSelectionContent", "setupArgs", "cleanContent", "setContent", "contentArgs", "anyRng", "SetSelectionContent", "getEndpointElement", "real", "getStart$2", "getEnd", "skipEmptyTextNodes", "forwards", "orig", "getNode$1", "getSelectedBlocks", "endElm", "selectedBlocks", "select$1", "each$j", "isNativeIeSelection", "isAttachedToDom", "isValidRange", "Selection$1", "bookmarkManager", "controlSelection", "selectedRange", "explicitRange", "selectorChangedData", "setCursorLocation", "setRng", "getEnd$1", "getSel", "tryCompareBoundaryPoints", "how", "sourceRange", "destinationRange", "ieRange", "setNode", "getSelectedBlocks$1", "isForward", "anchorRange", "focusRange", "selectorChanged", "currentSelectors", "matchedSelectors", "getScrollContainer", "placeCaretAt", "BreakType", "flip", "positions", "walk$3", "getBreakType", "currentPos", "getPositionsUntil", "breakType", "getAdjacentLinePositions", "getPositionsUntilBreak", "findClosestHorizontalPositionFromPoint", "lastRect", "newRect", "lastDist", "newDist", "findClosestHorizontalPosition", "targetRect", "getPositionsUntilPreviousLine", "getPositionsUntilNextLine", "isAtFirstLine", "isAtLastLine", "getPositionsAbove", "getPositionsBelow", "getFirstLinePositions", "getLastLinePositions", "isContentEditableFalse$b", "getSelectedNode$1", "moveToCeFalseHorizontally", "rangeIsInContainerBlock", "moveToCeFalseVertically", "walkerFn", "linePositions", "nextLinePositions", "closestNextLineRect", "caretClientRect", "dist1", "dist2", "contentEditableFalseNode", "caretPositions", "createTextBlock", "textBlock", "exitPreBlock", "newBlock", "getHorizontalRange", "newRange", "getVerticalRange", "down", "moveH", "moveV", "isCefPosition", "moveToLineEndPoint", "deflate", "getCorners", "getYAxisValue", "tds", "findClosestCorner", "corners", "newCorner", "oldCorner", "oldDist", "getClosestCell$1", "isTargetCorner", "corner", "getBottomValue", "getTopValue", "isAbove$1", "isBelow$1", "getClosestCellAbove", "getClosestCellBelow", "findClosestPositionInAboveCell", "findClosestPositionInBelowCell", "hasNextBreak", "lineInfo", "breakPos", "startsWithWrapBreak", "startsWithBrBreak", "isAtTableCellLine", "isAtFirstTableCellLine", "isAtLastTableCellLine", "isCaretAtStartOrEndOfTable", "navigateHorizontally", "getClosestAbovePosition", "getClosestBelowPosition", "getTable", "previous", "renderBlock", "navigateVertically", "moveH$1", "moveV$1", "isTarget", "rangeBefore", "insertElement", "insertBr", "insertBlock$1", "insertEmptyLine", "getClosestTargetBlock", "isAtFirstOrLastLine", "moveCaretToNewEmptyLine", "rootBlock", "rootBlockAttrs", "moveV$2", "defaultPatterns", "patterns", "matchesEvent", "match$1", "execute", "MatchKeys", "executeKeydownOverride", "setup$7", "ArrowKeys", "executeKeydownOverride$1", "executeKeyupOverride", "setup$8", "DeleteBackspaceKeys", "firstNonWhiteSpaceNodeSibling", "moveToCaretPosition", "lastNode", "tempElm", "getEditableRoot", "editableRoot", "getParentBlock$2", "getParentBlockName", "isListItemParentBlock", "NewLineUtils", "hasFirstChild", "hasParent$1", "isListBlock", "isNestedList", "getContainerBlock", "containerBlockParent", "isFirstOrLastLi", "insert$1", "createNewBlock", "newBlockName", "tmpRng", "InsertLi", "trimZwsp", "isEmptyAnchor", "isTableCell$5", "emptyBlock", "containerAndSiblingName", "canSplitBlock", "trimInlineElementsOnLeftSideOfBlock", "firstChilds", "normalizeZwspOffset", "includeZwspInRange", "trimLeadingLineBreaks", "getEditableRoot$1", "applyAttributes", "forcedRootBlockAttrs", "attrStyles", "currentStyles", "newStyles", "attrClassesOpt", "attrClasses", "currentClassesOpt", "currentClasses", "filteredClasses", "newClasses", "appliedAttrs", "remainingAttrs", "setForcedBlockAttrs", "forcedRootBlockName", "wrapSelfAndSiblingsInDefaultBlock", "addBrToBlockIfNeeded", "insert$2", "shiftKey", "parentBlockName", "clonedNode", "isCaretAtStartOrEndOfBlock", "normalizedOffset", "insertNewBlockAfter", "InsertBlock", "matchesSelector", "shouldInsertBr", "shouldBlockNewLine", "ContextSelectors", "newLineAction", "shouldBlockNewLine$1", "isBrMode", "requiredState", "brMode", "inListBlock", "inBlock", "inPreBlock", "inSummaryBlock", "shouldPutBrInPre$1", "inBrContext", "hasShiftKey", "canInsertIntoEditableRoot", "rootEditable", "match$2", "predicates", "isMatch", "getAction$1", "NewLineAction", "insert$3", "InsertNewLine", "endTypingLevel", "undoManager", "handleEnterKeyEvent", "setup$9", "EnterKey", "insertTextAtPosition", "insertNbspAtPosition", "insertSpaceAtPosition", "navigateIgnoreEmptyTextNodes", "getClosestBlock", "isAtBeforeAfterBlockBoundary", "isAtBlockBoundary", "isAtStartOfBlock", "isAtEndOfBlock", "isBeforeBlock", "isAfterBlock", "isInMiddleOfText", "getClosestBlock$1", "hasSpaceBefore", "hasSpaceAfter", "isPreValue", "isInPre", "isAtBeginningOfBody", "isAtEndOfBody", "isAtLineBoundary", "needsToHaveNbsp", "needsToBeNbspLeft", "needsToBeNbspRight", "afterPos", "needsToBeNbsp", "isNbspAt", "hasNbsp", "normalizeNbspMiddle", "chars", "normalizeNbspAtStart", "normalizeNbspInMiddleOfTextNode", "newText", "normalizeNbspAtEnd", "normalizeNbsps", "normalizeNbspsInEditor", "locationToCaretPosition", "insertInlineBoundarySpaceOrNbsp", "checkPos", "setSelection$1", "insertSpaceOrNbspAtSelection", "executeKeydownOverride$2", "setup$a", "SpaceKey", "findBlockCaretContainer", "removeIeControlRect", "handleBlockContainer", "setup$b", "CaretContainerInput", "browser$4", "setupIeInput", "keypressThrotter", "setup$c", "executeKeydownOverride$3", "setup$d", "HomeEndKeys", "setup$e", "KeyboardOverrides", "Quirks", "BACKSPACE", "isGecko", "isWebKit", "mceInternalUrlPrefix", "mceInternalDataType", "isDefaultPrevented", "setMceInternalContent", "selectionHtml", "internalContent", "getMceInternalContent", "insertClipboardContents", "internal", "emptyEditorWhenDeleting", "serializeRng", "contents", "allContentsSelected", "allRng", "allSelection", "selectAll", "inputMethodFocus", "removeHrOnBackspace", "previousSibling", "body_1", "selectControlElements", "removeStylesWhenDeletingAcrossBlockElements", "getAttributeApplyFunction", "template", "isSelectionAcrossElements", "disableBackspaceIntoATable", "removeBlockQuoteOnBackSpace", "setGeckoEditingOptions", "setOpts", "addBrAfterLastLinks", "fixLinks", "setDefaultBlockType", "showBrokenImageIcon", "restoreFocusOnKeyDown", "bodyHeight", "blockCmdArrowNavigation", "disableAutoUrlDetect", "tapLinksAndImages", "blockFormSubmitInsideEditor", "removeAppleInterchangeBrs", "ieInternalDragAndDrop", "refreshContentEditable", "isTextBlockNode", "normalizeSelection$1", "setup$f", "preventSummaryToggle", "filterDetails", "setup$g", "DOM$2", "appendStyle", "createParser", "autoFocus", "initEditor", "getStyleSheetLoader", "initContentBody", "skipWrite", "contentCssText", "bodyEl", "InitContentBody", "DOM$3", "relaxDomain", "ifr", "bodyUuid", "domainRelaxUrl", "normalizeHeight", "normalizedHeight", "createIframeElement", "title", "customAttrs", "iframe", "getIframeHtml", "bodyId", "bodyClass", "iframeHTML", "createIframe", "isDomainRelaxed", "init$1", "boxInfo", "InitIframe", "DOM$4", "initPlugin", "initializedPlugins", "Plugin", "pluginInstance", "trimLegacyPrefix", "initPlugins", "initTheme", "Theme", "renderFromLoadedTheme", "minHeight", "re", "renderFromThemeFunc", "createThemeFalseResult", "renderThemeFalseIframe", "iframeContainer", "renderThemeFalse", "renderThemeUi", "init$2", "Init", "DOM$5", "hasSkipLoadPrefix", "loadLanguage", "scriptLoader", "loadTheme", "themeUrl", "loadPlugins", "render", "form", "Render", "add$4", "sidebars", "Sidebar", "each$k", "trim$4", "queryParts", "DEFAULT_PORTS", "URI", "baseUri", "isProtocolRelative", "part", "tu", "uu", "noHost", "defaultPort", "breakPoint", "nb", "outPath", "noProtoHost", "loc", "defaultFormat", "trimEmptyContents", "emptyRegExp", "getContentFromBody", "getContent$1", "traverse", "findMatchingNodes", "nodeMatches", "attrMatches", "filter$3", "defaultFormat$1", "isTreeNode", "moveSelection", "setEditorHtml", "setContentString", "padd", "setContentTree", "setContent$1", "DOM$6", "restoreOriginalStyles", "safeDestroy", "clearDomReferences", "restoreForm", "remove$7", "_selectionOverrides", "editorUpload", "automatic", "DOM$7", "extend$4", "each$l", "resolve$4", "ie$2", "Editor", "editorManager", "lang_1", "i18n_1", "oldState", "isEditorUIElement", "FocusManager", "isManualNodeChange", "registerPageMouseUp", "throttledStore", "mouseUpPage", "registerFocusOut", "registerMouseUp", "registerEditorEvents", "register$3", "SelectionRestore", "documentFocusInHandler", "DOM$8", "isEditorUIElement$1", "isUIElement", "customSelector", "getActiveElement", "focusedEditor", "activeEditor", "unregisterDocumentEvents", "setup$h", "FocusController", "DOM$9", "explode$4", "each$m", "extend$5", "instanceCounter", "beforeUnloadDelegate", "EditorManager", "boundGlobalEvents", "legacyEditors", "isValidLegacyKey", "globalEventDelegate", "toggleGlobalEvents", "removeEditorFromList", "targetEditor", "oldEditors", "purgeDestroyedEditor", "baseURL", "documentBaseURL", "preInit", "srcScript", "pluginBaseUrls", "invalidInlineTargets", "isInvalidInlineTarget", "createId", "execCallback", "findTargets", "targets", "provideResults", "initEditors", "initCount", "createEditor", "existingEditor", "EditorManager$1", "RangeUtils", "normalizedRng", "RangeUtils$1", "min", "round$2", "relativePosition", "targetW", "targetH", "create$4", "findBestRelativePosition", "constrainRect", "rels", "inflate", "intersect", "cropRect", "x1", "y1", "clamp$1", "clampRect", "fixedSize", "underflowX1", "underflowY1", "overflowX2", "overflowY2", "cx2", "cy2", "fromClientRect", "Rect", "types", "Factory", "typeClass", "lctype", "controlType", "ControlType", "each$n", "extend$6", "extendClass", "initializing", "Class", "_super", "prototype", "member", "mixins", "mixin", "dummy", "createMethod", "name_1", "fieldName", "min$1", "max$1", "round$3", "Color", "rgb2hsv", "minRGB", "maxRGB", "hsvToRgb", "hue", "saturation", "brightness", "side", "chroma", "toRgb", "toHsv", "quote", "JSON$1", "JSONP", "XHR", "ready", "header", "extend$7", "JSONRequest", "ecb", "scb", "ty", "create$5", "storage", "localStorage", "LocalStorage", "tinymce", "publicApi", "Tinymce", "exportToModuleLoaders", "exportToWindowGlobal", "require_plugin", "__commonJSMin", "lists", "domGlobals", "global", "global$1", "global$2", "global$3", "global$4", "global$5", "global$6", "isTextNode", "node", "isListNode", "isOlUlNode", "isListItemNode", "isDlItemNode", "isTableCellNode", "isBr", "isFirstChild", "isLastChild", "isTextBlock", "editor", "isBlock", "blockElements", "isBogusBr", "dom", "isEmpty", "elm", "keepBookmarks", "empty", "isChildOfBody", "NodeType", "getNormalizedPoint", "container", "offset", "normalizeRange", "rng", "outRng", "rangeStart", "rangeEnd", "Range", "DOM", "createBookmark", "bookmark", "setupEndPoint", "start", "offsetNode", "resolveBookmark", "restoreEndPoint", "nodeIndex", "idx", "Bookmark", "noop", "constant", "value", "not", "f", "args", "_i", "never", "always", "none", "NONE", "eq", "o", "call", "thunk", "id", "n", "me", "s", "msg", "some", "a", "constant_a", "self", "bind", "v", "elementEq", "b", "from", "Option", "typeOf", "x", "t", "isType", "type", "isString", "isArray", "isBoolean", "isFunction", "isNumber", "nativeSlice", "nativePush", "map", "xs", "len", "r", "i", "each", "filter", "pred", "groupBy", "wasType", "group", "foldl", "acc", "find", "flatten", "output", "reverse", "head", "last", "from$1", "Global", "path", "parts", "scope", "resolve", "p", "unsafe", "name", "getOrDie", "actual", "Global$1", "htmlElement", "isPrototypeOf", "HTMLElement", "global$7", "getParentList", "selectionStart", "getClosestListRootElm", "isParentListSelected", "parentList", "selectedBlocks", "findSubLists", "getSelectedSubLists", "findParentListItemsNodes", "elms", "listItemsElms", "parentLi", "getSelectedListItems", "block", "getSelectedDlItems", "parentTableCell", "root", "findLastParentListNode", "parentLists", "getSelectedLists", "firstList", "subsequentLists", "getSelectedListRoots", "selectedLists", "getUniqueListRoots", "listRoots", "list", "isList", "Selection", "fromHtml", "html", "doc", "div", "fromDom", "fromTag", "tag", "fromText", "text", "fromPoint", "docElm", "y", "Element", "lift2", "oa", "ob", "fromElements", "elements", "fragment", "element", "Immutable", "fields", "values", "struct", "keys", "each$1", "obj", "props", "k", "compareDocumentPosition", "match", "documentPositionPreceding", "documentPositionContainedBy", "Node", "cached", "called", "firstMatch", "regexes", "find$1", "agent", "nu", "detect", "versionRegexes", "cleanedAgent", "unknown", "major", "minor", "Version", "edge", "chrome", "ie", "opera", "firefox", "safari", "isBrowser", "current", "unknown$1", "nu$1", "info", "version", "Browser", "windows", "ios", "android", "linux", "osx", "solaris", "freebsd", "isOS", "unknown$2", "nu$2", "OperatingSystem", "DeviceType", "os", "browser", "userAgent", "isiPad", "isiPhone", "isAndroid3", "isAndroid4", "isTablet", "isTouch", "isPhone", "iOSwebview", "detect$1", "candidates", "candidate", "detectBrowser", "browsers", "detectOs", "oses", "UaString", "contains", "str", "substr", "normalVersionRegex", "checkContains", "target", "uastring", "PlatformInfo", "detect$2", "deviceType", "PlatformDetection", "detect$3", "PlatformDetection$1", "ATTRIBUTE", "CDATA_SECTION", "COMMENT", "DOCUMENT", "DOCUMENT_TYPE", "DOCUMENT_FRAGMENT", "ELEMENT", "TEXT", "PROCESSING_INSTRUCTION", "ENTITY_REFERENCE", "ENTITY", "NOTATION", "ELEMENT$1", "is", "selector", "elem", "e1", "e2", "regularContains", "d1", "d2", "ieContains", "contains$1", "is$1", "parent", "children", "child", "index", "cs", "firstChild", "lastChild", "spot", "before", "marker", "parent$1", "append", "before$1", "append$1", "remove", "isType$1", "isElement", "rawSet", "key", "setAll", "attrs", "clone", "attr", "isSupported", "internalSet", "property", "set", "clone$1", "original", "isDeep", "deep", "shallowAs", "attributes", "mutate", "children$1", "joinSegment", "joinSegments", "segments", "appendSegments", "head$1", "tail", "createSegment", "listType", "segment", "createSegments", "entry", "size", "populateSegments", "normalizeSegment", "createItem", "content", "item", "appendItem", "writeShallow", "cast", "newCast", "writeDeep", "composeList", "entries", "isList$1", "el", "hasFirstChildList", "hasLastChildList", "isIndented", "isSelected", "cloneItemContent", "li", "createEntry", "depth", "indentEntry", "indentation", "hasOwnProperty", "shallow", "old", "baseMerge", "merger", "objects", "ret", "j", "curObject", "merge", "cloneListProperties", "source", "previousSiblingEntry", "normalizeEntries", "matchingEntry", "Cell", "initial", "get", "parseItem", "itemSelection", "selectionState", "selection", "currentItemEntry", "childListEntries", "parseList", "parser", "newDepth", "parseLists", "initialDepth", "global$8", "createTextBlock", "contentNode", "textBlock", "blockName", "hasContentNode", "nodeName", "outdentedComposer", "indentedComposer", "composeEntries", "groupIsIndented", "indentSelectedEntries", "getItemSelection", "selectedListItems", "end", "listsIndentation", "entrySets", "entrySet", "DOM$1", "splitList", "ul", "tmpRng", "bookmarks", "newBlock", "removeAndKeepBookmarks", "targetNode", "SplitList", "outdentDlItem", "dl", "indentDlItem", "dlIndentation", "dlItems", "selectionIndentation", "isHandled", "indentListSelection", "outdentListSelection", "flattenListSelection", "updateListStyle", "detail", "setAttribs", "updateListAttrs", "updateListWithDetails", "removeStyles", "styles", "style", "_a", "getEndPointNode", "getSelectedTextBlocks", "textBlocks", "startNode", "endNode", "siblings", "nextSibling", "hasCompatibleStyle", "sib", "sibStyle", "detailStyle", "applyList", "listName", "listItemName", "listBlock", "sibling", "mergeWithAdjacentLists", "isValidLists", "list1", "list2", "hasSameListStyle", "targetStyle", "hasSameClasses", "elm1", "elm2", "shouldMerge", "updateList", "newList", "toggleMultipleLists", "hasListStyleDetail", "toggleSingleList", "toggleList", "selectedSubLists", "ToggleList", "DOM$2", "normalizeList", "parentNode", "normalizeLists", "NormalizeLists", "findNextCaretContainer", "isForward", "nonEmptyBlocks", "walker", "hasOnlyOneBlockChild", "childNodes", "unwrapSingleBlockChild", "moveChildren", "fromElm", "toElm", "targetElm", "mergeLiElements", "listNode", "nestedLists", "mergeIntoEmptyLi", "fromLi", "toLi", "mergeForward", "mergeBackward", "resolvedBookmark", "backspaceDeleteFromListToListCaret", "selectionStartElm", "otherLi", "removeBlock", "parentBlock", "backspaceDeleteIntoListCaret", "otherLi_1", "backspaceDeleteCaret", "backspaceDeleteRange", "startListParent", "backspaceDelete", "setup", "e", "Delete", "Api", "queryListCommandState", "register", "cmd", "ui", "Commands", "shouldIndentOnTab", "Settings", "setupTabKey", "setup$1", "Keyboard", "findIndex", "predicate", "listState", "ctrl", "tableCellIndex", "parents", "register$1", "hasPlugin", "plugin", "plugins", "Buttons", "Plugin", "require_moment", "__commonJSMin", "exports", "module", "global", "factory", "hookCallback", "hooks", "setHookCallback", "callback", "isArray", "input", "isObject", "hasOwnProp", "a", "b", "isObjectEmpty", "obj", "k", "isUndefined", "isNumber", "isDate", "map", "arr", "fn", "res", "i", "arrLen", "extend", "createUTC", "format", "locale", "strict", "createLocalOrUTC", "defaultParsingFlags", "getParsingFlags", "m", "some", "fun", "t", "len", "isValid", "flags", "parsedParts", "isNowValid", "createInvalid", "momentProperties", "updateInProgress", "copyConfig", "to", "from", "prop", "val", "momentPropertiesLen", "Moment", "config", "isMoment", "warn", "msg", "deprecate", "firstTime", "args", "arg", "key", "argLen", "deprecations", "deprecateSimple", "name", "isFunction", "set", "mergeConfigs", "parentConfig", "childConfig", "Locale", "keys", "defaultCalendar", "calendar", "mom", "now", "output", "zeroFill", "number", "targetLength", "forceSign", "absNumber", "zerosToFill", "sign", "formattingTokens", "localFormattingTokens", "formatFunctions", "formatTokenFunctions", "addFormatToken", "token", "padded", "ordinal", "func", "removeFormattingTokens", "makeFormatFunction", "array", "length", "formatMoment", "expandFormat", "replaceLongDateFormatTokens", "defaultLongDateFormat", "longDateFormat", "formatUpper", "tok", "defaultInvalidDate", "invalidDate", "defaultOrdinal", "defaultDayOfMonthOrdinalParse", "defaultRelativeTime", "relativeTime", "withoutSuffix", "string", "isFuture", "pastFuture", "diff", "aliases", "normalizeUnits", "units", "normalizeObjectUnits", "inputObject", "normalizedInput", "normalizedProp", "priorities", "getPrioritizedUnits", "unitsObj", "u", "match1", "match2", "match3", "match4", "match6", "match1to2", "match3to4", "match5to6", "match1to3", "match1to4", "match1to6", "matchUnsigned", "matchSigned", "matchOffset", "matchShortOffset", "matchTimestamp", "matchWord", "match1to2NoLeadingZero", "match1to2HasZero", "regexes", "addRegexToken", "regex", "strictRegex", "isStrict", "localeData", "getParseRegexForToken", "unescapeFormat", "s", "regexEscape", "matched", "p1", "p2", "p3", "p4", "absFloor", "toInt", "argumentForCoercion", "coercedNumber", "value", "tokens", "addParseToken", "tokenLen", "addWeekParseToken", "addTimeToArrayFromToken", "isLeapYear", "year", "YEAR", "MONTH", "DATE", "HOUR", "MINUTE", "SECOND", "MILLISECOND", "WEEK", "WEEKDAY", "y", "daysInYear", "getSetYear", "makeGetSet", "getIsLeapYear", "unit", "keepTime", "set$1", "get", "d", "isUTC", "month", "date", "stringGet", "stringSet", "prioritized", "prioritizedLen", "mod", "n", "x", "indexOf", "o", "daysInMonth", "modMonth", "defaultLocaleMonths", "defaultLocaleMonthsShort", "MONTHS_IN_FORMAT", "defaultMonthsShortRegex", "defaultMonthsRegex", "localeMonths", "localeMonthsShort", "handleStrictParse", "monthName", "ii", "llc", "localeMonthsParse", "setMonth", "getSetMonth", "getDaysInMonth", "monthsShortRegex", "computeMonthsParse", "monthsRegex", "cmpLenRev", "shortPieces", "longPieces", "mixedPieces", "shortP", "longP", "createDate", "h", "M", "ms", "createUTCDate", "firstWeekOffset", "dow", "doy", "fwd", "fwdlw", "dayOfYearFromWeeks", "week", "weekday", "localWeekday", "weekOffset", "dayOfYear", "resYear", "resDayOfYear", "weekOfYear", "resWeek", "weeksInYear", "weekOffsetNext", "localeWeek", "defaultLocaleWeek", "localeFirstDayOfWeek", "localeFirstDayOfYear", "getSetWeek", "getSetISOWeek", "parseWeekday", "parseIsoWeekday", "shiftWeekdays", "ws", "defaultLocaleWeekdays", "defaultLocaleWeekdaysShort", "defaultLocaleWeekdaysMin", "defaultWeekdaysRegex", "defaultWeekdaysShortRegex", "defaultWeekdaysMinRegex", "localeWeekdays", "weekdays", "localeWeekdaysShort", "localeWeekdaysMin", "handleStrictParse$1", "weekdayName", "localeWeekdaysParse", "getSetDayOfWeek", "day", "getSetLocaleDayOfWeek", "getSetISODayOfWeek", "weekdaysRegex", "computeWeekdaysParse", "weekdaysShortRegex", "weekdaysMinRegex", "minPieces", "minp", "shortp", "longp", "hFormat", "kFormat", "meridiem", "lowercase", "matchMeridiem", "kInput", "pos", "pos1", "pos2", "localeIsPM", "defaultLocaleMeridiemParse", "getSetHour", "localeMeridiem", "hours", "minutes", "isLower", "baseConfig", "locales", "localeFamilies", "globalLocale", "commonPrefix", "arr1", "arr2", "minl", "normalizeLocale", "chooseLocale", "names", "j", "next", "split", "loadLocale", "isLocaleNameSane", "oldLocale", "aliasedRequire", "__require", "getSetGlobalLocale", "values", "data", "getLocale", "defineLocale", "updateLocale", "tmpLocale", "listLocales", "checkOverflow", "overflow", "extendedIsoRegex", "basicIsoRegex", "tzRegex", "isoDates", "isoTimes", "aspNetJsonRegex", "rfc2822", "obsOffsets", "configFromISO", "l", "match", "allowTime", "dateFormat", "timeFormat", "tzFormat", "isoDatesLen", "isoTimesLen", "configFromStringAndFormat", "extractFromRFC2822Strings", "yearStr", "monthStr", "dayStr", "hourStr", "minuteStr", "secondStr", "result", "untruncateYear", "preprocessRFC2822", "checkWeekday", "weekdayStr", "parsedInput", "weekdayProvided", "weekdayActual", "calculateOffset", "obsOffset", "militaryOffset", "numOffset", "hm", "configFromRFC2822", "parsedArray", "configFromString", "defaults", "c", "currentDateArray", "nowValue", "configFromArray", "currentDate", "expectedWeekday", "yearToUse", "dayOfYearFromWeekInfo", "w", "weekYear", "temp", "weekdayOverflow", "curWeek", "createLocal", "skipped", "stringLength", "totalParsedInputLength", "era", "meridiemFixWrap", "hour", "isPm", "configFromStringAndArray", "tempConfig", "bestMoment", "scoreToBeat", "currentScore", "validFormatFound", "bestFormatIsValid", "configfLen", "configFromObject", "dayOrDate", "createFromConfig", "prepareConfig", "configFromInput", "prototypeMin", "other", "prototypeMax", "pickBy", "moments", "min", "max", "ordering", "isDurationValid", "unitHasDecimal", "orderLen", "isValid$1", "createInvalid$1", "createDuration", "Duration", "duration", "years", "quarters", "months", "weeks", "days", "seconds", "milliseconds", "isDuration", "absRound", "compareArrays", "array1", "array2", "dontConvert", "lengthDiff", "diffs", "offset", "separator", "offsetFromString", "chunkOffset", "matcher", "matches", "chunk", "parts", "cloneWithOffset", "model", "getDateOffset", "getSetOffset", "keepLocalTime", "keepMinutes", "localAdjust", "addSubtract", "getSetZone", "setOffsetToUTC", "setOffsetToLocal", "setOffsetToParsedOffset", "tZone", "hasAlignedHourOffset", "isDaylightSavingTime", "isDaylightSavingTimeShifted", "isLocal", "isUtcOffset", "isUtc", "aspNetRegex", "isoRegex", "ret", "diffRes", "parseIso", "momentsDifference", "inp", "positiveMomentsDifference", "base", "createAdder", "direction", "period", "dur", "tmp", "isAdding", "updateOffset", "add", "subtract", "isString", "isMomentInput", "isNumberOrStringArray", "isMomentInputObject", "objectTest", "propertyTest", "properties", "property", "propertyLen", "arrayTest", "dataTypeTest", "item", "isCalendarSpec", "getCalendarFormat", "myMoment", "calendar$1", "time", "formats", "sod", "clone", "isAfter", "localInput", "isBefore", "isBetween", "inclusivity", "localFrom", "localTo", "isSame", "inputMs", "isSameOrAfter", "isSameOrBefore", "asFloat", "that", "zoneDelta", "monthDiff", "wholeMonthDiff", "anchor", "anchor2", "adjust", "toString", "toISOString", "keepOffset", "utc", "inspect", "zone", "prefix", "datetime", "suffix", "inputString", "fromNow", "toNow", "newLocaleData", "lang", "MS_PER_SECOND", "MS_PER_MINUTE", "MS_PER_HOUR", "MS_PER_400_YEARS", "mod$1", "dividend", "divisor", "localStartOfDate", "utcStartOfDate", "startOf", "startOfDate", "endOf", "valueOf", "unix", "toDate", "toArray", "toObject", "toJSON", "isValid$2", "parsingFlags", "invalidAt", "creationData", "matchEraAbbr", "matchEraName", "matchEraNarrow", "matchEraYearOrdinal", "localeEras", "eras", "localeErasParse", "eraName", "abbr", "narrow", "localeErasConvertYear", "dir", "getEraName", "getEraNarrow", "getEraAbbr", "getEraYear", "erasNameRegex", "computeErasParse", "erasAbbrRegex", "erasNarrowRegex", "abbrPieces", "namePieces", "narrowPieces", "erasName", "erasAbbr", "erasNarrow", "addWeekYearFormatToken", "getter", "getSetWeekYear", "getSetWeekYearHelper", "getSetISOWeekYear", "getISOWeeksInYear", "getISOWeeksInISOWeekYear", "getWeeksInYear", "weekInfo", "getWeeksInWeekYear", "weeksTarget", "setWeekAll", "dayOfYearData", "getSetQuarter", "getSetDayOfMonth", "getSetDayOfYear", "getSetMinute", "getSetSecond", "getSetMillisecond", "parseMs", "getZoneAbbr", "getZoneName", "proto", "createUnix", "createInZone", "preParsePostFormat", "proto$1", "get$1", "index", "field", "setter", "listMonthsImpl", "out", "listWeekdaysImpl", "localeSorted", "shift", "listMonths", "listMonthsShort", "listWeekdays", "listWeekdaysShort", "listWeekdaysMin", "mathAbs", "abs", "addSubtract$1", "add$1", "subtract$1", "absCeil", "bubble", "monthsFromDays", "monthsToDays", "daysToMonths", "as", "makeAs", "alias", "asMilliseconds", "asSeconds", "asMinutes", "asHours", "asDays", "asWeeks", "asMonths", "asQuarters", "asYears", "valueOf$1", "clone$1", "get$2", "makeGetter", "round", "thresholds", "substituteTimeAgo", "relativeTime$1", "posNegDuration", "getSetRelativeTimeRounding", "roundingFunction", "getSetRelativeTimeThreshold", "threshold", "limit", "humanize", "argWithSuffix", "argThresholds", "withSuffix", "th", "abs$1", "toISOString$1", "total", "totalSign", "ymSign", "daysSign", "hmsSign", "proto$2", "require_fullcalendar", "__commonJSMin", "exports", "module", "root", "factory", "__WEBPACK_EXTERNAL_MODULE_0__", "__WEBPACK_EXTERNAL_MODULE_3__", "modules", "installedModules", "__webpack_require__", "moduleId", "name", "getter", "object", "property", "extendStatics", "d", "b", "p", "__", "moment", "$", "compensateScroll", "rowEls", "scrollbarWidths", "uncompensateScroll", "disableCursor", "enableCursor", "distributeHeight", "els", "availableHeight", "shouldRedistribute", "minOffset1", "minOffset2", "flexEls", "flexOffsets", "flexHeights", "usedHeight", "undistributeHeight", "i", "el", "minOffset", "naturalOffset", "naturalHeight", "newHeight", "matchCellWidths", "maxInnerWidth", "innerEl", "innerWidth", "subtractInnerElHeight", "outerEl", "both", "diff", "getScrollParent", "position", "scrollParent", "parent", "getOuterRect", "origin", "offset", "left", "top", "getClientRect", "getScrollbarWidths", "getCssFloat", "getContentRect", "leftRightWidth", "bottomWidth", "widths", "sanitizeScrollbarWidth", "getIsLeftRtlScrollbars", "width", "_isLeftRtlScrollbars", "computeIsLeftRtlScrollbars", "res", "prop", "isPrimaryMouseButton", "ev", "getEvX", "touches", "getEvY", "getEvIsTouch", "preventSelection", "preventDefault", "allowSelection", "intersectRects", "rect1", "rect2", "constrainPoint", "point", "rect", "getRectCenter", "diffPoints", "point1", "point2", "parseFieldSpecs", "input", "specs", "tokens", "token", "compareByFieldSpecs", "obj1", "obj2", "fieldSpecs", "obj1fallback", "obj2fallback", "cmp", "compareByFieldSpec", "fieldSpec", "val1", "val2", "flexibleCompare", "a", "diffDayTime", "diffDay", "diffByUnit", "unit", "computeGreatestUnit", "start", "end", "val", "computeRangeAs", "isInt", "computeDurationGreatestUnit", "duration", "durationInput", "divideRangeByDuration", "dur", "months", "durationHasTime", "divideDurationByDuration", "dur1", "dur2", "months1", "months2", "multiplyDuration", "n", "isNativeDate", "isTimeString", "str", "log", "args", "_i", "console", "warn", "hasOwnPropMethod", "mergeProps", "propObjs", "complexProps", "dest", "complexObjs", "j", "props", "copyOwnProps", "src", "name_1", "hasOwnProp", "obj", "applyAll", "functions", "thisObj", "ret", "removeMatching", "array", "testFunc", "removeCnt", "removeExact", "exactVal", "isArraysEqual", "a0", "a1", "len", "firstDefined", "htmlEscape", "s", "stripHtmlEntities", "text", "cssToStr", "cssProps", "statements", "attrsToStr", "attrs", "parts", "capitaliseFirstLetter", "compareNumbers", "proxy", "methodName", "method", "debounce", "func", "wait", "immediate", "timeout", "context", "timestamp", "result", "later", "last", "callNow", "moment_ext_1", "UnzonedRange", "startInput", "endInput", "ranges", "constraintRange", "invertedRanges", "startMs", "dateRange", "compareUnzonedRanges", "otherRange", "endMs", "newRange", "innerRange", "date", "ms", "range", "range1", "range2", "tslib_1", "ParsableModelMixin_1", "Class_1", "EventDefParser_1", "EventSource", "_super", "calendar", "_this", "rawInput", "source", "id", "timezone", "eventDefId", "otherSource", "rawEventDefs", "eventDef", "eventDefs", "calendarTransform", "sourceTransform", "rawProps", "Mixin_1", "guid", "ListenerMixin", "other", "arg", "callback", "eventName", "EventDef_1", "EventInstance_1", "EventDateProfile_1", "SingleEventDef", "def", "dateProfile", "superSuccess", "util_1", "ambigDateOfMonthRegex", "ambigTimeOrZoneRegex", "newMomentProto", "oldMomentProto", "momentProperties", "oldMomentFormat", "mom", "formatStr", "momentExt", "makeMoment", "parseAsUTC", "parseZone", "isSingleString", "isAmbigTime", "isAmbigZone", "ambigMatch", "weekCalc", "time", "dayHours", "wasAmbigTime", "keepLocalTime", "tzo", "ComponentFootprint", "unzonedRange", "isAllDay", "EmitterMixin", "types", "handler", "intercept", "extra", "type", "hash", "Interaction", "component", "Mixin", "destClass", "UnzonedRange_1", "EventDateProfile", "forcedAllDay", "forceEventDuration", "propName", "DragListener_1", "HitDragListener", "options", "subjectEl", "subjectRect", "origPoint", "hit", "dx", "dy", "isHitsEqual", "isOrig", "isCancelled", "hit0", "hit1", "isHitPropsWithin", "subHit", "superHit", "date_formatting_1", "locale_1", "util_2", "EmitterMixin_1", "ListenerMixin_1", "Model_1", "Constraints_1", "DateProfileGenerator_1", "ComponentFootprint_1", "BusinessHourGenerator_1", "EventPeriod_1", "EventManager_1", "EventDefMutation_1", "EventRange_1", "RecurringEventDef_1", "SingleEventDef_1", "EventDefDateMutation_1", "EventSourceParser_1", "EventSource_1", "ThemeRegistry_1", "EventInstanceGroup_1", "ArrayEventSource_1", "FuncEventSource_1", "JsonFeedEventSource_1", "EventFootprint_1", "CoordCache_1", "Iterator_1", "HitDragListener_1", "MouseFollower_1", "Popover_1", "Promise_1", "TaskQueue_1", "RenderQueue_1", "Scroller_1", "Theme_1", "Component_1", "DateComponent_1", "InteractiveDateComponent_1", "Calendar_1", "View_1", "ViewRegistry_1", "DayTableMixin_1", "BusinessHourRenderer_1", "EventRenderer_1", "FillRenderer_1", "HelperRenderer_1", "ExternalDropping_1", "EventResizing_1", "EventPointing_1", "EventDragging_1", "DateSelecting_1", "DateClicking_1", "Interaction_1", "StandardInteractionsMixin_1", "AgendaView_1", "TimeGrid_1", "TimeGridEventRenderer_1", "TimeGridFillRenderer_1", "TimeGridHelperRenderer_1", "DayGrid_1", "DayGridEventRenderer_1", "DayGridFillRenderer_1", "DayGridHelperRenderer_1", "BasicView_1", "BasicViewDateProfileGenerator_1", "MonthView_1", "MonthViewDateProfileGenerator_1", "ListView_1", "ListEventPointing_1", "ListEventRenderer_1", "eventDefsToEventInstances", "eventInstances", "eventInstanceToEventRange", "eventInstance", "eventRangeToEventFootprint", "eventRange", "eventInstanceToUnzonedRange", "eventFootprintToComponentFootprint", "eventFootprint", "EventInstanceGroup", "slicedRange", "slicedEventRanges", "unzonedRanges", "ownerDef", "PromiseStub", "executor", "deferred", "promise", "attachImmediatelyResolvingThen", "attachImmediatelyRejectingThen", "onResolve", "onReject", "Theme", "optionsManager", "iconOverrideHash", "iconClassesCopy", "buttonName", "className", "prefix", "key", "customButtonProps", "exportHooks", "globalEmitter", "neededCount", "GlobalEmitter", "skipMouseIgnore", "defineView", "viewName", "viewConfig", "getViewConfig", "options_1", "dpComputableOptions", "dpOptions", "momComputableOptions", "momOptions", "fcOptions", "format", "instanceComputableOptions", "populateInstanceComputableOptions", "datepickerLocale", "localeCode", "dpLocaleCode", "jqDatePicker", "locale", "newFcOptions", "getMomentLocaleData", "complexOptions", "mergeOptions", "optionObjs", "EventFootprint", "componentFootprint", "Class", "members", "SubClass", "eventInput", "EventDef", "copy", "rendering", "EventSourceClass", "sourceClasses", "eventSource", "EventDefMutation", "largeUnit", "dateProps", "standardProps", "miscProps", "verbatimStandardProps", "dateMutation", "defMutation", "origDateProfile", "EventDefDateMutation", "dateProfile0", "dateProfile1", "clearEnd", "forceTimed", "forceAllDay", "dateDelta", "endDiff", "endDelta", "mutation", "subtractDates", "date1", "date0", "eventDateProfile", "shouldRezone", "startDelta", "Scroller", "overflowX", "overflowY", "height", "GlobalEmitter_1", "InteractiveDateComponent", "_view", "_options", "eventInteraction", "segEl", "seg", "view", "interaction", "isEditable", "isResizable", "eventInstanceGroup", "eventFootprints", "View", "viewSpec", "namespace", "actionType", "currentRangeUnit", "currentDateProfile", "newDateProfile", "eventsPayload", "businessHourGenerator", "update", "delay", "totalHeight", "isAuto", "isResize", "scroll", "queuedScroll", "eventMutation", "eventManager", "undoFunc", "singleEventDef", "isEvent", "isSticky", "ui", "resizeDelta", "footprint", "ignore", "dayEl", "hiddenDays", "isHiddenDayHash", "dayCnt", "inputUnzonedRange", "day", "inc", "isExclusive", "out", "deps", "EventRenderer", "fillRenderer", "displayEventTime", "displayEventEnd", "instanceGroup", "eventRanges", "bgRanges", "fgRanges", "segs", "disableResizing", "hasEventRenderHandlers", "html", "renderedSegs", "node", "isDraggable", "classes", "legacy", "custom", "displayEnd", "classNames", "objs", "seg1", "seg2", "f1", "f2", "cf1", "cf2", "r1", "r2", "formatDate", "englishMoment", "PART_SEPARATOR", "SPECIAL_TOKEN_MARKER", "MAYBE_MARKER", "MAYBE_REGEXP", "specialTokens", "largeTokenMap", "renderFakeFormatString", "getParsedFormatString", "formatRange", "date2", "separator", "isRTL", "localeData", "renderParsedFormat", "parsedFormat", "sameUnits", "unzonedDate1", "unzonedDate2", "renderedParts1", "renderFakeFormatStringParts", "renderedParts2", "leftI", "leftStr", "rightI", "rightStr", "middleI", "middleStr1", "middleStr2", "middleStr", "processMaybeMarkers", "parsedFormatStrCache", "parseFormatString", "chunks", "chunkFormatString", "buildFakeFormatString", "buildSameUnits", "match", "chunker", "splitStringLiteral", "chunk", "units", "tokenInfo", "fakeFormatString", "fakeRender", "fakeParts", "fakePart", "m0", "m1", "queryMostGranularFormatUnit", "candidate", "best", "EventRange", "Model", "map", "newProps", "oldProps", "changeset", "names", "changedProps", "changedCnt", "depList", "startFunc", "stopFunc", "watcher", "queuedChangeCnt", "depCnt", "satisfyCnt", "values", "bindTuples", "isCallingStop", "onBeforeDepChange", "depName", "isOptional", "onDepChange", "bind", "ParsableModelMixin", "propDefs", "proto", "standardPropMap", "manualProps", "EventInstance", "RecurringEventDef", "unzonedDate", "unzonedEnd", "zonedDayStart", "instanceStart", "instanceEnd", "instances", "dowNumbers", "DateProfileGenerator", "prevDate", "nextDate", "direction", "forceToValid", "isDateAllDay", "validUnzonedRange", "minTime", "maxTime", "currentInfo", "isRangeAllDay", "renderUnzonedRange", "activeUnzonedRange", "isValid", "dayCount", "alignment", "dateIncrementInput", "dateIncrementDuration", "computeRes", "customAlignment", "runningCount", "visibleUnzonedRange", "currentUnzonedRange", "fallback", "ArrayEventSource", "StandardTheme_1", "JqueryUiTheme_1", "themeClassHash", "defineThemeSystem", "themeName", "themeClass", "getThemeSystemClass", "themeSetting", "CoordCache", "offsetParentEl", "lefts", "rights", "tops", "bottoms", "leftOffset", "topOffset", "leftIndex", "topIndex", "scrollParentEl", "DragListener", "extraOptions", "minDistance", "distanceSq", "initialEv", "scrollEl", "sensitivity", "bounds", "topCloseness", "bottomCloseness", "leftCloseness", "rightCloseness", "topVel", "leftVel", "frac", "DayTableMixin", "t", "dayIndex", "dayIndices", "dayDates", "daysPerRow", "firstDay", "rowCnt", "row", "col", "dayOffset", "normalRange", "rangeFirst", "rangeLast", "rowFirst", "rowLast", "segFirst", "segLast", "theme", "htmls", "colspan", "otherAttrs", "isDateValid", "innerHtml", "trEl", "introHtml", "BusinessHourRenderer", "FillRenderer", "css", "nodes", "HelperRenderer", "eventRenderer", "sourceSeg", "isTouch", "extraClassNames", "opacity", "dummyEvent", "dummyInstance", "EventPointing", "StandardInteractionsMixin", "DayGrid", "colCnt", "isRigid", "isDayNumberVisible", "weekCalcFirstDoW", "levelLimit", "rowStructs", "rowLevelLimit", "rowEl", "rowHeight", "trEls", "trHeight", "iterInnerHeights", "childNode", "rowStruct", "moreNodes", "levelSegs", "cellMatrix", "limitedNodes", "segsBelow", "totalSegsBelow", "colSegsBelow", "td", "rowspan", "segMoreNodes", "moreTd", "moreWrap", "moreLink", "emptyCellsUntil", "endCol", "hiddenSegs", "clickOption", "moreEl", "allSegs", "reslicedAllSegs", "reslicedHiddenSegs", "topEl", "title", "content", "segContainer", "dayDate", "dayStart", "dayEnd", "dayRange", "newSegs", "num", "opt", "startLevel", "segMatrix", "level", "BasicView", "subclass", "makeDayGridSubclass", "dayGridContainerEl", "dayGridEl", "eventLimit", "headRowEl", "scrollerHeight", "SuperClass", "weekStart", "BasicViewDateProfileGenerator", "Constraints", "_calendar", "peerEventInstances", "peerEventRanges", "peerEventFootprints", "constraintVal", "overlapVal", "eventAllowFunc", "selectAllowFunc", "subjectEventInstance", "constraintFootprints", "overlapEventFootprints", "isOverlapsAllowedByFunc", "isOverlapEventInstancesAllowed", "targetFootprint", "outerFootprint", "innerFootprint", "footprint0", "footprint1", "overlapFunc", "subjectLegacyInstance", "overlapEventInstance", "overlapEventDef", "BUSINESS_HOUR_EVENT_DEFAULTS", "BusinessHourGenerator", "rawComplexDef", "rawDefs", "requireDow", "defs", "rawDef", "fullRawDef", "EventPeriod", "sources", "request", "requestsByUid", "uid", "completedCnt", "eventDefUid", "eventDefsById", "isEmpty", "eventInstanceGroupsById", "matchingInstances", "currentEventInstance", "EventManager", "force", "doomedSource", "currentPeriod", "matchInputs", "matchingSources", "matchInput", "isSourcesEquivalent", "eventPeriod", "eventId", "eventDefMutation", "undoFuncs", "defCopy", "allInstances", "source0", "source1", "StandardTheme", "JqueryUiTheme", "FuncEventSource", "JsonFeedEventSource", "ajaxSettings", "onSuccess", "onError", "requestParams", "status", "xhr", "callbackRes", "statusText", "errorThrown", "startParam", "endParam", "timezoneParam", "customRequestParams", "params", "Iterator", "items", "results", "item", "MouseFollower", "sourceEl", "shouldRevert", "revertDuration", "complete", "sourceOffset", "Popover", "windowEl", "viewportEl", "viewportTop", "viewportLeft", "viewportOffset", "TaskQueue", "task", "RenderQueue", "waitsByNamespace", "taskFunc", "waitMs", "q", "newTask", "shouldAppend", "Component", "DateComponent", "child", "convertEventsPayloadToLegacyArray", "renderedHelper", "childrenByUid", "gotoOptions", "forceOff", "finalOptions", "noThemeHighlight", "today", "startDay", "endTimeMS", "endDay", "legacyEvents", "Toolbar_1", "OptionsManager_1", "ViewSpecManager_1", "Calendar", "overrides", "triggerInfo", "optHandler", "value", "newOptionHash", "viewType", "spec", "dateOrRange", "newDate", "defaultDateInput", "prevInfo", "nextInfo", "zonedDateInput", "delta", "anchorEl", "customAction", "opts", "widgetClass", "oldView", "newView", "currentView", "contentHeightInput", "heightInput", "header", "footer", "now", "todayInfo", "accumulator", "toolbar", "toolbarHeight", "zonedStartInput", "zonedEndInput", "weekNumberCalculation", "_week", "zonedDate", "timeAdjust", "adjustedZonedDate", "ignoreEnd", "rangeInput", "rawSources", "singleRawSource", "rawSource", "event", "allDay", "zonedStart", "eventInputs", "legacyQuery", "legacyInstances", "idMap", "filterLegacyEventInstances", "legacyEventInstances", "eventPropsArray", "eventProps", "sourceInput", "sourceMultiQuery", "sourceQuery", "legacyEventInstance", "ExternalDropping", "accept", "meta", "getDraggedElMeta", "dragListener", "isAllowed", "hitFootprint", "mutatedEventInstanceGroup", "startTime", "stick", "EventResizing", "eventPointing", "isStart", "isDragging", "resizeMutation", "origHit", "origHitFootprint", "startFootprint", "endFootprint", "origEventFootprint", "origRange", "EventDragging", "settings", "mouseFollower", "origFootprint", "DateSelecting", "selectionFootprint", "wholeFootprint", "DateClicking", "dayClickHit", "AGENDA_ALL_DAY_EVENT_LIMIT", "agendaTimeGridMethods", "agendaDayGridMethods", "AgendaView", "timeGrid", "dayGrid", "timeGridWrapEl", "timeGridEl", "noScrollRowEls", "scrollTime", "dayEventsPayload", "timedEventsPayload", "groups", "groupEventFootprintsByAllDay", "weekText", "timed", "AGENDA_STOCK_SUB_DURATIONS", "TimeGrid", "segRange", "slotDuration", "snapDuration", "labelInterval", "slotsPerLabel", "slotTime", "slotIterator", "slotDate", "isLabeled", "axisHtml", "cellHtml", "skeletonEl", "segsByCol", "containerEls", "startOfDayDate", "slatCoverage", "slatIndex", "slatRemainder", "eventMinHeight", "snapsPerSlot", "colCoordCache", "slatCoordCache", "colIndex", "slatTop", "slatHeight", "partial", "localSnapIndex", "snapIndex", "snapTop", "snapBottom", "TimeGridEventRenderer", "isResizableFromStart", "isResizableFromEnd", "skinCss", "timeText", "fullTimeText", "startTimeText", "zonedEnd", "levels", "level0", "buildSlotSegLevels", "computeForwardSlotSegs", "computeSlotSegPressures", "seriesBackwardPressure", "seriesBackwardCoord", "forwardSegs", "shouldOverlap", "backwardCoord", "forwardCoord", "right", "computeSlotSegCollisions", "k", "forwardPressure", "forwardSeg", "otherSegs", "isSlotSegCollision", "TimeGridHelperRenderer", "helperNodes", "TimeGridFillRenderer", "DayGridEventRenderer", "rowNode", "segRows", "rowSegs", "segLevels", "levelCnt", "tbody", "loneCellMatrix", "tr", "isDaySegCollision", "compareDaySegCols", "timeHtml", "titleHtml", "otherSeg", "DayGridHelperRenderer", "skeletonTopEl", "skeletonTop", "DayGridFillRenderer", "startCol", "MonthView", "MonthViewDateProfileGenerator", "ListView", "viewEnd", "dayRanges", "segsByDay", "daySegs", "tableEl", "tbodyEl", "mainFormat", "altFormat", "ListEventRenderer", "url", "bgColor", "ListEventPointing", "_element", "element", "singleRes", "Toolbar", "toolbarOptions", "newToolbarOptions", "sections", "viewSpecManager", "sectionEl", "buttonStr", "calendarCustomButtons", "calendarButtonTextOverrides", "calendarButtonText", "buttonGroupStr", "groupChildren", "isOnlyButtons", "groupEl", "buttonClick", "buttonIcon", "buttonText", "buttonInnerHtml", "buttonClasses", "buttonEl", "buttonAriaAttr", "OptionsManager", "optionCnt", "optionName", "localeDefaults", "dirDefaults", "rawOptions", "ViewSpecManager", "cache", "viewTypes", "requestedViewType", "viewOverrides", "specChain", "defaultsChain", "overridesChain", "queryButtonText", "Bootstrap3Theme_1", "Bootstrap4Theme_1", "Bootstrap3Theme", "Bootstrap4Theme", "require_nl", "__commonJSMin", "exports", "module", "e", "n", "t", "a", "r", "require_bootstrap_datetimepicker", "__commonJSMin", "exports", "factory", "$", "undefined", "find", "i", "n", "timeZoneAbbreviation", "abbreviation", "date", "formattedStr", "len", "matchedStrings", "ref", "str", "UTCDate", "Datetimepicker", "element", "options", "that", "dates", "DPGlobal", "e", "template", "selector", "render", "res", "currentYear", "endYear", "el", "ev", "d", "initialDate", "format", "formatted", "startDate", "endDate", "datesDisabled", "mThis", "value", "daysOfWeekDisabled", "minutesDisabled", "hoursDisabled", "index_highest", "index_current", "offset", "top", "left", "containerOffset", "bodyWidth", "fromArgs", "dowCnt", "html", "classes", "year", "month", "dayMonth", "hours", "startYear", "startMonth", "endMonth", "currentDate", "today", "prevMonth", "day", "nextMonth", "txt", "meridian", "meridianOld", "actual", "months", "yearCont", "old", "hour", "originalEvent", "delta", "mode", "target", "dir", "minutes", "seconds", "oldViewMode", "which", "new_date", "mag", "new_month", "test", "dateChanged", "newDate", "newViewDate", "viewMode", "newViewMode", "option", "args", "internal_return", "$this", "data", "type", "field", "separators", "parts", "language", "timezone", "dateUTC", "part_re", "part", "parsed", "setters_order", "setters_map", "v", "val", "filtered", "cnt", "m", "p", "s", "seps", "import_jquery", "jquery", "import_bootstrap", "import_rails_ujs", "import_jquery", "import_jquery", "$", "jQuery", "DataTable", "selector", "options", "sSelector", "oOpts", "traditional", "_Api", "_fnSettingsFromNode", "_ext", "data", "redraw", "api", "rows", "bRedraw", "settings", "scroll", "_fnScrollDraw", "nTr", "target", "callback", "remove", "complete", "sInput", "iColumn", "bRegex", "bSmart", "bShowGlobal", "bCaseInsensitive", "src", "col", "type", "iRow", "node", "nodeName", "cell", "mHtml", "sClass", "mAction", "iCol", "bShow", "aaSort", "nNode", "fnCallback", "mData", "mRow", "bAction", "_that", "emptyInit", "len", "fn", "_fnExternApiFunc", "o", "oInit", "_fnExtend", "i", "iLen", "j", "jLen", "k", "kLen", "sId", "bInitHandedOff", "defaults", "$this", "_fnLog", "_fnCompatOpts", "_fnCompatCols", "_fnCamelToHungarian", "allSettings", "s", "bRetrieve", "bDestroy", "oSettings", "_fnLanguageCompat", "_fnMap", "_fnCallbackReg", "_fnGetObjectDataFn", "_fnBrowserDetect", "oClasses", "tmp", "oLanguage", "json", "_fnCallbackFire", "_fnInitialise", "stripeClasses", "rowOne", "el", "anThs", "aoColumnsInit", "nThead", "_fnDetectHeader", "_fnGetUniqueThs", "_fnAddColumn", "_fnApplyColumnDefs", "oDef", "_fnColumnOptions", "a", "name", "sort", "filter", "features", "loadedInit", "sorting", "_fnSortingClasses", "aSort", "_fnSortFlatten", "sortedColumns", "val", "_fnSortAria", "_fnDataSource", "captions", "thead", "tbody", "tfoot", "_fnAddData", "_fnAddTr", "_fnSaveState", "_fnLoadState", "_api_register", "_api_registerPlural", "_re_dic", "_re_new_lines", "_re_html", "_re_date", "_re_escape_regex", "_re_formatted_numeric", "_empty", "d", "_intVal", "integer", "_numToDecimal", "num", "decimalPoint", "_fnEscapeRegex", "_isNumber", "formatted", "strType", "_isHtml", "_htmlNumeric", "html", "_stripHtml", "_pluck", "prop", "prop2", "out", "ien", "_pluck_order", "order", "_range", "start", "end", "_removeEmpty", "_areAllUnique", "sorted", "last", "_unique", "again", "_flatten", "_includes", "search", "arg", "freq", "frequency", "timer", "that", "now", "args", "source", "meta", "setData", "_fnSplitObjNotation", "b", "aLast", "arrayNotation", "funcNotation", "innerSrc", "__reArray", "__reFn", "key", "row", "t", "fetchData", "join", "_fnHungarianMap", "hungarian", "match", "newKey", "map", "user", "force", "hungarianKey", "lang", "defaultDecimal", "_addNumericSort", "zeroRecords", "decimal", "_fnCompatMap", "knew", "old", "init", "searchCols", "dataSort", "browser", "n", "outer", "inner", "_fnReduce", "inc", "value", "isSet", "nTh", "oDefaults", "oCol", "oOptions", "th", "origClass", "mDataSrc", "mRender", "attrTest", "rowData", "innerData", "_fnSetObjectDataFn", "bAsc", "bDesc", "_fnAdjustColumnSizing", "columns", "_fnCalculateColumnWidths", "_fnVisibleToColumnIndex", "iMatch", "aiVis", "_fnGetColumns", "_fnColumnIndexToVisible", "iPos", "_fnVisbleColumns", "vis", "sParam", "_fnColumnTypes", "types", "jen", "ken", "detectedType", "cache", "_fnGetCellData", "aoColDefs", "aoCols", "def", "aTargets", "aDataIn", "anTds", "oData", "nTd", "sThisType", "id", "_fnCreateTr", "trs", "_fnGetRowElements", "_fnNodeToDataIndex", "_fnNodeToColumnIndex", "rowIdx", "colIdx", "draw", "defaultContent", "cellData", "fomatters", "_fnSetCellData", "str", "_fnGetDataMaster", "_fnClearTable", "_fnDeleteIndex", "iTarget", "splice", "iTargetIndex", "_fnInvalidate", "cellWrite", "cells", "cols", "_fnRowAttributes", "tds", "td", "contents", "objectRead", "attr", "idx", "setter", "cellProcess", "rowNode", "nTrIn", "create", "tr", "_fnBuildHead", "column", "createHeader", "classes", "_fnSortAttachListener", "_fnRenderer", "_fnDrawHead", "aoSource", "bIncludeHidden", "nLocalTr", "aoLocal", "aApplied", "iColumns", "iRowspan", "iColspan", "_fnDraw", "ajaxComplete", "_fnStart", "aPreDraw", "_fnProcessingDisplay", "anRows", "iRowCount", "asStripeClasses", "iStripes", "oLang", "bServerSide", "aiDisplay", "iDisplayStart", "iDisplayEnd", "_fnAjaxUpdate", "iStart", "iEnd", "iDataIndex", "aoData", "nRow", "sStripe", "sZero", "body", "_fnReDraw", "holdPosition", "_fnSort", "_fnFilterComplete", "_fnAddOptionsHtml", "table", "holding", "insert", "aDom", "featureNode", "cOption", "nNewNode", "cNext", "sAttr", "aSplit", "_fnFeatureHtmlLength", "_fnFeatureHtmlFilter", "_fnFeatureHtmlProcessing", "_fnFeatureHtmlTable", "_fnFeatureHtmlInfo", "_fnFeatureHtmlPaginate", "aoFeatures", "aanFeatures", "aLayout", "nTrs", "nCell", "l", "iColShifted", "bUnique", "fnShiftCol", "nHeader", "aReturn", "iInitDisplayStart", "_fnBuildAjax", "rbracket", "ajaxData", "ajax", "instance", "status", "_fnAjaxDataSrc", "error", "newData", "baseAjax", "xhr", "thrown", "ret", "drawHold", "_fnAjaxParameters", "_fnAjaxUpdateDraw", "columnCount", "preSearch", "preColSearch", "dataProp", "columnSearch", "displayStart", "displayLength", "param", "legacy", "compat", "modern", "recordsTotal", "recordsFiltered", "_fnInitComplete", "write", "dataSrc", "tableId", "language", "previousSearch", "input", "searchFn", "event", "searchDelay", "jqFilter", "_fnThrottle", "e", "ev", "oInput", "iForce", "oPrevSearch", "aoPrevSearch", "fnSaveFilter", "oFilter", "fnRegex", "_fnFilter", "_fnFilterColumn", "_fnFilterCustom", "filters", "displayRows", "searchStr", "regex", "smart", "caseInsensitive", "display", "rpSearch", "_fnFilterCreateSearch", "prevSearch", "displayMaster", "invalidated", "filtered", "_fnFilterData", "word", "m", "__filter_div", "__filter_div_textContent", "filterData", "wasInvalidated", "_fnSearchToCamel", "obj", "_fnSearchToHung", "tid", "nodes", "_fnUpdateInfo", "max", "total", "_fnInfoMacros", "formatter", "all", "iAjaxStart", "deferLoading", "_fnStringToCss", "aData", "_fnLengthChange", "_fnLengthOverflow", "menu", "d2", "lengths", "select", "div", "plugin", "visRecords", "page", "pages", "buttons", "_fnPageChange", "action", "records", "changed", "show", "scrollX", "scrollY", "caption", "captionSide", "headerClone", "footerClone", "footer", "_div", "size", "scroller", "children", "scrollHead", "scrollBody", "scrollFoot", "scrollLeft", "scrollXInner", "barWidth", "divHeader", "divHeaderStyle", "divHeaderInner", "divHeaderInnerStyle", "divHeaderTable", "divBodyEl", "divBody", "divBodyStyle", "divFooter", "divFooterInner", "divFooterTable", "header", "tableEl", "tableStyle", "ie67", "dtHeaderCells", "headerTrgEls", "footerTrgEls", "headerSrcEls", "footerSrcEls", "headerCopy", "footerCopy", "headerWidths", "footerWidths", "headerContent", "footerContent", "correction", "sanityWidth", "zeroOut", "nSizer", "style", "scrollBarVis", "_fnApplyToChildren", "nToSize", "iOuterWidth", "bScrolling", "padding", "an1", "an2", "index", "nNode1", "nNode2", "__re_html_remove", "visibleColumns", "headerCells", "tableWidthAttr", "tableContainer", "userInputs", "columnIdx", "width", "outerWidth", "styleWidth", "sizes", "_fnConvertToWidth", "tmpTable", "_fnGetWidestNode", "holder", "border", "bounding", "bindResize", "widths", "parent", "els", "results", "_fnGetMaxLenString", "maxIdx", "aiOrig", "aoColumns", "aDataSort", "sType", "srcCol", "fixed", "fixedObj", "nestedSort", "add", "sDataType", "oExtSort", "oSort", "formatters", "sortCol", "_fnSortData", "x", "y", "test", "dataA", "dataB", "label", "nextSort", "oAria", "asSorting", "sTitle", "_fnSortListener", "append", "nextSortIdx", "next", "overflow", "sortIdx", "attachTo", "_fnBindAction", "oldSort", "sortClass", "customSort", "customData", "state", "loaded", "_fnImplementState", "abStateLoad", "duration", "level", "msg", "tn", "ext", "mappedName", "extender", "breakRefs", "sStore", "sName", "callbackArr", "eventName", "renderer", "host", "__apiStruct", "__arrayProto", "_toSettings", "mixed", "jq", "tables", "context", "ctxSettings", "ctx", "flatten", "alwaysNew", "items", "item", "apiInst", "_selector_row_indexes", "apiSelector", "scope", "struct", "methodScoping", "struc", "heir", "method", "find", "pluralName", "singularName", "__table_selector", "paging", "__reload", "resetPaging", "url", "_selector_run", "selectFn", "opts", "res", "selectorType", "_selector_opts", "_selector_first", "inst", "displayFiltered", "displayFilteredMap", "__row_selector", "run", "sel", "selInt", "cellIdx", "rowObj", "r", "hash", "thatIdx", "loopRow", "loopCells", "newRows", "modRows", "namespace", "stateSaveParamsEvent", "destroyEvent", "idFn", "ids", "__details_add", "klass", "addRow", "created", "__details_state", "__details_remove", "__details_display", "__details_events", "drawEvent", "colvisEvent", "visible", "_emp", "_child_obj", "_child_mth", "__re_column_selector", "__columnData", "r1", "r2", "__column_selector", "names", "visColumns", "jqResult", "__setColumnVis", "insertBefore", "calc", "__cell_selector", "allCells", "fnSelector", "rowSelector", "columnSelector", "internalOpts", "cellsNoOpts", "dir", "set", "caseInsen", "module", "root", "is", "version", "aThis", "aThat", "iThis", "iThat", "head", "foot", "jqRows", "jqTable", "jqTbody", "jqWrapper", "orig", "removedMethod", "arg1", "arg2", "arg3", "arg4", "token", "plural", "resolved", "toFormat", "paginate", "extPagination", "_numbers", "numbers", "half", "aria", "btnDisplay", "btnClass", "attach", "container", "button", "disabledClass", "clickHandler", "disabled", "tag", "activeEl", "parsed", "__numericReplace", "decimalPlace", "re1", "re2", "ts", "__htmlEscapeEntities", "__mld", "dt", "momentFn", "luxonFn", "dateFn", "__mlWarning", "__mldObj", "format", "locale", "__mlHelper", "localeString", "from", "to", "typeName", "local", "__thousands", "__decimal", "thousands", "precision", "prefix", "postfix", "negative", "flo", "intPart", "floatPart", "jquery_dataTables_default", "$", "jQuery", "jquery_dataTables_default", "settings", "host", "idx", "buttons", "page", "pages", "api", "classes", "lang", "aria", "btnDisplay", "btnClass", "attach", "container", "i", "ien", "node", "button", "clickHandler", "e", "disabled", "activeEl", "dataTables_bootstrap4_default", "dataTables_bootstrap4_default", "box", "import_tinymce", "modern", "domGlobals", "global", "global$1", "global$2", "isBrandingEnabled", "editor", "hasMenubar", "getMenubar", "hasStatusbar", "getToolbarSize", "isReadOnly", "getFixedToolbarContainer", "getInlineToolbarPositionHandler", "getMenu", "getRemovedMenuItems", "getMinWidth", "getMinHeight", "getMaxWidth", "getMaxHeight", "isSkinDisabled", "isInline", "getResize", "resize", "getSkinUrl", "settings", "skin", "skinUrl", "skinName", "getIndexedToolbars", "defaultToolbar", "toolbars", "i", "toolbar", "mainToolbar", "getToolbars", "global$3", "global$4", "global$5", "fireSkinLoaded", "fireResizeEditor", "fireBeforeRenderUI", "Events", "focus", "panel", "type", "item", "addKeys", "A11y", "global$6", "global$7", "noop", "constant", "value", "never", "always", "none", "NONE", "eq", "o", "call", "thunk", "id", "n", "me", "s", "msg", "some", "a", "constant_a", "self", "bind", "f", "v", "elementEq", "b", "from", "Option", "getUiContainerDelta", "ctrl", "uiContainer", "getUiContainer", "containerPos", "dx", "dy", "setUiContainer", "inheritUiContainer", "fromCtrl", "toCtrl", "UiContainer", "createToolbar", "items", "size", "toolbarItems", "buttonGroup", "itemName", "bindSelectorChanged", "selection", "state", "createToolbars", "addToolbar", "Toolbar", "DOM", "toClientRect", "geomRect", "hideAllFloatingPanels", "movePanelTo", "pos", "togglePositionClass", "relPos", "predicate", "cls", "userConstrain", "handler", "x", "y", "elementRect", "contentAreaRect", "panelRect", "addContextualToolbars", "scrollContainer", "getContextToolbars", "getElementRect", "elm", "targetRect", "root", "reposition", "match", "shouldShow", "relRect", "testPositions", "smallElementWidthThreshold", "delta", "clientRect", "pos1", "pos2", "repositionHandler", "show", "execute", "findFrontMostMatch", "bindScrollEvent", "reposition_1", "uiContainer_1", "showContextToolbar", "hideAllContextToolbars", "targetElm", "parentsAndSelf", "e", "ContextToolbars", "typeOf", "t", "isType", "isArray", "isFunction", "isNumber", "nativeSlice", "nativeIndexOf", "nativePush", "rawIndexOf", "ts", "indexOf", "xs", "r", "exists", "pred", "len", "map", "each", "filter", "foldl", "acc", "find", "findIndex", "flatten", "from$1", "defaultMenus", "delimiterMenuNamePair", "createMenuNameItemPair", "name", "menuItem", "hasItemName", "namedMenuItems", "namedMenuItem", "isSeparator", "cleanupMenu", "removedMenuItems", "menuItemsPass1", "menuItemsPass2", "createMenu", "editorMenuItems", "menus", "context", "menuButton", "menu", "isUserDefined", "getDefaultMenubar", "defaultMenuBar", "createMenuButtons", "menuButtons", "menubar", "enabledMenuNames", "menuItems", "Menubar", "DOM$1", "getSize", "resizeTo", "width", "height", "containerElm", "iframeElm", "containerSize", "iframeSize", "resizeBy", "dw", "dh", "Resize", "global$8", "api", "trigger", "sidebar", "callbackName", "callback", "hidePanels", "container", "sidebars", "deactivateButtons", "findSidebar", "showPanel", "btnCtrl", "isModernBrowser", "hasSidebar", "createSidebar", "buttons", "Sidebar", "fireSkinLoaded$1", "done", "SkinLoaded", "DOM$2", "switchMode", "editArea", "border", "editAreaContainer", "render", "theme", "args", "resizeHandleCtrl", "startSize", "linkHtml", "html", "brandingLabel", "Iframe", "global$9", "count", "funcs", "attrs", "children", "child", "rect", "win", "target", "scope", "isStatic", "isFixed", "calculateRelativePosition", "rel", "ctrlElm", "selfW", "selfH", "targetW", "targetH", "viewport", "getWindowViewPort", "getUiContainerViewPort", "customUiContainer", "w", "h", "getViewPortRect", "Movable", "rels", "viewPortRect", "constrain", "max", "layoutRect", "global$a", "global$b", "BoxUtils", "radix", "prefix", "getStyle", "defaultView", "computedStyle", "getSide", "val", "noop$1", "ClassList", "onchange", "curState", "unique", "array", "uniqueItems", "expression", "chunker", "whiteSpace", "Collection", "Selector", "selector", "compileNameFilter", "compileIdFilter", "compileClassesFilter", "classes", "compileAttrFilter", "cmp", "check", "compilePsuedoFilter", "notSelectors", "parseChunks", "index", "length", "compile", "filters", "direct", "parts", "add", "selectors", "extra", "matches", "control", "l", "si", "sl", "fi", "fl", "siblings", "collect", "Collection$1", "proto", "push", "slice", "Collection$2", "Binding", "model", "otherModel", "otherName", "bindings", "fromSelfToOther", "fromOtherToSelf", "global$c", "isNode", "node", "isEqual", "k", "checked", "ObservableObject", "data", "key", "oldValue", "dirtyCtrls", "animationFrameRequested", "ReflowQueue", "parent", "hasMouseWheelEventSupport", "hasWheelEventSupport", "classPrefix", "Control", "idCounter", "proto$1", "defaultClasses", "applyClasses", "lookup", "borderBox", "minWidth", "minHeight", "autoResize", "startMinWidth", "startMinHeight", "initialSize", "deltaW", "deltaH", "maxW", "maxH", "newRect", "curRect", "lastLayoutRect", "deltaWidth", "deltaHeight", "repaintControls", "style", "bodyStyle", "bodyElm", "borderW", "borderH", "lastRepaintRect", "round", "resolveCallbackName", "callbacks", "getEventDispatcher", "bubble", "parents", "parentControls", "suffix", "text", "translate", "newItems", "controls", "box", "parentEventsRoot", "bindPendingEvents", "parentCtrl", "align", "getOffset", "rootElm", "parentElm", "parentWidth", "parentHeight", "rootControl", "obj", "eventCtrl", "eventRootCtrl", "nativeEvents", "delegate", "mouseLeaveHandler", "mouseEnterHandler", "lastCtrl", "idx", "lastParents", "fixWheelEvent", "eventRootDelegates", "Control$1", "hasTabstopData", "KeyboardNavigation", "focusedElement", "focusedControl", "isElement", "getRole", "getParentRole", "role", "getAriaProp", "isTextInputElement", "tagName", "canFocus", "getFocusElements", "elements", "getNavigationRoot", "targetControl", "navigationRoot", "focusFirst", "focusElements", "moveFocusToIndex", "moveFocus", "dir", "left", "parentRole", "cancel", "right", "enter", "up", "down", "tab", "aria", "handleNonTabOrEscEvent", "selectorCache", "Container", "keyboard", "focusCtrl", "keyboardNav", "oldItem", "newItem", "ctrlItems", "before", "curItems", "beforeItems", "afterItems", "layout", "lastRect", "getDocumentSize", "doc", "documentElement", "body", "scrollWidth", "clientWidth", "offsetWidth", "scrollHeight", "clientHeight", "offsetHeight", "updateWithTouchData", "keys", "DragHelper", "$eventOverlay", "downButton", "start", "stop", "drag", "startX", "startY", "handleElement", "docSize", "handleElm", "cursor", "Scrollable", "margin", "repaintScroll", "hasScrollH", "hasScrollV", "repaintAxis", "axisName", "posName", "sizeName", "contentSizeName", "hasScroll", "ax", "scrollBarElm", "scrollThumbElm", "scrollSize", "ratio", "posNameLower", "sizeNameLower", "addScroll", "addScrollAxis", "deltaPosName", "scrollStart", "axisId", "bodyEl", "Panel", "innerHtml", "Resizable", "documentClickHandler", "documentScrollHandler", "windowResizeHandler", "visiblePanels", "zOrder", "hasModal", "isChildOf", "skipOrHidePanels", "clickCtrl", "bindDocumentClickHandler", "bindDocumentScrollHandler", "repositionPanel", "bindWindowResizeHandler", "docElm_1", "clientWidth_1", "clientHeight_1", "FloatPanel", "scrollY", "toggleFixedChildPanels", "fixed", "deltaY", "addRemove", "zIndex", "topModal", "modalBlockEl", "$modalBlockEl_1", "prefix_1", "removeVisiblePanel", "isFixed$1", "inlineToolbarContainer", "render$1", "fixedToolbarContainer", "deltaX", "bodyPos", "scrollContainerPos", "hide", "Inline", "Throbber", "inline", "timer", "time", "setup", "throbber", "ProgressState", "renderUI", "Render", "Tooltip", "Widget", "tooltip", "disable", "active", "Progress", "setValue", "updateLiveRegion", "ctx", "Notification", "icon", "closeButton", "progressBar", "notificationStyle", "NotificationManagerImpl", "getEditorContainer", "getContainerWidth", "prePositionNotifications", "notifications", "notification", "positionNotifications", "firstItem", "open", "closeCallback", "extendedArgs", "notif", "close", "getArgs", "windows", "oldMetaValue", "toggleFullScreenState", "noScaleMetaValue", "contentValue", "toggleBodyFullScreenClasses", "checkFullscreenWindows", "handleWindowResize", "lastSize_1", "Window", "closeClass", "statusbar", "needsRecalc", "headEl", "headerHtml", "footerHtml", "slowRendering", "startPos", "ifr", "MessageBox", "createButton", "status", "primary", "WindowManagerImpl", "params", "alert", "message", "choiceCallback", "confirm", "window", "getParams", "setParams", "get", "getNotificationManagerImpl", "getWindowManagerImpl", "ThemeApi", "Layout", "firstClass", "lastClass", "lastItem", "AbsoluteLayout", "Button", "btnElm", "btnStyle", "image", "textHtml", "ariaPressed", "$", "textCls", "setButtonText", "$span", "iconElm", "BrowseButton", "input", "files", "ButtonGroup", "Checkbox", "global$d", "ComboBox", "newValue", "statusMessage", "openElm", "lineHeight", "innerPadding", "inputElm", "openBtnHtml", "extraAttrs", "statusHtml", "term", "insert", "title", "statusIconElm", "focusIdx", "keyCode", "ColorBox", "PanelButton", "panelSettings", "rtlRels", "ltrRels", "isTop", "DOM$3", "ColorButton", "color", "onClickHandler", "global$e", "ColorPicker", "hsv", "hueRootElm", "huePointElm", "svRootElm", "svPointElm", "getPos", "event", "updateColor", "hueUpdate", "hue", "updateSaturationAndValue", "updateHue", "hueHtml", "stops", "getOldIeFallbackHtml", "gradientPrefix", "stopsList", "gradientCssText", "DropZone", "cfg", "toggleDragClass", "accept", "re", "file", "Path", "row", "ElementPath", "isHidden", "outParents", "FormItem", "Form", "formItem", "label", "recalcLabels", "maxLabelWidth", "labels", "labelGap", "labelCtrl", "labelWidth", "FieldSet", "unique$1", "generate", "date", "random", "fromHtml", "div", "fromDom", "fromTag", "tag", "fromText", "fromPoint", "docElm", "Element", "cached", "called", "_i", "ATTRIBUTE", "CDATA_SECTION", "COMMENT", "DOCUMENT", "DOCUMENT_TYPE", "DOCUMENT_FRAGMENT", "ELEMENT", "TEXT", "PROCESSING_INSTRUCTION", "ENTITY_REFERENCE", "ENTITY", "NOTATION", "Global", "path", "resolve", "p", "unsafe", "getOrDie", "actual", "Global$1", "Immutable", "fields", "values", "struct", "compareDocumentPosition", "documentPositionPreceding", "documentPositionContainedBy", "Node", "firstMatch", "regexes", "find$1", "agent", "group", "nu", "detect", "versionRegexes", "cleanedAgent", "unknown", "major", "minor", "Version", "edge", "chrome", "ie", "opera", "firefox", "safari", "isBrowser", "current", "unknown$1", "nu$1", "info", "version", "Browser", "windows$1", "ios", "android", "linux", "osx", "solaris", "freebsd", "isOS", "unknown$2", "nu$2", "OperatingSystem", "DeviceType", "os", "browser", "userAgent", "isiPad", "isiPhone", "isAndroid3", "isAndroid4", "isTablet", "isTouch", "isPhone", "iOSwebview", "detect$1", "candidates", "candidate", "detectBrowser", "browsers", "detectOs", "oses", "UaString", "contains", "str", "substr", "normalVersionRegex", "checkContains", "uastring", "PlatformInfo", "detect$2", "deviceType", "PlatformDetection", "detect$3", "PlatformDetection$1", "ELEMENT$1", "DOCUMENT$1", "bypassSelector", "dom", "all", "base", "one", "regularContains", "e1", "e2", "d1", "d2", "ieContains", "contains$1", "spot", "descendants", "trim", "hasContentEditableState", "isContentEditableTrue", "isContentEditableFalse", "create", "url", "level", "attach", "isChildOfContentEditableTrue", "select", "element", "getElementText", "getOrGenerateId", "isAnchor", "isValidAnchor", "isEditable", "isHeader", "isValidHeader", "getLevel", "headerTarget", "headerId", "anchorTarget", "anchorId", "anchorText", "getHeaderTargets", "elms", "getAnchorTargets", "getTargetElements", "hasTitle", "find$2", "LinkTargets", "getActiveEditor", "history", "HISTORY_LENGTH", "clearHistory", "toMenuItem", "toMenuItems", "targets", "staticMenuItem", "isUniqueUrl", "foundTarget", "getSetting", "editorSettings", "defaultValue", "createMenuItems", "fileType", "separator", "fromHistoryMenuItems", "historyItems", "uniqueHistory", "fromMenuItems", "filteredTargets", "anchorMenuItems", "topAnchor", "bottomAchor", "join", "bothEmpty", "filterByQuery", "addToHistory", "lowerCaseTerm", "result", "getTitle", "linkDetails", "setupAutoCompleteHandler", "autocomplete", "linkTargets", "statusToUiState", "setupLinkValidatorHandler", "validatorHandler", "validateUrl_1", "uiState", "FilePicker", "actionCallback", "fileBrowserCallback", "fileBrowserCallbackTypes", "meta", "FitLayout", "contLayoutRect", "paddingBox", "FlexLayout", "contPaddingBox", "contSettings", "pack", "spacing", "totalFlex", "availableSpace", "direction", "ctrlLayoutRect", "ctrlSettings", "flex", "maxSizeItems", "maxSize", "maxAlignEndPos", "minSizeName", "maxSizeName", "beforeName", "innerSizeName", "deltaSizeName", "alignAxisName", "alignInnerSizeName", "alignSizeName", "alignMinSizeName", "alignBeforeName", "alignAfterName", "alignDeltaSizeName", "alignContentSizeName", "min", "FlowLayout", "descendant", "toggleFormat", "fmt", "addFormatChangedListener", "changed", "postRenderFormatToggle", "register", "alignFormats", "defaultAlign", "alignMenuItems", "formatName", "Align", "getFirstFont", "fontFamily", "findMatchingValue", "font", "createFontNameListBoxChangeHandler", "createFormats", "formats", "getFontItems", "defaultFontsFormats", "fonts", "registerButtons", "register$1", "FontSelect", "number", "precision", "factor", "toPt", "fontSize", "findMatchingValue$1", "pt", "px", "createFontSizeListBoxChangeHandler", "getFontSizeItems", "defaultFontsizeFormats", "fontsizeFormats", "registerButtons$1", "register$2", "FontSizeSelect", "hideMenuObjects", "hideFormatMenuItems", "createFormatMenu", "newFormats", "defaultStyleFormats", "format", "createStylesMenu", "command", "registerMenuItems", "formatMenu", "registerButtons$2", "register$3", "Formats", "defaultBlocks", "createFormats$1", "createListBoxChangeHandler", "formatter", "lazyFormatSelectBoxItems", "blocks", "block", "buildMenuItems", "register$4", "FormatSelect", "createCustomMenuItems", "names", "nameList", "isSeparator$1", "trimMenuItems", "menuItems2", "createContextMenuItems", "outputMenuItems", "createInsertMenu", "insertButtonItems", "registerButtons$3", "register$5", "InsertButton", "registerFormatButtons", "registerCommandButtons", "registerCommandToggleButtons", "registerButtons$4", "registerMenuItems$1", "register$6", "SimpleControls", "toggleUndoRedoState", "checkState", "typeFn", "registerMenuItems$2", "registerButtons$5", "register$7", "UndoRedo", "toggleVisualAidState", "registerMenuItems$3", "register$8", "VisualAid", "setupEnvironment", "setupUiContainer", "setupRtlMode", "setupHideFloatPanels", "setup$1", "FormatControls", "GridLayout", "rows", "cols", "posX", "posY", "spacingH", "spacingV", "alignH", "alignV", "maxX", "maxY", "colWidths", "rowHeights", "ctrlMinWidth", "ctrlMinHeight", "availableWidth", "availableHeight", "reverseRows", "flexV", "flexWidths", "Iframe$1", "src", "InfoBox", "Label", "targetCtrl", "forName", "forId", "Toolbar$1", "MenuBar", "isChildOf$1", "MenuButton", "toggle", "menuLayoutRect", "selfBottom", "overCtrl", "hasVisibleSiblingMenu", "Menu", "factory", "hideThrobber", "ListBox", "selected", "selectedText", "lastItemCtrl", "setSelected", "menuValues", "valueExists", "activateMenuItemsByValue", "getSelectedItem", "selectedItem", "toggleTextStyle", "textStyle", "textElm", "MenuItem", "shortcut", "iconHtml", "convertShortcut", "replace", "escapeRegExp", "markMatches", "boldMatches", "Radio", "ResizeHandle", "createOptions", "options", "strOptions", "SelectBox", "minVal", "maxVal", "setAriaProp", "el", "updateSliderHandle", "maxHandlePos", "shortSizeName", "stylePosName", "styleValue", "handleEl", "Slider", "minValue", "maxValue", "screenCordName", "toFraction", "fromFraction", "handleKeyboard", "alter", "handleDrag", "startHandlePos", "handlePos", "Spacer", "SplitButton", "mainButtonElm", "menuButtonElm", "StackLayout", "TabPanel", "activeTabElm", "tabsHtml", "targetParent", "minW", "minH", "headH", "TextBox", "getApi", "appendTo", "ref", "registerToFactory", "Api", "Theme", "tinyMce", "tinymce", "tinyMceReport", "editor", "e", "import_fullcalendar", "import_nl", "import_bootstrap_datetimepicker", "$", "ev", "idleTime", "idleInterval", "timerIncrement", "e", "refreshMonitor", "e", "id", "ids", "action", "sys", "dia", "event", "data", "res", "status", "xhr", "vital_error", "vital", "vital_change", "vital_reset", "vit", "value", "msg", "mc_CareReport", "rid", "cid", "event", "data", "path", "destroypath", "Rails"]
}
