{"version":3,"sources":["webpack:///./node_modules/tinymce/themes/silver/theme.js","webpack:///./node_modules/tinymce/skins/content/dark/content.css","webpack:///./node_modules/tinymce/plugins/table/index.js","webpack:///./node_modules/tinymce/plugins/advlist/index.js","webpack:///./node_modules/tinymce/plugins/preview/index.js","webpack:///./node_modules/tinymce/plugins/help/index.js","webpack:///./node_modules/tinymce/themes/silver/index.js","webpack:///./node_modules/tinymce/plugins/visualblocks/index.js","webpack:///./node_modules/tinymce/plugins/anchor/plugin.js","webpack:///./node_modules/tinymce/plugins/charmap/plugin.js","webpack:///./node_modules/tinymce/skins/ui/oxide-dark/content.css","webpack:///./node_modules/tinymce/plugins/lists/plugin.js","webpack:///./node_modules/tinymce/plugins/autolink/plugin.js","webpack:///./node_modules/tinymce/plugins/searchreplace/plugin.js","webpack:///./node_modules/tinymce/plugins/autolink/index.js","webpack:///./node_modules/tinymce/plugins/fullscreen/index.js","webpack:///./node_modules/tinymce/plugins/media/plugin.js","webpack:///./node_modules/tinymce/skins/content/dark/content.min.css","webpack:///./node_modules/tinymce/plugins/media/index.js","webpack:///./node_modules/tinymce/plugins/help/plugin.js","webpack:///./node_modules/tinymce/plugins/link/index.js","webpack:///./node_modules/tinymce/skins/content/default/content.min.css?450c","webpack:///./node_modules/tinymce/skins/ui/oxide/content.min.css","webpack:///./src/Shared/TinymceSetup.ts","webpack:///./node_modules/tinymce/plugins/insertdatetime/index.js","webpack:///./node_modules/tinymce/plugins/visualblocks/plugin.js","webpack:///./node_modules/tinymce/skins/ui/oxide/content.mobile.min.css","webpack:///./node_modules/tinymce/plugins/image/index.js","webpack:///./node_modules/tinymce/skins/ui/oxide-dark/content.mobile.min.css","webpack:///./node_modules/tinymce/skins/ui/oxide-dark/content.min.css","webpack:///./node_modules/tinymce/plugins/searchreplace/index.js","webpack:///./node_modules/tinymce/skins/ui/oxide/content.inline.css","webpack:///./node_modules/tinymce/skins/ui/oxide-dark/skin.min.css","webpack:///./node_modules/tinymce/plugins/code/index.js","webpack:///./node_modules/tinymce/skins/ui/oxide/content.css","webpack:///./node_modules/tinymce/plugins/preview/plugin.js","webpack:///./node_modules/tinymce/skins/content/writer/content.min.css","webpack:///./node_modules/tinymce/skins/content/writer/content.css","webpack:///./node_modules/tinymce/skins sync ./node_modules/file-loader/dist/cjs.js","webpack:///./node_modules/tinymce/skins/content/default/content.css","webpack:///./node_modules/tinymce/skins/ui/oxide/skin.css","webpack:///./node_modules/tinymce/plugins/paste/plugin.js","webpack:///./node_modules/tinymce/skins/ui/oxide/skin.mobile.min.css","webpack:///./node_modules/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff","webpack:///./node_modules/tinymce/skins/ui/oxide-dark/content.inline.css","webpack:///./node_modules/tinymce/plugins/print/index.js","webpack:///./node_modules/tinymce/skins/ui/oxide-dark/skin.css","webpack:///./node_modules/tinymce/plugins/lists/index.js","webpack:///./node_modules/tinymce/skins/ui/oxide/skin.min.css","webpack:///./node_modules/tinymce/skins/ui/oxide-dark/skin.mobile.css","webpack:///./node_modules/tinymce/plugins/advlist/plugin.js","webpack:///./node_modules/tinymce/plugins/wordcount/index.js","webpack:///./node_modules/tinymce/plugins/table/plugin.js","webpack:///./node_modules/tinymce/skins/content/document/content.min.css","webpack:///./node_modules/tinymce/plugins/insertdatetime/plugin.js","webpack:///./node_modules/tinymce/skins/ui/oxide-dark/skin.mobile.min.css","webpack:///./node_modules/tinymce/skins/content/default/content.min.css","webpack:///./node_modules/tinymce/plugins/paste/index.js","webpack:///./node_modules/tinymce/skins/content/document/content.css","webpack:///./node_modules/tinymce/plugins/link/plugin.js","webpack:///./node_modules/tinymce/plugins/charmap/index.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/TinyMCE.js","webpack:///./node_modules/tinymce/skins/ui/oxide-dark/content.inline.min.css","webpack:///./node_modules/tinymce/skins/ui/oxide/skin.mobile.css","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/Utils.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/ScriptLoader.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/components/EditorPropTypes.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/components/Editor.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/main/ts/index.js","webpack:///./node_modules/tinymce/plugins/image/plugin.js","webpack:///./node_modules/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff","webpack:///./node_modules/tinymce/plugins/anchor/index.js","webpack:///./node_modules/tinymce/plugins/print/plugin.js","webpack:///./node_modules/tinymce/skins/ui/oxide/content.mobile.css","webpack:///./node_modules/tinymce/skins/ui/oxide-dark/content.mobile.css","webpack:///./node_modules/tinymce/skins/ui/oxide/content.inline.min.css","webpack:///./node_modules/tinymce/tinymce.js","webpack:///./node_modules/tinymce/skins/content/default/content.css?e89c","webpack:///./node_modules/tinymce/plugins/wordcount/plugin.js","webpack:///./node_modules/tinymce/plugins/code/plugin.js","webpack:///./node_modules/tinymce/skins/content/default sync ./node_modules/file-loader/dist/cjs.js","webpack:///./node_modules/tinymce/plugins/fullscreen/plugin.js"],"names":["domGlobals","noop","noarg","f","compose","fa","fb","args","_i","arguments","length","apply","constant","value","identity","x","curry","fn","initialArgs","restArgs","all","concat","not","die","msg","Error","never","always","global$1","tinymce","util","Tools","resolve","__assign","Object","assign","t","s","i","n","p","prototype","hasOwnProperty","call","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__spreadArrays","il","r","Array","k","a","j","jl","SimpleResultType","none","NONE","eq","o","isNone","thunk","id","me","fold","is","isSome","getOr","getOrThunk","getOrDie","getOrNull","getOrUndefined","undefined","or","orThunk","map","each","bind","exists","forall","filter","equals","equals_","toArray","toString","freeze","some","constant_a","self","v","elementEq","b","from","Option","opt","mapError","_","onValue","toOption","isValue","isError","error","message","String","onError","fromOption","err","Result","typeOf","isPrototypeOf","constructor","name","isType","type","isString","isObject","isArray","isBoolean","isFunction","isNumber","isArrayOf","pred","len","nativeSlice","slice","nativeIndexOf","nativePush","push","rawIndexOf","ts","xs","contains","range","num","chunk","array","size","eachr","partition","pass","fail","arr","foldr","acc","foldl","find","findIndex","flatten","reverse","difference","a1","a2","mapToObject","pure","sort","comparator","copy","head","last","from$1","findMap","keys","each$1","obj","props","map$1","tupleMap","tuple","mapToArray","find$1","values","get","key","has","hasNonNullableKey","generate","cases","constructors","adt","acase","count","keys$1","argLength","match","branches","branchKeys","join","allReqd","reqKey","target","log","label","console","params","Adt","hasOwnProperty$1","shallow","old","nu","deep","bothObjects","deepMerge","baseMerge","merger","objects","ret","curObject","merge","cached","called","res","stype","serror","svalue","partition$1","results","errors","val","map$2","Value","bind$1","bindError","toResult","fromResult","SimpleResult","strict","defaultedThunk","asOption","asDefaultedOptionThunk","mergeWithThunk","defaulted","fallback","mergeWith","base","exclude","fields","wrap","_a","wrapAll","keyvalues","kv","partition$2","bothErrors","firstError","secondError","bothValues","result","exclude$1","wrap$1","wrapAll$1","mergeValues","mergeErrors","consolidate","objs","partitions","mergeValues$1","mergeErrors$1","consolidateObj","consolidateArr","ResultCombine","formatObj","input","JSON","stringify","formatErrors","es","path","getErrorInfo","missingStrict","missingKey","missingBranch","branch","unsupportedFields","unsupported","custom","adt$1","field","state","strictAccess","fallbackAccess","fallbackThunk","optionAccess","optionDefaultedAccess","cExtractOne","strength","okey","presence","prop","bundle","av","extract","bundleAsOption","optValue","outcome","ov","baseThunk","instantiator","cExtract","valueThunk","getDelegate","value$1","validator","getSetKeys","objOfOnly","delegate","objOf","fieldNames","extra","fieldStrings","arrOf","oneOf","props_1","setOf","validateKeys","validatedKeys","validKeys","schema","vk","anyValue","arrOfObj","chooseFrom","ch","vp","choose","choice","chosen","_anyValue","arrOfObj$1","objFields","arrOfVal","valueThunkOf","valueOf","setOf$1","errs","asRaw","extraction","errInfo","formatError","asRawOrDie","chooseProcessor","choose$1","anyValue$1","typedValue","expectedType","actualType","number","string","boolean","functionProcessor","isPostMessageable","every","iter","callbackFn","next","done","postMessageable","validateEnum","strict$1","strictOf","strictNumber","strictString","strictStringEnum","strictBoolean","strictFunction","forbid","strictObjOf","objSchema","strictArrayOfObj","strictArrayOf","option","optionOf","optionNumber","optionString","optionFunction","optionArrayOf","optionObjOf","optionObjOfOnly","defaulted$1","defaultedOf","defaultedNumber","defaultedString","defaultedStringEnum","defaultedBoolean","defaultedFunction","defaultedPostMsg","defaultedArrayOf","defaultedObjOf","state$1","Cell","initial","set","clone","fromHtml","html","scope","doc","document","div","createElement","innerHTML","hasChildNodes","childNodes","fromDom","fromTag","tag","node","fromText","text","createTextNode","dom","fromPoint","docElm","y","elementFromPoint","Element","compareDocumentPosition","documentPositionPreceding","Node","DOCUMENT_POSITION_PRECEDING","documentPositionContainedBy","DOCUMENT_POSITION_CONTAINED_BY","firstMatch","regexes","test","find$2","agent","major","minor","group","Number","replace","nu$1","detect","versionRegexes","cleanedAgent","toLowerCase","unknown","Version","edge","chrome","ie","opera","firefox","safari","isBrowser","current","unknown$1","nu$2","version","info","isEdge","isChrome","isIE","isOpera","isFirefox","isSafari","Browser","windows","ios","android","linux","osx","solaris","freebsd","chromeos","isOS","unknown$2","nu$3","isWindows","isiOS","isAndroid","isOSX","isLinux","isSolaris","isFreeBSD","isChromeOS","OperatingSystem","DeviceType","os","browser","userAgent","mediaMatch","isiPad","isiPhone","isMobile","isTouch","isTablet","isPhone","iOSwebview","isDesktop","isWebView","detect$1","candidates","candidate","search","detectBrowser","browsers","detectOs","oses","UaString","checkRange","str","substr","start","contains$1","endsWith","suffix","trim","normalVersionRegex","checkContains","uastring","PlatformInfo","detect$2","deviceType","PlatformDetection","query","window","matchMedia","matches","platform","navigator","detect$3","DOCUMENT","ATTRIBUTE_NODE","CDATA_SECTION_NODE","COMMENT_NODE","DOCUMENT_NODE","ELEMENT","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","ELEMENT_NODE","TEXT","TEXT_NODE","ELEMENT$1","PROCESSING_INSTRUCTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","NOTATION_NODE","DOCUMENT$1","element","selector","nodeType","elem","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","bypassSelector","childElementCount","querySelectorAll","one","querySelector","e1","e2","regularContains","d1","d2","ieContains","contains$2","ancestor","transform","isRoot","stop","parentNode","el","transformed","closest","isSource","component","simulatedEvent","event","nu$4","parts","all$1","handlers","handler","any","read","can","abort","run","fuse","touchstart","touchmove","touchend","touchcancel","mousedown","mousemove","mouseout","mouseup","mouseover","focusin","focusout","keydown","keyup","change","click","transitionend","selectstart","alloy","tap","focus","postBlur","postPaste","receive","execute","focusItem","longpress","sandboxClose","typeaheadCancel","systemInit","documentTouchmove","documentTouchend","windowScroll","windowResize","attachedToDom","detachedFromDom","dismissRequested","repositionRequested","focusShifted","slotVisibility","changeTab","dismissTab","highlight","dehighlight","emit","dispatchWith","emitWith","properties","emitExecute","dispatch","data","getSystem","triggerEvent","dispatchEvent","derive","configs","predicate","preventDefault","prevent","runActionExtra","action","runOnName","runOnSourceName","redirectToUid","uid","getByUid","redirectee","redirectToPart","detail","partName","partUids","runWithTarget","ev","getByDom","closest$1","c","cutter","cut","stopper","runOnSource","runOnAttached","runOnDetached","runOnInit","runOnExecute","Immutable","struct","sort$1","reqMessage","required","unsuppMessage","validateStrArr","checkDupes","everything","sorted","dupe","d","MixedBag","optional","req","owner","ownerDocument","documentElement","defaultView","parent","offsetParent","nextSibling","children","child","index","cs","firstChild","fromHtml$1","before","marker","parent$1","insertBefore","after","sibling","append","prepend","firstChild$1","appendChild","appendAt","before$1","elements","append$1","empty","textContent","rogue","remove","removeChild","unwrap","wrapper","children$1","get$1","content","owner$1","docDom","fragment","createDocumentFragment","contentElements","getOuter","container","cloneNode","Function","nodeName","isType$1","isElement","isText","rawSet","setAttribute","set$1","setAll","attrs","get$2","getAttribute","getOpt","has$1","hasAttribute","remove$1","removeAttribute","original","isDeep","shallow$1","getHtml","isRecursive","originator","events","warn","DefaultEvents","__proto__","unique","generate$1","prefix","date","Date","time","getTime","random","Math","floor","idAttr","prefix$1","idAttr$1","write","writeOnly","defineProperty","writable","read$1","generate$2","make","NoContextApi","getComp","debugInfo","triggerFocus","triggerEscape","build","addToWorld","removeFromWorld","addToGui","removeFromGui","broadcast","broadcastOn","broadcastEvent","isConnected","singleton","markAsBehaviourApi","apiName","apiFunction","endIndex","openBracketIndex","parameters","substring","split","toFunctionAnnotation","cleanParameters","markAsExtraApi","extraName","markAsSketchApi","premadeTag","premade","comp","getPremade","spec","makeApi","rest","getApis","NoState","init","nu$5","readState","generateFrom","validated","behaviours","list","optBlobThunk","output","blob","config","getBehaviours","bData","getData","byInnerKey","indexKey","chain","nu$6","classes","attributes","styles","merge$1","defnA","mod","combine","baseMod","modsByBehaviour","behaviour","exhibit","byAspect","modification","combineObjects","combinedClasses","combinedAttributes","combinedStyles","sortKeys","keyName","order","aKey","bKey","aIndex","bIndex","uncurried","purpose","curried","cHandler","curryArgs","descHandler","extraArgs","getCurried","behaviourTuple","nameToHandlers","groupByEvents","behaviourEvents","combine$1","eventOrder","byEventName","combineGroups","assemble","rawHandler","missingOrderError","eventName","tuples","fuse$1","sortedTuples","combined","assembled","toInfo","toDefinition","domChildren","components","toModification","domModification","toEvents","read$2","attr","add","remove$2","supports","classList","get$3","add$1","clazz","remove$3","add$2","cleanClass","remove$4","has$2","add$3","remove$5","isSupported","style","getPropertyValue","inBody","body","getBody","internalSet","property","setProperty","internalRemove","removeProperty","set$2","setAll$1","css","setOptions","get$4","getComputedStyle","getUnsafeProperty","getRaw","raw","getAllRaw","ruleName","item","isValidValue","remove$6","reflow","offsetWidth","get$5","set$3","renderToDom","definition","subject","innerHtml","getBehaviours$1","generateFrom$1","generate$3","getDomDefinition","bList","infoModification","baseModification","getEvents","baseEvents","getMe","systemApi","bBlob","modDefinition","subcomponents","connect","newApi","disconnect","syncComponents","subs","hasConfigured","apis","behaviourName","buildSubcomponents","build$1","buildFromSpec","userSpec","specEvents","completeSpec","external","extSpec","uids","userSpecWithUid","prebuilt","premade$1","Dimension","getOffset","h","parseFloat","aggregate","parseInt","isNaN","max","cumulativeInclusions","absoluteMax","api","getBoundingClientRect","height","offsetHeight","get$6","getOuter$1","setMax","inclusions","absMax","left","top","translate","Position","boxPosition","box","firstDefinedOrZero","absolute","win","offsetLeft","offsetTop","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","viewport","api$1","set$4","get$7","getOuter$2","setMax$1","mkEvent","kill","fromRawEvent","rawEvent","stopPropagation","clientX","clientY","handle","binder","useCapture","wrapped","addEventListener","unbind","bind$2","capture","removeEventListener","get$8","_DOC","to","scrollTo","get$9","_win","bounds","width","right","bottom","getBounds","scroll","clientWidth","clientHeight","visualViewport","pageLeft","pageTop","walkUp","navigation","frame","view","pathTo","paths","frameElement","Navigation","find$3","frames","offset","loc","pointed","rect","bounds$1","xy","w","absolute$1","position","ClosestOrAncestor","EventConfiguration","ancestor$1","descendant","descend","child_1","closest$2","ancestor$2","descendant$1","closest$3","find$4","queryElem","dependent","dep","manager","ariaId","link","unlink","isAriaPartOf","isPartOf","unknown$3","AttributeValue","eventConfig","makeEventLogger","initialTarget","sequence","startTime","logEventCut","logEventStopped","logNoParent","logEventNoHandlers","logEventResponse","finishTime","processEvent","status","patterns","NORMAL","noLogger","LOGGING","logger","STOP","getTrace","stack","lines","line","ignoreEvent","monitorEvent","menuFields","itemFields","itemSchema","_initSize","itemMarkers","tieredMenuMarkers","markers","onPresenceHandler","fieldName","onHandler","onKeyboardHandler","onStrictHandler","onStrictKeyboardHandler","snapshot","initSize","nu$7","adt$2","southeast","southwest","northeast","northwest","south","north","east","west","cata","cataVertical","middle","cataHorizontal","getRestriction","anchor","restriction","boundsRestriction","restrictions","dir","adjustBounds","boundsRestrictions","bubbleOffsets","applyRestriction","bubbleOffset","adjustedLeft","adjustedTop","adjustedRight","adjustedBottom","eastX","middleX","westX","northY","southY","centreY","eastEdgeX","westEdgeX","southeast$1","bubbles","southwest$1","northeast$1","northwest$1","north$1","south$1","east$1","west$1","all$2","allRtl","aboveOrBelow","aboveOrBelowRtl","belowOrAbove","belowOrAboveRtl","executeEvent","bConfig","bState","executor","loadEvent","create","active","configSchema","schemaSchema","doCreate","createModes","modes","wrapApi","bName","revokeBehaviour","getConfig","wrappedApis","apiF","wrappedExtra","extraF","revoke","prepared","configAsRaw","initialConfig","behaviourInfo","exhibitor","derive$1","capabilities","simpleSchema","create$1","modeSchema","createModes$1","branchKey","chooseChannels","channels","universal","events$1","receiveConfig","channelMap","receivingData","targetChannels","channelInfo","channelSchema","onReceive","ActiveReceiving","ReceivingSchema","Receiving","posConfig","useFixed","ActivePosition","focus$1","blur","hasFocus","activeElement","_doc","preserve","ownerDoc","refocus","focused","oldFocus","newFocus","NuPositionCss","applyPositionCss","addPx","adt$3","relative","fixed","positionWithDirection","posName","decision","decisionX","decisionY","decisionWidth","decisionHeight","decisionRight","decisionBottom","direction","reposition","origin","toBox","rel","viewport$1","pos","removeScroll","outerScroll","cata$1","onNone","onRelative","onFixed","box$1","anchorBox","cycleBy","delta","min","clamp","adt$4","fit","nofit","calcReposition","newX","newY","boundsX","boundsY","boundsWidth","boundsHeight","xInBounds","yInBounds","originInBounds","xFit","yFit","sizeInBounds","deltaW","abs","deltaH","maxX","maxY","limitX","limitY","attempt","candidateX","candidateY","bubble","bubbleLeft","bubbleTop","adjustedBounds","boundsBottom","boundsRight","upAvailable","downAvailable","maxHeight","westAvailable","eastAvailable","maxWidth","on","classesOn","off","classesOff","candidateYforTest","attempts","elementBox","panelWidth","panelHeight","attemptBestFit","layout","attemptLayout","newReposition","newDeltaW","newDeltaH","improved","abc","bestNext","elementSize","options","preference","setClasses","classInfo","setHeight","maxHeightFunction","setWidth","maxWidthFunction","setMaxHeight","anchored","available","expandable","reparteeOptions","defaultOr","dephault","simple","layouts","overrideOptions","go","allAlignments","nu$8","yoffset","getClasses","xDelta","yDelta","alignmentsOn","alignmentsOff","innerNorthwest","innerNortheast","innerNorth","innerSouthwest","innerSoutheast","innerSouth","innerWest","innerEast","nu$9","onDirection","isLtr","isRtl","getDirection","Attribute","isBottomToTopDir","BottomToTop","schema$1","get$a","defaultLtr","defaultRtl","defaultBottomLtr","defaultBottomRtl","dirElement","isBottomToTop","customLtr","ls","onLtr","customRtl","onRtl","ltr","onBottomLtr","rtl","onBottomRtl","placement","anchorInfo","hotspot","overrides","placer","HotspotAnchor","placement$1","MakeshiftAnchor","zeroWidth","nbsp","create$2","SimRange","adt$5","cata$2","onBefore","onOn","onAfter","getStart","situ","before$2","after$1","Situ","adt$6","domRange","exact","exactFromRange","simRange","soffset","finish","foffset","getStart$1","selection","rng","startContainer","startSitu","finishSitu","relative$1","getWin","range$1","Selection","setStart","setStartBefore","setStartAfter","setFinish","setEndBefore","setEnd","setEndAfter","relativeToNative","createRange","exactToNative","toRect","getFirstRect","rects","getClientRects","adt$7","fromRange","startOffset","endContainer","endOffset","getRanges","doDiagnose","ranges","collapsed","reversed","rev","diagnose","asLtrRange","diagnosis","NodeValue","getOption","nodeValue","api$2","get$b","getEnd","isTextNodeWithCursorPosition","elementsWithCursorPosition","isCursorPosition","hasCursorPosition","last$1","descendantRtl","descendants","makeRange","after$2","same","readRange","rangeCount","firstRng","getRangeAt","lastRng","doGetExact","anchorNode","focusNode","anchorOffset","focusOffset","getExact","getSelection","sel","getFirstRect$1","point","descendOnce","adt$8","screen","toFixed","toAbsolute","sum","points","sumAsFixed","positions","sumAsAbsolute","absolute$2","root","hasSameOwner","frameOwner","compOwner","getRootPoint","capRect","newLeft","newTop","newWidth","newHeight","calcNewAnchor","optBox","rootPoint","topLeft","layoutsLtr","showAbove","layoutsRtl","ContentAnchorCommon","point$1","descendOnce$1","getAnchorSelection","modStart","modFinish","placement$2","selectionBox","optRect","rawRect","targetElement","SelectionAnchor","placement$3","nodeBox","NodeAnchor","eastX$1","westX$1","northY$1","southY$1","southeast$2","southwest$2","northeast$2","northwest$2","all$3","allRtl$1","placement$4","submenuInfo","SubmenuAnchor","AnchorSchema","submenu","makeshift","getFixedOrigin","getRelativeOrigin","place","anchoring","placee","position$1","posState","positionWithin","boxElement","boundsBox","positionWithinBounds","anchorage","oldVisibility","doPlace","vis","getMode","pConfig","pState","PositionApis","PositionSchema","Positioning","fireDetaching","fireAttaching","attach","detachChildren","childComp","replaceChildren","newChildren","deleted","attach$1","attachWith","insertion","doDetach","detach","detachChildren$1","attachSystem","guiSystem","attachSystemWith","attachSystemAfter","inserter","detachSystem","rebuild","sandbox","sConfig","sState","getAttachPoint","built","open","newState","onOpen","setContent","openWhileCloaked","transaction","cloak","decloak","close","onClose","clear","isOpen","isPartOf$1","getState","store","cssKey","newValue","restore","oldValue","sink","cloakVisibilityAttr","hasPosition","SandboxApis","events$2","sandboxConfig","sandboxState","ActiveSandbox","SandboxSchema","contents","SandboxState","Sandboxing","dismissPopups","repositionPopups","mouseReleased","schema$2","receivingChannel","rawSpec","isPart","isExtraPart","fireEventInstead","fe","schema$3","receivingChannel$1","doReposition","onLoad","repConfig","repState","onUnload","setValue","getValue","getState$1","RepresentApis","events$3","resetOnDom","se","ActiveRepresenting","memory","mode","isNotSet","manual","dataset","dataByValue","dataByText","lookup","itemString","update","items","currentDataByValue","currentDataByText","newDataByValue","newDataByText","meta","init$1","RepresentState","setValue$1","onSetValue","getValue$1","getDataKey","getFallbackEntry","onLoad$1","initialValue","onUnload$1","DatasetStore","getValue$2","setValue$2","onLoad$2","ManualStore","setValue$3","getValue$3","onLoad$3","initVal","onUnload$2","MemoryStore","RepresentSchema","Representing","setValueFrom","source","field$1","forbidden","get$c","dump","augment","SketchBehaviours","_placeholder","adt$9","single","multiple","isSubstituted","subPlaceholder","compSpec","placeholders","newSpec","scan","uiType","substitute","childSpecs","substituted","valuesThunk","preprocessor","preprocess","substituteAll","oneReplace","replacements","used","substitutePlaces","ps","ph","placeholder","adt$a","fFactory","sketch","fSchema","fName","fPname","typeSpec","fGroupSchema","fDefaults","fOverrides","requiredSpec","externalSpec","optionalSpec","groupSpec","asNamedPart","part","name$1","asCommon","convert","adtConstructor","partSchema","external$1","PartType","combine$2","partSpec","partValidated","defaults","internals","externals","pname","factory","_partSpec","_partValidated","units","u","generate$4","np","g","doGenerateOne","generateOne","schemas","names","substitutes","getPart","partKey","getPartOrDie","getParts","partKeys","system","pk","getAllParts","pUid","getAllPartNames","getPartsOrDie","defaultUids","baseUid","partTypes","partNames","pn","defaultUidsSchema","AlloyParts","partSchemas","partUidsSchemas","asRawOrDie$1","baseS","single$1","specWithUid","supplyUid","composite","partUidsSchema","components$1","hasUid","isSketchSpec","FocusInsideModes","singleSchema","compositeSchema","single$2","rawConfig","configFields","extraApis","composite$1","partFields","cat","lift2","oa","ob","lift3","oc","inside","getCurrent","composeConfig","composeState","ComposeApis","ComposeSchema","Composing","dehighlightAllExcept","hConfig","hState","skip","highlighted","highlightClass","skipComp","onDehighlight","dehighlightAll","dehighlight$1","isHighlighted","highlight$1","onHighlight","highlightFirst","getFirst","firstComp","highlightLast","getLast","lastComp","highlightAt","getByIndex","highlightBy","getCandidates","targetComp","queryTarget","getHighlighted","itemClass","getDelta","selected","dest","getPrevious","getNext","HighlightApis","HighlightSchema","Highlighting","BACKSPACE","TAB","ENTER","ESCAPE","SPACE","LEFT","UP","RIGHT","DOWN","cyclePrev","tryPrev","cycleNext","tryNext","inSet","which","and","preds","isShift","shiftKey","isControl","ctrlKey","isNotShift","rule","classification","choose$2","transitions","transition","reportFocusShifting","prevFocus","noChange","focusee","highlights","ToolbarMode","typical","infoSchema","stateInit","getKeydownRules","getKeyupRules","optFocusIn","processKey","getRules","keyingConfig","keyingState","rules","onFocusHandler","focusInside","OnFocusMode","focusIn","tryGoInsideComponent","isEnterOrSpace","OnEnterOrSpaceMode","create$3","cyclicField","isVisible","tabbingConfig","visibilitySelector","findInitial","tabstops","visibles","firstTabstop","findCurrent","focusManager","isTabstop","useTabstopAt","tabbingState","goFromTabstop","stopIndex","cycle","cyclic","tabstop","optStopIndex","goBackwards","navigate","goForwards","onEnter","exit","onEscape","AcyclicType","CyclicType","doDefaultExecute","defaultExecute","stopEventForFirefox","schema$4","execute$1","executeConfig","executeState","spaceExec","useSpace","enterExec","useEnter","downExec","useDown","execKeys","useControlEnter","ExecutionType","flatgrid","dimensions","setGridSize","numRows","numColumns","getNumRows","getNumColumns","init$2","KeyingState","useH","movement","move","use","west$2","moveLeft","moveRight","east$2","useV","north$2","south$2","isHidden","locate","locateVisible","visible","findIndex$1","withGrid","numCols","oldRow","oldColumn","address","newIndex","row","column","cycleHorizontal","onLastRow","colsInRow","newColumn","cycleVertical","newRow","newCol","cycleRight","cycleLeft","cycleUp","cycleDown","schema$5","gridConfig","gridState","first","execute$2","doMove","identified","handleTab","captureTab","doEscape","moveNorth","moveSouth","getKeydownRules$1","getKeyupRules$1","FlatgridType","horizontal","isDisabledButton","tryCycle","schema$6","findCurrent$1","flowConfig","execute$3","focusIn$1","getInitial","moveLeft$1","moveRight$1","doMove$1","flowState","executeOnMove","doEscape$1","getKeydownRules$2","_component","_se","_flowState","westMovers","allowVertical","eastMovers","getKeyupRules$2","FlowType","toCell","matrix","rowIndex","columnIndex","cell","cycleHorizontal$1","startCol","deltaCol","newColIndex","cycleVertical$1","colIndex","startRow","deltaRow","nextRowIndex","colsInNextRow","nextColIndex","moveHorizontal","moveVertical","cycleRight$1","cycleLeft$1","cycleUp$1","cycleDown$1","moveLeft$2","moveRight$2","moveUp","moveDown","schema$7","focusIn$2","matrixConfig","previousSelector","selectors","execute$4","toMatrix","rows","doMove$2","ifCycle","ifMove","cycles","inRow","cellsInRow","allRows","moveLeft$3","moveRight$3","moveNorth$1","moveSouth$1","getKeydownRules$3","getKeyupRules$3","MatrixType","schema$8","execute$5","menuConfig","focusIn$3","moveUp$1","moveDown$1","fireShiftTab","menuState","moveOnTab","fireTab","getKeydownRules$4","getKeyupRules$4","MenuType","schema$9","getKeydownRules$5","specialInfo","onSpace","onShiftEnter","onShiftTab","onTab","onUp","onDown","onLeft","onRight","getKeyupRules$5","stopSpaceKeyup","SpecialType","acyclic","flow","flatgrid$1","execution","menu","special","KeyboardBranches","isFlatgridState","keyState","Keying","keyConfig","sendFocusIn","set$5","replaceConfig","replaceState","insert","childSpec","append$2","appendee","prepend$1","prependee","remove$7","removee","foundChild","replaceAt","replaceeIndex","replacer","replacee","replaceBy","replaceePred","ReplaceApis","Replacing","events$4","eventHandlers","focus$2","focusConfig","ignore","onFocus","blur$1","isFocused","FocusApis","exhibit$1","tabindex","events$5","stopMousedown","ActiveFocus","FocusSchema","Focusing","updateAriaState","toggleConfig","toggleState","ariaInfo","aria","updateClass","toggleClass","toggle","set$6","on$1","isOn","onLoad$4","ToggleApis","exhibit$2","events$6","load","toggleOnExecute","ActiveToggle","SetupBehaviourCellState","initialState","updatePressed","syncWithExpanded","updateExpanded","updateSelected","updateChecked","ToggleSchema","pressed","checked","expanded","Toggling","pointerEvents","onClick","events$7","optAction","executeHandler","hoverEvent","focusEvent","onHover","hover","focus$3","builder","toggling","hasSubmenu","itemBehaviours","tConfig","ignoreFocus","schema$a","builder$1","schema$b","owner$2","builder$2","focusWidget","widget","onHorizontalArrow","autofocus","setSource","widgetBehaviours","schema$c","itemSchema$1","separator","configureGrid","movementInfo","configureMatrix","rowSelector","configureMenu","parts$1","itemInfo","unit","fakeFocus","schema$d","grid","focus$4","make$1","menuBehaviours","selectedItem","role","Menu","transpose","trace","byItem","byMenu","triggerItem","triggerMenu","generate$5","menus","expansions","menuItems","menuPaths","_triggerItem","init$3","primary","directory","isClear","setMenuBuilt","menuName","setContents","sPrimary","sMenus","sExpansions","sPaths","getTriggeringItem","menuValue","getTriggerData","getItemByValue","getPreparedMenu","triggeringItemValue","triggeredItem","triggeredMenu","triggeringItem","triggeringPath","getTriggeringPath","itemValue","extraPath","lookupItem","revPath","triggers","menuIndex","expand","collapse","refresh","lookupMenu","extractPreparedMenu","otherMenus","menuValues","getPrimary","getMenus","prep","LayeredState","make$2","rawUiSpec","ExpandHighlightDecision","submenuParentItems","buildMenus","primaryName","makeSketch","nbMenu","layeredState","setup","componentMap","toDirectory","getItemValue","setActiveMenu","mv","closeOthers","others","backgroundMenu","stayInDom","getSubmenuParents","parentItems","itemComp","updateAriaExpansions","updateMenuPath","latestMenuName","menuPrep","activeMenu","buildIfRequired","expandRight","HighlightSubmenu","activeMenuPrep","onOpenSubmenu","collapseLeft","onCollapseMenu","updateView","keyOnItem","getSource","onExecute","onOpenMenu","highlightImmediately","navigateOnHover","HighlightParent","getActiveItem","collapseMenuApi","currentItem","highlightPrimary","extractMenuFromContainer","repositionMenus","maybeActivePrimary","allMenus","preparedMenus","primaryMenu","onRepositionMenu","collapseMenu","tmenuBehaviours","keyInfo","selectedMenu","collapseItem","tieredData","singleData","collapseItem$1","tieredMenu","tmenu","makeMenu","menuSandbox","menuSpec","lazySink","isFirstTierSubmenu","triggeringPaths","getSubmenuLayouts","submenuTriggers","st","submenuLayouts","isPartOfRelated","related","getRelated","thing","showAt","showWithin","showWithinBounds","showMenuAt","showMenuWithinBounds","hide","getContent","inlineBehaviours","onShow","onHide","fireDismissalEventInstead","fireRepositionEventInstead","InlineView","westEdgeX$1","middleX$1","eastEdgeX$1","northY$2","southY$2","southeast$3","southwest$3","northeast$3","northwest$3","north$3","south$3","global$2","global$3","global$4","getSkinUrl","editor","settings","skin","skinUrl","skin_url","skinName","documentBaseURI","baseURL","isReadOnly","getParam","isSkinDisabled","getHeightSetting","getElement","getWidthSetting","DOM","getStyle","getMinWidthSetting","min_width","getMinHeightSetting","min_height","getMaxWidthSetting","getMaxHeightSetting","getUserStyleFormats","isMergeStyleFormats","getRemovedMenuItems","isMenubarEnabled","isToolbarEnabled","toolbar","isToolbarTrue","isToolbarString","isToolbarObjectArray","isMultipleToolbars","getMultipleToolbarsSetting","toolbarKeys","toolbars","toolbarArray","ToolbarLocation","getToolbarMode","getToolbarGroups","isToolbarLocationTop","fixedContainerSelector","fixedContainerElement","inline","useFixedContainer","getUiContainer","fixedContainer","isDistractionFree","isStickyToolbar","isDraggableModal","factory$1","lookupAttr","getModAttributes","roleAttrs","buttonBehaviours","Button","record","anyInSystem","asSpec","defaultIcon","icons","get$d","getFirst$1","notificationIconMap","success","warning","factory$2","memBannerText","translationProvider","renderPercentBar","percent","renderPercentText","memBannerProgress","progress","updateProgress","updateText","text$1","banner","iconChoices","icon","level","iconProvider","closeButton","onAction","Notification","NotificationManagerImpl","extras","uiMothership","backstage","isToolbarLocationTop$1","getLayoutDirection","prePositionNotifications","notifications","notification","moveTo","positionNotifications","firstItem","moveRel","getEl","closeCallback","hideCloseButton","timeout","notificationWrapper","progressBar","shared","providers","getSink","setTimeout","layoutDirection_1","nodeAnchor","anchors","nuText","getArgs","ItemResponse","rate","timer","cancel","clearTimeout","throttle","last$2","global$5","isBoundary","isBlock","getContentEditable","repeatLeft","process","rootNode","backwards","autocompleteSelector","create$4","detect$4","getNode","getDoc","extractContents","insertNode","elm","normalize","setCursorLocation","isValidTextRange","getText","isWhitespace","chr","stripTriggerChar","triggerCh","findChar","char","charAt","findStart","initRange","minChars","findTriggerChIndex","getParent","getRoot","spot","cloneRange","triggerCharIndex","lastIndexOf","triggerChar","getContext","createRng","selectNode","onKeypress","redirectKeyToItem","getItem","getView","isActive","cancelIfNecessary","isMenuOpen","stopImmediatePropagation","isProcessingAction","AutocompleterEditorEvents","global$6","point$2","isText$1","isElement$1","toLast","toLeaf","isPreviousCharContent","leaf","isStartOfWord","getTriggerContext","database","triggerChars","getDatabase","getRng","context","lookupWithContext","fetchOptions","startText","autocompleters","lookupByChar","autocompleter","lookupData","ac","fetchResult","fetch","maxResults","then","matchText","columns","separatorMenuItemSchema","createSeparatorMenuItem","autocompleterItemSchema","autocompleterSchema","createSeparatorItem","createAutocompleterItem","createAutocompleter","stringArray","register","popups","ui","registry","getAll","popup","datasetValues","dv","commonMenuItemFields","menuItemSchema","createMenuItem","nestedMenuItemSchema","createNestedMenuItem","toggleMenuItemSchema","createToggleMenuItem","choiceMenuItemSchema","createChoiceMenuItem","fancyTypes","fancyMenuItemSchema","createFancyMenuItem","detectSize","margin","selectorClass","descendants$1","columnLength","thisTop","cTop","ceil","namedEvents","unnamedEvents","SimpleBehaviours","TooltippingSchema","init$4","getTooltip","setTooltip","clearTooltip","clearTimer","resetTimer","delay","isShowing","TooltippingState","ExclusivityChannel","ShowTooltipEvent","HideTooltipEvent","hideAllExclusive","tState","setComponents","specs","tooltip","TooltippingApis","events$8","tooltipConfig","show","tooltipDom","tooltipComponents","ActiveTooltipping","Tooltipping","global$7","navClass","selectableClass","colorClass","presetClasses","normal","color","tickedClass","groupHeadingClass","iconClass","textClass","accessoryClass","caretClass","checkmarkClass","activeClass","iconClassRtl","classForPreset","presets","global$8","convertText","mac","alt","ctrl","shift","access","other","shortcut","updated","segment","ConvertShortcut","renderIcon","iconHtml","renderText","renderHtml","renderStyledText","renderShortcut","renderCheckmark","renderSubmenuCaret","renderDownwardsCaret","renderColorStructure","itemText","iconSvg","providerBackstage","colorPickerCommand","removeColorCommand","getDom","common","title","baseDom","optComponents","renderNormalItemStructure","renderIcons","textRender","rtlClass","leftIcon","checkMark","domTitle","ariaLabel","htmlContent","menuItem","shortcutContent","caret","rtlIcon","rtlTransform","renderItemStructure","providersBackstage","fallbackIcon","getIconName","iconName","needRtlClass","iconContent","nativeDisabled","onLoad$5","disableConfig","disableState","disabled","disable","hasNative","useNative","nativeIsDisabled","nativeDisable","nativeEnable","ariaIsDisabled","ariaDisable","ariaEnable","disableClass","onDisabled","enable","onEnabled","isDisabled","set$7","DisableApis","exhibit$3","events$9","ActiveDisable","DisableSchema","Disabling","button","splitButton","toolbarButton","DisablingConfigs","runWithApi","getApi","onControlAttached","editorOffCell","onDestroy","onSetup","onControlDetached","ItemResponse$1","onMenuItemExecute","itemResponse","triggersSubmenu","CLOSE_ON_EXECUTE","menuItemEventOrder","componentRenderPipeline","renderCommonItem","structure","buildData","tooltipBehaviour","sharedBackstage","tooltipWorker","_tooltip","escapeRegExp","encodeText","encode","replaceText","translated","encoded","escapedMatchRegex","RegExp","renderAutocompleteItem","useText","onItemValueHandler","_api","renderChoiceItem","isSelected","setActive","setDisabled","parts$2","cellOverEvent","cellExecuteEvent","makeCell","col","labelId","emitCellOver","makeCells","cells","selectCells","selectedRow","selectedColumn","makeComponents","cellRow","makeLabelText","renderInsertTableMenuItem","sizeLabelId","memLabel","hexColour","hexString","shorthandRegex","longformRegex","isHexString","hex","getLongForm","m","extractValues","longForm","splitForm","exec","toHex","fromRgba","rgbaColour","red","green","blue","round","rgbRegex","rgbaRegex","alpha","isRgbaComponent","fromHsv","hsv","hue","saturation","brightness","side","chroma","fromHex","fromStringValues","fromString","rgbaString","rgbMatch","rgbaMatch","rgba","redColour","global$9","storageName","ColorCache","storageString","localstorage","parse","prune","diff","cache","unshift","pop","setItem","idx","splice","choiceItem","defaultColors","colorCache","mapColors","colorMap","colors","canvas","ctx","byteAsHex","colorByte","alphaByte","bg","colorByteWithWhiteBg","toUpperCase","asHexColor","clearRect","fillStyle","fillRect","getImageData","getColorCols","defaultCols","hasCustomColors","getColorMap","getColors","unmapped","getCurrentColors","addColor","Settings","fireSkinLoaded","fire","fireSkinLoadError","fireResizeEditor","fireBeforeRenderUI","fireResizeContent","fireScrollContent","fireTextColorChange","Events","getCurrentColor","format","getParents","applyFormat","undoManager","transact","formatter","nodeChanged","removeFormat","registerCommands","addCommand","calcCols","sqrt","getColorCols$1","getAdditionalColors","hasCustom","applyColor","onChoice","dialog","colorPickerDialog","colorOpt","execCommand","getMenuColors","getFetch","callback","setIconColor","splitButtonApi","newColor","setIconFillAndStroke","pathId","setIconFill","setIconStroke","registerTextColorButton","lastColor","addSplitButton","select","optCurrentRgb","currentRgb","currentHex","onItemAction","registerTextColorMenuItem","addNestedMenuItem","getSubmenuItems","fancytype","getOnSubmit","colorpicker","details","initialData","submit","windowManager","buttons","onSubmit","onCancel","register$1","lastForeColor","lastBackColor","ColorSwatch","forMenu","hasIcons","markers$1","menuClasses","dom$1","chunk$1","rowDom","chunks","forSwatch","forToolbar","preprocessCollection","isSeparator","allSplits","currentSplit","forCollection","initItems","_hasIcons","_item","forHorizontalCollection","hasIcon","menuHasIcons","handleError","createHorizontalPartialMenuWithAlloyItems","_columns","_presets","createPartialMenuWithAlloyItems","createPartialChoiceMenu","presetItemTypes","alloyItems","createChoiceItems","itemPresets","deriveMenuMovement","menuMarkers","rowClass","deriveCollectionMovement","renderColorSwatchItem","colorinput","widgetSpec","FocusMode","fancyMenuItems","inserttable","colorswatch","valueOpt","renderFancyMenuItem","render","renderNormalItem","renderNestedItem","downwardsCaret","renderSeparatorItem","renderToggleMenuItem","autocomplete","nested","toggle$1","fancy","hasIcon$1","menuHasIcons$1","createMenuItemFromBridge","isHorizontalMenu","parseForHorizontalMenu","menuitem","createAutocompleteItems","createPartialMenu","itemHasIcon","createItem","createPartial","createTieredDataFrom","partialMenu","createMenuFrom","focusMode","ContentFocus","register$2","activeAutocompleter","processingAction","hideIfNecessary","lastElement","getAutocompleters","getCombinedItems","choices","itemMeta","nr","autocompleterApi","reload","BUBBLE_TO_SANDBOX","commenceIfNecessary","matchLength","display","ld","doLookup","newContext","lookupInfo","combinedItems","autocompleterUiApi","Autocompleter","filter$1","bind$3","capture$1","fromRawEvent$1","closest$4","DelayedFunction","fun","ref","schedule","SIGNIFICANT_MOVE","LONGPRESS_DELAY","getTouch","touches","isFarEnough","touch","distX","distY","monitor","startData","longpressFired","longpress$1","handleTouchstart","handleTouchmove","handleTouchend","isSame","fireIfReady","isDangerous","keyEv","settingsSchema","bindFocus","bindBlur","setup$1","rawSettings","tapEvent","simpleEvents","tapStopped","stopped","pasteTimeout","onPaste","onKeydown","stopBackspace","onFocusIn","focusoutTimeout","onFocusOut","derive$2","rawTarget","getTarget","fromSource","isStopped","isCut","fromExternal","adt$b","resume","complete","doTriggerHandler","eventType","handlerInfo","eventHandler","doTriggerOnUntilStopped","triggerHandler","listeners","listener","triggerUntilStopped","triggerOnUntilStopped","broadcastHandler","EventRegistry","registerId","findHandler","filterByType","isAboveRoot","unregisterId","handlersById","Registry","readOrTag","failOnDuplicate","tagId","conflict","unregister","getById","factory$3","domWithoutAttributes","containerBehaviours","Container","takeover","domEvents","_alloyId","broadcast$1","destroy","broadcastData","receivers","receiver","formChangeEvent","formCloseEvent","formCancelEvent","formActionEvent","formSubmitEvent","formBlockEvent","formUnblockEvent","formTabChangeEvent","formResizeEvent","renderAlertBanner","iconTooltip","url","renderBar","interpreter","schema$e","parts$3","excludeFactory","factory$4","fieldBehaviours","descriptor","descriptorId","getField","getLabel","FormField","schema$f","focusBehaviours","selectOnFocus","setSelectionRange","inputBehaviours","dom$2","inputAttributes","inputStyles","inputClasses","factory$5","Input","exports$1","module","exports","define","require","amd","global","EphoxContactWrapper","code","1","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","runClearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","Item","nextTick","env","argv","versions","addListener","once","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","umask","2","setImmediate","setTimeoutFunc","thisArg","Promise","TypeError","_state","_handled","_value","_deferreds","doResolve","deferred","_immediateFn","cb","onFulfilled","onRejected","reject","promise","finale","_unhandledRejectionFn","Handler","reason","ex","prom","remaining","race","_setImmediateFn","_setUnhandledRejectionFn","3","clearImmediate","immediateIds","nextImmediateId","Timeout","clearFn","_id","_clearFn","setInterval","clearInterval","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","4","promisePolyfill","Global","boltExport","HighlightOnOpen","nu$a","baseFn","callbacks","nCallback","isReady","cbs","pure$1","LazyValue","errorReporter","make$3","fab","aFutureB","toPromise","anonBind","futureB","toLazy","toCached","nu$b","pure$2","Future","ariaElements","isAriaElement","markValid","invalidConfig","invalidClass","notify","notifyInfo","getContainer","validHtml","onValid","markInvalid","invalidState","onInvalid","validatorInfo","validate","run$1","onValidate","valid","isInvalid","InvalidateApis","events$a","onEvent","validateOnLoad","ActiveInvalidate","InvalidateSchema","Invalidating","validation","exhibit$4","tabConfig","tabAttr","ActiveTabstopping","TabstopSchema","Tabstopping","renderFormFieldWith","pLabel","pField","extraClasses","extraBehaviours","renderFormFieldSpecWith","renderFormField","renderFormFieldDomWith","renderFormFieldDom","renderLabel","getCoupled","coupleConfig","coupleState","getOrCreate","CouplingApis","CouplingSchema","init$5","coupled","CouplingState","Coupling","partType","getAnchor","getHotspot","getAnchorOverrides","mapFetch","fetcher","openF","highlightOnOpen","futureData","getLazySink","tdata","HighlightFirst","open$1","onOpenSync","processed","close$1","_externals","_onOpenSync","_highlightOnOpen","togglePopup","showing","matchWidth","useMinWidth","buttonWidth","sinkDetail","internalSink","lazySinkFn","doRepositionMenus","makeSandbox","ariaOwner","sandboxClasses","sandboxBehaviours","sandboxFields","schema$g","parts$4","factory$6","_spec","switchToMenu","HighlightNone","triggerExecute","dropdownBehaviours","Dropdown","exhibit$5","unselectable","events$b","ActiveUnselecting","Unselecting","renderPanelButton","colorInputChangeEvent","colorSwatchChangeEvent","colorPickerCancelEvent","renderColorInput","colorInputBackstage","inputValue","span","emitSwatchChange","colorBit","memColorButton","colorPicker","colorButton","hsvColour","fromRgb","minRGB","maxRGB","calcHex","rgb","fieldsUpdate","sliderUpdate","paletteUpdate","labelPart","edgePart","model","edgeActions","det","mouseIsDown","tlEdgePart","tedgePart","trEdgePart","redgePart","brEdgePart","bedgePart","blEdgePart","ledgePart","thumbPart","spectrumPart","modelDetail","getValueFromEvent","spectrum","SliderParts","_sliderChangeEvent","sliderChangeEvent","isTouchEvent","evt","getEventSource","touchEvent","mouseEvent","r$1","l","minX","minY","min1X","min1Y","max1X","max1Y","range$2","xRange","yRange","halfX","halfY","step","stepSize","snap","snapToGrid","snapStart","rounded","hasEdge","edgeName","hasLEdge","hasREdge","hasTEdge","hasBEdge","currentValue","xValue","yValue","xyValue","fireSliderChange","setToTLEdgeXY","setToTEdge","setToTEdgeXY","setToTREdgeXY","setToREdge","setToREdgeXY","setToBREdgeXY","setToBEdge","setToBEdgeXY","setToBLEdgeXY","setToLEdge","setToLEdgeXY","reduceBy","increaseBy","capValue","snapValueOf","initValue","extraValue","remainder","adjustment","rawSteps","maxSteps","numSteps","findOffsetOf","findValueOf","hasMinEdge","hasMaxEdge","minBound","maxBound","screenRange","capMin","capMax","findOffsetOfValue","maxOffset","centerMinEdge","centerMaxEdge","getBounds$1","getBoundsProperty","getMinXBounds","getMaxXBounds","getMinYBounds","getMaxYBounds","getXScreenRange","getYScreenRange","getCenterOffsetOf","componentMinEdge","componentMaxEdge","spectrumMinEdge","getXCenterOffSetOf","componentBounds","spectrumBounds","getYCenterOffSetOf","fireSliderChange$1","sliderValue","findValueOfOffset","sliderVal","setToMin","setToMax","moveBy","handleMovement","findOffsetOfValue$1","minEdge","maxEdge","minOffset","findPositionOfValue","slider","setPositionFromValue","thumb","edges","getSpectrum","getLeftEdge","getRightEdge","thumbRadius","HorizontalModel","fireSliderChange$2","sliderValue$1","findValueOfOffset$1","setValueFrom$1","setToMin$1","setToMax$1","moveBy$1","handleMovement$1","getValueFromEvent$1","findOffsetOfValue$2","findPositionOfValue$1","setPositionFromValue$1","getTopEdge","getBottomEdge","onLeft$1","onRight$1","onUp$1","onDown$1","edgeActions$1","VerticalModel","fireSliderChange$3","sliderValue$2","setValueFrom$2","moveBy$2","isVerticalMovement","handleMovement$2","setToMin$2","mX","mY","setToMax$2","getValueFromEvent$2","setPositionFromValue$2","xPos","yPos","thumbXRadius","thumbYRadius","onLeft$2","onRight$2","onUp$2","onDown$2","edgeActions$2","TwoDModel","SliderSchema","getThumb","changeValue","onChange","resetToMin","resetToMax","fireOnChoose","onChoose","wasDown","onDragStart","onDragEnd","sliderBehaviours","getInitialValue","onInit","Slider","sliderFactory","getClass","_thumb","owner$3","schema$h","getPartName","sketch$1","fSpec","fieldParts","make$4","toResult$1","formBehaviours","form","resPs","resPThunk","pName","Form","validInput","invalidInput","validatingInput","translatePrefix","rgbFormFactory","onValidHexx","onInvalidHexx","invalidation","isValid","renderTextField","description","helptext","comps","concats","copyRgbToHex","hexField","copyRgbToForm","memPreview","updatePreview","preview","copyHexToRgb","setValueRgb","getValueRgb","onInvalidInput","onValidHex","onValidRgb","isHexInputEvent","onValidInput","formPartStrings","redStrings","greenStrings","blueStrings","hexStrings","updateHex","rgbFormSketcher","paletteFactory","_translate","setColour","grdWhite","createLinearGradient","addColorStop","grdBlack","setSliderColour","_detail","_slider","saturationBrightnessPaletteSketcher","setRgba","_apis","makeFactory","rgbForm","onInvalidHex","sbPalette","paletteRgba","memPalette","memRgb","updatePalette","palette","updateFields","runUpdates","updates","paletteUpdates","oldRgb","hsvColour$1","newHsvColour","nuHex","sliderUpdates","colourPickerSketcher","self$1","memento","mem","childAt","ComposingConfigs","english","getEnglishText","translate$1","renderColorPicker","colourPickerFactory","memPicker","picker","optRgbForm","optHex","formValues","pattern","global$a","isOldCustomEditor","renderCustomEditor","editorApi","memReplaced","ta","scriptId","scriptUrl","ea","cvalue","ed","processors","memento$1","rawProcessors","rawValue","postprocess","withComp","optInitialValue","getter","setter","withElement","domValue","domHtml","memory$1","RepresentingConfigs","extensionsAccepted","filterByExtension","files","re","file","renderDropZone","actions","onDrop","transferEvent","handleFiles","dataTransfer","onSelect","memInput","accept","renderField","inputComp","renderGrid","beforeObject","afterObject","craftWithClasses","outline","craft","triggerTab","onFocus$1","isPseudoStop","NavigableObject","platformNeedsSandboxing","getDynamicSource","isSandbox","cachedValue","frameComponent","contentWindow","renderIFrame","sandboxed","sourcing","create$5","resize","clone$1","tCanvas","get2dContext","drawImage","getWidth","image","naturalWidth","getHeight","naturalHeight","asap","immediateFn","catch","values_1","Promise$1","blobToImage","blobUrl","URL","createObjectURL","Image","removeListeners","loaded","src","dataUriToBlobSync","uri","mimetype","base64","sliceSize","byteCharacters","atob","bytesLength","slicesCount","byteArrays","sliceIndex","begin","end","bytes","charCodeAt","Uint8Array","Blob","dataUriToBlob","canvasToBlob","quality","HTMLCanvasElement","toBlob","toDataURL","canvasToDataURL","blobToCanvas","revokeImageUrl","blobToDataUri","reader","FileReader","onloadend","readAsDataURL","revokeObjectURL","create$6","getCanvas","initialType","getType","toBase64","toAdjustedBlob","toAdjustedDataURL","toAdjustedBase64","dataurl","toCanvas","fromBlob","fromCanvas","blobToImageResult","clamp$1","parsedValue","identity$1","DELTA_INDEX","multiply","matrix1","matrix2","out","adjustContrast","adjustBrightness","adjustColors","adjustR","adjustG","adjustB","colorFilter","ir","applyColorFilter","applyMatrix","pixelsData","m0","m1","m2","m3","m4","m5","m6","m7","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","pixels","putImageData","convoluteFilter","applyConvoluteFilter","pIn","pOut","aMatrix","halfSide","drgba","cy","cx","scx","scy","innerOffset","wt","pixelsIn","pixelsOut","functionColorFilter","colorFn","filterImpl","applyLookup","complexAdjustableColorFilter","matrixAdjustFn","adjust","basicColorFilter","basicConvolutionFilter","kernel","invert","contrast","colorize","sharpen","gamma","pow","scale","dW","dH","sW","sH","wRatio","hRatio","scaleCapped","scaled","_scale","rotate","angle","applyRotate","translateX","translateY","PI","flip","axis","applyFlip","crop","applyCrop","resize$1","newCanvas","invert$1","sharpen$1","gamma$1","colorize$1","brightness$1","contrast$1","flip$1","crop$1","resize$2","rotate$1","renderIcon$1","renderIconFromPack","iconsProvider","renderReplacableIconFromPack","renderLabel$1","internalToolbarButtonExecute","onToolbarButtonExecute","itemApi","buttonApi","toolbarButtonEventOrder","updateMenuText","updateMenuIcon","renderCommonDropdown","optMemDisplayText","optMemDisplayIcon","onLeftOrRightInMenu","dropdown","tooltipAttributes","translatedTooltip","memDropdown","displayText","displayIcon","isMenuItemReference","isExpandingMenuItem","separator$1","unwrapReferences","realItems","getFromExpandingItem","submenuItems","newMenus","newExpansions","getFromItem","generateValueIfRequired","itemWithValue","newData","build$2","mainMenu","submenus","getMenuButtonApi","renderMenuButton","getFetch$1","getButton","getMenuItemAction","storage","orig","getMenuItemSetup","renderCommonSpec","actionOpt","domFinal","renderIconButtonSpec","renderIconButton","iconButtonSpec","renderButtonSpec","translatedText","borderless","renderButton","buttonSpec","getAction","buttonType","isMenuFooterButtonSpec","isNormalFooterButtonSpec","renderFooterButton","memButton_1","menuButtonSpec","fixedSpec","renderDialogButton","schema$i","coupledPart","selfName","otherName","lock","onLockedChange","parts$5","locked","lockClass","factory$7","coupledFieldBehaviours","field1Name","field1","field2Name","field2","getField1","getField2","getLock","FormCoupledInputs","formatSize","unitDec","maxDecimal","numText","parseSize","sizeText","numPattern","convertUnit","inInch","supported","noSizeConversion","ratioSizeConversion","makeRatioConverter","currentFieldText","otherFieldText","cValue","oValue","cSize","oSize","renderSizeInput","converter","ratioEvent","pLock","formGroup","getFieldPart","isField1","widthField","heightField","newSize","optCurrent","optOther","value1","value2","undo","redo","zoom","back","swap","tempTransform","transformApply","internal","saveState","disable$1","enable$1","external$2","renderEditPanel","imagePanel","createButton","createIconButton","disableAllComponents","eventcomp","enableAllComponents","panelDom","noop$1","emit$1","emitDisable","emitEnable","emitTransform","emitTempTransform","getBackSwap","memContainer","ButtonPanel","emitTransformApply","createBackButton","createSpacer","createApplyButton","makeCropTransform","getRect","cropPanelComponents","hideCrop","CropPanel","memSize","constrain","makeResizeTransform","resizePanelComponents","sizeInput","ResizePanel","makeValueTransform","horizontalFlip","verticalFlip","counterclockwiseRotate","clockwiseRotate","flipRotateOnAction","operation","flipRotateComponents","FlipRotatePanel","makeSlider","makeVariableSlider","valTransform","variableFilterPanelComponents","createVariableFilterPanel","filterPanelComponents","FilterPanel","BrightnessPanel","ContrastPanel","GammaPanel","makeColorTransform","makeColorSlider","redOpt","memRed","blueOpt","memBlue","greenOpt","memGreen","colorizePanelComponents","ColorizePanel","getTransformPanelEvent","panel","cropPanelUpdate","_anyInSystem","showCrop","resizePanelUpdate","measurements","getMeasurements","sharpenTransform","invertTransform","buttonPanelComponents","getApplyButton","global$b","global$c","global$d","global$e","global$f","getDocumentSize","scrollWidth","scrollHeight","updateWithTouchData","changedTouches","DragHelper","$eventOverlay","downButton","drag","startX","startY","handleElement","getElementById","handleElm","cursor","docSize","screenX","screenY","runtimeStyle","zIndex","opacity","appendTo","deltaX","deltaY","create$7","currentRect","viewPortRect","clampRect","containerElm","instance","dragHelpers","blockers","handles","xMul","yMul","getAbsoluteRect","outerRect","relativeRect","getRelativeRect","innerRect","getInnerRect","moveRect","startRect","setInnerRect","createDragHelper","blocker","repaint","activeHandle","moveAndBlock","keyCode","SPACEBAR","toggleVisibility","updateElementRect","setRect","setViewPortRect","setClampRect","helper","extend","CropRect","loadImage","renderImagePanel","initialUrl","memBg","zoomState","cropRect","rectState","viewRectState","repaintImg","img","panelW","panelH","cRect","zoomFit","updateSrc","aImg","lastViewRect","viewRect","inflate","currentZoom","newZoom","newRect","setButtonEnabled","enabled","renderSideBar","updateButtonUndoStates","undoEnabled","redoEnabled","memUndo","memRedo","UndoStack","removed","canUndo","canRedo","Delimiter","makeState","blobState","tempState","undoStack","getBlobState","setBlobState","getTempState","temp","updateTempState","newTempState","createState","destroyTempState","destroyState","destroyStates","states","addBlobState","addTempState","applyTempState","postApply","currentState","getHistoryStates","renderImageTools","historyStates","sideBar","disableUndoRedo","_simulatedEvent","oImg","unblock","imageResultToBlob","block","editPanel","applyButton","blobManipulate","manipulate","tempManipulate","manipulateApply","currentUrl","factory$8","initialValues","selectClasses","selectAttributes","selectBehaviours","found","HtmlSelect","renderSelectBox","translatedOptions","chevron","selectWrap","baseInputBehaviours","multiline","validatingBehaviours","vl","inputMode","inputmode","classname","flex","extraClasses2","maximized","renderInput","renderTextarea","events$c","streamConfig","streamState","streams","stream","processor","cancelEvent","ActiveStreaming","_config","setTimer","init$6","StreamingState","setup$2","streamInfo","sInfo","throttler","onStream","stopEvent","StreamingSchema","Streaming","setValueFromItem","itemData","setCursorAtEnd","setSelectionOn","setSelectionToEnd","attemptSelectOver","selectsOver","inputDisplay_1","getDisplayText","itemDisplay","itemExecute","make$5","navigateList","highlighter","previewing","focusBehaviours$1","responseTime","focusInInput","previousValue_1","_sandbox","pv","sandboxIsOpen","openClass","onItemExecute","dismissOnBlur","typeahead","typeaheadBehaviours","schema$j","parts$6","populateFromBrowse","Typeahead","wrap$2","bindFuture","resA","bindResult","mapResult","foldResult","whenError","whenValue","withTimeout","errorThunk","timedOut","nu$c","worker","value$2","error$1","fromResult$1","fromFuture","future","fromPromise","completer","FutureResult","separator$2","toMenuItem","staticMenuItem","toMenuItems","targets","filterLinkTargets","filteredTargets","headerTargets","linkInfo","anchorTargets","anchorTargetTop","anchorTop","anchorTargetBottom","anchorBottom","historyTargets","history","joinMenuLists","bothEmpty","filterByQuery","term","lowerCaseTerm","getItems","fileType","urlBackstage","urlInputValue","getLinkInformation","getHistory","errorId","renderUrlInput","updateHistory","urlEntry","addToHistory","filetype","memUrlBox","getValidationHandler","memInvalidIcon","invalidComp","_menu","_entry","makeIcon","errId","memStatus","optUrlPicker","getUrlPicker","browseUrlEvent","memUrlPickerButton","controlHWrapper","openUrlPicker","componentData","urlData","fieldname","chosenData","renderCheckbox","repBehaviour","toggleCheckboxHandler","className","memIcons","renderHtmlPanel","renderLabel$2","backstageShared","renderCollection","runOnItem","escapeAttribute","htmlLines","mapItemName","tgt","collectionEvents","currentActive","renderTable","renderTh","renderHeader","header","renderTd","renderTr","renderRows","renderPanel","make$6","makeIframe","iframeSpec","factories","bar","collection","alertbanner","textarea","iframe","checkbox","dropzone","selectbox","sizeinput","urlinput","customeditor","htmlpanel","imagetools","table","noFormParts","_name","interpretInForm","oldBackstage","newBackstage","interpretParts","interpretWithoutForm","bubbleAlignments","valignCentre","alignCentre","alignLeft","alignRight","getInlineDialogAnchor","contentAreaElement","lazyAnchorbar","useEditableAreaAnchor","editableAreaAnchor","standardAnchor","getBannerAnchor","getCursorAnchor","bodyElement","getNodeAnchor","getAnchors","useFixedToolbarContainer","getContentAreaContainer","inlineDialog","Anchors","hasCustomColors$1","getColors$1","getColorCols$2","ColorInputBackstage","isDraggableModal$1","DialogBackstage","defaultStyleFormats","isNestedFormat","isBlockFormat","isInlineFormat","isSelectorFormat","mapFormats","userFormats","fmt","customFormats","formats","formatName","registerCustomFormats","registerFormats","getStyleFormats","registeredUserFormats","processBasic","isSelectedFor","getPreviewFor","formatterSpec","getStylePreview","register$3","enrichSupported","enrichMenu","submenuSpec","enrichCustom","customSpec","newItem","doEnrich","newItems_1","getStyleItems","init$7","parseStyle","getCssText","settingsFormats","settingsFlattenedFormats","eventsFormats","eventsFlattenedFormats","replaceSettings","enriched","modifications","fromSettings","fromEvents","getFlattenedKeys","trim$1","hasContentEditableState","contentEditable","isContentEditableTrue","isContentEditableFalse","create$8","isChildOfContentEditableTrue","getElementText","innerText","getOrGenerateId","isAnchor","isValidAnchor","isEditable","isHeader","isValidHeader","getLevel","headerTarget","headerId","anchorTarget","anchorId","anchorText","getHeaderTargets","elms","getAnchorTargets","getTargetElements","hasTitle","find$5","LinkTargets","STORAGE_KEY","HISTORY_LENGTH","isHttpUrl","isArrayOfUrl","isRecordOfUrlArray","getAllHistory","unparsedHistory","localStorage","SyntaxError","setAllHistory","itemsWithoutUrl","hasOwnProperty$2","isTruthy","makeMap","getOpt$1","getTextSetting","defaultValue","getPicker","file_picker_callback","getPickerTypes","optFileTypes","file_picker_types","optLegacyTypes","file_browser_callback_types","optTypes","_picker","types","getPickerSetting","pickerTypes","entry","typeahead_urls","optValidator","file_picker_validator_handler","filepicker_validator_handler","UrlInputBackstage","init$8","contextMenuState","styleselect","isContextMenuOpen","setContextMenuState","expandable$1","showContextToolbarEvent","hideContextToolbarEvent","schema$k","parts$7","factory$9","tgroupBehaviours","itemSelector","ToolbarGroup","schema$l","enhanceGroups","parts$8","factory$a","setGroups","groups","getGroupContainer","shell","toolbarBehaviours","Toolbar","generate$6","output$1","apportion","total","parray","within","withinWidth","toUnit","fitLast","fits","overflow","overflower","fitAll","tryFit","divide","partition$3","storedGroups","bGroups","findFocusedComp","focusedElm","setOverflow","overflowGroup","builtGroups","focusedComp","availableWidth","overflows","schema$m","schema$n","parts$9","schema$o","parts$a","toggledClass","toggle$2","toolbarSandbox","position$2","bounder","setGroups$1","makeSandbox$1","factory$b","getToolbar","FloatingToolbarButton","buildGroups","refresh$1","memFloatingToolbarButton","overflowGroups","floatingToolbarButton","factory$c","getOverflowBounds","overflowToggledClass","splitToolbarBehaviours","getOverflow","SplitFloatingToolbar","getAnimationRoot","slideConfig","getDimensionProperty","dimension","getDimension","disableTransitions","shrinkingClass","growingClass","setShrunk","closedClass","setGrown","doImmediateShrink","slideState","_calculatedSize","setCollapsed","onStartShrink","onShrunk","doStartShrink","calculatedSize","doStartSmartShrink","shrinker","doStartGrow","wasShrinking","beforeSize","fullSize","startPartialGrow","startCompleteGrow","setStartSize","setExpanded","onStartGrow","refresh$2","isExpanded","grow","shrink","immediateShrink","hasGrown","hasShrunk","isCollapsed","isGrowing","isShrinking","isTransitioning","toggleGrow","SlidingApis","exhibit$6","events$d","propertyName","onGrown","ActiveSliding","SlidingSchema","init$9","SlidingState","Sliding","schema$p","parts$b","onClosed","onOpened","toggleToolbar","overf","refresh$3","factory$d","toolbarToggleEvent","doSetGroups","_button","SplitSlidingToolbar","toolbarHeightChange","ReadOnlyChannel","ReadOnlyDataSchema","setDisabledAll","forEach","broadcastReadonly","uiComponents","readonly","outerContainer","mothership","toggleToReadOnly","setupReadonlyModeSwitch","setMode","createReadonlyReceivingForOverflow","renderToolbarGroupCommon","toolbarGroup","renderToolbarGroup","getToolbarbehaviours","toolbarSpec","modeName","onAttached","initGroups","renderMoreToolbarCommon","cyclicKeying","renderFloatingMoreToolbar","baseSpec","overflowXOffset","headerElem","moreDrawerData","lazyHeader","headerBounds","docElem","docBounds","renderSlidingMoreToolbar","renderToolbar","scrolling","baseToolbarButtonFields","toolbarButtonSchema","createToolbarButton","baseMenuButtonFields","MenuButtonSchema","createMenuButton","splitButtonSchema","createSplitButton","baseToolbarToggleButtonFields","toggleButtonSchema","createToggleButton","groupToolbarButtonSchema","createGroupToolbarButton","contextBarFields","contextButtonFields","contextToggleButtonFields","launchButtonFields","launchToggleButtonFields","toggleOrNormal","contextformbutton","contextformtogglebutton","contextFormSchema","contextToolbarSchema","createContextToolbar","createContextForm","getState$2","reflectState","ReflectingApis","events$e","reflectingConfig","reflectingState","updateState","renderComponents","newComponents","channel","rawData","ActiveReflecting","init$a","optS","ReflectingState","ReflectingSchema","Reflecting","schema$q","arrowPart","arrow","buttonPart","btn","splitDropdown","parts$c","factory$e","openMenu","executeOnButton","buttonEvents","ariaDescriptor","splitDropdownBehaviours","SplitDropdown","getButtonApi","getToggleApi","getTooltipAttributes","focusButtonEvent","rtlIcon$1","rtlTransform$1","renderCommonStructure","needsRtlClass","renderFloatingToolbarButton","identifyButtons","renderCommonToolbarButton","specialisation","toolbarButtonBehaviours","renderToolbarButton","renderToolbarButtonWith","bonusEvents","renderToolbarToggleButton","renderToolbarToggleButtonWith","fetchChoices","renderSplitButton","displayChannel","underlinePath","buttonComp","getFormApi","runOnExecute$1","formApi","renderContextButton","bridged","renderContextToggleButton","generateOne$1","generate$7","mementos","asSpecs","findPrimary","compInSystem","renderContextForm","toolbarType","commands","ContextForm","getHorizontalBounds","contentAreaBox","viewportBounds","contentBoxWidth","maxViewportWidth","getVerticalBounds","headerBox","isToolbarBelowContentArea","isToolbarAbove","containerBounds","getContextToolbarBounds","toolbarOrMenubarEnabled","_b","matchTargetWith","toolbarApi","lookup$1","scopes","rootElem","isOutsideRoot","startNode","inNodeScope","inEditorScope","ToolbarLookup","categorise","contextToolbars","forms","formNavigators","lookupTable","registerForm","contextForm","launch","registerToolbar","contextToolbar","ToolbarScopes","forwardSlideEvent","backSlideEvent","changeSlideEvent","resizingClass","renderContextToolbar","currentWidth","newContents","oldContents","forwardContents","generateSelectItems","_editor","generateItem","rawItem","response","si","invalid","validateItems","preItems","getCurrentValue","shouldHide","createMenuItems","createSelectButton","getComponent","setInitialValue","nodeChangeHandler","rawFormats","buildBasicStaticDataset","ResizeTypes","delimiter","SemiColon","buildBasicSettingsDataset","settingName","alignMenuItems","command","getSpec","getMatchingValue","_format","updateSelectMenuIcon","alignment","canApply","createAlignSelect","alignSelectMenu","defaultFontsFormats","systemStackFonts","splitFonts","fontFamily","fonts","font","isSystemFontStack","matchesSystemStack","getSpec$1","getFirstFont","queryCommandValue","matchOpt","updateSelectMenuText","createFontSelect","fontSelectMenu","defaultFontsizeFormats","legacyFontSizes","round$1","precision","factor","toPt","fontSize","toLegacy","getSpec$2","_loop_1","pt","legacy","Space","createFontsizeSelect","fontsizeSelectMenu","findNearest","getStyles","parents","matchNode","getCurrentSelectionParents","currentNode","onSetupFormatToggle","unbindCell","formatChanged","initialized","onActionToggleFormat","defaultBlocks","getSpec$3","nodeChangeEvent","detectedFormat","createFormatSelect","formatSelectMenu","getSpec$4","getFormatItems","flattenedItems","createStyleSelect","styleSelectMenu","defaultToolbar","renderFromBridge","bridgeBuilder","togglebutton","menubutton","splitbutton","grouptoolbarbutton","identify","allowToolbarGroups","TopToBottom","floating","styleSelectButton","fontsizeSelectButton","fontSelectButton","formatButton","alignMenuButton","extractFrom","bespokeButtons","fontsizeselect","fontselect","formatselect","align","removeUnusedDefaults","filteredItemGroups","subItem","convertStringToolbar","strToolbar","groupsStrings","isToolbarGroupSettingArray","createToolbar","toolbarConfig","lookupButton","toolbarItem","prefixes","toolbarGroups","bubbleSize","bubbleAlignments$1","anchorOverrides","desktopAnchorSpecLayouts","mobileAnchorSpecLayouts","getAnchorLayout","register$4","registryContextToolbars","contextbar","isRangeOverlapping","aTop","aBottom","bTop","bBottom","getLastElementVerticalBound","nodeBounds","ele","diffTop","shouldContextToolbarHide","lastElementBounds","contextToolbarBounds","forceHide","hideOrRepositionIfNecessary","lastAnchor","contextBarEle","wrapInPopDialog","shortcuts","getScopes","alloySpec","buildToolbar","default","allButtons","toolbarKey","launchContext","sElem","launchContextToolbar","setEditorTimeout","ContextToolbar","setup$3","ship","fireDismissPopups","onTouchstart","onTouchmove","onTouchend","onMousedown","onMouseup","onContentClick","onContentMouseup","onWindowScroll","onWindowResize","onEditorResize","Events$1","parts$d","partType$1","schema$r","customListDetail","itemsPart","parts$e","name$2","factory$f","setItems","getListContainer","itemComps","numListsRequired","numListsToAdd","itemsToAdd","makeItem","itemsToRemove","builtLists","setupItem","listBehaviours","CustomList","getOffsetParent","isFixed","offsetParent$1","getOrigin","morphAdt","static","appear","contextualInfo","transitionClass","fadeOutClass","fadeInClass","disappear","isPartiallyVisible","isTopCompletelyVisible","isBottomCompletelyVisible","isVisibleForModes","getPrior","getInitialPosition","storePrior","setInitialPosition","revertToOriginal","offsetBox_1","morphToOriginal","dockInfo","morphToFixed","winBox","isTop","getMorph","isDocked","getMorphToOriginal","morphToStatic","onUndocked","morphToCoord","method","onDocked","updateVisibility","morphToDocked","contextual","contextInfo","lazyContext","setVisible","refreshInternal","lazyViewport","morph","setDocked","resetInternal","refresh$4","reset","DockingApis","events$f","dockState","onShown","onHidden","ActiveDocking","DockingSchema","init$b","docked","initialBounds","DockingState","Docking","visibility","editorStickyOnClass","editorStickyOffClass","scrollFromBehindHeader","containerHeader","viewHeight","innerHeight","scrollPos","markerElement","markerPos","markerHeight","markerTop","markerBottom","editorHeaderPos","editorHeaderHeight","editorHeaderTop","editorHeaderBottom","editorHeaderDockedAtTop","editorHeaderDockedAtBottom","updateIframeContentFlow","isToolbarTop","getOccupiedHeight","parentElem","padding","parentWidth","updateSinkVisibility","sinkElem","updateEditorClasses","editorContainer","restoreFocus","focusedElem","activeElm","findFocusedElem","rootElm","setup$4","isDocked$1","getIframeBehaviours","getBehaviours$2","runOnSinkElement","onDockingSwitch","additionalBehaviours","headerHeight","boxHeight","topBound","StickyHeader","setup$5","isDocked$2","getBehaviours$3","StaticHeader","sticky","factory$g","setMenus","activeButton","hoveredButton","activeComp","hoveredComp","prev","SilverMenubar","owner$4","schema$s","getPartName$1","sketch$2","sSpec","slot","make$7","getSlotNames","getSlot","onSlot","def","onSlots","doShowing","doShow","doHide","hideSlot","hideSlots","hideAllSlots","showSlot","slotBehaviours","slotApis","SlotContainer","sidebarSchema","createSidebar","setup$6","sidebars","addToggleButton","handleToggle","makePanels","panelConfigs","sidepanel","optSidePanelSpec","sidePanelSpec","makeSidebar","slotContainer","setSidebar","sidebar","optSlider","toggleSidebar","optSlotContainer","whichSidebar","sidebarOpen","fixSize","autoSize","renderSidebar","getAttrs","fromHtml$2","renderSpinner","toggleThrobber","renderThrobber","setup$7","lazyThrobber","throbberState","timerId","factory$h","getSocket","getHeader","setToolbar","setToolbars","mToolbar","refreshToolbar","getThrobber","focusToolbar","optToolbar","setMenubar","menubar","focusMenubar","partMenubar","toolbarFactory","sliding","partMultipleToolbar","tc","partToolbar","renderer","lazyToolbar","lazyMoreButton","partHeader","partSocket","partSidebar","partThrobber","OuterContainer","grps","grp","renderedToolbars","defaultMenubar","defaultMenus","edit","tools","help","make$8","removedMenuItems","itemName","removedMenuItem","parseItemsString","identifyMenus","rawMenuData","userDefinedMenus","validMenus","menuData","isNotSeparator","fireSkinLoaded$1","_skinLoaded","fireSkinLoadError$1","SkinLoaded","loadSkin","isInline","skinUiCss","contentCSS","styleSheetLoader","rawUiConfig","toolbarButtonsConfig","detection","isiOS12","setupEvents","initialDocEle","lastWindowDimensions","innerWidth","lastDocumentDimensions","docEle","outer","inner","elementLoad","lastToolbarWidth","targetNode","socket","limit","addQueryValueHandler","toolbarMode","refreshDrawer","iframeContainer","Iframe","parseToInt","numToPx","calcCappedSize","minSize","maxSize","minOverride","maxOverride","Utils","getHeight$1","baseHeight","minHeight","getHeightWithFallback","getWidth$1","baseWidth","minWidth","getWidthWithFallback","getTargetPosAndHeight","targetElm","render$1","floatContainer","isSticky","editorMaxWidthOpt","isSplitToolbar","prevPosAndHeight","updateChromePosition","tbar","targetBounds","bodyMargin","repositionFloatingUiComponents","updateChromeUi","resetDocking","toolbar_1","addClass","removeClass","uiContainer","requestAnimationFrame","posAndHeight","Inline","register$5","alignToolbarButtons","cmd","alignNoneToolbarButton","addButton","AlignmentButtons","toggleFormat","registerFormatButtons","name_1","registerCommandButtons","registerCommandToggleButtons","registerButtons","registerMenuItems","addMenuItem","register$6","SimpleControls","toggleUndoRedoState","checkState","onUndoStateChange","registerMenuItems$1","registerButtons$1","register$7","UndoRedo","toggleVisualAidState","hasVisual","onVisualAid","registerMenuItems$2","addToggleMenuItem","registerToolbarButton","register$8","VisualAid","toggleOutdentState","queryCommandState","onNodeChange","registerButtons$2","register$9","IndentOutdent","register$a","ComplexControls","setup$8","FormatControls","nu$d","transpose$1","dx","dy","isTouchEvent$1","fromPageXY","pageX","pageY","fromClientXY","transposeContentAreaContainer","containerPos","getPos","getPointAnchor","getSelectionAnchor","getNodeAnchor$1","getAnchorSpec","isTriggeredByKeyboardEvent","initAndShow","buildMenu","contextmenu","anchorSpec","bubbleSize$1","bubbleAlignments$2","isTouchWithinSelection","touch_1","rngRectOpt","rngRect","getAnchorSpec$1","setupiOSOverrides","originalSelection","selectionReset","setRng","unbindEventListeners","preventMousedown","clearSelectionReset","initAndShow$1","shouldHighlightImmediately","openiOS_1","patchPipeConfig","shouldNeverUseNative","contextmenu_never_use_native","getMenuItems","defaultItems","contextMenus","isContextMenuDisabled","getContextMenu","Settings$1","isSeparator$1","separator$3","makeContextItem","addContextMenuGroup","groupItems","lastMenuItem","generateContextMenu","selectedElement","sections","allItems","isNativeOverrideKeyEvent","isTriggeredByKeyboard","pointerType","setup$9","hideContextMenu","_e","showContextMenu","initAndShow$2","hideEvents","adt$c","subtract","add$4","transform$1","changes","asFixed","coord","asAbsolute","asOffset","withinRange","coord1","coord2","getDeltas","toStyles","stylesOpt","translate$2","absolute$3","fixed$1","absorb","partialCoord","originalCoord","absorbOne","stencil","optX","optY","get$e","snapsInfo","leftAttr","topAttr","set$8","getCoords","snapInfo","moveOrSnap","newCoord","mustSnap","findClosestSnap","findSnap","fixedCoord","spanned","stopDrag","findMatchingSnap","snaps","sensor","inRange","getSnapPoints","matchSnap","bestSnap","deltas","bestDeltas","currAvg","bestAvg","snapTo","snapTo$1","dragConfig","repositionTarget","snapPin","DraggingApis","initialAttribute","resetZIndex","initZIndex","changeZIndex","zindex","instigate","anyComponent","discard","createComponent","blockerClass","blockerEvents","SnapSchema","schema$t","getCurrentCoord","location","clampCoords","coords","absoluteCoord","newCoords","offset$1","calcNewCoord","optSnaps","currentCoord","snapping","onSensor","dragBy","onDrag","calcStartData","move$1","dragState","dragMode","dragStartData","getStartData","dlt","updateStartState","setStartData","init$c","dragApi","forceDrop","drop","delayDrop","getData$1","getDelta$1","MouseData","events$g","stop$1","schema$u","init$d","getDataFrom","getData$2","getDelta$2","TouchData","events$h","blockerCell","schema$v","events$i","schema$w","mouse","mouseOrTouch","DraggingBranches","init$e","previous","calculateDelta","dragEvent","nuData","DragState","Dragging","dragger","platform$1","snapWidth","snapOffset","calcSnap","selectorOpt","td","selectorHandle","sensorLeft","sensorTop","sensorWidth","sensorHeight","getSnapsConfig","isSameCell","cellOpt","currentTd","createSelector","setup$a","tlTds","brTds","startCell","finishCell","getTopLeftSnap","memTopLeft","getTopLeftSnaps","getBottomRightSnap","memBottomRight","getBottomRightSnaps","topLeftSnaps","bottomRightSnaps","bottomRight","showOrHideHandle","isAbove","isBelow","cellRect","viewportHeight","aboveViewport","belowViewport","getSnapConfig","snapTopLeft","snapLastTopLeft","snapBottomRight","snapLastBottomRight","otherCells","upOrLeftCells","downOrRightCells","TableSelectorHandles","getDimensions","resizeType","originalHeight","originalWidth","Both","resize$3","dim","isHidden$1","renderElementPath","getDataPath","newPathElements","divider","newAcc","updatePath","newPath","parent_1","isDefaultPrevented","isPropagationStopped","ElementPath","renderWordCount","replaceCountText","words","characters","currentVal","newMode","wordCount","renderStatusbar","renderResizeHandlerIcon","renderBranding","linkHtml","getResizeType","plugins","None","Vertical","getTextComponents","getComponents","setup$b","lazyOuterContainer","platformClasses","touchPlatformClass","deviceClasses","dirAttributes","verticalDirAttributes","isHeaderDocked","memAnchorBar","lazyAnchorBar","throbber","sb","statusbar","socketSidebarContainer","hasMultipleToolbar","hasToolbar","hasMenubar","getPartToolbar","editorComponents","containerComponents","border","getUi","broadcastAll","setEditorSize","parsedHeight","parsedWidth","renderUI","toolbarGroupButtonConfig","addGroupToolbarButton","toolbarOpt","Render","describedBy","describedElement","describeElement","describeId","AriaLabel","labelledBy","labelledElement","labelElement","schema$x","basic","parts$f","dragBlockClass","getDragBounds","factory$i","dialogBusyEvent","dialogIdleEvent","busyBehaviours","showDialog","busyComp","externalBlocker","bc","getBusySpec","busySpec","busy","hideDialog","blockerDom","getDialogBody","getDialogFooter","setBusy","setIdle","modalEventsId","getFooter","modalBehaviours","ModalDialog","alertBannerFields","alertBannerSchema","createBarFields","itemsField","buttonFields","buttonSchema","checkboxFields","checkboxSchema","checkboxDataProcessor","formComponentFields","formComponentWithLabelFields","colorInputFields","colorInputSchema","colorInputDataProcessor","colorPickerFields","colorPickerSchema","colorPickerDataProcessor","dropZoneFields","dropZoneSchema","dropZoneDataProcessor","createGridFields","iframeFields","iframeSchema","iframeDataProcessor","inputFields","inputSchema","inputDataProcessor","selectBoxFields","selectBoxSchema","selectBoxDataProcessor","sizeInputFields","sizeInputSchema","sizeInputDataProcessor","textAreaFields","textAreaSchema","textAreaDataProcessor","urlInputFields","urlInputSchema","urlInputDataProcessor","customEditorFields","customEditorFieldsOld","customEditorSchema","customEditorDataProcessor","htmlPanelFields","htmlPanelSchema","imageToolsFields","imageToolsSchema","collectionFields","collectionSchema","collectionDataProcessor","createLabelFields","tableFields","tableSchema","createItemsField","itemSchema$2","sErr","passValue","panelSchema","panelFields","tabFields","tabPanelFields","tabPanelSchema","dialogToggleMenuItemSchema","dialogToggleMenuItemDataProcessor","baseButtonFields","dialogButtonFields","normalButtonFields","menuButtonFields","dialogButtonSchema","dialogButtonFields$1","dialogButtonSchema$1","dialogSchema","tabpanel","createDialog","getAllObjects","isNamedItem","dataProcessors","togglemenuitem","getDataProcessor","getNamedItems","createDataValidator","namedItems","urlDialogButtonSchema","urlDialogSchema","createUrlDialog","extract$1","internalDialog","dataValidator","DialogManager","openUrl","redial","value$3","isSet","toValidValues","renderBodyPanel","memForm","formValue","vals","factory$j","tabButtonBehaviours","TabButton","schema$y","tabsPart","barDetail","dismissTab$1","tabbar","changeTab$1","clickToDismiss","tabClass","parts$g","factory$k","tabbarBehaviours","selectedClass","tab","Tabbar","factory$l","tabviewBehaviours","Tabview","schema$z","barPart","tabs","viewPart","parts$h","factory$m","tabValue","tabview","tabWithValue","tabData","onChangeTab","changeTabBy","section","byPred","tabSectionBehaviours","selectFirst","onDismissTab","getViewItems","showTab","tabKey","getTabIfNotActive","optTab","TabSection","measureHeights","allTabs","tabviewComp","getMaxHeight","heights","getMaxTabviewHeight","tablist","documentElement$1","tabviewHeight","isTabListBeside","currentTabHeight","dialogTopMargin","dialogBottomMargin","dialogHeight","chromeHeight","setTabviewHeight","updateTabviewHeight","dialogBody","maxTabHeight","getTabview","smartTabHeight","extraEvents","maxTabHeightOpt","oldHeight","naiveTabHeight","SendDataToSectionChannel","SendDataToViewChannel","renderTabPanel","storedValue","updateDataWithForm","formData","validData","currentData","setDataOnForm","oldTab","tabMode","_viewItems","oldName","tsection","dialogChannel","titleChannel","bodyChannel","footerChannel","bodySendMessageChannel","renderBody","ariaAttrs","incoming","_comp","isTabPanel","ariaAttributes","renderInlineBody","contentId","renderModalBody","bodySpec","renderIframeBody","hiddenHeader","pClose","pUntitled","pBodyMessage","pFooter","footer","pFooterGroup","startButtons","endButtons","renderDialog","dialogClass","blockerBackdropClass","scrollLockClass","extraStyles","dialogEvents","renderClose","renderTitle","renderDragHandle","renderInlineHeader","titleId","renderModalHeader","pTitle","pHandle","draghandle","draggable","getEventExtras","lazyDialog","closeWindow","onBlock","blockEvent","bs","onUnblock","renderModalDialog","mapMenuButtons","mapItems","extractCellsToObject","menuButton","innerAcc","initCommonEvents","fireApiEvent","_event","initUrlDialog","getInstanceApi","withSpec","_c","currentDialog","initDialog","currentDialogInit","cur","onTabChange","newTabName","oldTabName","SilverDialogEvents","makeButton","lookup$2","footerButtons","buttonName","memButton","_data","buttonGroups","makeGroup","renderFooter","initSpec","lookupByName","renderInlineFooter","renderModalFooter","getCompByName","form_1","getFormWrapper","footerState","validateData","dialogState","getDialogApi","doRedial","menuItemStates","withRoot","valueComp","representedValues","menuItemCurrentState","setData","prevData","instanceApi","mergedData","newInternalData","bodyState","tabSection","dialogInit","renderDialog$1","storagedMenuButtons","objOfCells","dialogSize","modalAccess","getForm","outerForm","renderInlineDialog","dialogLabelId","dialogContentId","memHeader","memBody","memFooter","global$g","getUrlDialogApi","sendMessage","SUPPORTED_MESSAGE_ACTIONS","isSupportedMessage","mceAction","isCustomMessage","handleMessage","insertContent","renderUrlDialog","iframeUri","base_uri","href","iframeDomain","protocol","host","port","messageHandlerUnbinder","isSameOrigin","onMessage","unbinder","iframeEle","iframeWin","postMessage","setup$c","closeDialog","alertDialog","memFooterClose","titleSpec","closeSpec","footerCloseButton","setup$d","confirmDialog","memFooterYes","footerNo","footerYesButton","validateData$1","isAlertOrConfirmDialog","inlineAdditionalBehaviours","setup$e","isStickyToolbar$1","openInlineDialog","openModalDialog","openModalUrlDialog","internalInitialData","config$1","refreshDocking","dialogUi","inlineDialogComp","confirm","alert","WindowManager","Theme","windowMgr","getWindowManagerImpl","getNotificationManagerImpl","isNamedAnchor","tagName","getAttrib","isValidId","getId","selectedNode","createHTML","Anchor","insertAnchor","newId","currentId","Dialog","Commands","isNamedAnchorNode","setContentEditable","nodes","parser","addNodeFilter","serializer","FilterContent","selectorChangedWithUnbind","Buttons","Plugin","fireInsertCustomChar","insertChar","evtChr","Actions","getCharMap","charmap","getCharMapAppend","charmap_append","isArray$1","UserDefined","getDefaultCharMap","charmapFilter","grep","getCharsFromSetting","settingValue","extendCharMap","userCharMap","userCharMapAppend","userDefinedGroup","cg","getCharMap$1","CharMap","Api","charMatches","charCode","lowerCasePattern","fromCharCode","Scan","patternName","charMap","makeGroupItems","makeTabs","charGroup","makePanel","makeTabPanel","currentTab","scanAndSet","dialogApi","SEARCH_DELAY","updateFilter","bridgeSpec","changeData","addAutocompleter","autocompleteApi","groupBy","wasType","is$1","fromElements","lastChild","fireListEvent","unsafe","actual","Global$1","htmlElement","HTMLElement","isTextNode","isListNode","isOlUlNode","isListItemNode","isDlItemNode","isTableCellNode","isBr","isFirstChild","isLastChild","isTextBlock","getTextBlockElements","blockElements","isBogusBr","previousSibling","isEmpty","keepBookmarks","isChildOfBody","isChildOf","NodeType","getParentList","selectionStart","getClosestListRootElm","isParentListSelected","parentList","selectedBlocks","findSubLists","getSelectedSubLists","getSelectedBlocks","findParentListItemsNodes","listItemsElms","parentLi","getSelectedListItems","getSelectedDlItems","parentTableCell","findLastParentListNode","parentLists","getSelectedLists","firstList","subsequentLists","getSelectedListRoots","selectedLists","getUniqueListRoots","lists","listRoots","isList","shouldIndentOnTab","getForcedRootBlock","getForcedRootBlockAttrs","createTextBlock","contentNode","textBlock","hasContentNode","getBlockElements","createFragment","blockName","setAttribs","shallowAs","mutate","joinSegment","joinSegments","segments","appendSegments","head$1","tail","createSegment","listType","createSegments","populateSegments","listAttributes","itemAttributes","normalizeSegment","appendItem","writeShallow","cast","newCast","depth","writeDeep","composeList","entries","isList$1","hasFirstChildList","hasLastChildList","isIndented","cloneItemContent","li","createEntry","indentEntry","indentation","cloneListProperties","previousSiblingEntry","normalizeEntries","matchingEntry","parseItem","itemSelection","selectionState","currentItemEntry","childListEntries","parseList","newDepth","parseLists","initialDepth","sourceList","outdentedComposer","indentedComposer","contentDocument","composeEntries","groupIsIndented","indentSelectedEntries","getItemSelection","selectedListItems","listIndentation","entrySets","entrySet","composedLists","composedList","splitList","ul","tmpRng","bookmarks","newBlock","removeAndKeepBookmarks","insertAfter","SplitList","outdentDlItem","dl","indentDlItem","dlIndentation","dlItems","getNormalizedPoint","normalizeRange","outRng","rangeStart","rangeEnd","Range","selectionIndentation","isHandled","bookmark","getBookmark","moveToBookmark","indentListSelection","outdentListSelection","flattenListSelection","DOM$1","createBookmark","setupEndPoint","offsetNode","resolveBookmark","restoreEndPoint","nodeIndex","Bookmark","isCustomList","listToggleActionFromListName","listName","updateListStyle","setStyle","updateListAttrs","updateListWithDetails","removeStyles","getEndPointNode","getSelectedTextBlocks","textBlocks","endNode","siblings","isBookmarkNode","hasCompatibleStyle","sib","sibStyle","detailStyle","applyList","listItemName","listBlock","rename","mergeWithAdjacentLists","isValidLists","list1","list2","hasSameListStyle","targetStyle","hasSameClasses","elm1","elm2","shouldMerge","updateList","newList","toggleMultipleLists","hasListStyleDetail","toggleSingleList","toggleList","selectedSubLists","ToggleList","DOM$2","normalizeList","normalizeLists","NormalizeLists","findNextCaretContainer","isForward","nonEmptyBlocks","getNonEmptyElements","walker","hasOnlyOneBlockChild","unwrapSingleBlockChild","moveChildren","fromElm","toElm","mergeLiElements","listNode","$","nestedLists","mergeIntoEmptyLi","fromLi","toLi","mergeForward","mergeBackward","resolvedBookmark","backspaceDeleteFromListToListCaret","selectionStartElm","rng_1","otherLi_1","removeBlock","parentBlock","backspaceDeleteIntoListCaret","otherLi_2","backspaceDeleteCaret","backspaceDeleteRange","startListParent","backspaceDelete","DELETE","Delete","queryListCommandState","addQueryStateHandler","setupTabKey","metaKeyPressed","Keyboard","listState","tableCellIndex","hasPlugin","plugin","inArray","getAutoLinkPattern","getDefaultLinkTarget","getDefaultLinkProtocol","rangeEqualsDelimiterOrSpace","rangeString","handleEclipse","parseCurrentLine","handleSpacebar","handleEnter","scopeIndex","rngText","autoLinkPattern","defaultLinkTarget","setAttrib","autoUrlDetectState","Keys","punctuationStr","punctuation","punctuation$1","findAndReplaceDOMText","regex","replacementNode","captureGroup","blockElementsMap","hiddenTextElementsMap","shortEndedElementsMap","getMatchIndexes","txt","stepThroughMatches","replaceFn","startNodeIndex","endNodeIndex","innerNodes","atIndex","curNode","matchLocation","matchIndex","genReplacer","makeReplacementNode","stencilNode_1","fill","node_1","elA","innerNode","innerEl","replaceChild","elB","getWhiteSpaceElements","getShortEndedElements","FindReplaceText","getElmIndex","markAllMatches","currentSearchState","findSpansByIndex","spans","getElementsByTagName","moveSelection","forward","searchState","testIndex","scrollIntoView","removeNode","escapeSearchText","wholeWord","escapedText","wordRegex","matchCase","isMatchSpan","currentMatchIndex","currentIndex","nextIndex","keepEditorSelection","hasNext","hasPrev","done$1","next$1","prev$1","replace$1","selectedText","updateButtonStates","updateNext","updatePrev","updateSearchState","matchcase","wholewords","disableAll","notFoundAlert","focusButtonIfRequired","doFind","findtext","replacetext","getScripts","getAudioTemplateCallback","getVideoTemplateCallback","hasLiveEmbeds","shouldFilterHtml","getUrlResolver","hasAltSource","hasPoster","hasDimensions","getVideoScriptMatch","trimPx","getEphoxEmbedData","altsource","poster","htmlToData","isEphoxEmbed","allow_conditional_comments","movie","videoScript","guess","mimes","mp3","m4a","wav","mp4","webm","ogg","swf","fileEnd","mime","Mime","setAttributes","updatedAttrs","updateEphoxEmbed","styleMap","serializeStyle","sources","updateHtml","updateAll","hasImage","writer","sourceCount","comment","cdata","imgAttrs","UpdateHtml","urlPatterns","allowFullscreen","getProtocol","protocolMatches","getUrl","newUrl","matchPattern","getIframeHtml","getFlashHtml","getAudioHtml","audioTemplateCallback","altsourcemime","getVideoHtml","videoTemplateCallback","sourcemime","getScriptHtml","dataToHtml","dataIn","embed","convertURL","embedPromise","rej","wrappedResolve","defaultPromise","loadedData","getEmbedHtml","embedHandler","isCached","Service","extractMeta","sourceInput","mainData","metaData","getFromData","getFromMetaData","getNonEmptyValue","getFromValueFirst","getFromMetaFirst","dims","errorMessage","notificationManager","snippetToData","embedSnippet","isMediaElement","getEditorData","snippet","serialize","addEmbedHtml","snippetData","selectPlaceholder","beforeObjects","afterObjects","handleInsert","submitForm","editorData","handleSource","serviceData","handleEmbed","dataFromEmbed","handleUpdate","mediaInput","generalTab","embedTextarea","embedTab","advancedFormItems","advancedTab","sanitize","blocked","attrName","Sanitize","createPlaceholderNode","placeHolder","shortEnded","retainAttributesAndInnerHtml","transparentSrc","createPreviewIframeNode","previewWrapper","previewNode","shimNode","allowfullscreen","class","frameborder","sourceNode","attrValue","attribs","ai","escape","isPageEmbedWrapper","nodeClass","isWithinEmbedWrapper","placeHolderConverter","ceFalse","Nodes","specialElements","getSpecialElements","boolAttrs","getBoolAttrs","addAttributeFilter","realElm","realElmName","unescape","$elm","ResolveName","hasClass","objectType","stateSelectorAdapter","customTabs","addTab","currentCustomTabs","dialogOpener","getHelpTabs","KeyboardShortcuts","shortcutList","shortcutText","tablePanel","KeyboardShortcutsTab","supplant","isStringOrNumber","fullMatch","urls","PluginUrls","tab$1","availablePlugins","premiumPlugins","premiumPluginList","makeLink","maybeUrlize","getMetadata","getPluginKeys","forced_plugins","pluginLister","pluginKeys","pluginLis","pluginsString","installedPlugins","htmlPanel","PluginsTab","tab$2","getVersion","majorVersion","minorVersion","changeLogLink","VersionTab","tab$3","KeyboardNavTab","parseHelpTabsSetting","tabsFromSettings","newTabs","getNamesFromTabs","versionsIdx","parseCustomTabs","nav","foundTabs","dialogTabs","skinsDirectory","contentCssPath","importedPlugins","fireVisualBlocks","toggleVisualBlocks","pluginUrl","enabledState","VisualBlocks","isEnabledByDefault","Bindings","toggleActiveState","editorEventCallback","getPreviewDialogWidth","getPreviewDialogHeight","getContentStyle","shouldUseContentCssCors","getPreviewHtml","headHtml","contentStyle","getURI","cors","bodyId","body_id","bodyClass","body_class","isMetaKeyPressed","preventClicksOnLinksScript","directionality","dirAttr","previewHtml","IframeContent","dataApi","webpackContext","webpackContextResolve","__webpack_require__","hasProPlugin","DetectProPlugin","clipboard","quirks","firePastePreProcess","isWordHtml","wordContent","firePastePostProcess","firePastePlainTextToggle","firePaste","ieFake","togglePlainTextPaste","pasteFormat","pasteHtml","pasteText","par","asyncValues","asyncValue","par$1","futures","traverse","internalMimeType","internalMark","mark","unmark","isMarked","InternalHtml","internalHtmlMime","isPlainText","toBRs","openContainer","rootTag","rootAttrs","encodeAllRaw","toBlockElements","blocks","tagOpen","tagClose","paragraphs","stitch","Newlines","shouldBlockDrop","shouldPasteDataImages","shouldFilterDrop","getPreProcess","getPostProcess","getWebkitStyles","shouldRemoveWebKitStyles","shouldMergeFormats","isSmartPasteEnabled","isPasteAsTextEnabled","getRetainStyleProps","getWordValidElements","defaultValidElements","shouldConvertWordFakeLists","shouldUseDefaultFilters","domParser","shortEndedElements","ignoreElements","walk","trimHtml","trimSpaces","s1","s2","createIdGenerator","isMsEdge","isWordContent","isNumericList","isBulletList","convertFakeListsToProperLists","currentListNode","prevListNode","lastLevel","trimListStart","regExp","removeIgnoredNodes","_listIgnore","convertParagraphToLi","paragraphNode","_listLevel","nodeText","filterStyles","validStyles","styleValue","outputStyles","filterWordContent","retainStyleProperties","spaces","validElements","valid_elements","valid_children","attributesOrder","preProcess","WordFilter","preProcess$1","forced_root_block","isRootContent","processResult","cancelled","postProcessFilter","tempBody","postProcessArgs","filterContent","preProcessArgs","filteredContent","hasEventListeners","ProcessFilters","paste","isAbsoluteUrl","isImageUrl","createImage","pasteHtmlFn","createLink","linkSelection","insertImage","smartInsertContent","pasteAsText","SmartPaste","isCollapsibleWhitespace","isNewLineChar","isNewline","normalizeWhitespace","pcIsSpace","doPaste","pasteHtml$1","internalFlag","encodedText","normalizedText","forced_root_block_attrs","getDataTransferItems","mceInternalUrlPrefix","legacyText","contentType","getClipboardContent","clipboardEvent","clipboardData","hasContentType","clipboardContent","mimeType","hasHtmlOrText","getBase64FromUri","isValidDataUriImage","imgElm","images_dataimg_filter","extractFilename","uniqueId","pasteImage","imageItem","images_reuse_filename","blobCache","editorUpload","blobInfo","existingBlobInfo","findFirst","cachedBlobInfo","blobUri","isClipboardEvent","readBlobsAsDataUris","getAsFile","onload","getImagesFromDataTransfer","images","pasteImageData","paste_data_images","blobResults","isBrokenAndroidClipboardEvent","isKeyboardPasteEvent","registerEventHandlers","pasteBin","keyboardPastePlainTextState","keyboardPasteEvent","insertClipboardContent","isKeyBoardPaste","plainTextMode","isPlainTextHtml","isImage","isDefaultContent","removePasteBinOnKeyUp","webkit","getLastRng","registerEventsAndFilters","isPasteInsert","isWebKitFakeUrl","isDataUri","allow_html_data_urls","getPasteBinParent","isExternalPasteBin","delegatePasteEvents","pasteBinElm","pasteBinDefaultContent","isDefault","lastRngCell","gecko","pasteBinClone","pasteBinClones","dirtyWrappers","cleanWrapper","copyAndRemove","isPasteBin","PasteBin","Clipboard","hasWorkingClipboardApi","iOS","setHtml5Clipboard","clearData","setClipboardData","markedHtml","contenteditable","setStyles","offscreenRange","selectNodeContents","isTableSelection","hasSelectedContent","CutCopy","getCaretRangeFromEvent","getCaretRangeFromPoint","isPlainTextFileUrl","plainTextContent","setFocusedRange","draggingInternallyState","dropContent","content_1","DragDrop","postProcess","PrePostProcess","addPreProcessFilter","filterFunc","addPostProcessFilter","removeExplorerBrElementsAfterBlocks","explorerBlocksRegExp","removeWebKitStyles","webKitStyles","webKitStylesSetting","dom_1","decode","removeUnderlineAndFontInAnchor","Quirks","makeSetupHandler","pastePlainTextToggleHandler","applyListFormat","getNumberStyles","getBulletStyles","getSelectedStyleType","listElm","ListUtils","styleValueToText","isWithinList","iconStyle","listStyleType","listStyle","addControl","invalidTypeMessage","incorrect","COMMENT","isComment","startsWith","sourceDom","targetDom","cssText","rawParent","prevSibling","detailnew","extended","rowdata","elementnew","rowdatanew","rowcells","rowdetails","ancestors","ancestors$1","children$2","child$1","child$2","firstLayer","filterFirstLayer","LayerSelector","tags","isRootOrUpperTable","notCell","neighbours","neighbourCells","neighbourRows","firstCell","grid$1","rowProp","colProp","rowsCount","cols","TableLookup","fromTable","parentSection","parentName","rowspan","colspan","fromPastedRows","example","DetailsList","getAt","warehouse","findItem","filtered","filterItems","maxRows","maxColumns","currentRow","cr","cc","newpos","justCells","Warehouse","statsStruct","findSelectedStats","house","totalColumns","totalRows","minRow","minCol","maxRow","maxCol","endRow","endCol","seenSelected","fillInGaps","stats","needCell","clean","emptyRows","selectedSelector","unselectedCells","CopySelected","copy$1","cloneChildren","createCell","replica","pasteReplace","cloneFormats","oldCell","newCell","first$1","firstText","formatSelector","clonedFormat","cellOperations","formatsToClone","docu","lastNode","gap","TableFill","inSelection","leftEdge","rightEdge","topEdge","bottomEdge","finishCol","finishRow","isWithin","isRectangular","isRect","detailIsWithin","CellBounds","detailA","detailB","getAnyBox","startCoords","finishCoords","sc","fc","getBox","CellGroup","intercepts","parentCell","innerCell","isContainedBy","c1","c2","CellFinder","deltaColumn","getWarehouse","intercepts$1","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","lastCell","getBox$1","TablePositions","TagBoundaries","DomUniverse","isEmptyTag","isNonEditable","comparePosition","copyAttributesTo","destination","as","up","down","copyTo","afterAll","appendAll","setText","leftRight","brokenPath","bisect","universe","ind","breakToRight","second","breakToLeft","prior","breakPath","breaker","splits","breakage","nextChild","look","oneAll","unsafeOne","commonElement","eq$1","unsafeSubset","ps1","ps2","finder","topDown","startIndex","sIndex","eIndex","ancestors$2","pruned1","pruned2","firstpath","secondpath","subset","ancs","SubsetFn","sharedOne","subset$1","ancestors$3","breakToLeft$1","breakToRight$1","breakPath$1","Parent","sharedOne$1","_universe","subset$2","ancestors$4","breakToLeft$2","breakToRight$2","breakPath$2","DomParent","Identified","getIsRoot","rootTable","boxes","startTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve","sels","lastSelectedSelector","getEdges","firstSelectedSelector","tbl","expandTo","shiftSelection","CellSelection","retrieve$1","retrieveBox","firstAncestor","lastAncestor","fA","lA","TableSelection","attributeSelector","firstSelected","lastSelected","Ephemera","type$1","onMultiple","onSingle","SelectionTypes","selections","unmergable","hasSpan","mergable","_env","CellOperations","noMenu","notCell$1","paste$1","pasteRows","generators","TableTargets","extractSelected","serializeElements","getTextContent","registerEvents","cellSelection","multiCellContext","domCell","pasteCells","needManualCalc","toNumber","px","getProp","getCalculatedHeight","paddingTop","paddingBottom","borderTop","borderBottom","boxSizing","borders","RuntimeSize","genericSizeRegex","percentageBasedSizeRegex","pixelBasedSizeRegex","setPixelWidth","amount","setPercentageWidth","getHeightValue","normalizePixelSize","getTotalHeight","getSpan","getRawWidth","cssWidth","normalizePercentageWidth","cellWidth","tableSize","pixelWidth","choosePercentageSize","percentMatch","intWidth","getPercentageWidth","normalizePixelWidth","choosePixelSize","pixelMatch","floatWidth","getPixelWidth","getGenericWidth","setGenericWidth","Sizes","halve","main","CellMutations","rowInfo","colInfo","rtlEdge","ltrEdge","getTop","findPositions","getInnerEdge","getOuterEdge","cellOption","lastLine","negate","optElements","BarPositions","ResizeDirection","TableDirection","directionAt","auto","getGridSize","TableGridSize","setIfNot","newRows","newCells","renderSection","gridSection","sectionName","tb","isNew","tr","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","copy$2","clonedCell","Redraw","repeat","repititions","deduce","aa","rowsArr","getBlock","isSingle","getFallback","decide","inBlock","singleInBlock","detailOption","rows$1","Blocks","namespace","dashNamespace","Styles","row$1","Bar","resizeBar","resizeRowBar","resizeColBar","BAR_THICKNESS","wire","drawBar","cpOption","cp","refreshCol","colPositions","tableHeight","colBar","refreshRow","rowPositions","tableWidth","rowBar","refreshGrid","hdirection","vdirection","each$2","bars","isRowBar","isColBar","Bars","addCell","gridRow","setCells","mutateCell","mapCells","getCell","getCellElement","cellLength","GridRow","getColumn","getRow","findDiff","subgrid","restOfRow","endColIndex","restOfColumn","endRowIndex","TableGrid","toDetails","seen","ri","ci","updateSeen","toGrid","rowCells","Transitions","fromWarehouse","deriveRows","rendered","findRow","rowOfCells","toDetailList","findInWarehouse","postAction","genWrappers","newElements","onCell","onPasteRows","lc","onMergable","_warehouse","onUnmergable","onCells","measure","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","rowDelta","colDelta","measureWidth","colLengthA","colLengthB","generator","rowFill","_row","colFill","tailor","fillCols","fillRows","modifiedCols","tailoredGrid","Fitment","substitution","unmerge","isToReplace","uniqueCells","currentCell","splitRows","rowPrevCells","replacement","_loop_2","sub","MergingOperations","isSpanning","matching","mergeTables","mergeHeight","mergeWidth","fittedGrid","fittedNewGrid","secondDelta","fittedOldGrid","TableMerge","insertRowAt","between","withinSpan","insertColumnAt","splitCellIntoColumns","exampleRow","exampleCol","isTargetCell","splitCellIntoRows","deleteColumnsAt","deleteRowsAt","ModificationOperations","replaceIn","isTarget","notStartRow","notStartColumn","replaceColumn","alreadyAdded","replaceRow","targetRow","TransformOperations","only","ColumnContext","neighbours$1","determine","zero","onOnly","singleColumnWidth","newNext","minCellWidth","newThis","diffx","onMiddle","_prev","Deltas","getSpan$1","hasColspan","hasRowspan","getInt","CellUtils","getRaw$1","getRawW","getRawH","getWidthFrom","backups","columnCell","deduced","getDeduced","getRawWidths","getPercentageWidths","getPixelWidths","getHeightFrom","rowCell","getPixelHeights","getRawHeights","ColumnSizes","measures","recalculateWidth","widths","recalculateHeight","matchRowHeight","Recalculations","percentageSize","getCellDelta","_delta","setTableWidth","_newWidths","ratio","getWidths","setElementWidth","pixelSize","newWidths","chooseSize","fallbackWidth","getTableSize","TableSize","getWarehouse$1","sumUp","getTableWarehouse","adjustWidth","newSizes","adjustHeight","newHeights","newCellSizes","newRowSizes","adjustWidthTo","Adjustments","handleUnsupported","baseWith","invalidKeys","handleExact","exactly","verifyGenerators","elementToData","toData","nuFrom","recent","getOrInit","makeNew","replaceOrInit","merging","Generators","blockList","isFormatting","isHeading","isContainer","isFrame","Structure","universe$1","isBlock$1","isFormatting$1","isHeading$1","isContainer$1","isEmptyTag$1","isFrame$1","isInline$1","DomStructure","merge$2","advancedBr","isListItem","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","markContent","TableContent","elementFromGrid","findIn","uniqueRows","currentDetail","uniqueColumns","insertRowBefore","targetIndex","newGrid","insertRowsBefore","newG","insertRowAfter","insertRowsAfter","insertColumnBefore","insertColumnsBefore","insertColumnAfter","insertColumnsAfter","makeRowHeader","makeColumnHeader","unmakeRowHeader","unmakeColumnHeader","splitCellIntoColumns$1","splitCellIntoRows$1","eraseColumns","_comparator","_genWrappers","eraseRows","mergeCells","unmergeCells","pasteDetails","gridify","wh","mergedGrid","nuGrid","gridifyRows","pasteRowsBefore","pasteRowsAfter","TableOperations","getBody$1","getPixelWidth$1","getPixelHeight","removePxSuffix","addSizeSuffix","removeDataStyle","dataStyleCells","ltr$1","rtl$1","Direction","defaultTableToolbar","defaultStyles","defaultAttributes","getDefaultAttributes","getDefaultStyles","hasTableResizeBars","hasTabNavigation","hasAdvancedCellTab","hasAdvancedRowTab","hasAdvancedTableTab","hasAppearanceOptions","hasTableGrid","shouldStyleWithCss","getCellClassList","getRowClassList","getTableClassList","isPercentagesForced","isPixelsForced","getCloneElements","cloneElements","hasObjectResizing","objectResizing","fireNewRow","fireNewCell","fireObjectResizeStart","fireObjectResized","fireTableSelectionChange","fireTableSelectionClear","toEnd","freefallRtl","freefallRtl$1","universe$2","freefallRtl$2","TableActions","lazyWire","isTableBody","lastRowGuard","lastColumnGuard","guard","des","deleteRow","deleteColumn","copyRows","selectedCells","slicedGrid","slicedDetails","CopyRows","getTDTHOverallStyle","firstChildStyle","checkChildren","currentStyle","applyAlign","applyVAlign","unApplyAlign","unApplyVAlign","Styles$1","buildListItems","inputList","itemCallback","startItems","appendItems","extractAdvancedStyles","rgbToHex","borderWidth","borderStyle","borderColor","bgColor","borderwidth","borderstyle","bordercolor","backgroundcolor","getSharedValues","baseData","comparisonData","itemKey","comparisonValue","getAdvancedTab","dialogName","advTabItems","getAlignment","alignments","dataName","alignmentData","getHAlignment","getVAlignment","extractDataFromSettings","hasAdvTableTab","extractAdvancedStyleData","defaultData","cellspacing","cellpadding","caption","getBorder","advStyle","getCellPaddingCellSpacing","spacing","extractDataFromTableElement","optBorderWidth","extractDataFromRowElement","extractDataFromCellElement","celltype","Helpers","getClassList","rowClassList","textStyle","children$3","classlist","CellDialogGeneralTab","ifTruthy","DomModifier","updateSimpleProps","modifiers","updateAdvancedProps","applyToSingle","cellElm","halign","valign","applyToMultiple","onSubmitCellForm","applicator","cellsData","dialogTabPanel","dialogPanel","CellDialog","getClassList$1","formChildren","getItems$1","RowDialogGeneralTab","switchRowType","rowElm","toType","tableElm","oldParentElm","parentElm","updateAdvancedProps$1","modifier","onSubmitRowForm","oldData","createModifier","rowsData","RowDialog","DefaultRenderOptions","percentages","makeTable","tableBody","tableRow","tableHeaderCell","tableCell","rowHeaders","columnHeaders","renderOpts","tbody","trs","placeCaretInCell","selectFirstCellInTable","fireEvents","isPercentage","insert$1","InsertTable","getItems$2","hasClasses","insertNewTable","rowColCountItems","alwaysItems","appearanceItems","alignmentItem","classListItem","TableDialogGeneralTab","styleTDTH","applyDataToElement","onSubmitTableForm","captionElm","addVisual","open$2","generalPanel","nonAdvancedForm","advancedForm","TableDialog","getSelectionStartFromSelector","getSelectionStartCell","getSelectionStartCellOrCaption","each$3","clipboardRows","eraseTable","cellOrCaption","tableOpt","getTableFromCell","getSize","resizeChange","oldSize","actOnSelection","copyRowSelection","pasteOnSelection","clonedRows","mceTableSplitCells","mceTableMergeCells","mceTableInsertRowBefore","mceTableInsertRowAfter","mceTableInsertColBefore","mceTableInsertColAfter","mceTableDeleteCol","mceTableDeleteRow","mceTableCutRow","mceTableCopyRow","mceTablePasteRowBefore","mceTablePasteRowAfter","mceTableDelete","func","mceInsertTable","mceTableProps","mceTableRowProps","mceTableCellProps","detached","editable","body$1","ResizeWire","Event","trigger","typeDefs","styles$1","Styles$2","Blocker","layerClass","DragMode","DragSink","DragApi","compare","mutation","mdown","mup","mmove","mout","MouseDrag","InDrag","dataOption","NoDrag","Movement","noDragState","inDragState","throttledDrop","runIfActive","Dragger","Mutation","BarMutation","findClosestContentEditable","resizeBarDragging","BarManager","resizing","hoverTable","getResizer","_dataRow","_dataCol","currentCol","oldX","startAdjust","findClosestEditableTable","hideBars","showBars","beforeResize","afterResize","startDrag","TableResize","createContainer","TableWire","calculatePercentageWidth","enforcePercentage","rawTable","tablePercentage","enforcePixels","getResizeHandler","startW","startRawW","selectionRng","isTable","lazyResize","sz","rawWire","tableHasPercentage","percentW","targetPercentW","newCellSizes_1","newCellSize","none$1","CellLocation","CellNavigation","selectNodeContentsUsing","searchForPoint","rectForOffset","curDeltaX","inRect","locateOffset","textnode","rangeForOffset","foundRect","searchInChildren","locateNode","locate$1","boundedX","boundedY","COLLAPSE_TO_LEFT","COLLAPSE_TO_RIGHT","getCollapseDirection","createCollapsedNode","collapseDirection","locateInElement","cursorRange","locateInEmpty","caretPositionFromPoint","caretRangeFromPoint","searchTextNodes","searchFromPoint","availableSearch","fromPoint$1","beforeSpecial","preprocessRelative","preprocessExact","after$3","doSetNativeRange","removeAllRanges","addRange","doSetRange","setLegacyRtlRange","setRangeFromRelative","setBaseAndExtent","setExact","setRelative","toNative","getDomRange","setToElement","getAtPoint","backward","getCellFirstCursorPosition","getNewRowCursorPosition","rootElements","handle$1","body_1","isRoot_1","TabContext","Response","Situs","convertToRange","makeSitus","Util","sync","selectRange","detect$5","cellSel","annotations","updateSelection","newSels","clearBeforeUpdate","KeySelection","backtrack","_direction","sidestep","advance","successors","go$1","ruleOpt","succ","Walkers","hone","left$1","right$1","isLeaf","before$3","seekLeft","after$4","seekRight","universe$3","before$4","after$5","seekLeft$1","seekRight$1","failedUp","failedDown","isOverlapping","bridge","beforeBounds","afterBounds","isRow","verify","beforeOffset","afterOffset","failure","afterCell","beforeCell","_sharedRow","onSuccess","onFailedUp","onFailedDown","BeforeAfter","inParent","indexInParent","gatherer","cand","gather","handleBr","findBr","handleParent","br","adjacent","tryBr","analysis","BrTags","moveBottomTo","moveTopTo","getTop$1","getBottom","Carets","getPartialBox","getRangedRect","toCaret","getElemBox","getBoxAt","getEntireBox","Rectangles","JUMP_SIZE","NUM_RETRIES","retry","isOutside","inOutsideBlock","adjustDown","guessBox","lowerCaret","adjustUp","higherCaret","upMovement","adjuster","downMovement","isAtTable","adjustForTable","numRetries","adjustTil","situsFromPoint","newCaret","ieTryDown","ieTryUp","checkScroll","adjusted","getInnerHeight","moved","scrollBy","Retries","tryUp","tryDown","getJumpSize","MAX_RETRIES","platform$2","findSpot","brNeighbour","fromSitus","scan$1","tryCursor","situs","tryAgain","tryAt","otherRetry","ieRetry","handle$2","TableKeys","inSameTable","simulate","precheck","firstUpCheck","lastOffset","lastDownCheck","VerticalMovement","findCell","MouseSelection","clearState","selectContents","KeyDirection","isKey","keycode","isUp","isDown","isNavigation","SelectionKeys","isBackward","toRaw","sr","Rect","by","WindowBridge","exactAdt","clearSelection","collapseSelection","toStart","setSelection","setRelativeSelection","getScrollY","rc","keyboard","clearToNavigate","realEvent","InputHandlers","removeClasses","byClass","ephemera","addSelectionClass","removeSelectionClasses","byAttr","onSelection","onClear","removeSelectionAttributes","addSelectionAttribute","SelectionAnnotation","getUpOrLeftCells","upGrid","upDetails","slicedCells","getDownOrRightCells","downGrid","downDetails","getOtherCells","OtherCells","hasInternalTarget","CellSelection$1","selectionTargets","handlerStruct","syncSelection","mouseHandlers","keyHandlers","hasShiftKey","handleResponse","ns","wrappedEvent","isLeftMouse","isLeftButtonPressed","mouseDown","mouseOver","mouseUp","getDoubleTap","lastTarget","lastTimeStamp","touchEnd","lT","lTS","timeStamp","doubleTap","Selections","getSelectionTargets","changeHandlers","findTargets","resetTargets","onSetupTable","onSetupCellOrRow","onSetupMergeable","onSetupUnmergeable","addButtons","addMenuButton","addToolbars","addContextToolbar","addMenuItems","insertTableAction","tableProperties","deleteTable","rowItems","columnItems","cellItems","addContextMenu","MenuItems","getClipboardRows","setClipboardRows","sugarRows","resizeHandler","insertTable","addTempAttr","Plugin$1","getDateFormat","getTimeFormat","getFormats","getDefaultDateTime","shouldInsertTimeElement","daysShort","daysLong","monthsShort","monthsLong","addZeros","getDateTime","getFullYear","getYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDay","updateElement","timeElm","computerTime","userTime","newTimeElm","datetime","insertDateTime","defaultFormat","makeMenuItemHandler","assumeExternalTargets","externalTargets","hasContextToolbar","getLinkList","getTargetList","getRelList","getLinkClassList","shouldShowLinkTitle","allowUnsafeLinkTarget","useQuickLink","appendClickRemove","createEvent","initMouseEvent","OpenUrl","hasProtocol","getHref","applyRelTargetRules","isUnsafe","rels","addTargetRules","removeTargetRules","newRels","trimCaretContainers","getAnchorElement","selectedElm","isImageFigure","getAnchorText","anchorElm","isLink","hasLinks","isOnlyTextSelected","getLinkAttrs","handleExternalTargets","applyLinkOverrides","linkAttrs","newLinkAttrs","newRel","updateLink","linkImageFigure","attachState","unlinkImageFigure","fig","sanitizeList","extractValue","sanitizeWith","extracter","createUi","ListOptions","findTextByValue","catalog","persistentText","hasPersistentText","findCatalog","catalogs","linkSettings","onUrlChange","urlText","urlTitle","onCatalogChange","DialogChanges","delayedConfirm","tryEmailTransform","suggestMailTo","tryProtocolTransform","defaultLinkProtocol","suggestProtocol","DialogConfirms","anchorNodes","AnchorListOptions","ClassListOptions","parseJson","getLinks","extractor","linkList","send","optItems","LinkListOptions","getRels","isTargetBlank_1","enforceSafe","safeRelExtractor","sanitizer","RelOptions","fallbacks","getTargets","TargetOptions","nonEmptyAttr","extractFromAnchor","onlyText","linkClass","collect","linkNode","links","optNode","flags","titleEnabled","DialogInfo","handleSubmit","getChangedValue","changedData","pData","collectData","getInitialData","defaultTarget","makeDialog","urlInput","titleText","dialogDelta","getLink","getSelectedLink","hasOnlyAltModifier","altKey","metaKey","gotoLink","targetEl","openDialog","gotoSelectedLink","leftClickedOnAHref","setupGotoLinks","toggleEnabledState","addShortcut","setupButtons","setupMenuItems","setupContextMenu","inLink","noLink","setupContextToolbars","collapseSelectionToEnd","onSetupLink","addContextForm","Controls","getGlobal","getTinymce","validEvents","isValidKey","bindHandlers","initEvent","bindModelHandlers","modelEvents","$props","normalizedEvents","$watch","prevVal","$emit","outputFormat","initEditor","$listeners","uuid","now","isTextarea","normalizePluginArray","mergePlugins","initPlugins","inputPlugins","isNullOrUndefined","scriptLoaded","CreateScriptLoader","injectScriptTag","scriptTag","referrerPolicy","reinitialize","ScriptLoader","editorProps","apiKey","cloudChannel","Boolean","tinymceScriptSrc","renderInline","renderIframe","initialise","finalInit","elementId","inlineEditor","Editor","created","watch","mounted","$el","scriptSrc","beforeDestroy","hasAdvTab","hasUploadTab","getPrependUrl","hasDescription","hasImageTitle","hasImageCaption","getImageList","hasUploadUrl","getUploadUrl","hasUploadHandler","getUploadHandler","getUploadBasePath","getUploadCredentials","showAccessibilityOptions","isAutomaticUploadsEnabled","parseIntAndGetMax","val1","val2","getImageSize","onerror","removePixelSuffix","addPixelSuffix","mergeMargins","splitMargin","createImageList","imageList","waitLoadImage","selectImage","isPlaceholderImage","getHspace","marginLeft","marginRight","getVspace","marginTop","marginBottom","hasCaption","wrapInFigure","figureElm","removeFigure","toggleCaption","normalizeStyle","normalizeCss","setSize","setHspace","pxValue","setVspace","setBorder","setBorderStyle","getBorderStyle","isFigure","getIsDecorative","getAlt","hspace","vspace","isDecorative","getStyleValue","setAlt","figure","updateProp","sugarImage","hasAccessibilityOptions","updateAlt","normalized","mergedCss","compressed","getSelectedImage","splitTextBlock","readImageDataFromSelection","insertImageAtCaret","outerHTML","insertedElm","syncSrcAttr","deleteImage","writeImageDataToSelection","insertOrUpdateImage","isGroup","findEntryDelegate","findEntry","optList","pathJoin","path1","path2","Uploader","defaultHandler","xhr","XMLHttpRequest","withCredentials","credentials","upload","onprogress","json","responseText","basePath","FormData","filename","uploadBlob","isDefaultHandler","makeTab","AdvTab","urlListSanitizer","futureImageList","automaticUploads","prependURL","preUrl","makeItems","imageUrl","imageDescription","imageTitle","imageDimensions","makeTab$1","MainTab","makeTab$2","UploadTab","prevImage","prevAlt","fromImageData","fileinput","toImageData","addPrependUrl2","srcURL","prependUrl","addPrependUrl","formFillFromMeta2","formFillFromMeta","calculateImageSize","helpers","imageSize","updateImagesDropdown","changeSrc","changeImages","calcVSpace","matchingTopBottom","calcHSpace","matchingLeftRight","calcBorderWidth","calcBorderStyle","calcStyle","changeStyle2","dataCopy","changeStyle","changeAStyle","changeFileInput","uploader","finalize","updateSrcAndSwitchTab","dataUrl","createBlobCache","alertErr","addToBlobCache","changeHandler","closeHandler","makeDialogBody","tabPanel","submitHandler","uploadImagesAuto","normalizeCss$1","stylesArg","hasImageClass","toggleContentEditableState","toggleContentEditable","print","isNull","objAcc","internalFilter","onTrue","onFalse","bifilter","lTrim","rTrim","recurse","Recurse","prevSiblings","nextSiblings","childNodesCount","intoView","alignToTop","scrollIntoViewIfNeeded","isNodeType","isRestrictedNode","getPrototypeOf","matchNodeNames","lowercasedNames","matchStyleValues","cssValue","computed","hasPropValue","propName","propValue","hasAttributeValue","isBogus","isBogusAll","isTextareaOrInput","isDocument","isDocumentFragment","browser$1","firstElement","getTableCaptionDeltaY","bodyTop","captionTop","captionHeight","hasChild","Position$1","module$1","requestAnimationFramePromise","promiseObj","requestAnimationFrameFunc","vendors","featurefill","wrappedSetTimeout","wrappedSetInterval","wrappedClearTimeout","wrappedClearInterval","debounce","Delay","setEditorInterval","browser$2","fileApi","windowsPhone","Env","caretAfter","documentMode","cacheSuffix","experimentalShadowDom","canHaveCSP","desktop","toArray$1","filter$2","indexOf$1","reduce","iteratee","accumulator","ArrUtils","whiteSpaceRegExp","delim","sp","cn","scn","de","createNS","onCreate","ext","explode","_addCacheSuffix","hasOwn","StyleSheetLoader","maxLoadTime","idCount","loadedStates","_setReferrerPolicy","appendToHead","loadedCallback","errorCallback","passed","failed","isOldWebKit","webKitChunks","wait","testCallback","waitCallback","waitForWebKitLinkLoaded","styleSheet","styleSheets","ownerNode","owningElement","waitForGeckoLinkLoaded","cssRules","sheet","async","defer","contentCssCors","crossOrigin","loadF","unbox","loadAll","namedEntities","baseEntities","reverseEntities","voids","tableCells","tableSections","headings","listItems","wsElements","lazyLookup","isTable$1","isBr$1","isVoid","isTableSection","isTableCell","isWsPreserveElement","surroundedBySpans","previousIsSpan","nextIsSpan","trimNode","trimmedLength","TrimNode","makeMap$1","attrsCharsRegExp","textCharsRegExp","rawCharsRegExp","entityRegExp","asciiMap","128","130","131","132","133","134","135","136","137","138","139","140","142","145","146","147","148","149","150","151","152","153","154","155","156","158","159","'","nativeDecode","buildEntitiesLookup","radix","entity","encodeRaw","encodeNumeric","encodeNamed","entities","getEncodeFunc","entitiesMap","encodeNamedAndNumeric","encodeCustomNamed","nameMap","named","numeric","Entities","mapCache","dummyObj","makeMap$2","extend$1","explode$1","compileSchema","globalAttributes","blockContent","phrasingContent","flowContent","html4BlockContent","html4PhrasingContent","ni","arrayToMap","addAttrs","schemaItem","script","compileElementMap","Schema","invalidStyles","schemaItems","whiteSpaceElementsMap","selfClosingElementsMap","boolAttrMap","validClasses","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","textInlineElementsMap","patternElements","customElementsMap","createLookupTable","extendWith","verify_html","valid_styles","invalid_styles","valid_classes","patternToRegExp","addValidElements","ei","al","attrData","elementName","attrType","outputName","globalAttributesOrder","elementRuleRegExp","attrRuleRegExp","hasPatternsRegExp","paddEmpty","removeEmpty","removeEmptyAttrs","attributesRequired","attributesDefault","attributesForced","forcedValue","validValues","attributePatterns","setValidElements","addCustomElements","customElements","customElementRegExp","text_block_elements","block_elements","cloneName","customRule","elmName","addValidChildren","validChildren","childRuleRegExp","getElementRule","custom_elements","extended_valid_elements","dd","dt","th","thead","tfoot","legend","area","param","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","getTextInlineElements","getSelfClosingElements","getMoveCaretBeforeOnEnterElements","isValidChild","attrPatterns","getCustomElements","support","Expr","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","documentIsHTML","rbuggyQSA","rbuggyMatches","contains$3","encodingItems","rgbRegExp","urlOrStrRegExp","styleRegExp","trimRightRegExp","encodingLookup","invisibleChar","isEncoded","urlConverter","url_converter","urlConverterScope","url_converter_scope","compress","noJoin","canCompress","compress2","keepSlashes","decodeSingleHexSequence","escSeq","decodeHexSequences","processUrl","url2","url3","str2","allow_script_urls","allow_svg_data_urls","lastIndex","serializeStyles","styleList","eventExpandoPrefix","mouseEventRe","deprecated","keyLocation","layerX","layerY","returnValue","webkitMovementX","webkitMovementY","keyIdentifier","mozPressure","hasIsDefaultPrevented","returnTrue","returnFalse","addEvent","attachEvent","removeEvent","detachEvent","getTargetFromShadowDom","composedPath","fix","originalEvent","srcElement","eventDoc","cancelBubble","isImmediatePropagationStopped","bindOnReady","eventUtils","domLoaded","isDocReady","readyState","readyHandler","EventUtils","expando","hasMouseEnterLeave","hasFocusIn","callbackList","fakeName","nativeHandler","defaultNativeHandler","executeHandlers","namesList","mouseEnterLeave","currentTarget","relatedTarget","eventMap","parentWindow","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","strundefined","MAX_NEGATIVE","push_native","indexOf$2","booleans","whitespace","identifier","pseudos","rtrim","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","high","els","Sizzle","seed","nid","newSelector","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","markFunction","siblingCheck","sourceIndex","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","hasCompare","attrId","tmp","disconnectedMatch","adown","bup","sortDetached","aup","ap","bp","expr","matchesSelector","attrHandle","getAttributeNode","specified","uniqueSort","duplicates","detectDuplicates","sortStable","createPseudo","preFilter","excess","unquoted","nodeNameSelector","operator","check","what","ofType","xml","outerCache","useCache","pseudo","setFilters","matched","matcher","unmatched","lang","elemLang","hash","tabIndex","selectedIndex","even","odd","lt","gt","nth","radio","password","tokens","addCombinator","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","preMap","postMap","preexisting","elems","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","filters","parseOnly","soFar","preFilters","token","compiled","push$1","slice$1","rquickExpr$1","skipUniques","isDefined","isString$1","isWindow","fragDoc","frag","domManipulate","targetNodes","sourceItem","getElementDocument","DomQuery","makeArray","lastParent","newWrapper","numericCssMap","booleanMap","propFix","for","cssFix","float","attrHooks","cssHooks","DomQueryConstructor","inArray$1","whiteSpaceRegExp$1","trim$2","each$4","hook","removeAttr","camel","dashed","prependTo","replaceWith","wrapInner","existingClassName","classState","object","until","siblingName","firstSibling","wrappedResult","parentsUntil","nextUntil","prevUntil","overrideDefaults","TreeWalker","prev2","findSibling","findPreviousNode","startName","each$5","grep$1","simpleSelectorRe","whiteSpaceRegExp$2","setupAttrHooks","keepValues","keep_values","keepUrlHook","updateInternalStyleAttr","findNodeIndex","lastNodeType","DOMUtils","_this","addedStyles","counter","stdMode","boxModel","boundEvents","ownEvents","getElementsByName","$$","defaultVal","getAttribs","originalValue","onSetAttrib","attrElm","clone_1","root_element","getViewPort","argWin","update_styles","selectorVal","_findSib","getPrev","setHTML","canHaveHTML","newElm","outHtml","keepChildren","$node","removeAllAttribs","removeAttributeNode","addStyle","styleElm","loadCSS","cls","getOuterHTML","setOuterHTML","reference","referenceNode","oldElm","attrNode","findCommonAncestor","pe","rgbVal","isNonEmptyElement","brCount","bogusVal","splitElm","replacementElm","bef","aft","pa","rv","getContentEditableParent","dumpRng","DOMUtils$1","each$6","grep$2","QUEUED","LOADING","LOADED","FAILED","scriptLoadedCallbacks","queueLoadedCallbacks","loading","loadScript","onreadystatechange","isDone","markDone","loadQueue","loadScripts","scripts","failures","execCallbacks","loadingScripts","notifyCallbacks","isRaw","isTokenised","currentCode","getLanguageData","setCode","newCode","getCode","langData","translation","getLangData","textstr","removeContext","substitued","$1","$2","hasCode","I18n","AddOnManager","_listeners","runListeners","matchedListeners","dependencies","requireLangPack","languages","languageLoad","waitFor","language","wrappedLanguages","addOn","addOnConstructor","createUrl","baseUrl","resource","addComponents","pluginName","loadDependencies","addOnUrl","deps","urlString","PluginManager","ThemeManager","AddOnManager$1","annotation","dataAnnotation","dataAnnotationId","annotationName","an","newStart","getAttr","findMarkers","isAnnotation","findAll","nodesAlready","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","identifyParserNode","persistent","ZWSP","isZwsp","trim$3","Zwsp","isElement$2","isText$2","isCaretContainerBlock","isCaretContainerInline","isCaretContainer","hasContent","insertInline","textNode","endsWithCaretContainer","splitText","startsWithCaretContainer","isBeforeInline","isAtStart","isAfterInline","isAtEnd","createBogusBr","insertBlock","blockNode","trimBogusBr","brs","lastBr","showCaretContainerBlock","caretContainer","isRangeInCaretContainerBlock","isContentEditableTrue$1","isContentEditableFalse$1","isBr$2","isText$3","isInvalidTextElement","isAtomicInline","isTable$2","isCaretContainer$1","isCaretCandidate","isNonUiContentEditableFalse","isUnselectable","isInEditable","isAtomicContentEditableFalse","isAtomic","isEditableCaretCandidate","isEqual","rect1","rect2","isValidOverflow","overflowY","containsXY","getSelectedNode","extendingChars","isExtendingChar","someIf","slice$2","Predicate","isElement$3","isCaretCandidate$1","isFloated","isValidElementCaretCandidate","isNotPre","isText$4","isBr$3","resolveIndex","isWhiteSpace","isRange","isHiddenWhiteSpaceRange","getBrClientRect","brNode","clientRect","nbsp$1","getBoundingClientRectWebKitText","ec","so","eo","newRng","isZeroRect","clientRects","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","beforeNode","addUniqueAndValidRect","addCharacterOffset","CaretPosition","toRange","fromRangeStart","fromRangeEnd","pos1","pos2","isTextPosition","isElementPosition","HDirection","CaretPosition$1","isText$5","isBogus$1","nodeIndex$1","normalizedParent","getChildNodes","normalizedTextOffset","equal","normalizedNodeIndex","numTextFragments","createPathItem","outputOffset","resolvePathItem","findTextPosition","dataLen","targetOffset","resolve$1","trimEmptyTextNode","insertFragment","rangeInsertNode","isContentEditableFalse$2","getNormalizedTextOffset","trimmedOffset","getPoint","getLocation","findIndex$2","moveEndPoint","normalizeTableCellSelection","findAdjacentContentEditableFalseElm","getOffsetBookmark","getCaretBookmark","getRangeBookmark","createBookmarkSpan","filled","getPersistentBookmark","rng2","endBookmarkNode","startBookmarkNode","keep","GetBookmark","getUndoBookmark","TextWalker","TextSeeker","isBlockBoundary","newOffset","forwards","CARET_ID","isCaretNode","getParentCaretContainer","isElement$4","isText$6","getNodeValue","setNodeValue","trimCount","trimmedText","removeUnchanged","removeTextAndReposition","removeElementAndReposition","newPosition","removeTextCaretContainer","removeElementCaretContainer","removeAndReposition","caretContainerNode","CaretContainerRemove","getBodySetting","bodyObj","getIframeAttrs","getDocType","getDocumentBaseUrl","getBodyId","getBodyClass","getContentSecurityPolicy","shouldPutBrInPre","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","getFontStyleValues","getFontSizeClasses","getImagesDataImgFilter","shouldReuseFileName","shouldReplaceBlobUris","getIconPackName","getIconsUrl","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","getReferrerPolicy","getLanguageCode","getLanguageUrl","shouldIndentUseMargin","getIndentation","getContentCss","contentCss","content_css","getDirectionality","getInlineBoundarySelector","getObjectResizing","getResizeImgProportional","getPlaceholder","browser$3","isContentEditableFalse$3","isTableCell$1","getAbsoluteClientRect","scrollX","scrollY","rootRect","trimInlineCaretContainers","contentEditableFalseNodes","deleteData","FakeCaret","cursorInterval","lastVisualCaret","rootBlock","caretBlock","caretState","startBlink","getCss","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableFalse$4","isBlockLike","isCaretContainer$2","isCaretContainerBlock$1","isElement$5","isCaretCandidate$2","isForwards","isBackwards","skipCaretContainers","findNode","predicateFn","getParentBlock","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","relativeOffset","beforeAfter","isNodesInSameBlock","node1","node2","lean","leanLeft","leanRight","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getElementFromPrevPosition","getVisualCaretPosition","walkFn","isMoveInsideSameBlock","inSameBlock","isContentEditableFalse$5","isText$7","isElement$6","isBr$4","isCaretCandidate$3","isAtomic$1","isEditableCaretCandidate$1","nodeAtIndex","getCaretCandidatePosition","moveForwardFromBr","nextNode","findCaretPosition","Forwards","startPos","rootContentEditableFalseElm","CaretWalker","Backwards","walkToPositionIn","fromPosition","afterElement","isBeforeOrStart","isAfterOrEnd","isBeforeAfterSameElement","isAtBr","shouldSkipPosition","navigateIgnore","ignoreFilter","positionIn","nextPosition","prevPosition","CaretFinder","firstPositionIn","lastPositionIn","isStringPathBookmark","isRangeBookmark","isIdBookmark","isIndexBookmark","isPathBookmark","addBogus","resolveCaretPositionBookmark","insertZwsp","tryFindRangePosition","padEmptyCaretContainer","setEndPoint","isValidTextNode","appendData","resolvePaths","resolveId","endPos","spos","epos","resolveIndex$1","resolve$2","ResolveBookmark","getBookmark$1","isBookmarkNode$1","Bookmarks","is$2","expected","isNbsp","isWhiteSpace$1","isContent","isNode","isInlineBlock","moveStart","isWhiteSpaceNode","getNonWhiteSpaceSibling","inc","nextName","isTextBlock$1","isEmptyTextNode","replaceVars","vars","isEq","str1","normalizeStyleValue","getTextDecoration","decoration","getParents$1","isBookmarkNode$2","getParents$2","isWhiteSpaceNode$1","isTextBlock$2","findParentContentEditable","walkText","findSpace","findContent","findWordEndPoint","includeTrailingSpaces","lastTextNode","textSeeker","textOffset","spaceResult","findSelectorEndPoint","curFormat","findBlockEndPoint","scopeRoot","findParentContainer","block_expand","expandRng","includeTrailingSpace","startPoint","endPoint","each$7","clampToExistingChildren","getEndChild","walk$1","collectSiblings","findEndPoint","walkBoundary","siblings_1","RangeWalk","isZeroWidth","wrapName","applyWordGrab","makeAnnotation","eDoc","decorate","master","_d","annotate","newWrappers","finishWrapper","getOrOpenWrapper","processElements","processElement","processNodes","annotateWithBookmark","initialRng","Annotator","annotationChanged","whiteSpaceRegExp$3","typeLookup","walk$2","isEmptyTextNode$1","Node$1","selfAttrs","cloneAttrs","selfAttr","refNode","isValidPrefixAttrName","isInvalidUri","findEndTagIndex","tokenRegExp","isConditionalComment","findCommentEndIndex","lcHtml","endIfIndex","endCommentRegexp","checkBogusAttribute","attrString","SaxParser","fix_self_closing","pi","doctype","endRegExp","attrList","textData","isInternalElement","removeInternalElements","fillAttrsMap","isShortEnded","elementRule","isValidElement","attribsValue","validAttributesMap","validAttributePatterns","processHtml","anyAttributesRequired","selfClosing","attrRegExp","fixSelfClosing","filteredUrlAttrs","scriptUriRegExp","parsingMode","processEndTag","processComment","processMalformedComment","startTag","parseAttribute","val3","attrRule","trimRegExp","decodeURIComponent","self_closing_elements","remove_internals","bogusValue","isValidCdataSection","preserve_cdata","findEndTag","documentFocusInHandler","SaxParser$1","tempAttrs","trimContentRegExp","trimInternal","endTagIndex","bogusAllRegExp","getTempAttrs","trimExternal","TrimHtml","trimEmptyContents","emptyRegExp","getContentFromBody","getInner","no_events","makeMap$3","Writer","indent","indentBefore","indentAfter","htmlOutput","indent_before","indent_after","entity_encoding","element_format","Serializer","8","7","10","11","sortedAttrs","findMatchingNodes","nodeFilters","attributeFilters","nodeMatches","attrMatches","name_2","filter$3","browser$4","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","getBookmark$2","bookmarkToNativeRng","newBookmark","storeNative","SelectionBookmark","isEditorUIElement","FocusManager","isManualNodeChange","selectionChange","registerPageMouseUp","throttledStore","mouseUpPage","registerFocusOut","registerMouseUp","registerEditorEvents","SelectionRestore","isEditorUIElement$1","isEditorContentAreaElement","isUIElement","customSelector","custom_ui_selector","getActiveElement","editorManager","focusedEditor","blurredEditor","activeEditor","unregisterDocumentEvents","FocusController","getContentEditableHost","getCollapsedNode","getFocusInElement","normalizeSelection","caretPos","focusBody","hasElementFocus","hasIframeFocus","iframeElement","hasInlineFocus","rawBody","hasUiFocus","hasFocus$1","hasEditorOrUiFocus","focusEditor","refreshContentEditable","bookmarkRng","contentEditableHost","activateEditor","skipFocus","EditorFocus","defaultFormat$1","isTreeNode","setEditorHtml","setContentString","forcedRootBlockName","padd","setContentTree","getNodeFilters","getAttributeFilters","firePreProcess","firePostProcess","fireRemove","fireDetach","fireSwitchMode","firePreInit","firePostRender","fireInit","firePlaceholderToggle","fireError","errorType","DOM$3","restoreOriginalStyles","orgDisplay","safeDestroy","clearDomReferences","contentAreaContainer","formElement","restoreForm","_mceOldSubmit","formEventDelegate","_selectionOverrides","save","is_removing","unbindAllNativeEvents","hasHiddenInput","automatic","destroyed","_beforeUnload","theme","deep$1","sectionResult","deviceDetection","legacyMobilePlugins","defaultTouchSettings","table_grid","object_resizing","normalizePlugins","pluginNames","trimmedPlugins","filterLegacyMobilePlugins","extractSections","getSection","sectionSettings","hasSection","isSectionTheme","getSectionConfig","getDefaultSettings","documentBaseUrl","baseDefaults","toolbar_mode","document_base_url","add_form_submit_trigger","submit_patch","add_unload_trigger","convert_urls","relative_urls","remove_script_host","visual","font_size_legacy_values","hidden_input","inline_styles","convert_fonts_to_spans","getDefaultMobileSettings","defaultMobileSettings","toolbar_sticky","defaultPhoneSettings","getExternalPlugins","overrideSettings","userDefinedExternalPlugins","external_plugins","combinePlugins","forcedPlugins","processPlugins","isMobileDevice","defaultOverrideSettings","desktopPlugins","mobileConfig","mobilePlugins","platformPlugins","combinedPlugins","isOnMobile","combineSettings","defaultSettings","defaultDeviceSettings","mobile","extendedSettings","getEditorSettings","getFiltered","getParamObject","CreateIconManager","iconPack","IconManager","rawElm","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","getBoundingClientRect$1","isInsideElementContentArea","bodyElm","isXYInContentArea","transposedPoint","fromDomSafe","isEditorAttachedToDom","rawContainer","EditorView","unimplemented","NotificationManager","getImplementation","getTopNotification","addNotification","closeNotification","otherNotification","getNotifications","serviceMessage","service_message","WindowManagerImpl","getParams","setParams","dialogs","funcBind","fireOpenEvent","fireCloseEvent","addDialog","otherDialog","getTopDialog","storeSelectionAndOpenDialog","displayNotification","displayError","uploadError","logError","createLoadError","pluginLoadError","iconsLoadError","languageLoadError","pluginInitError","initError","ErrorReporter","isContentCssSkinName","getContentCssUrls","contentCssFile","appendContentCssFromSettings","BookmarkManager","BookmarkManager$1","isXYWithinRange","RangePoint","VK","END","HOME","modifierPressed","isContentEditableFalse$6","isContentEditableTrue$2","getContentEditableRoot","ControlSelection","selectedElmGhost","resizeHelper","resizeHandles","selectedHandle","selectedElmX","selectedElmY","startH","resizeStarted","startScrollWidth","startScrollHeight","editableDoc","rootDocument","rootElement","nw","ne","sw","isEventOnImageOutsideRange","contextMenuSelectImage","getResizeTarget","isResizable","resizeGhostElement","proportional","resizeHelperX","resizeHelperY","endGhostResize","setSizeProp","showResizeRect","targetWidth","targetHeight","hideResizeRect","unbindResizeHandleEvents","unSelectabe","updateResizeRect","startElm","controlElm","isChildOrEqual","disableGeckoResize","isWithinContentEditableFalse","handleMSControlSelect_1","delayedSelect","throttledUpdateResizeRect","composing","excludeFromDescend","fireScrollIntoViewEvent","scrollEvent","fireAfterScrollIntoViewEvent","markerInfo","cleanupFun","cleanup","createMarker","elementMarker","withMarker","preserveWith","_s","applyWithMarker","withScrollEvents","startElement","endElement","scrollToMarker","intoWindowIfNeeded","viewportBottom","largerThanViewport","intoWindow","intoFrame","frameViewHeight","op","rangeIntoWindow","elementIntoWindow","rangeIntoFrame","elementIntoFrame","elementIntoView","scroller","rangeIntoView","ScrollIntoView","scrollElementIntoView","scrollRangeIntoView","hasCeProperty","findParent","findClosestIeRange","createTextRange","moveToElementText","moveToPoint","moveOutOfContentEditableFalse","parentElement","pointDoc","CaretRangeFromPoint","processRanges","EventProcessRanges","dropLast","parentsUntil$1","parents$1","parentsAndSelf","Parents","getStartNode","getEndNode","getFirstChildren","getLastChildren","hasAllContentsSelected","moveEndPoint$1","hasAnyRanges","getSel","tableModel","cellPosition","fillout","y2","x2","cellExists","skipCellsX","findElementPos","extractRows","sx","sy","ey","subTable","createDomTable","tableElement","modelRowsToDomRows","fromDom$1","toDom","subsection","SimpleTableModel","getSelectedNodes","hasMultipleRanges","MultiRange","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","rangeCells","getCellsFromEditor","TableCellSelection","findParentListContainer","getFullySelectedListWrappers","listCont","innerElm","directListWrappers","commonAnchorContainer","getWrapElements","commonAncestorContainer","wrapElements","listWrappers","allWrappers","emptyFragment","getFragmentFromRange","cloneContents","getParentTable","getTableFragment","selectedTableCells","fullTableModel","sectionedTableModel","getSelectionFragment","FragmentReader","bin","getHtmlContent","tmpElm","getContent$1","GetSelectionContent","isEq$1","rng1","RangeCompare","findParent$1","hasParent","hasParentWithName","isTable$3","isTableCell$2","isCeFalseCaretContainer","hasBrBeforeAfter","isPrevNode","hasContentEditableFalseParent","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","normRng","NormalizeRange","prependData","insertData","rngSetContent","deleteContents","prevText","nextText","oldLength","setupArgs","setContent$1","createContextualFragment","SetSelectionContent","getEndpointElement","real","getStart$2","skipEmptyTextNodes","getNode$1","endElm","select$1","deleteFromCallbackMap","newCallbacks","SelectorChanged","selectorChangedData","currentSelectors","matchedSelectors","isNativeIeSelection","isAttachedToDom","isValidRange","Selection$1","bookmarkManager","controlSelection","selectedRange","explicitRange","getEnd$1","compareEndPoints","tryCompareBoundaryPoints","how","sourceRange","destinationRange","compareBoundaryPoints","START_TO_START","END_TO_END","ieRange","setNode","getSelectedBlocks$1","anchorRange","focusRange","selectorChanged","getScrollContainer","scrollContainer","placeCaretAt","removeAttrs","addFontToSpansFilter","fontSizes","face","addStrikeToSpanFilter","addFilters","LegacyFilter","paddEmptyNode","brPreferred","padd_empty_with_br","isPaddedWithNbsp","hasOnlyChild","isPadded","isEmpty$1","nonEmptyElements","whitespaceElements","isLineBreakNode","remove_trailing_brs","prevName","whiteSpaceElements","appendRel","addNoOpener","allow_unsafe_link_target","allow_html_in_named_anchor","fix_list_elements","classValue","validClassesMap","makeMap$4","each$8","explode$2","extend$2","DomParser","matchedNodes","matchedAttributes","root_name","fixInvalidChildren","newParent","tempNode","childNode","nonSplitableElements","textBlockElements","filterNode","fi","fl","isInWhiteSpacePreservedElement","invalidChildren","getRootBlockName","rootBlockName","startWhiteSpaceRegExp","endWhiteSpaceRegExp","allWhiteSpaceRegExp","isAllWhiteSpaceRegExp","addRootBlocks","rootBlockNode","createNode","removeWhitespaceBefore","textNodeNext","textVal","cloneAndExcludeBlocks","newNode","attrFiltersLen","htmlParser","internalName","hasChildren","trimTrailingBr","brNode1","brNode2","DomSerializerFilters","impl","oldDoc","implementation","createHTMLDocument","importNode","shouldFireEvent","DomSerializerPreProcess","outArgs","getHtmlFromNode","parseHtml","parserArgs","serializeNode","htmlSerializer","toHtml","DomSerializer","addRules","setRules","Serializer$1","domSerializer","blobUriToBlob","rejectWithError","responseType","parseDataUri","uriParts","uriToBlob","Conversions","imageToBlobInfo","getByUri","dataUri","getAllImages","ImageScanner","uploadStatus","cachedPromises","isUploaded","promises","imageInfo","newPromise","pendingPromises","noUpload","handlerSuccess","handlerFailure","resolvePending","uploadBlobInfo","openNotification","markPending","closeNotification_1","markUploaded","removeFailed","pendingUploadBlobInfo","uploadBlobs","blobInfos","isPending","UploadStatus","PENDING","UPLOADED","blobUriStatuses","createStatus","resultUri","hasBlobUri","getResultUri","count$1","rnd","Uuid","BlobCache","mimeToExt","toBlobInfo","removeByUri","EditorUpload","imageScanner","urlFilters","aliveGuard","cacheInvalidator","replaceString","replaceImageUrl","targetUrl","replacementUrl","replaceUrlInUndoStack","fragments","replaceImageUri","uploadImages","scanForImages","imageInfos","filteredResult","uploadInfo","dataImgFilter","addFilter","resultItem","replaceBlobUris","source_view","getLastChildren$1","rawNode","removeTrailingBr","allBrs","fillWithPaddingBr","isPaddingContents","isPaddedElement","trimBlockTrailingBr","lastChildPrevSibling","PaddingBr","isEq$2","matchesUnInheritedFormatSelector","formatList","inherit","matchParents","matchName","matchItems","similar","onmatch","matchAll","matchedFormatNames","checkedMap","defaultBlock","split$1","normalizeContent","isStartOfContent","isEndOfContent","previousCharIsSpace","normalize$1","replaceData","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","whitespaceOffset","hasWhitespacePreserveParent","isContent$1","isBookmark","isBogus$2","isBogusAll$1","isEmptyNode","skipBogus","isEmpty$2","Empty","needsReposition","beforeOrStartOf","afterOrEndOf","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwardsFromElm","startPosition","findCaretPositionForwardsFromElm","findCaretPositionBackwards","findCaretPositionForward","findCaretPosition$1","findCaretPosOutsideElmAfterDelete","eqRawNode","isBlock$2","paddEmptyBlock","deleteNormalized","afterDeletePosOpt","prevTextOpt","nextTextOpt","isInlineElement","deleteElement","moveCaret","afterDeletePos","normalizedAfterDeletePos","paddPos","DeleteElement","ZWSP$1","CARET_ID$1","getEmptyCaretContainers","isCaretContainerEmpty","findFirstTextNode","createCaretContainer","trimZwspFromCaretContainer","removeCaretContainerNode","removeCaretContainer","insertCaretContainerNode","formatNode","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","applyCaretFormat","wordcharRegex","removeCaretFormat","hasContentAfter","expandedRng","newCaretContainer","caretNode","disableCaretContainer","replaceWithCaretFormat","innerMost","isFormatElement","inlineElements","isEmptyCaretFormatElement","postProcessHooks","filter$4","each$9","addPostProcessHook","hooks","postProcess$1","isPre","hasPreSibling","pre","joinPre","pre1","pre2","each$a","ElementUtils","compareObjects","obj1","obj2","MCE_ATTR_RE","each$b","isEq$3","isTableCell$3","isChildOfInlineParent","lastIdx","wrap$3","wrapWithSiblings","matchName$1","isColorFormatAndAnchor","removeNode$1","rootBlockElm","forcedRootBlock","list_block","compareNode","stylesModified","remove_similar","valueOut","findFormatRoot","formatRoot","wrapAndSplit","lastClone","firstClone","formatRootParent","mixed","splitToFormatRoot","isRemoveBookmarkNode","lastContentEditable","removeRngStyle","textDecoration","ceFalseOverride","each$c","isElementNode","findElementSibling","mergeSiblingsNodes","tmpSibling","elementUtils","processChildElements","hasStyle","applyStyle","unwrapEmptySpan","processTextDecorationsAndColor","mergeTextDecorationsAndColor","mergeBackgroundColorAndFontSize","backgroundColor","mergeSubSup","mergeSiblings","merge_siblings","clearChildStyles","clear_child_styles","mergeWithChildren","mergeWithParents","merge_with_parents","createRange$1","normalizeBlockSelectionRange","newEndPos","normalize$2","RangeNormalizer","each$d","isElementNode$1","setElementFormat","onformat","styleVal","applyNodeStyle","applyRngStyle","nodeSpecific","wrapElm","currentWrapElm","childCount","getChildCount","getChildElementNode","mergeStyles","curSelNode","registeredFormatListeners","currentFormats","updateAndFireChangeCallbacks","formatChangeData","formatsList","newFormats","matchedFormats","remainingFormats","filterRemainingFormats","addListeners","formatChangeItems","valigntop","verticalAlign","valignmiddle","valignbottom","alignleft","textAlign","aligncenter","alignright","alignjustify","bold","fontWeight","italic","fontStyle","underline","strikethrough","forecolor","hilitecolor","fontname","fontsize","fontsize_class","blockquote","subscript","superscript","removeformat","DefaultFormats","FormatRegistry","VDirection","each$e","parsedSelectorToHtml","ancestry","sItem","getRequiredParent","elmRule","wrapInHtml","parentCandidate","parentRequired","ancestorName","siblingElm","parseSelectorItem","$0","$3","$4","parseSelector","previewFrag","previewElm","parentFontSize","previewStyles","previewCss","preview_styles","removeVars","numValue","FormatShortcuts","Formatter","formatChangeState","KEEP","INSERT","vDown","vUp","snake","diag","buildScript","start1","end1","start2","end2","getMiddleSnake","i2","buildSnake","Diff","getOuterHtml","createFragment$1","insertAt","removeAt","applyDiff","currentFragments","Fragments","undoLevelDocument","lazyTempDocument","hasIframes","createFragmentedLevel","beforeBookmark","createCompleteLevel","createFromEditor","trimmedFragments","trimmed","applyToEditor","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$4","Levels","isUnlocked","locks","setTyping","typing","endTyping","endTypingLevelIgnoreLocks","beforeChange","addUndoLevel","currentLevel","bm","custom_undo_redo_levels","setDirty","callback1","callback2","hasUndo","hasRedo","registerEvents$1","isFirstTypedCharacter","addNonTypingUndoLevel","isDirty","modKey","isInsertReplacementText","inputType","isInsertTextDataNull","addKeyboardShortcuts","UndoManager","nonTypingKeycodes","placeholderAttr","isKeyboardEvent","isDeleteEvent","isNonTypingKeyboardEvent","isTypingKeyboardEvent","isVisuallyEmpty","isForcedRootBlockFalse","firstElementChild","updatePlaceholder","showPlaceholder","isPlaceholderShown","debounceLongpress","isEqualNode","TouchEvents","isBlockElement","isValidTarget","hasBlockParent","shouldRemoveTextNode","restoreSelection","rootNodeName","ForceBlocks","isText$8","startsWithCaretContainer$1","endsWithCaretContainer$1","createZwsp","insertInline$1","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","renderCaret","BoundaryCaret","strongRtl","hasStrongRtl","isInlineTarget","isRtl$1","findInlineParents","findRootInline","hasSameParentBlock","block1","block2","isAtZwsp","normalizePosition","normalizeForwards","normalizeBackwards","InlineUtils","evaluateUntil","fns","LazyEvaluator","Location","rescope","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","prevPos","nextPos","isValidLocation","readLocation","getName","outside","isEq$5","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation","BoundaryLocation","prevLocation","nextLocation","hasSelectionModifyApi","modify","moveByWord","WordSelection","setCaretPosition","isFeatureEnabled","inline_boundaries","setSelected","renderCaretLocation","findLocation$1","toggleInlines","selectedInlines","targetInlines","safeRemoveCaretContainer","renderInsideInlineCaret","inlines","moveWord","setupSelectedState","moveNextWord","movePrevWord","BoundarySelection","getNodeClientRects","toArrayWithNode","BreakType","findUntil","walkUntil","isAboveFn","isBeflowFn","targetClientRect","aboveLineNumber","lineNumber","isLineNumber","upUntil","Up","downUntil","Down","positionsUntil","isBelowFn","caretWalker","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","isContentEditableTrue$3","isContentEditableFalse$8","showCaret","getNodeRange","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","ceRoot","renderRangeCaret","caretRange","isChar","isBeforeSpace","isAfterSpace","isEmptyText","matchesElementPosition","isImageBlock","isCefNode","isBeforeImageBlock","isAfterImageBlock","isBeforeTable","isAfterTable","isBeforeContentEditableFalse","isAfterContentEditableFalse","customEventRootDelegates","beforeUnloadDelegate","walk$3","getBreakType","currentPos","Br","Block","Wrap","getPositionsUntil","breakType","breakAt","Eol","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","newPos","lastPos","lastRect","lastDist","newDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","isAtFirstLine","isAtLastLine","getPositionsAbove","getPositionsBelow","getFirstLinePositions","getLastLinePositions","isContentEditableFalse$9","getSelectedNode$1","moveToCeFalseHorizontally","getNextPosFn","isBeforeContentEditableFalseFn","rangeIsInContainerBlock","nextCaretPosition","peekCaretPosition","moveToCeFalseVertically","walkerFn","linePositions","nextLinePositions","closestNextLineRect","caretClientRect","dist1","dist2","contentEditableFalseNode","caretPositions","exitPreBlock","getNextVisualCaretPosition","getPrevVisualCaretPosition","getHorizontalRange","newRange","getVerticalRange","moveH","moveV","isCefPosition","moveToLineEndPoint","deflate","getCorners","getYAxisValue","tds","findClosestCorner","corners","newCorner","oldCorner","oldDist","getClosestCell","isTargetCorner","corner","getBottomValue","getTopValue","isAbove$1","isBelow$1","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","moveToRange","hasNextBreak","lineInfo","breakPos","startsWithWrapBreak","startsWithBrBreak","isAtTableCellLine","isAtFirstTableCellLine","isAtLastTableCellLine","isCaretAtStartOrEndOfTable","navigateHorizontally","getClosestAbovePosition","getClosestBelowPosition","getTable","renderBlock","navigateVertically","moveH$1","moveV$1","rangeBefore","insertElement","insertBr","insertBlock$1","insertEmptyLine","getClosestTargetBlock","isAtFirstOrLastLine","moveCaretToNewEmptyLine","rootBlockAttrs","moveV$2","defaultPatterns","matchesEvent","match$1","MatchKeys","executeKeydownOverride","ArrowKeys","isBeforeRoot","getParentBlock$1","placeCaretInEmptyBody","paddEmptyBody","willDeleteLastPositionInElement","fromPos","firstPos","normalizedFirstPos","normalizedLastPos","normalizedFromPos","DeleteUtils","blockPosition","blockBoundary","getBlockPosition","isDifferentBlocks","hasSameParent","parent1","parent2","skipLastBr","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","read$3","BlockMergeBoundary","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","fromBlock","toBlock","insertionPoint","sidelongBlockMerge","findInsertionPoint","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","MergeBlocks","BlockBoundaryDelete","deleteRangeMergeBlocks","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange","backspaceDelete$1","BlockRangeDelete","isBr$5","parentBlocks","isBeforeBr","isAfterBr","findPreviousBr","findNextBr","isCompoundElement","DeleteAction","moveToElement","moveToPosition","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","deleteAction","getContentEditableAction","read$4","deleteElement$1","hideFakeCaret","getAncestorCe","getContentEditableRoot$1","deleteOffscreenSelection","hasCefAncestor","paddEmptyElement","backspaceDelete$2","CefDelete","trimEmptyTextNode$1","deleteContentAndShowCaret","deleteCefBoundaryText","backspaceDelete$3","CefBoundaryDelete","isFeatureEnabled$1","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope$1","backspaceDeleteCollapsed","toPosition","backspaceDelete$4","BoundaryDelete","getParentInlines","hasOnlyOneChild","deleteLastPosition","parentInlines","isFormatElement$1","deleteCaret","backspaceDelete$5","InlineFormatDelete","tableCellRng","tableSelection","removeTable","emptyCells","isRootFromElement","getClosestCell$1","getClosestTable","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","getTableCells","getCellRangeFromStartTable","endCell","partialSelection","isWithinSameTable","getCellRng","getTableSelectionFromCellRng","getTableSelectionFromRng","getCellIndex","getSelectedCells","getActionFromRange","deleteTableElement","deleteCellRange","deleteCaptionRange","emptyElement","deleteTableRange","getParentCaption","deleteRange$1","getParentCell","deleteBetweenCells","fromCell","isDeleteOfLastCharPos","fromCaption","emptyCaretCaption","validateCaretCaption","toCaption","deleteCaretInsideCaption","deleteCaretCells","deleteCaretCaption","isNearTable","isBeforeOrAfterTable","deleteCaret$1","backspaceDelete$6","TableDelete","deleteCaret$2","backspaceDelete$7","PageBreakDelete","isEditable$1","parseIndentValue","getIndentStyleName","useMargin","indentStyleName","indentElement","validateBlocks","intentValue","canOutdent","getBlocksToIndent","isListComponent","parentIsListComponent","indentUnit","indentValue","navigateIgnoreEmptyTextNodes","getClosestBlock","isAtBeforeAfterBlockBoundary","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","backspaceDelete$8","_caret","_forward","Outdent","executeKeydownOverride$1","executeKeyupOverride","DeleteBackspaceKeys","firstNonWhiteSpaceNodeSibling","moveToCaretPosition","getEditableRoot","editableRoot","getParentBlock$2","getParentBlockName","isListItemParentBlock","NewLineUtils","hasFirstChild","hasParent$1","isListBlock","isNestedList","getContainerBlock","containerBlock","containerBlockParent","isFirstOrLastLi","createNewBlock","newBlockName","InsertLi","trimZwsp","isEmptyAnchor","isTableCell$4","emptyBlock","containerAndSiblingName","canSplitBlock","trimInlineElementsOnLeftSideOfBlock","firstChilds","normalizeZwspOffset","includeZwspInRange","trimLeadingLineBreaks","getEditableRoot$1","applyAttributes","forcedRootBlockAttrs","attrStyles","currentStyles","newStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","appliedAttrs","remainingAttrs","setForcedBlockAttrs","wrapSelfAndSiblingsInDefaultBlock","addBrToBlockIfNeeded","parentBlockName","containerBlockName","isAfterLastNodeInContainer","clonedNode","textInlineElements","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","InsertBlock","hasRightSideContent","scrollToBr","brElm","moveSelectionToBr","extraBr","insertBrAtCaret","isControlKey","insertBrBefore","insertBrAfter","hasBrAfter","isBeforeBr$1","isAnchorLink","isInsideAnchor","readInlineAnchorLocation","insertBrOutsideAnchor","insert$2","anchorLocation","InsertBr","shouldInsertBr","shouldBlockNewLine","ContextSelectors","newLineAction","shouldBlockNewLine$1","isBrMode","requiredState","brMode","inListBlock","inPreBlock","inSummaryBlock","shouldPutBrInPre$1","inBrContext","canInsertIntoEditableRoot","rootEditable","match$2","predicates","isMatch","getAction$1","NewLineAction","insert$3","InsertNewLine","handleEnterKeyEvent","EnterKey","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","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","SpaceKey","findBlockCaretContainer","removeIeControlRect","showBlockCaretContainer","blockCaretContainer","handleBlockContainer","CaretContainerInput","browser$5","setupIeInput","keypressThrotter","isComposing","executeKeydownOverride$3","setup$f","HomeEndKeys","setup$g","KeyboardOverrides","NodeChange","lastPath","nativeRng","fakeRng","isSameElementPath","disable_nodechange","currentPath","preventSummaryToggle","filterDetails","setup$h","isTextBlockNode","normalizeSelection$1","setup$i","getAbsolutePosition","getBodyPosition","getScrollPosition","getBodyScroll","inlineScroll","iframeScroll","getMousePosition","iframePosition","scrollPosition","calculatePosition","bodyPosition","mousePosition","calc","MousePosition","isContentEditableFalse$a","isContentEditableTrue$4","isDraggable","isValidDropTarget","dragElement","cloneElement","cloneElm","createGhost","clonedElm","ghostElm","appendGhostToBody","moveGhost","overflowX","removeElement","isLeftMouseButtonPressed","hasDraggableElement","applyRelPos","relX","start$1","ceElm","elmPos","relY","ghost","throttledPlaceCaretAt","dragging","targetPos","getRawTarget","targetClone_1","targetClone","removeDragState","bindFakeDragEvents","pageDom","dragStartHandler","dragHandler","dropHandler","dragEndHandler","blockIeDrop","realTarget","DragDropOverrides","setup$j","renderFocusCaret","CefFocus","isContentEditableTrue$5","isContentEditableFalse$b","getContentEditableRoot$2","SelectionOverrides","selectedContentEditableNode","fakeCaret","realSelectionId","isFakeSelectionElement","getRealSelectionElement","setRange","getRange","contentEditableRoot","removeContentEditableSelection","handleTouchSelect","setContentEditableSelection","hasNormalCaretPosition","hasBetterMouseTarget","targetBlock","normalizeShortEndedElementSelection","isRangeInCaretContainer","realSelectionElement","outerText","isWithinCaretContainer","$realSelectionContainer","origTargetClone","nodeElm","isGecko","isWebKit","mceInternalDataType","setEditorCommandState","setMceInternalContent","selectionHtml","internalContent","getMceInternalContent","insertClipboardContents","queryCommandSupported","emptyEditorWhenDeleting","serializeRng","allContentsSelected","allRng","allSelection","selectAll","inputMethodFocus","removeHrOnBackspace","selectControlElements","removeStylesWhenDeletingAcrossBlockElements","getAttributeApplyFunction","template","setAttributeNode","isSelectionAcrossElements","disableBackspaceIntoATable","removeBlockQuoteOnBackSpace","setGeckoEditingOptions","setOpts","addBrAfterLastLinks","fixLinks","setDefaultBlockType","showBrokenImageIcon","contentStyles","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","selection_1","disableAutoUrlDetect","tapLinksAndImages","blockFormSubmitInsideEditor","removeAppleInterchangeBrs","ieInternalDragAndDrop","DOM$4","appendStyle","createParser","autoFocus","auto_focus","moveSelectionToFirstCaretPosition","bindPendingEventDelegates","execCallback","getStyleSheetLoader","initContentBody","skipWrite","contentCssText","orgVisibility","iframeHTML","bodyEl","hex_colors","force_hex_style_colors","annotator","_nodeChangeDispatcher","browser_spellcheck","gecko_spellcheck","spellcheck","protect","startContent","content_style","InitContentBody","DOM$5","relaxDomain","ifr","domain","hostname","bodyUuid","domainRelaxUrl","createIframeElement","customAttrs","frameBorder","allowTransparency","createIframe","isDomainRelaxed","boxInfo","hidden","InitIframe","DOM$6","initPlugin","initializedPlugins","pluginInstance","trimLegacyPrefix","initIcons","iconPackName","currentIcons","defaultIcons","loadIcons","svgData","addIcon","initTheme","renderFromLoadedTheme","renderFromThemeFunc","iframeHeight","createThemeFalseResult","renderThemeFalseIframe","renderThemeFalse","renderThemeUi","Init","DOM$7","hasSkipLoadPrefix","loadLanguage","scriptLoader","languageCode","languageUrl","url_1","loadTheme","themeUrl","theme_url","getIconsUrlMetaFromUrl","getIconsUrlMetaFromName","urlMeta","loadPlugins","depPlugin","url_2","resetContent","triggerSave","encoding","set_dirty","hasOnlyOneChild$1","isPaddingNode","isPaddedEmptyBlock","isEmptyFragmentElement","isListFragment","cleanupDomFragment","domFragment","toDomFragment","listItems$1","isPadding","isListItemPadded","isEmptyOrPadded","trimListItems","getParentLi","isParentBlockLi","getSplit","beforeRng","afterRng","findFirstIn","newCaretPos","findLastOf","insertMiddle","insertBefore$1","insertAfter$1","insertAtCaret","liTarget","liElms","BEGINNING","isAt","InsertList","isAfterNbsp","trimOrPadLeftRight","hasSiblingText","trimNbspAfterDeleteAndPadValue","isTableCell$5","selectionSetContent","validInsertion","trimBrsFromTableCell","reduceInlineTextElements","root_1","elementUtils_1","testNode","markFragmentElements","umarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","parentEditableFalseElm","nextRng","getContentEditableFalseParent","findNextCaretRng","insertHtmlAtCaret","bookmarkHtml","caretElement","processValue","insertAtCaret$1","InsertContent","nativeCommand","deleteCommand","forwardDeleteCommand","DeleteCommands","ancestor$3","legacyPropNames","getSpecifiedFontProp","getProperty","legacyPropName","normalizeFontFamily","getComputedFontProp","getFontProp","FontInfo","getFontSize","getFontFamily","findFirstCaretElement","isRangeAtStartOfNode","getCaretElement","fromFontSizeNumber","fontSizeNumber","fontClasses","normalizeFontNames","fontNameAction","fontNameQuery","fontSizeAction","fontSizeQuery","each$f","map$3","inArray$2","EditorCommands","setupCommands","customCommand","skip_focus","addCommands","commandList","hasCustomCommand","execNativeCommand","isFormatMatch","storeSelection","selectionBookmark","queryCommandEnabled","listParent","editingHost","alignStates","Undo","Redo","nativeEvents","EventDispatcher","bindings","toggleEvent","isNative","beforeFire","wrappedCallback","bindingName","hi","getEventDispatcher","_eventDispatcher","toggleNativeEvent","Observable","dispatcherArgs","internalContentEditableAttr","switchOffContentEditableTrue","switchOnContentEditableTrue","removeFakeSelection","restoreFakeSelection","toggleReadOnly","registerFilters","registerReadOnlyContentFilters","isClickEvent","isInAnchor","preventReadOnlyEvents","registerReadOnlySelectionBlockers","DOM$8","getEventTarget","event_root","eventRoot","isListening","fireEvent","bindEventDelegate","eventRootElm","delegates","editors","EditorObservable","_pendingNativeEvents","defaultModes","switchToMode","activeMode","availableModes","oldMode","activate","deactivate","editorReadOnly","registerMode","design","each$g","explode$3","keyCodeLookup","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","modifierNames","Shortcuts","pendingPatterns","hasModifier","isFunctionKey","matchShortcut","subpatterns","executeShortcutAction","desc","cmdFunc","createShortcut","parseShortcut","addSidebar","each$h","trim$4","queryParts","DEFAULT_PORTS","ftp","http","https","mailto","URI","baseUri","isProtocolRelative","toAbsPath","urlMatch","userInfo","uriComponents","pathname","setPath","pathMatch","toRelative","relativeUri","tu","uu","toRelPath","noHost","absoluteUri","defaultPort","breakPoint","normalizedBase","outPath","nb","normalizedPath","noProtoHost","DOM$9","extend$3","each$i","resolve$3","ie$1","loadedCSS","isNotDirty","documentBaseURL","base_url","_setBaseUrl","baseURI","referrer_policy","language_load","editorCommands","cache_suffix","modeInstance","callbackLookup","setProgressState","initialContent","oldState","urlconverter_callback","visual_table_class","visual_anchor_class","_scanForImages","DOM$a","explode$4","each$j","extend$4","instanceCounter","boundGlobalEvents","legacyEditors","isValidLegacyKey","globalEventDelegate","EditorManager","toggleGlobalEvents","removeEditorFromList","targetEditor","oldEditors","purgeDestroyedEditor","isQuirksMode","compatMode","releaseDate","i18n","preInit","tinyMCEPreInit","srcScript","currentScript","pluginBaseUrls","plugin_base_urls","invalidInlineTargets","isInvalidInlineTarget","createId","editor_deselector","editor_selector","provideResults","initEditors","initCount","createEditor","existingEditor","addI18n","RangeUtils","normalizedRng","compareRanges","extendClass","initializing","RangeUtils$1","awaiter","resolveCb","rejectCb","tasks","resultFns","loadErrMsg","runErrMsg","task","waiter","Resource","round$2","relativePosition","targetW","targetH","findBestRelativePosition","constrainRect","intersect","x1","y1","fixedSize","underflowX1","underflowY1","overflowX2","overflowY2","cx2","cy2","fromClientRect","each$k","extend$5","Class","member","_super","mixins","mixin","Mixins","dummy","createMethod","Methods","Properties","Statics","Defaults","min$1","max$1","round$3","Color","rgb2hsv","hsvToRgb","toRgb","toHsv","hexCode","JSONUtils","JSONP","XHR","ready","success_scope","error_scope","overrideMimeType","content_type","crossDomain","setRequestHeader","requestheaders","extend$6","JSONRequest","sendRPC","ecb","scb","xhrArgs","ty","removeItem","configurable","enumerable","LocalStorage","publicApi","geom","isMac","exportToModuleLoaders","exportToWindowGlobal","tinyMCE","regExps","aletter","midnumlet","midletter","midnum","lf","newline","katakana","extendnumlet","characterIndices","ALETTER","MIDNUMLET","MIDLETTER","MIDNUM","NUMERIC","CR","LF","NEWLINE","EXTEND","FORMAT","KATAKANA","EXTENDNUMLET","AT","OTHER","SETS","EMPTY_STRING","PUNCTUATION","WHITESPACE","SETS$1","setsLength","memoize","classify","memoized","isWordBoundary","prevType","nextNextType","nextType","EMPTY_STRING$1","WHITESPACE$1","PUNCTUATION$1","isProtocol","findWordEnd","findUrlEnd","peakedWord","findWords","sChars","characterMap","word","includeWhitespace","includePunctuation","startOfWord","endOfWord","endOfUrl","getDefaultOptions","getWords","filteredChars","extractedChars","getWords$1","treeWalker","strLen","countWords","countCharacters","countCharactersWithoutSpaces","createBodyCounter","createSelectionCounter","createBodyWordCounter","getWordCount","getCharacterCount","getCharacterCountWithoutSpaces","getCount","fireWordCountUpdate","charactersWithoutSpaces","updateCount","debouncedUpdate","Content","editorContent","fullscreenState","isFullscreen","revocable","doRevoke","unbindable","filterSelf","fireFullscreenStateChanged","siblings$1","siblings$2","siblingStyles","ancestorPosition","ancestorStyles","bgFallback","matchColor","editorBody","clobberStyles","gatherSibilings","clobber","clobberStyle","backup","containerStyles","restoreStyles","clobberedEls","Thor","getScrollPos","setScrollPos","viewportUpdate","resizeBinder","scrollBinder","refreshScroll","refreshVisualViewport","toggleFullscreen","editorContainerStyle","iframeStyle","editorContainerS","fullscreenInfo","iframeWidth","containerWidth","containerHeight","containerTop","containerLeft","newFullScreenInfo"],"mappings":"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EAAM2lH,GAAS1rC,MAAK,SAAU+sC,GACrD,OAAOA,EAAQx8F,MAAM,KAAK,MAG9B,SAASy8F,IACP,OAAOR,EAAUxsC,KAAKipC,IAExB,MAAO,CACLyD,QAASA,EACTd,OAAQA,EACRC,UAAWA,EACXc,SAAUA,EACVC,eAAgBA,EAChBC,kBAAmBA,EACnBC,iBAAkBA,EAClBE,SAAUA,GAGd,SAASC,GAASl7F,GAChB,OAAOk6F,GAAcl6F,GAAMiuD,MAAK,SAAUwqC,GACxC,OAAO+B,GAASR,GAAah6F,GAAOA,EAAMy4F,MAG9C,SAAS0C,GAAWx7B,EAAQ3rF,GAC1B,OAAO0lH,GAAa/5B,EAAQ3rF,GAAMi6E,MAAK,SAAUjuD,GAC/C,OAAOw6F,GAASzC,GAAUnpH,QAAQ+wF,GAAS3/D,EAAM2/D,EAAOm6B,gBAI5D,IAAIsB,GAAoB,SAAUp7F,GAChC,OAAOk7F,GAASl7F,IAGlB,SAASq7F,GAAQ5tH,EAAOwuC,EAAKtS,GAC3B,IAAI2xF,EAA+B,kBAAV7tH,EAAqB87B,WAAW97B,GAASA,EAMlE,OALI6tH,EAAc3xF,EAChB2xF,EAAc3xF,EACL2xF,EAAcr/E,IACvBq/E,EAAcr/E,GAETq/E,EAET,SAASC,KACP,MAAO,CACL,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAGJ,IAAIC,GAAc,CAChB,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,KACA,EACA,KACA,KACA,KAC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AAOvF,EAAG,CAC7C,IAAKiF,EAAQc,EAAG/F,IACd,MAAM,IAAIb,MAAM,oBAAsBa,EAAI,6BAA+B+F,GAE3EJ,EAAWtH,MAAMyC,EAAGiF,EAAG/F,IAEzB,OAAOc,GAEL4B,EAAO,SAAUqD,EAAIlI,GACvB,OAAOmJ,EAAQxE,EAAIuD,EAAIlI,KAMrB6/L,GAJSv4L,EAAWpE,MAAM0C,OAAQ1C,MAAM0C,KAI5BnE,EAAS2F,SACrB04L,EAAc,eACdC,EAAoB,WACtB,MAAO,CACL,CACEh5L,KAAM,WACNg8K,WAAY,CACV,CACE,GACA,eAEF,CACE,IACA,aAEF,CACE,KACA,aAEF,CACE,IACA,cAEF,CACE,IACA,YAEF,CACE,IACA,iBAEF,CACE,KACA,sBAEF,CACE,KACA,cAEF,CACE,KACA,iBAEF,CACE,KACA,qBAEF,CACE,KACA,aAEF,CACE,KACA,aAEF,CACE,KACA,cAEF,CACE,KACA,eAEF,CACE,KACA,cAEF,CACE,KACA,YAEF,CACE,KACA,mBAEF,CACE,KACA,aAEF,CACE,KACA,YAEF,CACE,KACA,eAEF,CACE,KACA,gBAEF,CACE,KACA,uBAEF,CACE,KACA,aAEF,CACE,KACA,gBAEF,CACE,KACA,gBAEF,CACE,KACA,gBAEF,CACE,KACA,aAEF,CACE,KACA,uBAEF,CACE,KACA,iBAEF,CACE,KACA,cAEF,CACE,KACA,qBAEF,CACE,KACA,qBAEF,CACE,KACA,oBAEF,CACE,KACA,cAEF,CACE,KACA,cAEF,CACE,MACA,iBAEF,CACE,MACA,kBAEF,CACE,MACA,2CAEF,CACE,MACA,oCAIN,CACEh8K,KAAM,OACNg8K,WAAY,CACV,CACE,IACA,kBAEF,CACE,IACA,mBAEF,CACE,KACA,mBAEF,CACE,KACA,kBAEF,CACE,IACA,cAEF,CACE,IACA,cAEF,CACE,KACA,UAEF,CACE,KACA,oBAEF,CACE,KACA,kBAEF,CACE,KACA,oBAEF,CACE,IACA,gBAEF,CACE,IACA,kBAEF,CACE,IACA,uBAIN,CACEh8K,KAAM,aACNg8K,WAAY,CACV,CACE,KACA,6CAEF,CACE,KACA,8CAEF,CACE,IACA,2BAEF,CACE,IACA,4BAEF,CACE,KACA,8BAEF,CACE,KACA,+BAEF,CACE,KACA,8BAEF,CACE,KACA,+BAEF,CACE,KACA,+BAEF,CACE,KACA,+BAEF,CACE,GACA,kBAEF,CACE,GACA,qBAEF,CACE,KACA,yBAEF,CACE,KACA,4BAEF,CACE,KACA,WAEF,CACE,KACA,WAEF,CACE,IACA,UAEF,CACE,KACA,YAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,aAEF,CACE,IACA,6BAEF,CACE,IACA,wBAEF,CACE,IACA,qBAEF,CACE,IACA,eAEF,CACE,IACA,eAEF,CACE,KACA,cAEF,CACE,IACA,mBAEF,CACE,IACA,iBAEF,CACE,KACA,kBAEF,CACE,IACA,uBAEF,CACE,IACA,mBAEF,CACE,IACA,mBAEF,CACE,IACA,qBAEF,CACE,IACA,wBAEF,CACE,IACA,qBAEF,CACE,IACA,6BAIN,CACEh8K,KAAM,eACNg8K,WAAY,CACV,CACE,IACA,qBAEF,CACE,KACA,YAEF,CACE,KACA,kBAEF,CACE,KACA,YAEF,CACE,KACA,eAEF,CACE,KACA,cAEF,CACE,KACA,0BAEF,CACE,KACA,mBAEF,CACE,KACA,gBAEF,CACE,KACA,gBAEF,CACE,KACA,cAEF,CACE,KACA,qBAEF,CACE,KACA,sBAEF,CACE,KACA,iBAEF,CACE,KACA,eAEF,CACE,KACA,cAEF,CACE,IACA,YAEF,CACE,KACA,gBAEF,CACE,KACA,SAEF,CACE,KACA,wBAEF,CACE,KACA,WAEF,CACE,KACA,gBAEF,CACE,KACA,YAEF,CACE,KACA,uBAEF,CACE,KACA,qBAEF,CACE,KACA,mBAEF,CACE,KACA,WAIN,CACEh8K,KAAM,iBACNg8K,WAAY,CACV,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,aAEF,CACE,IACA,iBAEF,CACE,IACA,kBAEF,CACE,IACA,cAEF,CACE,IACA,eAEF,CACE,IACA,eAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,OAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,aAEF,CACE,IACA,iBAEF,CACE,IACA,aAEF,CACE,IACA,cAEF,CACE,IACA,eAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,aAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,SAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,aAEF,CACE,IACA,iBAEF,CACE,IACA,kBAEF,CACE,IACA,cAEF,CACE,IACA,eAEF,CACE,IACA,eAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,OAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,aAEF,CACE,IACA,iBAEF,CACE,IACA,WAEF,CACE,IACA,YAEF,CACE,IACA,eAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,aAEF,CACE,IACA,kBAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,aAEF,CACE,IACA,SAEF,CACE,IACA,iBAEF,CACE,IACA,cAEF,CACE,IACA,SAEF,CACE,IACA,QAEF,CACE,IACA,SAEF,CACE,IACA,SAEF,CACE,IACA,WAEF,CACE,IACA,QAEF,CACE,IACA,OAEF,CACE,IACA,SAEF,CACE,IACA,QAEF,CACE,IACA,SAEF,CACE,IACA,UAEF,CACE,IACA,MAEF,CACE,IACA,MAEF,CACE,IACA,MAEF,CACE,IACA,WAEF,CACE,IACA,MAEF,CACE,IACA,OAEF,CACE,IACA,SAEF,CACE,IACA,OAEF,CACE,IACA,WAEF,CACE,IACA,OAEF,CACE,IACA,OAEF,CACE,IACA,OAEF,CACE,IACA,SAEF,CACE,IACA,SAEF,CACE,IACA,QAEF,CACE,IACA,SAEF,CACE,IACA,SAEF,CACE,IACA,WAEF,CACE,IACA,QAEF,CACE,IACA,OAEF,CACE,IACA,SAEF,CACE,IACA,QAEF,CACE,IACA,SAEF,CACE,IACA,UAEF,CACE,IACA,MAEF,CACE,IACA,MAEF,CACE,IACA,MAEF,CACE,IACA,WAEF,CACE,IACA,MAEF,CACE,IACA,OAEF,CACE,IACA,eAEF,CACE,IACA,SAEF,CACE,IACA,OAEF,CACE,IACA,WAEF,CACE,IACA,OAEF,CACE,IACA,OAEF,CACE,IACA,OAEF,CACE,IACA,WAIN,CACEh8K,KAAM,UACNg8K,WAAY,CACV,CACE,KACA,eAEF,CACE,IACA,aAEF,CACE,KACA,oBAEF,CACE,IACA,yBAEF,CACE,KACA,iBAEF,CACE,KACA,oBAIN,CACEh8K,KAAM,SACNg8K,WAAY,CACV,CACE,KACA,mBAEF,CACE,KACA,iBAEF,CACE,KACA,oBAEF,CACE,KACA,mBAEF,CACE,KACA,oBAEF,CACE,KACA,mBAEF,CACE,KACA,0BAEF,CACE,KACA,wBAEF,CACE,KACA,2BAEF,CACE,KACA,0BAEF,CACE,KACA,2BAEF,CACE,KACA,aAEF,CACE,KACA,aAEF,CACE,KACA,eAEF,CACE,KACA,mBAEF,CACE,KACA,yBAEF,CACE,KACA,2BAEF,CACE,KACA,gBAEF,CACE,KACA,iBAEF,CACE,KACA,iBAEF,CACE,KACA,gBAEF,CACE,KACA,gBAEF,CACE,KACA,iBAEF,CACE,KACA,cAEF,CACE,KACA,eAEF,CACE,KACA,+BAEF,CACE,KACA,gCAEF,CACE,KACA,WAEF,CACE,KACA,oBAEF,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K,eACL7D,KAAM,iBAER,CACE6D,IAAK,OACL7D,KAAM,QAER,CACE6D,IAAK,QACL7D,KAAM,SAER,CACE6D,IAAK,QACL7D,KAAM,SAER,CACE6D,IAAK,cACL7D,KAAM,eAER,CACE6D,IAAK,cACL7D,KAAM,eAER,CACE6D,IAAK,YACL7D,KAAM,cAER,CACE6D,IAAK,QACL7D,KAAM,SAER,CACE6D,IAAK,UACL7D,KAAM,WAER,CACE6D,IAAK,QACL7D,KAAM,SAER,CACE6D,IAAK,OACL7D,KAAM,QAER,CACE6D,IAAK,gBACL7D,KAAM,sBAER,CACE6D,IAAK,eACL7D,KAAM,iBAER,CACE6D,IAAK,WACL7D,KAAM,aAER,CACE6D,IAAK,QACL7D,KAAM,SAER,CACE6D,IAAK,WACL7D,KAAM,YAER,CACE6D,IAAK,YACL7D,KAAM,cAER,CACE6D,IAAK,cACL7D,KAAM,gBAER,CACE6D,IAAK,MACL7D,KAAM,qBAER,CACE6D,IAAK,eACL7D,KAAM,iBAER,CACE6D,IAAK,cACL7D,KAAM,qBAER,CACE6D,IAAK,YACL7D,KAAM,cAER,CACE6D,IAAK,UACL7D,KAAM,yBAER,CACE6D,IAAK,gBACL7D,KAAM,mBAER,CACE6D,IAAK,aACL7D,KAAM,eAER,CACE6D,IAAK,YACL7D,KAAM,eAER,CACE6D,IAAK,sBACL7D,KAAM,sBAER,CACE6D,IAAK,cACL7D,KAAM,0BAER,CACE6D,IAAK,cACL7D,KAAM,iBAER,CACE6D,IAAK,WACL7D,KAAM,aAER,CACE6D,IAAK,aACL7D,KAAM,yBAER,CACE6D,IAAK,YACL7D,KAAM,cAER,CACE6D,IAAK,aACL7D,KAAM,gBAER,CACE6D,IAAK,eACL7D,KAAM,kBAER,CACE6D,IAAK,YACL7D,KAAM,eAER,CACE6D,IAAK,eACL7D,KAAM,kBAER,CACE6D,IAAK,WACL7D,KAAM,oBAER,CACE6D,IAAK,cACL7D,KAAM,iBAGN46M,EAAa,CAAED,KAAMA,GAErBE,EAAQ,SAAU9sI,GACpB,IAAI+sI,EAAmB,WACrB,IAAIC,EAAiB,CACnB,wBA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CxCm6K,SACAf,EAAaxlP,GAGfkmP,IAEFV,EAAax6O,GACbA,EAAK+3J,KAAO32F,OA/BVw5K,SAJAD,KAqCAmB,EAAQ,SAAU16K,GACpB,OAAOmI,GAAOpgG,IAAG,SAAUzK,GACzBulE,EAAKm9B,EAAKtkG,EAAQ4B,EAASpB,EAASkG,GAAOjG,MAAM6jG,KAAQtkG,EAAQ4B,EAASpB,EAASkG,GAAON,MAAMk+F,UAGhG26K,EAAQ,SAAU5vQ,GACpB,OAAOA,EAAOtL,KAAKrD,EAAUA,IAE3Bw+Q,EAAU,SAAUz9D,EAAM7oI,EAAS28K,GACrCtuC,GAAMviN,EAAI+8M,EAAMu9D,IAAQt0Q,KAAI,SAAU2E,GACpC,IAAIqU,EAAQjb,EAAU4G,GAAQ,SAAUrM,GACtC,OAAOA,EAAEkD,aAEPwd,EAAM/a,KAAKrI,OAAS,EACtBi1P,EAAQ7xO,EAAM/a,KAAKjE,IAAIu6Q,IAEvBrmM,EAAQl1D,EAAMhb,KAAKhE,IAAIu6Q,QAI7B,MAAO,CACL93M,KAAMA,EACN+3M,QAASA,EACTzB,mBAAoBA,GAIxB,IAmMI0B,GAAeC,GAAcC,GAnM7Bn3D,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,WAEEo3D,GAAQ,CACV,OACA,OACA,WACA,KACA,MACA,QACA,KACA,MACA,QACA,UACA,OACA,OACA,QACA,QACA,SACA,MACA,SAEEC,GAAa,CACf,KACA,MAEEC,GAAgB,CAClB,QACA,QACA,SAEE7yE,GAAa,CACf,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,UAEE8yE,GAAW,CACb,KACA,KACA,KACA,KACA,KACA,MAEEC,GAAY,CACd,KACA,KACA,MAEEr6E,GAAQ,CACV,KACA,KACA,MAEEs6E,GAAa,CACf,MACA,SACA,WACA,SAEEC,GAAa,SAAUr4N,GACzB,IAAIH,EACJ,OAAO,SAAUhuC,GAEf,OADAguC,EAASA,GAAkB79C,EAAYg+C,EAAO/mD,GAAS,IAChD4mD,EAAO9kD,eAAewE,GAAKsS,MAGlC8/N,GAAY0mC,GAAWH,IACvBnjM,GAAUsjM,GAAW13D,IACrB23D,GAAY,SAAUzmQ,GACxB,MAAsB,UAAftS,GAAKsS,IAEV8yJ,GAAW,SAAU9yJ,GACvB,OAAOkU,GAAUlU,KAAUkjE,GAAQljE,IAEjC0mQ,GAAS,SAAU1mQ,GACrB,OAAOkU,GAAUlU,IAAwB,OAAftS,GAAKsS,IAE7BgqL,GAAcw8E,GAAWjzE,IACzBpH,GAASq6E,GAAWv6E,IACpB40C,GAAa2lC,GAAWF,IACxBK,GAASH,GAAWN,IACpBU,GAAiBJ,GAAWJ,IAC5BS,GAAcL,GAAWL,IACzBW,GAAsBN,GAAWD,IAEjCQ,GAAoB,SAAU/mQ,GAChC,IAAIgnQ,EAAiBhnQ,EAAKoqL,iBAAqD,SAAlCpqL,EAAKoqL,gBAAgBp2K,SAC9DizP,EAAajnQ,EAAKwR,aAA6C,SAA9BxR,EAAKwR,YAAYwC,SACtD,OAAOgzP,GAAkBC,GAEvBvzE,GAAiB,SAAU1zL,GAC7B,OAAOA,GAAyB,SAAjBA,EAAK0kL,SAA6D,aAAvC1kL,EAAK0U,aAAa,kBAE1DwyP,GAAW,SAAU9mQ,EAAKJ,GAC5B,IAAIlX,EAAG2oB,EAAWzR,EAAKJ,WACvB,IAAI6qL,GAASv2K,UAAUlU,KAAS0zL,GAAe1zL,GAA/C,CAGA,IAAKlX,EAAI2oB,EAASvqB,OAAS,EAAG4B,GAAK,EAAGA,IACpCo+Q,GAAS9mQ,EAAKqR,EAAS3oB,IAEzB,IAAkC,IAA9B2hM,GAASo2E,WAAW7gQ,GAAiB,CACvC,GAAIyqL,GAASt2K,OAAOnU,IAASA,EAAK0hC,UAAUx6C,OAAS,EAAG,CACtD,IAAIigR,EAAgB5+Q,GAAM+d,KAAKtG,EAAK0hC,WAAWx6C,OAC/C,GAAIkZ,EAAI8iE,QAAQljE,EAAK6J,aAAes9P,EAAgB,EAClD,OAEF,GAAsB,IAAlBA,GAAuBJ,GAAkB/mQ,GAC3C,YAEG,GAAIyqL,GAASv2K,UAAUlU,KAC5ByR,EAAWzR,EAAKJ,WACQ,IAApB6R,EAASvqB,QAAgBwsM,GAAejiL,EAAS,KACnDzR,EAAK6J,WAAWqI,aAAaT,EAAS,GAAIzR,GAExCyR,EAASvqB,QAAUy/Q,GAAOlmQ,GAAQZ,QAAQG,KAC5C,OAGJI,EAAI4S,OAAOhT,GAEb,OAAOA,IAELonQ,GAAW,CAAEF,SAAUA,IAEvBG,GAAY9+Q,GAAMw7I,QAElBujI,GAAmB,0EACnBC,GAAkB,kEAClBC,GAAiB,aACjBC,GAAe,kCACfC,GAAW,CACbC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KAEPrD,GAAe,CACb,IAAK,SACLsD,IAAM,QACN,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,SAEPrD,GAAkB,CAChB,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,KAEZ,IAAIsD,GAAe,SAAUrpQ,GAC3B,IAAI6jE,EAGJ,OAFAA,EAAMtjE,GAAQX,QAAQ,OAAOM,MAC7B2jE,EAAIrkE,UAAYQ,EACT6jE,EAAIjxD,aAAeixD,EAAI+9D,WAAa5hI,GAEzCspQ,GAAsB,SAAUr7N,EAAOs7N,GACzC,IAAI3gR,EAAGu7E,EAAKqlM,EACR17N,EAAS,GACb,GAAIG,EAAO,CAGT,IAFAA,EAAQA,EAAM/1B,MAAM,KACpBqxP,EAAQA,GAAS,GACZ3gR,EAAI,EAAGA,EAAIqlD,EAAMjnD,OAAQ4B,GAAK,EACjCu7E,EAAMn3E,OAAOw6L,aAAarkK,SAAS8qB,EAAMrlD,GAAI2gR,IACxCzD,GAAa3hM,KAChBqlM,EAAS,IAAMv7N,EAAMrlD,EAAI,GAAK,IAC9BklD,EAAOq2B,GAAOqlM,EACd17N,EAAO07N,GAAUrlM,GAGrB,OAAOr2B,IAGX+3N,GAAgByD,GAAoB,+rEAAwzE,IAC51E,IAAIG,GAAY,SAAUzpQ,EAAM4d,GAC9B,OAAO5d,EAAKuB,QAAQqc,EAAOwpP,GAAmBC,IAAiB,SAAUljM,GACvE,OAAO2hM,GAAa3hM,IAAQA,MAG5BuqI,GAAe,SAAU1uM,GAC3B,OAAQ,GAAKA,GAAMuB,QAAQ+lQ,IAAgB,SAAUnjM,GACnD,OAAO2hM,GAAa3hM,IAAQA,MAG5BulM,GAAgB,SAAU1pQ,EAAM4d,GAClC,OAAO5d,EAAKuB,QAAQqc,EAAOwpP,GAAmBC,IAAiB,SAAUljM,GACvE,OAAIA,EAAIn9E,OAAS,EACR,MAAsC,MAA7Bm9E,EAAI6uC,WAAW,GAAK,QAAiB7uC,EAAI6uC,WAAW,GAAK,OAAS,OAAS,IAEtF8yJ,GAAa3hM,IAAQ,KAAOA,EAAI6uC,WAAW,GAAK,QAGvD22J,GAAc,SAAU3pQ,EAAM4d,EAAMgsP,GAEtC,OADAA,EAAWA,GAAY/D,GAChB7lQ,EAAKuB,QAAQqc,EAAOwpP,GAAmBC,IAAiB,SAAUljM,GACvE,OAAO2hM,GAAa3hM,IAAQylM,EAASzlM,IAAQA,MAG7C0lM,GAAgB,SAAUr8Q,EAAMo8Q,GAClC,IAAIE,EAAcR,GAAoBM,IAAa/D,GAC/CkE,EAAwB,SAAU/pQ,EAAM4d,GAC1C,OAAO5d,EAAKuB,QAAQqc,EAAOwpP,GAAmBC,IAAiB,SAAUljM,GACvE,YAA0Bl5E,IAAtB66Q,GAAa3hM,GACR2hM,GAAa3hM,QAEGl5E,IAArB6+Q,EAAY3lM,GACP2lM,EAAY3lM,GAEjBA,EAAIn9E,OAAS,EACR,MAAsC,MAA7Bm9E,EAAI6uC,WAAW,GAAK,QAAiB7uC,EAAI6uC,WAAW,GAAK,OAAS,OAAS,IAEtF,KAAO7uC,EAAI6uC,WAAW,GAAK,QAGlCg3J,EAAoB,SAAUhqQ,EAAM4d,GACtC,OAAO+rP,GAAY3pQ,EAAM4d,EAAMksP,IAE7BG,EAAU9C,GAAU35Q,EAAK+T,QAAQ,MAAO,MAC5C,OAAI0oQ,EAAQC,OAASD,EAAQE,QACpBJ,EAELE,EAAQC,MACNN,EACKI,EAEFL,GAELM,EAAQE,QACHT,GAEFD,IAELtuD,GAAS,SAAUn7M,GACrB,OAAOA,EAAKuB,QAAQgmQ,IAAc,SAAU7/Q,EAAKyiR,GAC/C,OAAIA,GAEAA,EADsC,MAApCA,EAAQ3lM,OAAO,GAAG5iE,cACVuhB,SAASgnP,EAAQpkQ,OAAO,GAAI,IAE5Bod,SAASgnP,EAAS,IAE1BA,EAAU,OACZA,GAAW,MACJn9Q,OAAOw6L,aAAa,OAAS2iF,GAAW,IAAK,OAAmB,KAAVA,KAExD3C,GAAS2C,IAAYn9Q,OAAOw6L,aAAa2iF,IAE3CpE,GAAgBr+Q,IAAQm+Q,GAAcn+Q,IAAQ2hR,GAAa3hR,OAGlE0iR,GAAW,CACbX,UAAWA,GACX/6D,aAAcA,GACdg7D,cAAeA,GACfC,YAAaA,GACbE,cAAeA,GACf1uD,OAAQA,IAGNkvD,GAAW,GAAIC,GAAW,GAC1BC,GAAYliR,GAAMw7I,QAASyrG,GAASjnP,GAAMgD,KAAMm/Q,GAAWniR,GAAM4jI,OAAQw+I,GAAYpiR,GAAMu7Q,QAAS1rE,GAAU7vM,GAAM6vM,QACpHhgL,GAAQ,SAAU+1B,EAAOm1N,GAE3B,OADAn1N,EAAQ5lD,GAAM+d,KAAK6nC,GACZA,EAAQA,EAAM/1B,MAAMkrP,GAAS,KAAO,IAEzCsH,GAAgB,SAAUh9Q,GAC5B,IACIi9Q,EAAkBC,EAClBC,EAAiBC,EAAaC,EAAmBC,EAFjD3wQ,EAAS,GAGTwjB,EAAM,SAAUrwB,EAAM4sB,EAAY7I,GACpC,IAAI05P,EAAI74D,EAAiBhqM,EACrB8iQ,EAAa,SAAUl8Q,EAAO4B,GAChC,IACIhI,EAAG8zG,EADHtxG,EAAM,GAEV,IAAKxC,EAAI,EAAG8zG,EAAI1tG,EAAMhI,OAAQ4B,EAAI8zG,EAAG9zG,IACnCwC,EAAI4D,EAAMpG,IAAMgI,GAAO,GAEzB,OAAOxF,GAETmmB,EAAWA,GAAY,GACvB6I,EAAaA,GAAc,GACH,kBAAb7I,IACTA,EAAW2G,GAAM3G,IAEnB/jB,EAAO0qB,GAAM1qB,GACby9Q,EAAKz9Q,EAAKxG,OACV,MAAOikR,IACL74D,EAAkBl6L,GAAM,CACtByyP,EACAvwP,GACAjoB,KAAK,MACPiW,EAAU,CACRgS,WAAY8wP,EAAW94D,GACvBA,gBAAiBA,EACjB7gM,SAAU25P,EAAW35P,EAAU+4P,KAEjCjwQ,EAAO7M,EAAKy9Q,IAAO7iQ,GAGnB+iQ,EAAW,SAAU39Q,EAAM4sB,GAC7B,IAAI6wP,EAAIG,EAAYxiR,EAAG8zG,EACvBlvG,EAAO0qB,GAAM1qB,GACby9Q,EAAKz9Q,EAAKxG,OACVozB,EAAalC,GAAMkC,GACnB,MAAO6wP,IAEL,IADAG,EAAa/wQ,EAAO7M,EAAKy9Q,IACpBriR,EAAI,EAAG8zG,EAAItiF,EAAWpzB,OAAQ4B,EAAI8zG,EAAG9zG,IACxCwiR,EAAWhxP,WAAWA,EAAWxxB,IAAM,GACvCwiR,EAAWh5D,gBAAgB5jN,KAAK4rB,EAAWxxB,KAIjD,OAAIyhR,GAAS38Q,GACJ28Q,GAAS38Q,IAElBi9Q,EAAmB,wDACnBC,EAAe,sFACfC,EAAkB,wLACL,UAATn9Q,IACFi9Q,GAAoB,8EACpBC,GAAgB,6EAChBC,GAAmB,oGAER,iBAATn9Q,IACFi9Q,GAAoB,YACpBK,EAAuB,6CACvBH,EAAkB,CAChBA,EACAG,GACA74Q,KAAK,KACPm9O,GAAOp3N,GAAM8yP,IAAuB,SAAUx9Q,GAC5CqwB,EAAIrwB,EAAM,GAAIq9Q,MAEhBE,EAAoB,8BACpBH,EAAe,CACbA,EACAG,GACA54Q,KAAK,KACP24Q,EAAc,CACZF,EACAC,GACA14Q,KAAK,KACPm9O,GAAOp3N,GAAM6yP,IAAoB,SAAUv9Q,GACzCqwB,EAAIrwB,EAAM,GAAIs9Q,OAGlBA,EAAcA,GAAe,CAC3BF,EACAC,GACA14Q,KAAK,KACP0rB,EAAI,OAAQ,WAAY,aACxBA,EAAI,OAAQ,GAAI,sDAChBA,EAAI,wBACJA,EAAI,OAAQ,eACZA,EAAI,OAAQ,+CACZA,EAAI,OAAQ,mCACZA,EAAI,QAAS,qBACbA,EAAI,SAAU,gCACdA,EAAI,OAAQ,0LAAqMitP,GACjNjtP,EAAI,4BAA6B,GAAIitP,GACrCjtP,EAAI,0GAA2G,GAAIgtP,GACnHhtP,EAAI,aAAc,OAAQitP,GAC1BjtP,EAAI,KAAM,sBAAuB,MACjCA,EAAI,KAAM,GAAI,MACdA,EAAI,KAAM,QAASitP,GACnBjtP,EAAI,KAAM,GAAI,SACdA,EAAI,IAAK,sCAAuCgtP,GAChDhtP,EAAI,IAAK,OAAQgtP,GACjBhtP,EAAI,UAAW,gBAAiBitP,GAChCjtP,EAAI,MAAO,kDACXA,EAAI,SAAU,wBAAyBitP,GACvCjtP,EAAI,QAAS,yBACbA,EAAI,SAAU,wDAAyD,CACrEitP,EACA,SACA34Q,KAAK,MACP0rB,EAAI,QAAS,cACbA,EAAI,MAAO,OAAQ,CACjBitP,EACA,QACA34Q,KAAK,MACP0rB,EAAI,OAAQ,wDACZA,EAAI,QAAS,SAAU,yCAAoD,UAATnwB,EAAmB,OAAS,KAC9FmwB,EAAI,WAAY,OAAQ,OACxBA,EAAI,MAAO,QACXA,EAAI,oBAAqB,GAAI,MAC7BA,EAAI,KAAM,GAAI,SACdA,EAAI,KAAM,0BAA2BitP,GACrCjtP,EAAI,KAAM,qCAAsCitP,GAChDjtP,EAAI,OAAQ,2EAA4EitP,GACxFjtP,EAAI,WAAY,qBAAsB,CACpCitP,EACA,UACA34Q,KAAK,MACP0rB,EAAI,QAAS,WAAYgtP,GACzBhtP,EAAI,QAAS,0NACbA,EAAI,SAAU,4FAAsG,UAATnwB,EAAmBo9Q,EAAcD,GAC5IhtP,EAAI,SAAU,4CAA6C,mBAC3DA,EAAI,WAAY,iBAAkB,UAClCA,EAAI,SAAU,iCACdA,EAAI,WAAY,yEAChBA,EAAI,OAAQ,aAAc,CACxBitP,EACA,MACA34Q,KAAK,MACP0rB,EAAI,WAAY,GAAIitP,GACP,UAATp9Q,IACFmwB,EAAI,OACJA,EAAI,OAAQ,GAAI,CACdgtP,EACA,SACA14Q,KAAK,MACP0rB,EAAI,aAAc,GAAIitP,GACtBjtP,EAAI,yBAA0B,GAAIgtP,GAClChtP,EAAI,SAAU,eAAgBitP,GAC9BjtP,EAAI,QAAS,+FAAqG,CAChHitP,EACA,gBACA34Q,KAAK,MACP0rB,EAAI,QAAS,kFAAwF,CACnGitP,EACA,gBACA34Q,KAAK,MACP0rB,EAAI,UAAW,GAAI,cACnBA,EAAI,SAAU,+BACdA,EAAI,QAAS,kCACbA,EAAI,WAAY,GAAI,CAClBgtP,EACA,UACA14Q,KAAK,MACP0rB,EAAI,+CAAgD,GAAIitP,GACxDjtP,EAAI,SAAU,GAAI,qBAClBA,EAAI,SAAU,GAAI,CAChBitP,EACA,cACA34Q,KAAK,MACP0rB,EAAI,OAAQ,WAAYgtP,GACxBhtP,EAAI,SAAU,OAAQitP,GACtBjtP,EAAI,UAAW,uDACfA,EAAI,SAAU,gBAAiBgtP,GAC/BhtP,EAAI,WAAY,YAAagtP,GAC7BhtP,EAAI,QAAS,iCAAkCgtP,GAC/ChtP,EAAI,UAAW,OAAQ,CACrBitP,EACA,WACA34Q,KAAK,MACP0rB,EAAI,SAAU,mDAEH,iBAATnwB,IACFy9Q,EAAS,SAAU,sBACnBA,EAAS,QAAS,aAClBA,EAAS,SAAU,qFACnBA,EAAS,QAAS,4BAClBA,EAAS,QAAS,kBAClBA,EAAS,IAAK,iCACdA,EAAS,KAAM,SACfA,EAAS,SAAU,0EACnBA,EAAS,MAAO,4CAChBA,EAAS,SAAU,iEACnBA,EAAS,gBAAiB,mBAC1BA,EAAS,QAAS,gBAClBA,EAAS,UACTA,EAAS,YACTA,EAAS,yCAA0C,SACnDA,EAAS,KAAM,gBACfA,EAAS,KAAM,QACfA,EAAS,iBAAkB,WAC3BA,EAAS,MAAO,mBAChBA,EAAS,KAAM,4BACfA,EAAS,UAAW,UACpBA,EAAS,QAAS,mEAClBA,EAAS,MAAO,mCAChBA,EAAS,WAAY,mCACrBA,EAAS,QAAS,6BAClBA,EAAS,KAAM,qCACfA,EAAS,KAAM,8DACfA,EAAS,OAAQ,UACjBA,EAAS,KAAM,yEACfA,EAAS,QAAS,6BAClBA,EAAS,QAAS,6BAClBA,EAAS,OAAQ,UACjBA,EAAS,OAAQ,6CAEN,UAATz9Q,IACFy9Q,EAAS,+BAAgC,aACzCA,EAAS,iBAAkB,eAC3BA,EAAS,IAAK,YACdA,EAAS,kBAAmB,eAC5BA,EAAS,MAAO,WAChBA,EAAS,SAAU,6CAErB77B,GAAOp3N,GAAM,8BAA8B,SAAU1qB,GAC/C6M,EAAO7M,WACF6M,EAAO7M,GAAM+jB,SAAS/jB,aAG1B6M,EAAOuvO,QAAQr4N,SAASgrH,aACxBliI,EAAOgxQ,OACdhB,GAAS38Q,GAAQ2M,EACVA,IAELixQ,GAAoB,SAAUnkR,EAAOqmD,GACvC,IAAInzB,EAUJ,OATIlzB,IACFkzB,EAAS,GACY,kBAAVlzB,IACTA,EAAQ,CAAE,IAAKA,IAEjBmoP,GAAOnoP,GAAO,SAAUA,EAAOkK,GAC7BgpB,EAAOhpB,GAAOgpB,EAAOhpB,EAAIuoF,eAA0B,QAATpsC,EAAiB+8N,GAAUpjR,EAAO,QAAUsjR,GAAUtjR,EAAO,YAGpGkzB,GAET,SAASkxP,GAAO/vM,GACd,IAGIm2I,EACA65D,EACAC,EACAC,EAAuBC,EAAwB/xE,EAAuBgyE,EAAaC,EACnFnyE,EAAkBoyE,EAAqBC,EAAmCC,EAAsBC,EAPhGx5P,EAAW,GACXlB,EAAW,GACX26P,EAAkB,GAMlBC,EAAoB,GAAI1lE,EAAkB,GAC1C2lE,EAAoB,SAAU1uQ,EAAQsmI,EAAcqoI,GACtD,IAAIllR,EAAQq0E,EAAS99D,GAWrB,OAVKvW,EAQHA,EAAQojR,GAAUpjR,EAAO,OAAQojR,GAAUpjR,EAAMyyF,cAAe,UAPhEzyF,EAAQkjR,GAAS3sQ,GACZvW,IACHA,EAAQojR,GAAUvmI,EAAc,IAAKumI,GAAUvmI,EAAapqD,cAAe,MAC3EzyF,EAAQqjR,GAASrjR,EAAOklR,GACxBhC,GAAS3sQ,GAAUvW,IAKhBA,GAETq0E,EAAWA,GAAY,GACvBiwM,EAAcf,GAAclvM,EAASnhE,SACR,IAAzBmhE,EAAS8wM,cACX9wM,EAAS02I,eAAiB,QAE5BP,EAAc25D,GAAkB9vM,EAAS+wM,cACzCf,EAAgBF,GAAkB9vM,EAASgxM,eAAgB,OAC3DX,EAAeP,GAAkB9vM,EAASixM,cAAe,OACzDf,EAAwBU,EAAkB,sBAAuB,qEACjET,EAAyBS,EAAkB,wBAAyB,mDACpExyE,EAAwBwyE,EAAkB,uBAAwB,+FAClER,EAAcQ,EAAkB,qBAAsB,iIACtDN,EAAsBM,EAAkB,qBAAsB,kDAAwDxyE,GACtHmyE,EAAoCK,EAAkB,sCAAuC,QAASN,GACtGE,EAAuBI,EAAkB,sBAAuB,sIAChE1yE,EAAmB0yE,EAAkB,iBAAkB,iJAA4JJ,GACnNC,EAAwBG,EAAkB,uBAAwB,0EAClE98B,IAAQ9zK,EAASrR,SAAW,6DAA6DjyC,MAAM,MAAM,SAAU1qB,GAC7Gi5M,EAAgBj5M,GAAQ,IAAIwmF,OAAO,KAAOxmF,EAAO,SAAU,SAE7D,IAAIk/Q,EAAkB,SAAU5mQ,GAC9B,OAAO,IAAIkuE,OAAO,IAAMluE,EAAIvE,QAAQ,WAAY,OAAS,MAEvDorQ,EAAmB,SAAU16D,GAC/B,IAAI26D,EAAIhjQ,EAAIq8L,EAAI4mE,EAAI9lQ,EAASqB,EAASwV,EAAMkvP,EAAUC,EAAa/nE,EAAUgoE,EAAU5yP,EAAYg4L,EAAiB18L,EAAQu3P,EAAYtC,EAAkBuC,EAAuB77Q,EAAKlK,EAClLgmR,EAAoB,8DAA+DC,EAAiB,oDAAqDC,EAAoB,QACjL,GAAIp7D,EAMF,IALAA,EAAgB/5L,GAAM+5L,EAAe,KACjCx/L,EAAS,OACXk4P,EAAmBl4P,EAAS,KAAK2H,WACjC8yP,EAAwBz6P,EAAS,KAAK2/L,iBAEnCw6D,EAAK,EAAGhjQ,EAAKqoM,EAAcjrN,OAAQ4lR,EAAKhjQ,EAAIgjQ,IAE/C,GADA7lQ,EAAUomQ,EAAkB72L,KAAK27H,EAAc26D,IAC3C7lQ,EAAS,CAoBX,GAnBA2O,EAAS3O,EAAQ,GACjBgmQ,EAAchmQ,EAAQ,GACtBkmQ,EAAalmQ,EAAQ,GACrB+lQ,EAAW/lQ,EAAQ,GACnBqT,EAAa,GACbg4L,EAAkB,GAClBhqM,EAAU,CACRgS,WAAYA,EACZg4L,gBAAiBA,GAEJ,MAAX18L,IACFtN,EAAQklQ,WAAY,GAEP,MAAX53P,IACFtN,EAAQmlQ,aAAc,GAEL,MAAfxmQ,EAAQ,KACVqB,EAAQolQ,kBAAmB,GAEzB7C,EAAkB,CACpB,IAAKt5Q,KAAOs5Q,EACVvwP,EAAW/oB,GAAOs5Q,EAAiBt5Q,GAErC+gN,EAAgB5jN,KAAKvH,MAAMmrN,EAAiB86D,GAE9C,GAAIJ,EAEF,IADAA,EAAW50P,GAAM40P,EAAU,KACtB7mE,EAAK,EAAG4mE,EAAKC,EAAS9lR,OAAQi/M,EAAK4mE,EAAI5mE,IAE1C,GADAl/L,EAAUqmQ,EAAe92L,KAAKw2L,EAAS7mE,IACnCl/L,EAAS,CAWX,GAVA6W,EAAO,GACPovP,EAAWjmQ,EAAQ,GACnBi+L,EAAWj+L,EAAQ,GAAGxF,QAAQ,UAAW,KACzCmU,EAAS3O,EAAQ,GACjB5f,EAAQ4f,EAAQ,GACC,MAAbimQ,IACF5kQ,EAAQqlQ,mBAAqBrlQ,EAAQqlQ,oBAAsB,GAC3DrlQ,EAAQqlQ,mBAAmBj/Q,KAAKw2M,GAChCpnL,EAAKvN,UAAW,GAED,MAAb28P,EAAkB,QACb5yP,EAAW4qL,GAClBoN,EAAgBt5H,OAAOo/G,GAAQka,EAAiBpN,GAAW,GAC3D,SAEEtvL,IACa,MAAXA,IACFtN,EAAQslQ,kBAAoBtlQ,EAAQslQ,mBAAqB,GACzDtlQ,EAAQslQ,kBAAkBl/Q,KAAK,CAC7BhB,KAAMw3M,EACN79M,MAAOA,IAETy2B,EAAKomH,aAAe78I,GAEP,MAAXuuB,IACFtN,EAAQulQ,iBAAmBvlQ,EAAQulQ,kBAAoB,GACvDvlQ,EAAQulQ,iBAAiBn/Q,KAAK,CAC5BhB,KAAMw3M,EACN79M,MAAOA,IAETy2B,EAAKgwP,YAAczmR,GAEN,MAAXuuB,IACFkI,EAAKiwP,YAActD,GAAUpjR,EAAO,OAGpCkmR,EAAkBrsQ,KAAKgkM,IACzB58L,EAAQ0lQ,kBAAoB1lQ,EAAQ0lQ,mBAAqB,GACzDlwP,EAAKivF,QAAU6/J,EAAgB1nE,GAC/B58L,EAAQ0lQ,kBAAkBt/Q,KAAKovB,KAE1BxD,EAAW4qL,IACdoN,EAAgB5jN,KAAKw2M,GAEvB5qL,EAAW4qL,GAAYpnL,GAK1B+sP,GAAoC,MAAhBoC,IACvBpC,EAAmBvwP,EACnB8yP,EAAwB96D,GAEtB66D,IACF7kQ,EAAQ6kQ,WAAaF,EACrBt6P,EAASw6P,GAAc7kQ,GAErBilQ,EAAkBrsQ,KAAK+rQ,IACzB3kQ,EAAQykG,QAAU6/J,EAAgBK,GAClCb,EAAgB19Q,KAAK4Z,IAErBqK,EAASs6P,GAAe3kQ,IAM9B2lQ,EAAmB,SAAU97D,GAC/Bx/L,EAAW,GACXy5P,EAAkB,GAClBS,EAAiB16D,GACjBq9B,GAAOm8B,GAAa,SAAUrjQ,EAAS5a,GACrC+jB,EAAS/jB,GAAQ4a,EAAQmJ,aAGzBy8P,EAAoB,SAAUC,GAChC,IAAIC,EAAsB,aACtBD,IACF5D,GAAS8D,oBAAsB9D,GAAS+D,eAAiB,KACzD9+B,GAAOp3N,GAAM+1P,EAAgB,MAAM,SAAU1yN,GAC3C,IAAIx0C,EAAUmnQ,EAAoB53L,KAAK/6B,GAAO0iB,EAAwB,MAAfl3D,EAAQ,GAAYsnQ,EAAYpwM,EAAS,OAAS,MAAOzwE,EAAOuZ,EAAQ,GAO/H,GANAwK,EAAS/jB,GAAQ+jB,EAAS88P,GAC1BlC,EAAkB3+Q,GAAQ6gR,EACrBpwM,IACHy7H,EAAiBlsM,EAAKosF,eAAiB,GACvC8/G,EAAiBlsM,GAAQ,KAEtBilB,EAASjlB,GAAO,CACnB,IAAI8gR,EAAa77P,EAAS47P,GAC1BC,EAAa9D,GAAS,GAAI8D,UACnBA,EAAWd,wBACXc,EAAWf,YAClB96P,EAASjlB,GAAQ8gR,EAEnBh/B,GAAO/9N,GAAU,SAAUnJ,EAASmmQ,GAC9BnmQ,EAAQimQ,KACV98P,EAASg9P,GAAWnmQ,EAAUoiQ,GAAS,GAAIj5P,EAASg9P,IACpDnmQ,EAAQ5a,GAAQ4a,EAAQimQ,YAM9BG,EAAmB,SAAUC,GAC/B,IAAIC,EAAkB,8BACtBrE,GAAS7uM,EAASnhE,QAAU,KACxBo0Q,GACFn/B,GAAOp3N,GAAMu2P,EAAe,MAAM,SAAUlzN,GAC1C,IACInqC,EAAQsE,EADR3O,EAAU2nQ,EAAgBp4L,KAAK/6B,GAE/Bx0C,IACF2O,EAAS3O,EAAQ,GAEfqK,EADEsE,EACOnE,EAASxK,EAAQ,IAEjBwK,EAASxK,EAAQ,IAAM,CAAE,WAAY,IAEhDqK,EAASG,EAASxK,EAAQ,IAC1BuoO,GAAOp3N,GAAMnR,EAAQ,GAAI,MAAM,SAAUyK,GACxB,MAAXkE,SACKtE,EAAOI,GAEdJ,EAAOI,GAAS,WAOxBm9P,EAAiB,SAAUnhR,GAC7B,IAA8B5E,EAA1Bwf,EAAUqK,EAASjlB,GACvB,GAAI4a,EACF,OAAOA,EAETxf,EAAIsjR,EAAgBllR,OACpB,MAAO4B,IAEL,GADAwf,EAAU8jQ,EAAgBtjR,GACtBwf,EAAQykG,QAAQ7rG,KAAKxT,GACvB,OAAO4a,GAIRozD,EAAS02I,eA0BZ67D,EAAiBvyM,EAAS02I,iBAzB1Bo9B,GAAOm8B,GAAa,SAAUrjQ,EAAS5a,GACrCilB,EAASjlB,GAAQ,CACf4sB,WAAYhS,EAAQgS,WACpBg4L,gBAAiBhqM,EAAQgqM,iBAE3B7gM,EAAS/jB,GAAQ4a,EAAQmJ,YAEH,UAApBiqD,EAASnhE,QACXi1O,GAAOp3N,GAAM,kBAAkB,SAAU+H,GACvCA,EAAO/H,GAAM+H,EAAM,KACnBxN,EAASwN,EAAK,IAAIgtP,WAAahtP,EAAK,MAGxCqvN,GAAOp3N,GAAM,sEAAsE,SAAU1qB,GACvFilB,EAASjlB,KACXilB,EAASjlB,GAAM+/Q,aAAc,MAGjCj+B,GAAOp3N,GAAM,yDAAyD,SAAU1qB,GAC9EilB,EAASjlB,GAAM8/Q,WAAY,KAE7Bh+B,GAAOp3N,GAAM,SAAS,SAAU1qB,GAC9BilB,EAASjlB,GAAMggR,kBAAmB,MAKtCQ,EAAkBxyM,EAASozM,iBAC3BJ,EAAiBhzM,EAAS22I,gBAC1Bw6D,EAAiBnxM,EAASqzM,yBAC1BL,EAAiB,yBACjBl/B,GAAO,CACLw/B,GAAI,KACJC,GAAI,KACJtgF,GAAI,QACJhpB,GAAI,KACJupG,GAAI,KACJv+C,GAAI,oBACJ+c,MAAO,QACPyhC,MAAO,QACPC,MAAO,QACPC,OAAQ,WACRC,KAAM,MACNC,MAAO,uBACN,SAAUvyH,EAAS78H,GAChBxN,EAASwN,KACXxN,EAASwN,GAAMqvP,gBAAkBp3P,GAAM4kI,OAGvCthF,EAAS+zM,kBACXjgC,GAAOm7B,GAAUjvM,EAAS+zM,mBAAmB,SAAUtvP,GACjDxN,EAASwN,WACJxN,EAASwN,MAIjB0uP,EAAe,SAClBhC,EAAiB,0BAEnB,IAAI6C,EAAiB,WACnB,OAAO79D,GAEL89D,EAAmB,WACrB,OAAOjE,GAELkE,EAAkB,WACpB,OAAO7D,GAELjlE,EAAe,WACjB,OAAOglE,GAELn/E,EAAmB,WACrB,OAAOiN,GAEL3P,EAAuB,WACzB,OAAOiiF,GAEL2D,EAAwB,WAC1B,OAAO1D,GAEL9wE,EAAwB,WAC1B,OAAOvB,GAELg2E,EAAyB,WAC3B,OAAOjE,GAELj2E,EAAsB,WACxB,OAAOo2E,GAEL+D,EAAoC,WACtC,OAAO9D,GAEL7wE,EAAwB,WAC1B,OAAOwwE,GAELhlE,EAAqB,WACvB,OAAOD,GAELqpE,EAAe,SAAUtiR,EAAMgkB,GACjC,IAAIJ,EAASG,EAAS/jB,EAAKoU,eAC3B,SAAUwP,IAAUA,EAAOI,EAAM5P,iBAE/BumG,EAAU,SAAU36G,EAAMowB,GAC5B,IAAImyP,EAAcnnR,EACd2yD,EAAOozN,EAAenhR,GAC1B,GAAI+tD,EAAM,CACR,IAAI39B,EAcF,OAAO,EAbP,GAAI29B,EAAKnhC,WAAWwD,GAClB,OAAO,EAGT,GADAmyP,EAAex0N,EAAKuyN,kBAChBiC,EAAc,CAChBnnR,EAAImnR,EAAa/oR,OACjB,MAAO4B,IACL,GAAImnR,EAAannR,GAAGikH,QAAQ7rG,KAAKxT,GAC/B,OAAO,GAQjB,OAAO,GAELwiR,EAAoB,WACtB,OAAO7D,GAET,MAAO,CACL56P,SAAUA,EACVkB,SAAUA,EACV+8P,eAAgBA,EAChBE,gBAAiBA,EACjBjjF,iBAAkBA,EAClBgjF,iBAAkBA,EAClBt0E,sBAAuBA,EACvBpR,qBAAsBA,EACtB4lF,sBAAuBA,EACvB/oE,aAAcA,EACd+nE,eAAgBA,EAChBiB,uBAAwBA,EACxBl6E,oBAAqBA,EACrBm6E,kCAAmCA,EACnC30E,sBAAuBA,EACvBwL,mBAAoBA,EACpBopE,aAAcA,EACd3nK,QAASA,EACT6nK,kBAAmBA,EACnBrD,iBAAkBA,EAClBoB,iBAAkBA,EAClBC,kBAAmBA,EACnBQ,iBAAkBA,GAItB,IA2kBI5lR,GAAGqnR,GAASC,GAAMjsM,GAASksM,GAAOC,GAAUC,GAAS9yL,GAAQ+yL,GAAkBC,GAAWC,GAAcC,GAAapxQ,GAAUywI,GAAS4gI,GAAgBC,GAAWC,GAAe7pQ,GAAS8pQ,GA3kB3LnzO,GAAY,SACZC,GAAO,IAEP44C,GAAQ,SAAUvkF,EAAOtI,EAAG0qD,EAAGhoD,GACjC,IAAI4pF,EAAM,SAAU9hF,GAElB,OADAA,EAAMivB,SAASjvB,EAAK,IAAIrI,SAAS,IAC1BqI,EAAIlN,OAAS,EAAIkN,EAAM,IAAMA,GAEtC,MAAO,IAAM8hF,EAAItsF,GAAKssF,EAAI5hC,GAAK4hC,EAAI5pF,IAEjC8lO,GAAS,SAAU12J,EAAUnhE,GAC/B,IAIIzR,EAEAkoR,EACAn/D,EACA65D,EARAuF,EAAY,2DACZC,EAAiB,+HACjBC,EAAc,2BACdC,EAAkB,OAElBC,EAAiB,GAIjBC,EAAgB1zO,GAOpB,IANA89B,EAAWA,GAAY,GACnBnhE,IACFs3M,EAAct3M,EAAOm1Q,iBACrBhE,EAAgBnxQ,EAAOo1Q,oBAEzBqB,GAAiB,wBAA0BM,GAAel5P,MAAM,KAC3DtvB,EAAI,EAAGA,EAAIkoR,EAAc9pR,OAAQ4B,IACpCuoR,EAAeL,EAAcloR,IAAMwoR,EAAgBxoR,EACnDuoR,EAAeC,EAAgBxoR,GAAKkoR,EAAcloR,GAEpD,MAAO,CACL2tF,MAAO,SAAUlK,GACf,OAAOA,EAAM9qE,QAAQwvQ,EAAWx6L,KAElC+B,MAAO,SAAU94D,GACf,IACIzY,EAASvZ,EAAMrG,EAAOkqR,EADtBh3P,EAAS,GAETi3P,EAAe91M,EAAS+1M,cACxBC,EAAoBh2M,EAASi2M,qBAAuBvoR,KACpDwoR,EAAW,SAAUh8P,EAAQvP,EAAQwrQ,GACvC,IAAIztP,EAAK8C,EAAOC,EAAQhD,EAExB,GADAC,EAAM7J,EAAO3E,EAAS,OAASvP,GAC1B+d,IAGL8C,EAAQ3M,EAAO3E,EAAS,SAAWvP,GAC9B6gB,IAGLC,EAAS5M,EAAO3E,EAAS,UAAYvP,GAChC8gB,IAGLhD,EAAO5J,EAAO3E,EAAS,QAAUvP,GAC5B8d,KAAL,CAGA,IAAIK,EAAM,CACRJ,EACA8C,EACAC,EACAhD,GAEFr7B,EAAI07B,EAAIt9B,OAAS,EACjB,MAAO4B,IACL,GAAI07B,EAAI17B,KAAO07B,EAAI17B,EAAI,GACrB,MAGAA,GAAK,GAAK+oR,IAGdt3P,EAAO3E,EAASvP,IAAiB,IAAPvd,EAAW07B,EAAI,GAAKA,EAAInyB,KAAK,YAChDkoB,EAAO3E,EAAS,OAASvP,UACzBkU,EAAO3E,EAAS,SAAWvP,UAC3BkU,EAAO3E,EAAS,UAAYvP,UAC5BkU,EAAO3E,EAAS,QAAUvP,MAE/ByrQ,EAAc,SAAUvgR,GAC1B,IAAyBzI,EAArBzB,EAAQkzB,EAAOhpB,GACnB,GAAKlK,EAAL,CAGAA,EAAQA,EAAM+wB,MAAM,KACpBtvB,EAAIzB,EAAMH,OACV,MAAO4B,IACL,GAAIzB,EAAMyB,KAAOzB,EAAM,GACrB,OAAO,EAIX,OADAkzB,EAAOhpB,GAAOlK,EAAM,IACb,IAEL0qR,EAAY,SAAUv/Q,EAAQzI,EAAGuC,EAAGojB,GACjCoiQ,EAAY/nR,IAGZ+nR,EAAYxlR,IAGZwlR,EAAYpiQ,KAGjB6K,EAAO/nB,GAAU+nB,EAAOxwB,GAAK,IAAMwwB,EAAOjuB,GAAK,IAAMiuB,EAAO7K,UACrD6K,EAAOxwB,UACPwwB,EAAOjuB,UACPiuB,EAAO7K,KAEZmkE,EAAS,SAAU7tE,GAErB,OADAurQ,GAAY,EACLF,EAAerrQ,IAEpBq1M,EAAS,SAAUr1M,EAAKgsQ,GAS1B,OARIT,IACFvrQ,EAAMA,EAAIvE,QAAQ,gBAAgB,SAAUuE,GAC1C,OAAOqrQ,EAAerrQ,OAGrBgsQ,IACHhsQ,EAAMA,EAAIvE,QAAQ,gBAAiB,OAE9BuE,GAELisQ,EAA0B,SAAUC,GACtC,OAAOhlR,OAAOw6L,aAAarkK,SAAS6uP,EAAO3jR,MAAM,GAAI,MAEnD4jR,EAAqB,SAAU9qR,GACjC,OAAOA,EAAMoa,QAAQ,gBAAiBwwQ,IAEpCG,EAAa,SAAUlgR,EAAOg5F,EAAKmnL,EAAMC,EAAMtsQ,EAAKusQ,GAEtD,GADAvsQ,EAAMA,GAAOusQ,EACTvsQ,EAEF,OADAA,EAAMq1M,EAAOr1M,GACN,IAAOA,EAAIvE,QAAQ,MAAO,OAAU,IAG7C,GADAypF,EAAMmwH,EAAOnwH,GAAOmnL,GAAQC,IACvB52M,EAAS82M,kBAAmB,CAC/B,IAAIjlK,EAAYriB,EAAIzpF,QAAQ,aAAc,IAC1C,GAAI,oBAAoBP,KAAKqsG,GAC3B,MAAO,GAET,IAAK7xC,EAAS+2M,qBAAuB,oBAAoBvxQ,KAAKqsG,GAC5D,MAAO,GAMX,OAHIikK,IACFtmL,EAAMsmL,EAAaroR,KAAKuoR,EAAmBxmL,EAAK,UAE3C,QAAWA,EAAIzpF,QAAQ,MAAO,OAAU,MAEjD,GAAIie,EAAK,CACPA,EAAMA,EAAIje,QAAQ,mBAAoB,IACtCie,EAAMA,EAAIje,QAAQ,oBAAqBoyE,GAAQpyE,QAAQ,0BAA0B,SAAUuE,GACzF,OAAOA,EAAIvE,QAAQ,QAASoyE,MAE9B,MAAO5sE,EAAUkqQ,EAAY36L,KAAK92D,GAIhC,GAHAyxP,EAAYuB,UAAYzrQ,EAAQ0K,MAAQ1K,EAAQ,GAAG/f,OACnDwG,EAAOuZ,EAAQ,GAAGxF,QAAQ2vQ,EAAiB,IAAItvQ,cAC/Cza,EAAQ4f,EAAQ,GAAGxF,QAAQ2vQ,EAAiB,IACxC1jR,GAAQrG,EAAO,CAGjB,GAFAqG,EAAOykR,EAAmBzkR,GAC1BrG,EAAQ8qR,EAAmB9qR,IACU,IAAjCqG,EAAKnE,QAAQ+nR,KAAgD,IAAvB5jR,EAAKnE,QAAQ,KACrD,SAEF,IAAKmyE,EAAS82M,oBAA+B,aAAT9kR,GAAuB,4BAA4BwT,KAAK7Z,IAC1F,SAEW,gBAATqG,GAAoC,QAAVrG,EAC5BA,EAAQ,OACU,UAATqG,GAA6B,qBAATA,IAC7BrG,EAAQA,EAAMya,eAEhBza,EAAQA,EAAMoa,QAAQwvQ,EAAWx6L,IACjCpvF,EAAQA,EAAMoa,QAAQyvQ,EAAgBkB,GACtC73P,EAAO7sB,GAAQ6jR,EAAYl2D,EAAOh0N,GAAO,GAAQA,EAGrDuqR,EAAS,SAAU,IAAI,GACvBA,EAAS,SAAU,UACnBA,EAAS,SAAU,UACnBA,EAAS,SAAU,UACnBA,EAAS,UAAW,IACpBA,EAAS,SAAU,IACnBG,EAAU,SAAU,eAAgB,eAAgB,gBAC9B,gBAAlBx3P,EAAOqxJ,eACFrxJ,EAAOqxJ,OAEe,SAA3BrxJ,EAAO,wBACFA,EAAO,gBAGlB,OAAOA,GAETqpL,UAAW,SAAUrpL,EAAQ0yP,GAC3B,IAAcv/Q,EAAMrG,EAAhBq4B,EAAM,GACNizP,EAAkB,SAAUjlR,GAC9B,IAAIklR,EAAW9pR,EAAG8zG,EAAGv1G,EAErB,GADAurR,EAAY/gE,EAAYnkN,GACpBklR,EACF,IAAK9pR,EAAI,EAAG8zG,EAAIg2K,EAAU1rR,OAAQ4B,EAAI8zG,EAAG9zG,IACvC4E,EAAOklR,EAAU9pR,GACjBzB,EAAQkzB,EAAO7sB,GACXrG,IACFq4B,IAAQA,EAAIx4B,OAAS,EAAI,IAAM,IAAMwG,EAAO,KAAOrG,EAAQ,MAK/DghH,EAAU,SAAU36G,EAAMu/Q,GAC5B,IAAI/sE,EAEJ,OADAA,EAAWwrE,EAAc,OACrBxrE,IAAYA,EAASxyM,MAGzBwyM,EAAWwrE,EAAcuB,IACrB/sE,IAAYA,EAASxyM,KAK3B,GAAIu/Q,GAAep7D,EACjB8gE,EAAgB,KAChBA,EAAgB1F,QAEhB,IAAKv/Q,KAAQ6sB,EACXlzB,EAAQkzB,EAAO7sB,IACXrG,GAAWqkR,IAAiBrjK,EAAQ36G,EAAMu/Q,KAC5CvtP,IAAQA,EAAIx4B,OAAS,EAAI,IAAM,IAAMwG,EAAO,KAAOrG,EAAQ,KAIjE,OAAOq4B,KAKTmzP,GAAqB,YACrBC,GAAe,+BACfC,GAAa,CACfC,YAAa,EACbC,OAAQ,EACRC,OAAQ,EACRC,YAAa,EACbC,gBAAiB,EACjBC,gBAAiB,EACjBC,cAAe,EACfC,YAAa,GAEXC,GAAwB,SAAUppQ,GACpC,OAAOA,EAAMg/J,qBAAuBqqG,IAAcrpQ,EAAMg/J,qBAAuBsqG,IAE7EA,GAAc,WAChB,OAAO,GAELD,GAAa,WACf,OAAO,GAELE,GAAW,SAAUnhR,EAAQ9E,EAAMovF,EAAUt2D,GAC3Ch0B,EAAO6zB,iBACT7zB,EAAO6zB,iBAAiB34B,EAAMovF,EAAUt2D,IAAW,GAC1Ch0B,EAAOohR,aAChBphR,EAAOohR,YAAY,KAAOlmR,EAAMovF,IAGhC+2L,GAAc,SAAUrhR,EAAQ9E,EAAMovF,EAAUt2D,GAC9Ch0B,EAAOi0B,oBACTj0B,EAAOi0B,oBAAoB/4B,EAAMovF,EAAUt2D,IAAW,GAC7Ch0B,EAAOshR,aAChBthR,EAAOshR,YAAY,KAAOpmR,EAAMovF,IAGhCi3L,GAAyB,SAAU3pQ,EAAO4lP,GAC5C,GAAI5lP,EAAM4pQ,aAAc,CACtB,IAAIA,EAAe5pQ,EAAM4pQ,eACzB,GAAIA,GAAgBA,EAAa9sR,OAAS,EACxC,OAAO8sR,EAAa,GAGxB,OAAOhkB,GAELikB,GAAM,SAAUC,EAAejmQ,GACjC,IAAIvgB,EACA0c,EAAQ6D,GAAQ,GACpB,IAAKvgB,KAAQwmR,EACNnB,GAAWrlR,KACd0c,EAAM1c,GAAQwmR,EAAcxmR,IAShC,GANK0c,EAAM5X,SACT4X,EAAM5X,OAAS4X,EAAM+pQ,YAAc3tR,EAAW+Y,UAE5CgjQ,GAAII,wBACNv4P,EAAM5X,OAASuhR,GAAuBG,EAAe9pQ,EAAM5X,SAEzD0hR,GAAiBpB,GAAa5xQ,KAAKgzQ,EAActmR,YAAiCzC,IAAxB+oR,EAAcr6G,YAAiD1uK,IAA1B+oR,EAAcnuP,QAAuB,CACtI,IAAIquP,EAAWhqQ,EAAM5X,OAAO2e,eAAiB3qB,EAAW+Y,SACpDD,EAAM80Q,EAAShjQ,gBACf6N,EAAOm1P,EAASn1P,KACpB7U,EAAMyvJ,MAAQq6G,EAAcnuP,SAAWzmB,GAAOA,EAAI0lB,YAAc/F,GAAQA,EAAK+F,YAAc,IAAM1lB,GAAOA,EAAI6lB,YAAclG,GAAQA,EAAKkG,YAAc,GACrJ/a,EAAM0vJ,MAAQo6G,EAAcluP,SAAW1mB,GAAOA,EAAIwlB,WAAa7F,GAAQA,EAAK6F,WAAa,IAAMxlB,GAAOA,EAAI4lB,WAAajG,GAAQA,EAAKiG,WAAa,GAkCnJ,OAhCA9a,EAAMoE,eAAiB,WACrBpE,EAAMg/J,mBAAqBqqG,GACvBS,IACEA,EAAc1lQ,eAChB0lQ,EAAc1lQ,iBAEd0lQ,EAAcf,aAAc,IAIlC/oQ,EAAM0b,gBAAkB,WACtB1b,EAAMi/J,qBAAuBoqG,GACzBS,IACEA,EAAcpuP,gBAChBouP,EAAcpuP,kBAEdouP,EAAcG,cAAe,IAInCjqQ,EAAM47D,yBAA2B,WAC/B57D,EAAMkqQ,8BAAgCb,GACtCrpQ,EAAM0b,oBAE6B,IAAjC0tP,GAAsBppQ,KACxBA,EAAMg/J,mBAAqBsqG,GAC3BtpQ,EAAMi/J,qBAAuBqqG,GAC7BtpQ,EAAMkqQ,8BAAgCZ,IAEX,qBAAlBtpQ,EAAMqmP,UACfrmP,EAAMqmP,SAAU,GAEXrmP,GAELmqQ,GAAc,SAAU5vP,EAAKm4D,EAAU03L,GACzC,IAAIl1Q,EAAMqlB,EAAIplB,SAAU6K,EAAQ,CAAExc,KAAM,SACxC,GAAI4mR,EAAWC,UACb33L,EAAS1yE,OADX,CAIA,IAAIsqQ,EAAa,WACf,MAA0B,aAAnBp1Q,EAAIq1Q,YAAgD,gBAAnBr1Q,EAAIq1Q,YAAgCr1Q,EAAI2f,MAE9E21P,EAAe,WACjBf,GAAYlvP,EAAK,mBAAoBiwP,GACrCf,GAAYlvP,EAAK,OAAQiwP,GACpBJ,EAAWC,YACdD,EAAWC,WAAY,EACvB33L,EAAS1yE,KAGTsqQ,IACFE,IAEAjB,GAAShvP,EAAK,mBAAoBiwP,GAEpCjB,GAAShvP,EAAK,OAAQiwP,KAEpBC,GAAa,WACf,SAASA,IACPzrR,KAAKqrR,WAAY,EACjBrrR,KAAKksB,OAAS,GACdlsB,KAAK2I,MAAQ,EACb3I,KAAK0rR,QAAUjC,KAAuB,IAAI/8P,MAAQ/pB,SAAS,IAC3D3C,KAAK2rR,mBAAqB,iBAAkBvuR,EAAW+Y,SAAS6R,gBAChEhoB,KAAK4rR,WAAa,cAAexuR,EAAW+Y,SAAS6R,gBACrDhoB,KAAK2I,MAAQ,EAuNf,OArNA8iR,EAAW5rR,UAAUuC,KAAO,SAAUgH,EAAQkiD,EAAOooC,EAAUz9E,GAC7D,IACI5U,EAAIwqR,EAAcnsR,EAAG4E,EAAMwnR,EAAUC,EAAe3uP,EADpDr6B,EAAO/C,KAEPu7B,EAAMn+B,EAAWugB,OACjBquQ,EAAuB,SAAU74K,GACnCpwG,EAAKkpR,gBAAgBpB,GAAI13K,GAAO53E,EAAIva,OAAQ3f,IAE9C,GAAK+H,GAA8B,IAApBA,EAAOgW,UAAsC,IAApBhW,EAAOgW,SAA/C,CAGKhW,EAAOrG,EAAK2oR,SAKfrqR,EAAK+H,EAAOrG,EAAK2oR,UAJjBrqR,EAAK0B,EAAK4F,QACVS,EAAOrG,EAAK2oR,SAAWrqR,EACvB0B,EAAKmpB,OAAO7qB,GAAM,IAIpB4U,EAAQA,GAAS7M,EACjB,IAAI8iR,EAAY5gO,EAAMt8B,MAAM,KAC5BtvB,EAAIwsR,EAAUpuR,OACd,MAAO4B,IACL4E,EAAO4nR,EAAUxsR,GACjBqsR,EAAgBC,EAChBF,EAAW1uP,GAAU,EACR,qBAAT94B,IACFA,EAAO,SAELvB,EAAKsoR,WAAsB,UAAT/mR,GAA0C,aAAtB8E,EAAOmiR,WAC/C73L,EAAS3zF,KAAKkW,EAAO40Q,GAAI,CAAErmR,KAAMF,MAG9BvB,EAAK4oR,qBACRG,EAAW/oR,EAAKopR,gBAAgB7nR,GAC5BwnR,IACFC,EAAgB,SAAU54K,GACxB,IAAI/5F,EAASk3D,EAGb,GAFAl3D,EAAU+5F,EAAIi5K,cACd97M,EAAU6iC,EAAIk5K,cACV/7M,GAAWl3D,EAAQ1T,SACrB4qE,EAAUl3D,EAAQ1T,SAAS4qE,QAE3B,MAAOA,GAAWA,IAAYl3D,EAC5Bk3D,EAAUA,EAAQ7vD,WAGjB6vD,IACH6iC,EAAM03K,GAAI13K,GAAO53E,EAAIva,OACrBmyF,EAAI3uG,KAAoB,aAAb2uG,EAAI3uG,KAAsB,aAAe,aACpD2uG,EAAI/pG,OAASgQ,EACbrW,EAAKkpR,gBAAgB94K,EAAK9xG,OAK7B0B,EAAK6oR,YAAwB,YAATtnR,GAA+B,aAATA,IAC7C84B,GAAU,EACV0uP,EAAoB,YAATxnR,EAAqB,QAAU,OAC1CynR,EAAgB,SAAU54K,GACxBA,EAAM03K,GAAI13K,GAAO53E,EAAIva,OACrBmyF,EAAI3uG,KAAoB,UAAb2uG,EAAI3uG,KAAmB,UAAY,WAC9CzB,EAAKkpR,gBAAgB94K,EAAK9xG,KAG9BwqR,EAAe9oR,EAAKmpB,OAAO7qB,GAAIiD,GAC1BunR,EAcU,UAATvnR,GAAoBvB,EAAKsoR,UAC3B33L,EAASm3L,GAAI,CAAErmR,KAAMF,KAErBunR,EAAavmR,KAAK,CAChBwiP,KAAMp0J,EACNz9E,MAAOA,KAlBXlT,EAAKmpB,OAAO7qB,GAAIiD,GAAQunR,EAAe,CAAC,CACpC/jC,KAAMp0J,EACNz9E,MAAOA,IAEX41Q,EAAaC,SAAWA,EACxBD,EAAazuP,QAAUA,EACvByuP,EAAaE,cAAgBA,EAChB,UAATznR,EACF6mR,GAAY/hR,EAAQ2iR,EAAehpR,GAEnCwnR,GAASnhR,EAAQ0iR,GAAYxnR,EAAMynR,EAAe3uP,KAcxD,OADAh0B,EAASyiR,EAAe,EACjBn4L,IAET+3L,EAAW5rR,UAAUq9B,OAAS,SAAU9zB,EAAQkiD,EAAOooC,GACrD,IAAIryF,EAAIwqR,EAAcnsR,EAAGssO,EAAI1nO,EAAMgoR,EACnC,IAAKljR,GAA8B,IAApBA,EAAOgW,UAAsC,IAApBhW,EAAOgW,SAC7C,OAAOpf,KAGT,GADAqB,EAAK+H,EAAOpJ,KAAK0rR,SACbrqR,EAAI,CAEN,GADAirR,EAAWtsR,KAAKksB,OAAO7qB,GACnBiqD,EAAO,CACT,IAAI4gO,EAAY5gO,EAAMt8B,MAAM,KAC5BtvB,EAAIwsR,EAAUpuR,OACd,MAAO4B,IAGL,GAFA4E,EAAO4nR,EAAUxsR,GACjBmsR,EAAeS,EAAShoR,GACpBunR,EAAc,CAChB,GAAIn4L,EAAU,CACZs4I,EAAK6/C,EAAa/tR,OAClB,MAAOkuO,IACL,GAAI6/C,EAAa7/C,GAAI8b,OAASp0J,EAAU,CACtC,IAAIq4L,EAAgBF,EAAaE,cAC7BD,EAAWD,EAAaC,SAAU1uP,EAAUyuP,EAAazuP,QAC7DyuP,EAAeA,EAAa1mR,MAAM,EAAG6mO,GAAIvtO,OAAOotR,EAAa1mR,MAAM6mO,EAAK,IACxE6/C,EAAaE,cAAgBA,EAC7BF,EAAaC,SAAWA,EACxBD,EAAazuP,QAAUA,EACvBkvP,EAAShoR,GAAQunR,GAIlBn4L,GAAoC,IAAxBm4L,EAAa/tR,gBACrBwuR,EAAShoR,GAChBmmR,GAAYrhR,EAAQyiR,EAAaC,UAAYxnR,EAAMunR,EAAaE,cAAeF,EAAazuP,eAI7F,CACL,IAAK94B,KAAQgoR,EACXT,EAAeS,EAAShoR,GACxBmmR,GAAYrhR,EAAQyiR,EAAaC,UAAYxnR,EAAMunR,EAAaE,cAAeF,EAAazuP,SAE9FkvP,EAAW,GAEb,IAAKhoR,KAAQgoR,EACX,OAAOtsR,YAEFA,KAAKksB,OAAO7qB,GACnB,WACS+H,EAAOpJ,KAAK0rR,SACnB,MAAOzkL,GACP79F,EAAOpJ,KAAK0rR,SAAW,MAG3B,OAAO1rR,MAETyrR,EAAW5rR,UAAU6xF,KAAO,SAAUtoF,EAAQ9E,EAAM3G,GAClD,IAAI0D,EACJ,IAAK+H,GAA8B,IAApBA,EAAOgW,UAAsC,IAApBhW,EAAOgW,SAC7C,OAAOpf,KAET,IAAIghB,EAAQ6pQ,GAAI,KAAMltR,GACtBqjB,EAAMxc,KAAOF,EACb0c,EAAM5X,OAASA,EACf,GACE/H,EAAK+H,EAAOpJ,KAAK0rR,SACbrqR,GACFrB,KAAKisR,gBAAgBjrQ,EAAO3f,GAE9B+H,EAASA,EAAOqX,YAAcrX,EAAO2e,eAAiB3e,EAAO6e,aAAe7e,EAAOmjR,mBAC5EnjR,IAAW4X,EAAMi/J,wBAC1B,OAAOjgL,MAETyrR,EAAW5rR,UAAU+3N,MAAQ,SAAUxuN,GACrC,IAAI1J,EAAG2oB,EACP,IAAKjf,GAA8B,IAApBA,EAAOgW,UAAsC,IAApBhW,EAAOgW,SAC7C,OAAOpf,KAQT,GANIoJ,EAAOpJ,KAAK0rR,UACd1rR,KAAKk9B,OAAO9zB,GAETA,EAAOopM,uBACVppM,EAASA,EAAO+M,UAEd/M,GAAUA,EAAOopM,qBAAsB,CACzCxyM,KAAKk9B,OAAO9zB,GACZif,EAAWjf,EAAOopM,qBAAqB,KACvC9yM,EAAI2oB,EAASvqB,OACb,MAAO4B,IACL0J,EAASif,EAAS3oB,GACd0J,EAAOpJ,KAAK0rR,UACd1rR,KAAKk9B,OAAO9zB,GAIlB,OAAOpJ,MAETyrR,EAAW5rR,UAAUkhG,QAAU,WAC7B/gG,KAAKksB,OAAS,IAEhBu/P,EAAW5rR,UAAU25E,OAAS,SAAUt5E,GAKtC,OAJIA,IACFA,EAAEklB,iBACFllB,EAAE08E,6BAEG,GAET6uM,EAAW5rR,UAAUosR,gBAAkB,SAAU94K,EAAK9xG,GACpD,IAAIwqR,EAAcnsR,EAAG8zG,EAAG9f,EACpBjpE,EAAYzqB,KAAKksB,OAAO7qB,GAE5B,GADAwqR,EAAephQ,GAAaA,EAAU0oF,EAAI3uG,MACtCqnR,EACF,IAAKnsR,EAAI,EAAG8zG,EAAIq4K,EAAa/tR,OAAQ4B,EAAI8zG,EAAG9zG,IAK1C,GAJAg0F,EAAWm4L,EAAansR,GACpBg0F,IAAwD,IAA5CA,EAASo0J,KAAK/nP,KAAK2zF,EAASz9E,MAAOk9F,IACjDA,EAAI/tF,iBAEF+tF,EAAI+3K,gCACN,QAKRO,EAAWljC,MAAQ,IAAIkjC,EAChBA,EA/NQ,GAkO0LC,GAAU,UAAY,IAAIh/P,KAAQ8/P,GAAepvR,EAAWugB,OAAOxH,SAAUs2Q,GAAU,EAAGh5Q,GAAO,EAAGi5Q,GAAaC,KAAeC,GAAaD,KAAeE,GAAgBF,KAAeG,GAAY,SAAUnsR,EAAGuC,GAI3Z,OAHIvC,IAAMuC,IACRokR,IAAe,GAEV,GACNyF,GAAe,YAAkBC,GAAe,GAAK,GAAIpS,GAAS,GAAG96Q,eAAgBsG,GAAM,GAAIqpF,GAAMrpF,GAAIqpF,IAAKw9L,GAAc7mR,GAAId,KAAMA,GAAOc,GAAId,KAAMH,GAAQiB,GAAIjB,MAAO+nR,GAAY9mR,GAAIjG,SAAW,SAAUkf,GAEhN,IADA,IAAI3f,EAAI,EAAGuF,EAAMjF,KAAKlC,OACf4B,EAAIuF,EAAKvF,IACd,GAAIM,KAAKN,KAAO2f,EACd,OAAO3f,EAGX,OAAQ,GACPytR,GAAW,6HAA8HC,GAAa,sBAAuBC,GAAa,mCAAoCn8P,GAAa,MAAQk8P,GAAa,KAAOC,GAAa,OAASD,GAAa,gBAAkBA,GAAa,2DAA6DC,GAAa,OAASD,GAAa,OAAQE,GAAU,KAAOD,GAAP,wFAAwHn8P,GAAxH,eAA+Jq8P,GAAQ,IAAIziM,OAAO,IAAMsiM,GAAa,8BAAgCA,GAAa,KAAM,KAAMI,GAAS,IAAI1iM,OAAO,IAAMsiM,GAAa,KAAOA,GAAa,KAAMK,GAAe,IAAI3iM,OAAO,IAAMsiM,GAAa,WAAaA,GAAa,IAAMA,GAAa,KAAMM,GAAmB,IAAI5iM,OAAO,IAAMsiM,GAAa,iBAAmBA,GAAa,OAAQ,KAAMO,GAAU,IAAI7iM,OAAOwiM,IAAUM,GAAc,IAAI9iM,OAAO,IAAMuiM,GAAa,KAAMQ,GAAY,CACvhCC,GAAI,IAAIhjM,OAAO,MAAQuiM,GAAa,KACpCU,MAAO,IAAIjjM,OAAO,QAAUuiM,GAAa,KACzCW,IAAK,IAAIljM,OAAO,KAAOuiM,GAAa,SACpCY,KAAM,IAAInjM,OAAO,IAAM55D,IACvBg9P,OAAQ,IAAIpjM,OAAO,IAAMwiM,IACzBa,MAAO,IAAIrjM,OAAO,yDAA2DsiM,GAAa,+BAAiCA,GAAa,cAAgBA,GAAa,aAAeA,GAAa,SAAU,KAC3MgB,KAAM,IAAItjM,OAAO,OAASqiM,GAAW,KAAM,KAC3CkB,aAAc,IAAIvjM,OAAO,IAAMsiM,GAAa,mDAAqDA,GAAa,mBAAqBA,GAAa,mBAAoB,MACnKkB,GAAU,sCAAuCC,GAAU,SAAUC,GAAU,yBAA0BC,GAAa,mCAAoCC,GAAW,OAAQC,GAAU,QAASC,GAAY,IAAI9jM,OAAO,qBAAuBsiM,GAAa,MAAQA,GAAa,OAAQ,MAAOyB,GAAY,SAAUtrR,EAAGurR,EAASC,GAClU,IAAIC,EAAO,KAAOF,EAAU,MAC5B,OAAOE,IAASA,GAAQD,EAAoBD,EAAUE,EAAO,EAAIlrR,OAAOw6L,aAAa0wF,EAAO,OAASlrR,OAAOw6L,aAAa0wF,GAAQ,GAAK,MAAc,KAAPA,EAAc,QAE/J,IACE1pR,GAAKvH,MAAMqI,GAAMjB,GAAMpF,KAAKysR,GAAah2Q,YAAag2Q,GAAah2Q,YACnEpQ,GAAIomR,GAAah2Q,WAAW1Y,QAAQshB,SACpC,MAAOlf,IACPoF,GAAO,CACLvH,MAAOqI,GAAItI,OAAS,SAAUsL,EAAQ6lR,GACpChC,GAAYlvR,MAAMqL,EAAQjE,GAAMpF,KAAKkvR,KACnC,SAAU7lR,EAAQ6lR,GACpB,IAAIruR,EAAIwI,EAAOtL,OAAQ4B,EAAI,EAC3B,MAAO0J,EAAOxI,KAAOquR,EAAIvvR,MAEzB0J,EAAOtL,OAAS8C,EAAI,IAI1B,IAAIsuR,GAAS,SAAU/vQ,EAAU0+D,EAAS/yE,EAASqkR,GACjD,IAAIrmR,EAAOuW,EAAM2tE,EAAG5tE,EAAU1f,EAAG09I,EAAQxzI,EAAKwlR,EAAKj0L,EAAYk0L,EAM/D,IALKxxM,EAAUA,EAAQ91D,eAAiB81D,EAAU2uM,MAAkBr2Q,IAClEoxQ,GAAY1pM,GAEdA,EAAUA,GAAW1nE,GACrBrL,EAAUA,GAAW,IAChBqU,GAAgC,kBAAbA,EACtB,OAAOrU,EAET,GAAsC,KAAjCsU,EAAWy+D,EAAQz+D,WAAgC,IAAbA,EACzC,MAAO,GAET,GAAIooQ,KAAmB2H,EAAM,CAC3B,GAAIrmR,EAAQ2lR,GAAWrhM,KAAKjuE,GAC1B,GAAI6tE,EAAIlkF,EAAM,IACZ,GAAiB,IAAbsW,EAAgB,CAElB,GADAC,EAAOw+D,EAAQqiD,eAAelzC,IAC1B3tE,IAAQA,EAAKoB,WAMf,OAAO3V,EALP,GAAIuU,EAAKhe,KAAO2rF,EAEd,OADAliF,EAAQxF,KAAK+Z,GACNvU,OAMX,GAAI+yE,EAAQ91D,gBAAkB1I,EAAOw+D,EAAQ91D,cAAcm4G,eAAelzC,KAAO26L,GAAW9pM,EAASx+D,IAASA,EAAKhe,KAAO2rF,EAExH,OADAliF,EAAQxF,KAAK+Z,GACNvU,MAGN,IAAIhC,EAAM,GAEf,OADAxD,GAAKvH,MAAM+M,EAAS+yE,EAAQ20H,qBAAqBrzL,IAC1CrU,EACF,IAAKkiF,EAAIlkF,EAAM,KAAOi+Q,GAAQuI,uBAEnC,OADAhqR,GAAKvH,MAAM+M,EAAS+yE,EAAQyxM,uBAAuBtiM,IAC5CliF,EAGX,GAAIi8Q,GAAQwI,OAAS9H,KAAcA,GAAU3vQ,KAAKqH,IAAY,CAI5D,GAHAiwQ,EAAMxlR,EAAM8hR,GACZvwL,EAAatd,EACbwxM,EAA2B,IAAbjwQ,GAAkBD,EACf,IAAbC,GAAqD,WAAnCy+D,EAAQjzD,SAASlS,cAA4B,CACjE0kI,EAAS8pI,GAAS/nQ,IACdvV,EAAMi0E,EAAQvyD,aAAa,OAC7B8jQ,EAAMxlR,EAAIyO,QAAQs2Q,GAAS,QAE3B9wM,EAAQ5yD,aAAa,KAAMmkQ,GAE7BA,EAAM,QAAWA,EAAM,MACvB1vR,EAAI09I,EAAOt/I,OACX,MAAO4B,IACL09I,EAAO19I,GAAK0vR,EAAMI,GAAWpyI,EAAO19I,IAEtCy7F,EAAauzL,GAAS52Q,KAAKqH,IAAaswQ,GAAY5xM,EAAQp9D,aAAeo9D,EAC3EwxM,EAAcjyI,EAAOn0I,KAAK,KAE5B,GAAIomR,EACF,IAEE,OADA/pR,GAAKvH,MAAM+M,EAASqwF,EAAWx7E,iBAAiB0vQ,IACzCvkR,EACP,MAAO4kR,IACP,QACK9lR,GACHi0E,EAAQlyD,gBAAgB,QAMlC,OAAO0oE,GAAOl1E,EAAS9G,QAAQk1Q,GAAO,MAAO1vM,EAAS/yE,EAASqkR,IAEjE,SAASxC,KACP,IAAInlR,EAAO,GACX,SAAS+nF,EAAMpnF,EAAKlK,GAIlB,OAHIuJ,EAAKlC,KAAK6C,EAAM,KAAO6+Q,GAAK2I,oBACvBpgM,EAAM/nF,EAAK48E,SAEbmL,EAAMpnF,EAAM,KAAOlK,EAE5B,OAAOsxF,EAET,SAASqgM,GAAavxR,GAEpB,OADAA,EAAGqtR,KAAW,EACPrtR,EAET,SAASwxR,GAAalvR,EAAGuC,GACvB,IAAIuxL,EAAMvxL,GAAKvC,EAAG2uF,EAAOmlG,GAAsB,IAAf9zL,EAAEye,UAAiC,IAAflc,EAAEkc,YAAoBlc,EAAE4sR,aAAe9C,MAAkBrsR,EAAEmvR,aAAe9C,IAC9H,GAAI19L,EACF,OAAOA,EAET,GAAImlG,EACF,MAAOA,EAAMA,EAAIrsK,YACf,GAAIqsK,IAAQvxL,EACV,OAAQ,EAId,OAAOvC,EAAI,GAAK,EAElB,SAASovR,GAAkBvrR,GACzB,OAAO,SAAU6a,GACf,IAAI/a,EAAO+a,EAAKuL,SAASlS,cACzB,MAAgB,UAATpU,GAAoB+a,EAAK7a,OAASA,GAG7C,SAASwrR,GAAmBxrR,GAC1B,OAAO,SAAU6a,GACf,IAAI/a,EAAO+a,EAAKuL,SAASlS,cACzB,OAAiB,UAATpU,GAA6B,WAATA,IAAsB+a,EAAK7a,OAASA,GAGpE,SAASyrR,GAAuB5xR,GAC9B,OAAOuxR,IAAa,SAAUM,GAE5B,OADAA,GAAYA,EACLN,IAAa,SAAUT,EAAMtxQ,GAClC,IAAIjd,EAAGuvR,EAAe9xR,EAAG,GAAI8wR,EAAKrxR,OAAQoyR,GAAWxwR,EAAIywR,EAAaryR,OACtE,MAAO4B,IACDyvR,EAAKvuR,EAAIuvR,EAAazwR,MACxByvR,EAAKvuR,KAAOid,EAAQjd,GAAKuuR,EAAKvuR,WAMxC,SAAS6uR,GAAY5xM,GACnB,OAAOA,UAAkBA,EAAQ20H,uBAAyBu6E,IAAgBlvM,EA0f5E,IAAKn+E,MAxfLqnR,GAAUmI,GAAOnI,QAAU,GAC3BE,GAAQiI,GAAOjI,MAAQ,SAAU5nQ,GAC/B,IAAI2I,EAAkB3I,IAASA,EAAK0I,eAAiB1I,GAAM2I,gBAC3D,QAAOA,GAA+C,SAA7BA,EAAgB4C,UAE3C28P,GAAc2H,GAAO3H,YAAc,SAAU3wQ,GAC3C,IAAIw5Q,EAAYl6Q,EAAMU,EAAOA,EAAKmR,eAAiBnR,EAAO41Q,GAActkQ,EAAShS,EAAI+R,YACrF,SAAS+9M,EAAOzqM,GACd,IACE,OAAOA,EAAIP,IACX,MAAOisE,IAET,OAAO,KAET,OAAI/wF,IAAQC,IAA6B,IAAjBD,EAAIkJ,UAAmBlJ,EAAI8R,iBAGnD7R,GAAWD,EACX0wI,GAAU1wI,EAAI8R,gBACdw/P,IAAkBP,GAAM/wQ,GACpBgS,GAAUA,IAAW89M,EAAO99M,KAC1BA,EAAO+U,iBACT/U,EAAO+U,iBAAiB,UAAU,WAChCsqP,QACC,GACMr/P,EAAOsiQ,aAChBtiQ,EAAOsiQ,YAAY,YAAY,WAC7BjD,SAINR,GAAQ71P,YAAa,EACrB61P,GAAQv0E,sBAAuB,EAC/Bu0E,GAAQuI,uBAAyBd,GAAQ12Q,KAAK5B,EAAIo5Q,wBAClDvI,GAAQzmL,SAAU,EAClB0mL,GAAKxgR,KAAKsnR,GAAK,SAAUzsR,EAAIw8E,GAC3B,UAAWA,EAAQqiD,iBAAmB6sJ,IAAgBvF,GAAgB,CACpE,IAAIx6L,EAAInP,EAAQqiD,eAAe7+H,GAC/B,OAAO2rF,GAAKA,EAAEvsE,WAAa,CAACusE,GAAK,KAGrCg6L,GAAKzkR,OAAOurR,GAAK,SAAUzsR,GACzB,IAAIgvR,EAAShvR,EAAGgX,QAAQu2Q,GAAWC,IACnC,OAAO,SAAUxvQ,GACf,OAAOA,EAAKiM,aAAa,QAAU+kQ,IAGvCrJ,GAAKxgR,KAAKwnR,IAAMjH,GAAQv0E,qBAAuB,SAAU77L,EAAKknE,GAC5D,UAAWA,EAAQ20H,uBAAyBu6E,GAC1C,OAAOlvM,EAAQ20H,qBAAqB77L,IAEpC,SAAUA,EAAKknE,GACjB,IAAIx+D,EAAMixQ,EAAM,GAAI5wR,EAAI,EAAGoL,EAAU+yE,EAAQ20H,qBAAqB77L,GAClE,GAAY,MAARA,EAAa,CACf,MAAO0I,EAAOvU,EAAQpL,KACE,IAAlB2f,EAAKD,UACPkxQ,EAAIhrR,KAAK+Z,GAGb,OAAOixQ,EAET,OAAOxlR,GAETk8Q,GAAKxgR,KAAKunR,MAAQhH,GAAQuI,wBAA0B,SAAUv+I,EAAWlzD,GACvE,GAAI2pM,GACF,OAAO3pM,EAAQyxM,uBAAuBv+I,IAG1C22I,GAAgB,GAChBD,GAAY,GACZV,GAAQwJ,mBAAoB,EAC5B9I,GAAYA,GAAU3pR,QAAU,IAAIgtF,OAAO28L,GAAUx+Q,KAAK,MAC1Dy+Q,GAAgBA,GAAc5pR,QAAU,IAAIgtF,OAAO48L,GAAcz+Q,KAAK,MACtEmnR,EAAa5B,GAAQ12Q,KAAK8uI,GAAQtvI,yBAClCqwQ,GAAayI,GAAc5B,GAAQ12Q,KAAK8uI,GAAQlhJ,UAAY,SAAU/E,EAAGuC,GACvE,IAAIstR,EAAuB,IAAf7vR,EAAEye,SAAiBze,EAAEqnB,gBAAkBrnB,EAAG8vR,EAAMvtR,GAAKA,EAAEud,WACnE,OAAO9f,IAAM8vR,MAAUA,GAAwB,IAAjBA,EAAIrxQ,YAAmBoxQ,EAAM9qR,SAAW8qR,EAAM9qR,SAAS+qR,GAAO9vR,EAAE2W,yBAA4D,GAAjC3W,EAAE2W,wBAAwBm5Q,MACjJ,SAAU9vR,EAAGuC,GACf,GAAIA,EACF,MAAOA,EAAIA,EAAEud,WACX,GAAIvd,IAAMvC,EACR,OAAO,EAIb,OAAO,GAETmsR,GAAYsD,EAAa,SAAUzvR,EAAGuC,GACpC,GAAIvC,IAAMuC,EAER,OADAokR,IAAe,EACR,EAET,IAAIr+B,GAAWtoP,EAAE2W,yBAA2BpU,EAAEoU,wBAC9C,OAAI2xO,IAGJA,GAAWtoP,EAAEonB,eAAiBpnB,MAAQuC,EAAE6kB,eAAiB7kB,GAAKvC,EAAE2W,wBAAwBpU,GAAK,EAC/E,EAAV+lP,IAAgB89B,GAAQ2J,cAAgBxtR,EAAEoU,wBAAwB3W,KAAOsoP,EACvEtoP,IAAMuV,GAAOvV,EAAEonB,gBAAkBykQ,IAAgB7E,GAAW6E,GAAc7rR,IACpE,EAENuC,IAAMgT,GAAOhT,EAAE6kB,gBAAkBykQ,IAAgB7E,GAAW6E,GAActpR,GACrE,EAEFmkR,GAAY6F,GAAUntR,KAAKsnR,GAAW1mR,GAAKusR,GAAUntR,KAAKsnR,GAAWnkR,GAAK,EAElE,EAAV+lP,GAAe,EAAI,IACxB,SAAUtoP,EAAGuC,GACf,GAAIvC,IAAMuC,EAER,OADAokR,IAAe,EACR,EAET,IAAI7yF,EAAK/0L,EAAI,EAAGixR,EAAMhwR,EAAE8f,WAAYgwQ,EAAMvtR,EAAEud,WAAYmwQ,EAAK,CAACjwR,GAAIkwR,EAAK,CAAC3tR,GACxE,IAAKytR,IAAQF,EACX,OAAO9vR,IAAMuV,GAAO,EAAIhT,IAAMgT,EAAM,EAAIy6Q,GAAO,EAAIF,EAAM,EAAIpJ,GAAY6F,GAAUntR,KAAKsnR,GAAW1mR,GAAKusR,GAAUntR,KAAKsnR,GAAWnkR,GAAK,EAClI,GAAIytR,IAAQF,EACjB,OAAOZ,GAAalvR,EAAGuC,GAEzBuxL,EAAM9zL,EACN,MAAO8zL,EAAMA,EAAIh0K,WACfmwQ,EAAGphM,QAAQilG,GAEbA,EAAMvxL,EACN,MAAOuxL,EAAMA,EAAIh0K,WACfowQ,EAAGrhM,QAAQilG,GAEb,MAAOm8F,EAAGlxR,KAAOmxR,EAAGnxR,GAClBA,IAEF,OAAOA,EAAImwR,GAAae,EAAGlxR,GAAImxR,EAAGnxR,IAAMkxR,EAAGlxR,KAAO8sR,IAAgB,EAAIqE,EAAGnxR,KAAO8sR,GAAe,EAAI,GAE9Ft2Q,GApHEC,IAsHX+4Q,GAAOrxQ,QAAU,SAAUizQ,EAAMvnQ,GAC/B,OAAO2lQ,GAAO4B,EAAM,KAAM,KAAMvnQ,IAElC2lQ,GAAO6B,gBAAkB,SAAU1xQ,EAAMyxQ,GAKvC,IAJKzxQ,EAAK0I,eAAiB1I,KAAUlJ,IACnCoxQ,GAAYloQ,GAEdyxQ,EAAOA,EAAKz4Q,QAAQq1Q,GAAkB,UAClC3G,GAAQgK,iBAAmBvJ,MAAoBE,KAAkBA,GAAc5vQ,KAAKg5Q,OAAYrJ,KAAcA,GAAU3vQ,KAAKg5Q,IAC/H,IACE,IAAI1mR,EAAMyT,GAAQ9d,KAAKsf,EAAMyxQ,GAC7B,GAAI1mR,GAAO28Q,GAAQwJ,mBAAqBlxQ,EAAKlJ,UAAuC,KAA3BkJ,EAAKlJ,SAASiJ,SACrE,OAAOhV,EAET,MAAOlK,KAGX,OAAOgvR,GAAO4B,EAAM36Q,GAAU,KAAM,CAACkJ,IAAOvhB,OAAS,GAEvDoxR,GAAOxpR,SAAW,SAAUm4E,EAASx+D,GAInC,OAHKw+D,EAAQ91D,eAAiB81D,KAAa1nE,IACzCoxQ,GAAY1pM,GAEP8pM,GAAW9pM,EAASx+D,IAE7B6vQ,GAAOx6P,KAAO,SAAUrV,EAAM/a,IACvB+a,EAAK0I,eAAiB1I,KAAUlJ,IACnCoxQ,GAAYloQ,GAEd,IAAIhhB,EAAK2oR,GAAKgK,WAAW1sR,EAAKoU,eAAgB1N,EAAM3M,GAAMu8Q,GAAO76Q,KAAKinR,GAAKgK,WAAY1sR,EAAKoU,eAAiBra,EAAGghB,EAAM/a,GAAOkjR,SAAkBzlR,EAC/I,YAAeA,IAARiJ,EAAoBA,EAAM+7Q,GAAQ71P,aAAes2P,GAAiBnoQ,EAAKiM,aAAahnB,IAAS0G,EAAMqU,EAAK4xQ,iBAAiB3sR,KAAU0G,EAAIkmR,UAAYlmR,EAAI/M,MAAQ,MAExKixR,GAAOtrR,MAAQ,SAAUhF,GACvB,MAAM,IAAIC,MAAM,0CAA4CD,IAE9DswR,GAAOiC,WAAa,SAAUrmR,GAC5B,IAAIuU,EAAM+xQ,EAAa,GAAIxwR,EAAI,EAAGlB,EAAI,EAItC,GAHA4nR,IAAgBP,GAAQsK,iBACxBhK,IAAaN,GAAQuK,YAAcxmR,EAAQ3F,MAAM,GACjD2F,EAAQ7D,KAAK6lR,IACTxF,GAAc,CAChB,MAAOjoQ,EAAOvU,EAAQpL,KAChB2f,IAASvU,EAAQpL,KACnBkB,EAAIwwR,EAAW9rR,KAAK5F,IAGxB,MAAOkB,IACLkK,EAAQ8kF,OAAOwhM,EAAWxwR,GAAI,GAIlC,OADAymR,GAAY,KACLv8Q,GAETiwE,GAAUm0M,GAAOn0M,QAAU,SAAU17D,GACnC,IAAIzI,EAAMxM,EAAM,GAAI1K,EAAI,EAAG0f,EAAWC,EAAKD,SAC3C,GAAKA,GAIE,GAAiB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAiB,CAC9D,GAAgC,kBAArBC,EAAKqK,YACd,OAAOrK,EAAKqK,YAEZ,IAAKrK,EAAOA,EAAKoJ,WAAYpJ,EAAMA,EAAOA,EAAK+I,YAC7Che,GAAO2wE,GAAQ17D,QAGd,GAAiB,IAAbD,GAA+B,IAAbA,EAC3B,OAAOC,EAAKi5B,eAZZ,MAAO1hC,EAAOyI,EAAK3f,KACjB0K,GAAO2wE,GAAQnkE,GAanB,OAAOxM,GAET48Q,GAAOkI,GAAOnxN,UAAY,CACxB4xN,YAAa,GACb4B,aAAc3B,GACd9mR,MAAO+kR,GACPmD,WAAY,GACZxqR,KAAM,GACNqkC,SAAU,CACR,IAAK,CACHlG,IAAK,aACLk1B,OAAO,GAET,IAAK,CAAEl1B,IAAK,cACZ,IAAK,CACHA,IAAK,kBACLk1B,OAAO,GAET,IAAK,CAAEl1B,IAAK,oBAEd6sP,UAAW,CACTvD,KAAM,SAAUnlR,GAMd,OALAA,EAAM,GAAKA,EAAM,GAAGuP,QAAQu2Q,GAAWC,IACvC/lR,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAM,IAAIuP,QAAQu2Q,GAAWC,IACtD,OAAb/lR,EAAM,KACRA,EAAM,GAAK,IAAMA,EAAM,GAAK,KAEvBA,EAAM3D,MAAM,EAAG,IAExBgpR,MAAO,SAAUrlR,GAWf,OAVAA,EAAM,GAAKA,EAAM,GAAG4P,cACS,QAAzB5P,EAAM,GAAG3D,MAAM,EAAG,IACf2D,EAAM,IACTomR,GAAOtrR,MAAMkF,EAAM,IAErBA,EAAM,KAAOA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAAK,GAAkB,SAAbA,EAAM,IAA8B,QAAbA,EAAM,KACvFA,EAAM,KAAOA,EAAM,GAAKA,EAAM,IAAmB,QAAbA,EAAM,KACjCA,EAAM,IACfomR,GAAOtrR,MAAMkF,EAAM,IAEdA,GAETolR,OAAQ,SAAUplR,GAChB,IAAI2oR,EAAQC,GAAY5oR,EAAM,IAAMA,EAAM,GAC1C,OAAI+kR,GAAUM,MAAMr2Q,KAAKhP,EAAM,IACtB,MAELA,EAAM,GACRA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAC1B4oR,GAAY/D,GAAQ71Q,KAAK45Q,KAAcD,EAASvK,GAASwK,GAAU,MAAWD,EAASC,EAASvxR,QAAQ,IAAKuxR,EAAS5zR,OAAS2zR,GAAUC,EAAS5zR,UAC3JgL,EAAM,GAAKA,EAAM,GAAG3D,MAAM,EAAGssR,GAC7B3oR,EAAM,GAAK4oR,EAASvsR,MAAM,EAAGssR,IAExB3oR,EAAM3D,MAAM,EAAG,MAG1B5C,OAAQ,CACNyrR,IAAK,SAAU2D,GACb,IAAI/mQ,EAAW+mQ,EAAiBt5Q,QAAQu2Q,GAAWC,IAAWn2Q,cAC9D,MAA4B,MAArBi5Q,EAA2B,WAChC,OAAO,GACL,SAAUtyQ,GACZ,OAAOA,EAAKuL,UAAYvL,EAAKuL,SAASlS,gBAAkBkS,IAG5DmjQ,MAAO,SAAUh9I,GACf,IAAIptB,EAAU+oK,GAAW37I,EAAY,KACrC,OAAOptB,IAAYA,EAAU,IAAI74B,OAAO,MAAQsiM,GAAa,IAAMr8I,EAAY,IAAMq8I,GAAa,SAAWV,GAAW37I,GAAW,SAAU1xH,GAC3I,OAAOskG,EAAQ7rG,KAA+B,kBAAnBuH,EAAK0xH,WAA0B1xH,EAAK0xH,kBAAoB1xH,EAAKiM,eAAiByhQ,IAAgB1tQ,EAAKiM,aAAa,UAAY,QAG3J2iQ,KAAM,SAAU3pR,EAAMstR,EAAUC,GAC9B,OAAO,SAAUxyQ,GACf,IAAIxS,EAASqiR,GAAOx6P,KAAKrV,EAAM/a,GAC/B,OAAc,MAAVuI,EACkB,OAAb+kR,GAEJA,IAGL/kR,GAAU,GACU,MAAb+kR,EAAmB/kR,IAAWglR,EAAqB,OAAbD,EAAoB/kR,IAAWglR,EAAqB,OAAbD,EAAoBC,GAAmC,IAA1BhlR,EAAO1M,QAAQ0xR,GAA4B,OAAbD,EAAoBC,GAAShlR,EAAO1M,QAAQ0xR,IAAU,EAAiB,OAAbD,EAAoBC,GAAShlR,EAAO1H,OAAO0sR,EAAM/zR,UAAY+zR,EAAqB,OAAbD,GAAqB,IAAM/kR,EAAS,KAAK1M,QAAQ0xR,IAAU,EAAiB,OAAbD,IAAoB/kR,IAAWglR,GAAShlR,EAAO1H,MAAM,EAAG0sR,EAAM/zR,OAAS,KAAO+zR,EAAQ,QAGva1D,MAAO,SAAU3pR,EAAMstR,EAAM5B,EAAUr2N,EAAOxyD,GAC5C,IAAI8pC,EAA8B,QAArB3sC,EAAKW,MAAM,EAAG,GAAcutM,EAA6B,SAAnBluM,EAAKW,OAAO,GAAe4sR,EAAkB,YAATD,EACvF,OAAiB,IAAVj4N,GAAwB,IAATxyD,EAAa,SAAUgY,GAC3C,QAASA,EAAKoB,YACZ,SAAUpB,EAAMw+D,EAASm0M,GAC3B,IAAIziM,EAAO0iM,EAAYr7Q,EAAM04E,EAAMi6G,EAAWzsL,EAAO6nB,EAAMwM,IAAWuhK,EAAU,cAAgB,kBAAmBxqL,EAAS7I,EAAKoB,WAAYnc,EAAOytR,GAAU1yQ,EAAKuL,SAASlS,cAAew5Q,GAAYF,IAAQD,EAC/M,GAAI7pQ,EAAQ,CACV,GAAIipB,EAAQ,CACV,MAAOxM,EAAK,CACV/tB,EAAOyI,EACP,MAAOzI,EAAOA,EAAK+tB,GACjB,GAAIotP,EAASn7Q,EAAKgU,SAASlS,gBAAkBpU,EAAyB,IAAlBsS,EAAKwI,SACvD,OAAO,EAGXtC,EAAQ6nB,EAAe,SAATngC,IAAoBsY,GAAS,cAE7C,OAAO,EAGT,GADAA,EAAQ,CAAC41L,EAAUxqL,EAAOO,WAAaP,EAAO03K,WAC1C8S,GAAWw/E,EAAU,CACvBD,EAAa/pQ,EAAOwjQ,MAAaxjQ,EAAOwjQ,IAAW,IACnDn8L,EAAQ0iM,EAAWztR,IAAS,GAC5B+kM,EAAYh6G,EAAM,KAAOk9L,IAAWl9L,EAAM,GAC1CD,EAAOC,EAAM,KAAOk9L,IAAWl9L,EAAM,GACrC34E,EAAO2yL,GAAarhL,EAAO1R,WAAW+yL,GACtC,MAAO3yL,IAAS2yL,GAAa3yL,GAAQA,EAAK+tB,KAAS2qD,EAAOi6G,EAAY,IAAMzsL,EAAM2yE,MAChF,GAAsB,IAAlB74E,EAAKwI,YAAoBkwE,GAAQ14E,IAASyI,EAAM,CAClD4yQ,EAAWztR,GAAQ,CACjBioR,GACAljF,EACAj6G,GAEF,YAGC,GAAI4iM,IAAa3iM,GAASlwE,EAAKqsQ,MAAarsQ,EAAKqsQ,IAAW,KAAKlnR,KAAU+qF,EAAM,KAAOk9L,GAC7Fn9L,EAAOC,EAAM,QAEb,MAAO34E,IAAS2yL,GAAa3yL,GAAQA,EAAK+tB,KAAS2qD,EAAOi6G,EAAY,IAAMzsL,EAAM2yE,MAChF,IAAKsiM,EAASn7Q,EAAKgU,SAASlS,gBAAkBpU,EAAyB,IAAlBsS,EAAKwI,aAAqBkwE,IACzE4iM,KACDt7Q,EAAK80Q,MAAa90Q,EAAK80Q,IAAW,KAAKlnR,GAAQ,CAC9CioR,GACAn9L,IAGA14E,IAASyI,GACX,MAMR,OADAiwE,GAAQjoF,EACDioF,IAASz1B,GAASy1B,EAAOz1B,IAAU,GAAKy1B,EAAOz1B,GAAS,KAIrEq0N,OAAQ,SAAUiE,EAAQjC,GACxB,IAAIvyR,EAAMU,EAAK2oR,GAAKsG,QAAQ6E,IAAWnL,GAAKoL,WAAWD,EAAOz5Q,gBAAkBw2Q,GAAOtrR,MAAM,uBAAyBuuR,GACtH,OAAI9zR,EAAGqtR,IACErtR,EAAG6xR,GAER7xR,EAAGP,OAAS,GACdH,EAAO,CACLw0R,EACAA,EACA,GACAjC,GAEKlJ,GAAKoL,WAAWtyR,eAAeqyR,EAAOz5Q,eAAiBk3Q,IAAa,SAAUT,EAAMtxQ,GACzF,IAAI8xE,EAAK0iM,EAAUh0R,EAAG8wR,EAAMe,GAAWxwR,EAAI2yR,EAAQv0R,OACnD,MAAO4B,IACLiwF,EAAMu9L,GAAUntR,KAAKovR,EAAMkD,EAAQ3yR,IACnCyvR,EAAKx/L,KAAS9xE,EAAQ8xE,GAAO0iM,EAAQ3yR,OAEpC,SAAU2f,GACb,OAAOhhB,EAAGghB,EAAM,EAAG1hB,KAGhBU,IAGXivR,QAAS,CACP5uR,IAAKkxR,IAAa,SAAUzwQ,GAC1B,IAAIvR,EAAQ,GAAI9C,EAAU,GAAIwnR,EAAUnL,GAAQhoQ,EAAS9G,QAAQk1Q,GAAO,OACxE,OAAO+E,EAAQ5G,IAAWkE,IAAa,SAAUT,EAAMtxQ,EAASggE,EAASm0M,GACvE,IAAI3yQ,EAAMkzQ,EAAYD,EAAQnD,EAAM,KAAM6C,EAAK,IAAKtyR,EAAIyvR,EAAKrxR,OAC7D,MAAO4B,KACD2f,EAAOkzQ,EAAU7yR,MACnByvR,EAAKzvR,KAAOme,EAAQne,GAAK2f,OAG1B,SAAUA,EAAMw+D,EAASm0M,GAG5B,OAFApkR,EAAM,GAAKyR,EACXizQ,EAAQ1kR,EAAO,KAAMokR,EAAKlnR,IAClBA,EAAQ2kF,UAGpBrnF,IAAKwnR,IAAa,SAAUzwQ,GAC1B,OAAO,SAAUE,GACf,OAAO6vQ,GAAO/vQ,EAAUE,GAAMvhB,OAAS,MAG3C4H,SAAUkqR,IAAa,SAAU94Q,GAE/B,OADAA,EAAOA,EAAKuB,QAAQu2Q,GAAWC,IACxB,SAAUxvQ,GACf,OAAQA,EAAKqK,aAAerK,EAAKq5H,WAAa39D,GAAQ17D,IAAOlf,QAAQ2W,IAAS,MAGlF07Q,KAAM5C,IAAa,SAAU4C,GAK3B,OAJK5E,GAAY91Q,KAAK06Q,GAAQ,KAC5BtD,GAAOtrR,MAAM,qBAAuB4uR,GAEtCA,EAAOA,EAAKn6Q,QAAQu2Q,GAAWC,IAAWn2Q,cACnC,SAAU2G,GACf,IAAIozQ,EACJ,GACE,GAAIA,EAAWjL,GAAiBnoQ,EAAKmzQ,KAAOnzQ,EAAKiM,aAAa,aAAejM,EAAKiM,aAAa,QAE7F,OADAmnQ,EAAWA,EAAS/5Q,cACb+5Q,IAAaD,GAAyC,IAAjCC,EAAStyR,QAAQqyR,EAAO,YAE9CnzQ,EAAOA,EAAKoB,aAAiC,IAAlBpB,EAAKD,UAC1C,OAAO,MAGXhW,OAAQ,SAAUiW,GAChB,IAAIqzQ,EAAOt1R,EAAWugB,OAAOi7J,UAAYx7K,EAAWugB,OAAOi7J,SAAS85G,KACpE,OAAOA,GAAQA,EAAKvtR,MAAM,KAAOka,EAAKhe,IAExCy5C,KAAM,SAAUz7B,GACd,OAAOA,IAASunI,IAElB7jI,MAAO,SAAU1D,GACf,OAAOA,IAASlJ,GAAS8zB,iBAAmB9zB,GAAS6zB,UAAY7zB,GAAS6zB,gBAAkB3qB,EAAK7a,MAAQ6a,EAAKo5K,OAASp5K,EAAKszQ,WAE9HnuJ,QAAS,SAAUnlH,GACjB,OAAyB,IAAlBA,EAAKmoE,UAEdA,SAAU,SAAUnoE,GAClB,OAAyB,IAAlBA,EAAKmoE,UAEdjiB,QAAS,SAAUlmD,GACjB,IAAIuL,EAAWvL,EAAKuL,SAASlS,cAC7B,MAAoB,UAAbkS,KAA0BvL,EAAKkmD,SAAwB,WAAb36C,KAA2BvL,EAAKmxC,UAEnFA,SAAU,SAAUnxC,GAIlB,OAHIA,EAAKoB,YACPpB,EAAKoB,WAAWmyQ,eAEO,IAAlBvzQ,EAAKmxC,UAEd/mC,MAAO,SAAUpK,GACf,IAAKA,EAAOA,EAAKoJ,WAAYpJ,EAAMA,EAAOA,EAAK+I,YAC7C,GAAI/I,EAAKD,SAAW,EAClB,OAAO,EAGX,OAAO,GAET8I,OAAQ,SAAU7I,GAChB,OAAQ2nQ,GAAKsG,QAAQ7jQ,MAAMpK,IAE7B0yH,OAAQ,SAAU1yH,GAChB,OAAOkvQ,GAAQz2Q,KAAKuH,EAAKuL,WAE3Bhd,MAAO,SAAUyR,GACf,OAAOivQ,GAAQx2Q,KAAKuH,EAAKuL,WAE3Bk+D,OAAQ,SAAUzpE,GAChB,IAAI/a,EAAO+a,EAAKuL,SAASlS,cACzB,MAAgB,UAATpU,GAAkC,WAAd+a,EAAK7a,MAA8B,WAATF,GAEvDwS,KAAM,SAAUuI,GACd,IAAIqV,EACJ,MAAuC,UAAhCrV,EAAKuL,SAASlS,eAA2C,SAAd2G,EAAK7a,OAA0D,OAArCkwB,EAAOrV,EAAKiM,aAAa,UAA2C,SAAvBoJ,EAAKhc,gBAEhImhD,MAAOo2N,IAAuB,WAC5B,MAAO,CAAC,MAEV5oR,KAAM4oR,IAAuB,SAAUE,EAAcryR,GACnD,MAAO,CAACA,EAAS,MAEnBmD,GAAIgvR,IAAuB,SAAUE,EAAcryR,EAAQoyR,GACzD,MAAO,CAACA,EAAW,EAAIA,EAAWpyR,EAASoyR,MAE7C2C,KAAM5C,IAAuB,SAAUE,EAAcryR,GAEnD,IADA,IAAI4B,EAAI,EACDA,EAAI5B,EAAQ4B,GAAK,EACtBywR,EAAa7qR,KAAK5F,GAEpB,OAAOywR,KAET2C,IAAK7C,IAAuB,SAAUE,EAAcryR,GAElD,IADA,IAAI4B,EAAI,EACDA,EAAI5B,EAAQ4B,GAAK,EACtBywR,EAAa7qR,KAAK5F,GAEpB,OAAOywR,KAET4C,GAAI9C,IAAuB,SAAUE,EAAcryR,EAAQoyR,GAEzD,IADA,IAAIxwR,EAAIwwR,EAAW,EAAIA,EAAWpyR,EAASoyR,IAClCxwR,GAAK,GACZywR,EAAa7qR,KAAK5F,GAEpB,OAAOywR,KAET6C,GAAI/C,IAAuB,SAAUE,EAAcryR,EAAQoyR,GAEzD,IADA,IAAIxwR,EAAIwwR,EAAW,EAAIA,EAAWpyR,EAASoyR,IAClCxwR,EAAI5B,GACXqyR,EAAa7qR,KAAK5F,GAEpB,OAAOywR,OAIbnJ,GAAKsG,QAAQ2F,IAAMjM,GAAKsG,QAAQrsR,GACtB,CACNiyR,OAAO,EACPrgJ,UAAU,EACVptB,MAAM,EACN0tK,UAAU,EACVprK,OAAO,GAETi/J,GAAKsG,QAAQ5tR,IAAKqwR,GAAkBrwR,IAEtC,IAAKA,KAAK,CACNw1F,QAAQ,EACRwpE,OAAO,GAETsoH,GAAKsG,QAAQ5tR,IAAKswR,GAAmBtwR,IAEvC,SAAS0yR,MA+CT,SAAS5C,GAAW4D,GAElB,IADA,IAAI1zR,EAAI,EAAGuF,EAAMmuR,EAAOt1R,OAAQqhB,EAAW,GACpCzf,EAAIuF,EAAKvF,IACdyf,GAAYi0Q,EAAO1zR,GAAGzB,MAExB,OAAOkhB,EAET,SAASk0Q,GAAcf,EAASgB,EAAYtnR,GAC1C,IAAI24B,EAAM2uP,EAAW3uP,IAAK4uP,EAAmBvnR,GAAgB,eAAR24B,EAAsB6uP,EAAW//Q,KACtF,OAAO6/Q,EAAWz5N,MAAQ,SAAUx6C,EAAMw+D,EAASm0M,GACjD,MAAO3yQ,EAAOA,EAAKslB,GACjB,GAAsB,IAAlBtlB,EAAKD,UAAkBm0Q,EACzB,OAAOjB,EAAQjzQ,EAAMw+D,EAASm0M,IAGhC,SAAU3yQ,EAAMw+D,EAASm0M,GAC3B,IAAIyB,EAAUxB,EAAYyB,EAAW,CACjCjH,GACA+G,GAEJ,GAAIxB,GACF,MAAO3yQ,EAAOA,EAAKslB,GACjB,IAAsB,IAAlBtlB,EAAKD,UAAkBm0Q,IACrBjB,EAAQjzQ,EAAMw+D,EAASm0M,GACzB,OAAO,OAKb,MAAO3yQ,EAAOA,EAAKslB,GACjB,GAAsB,IAAlBtlB,EAAKD,UAAkBm0Q,EAAkB,CAE3C,GADAtB,EAAa5yQ,EAAKqsQ,MAAarsQ,EAAKqsQ,IAAW,KAC1C+H,EAAWxB,EAAWttP,KAAS8uP,EAAS,KAAOhH,IAAWgH,EAAS,KAAOD,EAC7E,OAAOE,EAAS,GAAKD,EAAS,GAG9B,GADAxB,EAAWttP,GAAO+uP,EACdA,EAAS,GAAKpB,EAAQjzQ,EAAMw+D,EAASm0M,GACvC,OAAO,IAQrB,SAAS2B,GAAeC,GACtB,OAAOA,EAAS91R,OAAS,EAAI,SAAUuhB,EAAMw+D,EAASm0M,GACpD,IAAItyR,EAAIk0R,EAAS91R,OACjB,MAAO4B,IACL,IAAKk0R,EAASl0R,GAAG2f,EAAMw+D,EAASm0M,GAC9B,OAAO,EAGX,OAAO,GACL4B,EAAS,GAEf,SAASC,GAAiB10Q,EAAU20Q,EAAUhpR,GAE5C,IADA,IAAIpL,EAAI,EAAGuF,EAAM6uR,EAASh2R,OACnB4B,EAAIuF,EAAKvF,IACdwvR,GAAO/vQ,EAAU20Q,EAASp0R,GAAIoL,GAEhC,OAAOA,EAET,SAASipR,GAASxB,EAAWrwR,EAAKK,EAAQs7E,EAASm0M,GAEjD,IADA,IAAI3yQ,EAAM20Q,EAAe,GAAIt0R,EAAI,EAAGuF,EAAMstR,EAAUz0R,OAAQm2R,EAAgB,MAAP/xR,EAC9DxC,EAAIuF,EAAKvF,KACV2f,EAAOkzQ,EAAU7yR,MACd6C,IAAUA,EAAO8c,EAAMw+D,EAASm0M,KACnCgC,EAAa1uR,KAAK+Z,GACd40Q,GACF/xR,EAAIoD,KAAK5F,KAKjB,OAAOs0R,EAET,SAASE,GAAW1C,EAAWryQ,EAAUmzQ,EAAS6B,EAAYC,EAAYC,GAOxE,OANIF,IAAeA,EAAWzI,MAC5ByI,EAAaD,GAAWC,IAEtBC,IAAeA,EAAW1I,MAC5B0I,EAAaF,GAAWE,EAAYC,IAE/BzE,IAAa,SAAUT,EAAMrkR,EAAS+yE,EAASm0M,GACpD,IAAIrsJ,EAAMjmI,EAAG2f,EAAMi1Q,EAAS,GAAIC,EAAU,GAAIC,EAAc1pR,EAAQhN,OAAQ22R,EAAQtF,GAAQ0E,GAAiB10Q,GAAY,IAAK0+D,EAAQz+D,SAAW,CAACy+D,GAAWA,EAAS,IAAK62M,GAAYlD,IAAcrC,GAAShwQ,EAA+Ds1Q,EAAnDV,GAASU,EAAOH,EAAQ9C,EAAW3zM,EAASm0M,GAAc2C,EAAarC,EAAU8B,IAAejF,EAAOqC,EAAYgD,GAAeL,GAAc,GAAKrpR,EAAU4pR,EAIzX,GAHIpC,GACFA,EAAQoC,EAAWC,EAAY92M,EAASm0M,GAEtCmC,EAAY,CACdxuJ,EAAOouJ,GAASY,EAAYJ,GAC5BJ,EAAWxuJ,EAAM,GAAI9nD,EAASm0M,GAC9BtyR,EAAIimI,EAAK7nI,OACT,MAAO4B,KACD2f,EAAOsmH,EAAKjmI,MACdi1R,EAAWJ,EAAQ70R,MAAQg1R,EAAUH,EAAQ70R,IAAM2f,IAIzD,GAAI8vQ,GACF,GAAIiF,GAAc5C,EAAW,CAC3B,GAAI4C,EAAY,CACdzuJ,EAAO,GACPjmI,EAAIi1R,EAAW72R,OACf,MAAO4B,KACD2f,EAAOs1Q,EAAWj1R,KACpBimI,EAAKrgI,KAAKovR,EAAUh1R,GAAK2f,GAG7B+0Q,EAAW,KAAMO,EAAa,GAAIhvJ,EAAMqsJ,GAE1CtyR,EAAIi1R,EAAW72R,OACf,MAAO4B,KACA2f,EAAOs1Q,EAAWj1R,MAAQimI,EAAOyuJ,EAAalH,GAAUntR,KAAKovR,EAAM9vQ,GAAQi1Q,EAAO50R,KAAO,IAC5FyvR,EAAKxpJ,KAAU76H,EAAQ66H,GAAQtmH,UAKrCs1Q,EAAaZ,GAASY,IAAe7pR,EAAU6pR,EAAW/kM,OAAO4kM,EAAaG,EAAW72R,QAAU62R,GAC/FP,EACFA,EAAW,KAAMtpR,EAAS6pR,EAAY3C,GAEtC1sR,GAAKvH,MAAM+M,EAAS6pR,MAK5B,SAASC,GAAkBxB,GAQzB,IAPA,IAAIyB,EAAcvC,EAAS1xR,EAAGqE,EAAMmuR,EAAOt1R,OAAQg3R,EAAkB9N,GAAKn8O,SAASuoP,EAAO,GAAG5uR,MAAOuwR,EAAmBD,GAAmB9N,GAAKn8O,SAAS,KAAMnrC,EAAIo1R,EAAkB,EAAI,EAAGE,EAAe3B,IAAc,SAAUh0Q,GAC9N,OAAOA,IAASw1Q,IACfE,GAAkB,GAAOE,EAAkB5B,IAAc,SAAUh0Q,GACpE,OAAO6tQ,GAAUntR,KAAK80R,EAAcx1Q,IAAS,IAC5C01Q,GAAkB,GAAOnB,EAAW,CAAC,SAAUv0Q,EAAMw+D,EAASm0M,GAC7D,OAAQ8C,IAAoB9C,GAAOn0M,IAAYupM,OAAuByN,EAAeh3M,GAASz+D,SAAW41Q,EAAa31Q,EAAMw+D,EAASm0M,GAAOiD,EAAgB51Q,EAAMw+D,EAASm0M,MAE1KtyR,EAAIuF,EAAKvF,IACd,GAAI4yR,EAAUtL,GAAKn8O,SAASuoP,EAAO1zR,GAAG8E,MACpCovR,EAAW,CAACP,GAAcM,GAAeC,GAAWtB,QAC/C,CAEL,GADAA,EAAUtL,GAAKzkR,OAAO6wR,EAAO1zR,GAAG8E,MAAMzG,MAAM,KAAMq1R,EAAO1zR,GAAGme,SACxDy0Q,EAAQ5G,IAAU,CAEpB,IADA9qR,IAAMlB,EACCkB,EAAIqE,EAAKrE,IACd,GAAIomR,GAAKn8O,SAASuoP,EAAOxyR,GAAG4D,MAC1B,MAGJ,OAAO0vR,GAAWx0R,EAAI,GAAKi0R,GAAeC,GAAWl0R,EAAI,GAAK8vR,GAAW4D,EAAOjuR,MAAM,EAAGzF,EAAI,GAAGjB,OAAO,CAAER,MAA8B,MAAvBm1R,EAAO1zR,EAAI,GAAG8E,KAAe,IAAM,MAAO6T,QAAQk1Q,GAAO,MAAO+E,EAAS5yR,EAAIkB,GAAKg0R,GAAkBxB,EAAOjuR,MAAMzF,EAAGkB,IAAKA,EAAIqE,GAAO2vR,GAAkBxB,EAASA,EAAOjuR,MAAMvE,IAAKA,EAAIqE,GAAOuqR,GAAW4D,IAEzTQ,EAAStuR,KAAKgtR,GAGlB,OAAOqB,GAAeC,GAExB,SAASsB,GAAyBC,EAAiBC,GACjD,IAAIC,EAAQD,EAAYt3R,OAAS,EAAGw3R,EAAYH,EAAgBr3R,OAAS,EAAGy3R,EAAe,SAAUpG,EAAMtxM,EAASm0M,EAAKlnR,EAAS0qR,GAC9H,IAAIn2Q,EAAMze,EAAG0xR,EAASmD,EAAe,EAAG/1R,EAAI,IAAK6yR,EAAYpD,GAAQ,GAAIuG,EAAa,GAAIC,EAAgBvO,GAAkBqN,EAAQtF,GAAQmG,GAAatO,GAAKxgR,KAAKwnR,IAAI,IAAKwH,GAAYI,EAAgBnJ,IAA4B,MAAjBkJ,EAAwB,EAAI7oQ,KAAKD,UAAY,GAAK5nB,EAAMwvR,EAAM32R,OAIjR,IAHI03R,IACFpO,GAAmBvpM,IAAY1nE,IAAY0nE,GAEtCn+E,IAAMuF,GAA4B,OAApBoa,EAAOo1Q,EAAM/0R,IAAaA,IAAK,CAClD,GAAI41R,GAAaj2Q,EAAM,CACrBze,EAAI,EACJ,MAAO0xR,EAAU6C,EAAgBv0R,KAC/B,GAAI0xR,EAAQjzQ,EAAMw+D,EAASm0M,GAAM,CAC/BlnR,EAAQxF,KAAK+Z,GACb,MAGAm2Q,IACF/I,GAAUmJ,GAGVP,KACEh2Q,GAAQizQ,GAAWjzQ,IACrBo2Q,IAEEtG,GACFoD,EAAUjtR,KAAK+Z,IAKrB,GADAo2Q,GAAgB/1R,EACZ21R,GAAS31R,IAAM+1R,EAAc,CAC/B70R,EAAI,EACJ,MAAO0xR,EAAU8C,EAAYx0R,KAC3B0xR,EAAQC,EAAWmD,EAAY73M,EAASm0M,GAE1C,GAAI7C,EAAM,CACR,GAAIsG,EAAe,EACjB,MAAO/1R,IACC6yR,EAAU7yR,IAAMg2R,EAAWh2R,KAC/Bg2R,EAAWh2R,GAAK+vF,GAAI1vF,KAAK+K,IAI/B4qR,EAAa3B,GAAS2B,GAExBpwR,GAAKvH,MAAM+M,EAAS4qR,GAChBF,IAAcrG,GAAQuG,EAAW53R,OAAS,GAAK23R,EAAeL,EAAYt3R,OAAS,GACrFoxR,GAAOiC,WAAWrmR,GAOtB,OAJI0qR,IACF/I,GAAUmJ,EACVxO,GAAmBuO,GAEdpD,GAEX,OAAO8C,EAAQzF,GAAa2F,GAAgBA,EA/P9CnD,GAAWvyR,UAAYmnR,GAAK6O,QAAU7O,GAAKsG,QAC3CtG,GAAKoL,WAAa,IAAIA,GACtBlL,GAAWgI,GAAOhI,SAAW,SAAU/nQ,EAAU22Q,GAC/C,IAAIzD,EAASvpR,EAAOsqR,EAAQ5uR,EAAMuxR,EAAO34I,EAAQ44I,EAAYzrR,EAASqiR,GAAWztQ,EAAW,KAC5F,GAAI5U,EACF,OAAOurR,EAAY,EAAIvrR,EAAOpF,MAAM,GAEtC4wR,EAAQ52Q,EACRi+H,EAAS,GACT44I,EAAahP,GAAKwK,UAClB,MAAOuE,EAAO,CAgBZ,IAAKvxR,KAfA6tR,KAAYvpR,EAAQ0kR,GAAOpgM,KAAK2oM,MAC/BjtR,IACFitR,EAAQA,EAAM5wR,MAAM2D,EAAM,GAAGhL,SAAWi4R,GAE1C34I,EAAO93I,KAAK8tR,EAAS,KAEvBf,GAAU,GACNvpR,EAAQ2kR,GAAargM,KAAK2oM,MAC5B1D,EAAUvpR,EAAMs7E,QAChBgvM,EAAO9tR,KAAK,CACVrH,MAAOo0R,EACP7tR,KAAMsE,EAAM,GAAGuP,QAAQk1Q,GAAO,OAEhCwI,EAAQA,EAAM5wR,MAAMktR,EAAQv0R,SAEjBkpR,GAAKzkR,OACXykR,GAAKzkR,OAAOzC,eAAe0E,OAE3BsE,EAAQ+kR,GAAUrpR,GAAM4oF,KAAK2oM,KAAaC,EAAWxxR,MAAUsE,EAAQktR,EAAWxxR,GAAMsE,MAC3FupR,EAAUvpR,EAAMs7E,QAChBgvM,EAAO9tR,KAAK,CACVrH,MAAOo0R,EACP7tR,KAAMA,EACNqZ,QAAS/U,IAEXitR,EAAQA,EAAM5wR,MAAMktR,EAAQv0R,UAGhC,IAAKu0R,EACH,MAGJ,OAAOyD,EAAYC,EAAMj4R,OAASi4R,EAAQ7G,GAAOtrR,MAAMub,GAAYytQ,GAAWztQ,EAAUi+H,GAAQj4I,MAAM,IAsNxGgiR,GAAU+H,GAAO/H,QAAU,SAAUhoQ,EAAUrW,GAC7C,IAAIpJ,EAAG01R,EAAc,GAAID,EAAkB,GAAI5qR,EAASsiR,GAAc1tQ,EAAW,KACjF,IAAK5U,EAAQ,CACNzB,IACHA,EAAQo+Q,GAAS/nQ,IAEnBzf,EAAIoJ,EAAMhL,OACV,MAAO4B,IACL6K,EAASqqR,GAAkB9rR,EAAMpJ,IAC7B6K,EAAOmhR,IACT0J,EAAY9vR,KAAKiF,GAEjB4qR,EAAgB7vR,KAAKiF,GAGzBA,EAASsiR,GAAc1tQ,EAAU+1Q,GAAyBC,EAAiBC,IAC3E7qR,EAAO4U,SAAWA,EAEpB,OAAO5U,GAET8pF,GAAS66L,GAAO76L,OAAS,SAAUl1E,EAAU0+D,EAAS/yE,EAASqkR,GAC7D,IAAIzvR,EAAG0zR,EAAQ6C,EAAOzxR,EAAMgC,EAAM0vR,EAA+B,oBAAb/2Q,GAA2BA,EAAUrW,GAASqmR,GAAQjI,GAAS/nQ,EAAW+2Q,EAAS/2Q,UAAYA,GAEnJ,GADArU,EAAUA,GAAW,GACA,IAAjBhC,EAAMhL,OAAc,CAEtB,GADAs1R,EAAStqR,EAAM,GAAKA,EAAM,GAAG3D,MAAM,GAC/BiuR,EAAOt1R,OAAS,GAAkC,QAA5Bm4R,EAAQ7C,EAAO,IAAI5uR,MAAiBuiR,GAAQzmL,SAAgC,IAArBziB,EAAQz+D,UAAkBooQ,IAAkBR,GAAKn8O,SAASuoP,EAAO,GAAG5uR,MAAO,CAE1J,GADAq5E,GAAWmpM,GAAKxgR,KAAKsnR,GAAGmI,EAAMp4Q,QAAQ,GAAGxF,QAAQu2Q,GAAWC,IAAYhxM,IAAY,IAAI,IACnFA,EACH,OAAO/yE,EACEorR,IACTr4M,EAAUA,EAAQp9D,YAEpBtB,EAAWA,EAASha,MAAMiuR,EAAOhvM,QAAQnmF,MAAMH,QAEjD4B,EAAImuR,GAAUQ,aAAav2Q,KAAKqH,GAAY,EAAIi0Q,EAAOt1R,OACvD,MAAO4B,IAAK,CAEV,GADAu2R,EAAQ7C,EAAO1zR,GACXsnR,GAAKn8O,SAASrmC,EAAOyxR,EAAMzxR,MAC7B,MAEF,IAAIgC,EAAOwgR,GAAKxgR,KAAKhC,MACf2qR,EAAO3oR,EAAKyvR,EAAMp4Q,QAAQ,GAAGxF,QAAQu2Q,GAAWC,IAAYH,GAAS52Q,KAAKs7Q,EAAO,GAAG5uR,OAASirR,GAAY5xM,EAAQp9D,aAAeo9D,IAAU,CAG5I,GAFAu1M,EAAOxjM,OAAOlwF,EAAG,GACjByf,EAAWgwQ,EAAKrxR,QAAU0xR,GAAW4D,IAChCj0Q,EAEH,OADA7Z,GAAKvH,MAAM+M,EAASqkR,GACbrkR,EAET,QAMR,OADCorR,GAAY/O,GAAQhoQ,EAAUrW,IAAQqmR,EAAMtxM,GAAU2pM,GAAgB18Q,EAAS4jR,GAAS52Q,KAAKqH,IAAaswQ,GAAY5xM,EAAQp9D,aAAeo9D,GACvI/yE,GAETi8Q,GAAQuK,WAAa5F,GAAQ18P,MAAM,IAAI/nB,KAAK6lR,IAAW7jR,KAAK,MAAQyiR,GACpE3E,GAAQsK,mBAAqB/J,GAC7BC,KACAR,GAAQ2J,cAAe,EAEvB,IAAIx6Q,GAAM9Y,EAAW+Y,SAAUggR,GAAS11R,MAAMZ,UAAUyF,KAAM8wR,GAAU31R,MAAMZ,UAAUsF,MACpFkxR,GAAe,2CACf9tC,GAAQkjC,GAAWljC,MACnB+tC,GAAcn3R,GAAMw7I,QAAQ,+BAC5B47I,GAAY,SAAU7uR,GACxB,MAAsB,qBAARA,GAEZ8uR,GAAa,SAAU9uR,GACzB,MAAsB,kBAARA,GAEZ+uR,GAAW,SAAU/uR,GACvB,OAAOA,GAAOA,IAAQA,EAAIiW,QAExB6lL,GAAiB,SAAUxtL,EAAM0gR,GACnC,IAAIC,EAAM//Q,EAAM6T,EAChBisQ,EAAUA,GAAWxgR,GACrBuU,EAAYisQ,EAAQrgR,cAAc,OAClCsgR,EAAOD,EAAQpsQ,yBACfG,EAAUnU,UAAYN,EACtB,MAAOY,EAAO6T,EAAUhC,WACtBkuQ,EAAKvtQ,YAAYxS,GAEnB,OAAO+/Q,GAELC,GAAgB,SAAUC,EAAaC,EAAYpjM,EAAU/sF,GAC/D,IAAIjH,EACJ,GAAI82R,GAAWM,GACbA,EAAatzF,GAAeszF,EAAYC,GAAmBF,EAAY,UAClE,GAAIC,EAAWh5R,SAAWg5R,EAAW13Q,SAAU,CAEpD,GADA03Q,EAAaE,GAASC,UAAUH,GAC5BnwR,EACF,IAAKjH,EAAIo3R,EAAWh5R,OAAS,EAAG4B,GAAK,EAAGA,IACtCk3R,GAAcC,EAAaC,EAAWp3R,GAAIg0F,EAAU/sF,QAGtD,IAAKjH,EAAI,EAAGA,EAAIo3R,EAAWh5R,OAAQ4B,IACjCk3R,GAAcC,EAAaC,EAAWp3R,GAAIg0F,EAAU/sF,GAGxD,OAAOkwR,EAET,GAAIC,EAAW13Q,SAAU,CACvB1f,EAAIm3R,EAAY/4R,OAChB,MAAO4B,IACLg0F,EAAS3zF,KAAK82R,EAAYn3R,GAAIo3R,GAGlC,OAAOD,GAEL54E,GAAW,SAAUrnM,EAAMm6H,GAC7B,OAAOn6H,GAAQm6H,IAA8E,KAAhE,IAAMn6H,EAAKm6H,UAAY,KAAK5wI,QAAQ,IAAM4wI,EAAY,MAEjFhkI,GAAS,SAAUwc,EAAUQ,EAASvrB,GACxC,IAAI04R,EAAYC,EAahB,OAZAptQ,EAAUitQ,GAASjtQ,GAAS,GAC5BR,EAASpnB,MAAK,WACZ,IAAIY,EAAO/C,KACNxB,GAAO04R,IAAen0R,EAAK0d,aAC9By2Q,EAAan0R,EAAK0d,WAClB02Q,EAAaptQ,EAAQW,WAAU,GAC/B3nB,EAAK0d,WAAWqI,aAAaquQ,EAAYp0R,IAGzCo0R,EAAW/tQ,YAAYrmB,MAGpBwmB,GAEL6tQ,GAAgBj4R,GAAMw7I,QAAQ,uEAAwE,KACtG08I,GAAal4R,GAAMw7I,QAAQ,gGAAiG,KAC5H28I,GAAU,CACZC,IAAK,UACL76E,MAAO,YACPt3D,SAAU,YAERoyI,GAAS,CAAEC,MAAO,YAClBC,GAAY,GAAIC,GAAW,GAC3BC,GAAsB,SAAUz4Q,EAAU0+D,GAC5C,OAAO,IAAIm5M,GAAS34R,GAAG0xB,KAAK5Q,EAAU0+D,IAEpCg6M,GAAY,SAAU9gQ,EAAMjxB,GAC9B,IAAIpG,EACJ,GAAIoG,EAAM3F,QACR,OAAO2F,EAAM3F,QAAQ42B,GAEvBr3B,EAAIoG,EAAMhI,OACV,MAAO4B,IACL,GAAIoG,EAAMpG,KAAOq3B,EACf,OAAOr3B,EAGX,OAAQ,GAENo4R,GAAqB,aACrBC,GAAS,SAAUn7Q,GACrB,OAAe,OAARA,QAAwB7a,IAAR6a,EAAoB,IAAM,GAAKA,GAAKvE,QAAQy/Q,GAAoB,KAErFE,GAAS,SAAUtwR,EAAKgsF,GAC1B,IAAI51F,EAAQqK,EAAKzI,EAAGzB,EACpB,GAAIyJ,EAEF,GADA5J,EAAS4J,EAAI5J,YACEiE,IAAXjE,GACF,IAAKqK,KAAOT,EACV,GAAIA,EAAI5H,eAAeqI,KACrBlK,EAAQyJ,EAAIS,IAC6B,IAArCurF,EAAS3zF,KAAK9B,EAAOkK,EAAKlK,IAC5B,WAKN,IAAKyB,EAAI,EAAGA,EAAI5B,EAAQ4B,IAEtB,GADAzB,EAAQyJ,EAAIhI,IAC2B,IAAnCg0F,EAAS3zF,KAAK9B,EAAOyB,EAAGzB,GAC1B,MAKR,OAAOyJ,GAEL81L,GAAO,SAAU13L,EAAO4tF,GAC1B,IAAI04B,EAAM,GAMV,OALA4rK,GAAOlyR,GAAO,SAAUpG,EAAGq3B,GACrB28D,EAAS38D,EAAMr3B,IACjB0sH,EAAI9mH,KAAKyxB,MAGNq1F,GAEL2qK,GAAqB,SAAU73Q,GACjC,OAAKA,EAGoB,IAArBA,EAAQE,SACHF,EAEFA,EAAQ6I,cALN7R,IAOX0hR,GAAoBv5R,GAAKu5R,GAAoB/3R,UAAY,CACvDwE,YAAauzR,GACbz4Q,SAAU,GACV0+D,QAAS,KACT//E,OAAQ,EACRiyB,KAAM,SAAU5Q,EAAU0+D,GACxB,IACI/0E,EAAO8N,EADP7T,EAAO/C,KAEX,IAAKmf,EACH,OAAOpc,EAET,GAAIoc,EAASC,SAGX,OAFArc,EAAK86E,QAAU96E,EAAK,GAAKoc,EACzBpc,EAAKjF,OAAS,EACPiF,EAET,GAAI86E,GAAWA,EAAQz+D,SACrBrc,EAAK86E,QAAUA,MACV,CACL,GAAIA,EACF,OAAOm5M,GAAS73Q,GAAUuV,KAAKmpD,GAEjC96E,EAAK86E,QAAUA,EAAUzgF,EAAW+Y,SAEtC,GAAIqgR,GAAWr3Q,GAAW,CAWxB,GAVApc,EAAKoc,SAAWA,EAEdrW,EADyB,MAAvBqW,EAASm8D,OAAO,IAAuD,MAAzCn8D,EAASm8D,OAAOn8D,EAASrhB,OAAS,IAAcqhB,EAASrhB,QAAU,EAC3F,CACN,KACAqhB,EACA,MAGMk3Q,GAAajpM,KAAKjuE,IAExBrW,EAmBF,OAAOkuR,GAASn5M,GAASr3E,KAAK2Y,GAlB9B,GAAIrW,EAAM,GAAI,CACZ8N,EAAO4sL,GAAerkL,EAAU43Q,GAAmBl5M,IAAUp1D,WAC7D,MAAO7R,EACLu/Q,GAAOp2R,KAAKgD,EAAM6T,GAClBA,EAAOA,EAAKwR,gBAET,CAEL,GADAxR,EAAOmgR,GAAmBl5M,GAASqiD,eAAep3H,EAAM,KACnD8N,EACH,OAAO7T,EAET,GAAI6T,EAAKvV,KAAOyH,EAAM,GACpB,OAAO/F,EAAKyD,KAAK2Y,GAEnBpc,EAAKjF,OAAS,EACdiF,EAAK,GAAK6T,QAMd5W,KAAK20B,IAAIxV,GAAU,GAErB,OAAOpc,GAETL,QAAS,WACP,OAAOvD,GAAMuD,QAAQ1C,OAEvB20B,IAAK,SAAUowB,EAAO99C,GACpB,IACIm1L,EAAO18L,EADPqD,EAAO/C,KAEX,GAAIw2R,GAAWzxO,GACb,OAAOhiD,EAAK4xB,IAAIqiQ,GAASjyO,IAE3B,IAAa,IAAT99C,EAGF,IAFAm1L,EAAQ46F,GAAS1qQ,OAAOvpB,EAAKL,UAAUjE,OAAOu4R,GAASC,UAAUlyO,KACjEhiD,EAAKjF,OAASs+L,EAAMt+L,OACf4B,EAAI,EAAGA,EAAI08L,EAAMt+L,OAAQ4B,IAC5BqD,EAAKrD,GAAK08L,EAAM18L,QAGlBy2R,GAAOp4R,MAAMgF,EAAMi0R,GAASC,UAAUlyO,IAExC,OAAOhiD,GAET2xB,KAAM,SAAUpwB,EAAMrG,GACpB,IACIg6R,EADAl1R,EAAO/C,KAEX,GAAoB,kBAATsE,EACT0zR,GAAO1zR,GAAM,SAAUA,EAAMrG,GAC3B8E,EAAK2xB,KAAKpwB,EAAMrG,UAEb,KAAIs4R,GAAUt4R,GAgBd,CACL,GAAI8E,EAAK,IAA2B,IAArBA,EAAK,GAAGqc,SAAgB,CAErC,GADA64Q,EAAOP,GAAUpzR,GACb2zR,GAAQA,EAAK/vR,IACf,OAAO+vR,EAAK/vR,IAAInF,EAAK,GAAIuB,GAE3B,GAAI+yR,GAAW/yR,GACb,OAAOvB,EAAKuM,KAAKhL,GAAQA,OAAOvC,EAElC9D,EAAQ8E,EAAK,GAAGuoB,aAAahnB,EAAM,GACrB,OAAVrG,IACFA,OAAQ8D,GAGZ,OAAO9D,EA7BP+B,KAAKmC,MAAK,WACR,IAAI81R,EACJ,GAAsB,IAAlBj4R,KAAKof,SAAgB,CAEvB,GADA64Q,EAAOP,GAAUpzR,GACb2zR,GAAQA,EAAKpiR,IAEf,YADAoiR,EAAKpiR,IAAI7V,KAAM/B,GAGH,OAAVA,EACF+B,KAAK2rB,gBAAgBrnB,EAAM,GAE3BtE,KAAKirB,aAAa3mB,EAAMrG,EAAO,OAoBvC,OAAO8E,GAETm1R,WAAY,SAAU5zR,GACpB,OAAOtE,KAAK00B,KAAKpwB,EAAM,OAEzBgL,KAAM,SAAUhL,EAAMrG,GACpB,IAAI8E,EAAO/C,KAEX,GADAsE,EAAOgzR,GAAQhzR,IAASA,EACJ,kBAATA,EACT0zR,GAAO1zR,GAAM,SAAUA,EAAMrG,GAC3B8E,EAAKuM,KAAKhL,EAAMrG,UAEb,KAAIs4R,GAAUt4R,GAOnB,OAAI8E,EAAK,IAAMA,EAAK,GAAGqc,UAAY9a,KAAQvB,EAAK,GACvCA,EAAK,GAAGuB,GAEVrG,EATP+B,KAAKmC,MAAK,WACc,IAAlBnC,KAAKof,WACPpf,KAAKsE,GAAQrG,MASnB,OAAO8E,GAETuzB,IAAK,SAAUhyB,EAAMrG,GACnB,IACI08E,EAAKs9M,EADLl1R,EAAO/C,KAEPm4R,EAAQ,SAAU7zR,GACpB,OAAOA,EAAK+T,QAAQ,UAAU,SAAU1X,EAAGuC,GACzC,OAAOA,EAAEwtF,kBAGT0nM,EAAS,SAAU9zR,GACrB,OAAOA,EAAK+T,QAAQ,UAAU,SAAU1X,GACtC,MAAO,IAAMA,MAGjB,GAAoB,kBAAT2D,EACT0zR,GAAO1zR,GAAM,SAAUA,EAAMrG,GAC3B8E,EAAKuzB,IAAIhyB,EAAMrG,WAGjB,GAAIs4R,GAAUt4R,GACZqG,EAAO6zR,EAAM7zR,GACQ,kBAAVrG,GAAuBm5R,GAAc9yR,KAC9CrG,EAAQA,EAAM0E,WAAa,MAE7BI,EAAKZ,MAAK,WACR,IAAIuzB,EAAQ11B,KAAK01B,MAEjB,GADAuiQ,EAAON,GAASrzR,GACZ2zR,GAAQA,EAAKpiR,IACfoiR,EAAKpiR,IAAI7V,KAAM/B,OADjB,CAIA,IACE+B,KAAK01B,MAAM8hQ,GAAOlzR,IAASA,GAAQrG,EACnC,MAAOgpG,IAEK,OAAVhpG,GAA4B,KAAVA,IAChBy3B,EAAMS,eACRT,EAAMS,eAAeiiQ,EAAO9zR,IAE5BoxB,EAAM/J,gBAAgBrnB,YAIvB,CAGL,GAFAq2E,EAAM53E,EAAK,GACXk1R,EAAON,GAASrzR,GACZ2zR,GAAQA,EAAK/vR,IACf,OAAO+vR,EAAK/vR,IAAIyyE,GAElB,IAAIA,EAAI5yD,cAAcE,YAMf,OAAI0yD,EAAIsjK,aACNtjK,EAAIsjK,aAAak6C,EAAM7zR,IAEvB,GARP,IACE,OAAOq2E,EAAI5yD,cAAcE,YAAYwO,iBAAiBkkD,EAAK,MAAMhlD,iBAAiByiQ,EAAO9zR,IACzF,MAAO2iG,GACP,QASR,OAAOlkG,GAET6mB,OAAQ,WACN,IACIhT,EADA7T,EAAO/C,KACDN,EAAIM,KAAKlC,OACnB,MAAO4B,IACLkX,EAAO7T,EAAKrD,GACZ6oP,GAAM3wB,MAAMhhN,GACRA,EAAK6J,YACP7J,EAAK6J,WAAWoJ,YAAYjT,GAGhC,OAAO5W,MAETypB,MAAO,WACL,IACI7S,EADA7T,EAAO/C,KACDN,EAAIM,KAAKlC,OACnB,MAAO4B,IAAK,CACVkX,EAAO7T,EAAKrD,GACZ,MAAOkX,EAAK6R,WACV7R,EAAKiT,YAAYjT,EAAK6R,YAG1B,OAAOzoB,MAETgW,KAAM,SAAU/X,GACd,IACIyB,EADAqD,EAAO/C,KAEX,GAAIu2R,GAAUt4R,GAAQ,CACpByB,EAAIqD,EAAKjF,OACT,IACE,MAAO4B,IACLqD,EAAKrD,GAAG4W,UAAYrY,EAEtB,MAAOgpG,GACP+vL,GAASj0R,EAAKrD,IAAI+pB,QAAQR,OAAOhrB,GAEnC,OAAO8E,EAET,OAAOA,EAAK,GAAKA,EAAK,GAAGuT,UAAY,IAEvCQ,KAAM,SAAU7Y,GACd,IACIyB,EADAqD,EAAO/C,KAEX,GAAIu2R,GAAUt4R,GAAQ,CACpByB,EAAIqD,EAAKjF,OACT,MAAO4B,IACD,cAAeqD,EAAKrD,GACtBqD,EAAKrD,GAAGg5I,UAAYz6I,EAEpB8E,EAAK,GAAG2mB,YAAczrB,EAG1B,OAAO8E,EAET,OAAOA,EAAK,GAAKA,EAAK,GAAG21I,WAAa31I,EAAK,GAAG2mB,YAAc,IAE9DT,OAAQ,WACN,OAAO2tQ,GAAc52R,KAAMnC,WAAW,SAAU+Y,IACxB,IAAlB5W,KAAKof,UAAkBpf,KAAK44L,MAA+B,IAAvB54L,KAAK44L,KAAKx5K,WAChDpf,KAAKopB,YAAYxS,OAIvBsS,QAAS,WACP,OAAO0tQ,GAAc52R,KAAMnC,WAAW,SAAU+Y,IACxB,IAAlB5W,KAAKof,UAAkBpf,KAAK44L,MAA+B,IAAvB54L,KAAK44L,KAAKx5K,WAChDpf,KAAK8oB,aAAalS,EAAM5W,KAAKyoB,eAE9B,IAELE,OAAQ,WACN,IAAI5lB,EAAO/C,KACX,OAAI+C,EAAK,IAAMA,EAAK,GAAG0d,WACdm2Q,GAAc7zR,EAAMlF,WAAW,SAAU+Y,GAC9C5W,KAAKygB,WAAWqI,aAAalS,EAAM5W,SAGhC+C,GAETgmB,MAAO,WACL,IAAIhmB,EAAO/C,KACX,OAAI+C,EAAK,IAAMA,EAAK,GAAG0d,WACdm2Q,GAAc7zR,EAAMlF,WAAW,SAAU+Y,GAC9C5W,KAAKygB,WAAWqI,aAAalS,EAAM5W,KAAKooB,gBACvC,GAEErlB,GAET49H,SAAU,SAAU31H,GAElB,OADAgsR,GAAShsR,GAAKie,OAAOjpB,MACdA,MAETq4R,UAAW,SAAUrtR,GAEnB,OADAgsR,GAAShsR,GAAKke,QAAQlpB,MACfA,MAETs4R,YAAa,SAAUpuQ,GACrB,OAAOlqB,KAAK2oB,OAAOuB,GAASN,UAE9Bzd,KAAM,SAAU+d,GACd,OAAOnd,GAAO/M,KAAMkqB,IAEtB7d,QAAS,SAAU6d,GACjB,OAAOnd,GAAO/M,KAAMkqB,GAAS,IAE/BquQ,UAAW,SAAUruQ,GAInB,OAHAlqB,KAAKmC,MAAK,WACR60R,GAASh3R,MAAMyiD,WAAWp2C,QAAQ6d,MAE7BlqB,MAET8pB,OAAQ,WACN,OAAO9pB,KAAKkoB,SAAS/lB,MAAK,WACxB60R,GAASh3R,MAAMs4R,YAAYt4R,KAAKwW,gBAGpCV,MAAO,WACL,IAAIjJ,EAAS,GAIb,OAHA7M,KAAKmC,MAAK,WACR0K,EAAOvH,KAAKtF,KAAK0qB,WAAU,OAEtBssQ,GAASnqR,IAElBugK,SAAU,SAAUr8B,GAClB,OAAO/wI,KAAKkkE,YAAY6sE,GAAW,IAErCs8B,YAAa,SAAUt8B,GACrB,OAAO/wI,KAAKkkE,YAAY6sE,GAAW,IAErC7sE,YAAa,SAAU6sE,EAAWniI,GAChC,IAAI7L,EAAO/C,KACX,MAAyB,kBAAd+wI,KAGqB,IAA5BA,EAAU5wI,QAAQ,KACpB63R,GAAOjnJ,EAAU/hH,MAAM,MAAM,WAC3BjsB,EAAKmhE,YAAYlkE,KAAM4O,MAGzB7L,EAAKZ,MAAK,SAAUomB,EAAO3R,GACzB,IAAI4hR,EAAmBC,EACvBA,EAAax6E,GAASrnM,EAAMm6H,GACxB0nJ,IAAe7pR,IACjB4pR,EAAoB5hR,EAAKm6H,UACrB0nJ,EACF7hR,EAAKm6H,UAAYgnJ,IAAQ,IAAMS,EAAoB,KAAKngR,QAAQ,IAAM04H,EAAY,IAAK,MAEvFn6H,EAAKm6H,WAAaynJ,EAAoB,IAAMznJ,EAAYA,OAfvDhuI,GAsBXk7M,SAAU,SAAUltE,GAClB,OAAOktE,GAASj+M,KAAK,GAAI+wI,IAE3B5uI,KAAM,SAAUuxF,GACd,OAAOskM,GAAOh4R,KAAM0zF,IAEtBzkD,GAAI,SAAU3qC,EAAMovF,GAClB,OAAO1zF,KAAKmC,MAAK,WACfomP,GAAMnmP,KAAKpC,KAAMsE,EAAMovF,OAG3BvkD,IAAK,SAAU7qC,EAAMovF,GACnB,OAAO1zF,KAAKmC,MAAK,WACfomP,GAAMrrN,OAAOl9B,KAAMsE,EAAMovF,OAG7B80J,QAAS,SAAUlkP,GACjB,OAAOtE,KAAKmC,MAAK,WACK,kBAATmC,EACTikP,GAAM72J,KAAK1xF,KAAMsE,EAAKE,KAAMF,GAE5BikP,GAAM72J,KAAK1xF,KAAMsE,OAIvBk+E,KAAM,WACJ,OAAOxiF,KAAKs2B,IAAI,UAAW,KAE7Bw6C,KAAM,WACJ,OAAO9wE,KAAKs2B,IAAI,UAAW,SAE7BnxB,MAAO,WACL,OAAO,IAAI6xR,GAASZ,GAAQr4R,MAAMiC,KAAMnC,aAE1CoD,GAAI,SAAUsnB,GACZ,OAAkB,IAAXA,EAAevoB,KAAKmF,MAAMojB,GAASvoB,KAAKmF,MAAMojB,GAAQA,EAAQ,IAEvEsxC,MAAO,WACL,OAAO75D,KAAKiB,GAAG,IAEjBoG,KAAM,WACJ,OAAOrH,KAAKiB,IAAI,IAElBuF,KAAM,SAAU2Y,GACd,IAAIzf,EAAG8zG,EACHppG,EAAM,GACV,IAAK1K,EAAI,EAAG8zG,EAAIxzG,KAAKlC,OAAQ4B,EAAI8zG,EAAG9zG,IAClCs3R,GAASxwR,KAAK2Y,EAAUnf,KAAKN,GAAI0K,GAEnC,OAAO4sR,GAAS5sR,IAElB7H,OAAQ,SAAU4c,GAChB,OACS63Q,GADe,oBAAb73Q,EACOq+K,GAAKx9L,KAAK0C,WAAW,SAAUq0B,EAAMr3B,GACnD,OAAOyf,EAASzf,EAAGq3B,MAGPigQ,GAASz0R,OAAO4c,EAAUnf,KAAK0C,aAEjDke,QAAS,SAAUzB,GACjB,IAAItS,EAAS,GAgBb,OAfIsS,aAAoB63Q,KACtB73Q,EAAWA,EAAS,IAEtBnf,KAAKmC,MAAK,SAAUzC,EAAGkX,GACrB,MAAOA,EAAM,CACX,GAAwB,kBAAbuI,GAAyB63Q,GAASpgR,GAAMpV,GAAG2d,GAAW,CAC/DtS,EAAOvH,KAAKsR,GACZ,MACK,GAAIA,IAASuI,EAAU,CAC5BtS,EAAOvH,KAAKsR,GACZ,MAEFA,EAAOA,EAAK6J,eAGTu2Q,GAASnqR,IAElBoyB,OAAQ,SAAUA,GAChB,IAAI07C,EAAKzkE,EAAKgB,EACI40B,EAAd3tC,EAAI,EAAGgZ,EAAI,EACf,OAAK8nB,EAgBEj/B,KAAKs2B,IAAI2I,IAfd07C,EAAM36E,KAAK,GACP26E,IACFzkE,EAAMykE,EAAI5yD,cACV7Q,EAAShB,EAAI8R,gBACT2yD,EAAIpgD,wBACNuR,EAAM6uC,EAAIpgD,wBACVp8B,EAAI2tC,EAAI/Q,MAAQ7jB,EAAO0kB,YAAc1lB,EAAI2f,KAAK+F,YAAc1kB,EAAO6kB,WACnE5kB,EAAI20B,EAAI9Q,KAAO9jB,EAAOwkB,WAAaxlB,EAAI2f,KAAK6F,WAAaxkB,EAAO4kB,YAG7D,CACLf,KAAM58B,EACN68B,IAAK7jB,KAKX7R,KAAM6wR,GACNlvR,KAAMxG,MAAMZ,UAAUoH,KACtB2oF,OAAQnvF,MAAMZ,UAAU+vF,QAE1BzwF,GAAM4jI,OAAO60J,GAAqB,CAChC70J,OAAQ5jI,GAAM4jI,OACdk0J,UAAW,SAAUyB,GACnB,OAAIjC,GAASiC,IAAWA,EAAOt5Q,SACtB,CAACs5Q,GAEHv5R,GAAMuD,QAAQg2R,IAEvB1pF,QAAS6oF,GACTlzR,QAASxF,GAAMwF,QACfxC,KAAM61R,GACN96Q,KAAM66Q,GACNv6F,KAAMA,GACNh3L,KAAM0oR,GACN4B,KAAM5B,GAAOnxN,UACbzxC,OAAQ4iQ,GAAOiC,WACfr6Q,KAAMo4Q,GAAOn0M,QACbr1E,SAAUwpR,GAAOxpR,SACjBnD,OAAQ,SAAUuuR,EAAM2D,EAAO/1R,GAC7B,IAAIgB,EAAI+0R,EAAM32R,OACVY,IACFoyR,EAAO,QAAUA,EAAO,KAE1B,MAAOpxR,IACqB,IAAtB+0R,EAAM/0R,GAAG0f,UACXq1Q,EAAM7kM,OAAOlwF,EAAG,GAQpB,OAJE+0R,EADmB,IAAjBA,EAAM32R,OACAk5R,GAASxwR,KAAKuqR,gBAAgB0D,EAAM,GAAI3D,GAAQ,CAAC2D,EAAM,IAAM,GAE7DuC,GAASxwR,KAAKqX,QAAQizQ,EAAM2D,GAE/BA,KAGX,IAAI9vP,GAAM,SAAUjkB,EAAIpR,EAAMqpR,GAC5B,IAAItG,EAAU,GACV59F,EAAM/zK,EAAGpR,GACQ,kBAAVqpR,GAAsBA,aAAiB3B,KAChD2B,EAAQA,EAAM,IAEhB,MAAOlkG,GAAwB,IAAjBA,EAAIr1K,SAAgB,CAChC,QAAcrd,IAAV42R,EAAqB,CACvB,GAAIlkG,IAAQkkG,EACV,MAEF,GAAqB,kBAAVA,GAAsB3B,GAASviG,GAAKjzL,GAAGm3R,GAChD,MAGiB,IAAjBlkG,EAAIr1K,UACNizQ,EAAQ/sR,KAAKmvL,GAEfA,EAAMA,EAAInlL,GAEZ,OAAO+iR,GAELrpQ,GAAU,SAAUpS,EAAMgiR,EAAax5Q,EAAUu5Q,GACnD,IAAI9rR,EAAS,GAIb,IAHI8rR,aAAiB3B,KACnB2B,EAAQA,EAAM,IAET/hR,EAAMA,EAAOA,EAAKgiR,GACvB,IAAIx5Q,GAAYxI,EAAKwI,WAAaA,EAAlC,CAGA,QAAcrd,IAAV42R,EAAqB,CACvB,GAAI/hR,IAAS+hR,EACX,MAEF,GAAqB,kBAAVA,GAAsB3B,GAASpgR,GAAMpV,GAAGm3R,GACjD,MAGJ9rR,EAAOvH,KAAKsR,GAEd,OAAO/J,GAELgsR,GAAe,SAAUjiR,EAAMgiR,EAAax5Q,GAC9C,IAAKxI,EAAOA,EAAKgiR,GAAchiR,EAAMA,EAAOA,EAAKgiR,GAC/C,GAAIhiR,EAAKwI,WAAaA,EACpB,OAAOxI,EAGX,OAAO,MAETohR,GAAO,CACL9vQ,OAAQ,SAAUtR,GAChB,IAAIsR,EAAStR,EAAK6J,WAClB,OAAOyH,GAA8B,KAApBA,EAAO9I,SAAkB8I,EAAS,MAErD0rI,QAAS,SAAUh9I,GACjB,OAAO+tB,GAAI/tB,EAAM,eAEnBpD,KAAM,SAAUoD,GACd,OAAOiiR,GAAajiR,EAAM,cAAe,IAE3CmsJ,KAAM,SAAUnsJ,GACd,OAAOiiR,GAAajiR,EAAM,kBAAmB,IAE/CyR,SAAU,SAAUzR,GAClB,OAAOoS,GAAQpS,EAAK6R,WAAY,cAAe,IAEjDg6B,SAAU,SAAU7rC,GAClB,OAAOzX,GAAMuD,SAA2B,WAAlBkU,EAAKgU,SAAwBhU,EAAK+vL,iBAAmB/vL,EAAKwwG,cAAcjxG,SAAWS,GAAMJ,eAEhH,SAAUlS,EAAMjG,GACjBu5R,GAAoBv5R,GAAGiG,GAAQ,SAAU6a,GACvC,IAAIpc,EAAO/C,KACP6M,EAAS,GACb9J,EAAKZ,MAAK,WACR,IAAIi6L,EAAQ/9L,EAAG0B,KAAK8M,EAAQ7M,KAAMmf,EAAUtS,GACxCuvL,IACE46F,GAASryR,QAAQy3L,GACnBvvL,EAAOvH,KAAKvH,MAAM8O,EAAQuvL,GAE1BvvL,EAAOvH,KAAK82L,OAIdp8L,KAAKlC,OAAS,IACXw4R,GAAYhyR,KACfuI,EAASmqR,GAAS1qQ,OAAOzf,IAEK,IAA5BvI,EAAKnE,QAAQ,aACf0M,EAASA,EAAOlG,YAGpB,IAAImyR,EAAgB9B,GAASnqR,GAC7B,OAAIsS,EACK25Q,EAAcv2R,OAAO4c,GAEvB25Q,MAGXd,GAAO,CACLe,aAAc,SAAUniR,EAAM+hR,GAC5B,OAAOh0P,GAAI/tB,EAAM,aAAc+hR,IAEjCK,UAAW,SAAUpiR,EAAM+hR,GACzB,OAAO3vQ,GAAQpS,EAAM,cAAe,EAAG+hR,GAAOxzR,MAAM,IAEtD8zR,UAAW,SAAUriR,EAAM+hR,GACzB,OAAO3vQ,GAAQpS,EAAM,kBAAmB,EAAG+hR,GAAOxzR,MAAM,MAEzD,SAAUb,EAAMjG,GACjBu5R,GAAoBv5R,GAAGiG,GAAQ,SAAU6a,EAAU5c,GACjD,IAAIQ,EAAO/C,KACP6M,EAAS,GACb9J,EAAKZ,MAAK,WACR,IAAIi6L,EAAQ/9L,EAAG0B,KAAK8M,EAAQ7M,KAAMmf,EAAUtS,GACxCuvL,IACE46F,GAASryR,QAAQy3L,GACnBvvL,EAAOvH,KAAKvH,MAAM8O,EAAQuvL,GAE1BvvL,EAAOvH,KAAK82L,OAIdp8L,KAAKlC,OAAS,IAChB+O,EAASmqR,GAAS1qQ,OAAOzf,GACO,IAA5BvI,EAAKnE,QAAQ,YAA6B,cAATmE,IACnCuI,EAASA,EAAOlG,YAGpB,IAAImyR,EAAgB9B,GAASnqR,GAC7B,OAAItK,EACKu2R,EAAcv2R,OAAOA,GAEvBu2R,MAGXlB,GAAoBv5R,GAAGmD,GAAK,SAAU2d,GACpC,QAASA,GAAYnf,KAAKuC,OAAO4c,GAAUrhB,OAAS,GAEtD85R,GAAoBv5R,GAAG0xB,KAAKlwB,UAAY+3R,GAAoBv5R,GAC5Du5R,GAAoBsB,iBAAmB,SAAUxlM,GAC/C,IAAInpC,EACA+kL,EAAM,SAAUnwN,EAAU0+D,GAQ5B,OAPAtzB,EAAWA,GAAYmpC,IACE,IAArB71F,UAAUC,SACZqhB,EAAWorC,EAASrrC,SAEjB2+D,IACHA,EAAUtzB,EAASszB,SAEd,IAAIyxJ,EAAIjxO,GAAG0xB,KAAK5Q,EAAU0+D,IAGnC,OADAm5M,GAASj0J,OAAOusG,EAAKtvO,MACdsvO,GAETsoD,GAAoBF,UAAYA,GAChCE,GAAoBD,SAAWA,GAC/B,IAAIX,GAAWY,GAEXuB,GAAa,WACf,SAASA,EAAWhrI,EAAWj0E,GAC7Bl6E,KAAK4W,KAAOu3I,EACZnuJ,KAAKk6E,SAAWA,EAChBl6E,KAAKoZ,QAAUpZ,KAAKoZ,QAAQhX,KAAKpC,MACjCA,KAAKwT,KAAOxT,KAAKwT,KAAKpR,KAAKpC,MAC3BA,KAAK+iK,KAAO/iK,KAAK+iK,KAAK3gK,KAAKpC,MAC3BA,KAAKo5R,MAAQp5R,KAAKo5R,MAAMh3R,KAAKpC,MA4D/B,OA1DAm5R,EAAWt5R,UAAUuZ,QAAU,WAC7B,OAAOpZ,KAAK4W,MAEduiR,EAAWt5R,UAAU2T,KAAO,SAAU7J,GAEpC,OADA3J,KAAK4W,KAAO5W,KAAKq5R,YAAYr5R,KAAK4W,KAAM,aAAc,cAAejN,GAC9D3J,KAAK4W,MAEduiR,EAAWt5R,UAAUkjK,KAAO,SAAUp5J,GAEpC,OADA3J,KAAK4W,KAAO5W,KAAKq5R,YAAYr5R,KAAK4W,KAAM,YAAa,kBAAmBjN,GACjE3J,KAAK4W,MAEduiR,EAAWt5R,UAAUu5R,MAAQ,SAAUzvR,GAErC,OADA3J,KAAK4W,KAAO5W,KAAKs5R,iBAAiBt5R,KAAK4W,KAAM,YAAa,kBAAmBjN,GACtE3J,KAAK4W,MAEduiR,EAAWt5R,UAAUw5R,YAAc,SAAUziR,EAAM2iR,EAAWX,EAAajvR,GACzE,IAAIqf,EAASd,EACb,GAAItR,EAAM,CACR,IAAKjN,GAAWiN,EAAK2iR,GACnB,OAAO3iR,EAAK2iR,GAEd,GAAI3iR,IAAS5W,KAAKk6E,SAAU,CAE1B,GADAlxD,EAAUpS,EAAKgiR,GACX5vQ,EACF,OAAOA,EAET,IAAKd,EAAStR,EAAK6J,WAAYyH,GAAUA,IAAWloB,KAAKk6E,SAAUhyD,EAASA,EAAOzH,WAEjF,GADAuI,EAAUd,EAAO0wQ,GACb5vQ,EACF,OAAOA,KAMjBmwQ,EAAWt5R,UAAUy5R,iBAAmB,SAAU1iR,EAAM2iR,EAAWX,EAAajvR,GAC9E,IAAIqf,EAASd,EAAQI,EACrB,GAAI1R,EAAM,CAER,GADAoS,EAAUpS,EAAKgiR,GACX54R,KAAKk6E,UAAYlxD,IAAYhpB,KAAKk6E,SACpC,OAEF,GAAIlxD,EAAS,CACX,IAAKrf,EACH,IAAK2e,EAAQU,EAAQuwQ,GAAYjxQ,EAAOA,EAAQA,EAAMixQ,GACpD,IAAKjxQ,EAAMixQ,GACT,OAAOjxQ,EAIb,OAAOU,EAGT,GADAd,EAAStR,EAAK6J,WACVyH,GAAUA,IAAWloB,KAAKk6E,SAC5B,OAAOhyD,IAINixQ,EAnEQ,GAsEbK,GAASr6R,GAAMgD,KACfs3R,GAASt6R,GAAMq+L,KACf7jL,GAAOw/P,GAAIpgQ,GACX2gR,GAAmB,mBACnBC,GAAqB,eACrBC,GAAiB,SAAUzoQ,EAAQmhD,EAAU4J,GAC/C,IAAI29M,EAAavnN,EAASwnN,YACtBC,EAAc,CAChBlkR,IAAK,SAAUkoM,EAAM9/M,EAAOqG,GACtBguE,EAAS+1M,gBACXpqR,EAAQq0E,EAAS+1M,cAActoR,KAAKuyE,EAASi2M,qBAAuBrsM,IAAcj+E,EAAOqG,EAAMy5M,EAAK,KAEtGA,EAAKrpL,KAAK,YAAcpwB,EAAMrG,GAAOy2B,KAAKpwB,EAAMrG,IAElDiK,IAAK,SAAU61M,EAAMz5M,GACnB,OAAOy5M,EAAKrpL,KAAK,YAAcpwB,IAASy5M,EAAKrpL,KAAKpwB,KAGlDozR,EAAY,CACdhiQ,MAAO,CACL7f,IAAK,SAAUkoM,EAAM9/M,GACL,OAAVA,GAAmC,kBAAVA,GAIzB47R,GACF97E,EAAKrpL,KAAK,iBAAkBz2B,GAEhB,OAAVA,GAAmC,kBAAVA,GAC3B8/M,EAAKm6E,WAAW,SAChBn6E,EAAKznL,IAAInF,EAAOi+D,MAAMnxF,KAEtB8/M,EAAKrpL,KAAK,QAASz2B,IAVnB8/M,EAAKznL,IAAIr4B,IAabiK,IAAK,SAAU61M,GACb,IAAI9/M,EAAQ8/M,EAAKrpL,KAAK,mBAAqBqpL,EAAKrpL,KAAK,SAErD,OADAz2B,EAAQkzB,EAAOqpL,UAAUrpL,EAAOi+D,MAAMnxF,GAAQ8/M,EAAK,GAAGnzL,UAC/C3sB,KAOb,OAHI47R,IACFnC,EAAUj/F,KAAOi/F,EAAU3uK,IAAMgxK,GAE5BrC,GAELsC,GAA0B,SAAU7oQ,EAAQ4sL,GAC9C,IAAIr5F,EAAWq5F,EAAKrpL,KAAK,SACrBz2B,EAAQkzB,EAAOqpL,UAAUrpL,EAAOi+D,MAAMs1B,GAAWq5F,EAAK,GAAGnzL,UACxD3sB,IACHA,EAAQ,MAEV8/M,EAAKrpL,KAAK,iBAAkBz2B,IAE1Bg8R,GAAgB,SAAUrjR,EAAM24P,GAClC,IAAa2qB,EAAc96Q,EAAvBuwE,EAAM,EACV,GAAI/4E,EACF,IAAKsjR,EAAetjR,EAAKwI,SAAUxI,EAAOA,EAAKoqL,gBAAiBpqL,EAAMA,EAAOA,EAAKoqL,gBAChF5hL,EAAWxI,EAAKwI,WACZmwP,GAA2B,IAAbnwP,GACZA,IAAa86Q,GAAiBtjR,EAAK0hC,UAAUx6C,UAInD6xF,IACAuqM,EAAe96Q,GAGnB,OAAOuwE,GAET,SAASwqM,GAASjkR,EAAKo8D,GACrB,IAIIolN,EAJA0C,EAAQp6R,UACK,IAAbsyE,IACFA,EAAW,IAGb,IAAI+nN,EAAc,GACd9+P,EAAMn+B,EAAWugB,OACjB4nG,EAAQ,GACR+0K,EAAU,EACVC,GAAU,EACVC,GAAW,EACX3wH,EAAmBgxG,GAAiB3kQ,EAAK,CAC3ComQ,eAAgBhqM,EAASgqM,eACzBlS,eAAgB93L,EAAS83L,iBAEvBqwB,EAAc,GACdtpR,EAASmhE,EAASnhE,OAASmhE,EAASnhE,OAASkxQ,GAAO,IACpDlxP,EAAS63M,GAAO,CAClBq/C,cAAe/1M,EAAS+1M,cACxBE,oBAAqBj2M,EAASi2M,qBAC7Bj2M,EAASnhE,QACR+a,EAASomD,EAASooN,UAAY,IAAIjP,GAAeA,GAAWljC,MAC5D/3C,EAAmBr/L,EAAOoyL,mBAC1B0J,EAAI+pF,GAASkC,kBAAiB,WAChC,MAAO,CACLr7M,QAAS3nE,EACTgJ,QAASnc,GAAK64E,cAGd9B,EAAU,SAAUljE,GACtB,GAAoB,kBAATA,EACT,QAAS45L,EAAiB55L,GACrB,GAAIA,EAAM,CACf,IAAIpS,EAAOoS,EAAKwI,SAChB,GAAI5a,EACF,QAAmB,IAATA,IAAcgsM,EAAiB55L,EAAKgU,WAGlD,OAAO,GAEL1iB,EAAM,SAAUyyE,GAClB,GAAIA,GAAOzkE,GAAsB,kBAARykE,EAAkB,CACzC,IAAI/jE,EAAOV,EAAIgqH,eAAevlD,GAC9B,OAAI/jE,GAAQA,EAAKvV,KAAOs5E,EACfzkE,EAAIykR,kBAAkBhgN,GAAK,GAE3B/jE,EAGX,OAAO+jE,GAELigN,EAAK,SAAUjgN,GAIjB,MAHmB,kBAARA,IACTA,EAAMzyE,EAAIyyE,IAELsyH,EAAEtyH,IAEP4gH,EAAY,SAAU5gH,EAAKr2E,EAAMu2R,GACnC,IAAI5C,EAAMh6R,EACN8/M,EAAO68E,EAAGjgN,GAYd,OAXIojI,EAAKjgN,SACPm6R,EAAOP,EAAUpzR,GAEfrG,EADEg6R,GAAQA,EAAK/vR,IACP+vR,EAAK/vR,IAAI61M,EAAMz5M,GAEfy5M,EAAKrpL,KAAKpwB,IAGD,qBAAVrG,IACTA,EAAQ48R,GAAc,IAEjB58R,GAEL68R,EAAa,SAAUngN,GACzB,IAAI/jE,EAAO1O,EAAIyyE,GACf,OAAK/jE,EAGEA,EAAKsa,WAFH,IAIP4+K,EAAY,SAAUn1H,EAAKr2E,EAAMrG,GACnC,IAAI88R,EAAe9C,EACL,KAAVh6R,IACFA,EAAQ,MAEV,IAAI8/M,EAAO68E,EAAGjgN,GACdogN,EAAgBh9E,EAAKrpL,KAAKpwB,GACrBy5M,EAAKjgN,SAGVm6R,EAAOP,EAAUpzR,GACb2zR,GAAQA,EAAKpiR,IACfoiR,EAAKpiR,IAAIkoM,EAAM9/M,EAAOqG,GAEtBy5M,EAAKrpL,KAAKpwB,EAAMrG,GAEd88R,IAAkB98R,GAASq0E,EAAS0oN,aACtC1oN,EAAS0oN,YAAY,CACnBC,QAASl9E,EACTjC,SAAUx3M,EACVu4M,UAAW5+M,MAIb6X,EAAQ,SAAUc,EAAM9M,GAC1B,IAAK6P,IAA0B,IAAlB/C,EAAKwI,UAAkBtV,EAClC,OAAO8M,EAAK8T,UAAU5gB,GAExB,IAAKA,EAAM,CACT,IAAIoxR,EAAUhlR,EAAIG,cAAcO,EAAKgU,UAIrC,OAHA4uQ,GAAOsB,EAAWlkR,IAAO,SAAU8d,GACjCo7K,EAAUorF,EAASxmQ,EAAK9J,SAAU2wK,EAAU3kL,EAAM8d,EAAK9J,cAElDswQ,EAET,OAAO,MAELt/M,EAAU,WACZ,OAAOtJ,EAAS6oN,cAAgBjlR,EAAI2f,MAElCulQ,EAAc,SAAUC,GAC1B,IAAI5pR,EAAKusB,GAAUq9P,GACnB,MAAO,CACLl9R,EAAGsT,EAAGtT,IACNgZ,EAAG1F,EAAG0F,IACNooB,EAAG9tB,EAAGosB,QACN/D,EAAGroB,EAAG+oB,WAGNs2I,EAAS,SAAUn2F,EAAK6mF,GAC1B,OAAO02G,GAAWpnG,OAAO56J,EAAI2f,KAAM3tB,EAAIyyE,GAAM6mF,IAE3CqoC,EAAW,SAAUlvH,EAAKr2E,EAAMrG,GAClC,IAAI8/M,EAAOt5M,EAASH,GAAQs2R,EAAGjgN,GAAKrkD,IAAIhyB,EAAMrG,GAAS28R,EAAGjgN,GAAKrkD,IAAIhyB,GAC/DguE,EAASgpN,eACXtB,GAAwB7oQ,EAAQ4sL,IAGhCwS,EAAY,SAAU51I,EAAK06L,GAC7B,IAAIt3D,EAAO68E,EAAGjgN,GAAKrkD,IAAI++O,GACnB/iM,EAASgpN,eACXtB,GAAwB7oQ,EAAQ4sL,IAGhC3qI,EAAW,SAAUuH,EAAKr2E,EAAM2yQ,GAClC,IAAIl5D,EAAO68E,EAAGjgN,GACd,OAAIs8L,EACKl5D,EAAKznL,IAAIhyB,IAElBA,EAAOA,EAAK+T,QAAQ,UAAU,SAAU1X,EAAGuC,GACzC,OAAOA,EAAEwtF,iBAEE,UAATpsF,IACFA,EAAO60Q,GAAI79P,QAAQ3B,OAAS,aAAe,YAEtCokM,EAAK,IAAMA,EAAK,GAAGroL,MAAQqoL,EAAK,GAAGroL,MAAMpxB,QAAQvC,IAEtD2kP,EAAU,SAAU/rK,GACtB,IAAIp7C,EAAGzF,EAUP,OATA6gD,EAAMzyE,EAAIyyE,GACVp7C,EAAI6zC,EAASuH,EAAK,SAClB7gD,EAAIs5C,EAASuH,EAAK,WACO,IAArBp7C,EAAEp/B,QAAQ,QACZo/B,EAAI,IAEmB,IAArBzF,EAAE35B,QAAQ,QACZ25B,EAAI,GAEC,CACLyF,EAAGtF,SAASsF,EAAG,KAAOo7C,EAAIxjD,aAAewjD,EAAIz8C,YAC7CpE,EAAGG,SAASH,EAAG,KAAO6gD,EAAIlgD,cAAgBkgD,EAAIx8C,eAG9C29F,EAAU,SAAUnhD,GACtB,IAAI7uC,EAAK/lC,EAIT,OAHA40E,EAAMzyE,EAAIyyE,GACV7uC,EAAMglI,EAAOn2F,GACb50E,EAAO2gP,EAAQ/rK,GACR,CACLx8E,EAAG2tC,EAAI3tC,EACPgZ,EAAG20B,EAAI30B,EACPooB,EAAGx5B,EAAKw5B,EACRzF,EAAG/zB,EAAK+zB,IAGRt4B,EAAK,SAAUm5E,EAAKx7D,GACtB,IAAIzf,EACJ,IAAKi7E,EACH,OAAO,EAET,IAAKl6E,MAAMkE,QAAQg2E,GAAM,CACvB,GAAiB,MAAbx7D,EACF,OAAwB,IAAjBw7D,EAAIv7D,SAEb,GAAIs6Q,GAAiB5hR,KAAKqH,GAAW,CACnC,IAAI4+C,EAAY5+C,EAASzG,cAAcsW,MAAM,KACzCq2P,EAAU1qM,EAAI/vD,SAASlS,cAC3B,IAAKhZ,EAAIq+D,EAAUjgE,OAAS,EAAG4B,GAAK,EAAGA,IACrC,GAAIq+D,EAAUr+D,KAAO2lR,EACnB,OAAO,EAGX,OAAO,EAET,GAAI1qM,EAAIv7D,UAA6B,IAAjBu7D,EAAIv7D,SACtB,OAAO,EAGX,IAAIo6H,EAAQ/4I,MAAMkE,QAAQg2E,GAAeA,EAAR,CAACA,GAClC,OAAOu0M,GAAO/vQ,EAAUq6H,EAAK,GAAGzxH,eAAiByxH,EAAK,GAAI,KAAMA,GAAM17I,OAAS,GAE7Es0F,EAAa,SAAUzX,EAAKx7D,EAAU27B,EAAMirN,GAC9C,IACIw1B,EADA1uR,EAAS,GAET+J,EAAO1O,EAAIyyE,GACforL,OAAsBhkQ,IAAZgkQ,EACVjrN,EAAOA,IAAgC,SAAvB8gC,IAAUhxD,SAAsBgxD,IAAUn7D,WAAa,MACnEthB,GAAMqC,GAAG2d,EAAU,YACrBo8Q,EAAcp8Q,EAEZA,EADe,MAAbA,EACS,SAAUvI,GACnB,OAAyB,IAAlBA,EAAKwI,UAGH,SAAUxI,GACnB,OAAOpV,EAAGoV,EAAM2kR,KAItB,MAAO3kR,EAAM,CACX,GAAIA,IAASkkC,IAASlkC,EAAKwI,UAA8B,IAAlBxI,EAAKwI,SAC1C,MAEF,IAAKD,GAAgC,oBAAbA,GAA2BA,EAASvI,GAAO,CACjE,IAAImvP,EAGF,MAAO,CAACnvP,GAFR/J,EAAOvH,KAAKsR,GAKhBA,EAAOA,EAAK6J,WAEd,OAAOslP,EAAUl5P,EAAS,MAExB8uE,EAAY,SAAU/kE,EAAMuI,EAAU27B,GACxC,IAAI84G,EAAUxhE,EAAWx7E,EAAMuI,EAAU27B,GAAM,GAC/C,OAAO84G,GAAWA,EAAQ91J,OAAS,EAAI81J,EAAQ,GAAK,MAElD4nI,EAAW,SAAU5kR,EAAMuI,EAAU7a,GACvC,IAAIwjP,EAAO3oO,EACX,GAAIvI,EAMF,IALwB,kBAAbuI,IACT2oO,EAAO,SAAUlxO,GACf,OAAOpV,EAAGoV,EAAMuI,KAGfvI,EAAOA,EAAKtS,GAAOsS,EAAMA,EAAOA,EAAKtS,GACxC,GAAoB,oBAATwjP,GAAuBA,EAAKlxO,GACrC,OAAOA,EAIb,OAAO,MAEL+5C,EAAU,SAAU/5C,EAAMuI,GAC5B,OAAOq8Q,EAAS5kR,EAAMuI,EAAU,gBAE9Bs8Q,EAAU,SAAU7kR,EAAMuI,GAC5B,OAAOq8Q,EAAS5kR,EAAMuI,EAAU,oBAE9Bk1E,EAAS,SAAUl1E,EAAUlJ,GAC/B,OAAOi5Q,GAAO/vQ,EAAUjX,EAAI+N,IAAUq8D,EAAS6oN,cAAgBjlR,EAAK,KAElEwL,EAAM,SAAUi5D,EAAKmtK,EAAM7xO,GAC7B,IAAIpJ,EACA+J,EAAsB,kBAAR+jE,EAAmBzyE,EAAIyyE,GAAOA,EAChD,IAAK/jE,EACH,OAAO,EAET,GAAIzX,GAAMwF,QAAQiS,KAAUA,EAAK9Y,QAA0B,IAAhB8Y,EAAK9Y,QAU9C,OATA+O,EAAS,GACT2sR,GAAO5iR,GAAM,SAAU+jE,EAAKj7E,GACtBi7E,IACiB,kBAARA,IACTA,EAAMzyE,EAAIyyE,IAEZ9tE,EAAOvH,KAAKwiP,EAAK/nP,KAAKkW,EAAO0kE,EAAKj7E,QAG/BmN,EAET,IAAIgxE,EAAU5nE,GAAgBmkR,EAC9B,OAAOtyC,EAAK/nP,KAAK89E,EAASjnE,IAExB8sL,EAAa,SAAU/oH,EAAKvvD,GAC9BwvQ,EAAGjgN,GAAKx4E,MAAK,SAAUzC,EAAGkX,GACxB4iR,GAAOpuQ,GAAO,SAAUntB,EAAOqG,GAC7BwrM,EAAUl5L,EAAMtS,EAAMrG,UAIxBy9R,EAAU,SAAU/gN,EAAK3kE,GAC3B,IAAI+nM,EAAO68E,EAAGjgN,GACVhhE,GACFokM,EAAK57M,MAAK,SAAUzC,EAAG0J,GACrB,IAA2B,IAAvBA,EAAOuyR,YAAX,CAGA,MAAOvyR,EAAOqf,WACZrf,EAAOygB,YAAYzgB,EAAOqf,YAE5B,IACErf,EAAOkN,UAAY,OAASN,EAC5B5M,EAAOygB,YAAYzgB,EAAOqf,YAC1B,MAAOw+E,GACP+vL,GAAS,eAAehhR,KAAK,OAASA,GAAMysC,WAAWt9C,MAAM,GAAGw7H,SAASv3H,GAE3E,OAAO4M,MAGT+nM,EAAK/nM,KAAKA,IAGV2e,EAAM,SAAUyuN,EAAW9+O,EAAM8mB,EAAOpV,EAAMixB,GAChD,OAAOvlB,EAAI0hO,GAAW,SAAUA,GAC9B,IAAIw4C,EAAyB,kBAATt3R,EAAoB4R,EAAIG,cAAc/R,GAAQA,EASlE,OARAo/L,EAAWk4F,EAAQxwQ,GACfpV,IACkB,kBAATA,GAAqBA,EAAKoJ,SACnCw8Q,EAAOxyQ,YAAYpT,GACM,kBAATA,GAChB0lR,EAAQE,EAAQ5lR,IAGZixB,EAAyC20P,EAAhCx4C,EAAUh6N,YAAYwyQ,OAGvC30P,EAAS,SAAU3iC,EAAM8mB,EAAOpV,GAClC,OAAO2e,EAAIze,EAAIG,cAAc/R,GAAOA,EAAM8mB,EAAOpV,GAAM,IAErDi8M,EAASivD,GAASjvD,OAClBxnI,EAASy2L,GAAS17D,aAClB7pB,EAAa,SAAUr3L,EAAM8mB,EAAOpV,GACtC,IAAkB7N,EAAd0zR,EAAU,GAEd,IAAK1zR,KADL0zR,GAAW,IAAMv3R,EACL8mB,EACNA,EAAMtrB,eAAeqI,IAAuB,OAAfijB,EAAMjjB,IAAuC,qBAAfijB,EAAMjjB,KACnE0zR,GAAW,IAAM1zR,EAAM,KAAOsiF,EAAOr/D,EAAMjjB,IAAQ,KAGvD,MAAoB,qBAAT6N,EACF6lR,EAAU,IAAM7lR,EAAO,KAAO1R,EAAO,IAEvCu3R,EAAU,OAEfr4F,EAAiB,SAAUxtL,GAC7B,IAAIY,EACA6T,EAAYvU,EAAIG,cAAc,OAC9BsgR,EAAOzgR,EAAIoU,yBACfqsQ,EAAKvtQ,YAAYqB,GACbzU,IACFyU,EAAUnU,UAAYN,GAExB,MAAOY,EAAO6T,EAAUhC,WACtBkuQ,EAAKvtQ,YAAYxS,GAGnB,OADA+/Q,EAAK9sQ,YAAYY,GACVksQ,GAEL/sQ,EAAS,SAAUhT,EAAMklR,GAC3B,IAAIC,EAAQnB,EAAGhkR,GAef,OAdIklR,EACFC,EAAM55R,MAAK,WACT,IAAImmB,EACJ,MAAOA,EAAQtoB,KAAKyoB,WACK,IAAnBH,EAAMlJ,UAAwC,IAAtBkJ,EAAMzD,KAAK/mB,OACrCkC,KAAK6pB,YAAYvB,GAEjBtoB,KAAKygB,WAAWqI,aAAaR,EAAOtoB,SAGvC4pB,SAEHmyQ,EAAMnyQ,SAEDmyQ,EAAMj+R,OAAS,EAAIi+R,EAAMr5R,UAAYq5R,EAAM,IAEhDC,EAAmB,SAAU97R,GAC/B,OAAOwhB,EAAIxhB,GAAG,SAAUA,GACtB,IAAIR,EACA0rB,EAAQlrB,EAAEgxB,WACd,IAAKxxB,EAAI0rB,EAAMttB,OAAS,EAAG4B,GAAK,EAAGA,IACjCQ,EAAE+7R,oBAAoB7wQ,EAAM2L,KAAKr3B,QAInC43I,EAAa,SAAUm8E,GACzB,OAAOtiM,EAAOi+D,MAAMqkI,IAElB1c,EAAiB,SAAUs+D,EAAW/wQ,GACxC,OAAO6sB,EAAOqpL,UAAU66D,EAAW/wQ,IAEjC43R,GAAW,SAAUzoE,GACvB,IAAIrsN,EAAM+0R,EACV,GAAIp5R,KAASo3R,GAAShnN,KAAOj9D,IAAQ9Y,EAAW+Y,SAAU,CACxD,GAAIkkR,EAAY5mE,GACd,OAEF4mE,EAAY5mE,IAAW,EAEzB0oE,EAAWjmR,EAAIgqH,eAAe,oBACzBi8J,IACHA,EAAWjmR,EAAIG,cAAc,SAC7B8lR,EAAS96R,GAAK,mBACd86R,EAAS33R,KAAO,WAChB4C,EAAO8O,EAAIs8L,qBAAqB,QAAQ,GACpCprM,EAAKqhB,WACPrhB,EAAK0hB,aAAaqzQ,EAAU/0R,EAAKqhB,YAEjCrhB,EAAKgiB,YAAY+yQ,IAGjBA,EAAStgB,WACXsgB,EAAStgB,WAAWpoD,SAAWA,EAE/B0oE,EAAS/yQ,YAAYlT,EAAIa,eAAe08M,KAGxC2oE,GAAU,SAAUt6L,GACtB,IAAI16F,EACArE,KAASo3R,GAAShnN,KAAOj9D,IAAQ9Y,EAAW+Y,UAI3C2rF,IACHA,EAAM,IAER16F,EAAO8O,EAAIs8L,qBAAqB,QAAQ,GACxCgnF,GAAO13L,EAAI9yE,MAAM,MAAM,SAAU8yE,GAC/B,IAAIphE,EACJohE,EAAM3iG,GAAMw7Q,gBAAgB74K,GACxByjB,EAAMzjB,KAGVyjB,EAAMzjB,IAAO,EACbphE,EAAOuG,EAAO,OAAQ5nC,GAASA,GAAS,CACtCusC,IAAK,aACLpnC,KAAM,WACNi0L,KAAM32F,GACLxvB,EAASgqM,eAAiB,CAAEC,YAAa,aAAgB,IAAKjqM,EAAS83L,eAAiB,CAAEA,eAAgB93L,EAAS83L,gBAAmB,KACzIhjQ,EAAKgiB,YAAYsX,QAnBjBy5P,GAAShnN,IAAIipN,QAAQt6L,IAsBrB59B,GAAc,SAAUyW,EAAK0hN,EAAKztR,GACpCgsR,EAAGjgN,GAAKzW,YAAYm4N,EAAKztR,GAAOzM,MAAK,WACZ,KAAnBnC,KAAK+wI,WACPimJ,GAASh3R,MAAM00B,KAAK,QAAS,UAI/B04I,GAAW,SAAUzyF,EAAK0hN,GAC5BzB,EAAGjgN,GAAKyyF,SAASivH,IAEfhvH,GAAc,SAAU1yF,EAAK0hN,GAC/Bn4N,GAAYyW,EAAK0hN,GAAK,IAEpBp+E,GAAW,SAAUtjI,EAAK0hN,GAC5B,OAAOzB,EAAGjgN,GAAKsjI,SAASo+E,IAEtB75M,GAAO,SAAU7H,GACnBigN,EAAGjgN,GAAK6H,QAEN1R,GAAO,SAAU6J,GACnBigN,EAAGjgN,GAAK7J,QAEN5Y,GAAW,SAAUyiB,GACvB,MAAkC,SAA3BigN,EAAGjgN,GAAKrkD,IAAI,YAEjBk2L,GAAW,SAAUhgM,GACvB,OAASA,GAAS,QAAmB8tQ,KAEnCgC,GAAe,SAAU3hN,GAC3B,IAAI/jE,EAAsB,kBAAR+jE,EAAmBzyE,EAAIyyE,GAAOA,EAChD,OAAO0mH,GAASv2K,UAAUlU,GAAQA,EAAKk5P,UAAYknB,GAAS,eAAe/tQ,OAAO+tQ,GAASpgR,GAAMd,SAASE,QAExGumR,GAAe,SAAU5hN,EAAK3kE,GAChC4kR,EAAGjgN,GAAKx4E,MAAK,WACX,IACE,GAAI,cAAenC,KAEjB,YADAA,KAAK8vQ,UAAY95P,GAGnB,MAAOixF,IAETr9E,EAAOotQ,GAASh3R,MAAMgW,KAAKA,IAAO,OAGlC4xL,GAAc,SAAUhxL,EAAM4lR,GAChC,IAAIC,EAAgBv0R,EAAIs0R,GACxB,OAAO96Q,EAAI9K,GAAM,SAAUA,GACzB,IAAIsR,EAAQE,EAQZ,OAPAF,EAASu0Q,EAAch8Q,WACvB2H,EAAcq0Q,EAAcr0Q,YACxBA,EACFF,EAAOY,aAAalS,EAAMwR,GAE1BF,EAAOkB,YAAYxS,GAEdA,MAGPyB,GAAU,SAAUujR,EAAQc,EAAQZ,GACtC,OAAOp6Q,EAAIg7Q,GAAQ,SAAUA,GAS3B,OARIv9R,GAAMqC,GAAGk7R,EAAQ,WACnBd,EAASA,EAAOlxQ,WAAU,IAExBoxQ,GACFtC,GAAOC,GAAOiD,EAAOlmR,aAAa,SAAUI,GAC1CglR,EAAOxyQ,YAAYxS,MAGhB8lR,EAAOj8Q,WAAWqxL,aAAa8pF,EAAQc,OAG9C5xF,GAAS,SAAUnwH,EAAKr2E,GAC1B,IAAIs3R,EAQJ,OAPIjhN,EAAI/vD,WAAatmB,EAAKosF,gBACxBkrM,EAAS30P,EAAO3iC,GAChBk1R,GAAOsB,EAAWngN,IAAM,SAAUgiN,GAChC7sF,EAAU8rF,EAAQe,EAAS/xQ,SAAU2wK,EAAU5gH,EAAKgiN,EAAS/xQ,cAE/DvS,GAAQujR,EAAQjhN,GAAK,IAEhBihN,GAAUjhN,GAEfiiN,GAAqB,SAAUj8R,EAAGuC,GACpC,IAAY25R,EAARn0O,EAAK/nD,EACT,MAAO+nD,EAAI,CACTm0O,EAAK35R,EACL,MAAO25R,GAAMn0O,IAAOm0O,EAClBA,EAAKA,EAAGp8Q,WAEV,GAAIioC,IAAOm0O,EACT,MAEFn0O,EAAKA,EAAGjoC,WAEV,OAAKioC,GAAM/nD,EAAEonB,cACJpnB,EAAEonB,cAAcC,gBAElB0gC,GAEL2kC,GAAQ,SAAUyvM,GACpB,OAAO3rQ,EAAOk8D,MAAMluF,GAAM+d,KAAK4/Q,KAE7BC,GAAoB,SAAUnmR,GAChC,GAAIyqL,GAASv2K,UAAUlU,GAAO,CAC5B,IAAIykL,EAAgD,MAAhCzkL,EAAKgU,SAASlS,gBAA0B6iL,EAAU3kL,EAAM,SAAW2kL,EAAU3kL,EAAM,MACvG,GAAI2kL,EAAU3kL,EAAM,SAAW2kL,EAAU3kL,EAAM,sBAAwBykL,EACrE,OAAO,EAGX,OAAO,GAEL4F,GAAU,SAAUrqL,EAAM2S,GAC5B,IAAI/kB,EAAMF,EAAM04R,EAAU,EAC1B,GAAID,GAAkBnmR,GACpB,OAAO,EAGT,GADAA,EAAOA,EAAK6R,WACR7R,EAAM,CACR,IAAI61L,EAAS,IAAI0sF,GAAWviR,EAAMA,EAAK6J,YACnC2sQ,EAAaj8Q,EAASA,EAAO6gM,wBAA0B,GAC3DzoL,EAAWA,IAAapY,EAASA,EAAOq7L,sBAAwB,MAChE,EAAG,CAED,GADAhoM,EAAOoS,EAAKwI,SACRiiL,GAASv2K,UAAUlU,GAAO,CAC5B,IAAIqmR,EAAWrmR,EAAK0U,aAAa,kBACjC,GAAI2xQ,EAAU,CACZrmR,EAAO61L,EAAOj5L,KAAkB,QAAbypR,GACnB,SAGF,GADA34R,EAAOsS,EAAKgU,SAASlS,cACjB6Q,GAAYA,EAASjlB,GAAO,CAC9B,GAAa,OAATA,EAAe,CACjB04R,IACApmR,EAAO61L,EAAOj5L,OACd,SAEF,OAAO,EAET,GAAIupR,GAAkBnmR,GACpB,OAAO,EAGX,GAAa,IAATpS,EACF,OAAO,EAET,GAAa,IAATA,IAAem1R,GAAmB7hR,KAAKlB,EAAK0hC,WAC9C,OAAO,EAET,GAAa,IAAT9zC,GAAcoS,EAAK6J,YAAc2sQ,EAAWx2Q,EAAK6J,WAAWmK,WAAa+uQ,GAAmB7hR,KAAKlB,EAAK0hC,WACxG,OAAO,EAET1hC,EAAO61L,EAAOj5L,aACPoD,GAEX,OAAOomR,GAAW,GAEhB7gN,GAAY,WACd,OAAOjmE,EAAI8gC,eAEThoB,GAAQ,SAAUo0N,EAAW85C,EAAUC,GACzC,IAAqBC,EAAKC,EAAKC,EAA3B98R,EAAI27E,KACR,GAAIinK,GAAa85C,EAiBf,OAhBA18R,EAAEg2C,SAAS4sM,EAAU3iO,WAAYw5Q,GAAc72C,IAC/C5iP,EAAEq2C,OAAOqmP,EAASz8Q,WAAYw5Q,GAAciD,IAC5CE,EAAM58R,EAAEi6E,kBACRj6E,EAAI27E,KACJ37E,EAAEg2C,SAAS0mP,EAASz8Q,WAAYw5Q,GAAciD,GAAY,GAC1D18R,EAAEq2C,OAAOusM,EAAU3iO,WAAYw5Q,GAAc72C,GAAa,GAC1Di6C,EAAM78R,EAAEi6E,kBACR6iN,EAAKl6C,EAAU3iO,WACf68Q,EAAGx0Q,aAAak1P,GAASF,SAAS/6Q,GAAMq6R,GAAMh6C,GAC1C+5C,EACFG,EAAGx0Q,aAAaq0Q,EAAgB/5C,GAEhCk6C,EAAGx0Q,aAAao0Q,EAAU95C,GAE5Bk6C,EAAGx0Q,aAAak1P,GAASF,SAAS/6Q,GAAMs6R,GAAMj6C,GAC9Cx5N,EAAOw5N,GACA+5C,GAAkBD,GAGzB96R,GAAO,SAAUgH,EAAQ9E,EAAMwjP,EAAM7xO,GACvC,GAAI9W,GAAMwF,QAAQyE,GAAS,CACzB,IAAI1J,EAAI0J,EAAOtL,OACXy/R,EAAK,GACT,MAAO79R,IACL69R,EAAG79R,GAAK0C,GAAKgH,EAAO1J,GAAI4E,EAAMwjP,EAAM7xO,GAEtC,OAAOsnR,EAUT,OARIjrN,EAASyzL,SAAY38P,IAAW8M,GAAO9M,IAAWmyB,GACpDk/P,EAAYn1R,KAAK,CACf8D,EACA9E,EACAwjP,EACA7xO,IAGGiW,EAAO9pB,KAAKgH,EAAQ9E,EAAMwjP,EAAM7xO,GAASlT,KAE9Cm6B,GAAS,SAAU9zB,EAAQ9E,EAAMwjP,GACnC,IAAIpoP,EACJ,GAAIP,GAAMwF,QAAQyE,GAAS,CACzB1J,EAAI0J,EAAOtL,OACX,IAAIy/R,EAAK,GACT,MAAO79R,IACL69R,EAAG79R,GAAKw9B,GAAO9zB,EAAO1J,GAAI4E,EAAMwjP,GAElC,OAAOy1C,EAET,GAAI9C,IAAgBrxR,IAAW8M,GAAO9M,IAAWmyB,GAAM,CACrD77B,EAAI+6R,EAAY38R,OAChB,MAAO4B,IAAK,CACV,IAAIq3B,EAAO0jQ,EAAY/6R,GACnB0J,IAAW2tB,EAAK,IAAQzyB,GAAQA,IAASyyB,EAAK,IAAS+wN,GAAQA,IAAS/wN,EAAK,IAC/E7K,EAAOgR,OAAOnG,EAAK,GAAIA,EAAK,GAAIA,EAAK,KAI3C,OAAO7K,EAAOgR,OAAO9zB,EAAQ9E,EAAMwjP,IAEjCp2J,GAAO,SAAUtoF,EAAQ9E,EAAM6uG,GACjC,OAAOjnF,EAAOwlE,KAAKtoF,EAAQ9E,EAAM6uG,IAE/Bp5B,GAAqB,SAAUnjE,GACjC,GAAIA,GAAQyqL,GAASv2K,UAAUlU,GAAO,CACpC,IAAIwhI,EAAkBxhI,EAAK0U,aAAa,4BACxC,OAAI8sH,GAAuC,YAApBA,EACdA,EAEuB,YAAzBxhI,EAAKwhI,gBAAgCxhI,EAAKwhI,gBAAkB,KAEnE,OAAO,MAGPolJ,GAA2B,SAAU5mR,GAGvC,IAFA,IAAIkkC,EAAO8gC,IACPhtE,EAAQ,KACLgI,GAAQA,IAASkkC,EAAMlkC,EAAOA,EAAK6J,WAExC,GADA7R,EAAQmrE,GAAmBnjE,GACb,OAAVhI,EACF,MAGJ,OAAOA,GAELmyF,GAAU,WACZ,GAAI05L,EAAa,CACf,IAAI/6R,EAAI+6R,EAAY38R,OACpB,MAAO4B,IAAK,CACV,IAAIq3B,EAAO0jQ,EAAY/6R,GACvBwsB,EAAOgR,OAAOnG,EAAK,GAAIA,EAAK,GAAIA,EAAK,KAGrCm4P,GAAO3H,aACT2H,GAAO3H,eAGPnmF,GAAY,SAAUxqL,EAAMsR,GAC9B,MAAOtR,EAAM,CACX,GAAIsR,IAAWtR,EACb,OAAO,EAETA,EAAOA,EAAK6J,WAEd,OAAO,GAELg9Q,GAAU,SAAUj9R,GACtB,MAAO,mBAAqBA,EAAEy1C,eAAerrB,SAAW,kBAAoBpqB,EAAEg3C,YAAc,mBAAqBh3C,EAAEi3C,aAAa7sB,SAAW,gBAAkBpqB,EAAEk3C,WAE7J30C,GAAO,CACTmT,IAAKA,EACLo8D,SAAUA,EACV/2C,IAAKA,EACLgqF,MAAOA,EACPg1K,QAASA,EACTC,SAAUA,EACV3wH,iBAAkBA,EAClB4wH,YAAaA,EACbtpQ,OAAQA,EACRhgB,OAAQA,EACR+a,OAAQA,EACR4tD,QAASA,EACTmzH,EAAGA,EACH2tF,GAAIA,EACJ9/O,KAAM,KACNhlC,MAAOA,EACP8lE,QAASA,EACTw/M,YAAaA,EACbt/J,QAASA,EACT4qH,QAASA,EACT/qK,UAAWA,EACXyW,WAAYA,EACZlqF,IAAKA,EACLyoD,QAASA,EACT8qO,QAASA,EACTpnM,OAAQA,EACR7yF,GAAIA,EACJmzB,IAAKA,EACLsS,OAAQA,EACR00J,WAAYA,EACZ6H,eAAgBA,EAChB55K,OAAQA,EACRigL,SAAUA,EACVz2H,SAAUA,EACVm9I,UAAWA,EACXyrE,iBAAkBA,EAClBlsF,UAAWA,EACXpM,WAAYA,EACZnI,UAAWA,EACXzqB,OAAQA,EACRx5B,WAAYA,EACZy/D,eAAgBA,EAChBmlF,SAAUA,GACVE,QAASA,GACThvH,SAAUA,GACVC,YAAaA,GACb4wC,SAAUA,GACV/5I,YAAaA,GACbse,KAAMA,GACN1R,KAAMA,GACN5Y,SAAUA,GACVs0J,SAAUA,GACVkvE,QAASA,EACTY,aAAcA,GACdC,aAAcA,GACdtqE,OAAQA,EACRxnI,OAAQA,EACRm9G,YAAaA,GACbvvL,QAASA,GACTyyL,OAAQA,GACR8xF,mBAAoBA,GACpBvvM,MAAOA,GACP3rE,IAAKA,EACLo5Q,WAAYA,EACZ75F,QAASA,GACT9kH,UAAWA,GACXotH,UAAW0wF,GACXjrQ,MAAOA,GACP5sB,KAAMA,GACN86B,OAAQA,GACRw0D,KAAMA,GACN3X,mBAAoBA,GACpByjN,yBAA0BA,GAC1Bz8L,QAASA,GACTqgG,UAAWA,GACXq8F,QAASA,IAKX,OAHA/F,EAAYkC,GAAezoQ,EAAQmhD,GAAU,WAC3C,OAAOvvE,MAEFA,IAER,SAAUo3R,GACTA,EAAShnN,IAAMgnN,EAAS/8R,EAAW+Y,UACnCgkR,EAAS5wF,UAAY0wF,IAFvB,CAGEE,KAAaA,GAAW,KAC1B,IAAIuD,GAAavD,GAEbhnN,GAAMuqN,GAAWvqN,IACjBwqN,GAASx+R,GAAMgD,KAAMy7R,GAASz+R,GAAMq+L,KACpCqgG,GAAS,EACTC,GAAU,EACVC,GAAS,EACTC,GAAS,EACT1zB,GAAe,WACjB,SAASA,EAAah4L,QACH,IAAbA,IACFA,EAAW,IAEbtyE,KAAKkmI,OAAS,GACdlmI,KAAKukG,MAAQ,GACbvkG,KAAKi+R,sBAAwB,GAC7Bj+R,KAAKk+R,qBAAuB,GAC5Bl+R,KAAKm+R,QAAU,EACfn+R,KAAKsyE,SAAWA,EAsIlB,OApIAg4L,EAAazqQ,UAAUo7Q,mBAAqB,SAAU7Q,GACpDpqQ,KAAKsyE,SAAS83L,eAAiBA,GAEjCE,EAAazqQ,UAAUu+R,WAAa,SAAUt8L,EAAK1rB,EAAS28K,GAC1D,IACIp4K,EAAKt5E,EADL2V,EAAMm8D,GAEN1/D,EAAO,WACTuD,EAAI4S,OAAOvoB,GACPs5E,IACFA,EAAI0jN,mBAAqB1jN,EAAI2yI,OAAS3yI,EAAM,MAE9CvE,KAEExyE,EAAQ,WACNiB,EAAWkuP,GACbA,IAEkC,qBAAvB31P,EAAWmM,SAA2BnM,EAAWmM,QAAQF,KAClEjM,EAAWmM,QAAQF,IAAI,0BAA4By4F,IAIzDzgG,EAAK2V,EAAIw1M,WACT7xI,EAAMv9E,EAAW+Y,SAASE,cAAc,UACxCskE,EAAIt5E,GAAKA,EACTs5E,EAAIn2E,KAAO,kBACXm2E,EAAIouC,IAAM5pH,GAAMw7Q,gBAAgB74K,GAC5B9hG,KAAKsyE,SAAS83L,gBAChBpzP,EAAI84L,UAAUn1H,EAAK,iBAAkB36E,KAAKsyE,SAAS83L,gBAErDzvL,EAAI2yI,OAAS75M,EACbknE,EAAIiyL,QAAUhpQ,GACbxG,EAAW+Y,SAASq8L,qBAAqB,QAAQ,IAAMp1M,EAAW+Y,SAAS0f,MAAMzM,YAAYuxD,IAEhG2vL,EAAazqQ,UAAUy+R,OAAS,SAAUx8L,GACxC,OAAO9hG,KAAKkmI,OAAOpkC,KAASi8L,IAE9BzzB,EAAazqQ,UAAU0+R,SAAW,SAAUz8L,GAC1C9hG,KAAKkmI,OAAOpkC,GAAOi8L,IAErBzzB,EAAazqQ,UAAU80B,IAAM,SAAUmtE,EAAK1rB,EAASngE,EAAO88O,GAC1D,IAAInkP,EAAQ5O,KAAKkmI,OAAOpkC,QACV//F,IAAV6M,IACF5O,KAAKukG,MAAMj/F,KAAKw8F,GAChB9hG,KAAKkmI,OAAOpkC,GAAO+7L,IAEjBznN,IACGp2E,KAAKi+R,sBAAsBn8L,KAC9B9hG,KAAKi+R,sBAAsBn8L,GAAO,IAEpC9hG,KAAKi+R,sBAAsBn8L,GAAKx8F,KAAK,CACnC8wE,QAASA,EACT28K,QAASA,EACT98O,MAAOA,GAASjW,SAItBsqQ,EAAazqQ,UAAU8kE,KAAO,SAAUm9B,EAAK1rB,EAASngE,EAAO88O,GAC3D,OAAO/yP,KAAK20B,IAAImtE,EAAK1rB,EAASngE,EAAO88O,IAEvCuX,EAAazqQ,UAAU+pB,OAAS,SAAUk4E,UACjC9hG,KAAKkmI,OAAOpkC,UACZ9hG,KAAKi+R,sBAAsBn8L,IAEpCwoK,EAAazqQ,UAAU2+R,UAAY,SAAUpoN,EAASngE,EAAO88O,GAC3D/yP,KAAKy+R,YAAYz+R,KAAKukG,MAAOnuB,EAASngE,EAAO88O,IAE/CuX,EAAazqQ,UAAU4+R,YAAc,SAAUC,EAAStoN,EAASngE,EAAO88O,GACtE,IACI0rC,EADA17R,EAAO/C,KAEP2+R,EAAW,GACXC,EAAgB,SAAUt6R,EAAMw9F,GAClC67L,GAAO56R,EAAKk7R,sBAAsBn8L,IAAM,SAAUpO,GAC5C7uF,EAAW6uF,EAASpvF,KACtBovF,EAASpvF,GAAMvE,KAAK2zF,EAASz9E,UAGjClT,EAAKk7R,sBAAsBn8L,QAAO//F,GAEpCgB,EAAKm7R,qBAAqB54R,KAAK,CAC7B8wE,QAASA,EACT28K,QAASA,EACT98O,MAAOA,GAASjW,OAElBy+R,EAAc,WACZ,IAAII,EAAiBjB,GAAOc,GA4B5B,GA3BAA,EAAQ5gS,OAAS,EACjB6/R,GAAOkB,GAAgB,SAAU/8L,GAC3B/+F,EAAKmjI,OAAOpkC,KAASi8L,GAIrBh7R,EAAKmjI,OAAOpkC,KAASk8L,GAIrBj7R,EAAKmjI,OAAOpkC,KAASg8L,KACvB/6R,EAAKmjI,OAAOpkC,GAAOg8L,GACnB/6R,EAAKo7R,UACLp7R,EAAKq7R,WAAWt8L,GAAK,WACnB/+F,EAAKmjI,OAAOpkC,GAAOi8L,GACnBh7R,EAAKo7R,UACLS,EAAc,UAAW98L,GACzB28L,OACC,WACD17R,EAAKmjI,OAAOpkC,GAAOk8L,GACnBj7R,EAAKo7R,UACLQ,EAASr5R,KAAKw8F,GACd88L,EAAc,UAAW98L,GACzB28L,QAhBFG,EAAc,UAAW98L,GAJzB88L,EAAc,UAAW98L,OAwBxB/+F,EAAKo7R,QAAS,CACjB,IAAIW,EAAkB/7R,EAAKm7R,qBAAqB/4R,MAAM,GACtDpC,EAAKm7R,qBAAqBpgS,OAAS,EACnC6/R,GAAOmB,GAAiB,SAAUprM,GACR,IAApBirM,EAAS7gS,OACP+G,EAAW6uF,EAAStd,UACtBsd,EAAStd,QAAQr2E,KAAK2zF,EAASz9E,OAG7BpR,EAAW6uF,EAASq/J,UACtBr/J,EAASq/J,QAAQhzP,KAAK2zF,EAASz9E,MAAO0oR,QAMhDF,KAEFn0B,EAAaA,aAAe,IAAIA,EACzBA,EAhJU,GAmJfy0B,GAAQ,SAAUniR,GACpB,OAAOlY,EAASkY,IAAQxU,GAAIwU,EAAK,QAE/BoiR,GAAc,SAAUpiR,GAC1B,OAAOjY,EAAQiY,IAAQA,EAAI9e,OAAS,GAElC+mB,GAAO,GACPo6Q,GAActpR,GAAK,MACnBupR,GAAkB,WACpB,OAAOh3R,GAAI2c,GAAMo6Q,GAAY/2R,QAE3B0oB,GAAU,WACZ,OAAOhpB,GAAMid,IAAM,SAAU5mB,GAC3B,OAAOoB,GAAS,GAAIpB,OAGpBkhS,GAAU,SAAUC,GAClBA,GACFH,GAAYppR,IAAIupR,IAGhBC,GAAU,WACZ,OAAOJ,GAAY/2R,OAEjBysB,GAAM,SAAUmvE,EAAM/+C,GACxB,IAAIu6O,EAAWz6Q,GAAKi/E,GACfw7L,IACHz6Q,GAAKi/E,GAAQw7L,EAAW,IAE1B73R,GAAOs9C,GAAO,SAAUw6O,EAAaj7R,GACnCg7R,EAASh7R,EAAKoU,eAAiB6mR,MAG/BtkQ,GAAY,SAAUnkB,GACxB,IAAIwoR,EAAWJ,KAAkBx9R,MAAM,IACnCiB,EAAW,SAAU+E,GACvB,OAAI7C,EAAW6C,GACNpI,OAAOO,UAAU8C,SAAS5C,KAAK2H,GAEhCu5L,EAAQv5L,GAAkB,GAAX,GAAKA,GAE1Bu5L,EAAU,SAAUnqL,GACtB,MAAgB,KAATA,GAAwB,OAATA,QAA0B/U,IAAT+U,GAErC0oR,EAAc,SAAU1oR,GAC1B,IAAI2oR,EAAU98R,EAASmU,GACvB,OAAO5O,GAAIo3R,EAAUG,EAAQ/mR,eAAexW,IAAIS,GAAUjB,MAAM+9R,IAE9DC,EAAgB,SAAU9iR,GAC5B,OAAOA,EAAIvE,QAAQ,iBAAkB,KAEnCsyE,EAAa,SAAU7zE,GACzB,OAAOA,GAET,GAAImqL,EAAQnqL,GACV,OAAO6zE,EAAW,IAEpB,GAAIo0M,GAAMjoR,GACR,OAAO6zE,EAAWhoF,EAASmU,EAAK8f,MAElC,GAAIooQ,GAAYloR,GAAO,CACrB,IAAIwxG,EAAWxxG,EAAK3R,MAAM,GACtBw6R,EAAaH,EAAY1oR,EAAK,IAAIuB,QAAQ,iBAAiB,SAAUunR,EAAIC,GAC3E,OAAOz3R,GAAIkgH,EAAUu3K,GAAMl9R,EAAS2lH,EAASu3K,IAAOD,KAEtD,OAAOj1M,EAAW+0M,EAAcC,IAElC,OAAOh1M,EAAW+0M,EAAcF,EAAY1oR,MAE1C47B,GAAQ,WACV,OAAOwsP,KAAkB98R,MAAK,SAAU2iD,GACtC,OAAO78C,GAAI68C,EAAO,WACjB1iD,QAAO,SAAUsiC,GAClB,MAAe,QAARA,MAGPm7P,GAAU,SAAUh8L,GACtB,OAAO17F,GAAIyc,GAAMi/E,IAEfi8L,GAAO,CACTnvQ,QAASA,GACTuuQ,QAASA,GACTE,QAASA,GACT1qQ,IAAKA,GACLsG,UAAWA,GACXyX,MAAOA,GACPotP,QAASA,IAGX,SAASE,KACP,IAAI5F,EAAQp6R,KACR+kD,EAAQ,GACRk6J,EAAO,GACPr6J,EAAS,GACTq7O,EAAa,GACbC,EAAe,SAAU57R,EAAMsK,GACjC,IAAIuxR,EAAmB59R,EAAO09R,GAAY,SAAU5gM,GAClD,OAAOA,EAAS/6F,OAASA,GAAQ+6F,EAASzwF,QAAUA,KAEtDzM,EAAKg+R,GAAkB,SAAU9gM,GAC/B,OAAOA,EAAS3L,eAGhBxrF,EAAM,SAAU5D,GAClB,GAAIsgD,EAAOtgD,GACT,OAAOsgD,EAAOtgD,GAAM68H,UAIpBi/J,EAAe,SAAU97R,GAC3B,IAAIuI,EAIJ,OAHI+3C,EAAOtgD,KACTuI,EAAS+3C,EAAOtgD,GAAM87R,cAEjBvzR,GAAU,IAEfwzR,EAAkB,SAAU/7R,EAAMg8R,IACF,IAA9BN,GAAaO,cACfC,EAAQl8R,GAAM,WACZ,IAAIm8R,EAAWV,GAAKV,UAChBqB,EAAmB,KAAOJ,GAAa,IAAM,KAC5CG,GAAYH,IAAiE,IAApDI,EAAiBvgS,QAAQ,IAAMsgS,EAAW,MAGxEn2B,GAAaA,aAAa31O,IAAIsqL,EAAK36M,GAAQ,UAAYm8R,EAAW,SACjE,WAGH9rQ,EAAM,SAAUtzB,EAAIs/R,EAAOP,GAC7B,IAAIQ,EAAmBD,EAOvB,OANA57O,EAAMz/C,KAAKs7R,GACXh8O,EAAOvjD,GAAM,CACX8/H,SAAUy/J,EACVR,aAAcA,GAEhBF,EAAa7+R,EAAI,SACVu/R,GAELh3Q,EAAS,SAAUtlB,UACd26M,EAAK36M,UACLsgD,EAAOtgD,IAEZu8R,EAAY,SAAUC,EAASvgQ,GACjC,MAAmB,kBAARA,EACFA,EAEiB,kBAAZugQ,EAAuB,CACnCt0Q,OAAQ,GACRu0Q,SAAUxgQ,EACVtjB,OAAQ,IACN,CACFuP,OAAQs0Q,EAAQt0Q,OAChBu0Q,SAAUxgQ,EACVtjB,OAAQ6jR,EAAQ7jR,SAGhB+jR,EAAgB,SAAUC,EAAYvC,GACxC,IAAIj9E,EAAY24E,EAAMn7E,KAAKgiF,GAC3B9+R,EAAKu8R,GAAS,SAAUvc,GACtB7X,GAAaA,aAAa31O,IAAI8sL,EAAY,IAAM0gE,OAGhD+e,EAAmB,SAAU58R,EAAM68R,EAAU/qN,EAASngE,GACxD,IAAImrR,EAAOhB,EAAa97R,GACxBnC,EAAKi/R,GAAM,SAAU7gQ,GACnB,IAAIw3K,EAAS8oF,EAAUM,EAAU5gQ,GACjCokC,EAAKozI,EAAOgpF,SAAUhpF,OAAQh2M,OAAWA,MAEvCq0E,IACEngE,EACFmgE,EAAQr2E,KAAKkW,GAEbmgE,EAAQr2E,KAAKuqQ,MAIf3lM,EAAO,SAAUrgE,EAAM68R,EAAU/qN,EAASngE,EAAO88O,GACnD,IAAI9zC,EAAK36M,GAAT,CAGA,IAAI+8R,EAAgC,kBAAbF,EAAwBA,EAAWA,EAAS30Q,OAAS20Q,EAASJ,SAAWI,EAASlkR,OAC1E,IAA3BokR,EAAUlhS,QAAQ,OAA4C,IAA9BkhS,EAAUlhS,QAAQ,SACpDkhS,EAAYrB,GAAaptN,QAAU,IAAMyuN,GAE3CpiF,EAAK36M,GAAQ+8R,EAAUtyQ,UAAU,EAAGsyQ,EAAUrlN,YAAY,MAC1D,IAAIvoE,EAAO,WACTysR,EAAa57R,EAAM,UACnB48R,EAAiB58R,EAAM68R,EAAU/qN,EAASngE,IAExC2uC,EAAOtgD,GACTmP,IAEA62P,GAAaA,aAAa31O,IAAI0sQ,EAAW5tR,EAAMwC,EAAO88O,KAGtDytC,EAAU,SAAUl8R,EAAMovF,EAAU9kF,QACxB,IAAVA,IACFA,EAAQ,SAENxG,GAAIw8C,EAAQtgD,IAAmB,UAAVsK,GAEdxG,GAAI62M,EAAM36M,IAAmB,WAAVsK,EAD5B8kF,IAIAusM,EAAW36R,KAAK,CACdhB,KAAMA,EACNsK,MAAOA,EACP8kF,SAAUA,KAIhB,MAAO,CACL3uC,MAAOA,EACPk6J,KAAMA,EACNr6J,OAAQA,EACRq7O,WAAYA,EACZ/3R,IAAKA,EACLk4R,aAAcA,EACdC,gBAAiBA,EACjB1rQ,IAAKA,EACL/K,OAAQA,EACRi3Q,UAAWA,EACXG,cAAeA,EACfr8N,KAAMA,EACN67N,QAASA,IAGZ,SAAUR,GACTA,EAAasB,cAAgBtB,IAC7BA,EAAauB,aAAevB,KAF9B,CAGEA,KAAiBA,GAAe,KAClC,IAAIwB,GAAiBxB,GAEjBnmO,GAAQ,SAAUx7D,EAAIi7E,GACxB,IAAIC,EAAQ,KACRC,EAAS,WACG,OAAVD,IACFn8E,EAAWq8E,aAAaF,GACxBA,EAAQ,OAGRG,EAAW,WAEb,IADA,IAAI/7E,EAAO,GACFC,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACtCD,EAAKC,GAAMC,UAAUD,GAET,OAAV27E,IACFA,EAAQn8E,EAAW27E,YAAW,WAC5B16E,EAAGN,MAAM,KAAMJ,GACf47E,EAAQ,OACPD,KAGP,MAAO,CACLE,OAAQA,EACRE,SAAUA,IAGVC,GAAS,SAAUt7E,EAAIi7E,GACzB,IAAIC,EAAQ,KACRC,EAAS,WACG,OAAVD,IACFn8E,EAAWq8E,aAAaF,GACxBA,EAAQ,OAGRG,EAAW,WAEb,IADA,IAAI/7E,EAAO,GACFC,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACtCD,EAAKC,GAAMC,UAAUD,GAET,OAAV27E,GACFn8E,EAAWq8E,aAAaF,GAE1BA,EAAQn8E,EAAW27E,YAAW,WAC5B16E,EAAGN,MAAM,KAAMJ,GACf47E,EAAQ,OACPD,IAEL,MAAO,CACLE,OAAQA,EACRE,SAAUA,IAIVn4D,GAAO,SAAUrC,EAASwV,GAC5B,IAAIz2B,EAAQ82B,GAAM7V,EAASwV,GAC3B,YAAiB3yB,IAAV9D,GAAiC,KAAVA,EAAe,GAAKA,EAAM+wB,MAAM,MAE5DgG,GAAQ,SAAU9V,EAASwV,EAAMrzB,GACnC,IAAIuI,EAAM2X,GAAKrC,EAASwV,GACpB7qB,EAAKD,EAAInL,OAAO,CAAC4C,IAErB,OADAwU,GAAIqJ,EAASwV,EAAM7qB,EAAGZ,KAAK,OACpB,GAEL2rB,GAAW,SAAU1V,EAASwV,EAAMrzB,GACtC,IAAIwI,EAAKtH,EAAOgf,GAAKrC,EAASwV,IAAO,SAAU1xB,GAC7C,OAAOA,IAAM3B,KAOf,OALIwI,EAAG/L,OAAS,EACd+X,GAAIqJ,EAASwV,EAAM7qB,EAAGZ,KAAK,MAE3ByiB,GAASxM,EAASwV,IAEb,GAGLG,GAAW,SAAU3V,GACvB,YAAmCnd,IAA5Bmd,EAAQlI,MAAM8d,WAEnBsC,GAAQ,SAAUlY,GACpB,OAAOqC,GAAKrC,EAAS,UAEnBiW,GAAQ,SAAUjW,EAAS+V,GAC7B,OAAOD,GAAM9V,EAAS,QAAS+V,IAE7BC,GAAW,SAAUhW,EAAS+V,GAChC,OAAOL,GAAS1V,EAAS,QAAS+V,IAGhCM,GAAQ,SAAUrW,EAAS+V,GACzBJ,GAAS3V,GACXA,EAAQlI,MAAM8d,UAAUH,IAAIM,GAE5BE,GAAMjW,EAAS+V,IAGfG,GAAa,SAAUlW,GACzB,IAAI4V,EAAYD,GAAS3V,GAAWA,EAAQlI,MAAM8d,UAAYsC,GAAMlY,GAC3C,IAArB4V,EAAUh3B,QACZ4tB,GAASxM,EAAS,UAGlBmW,GAAW,SAAUnW,EAAS+V,GAChC,GAAIJ,GAAS3V,GAAU,CACrB,IAAI4V,EAAY5V,EAAQlI,MAAM8d,UAC9BA,EAAUlL,OAAOqL,QAEjBC,GAAShW,EAAS+V,GAEpBG,GAAWlW,IAEToW,GAAQ,SAAUpW,EAAS+V,GAC7B,OAAOJ,GAAS3V,IAAYA,EAAQlI,MAAM8d,UAAUpvB,SAASuvB,IAG3D+jB,GAAc,SAAU/iC,EAAOkP,GACjC,IAAItY,EAAS,GAOb,OANA1K,EAAKkmB,GAASpS,IAAQ,SAAU9X,GAC1BgnB,EAAUhnB,KACZ0O,EAASA,EAAOpO,OAAO,CAACN,KAE1B0O,EAASA,EAAOpO,OAAOu6C,GAAY76C,EAAGgnB,OAEjCtY,GAGL8zE,GAAgB,SAAU1qE,EAAOkJ,GACnC,OAAO3gB,GAAI2gB,EAAUlJ,IAGvB,SAASypB,GAAmBl+B,EAAI6e,EAAUpK,EAAOtV,EAAG4f,GAClD,OAAO/e,EAAGyU,EAAOtV,GAAKyC,EAAOP,KAAKoT,GAASpR,EAAW0b,IAAWA,EAAOtK,GAAS7S,EAAOrC,OAASsf,EAASpK,EAAOtV,EAAG4f,GAGtH,IAAIF,GAAW,SAAUpK,EAAOkP,EAAW5E,GACzC,IAAIrB,EAAUjJ,EAAMe,MAChBwJ,EAAO3b,EAAW0b,GAAUA,EAASviB,GAAS,GAClD,MAAOkhB,EAAQuB,WAAY,CACzBvB,EAAUA,EAAQuB,WAClB,IAAIC,EAAKrJ,GAAQZ,QAAQyI,GACzB,GAAIiG,EAAUzE,GACZ,OAAOtd,EAAOP,KAAK6d,GACd,GAAIF,EAAKE,GACd,MAGJ,OAAOtd,EAAOrC,QAEZ6f,GAAU,SAAU3K,EAAOkP,EAAW5E,GACxC,IAAI/e,EAAK,SAAU/B,EAAGqY,GACpB,OAAOA,EAAKrY,IAEd,OAAOigC,GAAkBl+B,EAAI6e,GAAUpK,EAAOkP,EAAW5E,IAGvDqf,GAAa,SAAU3pB,EAAOkJ,EAAUoB,GAC1C,OAAOF,GAASpK,GAAO,SAAU/V,GAC/B,OAAOsB,GAAGtB,EAAGif,KACZoB,IAEDsf,GAAa,SAAU5pB,EAAOkJ,GAChC,OAAOS,GAAIT,EAAUlJ,IAEnBoQ,GAAY,SAAUpQ,EAAOkJ,EAAUoB,GACzC,OAAOmf,GAAkBl+B,GAAIo+B,GAAY3pB,EAAOkJ,EAAUoB,IAGxDkhR,GAAazjS,EAAS,kBACtB0jS,GAAiB1jS,EAAS,uBAC1B2jS,GAAmB3jS,EAAS,2BAE5Bu3J,GAAW,SAAUljF,EAAQuvN,GAC/B,IAAI5rP,EAAMq8B,EAAOt8B,UAAU6nC,SACvB9gE,EAAQzF,GAAQZ,QAAQu/B,EAAIC,gBAC5B6E,EAAOzjC,GAAQZ,QAAQ47D,EAAOv8C,WAC9B3W,EAAWyiR,EAAergS,MAAK,WACjC,MAAO,IAAMkgS,QACZ,SAAUI,GACX,MAAO,IAAMH,KAAmB,KAAOG,EAAK,QAE1CC,EAAWx5Q,GAAMxL,EAAOk5B,EAAIwB,aAAa91C,MAAMob,GAC/C8D,EAAUyF,GAAUy7Q,EAAU3iR,GAAU,SAAUxf,GACpD,OAAOsB,GAAGtB,EAAGm7C,MAEXinP,EAAU,SAAUz7Q,EAAG0P,GACzB,OAAIxK,GAAMlF,EAAG0P,GACJ5yB,EAAOP,KAAKkyB,GAAMzO,EAAG0P,IAErB5yB,EAAOrC,QAGlB,OAAO6f,EAAQxe,MAAK,SAAUkkB,GAC5B,OAAOy7Q,EAAQz7Q,EAAG,GAAKq7Q,MAAoBv/R,MAAK,SAAUujB,GACxD,OAAOo8Q,EAAQz7Q,EAAG,GAAKo7Q,MAAkBx/R,KAAI,SAAUoC,GACrD,IAAIilB,EAAWy4Q,GAAY3vN,EAAQ1sD,GACnC,MAAO,CACLA,IAAKA,EACLrhB,KAAMA,EACNilB,SAAUA,aAMhB04Q,GAAe,SAAU5iR,GAC3B,OAAOyL,GAAUzL,IAASiW,GAAMjW,EAAMoiR,OAEpCO,GAAc,SAAU3vN,EAAQ1sD,GAClC,IAAIkQ,EAAOxe,GAAQZ,QAAQ47D,EAAOv8C,WAClC,OAAO6qD,GAAc9qD,EAAM,IAAM8rQ,KAAqB,KAAOh8Q,EAAM,OAEjEu8Q,GAAU,SAAU7vN,EAAQ/tE,GAC9B,IAAIuxB,EAAOxe,GAAQZ,QAAQ47D,EAAOv8C,WAC9BiN,EAAU49C,GAAc9qD,EAAM,IAAM6rQ,KAAmB,KAAOp9R,EAAO,MACrEilE,EAAY,GAMhB,OALApnE,EAAK4gC,GAAS,SAAUiqD,GACtB,IAAIrnE,EAAMoP,GAAMi4D,EAAG20M,MACfQ,EAAe54N,EAAUzpE,eAAe6lB,GAAO4jD,EAAU5jD,GAAO,GACpE4jD,EAAU5jD,GAAOw8Q,EAAa1jS,OAAO,CAACuuF,OAEjCzjB,GAGL8C,GAAQ,SAAUgG,EAAQkN,GAC5B,IAAI6iN,EAAkBzsR,GAAK,IACvB0sR,EAAW,WACb,MAAO,CACLjjM,UAAW,GACXu8E,SAAUhmK,GAAKvS,EAAOrC,UAGtBuhS,EAAgB,SAAUh+R,EAAM/G,GAClCglS,EAAgBj+R,GAAM,SAAUugB,GAE9B,OADAtnB,EAAEsnB,GACKA,MAGP09Q,EAAkB,SAAUj+R,EAAM/G,GACpC,IAAIilS,EAAcJ,EAAgBl6R,MAC9B2c,EAAO29Q,EAAY1iS,eAAewE,GAAQk+R,EAAYl+R,GAAQ+9R,IAC9DI,EAAallS,EAAEsnB,GACnB29Q,EAAYl+R,GAAQm+R,EACpBL,EAAgBvsR,IAAI2sR,IAElBE,EAAgB,SAAUp+R,EAAMqhB,EAAK4D,GACvC+4Q,EAAch+R,GAAM,SAAUugB,GAC5B1iB,EAAK0iB,EAAKu6E,WAAW,SAAU7hG,GAC7B,OAAOA,GAAE,EAAM+G,EAAM,CACnBqhB,IAAKA,EACLy2K,MAAOl6L,EAAIqnB,GAAU,SAAUlK,GAC7B,OAAOA,EAAKrI,kBAMlB2rR,EAAmB,SAAUr+R,GAC/Bg+R,EAAch+R,GAAM,SAAUugB,GAC5B1iB,EAAK0iB,EAAKu6E,WAAW,SAAU7hG,GAC7B,OAAOA,GAAE,EAAO+G,UAIlBqrK,EAAeh2F,IAAO,WACxB,IAAI6oN,EAAcJ,EAAgBl6R,MAC9BwoP,EAAczpP,EAAKO,EAAKg7R,IAC5BrgS,EAAKuuP,GAAa,SAAUpsP,GAC1Bi+R,EAAgBj+R,GAAM,SAAUugB,GAC9B,IAAIk+I,EAAOl+I,EAAK82J,SAASzzK,MAazB,OAZAqtJ,GAASljF,EAAQjvE,EAAOP,KAAKyB,IAAO/C,MAAK,WACnCwhK,EAAKthK,WACPkhS,EAAiBr+R,GACjBugB,EAAK82J,SAAS9lK,IAAIzS,EAAOrC,YAE1B,SAAUqL,GACX,IAAIuZ,EAAMvZ,EAAGuZ,IAAKrhB,EAAO8H,EAAG9H,KAAMilB,EAAWnd,EAAGmd,SAC3Cw5I,EAAKvhK,GAAGmkB,KACX+8Q,EAAcp+R,EAAMqhB,EAAK4D,GACzB1E,EAAK82J,SAAS9lK,IAAIzS,EAAOP,KAAK8iB,QAG3B,CACLg2J,SAAU92J,EAAK82J,SACfv8E,UAAWv6E,EAAKu6E,mBAIrB,IACH/sB,EAAOpjC,GAAG,UAAU,WAClB0gI,EAAan2F,YAEfnH,EAAOpjC,GAAG,cAAc,WACtB0gI,EAAaj2F,cAEf,IAAIurB,EAAc,SAAU3gG,EAAM/G,GAChCglS,EAAgBj+R,GAAM,SAAUugB,GAC9B,MAAO,CACL82J,SAAU92J,EAAK82J,SACfv8E,UAAWv6E,EAAKu6E,UAAU3gG,OAAO,CAAClB,SAIxC,MAAO,CAAE0nG,YAAaA,IAGpB1H,GAAU,SAAUlrB,EAAQkN,GAC9B,IAAIqjN,EAAqB,SAAU/xL,GACjC,OAAOztG,EAAOD,KAAK0tG,EAAKn8E,KAAKgtQ,OAAmBt/R,KAAKm9E,EAAS36B,SAEhEytB,EAAOpjC,GAAG,QAAQ,WAChBojC,EAAOkqH,WAAWD,cAAc,QAAQ,SAAUiW,GAChDpwM,EAAKowM,GAAO,SAAU1hG,GACpB+xL,EAAmB/xL,GAAM1uG,MAAK,SAAUmwE,IACV,IAAxBA,EAASuwN,YACXhyL,EAAK/mF,sBAQb2e,GAAW,WACb,IAAIioN,EAAc,GACdtxK,EAAW,SAAU96E,EAAMguE,GAC7Bo+K,EAAYpsP,GAAQ,CAClBA,KAAMA,EACNguE,SAAUA,IAGV1tB,EAAS,SAAUtgD,GACrB,OAAOosP,EAAY5wP,eAAewE,GAAQlB,EAAOD,KAAKutP,EAAYpsP,IAAOpC,KAAI,SAAUvB,GACrF,OAAOA,EAAE2xE,YACNlvE,EAAOrC,QAEd,MAAO,CACLq+E,SAAUA,EACVx6B,OAAQA,IAIRt4B,GAAS,EACThkB,GAAW,SAAUkkB,GACvB,IAAIC,EAAO,IAAIC,KACXC,EAAOF,EAAKG,UACZC,EAASC,KAAKC,MAAsB,IAAhBD,KAAKD,UAE7B,OADAP,KACOE,EAAS,IAAMK,EAASP,GAASxoB,OAAO6oB,IAG7C4nJ,GAAQ,SAAUr1J,EAAS+R,GAC7B9uB,EAAK8uB,GAAS,SAAU9yB,GACtBo3B,GAAMrW,EAAS/gB,OAIfuqB,GAAa,SAAU1S,EAAMC,GAC/B,IAAIC,EAAMD,GAAS7Y,EAAW+Y,SAC1BC,EAAMF,EAAIG,cAAc,OAE5B,OADAD,EAAIE,UAAYN,EACTqS,GAAShR,GAAQZ,QAAQL,KAG9BskB,GAAQ,SAAUxb,GACpB,OAAOA,EAAQlI,MAAMV,WAEnB4U,GAAQ,SAAUhM,EAASgL,GAC7B,IAAIC,EAAUrC,GAAM5I,GAChBkL,EAASD,EAAQnT,MACjBqT,EAAWhT,GAAQZ,QAAQ2T,EAAOE,0BAClCC,EAAkB7B,GAAWwB,EAASE,GAC1CZ,GAASa,EAAUE,GACnBd,GAAMvK,GACN+J,GAAO/J,EAASmL,IAGdvU,GAAQ,SAAU8V,EAAUC,GAC9B,OAAOxU,GAAQZ,QAAQmV,EAAS5U,MAAM0T,UAAUmB,KAE9CliB,GAAU,SAAUiiB,GACtB,OAAO9V,GAAM8V,GAAU,IAErB9hB,GAAO,SAAU8hB,GACnB,OAAO9V,GAAM8V,GAAU,IAGrBk3Q,GAAOtuP,GACPuuP,GAAS,SAAU9nN,GACrB,OAAOA,IAAQ6nN,IAEbE,GAAS,SAAUlsR,GACrB,OAAOA,EAAKuB,QAAQ,IAAIyyE,OAAOg4M,GAAM,KAAM,KAEzCG,GAAO,CACTF,OAAQA,GACRD,KAAMA,GACN5lR,KAAM8lR,IAGJE,GAAc7hG,GAASv2K,UACvBq4Q,GAAW9hG,GAASt2K,OACpBq4Q,GAAwB,SAAUxsR,GAIpC,OAHIusR,GAASvsR,KACXA,EAAOA,EAAK6J,YAEPyiR,GAAYtsR,IAASA,EAAK6U,aAAa,mBAE5C43Q,GAAyB,SAAUzsR,GACrC,OAAOusR,GAASvsR,IAASqsR,GAAKF,OAAOnsR,EAAKiO,OAExCy+Q,GAAmB,SAAU1sR,GAC/B,OAAOwsR,GAAsBxsR,IAASysR,GAAuBzsR,IAE3D2sR,GAAa,SAAU3sR,GACzB,OAAOA,EAAK6R,aAAe7R,EAAKgpL,YAAcyB,GAASZ,KAAK7pL,EAAK6R,aAE/D+6Q,GAAe,SAAU5sR,EAAM+R,GACjC,IAAIzS,EAAK8S,EAASy6Q,EAAUhjR,EAI5B,GAHAvK,EAAMU,EAAKmR,cACX07Q,EAAWvtR,EAAIa,eAAeksR,GAAKH,MACnCriR,EAAa7J,EAAK6J,WACbkI,EAgBE,CAEL,GADAK,EAAUpS,EAAKoqL,gBACXmiG,GAASn6Q,GAAU,CACrB,GAAIs6Q,GAAiBt6Q,GACnB,OAAOA,EAET,GAAI06Q,GAAuB16Q,GACzB,OAAOA,EAAQ26Q,UAAU36Q,EAAQnE,KAAK/mB,OAAS,GAGnD2iB,EAAWqI,aAAa26Q,EAAU7sR,OA1BvB,CAEX,GADAoS,EAAUpS,EAAKwR,YACX+6Q,GAASn6Q,GAAU,CACrB,GAAIs6Q,GAAiBt6Q,GACnB,OAAOA,EAET,GAAI46Q,GAAyB56Q,GAE3B,OADAA,EAAQ26Q,UAAU,GACX36Q,EAGPpS,EAAKwR,YACP3H,EAAWqI,aAAa26Q,EAAU7sR,EAAKwR,aAEvC3H,EAAW2I,YAAYq6Q,GAc3B,OAAOA,GAELI,GAAiB,SAAU/3P,GAC7B,IAAIrhB,EAAYqhB,EAAIrhB,YACpB,SAAKqhB,IAAQu1J,GAASt2K,OAAON,MAGtBA,EAAU5F,KAAKy2D,OAAOxvC,EAAI7M,YAAcgkQ,GAAKH,MAAQh3P,EAAIg4P,aAAeT,GAAuB54Q,EAAUu2K,mBAE9G+iG,GAAgB,SAAUj4P,GAC5B,IAAIrhB,EAAYqhB,EAAIrhB,YACpB,SAAKqhB,IAAQu1J,GAASt2K,OAAON,MAGtBA,EAAU5F,KAAKy2D,OAAOxvC,EAAI7M,SAAW,KAAOgkQ,GAAKH,MAAQh3P,EAAIk4P,WAAaX,GAAuB54Q,EAAUrC,eAEhH67Q,GAAgB,WAClB,IAAIlwC,EAAK32P,EAAW+Y,SAASE,cAAc,MAE3C,OADA09O,EAAG9oO,aAAa,iBAAkB,KAC3B8oO,GAELmwC,GAAc,SAAUzgG,EAAW7sL,EAAM+R,GAC3C,IAAIzS,EAAKiuR,EAAW1jR,EAgBpB,OAfAvK,EAAMU,EAAKmR,cACXo8Q,EAAYjuR,EAAIG,cAAcotL,GAC9B0gG,EAAUl5Q,aAAa,iBAAkBtC,EAAS,SAAW,SAC7Dw7Q,EAAUl5Q,aAAa,iBAAkB,OACzCk5Q,EAAU/6Q,YAAY66Q,MACtBxjR,EAAa7J,EAAK6J,WACbkI,EAOHlI,EAAWqI,aAAaq7Q,EAAWvtR,GAN/BA,EAAKwR,YACP3H,EAAWqI,aAAaq7Q,EAAWvtR,EAAKwR,aAExC3H,EAAW2I,YAAY+6Q,GAKpBA,GAELP,GAA2B,SAAUhtR,GACvC,OAAOusR,GAASvsR,IAASA,EAAKiO,KAAK,KAAOo+Q,GAAKH,MAE7CY,GAAyB,SAAU9sR,GACrC,OAAOusR,GAASvsR,IAASA,EAAKiO,KAAKjO,EAAKiO,KAAK/mB,OAAS,KAAOmlS,GAAKH,MAEhEsB,GAAc,SAAUzpN,GAC1B,IAAI0pN,EAAM1pN,EAAI63H,qBAAqB,MAC/B8xF,EAASD,EAAIA,EAAIvmS,OAAS,GAC1BujM,GAASi2E,QAAQgtB,IACnBA,EAAO7jR,WAAWoJ,YAAYy6Q,IAG9BC,GAA0B,SAAUC,GACtC,OAAIA,GAAkBA,EAAe/4Q,aAAa,mBAChD24Q,GAAYI,GACZA,EAAe74Q,gBAAgB,kBAC/B64Q,EAAe74Q,gBAAgB,kBAC/B64Q,EAAe74Q,gBAAgB,SAC/B64Q,EAAe74Q,gBAAgB,eACxB64Q,GAEF,MAELC,GAA+B,SAAU9+R,GAC3C,OAAOy9R,GAAsBz9R,EAAMswC,iBAGjCyuP,GAA0BrjG,GAAShpD,sBACnCssJ,GAA2BtjG,GAAS/oD,uBACpCssJ,GAASvjG,GAASZ,KAClBokG,GAAWxjG,GAASt2K,OACpB+5Q,GAAuBzjG,GAASw1E,eAAe,CACjD,SACA,QACA,aAEEkuB,GAAiB1jG,GAASw1E,eAAe,CAC3C,MACA,QACA,WACA,KACA,SACA,QACA,QACA,WAEEmuB,GAAY3jG,GAASw1E,eAAe,CAAC,UACrCouB,GAAqB3B,GACrB4B,GAAmB,SAAUtuR,GAC/B,OAAIquR,GAAmBruR,KAGnBiuR,GAASjuR,IACPkuR,GAAqBluR,EAAK6J,YAKzBskR,GAAenuR,IAASguR,GAAOhuR,IAASouR,GAAUpuR,IAASuuR,GAA4BvuR,KAE5FwuR,GAAiB,SAAUxuR,GAC7B,OAAOyqL,GAASv2K,UAAUlU,IAA+C,SAAtCA,EAAK0U,aAAa,iBAEnD65Q,GAA8B,SAAUvuR,GAC1C,OAAgC,IAAzBwuR,GAAexuR,IAAmB+tR,GAAyB/tR,IAEhEyuR,GAAe,SAAUzuR,EAAMkkC,GACjC,IAAKlkC,EAAOA,EAAK6J,WAAY7J,GAAQA,IAASkkC,EAAMlkC,EAAOA,EAAK6J,WAAY,CAC1E,GAAI0kR,GAA4BvuR,GAC9B,OAAO,EAET,GAAI8tR,GAAwB9tR,GAC1B,OAAO,EAGX,OAAO,GAEL0uR,GAA+B,SAAU1uR,GAC3C,QAAKuuR,GAA4BvuR,KAKnB,IAFPrQ,EAAMe,EAAOsP,EAAK47L,qBAAqB,OAAO,SAAU3lM,EAAQ8tE,GACrE,OAAO9tE,GAAU63R,GAAwB/pN,MACxC,IAED4qN,GAAW,SAAU3uR,GACvB,OAAOmuR,GAAenuR,IAAS0uR,GAA6B1uR,IAE1D4uR,GAA2B,SAAU5uR,EAAMkkC,GAC7C,OAAOoqP,GAAiBtuR,IAASyuR,GAAazuR,EAAMkkC,IAGlD6yC,GAAQ7gE,KAAK6gE,MACb+5B,GAAU,SAAUtoF,GACtB,OAAKA,EAUE,CACLrE,KAAM4yD,GAAMvuD,EAAKrE,MACjBC,IAAK2yD,GAAMvuD,EAAKpE,KAChB+C,OAAQ4vD,GAAMvuD,EAAKrB,QACnBD,MAAO6vD,GAAMvuD,EAAKtB,OAClBD,MAAO8vD,GAAMvuD,EAAKvB,OAClBrD,OAAQmzD,GAAMvuD,EAAK5E,SAfZ,CACLO,KAAM,EACNC,IAAK,EACL+C,OAAQ,EACRD,MAAO,EACPD,MAAO,EACPrD,OAAQ,IAYV0wC,GAAW,SAAU9rC,EAAMm6N,GAS7B,OARAn6N,EAAOsoF,GAAQtoF,GACXm6N,IAGFn6N,EAAKrE,KAAOqE,EAAKrE,KAAOqE,EAAKvB,OAF7BuB,EAAKtB,MAAQsB,EAAKrE,KAKpBqE,EAAKvB,MAAQ,EACNuB,GAELqmQ,GAAU,SAAUC,EAAOC,GAC7B,OAAOD,EAAM3qQ,OAAS4qQ,EAAM5qQ,MAAQ2qQ,EAAM1qQ,MAAQ2qQ,EAAM3qQ,KAAO0qQ,EAAM3nQ,SAAW4nQ,EAAM5nQ,QAAU2nQ,EAAM5nQ,QAAU6nQ,EAAM7nQ,OAEpH8nQ,GAAkB,SAAUC,EAAWH,EAAOC,GAChD,OAAOE,GAAa,GAAKA,GAAa/4Q,KAAK2f,IAAIi5P,EAAMlrQ,OAAQmrQ,EAAMnrQ,QAAU,GAE3EyjJ,GAAU,SAAUynH,EAAOC,GAC7B,OAAID,EAAM3nQ,OAAS2nQ,EAAMlrQ,OAAS,EAAImrQ,EAAM3qQ,OAGxC0qQ,EAAM1qQ,IAAM2qQ,EAAM5nQ,SAGf6nQ,GAAgBD,EAAM3qQ,IAAM0qQ,EAAM3nQ,OAAQ2nQ,EAAOC,IAEtDznH,GAAU,SAAUwnH,EAAOC,GAC7B,OAAID,EAAM1qQ,IAAM2qQ,EAAM5nQ,UAGlB2nQ,EAAM3nQ,OAAS4nQ,EAAM3qQ,MAGlB4qQ,GAAgBD,EAAM5nQ,OAAS2nQ,EAAM1qQ,IAAK0qQ,EAAOC,IAEtDG,GAAa,SAAU1mQ,EAAMzC,EAASC,GACxC,OAAOD,GAAWyC,EAAKrE,MAAQ4B,GAAWyC,EAAKtB,OAASlB,GAAWwC,EAAKpE,KAAO4B,GAAWwC,EAAKrB,QAG7FgoQ,GAAkB,SAAUpgS,GAC9B,IAAIswC,EAAiBtwC,EAAMswC,eAAgBuB,EAAc7xC,EAAM6xC,YAC/D,OAAIvB,EAAe1/B,iBAAmB5Q,EAAM+xC,YAAcF,EAAc,EAC/DvB,EAAez/B,WAAWghC,GAE5B,MAEL+iC,GAAU,SAAU9vD,EAAWwU,GAOjC,OAN2B,IAAvBxU,EAAUrL,UAAkBqL,EAAUlU,kBACpC0oB,GAAUxU,EAAUjU,WAAW1Y,SACjCmhC,EAASxU,EAAUjU,WAAW1Y,OAAS,GAEzC2sB,EAAYA,EAAUjU,WAAWyoB,IAE5BxU,GAGLu7Q,GAAiB,IAAIl7M,OAAO,weAC5Bm7M,GAAkB,SAAUz0R,GAC9B,MAAqB,kBAAPA,GAAmBA,EAAGs4G,WAAW,IAAM,KAAOk8K,GAAeluR,KAAKtG,IAG9Ew8C,GAAQ,SAAUC,EAAIC,EAAI3wD,GAC5B,OAAO0wD,EAAGxsD,UAAYysD,EAAGzsD,SAAW2B,EAAOP,KAAKtF,EAAE0wD,EAAGrsD,WAAYssD,EAAGtsD,aAAewB,EAAOrC,QAExFotD,GAAQ,SAAUF,EAAIC,EAAIE,EAAI7wD,GAChC,OAAO0wD,EAAGxsD,UAAYysD,EAAGzsD,UAAY2sD,EAAG3sD,SAAW2B,EAAOP,KAAKtF,EAAE0wD,EAAGrsD,WAAYssD,EAAGtsD,WAAYwsD,EAAGxsD,aAAewB,EAAOrC,QAEtHmlS,GAAS,SAAUhjS,EAAGvC,GACxB,OAAOuC,EAAIE,EAAOP,KAAKlC,GAAKyC,EAAOrC,QAGjColS,GAAU,GAAGhhS,MACbnD,GAAK,WAEP,IADA,IAAI7D,EAAI,GACCP,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACtCO,EAAEP,GAAMC,UAAUD,GAEpB,IAAID,EAAOwoS,GAAQpmS,KAAKlC,WACxB,OAAO,SAAUM,GACf,IAAK,IAAIuB,EAAI,EAAGA,EAAI/B,EAAKG,OAAQ4B,IAC/B,GAAI/B,EAAK+B,GAAGvB,GACV,OAAO,EAGX,OAAO,IAGP2zD,GAAM,WAER,IADA,IAAI3zD,EAAI,GACCP,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACtCO,EAAEP,GAAMC,UAAUD,GAEpB,IAAID,EAAOwoS,GAAQpmS,KAAKlC,WACxB,OAAO,SAAUM,GACf,IAAK,IAAIuB,EAAI,EAAGA,EAAI/B,EAAKG,OAAQ4B,IAC/B,IAAK/B,EAAK+B,GAAGvB,GACX,OAAO,EAGX,OAAO,IAGPioS,GAAY,CACdt0O,IAAKA,GACL9vD,GAAIA,IAGFqkS,GAAchlG,GAASv2K,UACvBw7Q,GAAqBpB,GACrBnuD,GAAY11C,GAAS01E,iBAAiB,UAAW,eACjDwvB,GAAYllG,GAAS01E,iBAAiB,QAAS,cAC/CyvB,GAA+BJ,GAAUt0O,IAAIu0O,GAAaC,GAAoB5nS,EAAI6nS,KAClFE,GAAW/nS,EAAI2iM,GAAS01E,iBAAiB,cAAe,0BACxD2vB,GAAWrlG,GAASt2K,OACpB47Q,GAAStlG,GAASZ,KAClB8I,GAAYm0F,GAAWn0F,UACvBq9F,GAAersN,GACfvjC,GAAc,SAAU9gC,GAC1B,MAAO,gBAAiBA,EAAMA,EAAI8gC,cAAgB0mP,GAAWvqN,IAAIgJ,aAE/D0qN,GAAe,SAAU5rN,GAC3B,OAAOA,GAAO,YAAYnjE,KAAKmjE,IAE7B6rN,GAAU,SAAU9wP,GACtB,QAASA,EAAIQ,YAAcR,EAAIa,QAE7BkwP,GAA0B,SAAUphS,GACtC,IAEImR,EAFA2T,EAAY9kB,EAAMswC,eAClBhX,EAASt5B,EAAM6xC,YAEnB,SAAIqvP,GAAalhS,EAAMhD,aAAe8jS,GAASh8Q,EAAUhK,aAAe4gL,GAASt2K,OAAON,KACtF3T,EAAO2T,EAAU5F,KACbgiR,GAAa/vR,EAAKmoB,EAAS,KAAO4nQ,GAAa/vR,EAAKmoB,EAAS,OAMjE+nQ,GAAkB,SAAUC,GAC9B,IAIIC,EAJAhxR,EAAM+wR,EAAOl/Q,cACbiuB,EAAMgB,GAAY9gC,GAClBixR,EAASjxR,EAAIa,eAAe09B,IAC5Bh0B,EAAawmR,EAAOxmR,WAOxB,OALAA,EAAWqI,aAAaq+Q,EAAQF,GAChCjxP,EAAIQ,SAAS2wP,EAAQ,GACrBnxP,EAAIa,OAAOswP,EAAQ,GACnBD,EAAax/K,GAAQ1xE,EAAIzb,yBACzB9Z,EAAWoJ,YAAYs9Q,GAChBD,GAELE,GAAkC,SAAUpxP,GAC9C,IAAIokL,EAAKpkL,EAAIC,eACToxP,EAAKrxP,EAAIyB,aACT6vP,EAAKtxP,EAAIwB,YACT+vP,EAAKvxP,EAAI0B,UACb,GAAI0iL,IAAOitE,GAAMhmG,GAASt2K,OAAOs8Q,IAAc,IAAPC,GAAmB,IAAPC,EAAU,CAC5D,IAAIC,EAASxxP,EAAI8lC,aAEjB,OADA0rN,EAAO1wP,YAAYuwP,GACZ9sQ,GAAsBitQ,GAE7B,OAAO,MAGPC,GAAa,SAAUjnS,GACzB,OAAkB,IAAXA,EAAEu6B,MAA0B,IAAZv6B,EAAEs9B,OAAyB,IAAVt9B,EAAEw6B,KAA0B,IAAbx6B,EAAEu9B,QAEvDxD,GAAwB,SAAUxD,GACpC,IAAImwQ,EAAYQ,EAOhB,OANAA,EAAc3wQ,EAAKsgB,iBAEjB6vP,EADEQ,EAAY5pS,OAAS,EACV4pH,GAAQggL,EAAY,IAEpBhgL,GAAQ3wF,EAAKwD,0BAEvBusQ,GAAQ/vQ,IAAS4vQ,GAAO5vQ,IAAS0wQ,GAAWP,GACxCF,GAAgBjwQ,GAErB0wQ,GAAWP,IAAeJ,GAAQ/vQ,GAC7BqwQ,GAAgCrwQ,GAElCmwQ,GAELS,GAA0B,SAAUT,EAAY3tC,GAClD,IAAIquC,EAAgB18N,GAASg8N,EAAY3tC,GAGzC,OAFAquC,EAAc/pQ,MAAQ,EACtB+pQ,EAAc9pQ,MAAQ8pQ,EAAc7sQ,KAAO,EACpC6sQ,GAELC,GAA8B,SAAUC,GAC1C,IACIC,EAAYnxR,EADZ8wR,EAAc,GAEdM,EAAwB,SAAUd,GACV,IAAtBA,EAAW1sQ,SAGXktQ,EAAY5pS,OAAS,GACnB2nS,GAAQyB,EAAYQ,EAAYA,EAAY5pS,OAAS,KAI3D4pS,EAAYpiS,KAAK4hS,KAEfe,EAAqB,SAAUx9Q,EAAWwU,GAC5C,IAAIt5B,EAAQqxC,GAAYvsB,EAAU1C,eAClC,GAAIkX,EAASxU,EAAU5F,KAAK/mB,OAAQ,CAClC,GAAImoS,GAAgBx7Q,EAAU5F,KAAKoa,IACjC,OAAOyoQ,EAET,GAAIzB,GAAgBx7Q,EAAU5F,KAAKoa,EAAS,MAC1Ct5B,EAAM6wC,SAAS/rB,EAAWwU,GAC1Bt5B,EAAMkxC,OAAOpsB,EAAWwU,EAAS,IAC5B8nQ,GAAwBphS,IAE3B,OADAqiS,EAAsBL,GAAwBptQ,GAAsB50B,IAAQ,IACrE+hS,EAITzoQ,EAAS,IACXt5B,EAAM6wC,SAAS/rB,EAAWwU,EAAS,GACnCt5B,EAAMkxC,OAAOpsB,EAAWwU,GACnB8nQ,GAAwBphS,IAC3BqiS,EAAsBL,GAAwBptQ,GAAsB50B,IAAQ,KAG5Es5B,EAASxU,EAAU5F,KAAK/mB,SAC1B6H,EAAM6wC,SAAS/rB,EAAWwU,GAC1Bt5B,EAAMkxC,OAAOpsB,EAAWwU,EAAS,GAC5B8nQ,GAAwBphS,IAC3BqiS,EAAsBL,GAAwBptQ,GAAsB50B,IAAQ,MAIlF,GAAI+gS,GAASoB,EAAcr9Q,aAEzB,OADAw9Q,EAAmBH,EAAcr9Q,YAAaq9Q,EAAc7oQ,UACrDyoQ,EAET,GAAIrB,GAAYyB,EAAcr9Q,aAC5B,GAAIq9Q,EAAc9D,UAChBptR,EAAOgwR,GAAakB,EAAcr9Q,YAAaq9Q,EAAc7oQ,UACzDynQ,GAAS9vR,IACXqxR,EAAmBrxR,EAAMA,EAAKiO,KAAK/mB,QAEjC0oS,GAA6B5vR,KAAU+vR,GAAO/vR,IAChDoxR,EAAsBL,GAAwBptQ,GAAsB3jB,IAAO,QAExE,CAKL,GAJAA,EAAOgwR,GAAakB,EAAcr9Q,YAAaq9Q,EAAc7oQ,UACzDynQ,GAAS9vR,IACXqxR,EAAmBrxR,EAAM,GAEvB4vR,GAA6B5vR,IAASkxR,EAAc9D,UAEtD,OADAgE,EAAsBL,GAAwBptQ,GAAsB3jB,IAAO,IACpE8wR,EAETK,EAAanB,GAAakB,EAAcr9Q,YAAaq9Q,EAAc7oQ,SAAW,GAC1EunQ,GAA6BuB,KAAgBpB,GAAOoB,KAClDhxD,GAAUgxD,IAAehxD,GAAUngO,KAAU4vR,GAA6B5vR,KAC5EoxR,EAAsBL,GAAwBptQ,GAAsBwtQ,IAAa,IAGjFvB,GAA6B5vR,IAC/BoxR,EAAsBL,GAAwBptQ,GAAsB3jB,IAAO,IAIjF,OAAO8wR,GAET,SAASQ,GAAcz9Q,EAAWwU,EAAQyoQ,GACxC,IAAI5D,EAAY,WACd,OAAI4C,GAASj8Q,GACO,IAAXwU,GAIP+kQ,EAAU,WACZ,OAAI0C,GAASj8Q,GACJwU,GAAUxU,EAAU5F,KAAK/mB,OAE3BmhC,GAAUxU,EAAUjU,WAAW1Y,QAEpCqqS,EAAU,WACZ,IAAIxiS,EAIJ,OAHAA,EAAQqxC,GAAYvsB,EAAU1C,eAC9BpiB,EAAM6wC,SAAS/rB,EAAWwU,GAC1Bt5B,EAAMkxC,OAAOpsB,EAAWwU,GACjBt5B,GAEL0xC,EAAiB,WAInB,OAHKqwP,IACHA,EAAcG,GAA4BK,GAAcz9Q,EAAWwU,KAE9DyoQ,GAELtzO,EAAY,WACd,OAAO/c,IAAiBv5C,OAAS,GAE/B2nS,EAAU,SAAUqC,GACtB,OAAOA,GAAiBr9Q,IAAcq9Q,EAAcr9Q,aAAewU,IAAW6oQ,EAAc7oQ,UAE1Fs7C,EAAU,SAAU5xD,GACtB,OAAOi+Q,GAAan8Q,EAAW9B,EAASsW,EAAS,EAAIA,IAEvD,MAAO,CACLxU,UAAWzsB,EAASysB,GACpBwU,OAAQjhC,EAASihC,GACjBkpQ,QAASA,EACT9wP,eAAgBA,EAChB+c,UAAWA,EACX0vO,UAAWA,EACXE,QAASA,EACTyB,QAASA,EACTlrN,QAASA,IAGZ,SAAU2tN,GACTA,EAAcE,eAAiB,SAAUziS,GACvC,OAAOuiS,EAAcviS,EAAMswC,eAAgBtwC,EAAM6xC,cAEnD0wP,EAAcG,aAAe,SAAU1iS,GACrC,OAAOuiS,EAAcviS,EAAM8xC,aAAc9xC,EAAM+xC,YAEjDwwP,EAAcn/Q,MAAQ,SAAUnS,GAC9B,OAAOsxR,EAActxR,EAAK6J,WAAY8oL,GAAU3yL,GAAQ,IAE1DsxR,EAAcv/Q,OAAS,SAAU/R,GAC/B,OAAOsxR,EAActxR,EAAK6J,WAAY8oL,GAAU3yL,KAElDsxR,EAAcjqH,QAAU,SAAUqqH,EAAMC,GACtC,OAAOv6O,GAAM5mD,EAAKmhS,EAAKlxP,kBAAmBhwC,EAAKihS,EAAKjxP,kBAAmB4mI,IAASv8K,OAAM,IAExFwmS,EAAchqH,QAAU,SAAUoqH,EAAMC,GACtC,OAAOv6O,GAAM3mD,EAAKkhS,EAAKlxP,kBAAmBjwC,EAAKkhS,EAAKjxP,kBAAmB6mI,IAASx8K,OAAM,IAExFwmS,EAAcpE,UAAY,SAAUh4P,GAClC,QAAOA,GAAMA,EAAIg4P,aAEnBoE,EAAclE,QAAU,SAAUl4P,GAChC,QAAOA,GAAMA,EAAIk4P,WAEnBkE,EAAcM,eAAiB,SAAU18P,GACvC,QAAOA,GAAMu1J,GAASt2K,OAAO+gB,EAAIrhB,cAEnCy9Q,EAAcO,kBAAoB,SAAU38P,GAC1C,OAA6C,IAAtCo8P,EAAcM,eAAe18P,KA7BxC,CA+BEo8P,KAAkBA,GAAgB,KACpC,IAykCIQ,GAzkCAC,GAAkBT,GAElBU,GAAWvnG,GAASt2K,OACpB89Q,GAAYxnG,GAASi2E,QACrBwxB,GAAcpL,GAAWn0F,UACzBw/F,GAAmB,SAAUnyR,GAC/B,IAAI6J,EAAa7J,EAAK6J,WACtB,OAAIooR,GAAUpoR,GACLsoR,GAAiBtoR,GAEnBA,GAELuoR,GAAgB,SAAUpyR,GAC5B,OAAKA,EAGEojQ,GAASH,OAAOjjQ,EAAKJ,YAAY,SAAU3J,EAAQ+J,GAMxD,OALIiyR,GAAUjyR,IAA2B,OAAlBA,EAAKgU,SAC1B/d,EAASA,EAAOpO,OAAOuqS,GAAcpyR,IAErC/J,EAAOvH,KAAKsR,GAEP/J,IACN,IATM,IAWPo8R,GAAuB,SAAUryR,EAAMqoB,GACzC,MAAOroB,EAAOA,EAAKoqL,gBAAiB,CAClC,IAAK4nG,GAAShyR,GACZ,MAEFqoB,GAAUroB,EAAKiO,KAAK/mB,OAEtB,OAAOmhC,GAELiqQ,GAAQ,SAAUvoS,GACpB,OAAO,SAAUuC,GACf,OAAOvC,IAAMuC,IAGbimS,GAAsB,SAAUvyR,GAClC,IAAIwlL,EAAO7zK,EAAO6gR,EAYlB,OAXAhtG,EAAQ4sG,GAAcD,GAAiBnyR,IACvC2R,EAAQyxP,GAASvzQ,UAAU21L,EAAO8sG,GAAMtyR,GAAOA,GAC/CwlL,EAAQA,EAAMj3L,MAAM,EAAGojB,EAAQ,GAC/B6gR,EAAmBpvB,GAASH,OAAOz9E,GAAO,SAAUvvL,EAAQ+J,EAAMlX,GAIhE,OAHIkpS,GAAShyR,IAASgyR,GAASxsG,EAAM18L,EAAI,KACvCmN,IAEKA,IACN,GACHuvL,EAAQ49E,GAASz3Q,OAAO65L,EAAOiF,GAASw1E,eAAe,CAACjgQ,EAAKgU,YAC7DrC,EAAQyxP,GAASvzQ,UAAU21L,EAAO8sG,GAAMtyR,GAAOA,GACxC2R,EAAQ6gR,GAEbC,GAAiB,SAAUzyR,GAC7B,IAAItS,EAMJ,OAJEA,EADEskS,GAAShyR,GACJ,SAEAA,EAAKgU,SAASlS,cAEhBpU,EAAO,IAAM6kS,GAAoBvyR,GAAQ,KAE9CmiR,GAAe,SAAUj+O,EAAMlkC,EAAMuO,GACvC,IAAIyuI,EAAU,GACd,IAAKh9I,EAAOA,EAAK6J,WAAY7J,IAASkkC,EAAMlkC,EAAOA,EAAK6J,WAAY,CAClE,GAAI0E,GAAaA,EAAUvO,GACzB,MAEFg9I,EAAQtuJ,KAAKsR,GAEf,OAAOg9I,GAELl/G,GAAW,SAAUoG,EAAMgtP,GAC7B,IAAIr9Q,EAAWwU,EAAmBqqQ,EAAc9yR,EAAYo9I,EAArC3lJ,EAAO,GAqB9B,OApBAwc,EAAYq9Q,EAAcr9Q,YAC1BwU,EAAS6oQ,EAAc7oQ,SACnB2pQ,GAASn+Q,GACX6+Q,EAAeL,GAAqBx+Q,EAAWwU,IAE/CzoB,EAAaiU,EAAUjU,WACnByoB,GAAUzoB,EAAW1Y,QACvBwrS,EAAe,QACfrqQ,EAASzoB,EAAW1Y,OAAS,GAE7BwrS,EAAe,SAEjB7+Q,EAAYjU,EAAWyoB,IAEzBhxB,EAAK3I,KAAK+jS,GAAe5+Q,IACzBmpI,EAAUmlI,GAAaj+O,EAAMrwB,GAC7BmpI,EAAUomH,GAASz3Q,OAAOqxJ,EAASl1J,EAAI2iM,GAASi2E,UAChDrpQ,EAAOA,EAAKxP,OAAOu7Q,GAAS93Q,IAAI0xJ,GAAS,SAAUh9I,GACjD,OAAOyyR,GAAezyR,OAEjB3I,EAAKtH,UAAUsC,KAAK,KAAO,IAAMqgS,GAEtCC,GAAkB,SAAU3yR,EAAMtS,EAAMikB,GAC1C,IAAI6zK,EAAQ4sG,GAAcpyR,GAK1B,OAJAwlL,EAAQ49E,GAASz3Q,OAAO65L,GAAO,SAAUxlL,EAAM2R,GAC7C,OAAQqgR,GAAShyR,KAAUgyR,GAASxsG,EAAM7zK,EAAQ,OAEpD6zK,EAAQ49E,GAASz3Q,OAAO65L,EAAOiF,GAASw1E,eAAe,CAACvyQ,KACjD83L,EAAM7zK,IAEXihR,GAAmB,SAAU/+Q,EAAWwU,GAC1C,IAAwCwqQ,EAApC7yR,EAAO6T,EAAWi/Q,EAAe,EACrC,MAAOd,GAAShyR,GAAO,CAErB,GADA6yR,EAAU7yR,EAAKiO,KAAK/mB,OAChBmhC,GAAUyqQ,GAAgBzqQ,GAAUyqQ,EAAeD,EAAS,CAC9Dh/Q,EAAY7T,EACZqoB,GAAkByqQ,EAClB,MAEF,IAAKd,GAAShyR,EAAKwR,aAAc,CAC/BqC,EAAY7T,EACZqoB,EAASwqQ,EACT,MAEFC,GAAgBD,EAChB7yR,EAAOA,EAAKwR,YAKd,OAHIwgR,GAASn+Q,IAAcwU,EAASxU,EAAU5F,KAAK/mB,SACjDmhC,EAASxU,EAAU5F,KAAK/mB,QAEnB6qS,GAAgBl+Q,EAAWwU,IAEhC0qQ,GAAY,SAAU7uP,EAAM7sC,GAC9B,IAAIiT,EAAOuJ,EAAWwU,EACtB,OAAKhxB,GAGLiT,EAAQjT,EAAK+gB,MAAM,KACnB/gB,EAAOiT,EAAM,GAAG8N,MAAM,KACtBiQ,EAAS/d,EAAMpjB,OAAS,EAAIojB,EAAM,GAAK,SACvCuJ,EAAYuvP,GAASH,OAAO5rQ,GAAM,SAAUpB,EAAQ5O,GAElD,OADAA,EAAQ,4BAA4BmvF,KAAKnvF,GACpCA,GAGY,WAAbA,EAAM,KACRA,EAAM,GAAK,SAENsrS,GAAgB18R,EAAQ5O,EAAM,GAAIg8B,SAASh8B,EAAM,GAAI,MALnD,OAMR68C,GACErwB,EAGAm+Q,GAASn+Q,GAQP++Q,GAAiB/+Q,EAAWwP,SAASgF,EAAQ,MANhDA,EADa,UAAXA,EACO6pQ,GAAYr+Q,GAAa,EAEzBq+Q,GAAYr+Q,GAEhBk+Q,GAAgBl+Q,EAAUhK,WAAYwe,IARtC,MAhBA,MA6BP2qQ,GAAoB,SAAU5yR,EAAKJ,GACjCyqL,GAASt2K,OAAOnU,IAA8B,IAArBA,EAAKiO,KAAK/mB,QACrCkZ,EAAI4S,OAAOhT,IAGX8jE,GAAa,SAAU1jE,EAAKg/B,EAAKp/B,GACnCo/B,EAAI0kC,WAAW9jE,GACfgzR,GAAkB5yR,EAAKJ,EAAKoqL,iBAC5B4oG,GAAkB5yR,EAAKJ,EAAKwR,cAE1ByhR,GAAiB,SAAU7yR,EAAKg/B,EAAK2gP,GACvC,IAAIluQ,EAAarlB,EAAOD,KAAKwzR,EAAKluQ,YAC9Bm3K,EAAYx8L,EAAOD,KAAKwzR,EAAK/2F,WACjC5pJ,EAAI0kC,WAAWi8M,GACfluQ,EAAWtmB,MAAK,SAAUmmB,GACxB,OAAOshR,GAAkB5yR,EAAKsR,EAAM04K,oBAEtCpB,EAAUz9L,MAAK,SAAUmmB,GACvB,OAAOshR,GAAkB5yR,EAAKsR,EAAMF,iBAGpC0hR,GAAkB,SAAU9yR,EAAKg/B,EAAKp/B,GACpCyqL,GAASq2E,mBAAmB9gQ,GAC9BizR,GAAe7yR,EAAKg/B,EAAKp/B,GAEzB8jE,GAAW1jE,EAAKg/B,EAAKp/B,IAIrBmzR,GAA2B1oG,GAAS/oD,uBACpC0xJ,GAA0B,SAAU9sR,EAAMuN,EAAWwU,GACvD,IAAIroB,EAAMqzR,EAEV,IADAA,EAAgB/sR,EAAKuN,EAAU5F,KAAK1f,MAAM,EAAG85B,IAASnhC,OACjD8Y,EAAO6T,EAAUu2K,gBAAiBpqL,GAAQyqL,GAASt2K,OAAOnU,GAAOA,EAAOA,EAAKoqL,gBAChFipG,GAAiB/sR,EAAKtG,EAAKiO,MAAM/mB,OAEnC,OAAOmsS,GAELC,GAAW,SAAUlzR,EAAKkG,EAAMqyP,EAAYv5N,EAAKl5B,GACnD,IAGItG,EAHAiU,EAAYurB,EAAIl5B,EAAQ,iBAAmB,gBAC3CmiB,EAAS+W,EAAIl5B,EAAQ,cAAgB,aACrCo9B,EAAQ,GACInxB,EAAQ,EACpB+xB,EAAO9jC,EAAI4kE,UAWf,IAVIylH,GAASt2K,OAAON,GAClByvB,EAAM50C,KAAKiqQ,EAAay6B,GAAwB9sR,EAAMuN,EAAWwU,GAAUA,IAE3EzoB,EAAaiU,EAAUjU,WACnByoB,GAAUzoB,EAAW1Y,QAAU0Y,EAAW1Y,SAC5CirB,EAAQ,EACRkW,EAASnS,KAAKqN,IAAI,EAAG3jB,EAAW1Y,OAAS,IAE3Co8C,EAAM50C,KAAK0R,EAAIuyL,UAAU/yL,EAAWyoB,GAASswO,GAAcxmP,IAEtD0B,GAAaA,IAAcqwB,EAAMrwB,EAAYA,EAAUhK,WAC5Dy5B,EAAM50C,KAAK0R,EAAIuyL,UAAU9+K,EAAW8kP,IAEtC,OAAOr1N,GAELiwP,GAAc,SAAUjtR,EAAM64B,EAAWw5N,EAAYv5N,GACvD,IAAIh/B,EAAM++B,EAAU/+B,IAAK2xL,EAAW,GAKpC,OAJAA,EAAS7rL,MAAQotR,GAASlzR,EAAKkG,EAAMqyP,EAAYv5N,GAAK,GACjDD,EAAUmtG,gBACbylD,EAAS/+E,IAAMsgL,GAASlzR,EAAKkG,EAAMqyP,EAAYv5N,GAAK,IAE/C2yJ,GAELyhG,GAAc,SAAUpzR,EAAK1S,EAAM4a,GACrC,IAAIvW,EAAQ,EAUZ,OATAxJ,GAAMgD,KAAK6U,EAAIq9E,OAAO/vF,IAAO,SAAUsS,GACrC,GAA4C,QAAxCA,EAAK0U,aAAa,kBAGtB,OAAI1U,IAASsI,QAGbvW,OAEKA,GAEL0hS,GAAe,SAAUr0P,EAAKl5B,GAChC,IAAI2N,EAAWwU,EAAQzoB,EACnBgW,EAAS1P,EAAQ,QAAU,MAC/B2N,EAAYurB,EAAIxpB,EAAS,aACzByS,EAAS+W,EAAIxpB,EAAS,UAClB60K,GAASv2K,UAAUL,IAAqC,OAAvBA,EAAUG,WAC7CpU,EAAaiU,EAAUjU,WACvBiU,EAAYjU,EAAWsW,KAAK2f,IAAI3vB,EAAQmiB,EAASA,EAAS,EAAGzoB,EAAW1Y,OAAS,IAC7E2sB,IACFwU,EAASniB,EAAQ,EAAI2N,EAAUjU,WAAW1Y,OAC1Ck4C,EAAI,OAASl5B,EAAQ,QAAU,QAAQ2N,EAAWwU,MAIpDqrQ,GAA8B,SAAUt0P,GAG1C,OAFAq0P,GAAar0P,GAAK,GAClBq0P,GAAar0P,GAAK,GACXA,GAELqjP,GAAc,SAAUziR,EAAMqoB,GAChC,IAAIjW,EACJ,GAAIq4K,GAASv2K,UAAUlU,KACrBA,EAAO2jE,GAAQ3jE,EAAMqoB,GACjB8qQ,GAAyBnzR,IAC3B,OAAOA,EAGX,GAAI0sR,GAAiB1sR,GAAO,CAK1B,GAJIyqL,GAASt2K,OAAOnU,IAASwsR,GAAsBxsR,KACjDA,EAAOA,EAAK6J,YAEduI,EAAUpS,EAAKoqL,gBACX+oG,GAAyB/gR,GAC3B,OAAOA,EAGT,GADAA,EAAUpS,EAAKwR,YACX2hR,GAAyB/gR,GAC3B,OAAOA,IAITuhR,GAAsC,SAAUv0P,GAClD,OAAOqjP,GAAYrjP,EAAIC,eAAgBD,EAAIwB,cAAgB6hP,GAAYrjP,EAAIyB,aAAczB,EAAI0B,YAE3F8yP,GAAoB,SAAUttR,EAAMqyP,EAAYx5N,GAClD,IAAI72B,EAAU62B,EAAUwkC,UACpBj2E,EAAO4a,EAAUA,EAAQ0L,SAAW,KACpCorB,EAAMD,EAAU6nC,SACpB,GAAImsN,GAAyB7qR,IAAqB,QAAT5a,EACvC,MAAO,CACLA,KAAMA,EACNikB,MAAO6hR,GAAYr0P,EAAU/+B,IAAK1S,EAAM4a,IAG5C,IAAI8J,EAAUuhR,GAAoCv0P,GAClD,OAAIhtB,GACF1kB,EAAO0kB,EAAQsyK,QACR,CACLh3L,KAAMA,EACNikB,MAAO6hR,GAAYr0P,EAAU/+B,IAAK1S,EAAM0kB,KAGrCmhR,GAAYjtR,EAAM64B,EAAWw5N,EAAYv5N,IAE9Cy0P,GAAmB,SAAU10P,GAC/B,IAAIC,EAAMD,EAAU6nC,SACpB,MAAO,CACL9gE,MAAO43B,GAASqB,EAAU/+B,IAAI4kE,UAAW+sN,GAAgBP,eAAepyP,IACxE4zE,IAAKl1E,GAASqB,EAAU/+B,IAAI4kE,UAAW+sN,GAAgBN,aAAaryP,MAGpE00P,GAAmB,SAAU30P,GAC/B,MAAO,CAAEC,IAAKD,EAAU6nC,WAEtB+sN,GAAqB,SAAU3zR,EAAK3V,EAAIupS,GAC1C,IAAIjtS,EAAO,CACT,gBAAiB,WACjB,GAAM0D,EACN,MAAS,mCAEX,OAAOupS,EAAS5zR,EAAIiwB,OAAO,OAAQtpC,EAAM,YAAcqZ,EAAIiwB,OAAO,OAAQtpC,IAExEktS,GAAwB,SAAU90P,EAAW60P,GAC/C,IAAI5zR,EAAM++B,EAAU/+B,IAChBg/B,EAAMD,EAAU6nC,SAChBv8E,EAAK2V,EAAIw1M,WACT10K,EAAY/B,EAAUmtG,cACtBhkI,EAAU62B,EAAUwkC,UACpBj2E,EAAO4a,EAAQ0L,SACnB,GAAa,QAATtmB,EACF,MAAO,CACLA,KAAMA,EACNikB,MAAO6hR,GAAYpzR,EAAK1S,EAAM4a,IAGlC,IAAI4rR,EAAOR,GAA4Bt0P,EAAI8lC,cAC3C,IAAKhkC,EAAW,CACdgzP,EAAK5/N,UAAS,GACd,IAAI6/N,EAAkBJ,GAAmB3zR,EAAK3V,EAAK,OAAQupS,GAC3Dd,GAAgB9yR,EAAK8zR,EAAMC,GAE7B/0P,EAAMs0P,GAA4Bt0P,GAClCA,EAAIk1B,UAAS,GACb,IAAI8/N,EAAoBL,GAAmB3zR,EAAK3V,EAAK,SAAUupS,GAM/D,OALAd,GAAgB9yR,EAAKg/B,EAAKg1P,GAC1Bj1P,EAAU8yJ,eAAe,CACvBxnM,GAAIA,EACJ4pS,KAAM,IAED,CAAE5pS,GAAIA,IAEXunM,GAAc,SAAU7yJ,EAAWvxC,EAAM+qQ,GAC3C,OAAa,IAAT/qQ,EACKgmS,GAAkBvH,GAAK/lR,KAAMqyP,EAAYx5N,GAC9B,IAATvxC,EACFimS,GAAiB10P,GACfvxC,EACFkmS,GAAiB30P,GAEjB80P,GAAsB90P,GAAW,IAGxCm1P,GAAc,CAChBtiG,YAAaA,GACbuiG,gBAAiB/sS,EAAMosS,GAAmBtsS,GAAU,GACpD2sS,sBAAuBA,IAGrBO,GAAa,SAAUj9I,EAAWj0E,EAAUL,QAC3B,IAAfA,IACFA,EAAa/6E,GAEf,IAAI2tM,EAAS,IAAI0sF,GAAWhrI,EAAWj0E,GACnCgtI,EAAO,SAAU17K,GACnB,IAAIh4B,EACJ,GACEA,EAAOi5L,EAAOjhK,WACPh4B,IAAS6tL,GAASt2K,OAAOvX,KAAUqmE,EAAWrmE,IACvD,OAAOpQ,EAAOD,KAAKqQ,GAAMjR,OAAO8+L,GAASt2K,SAE3C,MAAO,CACL3R,QAAS,WACP,OAAOhW,EAAOD,KAAKspM,EAAOrzL,WAAW7W,OAAO8+L,GAASt2K,SAEvDvX,KAAM,WACJ,OAAO0zM,EAAK,SAEdnkD,KAAM,WACJ,OAAOmkD,EAAK,SAEdkyE,MAAO,WACL,OAAOlyE,EAAK,YAKdmkF,GAAa,SAAUr0R,EAAK6iE,GAC9B,IAAIyxN,EAAkBzxN,GAA0B,SAAUjjE,GACxD,OAAOI,EAAI8iE,QAAQljE,IAASyqL,GAASZ,KAAK7pL,IAASyqL,GAAS/oD,uBAAuB1hI,IAEjFswM,EAAO,SAAUtwM,EAAMqoB,EAAQwtK,EAAQxyH,GACzC,GAAIonH,GAASt2K,OAAOnU,GAAO,CACzB,IAAI20R,EAAYtxN,EAAQrjE,EAAMqoB,EAAQroB,EAAKiO,MAC3C,IAAmB,IAAf0mR,EACF,OAAOnoS,EAAOP,KAAK,CACjB4nB,UAAW7T,EACXqoB,OAAQssQ,IAId,OAAO9+F,IAASrqM,MAAK,SAAUoR,GAC7B,OAAO0zM,EAAK1zM,EAAKiX,UAAWjX,EAAKyrB,OAAQwtK,EAAQxyH,OAGjDE,EAAY,SAAUvjE,EAAMqoB,EAAQg7C,EAASn/B,GAC/C,IAAI2xJ,EAAS2+F,GAAWx0R,EAAMkkC,EAAMwwP,GACpC,OAAOpkF,EAAKtwM,EAAMqoB,GAAQ,WACxB,OAAOwtK,EAAO1pC,OAAO7gK,KAAI,SAAU6gK,GACjC,MAAO,CACLt4I,UAAWs4I,EACX9jI,OAAQ8jI,EAAKjlK,aAGhBm8E,GAASp4E,aAEV2pS,EAAW,SAAU50R,EAAMqoB,EAAQg7C,EAASn/B,GAC9C,IAAI2xJ,EAAS2+F,GAAWx0R,EAAMkkC,EAAMwwP,GACpC,OAAOpkF,EAAKtwM,EAAMqoB,GAAQ,WACxB,OAAOwtK,EAAOj5L,OAAOtR,KAAI,SAAUsR,GACjC,MAAO,CACLiX,UAAWjX,EACXyrB,OAAQ,QAGXg7C,GAASp4E,aAEd,MAAO,CACLs4E,UAAWA,EACXqxN,SAAUA,IAIVC,GAAW,aACXC,GAAc,SAAU90R,GAC1B,OAAOyqL,GAASv2K,UAAUlU,IAASA,EAAKvV,KAAOoqS,IAE7CE,GAA0B,SAAU91Q,EAAMjf,GAC5C,MAAOA,GAAQA,IAASif,EAAM,CAC5B,GAAIjf,EAAKvV,KAAOoqS,GACd,OAAO70R,EAETA,EAAOA,EAAK6J,WAEd,OAAO,MAGLmrR,GAAcvqG,GAASv2K,UACvB+gR,GAAWxqG,GAASt2K,OACpB+nL,GAAa,SAAUl8L,GACzB,IAAI6J,EAAa7J,EAAK6J,WAClBA,GACFA,EAAWoJ,YAAYjT,IAGvBk1R,GAAe,SAAUl1R,GAC3B,IACE,OAAOA,EAAK0hC,UACZ,MAAO2uD,GACP,MAAO,KAGP8kM,GAAe,SAAUn1R,EAAME,GACb,IAAhBA,EAAKhZ,OACPg1M,GAAWl8L,GAEXA,EAAK0hC,UAAYxhC,GAGjBk1R,GAAY,SAAUl1R,GACxB,IAAIm1R,EAAchJ,GAAK/lR,KAAKpG,GAC5B,MAAO,CACLnO,MAAOmO,EAAKhZ,OAASmuS,EAAYnuS,OACjCgZ,KAAMm1R,IAGNC,GAAkB,SAAU1H,EAAgB14P,GAE9C,OADAtW,GAASgvQ,GACF14P,GAELqgQ,GAA0B,SAAU3H,EAAgB14P,GACtD,IAAInjB,EAASqjR,GAAUxH,EAAe3/Q,KAAKhI,OAAO,EAAGivB,EAAI7M,WACrDlW,EAAQijR,GAAUxH,EAAe3/Q,KAAKhI,OAAOivB,EAAI7M,WACjDnoB,EAAO6R,EAAO7R,KAAOiS,EAAMjS,KAC/B,OAAIA,EAAKhZ,OAAS,GAChBiuS,GAAavH,EAAgB1tR,GACtB6xR,GAAgBnE,EAAgB14P,EAAI7M,SAAWtW,EAAOhgB,QAEtDmjC,GAGPsgQ,GAA6B,SAAU5H,EAAgB14P,GACzD,IAAIrrB,EAAaqrB,EAAIrhB,YACjB4hR,EAAclsS,EAAQmH,EAAOmZ,EAAWjK,YAAaguR,GAAgBtiS,KAAI,SAAUqmB,GACrF,OAAOA,EAAQujB,EAAI7M,SAAW0pQ,GAAgBloR,EAAYqrB,EAAI7M,SAAW,GAAK6M,KAC7EpqC,MAAMoqC,GAET,OADAtW,GAASgvQ,GACF6H,GAELC,GAA2B,SAAU9H,EAAgB14P,GACvD,OAAO+/P,GAASrH,IAAmB14P,EAAIrhB,cAAgB+5Q,EAAiB2H,GAAwB3H,EAAgB14P,GAAOogQ,GAAgB1H,EAAgB14P,IAErJygQ,GAA8B,SAAU/H,EAAgB14P,GAC1D,OAAOA,EAAIrhB,cAAgB+5Q,EAAe/jR,WAAa2rR,GAA2B5H,EAAgB14P,GAAOogQ,GAAgB1H,EAAgB14P,IAEvI0gQ,GAAsB,SAAU/hR,EAAWqhB,GAC7C,OAAO68P,GAAgBH,eAAe18P,GAAOwgQ,GAAyB7hR,EAAWqhB,GAAOygQ,GAA4B9hR,EAAWqhB,IAE7HtW,GAAW,SAAUi3Q,GAQvB,GAPIb,GAAYa,IAAuBnJ,GAAiBmJ,KAClDlJ,GAAWkJ,GACbA,EAAmB9gR,gBAAgB,kBAEnCmnL,GAAW25F,IAGXZ,GAASY,GAAqB,CAChC,IAAI31R,EAAOmsR,GAAK/lR,KAAK4uR,GAAaW,IAClCV,GAAaU,EAAoB31R,KAGjC41R,GAAuB,CACzBF,oBAAqBA,GACrB5iR,OAAQ4L,IAGNyzK,GAAQy0F,GAAWvqN,IACnBw5N,GAAiB,SAAUt6N,EAAQ/tE,EAAMw2I,GAC3C,IAAI78I,EAAQo0E,EAAOS,SAASxuE,EAAMw2I,GAClC,IAA4B,IAAxB78I,EAAMkC,QAAQ,KAAa,CAC7B,IAAIysS,EAAUv6N,EAAOS,SAASxuE,EAAM,GAAI,QACxC,OAAOsoS,EAAQ9sS,eAAeuyE,EAAOhxE,IAAMurS,EAAQv6N,EAAOhxE,IAAMy5I,EAEhE,OAAO78I,GAGP4uS,GAAiB,SAAUx6N,GAC7B,OAAOA,EAAOS,SAAS,eAAgB,KAErCg6N,GAAa,SAAUz6N,GACzB,OAAOA,EAAOS,SAAS,UAAW,oBAEhCi6N,GAAqB,SAAU16N,GACjC,OAAOA,EAAOS,SAAS,oBAAqB,KAE1Ck6N,GAAY,SAAU36N,GACxB,OAAOs6N,GAAet6N,EAAQ,UAAW,YAEvC46N,GAAe,SAAU56N,GAC3B,OAAOs6N,GAAet6N,EAAQ,aAAc,KAE1C66N,GAA2B,SAAU76N,GACvC,OAAOA,EAAOS,SAAS,0BAA2B,KAEhDq6N,GAAmB,SAAU96N,GAC/B,OAAOA,EAAOS,SAAS,aAAa,IAElCmwH,GAAqB,SAAU5wH,GACjC,GAAIA,EAAOS,SAAS,oBAAoB,GACtC,MAAO,IAET,IAAIm0D,EAAQ50D,EAAOS,SAAS,oBAAqB,KACjD,OAAc,IAAVm0D,EACK,IACY,IAAVA,EACF,IAEAA,GAGPi8D,GAA0B,SAAU7wH,GACtC,OAAOA,EAAOS,SAAS,0BAA2B,KAEhDs6N,GAAuB,SAAU/6N,GACnC,OAAOA,EAAOS,SAAS,sBAAuB,mCAE5Cu6N,GAAuB,SAAUh7N,GACnC,OAAOA,EAAOS,SAAS,sBAAuB,KAE5Cw6N,GAAmB,SAAUj7N,GAC/B,OAAOA,EAAOS,SAAS,eAAe,IAEpCy6N,GAAiC,SAAUl7N,GAC7C,OAAOA,EAAOS,SAAS,gCAAgC,IAErD06N,GAAqB,SAAUn7N,GACjC,OAAOlzE,GAAMu7Q,QAAQroM,EAAOS,SAAS,yBAA0B,0DAE7D26N,GAAqB,SAAUp7N,GACjC,OAAOlzE,GAAMu7Q,QAAQroM,EAAOS,SAAS,oBAAqB,MAExD46N,GAAyB,SAAUr7N,GACrC,OAAOA,EAAOS,SAAS,wBAAyB90E,GAAS,GAAO,aAE9DuuQ,GAA4B,SAAUl6L,GACxC,OAAOA,EAAOS,SAAS,qBAAqB,EAAM,YAEhD66N,GAAsB,SAAUt7N,GAClC,OAAOA,EAAOS,SAAS,yBAAyB,EAAO,YAErD86N,GAAwB,SAAUv7N,GACpC,OAAOA,EAAOS,SAAS,4BAA4B,EAAM,YAEvD+6N,GAAkB,SAAUx7N,GAC9B,OAAOA,EAAOS,SAAS,QAAS,GAAI,WAElCg7N,GAAc,SAAUz7N,GAC1B,OAAOA,EAAOS,SAAS,YAAa,GAAI,WAEtCi7N,GAAoB,SAAU17N,GAChC,OAAOA,EAAOS,SAAS,oBAAqB,GAAI,WAE9Ck7N,GAAyB,SAAU37N,GACrC,OAAOA,EAAOS,SAAS,0BAA2B,GAAI,WAEpDm7N,GAA6B,SAAU57N,GACzC,OAAOA,EAAOS,SAAS,6BAA6B,EAAO,YAEzDo7N,GAAyB,SAAU77N,GACrC,OAAOA,EAAOS,SAAS,wBAAyB,KAAM,aAEpDqvI,GAA0B,SAAU9vI,GACtC,OAAOA,EAAOS,SAAS,oBAAoB,EAAO,YAEhDq7N,GAAoB,SAAU97N,GAChC,OAAOA,EAAOS,SAAS,kBAAmB,GAAI,WAE5Cs7N,GAAkB,SAAU/7N,GAC9B,OAAOA,EAAOS,SAAS,WAAY,KAAM,WAEvCu7N,GAAiB,SAAUh8N,GAC7B,OAAOA,EAAOS,SAAS,eAAgB,GAAI,WAEzCw7N,GAAwB,SAAUj8N,GACpC,OAAOA,EAAOS,SAAS,qBAAqB,IAE1Cy7N,GAAiB,SAAUl8N,GAC7B,OAAOA,EAAOS,SAAS,cAAe,OAAQ,WAE5C07N,GAAgB,SAAUn8N,GAC5B,IAAIo8N,EAAap8N,EAAOC,SAASo8N,YACjC,OAAIjqS,EAASgqS,GACJvsS,EAAIusS,EAAWz/Q,MAAM,KAAM9R,IACzBvY,EAAQ8pS,GACVA,GACiB,IAAfA,GAAwBp8N,EAAO0C,OACjC,GAEA,CAAC,YAGR45N,GAAoB,SAAUt8N,GAChC,OAAOA,EAAOS,SAAS,iBAAkBitN,GAAKrtP,QAAU,WAAQ3wC,IAE9D6sS,GAA4B,SAAUv8N,GACxC,OAAOA,EAAOS,SAAS,6BAA8B,+BAAgC,WAEnF+7N,GAAoB,SAAUx8N,GAChC,OAAOA,EAAOS,SAAS,oBAErBg8N,GAA2B,SAAUz8N,GACvC,OAAOA,EAAOS,SAAS,2BAA2B,EAAM,YAEtDi8N,GAAiB,SAAU18N,GAC7B,OAAOA,EAAOS,SAAS,cAAem2H,GAAM1N,UAAUlpH,EAAOY,aAAc,eAAgB,WAEzFue,GAAW,CACbq7M,eAAgBA,GAChBC,WAAYA,GACZC,mBAAoBA,GACpBC,UAAWA,GACXC,aAAcA,GACdC,yBAA0BA,GAC1BC,iBAAkBA,GAClBlqG,mBAAoBA,GACpBC,wBAAyBA,GACzBkqG,qBAAsBA,GACtBC,qBAAsBA,GACtBC,iBAAkBA,GAClBC,+BAAgCA,GAChCC,mBAAoBA,GACpBC,mBAAoBA,GACpBI,gBAAiBA,GACjBC,YAAaA,GACbJ,uBAAwBA,GACxBnhC,0BAA2BA,GAC3BohC,oBAAqBA,GACrBC,sBAAuBA,GACvBG,kBAAmBA,GACnBC,uBAAwBA,GACxBC,2BAA4BA,GAC5BC,uBAAwBA,GACxB/rF,wBAAyBA,GACzBgsF,kBAAmBA,GACnBC,gBAAiBA,GACjBC,eAAgBA,GAChBC,sBAAuBA,GACvBC,eAAgBA,GAChBC,cAAeA,GACfG,kBAAmBA,GACnBC,0BAA2BA,GAC3BC,kBAAmBA,GACnBC,yBAA0BA,GAC1BC,eAAgBA,IAGdC,GAAYhxR,KAAW1C,QACvB2zR,GAA2B5tG,GAAS/oD,uBACpC42J,GAAgB,SAAUt4R,GAC5B,OAAOyqL,GAASv2K,UAAUlU,IAAS,aAAakB,KAAKlB,EAAK0kL,UAExD6zG,GAAwB,SAAUr0P,EAAM57B,EAASyJ,GACnD,IACIzR,EAAQk4R,EAASC,EAAS5uN,EAAQ6uN,EADlCpI,EAAah8N,GAAShsD,EAAQqb,wBAAyB5R,GAwB3D,MAtBqB,SAAjBmyB,EAAKwgJ,SACPpkL,EAAS4jC,EAAK/yB,cAAcC,gBAC5BonR,EAAUt0P,EAAKlf,YAAc1kB,EAAO0kB,WACpCyzQ,EAAUv0P,EAAKpf,WAAaxkB,EAAOwkB,YAEnC4zQ,EAAWx0P,EAAKvgB,wBAChB60Q,EAAUt0P,EAAKlf,WAAa0zQ,EAASv0Q,KACrCs0Q,EAAUv0P,EAAKpf,UAAY4zQ,EAASt0Q,KAEtCksQ,EAAWnsQ,MAAQq0Q,EACnBlI,EAAWppQ,OAASsxQ,EACpBlI,EAAWlsQ,KAAOq0Q,EAClBnI,EAAWnpQ,QAAUsxQ,EACrBnI,EAAWrpQ,MAAQ,EACnB4iD,EAASvhE,EAAQiY,YAAcjY,EAAQgf,YACnCuiD,EAAS,IACP93D,IACF83D,IAAW,GAEbymN,EAAWnsQ,MAAQ0lD,EACnBymN,EAAWppQ,OAAS2iD,GAEfymN,GAELqI,GAA4B,SAAUz0P,GACxC,IAAI00P,EAA2B54R,EAAMoS,EAAStpB,EAAGmlB,EAEjD,IADA2qR,EAA4BxY,GAAS,2BAA4Bl8O,GAC5Dp7C,EAAI,EAAGA,EAAI8vS,EAA0B1xS,OAAQ4B,IAChDkX,EAAO44R,EAA0B9vS,GACjCspB,EAAUpS,EAAKoqL,gBACX0iG,GAAuB16Q,KACzBnE,EAAOmE,EAAQnE,KACK,IAAhBA,EAAK/mB,OACPkrB,EAAQvI,WAAWoJ,YAAYb,GAE/BA,EAAQymR,WAAW5qR,EAAK/mB,OAAS,EAAG,IAGxCkrB,EAAUpS,EAAKwR,YACXw7Q,GAAyB56Q,KAC3BnE,EAAOmE,EAAQnE,KACK,IAAhBA,EAAK/mB,OACPkrB,EAAQvI,WAAWoJ,YAAYb,GAE/BA,EAAQymR,WAAW,EAAG,KAK1BC,GAAY,SAAUr9N,EAAQv3B,EAAMg/B,EAAS9vC,GAC/C,IACI2lQ,EAAgBlD,EADhBmD,EAAkBj6R,GAAKvS,EAAOrC,QAE9B8uS,EAAYr+M,GAASyxG,mBAAmB5wH,GACxCy9N,EAAaD,EAAU/xS,OAAS,EAAI+xS,EAAY,IAChDrtN,EAAO,SAAU75D,EAAQzJ,GAC3B,IAAIgoR,EAAYlxP,EAEhB,GADA86B,IACIo+N,GAAchwR,GAChB,OAAO,KAET,IAAI46D,EAAQ56D,GA6BV,OATAutR,EAAqBjJ,GAAatkR,EAASyJ,GAC3CqtB,EAAM92B,EAAQ6I,cAAcivB,cACxBi4P,GAAyBxC,EAAmBrkR,cAC9C4tB,EAAIQ,SAASi2P,EAAoB,GACjCz2P,EAAIa,OAAO41P,EAAoB,KAE/Bz2P,EAAIQ,SAASi2P,EAAoB,GACjCz2P,EAAIa,OAAO41P,EAAoB,IAE1Bz2P,EA5BPy2P,EAAqBvI,GAAY4L,EAAY5wR,EAASyJ,GACtDu+Q,EAAaiI,GAAsBr0P,EAAM57B,EAASyJ,GAClDquQ,GAASyV,GAAoBn2Q,IAAI,MAAO4wQ,EAAWlsQ,KACnD,IAAI0rD,EAAQswM,GAAS,6DAA6D1gQ,IAAI4wQ,GAAYvmK,SAAS7lF,GAAM,GA2BnH,OA1BE80P,EAAgB/5R,IAAIzS,EAAOP,KAAK,CAC9B6jF,MAAOA,EACPxnE,QAASA,EACTyJ,OAAQA,KAEVinR,EAAgB1nS,MAAM/F,MAAK,SAAU4tS,GAC/BpnR,GACFquQ,GAAS+Y,EAAWrpN,OAAO0mF,SAAS,8BAGxC4iI,IACAh6P,EAAM92B,EAAQ6I,cAAcivB,cAC5BhB,EAAIQ,SAASi2P,EAAoB,GACjCz2P,EAAIa,OAAO41P,EAAoB,GAa1Bz2P,GAEL86B,EAAO,WACTy+N,GAA0Bz0P,GACtB2xP,IACFC,GAAqB9iR,OAAO6iR,GAC5BA,EAAqB,MAEvBmD,EAAgB1nS,MAAM/F,MAAK,SAAU4tS,GACnC/Y,GAAS+Y,EAAWrpN,OAAO98D,SAC3BgmR,EAAgB/5R,IAAIzS,EAAOrC,WAE7B+3Q,GAAM9wK,cAAc2nM,IAElBK,EAAa,WACfL,EAAiB72B,GAAM/wK,aAAY,WAC7B/9D,IACFgtP,GAAS,uBAAwBl8O,GAAMopB,YAAY,2BAEnD8yN,GAAS,uBAAwBl8O,GAAMsyH,SAAS,6BAEjD,MAED3hI,EAAa,WACfmkQ,EAAgB1nS,MAAM/F,MAAK,SAAU4tS,GACnC,IAAI7I,EAAaiI,GAAsBr0P,EAAMi1P,EAAW7wR,QAAS6wR,EAAWpnR,QAC5EquQ,GAAS+Y,EAAWrpN,OAAOpwD,IAAIj3B,GAAS,GAAI6nS,QAG5CnmM,EAAU,WACZ,OAAO+3K,GAAM9wK,cAAc2nM,IAEzBM,EAAS,WACX,MAAO,wOAET,MAAO,CACLztN,KAAMA,EACN1R,KAAMA,EACNm/N,OAAQA,EACRxkQ,WAAYA,EACZs1D,QAASA,IAGTmvM,GAA0B,WAC5B,OAAOlB,GAAUr1R,QAAUq1R,GAAUv1R,UAAYu1R,GAAUn1R,aAEzDs2R,GAAoB,SAAUv5R,GAChC,OAAOq4R,GAAyBr4R,IAASyqL,GAAS2qD,QAAQp1O,IAASs5R,MAGjEE,GAA2B/uG,GAAS/oD,uBACpC+3J,GAAchvG,GAAS01E,iBAAiB,UAAW,kDACnDu5B,GAAqBhN,GACrBiN,GAA0BnN,GAC1BoN,GAAcnvG,GAASv2K,UACvB2lR,GAAqBvL,GACrBwL,GAAa,SAAUllQ,GACzB,OAAOA,EAAY,GAEjBmlQ,GAAc,SAAUnlQ,GAC1B,OAAOA,EAAY,GAEjBolQ,GAAsB,SAAU1pF,EAAMv9M,GACxC,IAAIiN,EACJ,MAAOA,EAAOswM,EAAKv9M,GACjB,IAAK4mS,GAAwB35R,GAC3B,OAAOA,EAGX,OAAO,MAELi6R,GAAW,SAAUj6R,EAAM40B,EAAWslQ,EAAa52N,EAAUvwE,GAC/D,IAAI8iM,EAAS,IAAI0sF,GAAWviR,EAAMsjE,GAClC,GAAIy2N,GAAYnlQ,GAAY,CAC1B,IAAI4kQ,GAAyBx5R,IAAS25R,GAAwB35R,MAC5DA,EAAOg6R,GAAoBnkG,EAAO1pC,MAAM,GACpC+tI,EAAYl6R,IACd,OAAOA,EAGX,MAAOA,EAAOg6R,GAAoBnkG,EAAO1pC,KAAMp5J,GAC7C,GAAImnS,EAAYl6R,GACd,OAAOA,EAIb,GAAI85R,GAAWllQ,GAAY,CACzB,IAAI4kQ,GAAyBx5R,IAAS25R,GAAwB35R,MAC5DA,EAAOg6R,GAAoBnkG,EAAOj5L,MAAM,GACpCs9R,EAAYl6R,IACd,OAAOA,EAGX,MAAOA,EAAOg6R,GAAoBnkG,EAAOj5L,KAAM7J,GAC7C,GAAImnS,EAAYl6R,GACd,OAAOA,EAIb,OAAO,MAELm6R,GAAiB,SAAUn6R,EAAMsjE,GACnC,MAAOtjE,GAAQA,IAASsjE,EAAU,CAChC,GAAIm2N,GAAYz5R,GACd,OAAOA,EAETA,EAAOA,EAAK6J,WAEd,OAAO,MAELuwR,GAAgB,SAAUC,EAAgBC,EAAgBh3N,GAC5D,OAAO62N,GAAeE,EAAexmR,YAAayvD,KAAc62N,GAAeG,EAAezmR,YAAayvD,IAEzGi3N,GAA+B,SAAUC,EAAgBtJ,GAC3D,IAAIr9Q,EAAWwU,EACf,OAAK6oQ,GAGLr9Q,EAAYq9Q,EAAcr9Q,YAC1BwU,EAAS6oQ,EAAc7oQ,SAClBuxQ,GAAY/lR,GAGVA,EAAUjU,WAAWyoB,EAASmyQ,GAF5B,MALA,MASPC,GAAc,SAAU1oR,EAAQ/R,GAClC,IAAIjR,EAAQiR,EAAKmR,cAAcivB,cAQ/B,OAPIruB,GACFhjB,EAAM8wC,eAAe7/B,GACrBjR,EAAMixC,aAAahgC,KAEnBjR,EAAM+wC,cAAc9/B,GACpBjR,EAAMmxC,YAAYlgC,IAEbjR,GAEL2rS,GAAqB,SAAUx2P,EAAMy2P,EAAOC,GAC9C,OAAOT,GAAeQ,EAAOz2P,KAAUi2P,GAAeS,EAAO12P,IAE3D22P,GAAO,SAAU12Q,EAAM+f,EAAMlkC,GAC/B,IAAIoS,EAAS4vQ,EAEXA,EADE79P,EACY,kBAEA,cAEhB,MAAOnkB,GAAQA,IAASkkC,EAAM,CAK5B,GAJA9xB,EAAUpS,EAAKgiR,GACX0X,GAAmBtnR,KACrBA,EAAUA,EAAQ4vQ,IAEhBwX,GAAyBpnR,GAAU,CACrC,GAAIsoR,GAAmBx2P,EAAM9xB,EAASpS,GACpC,OAAOoS,EAET,MAEF,GAAIynR,GAAmBznR,GACrB,MAEFpS,EAAOA,EAAK6J,WAEd,OAAO,MAEL00B,GAAW/2C,EAAMizS,IAAa,GAC9Bj8P,GAAUh3C,EAAMizS,IAAa,GAC7BjpG,GAAiB,SAAU58J,EAAWsP,EAAMn1C,GAC9C,IAAIiR,EAAM6T,EAAWwU,EAAQ25I,EACzB84H,EAAWtzS,EAAMqzS,IAAM,EAAM32P,GAC7B62P,EAAYvzS,EAAMqzS,IAAM,EAAO32P,GAGnC,GAFArwB,EAAY9kB,EAAMswC,eAClBhX,EAASt5B,EAAM6xC,YACX4rP,GAAsB34Q,GAAY,CAKpC,GAJK+lR,GAAY/lR,KACfA,EAAYA,EAAUhK,YAExBm4J,EAAWnuJ,EAAUa,aAAa,kBACjB,WAAbstJ,IACFhiK,EAAO6T,EAAUrC,YACb+nR,GAAkBv5R,IACpB,OAAOu+B,GAASv+B,GAGpB,GAAiB,UAAbgiK,IACFhiK,EAAO6T,EAAUu2K,gBACbmvG,GAAkBv5R,IACpB,OAAOw+B,GAAQx+B,GAIrB,IAAKjR,EAAMmyC,UACT,OAAOnyC,EAET,GAAI07L,GAASt2K,OAAON,GAAY,CAC9B,GAAI6lR,GAAmB7lR,GAAY,CACjC,GAAkB,IAAd+gB,EAAiB,CAEnB,GADA50B,EAAO+6R,EAAUlnR,GACb7T,EACF,OAAOu+B,GAASv+B,GAGlB,GADAA,EAAO86R,EAASjnR,GACZ7T,EACF,OAAOw+B,GAAQx+B,GAGnB,IAAmB,IAAf40B,EAAkB,CAEpB,GADA50B,EAAO86R,EAASjnR,GACZ7T,EACF,OAAOw+B,GAAQx+B,GAGjB,GADAA,EAAO+6R,EAAUlnR,GACb7T,EACF,OAAOu+B,GAASv+B,GAGpB,OAAOjR,EAET,GAAI+9R,GAAuBj5Q,IAAcwU,GAAUxU,EAAU5F,KAAK/mB,OAAS,EACzE,OAAkB,IAAd0tC,IACF50B,EAAO+6R,EAAUlnR,GACb7T,GACKu+B,GAASv+B,GAGbjR,EAET,GAAIi+R,GAAyBn5Q,IAAcwU,GAAU,EACnD,OAAmB,IAAfuM,IACF50B,EAAO86R,EAASjnR,GACZ7T,GACKw+B,GAAQx+B,GAGZjR,EAET,GAAIs5B,IAAWxU,EAAU5F,KAAK/mB,OAE5B,OADA8Y,EAAO+6R,EAAUlnR,GACb7T,EACKu+B,GAASv+B,GAEXjR,EAET,GAAe,IAAXs5B,EAEF,OADAroB,EAAO86R,EAASjnR,GACZ7T,EACKw+B,GAAQx+B,GAEVjR,EAGX,OAAOA,GAELisS,GAAoB,SAAUl/F,EAASo1F,GACzC,OAAO1kS,EAAOD,KAAKguS,GAA6Bz+F,EAAU,GAAK,EAAGo1F,IAAgBvlS,OAAO6tS,KAEvFyB,GAA6B,SAAUrmQ,EAAWsP,EAAMn1C,GAC1D,IAAImsS,EAAkB1pG,GAAe58J,EAAWsP,EAAMn1C,GACtD,OAAmB,IAAf6lC,EACK08P,GAAcE,eAAe0J,GAE/B5J,GAAcG,aAAayJ,IAEhCC,GAAyB,SAAUjmQ,GACrC,OAAO1oC,EAAOD,KAAK2oC,EAAIyuC,WAAWr4E,IAAImV,GAAQZ,UAE5Cu7R,GAA6B,SAAUlmQ,GACzC,OAAO1oC,EAAOD,KAAK2oC,EAAIyuC,SAAQ,IAAOr4E,IAAImV,GAAQZ,UAEhDw7R,GAAyB,SAAUC,EAAQpK,GAC7C,MAAOA,EAAgBoK,EAAOpK,GAC5B,GAAIA,EAAc1zO,YAChB,OAAO0zO,EAGX,OAAOA,GAELqK,GAAwB,SAAUhvS,EAAMq6B,GAC1C,IAAI40Q,EAAcpB,GAAc7tS,EAAMq6B,GACtC,QAAK40Q,IAAe/wG,GAASZ,KAAKt9L,EAAKo3E,aAGhC63N,IAIR,SAAU1J,GACTA,EAAWA,EAAW,cAAgB,GAAK,YAC3CA,EAAWA,EAAW,YAAc,GAAK,YAF3C,CAGEA,KAAeA,GAAa,KAC9B,IAAI2J,GAA2BhxG,GAAS/oD,uBACpCg6J,GAAWjxG,GAASt2K,OACpBwnR,GAAclxG,GAASv2K,UACvB0nR,GAASnxG,GAASZ,KAClBgyG,GAAqBvN,GACrBwN,GAAanN,GACboN,GAA6BnN,GAC7BpzM,GAAa,SAAUx7E,EAAMkkC,GAC/B,IAAI84G,EAAU,GACd,MAAOh9I,GAAQA,IAASkkC,EACtB84G,EAAQtuJ,KAAKsR,GACbA,EAAOA,EAAK6J,WAEd,OAAOmzI,GAELg/I,GAAc,SAAUnoR,EAAWwU,GACrC,OAAIxU,EAAUlU,iBAAmB0oB,EAASxU,EAAUjU,WAAW1Y,OACtD2sB,EAAUjU,WAAWyoB,GAEvB,MAEL4zQ,GAA4B,SAAUrnQ,EAAW50B,GACnD,GAAI85R,GAAWllQ,GAAY,CACzB,GAAIinQ,GAAmB77R,EAAKoqL,mBAAqBsxG,GAAS17R,EAAKoqL,iBAC7D,OAAO2nG,GAAgBhgR,OAAO/R,GAEhC,GAAI07R,GAAS17R,GACX,OAAO+xR,GAAgB/xR,EAAM,GAGjC,GAAI+5R,GAAYnlQ,GAAY,CAC1B,GAAIinQ,GAAmB77R,EAAKwR,eAAiBkqR,GAAS17R,EAAKwR,aACzD,OAAOugR,GAAgB5/Q,MAAMnS,GAE/B,GAAI07R,GAAS17R,GACX,OAAO+xR,GAAgB/xR,EAAMA,EAAKiO,KAAK/mB,QAG3C,OAAI6yS,GAAYnlQ,GACVgnQ,GAAO57R,GACF+xR,GAAgBhgR,OAAO/R,GAEzB+xR,GAAgB5/Q,MAAMnS,GAExB+xR,GAAgBhgR,OAAO/R,IAE5Bk8R,GAAoB,SAAUh4P,EAAMi4P,GACtC,IAAI3qR,EAAc2qR,EAAS3qR,YAC3B,OAAIA,GAAeqqR,GAAmBrqR,GAChCkqR,GAASlqR,GACJugR,GAAgBvgR,EAAa,GAE7BugR,GAAgBhgR,OAAOP,GAGzB4qR,GAAkBtK,GAAWuK,SAAUtK,GAAgB5/Q,MAAMgqR,GAAWj4P,IAG/Ek4P,GAAoB,SAAUxnQ,EAAW0nQ,EAAUp4P,GACrD,IAAIlkC,EAAMm8R,EAAUnhG,EAChBuhG,EAA6BrL,EACjC,IAAKyK,GAAYz3P,KAAUo4P,EACzB,OAAO,KAET,GAAIA,EAASzN,QAAQkD,GAAgB5/Q,MAAM+xB,KAAUA,EAAK8kJ,WAExD,GADAkoG,EAAgBa,GAAgB5/Q,MAAM+xB,EAAK8kJ,WACvC+wG,GAAYnlQ,IAAcinQ,GAAmB33P,EAAK8kJ,YAAc2yG,GAAYz3P,EAAK8kJ,WACnF,OAAO4yG,GAAO13P,EAAK8kJ,WAAa+oG,GAAgBhgR,OAAOmyB,EAAK8kJ,WAAakoG,OAG3EA,EAAgBoL,EAElB,IAAIzoR,EAAYq9Q,EAAcr9Q,YAC1BwU,EAAS6oQ,EAAc7oQ,SAC3B,GAAIqzQ,GAAS7nR,GAAY,CACvB,GAAIkmR,GAAYnlQ,IAAcvM,EAAS,EACrC,OAAO0pQ,GAAgBl+Q,IAAawU,GAEtC,GAAIyxQ,GAAWllQ,IAAcvM,EAASxU,EAAU3sB,OAC9C,OAAO6qS,GAAgBl+Q,IAAawU,GAEtCroB,EAAO6T,MACF,CACL,GAAIkmR,GAAYnlQ,IAAcvM,EAAS,IACrC8zQ,EAAWH,GAAYnoR,EAAWwU,EAAS,GACvCwzQ,GAAmBM,IACrB,OAAKL,GAAWK,KACdnhG,EAAYi/F,GAASkC,EAAUvnQ,EAAWmnQ,GAA4BI,GAClEnhG,GACE0gG,GAAS1gG,GACJ+2F,GAAgB/2F,EAAWA,EAAU/sL,KAAK/mB,QAE5C6qS,GAAgB5/Q,MAAM6oL,GAG7B0gG,GAASS,GACJpK,GAAgBoK,EAAUA,EAASluR,KAAK/mB,QAE1C6qS,GAAgBhgR,OAAOoqR,GAGlC,GAAIrC,GAAWllQ,IAAcvM,EAASxU,EAAUjU,WAAW1Y,SACzDi1S,EAAWH,GAAYnoR,EAAWwU,GAC9BwzQ,GAAmBM,IACrB,OAAIP,GAAOO,GACFD,GAAkBh4P,EAAMi4P,IAE5BL,GAAWK,KACdnhG,EAAYi/F,GAASkC,EAAUvnQ,EAAWmnQ,GAA4BI,GAClEnhG,GACE0gG,GAAS1gG,GACJ+2F,GAAgB/2F,EAAW,GAE7B+2F,GAAgBhgR,OAAOipL,GAG9B0gG,GAASS,GACJpK,GAAgBoK,EAAU,GAE5BpK,GAAgB5/Q,MAAMgqR,GAGjCn8R,EAAOm8R,GAAsBjL,EAAcvtN,UAE7C,OAAIm2N,GAAWllQ,IAAcs8P,EAAc9D,WAAa2M,GAAYnlQ,IAAcs8P,EAAchE,eAC9FltR,EAAOi6R,GAASj6R,EAAM40B,EAAWxtC,GAAS,GAAO88C,GAAM,GACnD63P,GAA2B/7R,EAAMkkC,IAC5B+3P,GAA0BrnQ,EAAW50B,IAGhDm8R,EAAWlC,GAASj6R,EAAM40B,EAAWmnQ,GAA4B73P,GACjEq4P,EAA8Bn5B,GAAS3yQ,KAAK9E,EAAO6vF,GAAW3nE,EAAWqwB,GAAOu3P,MAC5Ec,GAAiCJ,GAAaI,EAA4BztS,SAASqtS,GAQnFA,EACKF,GAA0BrnQ,EAAWunQ,GAEvC,MATHjL,EADE4I,GAAWllQ,GACGm9P,GAAgB5/Q,MAAMoqR,GAEtBxK,GAAgBhgR,OAAOwqR,GAElCrL,KAOPsL,GAAc,SAAUt4P,GAC1B,MAAO,CACLtnC,KAAM,SAAUs0R,GACd,OAAOkL,GAAkBtK,GAAWuK,SAAUnL,EAAehtP,IAE/DioH,KAAM,SAAU+kI,GACd,OAAOkL,GAAkBtK,GAAW2K,UAAWvL,EAAehtP,MAKhEw4P,GAAmB,SAAU5gG,EAAS53J,EAAMh+B,GAC9C,IAAI2iB,EAAWizK,EAAUi2F,GAAgBhgR,OAAO7L,GAAS6rR,GAAgB5/Q,MAAMjM,GAC/E,OAAOy2R,GAAa7gG,EAAS53J,EAAMrb,IAEjC+zQ,GAAe,SAAU58R,GAC3B,OAAOyqL,GAASZ,KAAK7pL,GAAQ+xR,GAAgBhgR,OAAO/R,GAAQ+xR,GAAgB5/Q,MAAMnS,IAEhF68R,GAAkB,SAAUh0Q,GAC9B,OAAIkpQ,GAAgBH,eAAe/oQ,GACJ,IAAtBA,EAASR,SAETimQ,GAAiBzlQ,EAAS86C,YAGjCm5N,GAAe,SAAUj0Q,GAC3B,GAAIkpQ,GAAgBH,eAAe/oQ,GAAW,CAC5C,IAAIhV,EAAYgV,EAAShV,YACzB,OAAOgV,EAASR,WAAaxU,EAAU5F,KAAK/mB,OAE5C,OAAOonS,GAAiBzlQ,EAAS86C,SAAQ,KAGzCo5N,GAA2B,SAAUxwS,EAAMq6B,GAC7C,OAAQmrQ,GAAgBH,eAAerlS,KAAUwlS,GAAgBH,eAAehrQ,IAAOr6B,EAAKo3E,YAAc/8C,EAAG+8C,SAAQ,IAEnHq5N,GAAS,SAAUn0Q,GACrB,OAAQkpQ,GAAgBH,eAAe/oQ,IAAa4hK,GAASZ,KAAKhhK,EAAS86C,YAEzEs5N,GAAqB,SAAUnhG,EAASvvM,EAAMq6B,GAChD,OAAIk1K,GACMihG,GAAyBxwS,EAAMq6B,KAAQo2Q,GAAOzwS,IAASuwS,GAAavwS,IAASswS,GAAgBj2Q,IAE7Fm2Q,GAAyBn2Q,EAAIr6B,IAASswS,GAAgBtwS,IAASuwS,GAAal2Q,IAGpF+1Q,GAAe,SAAU7gG,EAAS53J,EAAMhP,GAC1C,IAAI2gK,EAAS2mG,GAAYt4P,GACzB,OAAO13C,EAAOD,KAAKuvM,EAAUjG,EAAOj5L,KAAKs4B,GAAO2gK,EAAO1pC,KAAKj3H,KAE1DypB,GAAW,SAAUm9I,EAAS53J,EAAM33C,GACtC,OAAOowS,GAAa7gG,EAAS53J,EAAM33C,GAAMf,MAAK,SAAUo7B,GACtD,OAAIwzQ,GAAc7tS,EAAMq6B,EAAIsd,IAAS+4P,GAAmBnhG,EAASvvM,EAAMq6B,GAC9D+1Q,GAAa7gG,EAAS53J,EAAMtd,GAE5Bp6B,EAAOP,KAAK26B,OAIrBs2Q,GAAiB,SAAUphG,EAAS53J,EAAM33C,EAAM4wS,GAClD,OAAOx+O,GAASm9I,EAAS53J,EAAM33C,GAAMf,MAAK,SAAU0pC,GAClD,OAAOioQ,EAAajoQ,GAAOgoQ,GAAephG,EAAS53J,EAAMhP,EAAKioQ,GAAgB3wS,EAAOP,KAAKipC,OAG1FkoQ,GAAa,SAAUthG,EAASxzL,GAClC,IAAIivI,EAAYukD,EAAUxzL,EAAQuJ,WAAavJ,EAAQ0gL,UACvD,OAAIyB,GAASt2K,OAAOojI,GACX/qJ,EAAOP,KAAK8lS,GAAgBx6I,EAAWukD,EAAU,EAAIvkD,EAAUtpI,KAAK/mB,SAClEqwJ,EACL+2I,GAAiB/2I,GACZ/qJ,EAAOP,KAAK6vM,EAAUi2F,GAAgBhgR,OAAOwlI,GAAaqlJ,GAAarlJ,IAEvEmlJ,GAAiB5gG,EAASxzL,EAASivI,GAGrC/qJ,EAAOrC,QAGdkzS,GAAe71S,EAAMm1S,IAAc,GACnCW,GAAe91S,EAAMm1S,IAAc,GACnCY,GAAc,CAChBZ,aAAcA,GACdU,aAAcA,GACdC,aAAcA,GACd3+O,SAAUA,GACVu+O,eAAgBA,GAChBE,WAAYA,GACZI,gBAAiBh2S,EAAM41S,IAAY,GACnCK,eAAgBj2S,EAAM41S,IAAY,IAGhCM,GAAuB,SAAU3rG,GACnC,MAAiC,kBAAnBA,EAAS7rL,OAErBy3R,GAAkB,SAAU5rG,GAC9B,OAAOA,EAAS7oM,eAAe,QAE7B00S,GAAe,SAAU7rG,GAC3B,OAAOA,EAAS7oM,eAAe,OAE7B20S,GAAkB,SAAU9rG,GAC9B,OAAOA,EAAS7oM,eAAe,SAE7B40S,GAAiB,SAAU/rG,GAC7B,OAAOxpM,GAAMwF,QAAQgkM,EAAS7rL,QAG5B63R,GAAW,SAAU39R,EAAKJ,GAI5B,OAHIyqL,GAASv2K,UAAUlU,IAASI,EAAI8iE,QAAQljE,KAAUA,EAAKN,YAAc6iQ,GAAIpgQ,KAC3EnC,EAAKN,UAAY,6BAEZM,GAELg+R,GAA+B,SAAU59R,EAAK2xL,GAChD,IAAI3yJ,EAAKlK,EAMT,OALAkK,EAAMh/B,EAAImlE,YACVrwC,EAAM69P,GAAU3yR,EAAI4kE,UAAW+sH,EAAS7rL,OACxCk5B,EAAIQ,SAAS1K,EAAIrhB,YAAaqhB,EAAI7M,UAClC6M,EAAM69P,GAAU3yR,EAAI4kE,UAAW+sH,EAAS/+E,KACxC5zE,EAAIa,OAAO/K,EAAIrhB,YAAaqhB,EAAI7M,UACzB+W,GAEL6+P,GAAa,SAAUj+R,EAAMo/B,GAC/B,IAAIytP,EAAW7sR,EAAKmR,cAAchR,eAAeksR,GAAKH,MACtDlsR,EAAKwS,YAAYq6Q,GACjBztP,EAAIQ,SAASitP,EAAU,GACvBztP,EAAIa,OAAO4sP,EAAU,IAEnBxiG,GAAU,SAAUrqL,GACtB,OAAgC,IAAzBA,EAAKL,iBAEVu+R,GAAuB,SAAUl+R,EAAMo/B,GACzC,OAAOm+P,GAAYE,eAAez9R,GAAMrV,MAAK,WAC3C,OAAO,KACN,SAAUuqC,GAGX,OAFAkK,EAAIQ,SAAS1K,EAAIrhB,YAAaqhB,EAAI7M,UAClC+W,EAAIa,OAAO/K,EAAIrhB,YAAaqhB,EAAI7M,WACzB,MAGP81Q,GAAyB,SAAUj6P,EAAMlkC,EAAMo/B,GACjD,SAAIirJ,GAAQrqL,KAAS+0R,GAAwB7wP,EAAMlkC,MACjDi+R,GAAWj+R,EAAMo/B,IACV,IAKPg/P,GAAc,SAAUh+R,EAAK8F,EAAO6rL,EAAU3yJ,GAChD,IACIt2C,EAAGkX,EAAMqoB,EAAQ5W,EADjB6xB,EAAQyuJ,EAAS7rL,EAAQ,QAAU,OAEnCg+B,EAAO9jC,EAAI4kE,UACf,GAAI1hC,EAAO,CAET,IADAjb,EAASib,EAAM,GACVtjC,EAAOkkC,EAAMp7C,EAAIw6C,EAAMp8C,OAAS,EAAG4B,GAAK,EAAGA,IAAK,CAEnD,GADA2oB,EAAWzR,EAAKJ,WACZu+R,GAAuBj6P,EAAMlkC,EAAMo/B,GACrC,OAAO,EAET,GAAIkE,EAAMx6C,GAAK2oB,EAASvqB,OAAS,EAC/B,QAAIi3S,GAAuBj6P,EAAMlkC,EAAMo/B,IAGhC8+P,GAAqBl+R,EAAMo/B,GAEpCp/B,EAAOyR,EAAS6xB,EAAMx6C,IAEF,IAAlBkX,EAAKwI,WACP6f,EAASnS,KAAK2f,IAAIyN,EAAM,GAAItjC,EAAK0hC,UAAUx6C,SAEvB,IAAlB8Y,EAAKwI,WACP6f,EAASnS,KAAK2f,IAAIyN,EAAM,GAAItjC,EAAKJ,WAAW1Y,SAE1Cgf,EACFk5B,EAAIQ,SAAS5/B,EAAMqoB,GAEnB+W,EAAIa,OAAOjgC,EAAMqoB,GAGrB,OAAO,GAELg2Q,GAAkB,SAAUr+R,GAC9B,OAAOyqL,GAASt2K,OAAOnU,IAASA,EAAKiO,KAAK/mB,OAAS,GAEjDwrM,GAAkB,SAAUtyL,EAAKiG,EAAQ0rL,GAC3C,IAAkD/xL,EAAM+4E,EAAKn8E,EAAMuvJ,EAE/Dt4I,EAAWwU,EAFXrW,EAAS5R,EAAI9O,IAAIygM,EAAStnM,GAAK,IAAM4b,GACrCguR,EAAOtiG,EAASsiG,KAEpB,GAAIriR,EAAQ,CAwCV,GAvCAhS,EAAOgS,EAAOnI,WACC,UAAXxD,GACGguR,EAGCriR,EAAOrS,iBACTK,EAAOgS,EAAOH,WACdknE,EAAM,GACGslN,GAAgBrsR,EAAOR,cAChCxR,EAAOgS,EAAOR,YACdunE,EAAM,GACGslN,GAAgBrsR,EAAOo4K,kBAChCpqL,EAAOgS,EAAOo4K,gBACdrxG,EAAM/mE,EAAOo4K,gBAAgBn8K,KAAK/mB,SAElC8Y,EAAOgS,EAAOnI,WACdkvE,EAAM34E,EAAIuyL,UAAU3gL,GAAU,GAbhC+mE,EAAM34E,EAAIuyL,UAAU3gL,GAgBtB6B,EAAY7T,EACZqoB,EAAS0wD,IAEJs7M,EAGCriR,EAAOrS,iBACTK,EAAOgS,EAAOH,WACdknE,EAAM,GACGslN,GAAgBrsR,EAAOo4K,kBAChCpqL,EAAOgS,EAAOo4K,gBACdrxG,EAAM/mE,EAAOo4K,gBAAgBn8K,KAAK/mB,SAElC8Y,EAAOgS,EAAOnI,WACdkvE,EAAM34E,EAAIuyL,UAAU3gL,IAVtB+mE,EAAM34E,EAAIuyL,UAAU3gL,GAatB6B,EAAY7T,EACZqoB,EAAS0wD,IAENs7M,EAAM,CACTloI,EAAOn6I,EAAOo4K,gBACdxtL,EAAOoV,EAAOR,YACdjpB,GAAMgD,KAAKhD,GAAMq+L,KAAK50K,EAAOpS,aAAa,SAAUI,GAC9CyqL,GAASt2K,OAAOnU,KAClBA,EAAK0hC,UAAY1hC,EAAK0hC,UAAUjgC,QAAQ,UAAW,QAGvD,MAAOuQ,EAAS5R,EAAI9O,IAAIygM,EAAStnM,GAAK,IAAM4b,GAC1CjG,EAAI4S,OAAOhB,GAAQ,GAEjBm6I,GAAQvvJ,GAAQuvJ,EAAK3jJ,WAAa5L,EAAK4L,UAAYiiL,GAASt2K,OAAOg4I,KAAUo2G,GAAIngQ,QACnF22E,EAAMozE,EAAKzqH,UAAUx6C,OACrBilK,EAAKmyI,WAAW1hS,EAAK8kC,WACrBthC,EAAI4S,OAAOpW,GAETiX,EAAYs4I,EACZ9jI,EAAS0wD,GAOf,OAAOvsF,EAAOP,KAAK8lS,GAAgBl+Q,EAAWwU,IAE9C,OAAO77B,EAAOrC,QAGdo0S,GAAe,SAAUn+R,EAAK2xL,GAChC,IAAI3yJ,EAAMh/B,EAAImlE,YACd,OAAI64N,GAAYh+R,GAAK,EAAM2xL,EAAU3yJ,IAAQg/P,GAAYh+R,GAAK,EAAO2xL,EAAU3yJ,GACtE5yC,EAAOP,KAAKmzC,GAEZ5yC,EAAOrC,QAGdq0S,GAAY,SAAUp+R,EAAK2xL,GAC7B,IAAIuqG,EAAW5pG,GAAgBtyL,EAAK,QAAS2xL,GACzC0sG,EAAS/rG,GAAgBtyL,EAAK,MAAO2xL,GACzC,OAAO36I,GAAMklP,EAAUmC,EAAOrzS,GAAGkxS,IAAW,SAAUoC,EAAMC,GAC1D,IAAIv/P,EAAMh/B,EAAImlE,YAGd,OAFAnmC,EAAIQ,SAASm+P,GAAS39R,EAAKs+R,EAAK7qR,aAAc6qR,EAAKr2Q,UACnD+W,EAAIa,OAAO89P,GAAS39R,EAAKu+R,EAAK9qR,aAAc8qR,EAAKt2Q,UAC1C+W,MAGPw/P,GAAiB,SAAUx+R,EAAK2xL,GAClC,OAAOvlM,EAAOD,KAAK6T,EAAIq9E,OAAOs0G,EAASrkM,MAAMqkM,EAASpgL,QAAQrmB,KAAI,SAAUy4E,GAC1E,IAAI3kC,EAAMh/B,EAAImlE,YAEd,OADAnmC,EAAIomC,WAAWzB,GACR3kC,MAGPy/P,GAAY,SAAU1/P,EAAW4yJ,GACnC,IAAI3xL,EAAM++B,EAAU/+B,IACpB,GAAI2xL,EAAU,CACZ,GAAI+rG,GAAe/rG,GACjB,OAAOwsG,GAAan+R,EAAK2xL,GACpB,GAAI2rG,GAAqB3rG,GAC9B,OAAOvlM,EAAOP,KAAK+xS,GAA6B59R,EAAK2xL,IAChD,GAAI6rG,GAAa7rG,GACtB,OAAOysG,GAAUp+R,EAAK2xL,GACjB,GAAI8rG,GAAgB9rG,GACzB,OAAO6sG,GAAex+R,EAAK2xL,GACtB,GAAI4rG,GAAgB5rG,GACzB,OAAOvlM,EAAOP,KAAK8lM,EAAS3yJ,KAGhC,OAAO5yC,EAAOrC,QAEZ20S,GAAkB,CAAEt2S,QAASq2S,IAE7BE,GAAgB,SAAU5/P,EAAWvxC,EAAM+qQ,GAC7C,OAAO27B,GAAYtiG,YAAY7yJ,EAAWvxC,EAAM+qQ,IAE9C1mE,GAAiB,SAAU9yJ,EAAW4yJ,GACxC+sG,GAAgBt2S,QAAQ22C,EAAW4yJ,GAAUxmM,MAAK,SAAU6zC,GAC1DD,EAAUm8H,OAAOl8H,OAGjB4/P,GAAmB,SAAUh/R,GAC/B,OAAOyqL,GAASv2K,UAAUlU,IAA0B,SAAjBA,EAAK0kL,SAA6D,aAAvC1kL,EAAK0U,aAAa,kBAE9EuqR,GAAY,CACdjtG,YAAa+sG,GACb9sG,eAAgBA,GAChByB,eAAgBsrG,IAGdE,GAAO,SAAUC,GACnB,OAAO,SAAUh2G,GACf,OAAOg2G,IAAah2G,IAGpBi2G,GAASF,GAAKrhQ,IACdwhQ,GAAiB,SAAUh7N,GAC7B,MAAe,KAARA,IAAgD,IAAlC,cAAgB96E,QAAQ86E,IAE3Ci7N,GAAY,SAAUj7N,GACxB,OAAQg7N,GAAeh7N,KAAS+6N,GAAO/6N,IAGrCk7N,GAAS,SAAUv/R,GACrB,QAASA,EAAKwI,UAEZg3R,GAAgB,SAAUx/R,GAC5B,OAAOA,GAAQ,UAAUkB,KAAKlB,EAAKgU,WAEjCyrR,GAAY,SAAUr/R,EAAK++B,EAAWC,GACxC,IACoCy2J,EAAQ71L,EAAMwlL,EAD9Cn9J,EAAS+W,EAAIwB,YACb/sB,EAAYurB,EAAIC,eACpB,IAAID,EAAIC,iBAAmBD,EAAIyB,eACzB2+P,GAAcpgQ,EAAIC,eAAez/B,WAAWw/B,EAAIwB,gBAI3B,IAAvB/sB,EAAUrL,SAUZ,IATAg9K,EAAQ3xK,EAAUjU,WACdyoB,EAASm9J,EAAMt+L,QACjB2sB,EAAY2xK,EAAMn9J,GAClBwtK,EAAS,IAAI0sF,GAAW1uQ,EAAWzT,EAAI2kE,UAAUlxD,EAAWzT,EAAI8iE,YAEhErvD,EAAY2xK,EAAMA,EAAMt+L,OAAS,GACjC2uM,EAAS,IAAI0sF,GAAW1uQ,EAAWzT,EAAI2kE,UAAUlxD,EAAWzT,EAAI8iE,UAChE2yH,EAAOj5L,MAAK,IAEToD,EAAO61L,EAAOrzL,UAAWxC,EAAMA,EAAO61L,EAAOj5L,OAChD,GAAsB,IAAlBoD,EAAKwI,WAAmBk3R,GAAiB1/R,GAG3C,OAFAo/B,EAAIQ,SAAS5/B,EAAM,QACnBm/B,EAAUm8H,OAAOl8H,IAMrBugQ,GAA0B,SAAU3/R,EAAMpD,EAAMgjS,GAClD,GAAI5/R,EAAM,CACR,IAAI6/R,EAAWjjS,EAAO,cAAgB,kBACtC,IAAKoD,EAAO4/R,EAAM5/R,EAAOA,EAAK6/R,GAAW7/R,EAAMA,EAAOA,EAAK6/R,GACzD,GAAsB,IAAlB7/R,EAAKwI,WAAmBk3R,GAAiB1/R,GAC3C,OAAOA,IAKX8/R,GAAgB,SAAUrkO,EAAQ/tE,GAIpC,OAHI6xS,GAAO7xS,KACTA,EAAOA,EAAKsmB,YAELynD,EAAOlhE,OAAO0vL,uBAAuBv8L,EAAKoU,gBAEjDumG,GAAU,SAAUqF,EAAIp8F,EAAQI,GAClC,OAAOg8F,EAAGnzG,OAAOy1Q,aAAa1+P,EAAQI,IAEpCguR,GAAmB,SAAU1/R,GAC/B,OAAOA,GAAQyqL,GAASt2K,OAAOnU,IAAS,kBAAkBkB,KAAKlB,EAAK0hC,YAElEq+P,GAAkB,SAAU//R,GAC9B,OAAOA,GAAQyqL,GAASt2K,OAAOnU,IAAyB,IAAhBA,EAAK9Y,QAE3C84S,GAAc,SAAU34S,EAAO44S,GAQjC,MAPqB,kBAAV54S,EACTA,EAAQA,EAAM44S,GACLA,IACT54S,EAAQA,EAAMoa,QAAQ,WAAW,SAAUuE,EAAKtY,GAC9C,OAAOuyS,EAAKvyS,IAASsY,MAGlB3e,GAEL64S,GAAO,SAAUC,EAAM5tB,GAKzB,OAJA4tB,EAAOA,GAAQ,GACf5tB,EAAOA,GAAQ,GACf4tB,EAAO,IAAMA,EAAKnsR,UAAYmsR,GAC9B5tB,EAAO,IAAMA,EAAKv+P,UAAYu+P,GACvB4tB,EAAKr+R,gBAAkBywQ,EAAKzwQ,eAEjCs+R,GAAsB,SAAUhgS,EAAK/Y,EAAOqG,GAU9C,MATa,UAATA,GAA6B,oBAATA,IACtBrG,EAAQ+Y,EAAIq2E,MAAMpvF,IAEP,eAATqG,GAAmC,MAAVrG,IAC3BA,EAAQ,QAEG,eAATqG,IACFrG,EAAQA,EAAMoa,QAAQ,UAAW,IAAIA,QAAQ,QAAS,MAEjD,GAAKpa,GAEVm1E,GAAW,SAAUp8D,EAAKJ,EAAMtS,GAClC,OAAO0yS,GAAoBhgS,EAAKA,EAAIo8D,SAASx8D,EAAMtS,GAAOA,IAExD2yS,GAAoB,SAAUjgS,EAAKJ,GACrC,IAAIsgS,EAKJ,OAJAlgS,EAAI2kE,UAAU/kE,GAAM,SAAUjX,GAE5B,OADAu3S,EAAalgS,EAAIo8D,SAASzzE,EAAG,mBACtBu3S,GAA6B,SAAfA,KAEhBA,GAELC,GAAe,SAAUngS,EAAKJ,EAAMuI,GACtC,OAAOnI,EAAIo7E,WAAWx7E,EAAMuI,EAAUnI,EAAI4kE,YAGxCw7N,GAAmBvB,GAAUvrG,eAC7B+sG,GAAeF,GAAcG,GAAqBhB,GAAkBiB,GAAgBb,GACpF31G,GAAY,SAAUnqL,GACxB,MAAyB,OAAlBA,EAAKgU,UAAqBhU,EAAK0U,aAAa,oBAAsB1U,EAAKwR,aAE5EovR,GAA4B,SAAUxgS,EAAKJ,GAC7C,IAAIsR,EAAStR,EACb,MAAOsR,EAAQ,CACb,GAAIm5K,GAASv2K,UAAU5C,IAAWlR,EAAI+iE,mBAAmB7xD,GACvD,MAA0C,UAAnClR,EAAI+iE,mBAAmB7xD,GAAsBA,EAAStR,EAE/DsR,EAASA,EAAOzH,WAElB,OAAO7J,GAEL6gS,GAAW,SAAU36R,EAAOlG,EAAMqoB,EAAQ9Z,GAE5C,IADA,IAAIvI,EAAMhG,EAAKiO,KACNnlB,EAAIu/B,EAAQniB,EAAQpd,GAAK,EAAIA,EAAIkd,EAAI9e,OAAQgf,EAAQpd,IAAMA,IAClE,GAAIylB,EAAUvI,EAAI0+D,OAAO57E,IACvB,OAAOod,EAAQpd,EAAI,EAAIA,EAG3B,OAAQ,GAENg4S,GAAY,SAAU56R,EAAOlG,EAAMqoB,GACrC,OAAOw4Q,GAAS36R,EAAOlG,EAAMqoB,GAAQ,SAAU3Y,GAC7C,OAAO0vR,GAAO1vR,IAAM2vR,GAAe3vR,OAGnCqxR,GAAc,SAAU76R,EAAOlG,EAAMqoB,GACvC,OAAOw4Q,GAAS36R,EAAOlG,EAAMqoB,EAAQi3Q,KAEnC0B,GAAmB,SAAU5gS,EAAK6e,EAAMpL,EAAWwU,EAAQniB,EAAO+6R,GACpE,IAAIC,EACA59N,EAAWljE,EAAI2kE,UAAUlxD,EAAWzT,EAAI8iE,UAAYjkD,EACpDqxL,EAAO,SAAUz8L,EAAWwU,EAAQj6B,GACtC,IAAI+yS,EAAa1M,GAAWr0R,GACxBy1L,EAAS3vL,EAAQi7R,EAAW59N,UAAY49N,EAAWvM,SACvD,OAAOpoS,EAAOD,KAAKspM,EAAOhiL,EAAWwU,GAAQ,SAAUnoB,EAAMkhS,GAC3D,OAAIZ,GAAiBtgS,EAAK2J,aAChB,GAERq3R,EAAehhS,EACR9R,EAAK8X,EAAOhG,EAAMkhS,MAE1B99N,KAED+9N,EAAc/wF,EAAKz8L,EAAWwU,EAAQy4Q,IAC1C,OAAOO,EAAY71S,MAAK,SAAUyK,GAChC,OAAOgrS,EAAwB3wF,EAAKr6M,EAAO4d,UAAW5d,EAAOoyB,QAAUniB,GAAS,EAAI,GAAI66R,IAAev0S,EAAOP,KAAKgK,MAClH5K,SAAQ,WACT,OAAO61S,EAAe10S,EAAOP,KAAK,CAChC4nB,UAAWqtR,EACX74Q,OAAQniB,EAAQ,EAAIg7R,EAAah6S,SAC9BsF,EAAOrC,WAGZm3S,GAAuB,SAAUlhS,EAAKm7E,EAAQn8C,EAAKvrB,EAAWmuQ,GAC5Dv3F,GAASt2K,OAAON,IAA6C,IAA/BA,EAAU6tB,UAAUx6C,QAAgB2sB,EAAUmuQ,KAC9EnuQ,EAAYA,EAAUmuQ,IAGxB,IADA,IAAIhlI,EAAUyjJ,GAAargS,EAAKyT,GACvB/qB,EAAI,EAAGA,EAAIk0J,EAAQ91J,OAAQ4B,IAClC,IAAK,IAAIyX,EAAI,EAAGA,EAAIg7E,EAAOr0F,OAAQqZ,IAAK,CACtC,IAAIghS,EAAYhmN,EAAOh7E,GACvB,MAAI,cAAeghS,IAAaA,EAAUrgQ,YAAc9B,EAAI8B,YAGxD9gC,EAAIxV,GAAGoyJ,EAAQl0J,GAAIy4S,EAAUh5R,UAC/B,OAAOy0I,EAAQl0J,GAIrB,OAAO+qB,GAEL2tR,GAAoB,SAAU/lO,EAAQ8f,EAAQ1nE,EAAWmuQ,GAC3D,IAAIhiR,EACAI,EAAMq7D,EAAOr7D,IACb8jC,EAAO9jC,EAAI4kE,UAIf,GAHKuW,EAAO,GAAGpoE,UACbnT,EAAOI,EAAI2kE,UAAUlxD,EAAW0nE,EAAO,GAAG80C,MAAOnsF,KAE9ClkC,EAAM,CACT,IAAIyhS,EAAYrhS,EAAI2kE,UAAUlxD,EAAW,YACzC7T,EAAOI,EAAI2kE,UAAU0lH,GAASt2K,OAAON,GAAaA,EAAUhK,WAAagK,GAAW,SAAU7T,GAC5F,OAAOA,IAASkkC,GAAQy8P,GAAcllO,EAAQz7D,KAC7CyhS,GAKL,GAHIzhS,GAAQu7E,EAAO,GAAGpoE,UACpBnT,EAAOygS,GAAargS,EAAKJ,EAAM,SAASjQ,UAAU,IAAMiQ,IAErDA,EAAM,CACTA,EAAO6T,EACP,MAAO7T,EAAKgiR,KAAiB5hR,EAAI8iE,QAAQljE,EAAKgiR,IAE5C,GADAhiR,EAAOA,EAAKgiR,GACRke,GAAKlgS,EAAM,MACb,MAIN,OAAOA,GAAQ6T,GAEb6tR,GAAsB,SAAUthS,EAAKm7E,EAAQl8C,EAAgBuB,EAAaC,EAAcC,EAAW56B,GACrG,IAAI2N,EAAWvC,EAAQc,EAAS4vQ,EAAa99O,EAI7C,GAHArwB,EAAYvC,EAASpL,EAAQm5B,EAAiBwB,EAC9CmhP,EAAc97Q,EAAQ,kBAAoB,cAC1Cg+B,EAAO9jC,EAAI4kE,UACPylH,GAASt2K,OAAON,KAAe6sR,GAAmB7sR,KAChD3N,EAAQ06B,EAAc,EAAIE,EAAYjtB,EAAU6tB,UAAUx6C,QAC5D,OAAO2sB,EAGX,MAAO,EAAM,CACX,IAAK0nE,EAAO,GAAGomN,cAAgBvhS,EAAI8iE,QAAQ5xD,GACzC,OAAOA,EAET,IAAKc,EAAUd,EAAO0wQ,GAAc5vQ,EAASA,EAAUA,EAAQ4vQ,GAC7D,IAAKwe,GAAiBpuR,KAAasuR,GAAmBtuR,KAAa+3K,GAAU/3K,GAC3E,OAAOd,EAGX,GAAIA,IAAW4yB,GAAQ5yB,EAAOzH,aAAeq6B,EAAM,CACjDrwB,EAAYvC,EACZ,MAEFA,EAASA,EAAOzH,WAElB,OAAOgK,GAEL+tR,GAAY,SAAUnmO,EAAQr8B,EAAKm8C,EAAQsmN,QAChB,IAAzBA,IACFA,GAAuB,GAEzB,IAAIxiQ,EAAiBD,EAAIC,eAAgBuB,EAAcxB,EAAIwB,YAAaC,EAAezB,EAAIyB,aAAcC,EAAY1B,EAAI0B,UACrH1gC,EAAMq7D,EAAOr7D,IAqCjB,GApCIqqL,GAASv2K,UAAUmrB,IAAmBA,EAAe1/B,kBACvD0/B,EAAiBskC,GAAQtkC,EAAgBuB,GACrC6pJ,GAASt2K,OAAOkrB,KAClBuB,EAAc,IAGd6pJ,GAASv2K,UAAU2sB,IAAiBA,EAAalhC,kBACnDkhC,EAAe8iC,GAAQ9iC,EAAczB,EAAI8B,UAAYJ,EAAYA,EAAY,GACzE2pJ,GAASt2K,OAAO0sB,KAClBC,EAAYD,EAAaa,UAAUx6C,SAGvCm4C,EAAiBuhQ,GAA0BxgS,EAAKi/B,GAChDwB,EAAe+/P,GAA0BxgS,EAAKygC,IAC1C2/P,GAAiBnhQ,EAAex1B,aAAe22R,GAAiBnhQ,MAClEA,EAAiBmhQ,GAAiBnhQ,GAAkBA,EAAiBA,EAAex1B,WAElFw1B,EADED,EAAI8B,UACW7B,EAAe+qJ,iBAAmB/qJ,EAElCA,EAAe7tB,aAAe6tB,EAE7CorJ,GAASt2K,OAAOkrB,KAClBuB,EAAcxB,EAAI8B,UAAY7B,EAAen4C,OAAS,KAGtDs5S,GAAiB3/P,EAAah3B,aAAe22R,GAAiB3/P,MAChEA,EAAe2/P,GAAiB3/P,GAAgBA,EAAeA,EAAah3B,WAE1Eg3B,EADEzB,EAAI8B,UACSL,EAAarvB,aAAeqvB,EAE5BA,EAAaupJ,iBAAmBvpJ,EAE7C4pJ,GAASt2K,OAAO0sB,KAClBC,EAAY1B,EAAI8B,UAAY,EAAIL,EAAa35C,SAG7Ck4C,EAAI8B,UAAW,CACjB,IAAI4gQ,EAAad,GAAiB5gS,EAAKq7D,EAAOv8C,UAAWmgB,EAAgBuB,GAAa,EAAMihQ,GAC5FC,EAAWv2S,MAAK,SAAUiK,GACxB,IAAIqe,EAAYre,EAAGqe,UAAWwU,EAAS7yB,EAAG6yB,OAC1CgX,EAAiBxrB,EACjB+sB,EAAcvY,KAEhB,IAAI05Q,EAAWf,GAAiB5gS,EAAKq7D,EAAOv8C,UAAW2hB,EAAcC,GAAW,EAAO+gQ,GACvFE,EAASx2S,MAAK,SAAUiK,GACtB,IAAIqe,EAAYre,EAAGqe,UAAWwU,EAAS7yB,EAAG6yB,OAC1CwY,EAAehtB,EACfitB,EAAYzY,KAmChB,OAhCIkzD,EAAO,GAAGpd,QAAUod,EAAO,GAAGomN,gBAC3BpmN,EAAO,GAAGpd,QAAYssH,GAASt2K,OAAOkrB,IAAmC,IAAhBuB,IAC5DvB,EAAiBqiQ,GAAoBthS,EAAKm7E,EAAQl8C,EAAgBuB,EAAaC,EAAcC,GAAW,IAErGy6C,EAAO,GAAGpd,QAAYssH,GAASt2K,OAAO0sB,IAAiBC,IAAcD,EAAaa,UAAUx6C,SAC/F25C,EAAe6gQ,GAAoBthS,EAAKm7E,EAAQl8C,EAAgBuB,EAAaC,EAAcC,GAAW,KAGtGy6C,EAAO,GAAGhzE,WAAiC,IAArBgzE,EAAO,GAAGlnB,SAAqBknB,EAAO,GAAGpd,SACjE9+B,EAAiBiiQ,GAAqBlhS,EAAKm7E,EAAQn8C,EAAKC,EAAgB,mBACxEwB,EAAeygQ,GAAqBlhS,EAAKm7E,EAAQn8C,EAAKyB,EAAc,iBAElE06C,EAAO,GAAG80C,OAAS90C,EAAO,GAAGhzE,YAC/B82B,EAAiBmiQ,GAAkB/lO,EAAQ8f,EAAQl8C,EAAgB,mBACnEwB,EAAe2gQ,GAAkB/lO,EAAQ8f,EAAQ16C,EAAc,eAC3D06C,EAAO,GAAG80C,QACPjwH,EAAI8iE,QAAQ7jC,KACfA,EAAiBqiQ,GAAoBthS,EAAKm7E,EAAQl8C,EAAgBuB,EAAaC,EAAcC,GAAW,IAErG1gC,EAAI8iE,QAAQriC,KACfA,EAAe6gQ,GAAoBthS,EAAKm7E,EAAQl8C,EAAgBuB,EAAaC,EAAcC,GAAW,MAIxG2pJ,GAASv2K,UAAUmrB,KACrBuB,EAAcxgC,EAAIuyL,UAAUtzJ,GAC5BA,EAAiBA,EAAex1B,YAE9B4gL,GAASv2K,UAAU2sB,KACrBC,EAAY1gC,EAAIuyL,UAAU9xJ,GAAgB,EAC1CA,EAAeA,EAAah3B,YAEvB,CACLw1B,eAAgBA,EAChBuB,YAAaA,EACbC,aAAcA,EACdC,UAAWA,IAIXkhQ,GAASz5S,GAAMgD,KACf02S,GAA0B,SAAUpuR,EAAWlC,GACjD,IAAI/R,EAAaiU,EAAUjU,WAM3B,OALI+R,GAAS/R,EAAW1Y,OACtByqB,EAAQ/R,EAAW1Y,OAAS,EACnByqB,EAAQ,IACjBA,EAAQ,GAEH/R,EAAW+R,IAAUkC,GAE1BquR,GAAc,SAAUruR,EAAWlC,GACrC,OAAOswR,GAAwBpuR,EAAWlC,EAAQ,IAEhDwwR,GAAS,SAAU/hS,EAAKg/B,EAAK09C,GAC/B,IAAIz9C,EAAiBD,EAAIC,eACrBuB,EAAcxB,EAAIwB,YAClBC,EAAezB,EAAIyB,aACnBC,EAAY1B,EAAI0B,UAChB0kJ,EAAQplL,EAAIq9E,OAAO,+CACvB,GAAI+nG,EAAMt+L,OAAS,EACjB86S,GAAOx8G,GAAO,SAAUxlL,GACtB88E,EAAS,CAAC98E,WAFd,CAMA,IAAI3K,EAAU,SAAUmwL,GACtB,IAAIxlL,EASJ,OARAA,EAAOwlL,EAAM,GACS,IAAlBxlL,EAAKwI,UAAkBxI,IAASq/B,GAAkBuB,GAAe5gC,EAAK0hC,UAAUx6C,QAClFs+L,EAAMxsG,OAAO,EAAG,GAElBh5E,EAAOwlL,EAAMA,EAAMt+L,OAAS,GACV,IAAd45C,GAAmB0kJ,EAAMt+L,OAAS,GAAK8Y,IAAS6gC,GAAkC,IAAlB7gC,EAAKwI,UACvEg9K,EAAMxsG,OAAOwsG,EAAMt+L,OAAS,EAAG,GAE1Bs+L,GAEL48G,EAAkB,SAAUpiS,EAAMtS,EAAM8lM,GAE1C,IADA,IAAIC,EAAW,GACRzzL,GAAQA,IAASwzL,EAASxzL,EAAOA,EAAKtS,GAC3C+lM,EAAS/kM,KAAKsR,GAEhB,OAAOyzL,GAEL4uG,EAAe,SAAUriS,EAAMkkC,GACjC,EAAG,CACD,GAAIlkC,EAAK6J,aAAeq6B,EACtB,OAAOlkC,EAETA,EAAOA,EAAK6J,iBACL7J,IAEPsiS,EAAe,SAAU/qJ,EAAWi8C,EAAS52L,GAE/C,IADA,IAAIolR,EAAcplR,EAAO,cAAgB,kBAChCoD,EAAOu3I,EAAW4xB,EAAWnpK,EAAK6J,WAAY7J,GAAQA,IAASwzL,EAASxzL,EAAOmpK,EAAU,CAChGA,EAAWnpK,EAAK6J,WAChB,IAAI04R,EAAaH,EAAgBpiS,IAASu3I,EAAYv3I,EAAOA,EAAKgiR,GAAcA,GAC5EugB,EAAWr7S,SACR0V,GACH2lS,EAAWxyS,UAEb+sF,EAASznF,EAAQktS,OAUvB,GANgC,IAA5BljQ,EAAe72B,UAAkB62B,EAAe1/B,kBAClD0/B,EAAiB4iQ,GAAwB5iQ,EAAgBuB,IAE7B,IAA1BC,EAAar4B,UAAkBq4B,EAAalhC,kBAC9CkhC,EAAeqhQ,GAAYrhQ,EAAcC,IAEvCzB,IAAmBwB,EACrB,OAAOi8C,EAASznF,EAAQ,CAACgqC,KAG3B,IADA,IAAI51B,EAAWrJ,EAAI4lR,mBAAmB3mP,EAAgBwB,GAC7C7gC,EAAOq/B,EAAgBr/B,EAAMA,EAAOA,EAAK6J,WAAY,CAC5D,GAAI7J,IAAS6gC,EACX,OAAOyhQ,EAAajjQ,EAAgB51B,GAAU,GAEhD,GAAIzJ,IAASyJ,EACX,MAGJ,IAASzJ,EAAO6gC,EAAc7gC,EAAMA,EAAOA,EAAK6J,WAAY,CAC1D,GAAI7J,IAASq/B,EACX,OAAOijQ,EAAazhQ,EAAcp3B,GAEpC,GAAIzJ,IAASyJ,EACX,MAGJ,IAAIq4R,EAAaO,EAAahjQ,EAAgB51B,IAAa41B,EACvD0iQ,EAAWM,EAAaxhQ,EAAcp3B,IAAao3B,EACvDyhQ,EAAajjQ,EAAgByiQ,GAAY,GACzC,IAAIruG,EAAW2uG,EAAgBN,IAAeziQ,EAAiByiQ,EAAaA,EAAWtwR,YAAa,cAAeuwR,IAAalhQ,EAAekhQ,EAASvwR,YAAcuwR,GAClKtuG,EAASvsM,QACX41F,EAASznF,EAAQo+L,IAEnB6uG,EAAazhQ,EAAckhQ,KAEzBS,GAAY,CAAElyF,KAAM6xF,IAExB,SAAS3gQ,GAAW52C,EAAI8C,GACtB,IAAI4D,EAAM,SAAUgX,GAClB,IAAK1d,EAAG0d,GACN,MAAM,IAAIrgB,MAAM,gBAAkByF,EAAO,eAAiBA,EAAO,SAEnE,OAAO+zC,EAAUn5B,GAASxd,MAAM,KAE9B22C,EAAY,SAAUn5B,GACxB,OAAO1d,EAAG0d,GAAW9b,EAAOD,KAAK+b,EAAQlI,MAAMshC,WAAal1C,EAAOrC,QAEjE8U,EAAM,SAAUqJ,EAASjhB,GAC3B,IAAKuD,EAAG0d,GACN,MAAM,IAAIrgB,MAAM,oBAAsByF,EAAO,eAAiBA,EAAO,SAEvE4a,EAAQlI,MAAMshC,UAAYr6C,GAE5B,MAAO,CACLiK,IAAKA,EACLmwC,UAAWA,EACXxiC,IAAKA,GAIT,IAAIykB,GAAM8d,GAAUrtB,GAAQ,QACxBoR,GAAQ,SAAUjd,GACpB,OAAOob,GAAIpyB,IAAIgX,IAGbm6R,GAAc,SAAUh6R,GAC1B,OAAO0L,GAAO1L,IAAS8c,GAAM9c,KAAUm1B,IAErCqpC,GAAU,SAAUxL,EAAQhzD,EAAMi6R,EAAU1uR,GAC9C,OAAO1C,GAAO7I,GAAM9d,MAAK,WACvB,MAAO,cACN,SAAU2mB,GACX,MAAiB,OAAb0C,GAAqByuR,GAAYh6R,GAC5B,QACE4iR,GAAa5iR,GACf,WACEqsR,GAAYrsR,GACd,QACG4/F,GAAQ5sC,EAAQinO,EAAU1uR,IAAcq0F,GAAQ5sC,EAAQ/tE,GAAK4jB,GAASoxR,GAGzE,QAFA,oBAOTC,GAAgB,SAAUlnO,EAAQr8B,GACpC,IAAIx1C,EAAIg4S,GAAUnmO,EAAQr8B,EAAK,CAAC,CAAE++B,QAAQ,KAC1C/+B,EAAIQ,SAASh2C,EAAEy1C,eAAgBz1C,EAAEg3C,aACjCxB,EAAIa,OAAOr2C,EAAEi3C,aAAcj3C,EAAEk3C,WAC7B26B,EAAOt8B,UAAUm8H,OAAOl8H,IAEtBwjQ,GAAiB,SAAUC,EAAMrtS,EAAIw1R,EAAgB8X,GACvD,IAAI9rJ,EAAKxhJ,EAAGuZ,IAAKA,OAAa,IAAPioI,EAAgBtlJ,GAAS,kBAAoBslJ,EAAI/oI,EAAO5kB,GAAOmM,EAAI,CAAC,QACvFutS,EAAStiS,GAAQX,QAAQ,OAAQ+iS,GACrClkR,GAAMokR,EAAQlY,MACd5rR,GAAI8jS,EAAQ,GAAKhY,KAAoBh8Q,GACrC9P,GAAI8jS,EAAQ,GAAKjY,KAAkBE,GACnC,IAAIvtG,EAAKqlH,EAAS/zR,EAAKd,GAAO+0R,EAAKvlH,EAAGnjK,WAAYA,OAAoB,IAAP0oR,EAAgB,GAAKA,EAAI3lI,EAAKogB,EAAGpjK,QAASA,OAAiB,IAAPgjJ,EAAgB,GAAKA,EAGxI,OAFA9oJ,GAAOwuR,EAAQzoR,GACfqjJ,GAAMolI,EAAQ1oR,GACP0oR,GAELE,GAAW,SAAUxnO,EAAQr8B,EAAK4rP,EAAgB8X,EAAU70R,GAC9D,IAAIi1R,EAAc,GACdH,EAASH,GAAennO,EAAOmI,SAAU31D,EAAM+8Q,EAAgB8X,GAC/D3vR,EAAUpU,GAAKvS,EAAOrC,QACtBg5S,EAAgB,WAClBhwR,EAAQlU,IAAIzS,EAAOrC,SAEjBi5S,EAAmB,WACrB,OAAOjwR,EAAQ7hB,MAAMvG,YAAW,WAC9B,IAAIkI,EAAKF,GAAQgwS,GAGjB,OAFAG,EAAYx0S,KAAKuE,GACjBkgB,EAAQlU,IAAIzS,EAAOP,KAAKgH,IACjBA,MAGPowS,EAAkB,SAAUxlB,GAC9BtyR,EAAKsyR,EAAOylB,IAEVA,EAAiB,SAAU76R,GAC7B,IAAI+wE,EAAMvS,GAAQxL,EAAQhzD,EAAM,OAAQ/a,GAAK+a,IAC7C,OAAQ+wE,GACR,IAAK,gBACD2pN,IACA,IAAI/vR,EAAa3B,GAAShJ,GAC1B46R,EAAgBjwR,GAChB+vR,IACA,MAEJ,IAAK,QACD,IAAIx6Q,EAAIy6Q,IACR7tS,GAAKkT,EAAMkgB,GACX,QAIF46Q,EAAe,SAAU/9G,GAC3B,IAAIq4F,EAAQvyR,EAAIk6L,EAAO/kL,GAAQZ,SAC/BwjS,EAAgBxlB,IAMlB,OAJA2kB,GAAUlyF,KAAK70I,EAAOr7D,IAAKg/B,GAAK,SAAUomJ,GACxC29G,IACAI,EAAa/9G,MAER09G,GAELM,GAAuB,SAAU/nO,EAAQ/tE,EAAMguE,EAAUztD,GAC3DwtD,EAAOigB,YAAYC,UAAS,WAC1B,IAAI8nN,EAAahoO,EAAOt8B,UAAU6nC,SAIlC,GAHIy8N,EAAWviQ,WACbyhQ,GAAclnO,EAAQgoO,GAEpBhoO,EAAOt8B,UAAU6nC,SAAS9lC,UAAW,CACvC,IAAI/tB,EAAUyvR,GAAennO,EAAOmI,SAAU31D,EAAMvgB,EAAMguE,EAASonO,UACnExuR,GAAMnB,EAAS0qB,IACf49B,EAAOt8B,UAAU6nC,SAASlD,WAAW3wD,EAAQ/S,OAC7Cq7D,EAAOt8B,UAAUs+C,OAAOtqE,EAAQ/S,WAC3B,CACL,IAAI2xL,EAAWuiG,GAAYL,sBAAsBx4N,EAAOt8B,WAAW,GAC/DC,EAAMq8B,EAAOt8B,UAAU6nC,SAC3Bi8N,GAASxnO,EAAQr8B,EAAK1xC,EAAMguE,EAASonO,SAAU70R,GAC/CwtD,EAAOt8B,UAAU8yJ,eAAeF,QAKlC2xG,GAAY,SAAUjoO,GACxB,IAAIkN,EAAW92C,KACf80D,GAAQlrB,EAAQkN,GAChB,IAAIk1F,EAAUpoG,GAAMgG,GACpB,MAAO,CACL+M,SAAU,SAAU96E,EAAMguE,GACxBiN,EAASH,SAAS96E,EAAMguE,IAE1BunO,SAAU,SAAUv1S,EAAMugB,GACxB06D,EAAS36B,OAAOtgD,GAAMnC,MAAK,SAAUmwE,GACnC8nO,GAAqB/nO,EAAQ/tE,EAAMguE,EAAUztD,OAGjD01R,kBAAmB,SAAUj2S,EAAMovF,GACjC+gF,EAAQxvE,YAAY3gG,EAAMovF,IAE5B9pE,OAAQ,SAAUtlB,GAChBixJ,GAASljF,EAAQjvE,EAAOP,KAAKyB,IAAOnC,MAAK,SAAUiK,GACjD,IAAImd,EAAWnd,EAAGmd,SAClBpnB,EAAKonB,EAAUO,QAGnB01D,OAAQ,SAAUl7E,GAChB,IAAIilE,EAAY24N,GAAQ7vN,EAAQ/tE,GAChC,OAAOsD,GAAM2hE,GAAW,SAAUkrN,GAChC,OAAOvyR,EAAIuyR,GAAO,SAAUp1Q,GAC1B,OAAOA,EAAKrI,eAOlBwjS,GAAqB,eACrBC,GAAa,CACf,QAAS,EACT,WAAY,EACZ,SAAU,EACV,MAAO,EACP,WAAY,GACZ,qBAAsB,IAEpBC,GAAS,SAAU9jS,EAAMkkC,EAAMioH,GACjC,IAAIw2H,EAAYx2H,EAAO,YAAc,aACjC61H,EAAc71H,EAAO,OAAS,OAClC,GAAInsJ,EAAK2iR,GACP,OAAO3iR,EAAK2iR,GAEd,GAAI3iR,IAASkkC,EAAM,CACjB,IAAI9xB,EAAUpS,EAAKgiR,GACnB,GAAI5vQ,EACF,OAAOA,EAET,IAAK,IAAI+2J,EAAWnpK,EAAKsR,OAAQ63J,GAAYA,IAAajlI,EAAMilI,EAAWA,EAAS73J,OAElF,GADAc,EAAU+2J,EAAS64G,GACf5vQ,EACF,OAAOA,IAKX2xR,GAAoB,SAAU/jS,GAChC,IAAK4jS,GAAmB1iS,KAAKlB,EAAK3Y,OAChC,OAAO,EAET,IAAIwiB,EAAa7J,EAAKsR,OACtB,OAAIzH,GAAmC,SAApBA,EAAWnc,OAAmBmc,EAAWiU,KAAK,WAAa,SAAS5c,KAAKlB,EAAK3Y,QAK/F8+R,GAAoB,SAAUnmR,GAChC,IAAIykL,EAA8B,MAAdzkL,EAAKtS,OAAiBsS,EAAK8d,KAAK,SAAW9d,EAAK8d,KAAK,MACzE,OAAO9d,EAAK8d,KAAK,SAAW9d,EAAK8d,KAAK,QAAU9d,EAAK6R,YAAc7R,EAAK8d,KAAK,sBAAwB2mK,GAEnGu/G,GAAS,WACX,SAASpjS,EAAKlT,EAAME,GAClBxE,KAAKsE,KAAOA,EACZtE,KAAKwE,KAAOA,EACC,IAATA,IACFxE,KAAKkxB,WAAa,GAClBlxB,KAAKkxB,WAAWhvB,IAAM,IA4O1B,OAzOAsV,EAAKyvB,OAAS,SAAU3iC,EAAM8mB,GAC5B,IAAIxU,EAAO,IAAIY,EAAKlT,EAAMm2S,GAAWn2S,IAAS,GAC9C,GAAI8mB,EACF,IAAK,IAAI0wL,KAAY1wL,EACnBxU,EAAK8d,KAAKonL,EAAU1wL,EAAM0wL,IAG9B,OAAOllM,GAETY,EAAK3X,UAAUwY,QAAU,SAAUzB,GACjC,IAAI7T,EAAO/C,KAMX,OALI4W,EAAKsR,QACPtR,EAAKgT,SAEP7mB,EAAK4+D,OAAO/qD,EAAM7T,GAClBA,EAAK6mB,SACE7mB,GAETyU,EAAK3X,UAAU60B,KAAO,SAAUpwB,EAAMrG,GACpC,IACImtB,EADAroB,EAAO/C,KAEX,GAAoB,kBAATsE,EAAmB,CAC5B,IAAK,IAAI6D,KAAO7D,EACdvB,EAAK2xB,KAAKvsB,EAAK7D,EAAK6D,IAEtB,OAAOpF,EAET,GAAIqoB,EAAQroB,EAAKmuB,WAAY,CAC3B,QAAcnvB,IAAV9D,EAAqB,CACvB,GAAc,OAAVA,EAAgB,CAClB,GAAIqG,KAAQ8mB,EAAMlpB,IAAK,QACdkpB,EAAMlpB,IAAIoC,GACjB,IAAI5E,EAAI0rB,EAAMttB,OACd,MAAO4B,IACL,GAAI0rB,EAAM1rB,GAAG4E,OAASA,EAEpB,OADA8mB,EAAMwkE,OAAOlwF,EAAG,GACTqD,EAIb,OAAOA,EAET,GAAIuB,KAAQ8mB,EAAMlpB,IAAK,CACjBxC,EAAI0rB,EAAMttB,OACd,MAAO4B,IACL,GAAI0rB,EAAM1rB,GAAG4E,OAASA,EAAM,CAC1B8mB,EAAM1rB,GAAGzB,MAAQA,EACjB,YAIJmtB,EAAM9lB,KAAK,CACThB,KAAMA,EACNrG,MAAOA,IAIX,OADAmtB,EAAMlpB,IAAIoC,GAAQrG,EACX8E,EAET,OAAOqoB,EAAMlpB,IAAIoC,KAGrBkT,EAAK3X,UAAUiW,MAAQ,WACrB,IAEI+kS,EAFA93S,EAAO/C,KACP8V,EAAQ,IAAI0B,EAAKzU,EAAKuB,KAAMvB,EAAKyB,MAErC,GAAIq2S,EAAY93S,EAAKmuB,WAAY,CAC/B,IAAI4pR,EAAa,GACjBA,EAAW54S,IAAM,GACjB,IAAK,IAAIxC,EAAI,EAAG8zG,EAAIqnM,EAAU/8S,OAAQ4B,EAAI8zG,EAAG9zG,IAAK,CAChD,IAAIq7S,EAAWF,EAAUn7S,GACH,OAAlBq7S,EAASz2S,OACXw2S,EAAWA,EAAWh9S,QAAU,CAC9BwG,KAAMy2S,EAASz2S,KACfrG,MAAO88S,EAAS98S,OAElB68S,EAAW54S,IAAI64S,EAASz2S,MAAQy2S,EAAS98S,OAG7C6X,EAAMob,WAAa4pR,EAIrB,OAFAhlS,EAAM7X,MAAQ8E,EAAK9E,MACnB6X,EAAMomM,WAAan5M,EAAKm5M,WACjBpmM,GAET0B,EAAK3X,UAAUsM,KAAO,SAAU4d,GAC9B,IAAIhnB,EAAO/C,KAGX,OAFA+C,EAAKmlB,OAAOy5C,OAAO53C,EAAShnB,GAC5BgnB,EAAQd,OAAOlmB,GACRA,GAETyU,EAAK3X,UAAUiqB,OAAS,WAEtB,IADA,IAAI/mB,EAAO/C,KACF4W,EAAO7T,EAAK0lB,WAAY7R,GAAO,CACtC,IAAIpD,EAAOoD,EAAKpD,KAChBzQ,EAAK4+D,OAAO/qD,EAAM7T,GAAM,GACxB6T,EAAOpD,EAETzQ,EAAK6mB,UAEPpS,EAAK3X,UAAU+pB,OAAS,WACtB,IAAI7mB,EAAO/C,KAAMkoB,EAASnlB,EAAKmlB,OAAQ1U,EAAOzQ,EAAKyQ,KAAMuvJ,EAAOhgK,EAAKggK,KAoBrE,OAnBI76I,IACEA,EAAOO,aAAe1lB,GACxBmlB,EAAOO,WAAajV,EAChBA,IACFA,EAAKuvJ,KAAO,OAGdA,EAAKvvJ,KAAOA,EAEV0U,EAAO03K,YAAc78L,GACvBmlB,EAAO03K,UAAY78B,EACfA,IACFA,EAAKvvJ,KAAO,OAGdA,EAAKuvJ,KAAOA,EAEdhgK,EAAKmlB,OAASnlB,EAAKyQ,KAAOzQ,EAAKggK,KAAO,MAEjChgK,GAETyU,EAAK3X,UAAUopB,OAAS,SAAUrS,GAChC,IAAI7T,EAAO/C,KACP4W,EAAKsR,QACPtR,EAAKgT,SAEP,IAAIviB,EAAOtE,EAAK68L,UAShB,OARIv4L,GACFA,EAAKmM,KAAOoD,EACZA,EAAKmsJ,KAAO17J,EACZtE,EAAK68L,UAAYhpL,GAEjB7T,EAAK68L,UAAY78L,EAAK0lB,WAAa7R,EAErCA,EAAKsR,OAASnlB,EACP6T,GAETY,EAAK3X,UAAU8hE,OAAS,SAAU/qD,EAAMokS,EAASryR,GAC3C/R,EAAKsR,QACPtR,EAAKgT,SAEP,IAAI1B,EAAS8yR,EAAQ9yR,QAAUloB,KAqB/B,OApBI2oB,GACEqyR,IAAY9yR,EAAOO,WACrBP,EAAOO,WAAa7R,EAEpBokS,EAAQj4I,KAAKvvJ,KAAOoD,EAEtBA,EAAKmsJ,KAAOi4I,EAAQj4I,KACpBnsJ,EAAKpD,KAAOwnS,EACZA,EAAQj4I,KAAOnsJ,IAEXokS,IAAY9yR,EAAO03K,UACrB13K,EAAO03K,UAAYhpL,EAEnBokS,EAAQxnS,KAAKuvJ,KAAOnsJ,EAEtBA,EAAKpD,KAAOwnS,EAAQxnS,KACpBoD,EAAKmsJ,KAAOi4I,EACZA,EAAQxnS,KAAOoD,GAEjBA,EAAKsR,OAASA,EACPtR,GAETY,EAAK3X,UAAU2/E,OAAS,SAAUl7E,GAGhC,IAFA,IAAIvB,EAAO/C,KACPyyI,EAAa,GACR77H,EAAO7T,EAAK0lB,WAAY7R,EAAMA,EAAO8jS,GAAO9jS,EAAM7T,GACrD6T,EAAKtS,OAASA,GAChBmuI,EAAWntI,KAAKsR,GAGpB,OAAO67H,GAETj7H,EAAK3X,UAAU4pB,MAAQ,WACrB,IAAI1mB,EAAO/C,KACX,GAAI+C,EAAK0lB,WAAY,CAEnB,IADA,IAAI2zK,EAAQ,GACHxlL,EAAO7T,EAAK0lB,WAAY7R,EAAMA,EAAO8jS,GAAO9jS,EAAM7T,GACzDq5L,EAAM92L,KAAKsR,GAEb,IAAIlX,EAAI08L,EAAMt+L,OACd,MAAO4B,IAAK,CACNkX,EAAOwlL,EAAM18L,GACjBkX,EAAKsR,OAAStR,EAAK6R,WAAa7R,EAAKgpL,UAAYhpL,EAAKpD,KAAOoD,EAAKmsJ,KAAO,MAI7E,OADAhgK,EAAK0lB,WAAa1lB,EAAK68L,UAAY,KAC5B78L,GAETyU,EAAK3X,UAAUohM,QAAU,SAAU13K,EAAU6jQ,EAAYjoQ,QACpC,IAAfioQ,IACFA,EAAa,IAEf,IAAIrqR,EAAO/C,KACP4W,EAAO7T,EAAK0lB,WAChB,GAAIs0Q,GAAkBh6R,GACpB,OAAO,EAET,GAAI6T,EACF,EAAG,CACD,GAAkB,IAAdA,EAAKpS,KAAY,CACnB,GAAIoS,EAAK8d,KAAK,kBACZ,SAEF,GAAInL,EAAS3S,EAAKtS,MAChB,OAAO,EAET,GAAIy4R,GAAkBnmR,GACpB,OAAO,EAGX,GAAkB,IAAdA,EAAKpS,KACP,OAAO,EAET,GAAkB,IAAdoS,EAAKpS,OAAem2S,GAAkB/jS,GACxC,OAAO,EAET,GAAkB,IAAdA,EAAKpS,MAAcoS,EAAKsR,QAAUklQ,EAAWx2Q,EAAKsR,OAAO5jB,OAASk2S,GAAmB1iS,KAAKlB,EAAK3Y,OACjG,OAAO,EAET,GAAIknB,GAAaA,EAAUvO,GACzB,OAAO,QAEFA,EAAO8jS,GAAO9jS,EAAM7T,IAE/B,OAAO,GAETyU,EAAK3X,UAAUqnN,KAAO,SAAUnkD,GAC9B,OAAO23I,GAAO16S,KAAM,KAAM+iK,IAErBvrJ,EAlPI,GAqPTyjS,GAAwB,SAAU32S,GACpC,OAAiC,IAA1BA,EAAKnE,QAAQ,UAA4C,IAA1BmE,EAAKnE,QAAQ,UAEjD+6S,GAAe,SAAU5oO,EAAU22C,GACrC,OAAI32C,EAASy8I,uBAEF,iBAAiBj3M,KAAKmxG,IACS,IAAjC32C,EAAS+2M,qBAAiC,yBAAyBvxQ,KAAKmxG,GAExE,UAAUnxG,KAAKmxG,KAGtBkyL,GAAkB,SAAUhqS,EAAQ6E,EAAMgoN,GAC5C,IAAez1M,EAAO1K,EAASu9R,EAAap0F,EAAxCr+M,EAAQ,EACZq+M,EAAqB71M,EAAO8gM,wBAC5BmpG,EAAc,iGACdA,EAAY9xB,UAAY/gQ,EAAQy1M,EAChC,MAAOngN,EAAUu9R,EAAYhuN,KAAKp3E,GAAO,CAEvC,GADAuS,EAAQ6yR,EAAY9xB,UACD,MAAfzrQ,EAAQ,GACVlV,SACK,IAAKkV,EAAQ,GAAI,CACtB,GAAIA,EAAQ,KAAMmpM,EAChB,SAEFr+M,IAEF,GAAc,IAAVA,EACF,MAGJ,OAAO4f,GAEL8yR,GAAuB,SAAUrlS,EAAMgoN,GACzC,MAAO,2CAA2ClmN,KAAK9B,EAAK6G,OAAOmhN,KAEjEs9E,GAAsB,SAAUtlS,EAAMshQ,EAASt5C,QAC9B,IAAfA,IACFA,EAAa,GAEf,IAAIu9E,EAASvlS,EAAK0C,cAClB,IAA4C,IAAxC6iS,EAAOp7S,QAAQ,OAAQ69N,IAAsBq9E,GAAqBE,EAAQv9E,GAAa,CACzF,IAAIw9E,EAAaD,EAAOp7S,QAAQ,UAAW69N,GAC3C,OAAOu9E,EAAOp7S,QAAQ,IAAKq7S,GAE3B,GAAIlkC,EAAS,CACX,IAAI1oP,EAAW2sR,EAAOp7S,QAAQ,IAAK69N,GACnC,OAAqB,IAAdpvM,EAAkBA,EAAW2sR,EAAOz9S,OAE3C,IAAI29S,EAAmB,QACvBA,EAAiBnyB,UAAYtrD,EAC7B,IAAIl1N,EAAQ2yS,EAAiBruN,KAAKp3E,GAClC,OAAOlN,EAAQA,EAAMyf,MAAQzf,EAAM,GAAGhL,OAASy9S,EAAOz9S,QAIxD49S,GAAsB,SAAUzzF,EAAQ0zF,GAC1C,IAAI99R,EAAUoqM,EAAO76H,KAAKuuN,GAC1B,GAAI99R,EAAS,CACX,IAAIqwJ,EAASrwJ,EAAQ,GACjB5f,EAAQ4f,EAAQ,GACpB,MAAyB,kBAAXqwJ,GAAgD,mBAAzBA,EAAOx1J,cAAqCza,EAAQ,KAEzF,OAAO,MAGX,SAAS29S,GAAUtpO,EAAUnhE,QACZ,IAAXA,IACFA,EAASkxQ,MAEX,IAAIhlR,EAAO,aAEXi1E,EAAWA,GAAY,IACW,IAA9BA,EAASupO,mBACXvpO,EAASupO,kBAAmB,GAE9B,IAAIvkG,EAAUhlI,EAASglI,QAAUhlI,EAASglI,QAAUj6M,EAChDk6M,EAAQjlI,EAASilI,MAAQjlI,EAASilI,MAAQl6M,EAC1CyZ,EAAOw7D,EAASx7D,KAAOw7D,EAASx7D,KAAOzZ,EACvCyf,EAAQw1D,EAASx1D,MAAQw1D,EAASx1D,MAAQzf,EAC1CusH,EAAMt3C,EAASs3C,IAAMt3C,EAASs3C,IAAMvsH,EACpCy+S,EAAKxpO,EAASwpO,GAAKxpO,EAASwpO,GAAKz+S,EACjC0+S,EAAUzpO,EAASypO,QAAUzpO,EAASypO,QAAU1+S,EAChD+xF,EAAQ,SAAUp5E,EAAMm8E,QACX,IAAXA,IACFA,EAAS,QAEX,IAAIt0E,EAAoB5f,EAAO+9S,EAE3BC,EAAUv8S,EAAGw8S,EAAU53S,EACvB63S,EAAmBC,EAAwBp1F,EAAoBq1F,EAAcC,EAC7EtxM,EAAUuxM,EAAaC,EAAgB9nR,EAAM+nR,EAAcC,EAAoBC,EAC/Ep4B,EAAoBC,EAAmBC,EAAkBm4B,EACzDC,EAAuBC,EAAa1B,EAAa2B,EAAYx/F,EAAiBV,EAE9EmgG,EARSz0R,EAAQ,EACjB6Z,EAAQ,GAKiF24O,EAAU,EACnG9oD,EAASivD,GAASjvD,OAElBgrF,EAAmB99S,GAAMw7I,QAAQ,yDACjCuiK,EAAkB,4BAClBC,EAAyB,SAAXhrN,EAAoB,EAAI,EACtCirN,EAAgB,SAAU94S,GAC5B,IAAIwnC,EAAKpsC,EACTosC,EAAM1J,EAAMtkC,OACZ,MAAOguC,IACL,GAAI1J,EAAM0J,GAAKxnC,OAASA,EACtB,MAGJ,GAAIwnC,GAAO,EAAG,CACZ,IAAKpsC,EAAI0iC,EAAMtkC,OAAS,EAAG4B,GAAKosC,EAAKpsC,IACnC4E,EAAO89B,EAAM1iC,GACT4E,EAAK6mG,OACPye,EAAItlH,EAAKA,MAGb89B,EAAMtkC,OAASguC,IAGfuxQ,EAAiB,SAAUp/S,GACf,KAAVA,IAGoB,MAApBA,EAAMq9E,OAAO,KACfr9E,EAAQ,IAAMA,GAEXq0E,EAASsjI,4BAAmE,QAArC33M,EAAM4e,OAAO,EAAG,GAAGnE,gBAC7Dza,EAAQ,IAAMA,GAEhBq5M,EAAQr5M,KAENq/S,EAA0B,SAAUr/S,EAAO+/N,GAC7C,IAAIu/E,EAAWt/S,GAAS,GACpBq5Q,GAAWhkD,GAAWiqF,EAAU,MAChC3uR,EAAW0sR,GAAoBtlS,EAAMshQ,EAASt5C,GAGlD,OAFA//N,EAAQ+X,EAAK6G,OAAOmhN,EAAYpvM,EAAWovM,GAC3Cq/E,EAAe/lC,EAAUimC,EAAWt/S,EAAQA,GACrC2wB,EAAW,GAEhB4uR,EAAiB,SAAU10S,EAAOxE,EAAMrG,EAAOyuQ,EAAM+wC,GACvD,IAAIC,EAAUh+S,EACVi+S,EAAa,sBAGjB,GAFAr5S,EAAOA,EAAKoU,cACZza,EAAQqG,KAAQ+3S,EAAe/3S,EAAO2tN,EAAOh0N,GAASyuQ,GAAQ+wC,GAAQ,IAClEzyM,IAAamxM,IAAqD,IAAhClB,GAAsB32S,GAAiB,CAE3E,GADAo5S,EAAWhB,EAAmBp4S,IACzBo5S,GAAYf,EAAwB,CACvCj9S,EAAIi9S,EAAuB7+S,OAC3B,MAAO4B,IAEL,GADAg+S,EAAWf,EAAuBj9S,GAC9Bg+S,EAAS/5L,QAAQ7rG,KAAKxT,GACxB,OAGO,IAAP5E,IACFg+S,EAAW,MAGf,IAAKA,EACH,OAEF,GAAIA,EAAS/4B,eAAiB1mR,KAASy/S,EAAS/4B,aAC9C,OAGJ,GAAIs4B,EAAiB34S,KAAUguE,EAAS82M,kBAAmB,CACzD,IAAIngK,EAAMhrH,EAAMoa,QAAQslS,EAAY,IACpC,IACE10L,EAAM20L,mBAAmB30L,GACzB,MAAOhiB,GACPgiB,EAAM60F,SAAS70F,GAEjB,GAAIi0L,EAAgBplS,KAAKmxG,GACvB,OAEF,GAAIiyL,GAAa5oO,EAAU22C,GACzB,OAGAkzL,IAAsB73S,KAAQ24S,GAA2C,IAAvB34S,EAAKnE,QAAQ,SAGnE87S,EAAS/5S,IAAIoC,GAAQrG,EACrBg+S,EAAS32S,KAAK,CACZhB,KAAMA,EACNrG,MAAOA,MAGXm9S,EAAc,IAAItwN,OAAO,sTAA+V,KACxXiyN,EAAa,iFACb/1F,EAAqB71M,EAAO8gM,wBAC5B6qG,EAAcxqO,EAASurO,uBAAyB1sS,EAAOu1Q,yBACvD21B,EAAelrS,EAAOusM,eACtB1yG,EAAW14B,EAAS04B,SACpBoxM,EAAyB9pO,EAASwrO,iBAClCd,EAAiB1qO,EAASupO,iBAC1Bt+F,EAAkBpsM,EAAOqsM,qBACzBo/F,EAAc5mS,EAAO,IACrB,MAAO6H,EAAUu9R,EAAYhuN,KAAKwvN,GAAc,CAC9C,IAAIl+N,EAAY7gE,EAAQ,GAIxB,GAHI0K,EAAQ1K,EAAQ0K,OAClBzR,EAAKm7M,EAAOj8M,EAAK6G,OAAO0L,EAAO1K,EAAQ0K,MAAQA,KAE7CtqB,EAAQ4f,EAAQ,GAClB5f,EAAQA,EAAMya,cACU,MAApBza,EAAMq9E,OAAO,KACfr9E,EAAQA,EAAM4e,OAAO,IAEvBugS,EAAcn/S,QACT,GAAIA,EAAQ4f,EAAQ,GAAI,CAC7B,GAAIA,EAAQ0K,MAAQm2D,EAAU5gF,OAASkY,EAAKlY,OAAQ,CAClDgZ,EAAKm7M,EAAOj8M,EAAK6G,OAAOgB,EAAQ0K,SAChCA,EAAQ1K,EAAQ0K,MAAQm2D,EAAU5gF,OAClC,SAEFG,EAAQA,EAAMya,cACU,MAApBza,EAAMq9E,OAAO,KACfr9E,EAAQA,EAAM4e,OAAO,IAEvBy/R,EAAer+S,KAAS+oN,EACpBg2F,GAAkBF,EAAY7+S,IAAUmkC,EAAMtkC,OAAS,GAAKskC,EAAMA,EAAMtkC,OAAS,GAAGwG,OAASrG,GAC/Fm/S,EAAcn/S,GAEhB,IAAI8/S,EAAarC,GAAoBqB,EAAYl/R,EAAQ,IACzD,GAAmB,OAAfkgS,EAAqB,CACvB,GAAmB,QAAfA,EAAsB,CACxBx1R,EAAQ4yR,GAAgBhqS,EAAQ6E,EAAMolS,EAAY9xB,WAClD8xB,EAAY9xB,UAAY/gQ,EACxB,SAEFi0R,GAAiB,EAEnB,IAAKxxM,IAAauxM,EAAcprS,EAAOs0Q,eAAexnR,IAAS,CAkB7D,GAjBAu+S,GAAiB,EACbxxM,IACF0xM,EAAqBH,EAAYrrR,WACjCyrR,EAAyBJ,EAAY33B,oBAEnC63B,EAAe5+R,EAAQ,KACzBs+R,GAA+D,IAA3CM,EAAat8S,QAAQ,iBACrCg8S,GAAqBC,IACvBI,GAAiB,GAEnBP,EAAW,GACXA,EAAS/5S,IAAM,GACfu6S,EAAapkS,QAAQ0kS,EAAYS,KAEjCvB,EAAW,GACXA,EAAS/5S,IAAM,IAEb8oG,IAAamxM,EAAmB,CAQlC,GAPA53B,EAAqBg4B,EAAYh4B,mBACjCC,EAAoB+3B,EAAY/3B,kBAChCC,EAAmB83B,EAAY93B,iBAC/Bo4B,EAAwBN,EAAYj4B,iBAChCu4B,IAA0BZ,EAASn+S,SACrC0+S,GAAiB,GAEf/3B,EAAkB,CACpB/kR,EAAI+kR,EAAiB3mR,OACrB,MAAO4B,IACLg1B,EAAO+vP,EAAiB/kR,GACxB4E,EAAOowB,EAAKpwB,KACZu4M,EAAYnoL,EAAKz2B,MACC,WAAd4+M,IACFA,EAAY,OAASk+D,KAEvBkhC,EAAS/5S,IAAIoC,GAAQu4M,EACrBo/F,EAAS32S,KAAK,CACZhB,KAAMA,EACNrG,MAAO4+M,IAIb,GAAI2nE,EAAmB,CACrB9kR,EAAI8kR,EAAkB1mR,OACtB,MAAO4B,IACLg1B,EAAO8vP,EAAkB9kR,GACzB4E,EAAOowB,EAAKpwB,KACNA,KAAQ23S,EAAS/5S,MACrB26M,EAAYnoL,EAAKz2B,MACC,WAAd4+M,IACFA,EAAY,OAASk+D,KAEvBkhC,EAAS/5S,IAAIoC,GAAQu4M,EACrBo/F,EAAS32S,KAAK,CACZhB,KAAMA,EACNrG,MAAO4+M,KAKf,GAAI0nE,EAAoB,CACtB7kR,EAAI6kR,EAAmBzmR,OACvB,MAAO4B,IACL,GAAI6kR,EAAmB7kR,KAAMu8S,EAAS/5S,IACpC,OAGO,IAAPxC,IACF88S,GAAiB,GAGrB,GAAI9nR,EAAOunR,EAAS/5S,IAAI,kBAAmB,CACzC,GAAa,QAATwyB,EAAgB,CAClBnM,EAAQ4yR,GAAgBhqS,EAAQ6E,EAAMolS,EAAY9xB,WAClD8xB,EAAY9xB,UAAY/gQ,EACxB,SAEFi0R,GAAiB,GAGjBA,GACF1/R,EAAM7e,EAAOg+S,EAAUK,QAGzBE,GAAiB,EAEnB,GAAIR,EAAYz+F,EAAgBt/M,GAAQ,CACtC+9S,EAAU1yB,UAAY/gQ,EAAQ1K,EAAQ0K,MAAQm2D,EAAU5gF,QACpD+f,EAAUm+R,EAAU5uN,KAAKp3E,KACvBwmS,IACFN,EAAWlmS,EAAK6G,OAAO0L,EAAO1K,EAAQ0K,MAAQA,IAEhDA,EAAQ1K,EAAQ0K,MAAQ1K,EAAQ,GAAG/f,SAEnCo+S,EAAWlmS,EAAK6G,OAAO0L,GACvBA,EAAQvS,EAAKlY,QAEX0+S,IACEN,EAASp+S,OAAS,GACpBgZ,EAAKolS,GAAU,GAEjBtyL,EAAI3rH,IAENm9S,EAAY9xB,UAAY/gQ,EACxB,SAEG+zR,IACEG,GAAgBA,EAAat8S,QAAQ,OAASs8S,EAAa3+S,OAAS,EAK9D0+S,GACT5yL,EAAI3rH,GALJmkC,EAAM98B,KAAK,CACThB,KAAMrG,EACNktG,MAAOqxM,UAMR,GAAIv+S,EAAQ4f,EAAQ,GACzBw/R,EAAep/S,QACV,GAAIA,EAAQ4f,EAAQ,GAAI,CAC7B,IAAImgS,GAAsC,IAAhBb,GAAqB7qO,EAAS2rO,gBAAkB77Q,EAAMtkC,OAAS,GAAKqT,EAAOy1Q,aAAaxkP,EAAMA,EAAMtkC,OAAS,GAAGwG,KAAM,UAChJ,IAAI05S,GAEG,CACLz1R,EAAQ+0R,EAAwB,GAAIz/R,EAAQ0K,MAAQ,GACpD6yR,EAAY9xB,UAAY/gQ,EACxB,SAJAgvL,EAAMt5M,QAMH,GAAIA,EAAQ4f,EAAQ,GACzBk+R,EAAQ99S,OACH,KAAKA,EAAQ4f,EAAQ,KAAqB,OAAd6gE,EAAoB,CACrDn2D,EAAQ+0R,EAAwBr/S,EAAO4f,EAAQ0K,MAAQm2D,EAAU5gF,QACjEs9S,EAAY9xB,UAAY/gQ,EACxB,SACK,GAAItqB,EAAQ4f,EAAQ,GAAI,CAC7B,GAAoB,IAAhBs/R,EAEG,CACL50R,EAAQ+0R,EAAwB,IAAKz/R,EAAQ0K,MAAQ,GACrD6yR,EAAY9xB,UAAY/gQ,EACxB,SAJAuzR,EAAG79S,EAAO4f,EAAQ,KAOtB0K,EAAQ1K,EAAQ0K,MAAQm2D,EAAU5gF,OAKpC,IAHIyqB,EAAQvS,EAAKlY,QACfgZ,EAAKm7M,EAAOj8M,EAAK6G,OAAO0L,KAErB7oB,EAAI0iC,EAAMtkC,OAAS,EAAG4B,GAAK,EAAGA,IACjCzB,EAAQmkC,EAAM1iC,GACVzB,EAAMktG,OACRye,EAAI3rH,EAAMqG,OAIhB,MAAO,CAAE8qF,MAAOA,IAEjB,SAAUwsN,GACTA,EAAUsC,WAAa/C,IADzB,CAEES,KAAcA,GAAY,KAC5B,IAomBIuC,GApmBAC,GAAcxC,GAEdz0F,GAAW,SAAUk3F,EAAWroS,GAClC,IAAIsoS,EAAoB,IAAIxzN,OAAO,CAAC,QAAUuzN,EAAUp1S,KAAK,KAAO,aAAaA,KAAK,KAAM,MAC5F,OAAO+M,EAAKqC,QAAQimS,EAAmB,KAErCC,GAAe,SAAUhiH,EAAYvmL,GACvC,IAEIwoS,EAAaj2R,EAAOwyE,EAAal9E,EAASmpM,EAF1C98L,EAAUlU,EACVyoS,EAAiB,0CAEjBttS,EAASorL,EAAWprL,OACxB+Y,EAAUi9L,GAAS5qB,EAAWmiH,eAAgBx0R,GAC9C88L,EAAqB71M,EAAO8gM,wBAC5B,MAAOp0L,EAAU4gS,EAAerxN,KAAKljE,GACnC3B,EAAQk2R,EAAen1B,UACvBvuL,EAAcl9E,EAAQ,GAAG/f,OAEvB0gT,EADEx3F,EAAmBnpM,EAAQ,IACf0K,EAEA61R,GAAYF,WAAW/sS,EAAQ+Y,EAAS3B,GAExD2B,EAAUA,EAAQ6E,UAAU,EAAGxG,EAAQwyE,GAAe7wE,EAAQ6E,UAAUyvR,GACxEC,EAAen1B,UAAY/gQ,EAAQwyE,EAErC,OAAOkoM,GAAK/lR,KAAKgN,IAEfy0R,GAAeJ,GACfK,GAAW,CACbD,aAAcA,GACdJ,aAAcA,IAGZp+C,GAAgB,OAChB0+C,GAAoB,SAAUxsO,EAAQr8D,GACxC,IAAIytL,EAAYjyG,GAASyxG,mBAAmB5wH,GACxCysO,EAAc,IAAIh0N,OAAO,MAAQ24G,EAAY,4CAAiDA,EAAY,8BAC9G,OAAOztL,EAAKqC,QAAQymS,EAAa,KAE/BC,GAAqB,SAAU1sO,EAAQ10E,EAAMk4B,GAC/C,IAAI3L,EAOJ,GANAvsB,EAAKw0F,OAASx0F,EAAKw0F,OAASx0F,EAAKw0F,OAASguK,GAC1CxiQ,EAAKuK,KAAM,EACXvK,EAAKqhT,UAAW,EACXrhT,EAAKshT,WACR5sO,EAAOqf,KAAK,mBAAoB/zF,GAEd,QAAhBA,EAAKw0F,OACPjoE,EAAU/qB,GAAM+d,KAAK0hS,GAASD,aAAatsO,EAAOkqH,WAAY1mK,EAAKvf,iBAC9D,GAAoB,SAAhB3Y,EAAKw0F,OACdjoE,EAAU+4Q,GAAK/lR,KAAK2Y,EAAK6iH,WAAa7iH,EAAKnM,iBACtC,IAAoB,SAAhB/rB,EAAKw0F,OACd,OAAO9f,EAAOkqH,WAAWie,UAAU3kL,EAAMl4B,GAEzCusB,EAAU20R,GAAkBxsO,EAAQA,EAAOkqH,WAAWie,UAAU3kL,EAAMl4B,IAUxE,MARoB,SAAhBA,EAAKw0F,QAAsBurL,GAAoBrmQ,GAAQZ,QAAQof,IAGjEl4B,EAAKusB,QAAUA,EAFfvsB,EAAKusB,QAAU/qB,GAAM+d,KAAKgN,GAIvBvsB,EAAKshT,WACR5sO,EAAOqf,KAAK,aAAc/zF,GAErBA,EAAKusB,SAEV6mD,GAAa,SAAUsB,EAAQ10E,GAIjC,YAHa,IAATA,IACFA,EAAO,IAEFyF,EAAOD,KAAKkvE,EAAOv8C,WAAWv0B,KAAKvD,EAAyB,SAAhBL,EAAKw0F,OAAoB,IAAIyoN,GAAO,OAAQ,IAAM,KAAK,SAAU/kR,GAClH,OAAOkpR,GAAmB1sO,EAAQ10E,EAAMk4B,OAIxCqpR,GAAY//S,GAAMw7I,QAClBwkK,GAAS,SAAU7sO,GACrB,IACI8sO,EAAQC,EAAcC,EAAa70N,EAAQ80N,EAD3CvpS,EAAO,GAQX,OANAs8D,EAAWA,GAAY,GACvB8sO,EAAS9sO,EAAS8sO,OAClBC,EAAeH,GAAU5sO,EAASktO,eAAiB,IACnDF,EAAcJ,GAAU5sO,EAASmtO,cAAgB,IACjDh1N,EAASy2L,GAASP,cAAcruM,EAASotO,iBAAmB,MAAOptO,EAASouM,UAC5E6+B,EAAyC,SAA5BjtO,EAASqtO,eACf,CACL7iS,MAAO,SAAUxY,EAAM8mB,EAAO3B,GAC5B,IAAI/pB,EAAG8zG,EAAG9+E,EAAMz2B,EAQhB,GAPImhT,GAAUC,EAAa/6S,IAAS0R,EAAKlY,OAAS,IAChDG,EAAQ+X,EAAKA,EAAKlY,OAAS,GACvBG,EAAMH,OAAS,GAAe,OAAVG,GACtB+X,EAAK1Q,KAAK,OAGd0Q,EAAK1Q,KAAK,IAAKhB,GACX8mB,EACF,IAAK1rB,EAAI,EAAG8zG,EAAIpoF,EAAMttB,OAAQ4B,EAAI8zG,EAAG9zG,IACnCg1B,EAAOtJ,EAAM1rB,GACbsW,EAAK1Q,KAAK,IAAKovB,EAAKpwB,KAAM,KAAMmmF,EAAO/1D,EAAKz2B,OAAO,GAAO,KAI5D+X,EAAKA,EAAKlY,SADP2rB,GAAS81R,EACQ,IAEA,MAElB91R,GAAS21R,GAAUE,EAAYh7S,IAAS0R,EAAKlY,OAAS,IACxDG,EAAQ+X,EAAKA,EAAKlY,OAAS,GACvBG,EAAMH,OAAS,GAAe,OAAVG,GACtB+X,EAAK1Q,KAAK,QAIhBskH,IAAK,SAAUtlH,GACb,IAAIrG,EACJ+X,EAAK1Q,KAAK,KAAMhB,EAAM,KAClB86S,GAAUE,EAAYh7S,IAAS0R,EAAKlY,OAAS,IAC/CG,EAAQ+X,EAAKA,EAAKlY,OAAS,GACvBG,EAAMH,OAAS,GAAe,OAAVG,GACtB+X,EAAK1Q,KAAK,QAIhBwR,KAAM,SAAUA,EAAM8f,GAChB9f,EAAKhZ,OAAS,IAChBkY,EAAKA,EAAKlY,QAAU84B,EAAM9f,EAAO2zE,EAAO3zE,KAG5CygM,MAAO,SAAUzgM,GACfd,EAAK1Q,KAAK,YAAawR,EAAM,QAE/BwgM,QAAS,SAAUxgM,GACjBd,EAAK1Q,KAAK,UAAQwR,EAAM,WAE1BglS,GAAI,SAAUx3S,EAAMwS,GACdA,EACFd,EAAK1Q,KAAK,KAAMhB,EAAM,IAAKmmF,EAAO3zE,GAAO,MAEzCd,EAAK1Q,KAAK,KAAMhB,EAAM,MAEpB86S,GACFppS,EAAK1Q,KAAK,OAGdy2S,QAAS,SAAUjlS,GACjBd,EAAK1Q,KAAK,YAAawR,EAAM,IAAKsoS,EAAS,KAAO,KAEpD1gJ,MAAO,WACL1oJ,EAAKlY,OAAS,GAEhBizE,WAAY,WACV,OAAO/6D,EAAK/M,KAAK,IAAIoP,QAAQ,MAAO,OAKtCunS,GAAa,SAAUttO,EAAUnhE,QACpB,IAAXA,IACFA,EAASkxQ,MAEX,IAAIjrE,EAAS+nG,GAAO7sO,GACpBA,EAAWA,GAAY,GACvBA,EAAS04B,WAAW,aAAc14B,IAAWA,EAAS04B,SACtD,IAAIwvG,EAAY,SAAU5jM,GACxB,IAAIwK,EAAU4pF,EACdA,EAAW14B,EAAS04B,SACpB5pF,EAAW,CACTmmF,EAAG,SAAU3wF,GACXwgM,EAAOtgM,KAAKF,EAAK3Y,MAAO2Y,EAAKggB,MAE/BipR,EAAG,SAAUjpS,GACXwgM,EAAOE,QAAQ1gM,EAAK3Y,QAEtB6hT,EAAG,SAAUlpS,GACXwgM,EAAO0kG,GAAGllS,EAAKtS,KAAMsS,EAAK3Y,QAE5B8hT,GAAI,SAAUnpS,GACZwgM,EAAO2kG,QAAQnlS,EAAK3Y,QAEtBwqG,EAAG,SAAU7xF,GACXwgM,EAAOG,MAAM3gM,EAAK3Y,QAEpB+hT,GAAI,SAAUppS,GACZ,GAAIA,EAAOA,EAAK6R,WACd,GACEy+L,EAAKtwM,SACEA,EAAOA,EAAKpD,QAI3B4jM,EAAO14C,QACP,IAAIwoD,EAAO,SAAUtwM,GACnB,IACItS,EAAM28L,EAAS71K,EAAO0wL,EAAUe,EAAWojG,EAAavgT,EAAG8zG,EAAG+oM,EAD9Dl7R,EAAUD,EAASxK,EAAKpS,MAE5B,GAAK6c,EA4CHA,EAAQzK,OA5CI,CAIZ,GAHAtS,EAAOsS,EAAKtS,KACZ28L,EAAUrqL,EAAKslM,WACf9wL,EAAQxU,EAAKsa,WACT85E,GAAY5/E,GAASA,EAAMttB,OAAS,IACtCmiT,EAAc,GACdA,EAAY/9S,IAAM,GAClBq6S,EAAcprS,EAAOs0Q,eAAe7uQ,EAAKtS,MACrCi4S,GAAa,CACf,IAAK78S,EAAI,EAAG8zG,EAAI+oM,EAAYrzF,gBAAgBprN,OAAQ4B,EAAI8zG,EAAG9zG,IACzDo8M,EAAWygG,EAAYrzF,gBAAgBxpN,GACnCo8M,KAAY1wL,EAAMlpB,MACpB26M,EAAYzxL,EAAMlpB,IAAI45M,GACtBmkG,EAAY/9S,IAAI45M,GAAYe,EAC5BojG,EAAY36S,KAAK,CACfhB,KAAMw3M,EACN79M,MAAO4+M,KAIb,IAAKn9M,EAAI,EAAG8zG,EAAIpoF,EAAMttB,OAAQ4B,EAAI8zG,EAAG9zG,IACnCo8M,EAAW1wL,EAAM1rB,GAAG4E,KACdw3M,KAAYmkG,EAAY/9S,MAC5B26M,EAAYzxL,EAAMlpB,IAAI45M,GACtBmkG,EAAY/9S,IAAI45M,GAAYe,EAC5BojG,EAAY36S,KAAK,CACfhB,KAAMw3M,EACN79M,MAAO4+M,KAIbzxL,EAAQ60R,EAIZ,GADA7oG,EAAOt6L,MAAMlG,EAAKtS,KAAM8mB,EAAO61K,IAC1BA,EAAS,CACZ,GAAIrqL,EAAOA,EAAK6R,WACd,GACEy+L,EAAKtwM,SACEA,EAAOA,EAAKpD,MAEvB4jM,EAAOxtF,IAAItlH,MAWjB,OALkB,IAAdsS,EAAKpS,MAAe8tE,EAASm4F,MAG/BrpJ,EAAS,IAAIxK,GAFbswM,EAAKtwM,GAIAwgM,EAAOrmI,cAEhB,MAAO,CAAEypI,UAAWA,IAGlBmK,GAAW,SAAU/tM,EAAMvY,GAC7BA,EAAGuY,GACCA,EAAK6R,YACPk8L,GAAS/tM,EAAK6R,WAAYpqB,GAExBuY,EAAKpD,MACPmxM,GAAS/tM,EAAKpD,KAAMnV,IAGpB6hT,GAAoB,SAAUC,EAAaC,EAAkBxpS,GAC/D,IAAIypS,EAAc,GACdC,EAAc,GACdziS,EAAU,GA6Bd,IAAK,IAAIqwJ,KA5BLt3J,EAAK6R,YACPk8L,GAAS/tM,EAAK6R,YAAY,SAAU7R,GAClCzU,EAAKg+S,GAAa,SAAU59S,GACtBA,EAAO+B,OAASsS,EAAKtS,OACnB+7S,EAAY99S,EAAO+B,MACrB+7S,EAAY99S,EAAO+B,MAAM83L,MAAM92L,KAAKsR,GAEpCypS,EAAY99S,EAAO+B,MAAQ,CACzB/B,OAAQA,EACR65L,MAAO,CAACxlL,QAKhBzU,EAAKi+S,GAAkB,SAAU79S,GACO,kBAA3BqU,EAAK8d,KAAKnyB,EAAO+B,QACtBg8S,EAAY/9S,EAAO+B,MACrBg8S,EAAY/9S,EAAO+B,MAAM83L,MAAM92L,KAAKsR,GAEpC0pS,EAAY/9S,EAAO+B,MAAQ,CACzB/B,OAAQA,EACR65L,MAAO,CAACxlL,WAODypS,EACbA,EAAYvgT,eAAeouK,IAC7BrwJ,EAAQvY,KAAK+6S,EAAYnyI,IAG7B,IAAK,IAAIqyI,KAAUD,EACbA,EAAYxgT,eAAeygT,IAC7B1iS,EAAQvY,KAAKg7S,EAAYC,IAG7B,OAAO1iS,GAEL2iS,GAAW,SAAUL,EAAaC,EAAkBxpS,GACtD,IAAIiH,EAAUqiS,GAAkBC,EAAaC,EAAkBxpS,GAC/DzU,EAAK0b,GAAS,SAAU/U,GACtB3G,EAAK2G,EAAMvG,OAAOymG,WAAW,SAAUtV,GACrCA,EAAS5qF,EAAMszL,MAAOtzL,EAAMvG,OAAO+B,KAAM,WAK3C0lC,GAAW,SAAU9qB,GACvB,IAAIhJ,EAAM4R,GAAM5I,GAASlI,MACzB,OAAOkI,EAAQlI,QAAUd,EAAI+zB,eAE3B/C,GAAS,SAAUgD,GACrB,IAAIh0B,OAAenU,IAATmoC,EAAqBA,EAAKlzB,MAAQ5Z,EAAW+Y,SACvD,OAAO/S,EAAOD,KAAK+S,EAAI+zB,eAAe/nC,IAAImV,GAAQZ,UAEhD4F,GAAS,SAAU6C,GACrB,OAAOgoB,GAAOpf,GAAM5I,IAAU3c,QAAO,SAAUrC,GAC7C,OAAOgf,EAAQlI,MAAMtR,SAASxF,EAAE8W,WAIhCuV,GAAa,SAAUhkB,GACzB,IAAK5D,EAAQ4D,GACX,MAAM,IAAI1J,MAAM,0BAElB,GAAqB,IAAjB0J,EAAMzK,OACR,MAAM,IAAIe,MAAM,mCAElB,IAAI2J,EAAe,GACfC,EAAM,GAyDV,OAxDAtG,EAAKoG,GAAO,SAAUG,EAAOC,GAC3B,IAAIC,EAASpB,EAAKkB,GAClB,GAAsB,IAAlBE,EAAO9K,OACT,MAAM,IAAIe,MAAM,kCAElB,IAAIsJ,EAAMS,EAAO,GACb3K,EAAQyK,EAAMP,GAClB,QAAiBpG,IAAb0G,EAAIN,GACN,MAAM,IAAItJ,MAAM,0BAA4BsJ,GACvC,GAAY,SAARA,EACT,MAAM,IAAItJ,MAAM,yCACX,IAAK8F,EAAQ1G,GAClB,MAAM,IAAIY,MAAM,mCAElB2J,EAAalD,KAAK6C,GAClBM,EAAIN,GAAO,WACT,IAAIU,EAAYhL,UAAUC,OAC1B,GAAI+K,IAAc5K,EAAMH,OACtB,MAAM,IAAIe,MAAM,qCAAuCsJ,EAAM,cAAgBlK,EAAMH,OAAS,KAAOG,EAAQ,UAAY4K,GAGzH,IADA,IAAIlL,EAAO,IAAI8C,MAAMoI,GACZnJ,EAAI,EAAGA,EAAI/B,EAAKG,OAAQ4B,IAC/B/B,EAAK+B,GAAK7B,UAAU6B,GAEtB,IAAIoJ,EAAQ,SAAUC,GACpB,IAAIC,EAAaxB,EAAKuB,GACtB,GAAIP,EAAa1K,SAAWkL,EAAWlL,OACrC,MAAM,IAAIe,MAAM,iDAAmD2J,EAAaS,KAAK,KAAO,aAAeD,EAAWC,KAAK,MAE7H,IAAIC,EAAU5G,EAAOkG,GAAc,SAAUW,GAC3C,OAAOzD,EAASsD,EAAYG,MAE9B,IAAKD,EACH,MAAM,IAAIrK,MAAM,gEAAkEmK,EAAWC,KAAK,MAAQ,eAAiBT,EAAaS,KAAK,OAE/I,OAAOF,EAASZ,GAAKpK,MAAM,KAAMJ,IAEnC,MAAO,CACL4D,KAAM,WACJ,GAAI1D,UAAUC,SAAWyK,EAAMzK,OAC7B,MAAM,IAAIe,MAAM,+CAAiD0J,EAAMzK,OAAS,SAAWD,UAAUC,QAEvG,IAAIsL,EAASvL,UAAU8K,GACvB,OAAOS,EAAOrL,MAAM,KAAMJ,IAE5BmL,MAAOA,EACPO,IAAK,SAAUC,GACblM,EAAWmM,QAAQF,IAAIC,EAAO,CAC5Bd,aAAcA,EACdnE,YAAa8D,EACbqB,OAAQ7L,UAMX8K,GAELgB,GAAM,CAAEnB,SAAUikB,IAElB2nC,GAAWntC,GAAU,QAAS,UAAW,SAAU,WACnD4tB,GAAW,CAAE1N,OAAQitB,IAErBzrD,GAAMgB,GAAInB,SAAS,CACrB,CAAEqgB,OAAQ,CAAC,YACX,CACEsmB,GAAI,CACF,UACA,WAGJ,CAAElmB,MAAO,CAAC,cAERmb,GAAO,SAAU1M,EAASsd,EAAUC,EAAMC,GAC5C,OAAOxd,EAAQj2B,KAAKuzC,EAAUC,EAAMC,IAElCC,GAAW,SAAUC,GACvB,OAAOA,EAAK3zC,KAAKrD,EAAUA,EAAUA,IAEnC0zP,GAAWnpP,GAAIkgB,OACfsmB,GAAKxmC,GAAIwmC,GACTiK,GAAUzwC,GAAIsgB,MACdssB,GAAO,CACT1sB,OAAQipO,GACR3iN,GAAIA,GACJlmB,MAAOmwB,GACPhV,KAAMA,GACN+Q,SAAUA,IAGRvmC,GAAQjF,GAAInB,SAAS,CACvB,CAAEitC,SAAU,CAAC,QACb,CACE1K,SAAU,CACR,YACA,eAGJ,CACE2K,MAAO,CACL,QACA,UACA,SACA,cAIFC,GAAiB,SAAUC,GAC7B,OAAOhnC,GAAM8mC,MAAME,EAAS54B,QAAS44B,EAASC,UAAWD,EAASE,SAAUF,EAASG,YAEnFC,GAAa,SAAUC,GACzB,OAAOA,EAAUjtC,MAAM,CACrBysC,SAAU,SAAUS,GAClB,OAAO3+B,GAAQZ,QAAQu/B,EAAIC,iBAE7BpL,SAAU,SAAUqL,EAAWC,GAC7B,OAAOd,GAAKJ,SAASiB,IAEvBV,MAAO,SAAU14B,EAAO64B,EAASC,EAAQC,GACvC,OAAO/4B,MAITy4B,GAAW7mC,GAAM6mC,SACjB1K,GAAWn8B,GAAMm8B,SACjB2K,GAAQ9mC,GAAM8mC,MACda,GAAS,SAAUN,GACrB,IAAIj5B,EAAQg5B,GAAWC,GACvB,OAAO9tB,GAAYnL,IAEjBnX,GAAQgvC,GAAS1N,OACjBsP,GAAY,CACdhB,SAAUA,GACV1K,SAAUA,GACV2K,MAAOA,GACPC,eAAgBA,GAChBY,OAAQA,GACR1wC,MAAOA,IAGL86S,GAAYziS,KAAW1C,QACvBoxB,GAAQ,SAAUzN,EAAQ/f,GAC5B,IAAIib,EAAMpP,GAAO7L,GAAWid,GAAMjd,GAASphB,OAASuqB,GAASnJ,GAASphB,OAAS,EAC/E,OAAImhC,EAAS9E,EACJA,EACE8E,EAAS,EACX,EAEFA,GAELyhR,GAAe,SAAU1qQ,GAC3B,OAAOO,GAAU5wC,MAAMqwC,EAAIl5B,QAAS4vB,GAAMsJ,EAAIL,UAAWK,EAAIl5B,SAAUk5B,EAAIJ,SAAUlJ,GAAMsJ,EAAIH,UAAWG,EAAIJ,YAE5G+qQ,GAAe,SAAU7lQ,EAAM6/B,GACjC,OAAQ0mH,GAASs1E,iBAAiBh8L,EAAI3jE,SAAWoJ,GAAW06B,EAAM6/B,IAAQ15E,GAAG65C,EAAM6/B,KAEjFimO,GAAc,SAAU9lQ,GAC1B,OAAO,SAAU9E,GACf,OAAO2qQ,GAAa7lQ,EAAM9E,EAAIl5B,UAAY6jS,GAAa7lQ,EAAM9E,EAAIJ,YAGjEirQ,GAAc,SAAUxuO,GAC1B,OAAyB,IAAlBA,EAAO0C,QAAmB0rO,GAAU9mS,QAEzCmnS,GAA8B,SAAUtgT,GAC1C,OAAO+1C,GAAU5wC,MAAM0R,GAAQZ,QAAQjW,EAAEy1C,gBAAiBz1C,EAAEg3C,YAAangC,GAAQZ,QAAQjW,EAAEi3C,cAAej3C,EAAEk3C,YAE1G0B,GAAY,SAAU7d,GACxB,IAAIwa,EAAYxa,EAAIwe,eAChB/D,EAAOD,GAAsC,IAAzBA,EAAUsD,WAAmCj2C,EAAOD,KAAK4yC,EAAUwD,WAAW,IAAjDn2C,EAAOrC,OAC5D,OAAOi1C,EAAI9zC,IAAI4+S,KAEbC,GAAgB,SAAUjmQ,GAC5B,IAAIvf,EAAMtT,GAAY6yB,GACtB,OAAO1B,GAAU7d,EAAIvkB,OAAOzU,OAAOq+S,GAAY9lQ,KAE7CkwD,GAAW,SAAUlwD,EAAM6tJ,GAC7B,OAAOvlM,EAAOD,KAAKwlM,GAAUpmM,OAAOq+S,GAAY9lQ,IAAO54C,IAAIw+S,KAEzDM,GAAsB,SAAUr4G,GAClC,IAAI3yJ,EAAM54C,EAAW+Y,SAAS6gC,cAC9B,IAGE,OAFAhB,EAAIQ,SAASmyJ,EAAS7rL,QAAQ9F,MAAO2xL,EAAShzJ,WAC9CK,EAAIa,OAAO8xJ,EAAS/yJ,SAAS5+B,MAAO2xL,EAAS9yJ,WACtCzyC,EAAOP,KAAKmzC,GACnB,MAAOzyC,GACP,OAAOH,EAAOrC,SAGd4gD,GAAQ,SAAU0wB,GACpB,IAAI4uO,EAAcJ,GAAYxuO,GAAU0uO,GAAc1pS,GAAQZ,QAAQ47D,EAAOv8C,YAAc1yB,EAAOrC,OAClGsxE,EAAOs2H,SAAWs4G,EAAYx/S,SAAWw/S,EAAc5uO,EAAOs2H,UAE5Du4G,GAAc,SAAU7uO,EAAQr8B,GAClC,IAAI8E,EAAOzjC,GAAQZ,QAAQ47D,EAAOv8C,WAC9BnwB,EAAQk7S,GAAYxuO,GAAUjvE,EAAOD,KAAK6yC,GAAO5yC,EAAOrC,OACxDkgT,EAAct7S,EAAMzD,IAAI4+S,IAA6Bv+S,OAAOq+S,GAAY9lQ,IAC5Eu3B,EAAOs2H,SAAWs4G,EAAYx/S,SAAWw/S,EAAc5uO,EAAOs2H,UAE5D/qH,GAAS,SAAUvL,GACrB,IAAIs2H,EAAWt2H,EAAOs2H,SAAWt2H,EAAOs2H,SAAWvlM,EAAOrC,OAC1D,OAAO4nM,EAASvmM,MAAK,SAAUjE,GAC7B,OAAO6sG,GAAS3zF,GAAQZ,QAAQ47D,EAAOv8C,WAAY33B,MAClDiE,KAAK4+S,KAENl/P,GAAU,SAAUuwB,GACtBuL,GAAOvL,GAAQlwE,MAAK,SAAU6zC,GAC5Bq8B,EAAOt8B,UAAUm8H,OAAOl8H,OAGxBmrQ,GAAoB,CACtBx/P,MAAOA,GACPu/P,YAAaA,GACb9nQ,UAAWA,GACX0I,QAASA,GACT87B,OAAQA,GACRgrH,YAAam4G,GACb/1M,SAAUA,IAGRo2M,GAAoB,SAAUzmO,GAChC,IAAIo2D,EAAYp2D,EAAIo2D,UAAUpuI,WAC9B,OAAsC,IAA/BouI,EAAU5wI,QAAQ,UAAiD,IAA/B4wI,EAAU5wI,QAAQ,SAE3DkhT,GAAe,CAAED,kBAAmBA,IAEpCE,GAAqB,SAAUphT,GACjC,MAAkB,eAAXA,EAAEsE,MAAyBtE,EAAEqhT,iBAElCC,GAAsB,SAAUnvO,EAAQovO,GAC1C,IAAIC,EAAc,WAChBD,EAAe/nO,YAEjBgkN,GAAWvqN,IAAI/wE,KAAKhF,EAAW+Y,SAAU,UAAWurS,GACpDrvO,EAAOpjC,GAAG,UAAU,WAClByuP,GAAWvqN,IAAIj2C,OAAO9/B,EAAW+Y,SAAU,UAAWurS,OAGtDC,GAAmB,SAAUtvO,GAC/BA,EAAOpjC,GAAG,YAAY,WACpBkyQ,GAAkBx/P,MAAM0wB,OAGxBuvO,GAAkB,SAAUvvO,EAAQovO,GACtCpvO,EAAOpjC,GAAG,oBAAoB,SAAU/uC,GACtCuhT,EAAe/nO,eAGfmoO,GAAuB,SAAUxvO,EAAQovO,GAC3C,IAAInmS,EAAU0C,KAAW1C,QACrBA,EAAQ3B,OACVgoS,GAAiBtvO,GAEjBuvO,GAAgBvvO,EAAQovO,GAE1BpvO,EAAOpjC,GAAG,oBAAoB,SAAU/uC,GACjCohT,GAAmBphT,IACtBihT,GAAkBx/P,MAAM0wB,OAI1B+M,GAAW,SAAU/M,GACvB,IAAIovO,EAAiB5nP,IAAM,WACzBsnP,GAAkBx/P,MAAM0wB,KACvB,GACHA,EAAOpjC,GAAG,QAAQ,WACZojC,EAAO0C,QACTysO,GAAoBnvO,EAAQovO,GAE9BI,GAAqBxvO,EAAQovO,MAE/BpvO,EAAOpjC,GAAG,UAAU,WAClBwyQ,EAAejoO,aAGfsoO,GAAmB,CAAE1iO,SAAUA,IAG/B6sH,GAAQyxF,GAAWvqN,IACnB4uO,GAAsB,SAAUpnO,GAClC,OAAO0mO,GAAaD,kBAAkBzmO,IAEpCqnO,GAA6B,SAAUrnO,GACzC,IAAI7lD,EAAY6lD,EAAI7lD,UACpB,YAAkB/yB,IAAd+yB,IACKA,EAAUpvB,SAAS,kBAAoBovB,EAAUpvB,SAAS,0BAA4BovB,EAAUpvB,SAAS,sBAKhHu8S,GAAc,SAAU5vO,EAAQsI,GAClC,IAAIunO,EAAiB7vO,EAASA,EAAOC,SAAS6vO,mBAAqB,GAC/Dj6R,EAAS+jL,GAAMtwH,UAAUhB,GAAK,SAAUA,GAC1C,OAAOonO,GAAoBpnO,MAASunO,GAAiB7vO,EAAOr7D,IAAIxV,GAAGm5E,EAAKunO,MAE1E,OAAkB,OAAXh6R,GAELk6R,GAAmB,WACrB,IACE,OAAOhlT,EAAW+Y,SAAS8zB,cAC3B,MAAOg9D,GACP,OAAO7pG,EAAW+Y,SAAS0f,OAG3B+sM,GAAiB,SAAUy/E,EAAeniT,GAC5C,IAAImyE,EAASnyE,EAAEmyE,OACfyvO,GAAiB1iO,SAAS/M,GAC1BA,EAAOpjC,GAAG,WAAW,WACnB,IAAIlsC,EAAO/C,KACPsiT,EAAgBD,EAAcC,cAC9BA,IAAkBv/S,IAChBu/S,GACFA,EAAc5wN,KAAK,OAAQ,CAAE4wN,cAAev/S,IAE9Cs/S,EAAch3N,UAAUtoF,GACxBs/S,EAAcC,cAAgBv/S,EAC9BA,EAAK2uF,KAAK,QAAS,CAAE6wN,cAAeD,IACpCv/S,EAAKggB,OAAM,OAGfsvD,EAAOpjC,GAAG,YAAY,WACpB,IAAIlsC,EAAO/C,KACX84Q,GAAMv/G,iBAAiBx2J,GAAM,WAC3B,IAAIu/S,EAAgBD,EAAcC,cAC7BL,GAAYl/S,EAAMq/S,OAAuBE,IAAkBv/S,IAC9DA,EAAK2uF,KAAK,OAAQ,CAAE4wN,cAAe,OACnCD,EAAcC,cAAgB,YAI/BnE,KACHA,GAAyB,SAAUj+S,GACjC,IACIkJ,EADAo5S,EAAeH,EAAcG,aAEjCp5S,EAASlJ,EAAEkJ,OACPo5S,GAAgBp5S,EAAO2e,gBAAkB3qB,EAAW+Y,WAClD/M,IAAWhM,EAAW+Y,SAAS0f,MAASosR,GAAYO,EAAcp5S,IAAWi5S,EAAcC,gBAAkBE,IAC/GA,EAAa9wN,KAAK,OAAQ,CAAE4wN,cAAe,OAC3CD,EAAcC,cAAgB,QAIpCr2G,GAAM7pM,KAAKhF,EAAW+Y,SAAU,UAAWgoS,MAG3CsE,GAA2B,SAAUJ,EAAeniT,GAClDmiT,EAAcC,gBAAkBpiT,EAAEmyE,SACpCgwO,EAAcC,cAAgB,MAE3BD,EAAcG,eACjBv2G,GAAM/uK,OAAO9/B,EAAW+Y,SAAU,UAAWgoS,IAC7CA,GAAyB,OAGzBv0K,GAAU,SAAUy4K,GACtBA,EAAcpzQ,GAAG,YAAa7wC,EAAMwkO,GAAgBy/E,IACpDA,EAAcpzQ,GAAG,eAAgB7wC,EAAMqkT,GAA0BJ,KAE/DK,GAAkB,CACpBr2O,MAAOu9D,GACPw3K,kBAAmBW,GACnBC,2BAA4BA,GAC5BC,YAAaA,IAGXU,GAAyB,SAAUtwO,EAAQz7D,GAC7C,OAAOy7D,EAAOr7D,IAAI2kE,UAAU/kE,GAAM,SAAUA,GAC1C,MAA+C,SAAxCy7D,EAAOr7D,IAAI+iE,mBAAmBnjE,OAGrCgsS,GAAmB,SAAU5sQ,GAC/B,OAAOA,EAAI8B,UAAY10C,EAAOD,KAAKo3E,GAAQvkC,EAAIC,eAAgBD,EAAIwB,cAAct1C,IAAImV,GAAQZ,SAAWrT,EAAOrC,QAE7G8hT,GAAoB,SAAU/nQ,EAAM9E,GACtC,OAAO4sQ,GAAiB5sQ,GAAK5zC,MAAK,SAAUwU,GAC1C,OAAI4mQ,GAAe5mQ,GACVxT,EAAOP,KAAK+T,IACiB,IAA3BwJ,GAAW06B,EAAMlkC,GACnBxT,EAAOP,KAAKi4C,GAEZ13C,EAAOrC,WAIhB+hT,GAAqB,SAAUzwO,EAAQr8B,GACzC6sQ,GAAkBxrS,GAAQZ,QAAQ47D,EAAOv8C,WAAYkgB,GAAK5zC,MAAK,SAAUu4E,GACvE,OAAOw5N,GAAYC,gBAAgBz5N,EAAI3jE,UACtCzV,MAAK,WACN8wE,EAAOt8B,UAAU6kC,eAEhB,SAAUmoO,GACX,OAAO1wO,EAAOt8B,UAAUm8H,OAAO6wI,EAAS5a,eAGxC6a,GAAY,SAAUntR,GACxB,GAAIA,EAAKw1D,UACP,IACEx1D,EAAKw1D,YACL,MAAO4b,GACPpxE,EAAK9S,aAGP8S,EAAK9S,SAGLkgS,GAAkB,SAAUtoO,GAC9B,OAAO3wC,GAAS2wC,IAAQt+D,GAAOs+D,GAAKl5E,UAElCyhT,GAAiB,SAAU7wO,GAC7B,OAAOA,EAAO8wO,eAAiBn5Q,GAAS3yB,GAAQZ,QAAQ47D,EAAO8wO,iBAE7DC,GAAiB,SAAU/wO,GAC7B,IAAIgxO,EAAUhxO,EAAOv8C,UACrB,OAAOutR,GAAWJ,GAAgB5rS,GAAQZ,QAAQ4sS,KAEhDC,GAAa,SAAUjxO,GACzB,OAAOnrC,KAAS3kC,QAAO,SAAU8c,GAC/B,OAAQqjS,GAAgBV,2BAA2B3iS,EAAKrI,QAAU0rS,GAAgBT,YAAY5vO,EAAQhzD,EAAKrI,UAC1GvV,UAED8hT,GAAa,SAAUlxO,GACzB,OAAOA,EAAO0C,OAASquO,GAAe/wO,GAAU6wO,GAAe7wO,IAE7DmxO,GAAqB,SAAUnxO,GACjC,OAAOkxO,GAAWlxO,IAAWixO,GAAWjxO,IAEtCoxO,GAAc,SAAUpxO,GAC1B,IAAIt8B,EAAYs8B,EAAOt8B,UACnBlgB,EAAOw8C,EAAOv8C,UACdkgB,EAAMD,EAAU6nC,SACpBvL,EAAOqxI,OAAOggG,8BACU3hT,IAApBswE,EAAOs2H,WAAiD,IAAvB46G,GAAWlxO,IAC9C8uO,GAAkBvjO,OAAOvL,GAAQlwE,MAAK,SAAUwhT,GAC9CtxO,EAAOt8B,UAAUm8H,OAAOyxI,GACxB3tQ,EAAM2tQ,KAGV,IAAIC,EAAsBjB,GAAuBtwO,EAAQt8B,EAAUwkC,WACnE,GAAIlI,EAAO46H,EAAEvnM,SAASmwB,EAAM+tR,GAI1B,OAHAZ,GAAUY,GACVd,GAAmBzwO,EAAQr8B,QAC3B6tQ,GAAexxO,GAGZA,EAAO0C,SACLokM,GAAIngQ,OACPgqS,GAAUntR,GAEZw8C,EAAOh8B,SAAStzB,UAEdo2P,GAAI5pD,OAASl9I,EAAO0C,UACtBiuO,GAAUntR,GACVitR,GAAmBzwO,EAAQr8B,IAE7B6tQ,GAAexxO,IAEbwxO,GAAiB,SAAUxxO,GAC7B,OAAOA,EAAOgwO,cAAch3N,UAAUhZ,IAEpCtvD,GAAQ,SAAUsvD,EAAQyxO,GACxBzxO,EAAO2yD,UAGX8+K,EAAYD,GAAexxO,GAAUoxO,GAAYpxO,KAE/C0xO,GAAc,CAChBhhS,MAAOA,GACPinB,SAAUu5Q,GACVC,mBAAoBA,IAGlBQ,GAAkB,OAClBC,GAAa,SAAU/5R,GACzB,OAAOA,aAAmB0wR,IAExBnoG,GAAgB,SAAUpgI,GACxB0xO,GAAY/5Q,SAASqoC,IACvB8hO,GAAYC,gBAAgB/hO,EAAOv8C,WAAW3zB,MAAK,SAAU2pC,GAC3D,IAAIl1B,EAAOk1B,EAAIyuC,UACXwoO,EAAW1hH,GAAS2qD,QAAQp1O,GAAQu9R,GAAYC,gBAAgBx9R,GAAMlV,MAAMoqC,GAAOA,EACvFumC,EAAOt8B,UAAUm8H,OAAO6wI,EAAS5a,eAInC+b,GAAgB,SAAU7xO,EAAQr8D,GACpCq8D,EAAOr7D,IAAI0kR,QAAQrpN,EAAOv8C,UAAW9f,GACrCy8L,GAAcpgI,IAEZ8xO,GAAmB,SAAU9xO,EAAQx8C,EAAM3L,EAASvsB,GACtD,IAAIymT,EAAqBC,EA8BzB,OA7BuB,IAAnBn6R,EAAQpsB,QAAgB,QAAQga,KAAKoS,IACvCm6R,EAAO,0BACe,UAAlBxuR,EAAKjL,SACPV,EAAU,WAAam6R,EAAO,aACrB,YAAYvsS,KAAK+d,EAAKjL,YAC/BV,EAAU,OAASm6R,EAAO,SAE5BD,EAAsB5yN,GAASyxG,mBAAmB5wH,GAC9C+xO,GAAuB/xO,EAAOlhE,OAAOy1Q,aAAa/wP,EAAKjL,SAASlS,cAAe0rS,EAAoB1rS,gBACrGwR,EAAUm6R,EACVn6R,EAAUmoD,EAAOr7D,IAAI2kL,WAAWyoH,EAAqB/xO,EAAOC,SAASi5I,wBAAyBrhM,IACpFA,IACVA,EAAU,2BAEZg6R,GAAc7xO,EAAQnoD,GACtBmoD,EAAOqf,KAAK,aAAc/zF,KAEN,QAAhBA,EAAKw0F,SACPjoE,EAAU01R,GAAW,CAAE50M,SAAU34B,EAAO24B,UAAY34B,EAAOlhE,QAAQqpM,UAAUnoI,EAAOgqH,OAAOjtG,MAAMllE,EAAS,CACxGq/L,eAAe,EACf5nJ,QAAQ,MAGZhkE,EAAKusB,QAAUwzP,GAAoBrmQ,GAAQZ,QAAQof,IAAS3L,EAAU/qB,GAAM+d,KAAKgN,GACjFg6R,GAAc7xO,EAAQ10E,EAAKusB,SACtBvsB,EAAKshT,WACR5sO,EAAOqf,KAAK,aAAc/zF,IAGvBA,EAAKusB,SAEVo6R,GAAiB,SAAUjyO,EAAQx8C,EAAM3L,EAASvsB,GACpD6iT,GAASnuO,EAAOgqH,OAAOkoH,iBAAkBlyO,EAAOgqH,OAAOmoH,sBAAuBt6R,GAC9E,IAAIlU,EAAO4pS,GAAW,CAAE50M,SAAU34B,EAAO24B,UAAY34B,EAAOlhE,QAAQqpM,UAAUtwL,GAM9E,OALAvsB,EAAKusB,QAAUwzP,GAAoBrmQ,GAAQZ,QAAQof,IAAS7f,EAAO7W,GAAM+d,KAAKlH,GAC9EkuS,GAAc7xO,EAAQ10E,EAAKusB,SACtBvsB,EAAKshT,WACR5sO,EAAOqf,KAAK,aAAc/zF,GAErBusB,GAEL82B,GAAa,SAAUqxB,EAAQnoD,EAASvsB,GAW1C,YAVa,IAATA,IACFA,EAAO,IAETA,EAAKw0F,OAASx0F,EAAKw0F,OAASx0F,EAAKw0F,OAAS6xN,GAC1CrmT,EAAKkY,KAAM,EACXlY,EAAKusB,QAAU+5R,GAAW/5R,GAAW,GAAKA,EACrC+5R,GAAW/5R,IAAavsB,EAAKshT,YAChC5sO,EAAOqf,KAAK,mBAAoB/zF,GAChCusB,EAAUvsB,EAAKusB,SAEV9mB,EAAOD,KAAKkvE,EAAOv8C,WAAWv0B,KAAKvD,EAASksB,IAAU,SAAU2L,GACrE,OAAOouR,GAAW/5R,GAAWo6R,GAAejyO,EAAQx8C,EAAM3L,EAASvsB,GAAQwmT,GAAiB9xO,EAAQx8C,EAAM3L,EAASvsB,OAInH8mT,GAAiB,SAAUpyO,EAAQ10E,GACrC,OAAO00E,EAAOqf,KAAK,aAAc/zF,IAE/B+mT,GAAkB,SAAUryO,EAAQ10E,GACtC,OAAO00E,EAAOqf,KAAK,cAAe/zF,IAEhCgnT,GAAa,SAAUtyO,GACzB,OAAOA,EAAOqf,KAAK,WAEjBkzN,GAAa,SAAUvyO,GACzB,OAAOA,EAAOqf,KAAK,WAEjBmzN,GAAiB,SAAUxyO,EAAQ/tB,GACrC,OAAO+tB,EAAOqf,KAAK,aAAc,CAAEptC,KAAMA,KAEvCi4L,GAAwB,SAAUlqK,EAAQjpE,EAAQy0B,EAAOrD,GAC3D63C,EAAOqf,KAAK,oBAAqB,CAC/BtoF,OAAQA,EACRy0B,MAAOA,EACPrD,OAAQA,KAGRgiN,GAAoB,SAAUnqK,EAAQjpE,EAAQy0B,EAAOrD,GACvD63C,EAAOqf,KAAK,gBAAiB,CAC3BtoF,OAAQA,EACRy0B,MAAOA,EACPrD,OAAQA,KAGRsqR,GAAc,SAAUzyO,GAC1B,OAAOA,EAAOqf,KAAK,YAEjBqzN,GAAiB,SAAU1yO,GAC7B,OAAOA,EAAOqf,KAAK,eAEjBszN,GAAW,SAAU3yO,GACvB,OAAOA,EAAOqf,KAAK,SAEjBuzN,GAAwB,SAAU5yO,EAAQzjE,GAC5C,OAAOyjE,EAAOqf,KAAK,oBAAqB,CAAE9iF,MAAOA,KAE/Cs2S,GAAY,SAAU7yO,EAAQ8yO,EAAWvhT,GAC3C,OAAOyuE,EAAOqf,KAAKyzN,EAAWvhT,IAG5BwhT,GAAQ1nB,GAAWvqN,IACnBkyO,GAAwB,SAAUhzO,GACpC+yO,GAAMv7G,SAASx3H,EAAOhxE,GAAI,UAAWgxE,EAAOizO,aAE1CC,GAAc,SAAUpnT,GAC1B,OAAOiF,EAAOD,KAAKhF,GAAGgE,MAAK,SAAUhE,GACnC,OAAOA,EAAE4iG,cAGTykN,GAAqB,SAAUnzO,GACjCA,EAAOozO,qBAAuBpzO,EAAOqzO,YAAcrzO,EAAO5nD,UAAY4nD,EAAO8uF,gBAAkB,KAC/F9uF,EAAOqiE,YAAcriE,EAAOs0H,gBAAkBt0H,EAAO+0C,cAAgB,KACrE/0C,EAAO8wO,cAAgB9wO,EAAOg6F,UAAY,KACtCh6F,EAAOt8B,YACTs8B,EAAOt8B,UAAYs8B,EAAOt8B,UAAUxa,IAAM82C,EAAOt8B,UAAU/+B,IAAMq7D,EAAOt8B,UAAU/+B,IAAId,IAAM,OAG5FyvS,GAAc,SAAUtzO,GAC1B,IAAI+rC,EAAO/rC,EAAOqzO,YACdtnM,IACEA,EAAKwnM,gBACPxnM,EAAKlpB,OAASkpB,EAAKwnM,cACnBxnM,EAAKwnM,cAAgB,MAEvBR,GAAMloR,OAAOkhF,EAAM,eAAgB/rC,EAAOwzO,qBAG1C5uR,GAAW,SAAUo7C,GACvB,IAAKA,EAAO2yD,QAAS,CACnB,IAAI8gL,EAAsBzzO,EAAOyzO,oBAAqBj5F,EAAex6I,EAAOw6I,aACxEh3L,EAAOw8C,EAAOv8C,UACd5W,EAAUmzD,EAAOY,aACjBp9C,GACFw8C,EAAO0zO,KAAK,CAAEC,aAAa,IAE7B3zO,EAAO2yD,SAAU,EACjB3yD,EAAO4zO,wBACH5zO,EAAO6zO,gBAAkBhnS,GAC3BkmS,GAAMx7R,OAAO1K,EAAQkJ,aAEvBu8R,GAAWtyO,GACXA,EAAOgwO,cAAcz4R,OAAOyoD,IACvBA,EAAO0C,QAAUl/C,GACpBwvR,GAAsBhzO,GAExBuyO,GAAWvyO,GACX+yO,GAAMx7R,OAAOyoD,EAAOo4B,gBACpB86M,GAAYO,GACZP,GAAY14F,GACZx6I,EAAO0uB,YAGPA,GAAU,SAAU1uB,EAAQ8zO,GAC9B,IAAIpwQ,EAAYs8B,EAAOt8B,UAAW/+B,EAAMq7D,EAAOr7D,IAC3Cq7D,EAAO+zO,YAGND,GAAc9zO,EAAO2yD,SAIrBmhL,IACH9zO,EAAOgwO,cAAclzQ,IAAI,eAAgBkjC,EAAOg0O,eAC5Ch0O,EAAOi0O,OAASj0O,EAAOi0O,MAAMvlN,SAC/B1uB,EAAOi0O,MAAMvlN,UAEfwkN,GAAYxvQ,GACZwvQ,GAAYvuS,IAEd2uS,GAAYtzO,GACZmzO,GAAmBnzO,GACnBA,EAAO+zO,WAAY,GAbjB/zO,EAAOzoD,WAgBP6wH,GAAmBn7I,OAAOO,UAAUC,eACpCymT,GAAS,SAAU38S,EAAKC,GAC1B,IAAIE,EAAcrF,EAASkF,IAAQlF,EAASmF,GAC5C,OAAOE,EAAcC,GAAUJ,EAAKC,GAAMA,GAExCI,GAAY,SAAUC,GACxB,OAAO,WAEL,IADA,IAAIC,EAAU,IAAI1J,MAAM5C,UAAUC,QACzB4B,EAAI,EAAGA,EAAIyK,EAAQrM,OAAQ4B,IAClCyK,EAAQzK,GAAK7B,UAAU6B,GAEzB,GAAuB,IAAnByK,EAAQrM,OACV,MAAM,IAAIe,MAAM,4BAGlB,IADA,IAAIuL,EAAM,GACDxJ,EAAI,EAAGA,EAAIuJ,EAAQrM,OAAQ8C,IAAK,CACvC,IAAIyJ,EAAYF,EAAQvJ,GACxB,IAAK,IAAIuH,KAAOkC,EACVowI,GAAiB16I,KAAKsK,EAAWlC,KACnCiC,EAAIjC,GAAO+B,EAAOE,EAAIjC,GAAMkC,EAAUlC,KAI5C,OAAOiC,IAGPJ,GAAYC,GAAUs8S,IAEtBC,GAAgBz/R,GAAU,WAAY,YACtC0/R,GAAkBzoS,KAAWR,WAC7B5B,GAAU6qS,GAAgB7qS,UAC1BE,GAAU2qS,GAAgB3qS,UAC1BD,GAAW4qS,GAAgB5qS,WAC3B6qS,GAAsB,CACxB,QACA,WACA,YAEEC,GAAuB,CACzBC,YAAY,EACZC,iBAAiB,EACjBp/L,QAAQ,GAENq/L,GAAmB,SAAU/lI,GAC/B,IAAIgmI,EAAcpiT,EAAQo8K,GAAWA,EAAQ93K,KAAK,KAAO83K,EACrDimI,EAAiB9kT,EAAIuC,EAASsiT,GAAeA,EAAY/3R,MAAM,KAAO,GAAI9R,IAC9E,OAAO3a,EAAOykT,GAAgB,SAAUjwR,GACtC,OAAOA,EAAKj5B,OAAS,MAGrBmpT,GAA4B,SAAUlmI,GACxC,OAAOx+K,EAAOw+K,EAAS3iL,EAAMsH,EAAUghT,MAErCQ,GAAkB,SAAU1/S,EAAM8qE,GACpC,IAAIzlE,EAASkpQ,GAASzjM,GAAU,SAAUr0E,EAAOkK,GAC/C,OAAOzC,EAAS8B,EAAMW,MAExB,OAAOq+S,GAAc35S,EAAOrN,EAAGqN,EAAOtP,IAEpC4pT,GAAa,SAAUX,EAAeliT,EAAMimD,QAC7B,IAAbA,IACFA,EAAW,IAEb,IAAImpH,EAAW8yI,EAAc9yI,WACzB0zI,EAAkB1zI,EAAS5zK,eAAewE,GAAQovK,EAASpvK,GAAQ,GACvE,OAAOnF,GAAM4jI,OAAO,GAAIx4E,EAAU68P,IAEhCC,GAAa,SAAUb,EAAeliT,GACxC,OAAOkiT,EAAc9yI,WAAW5zK,eAAewE,IAE7CgjT,GAAiB,SAAUd,EAAeliT,EAAMgiT,GAClD,IAAI/4H,EAAUi5H,EAAc9yI,WAC5B,OAAO2zI,GAAWb,EAAeliT,IAASipL,EAAQjpL,GAAMgiT,QAAUA,GAEhEiB,GAAmB,SAAUf,EAAeliT,GAC9C,OAAO+iT,GAAWb,EAAeliT,GAAQkiT,EAAc9yI,WAAWpvK,GAAQ,IAExEowE,GAAiB,SAAUpC,EAAUuoN,GACvC,OAAO3yR,GAAIoqE,EAAU,gBAAgBrwE,SAAQ,WAC3C,OAAOiG,GAAIoqE,EAAU,kBAAkBpwE,KAAI,SAAU8I,GACnD,OAAe,IAARA,EAAgB,OAASA,QAEjCtJ,MAAMm5R,IAEP2sB,GAAqB,SAAUl1O,EAAUjxE,EAAIomT,EAAiB7rS,EAASy2D,GACzE,IAAIq1O,EAAe,CACjBrmT,GAAIA,EACJilT,MAAO,SACPqB,aAAcjzO,GAAepC,EAAU,YACvCyuG,QAAS,GACT6mI,kBAAmBH,EACnBI,yBAAyB,EACzBC,cAAc,EACdC,oBAAoB,EACpBC,cAAc,EACdC,eAAe,EACfC,oBAAoB,EACpBrB,iBAAiB,EACjB9K,QAAS,kBACToM,QAAQ,EACRC,wBAAyB,oDACzB9+F,kBAAmB,IACnB++F,cAAc,EACdC,eAAe,EACfC,wBAAwB,EACxBnJ,QAAQ,EACRI,cAAe,oMACfC,aAAc,oMACdC,gBAAiB,QACjBr3B,cAAeh2M,EAAOwmI,WACtB0vE,oBAAqBl2M,GAEvB,OAAOhzE,GAASA,GAAS,GAAIqoT,GAAe9rS,EAAU+qS,GAAuB,KAE3E6B,GAA2B,SAAUl2O,EAAUx2D,GACjD,IAAI2sS,EAAwB,CAC1BhhM,QAAQ,EACRkgM,aAAcjzO,GAAepC,EAAU,aACvCo2O,gBAAgB,GAEdC,EAAuB,CAAEzhJ,SAAS,GACtC,OAAO7nK,GAASA,GAASA,GAAS,GAAIsnT,IAAuB8B,GAAwB3sS,EAAU6sS,EAAuB,KAEpHC,GAAqB,SAAUC,EAAkBv2O,GACnD,IAAIw2O,EAA6Bx2O,EAASy2O,iBAAmBz2O,EAASy2O,iBAAmB,GACzF,OAAIF,GAAoBA,EAAiBE,iBAChC5pT,GAAM4jI,OAAO,GAAI8lL,EAAiBE,iBAAkBD,GAEpDA,GAGPE,GAAiB,SAAUC,EAAeloI,GAC5C,MAAO,GAAGtiL,OAAOqoT,GAAiBmC,IAAgBxqT,OAAOqoT,GAAiB/lI,KAExEmoI,GAAiB,SAAUC,EAAgB3C,EAAe4C,EAAyB92O,GACrF,IAAI22O,EAAgBnC,GAAiBsC,EAAwBzpG,gBACzD0pG,EAAiBvC,GAAiBx0O,EAASyuG,SAC3CuoI,EAAe/B,GAAiBf,EAAe,UAC/C+C,EAAgBD,EAAavoI,QAAU+lI,GAAiBwC,EAAavoI,SAAWsoI,EAChFG,EAAkBL,GAAkB7B,GAAed,EAAe,SAAU,UAAYS,GAA0BsC,GAAiBJ,GAAkB9B,GAAWb,EAAe,UAAY+C,EAAgBF,EAC3MI,EAAkBT,GAAeC,EAAeO,GACpD,OAAOrqT,GAAM4jI,OAAOzwD,EAAU,CAAEyuG,QAAS0oI,EAAgBxgT,KAAK,QAE5DygT,GAAa,SAAUP,EAAgB3C,GACzC,OAAO2C,GAAkB9B,GAAWb,EAAe,WAEjDmD,GAAkB,SAAUR,EAAgBrtS,EAAS8tS,EAAiBR,EAAyB92O,GACjG,IAAIu3O,EAAwBV,EAAiB,CAAEW,OAAQtB,GAAyBl2O,EAAUx2D,IAAa,GACnG0qS,EAAgBU,GAAgB,CAAC,UAAWl9S,GAAU6/S,EAAuBv3O,IAC7Ey3O,EAAmB5qT,GAAM4jI,OAAO6mL,EAAiBR,EAAyB5C,EAAcl0O,WAAYo3O,GAAWP,EAAgB3C,GAAiBW,GAAWX,EAAe,UAAY,GAAI,CAC5Lx7M,UAAU,EACV+9M,iBAAkBH,GAAmBQ,EAAyB5C,EAAcl0O,cAE9E,OAAO42O,GAAeC,EAAgB3C,EAAe4C,EAAyBW,IAE5EC,GAAoB,SAAU33O,EAAQhxE,EAAIomT,EAAiB2B,EAAyB92O,GACtF,IAAIs3O,EAAkBpC,GAAmBl1O,EAAUjxE,EAAIomT,EAAiB7rS,GAASy2D,GACjF,OAAOs3O,GAAgB7tS,IAAWD,GAAUC,GAAS8tS,EAAiBR,EAAyB92O,IAE7F23O,GAAc,SAAU9kS,EAAWktD,EAAQ/tE,GAC7C,OAAOlB,EAAOD,KAAKkvE,EAAOC,SAAShuE,IAAO/B,OAAO4iB,IAE/C+kS,GAAiB,SAAUjsT,GAC7B,IAAIsyB,EAAS,GAab,MAZqB,kBAAVtyB,EACTkE,EAAKlE,EAAMkC,QAAQ,KAAO,EAAIlC,EAAM+wB,MAAM,6BAA+B/wB,EAAM+wB,MAAM,MAAM,SAAUhkB,GACnG,IAAI5E,EAAM4E,EAAIgkB,MAAM,KAChB5oB,EAAItI,OAAS,EACfyyB,EAAOpxB,GAAM+d,KAAK9W,EAAI,KAAOjH,GAAM+d,KAAK9W,EAAI,IAE5CmqB,EAAOpxB,GAAM+d,KAAK9W,EAAI,KAAOjH,GAAM+d,KAAK9W,EAAI,OAIhDmqB,EAAStyB,EAEJsyB,GAELxrB,GAAY,SAAUnF,GACxB,OAAO,SAAUe,GACf,OAAOgE,EAAQhE,IAAM2B,EAAO3B,EAAGf,KAG/BkzE,GAAW,SAAUT,EAAQ/tE,EAAMu2R,EAAYr2R,GACjD,IAAIvG,EAAQqG,KAAQ+tE,EAAOC,SAAWD,EAAOC,SAAShuE,GAAQu2R,EAC9D,MAAa,SAATr2R,EACK0lT,GAAejsT,GACJ,WAATuG,EACFylT,GAAYxlT,EAAU4tE,EAAQ/tE,GAAM5C,MAAMm5R,GAC/B,WAATr2R,EACFylT,GAAYnlT,EAAUutE,EAAQ/tE,GAAM5C,MAAMm5R,GAC/B,YAATr2R,EACFylT,GAAYrlT,EAAWytE,EAAQ/tE,GAAM5C,MAAMm5R,GAChC,WAATr2R,EACFylT,GAAYvlT,EAAU2tE,EAAQ/tE,GAAM5C,MAAMm5R,GAC/B,UAATr2R,EACFylT,GAAYtlT,EAAS0tE,EAAQ/tE,GAAM5C,MAAMm5R,GAC9B,aAATr2R,EACFylT,GAAYllT,GAAUN,GAAW4tE,EAAQ/tE,GAAM5C,MAAMm5R,GAC1C,aAATr2R,EACFylT,GAAYplT,EAAYwtE,EAAQ/tE,GAAM5C,MAAMm5R,GAE5C58R,GAIPksT,GAAoB,WACtB,IAAIvlQ,EAAS,GACTjwB,EAAM,SAAUtzB,EAAI+oT,GACtBxlQ,EAAOvjD,GAAM+oT,GAEXliT,EAAM,SAAU7G,GAClB,OAAIujD,EAAOvjD,GACFujD,EAAOvjD,GAET,CAAE20E,MAAO,KAEdxqD,EAAQ,SAAUnqB,GACpB,OAAO+G,GAAIw8C,EAAQvjD,IAErB,MAAO,CACLszB,IAAKA,EACLzsB,IAAKA,EACLE,IAAKojB,IAGL6+R,GAAcF,KAEd/mF,GAAU,SAAU+zC,EAAUx8L,GAChC,IAAI2vO,EAAS3vO,EAAI3jE,MACjB,OAAOszS,EAAOnzC,IAEZozC,GAAsB,SAAUpzC,EAAUx8L,GAC5C,OAAO1gD,SAASzD,GAAMmkD,EAAKw8L,GAAW,KAEpCqzC,GAAiBpsT,EAAMglO,GAAS,eAChCqnF,GAAkBrsT,EAAMglO,GAAS,gBACjCsnF,GAAetsT,EAAMmsT,GAAqB,cAC1CI,GAAgBvsT,EAAMmsT,GAAqB,eAC3CK,GAA0B,SAAUjwO,GACtC,OAAOA,EAAI3jE,MAAMujB,yBAEfswR,GAA6B,SAAUC,EAASnuR,EAASC,GAC3D,IAAIsB,EAAcssR,GAAeM,GAC7B3sR,EAAessR,GAAgBK,GACnC,OAAOnuR,GAAW,GAAKC,GAAW,GAAKD,GAAWuB,GAAetB,GAAWuB,GAE1EsqC,GAAY,SAAUsM,EAAQ4F,EAAKh+C,EAASC,GAC9C,IAAIsqQ,EAAa0jB,GAAwBjwO,GACrCimD,EAAS7rD,EAASmyN,EAAWnsQ,KAAO4/C,EAAI3jE,MAAM+kB,WAAa4uR,GAAchwO,GAAO,EAChFkmD,EAAS9rD,EAASmyN,EAAWlsQ,IAAM2/C,EAAI3jE,MAAM8kB,UAAY4uR,GAAa/vO,GAAO,EAC7Ex8E,EAAIw+B,EAAUikG,EACdzpH,EAAIylB,EAAUikG,EAClB,MAAO,CACL1iI,EAAGA,EACHgZ,EAAGA,IAGH4zS,GAAoB,SAAU14O,EAAQ11C,EAASC,GACjD,IAAIkuR,EAAUzzS,GAAQZ,QAAQ47D,EAAOv8C,WACjCu2I,EAAYh6F,EAAO0C,OAAS+1O,EAAU9iS,GAAgB8iS,GACtDE,EAAkBviP,GAAU4J,EAAO0C,OAAQs3F,EAAW1vI,EAASC,GACnE,OAAOiuR,GAA2Bx+I,EAAW2+I,EAAgB7sT,EAAG6sT,EAAgB7zS,IAE9E8zS,GAAc,SAAUr0S,GAC1B,OAAOxT,EAAOD,KAAKyT,GAAM1U,IAAImV,GAAQZ,UAEnCy0S,GAAwB,SAAU74O,GACpC,IAAI84O,EAAe94O,EAAO0C,OAAS1C,EAAOv8C,UAAYu8C,EAAOyiE,0BAC7D,OAAOm2K,GAAYE,GAAcjpT,KAAI,SAAUuoB,GAC7C,OAAOrK,GAAW0H,GAAM2C,GAAYA,MACnC/oB,OAAM,IAEP0pT,GAAa,CACfL,kBAAmBA,GACnBG,sBAAuBA,IAGzB,SAASzzO,KACP,IAAI4zO,EAAgB,WAClB,MAAM,IAAIxsT,MAAM,gEAElB,MAAO,CACLgiD,KAAMwqQ,EACNhqQ,MAAOgqQ,EACP5/Q,WAAY4/Q,EACZjyO,QAASiyO,GAIb,SAASC,GAAoBj5O,GAC3B,IAAI2F,EAAgB,GAChBuzO,EAAoB,WACtB,IAAIjF,EAAQj0O,EAAOi0O,MACnB,OAAOA,GAASA,EAAMlrH,2BAA6BkrH,EAAMlrH,6BAA+B3jH,MAEtF+zO,EAAqB,WACvB,OAAOpoT,EAAOD,KAAK60E,EAAc,KAE/BytN,EAAU,SAAU9kS,EAAGuC,GACzB,OAAOvC,EAAE6D,OAAStB,EAAEsB,MAAQ7D,EAAEmW,OAAS5T,EAAE4T,OAASnW,EAAEg4E,cAAgBh4E,EAAE83E,UAAYv1E,EAAEy1E,cAAgBz1E,EAAEu1E,SAEpGhtC,EAAa,WACXusC,EAAcl6E,OAAS,GACzBytT,IAAoB9/Q,WAAWusC,IAG/ByzO,EAAkB,SAAUxzO,GAC9BD,EAAc1yE,KAAK2yE,IAEjByzO,EAAoB,SAAUzzO,GAChCxxE,EAAUuxE,GAAe,SAAU2zO,GACjC,OAAOA,IAAsB1zO,KAC5B91E,MAAK,SAAUomB,GAChByvD,EAAc4X,OAAOrnE,EAAO,OAG5Bs4B,EAAO,SAAUnxB,GACnB,IAAI2iD,EAAO2yD,SAAYomL,GAAWF,sBAAsB74O,GAGxD,OAAO7rE,EAAKwxE,GAAe,SAAUC,GACnC,OAAOwtN,EAAQ8lB,IAAoBnyO,QAAQnB,GAAevoD,MACzD/tB,YAAW,WACZ0wE,EAAOgwO,cAAch3N,UAAUhZ,GAC/B,IAAI4F,EAAeszO,IAAoB1qQ,KAAKnxB,GAAM,WAChDg8R,EAAkBzzO,GAClBxsC,OAIF,OAFAggR,EAAgBxzO,GAChBxsC,IACOwsC,MAGP52B,EAAQ,WACVmqQ,IAAqBrpT,MAAK,SAAU81E,GAClCszO,IAAoBlqQ,MAAM42B,GAC1ByzO,EAAkBzzO,GAClBxsC,QAGAmgR,EAAmB,WACrB,OAAO5zO,GAEL4qJ,EAAiB,SAAUvwJ,GAC7BA,EAAOpjC,GAAG,cAAc,WACtB,IAAI48Q,EAAiBx5O,EAAOC,SAASw5O,gBACjCD,GACFhrQ,EAAK,CACH/pC,KAAM+0S,EACNrnT,KAAM,UACNi0E,QAAS,OAIfpG,EAAOpjC,GAAG,wCAAwC,WAChD6pO,GAAMvrG,sBAAsB9hI,MAE9B4mC,EAAOpjC,GAAG,UAAU,WAClB9sC,EAAK61E,EAAc7yE,SAAS,SAAU8yE,GACpCszO,IAAoBlqQ,MAAM42B,UAKhC,OADA2qJ,EAAevwJ,GACR,CACLxxB,KAAMA,EACNQ,MAAOA,EACPuqQ,iBAAkBA,GAItB,IAAItqB,GAAgBE,GAAeF,cAE/BC,GAAeC,GAAeD,aAElC,SAASwqB,KACP,IAAIV,EAAgB,WAClB,MAAM,IAAIxsT,MAAM,0DAElB,MAAO,CACLgiD,KAAMwqQ,EACNvgI,QAASugI,EACTtwH,MAAOswH,EACPvwH,QAASuwH,EACThqQ,MAAOgqQ,EACPW,UAAWX,EACXY,UAAWZ,GAIf,IAAIrwH,GAAgB,SAAU3oH,GAC5B,IAAI65O,EAAU,GACVX,EAAoB,WACtB,IAAIjF,EAAQj0O,EAAOi0O,MACnB,OAAOA,GAASA,EAAMnrH,qBAAuBmrH,EAAMnrH,uBAAyB4wH,MAE1EI,EAAW,SAAUl2S,EAAO1Y,GAC9B,OAAO,WACL,OAAOA,EAAIA,EAAEQ,MAAMkY,EAAOpY,gBAAakE,IAGvCqqT,EAAgB,SAAUh5N,GAC5B/gB,EAAOqf,KAAK,aAAc,CAAE0B,OAAQA,KAElCi5N,EAAiB,SAAUj5N,GAC7B/gB,EAAOqf,KAAK,cAAe,CAAE0B,OAAQA,KAEnCk5N,EAAY,SAAUl5N,GACxB84N,EAAQ5mT,KAAK8tF,GACbg5N,EAAch5N,IAEZkmG,EAAc,SAAUlmG,GAC1Bi5N,EAAej5N,GACf84N,EAAU3pT,EAAO2pT,GAAS,SAAUK,GAClC,OAAOA,IAAgBn5N,KAEF,IAAnB84N,EAAQpuT,QACVu0E,EAAOtvD,SAGPypS,EAAe,WACjB,OAAOppT,EAAOD,KAAK+oT,EAAQA,EAAQpuT,OAAS,KAE1C2uT,EAA8B,SAAUjlD,GAC1Cn1L,EAAOgwO,cAAch3N,UAAUhZ,GAC/B8uO,GAAkBx/P,MAAM0wB,GACxB,IAAI+gB,EAASo0K,IAEb,OADA8kD,EAAUl5N,GACHA,GAELvyC,EAAO,SAAUljD,EAAM6L,GACzB,OAAOijT,GAA4B,WACjC,OAAOlB,IAAoB1qQ,KAAKljD,EAAM6L,EAAQ8vL,OAG9CxO,EAAU,SAAUntL,GACtB,OAAO8uT,GAA4B,WACjC,OAAOlB,IAAoBzgI,QAAQntL,EAAM27L,OAGzCyB,EAAQ,SAAUl3L,EAAS6vF,EAAUz9E,GACvCs1S,IAAoBxwH,MAAMl3L,EAASsoT,EAASl2S,GAAgBjW,KAAM0zF,KAEhEonG,EAAU,SAAUj3L,EAAS6vF,EAAUz9E,GACzCs1S,IAAoBzwH,QAAQj3L,EAASsoT,EAASl2S,GAAgBjW,KAAM0zF,KAElEryC,EAAQ,WACVmrQ,IAAerqT,MAAK,SAAUixF,GAC5Bm4N,IAAoBlqQ,MAAM+xC,GAC1BkmG,EAAYlmG,OAQhB,OALA/gB,EAAOpjC,GAAG,UAAU,WAClB9sC,EAAK+pT,GAAS,SAAU94N,GACtBm4N,IAAoBlqQ,MAAM+xC,SAGvB,CACLvyC,KAAMA,EACNiqI,QAASA,EACTiQ,MAAOA,EACPD,QAASA,EACTz5I,MAAOA,IAIPqrQ,GAAsB,SAAUr6O,EAAQxuE,GAC1CwuE,EAAO6nI,oBAAoBr5J,KAAK,CAC9Br8C,KAAM,QACNsS,KAAMjT,KAGN8oT,GAAe,SAAUt6O,EAAQxuE,GAC/BwuE,EAAOi3F,YACTojJ,GAAoBr6O,EAAQxuE,GAE5BwuE,EAAOpjC,GAAG,cAAc,WACtBy9Q,GAAoBr6O,EAAQxuE,OAI9B+oT,GAAc,SAAUv6O,EAAQxuE,GAClC8oT,GAAat6O,EAAQ0tN,GAAK9kQ,UAAU,CAClC,8BACAp3B,MAGAgpT,GAAW,SAAUx6O,EAAQ8yO,EAAWvmT,GAC1CsmT,GAAU7yO,EAAQ8yO,EAAW,CAAEthT,QAASjF,IACxCxB,EAAWmM,QAAQ3F,MAAMhF,IAEvBkuT,GAAkB,SAAUtoT,EAAMs9F,EAAKx9F,GACzC,OAAOA,EAAO,kBAAoBE,EAAO,KAAOF,EAAO,aAAew9F,EAAM,kBAAoBt9F,EAAO,SAAWs9F,GAEhHirN,GAAkB,SAAU16O,EAAQyvB,EAAKx9F,GAC3CuoT,GAASx6O,EAAQ,kBAAmBy6O,GAAgB,SAAUhrN,EAAKx9F,KAEjE0oT,GAAiB,SAAU36O,EAAQyvB,EAAKx9F,GAC1CuoT,GAASx6O,EAAQ,iBAAkBy6O,GAAgB,QAAShrN,EAAKx9F,KAE/D2oT,GAAoB,SAAU56O,EAAQyvB,EAAKx9F,GAC7CuoT,GAASx6O,EAAQ,oBAAqBy6O,GAAgB,WAAYhrN,EAAKx9F,KAErE4oT,GAAkB,SAAU76O,EAAQ/tE,EAAML,GAC5C,IAAIJ,EAAUk8R,GAAK9kQ,UAAU,CAC3B,mCACA32B,IAEF6oT,GAAUtpT,EAASI,GACnB0oT,GAAat6O,EAAQxuE,IAEnBspT,GAAY,SAAUtpT,GAExB,IADA,IAAI1F,EAAI,GACCP,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACtCO,EAAEP,EAAK,GAAKC,UAAUD,GAExB,IAAI2L,EAAUnM,EAAWugB,OAAOpU,QAC5BA,IACEA,EAAQ3F,MACV2F,EAAQ3F,MAAM7F,MAAMwL,EAAS1L,WAE7B0L,EAAQF,IAAItL,MAAMwL,EAAS1L,aAI7BuvT,GAAgB,CAClBL,gBAAiBA,GACjBC,eAAgBA,GAChBC,kBAAmBA,GACnBC,gBAAiBA,GACjBN,YAAaA,GACbD,aAAcA,GACdQ,UAAWA,IAGT3tO,GAAS,WACX,MAAO,CACL,sBAAuB,oRACvB,cAAe,kJACf,cAAe,mJACf,eAAgB,oQAChB,gBAAiB,qQACjB,aAAc,mQACd,aAAc,oXACd,cAAe,sQACf,aAAc,2IACd,cAAe,2IACf,KAAQ,ubACR,SAAY,qHACZ,eAAgB,uTAChB,WAAc,w0CACd,OAAU,2QACV,OAAU,yPACV,cAAe,0dACf,kBAAmB,y7BACnB,gBAAiB,ohBACjB,UAAa,ygBACb,UAAa,6JACb,eAAgB,0LAChB,eAAgB,qLAChB,gBAAiB,2LACjB,aAAc,0LACd,MAAS,wNACT,cAAe,qkCACf,eAAgB,4fAChB,eAAgB,2VAChB,4BAA6B,8GAC7B,eAAgB,0GAChB,cAAe,4UACf,QAAW,wOACX,SAAY,oJACZ,KAAQ,8LACR,KAAQ,qOACR,IAAO,07BACP,sBAAuB,8JACvB,KAAQ,uLACR,UAAa,gSACb,aAAc,sTACd,aAAc,4OACd,aAAc,qbACd,MAAS,mOACT,MAAS,6TACT,KAAQ,kRACR,oBAAqB,uPACrB,kBAAmB,qPACnB,iBAAkB,4LAClB,OAAU,kIACV,WAAc,mbACd,QAAW,qYACX,MAAS,6UACT,KAAQ,gjBACR,qBAAsB,2TACtB,KAAQ,wGACR,kBAAmB,kFACnB,gBAAiB,+PACjB,MAAS,gTACT,OAAU,mVACV,KAAQ,8JACR,mBAAoB,8cACpB,cAAe,oOACf,OAAU,8aACV,OAAU,uOACV,KAAQ,+JACR,KAAQ,qWACR,mBAAoB,kXACpB,oBAAqB,mOACrB,mBAAoB,sLACpB,uBAAwB,mwBACxB,mBAAoB,gwBACpB,2BAA4B,82BAC5B,uBAAwB,o4BACxB,2BAA4B,k+BAC5B,uBAAwB,i/BACxB,2BAA4B,4bAC5B,uBAAwB,uaACxB,2BAA4B,ixBAC5B,uBAAwB,ixBACxB,2BAA4B,mWAC5B,uBAAwB,8UACxB,KAAQ,uVACR,IAAO,oTACP,cAAe,+PACf,eAAgB,8JAChB,UAAW,mJACX,eAAgB,uPAChB,OAAU,wLACV,mBAAoB,0iBACpB,eAAgB,goBAChB,YAAe,iTACf,QAAW,iVACX,aAAc,wbACd,UAAa,6NACb,aAAc,mWACd,MAAS,ySACT,gBAAiB,iNACjB,KAAQ,oJACR,YAAe,4qBACf,QAAW,0eACX,MAAS,iOACT,MAAS,2RACT,KAAQ,qQACR,OAAU,6bACV,oBAAqB,6VACrB,OAAU,oVACV,gBAAiB,4KACjB,OAAU,qZACV,gBAAiB,mYACjB,cAAe,0RACf,eAAgB,oRAChB,IAAO,0QACP,KAAQ,oRACR,OAAU,wKACV,aAAc,iXACd,SAAY,iOACZ,SAAY,knBACZ,QAAW,0XACX,WAAY,oUACZ,WAAY,sUACZ,WAAc,8TACd,cAAe,mbACf,iBAAkB,kcAClB,UAAa,oWACb,YAAe,yWACf,wBAAyB,yLACzB,wBAAyB,kPACzB,0BAA2B,kPAC3B,sBAAuB,oRACvB,mBAAoB,gSACpB,qBAAsB,iQACtB,4BAA6B,uTAC7B,6BAA8B,mTAC9B,yBAA0B,gTAC1B,yBAA0B,wTAC1B,oBAAqB,kLACrB,oBAAqB,qPACrB,uBAAwB,uMACxB,oBAAqB,6SACrB,mBAAoB,sLACpB,MAAS,wMACT,SAAY,6LACZ,wBAAyB,mVACzB,aAAc,yZACd,IAAO,mbACP,UAAa,ogBACb,UAAa,4WACb,KAAQ,qQACR,OAAU,6oBACV,OAAU,gVACV,iBAAkB,imBAClB,WAAc,kNACd,OAAU,2PACV,KAAQ,oPACR,aAAgB,uaAChB,YAAe,6NACf,QAAW,2ZACX,UAAW,oPACX,WAAY,gNAIZ6tO,GAAuB,SAAUvrN,GACnC,MAAO,iBAAiBhqF,KAAKgqF,IAE3BwrN,GAAoB,SAAUj7O,GAChC,IAAIo8N,EAAaj9M,GAASg9M,cAAcn8N,GACpCG,EAAUH,EAAOgwO,cAAczvO,QAAU,iBACzC31D,EAASo1D,EAAOgwO,cAAcplS,OAC9BswS,EAAiB,UAAYtwS,EAAS,OACtC83D,GAA2B,IAAlB1C,EAAO0C,OACpB,OAAO7yE,EAAIusS,GAAY,SAAU3sM,GAC/B,OAAIurN,GAAqBvrN,KAAS/sB,EACzBvC,EAAU,IAAMsvB,EAAM,IAAMyrN,EAE5Bl7O,EAAOM,gBAAgBp4B,WAAWunD,OAI3C0rN,GAA+B,SAAUn7O,GAC3CA,EAAOu3F,WAAav3F,EAAOu3F,WAAWnrK,OAAO6uT,GAAkBj7O,KAGjE,SAASo7O,GAAgB13Q,GACvB,MAAO,CACL6yJ,YAAaxqM,EAAMy3S,GAAUjtG,YAAa7yJ,GAC1C8yJ,eAAgBzqM,EAAMy3S,GAAUhtG,eAAgB9yJ,KAGnD,SAAU03Q,GACTA,EAAgBnjH,eAAiBurG,GAAUvrG,gBAD7C,CAEEmjH,KAAoBA,GAAkB,KACxC,IAAIC,GAAoBD,GAEpBE,GAAkB,SAAUhxR,EAASC,EAASj3B,GAChD,GAAIA,EAAMmyC,UACR,OAAO,EAET,GAAIqhO,GAAI79P,QAAQ3B,QAAUhU,EAAM6xC,cAAgB7xC,EAAM+xC,UAAY,GAAK/xC,EAAMswC,iBAAmBtwC,EAAM8xC,aAAc,CAClH,IAAIkjC,EAAMh1E,EAAMswC,eAAez/B,WAAW7Q,EAAM6xC,aAChD,GAAI6pJ,GAASv2K,UAAU6vD,GACrB,OAAOt4E,EAAOs4E,EAAItjC,kBAAkB,SAAUjY,GAC5C,OAAO0mQ,GAAW1mQ,EAAMzC,EAASC,MAIvC,OAAOv6B,EAAOsD,EAAM0xC,kBAAkB,SAAUjY,GAC9C,OAAO0mQ,GAAW1mQ,EAAMzC,EAASC,OAGjCgxR,GAAa,CAAED,gBAAiBA,IAEhCE,GAAK,CACP98P,UAAW,EACXs9I,OAAQ,GACR98I,KAAM,GACNN,MAAO,GACPG,KAAM,GACNE,MAAO,GACPkxE,SAAU,GACVxxE,IAAK,EACLK,GAAI,GACJy8P,IAAK,GACLC,KAAM,GACNC,gBAAiB,SAAU9tT,GACzB,OAAOA,EAAE+xD,UAAY/xD,EAAEiyD,SAAWjyD,EAAEknQ,QAAUpnQ,KAAK0uM,eAAexuM,IAEpEwuM,eAAgB,SAAUxuM,GACxB,OAAOi5Q,GAAIl1L,IAAM/jF,EAAEmnQ,QAAUnnQ,EAAEiyD,UAAYjyD,EAAEknQ,SAI7C6mD,GAA2B5sH,GAAS/oD,uBACpC41K,GAA0B7sH,GAAShpD,sBACnC81K,GAAyB,SAAUrzQ,EAAMlkC,GAC3C,MAAOA,GAAQA,IAASkkC,EAAM,CAC5B,GAAIozQ,GAAwBt3S,IAASq3S,GAAyBr3S,GAC5D,OAAOA,EAETA,EAAOA,EAAK6J,WAEd,OAAO,MAEL2tS,GAAmB,SAAUr4Q,EAAWs8B,GAC1C,IACIwvL,EAAawsD,EAAkBC,EAAcC,EAAeC,EAC5DzuL,EAAQC,EAAQyuL,EAAcC,EAAc7iE,EAAQ8iE,EAAQt6E,EAAOu6E,EACnE/wR,EAAOrD,EAGPq0R,EAAkBC,EANlB93S,EAAMq7D,EAAOr7D,IAAK7U,EAAOhD,GAAMgD,KAI/B4sT,EAAc18O,EAAOmI,SAAUw0O,EAAe5xT,EAAW+Y,SACzDy3B,EAAM9gB,KAAK8gB,IAAK+/C,EAAQ7gE,KAAK6gE,MAAOshO,EAAc58O,EAAOv8C,UAE7Dy4R,EAAgB,CACdW,GAAI,CACF,EACA,GACC,GACA,GAEHC,GAAI,CACF,EACA,EACA,GACC,GAEHhrQ,GAAI,CACF,EACA,EACA,EACA,GAEFirQ,GAAI,CACF,EACA,GACC,EACD,IAGJ,IAAI9gG,EAAU,SAAU3zI,GACtB,OAAOA,IAAyB,QAAjBA,EAAI/vD,UAAsBynD,EAAOr7D,IAAIxV,GAAGm5E,EAAK,kBAE1D00O,EAA6B,SAAUl8M,EAAKxtG,GAC9C,GAAiB,cAAbwtG,EAAI3uG,MAAsD,IAA9B2uG,EAAI3uG,KAAKrE,QAAQ,SAAgB,CAC/D,IAAIm8F,EAAQ6W,EAAI/W,QAAQ,GACxB,OAAOkyH,EAAQn7G,EAAI/pG,UAAYwkT,GAAWD,gBAAgBrxN,EAAM3/D,QAAS2/D,EAAM1/D,QAASj3B,GAExF,OAAO2oN,EAAQn7G,EAAI/pG,UAAYwkT,GAAWD,gBAAgBx6M,EAAIx2E,QAASw2E,EAAIv2E,QAASj3B,IAGpF2pT,EAAyB,SAAUn8M,GACrC,IAAI/pG,EAAS+pG,EAAI/pG,OACbimT,EAA2Bl8M,EAAK9gC,EAAOt8B,UAAU6nC,YAAcu1B,EAAI6sE,sBACrE3tG,EAAOt8B,UAAUs+C,OAAOjrF,IAGxBmmT,EAAkB,SAAU50O,GAC9B,OAAOtI,EAAOr7D,IAAIxV,GAAGm5E,EAAK,gBAAkBA,EAAI96D,cAAc,OAAS86D,GAErE60O,EAAc,SAAU70O,GAC1B,IAAIx7D,EAAWqyE,GAASq9M,kBAAkBx8N,GAC1C,OAAiB,IAAblzD,IAAsBg6P,GAAIlpD,MAGN,kBAAb9wM,IACTA,EAAW,8BAE+B,UAAxCw7D,EAAIrvD,aAAa,qBAGjBqvD,IAAQtI,EAAOv8C,WAGZt0B,GAAG6V,GAAQZ,QAAQkkE,GAAMx7D,MAE9BswS,EAAqB,SAAUvvT,GACjC,IAAI0gI,EAAQC,EAAQ6uL,EAChBC,EAAeC,EACnBhvL,EAAS1gI,EAAEogI,QAAUP,EACrBc,EAAS3gI,EAAEqgI,QAAUP,EACrBniG,EAAQ+iG,EAAS4tL,EAAe,GAAK3iE,EACrCrxN,EAASqmG,EAAS2tL,EAAe,GAAKG,EACtC9wR,EAAQA,EAAQ,EAAI,EAAIA,EACxBrD,EAASA,EAAS,EAAI,EAAIA,EAExBk1R,EADEphG,EAAQuzC,KAA8D,IAA9CrwK,GAASs9M,yBAAyBz8N,IAC5Cw7O,GAAGG,gBAAgB9tT,GAEpB2tT,GAAGG,gBAAgB9tT,GAEhCwvT,IACE9hR,EAAIgzF,GAAUhzF,EAAIizF,IACpBrmG,EAASmzD,EAAM9vD,EAAQw2M,GACvBx2M,EAAQ8vD,EAAMnzD,EAAS65M,KAEvBx2M,EAAQ8vD,EAAMnzD,EAAS65M,GACvB75M,EAASmzD,EAAM9vD,EAAQw2M,KAG3Br9N,EAAIu5M,UAAUg/F,EAAgBlB,GAAmB,CAC/CxwR,MAAOA,EACPrD,OAAQA,IAEVm1R,EAAgBnB,EAAetb,SAAS/0S,EAAIyiI,EAC5CgvL,EAAgBpB,EAAetb,SAAS/7R,EAAI0pH,EAC5C8uL,EAAgBA,EAAgB,EAAIA,EAAgB,EACpDC,EAAgBA,EAAgB,EAAIA,EAAgB,EACpD54S,EAAIu5M,UAAU+9F,EAAc,CAC1BvzR,KAAM40R,EACN30R,IAAK40R,EACL50N,QAAS,UAEXszN,EAAah4S,UAAYunB,EAAQ,YAAcrD,EAC3Cg0R,EAAe,GAAK,GAAKH,EAAiBnwR,aAAeL,GAC3D7mB,EAAI6yL,SAASwkH,EAAkB,OAAQI,GAAgB5iE,EAAShuN,IAE9D2wR,EAAe,GAAK,GAAKH,EAAiBlwR,cAAgB3D,GAC5DxjB,EAAI6yL,SAASwkH,EAAkB,MAAOK,GAAgBC,EAASn0R,IAEjEomG,EAASquL,EAAY1vL,YAAcsvL,EACnChuL,EAASouL,EAAYzvL,aAAesvL,EAChCluL,EAASC,IAAW,GACtB7pH,EAAIu5M,UAAU+9F,EAAc,CAC1BvzR,KAAM40R,EAAgB/uL,EACtB5lG,IAAK40R,EAAgB/uL,IAGpB+tL,IACHryE,GAAsBlqK,EAAQwvL,EAAahW,EAAQ8iE,GACnDC,GAAgB,IAGhBiB,EAAiB,WACnBjB,GAAgB,EAChB,IAAIkB,EAAc,SAAUxrT,EAAMrG,GAC5BA,IACE4jQ,EAAYnsO,MAAMpxB,KAAU+tE,EAAOlhE,OAAO8tG,QAAQ4iJ,EAAYj3O,SAASlS,cAAepU,GACxF0S,EAAI6yL,SAAS0lH,EAAgB1tD,GAAcv9P,EAAMrG,GAEjD+Y,EAAI84L,UAAUy/G,EAAgB1tD,GAAcv9P,EAAMrG,KAIxD6xT,EAAY,QAASjyR,GACrBiyR,EAAY,SAAUt1R,GACtBxjB,EAAIkmB,OAAO6xR,EAAa,YAAaU,GACrCz4S,EAAIkmB,OAAO6xR,EAAa,UAAWc,GAC/Bb,IAAiBD,IACnB/3S,EAAIkmB,OAAO8xR,EAAc,YAAaS,GACtCz4S,EAAIkmB,OAAO8xR,EAAc,UAAWa,IAEtC74S,EAAI4S,OAAOykS,GACXr3S,EAAI4S,OAAO0kS,GACXyB,EAAeluD,GACfrlB,GAAkBnqK,EAAQwvL,EAAahkO,EAAOrD,GAC9CxjB,EAAI84L,UAAU+xD,EAAa,QAAS7qP,EAAIukL,UAAUsmE,EAAa,UAC/DxvL,EAAOogB,eAELs9N,EAAiB,SAAU1jJ,GAC7B,IAAI5sI,EAAUuwR,EAAaC,EAAc/vT,EAAGk/B,EAC5C8wR,IACAC,IACA1wR,EAAWzoB,EAAI85J,OAAOzE,EAAW4iJ,GACjCR,EAAehvR,EAASthC,EACxBuwT,EAAejvR,EAAStoB,EACxBioB,EAAOitI,EAAU9xI,wBACjBy1R,EAAc5wR,EAAKvB,OAASuB,EAAKtB,MAAQsB,EAAKrE,KAC9Ck1R,EAAe7wR,EAAK5E,QAAU4E,EAAKrB,OAASqB,EAAKpE,IAC7C6mO,IAAgBx1F,IAClBw1F,EAAcx1F,EACdxuI,EAAQrD,EAAS,GAEnBt6B,EAAImyE,EAAOqf,KAAK,iBAAkB,CAAEtoF,OAAQijK,IACxCmjJ,EAAYnjJ,KAAensK,EAAE8/K,qBAC/B79K,EAAKosT,GAAe,SAAU1xR,EAAQv4B,GACpC,IAAI67H,EACAgrH,EAAY,SAAUjrP,GACxB6/H,EAAS7/H,EAAEogI,QACXN,EAAS9/H,EAAEqgI,QACXsrH,EAAS0jE,EAAgB1tD,GAAa3jO,YACtCywR,EAASY,EAAgB1tD,GAAa1jO,aACtCk2M,EAAQs6E,EAAS9iE,EACjB2iE,EAAiB3xR,EACjBA,EAAOq2Q,SAAW,CAChB/0S,EAAG6xT,EAAcnzR,EAAO,GAAK4xR,EAC7Bt3S,EAAG84S,EAAepzR,EAAO,GAAK6xR,GAEhCG,EAAmBI,EAAY1vL,YAC/BuvL,EAAoBG,EAAYzvL,aAChC6uL,EAAmBxsD,EAAYn3O,WAAU,GACzC1T,EAAIo2J,SAASihJ,EAAkB,uBAC/Br3S,EAAI84L,UAAUu+G,EAAkB,iBAAkB,OAClDA,EAAiBj2K,iBAAkB,EACnCi2K,EAAiB+B,aAAc,EAC/Bp5S,EAAIu5M,UAAU89F,EAAkB,CAC9BtzR,KAAM0zR,EACNzzR,IAAK0zR,EACLjuO,OAAQ,IAEV4tO,EAAiB1iS,gBAAgB,qBACjCsjS,EAAY7lS,YAAYilS,GACxBr3S,EAAI5U,KAAK2sT,EAAa,YAAaU,GACnCz4S,EAAI5U,KAAK2sT,EAAa,UAAWc,GAC7Bb,IAAiBD,IACnB/3S,EAAI5U,KAAK4sT,EAAc,YAAaS,GACpCz4S,EAAI5U,KAAK4sT,EAAc,UAAWa,IAEpCvB,EAAet3S,EAAI2d,IAAIs6R,EAAa,MAAO,CACzC,MAAS,oBACT,iBAAkB,OACjBpjE,EAAS,YAAc8iE,IAE5BxuL,EAAYnpH,EAAI9O,IAAI,kBAAoB5D,GACpC67H,GACFnpH,EAAI4S,OAAOu2G,GAEbA,EAAYnpH,EAAI2d,IAAIs6R,EAAa,MAAO,CACtC,GAAM,kBAAoB3qT,EAC1B,iBAAkB,MAClB,MAAS,mBACT,cAAgB,EAChB,MAAS,UAAYA,EAAO,iCAEf,KAAX60Q,GAAIpgQ,KACNonH,EAAUiY,iBAAkB,GAE9BphI,EAAI5U,KAAK+9H,EAAW,aAAa,SAAUjgI,GACzCA,EAAE08E,2BACF18E,EAAEklB,iBACF+lO,EAAUjrP,MAEZ28B,EAAO89C,IAAMwlD,EACbnpH,EAAIu5M,UAAUpwF,EAAW,CACvBplG,KAAMi1R,EAAcnzR,EAAO,GAAK4xR,EAAetuL,EAAUhpG,YAAc,EACvE6D,IAAKi1R,EAAepzR,EAAO,GAAK6xR,EAAevuL,EAAU1lG,aAAe,OAI5Ey1R,IAEFruD,EAAY52O,aAAa,oBAAqB,MAE5CilS,EAAiB,WACnB,IAAI5rT,EAAM67H,EAKV,IAAK77H,KAJL6rT,IACItuD,GACFA,EAAYl2O,gBAAgB,qBAEjB4iS,EACXpuL,EAAYnpH,EAAI9O,IAAI,kBAAoB5D,GACpC67H,IACFnpH,EAAIkmB,OAAOijG,GACXnpH,EAAI4S,OAAOu2G,KAIbkwL,EAAmB,SAAUnwT,GAC/B,IAAIowT,EAAUC,EACVC,EAAiB,SAAU55S,EAAMsR,GACnC,GAAItR,EACF,GACE,GAAIA,IAASsR,EACX,OAAO,QAEFtR,EAAOA,EAAK6J,aAGrBmuS,GAAiBv8O,EAAO2yD,UAG5B7iI,EAAK6U,EAAIq9E,OAAO,iDAAiD,SAAUqvC,GACzEA,EAAI/3G,gBAAgB,wBAEtB4kS,EAAwB,cAAXrwT,EAAEsE,KAAuBtE,EAAEkJ,OAAS2sC,EAAUwkC,UAC3Dg2O,EAAav5S,EAAIi2L,EAAEsjH,GAAY3vS,QAAQ,6BAA6B,GAChE4vS,EAAeD,EAAYtB,KAC7BwB,IACAH,EAAWv6Q,EAAUd,UAAS,GAC1Bu7Q,EAAeF,EAAUC,IAAeC,EAAez6Q,EAAU0C,QAAO,GAAO83Q,IACjFR,EAAeQ,GAInBL,MAEEQ,EAA+B,SAAU/1O,GAC3C,OAAOszO,GAAyBE,GAAuB97O,EAAOv8C,UAAW6kD,KAEvEw1O,EAA2B,WAC7B,IAAK,IAAIjiJ,KAAUqgJ,EAAe,CAChC,IAAI1xR,EAAS0xR,EAAcrgJ,GACvBrxI,EAAO89C,MACT3jE,EAAIkmB,OAAOL,EAAO89C,YACX99C,EAAO89C,OAIhB81O,EAAqB,WACvB,IACEp+O,EAAOmI,SAAS+Y,YAAY,wBAAwB,GAAO,GAC3D,MAAO0T,MAGX50B,EAAOpjC,GAAG,QAAQ,WAEhB,GADAwhR,IACIt3C,GAAI79P,QAAQ3B,QAAUw/P,GAAI79P,QAAQ7B,SAAU,CAC9C44D,EAAOpjC,GAAG,mBAAmB,SAAU/uC,GACrC,IAAIkJ,EAASlJ,EAAEkJ,OAAQwhB,EAAWxhB,EAAOwhB,SACpCgkS,IAAiB,mBAAmB92S,KAAK8S,IAAc8lS,EAA6BtnT,KACtE,IAAblJ,EAAE4oF,QACJzW,EAAOt8B,UAAUs+C,OAAOjrF,EAAqB,UAAbwhB,GAEnB,cAAX1qB,EAAEsE,MACJ6tE,EAAOogB,kBAIb,IAAIk+N,EAA0B,SAAUzwT,GACtC,IAAI0wT,EAAgB,SAAUh6S,GAC5BkiQ,GAAMv/G,iBAAiBlnF,GAAQ,WAC7B,OAAOA,EAAOt8B,UAAUs+C,OAAOz9E,OAGnC,GAAI85S,EAA6BxwT,EAAEkJ,QAGjC,OAFAlJ,EAAEklB,sBACFwrS,EAAc1wT,EAAEkJ,QAGd,mBAAmB0O,KAAK5X,EAAEkJ,OAAOwhB,YACnC1qB,EAAEklB,iBACuB,QAArBllB,EAAEkJ,OAAOkyL,SACXs1H,EAAc1wT,EAAEkJ,UAItB4N,EAAI5U,KAAK6sT,EAAa,kBAAmB0B,GACzCt+O,EAAOpjC,GAAG,UAAU,WAClB,OAAOj4B,EAAIkmB,OAAO+xR,EAAa,kBAAmB0B,MAGtD,IAAIE,EAA4B/3C,GAAMp/L,UAAS,SAAUx5E,GAClDmyE,EAAOy+O,WACVT,EAAiBnwT,MAGrBmyE,EAAOpjC,GAAG,mEAAoE4hR,GAC9Ex+O,EAAOpjC,GAAG,wBAAwB,SAAU/uC,GACtC2hQ,GAAwC,UAAzBA,EAAYj3O,UAC7BimS,EAA0B3wT,MAG9BmyE,EAAOpjC,GAAG,YAAaihR,GACvB79O,EAAOpjC,GAAG,wBAAyBqgR,GAAwB,MAE7Dj9O,EAAOpjC,GAAG,SAAUkhR,GACpB,IAAIpvN,EAAU,WACZ8gK,EAAcwsD,EAAmB,MAEnC,MAAO,CACLmB,YAAaA,EACbO,eAAgBA,EAChBG,eAAgBA,EAChBG,iBAAkBA,EAClBtvN,QAASA,IAIb,SAASnnE,GAAWt1B,EAAMu1B,GACxB,IAAIhkB,EAAM,SAAUqJ,EAAS4a,GAC3B,IAAKh1B,EAASg1B,KAAOA,EAAEhxB,MAAM,YAC3B,MAAM,IAAIjK,MAAMyF,EAAO,wDAA0Dw1B,GAEnF,IAAI9iB,EAAMkI,EAAQlI,MACdye,GAAYze,KACdA,EAAI0e,MAAMpxB,GAAQw1B,EAAI,OAGtB5xB,EAAM,SAAUgX,GAClB,IAAI1e,EAAIq5B,EAAU3a,GAClB,GAAI1e,GAAK,GAAW,OAANA,EAAY,CACxB,IAAI81B,EAAME,GAAMtX,EAAS5a,GACzB,OAAOy1B,WAAWzD,IAAQ,EAE5B,OAAO91B,GAELgqB,EAAWtiB,EACX8xB,EAAY,SAAU9a,EAASwF,GACjC,OAAOne,EAAMme,GAAY,SAAUpe,EAAK0vB,GACtC,IAAIhrB,EAAMwrB,GAAMtX,EAAS8W,GACrB/3B,OAAgB8D,IAARiJ,EAAoB,EAAIivB,SAASjvB,EAAK,IAClD,OAAOkvB,MAAMj8B,GAASqI,EAAMA,EAAMrI,IACjC,IAEDk8B,EAAM,SAAUjb,EAASjhB,EAAOymB,GAClC,IAAI0V,EAAuBJ,EAAU9a,EAASwF,GAC1C2V,EAAcp8B,EAAQm8B,EAAuBn8B,EAAQm8B,EAAuB,EAChF,OAAOC,GAET,MAAO,CACLxkB,IAAKA,EACL3N,IAAKA,EACLsiB,SAAUA,EACVwP,UAAWA,EACXG,IAAKA,GAIT,IAAI8B,GAAQrC,GAAU,UAAU,SAAU1a,GACxC,IAAIlI,EAAMkI,EAAQlI,MAClB,OAAO4e,GAAO1W,GAAWlI,EAAIujB,wBAAwBC,OAASxjB,EAAIyjB,gBAEhE6C,GAAQ,SAAUpe,GACpB,OAAO+c,GAAM/zB,IAAIgX,IAGfqf,GAAS,SAAUC,EAAYtoB,GACjC,IAAIuoB,EAAQD,EAAWE,KAAKxoB,GAC5B,OAAOuoB,EAAMl9B,KAAKvD,EAAS,KAAK,SAAUT,GACxC,IAAI2qB,EAASsW,EAAW1W,MAAMvqB,GAC1BqyB,EAAO2O,GAAOC,EAAYtW,GAC9B,MAAO,CAAC3qB,GAAGkB,OAAOmxB,OAGlB+O,GAAS,SAAUzf,EAASsf,GAC9B,IAAI9W,EAAI8W,EAAW1W,MAAM5I,GACzB,OAAOqf,GAAOC,EAAY9W,IAGxBgX,GAAO,SAAUxoB,GACnB,IAAIgJ,EAAUhJ,EAAIc,QAAU5Z,EAAW+Y,SAAW/S,EAAOrC,OAASqC,EAAOD,KAAK+S,EAAIc,MAAMiR,YAAY4W,cACpG,OAAO3f,EAAQhd,IAAImV,GAAQZ,UAEzB0T,GAAU,SAAUjL,GACtB,OAAO4I,GAAM5I,IAGX4f,GAA0Bx/B,OAAOsD,OAAO,CACxCypB,UAAW,KACXqS,KAAMA,GACN5W,MAAOqC,KAGP4U,GAAS,SAAU7f,GACrB,IAAIhJ,EAAMmB,GAAQZ,QAAQrZ,EAAW+Y,UACjC8nB,EAAShU,GAAM/T,GACf8oB,EAASL,GAAOzf,EAAS4f,IACzBG,EAASjD,GAAS9c,GAClB1e,EAAI6F,EAAM24B,GAAQ,SAAU97B,EAAGvC,GACjC,IAAIu+B,EAAMlD,GAASr7B,GACnB,MAAO,CACLo6B,KAAM73B,EAAE63B,KAAOmE,EAAInE,OACnBC,IAAK93B,EAAE83B,IAAMkE,EAAIlE,SAElB,CACDD,KAAM,EACNC,IAAK,IAEP,OAAOE,GAAS16B,EAAEu6B,KAAOkE,EAAOlE,OAASkD,EAAOlD,OAAQv6B,EAAEw6B,IAAMiE,EAAOjE,MAAQiD,EAAOjD,QAGpF+1R,GAAqB,SAAU7xS,GACjC,MAAyB,aAAlB5a,GAAK4a,IAEV8xS,GAA0B,SAAU3+O,EAAQxtD,GAC9C,IAAIosS,EAAc5+O,EAAOqf,KAAK,iBAAkB7sE,GAChD,OAAOosS,EAAYjxI,sBAEjBkxI,GAA+B,SAAU7+O,EAAQxtD,GACnDwtD,EAAOqf,KAAK,sBAAuB7sE,IAEjCib,GAAU,SAAU5gB,EAAS+f,GAC/B,IAAIjV,EAAa3B,GAASnJ,GAC1B,GAA0B,IAAtB8K,EAAWlsB,QAAgBizT,GAAmB7xS,GAChD,MAAO,CACLA,QAASA,EACT+f,OAAQA,GAEL,GAAIA,EAASjV,EAAWlsB,SAAWizT,GAAmB/mS,EAAWiV,IACtE,MAAO,CACL/f,QAAS8K,EAAWiV,GACpBA,OAAQ,GAGV,IAAI53B,EAAO2iB,EAAWA,EAAWlsB,OAAS,GAC1C,OAAIizT,GAAmB1pT,GACd,CACL6X,QAASA,EACT+f,OAAQA,GAGS,QAAf36B,GAAK+C,GACA,CACL6X,QAAS7X,EACT43B,OAAQ,GAEDlU,GAAO1jB,GACT,CACL6X,QAAS7X,EACT43B,OAAQ9C,GAAM90B,GAAMvJ,QAGf,CACLohB,QAAS7X,EACT43B,OAAQ5W,GAAShhB,GAAMvJ,SAM7BqzT,GAAa,SAAUjyS,EAASkyS,GAClC,IAAItlR,EAAMxQ,GAASpc,GACfsb,EAAS8C,GAAMpe,GACnB,MAAO,CACLA,QAASA,EACT6e,OAAQ+N,EAAI9Q,MAAQR,EACpBA,OAAQA,EACRsR,IAAKA,EACLulR,QAASD,IAGTE,GAAe,SAAUpyS,EAAS+f,GACpC,IAAIy5Q,EAAa54Q,GAAQ5gB,EAAS+f,GAC9B4xE,EAAOx5F,GAAQtB,SAAS,8BAAgCktR,GAAKH,KAAO,WAExE,OADAn6Q,GAAO+vR,EAAWx5R,QAAS2xF,GACpBsgN,GAAWtgN,GAAM,WACtB,OAAOjnF,GAAOinF,OAGd0gN,GAAgB,SAAUryS,GAC5B,OAAOiyS,GAAW95S,GAAQZ,QAAQyI,GAAU7hB,IAE1Cm0T,GAAa,SAAUn/O,EAAQ90E,EAAGy4C,EAAKwgO,GACzCi7C,GAAap/O,GAAQ,SAAUq/O,EAAIz9I,GACjC,OAAO09I,GAAgBt/O,EAAQ90E,EAAGy4C,EAAKwgO,KACtCxgO,IAED47Q,GAAmB,SAAUv/O,EAAQn8D,EAAK3Y,EAAGqrB,EAAQ4tP,GACvD,IAAI3xP,EAAO,CACT81D,IAAK/xD,EAAO1J,QAAQlI,MACpBw/P,WAAYA,GAEd,IAAIw6C,GAAwB3+O,EAAQxtD,GAApC,CAGA,IAAI6W,EAAYzR,GAAM/T,GAAK8kB,MAC3Bz9B,EAAE2Y,EAAKwlB,EAAW9S,EAAQ4tP,GAC1B06C,GAA6B7+O,EAAQxtD,KAEnC8sS,GAAkB,SAAUt/O,EAAQ90E,EAAGy4C,EAAKwgO,GAC9C,IAAI3gP,EAAOxe,GAAQZ,QAAQ47D,EAAOv8C,WAC9B5f,EAAMmB,GAAQZ,QAAQ47D,EAAOmI,UACjCtjD,GAAOrB,GACP,IAAIjN,EAAS0oS,GAAaj6S,GAAQZ,QAAQu/B,EAAIC,gBAAiBD,EAAIwB,aACnEo6Q,GAAiBv/O,EAAQn8D,EAAK3Y,EAAGqrB,EAAQ4tP,GACzC5tP,EAAOyoS,WAELrsM,GAAc,SAAU3yC,EAAQnzD,EAAS3hB,EAAGi5Q,GAC9C,IAAItgQ,EAAMmB,GAAQZ,QAAQ47D,EAAOmI,UACjCo3O,GAAiBv/O,EAAQn8D,EAAK3Y,EAAGg0T,GAAcryS,GAAUs3P,IAEvDi7C,GAAe,SAAUp/O,EAAQ90E,EAAGy4C,GACtC,IAAI67Q,EAAe77Q,EAAIC,eACnBuB,EAAcxB,EAAIwB,YAClBs6Q,EAAa97Q,EAAIyB,aACjBC,EAAY1B,EAAI0B,UACpBn6C,EAAE8Z,GAAQZ,QAAQo7S,GAAex6S,GAAQZ,QAAQq7S,IACjD,IAAItqB,EAASn1N,EAAOr7D,IAAImlE,YACxBqrN,EAAOhxP,SAASq7Q,EAAcr6Q,GAC9BgwP,EAAO3wP,OAAOi7Q,EAAYp6Q,GAC1B26B,EAAOt8B,UAAUm8H,OAAOl8H,IAEtB+7Q,GAAiB,SAAUnpS,EAAQg3I,EAAY42G,EAAYtgQ,GAC7D,IAAI41B,EAAMljB,EAAOkjB,IACjB,GAAI0qO,EACFh5O,GAAGsO,EAAI/Q,OAAQ+Q,EAAI9Q,MAAO9kB,OACrB,CACL,IAAIiB,EAAI20B,EAAI9Q,MAAQ4kI,EAAah3I,EAAO4R,OACxCgD,GAAGsO,EAAI/Q,OAAQ5jB,EAAGjB,KAGlB87S,GAAqB,SAAU97S,EAAKwlB,EAAWkkI,EAAYh3I,EAAQ4tP,GACrE,IAAIy7C,EAAiBryJ,EAAalkI,EAC9BwkI,EAAYt3I,EAAOkjB,IAAI9Q,MACvBmlI,EAAev3I,EAAOmV,OACtBm0R,EAAqB/xJ,EAAeD,GAAaN,EACrD,GAAIM,EAAYxkI,EACdq2R,GAAenpS,EAAQg3I,GAA2B,IAAf42G,EAAsBtgQ,QACpD,GAAIgqJ,EAAY+xJ,EAAgB,CACrC,IAAI57J,EAAQ67J,GAAoC,IAAf17C,GAAsC,IAAfA,EACxDu7C,GAAenpS,EAAQg3I,EAAYvJ,EAAOngJ,QACjCiqJ,EAAe8xJ,IAAmBC,GAC3CH,GAAenpS,EAAQg3I,GAA2B,IAAf42G,EAAqBtgQ,IAGxDi8S,GAAa,SAAUj8S,EAAKwlB,EAAW9S,EAAQ4tP,GACjD,IAAI52G,EAAa1pJ,EAAIc,MAAMiR,YAAY43I,YACvCmyJ,GAAmB97S,EAAKwlB,EAAWkkI,EAAYh3I,EAAQ4tP,IAErD47C,GAAY,SAAUl8S,EAAKwlB,EAAW9S,EAAQ4tP,GAChD,IAAI67C,EAAkBn8S,EAAIc,MAAMiR,YAAY43I,YAC5CmyJ,GAAmB97S,EAAKwlB,EAAW22R,EAAiBzpS,EAAQ4tP,GAC5D,IAAI87C,EAAKvzR,GAAOnW,EAAO1J,SACnBguI,EAAiBlvH,GAAU5gC,EAAWugB,QACtC20S,EAAGt3R,MAAQkyH,EAAe/1I,IAC5Bo/P,GAAS3tP,EAAO1J,SAAwB,IAAfs3P,GAChB87C,EAAGt3R,MAAQkyH,EAAenvH,UACnCw4O,GAAS3tP,EAAO1J,SAAwB,IAAfs3P,IAGzB+7C,GAAkB,SAAUlgP,EAAQr8B,EAAKwgO,GAC3C,OAAOg7C,GAAWn/O,EAAQ8/O,GAAYn8Q,EAAKwgO,IAEzCg8C,GAAoB,SAAUngP,EAAQnzD,EAASs3P,GACjD,OAAOxxJ,GAAY3yC,EAAQnzD,EAASizS,GAAY37C,IAE9Ci8C,GAAiB,SAAUpgP,EAAQr8B,EAAKwgO,GAC1C,OAAOg7C,GAAWn/O,EAAQ+/O,GAAWp8Q,EAAKwgO,IAExCk8C,GAAmB,SAAUrgP,EAAQnzD,EAASs3P,GAChD,OAAOxxJ,GAAY3yC,EAAQnzD,EAASkzS,GAAW57C,IAE7Cm8C,GAAkB,SAAUtgP,EAAQnzD,EAASs3P,GAC/C,IAAIo8C,EAAWvgP,EAAO0C,OAASy9O,GAAoBE,GACnDE,EAASvgP,EAAQnzD,EAASs3P,IAExBq8C,GAAgB,SAAUxgP,EAAQr8B,EAAKwgO,GACzC,IAAIo8C,EAAWvgP,EAAO0C,OAASw9O,GAAkBE,GACjDG,EAASvgP,EAAQr8B,EAAKwgO,IAEpBs8C,GAAiB,CACnBC,sBAAuBJ,GACvBK,oBAAqBH,IAGnBI,GAAgB,SAAUr8S,GAC5B,OAAOyqL,GAAShpD,sBAAsBzhI,IAASyqL,GAAS/oD,uBAAuB1hI,IAE7Es8S,GAAa,SAAUt8S,EAAMsjE,EAAU/0D,GACzC,MAAOvO,GAAQA,IAASsjE,EAAU,CAChC,GAAI/0D,EAAUvO,GACZ,OAAOA,EAETA,EAAOA,EAAK6J,WAEd,OAAO,MAEL0yS,GAAqB,SAAUx2R,EAASC,EAAS1mB,GACnD,IAAIgJ,EAAS82B,EAAKoB,EAalB,GAZAl4B,EAAUhJ,EAAIkB,iBAAiBulB,EAASC,GACxCoZ,EAAM9/B,EAAI2f,KAAKu9R,kBACVl0S,GAA+B,SAApBA,EAAQo8K,UACtBp8K,EAAUhJ,EAAI2f,MAEhBmgB,EAAIq9Q,kBAAkBn0S,GACtBk4B,EAAQj4C,GAAMuD,QAAQszC,EAAIqB,kBAC1BD,EAAQA,EAAMnwC,MAAK,SAAUtG,EAAGuC,GAG9B,OAFAvC,EAAImsB,KAAK8gB,IAAI9gB,KAAKqN,IAAIx5B,EAAEq6B,IAAM4B,EAASj8B,EAAEo9B,OAASnB,IAClD15B,EAAI4pB,KAAK8gB,IAAI9gB,KAAKqN,IAAIj3B,EAAE83B,IAAM4B,EAAS15B,EAAE66B,OAASnB,IAC3Cj8B,EAAIuC,KAETk0C,EAAMt5C,OAAS,EAAG,CACpB8+B,GAAWwa,EAAM,GAAGrZ,OAASqZ,EAAM,GAAGpc,KAAO,EAC7C,IAGE,OAFAgb,EAAIs9Q,YAAY32R,EAASC,GACzBoZ,EAAIk1B,UAAS,GACNl1B,EACP,MAAOixD,KAGX,OAAO,MAELssN,GAAgC,SAAUv9Q,EAAKkkC,GACjD,IAAIs5O,EAAgBx9Q,GAAOA,EAAIw9Q,cAAgBx9Q,EAAIw9Q,gBAAkB,KACrE,OAAOnyH,GAAS/oD,uBAAuB46K,GAAWM,EAAet5O,EAAU+4O,KAAkB,KAAOj9Q,GAElGu4M,GAAc,SAAU5xN,EAASC,EAAS1mB,GAC5C,IAAI8/B,EAAKkE,EACLu5Q,EAAWv9S,EACf,GAAIu9S,EAASvlE,uBACXh0M,EAAQu5Q,EAASvlE,uBAAuBvxN,EAASC,GAC7Csd,IACFlE,EAAM9/B,EAAI8gC,cACVhB,EAAIQ,SAAS0D,EAAMkvJ,WAAYlvJ,EAAMjb,QACrC+W,EAAIk1B,UAAS,SAEV,GAAIh1D,EAAIi4O,oBACbn4M,EAAM9/B,EAAIi4O,oBAAoBxxN,EAASC,QAClC,GAAI62R,EAAS59R,KAAKu9R,gBAAiB,CACxCp9Q,EAAMy9Q,EAAS59R,KAAKu9R,kBACpB,IACEp9Q,EAAIs9Q,YAAY32R,EAASC,GACzBoZ,EAAIk1B,UAAS,GACb,MAAO+7B,GACPjxD,EAAMm9Q,GAAmBx2R,EAASC,EAAS1mB,GAE7C,OAAOq9S,GAA8Bv9Q,EAAK9/B,EAAI2f,MAEhD,OAAOmgB,GAEL09Q,GAAsB,CAAEz8S,UAAWs3O,IAEnColE,GAAgB,SAAUthP,EAAQx6B,GACpC,OAAO31C,EAAI21C,GAAQ,SAAUlyC,GAC3B,IAAIwtG,EAAM9gC,EAAOqf,KAAK,oBAAqB,CAAE/rF,MAAOA,IACpD,OAAOwtG,EAAIxtG,QAAUA,EAAQwtG,EAAIxtG,MAAQA,MAGzCiuT,GAAqB,CAAED,cAAeA,IAEtCh0H,GAAe,SAAUp2K,EAAUtT,GACrC,IAAIC,EAAMD,GAAS7Y,EAAW+Y,SAC1BkU,EAAWnU,EAAIoU,yBAInB,OAHAnoB,EAAKonB,GAAU,SAAUrK,GACvBmL,EAASjB,YAAYlK,EAAQlI,UAExBK,GAAQZ,QAAQ4T,IAGrBwpS,GAAW,SAAUpuT,GACvB,OAAOA,EAAGN,MAAM,GAAI,IAElB2uT,GAAiB,SAAUh3S,EAAOg+B,EAAM31B,GAC1C,OAAI/E,GAAW06B,EAAMh+B,GACZ+2S,GAASjgK,GAAQ92I,GAAO,SAAU69D,GACvC,OAAOx1D,EAAUw1D,IAAQ15E,GAAG05E,EAAK7/B,OAG5B,IAGPi5Q,GAAY,SAAUj3S,EAAOg+B,GAC/B,OAAOg5Q,GAAeh3S,EAAOg+B,EAAM98C,GAAS,KAE1Cg2T,GAAiB,SAAUl3S,EAAOg+B,GACpC,MAAO,CAACh+B,GAAOre,OAAOs1T,GAAUj3S,EAAOg+B,KAErCm5Q,GAAU,CACZl7B,aAAc+6B,GACdlgK,QAASmgK,GACTC,eAAgBA,IAGdE,GAAe,SAAUl+Q,GAC3B,IAAIokL,EAAKpkL,EAAIC,eAAgBqxP,EAAKtxP,EAAIwB,YACtC,OAAI6pJ,GAASt2K,OAAOqvM,GACJ,IAAPktE,EAAWlkS,EAAOP,KAAKwU,GAAQZ,QAAQ2jN,IAAOh3N,EAAOrC,OAErDqC,EAAOD,KAAKi3N,EAAG5jN,WAAW8wR,IAAKplS,IAAImV,GAAQZ,UAGlD09S,GAAa,SAAUn+Q,GACzB,IAAIqxP,EAAKrxP,EAAIyB,aAAc8vP,EAAKvxP,EAAI0B,UACpC,OAAI2pJ,GAASt2K,OAAOs8Q,GACXE,IAAOF,EAAGxiR,KAAK/mB,OAASsF,EAAOP,KAAKwU,GAAQZ,QAAQ4wR,IAAOjkS,EAAOrC,OAElEqC,EAAOD,KAAKkkS,EAAG7wR,WAAW+wR,EAAK,IAAIrlS,IAAImV,GAAQZ,UAGtD29S,GAAmB,SAAUx9S,GAC/B,OAAO6R,GAAW7R,GAAMrV,KAAKvD,EAAS,CAAC4Y,KAAQ,SAAU0R,GACvD,MAAO,CAAC1R,GAAMnY,OAAO21T,GAAiB9rS,QAGtC+rS,GAAkB,SAAUz9S,GAC9B,OAAOgpL,GAAUhpL,GAAMrV,KAAKvD,EAAS,CAAC4Y,KAAQ,SAAU0R,GACtD,MAAoB,OAAhBhkB,GAAKgkB,GACAqrM,GAAYrrM,GAAOpmB,KAAI,SAAU8mB,GACtC,MAAO,CAACpS,GAAMnY,OAAO41T,GAAgBrrS,OACpCtnB,MAAM,IAEF,CAACkV,GAAMnY,OAAO41T,GAAgB/rS,QAIvCgsS,GAAyB,SAAU35O,EAAK3kC,GAC1C,OAAOgY,GAAMkmQ,GAAal+Q,GAAMm+Q,GAAWn+Q,IAAM,SAAUm4G,EAAWi8C,GACpE,IAAIttL,EAAQtW,EAAK4tT,GAAiBz5O,GAAMv8E,EAAM6C,GAAIktJ,IAC9CvkC,EAAMpjH,EAAK6tT,GAAgB15O,GAAMv8E,EAAM6C,GAAImpM,IAC/C,OAAOttL,EAAMrb,UAAYmoH,EAAInoH,YAC5BC,OAAM,IAEP6yT,GAAiB,SAAUv9S,EAAKg/B,EAAKp/B,EAAMkG,GAC7C,IAAIg+B,EAAOlkC,EAAM61L,EAAS,IAAI0sF,GAAWviR,EAAMkkC,GAC3C8nO,EAAsB5rQ,EAAI7F,OAAOq7L,sBACrC,EAAG,CACD,GAAsB,IAAlB51L,EAAKwI,UAAwD,IAAtCjgB,GAAM+d,KAAKtG,EAAK0hC,WAAWx6C,OAMpD,YALIgf,EACFk5B,EAAIQ,SAAS5/B,EAAM,GAEnBo/B,EAAIa,OAAOjgC,EAAMA,EAAK0hC,UAAUx6C,SAIpC,GAAI8kR,EAAoBhsQ,EAAKgU,YAAc,YAAY9S,KAAKlB,EAAKgU,UAU/D,YATI9N,EACFk5B,EAAIS,eAAe7/B,GAEG,OAAlBA,EAAKgU,SACPorB,EAAIY,aAAahgC,GAEjBo/B,EAAIc,YAAYlgC,UAKfA,EAAOkG,EAAQ2vL,EAAOj5L,OAASi5L,EAAO1pC,QACzB,SAAlBjoH,EAAKlwB,WACH9N,EACFk5B,EAAIQ,SAASsE,EAAM,GAEnB9E,EAAIa,OAAOiE,EAAMA,EAAKtkC,WAAW1Y,UAInC02T,GAAe,SAAUniP,GAC3B,IAAIr4B,EAAMq4B,EAAOt8B,UAAU0+Q,SAC3B,OAAOz6Q,GAAOA,EAAIX,WAAa,GAG7Bq7Q,GAAa3tS,GAAU,UAAW,QAAS,QAC3Ci9N,GAAWj9N,GAAU,UAAW,SAChC4tS,GAAe5tS,GAAU,IAAK,KAC9Bu9M,GAAU,SAAU/nD,EAAIp0K,GAC1B,IAAIlK,EAAQg8B,SAASlF,GAAMwnJ,EAAIp0K,GAAM,IACrC,OAAO+xB,MAAMj8B,GAAS,EAAIA,GAExB22T,GAAU,SAAUvhL,EAAOl1I,EAAGgZ,EAAGowN,EAAIhrD,GAIvC,IAHA,IAAIo5C,EAAU2O,GAAQ/nD,EAAI,WACtBq5C,EAAU0O,GAAQ/nD,EAAI,WACtBr+G,EAAOm1E,EAAMn1E,OACR22P,EAAK19S,EAAG09S,EAAK19S,EAAIw+M,EAASk/F,IAAM,CAClC32P,EAAK22P,KACR32P,EAAK22P,GAAM7wE,GAASl6O,GAAKy9N,GAAK,KAEhC,IAAK,IAAIutF,EAAK32T,EAAG22T,EAAK32T,EAAIy3N,EAASk/F,IAAM,CACvC,IAAI/oO,EAAQ7tB,EAAK22P,GAAI9oO,QACrBA,EAAM+oO,GAAMD,IAAO19S,GAAK29S,IAAO32T,EAAIo+K,EAAK5yK,GAAQ4yK,MAIlDw4I,GAAa,SAAU1hL,EAAOl1I,EAAGgZ,GACnC,IAAI+mD,EAAOm1E,EAAMn1E,OACb6tB,EAAQ7tB,EAAK/mD,GAAK+mD,EAAK/mD,GAAG40E,QAAU,GACxC,QAASA,EAAM5tF,IAEb62T,GAAa,SAAU3hL,EAAOl1I,EAAGgZ,GACnC,MAAO49S,GAAW1hL,EAAOl1I,EAAGgZ,GAC1BhZ,IAEF,OAAOA,GAEL2pH,GAAW,SAAU5pD,GACvB,OAAO33D,EAAM23D,GAAM,SAAU53D,EAAKuyD,GAChC,OAAOA,EAAIkzB,QAAQjuF,OAASwI,EAAMuyD,EAAIkzB,QAAQjuF,OAASwI,IACtD,IAED2uT,GAAiB,SAAU5hL,EAAOn0H,GAEpC,IADA,IAAIg/C,EAAOm1E,EAAMn1E,OACR/mD,EAAI,EAAGA,EAAI+mD,EAAKpgE,OAAQqZ,IAE/B,IADA,IAAI40E,EAAQ7tB,EAAK/mD,GAAG40E,QACX5tF,EAAI,EAAGA,EAAI4tF,EAAMjuF,OAAQK,IAChC,GAAI8C,GAAG8qF,EAAM5tF,GAAI+gB,GACf,OAAO9b,EAAOP,KAAK8xT,GAAax2T,EAAGgZ,IAIzC,OAAO/T,EAAOrC,QAEZm0T,GAAc,SAAU7hL,EAAO8hL,EAAIC,EAAInuN,EAAIouN,GAG7C,IAFA,IAAIruF,EAAU,GACV9oK,EAAOm1E,EAAMn1E,OACR/mD,EAAIi+S,EAAIj+S,GAAKk+S,EAAIl+S,IAAK,CAC7B,IAAI40E,EAAQ7tB,EAAK/mD,GAAG40E,QAChB5mF,EAAQgwT,EAAKluN,EAAKlb,EAAM5mF,MAAMgwT,EAAIluN,EAAK,GAAKlb,EAAM5mF,MAAM8hG,EAAIkuN,EAAK,GACrEnuF,EAAQ1hO,KAAK0+O,GAAS9lL,EAAK/mD,GAAG+H,UAAW/Z,IAE3C,OAAO6hO,GAELsuF,GAAW,SAAUjiL,EAAO6/J,EAAUmC,GACxC,IAAI8f,EAAKjiB,EAAS/0S,IAAKi3T,EAAKliB,EAAS/7R,IACjC8vF,EAAKouM,EAAOl3S,IAAKk3T,EAAKhgB,EAAOl+R,IAC7B6vN,EAAUouF,EAAKC,EAAKH,GAAY7hL,EAAO8hL,EAAIC,EAAInuN,EAAIouN,GAAMH,GAAY7hL,EAAO8hL,EAAIE,EAAIpuN,EAAImuN,GAC5F,OAAOV,GAAWrhL,EAAMn0H,UAAW4oG,GAASk/G,GAAUA,IAEpDuuF,GAAiB,SAAUliL,EAAOn1E,GACpC,IAAIs3P,EAAe7rT,GAAQ0pI,EAAMn0H,WAC7B6kO,EAAY1sO,GAAQX,QAAQ,SAGhC,OAFA8S,GAASu6N,EAAW7lL,GACpBj1C,GAAOusS,EAAczxE,GACdyxE,GAELC,GAAqB,SAAUpiL,GACjC,OAAOnxI,EAAImxI,EAAMn1E,QAAQ,SAAUrF,GACjC,IAAIkzB,EAAQ7pF,EAAI22D,EAAIkzB,SAAS,SAAU1vB,GACrC,IAAIkgH,EAAKzyK,GAAKuyD,GAGd,OAFA3wC,GAAS6wJ,EAAI,WACb7wJ,GAAS6wJ,EAAI,WACNA,KAELgrD,EAAK59N,GAAQkvD,EAAI35C,WAErB,OADAsK,GAAS+9M,EAAIx7I,GACNw7I,MAGPmuF,GAAY,SAAUxyE,GACxB,IAAI7vG,EAAQqhL,GAAW/qT,GAAQu5O,GAAW,EAAG,IAM7C,OALA/gP,EAAKw+E,GAAcuiK,EAAU,OAAO,SAAU3b,EAAIpwN,GAChDhV,EAAKw+E,GAAc4mJ,EAAI,UAAU,SAAUhrD,EAAIp+K,GAC7Cy2T,GAAQvhL,EAAO2hL,GAAW3hL,EAAOl1I,EAAGgZ,GAAIA,EAAGowN,EAAIhrD,SAG5Cm4I,GAAWrhL,EAAMn0H,UAAW4oG,GAASurB,EAAMn1E,QAASm1E,EAAMn1E,SAE/Dy3P,GAAQ,SAAUtiL,GACpB,OAAOkiL,GAAeliL,EAAOoiL,GAAmBpiL,KAE9CuiL,GAAa,SAAUviL,EAAOw+K,EAAcC,GAC9C,OAAOmD,GAAe5hL,EAAOw+K,GAAczvT,MAAK,SAAU8wS,GACxD,OAAO+hB,GAAe5hL,EAAOy+K,GAAY5vT,KAAI,SAAUmzS,GACrD,OAAOigB,GAASjiL,EAAO6/J,EAAUmC,UAInCwgB,GAAmB,CACrBp/S,QAASi/S,GACTC,MAAOA,GACPC,WAAYA,IAGVj+Q,GAAY,SAAU5B,GACxB,IAAI8B,EAAS,GACb,GAAI9B,EACF,IAAK,IAAIr2C,EAAI,EAAGA,EAAIq2C,EAAUsD,WAAY35C,IACxCm4C,EAAOvyC,KAAKywC,EAAUwD,WAAW75C,IAGrC,OAAOm4C,GAELi+Q,GAAmB,SAAUj+Q,GAC/B,OAAOz1C,EAAKy1C,GAAQ,SAAUlyC,GAC5B,IAAIiR,EAAOmvR,GAAgBpgS,GAC3B,OAAOiR,EAAO,CAACS,GAAQZ,QAAQG,IAAS,OAGxCm/S,GAAoB,SAAUhgR,GAChC,OAAO4B,GAAU5B,GAAWj4C,OAAS,GAEnCk4T,GAAa,CACfr+Q,UAAWA,GACXm+Q,iBAAkBA,GAClBC,kBAAmBA,IAGjBE,GAAqB,SAAUp+Q,GACjC,OAAOt1C,EAAOyzT,GAAWF,iBAAiBj+Q,GAAS4lO,KAEjDy4C,GAAsB,SAAUv7O,GAClC,OAAOgG,GAAchG,EAAK,gDAExBw7O,GAA8B,SAAUt+Q,EAAQ34B,GAClD,IAAIw+N,EAAgBw4E,GAAoBh3S,GACpCk3S,EAAaH,GAAmBp+Q,GACpC,OAAO6lM,EAAc5/O,OAAS,EAAI4/O,EAAgB04E,GAEhDC,GAAqB,SAAUhkP,GACjC,OAAO8jP,GAA4BH,GAAWr+Q,UAAU06B,EAAOt8B,UAAU0+Q,UAAWp9S,GAAQZ,QAAQ47D,EAAOv8C,aAEzGwgS,GAAqB,CACvBL,mBAAoBA,GACpBC,oBAAqBA,GACrBC,4BAA6BA,GAC7BE,mBAAoBA,IAGlBE,GAA0B,SAAU3iK,GACtC,OAAOptJ,EAAKotJ,GAAS,SAAUj5E,GAC7B,MAAqB,OAAdr2E,GAAKq2E,IAA+B,OAAdr2E,GAAKq2E,OAGlC67O,GAA+B,SAAU5iK,EAAS59G,GACpD,OAAOxvC,EAAKotJ,GAAS,SAAUj5E,GAC7B,MAAqB,OAAdr2E,GAAKq2E,IAAiB25O,GAAuB35O,EAAK3kC,MACxDz0C,KAAKvD,EAAS,KAAK,SAAUunM,GAC9B,OAAOgxH,GAAwB3iK,GAAS1xJ,KAAI,SAAUu0T,GACpD,MAAO,CACLp/S,GAAQX,QAAQ,MAChBW,GAAQX,QAAQpS,GAAKmyT,QAEtB/0T,MAAM,QAGTyqI,GAAS,SAAUuqL,EAAUl9K,GAC/B,IAAIx8G,EAAUz2B,EAAMizI,GAAM,SAAUlzI,EAAKq0E,GAEvC,OADA1xD,GAAO0xD,EAAKr0E,GACLq0E,IACN+7O,GACH,OAAOl9K,EAAK17I,OAAS,EAAI6hM,GAAa,CAAC3iK,IAAYA,GAEjD25R,GAAqB,SAAUC,GACjC,OAAIn/E,GAAWm/E,GACN1uS,GAAO0uS,GAAuBr0T,OAAOwgM,IAAQxhM,KAAKvD,EAAS,KAAK,SAAU00N,GAC/E,MAAO,CACLkkG,EACAlkG,MAIG3vB,GAAO6zH,GAAyB,CAACA,GAAyB,IAGjEC,GAAkB,SAAU38O,EAAUlkC,GACxC,IAAI4gR,EAAwBv/S,GAAQZ,QAAQu/B,EAAI8gR,yBAC5CljK,EAAUqgK,GAAQD,eAAe4C,EAAuB18O,GACxD68O,EAAex0T,EAAOqxJ,GAAS,SAAUj5E,GAC3C,OAAO+uF,GAAS/uF,IAAQ+7J,GAAU/7J,MAEhCq8O,EAAeR,GAA6B5iK,EAAS59G,GACrDihR,EAAcF,EAAat4T,OAAOu4T,EAAal5T,OAASk5T,EAAeL,GAAmBC,IAC9F,OAAO10T,EAAI+0T,EAAattT,KAEtButT,GAAgB,WAClB,OAAOv3H,GAAa,KAElBw3H,GAAuB,SAAUj9O,EAAUlkC,GAC7C,OAAOm2F,GAAO90H,GAAQZ,QAAQu/B,EAAIohR,iBAAkBP,GAAgB38O,EAAUlkC,KAE5EqhR,GAAiB,SAAU71J,EAASnlG,GACtC,OAAOz8B,GAAWy8B,EAAM,QAASj+D,EAAM6C,GAAIugK,KAEzC81J,GAAmB,SAAUp9O,EAAUq9O,GACzC,OAAOF,GAAen9O,EAAUq9O,EAAmB,IAAIn1T,MAAK,SAAU8gP,GACpE,IAAIjuB,EAAYsiG,EAAmB,GAC/Bh8F,EAAWg8F,EAAmBA,EAAmBz5T,OAAS,GAC1D05T,EAAiB3B,GAAiBp/S,QAAQysO,GAC9C,OAAO2yE,GAAiBD,WAAW4B,EAAgBviG,EAAWsG,GAAUr5N,KAAI,SAAUu1T,GACpF,OAAO93H,GAAa,CAACk2H,GAAiBF,MAAM8B,WAE7C91T,WAAWu1T,KAEZQ,GAAuB,SAAUx9O,EAAUriC,GAC7C,OAAOA,EAAO/5C,OAAS,GAAK+5C,EAAO,GAAGC,UAAYo/Q,KAAkBC,GAAqBj9O,EAAUriC,EAAO,KAExGtqB,GAAS,SAAU2sD,EAAUriC,GAC/B,IAAI6lM,EAAgB44E,GAAmBH,4BAA4Bt+Q,EAAQqiC,GAC3E,OAAOwjK,EAAc5/O,OAAS,EAAIw5T,GAAiBp9O,EAAUwjK,GAAiBg6E,GAAqBx9O,EAAUriC,IAE3G8/Q,GAAiB,CAAEp2S,KAAMgM,IAEzBo1M,GAAiB,SAAUtwJ,GAC7B,OAAOjvE,EAAOD,KAAKkvE,EAAOt8B,UAAU6nC,UAAU17E,KAAI,SAAU8zC,GAC1D,IAAI4hR,EAAMvlP,EAAOr7D,IAAI2d,IAAI09C,EAAOv8C,UAAW,MAAO,CAChD,iBAAkB,MAClB,MAAS,iCACRkgB,EAAIohR,iBACHtgT,EAAOmsR,GAAK/lR,KAAK06S,EAAIl/K,WAEzB,OADArmE,EAAOr7D,IAAI4S,OAAOguS,GACX9gT,KACNpV,MAAM,KAEPm2T,GAAiB,SAAUxlP,EAAQ10E,GACrC,IAEI0sB,EAFA2rB,EAAMq8B,EAAOt8B,UAAU6nC,SAAUk6O,EAASzlP,EAAOr7D,IAAIiwB,OAAO,QAC5D+S,EAAMq4B,EAAOt8B,UAAU0+Q,SAEvB58Q,EAAS+7Q,GAAmBD,cAActhP,EAAQ2jP,GAAWr+Q,UAAUqC,IAK3E,OAJA3vB,EAAW1sB,EAAKqgK,WAAa25J,GAAep2S,KAAKlK,GAAQZ,QAAQ47D,EAAOv8C,WAAY+hB,GAAQ7gC,MAAQg/B,EAAIohR,gBACpG/sS,GACFytS,EAAO1uS,YAAYiB,GAEdgoD,EAAOt8B,UAAUwmJ,WAAWie,UAAUs9G,EAAQn6T,IAEnDo6T,GAAe,SAAU1lP,EAAQ10E,GAQnC,QAPa,IAATA,IACFA,EAAO,IAETA,EAAKuK,KAAM,EACXvK,EAAKw0F,OAASx0F,EAAKw0F,QAAU,OAC7Bx0F,EAAKo4C,WAAY,EACjBp4C,EAAO00E,EAAOqf,KAAK,mBAAoB/zF,GACnCA,EAAKqiL,qBAEP,OADA3tG,EAAOqf,KAAK,aAAc/zF,GACnBA,EAAKusB,QAEd,GAAoB,SAAhBvsB,EAAKw0F,OACP,OAAOwwI,GAAetwJ,GAEtB10E,EAAKqhT,UAAW,EAChB,IAAI90R,EAAU2tS,GAAexlP,EAAQ10E,GACrC,MAAoB,SAAhBA,EAAKw0F,OACAjoE,GAEPvsB,EAAKusB,QAAUmoD,EAAOt8B,UAAUmtG,cAAgB,GAAKh5H,EACrDmoD,EAAOqf,KAAK,aAAc/zF,GACnBA,EAAKusB,UAId8tS,GAAsB,CAAEjnP,WAAYgnP,IAEpCE,GAAS,SAAUC,EAAMptB,GAC3B,OAAOotB,GAAQptB,GAASotB,EAAKjiR,iBAAmB60P,EAAK70P,gBAAkBiiR,EAAK1gR,cAAgBszP,EAAKtzP,aAAiB0gR,EAAKzgR,eAAiBqzP,EAAKrzP,cAAgBygR,EAAKxgR,YAAcozP,EAAKpzP,WAEnLygR,GAAe,CAAErhB,KAAMmhB,IAEvBG,GAAe,SAAUxhT,EAAMsjE,EAAU/0D,GAC3C,MAAOvO,GAAQA,IAASsjE,EAAU,CAChC,GAAI/0D,EAAUvO,GACZ,OAAOA,EAETA,EAAOA,EAAK6J,WAEd,OAAO,MAEL43S,GAAY,SAAUzhT,EAAMsjE,EAAU/0D,GACxC,OAAmD,OAA5CizS,GAAaxhT,EAAMsjE,EAAU/0D,IAElCmzS,GAAoB,SAAU1hT,EAAMsjE,EAAU51E,GAChD,OAAO+zT,GAAUzhT,EAAMsjE,GAAU,SAAUtjE,GACzC,OAAOA,EAAKgU,WAAatmB,MAGzBi0T,GAAY,SAAU3hT,GACxB,OAAOA,GAA0B,UAAlBA,EAAKgU,UAElB4tS,GAAgB,SAAU5hT,GAC5B,OAAOA,GAAQ,oBAAoBkB,KAAKlB,EAAKgU,WAE3C6tS,GAA0B,SAAU7hT,EAAMsjE,GAC5C,OAAOopN,GAAiB1sR,KAAoD,IAA3CyhT,GAAUzhT,EAAMsjE,EAAUwxN,KAEzDgtB,GAAmB,SAAU1hT,EAAKJ,EAAMmkB,GAC1C,IAAI0xK,EAAS,IAAI0sF,GAAWviR,EAAMI,EAAI2kE,UAAU/kE,EAAK6J,WAAYzJ,EAAI8iE,UAAY9iE,EAAI4kE,WACrF,MAAOhlE,EAAO61L,EAAO1xK,EAAO,OAAS,UACnC,GAAIsmK,GAASZ,KAAK7pL,GAChB,OAAO,GAIT+hT,GAAa,SAAU/hT,EAAMtS,GAC/B,OAAOsS,EAAKoqL,iBAAmBpqL,EAAKoqL,gBAAgBp2K,WAAatmB,GAE/Ds0T,GAAgC,SAAU/iS,EAAMjf,GAClD,MAAOA,GAAQA,IAASif,EAAM,CAC5B,GAAIwrK,GAAS/oD,uBAAuB1hI,GAClC,OAAO,EAETA,EAAOA,EAAK6J,WAEd,OAAO,GAELo4S,GAAuB,SAAU7hT,EAAK8hT,EAAahhR,EAAW/c,EAAMozH,GACtE,IAAI4qK,EAEAniT,EADAif,EAAO7e,EAAI4kE,UAEXgnM,EAAsB5rQ,EAAI7F,OAAOq7L,sBACjCwsH,EAAuBhiT,EAAI2kE,UAAUwyE,EAAU1tI,WAAYzJ,EAAI8iE,UAAYjkD,EAC/E,GAAIkF,GAAQsmK,GAASZ,KAAKtyC,IAAc2qK,GAAe9hT,EAAIiqL,QAAQ+3H,GACjE,OAAO51T,EAAOP,KAAKqlS,GAAc/5I,EAAU1tI,WAAYzJ,EAAIuyL,UAAUp7C,KAEvE,IAAIs+C,EAAS,IAAI0sF,GAAWhrI,EAAW6qK,GACvC,MAAOpiT,EAAO61L,EAAO1xK,EAAO,OAAS,UAAW,CAC9C,GAA2C,UAAvC/jB,EAAIwmR,yBAAyB5mR,IAAqB6hT,GAAwB7hT,EAAMif,GAClF,OAAOzyB,EAAOrC,OAEhB,GAAIsgM,GAASt2K,OAAOnU,IAASA,EAAK0hC,UAAUx6C,OAAS,EACnD,OAA2C,IAAvCw6T,GAAkB1hT,EAAMif,EAAM,KACzBzyB,EAAOP,KAAKqlS,GAActxR,EAAMmkB,EAAOnkB,EAAK0hC,UAAUx6C,OAAS,IAEjEsF,EAAOrC,OAEhB,GAAIiW,EAAI8iE,QAAQljE,IAASgsQ,EAAoBhsQ,EAAKgU,SAASlS,eACzD,OAAOtV,EAAOrC,OAEhBg4T,EAAoBniT,EAEtB,OAAIkhC,GAAaihR,EACR31T,EAAOP,KAAKqlS,GAAc6wB,EAAmB,IAE/C31T,EAAOrC,QAEZk4T,GAAoB,SAAUjiT,EAAK8gC,EAAWh7B,EAAOk5B,GACvD,IAAIvrB,EAAWwU,EAEXroB,EAAMgsQ,EACNs2C,EAAeJ,EAFfjjS,EAAO7e,EAAI4kE,UAEiB2zL,GAAa,EAM7C,GALA9kP,EAAYurB,GAAKl5B,EAAQ,QAAU,OAAS,aAC5CmiB,EAAS+W,GAAKl5B,EAAQ,QAAU,OAAS,UACzCg8S,EAAcz3H,GAASv2K,UAAUL,IAAcwU,IAAWxU,EAAUjU,WAAW1Y,OAC/E8kR,EAAsB5rQ,EAAI7F,OAAOq7L,sBACjC0sH,EAAgBp8S,EACZwmR,GAAiB74Q,GACnB,OAAOrnB,EAAOrC,OAShB,GAPIsgM,GAASv2K,UAAUL,IAAcwU,EAASxU,EAAUjU,WAAW1Y,OAAS,IAC1Eo7T,GAAgB,GAEd73H,GAASo2E,WAAWhtP,KACtBA,EAAYoL,EACZoJ,EAAS,GAEPxU,IAAcoL,EAAM,CACtB,GAAIqjS,IACFtiT,EAAO6T,EAAUjU,WAAWyoB,EAAS,EAAIA,EAAS,EAAI,GAClDroB,GAAM,CACR,GAAI0sR,GAAiB1sR,GACnB,OAAOxT,EAAOrC,OAEhB,GAAI6hR,EAAoBhsQ,EAAKgU,WAAa2tS,GAAU3hT,GAClD,OAAOxT,EAAOrC,OAIpB,GAAI0pB,EAAUlU,gBAAiB,CAI7B,GAHA0oB,EAASnS,KAAK2f,KAAKysR,GAAiBj6R,EAAS,EAAIA,EAAS,EAAIA,EAAQxU,EAAUjU,WAAW1Y,OAAS,GACpG2sB,EAAYA,EAAUjU,WAAWyoB,GACjCA,EAASoiK,GAASt2K,OAAON,IAAcquS,EAAcruS,EAAU5F,KAAK/mB,OAAS,GACxEg6C,GAAartB,IAAcoL,EAAK+pK,WAAa24H,GAAU9tS,GAC1D,OAAOrnB,EAAOrC,OAEhB,GAAI63T,GAA8B/iS,EAAMpL,IAAc64Q,GAAiB74Q,GACrE,OAAOrnB,EAAOrC,OAEhB,GAAI0pB,EAAUlU,kBAA4C,IAAzBgiT,GAAU9tS,GAAsB,CAC/D7T,EAAO6T,EACP,IAAIgiL,EAAS,IAAI0sF,GAAW1uQ,EAAWoL,GACvC,EAAG,CACD,GAAIwrK,GAAS/oD,uBAAuB1hI,IAAS0sR,GAAiB1sR,GAAO,CACnE24P,GAAa,EACb,MAEF,GAAIluE,GAASt2K,OAAOnU,IAASA,EAAK0hC,UAAUx6C,OAAS,EAAG,CACtDmhC,EAASi6R,EAAgB,EAAItiT,EAAK0hC,UAAUx6C,OAC5C2sB,EAAY7T,EACZ24P,GAAa,EACb,MAEF,GAAIqT,EAAoBhsQ,EAAKgU,SAASlS,iBAAmB8/S,GAAc5hT,GAAO,CAC5EqoB,EAASjoB,EAAIuyL,UAAU3yL,GACvB6T,EAAY7T,EAAK6J,WACZy4S,GACHj6R,IAEFswO,GAAa,EACb,aAEK34P,EAAOsiT,EAAgBzsH,EAAOj5L,OAASi5L,EAAO1pC,UAiC7D,OA7BIjrH,IACEupJ,GAASt2K,OAAON,IAAyB,IAAXwU,GAChC45R,GAAqB7hT,EAAK8hT,EAAahhR,GAAW,EAAMrtB,GAAWtoB,MAAK,SAAU2pC,GAChFrhB,EAAYqhB,EAAIrhB,YAChBwU,EAAS6M,EAAI7M,SACbswO,GAAa,KAGbluE,GAASv2K,UAAUL,KACrB7T,EAAO6T,EAAUjU,WAAWyoB,GACvBroB,IACHA,EAAO6T,EAAUjU,WAAWyoB,EAAS,KAEnCroB,IAAQyqL,GAASZ,KAAK7pL,IAAU+hT,GAAW/hT,EAAM,MAAS8hT,GAAiB1hT,EAAKJ,GAAM,IAAW8hT,GAAiB1hT,EAAKJ,GAAM,IAC/HiiT,GAAqB7hT,EAAK8hT,EAAahhR,GAAW,EAAMlhC,GAAMzU,MAAK,SAAU2pC,GAC3ErhB,EAAYqhB,EAAIrhB,YAChBwU,EAAS6M,EAAI7M,SACbswO,GAAa,OAKjB2pD,IAAkBphR,GAAaupJ,GAASt2K,OAAON,IAAcwU,IAAWxU,EAAU6tB,UAAUx6C,QAC9F+6T,GAAqB7hT,EAAK8hT,EAAahhR,GAAW,EAAOrtB,GAAWtoB,MAAK,SAAU2pC,GACjFrhB,EAAYqhB,EAAIrhB,YAChBwU,EAAS6M,EAAI7M,SACbswO,GAAa,KAGVA,EAAansQ,EAAOP,KAAKqlS,GAAcz9Q,EAAWwU,IAAW77B,EAAOrC,QAEzE65E,GAAY,SAAU5jE,EAAKg/B,GAC7B,IAAI8B,EAAY9B,EAAI8B,UAAWqhR,EAAUnjR,EAAI8lC,aACzCo3N,EAAWhL,GAAcE,eAAepyP,GAc5C,OAbAijR,GAAkBjiT,EAAK8gC,GAAW,EAAMqhR,GAASh3T,MAAK,SAAU2pC,GACzDgM,GAAcowP,GAAcjqH,QAAQi1H,EAAUpnQ,IACjDqtR,EAAQ3iR,SAAS1K,EAAIrhB,YAAaqhB,EAAI7M,aAGrC6Y,GACHmhR,GAAkBjiT,EAAK8gC,GAAW,EAAOqhR,GAASh3T,MAAK,SAAU2pC,GAC/DqtR,EAAQtiR,OAAO/K,EAAIrhB,YAAaqhB,EAAI7M,aAGpC6Y,GACFqhR,EAAQjuP,UAAS,GAEZitP,GAAarhB,KAAK9gQ,EAAKmjR,GAAW/1T,EAAOrC,OAASqC,EAAOP,KAAKs2T,IAEnEC,GAAiB,CAAEx+O,UAAWA,IAE9By+O,GAAc,SAAUjwT,EAAQyb,GAClCzb,EAAOkwT,WAAW,EAAGz0S,IAEnBw/P,GAAc,SAAUvtQ,GAC1B,OAA0B,IAAtBA,EAAKE,MAAMlZ,QACb8rB,GAAO9S,GACA1T,EAAOrC,QAETqC,EAAOP,KAAKiU,IAEjByiT,GAAgB,SAAUvjR,EAAK3rB,GACjC,IAAI5B,EAAarlB,EAAOD,KAAKknB,EAAS5B,YAAYvmB,IAAImV,GAAQZ,SAC1DmpL,EAAYx8L,EAAOD,KAAKknB,EAASu1K,WAAW19L,IAAImV,GAAQZ,SAC5Du/B,EAAIwjR,iBACJxjR,EAAI0kC,WAAWrwD,GACf,IAAIovS,EAAWhxS,EAAWrmB,KAAKuxN,IAAapxN,OAAOwoB,IAAQ3oB,KAAKiiR,IAC5Dq1C,EAAW95H,EAAUx9L,KAAKgmB,IAAa7lB,OAAOwoB,IAAQ3oB,KAAKiiR,IAC/Dr2N,GAAMyrQ,EAAUhxS,EAAWlmB,OAAOwoB,KAAS,SAAUg4I,EAAMjmJ,GACzDu8S,GAAYv8S,EAAM9F,MAAO+rJ,EAAK/rJ,MAAM6N,MACpC+E,GAAOm5I,MAET/0G,GAAM0rQ,EAAU95H,EAAUr9L,OAAOwoB,KAAS,SAAUvX,EAAMo2G,GACxD,IAAI+vM,EAAY/vM,EAAI5yG,MAAMlZ,OAC1B8rH,EAAI5yG,MAAMk+R,WAAW1hS,EAAKwD,MAAM6N,MAChCmxB,EAAIa,OAAO+yE,EAAI5yG,MAAO2iT,GACtB/vS,GAAOpW,MAETwiC,EAAIk1B,UAAS,IAEX0uP,GAAY,SAAUj8T,EAAMusB,GAK9B,OAJAvsB,EAAOA,GAAQ,CAAEw0F,OAAQ,QACzBx0F,EAAKkY,KAAM,EACXlY,EAAKo4C,WAAY,EACjBp4C,EAAKusB,QAAUA,EACRvsB,GAELk8T,GAAe,SAAUxnP,EAAQnoD,EAASvsB,GAE5C,GADAA,EAAOi8T,GAAUj8T,EAAMusB,GAClBvsB,EAAKshT,YACRthT,EAAO00E,EAAOqf,KAAK,mBAAoB/zF,IACnCA,EAAKqiL,sBAFX,CAOA,IAAIhqI,EAAMq8B,EAAOt8B,UAAU6nC,SAC3B27O,GAAcvjR,EAAKA,EAAI8jR,yBAAyBn8T,EAAKusB,UACrDmoD,EAAOt8B,UAAUm8H,OAAOl8H,GACxB88Q,GAAeE,oBAAoB3gP,EAAQr8B,GACtCr4C,EAAKshT,WACR5sO,EAAOqf,KAAK,aAAc/zF,QATxB00E,EAAOqf,KAAK,aAAc/zF,IAY5Bo8T,GAAsB,CAAE/4Q,WAAY64Q,IAEpCG,GAAqB,SAAUl/Q,EAAM9E,EAAKl5B,EAAOm9S,EAAM76T,GACzD,IAAIqrB,EAAY3N,EAAQk5B,EAAIC,eAAiBD,EAAIyB,aAC7CxY,EAASniB,EAAQk5B,EAAIwB,YAAcxB,EAAI0B,UAC3C,OAAOt0C,EAAOD,KAAKsnB,GAAWvoB,IAAImV,GAAQZ,SAASvU,KAAI,SAAUy4E,GAC/D,OAAQs/O,GAASjkR,EAAI8B,UAA0D6iC,EAA9CryD,GAAMqyD,EAAKv7E,EAAQu7E,EAAK17C,IAASv9B,MAAMi5E,MACvEv4E,MAAK,SAAUu4E,GAChB,OAAO7vD,GAAU6vD,GAAOv3E,EAAOP,KAAK83E,GAAOzyD,GAAOyyD,MACjDz4E,KAAI,SAAUy4E,GACf,OAAOA,EAAI3jE,SACVtV,MAAMo5C,IAEPo/Q,GAAa,SAAUp/Q,EAAM9E,EAAKikR,GACpC,OAAOD,GAAmBl/Q,EAAM9E,GAAK,EAAMikR,GAAM,SAAUt/O,EAAK17C,GAC9D,OAAOnS,KAAK2f,IAAI6pO,GAAgB37L,GAAM17C,OAGtCwZ,GAAS,SAAUqC,EAAM9E,EAAKikR,GAChC,OAAOD,GAAmBl/Q,EAAM9E,GAAK,EAAOikR,GAAM,SAAUt/O,EAAK17C,GAC/D,OAAOA,EAAS,EAAIA,EAAS,EAAIA,MAGjCk7R,GAAqB,SAAUvjT,EAAM40R,GACvC,IAAIt2K,EAAOt+G,EACX,MAAOA,GAAQyqL,GAASt2K,OAAOnU,IAAyB,IAAhBA,EAAK9Y,OAC3C8Y,EAAO40R,EAAW50R,EAAKwR,YAAcxR,EAAKoqL,gBAE5C,OAAOpqL,GAAQs+G,GAEbklM,GAAY,SAAUt/Q,EAAM9E,GAC9B,IAAI2kC,EAAK1kC,EAAgBwB,EAAcD,EAAaE,EACpD,OAAK1B,GAGLC,EAAiBD,EAAIC,eACrBwB,EAAezB,EAAIyB,aACnBD,EAAcxB,EAAIwB,YAClBE,EAAY1B,EAAI0B,UAChBijC,EAAM3kC,EAAI8gR,yBACL9gR,EAAI8B,YACH7B,IAAmBwB,GACjBC,EAAYF,EAAc,GACxBvB,EAAe1/B,kBACjBokE,EAAM1kC,EAAez/B,WAAWghC,IAIN,IAA5BvB,EAAe72B,UAA4C,IAA1Bq4B,EAAar4B,WAE9C62B,EADEA,EAAen4C,SAAW05C,EACX2iR,GAAmBlkR,EAAe7tB,aAAa,GAE/C6tB,EAAex1B,WAGhCg3B,EADgB,IAAdC,EACayiR,GAAmB1iR,EAAaupJ,iBAAiB,GAEjDvpJ,EAAah3B,WAE1Bw1B,GAAkBA,IAAmBwB,IAChCxB,EAIT0kC,GAAwB,IAAjBA,EAAIv7D,SACNu7D,EAAIl6D,WAENk6D,GAlCE7/B,GAoCPgnJ,GAAoB,SAAU9qL,EAAKg/B,EAAKs6Q,EAAU+J,GACpD,IAAIzjT,EAAMkkC,EACN6mJ,EAAiB,GAOrB,GANA7mJ,EAAO9jC,EAAI4kE,UACX00O,EAAWt5S,EAAI2kE,UAAU20O,GAAY4J,GAAWp/Q,EAAM9E,EAAKA,EAAI8B,WAAY9gC,EAAI8iE,SAC/EugP,EAASrjT,EAAI2kE,UAAU0+O,GAAU5hR,GAAOqC,EAAM9E,EAAKA,EAAI8B,WAAY9gC,EAAI8iE,SACnEw2O,GAAYA,IAAax1Q,GAC3B6mJ,EAAer8L,KAAKgrT,GAElBA,GAAY+J,GAAU/J,IAAa+J,EAAQ,CAC7CzjT,EAAO05S,EACP,IAAI7jH,EAAS,IAAI0sF,GAAWm3B,EAAUx1Q,GACtC,OAAQlkC,EAAO61L,EAAOj5L,SAAWoD,IAASyjT,EACpCrjT,EAAI8iE,QAAQljE,IACd+qL,EAAer8L,KAAKsR,GAO1B,OAHIyjT,GAAU/J,IAAa+J,GAAUA,IAAWv/Q,GAC9C6mJ,EAAer8L,KAAK+0T,GAEf14H,GAEL24H,GAAW,SAAUtjT,EAAKJ,EAAMsT,GAClC,OAAO9mB,EAAOD,KAAKyT,GAAM1U,KAAI,SAAU0U,GACrC,IAAI+4E,EAAM34E,EAAIuyL,UAAU3yL,GACpBo/B,EAAMh/B,EAAImlE,YAOd,OANAnmC,EAAIQ,SAAS5/B,EAAK6J,WAAYkvE,GAC9B35C,EAAIa,OAAOjgC,EAAK6J,WAAYkvE,EAAM,GAC9BzlE,IACFqqS,GAAev9S,EAAKg/B,EAAKp/B,GAAM,GAC/B29S,GAAev9S,EAAKg/B,EAAKp/B,GAAM,IAE1Bo/B,MAIPukR,GAAwB,SAAU/3B,EAAarjR,EAAUu0E,GAC3D,GAAI8uM,GAAeA,EAAY1iS,eAAeqf,GAAW,CACvD,IAAIq7S,EAAej4T,EAAOigS,EAAYrjR,IAAW,SAAUqnF,GACzD,OAAOA,IAAO9S,KAEY,IAAxB8mO,EAAa18T,cACR0kS,EAAYrjR,GAEnBqjR,EAAYrjR,GAAYq7S,IAI9B,SAASC,GAAiBzjT,EAAKq7D,GAC7B,IAAIqoP,EACAC,EACJ,MAAO,CACLl+H,0BAA2B,SAAUt9K,EAAUu0E,GA0C7C,OAzCKgnO,IACHA,EAAsB,GACtBC,EAAmB,GACnBtoP,EAAOpjC,GAAG,cAAc,SAAU/uC,GAChC,IAAI0W,EAAO1W,EAAEgf,QAAS00I,EAAU58I,EAAIo7E,WAAWx7E,EAAM,KAAMI,EAAI4kE,WAAYg/O,EAAmB,GAC9Fz7T,GAAMgD,KAAKu4T,GAAqB,SAAU1xN,EAAW7pF,GACnDhgB,GAAMgD,KAAKyxJ,GAAS,SAAUh9I,GAC5B,GAAII,EAAIxV,GAAGoV,EAAMuI,GAYf,OAXKw7S,EAAiBx7S,KACpBhgB,GAAMgD,KAAK6mG,GAAW,SAAUtV,GAC9BA,GAAS,EAAM,CACb98E,KAAMA,EACNuI,SAAUA,EACVy0I,QAASA,OAGb+mK,EAAiBx7S,GAAY6pF,GAE/B4xN,EAAiBz7S,GAAY6pF,GACtB,QAIb7pG,GAAMgD,KAAKw4T,GAAkB,SAAU3xN,EAAW7pF,GAC3Cy7S,EAAiBz7S,YACbw7S,EAAiBx7S,GACxBhgB,GAAMgD,KAAK6mG,GAAW,SAAUtV,GAC9BA,GAAS,EAAO,CACd98E,KAAMA,EACNuI,SAAUA,EACVy0I,QAASA,eAOhB8mK,EAAoBv7S,KACvBu7S,EAAoBv7S,GAAY,IAElCu7S,EAAoBv7S,GAAU7Z,KAAKouF,GAC5B,CACLx2D,OAAQ,WACNq9R,GAAsBG,EAAqBv7S,EAAUu0E,GACrD6mO,GAAsBI,EAAkBx7S,EAAUu0E,OAO5D,IAAImnO,GAAsB,SAAU7kR,GAClC,QAASA,EAAIq+C,QAEXymO,GAAkB,SAAUlkT,GAC9B,SAAUA,IAAQA,EAAKmR,gBAAkB3H,GAAW/I,GAAQZ,QAAQG,EAAKmR,eAAgB1Q,GAAQZ,QAAQG,KAEvGmkT,GAAe,SAAU/kR,GAC3B,QAAKA,MAEM6kR,GAAoB7kR,IAGtB8kR,GAAgB9kR,EAAIC,iBAAmB6kR,GAAgB9kR,EAAIyB,gBAGlEujR,GAAc,SAAUhkT,EAAKukB,EAAKghK,EAAYlqH,GAChD,IAAI4oP,EACAC,EACAC,EACAC,EACA3+H,EAA4Bg+H,GAAgBzjT,EAAKq7D,GAAQoqH,0BACzD5hH,EAAoB,SAAUjkE,EAAMqoB,GACtC,IAAI+W,EAAMh/B,EAAImlE,YACTvlE,GAIHo/B,EAAIQ,SAAS5/B,EAAMqoB,GACnB+W,EAAIa,OAAOjgC,EAAMqoB,GACjBizI,EAAOl8H,GACPk1B,GAAS,KANTqpP,GAAev9S,EAAKg/B,EAAKq8B,EAAOv8C,WAAW,GAC3Co8I,EAAOl8H,KAQP+6B,EAAa,SAAUpzE,GACzB,OAAOq6T,GAAoBjnP,WAAWsB,EAAQ10E,IAE5CqjD,EAAa,SAAU92B,EAASvsB,GAClC,OAAOo8T,GAAoB/4Q,WAAWqxB,EAAQnoD,EAASvsB,IAErDs3C,EAAW,SAAUglR,GACvB,OAAOC,GAAW7nP,EAAOv8C,UAAW8nD,IAAUq8O,IAE5CoB,EAAW,SAAUpB,GACvB,OAAOxhR,GAAO45B,EAAOv8C,UAAW8nD,IAAUq8O,IAExCrxH,EAAc,SAAUpkM,EAAM+qQ,GAChC,OAAO0rD,EAAgBryH,YAAYpkM,EAAM+qQ,IAEvC1mE,EAAiB,SAAUF,GAC7B,OAAOsyH,EAAgBpyH,eAAeF,IAEpCt0G,EAAS,SAAUz9E,EAAMsT,GAE3B,OADAowS,GAAStjT,EAAKJ,EAAMsT,GAAS/nB,KAAK+vK,GAC3Bt7J,GAELssI,EAAc,WAChB,IAAIltG,EAAM4nC,IAAU5jC,EAAMy6Q,IAC1B,SAAKz+Q,GAAOA,EAAIjf,QAGZif,EAAIslR,iBAC6C,IAA5CtlR,EAAIslR,iBAAiB,aAActlR,IAEpCgE,GAAOhE,EAAI8B,YAEjBozB,EAAW,SAAUquL,GACvB,IAAIvjN,EAAM4nC,IACV5nC,EAAIk1B,WAAWquL,GACfrnF,EAAOl8H,IAELy+Q,EAAS,WACX,OAAOl5R,EAAIwe,aAAexe,EAAIwe,eAAiBxe,EAAIplB,SAAS4/B,WAE1D6nC,EAAS,WACX,IAAI7nC,EAAWC,EAAK2kC,EAAKzkE,EACrBqlT,EAA2B,SAAUC,EAAKC,EAAaC,GACzD,IACE,OAAOD,EAAYE,sBAAsBH,EAAKE,GAC9C,MAAOz0N,GACP,OAAQ,IAGZ,IAAK1rE,EACH,OAAO,KAGT,GADArlB,EAAMqlB,EAAIplB,SACS,qBAARD,GAA+B,OAARA,EAChC,OAAO,KAET,QAAwBnU,IAApBswE,EAAOs2H,WAA2D,IAAjCo7G,GAAY/5Q,SAASqoC,GAAmB,CAC3E,IAAIs2H,EAAWw4G,GAAkBvjO,OAAOvL,GACxC,GAAIs2H,EAASlnM,SACX,OAAOknM,EAASzmM,KAAI,SAAU1B,GAC5B,OAAOozT,GAAmBD,cAActhP,EAAQ,CAAC7xE,IAAI,MACpDkB,MAAMwU,EAAI8gC,eAGjB,KACOjB,EAAY0+Q,OAAcpzH,GAASs1E,iBAAiB5gO,EAAU2D,cAE/D1D,EADED,EAAUsD,WAAa,EACnBtD,EAAUwD,WAAW,GAErBxD,EAAUiB,YAAcjB,EAAUiB,cAAgB9gC,EAAI8gC,eAGhE,MAAOiwD,IAmBT,OAjBAjxD,EAAM49Q,GAAmBD,cAActhP,EAAQ,CAACr8B,IAAM,GACjDA,IACHA,EAAM9/B,EAAI8gC,YAAc9gC,EAAI8gC,cAAgB9gC,EAAI2f,KAAKu9R,mBAEnDp9Q,EAAIQ,UAA4C,IAAhCR,EAAIC,eAAe72B,UAAkB42B,EAAI8B,YAC3D6iC,EAAM3jE,EAAI4kE,UACV5lC,EAAIQ,SAASmkC,EAAK,GAClB3kC,EAAIa,OAAO8jC,EAAK,IAEdwgP,GAAiBC,IACsD,IAArEG,EAAyBvlR,EAAI4lR,eAAgB5lR,EAAKmlR,IAAyF,IAAjEI,EAAyBvlR,EAAI6lR,WAAY7lR,EAAKmlR,GAC1HnlR,EAAMolR,GAEND,EAAgB,KAChBC,EAAgB,OAGbplR,GAELk8H,EAAS,SAAUl8H,EAAK08J,GAC1B,IAAI14J,EAAKpjC,EAAMu8F,EACf,GAAK4nN,GAAa/kR,GAAlB,CAGA,IAAI8lR,EAAUjB,GAAoB7kR,GAAOA,EAAM,KAC/C,GAAI8lR,EAAJ,CACEV,EAAgB,KAChB,IACEU,EAAQznO,SACR,MAAO4S,SAJX,CAcA,GANAjtD,EAAMy6Q,IACNthN,EAAM9gC,EAAOqf,KAAK,oBAAqB,CACrC/rF,MAAOqwC,EACP08J,QAASA,IAEX18J,EAAMm9D,EAAIxtG,MACNq0C,EAAK,CACPohR,EAAgBplR,EAChB,IACEgE,EAAI60M,kBACJ70M,EAAI80M,SAAS94M,GACb,MAAOixD,KAEO,IAAZyrG,GAAqB14J,EAAI+oF,SAC3B/oF,EAAIkxB,SAASl1B,EAAIyB,aAAczB,EAAI0B,WACnCsC,EAAI+oF,OAAO/sF,EAAIC,eAAgBD,EAAIwB,cAErC2jR,EAAgBnhR,EAAIX,WAAa,EAAIW,EAAIT,WAAW,GAAK,KAEtDvD,EAAI8B,WAAa9B,EAAIC,iBAAmBD,EAAIyB,eAAgBuC,EAAIk1M,kBAAqBiqB,GAAIpgQ,IACxFi9B,EAAI0B,UAAY1B,EAAIwB,YAAc,GAChCxB,EAAIC,eAAe1/B,kBACrBK,EAAOo/B,EAAIC,eAAez/B,WAAWw/B,EAAIwB,aACrC5gC,GAAyB,QAAjBA,EAAK0kL,UACfthJ,EAAIk1M,iBAAiBl5M,EAAIC,eAAgBD,EAAIwB,YAAaxB,EAAIyB,aAAczB,EAAI0B,WAC5EsC,EAAIN,aAAe1D,EAAIC,gBAAkB+D,EAAIL,YAAc3D,EAAIyB,cACjEuC,EAAIk1M,iBAAiBt4O,EAAM,EAAGA,EAAM,KAM9Cy7D,EAAOqf,KAAK,yBAA0B,CACpC/rF,MAAOqwC,EACP08J,QAASA,OAGTqpH,EAAU,SAAUphP,GAEtB,OADA35B,EAAWhqC,EAAIslR,aAAa3hN,IACrBA,GAELJ,EAAU,WACZ,OAAO6/O,GAAU/nP,EAAOv8C,UAAW8nD,MAEjCo+O,EAAsB,SAAU1L,EAAU+J,GAC5C,OAAOv4H,GAAkB9qL,EAAK4mE,IAAU0yO,EAAU+J,IAEhD/tH,EAAY,WACd,IACI2vH,EAAaC,EADbliR,EAAMy6Q,IAEV,QAAKz6Q,GAAQA,EAAIN,YAAeM,EAAIL,aAGpCsiR,EAAcjlT,EAAImlE,YAClB8/O,EAAYzlR,SAASwD,EAAIN,WAAYM,EAAIJ,cACzCqiR,EAAY/wP,UAAS,GACrBgxP,EAAallT,EAAImlE,YACjB+/O,EAAW1lR,SAASwD,EAAIL,UAAWK,EAAIH,aACvCqiR,EAAWhxP,UAAS,GACb+wP,EAAYN,sBAAsBM,EAAYL,eAAgBM,IAAe,IAElFthP,EAAY,WACd,IAAI5kC,EAAM4nC,IACN5jC,EAAMy6Q,IACV,IAAKuB,GAAWD,kBAAkB/7Q,IAAQw6Q,GAAaniP,GAAS,CAC9D,IAAI8mP,EAAUC,GAAex+O,UAAU5jE,EAAKg/B,GAI5C,OAHAmjR,EAAQh3T,MAAK,SAAUg3T,GACrBjnJ,EAAOinJ,EAAS7sH,QAEX6sH,EAAQz3T,MAAMs0C,GAEvB,OAAOA,GAELmmR,EAAkB,SAAUh9S,EAAUu0E,GAExC,OADA+oG,EAA0Bt9K,EAAUu0E,GAC7B8P,GAEL44N,EAAqB,WACvB,IAAIC,EACAzlT,EAAOI,EAAI4kE,UACf,MAAOhlE,GAA0B,SAAlBA,EAAKgU,SAAqB,CACvC,GAAIhU,EAAK4oH,aAAe5oH,EAAKunB,aAAc,CACzCk+R,EAAkBzlT,EAClB,MAEFA,EAAOA,EAAK6J,WAEd,OAAO47S,GAELxpH,EAAiB,SAAUl4H,EAAK67L,GAClC,OAAOs8C,GAAeC,sBAAsB1gP,EAAQsI,EAAK67L,IAEvD8lD,EAAe,SAAU3/R,EAASC,GACpC,OAAOs1I,EAAOwhJ,GAAoBz8S,UAAU0lB,EAASC,EAASy1C,EAAOmI,YAEnEjgD,EAAwB,WAC1B,IAAIyb,EAAM4nC,IACV,OAAO5nC,EAAI8B,UAAY6wP,GAAgBP,eAAepyP,GAAKqB,iBAAiB,GAAKrB,EAAIzb,yBAEnFwmE,EAAU,WACZxlE,EAAM4/R,EAAgBC,EAAgB,KACtCF,EAAiBn6N,WAEfyC,EAAU,CACZy3N,gBAAiB,KACjBC,iBAAkB,KAClBlkT,IAAKA,EACLukB,IAAKA,EACLghK,WAAYA,EACZlqH,OAAQA,EACRnH,SAAUA,EACV2P,kBAAmBA,EACnB9J,WAAYA,EACZ/vB,WAAYA,EACZ4nJ,YAAaA,EACbC,eAAgBA,EAChBx0G,OAAQA,EACR6uD,YAAaA,EACbopD,UAAWA,EACXyvH,QAASA,EACTxhP,QAASA,EACTk6O,OAAQA,EACRviJ,OAAQA,EACRt0F,OAAQA,EACR3oC,SAAUA,EACVwD,OAAQ4iR,EACRv5H,kBAAmBk6H,EACnBphP,UAAWA,EACXuhP,gBAAiBA,EACjB1/H,0BAA2BA,EAC3B2/H,mBAAoBA,EACpBvpH,eAAgBA,EAChBypH,aAAcA,EACd/hS,sBAAuBA,EACvBwmE,QAASA,GAMX,OAJAk6N,EAAkBvN,GAAkBlqN,GACpC03N,EAAmB9M,GAAiB5qN,EAASnxB,GAC7CmxB,EAAQy3N,gBAAkBA,EAC1Bz3N,EAAQ03N,iBAAmBA,EACpB13N,GAGL+4N,GAAc,SAAU3lT,EAAM00C,GAChCnpD,EAAKmpD,GAAO,SAAUhnD,GACpBsS,EAAK8d,KAAKpwB,EAAM,UAGhBk4T,GAAuB,SAAUz1G,EAAW51L,EAAQsrS,GACtD11G,EAAUzqB,cAAc,QAAQ,SAAUF,GACxCj6L,EAAKi6L,GAAO,SAAUxlL,GACpB,IAAIjP,EAAQwpB,EAAOi+D,MAAMx4E,EAAK8d,KAAK,UAC/ByuD,EAAQvsE,EAAK8d,KAAK,SAClBgoS,EAAO9lT,EAAK8d,KAAK,QACjB3uB,EAAO6Q,EAAK8d,KAAK,QACjByuD,IACFx7E,EAAMw7E,MAAQA,GAEZu5O,IACF/0T,EAAM,eAAiB+0T,GAErB32T,IACF4B,EAAM,aAAe80T,EAAUxiS,SAASrjB,EAAK8d,KAAK,QAAS,IAAM,IAEnE9d,EAAKtS,KAAO,OACZsS,EAAK8d,KAAK,QAASvD,EAAOqpL,UAAU7yM,IACpC40T,GAAY3lT,EAAM,CAChB,QACA,OACA,gBAKJ+lT,GAAwB,SAAU51G,EAAW51L,GAC/C41L,EAAUzqB,cAAc,UAAU,SAAUF,GAC1Cj6L,EAAKi6L,GAAO,SAAUxlL,GACpB,IAAIjP,EAAQwpB,EAAOi+D,MAAMx4E,EAAK8d,KAAK,UACnC/sB,EAAM,mBAAqB,eAC3BiP,EAAKtS,KAAO,OACZsS,EAAK8d,KAAK,QAASvD,EAAOqpL,UAAU7yM,WAItCi1T,GAAa,SAAU71G,EAAWz0I,GACpC,IAAInhD,EAAS63M,KACT12J,EAASi2O,wBACXiU,GAAqBz1G,EAAW51L,EAAQhyB,GAAMu7Q,QAAQpoM,EAAS81O,0BAEjEuU,GAAsB51G,EAAW51L,IAE/BokE,GAAa,SAAUwxH,EAAWz0I,GAChCA,EAASg2O,eACXsU,GAAW71G,EAAWz0I,IAGtBuqP,GAAe,CAAEz9O,SAAUmW,IAE3BunO,GAAgB,SAAUxqP,EAAU30E,EAAMmjM,EAAelqL,GAC3D,IAAImmT,EAAczqP,EAAS0qP,oBAAsBr/T,EAAKgkE,OAClDo7P,GAAej8H,EAAclqL,EAAKtS,MACpCsS,EAAK6S,QAAQR,OAAO,IAAI2xR,GAAO,KAAM,IAAI1+F,YAAa,EAEtDtlM,EAAK6S,QAAQR,OAAO,IAAI2xR,GAAO,QAAS,IAAI38S,MAAQw2C,IAGpDwoR,GAAmB,SAAUrmT,GAC/B,OAAOsmT,GAAatmT,EAAM,UAAYA,EAAK6R,WAAWxqB,QAAUw2C,IAE9DyoR,GAAe,SAAUtmT,EAAMtS,GACjC,OAAOsS,GAAQA,EAAK6R,YAAc7R,EAAK6R,aAAe7R,EAAKgpL,WAAahpL,EAAK6R,WAAWnkB,OAASA,GAE/F64T,GAAW,SAAUhsT,EAAQyF,GAC/B,IAAIy7C,EAAOlhD,EAAOs0Q,eAAe7uQ,EAAKtS,MACtC,OAAO+tD,GAAQA,EAAK+xN,WAElBg5C,GAAY,SAAUjsT,EAAQksT,EAAkBC,EAAoB1mT,GACtE,OAAOA,EAAKqqL,QAAQo8H,EAAkBC,GAAoB,SAAU1mT,GAClE,OAAOumT,GAAShsT,EAAQyF,OAGxB2mT,GAAkB,SAAU3mT,EAAMkqL,GACpC,OAAOlqL,IAASkqL,EAAclqL,EAAKtS,OAAuB,OAAdsS,EAAKtS,OAG/C21F,GAAa,SAAUoiG,EAAQ/pH,GACjC,IAAInhE,EAASkrL,EAAOlrL,OAChBmhE,EAASkrP,qBACXnhI,EAAOC,cAAc,MAAM,SAAUF,EAAO74L,EAAG5F,GAC7C,IAAI+B,EAEAkX,EAGAsR,EAAQgvQ,EAAYn0H,EAAM06J,EAE1BlhB,EAAa9Y,EANbjwL,EAAI4oF,EAAMt+L,OAEVgjM,EAAgB3hM,GAAM4jI,OAAO,GAAI5xH,EAAOoyL,oBACxC85H,EAAmBlsT,EAAOq7L,sBAE1BkxH,EAAqBvsT,EAAOq7L,sBAGhC,IADA1L,EAAcjrK,KAAO,EAChBn2B,EAAI,EAAGA,EAAI8zG,EAAG9zG,IAGjB,GAFAkX,EAAOwlL,EAAM18L,GACbwoB,EAAStR,EAAKsR,OACV44K,EAAclqL,EAAKsR,OAAO5jB,OAASsS,IAASsR,EAAO03K,UAAW,CAChE78B,EAAOnsJ,EAAKmsJ,KACZ,MAAOA,EAAM,CAEX,GADA06J,EAAW16J,EAAKz+J,KACC,SAAbm5T,GAAsD,aAA/B16J,EAAKruI,KAAK,iBAAiC,CACpE,GAAiB,OAAb+oS,EACF,MAEF,GAAiB,OAAbA,EAAmB,CACrB7mT,EAAO,KACP,OAGJmsJ,EAAOA,EAAKA,KAEVnsJ,IACFA,EAAKgT,SACDwzS,GAAUjsT,EAAQksT,EAAkBK,EAAoBx1S,KAC1Dq0R,EAAcprS,EAAOs0Q,eAAev9P,EAAO5jB,MACvCi4S,IACEA,EAAYl4B,YACdn8P,EAAO0B,SACE2yR,EAAYn4B,WACrB04C,GAAcxqP,EAAU30E,EAAMmjM,EAAe54K,UAKhD,CACLgvQ,EAAatgR,EACb,MAAOsR,GAAUA,EAAOO,aAAeyuQ,GAAchvQ,EAAO03K,YAAcs3F,EAAY,CAEpF,GADAA,EAAahvQ,EACT44K,EAAc54K,EAAO5jB,MACvB,MAEF4jB,EAASA,EAAOA,OAEdgvQ,IAAehvQ,IAA0C,IAAhCoqD,EAAS0qP,qBACpCv5B,EAAW,IAAImX,GAAO,QAAS,GAC/BnX,EAASxlS,MAAQw2C,GACjB79B,EAAKyB,QAAQorR,QAMvBpnG,EAAOshB,mBAAmB,QAAQ,SAAUvhB,GAC1C,IAAsBxlL,EAAlBlX,EAAI08L,EAAMt+L,OACV6/T,EAAY,SAAU/xR,GACxB,IAAI1qB,EAAQ0qB,EAAI5c,MAAM,KAAKzsB,QAAO,SAAU3C,GAC1C,OAAOA,EAAE9B,OAAS,KAEpB,OAAOojB,EAAMziB,OAAO,CAAC,aAAawI,OAAOgC,KAAK,MAE5C20T,EAAc,SAAUhyR,GAC1B,IAAI62N,EAAS72N,EAAMzsC,GAAM+d,KAAK0uB,GAAO,GACrC,MAAK,kBAAkB9zB,KAAK2qP,GAGnBA,EAFAk7D,EAAUl7D,IAKrB,IAAKnwL,EAASurP,yBACZ,MAAOn+T,IACLkX,EAAOwlL,EAAM18L,GACK,MAAdkX,EAAKtS,MAAwC,WAAxBsS,EAAK8d,KAAK,WACjC9d,EAAK8d,KAAK,MAAOkpS,EAAYhnT,EAAK8d,KAAK,YAK1C49C,EAASwrP,4BACZzhI,EAAOshB,mBAAmB,WAAW,SAAUvhB,GAC7C,IAAsBpzK,EAAS2qM,EAAazrM,EAAQtR,EAAhDlX,EAAI08L,EAAMt+L,OACd,MAAO4B,IAEL,GADAkX,EAAOwlL,EAAM18L,GACK,MAAdkX,EAAKtS,MAAgBsS,EAAK6R,aAAe7R,EAAK8d,KAAK,QAAS,CAC9DxM,EAAStR,EAAKsR,OACdc,EAAUpS,EAAKgpL,UACf,GACE+zB,EAAc3qM,EAAQ+5I,KACtB76I,EAAOy5C,OAAO34C,EAASpS,GACvBoS,EAAU2qM,QACH3qM,OAKbspD,EAASyrP,mBACX1hI,EAAOC,cAAc,SAAS,SAAUF,GACtC,IAAsBxlL,EAAM6J,EAAxB/gB,EAAI08L,EAAMt+L,OACd,MAAO4B,IAGL,GAFAkX,EAAOwlL,EAAM18L,GACb+gB,EAAa7J,EAAKsR,OACM,OAApBzH,EAAWnc,MAAqC,OAApBmc,EAAWnc,KACzC,GAAIsS,EAAKmsJ,MAA2B,OAAnBnsJ,EAAKmsJ,KAAKz+J,KACzBsS,EAAKmsJ,KAAK95I,OAAOrS,OACZ,CACL,IAAI2uL,EAAK,IAAIq1G,GAAO,KAAM,GAC1Br1G,EAAG7wK,KAAK,QAAS,yBACjB9d,EAAKzK,KAAKo5L,OAMhBjzH,EAAS04B,UAAY75F,EAAOq1Q,mBAC9BnqF,EAAOshB,mBAAmB,SAAS,SAAUvhB,GAC3C,IAAsBxlL,EAAMke,EAAWk3M,EAAIj7F,EAAWitL,EAElDC,EAAiB9yN,EAFjBzrG,EAAI08L,EAAMt+L,OACV6kR,EAAexxQ,EAAOq1Q,kBAE1B,MAAO9mR,IAAK,CAIV,IAHAkX,EAAOwlL,EAAM18L,GACbo1B,EAAYle,EAAK8d,KAAK,SAAS1F,MAAM,KACrCgvS,EAAa,GACRhyF,EAAK,EAAGA,EAAKl3M,EAAUh3B,OAAQkuO,IAClCj7F,EAAYj8G,EAAUk3M,GACtB7gI,GAAQ,EACR8yN,EAAkBt7C,EAAa,KAC3Bs7C,GAAmBA,EAAgBltL,KACrC5lC,GAAQ,GAEV8yN,EAAkBt7C,EAAa/rQ,EAAKtS,OAC/B6mG,GAAS8yN,GAAmBA,EAAgBltL,KAC/C5lC,GAAQ,GAENA,IACE6yN,IACFA,GAAc,KAEhBA,GAAcjtL,GAGbitL,EAAWlgU,SACdkgU,EAAa,MAEfpnT,EAAK8d,KAAK,QAASspS,QAMvBE,GAAY/+T,GAAMw7I,QAASwjL,GAASh/T,GAAMgD,KAAMi8T,GAAYj/T,GAAMu7Q,QAAS2jD,GAAWl/T,GAAM4jI,OAC5Fu7L,GAAY,SAAUhsP,EAAUnhE,QACnB,IAAXA,IACFA,EAASkxQ,MAEX,IAAI89B,EAAc,GACdC,EAAmB,GACnBme,EAAe,GACfC,EAAoB,GACxBlsP,EAAWA,GAAY,GACvBA,EAAS04B,WAAW,aAAc14B,IAAWA,EAAS04B,SACtD14B,EAASmsP,UAAYnsP,EAASmsP,WAAa,OAC3C,IAAIC,EAAqB,SAAUtiI,GACjC,IAAI2lF,EAAInrQ,EAAMsR,EAAQ0rI,EAAS+qK,EAAW5qK,EAAa6qK,EAAUC,EAAWn/T,EACxE29T,EAAkBC,EAAoBwB,EAAsBC,EAAmBxhH,EAAiBv0L,EAAS+pR,EAM7G,IALA+rB,EAAuBZ,GAAU,oCACjCb,EAAmBlsT,EAAOq7L,sBAC1B8wH,EAAqBnsT,EAAO6gM,wBAC5B+sH,EAAoB5tT,EAAO0vL,uBAC3B0c,EAAkBpsM,EAAOqsM,qBACpBukE,EAAK,EAAGA,EAAK3lF,EAAMt+L,OAAQikR,IAE9B,GADAnrQ,EAAOwlL,EAAM2lF,GACRnrQ,EAAKsR,SAAUtR,EAAKk0B,MAGzB,GAAIi0R,EAAkBnoT,EAAKtS,OAA8B,OAArBsS,EAAKsR,OAAO5jB,KAAhD,CACE0kB,EAAUpS,EAAKpD,KACf,MAAOwV,EAAS,CACd,IAAI+1S,EAAkB/1S,EAAQ1kB,MAK5B,MAJA0kB,EAAQ1kB,KAAO,KACf0kB,EAAQ8hB,OAAQ,EAChBl0B,EAAKsR,OAAOy5C,OAAO34C,EAASpS,EAAKsR,QAInCc,EAAUA,EAAQxV,KAEpBoD,EAAKkT,OAAOlT,OAZd,CAgBA,IADAg9I,EAAU,CAACh9I,GACNsR,EAAStR,EAAKsR,OAAQA,IAAW/W,EAAOy1Q,aAAa1+P,EAAO5jB,KAAMsS,EAAKtS,QAAUw6T,EAAqB52S,EAAO5jB,MAAO4jB,EAASA,EAAOA,OACvI0rI,EAAQtuJ,KAAK4iB,GAEf,GAAIA,GAAU0rI,EAAQ91J,OAAS,EAAG,CAGhC,IAFA81J,EAAQjtJ,UACRg4T,EAAY5qK,EAAcirK,EAAWprK,EAAQ,GAAG99I,SAC3CpW,EAAI,EAAGA,EAAIk0J,EAAQ91J,OAAS,EAAG4B,IAAK,CAOvC,IANIyR,EAAOy1Q,aAAa7yH,EAAYzvJ,KAAMsvJ,EAAQl0J,GAAG4E,OACnDs6T,EAAWI,EAAWprK,EAAQl0J,GAAGoW,SACjCi+I,EAAY9qI,OAAO21S,IAEnBA,EAAW7qK,EAER8qK,EAAYjrK,EAAQl0J,GAAG+oB,WAAYo2S,GAAaA,IAAcjrK,EAAQl0J,EAAI,IAC7EqzS,EAAW8rB,EAAUrrT,KACrBorT,EAAS31S,OAAO41S,GAChBA,EAAY9rB,EAEdh/I,EAAc6qK,EAEXxB,GAAUjsT,EAAQksT,EAAkBC,EAAoBqB,GAI3Dz2S,EAAOy5C,OAAO/qD,EAAMg9I,EAAQ,IAAI,IAHhC1rI,EAAOy5C,OAAOg9P,EAAW/qK,EAAQ,IAAI,GACrC1rI,EAAOy5C,OAAO/qD,EAAM+nT,IAItBz2S,EAAS0rI,EAAQ,IACbwpK,GAAUjsT,EAAQksT,EAAkBC,EAAoBp1S,IAAWg1S,GAAah1S,EAAQ,QAC1FA,EAAOuB,QAAQG,cAEZ,GAAIhT,EAAKsR,OAAQ,CACtB,GAAkB,OAAdtR,EAAKtS,KAAe,CAEtB,GADA0kB,EAAUpS,EAAKmsJ,KACX/5I,IAA6B,OAAjBA,EAAQ1kB,MAAkC,OAAjB0kB,EAAQ1kB,MAAgB,CAC/D0kB,EAAQC,OAAOrS,GACf,SAGF,GADAoS,EAAUpS,EAAKpD,KACXwV,IAA6B,OAAjBA,EAAQ1kB,MAAkC,OAAjB0kB,EAAQ1kB,MAAgB,CAC/D0kB,EAAQ24C,OAAO/qD,EAAMoS,EAAQP,YAAY,GACzC,SAEF7R,EAAKzK,KAAK6yT,EAAW,IAAIpkB,GAAO,KAAM,KACtC,SAEEzpS,EAAOy1Q,aAAahwQ,EAAKsR,OAAO5jB,KAAM,QAAU6M,EAAOy1Q,aAAa,MAAOhwQ,EAAKtS,MAClFsS,EAAKzK,KAAK6yT,EAAW,IAAIpkB,GAAO,MAAO,KAEnCr9F,EAAgB3mM,EAAKtS,MACvBsS,EAAK6S,QAAQG,SAEbhT,EAAKkT,YAMXk1S,EAAa,SAAUpoT,GACzB,IAAIlX,EAAG4E,EAAM+rB,EACb/rB,EAAOsS,EAAKtS,KACRA,KAAQ67S,IACV9vR,EAAOkuS,EAAaj6T,GAChB+rB,EACFA,EAAK/qB,KAAKsR,GAEV2nT,EAAaj6T,GAAQ,CAACsS,IAG1BlX,EAAI0gT,EAAiBtiT,OACrB,MAAO4B,IACL4E,EAAO87S,EAAiB1gT,GAAG4E,KACvBA,KAAQsS,EAAKsa,WAAWhvB,MAC1BmuB,EAAOmuS,EAAkBl6T,GACrB+rB,EACFA,EAAK/qB,KAAKsR,GAEV4nT,EAAkBl6T,GAAQ,CAACsS,IAIjC,OAAOA,GAEL0lL,EAAgB,SAAUh4L,EAAMovF,GAClCyqO,GAAOC,GAAU95T,IAAO,SAAUA,GAChC,IAAI+rB,EAAO8vR,EAAY77S,GAClB+rB,IACH8vR,EAAY77S,GAAQ+rB,EAAO,IAE7BA,EAAK/qB,KAAKouF,OAGV6wN,EAAiB,WACnB,IAAIn4L,EAAM,GACV,IAAK,IAAI8hD,KAAUiyI,EACbA,EAAYrgT,eAAeouK,IAC7B9hD,EAAI9mH,KAAK,CACPhB,KAAM4pK,EACNllE,UAAWm3M,EAAYjyI,KAI7B,OAAO9hD,GAELuxF,EAAqB,SAAUr5M,EAAMovF,GACvCyqO,GAAOC,GAAU95T,IAAO,SAAUA,GAChC,IAAI5E,EACJ,IAAKA,EAAI,EAAGA,EAAI0gT,EAAiBtiT,OAAQ4B,IACvC,GAAI0gT,EAAiB1gT,GAAG4E,OAASA,EAE/B,YADA87S,EAAiB1gT,GAAGspG,UAAU1jG,KAAKouF,GAIvC0sN,EAAiB96S,KAAK,CACpBhB,KAAMA,EACN0kG,UAAW,CAACtV,SAId8wN,EAAsB,WACxB,MAAO,GAAG/lT,OAAO2hT,IAEfhxN,EAAQ,SAAUp5E,EAAMrY,GAC1B,IAAI0+L,EAAQD,EAAO18L,EAAG8zG,EAAGyrN,EAAIC,EAAI7uS,EAAM/rB,EACnCw8L,EAEAq+H,EACAvoT,EAFAwoT,EAAkB,GAGlBC,EAAmB,SAAU/6T,GAC/B,OAAa,IAATA,EACK,IACW,IAATA,EACF,IAEAA,GAGX3G,EAAOA,GAAQ,GACf4gU,EAAe,GACfC,EAAoB,GACpB19H,EAAgBu9H,GAASH,GAAU,gDAAiD/sT,EAAOoyL,oBAC3F,IAAI85H,EAAmBlsT,EAAOq7L,sBAC1BnkL,EAAWlX,EAAOkX,SAClB2iF,EAAW14B,EAAS04B,SACpBo5M,EAAsB,sBAAuBzmT,EAAOA,EAAK2rN,kBAAoBh3I,EAASg3I,kBACtFg2G,EAAgBD,EAAiBjb,GACjCsZ,EAAqBvsT,EAAO6gM,wBAC5ButH,EAAwB,cACxBC,EAAsB,cACtBC,EAAsB,cACtBC,EAAwB,eAC5BP,EAAiCzB,EAAmB59T,eAAenC,EAAKkgF,UAAY6/O,EAAmB59T,eAAewyE,EAASmsP,WAC/H,IAAIkB,EAAgB,WAClB,IAAgCnsT,EAAMosT,EAAlChpT,EAAOsjE,EAASzxD,WAChBvL,EAAO,SAAU0iT,GACfA,IACFhpT,EAAOgpT,EAAcn3S,WACjB7R,GAAsB,IAAdA,EAAKpS,OACfoS,EAAK3Y,MAAQ2Y,EAAK3Y,MAAMoa,QAAQknT,EAAuB,KAEzD3oT,EAAOgpT,EAAchgI,UACjBhpL,GAAsB,IAAdA,EAAKpS,OACfoS,EAAK3Y,MAAQ2Y,EAAK3Y,MAAMoa,QAAQmnT,EAAqB,OAI3D,GAAKruT,EAAOy1Q,aAAa1sM,EAAS51E,KAAMg7T,EAAc5mT,eAAtD,CAGA,MAAO9B,EACLpD,EAAOoD,EAAKpD,KACM,IAAdoD,EAAKpS,MAA4B,IAAdoS,EAAKpS,MAA4B,MAAdoS,EAAKtS,OAAiBw8L,EAAclqL,EAAKtS,QAAUsS,EAAK8d,KAAK,kBAChGkrS,IACHA,EAAgBC,EAAWP,EAAe,GAC1CM,EAAclrS,KAAK49C,EAASi5I,yBAC5BrxI,EAASvY,OAAOi+P,EAAehpT,IAG/BgpT,EAAc32S,OAAOrS,KAGvBsG,EAAK0iT,GACLA,EAAgB,MAElBhpT,EAAOpD,EAET0J,EAAK0iT,KAEHC,EAAa,SAAUv7T,EAAME,GAC/B,IACI6rB,EADAzZ,EAAO,IAAIgkS,GAAOt2S,EAAME,GAU5B,OARIF,KAAQ67S,IACV9vR,EAAOkuS,EAAaj6T,GAChB+rB,EACFA,EAAK/qB,KAAKsR,GAEV2nT,EAAaj6T,GAAQ,CAACsS,IAGnBA,GAELkpT,EAAyB,SAAUlpT,GACrC,IAAI6sR,EAAUs8B,EAAcC,EAASh3S,EACjC83K,EAAgB3vL,EAAOoyL,mBAC3B,IAAKkgG,EAAW7sR,EAAKmsJ,KAAM0gI,GAA8B,IAAlBA,EAASj/R,MAAa,CAE3D,GADAw7T,EAAUv8B,EAASxlS,MAAMoa,QAAQmnT,EAAqB,IAClDQ,EAAQliU,OAAS,EAEnB,YADA2lS,EAASxlS,MAAQ+hU,GAInB,GADAD,EAAet8B,EAASjwR,KACpBusT,EAAc,CAChB,GAA0B,IAAtBA,EAAav7T,MAAcu7T,EAAa9hU,MAAMH,OAAQ,CACxD2lS,EAAWA,EAAS1gI,KACpB,SAEF,IAAK+9B,EAAci/H,EAAaz7T,OAA+B,WAAtBy7T,EAAaz7T,MAA2C,UAAtBy7T,EAAaz7T,KAAkB,CACxGm/R,EAAWA,EAAS1gI,KACpB,UAGJ/5I,EAAUy6Q,EAAS1gI,KACnB0gI,EAAS75Q,SACT65Q,EAAWz6Q,IAGXi3S,EAAwB,SAAUryT,GACpC,IAAItJ,EACAisB,EAAS,GACb,IAAKjsB,KAAQsJ,EACE,OAATtJ,GAA0B,MAATA,IACnBisB,EAAOjsB,GAAQsJ,EAAMtJ,IAGzB,OAAOisB,GAET8rK,EAAS+hH,GAAY,CACnBpzM,SAAUA,EACVo+K,kBAAmB92M,EAAS82M,kBAC5BxzE,2BAA4BtjI,EAASsjI,2BACrCqoG,eAAgB3rO,EAAS2rO,eACzBJ,sBAAuBoiB,EAAsB9uT,EAAOu1Q,0BACpDnvE,MAAO,SAAUzgM,GACfF,EAAKqS,OAAO42S,EAAW,SAAU,IAAI5hU,MAAQ6Y,GAE/CA,KAAM,SAAUA,EAAM8f,GACpB,IAAI6sQ,EACC07B,IACHroT,EAAOA,EAAKuB,QAAQonT,EAAqB,KACrClC,GAAgB3mT,EAAKgpL,UAAWkB,KAClChqL,EAAOA,EAAKuB,QAAQknT,EAAuB,MAG3B,IAAhBzoT,EAAKhZ,SACP2lS,EAAWo8B,EAAW,QAAS,GAC/Bp8B,EAAS7sQ,MAAQA,EACjBhgB,EAAKqS,OAAOw6Q,GAAUxlS,MAAQ6Y,IAGlCwgM,QAAS,SAAUxgM,GACjBF,EAAKqS,OAAO42S,EAAW,WAAY,IAAI5hU,MAAQ6Y,GAEjDglS,GAAI,SAAUx3S,EAAMwS,GAClBF,EAAKqS,OAAO42S,EAAWv7T,EAAM,IAAIrG,MAAQ6Y,EACzCgpT,EAAuBlpT,IAEzBmlS,QAAS,SAAUjlS,GACjB,IAAIopT,EACJA,EAAUtpT,EAAKqS,OAAO42S,EAAW,WAAY,KAC7CK,EAAQjiU,MAAQ6Y,EAChBgpT,EAAuBlpT,IAEzBkG,MAAO,SAAUxY,EAAM8mB,EAAO3B,GAC5B,IAAIy2S,EAASC,EAAgB5jB,EAAazgG,EAAU5zL,EAEpD,GADAq0R,EAAcvxM,EAAW75F,EAAOs0Q,eAAenhR,GAAQ,GACnDi4S,EAAa,CACf2jB,EAAUL,EAAWtjB,EAAYx4B,YAAcz/Q,EAAM,GACrD47T,EAAQhvS,WAAa9F,EACrB80S,EAAQhkH,WAAazyL,EACrB7S,EAAKqS,OAAOi3S,GACZh4S,EAASG,EAASzR,EAAKtS,MACnB4jB,GAAUG,EAAS63S,EAAQ57T,QAAU4jB,EAAOg4S,EAAQ57T,OACtD86T,EAAgB95T,KAAK46T,GAEvBC,EAAiB/f,EAAiBtiT,OAClC,MAAOqiU,IACLrkH,EAAWskG,EAAiB+f,GAAgB77T,KACxCw3M,KAAY1wL,EAAMlpB,MACpBmuB,EAAOmuS,EAAkB1iH,GACrBzrL,EACFA,EAAK/qB,KAAK46T,GAEV1B,EAAkB1iH,GAAY,CAACokH,IAIjCp/H,EAAcx8L,IAChBw7T,EAAuBI,GAEpBz2S,IACH7S,EAAOspT,IAEJf,GAAkCzB,EAAmBp5T,KACxD66T,GAAiC,KAIvCv1M,IAAK,SAAUtlH,GACb,IAAIm/R,EAAU8Y,EAAazlS,EAAMkS,EAAS41S,EAE1C,GADAriB,EAAcvxM,EAAW75F,EAAOs0Q,eAAenhR,GAAQ,GACnDi4S,EAAa,CACf,GAAIz7G,EAAcx8L,KACX66T,EAAgC,CAEnC,GADA17B,EAAW7sR,EAAK6R,WACZg7Q,GAA8B,IAAlBA,EAASj/R,KAEvB,GADAsS,EAAO2sR,EAASxlS,MAAMoa,QAAQknT,EAAuB,IACjDzoT,EAAKhZ,OAAS,EAChB2lS,EAASxlS,MAAQ6Y,EACjB2sR,EAAWA,EAASjwR,SACf,CACLwV,EAAUy6Q,EAASjwR,KACnBiwR,EAAS75Q,SACT65Q,EAAWz6Q,EACX,MAAOy6Q,GAA8B,IAAlBA,EAASj/R,KAC1BsS,EAAO2sR,EAASxlS,MAChB+qB,EAAUy6Q,EAASjwR,MACC,IAAhBsD,EAAKhZ,QAAgB4hU,EAAsB5nT,KAAKhB,MAClD2sR,EAAS75Q,SACT65Q,EAAWz6Q,GAEby6Q,EAAWz6Q,EAKjB,GADAy6Q,EAAW7sR,EAAKgpL,UACZ6jG,GAA8B,IAAlBA,EAASj/R,KAEvB,GADAsS,EAAO2sR,EAASxlS,MAAMoa,QAAQmnT,EAAqB,IAC/C1oT,EAAKhZ,OAAS,EAChB2lS,EAASxlS,MAAQ6Y,EACjB2sR,EAAWA,EAAS1gI,SACf,CACL/5I,EAAUy6Q,EAAS1gI,KACnB0gI,EAAS75Q,SACT65Q,EAAWz6Q,EACX,MAAOy6Q,GAA8B,IAAlBA,EAASj/R,KAC1BsS,EAAO2sR,EAASxlS,MAChB+qB,EAAUy6Q,EAAS1gI,MACC,IAAhBjsJ,EAAKhZ,QAAgB4hU,EAAsB5nT,KAAKhB,MAClD2sR,EAAS75Q,SACT65Q,EAAWz6Q,GAEby6Q,EAAWz6Q,GASrB,GAHIm2S,GAAkCzB,EAAmBp5T,KACvD66T,GAAiC,GAE/B5iB,EAAYl4B,aAAe+4C,GAAUjsT,EAAQksT,EAAkBK,EAAoB9mT,GAQrF,OAPAgoT,EAAWhoT,EAAKsR,OACZ44K,EAAclqL,EAAKtS,MACrBsS,EAAK6S,QAAQG,SAEbhT,EAAKkT,cAEPlT,EAAOgoT,GAGLriB,EAAYn4B,YAAc64C,GAAiBrmT,IAASwmT,GAAUjsT,EAAQksT,EAAkBK,EAAoB9mT,KAC9GkmT,GAAcxqP,EAAU30E,EAAMmjM,EAAelqL,GAE/CA,EAAOA,EAAKsR,UAGf/W,GACH,IAAI+oE,EAAWtjE,EAAO,IAAIgkS,GAAOj9S,EAAKkgF,SAAWvL,EAASmsP,UAAW,IAYrE,GAXApiI,EAAOjtG,MAAMp5E,EAAMrY,EAAKw0F,QACpB6Y,GAAYo0N,EAAgBthU,SACzBH,EAAKkgF,QAGRlgF,EAAKsyJ,SAAU,EAFfyuK,EAAmBU,IAKnBE,IAAoC,SAAlBplP,EAAS51E,MAAmB3G,EAAK4rN,gBACrDo2G,KAEGhiU,EAAKsyJ,QAAS,CACjB,IAAK3rJ,KAAQi6T,EACX,GAAKA,EAAaz+T,eAAewE,GAAjC,CAGA+rB,EAAO8vR,EAAY77S,GACnB83L,EAAQmiI,EAAaj6T,GACrB26T,EAAK7iI,EAAMt+L,OACX,MAAOmhU,IACA7iI,EAAM6iI,GAAI/2S,QACbk0K,EAAMxsG,OAAOqvO,EAAI,GAGrB,IAAKv/T,EAAI,EAAG8zG,EAAInjF,EAAKvyB,OAAQ4B,EAAI8zG,EAAG9zG,IAClC2wB,EAAK3wB,GAAG08L,EAAO93L,EAAM3G,GAGzB,IAAK+B,EAAI,EAAG8zG,EAAI4sM,EAAiBtiT,OAAQ4B,EAAI8zG,EAAG9zG,IAE9C,GADA2wB,EAAO+vR,EAAiB1gT,GACpB2wB,EAAK/rB,QAAQk6T,EAAmB,CAClCpiI,EAAQoiI,EAAkBnuS,EAAK/rB,MAC/B26T,EAAK7iI,EAAMt+L,OACX,MAAOmhU,IACA7iI,EAAM6iI,GAAI/2S,QACbk0K,EAAMxsG,OAAOqvO,EAAI,GAGrB,IAAKA,EAAK,EAAGC,EAAK7uS,EAAK24E,UAAUlrG,OAAQmhU,EAAKC,EAAID,IAChD5uS,EAAK24E,UAAUi2N,GAAI7iI,EAAO/rK,EAAK/rB,KAAM3G,IAK7C,OAAOu8E,GAELspB,EAAU,CACZryF,OAAQA,EACRwsM,mBAAoBA,EACpB6mG,oBAAqBA,EACrBloH,cAAeA,EACfioH,eAAgBA,EAChBya,WAAYA,EACZ5vO,MAAOA,GAIT,OAFA6K,GAAWuJ,EAASlxB,GACpBuqP,GAAaz9O,SAASokB,EAASlxB,GACxBkxB,GAGLmzC,GAAa,SAAUypL,EAAY9tP,EAAUt7D,GAC/CopT,EAAWziH,mBAAmB,qBAAqB,SAAUvhB,EAAO93L,GAClE,IAAsBsS,EAAlBlX,EAAI08L,EAAMt+L,OACd,MAAO4B,IACLkX,EAAOwlL,EAAM18L,GACbkX,EAAK8d,KAAK,WAAY9d,EAAK8d,KAAK,sBAChC9d,EAAK8d,KAAKpwB,EAAM,SAGpB87T,EAAWziH,mBAAmB,kBAAkB,SAAUvhB,EAAO93L,GAC/D,IAAsBsS,EAAM3Y,EAAxByB,EAAI08L,EAAMt+L,OACVuiU,EAAe,YAAc/7T,EAC7B8jR,EAAe91M,EAAS+1M,cACxBC,EAAoBh2M,EAASi2M,oBACjC,MAAO7oR,IACLkX,EAAOwlL,EAAM18L,GACbzB,EAAQ2Y,EAAK8d,KAAK2rS,QACJt+T,IAAV9D,GACF2Y,EAAK8d,KAAKpwB,EAAMrG,EAAMH,OAAS,EAAIG,EAAQ,MAC3C2Y,EAAK8d,KAAK2rS,EAAc,QAExBpiU,EAAQ2Y,EAAK8d,KAAKpwB,GACL,UAATA,EACFrG,EAAQ+Y,EAAI+/L,eAAe//L,EAAIsgI,WAAWr5I,GAAQ2Y,EAAKtS,MAC9C8jR,IACTnqR,EAAQmqR,EAAaroR,KAAKuoR,EAAmBrqR,EAAOqG,EAAMsS,EAAKtS,OAEjEsS,EAAK8d,KAAKpwB,EAAMrG,EAAMH,OAAS,EAAIG,EAAQ,UAIjDmiU,EAAWziH,mBAAmB,SAAS,SAAUvhB,GAC/C,IAAsBxlL,EAAM3Y,EAAxByB,EAAI08L,EAAMt+L,OACd,MAAO4B,IACLkX,EAAOwlL,EAAM18L,GACbzB,EAAQ2Y,EAAK8d,KAAK,SACdz2B,IACFA,EAAQ2Y,EAAK8d,KAAK,SAASrc,QAAQ,8BAA+B,IAClEzB,EAAK8d,KAAK,QAASz2B,EAAMH,OAAS,EAAIG,EAAQ,UAIpDmiU,EAAWziH,mBAAmB,iBAAiB,SAAUvhB,EAAO93L,EAAM3G,GACpE,IAAsBiZ,EAAlBlX,EAAI08L,EAAMt+L,OACd,MAAO4B,IAEL,GADAkX,EAAOwlL,EAAM18L,GACsB,aAA/BkX,EAAK8d,KAAK,mBAAoC/2B,EAAK0zT,QAAS,CAC9D,IAAIiP,EAAcl9T,EAAOD,KAAKyT,EAAK6R,YAAYpmB,QAAO,SAAUomB,GAC9D,OAAQw6Q,GAAKF,OAAOt6Q,EAAWxqB,UAE7BqiU,EACF1pT,EAAKkT,SAELlT,EAAKgT,aAKbw2S,EAAW9jI,cAAc,YAAY,SAAUF,GAC7C,IAAsBxlL,EAAlBlX,EAAI08L,EAAMt+L,OACd,MAAO4B,IACLkX,EAAOwlL,EAAM18L,GAAG+oB,WACZ7R,IACFA,EAAK3Y,MAAQijR,GAASjvD,OAAOr7M,EAAK3Y,WAIxCmiU,EAAW9jI,cAAc,gBAAgB,SAAUF,EAAO93L,GACxD,IAAsBsS,EAAM3Y,EAAOuG,EAA/B9E,EAAI08L,EAAMt+L,OACVof,EAAO,SAAUjf,GACnB,OAAOA,EAAMoa,QAAQ,2BAA4B,MAAMA,QAAQ,qBAAsB,IAAIA,QAAQ,0HAA2H,IAAIA,QAAQ,4GAA6G,KAEvV,MAAO3Y,IACLkX,EAAOwlL,EAAM18L,GACbzB,EAAQ2Y,EAAK6R,WAAa7R,EAAK6R,WAAWxqB,MAAQ,GACrC,WAATqG,GACFE,EAAOoS,EAAK8d,KAAK,QACblwB,GACFoS,EAAK8d,KAAK,OAAiB,gBAATlwB,EAAyB,KAAOA,EAAK6T,QAAQ,SAAU,KAE3C,UAA5Bi6D,EAASqtO,gBAA8B1hT,EAAMH,OAAS,IACxD8Y,EAAK6R,WAAWxqB,MAAQ,iBAAmBif,EAAKjf,GAAS,aAG3B,UAA5Bq0E,EAASqtO,gBAA8B1hT,EAAMH,OAAS,IACxD8Y,EAAK6R,WAAWxqB,MAAQ,YAAWif,EAAKjf,GAAS,eAKzDmiU,EAAW9jI,cAAc,YAAY,SAAUF,GAC7C,IAAsBxlL,EAAlBlX,EAAI08L,EAAMt+L,OACd,MAAO4B,IACLkX,EAAOwlL,EAAM18L,GACT4yE,EAAS2rO,gBAAoD,IAAlCrnS,EAAK3Y,MAAMkC,QAAQ,YAChDyW,EAAKtS,KAAO,SACZsS,EAAKpS,KAAO,EACZoS,EAAK3Y,MAAQ+Y,EAAIi7M,OAAOr7M,EAAK3Y,MAAMoa,QAAQ,oBAAqB,MACd,IAAzCzB,EAAK3Y,MAAMkC,QAAQ,oBAC5ByW,EAAKtS,KAAO,QACZsS,EAAKpS,KAAO,EACZoS,EAAKggB,KAAM,EACXhgB,EAAK3Y,MAAQ6/M,SAASlnM,EAAK3Y,OAAO4e,OAAO,QAI/CujT,EAAW9jI,cAAc,uBAAuB,SAAUF,EAAO93L,GAC/D,IAAsBsS,EAAlBlX,EAAI08L,EAAMt+L,OACd,MAAO4B,IACLkX,EAAOwlL,EAAM18L,GACK,IAAdkX,EAAKpS,KACPoS,EAAKgT,SACkB,IAAdhT,EAAKpS,OACD,UAATF,GAAqBsS,EAAK8d,KAAK,SACjC9d,EAAK8d,KAAK,OAAQ,YAK1B0rS,EAAWziH,mBAAmB,iBAAiB,SAAUvhB,GACvDj6L,EAAKi6L,GAAO,SAAUxlL,GACe,iBAA/BA,EAAK8d,KAAK,mBACR9d,EAAKqqL,QAAQm/H,EAAWjvT,OAAOq7L,uBACjC51L,EAAKgT,SAELhT,EAAKkT,gBAKbs2S,EAAWziH,mBAAmB,mIAA6I,SAAUvhB,EAAO93L,GAC1L,IAAI5E,EAAI08L,EAAMt+L,OACd,MAAO4B,IACL08L,EAAM18L,GAAGg1B,KAAKpwB,EAAM,UAItBi8T,GAAiB,SAAUrmP,GAC7B,IAAIsmP,EAASC,EACThgI,EAAO,SAAU7pL,GACnB,OAAOA,GAAsB,OAAdA,EAAKtS,MAEtBk8T,EAAUtmP,EAAS0lH,UACfa,EAAK+/H,KACPC,EAAUD,EAAQz9J,KACd09B,EAAKggI,KACPD,EAAQ52S,SACR62S,EAAQ72S,YAIV82S,GAAuB,CACzBthP,SAAUu3D,GACV4pL,eAAgBA,IAGdp3G,GAAa,SAAU92I,EAAQz7D,EAAMjZ,GACvC,IAAIgjU,EAAMzqT,EAAK0qT,EACX5pT,EAAMq7D,EAAOr7D,IAoBjB,OAnBAJ,EAAOA,EAAK8T,WAAU,GACtBi2S,EAAOvjU,EAAW+Y,SAAS0qT,eACvBF,EAAKG,qBACP5qT,EAAMyqT,EAAKG,mBAAmB,IAC9B3hU,GAAMgD,KAAuB,SAAlByU,EAAKgU,SAAsBhU,EAAKJ,WAAa,CAACI,IAAO,SAAUA,GACxEV,EAAI2f,KAAKzM,YAAYlT,EAAI6qT,WAAWnqT,GAAM,OAG1CA,EADoB,SAAlBA,EAAKgU,SACA1U,EAAI2f,KAAKpN,WAETvS,EAAI2f,KAEb+qS,EAAS5pT,EAAId,IACbc,EAAId,IAAMA,GAEZuuS,GAAepyO,EAAQhzE,GAASA,GAAS,GAAI1B,GAAO,CAAEiZ,KAAMA,KACxDgqT,IACF5pT,EAAId,IAAM0qT,GAELhqT,GAELoqT,GAAkB,SAAU3uP,EAAQ10E,GACtC,OAAO00E,GAAUA,EAAO23I,kBAAkB,gBAAkBrsN,EAAKshT,WAE/DhlO,GAAU,SAAU5H,EAAQz7D,EAAMjZ,GACpC,OAAOqjU,GAAgB3uP,EAAQ10E,GAAQwrN,GAAW92I,EAAQz7D,EAAMjZ,GAAQiZ,GAEtEqqT,GAA0B,CAAEhnP,QAASA,IAErCskL,GAAc,SAAU6hE,EAAY/hB,EAAW/5S,IACT,IAApCnF,GAAM6vM,QAAQqvG,EAAW/5S,KAC3B87T,EAAWziH,mBAAmBr5M,GAAM,SAAU83L,EAAO93L,GACnD,IAAI5E,EAAI08L,EAAMt+L,OACd,MAAO4B,IACL08L,EAAM18L,GAAGg1B,KAAKpwB,EAAM,SAGxB+5S,EAAU/4S,KAAKhB,KAGfgtN,GAAc,SAAUj/I,EAAQ10E,EAAMusB,GACxC,IAAKvsB,EAAKshT,WAAa5sO,EAAQ,CAC7B,IAAI6uP,EAAUxc,GAAgBryO,EAAQhzE,GAASA,GAAS,GAAI1B,GAAO,CAAEusB,QAASA,KAC9E,OAAOg3S,EAAQh3S,QAEf,OAAOA,GAGPi3S,GAAkB,SAAUnqT,EAAKJ,EAAMjZ,GACzC,IAAIqY,EAAOitR,GAAK/lR,KAAKvf,EAAKqhT,SAAWpoS,EAAKN,UAAYU,EAAIslR,aAAa1lR,IACvE,OAAOjZ,EAAKo4C,WAAa2nO,GAAoBrmQ,GAAQZ,QAAQG,IAASZ,EAAO7W,GAAM+d,KAAKlH,IAEtForT,GAAY,SAAUhB,EAAYpqT,EAAMrY,GAC1C,IAAI0jU,EAAa1jU,EAAKo4C,UAAY12C,GAAS,CAAEiqN,mBAAmB,GAAS3rN,GAAQA,EAC7Eu8E,EAAWkmP,EAAWhxO,MAAMp5E,EAAMqrT,GAEtC,OADAX,GAAqBH,eAAermP,GAC7BA,GAELonP,GAAgB,SAAUhvP,EAAUnhE,EAAQyF,GAC9C,IAAI2qT,EAAiB3hB,GAAWttO,EAAUnhE,GAC1C,OAAOowT,EAAe/mH,UAAU5jM,IAE9B4qT,GAAS,SAAUnvP,EAAQC,EAAUnhE,EAAQ+oE,EAAUv8E,GACzD,IAAIusB,EAAUo3S,GAAchvP,EAAUnhE,EAAQ+oE,GAC9C,OAAOo3I,GAAYj/I,EAAQ10E,EAAMusB,IAE/Bu3S,GAAgB,SAAUnvP,EAAUD,GACtC,IAAIgsO,EAAY,CAAC,qBACbrnS,EAAMq7D,GAAUA,EAAOr7D,IAAMq7D,EAAOr7D,IAAM0mR,GAAWvqN,IACrDhiE,EAASkhE,GAAUA,EAAOlhE,OAASkhE,EAAOlhE,OAASkxQ,GAAO/vM,GAC9DA,EAASotO,gBAAkBptO,EAASotO,iBAAmB,QACvDptO,EAASkrP,sBAAsB,wBAAyBlrP,IAAWA,EAASkrP,oBAC5E,IAAI4C,EAAa9B,GAAUhsP,EAAUnhE,GACrCuvT,GAAqBthP,SAASghP,EAAY9tP,EAAUt7D,GACpD,IAAIwjM,EAAY,SAAU5jM,EAAMyqT,QACX,IAAfA,IACFA,EAAa,IAEf,IAAI1jU,EAAO0B,GAAS,CAAE8yF,OAAQ,QAAUkvO,GACpCz2J,EAAaq2J,GAAwBhnP,QAAQ5H,EAAQz7D,EAAMjZ,GAC3DqY,EAAOmrT,GAAgBnqT,EAAK4zJ,EAAYjtK,GACxCu8E,EAAWknP,GAAUhB,EAAYpqT,EAAMrY,GAC3C,MAAuB,SAAhBA,EAAKw0F,OAAoBjY,EAAWsnP,GAAOnvP,EAAQC,EAAUnhE,EAAQ+oE,EAAUv8E,IAExF,MAAO,CACLwT,OAAQA,EACRmrL,cAAe8jI,EAAW9jI,cAC1BqhB,mBAAoByiH,EAAWziH,mBAC/BnD,UAAWA,EACXknH,SAAU,SAAUhuQ,GAClBviD,EAAOsyQ,iBAAiB/vN,IAE1BiuQ,SAAU,SAAUjuQ,GAClBviD,EAAO0zQ,iBAAiBnxN,IAE1B6qM,YAAangQ,EAAMmgQ,GAAa6hE,EAAY/hB,GAC5CK,aAAc,WACZ,OAAOL,GAETkG,eAAgB6b,EAAW7b,eAC3BC,oBAAqB4b,EAAW5b,sBAIhCod,GAAe,SAAUtvP,EAAUD,GACrC,IAAIwvP,EAAgBJ,GAAcnvP,EAAUD,GAC5C,MAAO,CACLlhE,OAAQ0wT,EAAc1wT,OACtBmrL,cAAeulI,EAAcvlI,cAC7BqhB,mBAAoBkkH,EAAclkH,mBAClCnD,UAAWqnH,EAAcrnH,UACzBknH,SAAUG,EAAcH,SACxBC,SAAUE,EAAcF,SACxBpjE,YAAasjE,EAActjE,YAC3BmgD,aAAcmjB,EAAcnjB,aAC5B6F,eAAgBsd,EAActd,eAC9BC,oBAAqBqd,EAAcrd,sBAInCsd,GAAgB,SAAUhgO,GAC5B,OAAO,IAAIu2K,IAAW,SAAUj5Q,EAASunG,GACvC,IAAIo7N,EAAkB,WACpBp7N,EAAO,kBAAoB7E,EAAM,2DAEnC,IACE,IAAI+uK,EAAM,IAAIzzQ,EAAW0zQ,eACzBD,EAAIhwN,KAAK,MAAOihD,GAAK,GACrB+uK,EAAImxD,aAAe,OACnBnxD,EAAIvjD,OAAS,WACS,MAAhBttN,KAAK4hC,OACPxiC,EAAQY,KAAK+vJ,UAEbgyK,KAGJlxD,EAAIjE,QAAUm1D,EACdlxD,EAAI9L,OACJ,MAAO99J,GACP86N,SAIFE,GAAe,SAAUh5M,GAC3B,IAAIzkH,EAAMqZ,EACNqkT,EAAWtkB,mBAAmB30L,GAAKj6F,MAAM,KAK7C,OAJAnR,EAAU,eAAeuvE,KAAK80O,EAAS,IACnCrkT,IACFrZ,EAAOqZ,EAAQ,IAEV,CACLrZ,KAAMA,EACNqgB,KAAMq9S,EAAS,KAGfj4M,GAAgB,SAAUhB,GAC5B,OAAO,IAAIovJ,IAAW,SAAUj5Q,GAC9B,IAAIwd,EAAKxW,EAAK1G,EACVwiU,EAAWD,GAAah5M,GAC5B,IACErsG,EAAMxf,EAAWksH,KAAK44M,EAASr9S,MAC/B,MAAO3kB,IAEP,YADAd,EAAQ,IAAIhC,EAAW4sH,KAAK,KAI9B,IADA5jH,EAAM,IAAI2jH,WAAWntG,EAAI9e,QACpB4B,EAAI,EAAGA,EAAI0G,EAAItI,OAAQ4B,IAC1B0G,EAAI1G,GAAKkd,EAAIktG,WAAWpqH,GAE1BN,EAAQ,IAAIhC,EAAW4sH,KAAK,CAAC5jH,GAAM,CAAE5B,KAAM09T,EAAS19T,YAGpD29T,GAAY,SAAUrgO,GACxB,OAA6B,IAAzBA,EAAI3hG,QAAQ,SACP2hU,GAAchgO,GAEM,IAAzBA,EAAI3hG,QAAQ,SACP8pH,GAAcnoB,GAEhB,MAEL4oB,GAAgB,SAAUl6F,GAC5B,OAAO,IAAI6nP,IAAW,SAAUj5Q,GAC9B,IAAIurH,EAAS,IAAIvtH,EAAWwtH,WAC5BD,EAAOE,UAAY,WACjBzrH,EAAQurH,EAAO99G,SAEjB89G,EAAOG,cAAct6F,OAGrB4xS,GAAc,CAChBD,UAAWA,GACXz3M,cAAeA,GACfu3M,aAAcA,IAGZt5T,GAAQ,EACR6jN,GAAW,SAAUhgM,GACvB,OAAQA,GAAU,UAAY7jB,MAE5B05T,GAAkB,SAAUz1G,EAAWlpF,EAAKtkI,EAASunG,GACvD,IAAIwiB,EAAQ2jG,EACZ,GAAiC,IAA7BppF,EAAI3a,IAAI5oH,QAAQ,SAsBlB,OArBA2sN,EAAWF,EAAU01G,SAAS5+L,EAAI3a,UAC9B+jG,EACF1tN,EAAQ,CACN2oH,MAAO2b,EACPopF,SAAUA,IAGZs1G,GAAYD,UAAUz+L,EAAI3a,KAAKtqC,MAAK,SAAUjuD,GAC5C4xS,GAAY13M,cAAcl6F,GAAMiuD,MAAK,SAAU8jP,GAC7Cp5M,EAASi5M,GAAYH,aAAaM,GAAS19S,KAC3CioM,EAAWF,EAAU3lL,OAAOulL,KAAYh8L,EAAM24F,GAC9CyjG,EAAUj4L,IAAIm4L,GACd1tN,EAAQ,CACN2oH,MAAO2b,EACPopF,SAAUA,UAGb,SAAU7oN,GACX0iG,EAAO1iG,OAKbklH,EAASi5M,GAAYH,aAAav+L,EAAI3a,KAAKlkG,KAC3CioM,EAAWF,EAAUI,WAAU,SAAUC,GACvC,OAAOA,EAAe9jG,WAAaA,KAEjC2jG,EACF1tN,EAAQ,CACN2oH,MAAO2b,EACPopF,SAAUA,IAGZs1G,GAAYD,UAAUz+L,EAAI3a,KAAKtqC,MAAK,SAAUjuD,GAC5Cs8L,EAAWF,EAAU3lL,OAAOulL,KAAYh8L,EAAM24F,GAC9CyjG,EAAUj4L,IAAIm4L,GACd1tN,EAAQ,CACN2oH,MAAO2b,EACPopF,SAAUA,OAEX,SAAU7oN,GACX0iG,EAAO1iG,OAITu+T,GAAe,SAAU7nP,GAC3B,OAAOA,EAAMrzE,EAAOqzE,EAAI63H,qBAAqB,QAAU,IAEzD,SAASiwH,GAAaC,EAAc91G,GAClC,IAAI+1G,EAAiB,GACjBzgC,EAAU,SAAUvnN,EAAKx1D,GAC3B,IAAIqoM,EACCroM,IACHA,EAAYnnB,GAAS,IAEvBwvN,EAASjrN,EAAOigU,GAAa7nP,IAAM,SAAU+oD,GAC3C,IAAI3a,EAAM2a,EAAI3a,IACd,QAAKowJ,GAAIF,WAGLv1I,EAAIj4G,aAAa,qBAGjBi4G,EAAIj4G,aAAa,6BAGhBs9F,GAAOA,IAAQowJ,GAAI/8D,kBAGK,IAAzBrzF,EAAI5oH,QAAQ,UACNuiU,EAAaE,WAAW75M,IAAQ5jG,EAAUu+G,GAEvB,IAAzB3a,EAAI5oH,QAAQ,UACPglB,EAAUu+G,UAIrB,IAAIm/L,EAAW3gU,EAAIsrN,GAAQ,SAAU9pF,GACnC,GAAIi/L,EAAej/L,EAAI3a,KACrB,OAAO,IAAIsvJ,IAAW,SAAUj5Q,GAC9BujU,EAAej/L,EAAI3a,KAAKtqC,MAAK,SAAUqkP,GACrC,GAAyB,kBAAdA,EACT,OAAOA,EAET1jU,EAAQ,CACN2oH,MAAO2b,EACPopF,SAAUg2G,EAAUh2G,iBAK5B,IAAIi2G,EAAa,IAAI1qD,IAAW,SAAUj5Q,EAASunG,GACjD07N,GAAgBz1G,EAAWlpF,EAAKtkI,EAASunG,MACxCloB,MAAK,SAAU5xE,GAEhB,cADO81T,EAAe91T,EAAOk7G,MAAMgB,KAC5Bl8G,KACNw7G,OAAM,SAAUzkH,GAEjB,cADO++T,EAAej/L,EAAI3a,KACnBnlH,KAGT,OADA++T,EAAej/L,EAAI3a,KAAOg6M,EACnBA,KAET,OAAO1qD,GAAW75Q,IAAIqkU,IAExB,MAAO,CAAE3gC,QAASA,GAGpB,SAASvxB,GAAS+xD,EAAcpwP,GAC9B,IAAI0wP,EAAkB,GAClBxyD,EAAW,SAAUC,EAAOC,GAC9B,OAAID,EACKA,EAAMp4P,QAAQ,MAAO,IAAM,IAAMq4P,EAAMr4P,QAAQ,MAAO,IAExDq4P,GAELE,EAAiB,SAAU9jD,EAAU12I,EAAS28K,EAASl8K,GACzD,IAAIg6L,EAAK7gF,EACT6gF,EAAM,IAAIzzQ,EAAW0zQ,eACrBD,EAAIhwN,KAAK,OAAQyxB,EAASwvB,KAC1B+uK,EAAIE,gBAAkBz+L,EAAS0+L,YAC/BH,EAAII,OAAOC,WAAa,SAAUhxQ,GAChC22E,EAAS32E,EAAE4oH,OAAS5oH,EAAE09I,MAAQ,MAEhCizH,EAAIjE,QAAU,WACZ7Z,EAAQ,2DAA6D8d,EAAIjvO,SAE3EivO,EAAIvjD,OAAS,WACX,IAAI6jD,EACAN,EAAIjvO,OAAS,KAAOivO,EAAIjvO,QAAU,IACpCmxN,EAAQ,eAAiB8d,EAAIjvO,SAG/BuvO,EAAOtjQ,KAAKuhF,MAAMyhL,EAAIO,cACjBD,GAAiC,kBAAlBA,EAAKv4F,SAIzBxiG,EAAQo6L,EAASl+L,EAAS++L,SAAUF,EAAKv4F,WAHvCm6E,EAAQ,iBAAmB8d,EAAIO,gBAKnCphF,EAAW,IAAI5yL,EAAWk0Q,SAC1BthF,EAAS/mK,OAAO,OAAQ6jM,EAASt8L,OAAQs8L,EAASykD,YAClDV,EAAI9L,KAAK/0E,IAEPizI,EAAW,WACb,OAAO,IAAI5qD,IAAW,SAAUj5Q,GAC9BA,EAAQ,QAGR8jU,EAAiB,SAAUp2G,EAAUhrH,GACvC,MAAO,CACLA,IAAKA,EACLgrH,SAAUA,EACVlrL,QAAQ,IAGRuhS,EAAiB,SAAUr2G,EAAUlpN,GACvC,MAAO,CACLk+F,IAAK,GACLgrH,SAAUA,EACVlrL,QAAQ,EACRh+B,MAAOA,IAGPw/T,EAAiB,SAAUl2G,EAASrgN,GACtC1N,GAAMgD,KAAK6gU,EAAgB91G,IAAU,SAAU9tN,GAC7CA,EAAQyN,aAEHm2T,EAAgB91G,IAErBm2G,EAAiB,SAAUv2G,EAAUzrM,EAASiiT,GAEhD,OADAZ,EAAaa,YAAYz2G,EAASI,WAC3B,IAAImrD,IAAW,SAAUj5Q,GAC9B,IAAI64E,EAAcpB,EACdx5E,EAAO,aAEX,IACE,IAAImmU,EAAsB,WACpBvrP,IACFA,EAAa52B,QACbw1B,EAAWx5E,IAGX+4E,EAAU,SAAU0rB,GACtB0hO,IACAd,EAAae,aAAa32G,EAASI,UAAWprH,GAC9CshO,EAAet2G,EAASI,UAAWg2G,EAAep2G,EAAUhrH,IAC5D1iG,EAAQ8jU,EAAep2G,EAAUhrH,KAE/BixJ,EAAU,SAAUnvP,GACtB4/T,IACAd,EAAagB,aAAa52G,EAASI,WACnCk2G,EAAet2G,EAASI,UAAWi2G,EAAer2G,EAAUlpN,IAC5DxE,EAAQ+jU,EAAer2G,EAAUlpN,KAEnCizE,EAAW,SAAUH,GACfA,EAAU,GAAKA,EAAU,MAGxBuB,IACHA,EAAeqrP,KAEjBrrP,EAAaU,YAAY16E,MAAMy4E,KAEjCr1D,EAAQyrM,EAAU12I,EAAS28K,EAASl8K,GACpC,MAAOowB,GACP7nG,EAAQ+jU,EAAer2G,EAAU7lH,EAAGpjG,eAItC4tQ,EAAmB,SAAUpwP,GAC/B,OAAOA,IAAYuvP,GAEjB+yD,EAAwB,SAAU72G,GACpC,IAAII,EAAUJ,EAASI,UACvB,OAAO,IAAImrD,IAAW,SAAUj5Q,GAC9B4jU,EAAgB91G,GAAW81G,EAAgB91G,IAAY,GACvD81G,EAAgB91G,GAAS5nN,KAAKlG,OAG9BwkU,EAAc,SAAUC,EAAWP,GAIrC,OAHAO,EAAY1kU,GAAMq+L,KAAKqmI,GAAW,SAAU/2G,GAC1C,OAAQ41G,EAAaE,WAAW91G,EAASI,cAEpCmrD,GAAW75Q,IAAIW,GAAM+C,IAAI2hU,GAAW,SAAU/2G,GACnD,OAAO41G,EAAaoB,UAAUh3G,EAASI,WAAay2G,EAAsB72G,GAAYu2G,EAAev2G,EAAUx6I,EAASjxD,QAASiiT,QAGjIryD,EAAS,SAAU4yD,EAAWP,GAChC,OAAQhxP,EAASwvB,KAAO2vK,EAAiBn/L,EAASjxD,SAAW4hT,IAAaW,EAAYC,EAAWP,IAKnG,OAHqC,IAAjCz+T,EAAWytE,EAASjxD,WACtBixD,EAASjxD,QAAUuvP,GAEd,CAAEK,OAAQA,GAGnB,SAAS8yD,KACP,IAAIC,EAAU,EAAGC,EAAW,EACxBC,EAAkB,GAClBC,EAAe,SAAUviS,EAAQwiS,GACnC,MAAO,CACLxiS,OAAQA,EACRwiS,UAAWA,IAGXC,EAAa,SAAUn3G,GACzB,OAAOA,KAAWg3G,GAEhBI,EAAe,SAAUp3G,GAC3B,IAAIrgN,EAASq3T,EAAgBh3G,GAC7B,OAAOrgN,EAASA,EAAOu3T,UAAY,MAEjCN,EAAY,SAAU52G,GACxB,QAAOm3G,EAAWn3G,IAAWg3G,EAAgBh3G,GAAStrL,SAAWoiS,GAE/DpB,EAAa,SAAU11G,GACzB,QAAOm3G,EAAWn3G,IAAWg3G,EAAgBh3G,GAAStrL,SAAWqiS,GAE/DV,EAAc,SAAUr2G,GAC1Bg3G,EAAgBh3G,GAAWi3G,EAAaH,EAAS,OAE/CP,EAAe,SAAUv2G,EAASk3G,GACpCF,EAAgBh3G,GAAWi3G,EAAaF,EAAUG,IAEhDV,EAAe,SAAUx2G,UACpBg3G,EAAgBh3G,IAErBnsH,EAAU,WACZmjO,EAAkB,IAEpB,MAAO,CACLG,WAAYA,EACZC,aAAcA,EACdR,UAAWA,EACXlB,WAAYA,EACZW,YAAaA,EACbE,aAAcA,EACdC,aAAcA,EACd3iO,QAASA,GAIb,IAAIwjO,GAAU,EACVp1C,GAAO,WACT,IAAIq1C,EAAM,WACR,OAAO13S,KAAK6gE,MAAsB,WAAhB7gE,KAAKD,UAAuBlqB,SAAS,KAErD8mQ,GAAM,IAAI/8O,MAAOE,UACrB,MAAO,IAAM68O,EAAI9mQ,SAAS,IAAM6hU,IAAQA,IAAQA,KAE9Ch7D,GAAO,SAAUh9O,GACnB,OAAOA,EAAS+3S,KAAYp1C,MAE1Bs1C,GAAO,CAAEj7D,KAAMA,IAEfk7D,GAAY,WACd,IAAIn1O,EAAQ,GACRo1O,EAAY,SAAUluH,GACxB,IAAIT,EAAQ,CACV,aAAc,MACd,YAAa,MACb,YAAa,MACb,YAAa,OAEf,OAAOA,EAAMS,EAAK/9L,gBAAkB,OAElCuuB,EAAS,SAAU/lC,EAAGsvB,EAAM24F,EAAQooJ,GACtC,GAAI9sQ,EAASvD,GAAI,CACf,IAAIG,EAAKH,EACT,OAAO0jU,EAAW,CAChBvjU,GAAIA,EACJiD,KAAMitQ,EACN/gP,KAAMA,EACN24F,OAAQA,IAEL,GAAIzkH,EAASxD,GAClB,OAAO0jU,EAAW1jU,GAElB,MAAM,IAAIrC,MAAM,uBAGhB+lU,EAAa,SAAU1jU,GACzB,IAAIG,EAAIiD,EACR,IAAKpD,EAAEsvB,OAAStvB,EAAEioH,OAChB,MAAM,IAAItqH,MAAM,wFAIlB,OAFAwC,EAAKH,EAAEG,IAAMojU,GAAKj7D,KAAK,UACvBllQ,EAAOpD,EAAEoD,MAAQjD,EACV,CACLA,GAAIrD,EAASqD,GACbiD,KAAMtG,EAASsG,GACfitQ,SAAUvzQ,EAASsG,EAAO,IAAMqgU,EAAUzjU,EAAEsvB,KAAKhsB,OACjDgsB,KAAMxyB,EAASkD,EAAEsvB,MACjB24F,OAAQnrH,EAASkD,EAAEioH,QACnB+jG,QAASlvN,EAASkD,EAAEgsN,SAAW9vN,EAAWsrH,IAAIC,gBAAgBznH,EAAEsvB,OAChEy4F,IAAKjrH,EAASkD,EAAE+nH,OAGhBt0F,EAAM,SAAUm4L,GACb5kN,EAAI4kN,EAASzrN,OAChBkuF,EAAMjqF,KAAKwnN,IAGX5kN,EAAM,SAAU7G,GAClB,OAAO2rN,GAAU,SAAUC,GACzB,OAAOA,EAAe5rN,OAASA,MAG/B2rN,EAAY,SAAU7nM,GACxB,OAAO5iB,EAAOgtF,EAAOpqE,GAAW,IAE9Bm9S,EAAW,SAAUp1G,GACvB,OAAOF,GAAU,SAAUF,GACzB,OAAOA,EAASI,YAAcA,MAG9B23G,EAAc,SAAU33G,GAC1B39H,EAAQhtF,EAAOgtF,GAAO,SAAUu9H,GAC9B,OAAIA,EAASI,YAAcA,IACzB9vN,EAAWsrH,IAAIqC,gBAAgB+hG,EAASI,YACjC,OAKTnsH,EAAU,WACZ5+F,EAAKotF,GAAO,SAAU09H,GACpB7vN,EAAWsrH,IAAIqC,gBAAgBkiG,EAAeC,cAEhD39H,EAAQ,IAEV,MAAO,CACLtoD,OAAQA,EACRtS,IAAKA,EACLzsB,IAAKA,EACLo6T,SAAUA,EACVt1G,UAAWA,EACX63G,YAAaA,EACb9jO,QAASA,IAIT+jO,GAAe,SAAUzyP,GAC3B,IACIkiM,EAAUwwD,EADVn4G,EAAY83G,KAEZhC,EAAeqB,KACfiB,EAAa,GACbC,EAAa,SAAUvxO,GACzB,OAAO,SAAU7mF,GACf,OAAIwlE,EAAOt8B,UACF29C,EAAS7mF,GAEX,KAGPq4T,EAAmB,SAAUpjO,GAC/B,OAAOA,IAA6B,IAAtBA,EAAI3hG,QAAQ,KAAc,IAAM,MAAO,IAAIusB,MAAOE,WAE9Du4S,EAAgB,SAAUj7S,EAAS7N,EAAQhE,GAC7C,IAAIkQ,EAAQ,EACZ,GACEA,EAAQ2B,EAAQ/pB,QAAQkc,EAAQkM,IACjB,IAAXA,IACF2B,EAAUA,EAAQ6E,UAAU,EAAGxG,GAASlQ,EAAU6R,EAAQrN,OAAO0L,EAAQlM,EAAOve,QAChFyqB,GAASlQ,EAAQva,OAASue,EAAOve,OAAS,UAE1B,IAAXyqB,GACT,OAAO2B,GAELk7S,EAAkB,SAAUl7S,EAASm7S,EAAWC,GAGlD,OAFAp7S,EAAUi7S,EAAcj7S,EAAS,QAAUm7S,EAAY,IAAK,QAAUC,EAAiB,KACvFp7S,EAAUi7S,EAAcj7S,EAAS,iBAAmBm7S,EAAY,IAAK,iBAAmBC,EAAiB,KAClGp7S,GAELq7S,EAAwB,SAAUF,EAAWC,GAC/CnjU,EAAKkwE,EAAOigB,YAAYztE,MAAM,SAAUuyD,GACnB,eAAfA,EAAM5yE,KACR4yE,EAAMouP,UAAYtjU,EAAIk1E,EAAMouP,WAAW,SAAUn7S,GAC/C,OAAO+6S,EAAgB/6S,EAAUg7S,EAAWC,MAG9CluP,EAAMltD,QAAUk7S,EAAgBhuP,EAAMltD,QAASm7S,EAAWC,OAI5DhC,EAAmB,WACrB,OAAOjxP,EAAO6nI,oBAAoBr5J,KAAK,CACrC/pC,KAAMu7D,EAAOp3C,UAAU,sBACvBz2B,KAAM,OACNi0E,SAAU,EACVE,aAAa,KAGb8sP,EAAkB,SAAU19M,EAAOq8M,GACrCx3G,EAAUi4G,YAAY98M,EAAMgB,KAC5Bw8M,EAAsBx9M,EAAMgB,IAAKq7M,GACjC/xP,EAAO46H,EAAEllF,GAAOrzF,KAAK,CACnB,IAAO88D,GAASm8M,oBAAoBt7N,GAAU6yP,EAAiBd,GAAaA,EAC5E,eAAgB/xP,EAAOwmI,WAAWurH,EAAW,UAG7CsB,EAAe,SAAUhyO,GAS3B,OARK6gL,IACHA,EAAW5D,GAAS+xD,EAAc,CAChC5gO,IAAKtQ,GAASu8M,kBAAkB17N,GAChCg/L,SAAU7/K,GAASw8M,uBAAuB37N,GAC1C2+L,YAAax/K,GAASy8M,2BAA2B57N,GACjDhxD,QAASmwE,GAAS08M,uBAAuB77N,MAGtCszP,IAAgBlnP,KAAKwmP,GAAW,SAAUW,GAC/C,IAAI/B,EAAY3hU,EAAI0jU,GAAY,SAAU9C,GACxC,OAAOA,EAAUh2G,YAEnB,OAAOynD,EAAStD,OAAO4yD,EAAWP,GAAkB7kP,KAAKwmP,GAAW,SAAUp4T,GAC5E,IAAIg5T,EAAiB3jU,EAAI2K,GAAQ,SAAUi5T,EAAYv9S,GACrD,IAAIw/F,EAAQ69M,EAAWr9S,GAAOw/F,MAM9B,OALI+9M,EAAWlkS,QAAU4vD,GAASo8M,sBAAsBv7N,GACtDozP,EAAgB19M,EAAO+9M,EAAWhkO,KACzBgkO,EAAWliU,OACpBwpT,GAAcR,YAAYv6O,EAAQyzP,EAAWliU,OAExC,CACLsb,QAAS6oG,EACTnmF,OAAQkkS,EAAWlkS,WAMvB,OAHI8xD,GACFA,EAASmyO,GAEJA,WAIT1wD,EAAmB,SAAUzhL,GAC/B,GAAIlC,GAAS+6K,0BAA0Bl6L,GACrC,OAAOqzP,EAAahyO,IAGpB04H,EAAsB,SAAUC,GAClC,IAES,IAFL/pN,EAAO0iU,GAAY,SAAUziU,GAC7B,OAAOA,EAAO8pN,MAEhB,OAAO,EAET,GAAoD,IAAhDA,EAAO/gM,aAAa,OAAOnrB,QAAQ,SAAgB,CACrD,IAAI4lU,EAAgBv0O,GAASk8M,uBAAuBr7N,GACpD,OAAO0zP,EAAc15G,GAEvB,OAAO,GAEL25G,EAAY,SAAUzjU,GACxByiU,EAAW1/T,KAAK/C,IAEdojU,EAAgB,WAIlB,OAHKZ,IACHA,EAAetC,GAAaC,EAAc91G,IAErCm4G,EAAa7iC,QAAQ7vN,EAAOv8C,UAAWs2L,GAAqB3tI,KAAKwmP,GAAW,SAAUp4T,GAa3F,OAZAA,EAAStK,EAAOsK,GAAQ,SAAUo5T,GAChC,MAA0B,kBAAfA,IACT7Y,GAAcT,aAAat6O,EAAQ4zP,IAC5B,MAIX9jU,EAAK0K,GAAQ,SAAUo5T,GACrBV,EAAsBU,EAAWl+M,MAAMgB,IAAKk9M,EAAWn5G,SAASI,WAChE+4G,EAAWl+M,MAAMgB,IAAMk9M,EAAWn5G,SAASI,UAC3C+4G,EAAWl+M,MAAMp8F,gBAAgB,mBAE5B9e,OAGPk0F,EAAU,WACZ6rH,EAAU7rH,UACV2hO,EAAa3hO,UACbgkO,EAAexwD,EAAW,MAExB2xD,EAAkB,SAAUh8S,GAC9B,OAAOA,EAAQ7R,QAAQ,uBAAuB,SAAUvP,EAAOokN,GAC7D,IAAIk3G,EAAY1B,EAAa4B,aAAap3G,GAC1C,GAAIk3G,EACF,MAAO,QAAUA,EAAY,IAE/B,IAAIt3G,EAAWF,EAAU01G,SAASp1G,GAMlC,GALKJ,IACHA,EAAWvmN,EAAM8rE,EAAOgwO,cAAcn6S,OAAO,SAAU2E,EAAQwlE,GAC7D,OAAOxlE,GAAUwlE,EAAOw6I,cAAgBx6I,EAAOw6I,aAAaD,UAAU01G,SAASp1G,KAC9E,OAEDJ,EAAU,CACZ,IAAIt8L,EAAOs8L,EAASt8L,OACpB,MAAO,aAAeA,EAAKhsB,KAAO,WAAasoN,EAAS3jG,SAAW,IAErE,OAAOrgH,MAiCX,OA9BAupE,EAAOpjC,GAAG,cAAc,WAClBuiD,GAAS+6K,0BAA0Bl6L,GACrC8iM,IAEAwwD,OAGJtzP,EAAOpjC,GAAG,kBAAkB,SAAU/uC,GACpCA,EAAEgqB,QAAUg8S,EAAgBhmU,EAAEgqB,YAEhCmoD,EAAOpjC,GAAG,cAAc,SAAU/uC,GAC5BA,EAAEimU,aAA4B,QAAbjmU,EAAEiyF,SAGvBjyF,EAAEgqB,QAAUg8S,EAAgBhmU,EAAEgqB,aAEhCmoD,EAAOpjC,GAAG,cAAc,WACtBojC,EAAOgqH,OAAOC,cAAc,OAAO,SAAUkxB,GAC3CrrN,EAAKqrN,GAAQ,SAAU9pF,GACrB,IAAI3a,EAAM2a,EAAIhvG,KAAK,OACnB,IAAIk4L,EAAU01G,SAASv5M,GAAvB,CAGA,IAAIq7M,EAAY1B,EAAa4B,aAAav7M,GACtCq7M,GACF1gM,EAAIhvG,KAAK,MAAO0vS,aAKjB,CACLx3G,UAAWA,EACXo5G,UAAWA,EACXN,aAAcA,EACdvwD,iBAAkBA,EAClBwwD,cAAeA,EACf5kO,QAASA,IAITqlO,GAAoB,SAAUzrP,GAChC,IAAItyD,EAAW,GACXg+S,EAAU1rP,EAAI3jE,MAClB,MAAOqvT,EACLh+S,EAAS/iB,KAAK+R,GAAQZ,QAAQ4vT,IAC9BA,EAAUA,EAAQzmI,UAEpB,OAAOv3K,GAELi+S,GAAmB,SAAU3rP,GAC/B,IAAI4rP,EAAS5lP,GAAchG,EAAK,MAC5B0pN,EAAM9hS,EAAO6jU,GAAkBzrP,GAAKx1E,OAAO,GAAIm4Q,IAC/CipD,EAAOzoU,SAAWumS,EAAIvmS,QACxBqE,EAAKkiS,EAAKz6Q,KAGV48S,GAAoB,SAAU7rP,GAChClxD,GAAMkxD,GACN1xD,GAAO0xD,EAAKtjE,GAAQtB,SAAS,6BAE3B0wT,GAAoB,SAAU9rP,GAChC,OAAO5vD,GAAO4vD,GAAOx+C,GAAMw+C,KAASlmC,GAAO6oO,GAAO3iM,IAEhD+rP,GAAkB,SAAU/rP,GAC9B,OAA2D,IAApDp4E,EAAO8lB,GAASsyD,GAAM8rP,IAAmB3oU,QAE9C6oU,GAAsB,SAAUhsP,GAClCilH,GAAUjlH,GAAKx4E,MAAK,SAAUy9L,GAC5B+zB,GAAY/zB,GAAWz9L,MAAK,SAAUykU,GAChC9sP,GAAQa,IAAQ2iM,GAAO19E,IAAc9lH,GAAQ8sP,IAC/Ch9S,GAAOg2K,UAKXinI,GAAY,CACdP,iBAAkBA,GAClBE,kBAAmBA,GACnBE,gBAAiBA,GACjBC,oBAAqBA,IAGnBG,GAAShwB,GACTiwB,GAAmC,SAAUziN,EAAI1tG,EAAMtS,GACzD,IAAI0iU,EAAa1iN,EAAG9xB,UAAUtqF,IAAI5D,GAClC,GAAI0iU,EACF,IAAK,IAAItnU,EAAI,EAAGA,EAAIsnU,EAAWlpU,OAAQ4B,IACrC,IAA8B,IAA1BsnU,EAAWtnU,GAAGunU,SAAqB3iN,EAAGttG,IAAIxV,GAAGoV,EAAMowT,EAAWtnU,GAAGyf,UACnE,OAAO,EAIb,OAAO,GAEL+nT,GAAe,SAAU70P,EAAQz7D,EAAMtS,EAAMuyS,GAC/C,IAAI/7P,EAAOu3B,EAAOr7D,IAAI4kE,UACtB,OAAIhlE,IAASkkC,IAGblkC,EAAOy7D,EAAOr7D,IAAI2kE,UAAU/kE,GAAM,SAAUA,GAC1C,QAAImwT,GAAiC10P,EAAQz7D,EAAMtS,KAG5CsS,EAAK6J,aAAeq6B,KAAU+4G,GAAUxhF,EAAQz7D,EAAMtS,EAAMuyS,GAAM,OAEpEhjJ,GAAUxhF,EAAQz7D,EAAMtS,EAAMuyS,KAEnCswB,GAAY,SAAUnwT,EAAKJ,EAAMu7E,GACnC,QAAI20O,GAAOlwT,EAAMu7E,EAAOpd,YAGpB+xP,GAAOlwT,EAAMu7E,EAAO80C,SAGpB90C,EAAOhzE,SACgB,IAAlBvI,EAAKwI,UAAkBpI,EAAIxV,GAAGoV,EAAMu7E,EAAOhzE,eADpD,KAIEioT,GAAa,SAAUpwT,EAAKJ,EAAMu7E,EAAQy2E,EAAUy+J,EAASxwB,GAC/D,IAAI1uS,EAAKlK,EAELyB,EADAqlD,EAAQotC,EAAOy2E,GAEnB,GAAIz2E,EAAOm1O,QACT,OAAOn1O,EAAOm1O,QAAQ1wT,EAAMu7E,EAAQy2E,GAEtC,GAAI7jH,EACF,GAA4B,qBAAjBA,EAAMjnD,QACf,IAAKqK,KAAO48C,EACV,GAAIA,EAAMjlD,eAAeqI,GAAM,CAM7B,GAJElK,EADe,eAAb2qK,EACM5xJ,EAAIukL,UAAU3kL,EAAMzO,GAEpBirE,GAASp8D,EAAKJ,EAAMzO,GAE1Bk/T,IAAYppU,IAAUk0F,EAAO38C,MAC/B,OAEF,KAAM6xR,GAAWl1O,EAAO38C,SAAWsxR,GAAO7oU,EAAO+4S,GAAoBhgS,EAAK4/R,GAAY7xP,EAAM58C,GAAM0uS,GAAO1uS,IACvG,aAKN,IAAKzI,EAAI,EAAGA,EAAIqlD,EAAMjnD,OAAQ4B,IAC5B,GAAiB,eAAbkpK,EAA4B5xJ,EAAIukL,UAAU3kL,EAAMmuC,EAAMrlD,IAAM0zE,GAASp8D,EAAKJ,EAAMmuC,EAAMrlD,IACxF,OAAOyyF,EAKf,OAAOA,GAEL0hE,GAAY,SAAUvvC,EAAI1tG,EAAMtS,EAAMuyS,EAAMwwB,GAC9C,IACIl1O,EAAQzyF,EAAGvB,EAAG8yB,EADd+1S,EAAa1iN,EAAG9xB,UAAUtqF,IAAI5D,GAE9B0S,EAAMstG,EAAGttG,IACb,GAAIgwT,GAAcpwT,EAChB,IAAKlX,EAAI,EAAGA,EAAIsnU,EAAWlpU,OAAQ4B,IAEjC,GADAyyF,EAAS60O,EAAWtnU,GAChBynU,GAAU7iN,EAAGttG,IAAKJ,EAAMu7E,IAAWi1O,GAAWpwT,EAAKJ,EAAMu7E,EAAQ,aAAck1O,EAASxwB,IAASuwB,GAAWpwT,EAAKJ,EAAMu7E,EAAQ,SAAUk1O,EAASxwB,GAAO,CAC3J,GAAI5lR,EAAUkhE,EAAOlhE,QACnB,IAAK9yB,EAAI,EAAGA,EAAI8yB,EAAQnzB,OAAQK,IAC9B,IAAKmmH,EAAGttG,IAAIinM,SAASrnM,EAAMqa,EAAQ9yB,IACjC,OAIN,OAAOg0F,IAKXrpF,GAAQ,SAAUupE,EAAQ/tE,EAAMuyS,EAAMjgS,GACxC,IAAIu3I,EACJ,OAAIv3I,EACKswT,GAAa70P,EAAQz7D,EAAMtS,EAAMuyS,IAE1CjgS,EAAOy7D,EAAOt8B,UAAUwkC,YACpB2sP,GAAa70P,EAAQz7D,EAAMtS,EAAMuyS,KAGrC1oJ,EAAY97E,EAAOt8B,UAAUd,aACzBk5G,IAAcv3I,IACZswT,GAAa70P,EAAQ87E,EAAW7pJ,EAAMuyS,OAM1C0wB,GAAW,SAAUl1P,EAAQ/mB,EAAOurP,GACtC,IAAIgb,EACA2V,EAAqB,GACrBC,EAAa,GAYjB,OAXA5V,EAAex/O,EAAOt8B,UAAUd,WAChCo9B,EAAOr7D,IAAI2kE,UAAUk2O,GAAc,SAAUj7S,GAC3C,IAAIlX,EAAG4E,EACP,IAAK5E,EAAI,EAAGA,EAAI4rD,EAAMxtD,OAAQ4B,IAC5B4E,EAAOgnD,EAAM5rD,IACR+nU,EAAWnjU,IAASuvJ,GAAUxhF,EAAQz7D,EAAMtS,EAAMuyS,KACrD4wB,EAAWnjU,IAAQ,EACnBkjU,EAAmBliU,KAAKhB,MAG3B+tE,EAAOr7D,IAAI4kE,WACP4rP,GAEL/1K,GAAW,SAAUp/E,EAAQ/tE,GAC/B,IACI6pJ,EAAWyF,EAASl0J,EAAGvB,EAAGghB,EAD1B6nT,EAAa30P,EAAOmgB,UAAUtqF,IAAI5D,GAElC0S,EAAMq7D,EAAOr7D,IACjB,GAAIgwT,EAGF,IAFA74K,EAAY97E,EAAOt8B,UAAUd,WAC7B2+G,EAAUujJ,GAAangS,EAAKm3I,GACvBhwJ,EAAI6oU,EAAWlpU,OAAS,EAAGK,GAAK,EAAGA,IAAK,CAE3C,GADAghB,EAAW6nT,EAAW7oU,GAAGghB,UACpBA,GAAY6nT,EAAW7oU,GAAGupU,aAC7B,OAAO,EAET,IAAKhoU,EAAIk0J,EAAQ91J,OAAS,EAAG4B,GAAK,EAAGA,IACnC,GAAIsX,EAAIxV,GAAGoyJ,EAAQl0J,GAAIyf,GACrB,OAAO,EAKf,OAAO,GAGLwkR,GAAY,SAAU/sR,EAAMqoB,GAC9B,OAAOroB,EAAK+sR,UAAU1kQ,IAEpB0oS,GAAU,SAAU3xR,GACtB,IAAIC,EAAiBD,EAAIC,eAAgBuB,EAAcxB,EAAIwB,YAAaC,EAAezB,EAAIyB,aAAcC,EAAY1B,EAAI0B,UAwBzH,OAvBIzB,IAAmBwB,GAAgB4pJ,GAASt2K,OAAOkrB,GACjDuB,EAAc,GAAKA,EAAcvB,EAAeqC,UAAUx6C,SAC5D25C,EAAeksP,GAAU1tP,EAAgBuB,GACzCvB,EAAiBwB,EAAaupJ,gBAC1BtpJ,EAAYF,GACdE,GAAwBF,EACxBvB,EAAiBwB,EAAeksP,GAAUlsP,EAAcC,GAAWspJ,gBACnEtpJ,EAAYD,EAAaa,UAAUx6C,OACnC05C,EAAc,GAEdE,EAAY,IAIZ2pJ,GAASt2K,OAAOkrB,IAAmBuB,EAAc,GAAKA,EAAcvB,EAAeqC,UAAUx6C,SAC/Fm4C,EAAiB0tP,GAAU1tP,EAAgBuB,GAC3CA,EAAc,GAEZ6pJ,GAASt2K,OAAO0sB,IAAiBC,EAAY,GAAKA,EAAYD,EAAaa,UAAUx6C,SACvF25C,EAAeksP,GAAUlsP,EAAcC,GAAWspJ,gBAClDtpJ,EAAYD,EAAaa,UAAUx6C,SAGhC,CACLm4C,eAAgBA,EAChBuB,YAAaA,EACbC,aAAcA,EACdC,UAAWA,IAIXkwR,GAAmB,SAAU19S,EAAS29S,EAAkBC,GAC1D,IAAIj7T,EAAStG,EAAM2jB,GAAS,SAAU5jB,EAAKggB,GACzC,OAAI2vR,GAAe3vR,IAAM0vR,GAAO1vR,GAC1BhgB,EAAIyhU,qBAAmC,KAAZzhU,EAAIsW,KAAcirT,GAAoBvhU,EAAIsW,IAAI9e,SAAWosB,EAAQpsB,OAAS,GAAKgqU,EACrG,CACLC,qBAAqB,EACrBnrT,IAAKtW,EAAIsW,IAAM63B,IAGV,CACLszR,qBAAqB,EACrBnrT,IAAKtW,EAAIsW,IAAM,KAIZ,CACLmrT,qBAAqB,EACrBnrT,IAAKtW,EAAIsW,IAAM0J,KAGlB,CACDyhT,qBAAqB,EACrBnrT,IAAK,KAEP,OAAO/P,EAAO+P,KAEZorT,GAAc,SAAUpxT,EAAMqoB,EAAQt2B,GACxC,GAAc,IAAVA,EAAJ,CAGA,IAAIykR,EAAax2Q,EAAKiO,KAAK1f,MAAM85B,EAAQA,EAASt2B,GAC9Cm/T,EAAiB7oS,EAASt2B,GAASiO,EAAKiO,KAAK/mB,OAC7C+pU,EAA8B,IAAX5oS,EACvBroB,EAAKqxT,YAAYhpS,EAAQt2B,EAAOi/T,GAAiBx6C,EAAYy6C,EAAkBC,MAE7EI,GAA2B,SAAUtxT,EAAMqoB,GAC7C,IAAI/U,EAAUtT,EAAKiO,KAAK1f,MAAM85B,GAC1BkpS,EAAkBj+S,EAAQpsB,OAASk4Q,GAAM9rP,GAASpsB,OACtD,OAAOkqU,GAAYpxT,EAAMqoB,EAAQkpS,IAE/BC,GAA4B,SAAUxxT,EAAMqoB,GAC9C,IAAI/U,EAAUtT,EAAKiO,KAAK1f,MAAM,EAAG85B,GAC7BkpS,EAAkBj+S,EAAQpsB,OAASm4Q,GAAM/rP,GAASpsB,OACtD,OAAOkqU,GAAYpxT,EAAMqoB,EAASkpS,EAAiBA,IAEjDE,GAAiB,SAAUC,EAAUv1B,EAAU/nF,GACjD,IAAIu9G,EAAmBtyD,GAAMqyD,EAASzjT,MAAM/mB,OAM5C,OALAwqU,EAASpzB,WAAWnC,EAASluR,MAC7B+E,GAAOvS,GAAQZ,QAAQs8R,IACnB/nF,GACFk9G,GAAyBI,EAAUC,GAE9BD,GAGLroS,GAAa,SAAUhqB,EAAOkJ,EAAUoB,GAC1C,OAAOqf,GAAW3pB,EAAOkJ,EAAUoB,GAAQ9e,UAGzC+mU,GAA8B,SAAUtuP,EAAUtjE,GACpD,IAAIq4S,EAAc53S,GAAQZ,QAAQyjE,GAC9Bi0E,EAAY92I,GAAQZ,QAAQG,GAChC,OAAOqpB,GAAWkuH,EAAW,WAAY/vJ,EAAM6C,GAAIguT,KAEjDj0O,GAAe,SAAUd,EAAUtjE,GACrC,OAAOyqL,GAASt2K,OAAOnU,IAAS,eAAekB,KAAKlB,EAAKiO,QAAyD,IAAhD2jT,GAA4BtuP,EAAUtjE,IAEtGykL,GAAgB,SAAUzkL,GAC5B,OAAOyqL,GAASv2K,UAAUlU,IAA2B,MAAlBA,EAAKgU,UAAoBhU,EAAK6U,aAAa,SAE5Eg9S,GAAc,SAAUvuP,EAAUtjE,GACpC,OAAOsuR,GAAiBtuR,KAA0C,IAAjCokE,GAAad,EAAUtjE,IAAmBykL,GAAczkL,IAAS8xT,GAAW9xT,IAE3G8xT,GAAarnI,GAAS51K,aAAa,qBACnCk9S,GAAYtnI,GAAS51K,aAAa,kBAClCm9S,GAAevnI,GAASg2E,kBAAkB,iBAAkB,OAC5DwxD,GAAc,SAAUj+J,EAAYk+J,GACtC,IAAIlyT,EAAMomR,EAAU,EACpB,GAAIyrC,GAAY79J,EAAYA,GAC1B,OAAO,EAGP,GADAh0J,EAAOg0J,EAAWniJ,YACb7R,EACH,OAAO,EAET,IAAI61L,EAAS,IAAI0sF,GAAWviR,EAAMg0J,GAClC,EAAG,CACD,GAAIk+J,EAAW,CACb,GAAIF,GAAahyT,GAAO,CACtBA,EAAO61L,EAAOj5L,MAAK,GACnB,SAEF,GAAIm1T,GAAU/xT,GAAO,CACnBA,EAAO61L,EAAOj5L,OACd,UAGJ,GAAI6tL,GAASZ,KAAK7pL,GAChBomR,IACApmR,EAAO61L,EAAOj5L,WAFhB,CAKA,GAAIi1T,GAAY79J,EAAYh0J,GAC1B,OAAO,EAETA,EAAO61L,EAAOj5L,cACPoD,GACT,OAAOomR,GAAW,GAGlB+rC,GAAY,SAAUpuP,EAAKmuP,GAI7B,YAHkB,IAAdA,IACFA,GAAY,GAEPD,GAAYluP,EAAI3jE,MAAO8xT,IAE5BE,GAAQ,CAAE/nI,QAAS8nI,IAEnBE,GAAkB,SAAUn9R,EAAK6uC,GACnC,IAAIlwD,EAAYqhB,EAAIrhB,YAChBwU,EAAS6M,EAAI7M,SACjB,OAA+C,IAAxC0pQ,GAAgBH,eAAe18P,IAAkBrhB,IAAckwD,EAAIl6D,YAAcwe,EAAS0pQ,GAAgBhgR,OAAOgyD,GAAK17C,UAE3HwM,GAAa,SAAUkvC,EAAK7uC,GAC9B,OAAOm9R,GAAgBn9R,EAAK6uC,GAAOguN,GAAgB78P,EAAIrhB,YAAaqhB,EAAI7M,SAAW,GAAK6M,GAEtFo9R,GAAkB,SAAUtyT,GAC9B,OAAOyqL,GAASt2K,OAAOnU,GAAQ+xR,GAAgB/xR,EAAM,GAAK+xR,GAAgBhgR,OAAO/R,IAE/EuyT,GAAe,SAAUvyT,GAC3B,OAAOyqL,GAASt2K,OAAOnU,GAAQ+xR,GAAgB/xR,EAAMA,EAAKiO,KAAK/mB,QAAU6qS,GAAgB5/Q,MAAMnS,IAE7FwyT,GAAkC,SAAUzuP,GAC9C,OAAIuqN,GAAiBvqN,EAAIqmH,iBAChB59L,EAAOP,KAAKsmU,GAAaxuP,EAAIqmH,kBAE7BrmH,EAAIqmH,gBAAkBmzG,GAAYE,eAAe15N,EAAIqmH,iBAAmB59L,EAAOrC,QAGtFsoU,GAA8B,SAAU1uP,GAC1C,OAAIuqN,GAAiBvqN,EAAIvyD,aAChBhlB,EAAOP,KAAKqmU,GAAgBvuP,EAAIvyD,cAEhCuyD,EAAIvyD,YAAc+rR,GAAYC,gBAAgBz5N,EAAIvyD,aAAehlB,EAAOrC,QAG/EuoU,GAAoC,SAAUra,EAAat0O,GAC7D,IAAI4uP,EAAgB5gC,GAAgBhgR,OAAOgyD,EAAIqmH,gBAAkBrmH,EAAIqmH,gBAAkBrmH,EAAIl6D,YAC3F,OAAO0zR,GAAYD,aAAa+a,EAAasa,GAAehoU,MAAK,WAC/D,OAAO4yS,GAAYF,aAAagb,EAAatmB,GAAgB5/Q,MAAM4xD,MAClEv3E,EAAOP,OAER2mU,GAAmC,SAAUva,EAAat0O,GAC5D,OAAOw5N,GAAYF,aAAagb,EAAatmB,GAAgB5/Q,MAAM4xD,IAAMp5E,MAAK,WAC5E,OAAO4yS,GAAYD,aAAa+a,EAAatmB,GAAgBhgR,OAAOgyD,MACnEv3E,EAAOP,OAER4mU,GAA6B,SAAUxa,EAAat0O,GACtD,OAAOyuP,GAAgCzuP,GAAK14E,SAAQ,WAClD,OAAOonU,GAA4B1uP,MAClC14E,SAAQ,WACT,OAAOqnU,GAAkCra,EAAat0O,OAGtD+uP,GAA2B,SAAUza,EAAat0O,GACpD,OAAO0uP,GAA4B1uP,GAAK14E,SAAQ,WAC9C,OAAOmnU,GAAgCzuP,MACtC14E,SAAQ,WACT,OAAOunU,GAAiCva,EAAat0O,OAGrDgvP,GAAsB,SAAUj3H,EAASu8G,EAAat0O,GACxD,OAAO+3H,EAAUg3H,GAAyBza,EAAat0O,GAAO8uP,GAA2Bxa,EAAat0O,IAEpGivP,GAAoC,SAAUl3H,EAASu8G,EAAat0O,GACtE,OAAOgvP,GAAoBj3H,EAASu8G,EAAat0O,GAAKz4E,IAAI9D,EAAMqtC,GAAYkvC,KAE1E6+K,GAAe,SAAUnnL,EAAQqgI,EAAS5mK,GAC5CA,EAAIvqC,MAAK,WACP8wE,EAAOtvD,WACN,SAAU+oB,GACXumC,EAAOt8B,UAAUm8H,OAAOpmI,EAAIq8P,UAAWz1F,OAGvCm3H,GAAY,SAAUxD,GACxB,OAAO,SAAU1rP,GACf,OAAOA,EAAI3jE,QAAUqvT,IAGrByD,GAAY,SAAUz3P,EAAQsI,GAChC,OAAOA,GAAOtI,EAAOlhE,OAAOoyL,mBAAmBzjM,eAAewE,GAAKq2E,KAEjEovP,GAAiB,SAAUpvP,GAC7B,GAAIquP,GAAM/nI,QAAQtmH,GAAM,CACtB,IAAIo5K,EAAK18O,GAAQtB,SAAS,2BAG1B,OAFA0T,GAAMkxD,GACN1xD,GAAO0xD,EAAKo5K,GACL3wP,EAAOP,KAAK8lS,GAAgBhgR,OAAOorO,EAAG/8O,QAE7C,OAAO5T,EAAOrC,QAGdipU,GAAmB,SAAUrvP,EAAKsvP,EAAmBj/G,GACvD,IAAIk/G,EAAcv2G,GAAYh5I,GAAKp4E,OAAOwoB,IACtCo/S,EAAc/hT,GAAYuyD,GAAKp4E,OAAOwoB,IAE1C,OADAnB,GAAO+wD,GACAxsB,GAAM+7Q,EAAaC,EAAaF,GAAmB,SAAUlnK,EAAMvvJ,EAAMs4B,GAC9E,IAAIw8R,EAAWvlK,EAAK/rJ,MAAO+7R,EAAWv/R,EAAKwD,MACvCioB,EAASqpS,EAASzjT,KAAK/mB,OAE3B,OADAuqU,GAAeC,EAAUv1B,EAAU/nF,GAC5Bl/K,EAAIrhB,cAAgBsoR,EAAWpK,GAAgB2/B,EAAUrpS,GAAU6M,KACzE7pC,SAAQ,WAST,OARI+oN,IACFk/G,EAAY/nU,MAAK,SAAUw4E,GACzB,OAAOytP,GAA0BztP,EAAI3jE,MAAO2jE,EAAI3jE,MAAMlZ,WAExDqsU,EAAYhoU,MAAK,SAAUw4E,GACzB,OAAOutP,GAAyBvtP,EAAI3jE,MAAO,OAGxCizT,MAGPG,GAAkB,SAAU/3P,EAAQnzD,GACtC,OAAO9W,GAAIiqE,EAAOlhE,OAAOs1Q,wBAAyBniR,GAAK4a,KAErDmrT,GAAgB,SAAUh4P,EAAQqgI,EAAS/3H,EAAK2vP,QAChC,IAAdA,IACFA,GAAY,GAEd,IAAIC,EAAiBX,GAAkCl3H,EAASrgI,EAAOv8C,UAAW6kD,EAAI3jE,OAClF82L,EAAcztL,GAASs6D,EAAKv8E,EAAM0rU,GAAWz3P,GAASw3P,GAAUx3P,EAAOv8C,YACvE00S,EAA2BR,GAAiBrvP,EAAK4vP,EAAgBH,GAAgB/3P,EAAQsI,IACzFtI,EAAOr7D,IAAIiqL,QAAQ5uH,EAAOv8C,YAC5Bu8C,EAAOrxB,WAAW,IAClBqxB,EAAOt8B,UAAU8kC,qBAEjBizH,EAAY1rM,KAAK2nU,IAAgBxoU,MAAK,WAChC+oU,GACF9wE,GAAannL,EAAQqgI,EAAS83H,MAE/B,SAAUC,GACPH,GACF9wE,GAAannL,EAAQqgI,EAAStvM,EAAOP,KAAK4nU,QAK9CC,GAAgB,CAAEL,cAAeA,IAEjCM,GAAS1nC,GAAKH,KAAM8nC,GAAa,aACjC7J,GAAa,SAAUh5S,EAAenR,GACxC,OAAOmR,EAAcg5S,WAAWnqT,GAAM,IAEpCi0T,GAA0B,SAAUj0T,GACtC,IAAIwlL,EAAQ,GACZ,MAAOxlL,EAAM,CACX,GAAsB,IAAlBA,EAAKwI,UAAkBxI,EAAK0hC,YAAcqyR,IAAU/zT,EAAKJ,WAAW1Y,OAAS,EAC/E,MAAO,GAEa,IAAlB8Y,EAAKwI,UACPg9K,EAAM92L,KAAKsR,GAEbA,EAAOA,EAAK6R,WAEd,OAAO2zK,GAEL0uI,GAAwB,SAAUl0T,GACpC,OAAOi0T,GAAwBj0T,GAAM9Y,OAAS,GAE5CitU,GAAoB,SAAUn0T,GAChC,GAAIA,EAAM,CACR,IAAI61L,EAAS,IAAI0sF,GAAWviR,EAAMA,GAClC,IAAKA,EAAO61L,EAAOrzL,UAAWxC,EAAMA,EAAO61L,EAAOj5L,OAChD,GAAI6tL,GAASt2K,OAAOnU,GAClB,OAAOA,EAIb,OAAO,MAELo0T,GAAuB,SAAUv5H,GACnC,IAAI+yF,EAAiBntR,GAAQX,QAAQ,QASrC,OARAyU,GAAOq5Q,EAAgB,CACrB,GAAMomC,GACN,iBAAkB,IAClB,gBAAiB,iBAEfn5H,GACFxoL,GAAOu7Q,EAAgBntR,GAAQR,SAAS8zT,KAEnCnmC,GAELymC,GAA6B,SAAUx+B,GACzC,IAAIhJ,EAAWsnC,GAAkBt+B,GAIjC,OAHIhJ,GAAYA,EAASnrP,UAAUgjC,OAAO,KAAOqvP,IAC/ClnC,EAASgM,WAAW,EAAG,GAElBhM,GAELynC,GAA2B,SAAU74P,EAAQz7D,EAAM0zT,QACnC,IAAdA,IACFA,GAAY,GAEd,IAAItzT,EAAMq7D,EAAOr7D,IAAK++B,EAAYs8B,EAAOt8B,UACzC,GAAI+0R,GAAsBl0T,GACxB8zT,GAAcL,cAAch4P,GAAQ,EAAOh7D,GAAQZ,QAAQG,GAAO0zT,OAC7D,CACL,IAAIt0R,EAAMD,EAAU6nC,SAChBqpD,EAAQjwH,EAAI2kE,UAAU/kE,EAAMI,EAAI8iE,SAChC2pN,EAAWwnC,GAA2Br0T,GACtCo/B,EAAIC,iBAAmBwtP,GAAYztP,EAAIwB,YAAc,GACvDxB,EAAIQ,SAASitP,EAAUztP,EAAIwB,YAAc,GAEvCxB,EAAIyB,eAAiBgsP,GAAYztP,EAAI0B,UAAY,GACnD1B,EAAIa,OAAO4sP,EAAUztP,EAAI0B,UAAY,GAEvC1gC,EAAI4S,OAAOhT,GAAM,GACbqwH,GAASjwH,EAAIiqL,QAAQh6D,IACvB4/L,GAAUL,kBAAkBnvT,GAAQZ,QAAQwwH,IAE9ClxF,EAAUm8H,OAAOl8H,KAGjBm1R,GAAuB,SAAU94P,EAAQz7D,EAAM0zT,QAC/B,IAAdA,IACFA,GAAY,GAEd,IAAItzT,EAAMq7D,EAAOr7D,IAAK++B,EAAYs8B,EAAOt8B,UACzC,GAAKn/B,EAQHs0T,GAAyB74P,EAAQz7D,EAAM0zT,QANvC,GADA1zT,EAAO+0R,GAAwBt5N,EAAOv8C,UAAWigB,EAAUd,aACtDr+B,EACH,MAAOA,EAAOI,EAAI9O,IAAI0iU,IACpBM,GAAyB74P,EAAQz7D,GAAM,IAO3Cw0T,GAA2B,SAAU/4P,EAAQmyN,EAAgB6mC,GAC/D,IAAIr0T,EAAMq7D,EAAOr7D,IAAKiwH,EAAQjwH,EAAI2kE,UAAU0vP,EAAYjtU,EAAMs4S,GAAerkO,IACzE40D,GAASjwH,EAAIiqL,QAAQh6D,GACvBokM,EAAW5qT,WAAWqxL,aAAa0yF,EAAgB6mC,IAEnDxE,GAAUP,iBAAiBjvT,GAAQZ,QAAQ40T,IACvCr0T,EAAIiqL,QAAQoqI,GACdA,EAAW5qT,WAAWqxL,aAAa0yF,EAAgB6mC,GAEnDr0T,EAAI4wL,YAAY48F,EAAgB6mC,KAIlCC,GAAa,SAAU7qT,EAAY7J,GAErC,OADA6J,EAAW2I,YAAYxS,GAChBA,GAEL20T,GAAsC,SAAUC,EAAahnC,GAC/D,IAAIinC,EAAsBplU,EAAMmlU,GAAa,SAAU/qT,EAAY4qT,GACjE,OAAOC,GAAW7qT,EAAY4qT,EAAW3gT,WAAU,MAClD85Q,GACH,OAAO8mC,GAAWG,EAAqBA,EAAoB1jT,cAAchR,eAAe4zT,MAEtFe,GAAmB,SAAUr5P,EAAQ/tE,EAAMuyS,GAC7C,IAAI7gQ,EAAKwuP,EAAgBf,EAAUxkQ,EAAQ0pK,EAAUl+K,EAAW3T,EAC5Di/B,EAAYs8B,EAAOt8B,UACvBC,EAAMD,EAAU6nC,SAChB3+C,EAAS+W,EAAIwB,YACb/sB,EAAYurB,EAAIC,eAChBn/B,EAAO2T,EAAU6tB,UACjBksP,EAAiBmH,GAAwBt5N,EAAOv8C,UAAWigB,EAAUd,YACjEuvP,IACFf,EAAWsnC,GAAkBvmC,IAE/B,IAAImnC,EAAgB,gCAChB70T,GAAQmoB,EAAS,GAAKA,EAASnoB,EAAKhZ,QAAU6tU,EAAc7zT,KAAKhB,EAAKwkE,OAAOr8C,KAAY0sS,EAAc7zT,KAAKhB,EAAKwkE,OAAOr8C,EAAS,KACnI0pK,EAAW5yJ,EAAU6yJ,cACrB5yJ,EAAIk1B,UAAS,GACbl1B,EAAMwiQ,GAAUnmO,EAAQr8B,EAAKq8B,EAAOmgB,UAAUtqF,IAAI5D,IAClD0xC,EAAM2xR,GAAQ3xR,GACdq8B,EAAOmgB,UAAUz0F,MAAMuG,EAAMuyS,EAAM7gQ,GACnCD,EAAU8yJ,eAAeF,KAEpB67F,GAAkBf,EAASnrP,YAAcqyR,KAC5CnmC,EAAiBu8B,GAAW1uP,EAAOmI,SAAUwwP,IAAqB,GAAMh0T,OACxEysR,EAAWe,EAAe/7Q,WAC1ButB,EAAI0kC,WAAW8pN,GACfvlQ,EAAS,GAGTozC,EAAOmgB,UAAUz0F,MAAMuG,EAAMuyS,EAAMrS,GAErCzuP,EAAU8kC,kBAAkB4oN,EAAUxkQ,KAGtC2sS,GAAoB,SAAUv5P,EAAQ/tE,EAAMuyS,EAAMwwB,GACpD,IACI58S,EAAWwU,EAAQ0pK,EACnBkjI,EAAiBj1T,EAAMy0T,EAEvB7mC,EAJAxtR,EAAMq7D,EAAOr7D,IAAK++B,EAAYs8B,EAAOt8B,UAGrC69G,EAAU,GAAI59G,EAAMD,EAAU6nC,SAElCnzD,EAAYurB,EAAIC,eAChBhX,EAAS+W,EAAIwB,YACb5gC,EAAO6T,EACoB,IAAvBA,EAAUrL,WACR6f,IAAWxU,EAAU6tB,UAAUx6C,SACjC+tU,GAAkB,GAEpBj1T,EAAOA,EAAK6J,YAEd,MAAO7J,EAAM,CACX,GAAIi9I,GAAUxhF,EAAQz7D,EAAMtS,EAAMuyS,EAAMwwB,GAAU,CAChDgE,EAAaz0T,EACb,MAEEA,EAAKwR,cACPyjT,GAAkB,GAEpBj4K,EAAQtuJ,KAAKsR,GACbA,EAAOA,EAAK6J,WAEd,GAAK4qT,EAGL,GAAIQ,EAAiB,CACnBljI,EAAW5yJ,EAAU6yJ,cACrB5yJ,EAAIk1B,UAAS,GACb,IAAI4gQ,EAActzB,GAAUnmO,EAAQr8B,EAAKq8B,EAAOmgB,UAAUtqF,IAAI5D,IAAO,GACrEwnU,EAAcnE,GAAQmE,GACtBz5P,EAAOmgB,UAAU5oE,OAAOtlB,EAAMuyS,EAAMi1B,GACpC/1R,EAAU8yJ,eAAeF,OACpB,CACL67F,EAAiBmH,GAAwBt5N,EAAOv8C,UAAWu1S,GAC3D,IAAIU,EAAoBf,IAAqB,GAAOh0T,MAChDg1T,EAAYT,GAAoC33K,EAASm4K,GAE3DX,GAAyB/4P,EAAQ05P,EAD/BvnC,GAGkD6mC,GAEtDH,GAAyB74P,EAAQmyN,GAAgB,GACjDzuP,EAAU8kC,kBAAkBmxP,EAAW,GACnCh1T,EAAIiqL,QAAQoqI,IACdr0T,EAAI4S,OAAOyhT,KAIbY,GAAwB,SAAU55P,EAAQkwD,GAC5C,IAAIxsF,EAAYs8B,EAAOt8B,UAAWlgB,EAAOw8C,EAAOv8C,UAChDq1S,GAAqB94P,EAAQ,MAAM,GAClB,IAAZkwD,GAA6B,KAAZA,IAAmBxsF,EAAUmtG,eAAiBntG,EAAUd,WAAW3+B,YAAcq0T,IACrGQ,GAAqB94P,EAAQs5N,GAAwB91Q,EAAMkgB,EAAUd,aAEvD,KAAZstF,GAA8B,KAAZA,GACpB4oM,GAAqB94P,EAAQs5N,GAAwB91Q,EAAMkgB,EAAUd,cAGrEwkH,GAAU,SAAUpnF,GACtBA,EAAOpjC,GAAG,mBAAmB,SAAU/uC,GACrC+rU,GAAsB55P,EAAQnyE,EAAEqiI,aAGhC2pM,GAAyB,SAAUthK,EAAY4gK,GACjD,IAAIhnC,EAAiBwmC,IAAqB,GACtCmB,EAAYZ,GAAoCC,EAAahnC,EAAextR,OAGhF,OAFA2R,GAAOtR,GAAQZ,QAAQm0J,GAAa45H,GACpC56Q,GAAOvS,GAAQZ,QAAQm0J,IAChB+9H,GAAgBwjC,EAAW,IAEhCC,GAAkB,SAAU/5P,EAAQnzD,GACtC,IAAImtT,EAAiBh6P,EAAOlhE,OAAOs1Q,wBACnC,OAAO4lD,EAAevsU,eAAewE,GAAK4a,MAAcwsR,GAAYxsR,EAAQlI,SAAWqqL,GAASi2E,QAAQp4P,EAAQlI,QAE9Gs1T,GAA4B,SAAUptT,GACxC,OAAOwsR,GAAYxsR,EAAQlI,QAAU8zT,GAAsB5rT,EAAQlI,QAGjEu1T,GAAmB,GAAIC,GAAWxyD,GAASz3Q,OAAQkqU,GAASzyD,GAAS73Q,KACrEuqU,GAAqB,SAAUpoU,EAAM2zR,GACvC,IAAI00C,EAAQJ,GAAiBjoU,GACxBqoU,IACHJ,GAAiBjoU,GAAQqoU,EAAQ,IAEnCJ,GAAiBjoU,GAAMgB,KAAK2yR,IAE1B20C,GAAgB,SAAUtoU,EAAM+tE,GAClCo6P,GAAOF,GAAiBjoU,IAAO,SAAU2zR,GACvCA,EAAK5lN,OAGTq6P,GAAmB,OAAO,SAAUr6P,GAClC,IACIw6P,EAAOnnH,EADP1vK,EAAMq8B,EAAOt8B,UAAU6nC,SAEvBkvP,EAAgB,SAAUC,GAC5B,OAAOF,EAAME,EAAI/rI,mBAAuE,IAAnDg5E,GAAS75Q,QAAQulN,EAAQqnH,EAAI/rI,kBAEhEgsI,EAAU,SAAUC,EAAMC,GAC5Bl2C,GAASk2C,GAAMtjT,SACfotQ,GAASi2C,GAAMhkT,OAAO,YAAYA,OAAOikT,EAAK12T,aAEhDq2T,EAAQxrI,GAASw1E,eAAe,CAAC,QAC5B7gO,EAAI8B,YACP4tK,EAASrzI,EAAOt8B,UAAU+rJ,oBAC1B2qI,GAAOD,GAASA,GAAS9mH,EAAQmnH,GAAQC,IAAgB,SAAUC,GACjEC,EAAQD,EAAI/rI,gBAAiB+rI,UAKnC,IAAII,GAAShuU,GAAMgD,KACfirU,GAAe,SAAUp2T,GAC3BhX,KAAKipP,QAAU,SAAUsoD,EAAOC,GAC9B,GAAID,EAAM3mR,WAAa4mR,EAAM5mR,SAC3B,OAAO,EAET,IAAIkwQ,EAAa,SAAUlkR,GACzB,IAAIkmM,EAAU,GAOd,OANAqwH,GAAOn2T,EAAI8jR,WAAWlkR,IAAO,SAAU8d,GACrC,IAAIpwB,EAAOowB,EAAK9J,SAASlS,cACC,IAAtBpU,EAAKnE,QAAQ,MAAuB,UAATmE,GAA8C,IAA1BA,EAAKnE,QAAQ,WAC9D28M,EAAQx4M,GAAQ0S,EAAIukL,UAAU3kL,EAAMtS,OAGjCw4M,GAELuwH,EAAiB,SAAUC,EAAMC,GACnC,IAAItvU,EAAOqG,EACX,IAAKA,KAAQgpU,EACX,GAAIA,EAAKxtU,eAAewE,GAAO,CAE7B,GADArG,EAAQsvU,EAAKjpU,GACQ,qBAAVrG,EACT,OAAO,EAET,GAAIqvU,EAAKhpU,KAAUrG,EACjB,OAAO,SAEFsvU,EAAKjpU,GAGhB,IAAKA,KAAQipU,EACX,GAAIA,EAAKztU,eAAewE,GACtB,OAAO,EAGX,OAAO,GAET,QAAK+oU,EAAevyC,EAAWyW,GAAQzW,EAAW0W,QAG7C67B,EAAer2T,EAAIsgI,WAAWtgI,EAAIukL,UAAUg2G,EAAO,UAAWv6R,EAAIsgI,WAAWtgI,EAAIukL,UAAUi2G,EAAO,cAG/FqE,GAAUvrG,eAAeinG,KAAWsE,GAAUvrG,eAAeknG,OAIrEg8B,GAAc,qBACdC,GAAStuU,GAAMgD,KACfurU,GAAS52B,GACT62B,GAAgB,SAAU/2T,GAC5B,MAAO,YAAYkB,KAAKlB,EAAKgU,WAE3BgjT,GAAwB,SAAU52T,EAAKJ,EAAMsR,GAC/C,OAAOlR,EAAIoqL,UAAUxqL,EAAMsR,IAAWtR,IAASsR,IAAWlR,EAAI8iE,QAAQ5xD,IAEpEuiF,GAAe,SAAU6Z,EAAItuE,EAAKl5B,GACpC,IAAI2N,EAAWwU,EAGf,GAFAxU,EAAYurB,EAAIl5B,EAAQ,iBAAmB,gBAC3CmiB,EAAS+W,EAAIl5B,EAAQ,cAAgB,aACjCukL,GAASv2K,UAAUL,GAAY,CACjC,IAAIojT,EAAUpjT,EAAUjU,WAAW1Y,OAAS,GACvCgf,GAASmiB,GACZA,IAEFxU,EAAYA,EAAUjU,WAAWyoB,EAAS4uS,EAAUA,EAAU5uS,GAQhE,OANIoiK,GAASt2K,OAAON,IAAc3N,GAASmiB,GAAUxU,EAAU6tB,UAAUx6C,SACvE2sB,EAAY,IAAI0uQ,GAAW1uQ,EAAW65F,EAAGxuF,WAAWtiB,QAAUiX,GAE5D42K,GAASt2K,OAAON,KAAe3N,GAAoB,IAAXmiB,IAC1CxU,EAAY,IAAI0uQ,GAAW1uQ,EAAW65F,EAAGxuF,WAAWitI,QAAUt4I,GAEzDA,GAELqjT,GAAS,SAAU92T,EAAKJ,EAAMtS,EAAM8mB,GACtC,IAAIrB,EAAU/S,EAAIiwB,OAAO3iC,EAAM8mB,GAG/B,OAFAxU,EAAK6J,WAAWqI,aAAaiB,EAASnT,GACtCmT,EAAQX,YAAYxS,GACbmT,GAELgkT,GAAmB,SAAU/2T,EAAKJ,EAAMpD,EAAMlP,EAAM8mB,GACtD,IAAItO,EAAQzF,GAAQZ,QAAQG,GACxBmT,EAAU1S,GAAQZ,QAAQO,EAAIiwB,OAAO3iC,EAAM8mB,IAC3Ci/K,EAAW72L,EAAO6iQ,GAAav5P,GAASs5P,GAAat5P,GASzD,OARA0M,GAASO,EAASsgL,GACd72L,GACFmV,GAAO7L,EAAOiN,GACdb,GAAQa,EAASjN,KAEjBiM,GAAMjM,EAAOiN,GACbd,GAAOc,EAASjN,IAEXiN,EAAQ/S,OAEbg3T,GAAc,SAAUh3T,EAAKJ,EAAMu7E,GACrC,QAAIu7O,GAAO92T,EAAMu7E,EAAOpd,YAGpB24P,GAAO92T,EAAMu7E,EAAO80C,SAGpB90C,EAAOhzE,SACFkiL,GAASv2K,UAAUlU,IAASI,EAAIxV,GAAGoV,EAAMu7E,EAAOhzE,eADzD,KAIE8uT,GAAyB,SAAUr3T,EAAMu7E,GAC3C,OAAOA,EAAO8zK,OAA2B,MAAlBrvP,EAAKgU,UAE1BwV,GAAS,SAAUppB,EAAKJ,EAAMpD,EAAMgjS,GAEtC,OADA5/R,EAAO2/R,GAAwB3/R,EAAMpD,EAAMgjS,IACnC5/R,GAA2B,OAAlBA,EAAKgU,UAAqB5T,EAAI8iE,QAAQljE,IAErDs3T,GAAe,SAAU5pN,EAAI1tG,EAAMu7E,GACrC,IACIg8O,EADA1tT,EAAa7J,EAAK6J,WAElBzJ,EAAMstG,EAAGttG,IAAKo3T,EAAkB58O,GAASyxG,mBAAmB3+E,GAC5DnyB,EAAO80C,QACJmnM,EAUC3tT,IAAezJ,EAAI4kE,YAChBuW,EAAOk8O,YAAeX,GAAO92T,EAAMu7E,EAAOk8O,aAC7CZ,GAAOtuU,GAAMq+L,KAAK5mL,EAAKJ,aAAa,SAAUI,GACxCqoG,GAAQqF,EAAI8pN,EAAiBx3T,EAAKgU,SAASlS,eACxCy1T,EAIHA,EAAa/kT,YAAYxS,IAHzBu3T,EAAeL,GAAO92T,EAAKJ,EAAMw3T,GACjCp3T,EAAI0sL,WAAWyqI,EAAc7pN,EAAGhyC,SAASi5I,0BAK3C4iH,EAAe,MApBnBn3T,EAAI8iE,QAAQljE,KAAUI,EAAI8iE,QAAQr5D,KAC/B2f,GAAOppB,EAAKJ,GAAM,IAAWwpB,GAAOppB,EAAKJ,EAAK6R,YAAY,GAAM,IACnE7R,EAAKkS,aAAa9R,EAAIiwB,OAAO,MAAOrwB,EAAK6R,YAEtC2X,GAAOppB,EAAKJ,GAAM,IAAUwpB,GAAOppB,EAAKJ,EAAKgpL,WAAW,GAAO,IAClEhpL,EAAKwS,YAAYpS,EAAIiwB,OAAO,SAsBhCkrD,EAAOhzE,UAAYgzE,EAAOpd,SAAW24P,GAAOv7O,EAAOpd,OAAQn+D,IAG/DI,EAAI4S,OAAOhT,GAAM,IAEf87E,GAAe,SAAU4xB,EAAInyB,EAAQ0kN,EAAMjgS,EAAM03T,GACnD,IAAIC,EACAv3T,EAAMstG,EAAGttG,IACb,IAAKg3T,GAAYh3T,EAAKJ,EAAMu7E,KAAY87O,GAAuBr3T,EAAMu7E,GACnE,OAAO,EAET,IAAIxX,EAAM/jE,EACV,GAAsB,QAAlBu7E,EAAOvoE,OAAkB,CAC3B6jT,GAAOt7O,EAAOhhE,QAAQ,SAAUlzB,EAAOqG,GACrCrG,EAAQ+4S,GAAoBhgS,EAAK4/R,GAAY34S,EAAO44S,GAAOvyS,GACvC,kBAATA,IACTA,EAAOrG,EACPqwU,EAAc,OAEZn8O,EAAOq8O,iBAAoBF,GAAeZ,GAAOt6P,GAASp8D,EAAKs3T,EAAahqU,GAAOrG,KACrF+Y,EAAI6yL,SAASlvH,EAAKr2E,EAAM,IAE1BiqU,GAAiB,KAEfA,GAAkD,KAAhCv3T,EAAIukL,UAAU5gH,EAAK,WACvCA,EAAIhvD,gBAAgB,SACpBgvD,EAAIhvD,gBAAgB,mBAEtB8hT,GAAOt7O,EAAOjhE,YAAY,SAAUjzB,EAAOqG,GACzC,IAAImqU,EAMJ,GALAxwU,EAAQ24S,GAAY34S,EAAO44S,GACP,kBAATvyS,IACTA,EAAOrG,EACPqwU,EAAc,MAEZn8O,EAAOq8O,iBAAoBF,GAAeZ,GAAO12T,EAAIukL,UAAU+yI,EAAahqU,GAAOrG,GAAS,CAC9F,GAAa,UAATqG,IACFrG,EAAQ+Y,EAAIukL,UAAU5gH,EAAKr2E,GACvBrG,IACFwwU,EAAW,GACXhB,GAAOxvU,EAAM+wB,MAAM,QAAQ,SAAUqtQ,GAC/B,WAAWvkR,KAAKukR,KAClBoyC,IAAaA,EAAW,IAAM,IAAMpyC,MAGpCoyC,IAEF,YADAz3T,EAAI84L,UAAUn1H,EAAKr2E,EAAMmqU,GAKlB,UAATnqU,GACFq2E,EAAIhvD,gBAAgB,aAElB6hT,GAAY11T,KAAKxT,IACnBq2E,EAAIhvD,gBAAgB,YAAcrnB,GAEpCq2E,EAAIhvD,gBAAgBrnB,OAGxBmpU,GAAOt7O,EAAOlhE,SAAS,SAAUhzB,GAC/BA,EAAQ24S,GAAY34S,EAAO44S,GACtBy3B,IAAet3T,EAAIinM,SAASqwH,EAAarwU,IAC5C+Y,EAAIq2J,YAAY1yF,EAAK18E,MAIzB,IADA,IAAImtB,EAAQpU,EAAI8jR,WAAWngN,GAClBj7E,EAAI,EAAGA,EAAI0rB,EAAMttB,OAAQ4B,IAAK,CACrC,IAAIo8M,EAAW1wL,EAAM1rB,GAAGkrB,SACxB,GAA8B,IAA1BkxL,EAAS37M,QAAQ,MAA4C,IAA9B27M,EAAS37M,QAAQ,SAClD,OAAO,GAIb,MAAsB,SAAlBgyF,EAAOvoE,QACTskT,GAAa5pN,EAAI3pC,EAAKwX,IACf,QAFT,GAKEu8O,GAAiB,SAAUr8P,EAAQ5nD,EAAWnmB,EAAMuyS,EAAMwwB,GAC5D,IAAIsH,EAUJ,OATAlB,GAAOt2B,GAAa9kO,EAAOr7D,IAAKyT,EAAUhK,YAAY9Z,WAAW,SAAUuhB,GACzE,IAAIiqE,EACCw8O,GAA4B,WAAdzmT,EAAO7mB,IAAiC,SAAd6mB,EAAO7mB,KAClD8wF,EAAS0hE,GAAUxhF,EAAQnqD,EAAQ5jB,EAAMuyS,EAAMwwB,GAC3Cl1O,IAA2B,IAAjBA,EAAOnjE,QACnB2/S,EAAazmT,OAIZymT,GAELC,GAAe,SAAUv8P,EAAQ20P,EAAY2H,EAAYlkT,EAAWrhB,EAAQ4lB,EAAOmjE,EAAQ0kN,GAC7F,IAAI3uR,EAAQpS,EAAO+4T,EAAWC,EAAYpvU,EAAGqvU,EACzC/3T,EAAMq7D,EAAOr7D,IACjB,GAAI23T,EAAY,CAEd,IADAI,EAAmBJ,EAAWluT,WACzByH,EAASuC,EAAUhK,WAAYyH,GAAUA,IAAW6mT,EAAkB7mT,EAASA,EAAOzH,WAAY,CAErG,IADA3K,EAAQkB,EAAIlB,MAAMoS,GAAQ,GACrBxoB,EAAI,EAAGA,EAAIsnU,EAAWlpU,OAAQ4B,IACjC,GAAIgzF,GAAargB,EAAQ20P,EAAWtnU,GAAIm3S,EAAM/gS,EAAOA,GAAQ,CAC3DA,EAAQ,EACR,MAGAA,IACE+4T,GACF/4T,EAAMsT,YAAYylT,GAEfC,IACHA,EAAah5T,GAEf+4T,EAAY/4T,IAGZkZ,GAAWmjE,EAAO68O,OAAUh4T,EAAI8iE,QAAQ60P,KAC1ClkT,EAAYzT,EAAIgY,MAAM2/S,EAAYlkT,IAEhCokT,IACFzlU,EAAOqX,WAAWqI,aAAa+lT,EAAWzlU,GAC1C0lU,EAAW1lT,YAAYhgB,IAG3B,OAAOqhB,GAELw3C,GAAW,SAAUqiD,EAAIhgH,EAAMuyS,EAAMjgS,EAAMywT,GAC7C,IACI1+H,EAAU3yJ,EADVgxR,EAAa1iN,EAAG9xB,UAAUtqF,IAAI5D,GAAO6tF,EAAS60O,EAAW,GAC1C5uL,GAAkB,EACjCphI,EAAMstG,EAAGttG,IACT++B,EAAYuuE,EAAGvuE,UACfk5R,EAAoB,SAAUxkT,GAChC,IAAIkkT,EAAaD,GAAepqN,EAAI75F,EAAWnmB,EAAMuyS,EAAMwwB,GAC3D,OAAOuH,GAAatqN,EAAI0iN,EAAY2H,EAAYlkT,EAAWA,GAAW,EAAM0nE,EAAQ0kN,IAElFq4B,EAAuB,SAAUt4T,GACnC,OAAOi/R,GAAUvrG,eAAe1zL,IAASyqL,GAASv2K,UAAUlU,KAAsB,WAAZA,EAAKvV,IAA+B,SAAZuV,EAAKvV,KAEjG44E,EAAU,SAAUrjE,GACtB,IAAIyR,EAAU3oB,EAAG8zG,EAAG27N,EAAqBh3L,EAOzC,GANIkpD,GAASv2K,UAAUlU,IAASI,EAAI+iE,mBAAmBnjE,KACrDu4T,EAAsB/2L,EACtBA,EAAmD,SAAjCphI,EAAI+iE,mBAAmBnjE,GACzCuhI,GAA0B,GAE5B9vH,EAAWlpB,GAAMq+L,KAAK5mL,EAAKJ,YACvB4hI,IAAoBD,EACtB,IAAKz4I,EAAI,EAAG8zG,EAAIwzN,EAAWlpU,OAAQ4B,EAAI8zG,EAAG9zG,IACxC,GAAIgzF,GAAa4xB,EAAI0iN,EAAWtnU,GAAIm3S,EAAMjgS,EAAMA,GAC9C,MAIN,GAAIu7E,EAAOroF,MACLue,EAASvqB,OAAQ,CACnB,IAAK4B,EAAI,EAAG8zG,EAAInrF,EAASvqB,OAAQ4B,EAAI8zG,EAAG9zG,IACtCu6E,EAAQ5xD,EAAS3oB,IAEfy4I,IACFC,EAAkB+2L,KAKtBrlT,EAAS,SAAUhN,GACrB,IAAIlG,EAAOI,EAAI9O,IAAI4U,EAAQ,SAAW,QAClCsvG,EAAMx1G,EAAKkG,EAAQ,aAAe,aAQtC,OAPIoyT,EAAqB9iN,KACvBA,EAAMA,EAAItvG,EAAQ,aAAe,cAE/BukL,GAASt2K,OAAOqhG,IAA4B,IAApBA,EAAIvnG,KAAK/mB,SACnCsuH,EAAMtvG,EAAQlG,EAAKoqL,iBAAmBpqL,EAAKwR,YAAcxR,EAAKwR,aAAexR,EAAKoqL,iBAEpFhqL,EAAI4S,OAAOhT,GAAM,GACVw1G,GAELgjN,EAAiB,SAAUp5R,GAC7B,IAAIC,EAAgBwB,EAChBq/Q,EAA0B9gR,EAAI8gR,wBAC9BgV,EAActzB,GAAUl0L,EAAItuE,EAAKgxR,GAAY,GACjD,GAAI70O,EAAOnjE,MAAO,CAIhB,GAHA88S,EAAcnE,GAAQmE,GACtB71R,EAAiBw0D,GAAa6Z,EAAIwnN,GAAa,GAC/Cr0R,EAAegzD,GAAa6Z,EAAIwnN,GAC5B71R,IAAmBwB,EAAc,CAWnC,GAVI,eAAe3/B,KAAKm+B,EAAerrB,WAAaqrB,EAAextB,aAE/DwtB,EAD8B,OAA5BA,EAAerrB,SACAqrB,EAAextB,WAAWA,YAAcwtB,EAExCA,EAAextB,YAAcwtB,GAG9C6gR,GAA2B,wBAAwBh/S,KAAKg/S,EAAwBlsS,WAAa+iT,GAAcl2R,IAAiBA,EAAahvB,aAC3IgvB,EAAeA,EAAahvB,YAAcgvB,GAExCm2R,GAAsB52T,EAAKi/B,EAAgBwB,GAAe,CAC5D,IAAI7uB,EAASxlB,EAAOD,KAAK8yC,EAAextB,YAAY/mB,MAAMu0C,GAM1D,OALAg5R,EAAkBlB,GAAiB/2T,EAAK4R,GAAQ,EAAM,OAAQ,CAC5D,GAAM,SACN,gBAAiB,mBAEnBkB,GAAO,GAGT,GAAI8jT,GAAsB52T,EAAKygC,EAAcxB,GAAiB,CACxDrtB,EAASxlB,EAAOD,KAAKs0C,EAAamoJ,WAAWl+L,MAAM+1C,GAMvD,OALAw3R,EAAkBlB,GAAiB/2T,EAAK4R,GAAQ,EAAO,OAAQ,CAC7D,GAAM,OACN,gBAAiB,mBAEnBkB,GAAO,GAGTmsB,EAAiB63R,GAAO92T,EAAKi/B,EAAgB,OAAQ,CACnD,GAAM,SACN,gBAAiB,aAEnBwB,EAAeq2R,GAAO92T,EAAKygC,EAAc,OAAQ,CAC/C,GAAM,OACN,gBAAiB,aAEnB,IAAI+vP,EAASxwR,EAAImlE,YACjBqrN,EAAO9wP,cAAcT,GACrBuxP,EAAO5wP,aAAaa,GACpB2hQ,GAAUlyF,KAAKlwM,EAAKwwR,GAAQ,SAAUprG,GACpCj6L,EAAKi6L,GAAO,SAAUz8L,GACfk2S,GAAUvrG,eAAe3qM,IAAOk2S,GAAUvrG,eAAe3qM,EAAE8gB,aAC9DwuT,EAAkBtvU,SAIxBsvU,EAAkBh5R,GAClBg5R,EAAkBx3R,GAClBxB,EAAiBnsB,GAAO,GACxB2tB,EAAe3tB,SAEfmsB,EAAiBwB,EAAew3R,EAAkBh5R,GAEpD61R,EAAY71R,eAAiBA,EAAex1B,WAAaw1B,EAAex1B,WAAaw1B,EACrF61R,EAAYt0R,YAAcxgC,EAAIuyL,UAAUtzJ,GACxC61R,EAAYr0R,aAAeA,EAAah3B,WAAag3B,EAAah3B,WAAag3B,EAC/Eq0R,EAAYp0R,UAAY1gC,EAAIuyL,UAAU9xJ,GAAgB,EAExD2hQ,GAAUlyF,KAAKlwM,EAAK80T,GAAa,SAAU1vI,GACzCqxI,GAAOrxI,GAAO,SAAUxlL,GACtBqjE,EAAQrjE,GACJyqL,GAASv2K,UAAUlU,IAAsD,cAA7C0tG,EAAGttG,IAAIo8D,SAASx8D,EAAM,oBAAsCA,EAAK6J,YAA0D,cAA5Cw2R,GAAkBjgS,EAAKJ,EAAK6J,aACzIiyE,GAAa4xB,EAAI,CACfx6G,MAAM,EACN0rC,OAAO,EACPu/B,OAAQ,OACR5jD,OAAQ,CAAEk+S,eAAgB,cACzB,KAAMz4T,UAKjB,GAAIA,EACEu/R,GAAOv/R,IACTo/B,EAAMh/B,EAAImlE,YACVnmC,EAAIS,eAAe7/B,GACnBo/B,EAAIc,YAAYlgC,GAChBw4T,EAAep5R,IAEfo5R,EAAex4T,QAInB,GAAoD,UAAhDI,EAAI+iE,mBAAmBhkC,EAAUwkC,WAWhCxkC,EAAUmtG,eAAkB/wD,EAAOpd,SAAU/9D,EAAIq9E,OAAO,+CAA+Cv2F,OAS1G8tU,GAAkBtnN,EAAIhgH,EAAMuyS,EAAMwwB,IARlC1+H,EAAWuiG,GAAYL,sBAAsBvmL,EAAGvuE,WAAW,GAC3Dq5R,EAAer5R,EAAU6nC,UACzB7nC,EAAU8yJ,eAAeF,GACrBx2G,EAAOpd,QAAUjsE,GAAMw7G,EAAIhgH,EAAMuyS,EAAM9gQ,EAAUd,aACnDohQ,GAAUr/R,EAAK++B,EAAWA,EAAU6nC,UAEtC0mC,EAAG7xB,mBAlBL,CACE77E,EAAOm/B,EAAUwkC,UACjB,IAAK,IAAI76E,EAAI,EAAG8zG,EAAIwzN,EAAWlpU,OAAQ4B,EAAI8zG,EAAG9zG,IAC5C,GAAIsnU,EAAWtnU,GAAG4vU,iBACZ58O,GAAa4xB,EAAI0iN,EAAWtnU,GAAIm3S,EAAMjgS,EAAMA,GAC9C,QAmBN24T,GAASpwU,GAAMgD,KACfqtU,GAAgB,SAAU54T,GAC5B,OAAOyqL,GAASv2K,UAAUlU,KAAUi/R,GAAUvrG,eAAe1zL,KAAU80R,GAAY90R,KAAUyqL,GAASi2E,QAAQ1gQ,IAE5G64T,GAAqB,SAAU74T,EAAMgiR,GACvC,IAAI5vQ,EACJ,IAAKA,EAAUpS,EAAMoS,EAASA,EAAUA,EAAQ4vQ,GAAc,CAC5D,GAAIv3F,GAASt2K,OAAO/B,IAAyC,IAA7BA,EAAQsvB,UAAUx6C,OAChD,OAAO8Y,EAET,GAAIyqL,GAASv2K,UAAU9B,KAAa6sR,GAAUvrG,eAAethL,GAC3D,OAAOA,EAGX,OAAOpS,GAEL84T,GAAqB,SAAU14T,EAAK+rJ,EAAMvvJ,GAC5C,IAAIwV,EAAS2mT,EACTC,EAAe,IAAIxC,GAAap2T,GACpC,GAAI+rJ,GAAQvvJ,IACVuvJ,EAAO0sK,GAAmB1sK,EAAM,mBAChCvvJ,EAAOi8T,GAAmBj8T,EAAM,eAC5Bo8T,EAAa3mF,QAAQlmF,EAAMvvJ,IAAO,CACpC,IAAKwV,EAAU+5I,EAAK36I,YAAaY,GAAWA,IAAYxV,GACtDm8T,EAAa3mT,EACbA,EAAUA,EAAQZ,YAClB26I,EAAK35I,YAAYumT,GAMnB,OAJA34T,EAAI4S,OAAOpW,GACXrU,GAAMgD,KAAKhD,GAAMq+L,KAAKhqL,EAAKgD,aAAa,SAAUI,GAChDmsJ,EAAK35I,YAAYxS,MAEZmsJ,EAGX,OAAOvvJ,GAELq8T,GAAuB,SAAUj5T,EAAMrU,EAAQ03E,GACjDs1P,GAAO34T,EAAKJ,YAAY,SAAUI,GAC5B44T,GAAc54T,KACZrU,EAAOqU,IACTqjE,EAAQrjE,GAENA,EAAKL,iBACPs5T,GAAqBj5T,EAAMrU,EAAQ03E,QAKvC61P,GAAW,SAAU94T,EAAK1S,GAC5B,OAAOlG,GAAM,SAAUkG,EAAMsS,GAC3B,SAAUA,IAAQw8D,GAASp8D,EAAKJ,EAAMtS,MACrCA,IAEDyrU,GAAa,SAAU/4T,EAAK1S,EAAMrG,GACpC,OAAOG,GAAM,SAAUkG,EAAMrG,EAAO2Y,GAClCI,EAAI6yL,SAASjzL,EAAMtS,EAAMrG,GACU,KAA/B2Y,EAAK0U,aAAa,UACpB1U,EAAK+U,gBAAgB,SAEvBqkT,GAAgBh5T,EAAKJ,KACpBtS,EAAMrG,IAEP+xU,GAAkB,SAAUh5T,EAAKJ,GACb,SAAlBA,EAAKgU,UAAuD,IAAhC5T,EAAI8jR,WAAWlkR,GAAM9Y,QACnDkZ,EAAI4S,OAAOhT,GAAM,IAGjBq5T,GAAiC,SAAUj5T,EAAKJ,GAClD,GAAsB,IAAlBA,EAAKwI,UAAkBxI,EAAK6J,YAA2C,IAA7B7J,EAAK6J,WAAWrB,SAAgB,CAC5E,IAAIiwT,EAAiBp4B,GAAkBjgS,EAAKJ,EAAK6J,YAC7CzJ,EAAIo8D,SAASx8D,EAAM,UAAYy4T,EACjCr4T,EAAI6yL,SAASjzL,EAAM,kBAAmBy4T,GAC7Br4T,EAAIo8D,SAASx8D,EAAM,qBAAuBy4T,GACnDr4T,EAAI6yL,SAASjzL,EAAM,kBAAmB,QAIxCs5T,GAA+B,SAAUl5T,EAAKm7E,EAAQ0kN,EAAMjgS,GAC1Du7E,EAAOhhE,SAAWghE,EAAOhhE,OAAOgyD,OAASgP,EAAOhhE,OAAOk+S,kBACzDlwU,GAAM+nN,KAAKtwM,EAAMxY,EAAM6xU,GAAgCj5T,GAAM,cAC7Di5T,GAA+Bj5T,EAAKJ,KAGpCu5T,GAAkC,SAAUn5T,EAAKm7E,EAAQ0kN,EAAMjgS,GAC7Du7E,EAAOhhE,QAAUghE,EAAOhhE,OAAOi/S,iBACjCP,GAAqBj5T,EAAMk5T,GAAS94T,EAAK,YAAa+4T,GAAW/4T,EAAK,kBAAmB4/R,GAAYzkN,EAAOhhE,OAAOi/S,gBAAiBv5B,MAGpIw5B,GAAc,SAAUr5T,EAAKm7E,EAAQ0kN,EAAMjgS,GACvB,QAAlBu7E,EAAOpd,QAAsC,QAAlBod,EAAOpd,SACpC86P,GAAqBj5T,EAAMk5T,GAAS94T,EAAK,YAAa+4T,GAAW/4T,EAAK,WAAY,KAClFA,EAAI4S,OAAO5S,EAAIq9E,OAAyB,QAAlBlC,EAAOpd,OAAmB,MAAQ,MAAOn+D,IAAO,KAGtE05T,GAAgB,SAAUt5T,EAAKm7E,EAAQ0kN,EAAMjgS,GAC3CA,IAAkC,IAA1Bu7E,EAAOo+O,iBACjB35T,EAAO84T,GAAmB14T,EAAKu/R,GAAwB3/R,GAAOA,GAC9DA,EAAO84T,GAAmB14T,EAAKJ,EAAM2/R,GAAwB3/R,GAAM,MAGnE45T,GAAmB,SAAUx5T,EAAKm7E,EAAQv7E,GAC5C,GAAIu7E,EAAOs+O,mBAAoB,CAC7B,IAAItxT,EAAWgzE,EAAO8zK,MAAQ,WAAa,IAC3CspE,GAAOv4T,EAAIq9E,OAAOl1E,EAAUvI,IAAO,SAAUA,GACvC44T,GAAc54T,IAChB24T,GAAOp9O,EAAOhhE,QAAQ,SAAUlzB,EAAOqG,GACrC0S,EAAI6yL,SAASjzL,EAAMtS,EAAM,YAM/BosU,GAAoB,SAAUr+P,EAAQ20P,EAAYnwB,EAAMjgS,GAC1D24T,GAAOvI,GAAY,SAAU70O,GAC3Bo9O,GAAOl9P,EAAOr7D,IAAIq9E,OAAOlC,EAAOpd,OAAQn+D,IAAO,SAAU0R,GAClDknT,GAAclnT,IAGnBoqE,GAAargB,EAAQ8f,EAAQ0kN,EAAMvuR,EAAO6pE,EAAO38C,MAAQltB,EAAQ,SAEnEkoT,GAAiBn+P,EAAOr7D,IAAKm7E,EAAQv7E,OAGrC+5T,GAAmB,SAAUt+P,EAAQ8f,EAAQ7tF,EAAMuyS,EAAMjgS,GACvDi9I,GAAUxhF,EAAQz7D,EAAK6J,WAAYnc,EAAMuyS,IACvCnkN,GAAargB,EAAQ8f,EAAQ0kN,EAAMjgS,IAIrCu7E,EAAOy+O,oBACTv+P,EAAOr7D,IAAI2kE,UAAU/kE,EAAK6J,YAAY,SAAUyH,GAC9C,GAAI2rI,GAAUxhF,EAAQnqD,EAAQ5jB,EAAMuyS,GAElC,OADAnkN,GAAargB,EAAQ8f,EAAQ0kN,EAAMjgS,IAC5B,MAMXi6T,GAAgB,SAAUz2G,EAAIktE,EAAID,EAAIE,GACxC,IAAIvxP,EAAM54C,EAAW+Y,SAAS6gC,cAG9B,OAFAhB,EAAIQ,SAAS4jL,EAAIktE,GACjBtxP,EAAIa,OAAOwwP,EAAIE,GACRvxP,GAEL86R,GAA+B,SAAU96R,GAC3C,IAAIk9P,EAAWvK,GAAgBP,eAAepyP,GAC1Cq/P,EAAS1M,GAAgBN,aAAaryP,GACtCkkC,EAAWlkC,EAAI8gR,wBACnB,OAAO3iB,GAAYZ,cAAa,EAAOr5N,EAAUm7N,GAAQnzS,KAAI,SAAU6uU,GACrE,OAAK//B,GAAckC,EAAUmC,EAAQn7N,IAAa82N,GAAckC,EAAU69B,EAAW72P,GAC5E22P,GAAc39B,EAASzoR,YAAayoR,EAASj0Q,SAAU8xS,EAAUtmT,YAAasmT,EAAU9xS,UAExF+W,KAERt0C,MAAMs0C,IAEPg7R,GAAc,SAAUh7R,GAC1B,OAAOA,EAAI8B,UAAY9B,EAAM86R,GAA6B96R,IAExDi7R,GAAkB,CAAEr2P,UAAWo2P,IAE/BE,GAAS/xU,GAAMgD,KACfgvU,GAAkB,SAAUv6T,GAC9B,OAAOA,GAA0B,IAAlBA,EAAKwI,WAAmBy2R,GAAUvrG,eAAe1zL,KAAU80R,GAAY90R,KAAUyqL,GAASi2E,QAAQ1gQ,IAE/Gy7E,GAAc,SAAUiyB,EAAIhgH,EAAMuyS,EAAMjgS,GAC1C,IAEI+xL,EAAU3yJ,EAFVgxR,EAAa1iN,EAAG9xB,UAAUtqF,IAAI5D,GAC9B6tF,EAAS60O,EAAW,GAEpB9jL,GAAetsI,GAAQ0tG,EAAGvuE,UAAUmtG,cACpClsI,EAAMstG,EAAGttG,IAAK++B,EAAYuuE,EAAGvuE,UAC7Bq7R,EAAmB,SAAUz2P,EAAKm7D,GAEpC,GADAA,EAAMA,GAAO3jD,EACTxX,EAAK,CAOP,GANIm7D,EAAIu7L,UACNv7L,EAAIu7L,SAAS12P,EAAKm7D,EAAK+gK,EAAMjgS,GAE/Bs6T,GAAOp7L,EAAI3kH,QAAQ,SAAUlzB,EAAOqG,GAClC0S,EAAI6yL,SAASlvH,EAAKr2E,EAAMsyS,GAAY34S,EAAO44S,OAEzC/gK,EAAI3kH,OAAQ,CACd,IAAImgT,EAAWt6T,EAAIukL,UAAU5gH,EAAK,SAC9B22P,GACFt6T,EAAI84L,UAAUn1H,EAAK,iBAAkB22P,GAGzCJ,GAAOp7L,EAAI5kH,YAAY,SAAUjzB,EAAOqG,GACtC0S,EAAI84L,UAAUn1H,EAAKr2E,EAAMsyS,GAAY34S,EAAO44S,OAE9Cq6B,GAAOp7L,EAAI7kH,SAAS,SAAUhzB,GAC5BA,EAAQ24S,GAAY34S,EAAO44S,GACtB7/R,EAAIinM,SAAStjI,EAAK18E,IACrB+Y,EAAIo2J,SAASzyF,EAAK18E,QAKtBszU,EAAiB,SAAUvK,EAAYpwT,GACzC,IAAIkxH,GAAQ,EACZ,QAAK31C,EAAOhzE,WAGZ+xT,GAAOlK,GAAY,SAAU70O,GAC3B,KAAI,cAAeA,IAAUA,EAAOr6C,YAAcorG,EAGlD,OAAIlsI,EAAIxV,GAAGoV,EAAMu7E,EAAOhzE,YAAcusR,GAAY90R,IAChDw6T,EAAiBx6T,EAAMu7E,GACvB21C,GAAQ,GACD,QAHT,KAMKA,IAEL0pM,EAAgB,SAAUx6T,EAAKg/B,EAAK2yJ,EAAU8oI,GAChD,IACIn4B,EAAUo4B,EADV53B,EAAc,GACK1hK,GAAkB,EACzCkhK,EAAWnnN,EAAOpd,QAAUod,EAAO80C,MACnCyqM,EAAU16T,EAAIiwB,OAAOqyQ,GACrB83B,EAAiBM,GACjBt4B,GAAUlyF,KAAKlwM,EAAKg/B,GAAK,SAAUomJ,GACjC,IAAIu1I,EACA13P,EAAU,SAAUrjE,GACtB,IAAIuhI,GAA0B,EAC1Bg3L,EAAsB/2L,EACtBxtH,EAAWhU,EAAKgU,SAASlS,cACzBg9M,EAAa9+M,EAAK6J,WAAWmK,SAASlS,cAM1C,GALI2oL,GAASv2K,UAAUlU,IAASI,EAAI+iE,mBAAmBnjE,KACrDu4T,EAAsB/2L,EACtBA,EAAmD,SAAjCphI,EAAI+iE,mBAAmBnjE,GACzCuhI,GAA0B,GAExB2+J,GAAKlsR,EAAU,MAKjB,OAJA+mT,EAAiB,OACbx/O,EAAO80C,OACTjwH,EAAI4S,OAAOhT,IAIf,GAAIu7E,EAAOpoE,SAAW8pI,GAAUvvC,EAAI1tG,EAAMtS,EAAMuyS,GAC9C86B,EAAiB,MADnB,CAIA,GAAIv5L,IAAoBD,GAA2BhmD,EAAO80C,QAAU90C,EAAOpoE,SAAW2sR,GAAcpyL,EAAI15F,IAAaq0F,GAAQqF,EAAIoxG,EAAY4jF,GAK3I,OAJA1iS,EAAOI,EAAI8zL,OAAOl0L,EAAM0iS,GACxB83B,EAAiBx6T,GACjBkjS,EAAYx0S,KAAKsR,QACjB+6T,EAAiB,GAGnB,GAAIx/O,EAAOhzE,SAAU,CACnB,IAAI2oH,EAAQypM,EAAevK,EAAYpwT,GACvC,IAAKu7E,EAAOpd,QAAU+yD,EAEpB,YADA6pM,EAAiB,IAIjBv5L,GAAoBD,IAA2Bl5B,GAAQqF,EAAIg1L,EAAU1uR,KAAaq0F,GAAQqF,EAAIoxG,EAAY4jF,KAAgBm4B,GAAkC,IAAlB76T,EAAKwI,UAA4C,IAA1BxI,EAAK0hC,UAAUx6C,QAAiD,QAAjC8Y,EAAK0hC,UAAUwxE,WAAW,IAAkB4hL,GAAY90R,IAAWu7E,EAAOpd,QAAW/9D,EAAI8iE,QAAQljE,IAQnS+6T,EAAiB,EACjBT,GAAO/xU,GAAMq+L,KAAK5mL,EAAKJ,YAAayjE,GAChCk+D,IACFC,EAAkB+2L,GAEpBwC,EAAiB,IAZZA,IACHA,EAAiB36T,EAAIlB,MAAM47T,GAAS,GACpC96T,EAAK6J,WAAWqI,aAAa6oT,EAAgB/6T,GAC7CkjS,EAAYx0S,KAAKqsU,IAEnBA,EAAevoT,YAAYxS,MAU/Bs6T,GAAO90I,EAAOniH,OAEK,IAAjBkY,EAAO8zK,OACTirE,GAAOp3B,GAAa,SAAUljS,GAC5B,IAAIqjE,EAAU,SAAUrjE,GACA,MAAlBA,EAAKgU,UACPwmT,EAAiBx6T,EAAMu7E,GAEzB++O,GAAO/xU,GAAMq+L,KAAK5mL,EAAKJ,YAAayjE,IAEtCA,EAAQrjE,MAGZs6T,GAAOp3B,GAAa,SAAUljS,GAC5B,IAAIg7T,EACAC,EAAgB,SAAUj7T,GAC5B,IAAIjO,EAAQ,EAMZ,OALAuoU,GAAOt6T,EAAKJ,YAAY,SAAUI,GAC3B+/R,GAAgB//R,IAAUi/R,GAAUvrG,eAAe1zL,IACtDjO,OAGGA,GAELmpU,EAAsB,SAAUh3R,GAClC,IAAIxyB,GAAQ,EAOZ,OANA4oT,GAAOp2R,EAAKtkC,YAAY,SAAUI,GAChC,GAAIu6T,GAAgBv6T,GAElB,OADA0R,EAAQ1R,GACD,KAGJ0R,GAELypT,EAAc,SAAUn7T,GAC1B,IAAI0R,EAAOxS,EAQX,OAPAwS,EAAQwpT,EAAoBl7T,GACxB0R,IAAUutR,GAAUvrG,eAAehiL,IAAU6+S,GAAUnwT,EAAKsR,EAAO6pE,KACrEr8E,EAAQkB,EAAIlB,MAAMwS,GAAO,GACzB8oT,EAAiBt7T,GACjBkB,EAAIqB,QAAQvC,EAAOc,GAAM,GACzBI,EAAI4S,OAAOtB,GAAO,IAEbxS,GAASc,GAElBg7T,EAAaC,EAAcj7T,KACtBkjS,EAAYh8S,OAAS,IAAMkZ,EAAI8iE,QAAQljE,IAAyB,IAAfg7T,GAIlDz/O,EAAOpd,QAAUod,EAAOpoE,WACrBooE,EAAO38C,OAAwB,IAAfo8R,IACnBh7T,EAAOm7T,EAAYn7T,IAErB85T,GAAkBpsN,EAAI0iN,EAAYnwB,EAAMjgS,GACxC+5T,GAAiBrsN,EAAInyB,EAAQ7tF,EAAMuyS,EAAMjgS,GACzCu5T,GAAgCn5T,EAAKm7E,EAAQ0kN,EAAMjgS,GACnDs5T,GAA6Bl5T,EAAKm7E,EAAQ0kN,EAAMjgS,GAChDy5T,GAAYr5T,EAAKm7E,EAAQ0kN,EAAMjgS,GAC/B05T,GAAct5T,EAAKm7E,EAAQ0kN,EAAMjgS,IAZjCI,EAAI4S,OAAOhT,GAAM,OAgBvB,GAAoD,UAAhDI,EAAI+iE,mBAAmBhkC,EAAUwkC,YAUrC,GAAI4X,EAAQ,CACV,GAAIv7E,EACEu/R,GAAOv/R,GACJ26T,EAAevK,EAAYpwT,KAC9Bo/B,EAAMh/B,EAAImlE,YACVnmC,EAAIS,eAAe7/B,GACnBo/B,EAAIc,YAAYlgC,GAChB46T,EAAcx6T,EAAKwhS,GAAUl0L,EAAItuE,EAAKgxR,GAAa,MAAM,IAG3DwK,EAAcx6T,EAAKJ,EAAM,MAAM,QAGjC,GAAKssI,GAAgB/wD,EAAOpd,SAAU/9D,EAAIq9E,OAAO,+CAA+Cv2F,OAY9F4tU,GAAiBpnN,EAAIhgH,EAAMuyS,OAZ2E,CACtG,IAAIm7B,EAAa1tN,EAAGvuE,UAAUwkC,UACzB+pC,EAAGhyC,SAASg3I,oBAAqB09G,EAAW,GAAGU,cAAiB1wT,EAAI2kE,UAAUq2P,EAAYh7T,EAAI8iE,UACjGuY,GAAYiyB,EAAI0iN,EAAW,GAAGU,cAEhCpjN,EAAGvuE,UAAUm8H,OAAO++J,GAAgBr2P,UAAU0pC,EAAGvuE,UAAU6nC,WAC3D+qH,EAAWuiG,GAAYL,sBAAsBvmL,EAAGvuE,WAAW,GAC3Dy7R,EAAcx6T,EAAKwhS,GAAUl0L,EAAIvuE,EAAU6nC,SAAUopP,IACrDjxR,EAAU8yJ,eAAeF,GACzB0tG,GAAUr/R,EAAK++B,EAAWA,EAAU6nC,UACpC0mC,EAAG7xB,cAKPm6O,GAActoU,EAAMggH,QAtCtB,CACE1tG,EAAOm/B,EAAUwkC,UACjB,IAAK,IAAI76E,EAAI,EAAG8zG,EAAIwzN,EAAWlpU,OAAQ4B,EAAI8zG,EAAG9zG,IAC5C,GAAIsnU,EAAWtnU,GAAG4vU,iBAAmBt4T,EAAIxV,GAAGoV,EAAMowT,EAAWtnU,GAAGyf,UAE9D,YADAiyT,EAAiBx6T,EAAMowT,EAAWtnU,MAsCtC+hK,GAAU,SAAUwwK,EAA2B5/P,GACjD,IAAI6/P,EAAiBv8T,GAAK,IAC1Bs8T,EAA0Bp8T,IAAI,IAC9Bw8D,EAAOpjC,GAAG,cAAc,SAAU/uC,GAChCiyU,GAA6B9/P,EAAQnyE,EAAEgf,QAASgzT,EAAgBD,EAA0B/pU,WAG1FiqU,GAA+B,SAAU9/P,EAAQsI,EAAKu3P,EAAgBE,GACxE,IAAIC,EAAc7qU,EAAK0qU,EAAehqU,OAClCoqU,EAAa,GACbC,EAAiB,GACjB3+K,EAAUrxJ,EAAO40S,GAAa9kO,EAAOr7D,IAAK2jE,IAAM,SAAU/jE,GAC5D,OAAyB,IAAlBA,EAAKwI,WAAmBxI,EAAK0U,aAAa,qBAEnD7jB,GAAO2qU,GAAkB,SAAUvtT,EAAMstE,GACvChzF,GAAMgD,KAAKyxJ,GAAS,SAAUh9I,GAC5B,OAAIy7D,EAAOmgB,UAAUqhE,UAAUj9I,EAAMu7E,EAAQ,GAAIttE,EAAKwiT,WACf,IAAjCgL,EAAYlyU,QAAQgyF,KACtBhwF,EAAK0iB,EAAKmkF,WAAW,SAAUtV,GAC7BA,GAAS,EAAM,CACb98E,KAAMA,EACNu7E,OAAQA,EACRyhE,QAASA,OAGb0+K,EAAWngP,GAAUttE,EAAKmkF,WAE5BupO,EAAepgP,GAAUttE,EAAKmkF,WACvB,IAEL+9N,GAAiC10P,EAAQz7D,EAAMu7E,SAAnD,QAKJ,IAAIqgP,EAAmBC,GAAuBP,EAAehqU,MAAOqqU,EAAgB53P,EAAKi5E,GACzFs+K,EAAer8T,IAAIxW,GAASA,GAAS,GAAIizU,GAAaE,KAEpDC,GAAyB,SAAUP,EAAgBK,EAAgB53P,EAAKi5E,GAC1E,OAAOmiH,GAASm8D,GAAgB,SAAUlpO,EAAW7W,GACnD,QAAK/pF,GAAImqU,EAAgBpgP,KACvBhwF,EAAK6mG,GAAW,SAAUtV,GACxBA,GAAS,EAAO,CACd98E,KAAM+jE,EACNwX,OAAQA,EACRyhE,QAASA,QAGN,MAIRp0J,GAEDkzU,GAAe,SAAUT,EAA2Bj8L,EAAStiD,EAAU2zO,GACzE,IAAIsL,EAAoBV,EAA0B/pU,MAClD/F,EAAK6zI,EAAQhnH,MAAM,MAAM,SAAUmjE,GAC5BwgP,EAAkBxgP,KACrBwgP,EAAkBxgP,GAAU,CAC1Bk1O,QAASA,EACTr+N,UAAW,KAGf2pO,EAAkBxgP,GAAQ6W,UAAU1jG,KAAKouF,MAE3Cu+O,EAA0Bp8T,IAAI88T,IAE5B9pN,GAAkB,SAAUopN,EAA2Bj8L,EAAStiD,GAClE,IAAIi/O,EAAoBV,EAA0B/pU,MAClD/F,EAAK6zI,EAAQhnH,MAAM,MAAM,SAAUmjE,GACjCwgP,EAAkBxgP,GAAQ6W,UAAYzmG,EAAOowU,EAAkBxgP,GAAQ6W,WAAW,SAAU1iF,GAC1F,OAAOA,IAAMotE,KAEoC,IAA/Ci/O,EAAkBxgP,GAAQ6W,UAAUlrG,eAC/B60U,EAAkBxgP,MAG7B8/O,EAA0Bp8T,IAAI88T,IAE5Bz+K,GAAgB,SAAU7hF,EAAQ4/P,EAA2Bj8L,EAAStiD,EAAU2zO,GAKlF,OAJwC,OAApC4K,EAA0B/pU,OAC5Bu5J,GAAQwwK,EAA2B5/P,GAErCqgQ,GAAaT,EAA2Bj8L,EAAStiD,EAAU2zO,GACpD,CACLnqS,OAAQ,WACN,OAAO2rF,GAAgBopN,EAA2Bj8L,EAAStiD,MAK7Dh2D,GAAQ,SAAU1mB,GACpB,IAAIg/H,EAAU,CACZ48L,UAAW,CAAC,CACRzzT,SAAU,QACVgS,OAAQ,CAAE0hT,cAAe,SAE7BC,aAAc,CAAC,CACX3zT,SAAU,QACVgS,OAAQ,CAAE0hT,cAAe,YAE7BE,aAAc,CAAC,CACX5zT,SAAU,QACVgS,OAAQ,CAAE0hT,cAAe,YAE7BG,UAAW,CACT,CACE7zT,SAAU,eACV24B,WAAW,EACX7mB,QAAS,aACTq+S,iBAAiB,EACjB1vN,QAAS,yBAEX,CACEzgG,SAAU,mDACVgS,OAAQ,CAAE8hT,UAAW,QACrBhM,SAAS,EACTrnN,SAAS,EACT8nN,aAAc,OAEhB,CACEvoT,SAAU,YACV24B,WAAW,EACX3mB,OAAQ,CAAEsmQ,MAAO,QACjB73K,QAAS,0BAGbszN,YAAa,CACX,CACE/zT,SAAU,mDACVgS,OAAQ,CAAE8hT,UAAW,UACrBhM,SAAS,EACTrnN,QAAS,wBACT8nN,aAAc,OAEhB,CACEvoT,SAAU,eACV24B,WAAW,EACX7mB,QAAS,eACTq+S,iBAAiB,EACjB1vN,QAAS,yBAEX,CACEzgG,SAAU,MACV24B,WAAW,EACX3mB,OAAQ,CACN6pE,QAAS,QACTuyK,WAAY,OACZC,YAAa,QAEf5tJ,SAAS,GAEX,CACEzgG,SAAU,QACV24B,WAAW,EACX3mB,OAAQ,CACNo8O,WAAY,OACZC,YAAa,QAEf5tJ,QAAS,0BAGbuzN,WAAY,CACV,CACEh0T,SAAU,eACV24B,WAAW,EACX7mB,QAAS,cACTq+S,iBAAiB,EACjB1vN,QAAS,yBAEX,CACEzgG,SAAU,mDACVgS,OAAQ,CAAE8hT,UAAW,SACrBhM,SAAS,EACTrnN,QAAS,wBACT8nN,aAAc,OAEhB,CACEvoT,SAAU,YACV24B,WAAW,EACX3mB,OAAQ,CAAEsmQ,MAAO,SACjB73K,QAAS,0BAGbwzN,aAAc,CAAC,CACXj0T,SAAU,mDACVgS,OAAQ,CAAE8hT,UAAW,WACrBhM,SAAS,EACTS,aAAc,MACd9nN,QAAS,0BAEbyzN,KAAM,CACJ,CACEt+P,OAAQ,SACRnrD,OAAQ,OAEV,CACEmrD,OAAQ,OACR5jD,OAAQ,CAAEmiT,WAAY,SAExB,CACEv+P,OAAQ,IACRnrD,OAAQ,QAGZ2pT,OAAQ,CACN,CACEx+P,OAAQ,KACRnrD,OAAQ,OAEV,CACEmrD,OAAQ,OACR5jD,OAAQ,CAAEqiT,UAAW,WAEvB,CACEz+P,OAAQ,IACRnrD,OAAQ,QAGZ6pT,UAAW,CACT,CACE1+P,OAAQ,OACR5jD,OAAQ,CAAEk+S,eAAgB,aAC1B75R,OAAO,GAET,CACEu/B,OAAQ,IACRnrD,OAAQ,QAGZ8pT,cAAe,CACb,CACE3+P,OAAQ,OACR5jD,OAAQ,CAAEk+S,eAAgB,gBAC1B75R,OAAO,GAET,CACEu/B,OAAQ,SACRnrD,OAAQ,QAGZ+pT,UAAW,CACT5+P,OAAQ,OACR5jD,OAAQ,CAAEgyD,MAAO,UACjB8iL,OAAO,EACPuoE,gBAAgB,EAChBiC,oBAAoB,GAEtBmD,YAAa,CACX7+P,OAAQ,OACR5jD,OAAQ,CAAEi/S,gBAAiB,UAC3BnqE,OAAO,EACPuoE,gBAAgB,EAChBiC,oBAAoB,GAEtBoD,SAAU,CACR9+P,OAAQ,OACR5Q,QAAQ,EACRhzC,OAAQ,CAAE4gI,WAAY,UACtB0+K,oBAAoB,GAEtBqD,SAAU,CACR/+P,OAAQ,OACR5Q,QAAQ,EACRhzC,OAAQ,CAAE8hI,SAAU,UACpBw9K,oBAAoB,GAEtBsD,eAAgB,CACdh/P,OAAQ,OACR7jD,WAAY,CAAEwrL,MAAO,WAEvBs3H,WAAY,CACV/sM,MAAO,aACPl9G,SAAS,EACTH,OAAQ,OAEVqqT,UAAW,CAAEl/P,OAAQ,OACrBm/P,YAAa,CAAEn/P,OAAQ,OACvB+uB,KAAM,CAAE/uB,OAAQ,QAChBr0C,KAAM,CACJq0C,OAAQ,IACR51D,SAAU,IACVyK,OAAQ,MACRoF,OAAO,EACPllB,MAAM,EACNw9T,QAAS,WACP,OAAO,GAET+J,SAAU,SAAU12P,EAAKm7D,EAAK+gK,GAC5B13S,GAAMgD,KAAK00S,GAAM,SAAU54S,EAAOkK,GAChC6O,EAAI84L,UAAUn1H,EAAKxyE,EAAKlK,QAI9Bk2U,aAAc,CACZ,CACEh1T,SAAU,gFACVyK,OAAQ,MACRoF,OAAO,EACPi8C,QAAQ,EACRstO,cAAc,EACdzuS,MAAM,GAER,CACEqV,SAAU,OACV+R,WAAY,CACV,QACA,SAEFtH,OAAQ,QACRoF,OAAO,EACPi8C,QAAQ,EACRnhE,MAAM,GAER,CACEqV,SAAU,IACV+R,WAAY,CACV,QACA,SAEFlC,OAAO,EACPi8C,QAAQ,EACRnhE,MAAM,KAUZ,OANA3K,GAAMgD,KAAK,qDAAqD6sB,MAAM,OAAO,SAAU1qB,GACrF0xI,EAAQ1xI,GAAQ,CACd2iI,MAAO3iI,EACPslB,OAAQ,UAGLosH,GAELo+L,GAAiB,CAAElsU,IAAKw1B,IAE5B,SAAS22S,GAAehiQ,GACtB,IAAI2jE,EAAU,GACV9tI,EAAM,SAAU5D,GAClB,OAAOA,EAAO0xI,EAAQ1xI,GAAQ0xI,GAE5BxqH,EAAQ,SAAUlnB,GACpB,OAAO8D,GAAI4tI,EAAS1xI,IAElB86E,EAAW,SAAU96E,EAAM6tF,GACzB7tF,IACkB,kBAATA,EACTnF,GAAMgD,KAAKmC,GAAM,SAAU6tF,EAAQ7tF,GACjC86E,EAAS96E,EAAM6tF,OAGZxtF,EAAQwtF,KACXA,EAAS,CAACA,IAEZhzF,GAAMgD,KAAKgwF,GAAQ,SAAUA,GACA,qBAAhBA,EAAOroF,OAChBqoF,EAAOroF,MAAQqoF,EAAOhzE,UAEI,qBAAjBgzE,EAAOnjE,QAChBmjE,EAAOnjE,OAASmjE,EAAOhzE,UAAYgzE,EAAOpd,QAEf,qBAAlBod,EAAOvoE,QAA0BuoE,EAAOhzE,WAAagzE,EAAOpd,SACrEod,EAAOvoE,OAAS,QAEduoE,EAAOhzE,UAAYgzE,EAAOpd,SAC5Bod,EAAO68O,OAAQ,EACf78O,EAAOomN,cAAe,GAEM,kBAAnBpmN,EAAOlhE,UAChBkhE,EAAOlhE,QAAUkhE,EAAOlhE,QAAQjC,MAAM,WAG1CgnH,EAAQ1xI,GAAQ6tF,KAIlBkO,EAAa,SAAU/7F,GAIzB,OAHIA,GAAQ0xI,EAAQ1xI,WACX0xI,EAAQ1xI,GAEV0xI,GAIT,OAFA52D,EAASg1P,GAAelsU,IAAImqE,EAAOr7D,MACnCooE,EAAS/M,EAAOC,SAAS0jE,SAClB,CACL9tI,IAAKA,EACLE,IAAKojB,EACL4zD,SAAUA,EACVihB,WAAYA,GAIhB,IA2/CIi0O,GA3/CAC,GAASp1U,GAAMgD,KACf6U,GAAM0mR,GAAWvqN,IACjBqhQ,GAAuB,SAAUC,EAAUpiQ,GAC7C,IAAIsI,EAAK5jD,EAAM1M,EACXlZ,EAASkhE,GAAUA,EAAOlhE,QAAUkxQ,GAAO,IAC3Cq3B,EAAW,SAAU/+N,EAAK5jD,GACxBA,EAAK9F,QAAQnzB,QACfkZ,GAAIo2J,SAASzyF,EAAK5jD,EAAK9F,QAAQhoB,KAAK,MAEtC+N,GAAI0sL,WAAW/oH,EAAK5jD,EAAK3L,QAEvB/U,EAAgB,SAAUq+T,GAC5B,IAAI/5P,EAQJ,OAPA5jD,EAAwB,kBAAV29S,EAAqB,CACjCpwU,KAAMowU,EACNzjT,QAAS,GACT7F,MAAO,IACLspT,EACJ/5P,EAAM3jE,GAAIiwB,OAAOlQ,EAAKzyB,MACtBo1S,EAAS/+N,EAAK5jD,GACP4jD,GAELg6P,EAAoB,SAAUh6P,EAAKv+D,GACrC,IAAI9X,EAAsB,kBAARq2E,EAAmBA,EAAI/vD,SAASlS,cAAgBiiE,EAC9Di6P,EAAUzjU,EAAOs0Q,eAAenhR,GAChC8hR,EAAkBwuD,GAAWA,EAAQxuD,gBACzC,SAAIA,IAAmBA,EAAgBtoR,UAC9Bse,IAA4D,IAA/Cjd,GAAM6vM,QAAQo3E,EAAiBhqQ,GAAoBA,EAAYgqQ,EAAgB,KAKnGyuD,EAAa,SAAUl6P,EAAK85P,EAAUpqI,GACxC,IAAIniL,EAAQ4sT,EAAiBC,EACzB10T,EAAWo0T,EAAS32U,OAAS,GAAK22U,EAAS,GAC3CO,EAAe30T,GAAYA,EAAS/b,KAExC,GADAywU,EAAiBJ,EAAkBh6P,EAAKq6P,GACpCD,EACEC,IAAiBD,GACnBD,EAAkBL,EAAS,GAC3BA,EAAWA,EAAStvU,MAAM,IAE1B2vU,EAAkBC,OAEf,GAAI10T,EACTy0T,EAAkBL,EAAS,GAC3BA,EAAWA,EAAStvU,MAAM,QACrB,IAAKklM,EACV,OAAO1vH,EAgBT,OAdIm6P,IACF5sT,EAAS7R,EAAcy+T,GACvB5sT,EAAOkB,YAAYuxD,IAEjB0vH,IACGniL,IACHA,EAASlR,GAAIiwB,OAAO,OACpB/e,EAAOkB,YAAYuxD,IAErBx7E,GAAMgD,KAAKkoM,GAAU,SAAUrhL,GAC7B,IAAIisT,EAAa5+T,EAAc2S,GAC/Bd,EAAOY,aAAamsT,EAAYt6P,OAG7Bk6P,EAAW3sT,EAAQusT,EAAUK,GAAmBA,EAAgBzqI,WAEzE,OAAIoqI,GAAYA,EAAS32U,QACvBi5B,EAAO09S,EAAS,GAChB95P,EAAMtkE,EAAc0gB,GACpB1M,EAAWrT,GAAIiwB,OAAO,OACtB5c,EAASjB,YAAYyrT,EAAWl6P,EAAK85P,EAAStvU,MAAM,GAAI4xB,EAAKszK,WACtDhgL,GAEA,IAGP6qT,GAAoB,SAAUn+S,GAChC,IAAIukK,EACA5zL,EAAM,CACRupB,QAAS,GACT7F,MAAO,IA4BT,OA1BA2L,EAAOrvB,EAAIyX,SAAWhgB,GAAM+d,KAAK6Z,GACpB,MAATA,IACFukK,EAAUvkK,EAAK1e,QAAQ,6CAA6C,SAAU88T,EAAIv1C,EAAIC,EAAIu1C,EAAIC,GAC5F,OAAQz1C,GACR,IAAK,IACHl4R,EAAI0jB,MAAM/pB,GAAKw+R,EACf,MACF,IAAK,IACHn4R,EAAIupB,QAAQ3rB,KAAKu6R,GACjB,MACF,IAAK,KACkF,IAAjF1gS,GAAM6vM,QAAQ,8CAA8ChgL,MAAM,KAAM6wQ,KAC1En4R,EAAI0jB,MAAMy0Q,GAAMA,GAElB,MAEF,GAAW,MAAPu1C,EAAY,CACd,IAAIpoP,EAAIqoP,EAAGvsU,MAAM,8BACbkkF,IACFtlF,EAAI0jB,MAAM4hE,EAAE,IAAMA,EAAE,IAGxB,MAAO,OAGXtlF,EAAIpD,KAAOg3L,GAAW,MACf5zL,GAEL4tU,GAAgB,SAAUn2T,GAC5B,OAAKA,GAAgC,kBAAbA,GAGxBA,EAAWA,EAAS6P,MAAM,WAAW,GACrC7P,EAAWA,EAAS9G,QAAQ,sBAAuB,MAC5ClZ,GAAM+C,IAAIid,EAAS6P,MAAM,4BAA4B,SAAU+H,GACpE,IAAIszK,EAAWlrM,GAAM+C,IAAI60B,EAAK/H,MAAM,gBAAiBkmT,IACjDxtU,EAAM2iM,EAAS56G,MAInB,OAHI46G,EAASvsM,SACX4J,EAAI2iM,SAAWA,GAEV3iM,KACNf,WAXM,IAaP4wI,GAAa,SAAUllE,EAAQ8f,GACjC,IAAI7tF,EAAMixU,EAAaC,EAAYzwR,EACd0wR,EAAgBC,EAAjCC,EAAa,GAEjB,GADAD,EAAgBrjQ,EAAOC,SAASsjQ,gBACV,IAAlBF,EACF,MAAO,GAEoB,kBAAlBA,IACTA,EAAgB,+IAElB,IAAIG,EAAa,SAAU7qU,GACzB,OAAOA,EAAIqN,QAAQ,UAAW,KAEhC,GAAsB,kBAAX85E,EAAqB,CAE9B,GADAA,EAAS9f,EAAOmgB,UAAUtqF,IAAIiqF,IACzBA,EACH,OAEFA,EAASA,EAAO,GAElB,MAAI,YAAaA,IACfujP,EAAgBvjP,EAAOytB,SACD,IAAlB81N,GACK,IAGXpxU,EAAO6tF,EAAO80C,OAAS90C,EAAOpd,QAAU,OACxChwB,EAAQuwR,GAAcnjP,EAAOhzE,UACzB4lC,EAAMjnD,QACHinD,EAAM,GAAGzgD,OACZygD,EAAM,GAAGzgD,KAAOA,GAElBA,EAAO6tF,EAAOhzE,SACdo2T,EAAcf,GAAqBzvR,EAAOstB,IAE1CkjQ,EAAcf,GAAqB,CAAClwU,GAAO+tE,GAE7CmjQ,EAAax+T,GAAIq9E,OAAO/vF,EAAMixU,GAAa,IAAMA,EAAY9sT,WAC7D8rT,GAAOpiP,EAAOhhE,QAAQ,SAAUlzB,EAAOqG,GACrCrG,EAAQ43U,EAAW53U,GACfA,GACF+Y,GAAI6yL,SAAS2rI,EAAYlxU,EAAMrG,MAGnCs2U,GAAOpiP,EAAOjhE,YAAY,SAAUjzB,EAAOqG,GACzCrG,EAAQ43U,EAAW53U,GACfA,GACF+Y,GAAI84L,UAAU0lI,EAAYlxU,EAAMrG,MAGpCs2U,GAAOpiP,EAAOlhE,SAAS,SAAUhzB,GAC/BA,EAAQ43U,EAAW53U,GACd+Y,GAAIinM,SAASu3H,EAAYv3U,IAC5B+Y,GAAIo2J,SAASooK,EAAYv3U,MAG7Bo0E,EAAOqf,KAAK,kBACZ16E,GAAIu5M,UAAUglH,EAAa,CACzB91S,SAAU,WACV1E,MAAO,QAETs3C,EAAOv8C,UAAU1M,YAAYmsT,GAC7BE,EAAiBz+T,GAAIo8D,SAASf,EAAOv8C,UAAW,YAAY,GAC5D2/S,EAAiB,MAAM39T,KAAK29T,GAAkBx7S,SAASw7S,EAAgB,IAAM,EAC7ElB,GAAOmB,EAAc1mT,MAAM,MAAM,SAAU1qB,GACzC,IAAIrG,EAAQ+Y,GAAIo8D,SAASoiQ,EAAYlxU,GAAM,GAC3C,IAAa,qBAATA,IAA+B,oCAAoCwT,KAAK7Z,KAC1EA,EAAQ+Y,GAAIo8D,SAASf,EAAOv8C,UAAWxxB,GAAM,GACN,YAAnC0S,GAAIq2E,MAAMpvF,GAAOya,kBAIV,UAATpU,GACqC,YAAnC0S,GAAIq2E,MAAMpvF,GAAOya,eADvB,CAKA,GAAa,cAATpU,GACE,QAAQwT,KAAK7Z,GAAQ,CACvB,GAAuB,IAAnBw3U,EACF,OAEF,IAAIK,EAAW/7S,WAAW97B,IAAU,KAAK6Z,KAAK7Z,GAAS,IAAM,GAC7DA,EAAQ63U,EAAWL,EAAiB,KAG3B,WAATnxU,GAAqBrG,IACvB03U,GAAc,kBAEhBA,GAAcrxU,EAAO,IAAMrG,EAAQ,QAErCo0E,EAAOqf,KAAK,uBACZ16E,GAAI4S,OAAO2rT,GACJI,IAGLxxQ,GAAS,SAAUkO,EAAQ2jE,EAAS1xI,EAAMuyS,EAAMjgS,GAClD,IAAIk/H,EAAME,EAAQ9tI,IAAI5D,IAClBwE,GAAMupE,EAAQ/tE,EAAMuyS,EAAMjgS,IAAY,WAAYk/H,EAAI,KAAOA,EAAI,GAAG3xE,OAGtEkuB,GAAYhgB,EAAQ/tE,EAAMuyS,EAAMjgS,GAFhCqrD,GAASoQ,EAAQ/tE,EAAMuyS,EAAMjgS,IAM7BwrJ,GAAU,SAAU/vF,GACtBA,EAAOw1L,YAAY,SAAU,GAAI,QACjCx1L,EAAOw1L,YAAY,SAAU,GAAI,UACjCx1L,EAAOw1L,YAAY,SAAU,GAAI,aACjC,IAAK,IAAInoQ,EAAI,EAAGA,GAAK,EAAGA,IACtB2yE,EAAOw1L,YAAY,UAAYnoQ,EAAG,GAAI,CACpC,eACA,EACA,IAAMA,IAGV2yE,EAAOw1L,YAAY,WAAY,GAAI,CACjC,eACA,EACA,MAEFx1L,EAAOw1L,YAAY,WAAY,GAAI,CACjC,eACA,EACA,QAEFx1L,EAAOw1L,YAAY,WAAY,GAAI,CACjC,eACA,EACA,aAGAkuE,GAAkB,CAAE1pQ,MAAO+1F,IAE3B4zK,GAAY,SAAU3jQ,GACxB,IAAI2jE,EAAUq+L,GAAehiQ,GACzB4jQ,EAAoBtgU,GAAK,MAG7B,OAFAogU,GAAgB1pQ,MAAMgG,GACtBonF,GAAQpnF,GACD,CACLnqE,IAAK8tI,EAAQ9tI,IACbE,IAAK4tI,EAAQ5tI,IACbg3E,SAAU42D,EAAQ52D,SAClBihB,WAAY21C,EAAQ31C,WACpBtiG,MAAOK,EAAMi0F,GAAahgB,GAC1BzoD,OAAQxrB,EAAM6jE,GAAUoQ,GACxBlO,OAAQ/lE,EAAM+lE,GAAQkO,EAAQ2jE,GAC9BltI,MAAO1K,EAAM0K,GAAOupE,GACpBk1P,SAAUnpU,EAAMmpU,GAAUl1P,GAC1BwhF,UAAWz1J,EAAMy1J,GAAWxhF,GAC5Bo/E,SAAUrzJ,EAAMqzJ,GAAUp/E,GAC1B6hF,cAAe91J,EAAM81J,GAAe7hF,EAAQ4jQ,GAC5C1+L,WAAYn5I,EAAMm5I,GAAYllE,KAI9B6jQ,GAAO,EAAGC,GAAS,EAAG9nI,GAAS,EAC/B/+G,GAAO,SAAUv0D,EAAM+C,GACzB,IAAI/3B,EAAOg1B,EAAKj9B,OAASggC,EAAMhgC,OAAS,EACpCs4U,EAAQ,IAAI31U,MAAMsF,GAClBswU,EAAM,IAAI51U,MAAMsF,GAChBuwU,EAAQ,SAAUx5T,EAAO8sG,EAAK2sN,GAChC,MAAO,CACLz5T,MAAOA,EACP8sG,IAAKA,EACL2sN,KAAMA,IAGNC,EAAc,SAAUC,EAAQC,EAAMC,EAAQC,EAAMz0D,GACtD,IAAI/9O,EAASyyS,EAAeJ,EAAQC,EAAMC,EAAQC,GAClD,GAAe,OAAXxyS,GAAmBA,EAAOtnB,QAAU45T,GAAQtyS,EAAOmyS,OAASG,EAAOE,GAAQxyS,EAAOwlF,MAAQ6sN,GAAUryS,EAAOmyS,OAASE,EAASE,EAAQ,CACvI,IAAIj3U,EAAI+2U,EACJ71U,EAAI+1U,EACR,MAAOj3U,EAAIg3U,GAAQ91U,EAAIg2U,EACjBl3U,EAAIg3U,GAAQ91U,EAAIg2U,GAAQ77S,EAAKr7B,KAAOo+B,EAAMl9B,IAC5CuhR,EAAO78Q,KAAK,CACV4wU,GACAn7S,EAAKr7B,OAELA,IACAkB,GAEE81U,EAAOD,EAASG,EAAOD,GACzBx0D,EAAO78Q,KAAK,CACV+oM,GACAtzK,EAAKr7B,OAELA,IAEFyiR,EAAO78Q,KAAK,CACV6wU,GACAr4S,EAAMl9B,OAENA,OAIH,CACL41U,EAAYC,EAAQryS,EAAOtnB,MAAO65T,EAAQvyS,EAAOtnB,MAAQsnB,EAAOmyS,KAAMp0D,GACtE,IAAK,IAAI20D,EAAK1yS,EAAOtnB,MAAOg6T,EAAK1yS,EAAOwlF,MAAOktN,EAC7C30D,EAAO78Q,KAAK,CACV4wU,GACAn7S,EAAK+7S,KAGTN,EAAYpyS,EAAOwlF,IAAK8sN,EAAMtyS,EAAOwlF,IAAMxlF,EAAOmyS,KAAMK,EAAMz0D,KAG9D40D,EAAa,SAAUj6T,EAAOy5T,EAAMG,EAAME,GAC5C,IAAIhtN,EAAM9sG,EACV,MAAO8sG,EAAM2sN,EAAOK,GAAQhtN,EAAM8sN,GAAQ37S,EAAK6uF,KAAS9rF,EAAM8rF,EAAM2sN,KAChE3sN,EAEJ,OAAO0sN,EAAMx5T,EAAO8sG,EAAK2sN,IAEvBM,EAAiB,SAAUJ,EAAQC,EAAMC,EAAQC,GACnD,IAAI5pP,EAAI0pP,EAAOD,EACX92U,EAAIi3U,EAAOD,EACf,GAAU,IAAN3pP,GAAiB,IAANrtF,EACb,OAAO,KAET,IAKI+nB,EAAGhnB,EAAGhB,EAAGvB,EAAGgZ,EALZq1B,EAAQwgD,EAAIrtF,EACZ66C,EAAM76C,EAAIqtF,EACV/tD,GAAUub,EAAM,IAAM,EAAIA,EAAMA,EAAM,GAAK,EAI/C,IAHA47R,EAAM,EAAIn3S,GAAUw3S,EACpBJ,EAAI,EAAIp3S,GAAUy3S,EAAO,EAEpBhvT,EAAI,EAAGA,GAAKuX,IAAUvX,EAAG,CAC5B,IAAKhnB,GAAKgnB,EAAGhnB,GAAKgnB,EAAGhnB,GAAK,EAAG,CAC3BhB,EAAIgB,EAAIu+B,EACJv+B,KAAOgnB,GAAKhnB,IAAMgnB,GAAK0uT,EAAM12U,EAAI,GAAK02U,EAAM12U,EAAI,GAClD02U,EAAM12U,GAAK02U,EAAM12U,EAAI,GAErB02U,EAAM12U,GAAK02U,EAAM12U,EAAI,GAAK,EAE5BvB,EAAIi4U,EAAM12U,GACVyX,EAAIhZ,EAAIs4U,EAASE,EAASj2U,EAC1B,MAAOvC,EAAIu4U,GAAQv/T,EAAIy/T,GAAQ77S,EAAK58B,KAAO2/B,EAAM3mB,GAC/Ci/T,EAAM12U,KAAOvB,IACXgZ,EAEJ,GAAIq1B,EAAQ,IAAM,GAAKA,EAAQ9kB,GAAKhnB,GAAKA,GAAK8rC,EAAQ9kB,GAChD2uT,EAAI32U,EAAI8sC,IAAU4pS,EAAM12U,GAC1B,OAAOq3U,EAAWV,EAAI32U,EAAI8sC,GAAQ9rC,EAAI+1U,EAASE,EAAQD,EAAME,GAInE,IAAKl2U,EAAI8rC,EAAQ9kB,EAAGhnB,GAAK8rC,EAAQ9kB,EAAGhnB,GAAK,EAAG,CAC1ChB,EAAIgB,EAAIu+B,EAASuN,EACb9rC,IAAM8rC,EAAQ9kB,GAAKhnB,IAAM8rC,EAAQ9kB,GAAK2uT,EAAI32U,EAAI,IAAM22U,EAAI32U,EAAI,GAC9D22U,EAAI32U,GAAK22U,EAAI32U,EAAI,GAAK,EAEtB22U,EAAI32U,GAAK22U,EAAI32U,EAAI,GAEnBvB,EAAIk4U,EAAI32U,GAAK,EACbyX,EAAIhZ,EAAIs4U,EAASE,EAASj2U,EAC1B,MAAOvC,GAAKs4U,GAAUt/T,GAAKw/T,GAAU57S,EAAK58B,KAAO2/B,EAAM3mB,GACrDk/T,EAAI32U,GAAKvB,IACTgZ,IAEF,GAAIq1B,EAAQ,IAAM,IAAM9kB,GAAKhnB,GAAKA,GAAKgnB,GACjC2uT,EAAI32U,IAAM02U,EAAM12U,EAAI8sC,GACtB,OAAOuqS,EAAWV,EAAI32U,GAAIgB,EAAI+1U,EAASE,EAAQD,EAAME,MAM3Dz0D,EAAS,GAEb,OADAq0D,EAAY,EAAGz7S,EAAKj9B,OAAQ,EAAGggC,EAAMhgC,OAAQqkR,GACtCA,GAEL60D,GAAO,CACTd,KAAMA,GACN7nI,OAAQA,GACR8nI,OAAQA,GACR7mP,KAAMA,IAGJ2nP,GAAe,SAAUt8P,GAC3B,OAAI0mH,GAASv2K,UAAU6vD,GACdA,EAAIm1L,UACFzuE,GAASt2K,OAAO4vD,GAClBumM,GAASX,UAAU5lM,EAAI91D,MAAM,GAC3Bw8K,GAASgyB,UAAU14I,GACrB,UAASA,EAAI91D,KAAO,SAEtB,IAELqyT,GAAmB,SAAUlhU,GAC/B,IAAI2gR,EAAM//Q,EAAM6T,EAChBA,EAAYrtB,EAAW+Y,SAASE,cAAc,OAC9CsgR,EAAOv5R,EAAW+Y,SAASmU,yBACvBtU,IACFyU,EAAUnU,UAAYN,GAExB,MAAOY,EAAO6T,EAAUhC,WACtBkuQ,EAAKvtQ,YAAYxS,GAEnB,OAAO+/Q,GAELwgD,GAAW,SAAUx8P,EAAK3kE,EAAMuS,GAClC,IAAI8B,EAAW6sT,GAAiBlhU,GAChC,GAAI2kE,EAAIpkE,iBAAmBgS,EAAQoyD,EAAInkE,WAAW1Y,OAAQ,CACxD,IAAIsL,EAASuxE,EAAInkE,WAAW+R,GAC5Bnf,EAAOqX,WAAWqI,aAAauB,EAAUjhB,QAEzCuxE,EAAIvxD,YAAYiB,IAGhB+sT,GAAW,SAAUz8P,EAAKpyD,GAC5B,GAAIoyD,EAAIpkE,iBAAmBgS,EAAQoyD,EAAInkE,WAAW1Y,OAAQ,CACxD,IAAIsL,EAASuxE,EAAInkE,WAAW+R,GAC5Bnf,EAAOqX,WAAWoJ,YAAYzgB,KAG9BiuU,GAAY,SAAU/nP,EAAM3U,GAC9B,IAAIpyD,EAAQ,EACZpmB,EAAKmtF,GAAM,SAAU/pE,GACfA,EAAO,KAAOyxT,GAAKd,KACrB3tT,IACShD,EAAO,KAAOyxT,GAAKb,QAC5BgB,GAASx8P,EAAKp1D,EAAO,GAAIgD,GACzBA,KACShD,EAAO,KAAOyxT,GAAK3oI,QAC5B+oI,GAASz8P,EAAKpyD,OAIhBkM,GAAS,SAAUkmD,GACrB,OAAOp4E,EAAOL,EAAIoF,EAAOqzE,EAAInkE,YAAaygU,KAAe,SAAUlgT,GACjE,OAAOA,EAAKj5B,OAAS,MAGrBqvB,GAAQ,SAAUq4S,EAAW7qP,GAC/B,IAAI28P,EAAmBp1U,EAAIoF,EAAOqzE,EAAInkE,YAAaygU,IAEnD,OADAI,GAAUL,GAAK1nP,KAAKgoP,EAAkB9R,GAAY7qP,GAC3CA,GAEL48P,GAAY,CACdh2T,KAAMkT,GACNtH,MAAOA,IAGLqqT,GAAoB7hU,GAAKvS,EAAOrC,QAChC02U,GAAmB,WACrB,OAAOD,GAAkBtvU,MAAMvG,YAAW,WACxC,IAAIuU,EAAM9Y,EAAW+Y,SAAS0qT,eAAeC,mBAAmB,QAEhE,OADA0W,GAAkB3hU,IAAIzS,EAAOP,KAAKqT,IAC3BA,MAGPwhU,GAAa,SAAU1hU,GACzB,OAAsC,IAA/BA,EAAK7V,QAAQ,cAElBw3U,GAAwB,SAAUnS,GACpC,MAAO,CACLhhU,KAAM,aACNghU,UAAWA,EACXt7S,QAAS,GACTy+K,SAAU,KACVivI,eAAgB,OAGhBC,GAAsB,SAAU3tT,GAClC,MAAO,CACL1lB,KAAM,WACNghU,UAAW,KACXt7S,QAASA,EACTy+K,SAAU,KACVivI,eAAgB,OAGhBE,GAAmB,SAAUzlQ,GAC/B,IAAImzP,EAAWt7S,EAAS6tT,EAOxB,OANAvS,EAAY+R,GAAUh2T,KAAK8wD,EAAOv8C,WAClCiiT,EAAmB31U,EAAKojU,GAAW,SAAUxvT,GAC3C,IAAIgiU,EAAUp5B,GAASL,aAAalsO,EAAOkqH,WAAYvmL,GACvD,OAAOgiU,EAAQl6U,OAAS,EAAI,CAACk6U,GAAW,MAE1C9tT,EAAU6tT,EAAiB9uU,KAAK,IACzByuU,GAAWxtT,GAAWytT,GAAsBI,GAAoBF,GAAoB3tT,IAEzF+tT,GAAgB,SAAU5lQ,EAAQ+E,EAAOzuD,GACxB,eAAfyuD,EAAM5yE,KACR+yU,GAAUpqT,MAAMiqD,EAAMouP,UAAWnzP,EAAOv8C,WAExCu8C,EAAOrxB,WAAWo2B,EAAMltD,QAAS,CAAEioE,OAAQ,QAE7C9f,EAAOt8B,UAAU8yJ,eAAelgL,EAASyuD,EAAMwgQ,eAAiBxgQ,EAAMuxH,WAEpEuvI,GAAkB,SAAU9gQ,GAC9B,MAAsB,eAAfA,EAAM5yE,KAAwB4yE,EAAMouP,UAAUv8T,KAAK,IAAMmuE,EAAMltD,SAEpEiuT,GAAuB,SAAU/gQ,GACnC,IAAIuD,EAAMtjE,GAAQX,QAAQ,OAAQ+gU,MAGlC,OAFAvsT,GAAMyvD,EAAKu9P,GAAgB9gQ,IAC3Bj1E,EAAKw+E,GAAchG,EAAK,qBAAsB7wD,IACvC4Q,GAAMigD,IAEXy9P,GAAkB,SAAUC,EAAQC,GACtC,OAAOJ,GAAgBG,KAAYH,GAAgBI,IAEjDC,GAAyB,SAAUF,EAAQC,GAC7C,OAAOH,GAAqBE,KAAYF,GAAqBG,IAE3DE,GAAS,SAAUH,EAAQC,GAC7B,SAAKD,IAAWC,OAELF,GAAgBC,EAAQC,IAG1BC,GAAuBF,EAAQC,KAGtCG,GAAS,CACXd,sBAAuBA,GACvBE,oBAAqBA,GACrBC,iBAAkBA,GAClBG,cAAeA,GACfnhC,KAAM0hC,IAGJE,GAAa,SAAUC,GACzB,OAAuB,IAAhBA,EAAMzwU,OAGX0wU,GAAY,SAAUtmP,EAAaumP,EAAQF,GACzCD,GAAWC,KACbrmP,EAAYumP,OAASA,IAGrBC,GAAY,SAAUxmP,EAAaqmP,GACjCrmP,EAAYumP,SACdD,GAAUtmP,GAAa,EAAOqmP,GAC9BrmP,EAAY39D,QAGZokT,GAA4B,SAAUzmP,GACpCA,EAAYumP,SACdvmP,EAAYumP,QAAS,EACrBvmP,EAAY39D,QAIZqkT,GAAe,SAAU3mQ,EAAQsmQ,EAAOf,GACtCc,GAAWC,IACbf,EAAe/hU,IAAIzS,EAAOP,KAAKqoS,GAAYC,gBAAgB94N,EAAOt8B,cAGlEkjS,GAAe,SAAU5mQ,EAAQigB,EAAa/pE,EAAOowT,EAAOf,EAAgBxgQ,EAAOp2D,GACrF,IAAIsxD,EAAWD,EAAOC,SAClB4mQ,EAAeT,GAAOX,iBAAiBzlQ,GAG3C,GAFA+E,EAAQA,GAAS,GACjBA,EAAQj4E,GAAM4jI,OAAO3rD,EAAO8hQ,IACF,IAAtBR,GAAWC,IAAoBtmQ,EAAO2yD,QACxC,OAAO,KAET,IAAI+iF,EAAYz1H,EAAYztE,KAAK0D,EAAMrgB,OACvC,GAAImqE,EAAOqf,KAAK,gBAAiB,CAC7Bta,MAAOA,EACP2wI,UAAWA,EACX+iE,cAAe9pQ,IACdg/J,qBACH,OAAO,KAET,GAAI+nC,GAAa0wH,GAAO3hC,KAAK/uF,EAAW3wI,GACtC,OAAO,KAOT,GALIkb,EAAYztE,KAAK0D,EAAMrgB,QACzB0vU,EAAe1vU,MAAM/F,MAAK,SAAUg3U,GAClC7mP,EAAYztE,KAAK0D,EAAMrgB,OAAO0vU,eAAiBuB,KAG/C7mQ,EAAS8mQ,yBACP9mP,EAAYztE,KAAK/mB,OAASw0E,EAAS8mQ,wBAAyB,CAC9D,IAAK,IAAI15U,EAAI,EAAGA,EAAI4yF,EAAYztE,KAAK/mB,OAAS,EAAG4B,IAC/C4yF,EAAYztE,KAAKnlB,GAAK4yF,EAAYztE,KAAKnlB,EAAI,GAE7C4yF,EAAYztE,KAAK/mB,SACjByqB,EAAM1S,IAAIy8E,EAAYztE,KAAK/mB,QAG/Bs5E,EAAMuxH,SAAWuiG,GAAYC,gBAAgB94N,EAAOt8B,WAChDxtB,EAAMrgB,MAAQoqF,EAAYztE,KAAK/mB,OAAS,IAC1Cw0F,EAAYztE,KAAK/mB,OAASyqB,EAAMrgB,MAAQ,GAE1CoqF,EAAYztE,KAAKvf,KAAK8xE,GACtB7uD,EAAM1S,IAAIy8E,EAAYztE,KAAK/mB,OAAS,GACpC,IAAIH,EAAO,CACTy5E,MAAOA,EACP2wI,UAAWA,EACX+iE,cAAe9pQ,GAOjB,OALAqxD,EAAOqf,KAAK,UAAW/zF,GACnB4qB,EAAMrgB,MAAQ,IAChBmqE,EAAOgnQ,UAAS,GAChBhnQ,EAAOqf,KAAK,SAAU/zF,IAEjBy5E,GAEL71B,GAAQ,SAAU8wB,EAAQigB,EAAa/pE,GACzC+pE,EAAYztE,KAAO,GACnB0D,EAAM1S,IAAI,GACVy8E,EAAYumP,QAAS,EACrBxmQ,EAAOqf,KAAK,eAEVhhF,GAAQ,SAAU2hE,EAAQigB,EAAa/pE,EAAO+wT,EAAWC,GAC3D,GAAIjnP,EAAYC,SAAS+mP,GAAY,CACnC,IAAI3wI,EAAWr2G,EAAYztE,KAAK0D,EAAMrgB,OAAOygM,SACzCof,EAAYz1H,EAAYztE,KAAK0D,EAAMrgB,MAAQ,GAC/CuwU,GAAOR,cAAc5lQ,EAAQ01I,GAAW,GACpCz1H,EAAYC,SAASgnP,KACvBjnP,EAAYztE,KAAK0D,EAAMrgB,MAAQ,GAAG0vU,eAAiBjvI,KAIrD9uE,GAAO,SAAUxnD,EAAQ9pD,EAAO1D,GAClC,IAAIuyD,EAQJ,OAPI7uD,EAAMrgB,MAAQ2c,EAAK/mB,OAAS,IAC9ByqB,EAAM1S,IAAI0S,EAAMrgB,MAAQ,GACxBkvE,EAAQvyD,EAAK0D,EAAMrgB,OACnBuwU,GAAOR,cAAc5lQ,EAAQ+E,GAAO,GACpC/E,EAAOgnQ,UAAS,GAChBhnQ,EAAOqf,KAAK,OAAQ,CAAEta,MAAOA,KAExBA,GAELwiD,GAAO,SAAUvnD,EAAQigB,EAAaqmP,EAAOpwT,GAC/C,IAAI6uD,EAaJ,OAZIkb,EAAYumP,SACdvmP,EAAY39D,MACZ29D,EAAYumP,QAAS,EACrBD,GAAUtmP,GAAa,EAAOqmP,IAE5BpwT,EAAMrgB,MAAQ,IAChBqgB,EAAM1S,IAAI0S,EAAMrgB,MAAQ,GACxBkvE,EAAQkb,EAAYztE,KAAK0D,EAAMrgB,OAC/BuwU,GAAOR,cAAc5lQ,EAAQ+E,GAAO,GACpC/E,EAAOgnQ,UAAS,GAChBhnQ,EAAOqf,KAAK,OAAQ,CAAEta,MAAOA,KAExBA,GAELsnF,GAAQ,SAAUpsE,GACpBA,EAAY/wC,QACZ+wC,EAAY39D,OAEV6kT,GAAU,SAAUnnQ,EAAQigB,EAAa/pE,GAC3C,OAAOA,EAAMrgB,MAAQ,GAAKoqF,EAAYumP,QAAUvmP,EAAYztE,KAAK,KAAO4zT,GAAO3hC,KAAK2hC,GAAOX,iBAAiBzlQ,GAASigB,EAAYztE,KAAK,KAEpI40T,GAAU,SAAUnnP,EAAa/pE,GACnC,OAAOA,EAAMrgB,MAAQoqF,EAAYztE,KAAK/mB,OAAS,IAAMw0F,EAAYumP,QAE/DtmP,GAAW,SAAUD,EAAaqmP,EAAOjlP,GAI3C,OAHAolP,GAAUxmP,EAAaqmP,GACvBrmP,EAAY0mP,eACZ1mP,EAAYtvB,OAAO0wB,GACZpB,EAAY39D,OAEjBquC,GAAS,SAAU21Q,EAAOjlP,GAC5B,IACEilP,EAAM9iU,IAAI8iU,EAAMzwU,MAAQ,GACxBwrF,IACA,QACAilP,EAAM9iU,IAAI8iU,EAAMzwU,MAAQ,KAIxBwxU,GAAmB,SAAUrnQ,EAAQigB,EAAaqmP,GACpD,IAAIgB,EAAwBhkU,IAAK,GAC7BikU,EAAwB,SAAU15U,GACpC04U,GAAUtmP,GAAa,EAAOqmP,GAC9BrmP,EAAY39D,IAAI,GAAIz0B,IAEtBmyE,EAAOpjC,GAAG,QAAQ,WAChBqjD,EAAY39D,SAEd09C,EAAOpjC,GAAG,qBAAqB,SAAU/uC,GACvC,IAAI0tK,EAAM1tK,EAAEixJ,QACA,SAARyc,GAA0B,SAARA,GAA0B,eAARA,IACtCkrK,GAAUxmP,EAAaqmP,GACvBrmP,EAAY0mP,mBAGhB3mQ,EAAOpjC,GAAG,eAAe,SAAU/uC,GACjC,IAAI0tK,EAAM1tK,EAAEixJ,QACA,SAARyc,GAA0B,SAARA,GAA0B,eAARA,GACtCgsK,EAAsB15U,MAG1BmyE,EAAOpjC,GAAG,yBAAyB,WACjCqjD,EAAY0mP,kBAEd3mQ,EAAOpjC,GAAG,iCAAkC2qS,GAC5CvnQ,EAAOpjC,GAAG,UAAW2qS,GACrBvnQ,EAAOpjC,GAAG,SAAS,SAAU/uC,GAC3B,IAAIqiI,EAAUriI,EAAEqiI,QACZriI,EAAE8/K,wBAGFz9C,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAkB,KAAZA,GAAkBriI,EAAEiyD,WAC1FynR,IACAvnQ,EAAOogB,eAEO,KAAZ8vC,GAA8B,IAAZA,GACpBlwD,EAAOogB,cAELknP,EAAsBzxU,OAASoqF,EAAYumP,SAAgF,IAAtEJ,GAAO3hC,KAAK2hC,GAAOX,iBAAiBzlQ,GAASigB,EAAYztE,KAAK,OAC5F,IAArBwtD,EAAOwnQ,YACTxnQ,EAAOgnQ,UAAS,GAChBhnQ,EAAOqf,KAAK,SAAU,CACpBta,MAAOkb,EAAYztE,KAAK,GACxBkjM,UAAW,QAGf11I,EAAOqf,KAAK,cACZioP,EAAsB9jU,KAAI,GAC1Bw8D,EAAOogB,mBAGXpgB,EAAOpjC,GAAG,WAAW,SAAU/uC,GAC7B,IAAIqiI,EAAUriI,EAAEqiI,QAChB,IAAIriI,EAAE8/K,qBAGN,GAAIz9C,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAMA,GAAW,IAAkB,KAAZA,EAClEjwC,EAAYumP,QACde,EAAsB15U,OAF1B,CAMA,IAAI45U,EAAS55U,EAAEiyD,UAAYjyD,EAAEknQ,QAAUlnQ,EAAEmnQ,UACpC9kI,EAAU,IAAMA,EAAU,KAAmB,MAAZA,GAA+B,KAAZA,GAAmBjwC,EAAYumP,QAAWiB,IACjGxnP,EAAY0mP,eACZJ,GAAUtmP,GAAa,EAAMqmP,GAC7BrmP,EAAY39D,IAAI,GAAIz0B,GACpBy5U,EAAsB9jU,KAAI,QAG9Bw8D,EAAOpjC,GAAG,aAAa,SAAU/uC,GAC3BoyF,EAAYumP,QACde,EAAsB15U,MAG1B,IAAI65U,EAA0B,SAAU/4T,GACtC,MAA2B,0BAApBA,EAAMg5T,WAEXC,EAAuB,SAAUj5T,GACnC,MAA2B,eAApBA,EAAMg5T,WAA6C,OAAfh5T,EAAM6D,MAEnDwtD,EAAOpjC,GAAG,SAAS,SAAU/uC,GACvBA,EAAE85U,YAAcD,EAAwB75U,IAAM+5U,EAAqB/5U,KACrE05U,EAAsB15U,MAG1BmyE,EAAOpjC,GAAG,gCAAgC,SAAU/uC,GAC7CA,EAAE8/K,sBACL3tG,EAAOogB,kBAITynP,GAAuB,SAAU7nQ,GACnCA,EAAOw1L,YAAY,SAAU,GAAI,QACjCx1L,EAAOw1L,YAAY,sBAAuB,GAAI,SAG5CsyE,GAAc,SAAU9nQ,GAC1B,IAAIulQ,EAAiBjiU,GAAKvS,EAAOrC,QAC7B43U,EAAQhjU,GAAK,GACb4S,EAAQ5S,GAAK,GACb28E,EAAc,CAChBztE,KAAM,GACNg0T,QAAQ,EACRG,aAAc,WACZA,GAAa3mQ,EAAQsmQ,EAAOf,IAE9BjjT,IAAK,SAAUyiD,EAAOp2D,GACpB,OAAOi4T,GAAa5mQ,EAAQigB,EAAa/pE,EAAOowT,EAAOf,EAAgBxgQ,EAAOp2D,IAEhF44G,KAAM,WACJ,OAAOA,GAAKvnD,EAAQigB,EAAaqmP,EAAOpwT,IAE1CsxG,KAAM,WACJ,OAAOA,GAAKxnD,EAAQ9pD,EAAO+pE,EAAYztE,OAEzC08B,MAAO,WACLA,GAAM8wB,EAAQigB,EAAa/pE,IAE7Bm2I,MAAO,WACLA,GAAMpsE,IAERknP,QAAS,WACP,OAAOA,GAAQnnQ,EAAQigB,EAAa/pE,IAEtCkxT,QAAS,WACP,OAAOA,GAAQnnP,EAAa/pE,IAE9BgqE,SAAU,SAAUmB,GAClB,OAAOnB,GAASD,EAAaqmP,EAAOjlP,IAEtC1wB,OAAQ,SAAU0wB,GAChB1wB,GAAO21Q,EAAOjlP,IAEhBhjF,MAAO,SAAU4oU,EAAWC,GAC1B7oU,GAAM2hE,EAAQigB,EAAa/pE,EAAO+wT,EAAWC,KAKjD,OAFAG,GAAiBrnQ,EAAQigB,EAAaqmP,GACtCuB,GAAqB7nQ,GACdigB,GAGL8nP,GAAoB,CACtB,EACA,GACAvsB,GAAGE,KACHF,GAAGC,IACH,GACA,GACA,GACA,IACA,IACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACAD,GAAGt8P,KACHs8P,GAAGx8P,GACHw8P,GAAGz8P,KACHy8P,GAAGv8P,OACH7yD,OAAO06Q,GAAI79P,QAAQzB,YAAc,CAAC,KAAO,IACvCwgU,GAAkB,uBAClBC,GAAkB,SAAUp6U,GAC9B,MAAkB,YAAXA,EAAEsE,MAAiC,UAAXtE,EAAEsE,MAE/B+1U,GAAgB,SAAUr6U,GAC5B,IAAIqiI,EAAUriI,EAAEqiI,QAChB,OAAOA,IAAYsrL,GAAG98P,WAAawxE,IAAYsrL,GAAGx/G,QAEhDmsI,GAA2B,SAAUt6U,GACvC,GAAIo6U,GAAgBp6U,GAAI,CACtB,IAAIqiI,EAAUriI,EAAEqiI,QAChB,OAAQg4M,GAAcr6U,KAAO2tT,GAAGn/G,eAAexuM,IAAMA,EAAEknQ,QAAU7kI,GAAW,KAAOA,GAAW,KAAO78H,EAAS00U,GAAmB73M,IAEjI,OAAO,GAGPk4M,GAAwB,SAAUv6U,GACpC,OAAOo6U,GAAgBp6U,MAAQq6U,GAAcr6U,IAAiB,UAAXA,EAAEsE,MAAkC,MAAdtE,EAAEqiI,UAEzEm4M,GAAkB,SAAU1jU,EAAKwqJ,EAAS4sK,GAC5C,GAAIpF,GAAM/nI,QAAQ5pL,GAAQZ,QAAQ+qJ,IAAU,GAAQ,CAClD,IAAIm5K,EAA6C,KAApBvM,EACzBx2D,EAAep2G,EAAQo5K,kBAC3B,OAAKhjE,IAEM5gQ,EAAIo8D,SAASouF,EAAQo5K,kBAAmB,kBAAmB5jU,EAAIo8D,SAASouF,EAAQo5K,kBAAmB,mBAGrGD,GAA0B3jU,EAAI8iE,QAAQ89L,GAAgBw2D,IAAoBx2D,EAAahtP,SAASlS,eAGzG,OAAO,GAGP+rJ,GAAU,SAAUpyF,GACtB,IAAIr7D,EAAMq7D,EAAOr7D,IACb64R,EAAYr+M,GAASyxG,mBAAmB5wH,GACxCzpB,EAAc4oC,GAASu9M,eAAe18N,GACtCwoQ,EAAoB,SAAU36U,EAAG0V,GACnC,IAAI4kU,GAAyBt6U,GAA7B,CAGA,IAAI21B,EAAOw8C,EAAOv8C,UACdglT,GAAkBL,GAAsBv6U,IAAaw6U,GAAgB1jU,EAAK6e,EAAMg6Q,GAChFkrC,EAA8D,KAAzC/jU,EAAIukL,UAAU1lK,EAAMwkT,KACzCU,IAAuBD,GAAmBllU,KAC5CoB,EAAI84L,UAAUj6K,EAAMwkT,GAAiBS,EAAkBlyR,EAAc,MACrE5xC,EAAI84L,UAAUj6K,EAAM,mBAAoBilT,EAAkBlyR,EAAc,MACxEq8P,GAAsB5yO,EAAQyoQ,GAC9BzoQ,EAAOpjC,GAAG6rS,EAAkB,UAAY,QAASD,GACjDxoQ,EAAOljC,IAAI2rS,EAAkB,QAAU,UAAWD,MAGlDjyR,GACFypB,EAAOpjC,GAAG,QAAQ,SAAU/uC,GAC1B26U,EAAkB36U,GAAG,GACrBmyE,EAAOpjC,GAAG,gCAAiC4rS,GAC3CxoQ,EAAOpjC,GAAG,UAAU,WAClB,IAAIpZ,EAAOw8C,EAAOv8C,UAClB9e,EAAI84L,UAAUj6K,EAAMwkT,GAAiB,MACrCrjU,EAAI84L,UAAUj6K,EAAM,mBAAoB,aAM5ComE,GAAmB,EACnBC,GAAkB,IAClBC,GAAW,SAAUn7E,GACvB,YAAsBjf,IAAlBif,EAAMo7E,SAAkD,IAAzBp7E,EAAMo7E,QAAQt+F,OACxCsF,EAAOrC,OAETqC,EAAOP,KAAKme,EAAMo7E,QAAQ,KAE/BC,GAAc,SAAUC,EAAOz3E,GACjC,IAAI03E,EAAQzvE,KAAK8gB,IAAI0uD,EAAM3/D,QAAU9X,EAAK1mB,KACtCq+F,EAAQ1vE,KAAK8gB,IAAI0uD,EAAM1/D,QAAU/X,EAAK1N,KAC1C,OAAOolF,EAAQN,IAAoBO,EAAQP,IAEzCkqE,GAAU,SAAU9zF,GACtB,IAAIqqB,EAAY/mF,GAAKvS,EAAOrC,QACxB47F,EAAiBhnF,IAAK,GACtBqlU,EAAoBrhQ,IAAO,SAAUz5E,GACvCmyE,EAAOqf,KAAK,YAAaryF,GAASA,GAAS,GAAIa,GAAI,CAAEsE,KAAM,eAC3Dm4F,EAAe9mF,KAAI,KAClBqmF,IACH7pB,EAAOpjC,GAAG,cAAc,SAAU/uC,GAChCi8F,GAASj8F,GAAGiC,MAAK,SAAUm6F,GACzB0+O,EAAkBxhQ,SAClB,IAAI30D,EAAO,CACT1mB,EAAGH,EAASs+F,EAAM3/D,SAClBxlB,EAAGnZ,EAASs+F,EAAM1/D,SAClBxzB,OAAQpL,EAASkC,EAAEkJ,SAErB4xU,EAAkBthQ,SAASx5E,GAC3By8F,EAAe9mF,KAAI,GACnB6mF,EAAU7mF,IAAIzS,EAAOP,KAAKgiB,UAE3B,GACHwtD,EAAOpjC,GAAG,aAAa,SAAU/uC,GAC/B86U,EAAkBxhQ,SAClB2iB,GAASj8F,GAAGiC,MAAK,SAAUm6F,GACzBI,EAAUx0F,MAAM/F,MAAK,SAAU0iB,GACzBw3E,GAAYC,EAAOz3E,KACrB63E,EAAU7mF,IAAIzS,EAAOrC,QACrB47F,EAAe9mF,KAAI,GACnBw8D,EAAOqf,KAAK,6BAIjB,GACHrf,EAAOpjC,GAAG,wBAAwB,SAAU/uC,GAC1C86U,EAAkBxhQ,SACH,gBAAXt5E,EAAEsE,MAGNk4F,EAAUx0F,MAAM3F,QAAO,SAAUsiB,GAC/B,OAAOA,EAAKzb,SAAS6xU,YAAY/6U,EAAEkJ,WAClCjH,MAAK,WACFw6F,EAAez0F,MACjBhI,EAAEklB,iBAEFitD,EAAOqf,KAAK,MAAOryF,GAASA,GAAS,GAAIa,GAAI,CAAEsE,KAAM,eAGxD,IAED02U,GAAc,CAAE7uQ,MAAO85F,IAEvBg1K,GAAiB,SAAUr6I,EAAelqL,GAC5C,OAAOkqL,EAAchhM,eAAe8W,EAAKgU,WAEvCwwT,GAAgB,SAAUt6I,EAAelqL,GAC3C,QAAIyqL,GAASt2K,OAAOnU,MAETyqL,GAASv2K,UAAUlU,MACpBukU,GAAer6I,EAAelqL,KAAUi/R,GAAUvrG,eAAe1zL,KAKzEykU,GAAiB,SAAUv6I,EAAehmJ,EAAMlkC,GAClD,OAAOvU,EAAO4xT,GAAQrgK,QAAQv8I,GAAQZ,QAAQG,GAAOS,GAAQZ,QAAQqkC,KAAQ,SAAU6/B,GACrF,OAAOwgQ,GAAer6I,EAAenmH,EAAI3jE,WAGzCskU,GAAuB,SAAUx6I,EAAelqL,GAClD,GAAIyqL,GAASt2K,OAAOnU,GAAO,CACzB,GAA8B,IAA1BA,EAAK0hC,UAAUx6C,OACjB,OAAO,EACF,GAAI,QAAQga,KAAKlB,EAAK0hC,cAAgB1hC,EAAKwR,aAAe+yT,GAAer6I,EAAelqL,EAAKwR,cAClG,OAAO,EAGX,OAAO,GAELu3S,GAAgB,SAAUttP,GAC5B,IAIIr8B,EACAC,EAAgBuB,EAAaC,EAAcC,EAAWkoR,EACtDhB,EAAU5hS,EAASu+S,EACnBC,EAPAxkU,EAAMq7D,EAAOr7D,IAAK++B,EAAYs8B,EAAOt8B,UACrC5kC,EAASkhE,EAAOlhE,OAAQ2vL,EAAgB3vL,EAAOoyL,mBAC/C3sL,EAAOm/B,EAAUd,WACjBilC,EAAW7H,EAAOv8C,UAKlBs4S,EAAkB58O,GAASyxG,mBAAmB5wH,GAClD,GAAKz7D,GAASyqL,GAASv2K,UAAUlU,IAAUw3T,IAG3CoN,EAAethQ,EAAStvD,SAASlS,cAC5BvH,EAAOy1Q,aAAa40D,EAAcpN,EAAgB11T,iBAAkB2iU,GAAev6I,EAAe5mH,EAAUtjE,IAAjH,CAGAo/B,EAAMD,EAAU6nC,SAChB3nC,EAAiBD,EAAIC,eACrBuB,EAAcxB,EAAIwB,YAClBC,EAAezB,EAAIyB,aACnBC,EAAY1B,EAAI0B,UAChB6jS,EAAmBx3B,GAAY/5Q,SAASqoC,GACxCz7D,EAAOsjE,EAASzxD,WAChB,MAAO7R,EACL,GAAIwkU,GAAct6I,EAAelqL,GAAO,CACtC,GAAI0kU,GAAqBx6I,EAAelqL,GAAO,CAC7CgoT,EAAWhoT,EACXA,EAAOA,EAAKwR,YACZpR,EAAI4S,OAAOg1S,GACX,SAEGgB,IACHA,EAAgB5oT,EAAIiwB,OAAOmnS,EAAiB58O,GAAS0xG,wBAAwB7wH,IAC7Ez7D,EAAK6J,WAAWqI,aAAa82S,EAAehpT,GAC5ComB,GAAU,GAEZ4hS,EAAWhoT,EACXA,EAAOA,EAAKwR,YACZw3S,EAAcx2S,YAAYw1S,QAE1BgB,EAAgB,KAChBhpT,EAAOA,EAAKwR,YAGZ4U,GAAWu+S,IACbvlS,EAAIQ,SAASP,EAAgBuB,GAC7BxB,EAAIa,OAAOY,EAAcC,GACzB3B,EAAUm8H,OAAOl8H,GACjBq8B,EAAOogB,iBAGPw9E,GAAU,SAAU59F,GAClBmf,GAASyxG,mBAAmB5wH,IAC9BA,EAAOpjC,GAAG,aAAc7wC,EAAMuhU,GAAettP,KAG7CopQ,GAAc,CAAEpvQ,MAAO4jG,IAEvByrK,GAAWr6I,GAASt2K,OACpB4wT,GAA6B,SAAU/kU,GACzC,OAAO8kU,GAAS9kU,IAASA,EAAKiO,KAAK,KAAOo+Q,GAAKH,MAE7C84C,GAA2B,SAAUhlU,GACvC,OAAO8kU,GAAS9kU,IAASA,EAAKiO,KAAKjO,EAAKiO,KAAK/mB,OAAS,KAAOmlS,GAAKH,MAEhE+4C,GAAa,SAAUjlU,GACzB,OAAOA,EAAKmR,cAAchR,eAAeksR,GAAKH,OAE5Ch6Q,GAAe,SAAUlS,GAC3B,GAAI8kU,GAAS9kU,EAAKoqL,iBAChB,OAAI46I,GAAyBhlU,EAAKoqL,kBAGhCpqL,EAAKoqL,gBAAgBk0G,WAAWjS,GAAKH,MAF9BlsR,EAAKoqL,gBAKT,GAAI06I,GAAS9kU,GAClB,OAAI+kU,GAA2B/kU,IAG7BA,EAAK0iT,WAAW,EAAGr2B,GAAKH,MAFjBlsR,EAMT,IAAIspT,EAAU2b,GAAWjlU,GAEzB,OADAA,EAAK6J,WAAWqI,aAAao3S,EAAStpT,GAC/BspT,GAGPt4H,GAAc,SAAUhxL,GAC1B,GAAI8kU,GAAS9kU,EAAKwR,aAChB,OAAIuzT,GAA2B/kU,EAAKwR,cAGlCxR,EAAKwR,YAAYkxS,WAAW,EAAGr2B,GAAKH,MAF7BlsR,EAAKwR,YAKT,GAAIszT,GAAS9kU,GAClB,OAAIglU,GAAyBhlU,IAG3BA,EAAKs+R,WAAWjS,GAAKH,MAFdlsR,EAMT,IAAIspT,EAAU2b,GAAWjlU,GAMzB,OALIA,EAAKwR,YACPxR,EAAK6J,WAAWqI,aAAao3S,EAAStpT,EAAKwR,aAE3CxR,EAAK6J,WAAW2I,YAAY82S,GAEvBA,GAGP4b,GAAiB,SAAUnzT,EAAQ/R,GACrC,OAAO+R,EAASG,GAAalS,GAAQgxL,GAAYhxL,IAE/CmlU,GAAqB39U,EAAM09U,IAAgB,GAC3CE,GAAoB59U,EAAM09U,IAAgB,GAE1CG,GAAkB,SAAUnwS,EAAKnjB,GACnC,OAAI04K,GAASt2K,OAAO+gB,EAAIrhB,aACfqxT,GAAenzT,EAAQmjB,EAAIrhB,aAE3BqxT,GAAenzT,EAAQmjB,EAAIyuC,YAGlC2hQ,GAAsB,SAAUpwS,EAAK46C,GACvC,IAAIslP,EAAYtlP,EAAMx+E,MACtB,OAAO8jU,GAAalgS,EAAIrhB,cAAgBuhT,GAAa3oC,GAAuB2oC,IAE1EmQ,GAAc,SAAUz1P,EAAOkyF,GACjC,OAAOA,EAASr3K,MAAK,SAAU2d,GAC7BwtR,GAAqB9iR,OAAO88D,EAAMx+E,OAClC,IAAI4O,EAAOilU,GAAmB78T,GAE9B,OADAwnE,EAAM7wE,IAAIiB,GACH1T,EAAOP,KAAK8lS,GAAgB7xR,EAAMA,EAAKhZ,OAAS,OACtD,SAAUohB,GACX,OAAOi1R,GAAYC,gBAAgBl1R,GAAShd,KAAI,SAAU4pC,GACxD,GAAKowS,GAAoBpwS,EAAK46C,GAM5B,OAAOiiN,GAAgBjiN,EAAMx+E,MAAO,GALpCwkS,GAAqB9iR,OAAO88D,EAAMx+E,OAClC,IAAI4O,EAAOmlU,GAAgBnwS,GAAK,GAEhC,OADA46C,EAAM7wE,IAAIiB,GACH6xR,GAAgB7xR,EAAM,SAKhC,SAAUoI,GACX,OAAOi1R,GAAYE,eAAen1R,GAAShd,KAAI,SAAU4pC,GACvD,GAAKowS,GAAoBpwS,EAAK46C,GAM5B,OAAOiiN,GAAgBjiN,EAAMx+E,MAAOw+E,EAAMx+E,MAAMpK,OAAS,GALzD4uS,GAAqB9iR,OAAO88D,EAAMx+E,OAClC,IAAI4O,EAAOmlU,GAAgBnwS,GAAK,GAEhC,OADA46C,EAAM7wE,IAAIiB,GACH6xR,GAAgB7xR,EAAMA,EAAKhZ,OAAS,SAK9C,SAAUohB,GACXwtR,GAAqB9iR,OAAO88D,EAAMx+E,OAClC,IAAI4O,EAAOklU,GAAkB98T,GAE7B,OADAwnE,EAAM7wE,IAAIiB,GACH1T,EAAOP,KAAK8lS,GAAgB7xR,EAAM,QAGzCslU,GAAgB,CAAED,YAAaA,IAE/BE,GAAY,4CACZC,GAAe,SAAUxlU,GAC3B,OAAOulU,GAAUvkU,KAAKhB,IAGpBylU,GAAiB,SAAUlqQ,EAAQsI,GACrC,OAAOn5E,GAAG6V,GAAQZ,QAAQkkE,GAAM6W,GAASo9M,0BAA0Bv8N,KAEjEmqQ,GAAU,SAAUt9T,GACtB,MAA+D,QAAxDw+Q,GAAWvqN,IAAIC,SAASl0D,EAAS,aAAa,IAAmBo9T,GAAap9T,EAAQwK,cAE3F+yT,GAAoB,SAAUF,EAAgBriQ,EAAUpuC,GAC1D,OAAOvpC,EAAOm7R,GAAWvqN,IAAIif,WAAWtmD,EAAIrhB,YAAa,IAAKyvD,GAAWqiQ,IAEvEG,GAAiB,SAAUH,EAAgBriQ,EAAUpuC,GACvD,IAAI8nH,EAAU6oL,GAAkBF,EAAgBriQ,EAAUpuC,GAC1D,OAAO1oC,EAAOD,KAAKywJ,EAAQA,EAAQ91J,OAAS,KAE1C6+U,GAAqB,SAAUziQ,EAAUq3N,EAAOC,GAClD,IAAIorC,EAAS7rC,GAAeQ,EAAOr3N,GAC/B2iQ,EAAS9rC,GAAeS,EAAOt3N,GACnC,OAAO0iQ,GAAUA,IAAWC,GAE1BC,GAAW,SAAUhxS,GACvB,OAAO+3P,GAAe/3P,IAAQi4P,GAAcj4P,IAE1CixS,GAAoB,SAAUrqI,EAAS5mK,GACzC,IAAKA,EACH,OAAOA,EAET,IAAIrhB,EAAYqhB,EAAIrhB,YAAawU,EAAS6M,EAAI7M,SAC9C,OAAIyzK,EACE2wF,GAAuB54Q,GACrB42K,GAASt2K,OAAON,EAAUrC,aACrBugR,GAAgBl+Q,EAAUrC,YAAa,GAEvCugR,GAAgB5/Q,MAAM0B,GAGxBo5Q,GAAe/3P,GAAO68P,GAAgBl+Q,EAAWwU,EAAS,GAAK6M,EAGpEu3P,GAAuB54Q,GACrB42K,GAASt2K,OAAON,EAAUu2K,iBACrB2nG,GAAgBl+Q,EAAUu2K,gBAAiBv2K,EAAUu2K,gBAAgBn8K,KAAK/mB,QAE1E6qS,GAAgBhgR,OAAO8B,GAGzBs5Q,GAAcj4P,GAAO68P,GAAgBl+Q,EAAWwU,EAAS,GAAK6M,GAIvEkxS,GAAoB5+U,EAAM2+U,IAAmB,GAC7CE,GAAqB7+U,EAAM2+U,IAAmB,GAC9CG,GAAc,CAChBX,eAAgBA,GAChBG,eAAgBA,GAChBhqS,MAAO8pS,GACPM,SAAUA,GACVC,kBAAmBA,GACnBC,kBAAmBA,GACnBC,mBAAoBA,GACpBN,mBAAoBA,IAGlBQ,GAAgB,SAAUC,EAAKz/U,GACjC,IAAK,IAAI+B,EAAI,EAAGA,EAAI09U,EAAIt/U,OAAQ4B,IAAK,CACnC,IAAImN,EAASuwU,EAAI19U,GAAG3B,MAAM,KAAMJ,GAChC,GAAIkP,EAAOpL,SACT,OAAOoL,EAGX,OAAOzJ,EAAOrC,QAEZs8U,GAAgB,CAAEF,cAAeA,IAEjCG,GAAW7zU,GAAInB,SAAS,CAC1B,CAAEqgB,OAAQ,CAAC,YACX,CAAE7L,MAAO,CAAC,YACV,CAAE8sG,IAAK,CAAC,YACR,CAAE7gG,MAAO,CAAC,cAERw0T,GAAU,SAAUrjQ,EAAUtjE,GAChC,IAAIk3L,EAAcijG,GAAen6R,EAAMsjE,GACvC,OAAO4zH,GAA4B5zH,GAEjC+3K,GAAW,SAAUsqF,EAAgBriQ,EAAUpuC,GACjD,IAAI0xS,EAAON,GAAYF,kBAAkBlxS,GACrC71B,EAAQsnU,GAAQrjQ,EAAUsjQ,EAAK/yT,aACnC,OAAOyyT,GAAYR,eAAeH,EAAgBtmU,EAAOunU,GAAMj8U,MAAK,WAClE,OAAO4yS,GAAYF,aAAah+R,EAAOunU,GAAMp7U,KAAKhE,EAAM8+U,GAAYR,eAAgBH,EAAgBtmU,IAAQ/T,KAAI,SAAU6yE,GACxH,OAAOuoQ,GAAS30T,OAAOosD,QAExB3xE,EAAOrC,OAER08U,GAAkC,SAAUvjQ,EAAUS,GACxD,OAAkD,OAA3CgxN,GAAwBzxN,EAAUS,IAEvC+iQ,GAAuB,SAAUnB,EAAgBriQ,EAAUpuC,GAC7D,OAAOoxS,GAAYR,eAAeH,EAAgBriQ,EAAUpuC,GAAKvpC,OAAOnE,EAAMq/U,GAAiCvjQ,KAE7Gp9D,GAAQ,SAAUy/T,EAAgBriQ,EAAUpuC,GAC9C,IAAI0xS,EAAON,GAAYD,mBAAmBnxS,GAC1C,OAAO4xS,GAAqBnB,EAAgBriQ,EAAUsjQ,GAAMp7U,MAAK,SAAU2yE,GACzE,IAAI4oQ,EAAUxpC,GAAYD,aAAan/N,EAAQyoQ,GAC/C,OAAOG,EAAQx8U,SAAWiC,EAAOP,KAAKy6U,GAASxgU,MAAMi4D,IAAW3xE,EAAOrC,WAGvE6oH,GAAM,SAAU2yN,EAAgBriQ,EAAUpuC,GAC5C,IAAI0xS,EAAON,GAAYF,kBAAkBlxS,GACzC,OAAO4xS,GAAqBnB,EAAgBriQ,EAAUsjQ,GAAMp7U,MAAK,SAAU2yE,GACzE,IAAI6oQ,EAAUzpC,GAAYF,aAAal/N,EAAQyoQ,GAC/C,OAAOI,EAAQz8U,SAAWiC,EAAOP,KAAKy6U,GAAS1zN,IAAI70C,IAAW3xE,EAAOrC,WAGrE4tP,GAAU,SAAU4tF,EAAgBriQ,EAAUpuC,GAChD,IAAI0xS,EAAON,GAAYD,mBAAmBnxS,GACtC71B,EAAQsnU,GAAQrjQ,EAAUsjQ,EAAK/yT,aACnC,OAAOyyT,GAAYR,eAAeH,EAAgBtmU,EAAOunU,GAAMj8U,MAAK,WAClE,OAAO4yS,GAAYD,aAAaj+R,EAAOunU,GAAMp7U,KAAKhE,EAAM8+U,GAAYR,eAAgBH,EAAgBtmU,IAAQ/T,KAAI,SAAU6yE,GACxH,OAAOuoQ,GAASv0T,MAAMgsD,QAEvB3xE,EAAOrC,OAER88U,GAAkB,SAAUjlK,GAC9B,OAAmD,IAA5CskK,GAAYxqS,MAAMugC,GAAW2lG,KAElCklK,GAAe,SAAUvB,EAAgBriQ,EAAUpuC,GACrD,IAAI8sI,EAAWykK,GAAcF,cAAc,CACzClrF,GACAn1O,GACA8sG,GACA+kI,IACC,CACD4tF,EACAriQ,EACApuC,IAEF,OAAO8sI,EAASr2K,OAAOs7U,KAErB5qQ,GAAa,SAAU2lG,GACzB,OAAOA,EAASr3K,KAAKrD,EAAUA,EAAUA,EAAUA,IAEjD6/U,GAAU,SAAUnlK,GACtB,OAAOA,EAASr3K,KAAKvD,EAAS,UAAWA,EAAS,SAAUA,EAAS,OAAQA,EAAS,WAEpFggV,GAAU,SAAUplK,GACtB,OAAOA,EAASr3K,KAAK+7U,GAAS30T,OAAQ20T,GAAS30T,OAAQ20T,GAASv0T,MAAOu0T,GAASv0T,QAE9EslC,GAAS,SAAUuqH,GACrB,OAAOA,EAASr3K,KAAK+7U,GAASxgU,MAAOwgU,GAASxgU,MAAOwgU,GAAS1zN,IAAK0zN,GAAS1zN,MAE1Eq0N,GAAS,SAAUC,EAAWC,GAChC,OAAOJ,GAAQG,KAAeH,GAAQI,IAAclrQ,GAAWirQ,KAAejrQ,GAAWkrQ,IAEvFC,GAAiB,SAAU1rI,EAAS6pI,EAAgBriQ,EAAU/2E,EAAMq6B,EAAIo7I,GAC1E,OAAO5qH,GAAMkvR,GAAYR,eAAeH,EAAgBriQ,EAAU/2E,GAAO+5U,GAAYR,eAAeH,EAAgBriQ,EAAU18C,IAAK,SAAU6gT,EAAYC,GACvJ,OAAID,IAAeC,GAAYpB,GAAYP,mBAAmBziQ,EAAUmkQ,EAAYC,GAC3EhB,GAASv0T,MAAM2pL,EAAU2rI,EAAaC,GAEtC1lK,KAERl3K,MAAMk3K,IAEP2lK,GAAiB,SAAUC,EAAcC,GAC3C,OAAOD,EAAaj9U,KAAKvD,GAAS,IAAO,SAAUwgV,GACjD,OAAQP,GAAOO,EAAcC,OAG7BC,GAAuB,SAAUhsI,EAAS6pI,EAAgBriQ,EAAUskQ,EAAc1yS,GACpF,IAAI3oC,EAAO+5U,GAAYH,kBAAkBrqI,EAAS5mK,GAC9CtO,EAAK22Q,GAAYZ,aAAa7gG,EAASx4H,EAAU/2E,GAAMjB,IAAI9D,EAAM8+U,GAAYH,kBAAmBrqI,IAChG95B,EAAWp7I,EAAGj8B,MAAK,WACrB,OAAOi9U,EAAat8U,IAAI87U,OACvB,SAAUxgT,GACX,OAAOsgT,GAAavB,EAAgBriQ,EAAU18C,GAAIt7B,IAAI9D,EAAMggV,GAAgB1rI,EAAS6pI,EAAgBriQ,EAAU/2E,EAAMq6B,IAAKj7B,OAAOnE,EAAMmgV,GAAgBC,OAEzJ,OAAO5lK,EAASr2K,OAAOs7U,KAErBc,GAAqB,SAAUjsI,EAAS95B,GAC1C,OAAI85B,EACK95B,EAASr3K,KAAK/D,EAAQ4F,EAAOP,KAAMy6U,GAASxgU,OAAQ1Z,EAAOrC,KAAMvD,EAAQ4F,EAAOP,KAAMy6U,GAASv0T,OAAQ3lB,EAAOrC,MAE9G63K,EAASr3K,KAAK6B,EAAOrC,KAAMvD,EAAQ4F,EAAOP,KAAMy6U,GAAS30T,QAASvlB,EAAOrC,KAAMvD,EAAQ4F,EAAOP,KAAMy6U,GAAS1zN,OAGpHg1N,GAAe,SAAUlsI,EAAS6pI,EAAgBriQ,EAAUpuC,GAC9D,IAAI3oC,EAAO+5U,GAAYH,kBAAkBrqI,EAAS5mK,GAC9C0yS,EAAeV,GAAavB,EAAgBriQ,EAAU/2E,GAC1D,OAAO26U,GAAavB,EAAgBriQ,EAAU/2E,GAAMf,KAAKhE,EAAMugV,GAAoBjsI,IAAUzwM,SAAQ,WACnG,OAAOy8U,GAAqBhsI,EAAS6pI,EAAgBriQ,EAAUskQ,EAAc1yS,OAG7E+yS,GAAmB,CACrBf,aAAcA,GACdc,aAAcA,GACdE,aAAc1gV,EAAMwgV,IAAc,GAClCG,aAAc3gV,EAAMwgV,IAAc,GAClC3rQ,WAAYA,GACZ+qQ,QAASA,GACT3vR,OAAQA,IAGN2wR,GAAwB,SAAU3sQ,GACpC,OAAOxtE,EAAWwtE,EAAOt8B,UAAU0+Q,SAASwqB,SAE1C5mQ,GAAU,SAAUq6H,EAAS38J,EAAWjK,GAC1C,IAAIU,EAAQkmK,EAAU,GAAK,EAG3B,OAFA38J,EAAUm8H,OAAOy2H,GAAgB78P,EAAIrhB,YAAaqhB,EAAI7M,SAAWuN,GAAO27P,WACxEpyP,EAAU0+Q,SAASwqB,OAAO,OAAQvsI,EAAU,UAAY,WAAY,SAC7D,GAELwsI,GAAa,SAAUxsI,EAASrgI,GAClC,IAAIr8B,EAAMq8B,EAAOt8B,UAAU6nC,SACvB9xC,EAAM4mK,EAAUi2F,GAAgBN,aAAaryP,GAAO2yP,GAAgBP,eAAepyP,GACvF,QAAKgpS,GAAsB3sQ,KAEhBqgI,GAAWmxF,GAAe/3P,GAC5BusC,IAAQ,EAAMhG,EAAOt8B,UAAWjK,KAC7B4mK,IAAWqxF,GAAcj4P,KAC5BusC,IAAQ,EAAOhG,EAAOt8B,UAAWjK,KAKxCqzS,GAAgB,CAClBH,sBAAuBA,GACvBE,WAAYA,IAGVE,GAAmB,SAAU/sQ,EAAQvmC,GACvC,IAAIkK,EAAMq8B,EAAOr7D,IAAImlE,YACrBnmC,EAAIQ,SAAS1K,EAAIrhB,YAAaqhB,EAAI7M,UAClC+W,EAAIa,OAAO/K,EAAIrhB,YAAaqhB,EAAI7M,UAChCozC,EAAOt8B,UAAUm8H,OAAOl8H,IAEtBqpS,GAAmB,SAAUhtQ,GAC/B,OAA6C,IAAtCA,EAAOC,SAASgtQ,mBAErBC,GAAc,SAAU3wU,EAAO+rE,GAC7B/rE,EACF+rE,EAAI1vD,aAAa,oBAAqB,mBAEtC0vD,EAAIhvD,gBAAgB,sBAGpB6zT,GAAsB,SAAUntQ,EAAQqU,EAAOkyF,GACjD,OAAOwjK,GAAcD,YAAYz1P,EAAOkyF,GAAU12K,KAAI,SAAU4pC,GAE9D,OADAszS,GAAiB/sQ,EAAQvmC,GAClB8sI,MAGP6mK,GAAiB,SAAUptQ,EAAQqU,EAAOgsH,GAC5C,IAAIx4H,EAAW7H,EAAOv8C,UAClB3yB,EAAOwlS,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UACvD2+P,EAAiBn+U,EAAM8+U,GAAYX,eAAgBlqQ,GACnDumG,EAAWimK,GAAiBD,aAAalsI,EAAS6pI,EAAgBriQ,EAAU/2E,GAChF,OAAOy1K,EAASx2K,MAAK,SAAUw2K,GAC7B,OAAO4mK,GAAoBntQ,EAAQqU,EAAOkyF,OAG1C8mK,GAAgB,SAAUnD,EAAgBvlU,EAAKwiI,GACjD,IAAImmM,EAAkBp9U,EAAOyU,EAAIq9E,OAAO,0CAA2CkoP,GAC/EqD,EAAgBr9U,EAAOi3I,EAAM+iM,GACjCp6U,EAAKyE,EAAW+4U,EAAiBC,GAAgBxhV,EAAMmhV,IAAa,IACpEp9U,EAAKyE,EAAWg5U,EAAeD,GAAkBvhV,EAAMmhV,IAAa,KAElEM,GAA2B,SAAUxtQ,EAAQqU,GAC/C,GAAIrU,EAAOt8B,UAAUmtG,gBAAsC,IAArB7wE,EAAOy+O,WAAsBpqO,EAAMx+E,MAAO,CAC9E,IAAI4jC,EAAM68P,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UACtD+qN,GAAgBH,eAAe18P,KAAsC,IAA9BoxS,GAAYJ,SAAShxS,KAC9DszS,GAAiB/sQ,EAAQq6N,GAAqBF,oBAAoB9lN,EAAMx+E,MAAO4jC,IAC/E46C,EAAM7wE,IAAI,SAIZiqU,GAA0B,SAAUvD,EAAgBlqQ,EAAQqU,EAAO8yD,GACrE,GAAInnE,EAAOt8B,UAAUmtG,cAAe,CAClC,IAAI68L,EAAUx9U,EAAOi3I,EAAM+iM,GAC3Bp6U,EAAK49U,GAAS,SAAUhrQ,GACtB,IAAIjpC,EAAM68P,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UAC1DihQ,GAAiBf,aAAavB,EAAgBlqQ,EAAOv8C,UAAWgW,GAAK1pC,MAAK,SAAUw2K,GAClF,OAAO4mK,GAAoBntQ,EAAQqU,EAAOkyF,WAK9CnhH,GAAO,SAAU4a,EAAQqU,EAAOgsH,GAClC,OAAO,WACL,QAAO2sI,GAAiBhtQ,IAAUotQ,GAAeptQ,EAAQqU,EAAOgsH,GAASjxM,WAGzEu+U,GAAW,SAAUttI,EAASrgI,EAAQqU,GACxC,OAAO,WACL,QAAO24P,GAAiBhtQ,IAAU8sQ,GAAcD,WAAWxsI,EAASrgI,KAGpE4tQ,GAAqB,SAAU5tQ,GACjC,IAAIqU,EAAQ/wE,GAAK,MACb4mU,EAAiBn+U,EAAM8+U,GAAYX,eAAgBlqQ,GAQvD,OAPAA,EAAOpjC,GAAG,cAAc,SAAU/uC,IAC5Bm/U,GAAiBhtQ,IAAa8mM,GAAI79P,QAAQ3B,QAAUzZ,EAAE0V,UACxD8pU,GAAcnD,EAAgBlqQ,EAAOr7D,IAAK9W,EAAE0zJ,SAC5CisL,GAAyBxtQ,EAAQqU,GACjCo5P,GAAwBvD,EAAgBlqQ,EAAQqU,EAAOxmF,EAAE0zJ,aAGtDltE,GAELw5P,GAAe9hV,EAAM4hV,IAAU,GAC/BG,GAAe/hV,EAAM4hV,IAAU,GAC/BI,GAAoB,CACtB3oR,KAAMA,GACNyoR,aAAcA,GACdC,aAAcA,GACdF,mBAAoBA,GACpBb,iBAAkBA,IAGhBiB,GAAqB,SAAUzpU,GACjC,IAAI0pU,EAAkB,SAAU54C,GAC9B,OAAOxlS,EAAIwlS,GAAa,SAAUR,GAGhC,OAFAA,EAAax/K,GAAQw/K,GACrBA,EAAWtwR,KAAOA,EACXswR,MAGX,GAAI7lG,GAASv2K,UAAUlU,GACrB,OAAO0pU,EAAgB1pU,EAAKygC,kBAE9B,GAAIgqJ,GAASt2K,OAAOnU,GAAO,CACzB,IAAIo/B,EAAMp/B,EAAKmR,cAAcivB,cAG7B,OAFAhB,EAAIQ,SAAS5/B,EAAM,GACnBo/B,EAAIa,OAAOjgC,EAAMA,EAAKiO,KAAK/mB,QACpBwiV,EAAgBtqS,EAAIqB,oBAG3BA,GAAiB,SAAUzgC,GAC7B,OAAOrQ,EAAMqQ,GAAM,SAAU/J,EAAQ+J,GACnC,OAAO/J,EAAOpO,OAAO4hV,GAAmBzpU,MACvC,MAIJ,SAAU09T,GACTA,EAAWA,EAAW,OAAS,GAAK,KACpCA,EAAWA,EAAW,QAAU,GAAK,QAFvC,CAGEA,KAAeA,GAAa,KAC9B,IAmQIiM,GAnQAC,GAAY,SAAUh1S,EAAWsP,EAAMg2P,EAAal6R,GACtD,MAAOA,EAAOi6R,GAASj6R,EAAM40B,EAAWg6P,GAA0B1qP,GAChE,GAAIg2P,EAAYl6R,GACd,QAIF6pU,GAAY,SAAUj1S,EAAWk1S,EAAWC,EAAY7lS,EAAMg2P,EAAahJ,GAC7E,IAAclxR,EAEVgqU,EAFAt+S,EAAO,EACPz1B,EAAS,GAET8nB,EAAM,SAAU/d,GAClB,IAAIlX,EAAGwnS,EAAYQ,EAKnB,IAJAA,EAAcrwP,GAAe,CAACzgC,KACX,IAAf40B,IACFk8P,EAAcA,EAAY/gS,WAEvBjH,EAAI,EAAGA,EAAIgoS,EAAY5pS,OAAQ4B,IAElC,GADAwnS,EAAaQ,EAAYhoS,IACrBihV,EAAWz5C,EAAY05C,GAA3B,CAOA,GAJI/zU,EAAO/O,OAAS,GAAK4iV,EAAUx5C,EAAYltB,GAAS3yQ,KAAKwF,KAC3Dy1B,IAEF4kQ,EAAW5kQ,KAAOA,EACdwuQ,EAAY5J,GACd,OAAO,EAETr6R,EAAOvH,KAAK4hS,KAIhB,OADA05C,EAAmB5mE,GAAS3yQ,KAAKygS,EAAczwP,kBAC1CupS,GAGLhqU,EAAOkxR,EAAcvtN,UACrB5lD,EAAI/d,GACJ4pU,GAAUh1S,EAAWsP,EAAMnmB,EAAK/d,GACzB/J,GALEA,GAOPg0U,GAAkB,SAAUC,EAAY55C,GAC1C,OAAOA,EAAW5kQ,KAAOw+S,GAEvBC,GAAe,SAAUD,EAAY55C,GACvC,OAAOA,EAAW5kQ,OAASw+S,GAEzBE,GAAU5iV,EAAMqiV,GAAWnM,GAAW2M,GAAIhjK,GAASC,IACnDgjK,GAAY9iV,EAAMqiV,GAAWnM,GAAW6M,KAAMjjK,GAASD,IACvDmjK,GAAiB,SAAU51S,EAAWsP,EAAMg2P,EAAal6R,GAC3D,IACIs7R,EAAQmvC,EAAWX,EAAW54C,EAEpBZ,EAAY05C,EAHtBU,EAAcluC,GAAYt4P,GAE1BjuC,EAAS,GACTy1B,EAAO,EACPi/S,EAAgB,SAAUz5C,GAC5B,OACS9tB,GAAS3yQ,KAAKygS,EAAczwP,mBAIrB,IAAd7L,GACF0mQ,EAASovC,EAAY9tU,KACrB6tU,EAAYnjK,GACZwiK,EAAYziK,GACZ6pH,EAAgBa,GAAgB5/Q,MAAMnS,KAEtCs7R,EAASovC,EAAYv+K,KACrBs+K,EAAYpjK,GACZyiK,EAAYxiK,GACZ4pH,EAAgBa,GAAgBhgR,OAAO/R,IAEzCgqU,EAAmBW,EAAcz5C,GACjC,GACE,GAAKA,EAAc1zO,cAGnB8yO,EAAaq6C,EAAcz5C,IACvB44C,EAAUx5C,EAAY05C,IAA1B,CASA,GANI/zU,EAAO/O,OAAS,GAAKujV,EAAUn6C,EAAYltB,GAAS3yQ,KAAKwF,KAC3Dy1B,IAEF4kQ,EAAax/K,GAAQw/K,GACrBA,EAAWznQ,SAAWqoQ,EACtBZ,EAAW5kQ,KAAOA,EACdwuQ,EAAY5J,GACd,OAAOr6R,EAETA,EAAOvH,KAAK4hS,UACLY,EAAgBoK,EAAOpK,IAChC,OAAOj7R,GAEL20U,GAAc,SAAUV,GAC1B,OAAO,SAAU55C,GACf,OAAO25C,GAAgBC,EAAY55C,KAGnCu6C,GAAS,SAAUX,GACrB,OAAO,SAAU55C,GACf,OAAO65C,GAAaD,EAAY55C,KAIhCw6C,GAA2BrgJ,GAAS/oD,uBACpCqpM,GAAa9wC,GACb+wC,GAAqB,SAAU16C,EAAYvqQ,GAC7C,OAAO7P,KAAK8gB,IAAIs5P,EAAWnsQ,KAAO4B,IAEhCklT,GAAsB,SAAU36C,EAAYvqQ,GAC9C,OAAO7P,KAAK8gB,IAAIs5P,EAAWppQ,MAAQnB,IAEjCmlT,GAAW,SAAUnlT,EAASuqQ,GAChC,OAAOvqQ,GAAWuqQ,EAAWnsQ,MAAQ4B,GAAWuqQ,EAAWppQ,OAEzDikT,GAAwB,SAAUr6C,EAAa/qQ,GACjD,OAAOq9O,GAASH,OAAO6tB,GAAa,SAAUs6C,EAAe96C,GAC3D,IAAI+6C,EAAaC,EAGjB,OAFAD,EAAcn1T,KAAK2f,IAAIm1S,GAAmBI,EAAerlT,GAAUklT,GAAoBG,EAAerlT,IACtGulT,EAAcp1T,KAAK2f,IAAIm1S,GAAmB16C,EAAYvqQ,GAAUklT,GAAoB36C,EAAYvqQ,IAC5FmlT,GAASnlT,EAASuqQ,GACbA,EAEL46C,GAASnlT,EAASqlT,GACbA,EAELE,IAAgBD,GAAeP,GAAyBx6C,EAAWtwR,OAGnEsrU,EAAcD,EAFT/6C,EAKF86C,MAGPG,GAAc,SAAU32S,EAAWsP,EAAMg2P,EAAal6R,GACxD,MAAOA,EAAO+qU,GAAW/qU,EAAM40B,EAAWg6P,GAA0B1qP,GAClE,GAAIg2P,EAAYl6R,GACd,QAIFwrU,GAAoB,SAAUtnS,EAAMunS,GACtC,IAAI36C,EAAc,GACd3hC,EAAU,SAAUu8E,EAAY1rU,GAClC,IAAI2rU,EAKJ,OAJAA,EAAYhgV,EAAO80C,GAAe,CAACzgC,KAAQ,SAAUswR,GACnD,OAAQo7C,EAAWp7C,EAAYm7C,MAEjC36C,EAAcA,EAAYjpS,OAAO8jV,GACL,IAArBA,EAAUzkV,QAKnB,OAHA4pS,EAAYpiS,KAAK+8U,GACjBF,GAAY7N,GAAW2M,GAAInmS,EAAM18C,EAAM2nQ,EAAS9nF,IAAUokK,EAAezrU,MACzEurU,GAAY7N,GAAW6M,KAAMrmS,EAAM18C,EAAM2nQ,EAAS7nF,IAAUmkK,EAAezrU,MACpE8wR,GAEL86C,GAAsB,SAAU1nS,GAClC,OAAOv4C,EAAO+E,EAAOwzC,EAAK03J,qBAAqB,MAAO29F,KAEpDsyC,GAAY,SAAUv7C,EAAYvqQ,GACpC,MAAO,CACL/lB,KAAMswR,EAAWtwR,KACjB+R,OAAQi5T,GAAmB16C,EAAYvqQ,GAAWklT,GAAoB36C,EAAYvqQ,KAGlF+lT,GAAe,SAAU5nS,EAAMne,EAASC,GAC1C,IAAI+lT,EACAC,EAAgCvrS,GAAemrS,GAAoB1nS,IACnE+nS,EAAkBtgV,EAAOqgV,GAA+B,SAAUxjT,GACpE,OAAOxC,GAAWwC,EAAKpE,KAAO4B,GAAWwC,EAAKrB,UAGhD,OADA4kT,EAAkBZ,GAAsBc,EAAiBlmT,GACrDgmT,IACFA,EAAkBZ,GAAsBK,GAAkBtnS,EAAM6nS,GAAkBhmT,GAC9EgmT,GAAmBxyC,GAAkBwyC,EAAgB/rU,OAChD6rU,GAAUE,EAAiBhmT,GAG/B,MAGLmmT,GAA0BzhJ,GAAShpD,sBACnC0qM,GAA2B1hJ,GAAS/oD,uBACpC0qM,GAAY,SAAUx3S,EAAW6mC,EAAQz7D,EAAM+R,EAAQkqL,GACzD,OAAOxgI,EAAOyzO,oBAAoBk9B,UAAUx3S,EAAW50B,EAAM+R,EAAQkqL,IAEnEowI,GAAe,SAAUrsU,GAC3B,IAAIo/B,EAAMp/B,EAAKmR,cAAcivB,cAE7B,OADAhB,EAAIomC,WAAWxlE,GACRo/B,GAELomC,GAAa,SAAU/J,EAAQz7D,GACjC,IAAI1W,EAAImyE,EAAOqf,KAAK,uBAAwB,CAAEtoF,OAAQwN,IACtD,OAAI1W,EAAE8/K,qBACG,KAEFijK,GAAarsU,IAElBssU,GAAqB,SAAU7wQ,EAAQ1sE,EAAOktM,GAChD,IAAIi/F,EAAkB1pG,GAAe,EAAG/1H,EAAOv8C,UAAWnwB,GACtDmiS,EAAgBa,GAAgBP,eAAe0J,GAC/CqxC,EAAoBr7C,EAAcvtN,UACtC,GAAIwoQ,GAAyBI,GAC3B,OAAOH,GAAU,EAAG3wQ,EAAQ8wQ,GAAoBr7C,EAAc9D,WAAW,GAE3E,IAAIo/C,EAA0Bt7C,EAAcvtN,SAAQ,GACpD,GAAIwoQ,GAAyBK,GAC3B,OAAOJ,GAAU,EAAG3wQ,EAAQ+wQ,GAAyB,GAAO,GAE9D,IAAIC,EAAShxQ,EAAOr7D,IAAI2kE,UAAUmsN,EAAcvtN,WAAW,SAAU3jE,GACnE,OAAOmsU,GAAyBnsU,IAASksU,GAAwBlsU,MAEnE,OAAImsU,GAAyBM,GACpBL,GAAU,EAAG3wQ,EAAQgxQ,GAAQ,EAAOxwI,GAEtC,MAELywI,GAAmB,SAAUjxQ,EAAQ1sE,EAAOktM,GAC9C,IAAKltM,IAAUA,EAAMmyC,UACnB,OAAOnyC,EAET,IAAI49U,EAAaL,GAAmB7wQ,EAAQ1sE,EAAOktM,GACnD,OAAI0wI,GAGG59U,GAGL69U,GAAS,SAAU9wI,EAASvtL,EAAW2mB,GACzC,OAAO1oC,EAAOD,KAAK2oC,EAAIrhB,aAAaloB,OAAO8+L,GAASt2K,QAAQ1oB,QAAO,SAAUyU,GAC3E,IAAI01B,EAAQkmK,EAAU,GAAK,EAC3B,OAAOvtL,EAAUrO,EAAK+N,KAAKy2D,OAAOxvC,EAAI7M,SAAWuN,QAGjDi3S,GAAgBrlV,EAAMolV,IAAQ,EAAMvtC,IACpCytC,GAAetlV,EAAMolV,IAAQ,EAAOvtC,IACpC0tC,GAAc,SAAU73S,GAC1B,IAAIrhB,EAAYqhB,EAAIrhB,YACpB,OAAO42K,GAASt2K,OAAON,IAAwC,IAA1BA,EAAU5F,KAAK/mB,QAElD8lV,GAAyB,SAAUj7T,EAAQxD,GAC7C,OAAO,SAAU2mB,GACf,OAAO1oC,EAAOD,KAAKguS,GAA6BxoR,EAAS,GAAK,EAAGmjB,IAAMvpC,OAAO4iB,GAAW1jB,WAGzFoiV,GAAe,SAAUjtU,GAC3B,MAAyB,QAAlBA,EAAKgU,UAAkE,UAA5C4L,GAAMnf,GAAQZ,QAAQG,GAAO,YAE7DktU,GAAY,SAAUltU,GACxB,OAAOyqL,GAAS/oD,uBAAuB1hI,KAAUyqL,GAASk2E,WAAW3gQ,IAEnEmtU,GAAqBH,IAAuB,EAAMC,IAClDG,GAAoBJ,IAAuB,EAAOC,IAClDI,GAAgBL,IAAuB,EAAMviJ,GAAS2qD,SACtDk4F,GAAeN,IAAuB,EAAOviJ,GAAS2qD,SACtDm4F,GAA+BP,IAAuB,EAAME,IAC5DM,GAA8BR,IAAuB,EAAOE,KAG/D,SAAUvD,GACTA,EAAUA,EAAU,MAAQ,GAAK,KACjCA,EAAUA,EAAU,SAAW,GAAK,QACpCA,EAAUA,EAAU,QAAU,GAAK,OACnCA,EAAUA,EAAU,OAAS,GAAK,OAJpC,CAKEA,KAAcA,GAAY,KAC5B,IA+3LI8D,GAyhCAC,GAx5NAjzN,GAAO,SAAU7lF,EAAWmP,GAC9B,OAAOnP,IAAck9P,GAAW2K,UAAY1sS,EAAQg0C,GAAaA,GAE/D4pS,GAAS,SAAU/4S,EAAW81S,EAAax1S,GAC7C,OAAON,IAAck9P,GAAWuK,SAAWquC,EAAY9tU,KAAKs4B,GAAOw1S,EAAYv+K,KAAKj3H,IAElF04S,GAAe,SAAUvuU,EAAOu1B,EAAWi5S,EAAY7G,GACzD,OAAIv8I,GAASZ,KAAKm9I,EAAQrjQ,QAAQ/uC,IAAck9P,GAAWuK,WAClDstC,GAAUmE,IAC+B,IAAvC1zC,GAAcyzC,EAAY7G,GAC5B2C,GAAUoE,MAEVpE,GAAUqE,MAGjBC,GAAoB,SAAU1/T,EAAWqmB,EAAWv1B,EAAO6G,GAC7D,IACwB8gU,EADpB0D,EAAcluC,GAAYn9R,GAC1BwuU,EAAa3nU,EACb69B,EAAY,GAChB,MAAO8pS,EAAY,CAEjB,GADA7G,EAAU2G,GAAO/4S,EAAW81S,EAAamD,IACpC7G,EACH,MAEF,GAAIv8I,GAASZ,KAAKm9I,EAAQrjQ,SAAQ,IAChC,OAAI/uC,IAAck9P,GAAWuK,SACpB,CACLt4P,UAAW02E,GAAK7lF,EAAWmP,GAAWl8C,OAAO,CAACm/U,IAC9CkH,UAAWvE,GAAUmE,GACrBK,QAAS3hV,EAAOP,KAAK+6U,IAGhB,CACLjjS,UAAW02E,GAAK7lF,EAAWmP,GAC3BmqS,UAAWvE,GAAUmE,GACrBK,QAAS3hV,EAAOP,KAAK+6U,IAI3B,GAAKA,EAAQxpR,YAAb,CAIA,GAAIjvC,EAAUs/T,EAAY7G,GAAU,CAClC,IAAIkH,EAAYN,GAAavuU,EAAOu1B,EAAWi5S,EAAY7G,GAC3D,MAAO,CACLjjS,UAAW02E,GAAK7lF,EAAWmP,GAC3BmqS,UAAWA,EACXC,QAAS3hV,EAAOP,KAAK+6U,IAGzBjjS,EAAUr1C,KAAKs4U,GACf6G,EAAa7G,OAZX6G,EAAa7G,EAcjB,MAAO,CACLjjS,UAAW02E,GAAK7lF,EAAWmP,GAC3BmqS,UAAWvE,GAAUyE,IACrBD,QAAS3hV,EAAOrC,SAGhBkkV,GAA2B,SAAUz5S,EAAW05S,EAAwBjvU,EAAO6G,GACjF,OAAOooU,EAAuBjvU,EAAO6G,GAAOioU,QAAQ7iV,KAAI,SAAU4pC,GAChE,IAAI6O,EAAYuqS,EAAuBjvU,EAAO61B,GAAK6O,UACnD,OAAOnP,IAAck9P,GAAW2K,UAAY14P,EAAUl8C,OAAOqtC,GAAO,CAACA,GAAKrtC,OAAOk8C,MAChFj5C,MAAM,KAEPyjV,GAAyC,SAAUxqS,EAAWx8C,GAChE,OAAOoI,EAAMo0C,GAAW,SAAUr0C,EAAK8+U,GACrC,OAAO9+U,EAAI/E,MAAK,WACd,OAAO6B,EAAOP,KAAKuiV,MAClB,SAAUC,GACX,OAAOr3R,GAAM5mD,EAAKi+U,EAAQhuS,kBAAmBjwC,EAAKg+U,EAAO/tS,mBAAmB,SAAUiuS,EAAUhhN,GAC9F,IAAIihN,EAAWz4T,KAAK8gB,IAAIzvC,EAAImnV,EAASvqT,MACjCyqT,EAAU14T,KAAK8gB,IAAIzvC,EAAImmI,EAAQvpG,MACnC,OAAOyqT,GAAWD,EAAWH,EAASC,KACrCrjV,GAAGsE,QAEPlD,EAAOrC,SAER0kV,GAAgC,SAAU9qS,EAAW7O,GACvD,OAAO1kC,EAAK0kC,EAAIuL,kBAAkBj1C,MAAK,SAAUsjV,GAC/C,OAAOP,GAAuCxqS,EAAW+qS,EAAW3qT,UAGpE4qT,GAAgCvnV,EAAMymV,GAAmB38C,GAAcjqH,SAAU,GACjF2nK,GAA4BxnV,EAAMymV,GAAmB38C,GAAchqH,QAAS,GAC5E2nK,GAAgB,SAAU5vU,EAAO61B,GACnC,OAAO65S,GAA8B1vU,EAAO61B,GAAKi5S,QAAQ5jV,UAEvD2kV,GAAe,SAAU7vU,EAAO61B,GAClC,OAAO85S,GAA0B3vU,EAAO61B,GAAKi5S,QAAQ5jV,UAEnD4kV,GAAoB3nV,EAAM6mV,IAA2B,EAAGU,IACxDK,GAAoB5nV,EAAM6mV,GAA0B,EAAGW,IACvDK,GAAwB,SAAUhwU,GACpC,OAAOk+R,GAAYC,gBAAgBn+R,GAAO/T,KAAI,SAAU4pC,GACtD,MAAO,CAACA,GAAKrtC,OAAOmnV,GAA0B3vU,EAAO61B,GAAK6O,cACzDj5C,MAAM,KAEPwkV,GAAuB,SAAUjwU,GACnC,OAAOk+R,GAAYE,eAAep+R,GAAO/T,KAAI,SAAU4pC,GACrD,OAAO65S,GAA8B1vU,EAAO61B,GAAK6O,UAAUl8C,OAAOqtC,MACjEpqC,MAAM,KAGPykV,GAA2B9kJ,GAAS/oD,uBACpC8tM,GAAoBrgD,GACpBsgD,GAA4B,SAAU76S,EAAW6mC,EAAQi0Q,EAAc3gV,GACzE,IAAI6lS,EAAWhgQ,IAAck9P,GAAWuK,SACpCszC,EAAiC/6C,EAAW24C,GAA+BC,GAC/E,IAAKz+U,EAAMmyC,UAAW,CACpB,IAAIlhC,EAAOwvU,GAAkBzgV,GAC7B,GAAIwgV,GAAyBvvU,GAC3B,OAAOosU,GAAUx3S,EAAW6mC,EAAQz7D,EAAM40B,IAAck9P,GAAW2K,WAAW,GAGlF,IAAImzC,EAA0B/hD,GAA6B9+R,GACvDmiS,EAAgB+J,GAA2BrmQ,EAAW6mC,EAAOv8C,UAAWnwB,GAC5E,GAAI4gV,EAA+Bz+C,GACjC,OAAO1rN,GAAW/J,EAAQy1N,EAAcvtN,SAASixN,IAEnD,IAAIi7C,EAAoBvJ,GAAYH,kBAAkBvxC,EAAU86C,EAAax+C,IAC7E,IAAK2+C,EACH,OAAID,EACK7gV,EAEF,KAET,GAAI4gV,EAA+BE,GACjC,OAAOzD,GAAUx3S,EAAW6mC,EAAQo0Q,EAAkBlsQ,SAASixN,GAAWA,GAAU,GAEtF,IAAIk7C,EAAoBJ,EAAaG,GACrC,OAAIC,GAAqBH,EAA+BG,IAClDv0C,GAAsBs0C,EAAmBC,GACpC1D,GAAUx3S,EAAW6mC,EAAQq0Q,EAAkBnsQ,SAASixN,GAAWA,GAAU,GAGpFg7C,EACKlD,GAAiBjxQ,EAAQo0Q,EAAkBt+C,WAAW,GAExD,MAELw+C,GAA0B,SAAUn7S,EAAW6mC,EAAQu0Q,EAAUjhV,GACnE,IAAImiS,EAAe++C,EAAeC,EAC9BC,EAAqBC,EAAiBrqT,EACtCsqT,EAAOC,EAAOC,EAYlB,GAXAA,EAA2Bf,GAAkBzgV,GAC7CmiS,EAAgB+J,GAA2BrmQ,EAAW6mC,EAAOv8C,UAAWnwB,GACxEkhV,EAAgBD,EAASv0Q,EAAOv8C,UAAW0rT,GAAY,GAAI15C,GAC3Dg/C,EAAoBvkV,EAAOskV,EAAepF,GAAO,IACjDuF,EAAkBhtE,GAAS3yQ,KAAKygS,EAAczwP,mBAC1C8sS,GAA6Br8C,IAAkBm8C,GAAcn8C,MAC/Dq/C,EAA2Br/C,EAAcvtN,YAEvC6pQ,GAA4Bt8C,IAAkBo8C,GAAap8C,MAC7Dq/C,EAA2Br/C,EAAcvtN,SAAQ,KAE9CysQ,EACH,OAAO,KAIT,GAFArqT,EAAUqqT,EAAgBjsT,KAC1BgsT,EAAsBhF,GAAsB+E,EAAmBnqT,GAC3DoqT,GACEZ,GAAyBY,EAAoBnwU,MAG/C,OAFAqwU,EAAQn6T,KAAK8gB,IAAIjR,EAAUoqT,EAAoBhsT,MAC/CmsT,EAAQp6T,KAAK8gB,IAAIjR,EAAUoqT,EAAoBjpT,OACxCklT,GAAUx3S,EAAW6mC,EAAQ00Q,EAAoBnwU,KAAMqwU,EAAQC,GAAO,GAGjF,GAAIC,EAA0B,CAC5B,IAAIC,EAAiBhG,GAAe51S,EAAW6mC,EAAOv8C,UAAW0rT,GAAY,GAAI2F,GAEjF,GADAJ,EAAsBhF,GAAsBx/U,EAAO6kV,EAAgB3F,GAAO,IAAK9kT,GAC3EoqT,EACF,OAAOzD,GAAiBjxQ,EAAQ00Q,EAAoBtnT,SAAS0oQ,WAAW,GAG1E,GADA4+C,EAAsB/sE,GAAS3yQ,KAAK9E,EAAO6kV,EAAgB3F,GAAO,KAC9DsF,EACF,OAAOzD,GAAiBjxQ,EAAQ00Q,EAAoBtnT,SAAS0oQ,WAAW,KAI1EhlG,GAAkB,SAAU9wH,GAC9B,IAAIgxH,EAAYhxH,EAAOr7D,IAAIiwB,OAAOuqD,GAASyxG,mBAAmB5wH,IAI9D,QAHK8mM,GAAIpgQ,IAAMogQ,GAAIpgQ,IAAM,MACvBsqL,EAAU/sL,UAAY,2BAEjB+sL,GAELgkJ,GAAe,SAAUh1Q,EAAQ7mC,EAAW7lC,GAC9C,IAAIonU,EAAKhqB,EAAUr7G,EACf45I,EAAcluC,GAAY/gO,EAAOv8C,WACjCwxT,EAA6BlpV,EAAM6zS,GAAwBqvC,EAAY9tU,MACvE+zU,EAA6BnpV,EAAM6zS,GAAwBqvC,EAAYv+K,MAC3E,GAAIp9J,EAAMmyC,WAAau6B,EAAOC,SAASg3I,kBAAmB,CAExD,GADAyjH,EAAM16P,EAAOr7D,IAAI2kE,UAAUh2E,EAAMswC,eAAgB,QAC5C82R,EACH,OAGAhqB,EADgB,IAAdv3Q,EACS87S,EAA2B3+C,GAAgBP,eAAeziS,IAE1D4hV,EAA2B5+C,GAAgBP,eAAeziS,IAElEo9S,IACHr7G,EAAWvE,GAAgB9wH,GACT,IAAd7mC,EACF6mC,EAAO46H,EAAE8/H,GAAKhkT,MAAM2+K,GAEpBr1H,EAAO46H,EAAE8/H,GAAKpkT,OAAO++K,GAEvBr1H,EAAOt8B,UAAUs+C,OAAOqzG,GAAU,GAClCr1H,EAAOt8B,UAAUm1B,cAInBs8Q,GAAqB,SAAUn1Q,EAAQqgI,GACzC,IAGI+0I,EAHAnG,EAAcluC,GAAY/gO,EAAOv8C,WACjCwxT,EAA6BlpV,EAAM6zS,GAAwBqvC,EAAY9tU,MACvE+zU,EAA6BnpV,EAAM6zS,GAAwBqvC,EAAYv+K,MAEvEv3H,EAAYknK,EAAUg2F,GAAWuK,SAAWvK,GAAW2K,UACvDizC,EAAe5zI,EAAU40I,EAA6BC,EACtD5hV,EAAQ0sE,EAAOt8B,UAAU6nC,SAE7B,OADA6pQ,EAAWpB,GAA0B76S,EAAW6mC,EAAQi0Q,EAAc3gV,GAClE8hV,IAGJA,EAAWJ,GAAah1Q,EAAQ7mC,EAAW7lC,GACvC8hV,GAGG,OAELC,GAAmB,SAAUr1Q,EAAQ8pJ,GACvC,IAAIsrH,EACAj8S,EAAY2wL,EAAO,GAAK,EACxByqH,EAAWzqH,EAAO+kH,GAAYF,GAC9Br7U,EAAQ0sE,EAAOt8B,UAAU6nC,SAE7B,OADA6pQ,EAAWd,GAAwBn7S,EAAW6mC,EAAQu0Q,EAAUjhV,GAC5D8hV,IAGJA,EAAWJ,GAAah1Q,EAAQ7mC,EAAW7lC,GACvC8hV,GAGG,OAELE,GAAQ,SAAUt1Q,EAAQqgI,GAC5B,OAAO,WACL,IAAI80F,EAASggD,GAAmBn1Q,EAAQqgI,GACxC,QAAI80F,IACFn1N,EAAOt8B,UAAUm8H,OAAOs1H,IACjB,KAMTogD,GAAQ,SAAUv1Q,EAAQ8pJ,GAC5B,OAAO,WACL,IAAIqrE,EAASkgD,GAAiBr1Q,EAAQ8pJ,GACtC,QAAIqrE,IACFn1N,EAAOt8B,UAAUm8H,OAAOs1H,IACjB,KAMTqgD,GAAgB,SAAUn1I,GAC5B,OAAO,SAAU5mK,GACf,OAAO4mK,EAAU0xI,GAA4Bt4S,GAAOq4S,GAA6Br4S,KAGjFg8S,GAAqB,SAAUz1Q,EAAQqgI,GACzC,OAAO,WACL,IAAIvvM,EAAOuvM,EAAUi2F,GAAgBN,aAAah2N,EAAOt8B,UAAU6nC,UAAY+qN,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UAC3H/wE,EAAS6lM,EAAUkzI,GAA0BvzQ,EAAOv8C,UAAW3yB,GAAQwiV,GAA8BtzQ,EAAOv8C,UAAW3yB,GACvHq6B,EAAKk1K,EAAUrrM,EAAKwF,EAAO8tC,WAAavzC,EAAKyF,EAAO8tC,WACxD,OAAOnd,EAAGj7B,OAAOslV,GAAcn1I,IAAUnxM,KAAKvD,GAAS,IAAQ,SAAU8tC,GAEvE,OADAumC,EAAOt8B,UAAUm8H,OAAOpmI,EAAIq8P,YACrB,OAKT4/C,GAAU,SAAU3oT,EAAMoN,GAC5B,MAAO,CACLzR,KAAMqE,EAAKrE,KAAOyR,EAClBxR,IAAKoE,EAAKpE,IAAMwR,EAChB1O,MAAOsB,EAAKtB,MAAgB,EAAR0O,EACpBzO,OAAQqB,EAAKrB,OAAiB,EAARyO,EACtB3O,MAAOuB,EAAKvB,MAAQ2O,EACpBhS,OAAQ4E,EAAK5E,OAASgS,IAGtBw7S,GAAa,SAAUC,EAAeC,GACxC,OAAO9lV,EAAK8lV,GAAK,SAAU3rK,GACzB,IAAIn9I,EAAO2oT,GAAQrgO,GAAQ60D,EAAGhiJ,0BAA2B,GACzD,MAAO,CACL,CACEp8B,EAAGihC,EAAKrE,KACR5jB,EAAG8wU,EAAc7oT,GACjBi9B,KAAMkgH,GAER,CACEp+K,EAAGihC,EAAKtB,MACR3mB,EAAG8wU,EAAc7oT,GACjBi9B,KAAMkgH,QAKV4rK,GAAoB,SAAUC,EAASjqV,EAAGgZ,GAC5C,OAAO5Q,EAAM6hV,GAAS,SAAU9hV,EAAK+hV,GACnC,OAAO/hV,EAAI/E,MAAK,WACd,OAAO6B,EAAOP,KAAKwlV,MAClB,SAAUC,GACX,IAAIC,EAAUz7T,KAAKgmE,KAAKhmE,KAAK8gB,IAAI06S,EAAUnqV,EAAIA,GAAK2uB,KAAK8gB,IAAI06S,EAAUnxU,EAAIA,IACvEquU,EAAU14T,KAAKgmE,KAAKhmE,KAAK8gB,IAAIy6S,EAAUlqV,EAAIA,GAAK2uB,KAAK8gB,IAAIy6S,EAAUlxU,EAAIA,IAC3E,OAAO/T,EAAOP,KAAK2iV,EAAU+C,EAAUF,EAAYC,QAEpDllV,EAAOrC,SAERynV,GAAiB,SAAUP,EAAeQ,EAAgBp1M,EAAOl1I,EAAGgZ,GACtE,IAAI40E,EAAQpL,GAActpE,GAAQZ,QAAQ48H,GAAQ,iBAAiBnxI,KAAI,SAAUhC,GAC/E,OAAOA,EAAE8W,SAEPoxU,EAAU7lV,EAAOylV,GAAWC,EAAel8P,IAAQ,SAAU28P,GAC/D,OAAOD,EAAeC,EAAQvxU,MAEhC,OAAOgxU,GAAkBC,EAASjqV,EAAGgZ,GAAGjV,KAAI,SAAUwmV,GACpD,OAAOA,EAAOrsR,SAGdssR,GAAiB,SAAUvpT,GAC7B,OAAOA,EAAKrB,QAEV6qT,GAAc,SAAUxpT,GAC1B,OAAOA,EAAKpE,KAEV6tT,GAAY,SAAUH,EAAQvxU,GAChC,OAAOuxU,EAAOvxU,EAAIA,GAEhB2xU,GAAY,SAAUJ,EAAQvxU,GAChC,OAAOuxU,EAAOvxU,EAAIA,GAEhB4xU,GAAsB3qV,EAAMoqV,GAAgBG,GAAgBE,IAC5DG,GAAsB5qV,EAAMoqV,GAAgBI,GAAaE,IACzDG,GAAiC,SAAU51M,EAAOvnG,GACpD,OAAO1kC,EAAK0kC,EAAIuL,kBAAkBj1C,MAAK,SAAUg9B,GAC/C,OAAO2pT,GAAoB11M,EAAOj0G,EAAKrE,KAAMqE,EAAKpE,QACjD54B,MAAK,SAAUi6D,GAChB,OAAOopR,GAA8BS,GAAqB7pR,GAAOvwB,OAGjEo9S,GAAiC,SAAU71M,EAAOvnG,GACpD,OAAOzkC,EAAKykC,EAAIuL,kBAAkBj1C,MAAK,SAAUg9B,GAC/C,OAAO4pT,GAAoB31M,EAAOj0G,EAAKrE,KAAMqE,EAAKpE,QACjD54B,MAAK,SAAUi6D,GAChB,OAAOopR,GAA8BQ,GAAsB5pR,GAAOvwB,OAIlEq9S,GAAc,SAAU92Q,EAAQr8B,GAClCq8B,EAAOt8B,UAAUm8H,OAAOl8H,GACxB88Q,GAAeE,oBAAoB3gP,EAAQr8B,IAEzCozS,GAAe,SAAUvE,EAAmB5uU,EAAOozU,GACrD,OAAOA,EAAStE,QAAQ7iV,KAAI,SAAUonV,GACpC,OAAOzE,EAAkB5uU,EAAOqzU,GAAUvE,QAAQtjV,YACjDC,OAAM,IAEP6nV,GAAsB,SAAUF,GAClC,OAAOA,EAASvE,YAAcvE,GAAUqE,MAAsC,IAA9ByE,EAAS1uS,UAAU78C,QAEjE0rV,GAAoB,SAAUH,GAChC,OAAOA,EAASvE,YAAcvE,GAAUmE,IAAoC,IAA9B2E,EAAS1uS,UAAU78C,QAE/D2rV,GAAoB,SAAU5E,EAAmB5uU,EAAO61B,GAC1D,IAAIu9S,EAAWxE,EAAkB5uU,EAAO61B,GACxC,OAAIy9S,GAAoBF,KAAchoJ,GAASZ,KAAK30J,EAAIyuC,YAAcivQ,GAAkBH,IAC9ED,GAAavE,EAAmB5uU,EAAOozU,GAExCA,EAAStE,QAAQ5jV,UAGxBuoV,GAAyBtrV,EAAMqrV,GAAmB9D,IAClDgE,GAAwBvrV,EAAMqrV,GAAmB7D,IACjDgE,GAA6B,SAAUl3I,EAAS18J,EAAKq9F,GACvD,IAAI0vK,EAAWpa,GAAgBP,eAAepyP,GAC9C,OAAOm+P,GAAYH,YAAYthG,EAASr/D,GAAOnxI,KAAI,SAAU4pC,GAC3D,OAAOA,EAAI25P,QAAQsd,MAClBrhT,OAAM,IAEPmoV,GAAuB,SAAUx3Q,EAAQqgI,EAASr/D,EAAOkpC,GAC3D,IAAIvmI,EAAMq8B,EAAOt8B,UAAU6nC,SACvBpyC,EAAYknK,EAAU,GAAK,EAC/B,GAAIw9F,MAA6B05C,GAA2Bl3I,EAAS18J,EAAKq9F,GAAQ,CAChF,IAAIm0J,EAASw7C,GAAUx3S,EAAW6mC,EAAQghE,GAAQq/D,GAAS,GAE3D,OADAy2I,GAAY92Q,EAAQm1N,IACb,EAET,OAAO,GAELsiD,GAA0B,SAAUhvS,EAAMu4F,EAAOv2H,GACnD,OAAOmsU,GAA+B51M,EAAOv2H,GAAO7a,SAAQ,WAC1D,OAAOmF,EAAK0V,EAAMu6B,kBAAkBj1C,MAAK,SAAUg9B,GACjD,OAAO+lT,GAAuCY,GAAkBjrS,EAAM6tP,GAAgBhgR,OAAO0qH,IAASj0G,EAAKrE,YAE5Gr5B,MAAMinS,GAAgBhgR,OAAO0qH,KAE9B02M,GAA0B,SAAUjvS,EAAMu4F,EAAOv2H,GACnD,OAAOosU,GAA+B71M,EAAOv2H,GAAO7a,SAAQ,WAC1D,OAAOmF,EAAK0V,EAAMu6B,kBAAkBj1C,MAAK,SAAUg9B,GACjD,OAAO+lT,GAAuCa,GAAkBlrS,EAAM6tP,GAAgB5/Q,MAAMsqH,IAASj0G,EAAKrE,YAE3Gr5B,MAAMinS,GAAgB5/Q,MAAMsqH,KAE7B22M,GAAW,SAAUruK,EAAU7vI,GACjC,IAAIl1B,EAAOk1B,EAAIyuC,QAAQohG,GACvB,OAAO0lB,GAASv2K,UAAUlU,IAA2B,UAAlBA,EAAKgU,SAAuBxnB,EAAOP,KAAK+T,GAAQxT,EAAOrC,QAExFkpV,GAAc,SAAU9tH,EAAM9pJ,EAAQghE,EAAOvnG,GAC/C,IAAIsiS,EAAkB58O,GAASyxG,mBAAmB5wH,GAC9C+7P,EACF/7P,EAAOigB,YAAYC,UAAS,WAC1B,IAAIrzE,EAAU7H,GAAQX,QAAQ03T,GAC9BjjT,GAAOjM,EAASsyE,GAAS0xG,wBAAwB7wH,IACjDppD,GAAO/J,EAAS7H,GAAQX,QAAQ,OAC5BylN,EACFpzM,GAAM1R,GAAQZ,QAAQ48H,GAAQn0H,GAE9ByJ,GAAOtR,GAAQZ,QAAQ48H,GAAQn0H,GAEjC,IAAI82B,EAAMq8B,EAAOr7D,IAAImlE,YACrBnmC,EAAIQ,SAASt3B,EAAQlI,MAAO,GAC5Bg/B,EAAIa,OAAO33B,EAAQlI,MAAO,GAC1BmyU,GAAY92Q,EAAQr8B,MAGtBmzS,GAAY92Q,EAAQvmC,EAAIq8P,YAGxBmiC,GAAY,SAAUj4P,EAAQ8pJ,EAAMrwL,GACtC,IAAIunG,EAAe22M,KAAP7tH,EAAsBrwL,GAC9BzkC,GAAgB,IAAT80N,EACX9oF,EAAM9xI,MAAK,WACT,OAAO4nV,GAAY92Q,EAAQvmC,EAAIq8P,cAC9B,SAAU90J,GACX,OAAO8gK,GAAYH,WAAW3sS,EAAMgrE,EAAOv8C,WAAWvzB,QAAO,SAAU8iV,GACrE,OAAOA,EAAQ5/C,QAAQ35P,MACtBvqC,MAAK,WACN,OAAO4nV,GAAY92Q,EAAQvmC,EAAIq8P,cAC9B,SAAU5kS,GACX,OAAO0mV,GAAY9tH,EAAM9pJ,EAAQghE,EAAOvnG,UAI1Co+S,GAAqB,SAAU73Q,EAAQ8pJ,EAAM9oF,EAAOkpC,GACtD,IAAIvmI,EAAMq8B,EAAOt8B,UAAU6nC,SACvB9xC,EAAM68P,GAAgBP,eAAepyP,GACrC8E,EAAOu3B,EAAOv8C,UAClB,IAAKqmM,GAAQutH,GAAuBntK,EAAIzwI,GAAM,CAC5C,IAAIs5S,EAAS0E,GAAwBhvS,EAAMu4F,EAAOvnG,GAElD,OADAw+R,GAAUj4P,EAAQ8pJ,EAAMipH,IACjB,EACF,GAAIjpH,GAAQwtH,GAAsBptK,EAAIzwI,GAAM,CAC7Cs5S,EAAS2E,GAAwBjvS,EAAMu4F,EAAOvnG,GAElD,OADAw+R,GAAUj4P,EAAQ8pJ,EAAMipH,IACjB,EAEP,OAAO,GAGP+E,GAAU,SAAU93Q,EAAQqgI,GAC9B,OAAO,WACL,OAAOtvM,EAAOD,KAAKkvE,EAAOr7D,IAAI2kE,UAAUtJ,EAAOt8B,UAAUwkC,UAAW,UAAUn4E,MAAK,SAAUm6K,GAC3F,OAAOn5K,EAAOD,KAAKkvE,EAAOr7D,IAAI2kE,UAAU4gG,EAAI,UAAUr6K,KAAI,SAAUmxI,GAClE,OAAOw2M,GAAqBx3Q,EAAQqgI,EAASr/D,SAE9C3xI,OAAM,KAGT0oV,GAAU,SAAU/3Q,EAAQqgI,GAC9B,OAAO,WACL,OAAOtvM,EAAOD,KAAKkvE,EAAOr7D,IAAI2kE,UAAUtJ,EAAOt8B,UAAUwkC,UAAW,UAAUn4E,MAAK,SAAUm6K,GAC3F,OAAOn5K,EAAOD,KAAKkvE,EAAOr7D,IAAI2kE,UAAU4gG,EAAI,UAAUr6K,KAAI,SAAUmxI,GAClE,OAAO62M,GAAmB73Q,EAAQqgI,EAASr/D,EAAOkpC,SAEnD76K,OAAM,KAITqvO,GAAW,SAAUn6N,GACvB,OAAOlR,EAAS,CAAC,cAAepB,GAAKsS,KAEnCyzU,GAAc,SAAUjhV,GAC1B,IAAI4sC,EAAM54C,EAAW+Y,SAAS6gC,cAG9B,OAFAhB,EAAIS,eAAertC,EAAO4N,OAC1Bg/B,EAAIY,aAAaxtC,EAAO4N,OACjBg/B,GAELs0S,GAAgB,SAAUxvS,EAAM6/B,EAAK+3H,GACnCA,EACFzpL,GAAO6xB,EAAM6/B,GAEbzxD,GAAQ4xB,EAAM6/B,IAGd4vQ,GAAW,SAAUzvS,EAAM43J,GAC7B,IAAIqhD,EAAK18O,GAAQX,QAAQ,MAEzB,OADA4zU,GAAcxvS,EAAMi5M,EAAIrhD,GACjB23I,GAAYt2F,IAEjBy2F,GAAgB,SAAU1vS,EAAM43J,EAASjP,EAAWr4K,GACtD,IAAI67G,EAAQ5vH,GAAQX,QAAQ+sL,GACxBswD,EAAK18O,GAAQX,QAAQ,MAIzB,OAHAyU,GAAO87G,EAAO77G,GACdnC,GAAOg+G,EAAO8sH,GACdu2F,GAAcxvS,EAAMmsF,EAAOyrE,GACpB23I,GAAYt2F,IAEjB02F,GAAkB,SAAU3vS,EAAMwkR,EAAel0S,EAAOsnL,GAC1D,MAAsB,KAAlB4sH,EACKirB,GAASzvS,EAAM43J,GAEf83I,GAAc1vS,EAAM43J,EAAS4sH,EAAel0S,IAGnDs/T,GAAwB,SAAU5+S,EAAKgP,GACzC,IAAIv6B,EAASniB,EAAM6C,GAAI65C,GACvB,OAAOl6B,GAAQvJ,GAAQZ,QAAQq1B,EAAIrhB,aAAcqvD,GAASv5D,GAAQhe,OAAOwuO,KAEvE45G,GAAsB,SAAU7vS,EAAM43J,EAAS5mK,GACjD,OAAO4mK,EAAUozI,GAAahrS,EAAK9jC,MAAO80B,GAAO+5S,GAAc/qS,EAAK9jC,MAAO80B,IAEzE8+S,GAA0B,SAAUv4Q,EAAQqgI,GAC9C,IAAI53J,EAAOzjC,GAAQZ,QAAQ47D,EAAOv8C,WAC9BgW,EAAM68P,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UACtDiyN,EAAYr+M,GAASyxG,mBAAmB5wH,GACxCw4Q,EAAiBr5P,GAAS0xG,wBAAwB7wH,GACtD,OAAOq4Q,GAAsB5+S,EAAKgP,GAAMz4C,QAAO,WAC7C,GAAIsoV,GAAoB7vS,EAAM43J,EAAS5mK,GAAM,CAC3C,IAAIkK,EAAMy0S,GAAgB3vS,EAAM+0P,EAAWg7C,EAAgBn4I,GAE3D,OADArgI,EAAOt8B,UAAUm8H,OAAOl8H,IACjB,EAEP,OAAO,MAIT80S,GAAU,SAAUz4Q,EAAQqgI,GAC9B,OAAO,WACL,QAAIrgI,EAAOt8B,UAAUmtG,eACZ0nM,GAAwBv4Q,EAAQqgI,KAOzCq4I,GAAkB,SAAUlpT,GAC9B,OAAO3/B,EAAI2/B,GAAU,SAAU8hF,GAC7B,OAAOtkH,GAAS,CACd4yD,UAAU,EACVm1M,QAAQ,EACRj1M,SAAS,EACTk1M,SAAS,EACT9kI,QAAS,EACTh9G,OAAQloB,GACPsmH,OAGHqnO,GAAe,SAAUrnO,EAASxQ,GACpC,OAAOA,EAAIovB,UAAY5e,EAAQ4e,SAAWpvB,EAAIlhD,WAAa0xD,EAAQ1xD,UAAYkhD,EAAIi0J,SAAWzjJ,EAAQyjJ,QAAUj0J,EAAIhhD,UAAYwxD,EAAQxxD,SAAWghD,EAAIk0J,UAAY1jJ,EAAQ0jJ,SAEzK4jF,GAAU,SAAUppT,EAAUsxE,GAChC,OAAO/wG,EAAK2oV,GAAgBlpT,IAAW,SAAU8hF,GAC/C,OAAOqnO,GAAarnO,EAASxQ,GAAO,CAACwQ,GAAW,OAGhDp+F,GAAS,SAAUhoB,GAErB,IADA,IAAIY,EAAI,GACCP,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACtCO,EAAEP,EAAK,GAAKC,UAAUD,GAExB,IAAID,EAAO8C,MAAMZ,UAAUsF,MAAMpF,KAAKlC,UAAW,GACjD,OAAO,WACL,OAAON,EAAEQ,MAAM,KAAMJ,KAGrBwlB,GAAU,SAAU0e,EAAUsxE,GAChC,OAAO3sG,EAAKykV,GAAQppT,EAAUsxE,IAAM,SAAUwQ,GAC5C,OAAOA,EAAQp+F,aAGf2lU,GAAY,CACdpiV,MAAOmiV,GACP1lU,OAAQA,GACRpC,QAASA,IAGPgoU,GAAyB,SAAU94Q,EAAQqU,EAAOysB,GACpD,IAAI93F,EAAK2C,KAAW3C,GACpB6vU,GAAU/nU,QAAQ,CAChB,CACEo/G,QAASsrL,GAAGv8P,MACZ/rC,OAAQoiU,GAAMt1Q,GAAQ,IAExB,CACEkwD,QAASsrL,GAAGz8P,KACZ7rC,OAAQoiU,GAAMt1Q,GAAQ,IAExB,CACEkwD,QAASsrL,GAAGx8P,GACZ9rC,OAAQqiU,GAAMv1Q,GAAQ,IAExB,CACEkwD,QAASsrL,GAAGt8P,KACZhsC,OAAQqiU,GAAMv1Q,GAAQ,IAExB,CACEkwD,QAASsrL,GAAGv8P,MACZ/rC,OAAQ4kU,GAAQ93Q,GAAQ,IAE1B,CACEkwD,QAASsrL,GAAGz8P,KACZ7rC,OAAQ4kU,GAAQ93Q,GAAQ,IAE1B,CACEkwD,QAASsrL,GAAGx8P,GACZ9rC,OAAQ6kU,GAAQ/3Q,GAAQ,IAE1B,CACEkwD,QAASsrL,GAAGt8P,KACZhsC,OAAQ6kU,GAAQ/3Q,GAAQ,IAE1B,CACEkwD,QAASsrL,GAAGv8P,MACZ/rC,OAAQ66T,GAAkB3oR,KAAK4a,EAAQqU,GAAO,IAEhD,CACE67C,QAASsrL,GAAGz8P,KACZ7rC,OAAQ66T,GAAkB3oR,KAAK4a,EAAQqU,GAAO,IAEhD,CACE67C,QAASsrL,GAAGv8P,MACZa,SAAU92C,EAAGP,QACbssP,OAAQ/rP,EAAGP,QACXyK,OAAQ66T,GAAkBF,aAAa7tQ,EAAQqU,IAEjD,CACE67C,QAASsrL,GAAGz8P,KACZe,SAAU92C,EAAGP,QACbssP,OAAQ/rP,EAAGP,QACXyK,OAAQ66T,GAAkBD,aAAa9tQ,EAAQqU,IAEjD,CACE67C,QAASsrL,GAAGx8P,GACZ9rC,OAAQulU,GAAQz4Q,GAAQ,IAE1B,CACEkwD,QAASsrL,GAAGt8P,KACZhsC,OAAQulU,GAAQz4Q,GAAQ,KAEzB8gC,GAAKhxG,MAAK,SAAUoB,GACrB4vG,EAAI/tF,qBAGJ2uJ,GAAU,SAAU1hG,EAAQqU,GAC9BrU,EAAOpjC,GAAG,WAAW,SAAUkkE,IACI,IAA7BA,EAAI6sE,sBACNmrK,GAAuB94Q,EAAQqU,EAAOysB,OAIxCi4O,GAAY,CAAE/+Q,MAAO0nG,IAErBs3K,GAAe,SAAUnxQ,GAC3B,OAAO,SAAUS,GACf,OAAO15E,GAAGi5E,EAAU7iE,GAAQZ,QAAQkkE,EAAI3jE,MAAMyJ,eAG9C6qU,GAAmB,SAAUpxQ,EAAUS,GACzC,OAAOv6D,GAAW85D,EAAUS,GAAO/5D,GAAQ+5D,GAAK,SAAUz7D,GACxD,OAAO0hL,GAAY1hL,IAAYu4N,GAAWv4N,KACzCmsU,GAAanxQ,IAAa92E,EAAOrC,QAElCwqV,GAAwB,SAAUl5Q,GACpC,IAAIx8C,EAAOw8C,EAAOv8C,UACdlf,EAAOif,EAAKpN,YAAc4pD,EAAOr7D,IAAI8iE,QAAQjkD,EAAKpN,YAAcoN,EAAKpN,WAAaoN,EACtFw8C,EAAOt8B,UAAU8kC,kBAAkBjkE,EAAM,IAEvC40U,GAAgB,SAAUn5Q,GACxBA,EAAOr7D,IAAIiqL,QAAQ5uH,EAAOv8C,aAC5Bu8C,EAAOrxB,WAAW,IAClBuqS,GAAsBl5Q,KAGtBo5Q,GAAkC,SAAU/4I,EAASg5I,EAAS/wQ,GAChE,OAAO3sB,GAAMmmP,GAAYC,gBAAgBz5N,GAAMw5N,GAAYE,eAAe15N,IAAM,SAAUgxQ,EAAUtG,GAClG,IAAIuG,EAAqB1O,GAAYH,mBAAkB,EAAM4O,GACzDE,EAAoB3O,GAAYH,mBAAkB,EAAOsI,GACzDyG,EAAoB5O,GAAYH,mBAAkB,EAAO2O,GAC7D,OAAIh5I,EACKyhG,GAAYF,aAAat5N,EAAKmxQ,GAAmB5pV,KAAI,SAAU07U,GACpE,OAAOA,EAAQn4C,QAAQomD,IAAsBH,EAAQjmD,QAAQmmD,MAC5DlqV,OAAM,GAEFyyS,GAAYD,aAAav5N,EAAKmxQ,GAAmB5pV,KAAI,SAAUy7U,GACpE,OAAOA,EAAQl4C,QAAQmmD,IAAuBF,EAAQjmD,QAAQomD,MAC7DnqV,OAAM,MAEVA,OAAM,IAEPqqV,GAAc,CAChBh7C,eAAgBu6C,GAChBE,cAAeA,GACfC,gCAAiCA,IAG/BO,GAAgB,SAAU/kN,EAAOxnG,GACnC,MAAO,CACLwnG,MAAOjpI,EAASipI,GAChBxnG,SAAUzhC,EAASyhC,KAGnBwsT,GAAgB,SAAU9oV,EAAMq6B,GAClC,MAAO,CACLr6B,KAAMnF,EAASmF,GACfq6B,GAAIx/B,EAASw/B,KAGb0uT,GAAmB,SAAUhyQ,EAAUpuC,GACzC,IAAI01H,EAAUnqJ,GAAQZ,QAAQyjE,GAC1BgnD,EAAe7pH,GAAQZ,QAAQq1B,EAAIrhB,aACvC,OAAOshU,GAAYh7C,eAAevvI,EAAStgC,GAAch/H,KAAI,SAAU+kI,GACrE,OAAO+kN,GAAc/kN,EAAOn7F,OAG5BqgT,GAAoB,SAAUF,GAChC,OAAwE,IAAjEhrV,GAAGgrV,EAAc9oV,OAAO8jI,QAASglN,EAAczuT,KAAKypG,UAEzDmlN,GAAgB,SAAUH,GAC5B,OAAO/jU,GAAO+jU,EAAc9oV,OAAO8jI,SAAS7kI,MAAK,SAAUiqV,GACzD,OAAOnkU,GAAO+jU,EAAczuT,KAAKypG,SAAS1kI,QAAO,SAAU+pV,GACzD,OAAOrrV,GAAGorV,EAASC,SAEpB7qV,UAEDq3I,GAAa,SAAUmzM,GACzB,OAA+E,IAAxE5qJ,GAAS/oD,uBAAuB2zM,EAAc9oV,OAAO8jI,QAAQjwH,SAA0F,IAAtEqqL,GAAS/oD,uBAAuB2zM,EAAczuT,KAAKypG,QAAQjwH,QAEjJu1U,GAAa,SAAUryQ,EAAUw4H,EAASs5I,GAC5C,OAAI3qJ,GAASZ,KAAKurJ,EAAcvsT,WAAW86C,aAAuD,IAAzCyuP,GAAM/nI,QAAQ+qJ,EAAc/kN,SAC5EktK,GAAYH,YAAW,EAAOg4C,EAAc/kN,QAAQjwH,OAAO5U,MAAK,SAAUoqV,GAC/E,OAAIA,EAAoB/mD,QAAQumD,EAAcvsT,YACrC00Q,GAAYZ,aAAa7gG,EAASx4H,EAAUsyQ,GAAqBpqV,MAAK,SAAUo7B,GACrF,OAAO0uT,GAAiBhyQ,EAAU18C,MAG7Bp6B,EAAOP,KAAKmpV,MAEpBtqV,MAAMsqV,GAEFA,GAGPS,GAAgB,SAAUvyQ,EAAUw4H,EAAS18J,GAC/C,IAAI02S,EAAeR,GAAiBhyQ,EAAUyuN,GAAgBP,eAAepyP,IACzE22S,EAAaD,EAAatqV,MAAK,SAAUwqV,GAC3C,OAAOz4C,GAAYZ,aAAa7gG,EAASx4H,EAAU0yQ,EAASntT,YAAYr9B,MAAK,SAAUo7B,GACrF,OAAO0uT,GAAiBhyQ,EAAU18C,GAAIt7B,KAAI,SAAU0qV,GAClD,OAAOL,GAAWryQ,EAAUw4H,EAASk6I,YAI3C,OAAO5+R,GAAM0+R,EAAcC,EAAYV,IAAe1pV,QAAO,SAAU0pV,GACrE,OAAOE,GAAkBF,IAAkBG,GAAcH,IAAkBnzM,GAAWmzM,OAGtFY,GAAS,SAAU3yQ,EAAUw4H,EAAS18J,GACxC,OAAOA,EAAI8B,UAAY20S,GAAcvyQ,EAAUw4H,EAAS18J,GAAO5yC,EAAOrC,QAEpE+rV,GAAqB,CAAEvrU,KAAMsrU,IAE7BE,GAAgC,SAAU9lN,GAC5C,IAAIj9G,EAAa3B,GAAS4+G,GAC1B,OAAOxgI,EAAUujB,EAAY8vD,IAASv4E,MAAK,WACzC,OAAOyoB,KACN,SAAUzB,GACX,OAAOyB,EAAW7kB,MAAM,EAAGojB,OAG3BykU,GAAkB,SAAU/lN,GAC9B,IAAI5+G,EAAW0kU,GAA8B9lN,GAE7C,OADA9kI,EAAKkmB,EAAUuB,IACRvB,GAEL4kU,GAAkB,SAAU/yQ,EAAU+sD,GACxC,IAAI2sB,EAAUqgK,GAAQD,eAAe/sL,EAAO/sD,GAC5C,OAAO1zE,EAAKotJ,EAAQjtJ,WAAW,SAAUuY,GACvC,OAAO8pT,GAAM/nI,QAAQ/hL,MACpB/c,KAAKynB,KAENsjU,GAAgB,SAAUxsU,GAC5B,OAEc,IAFPne,EAAO6zQ,GAAa11P,IAAK,SAAUA,GACxC,OAAQsoT,GAAM/nI,QAAQvgL,MACrB5iB,QAEDqvV,GAAmB,SAAUjzQ,EAAUkzQ,EAAWC,EAASC,GAC7D,GAAItkB,GAAM/nI,QAAQosJ,GAEhB,OADAxmB,GAAUL,kBAAkB6mB,GACrBl5C,GAAYC,gBAAgBi5C,EAAQr2U,OAEzCk2U,GAAcI,IAAmBtkB,GAAM/nI,QAAQmsJ,IACjDzkU,GAAO2kU,EAAgBj2U,GAAQX,QAAQ,OAEzC,IAAI+oB,EAAW00Q,GAAYD,aAAam5C,EAAQr2U,MAAO2xR,GAAgBhgR,OAAO2kU,EAAet2U,QAK7F,OAJA7U,EAAK6qV,GAAgBI,IAAY,SAAU9kU,GACzCK,GAAO2kU,EAAgBhlU,MAEzB2kU,GAAgB/yQ,EAAUkzQ,GACnB3tT,GAEL8tT,GAAqB,SAAUrzQ,EAAUkzQ,EAAWC,GACtD,GAAIrkB,GAAM/nI,QAAQosJ,GAKhB,OAJAzjU,GAAOyjU,GACHrkB,GAAM/nI,QAAQmsJ,IAChBvmB,GAAUL,kBAAkB4mB,GAEvBj5C,GAAYC,gBAAgBg5C,EAAUp2U,OAE/C,IAAIyoB,EAAW00Q,GAAYE,eAAeg5C,EAAQr2U,OAKlD,OAJA7U,EAAK6qV,GAAgBI,IAAY,SAAU9kU,GACzCW,GAAOokU,EAAS/kU,MAElB2kU,GAAgB/yQ,EAAUkzQ,GACnB3tT,GAEL+tT,GAAqB,SAAUH,EAASpmN,GAC1C,IAAI+sL,EAAiBC,GAAQD,eAAe/sL,EAAOomN,GACnD,OAAOjqV,EAAOD,KAAK6wT,EAAeA,EAAel2T,OAAS,KAExD2vV,GAAoB,SAAUL,EAAWC,GAC3C,OAAOjtU,GAAWitU,EAASD,GAAaI,GAAmBH,EAASD,GAAahqV,EAAOrC,QAEtF2sV,GAAS,SAAU7zR,EAAOotE,GAC5BktK,GAAYH,WAAWn6O,EAAOotE,EAAMjwH,OAAO9U,KAAI,SAAUu9B,GACvD,OAAOA,EAAS86C,aACfr4E,IAAImV,GAAQZ,SAASlU,OAAO+6Q,IAAQn7Q,KAAKynB,KAE1C+jU,GAAiB,SAAUzzQ,EAAUkzQ,EAAWC,GAGlD,OAFAK,IAAO,EAAMN,GACbM,IAAO,EAAOL,GACPI,GAAkBL,EAAWC,GAAS9rV,KAAKnD,EAAMmvV,GAAoBrzQ,EAAUkzQ,EAAWC,GAAUjvV,EAAM+uV,GAAkBjzQ,EAAUkzQ,EAAWC,KAEtJO,GAAc,SAAU1zQ,EAAUw4H,EAASkqI,EAAQC,GACrD,OAAOnqI,EAAUi7I,GAAezzQ,EAAU2iQ,EAAQD,GAAU+Q,GAAezzQ,EAAU0iQ,EAAQC,IAE3FgR,GAAc,CAAED,YAAaA,IAE7Bx/I,GAAkB,SAAU/7H,EAAQqgI,GACtC,IAAIx4H,EAAW7iE,GAAQZ,QAAQ47D,EAAOv8C,WAClC2J,EAAWqtT,GAAmBvrU,KAAK24D,EAASljE,MAAO07L,EAASrgI,EAAOt8B,UAAU6nC,UAAUx7E,MAAK,SAAU6pV,GACxG,OAAO4B,GAAYD,YAAY1zQ,EAAUw4H,EAASu5I,EAAc9oV,OAAO8jI,QAASglN,EAAczuT,KAAKypG,YAKrG,OAHAxnG,EAASt9B,MAAK,SAAU2pC,GACtBumC,EAAOt8B,UAAUm8H,OAAOpmI,EAAIq8P,cAEvB1oQ,EAASh+B,UAEdqsV,GAAsB,CAAE1/I,gBAAiBA,IAEzC2/I,GAAyB,SAAU7zQ,EAAUnkC,GAC/C,IAAIC,EAAMD,EAAU6nC,SACpB,OAAO5vB,GAAM+9R,GAAYh7C,eAAe72N,EAAU7iE,GAAQZ,QAAQu/B,EAAIC,iBAAkB81S,GAAYh7C,eAAe72N,EAAU7iE,GAAQZ,QAAQu/B,EAAIyB,gBAAgB,SAAUmlS,EAAQC,GACjL,OAA2B,IAAvB57U,GAAG27U,EAAQC,KACb7mS,EAAIwjR,iBACJq0B,GAAYD,YAAY1zQ,GAAU,EAAM0iQ,EAAQC,GAAQ16U,MAAK,SAAU2pC,GACrEiK,EAAUm8H,OAAOpmI,EAAIq8P,eAEhB,MAIRzmS,OAAM,IAEPssV,GAAmB,SAAUlzS,EAAMurR,GACrC,IAAIzvT,EAAOS,GAAQZ,QAAQ4vT,GACvB9lT,EAASniB,EAAM6C,GAAI65C,GACvB,OAAOz6B,GAASzJ,EAAM6mQ,GAAal9P,GAAQ9e,UAEzCwsV,GAAqB,SAAUnzS,EAAM9E,GACvC,OAAOg4S,GAAiBlzS,EAAM9E,EAAIC,iBAAmB+3S,GAAiBlzS,EAAM9E,EAAIyB,eAE9Ey2S,GAAuB,SAAUpzS,EAAM9E,GACzC,IAAIm4S,EAAah6C,GAAYD,aAAap5P,EAAK9jC,MAAO2xR,GAAgBP,eAAepyP,IAAM70C,SACvFitV,EAASj6C,GAAYF,aAAan5P,EAAK9jC,MAAO2xR,GAAgBN,aAAaryP,IAAM70C,SACrF,OAAQ8sV,GAAmBnzS,EAAM9E,IAAQm4S,GAAcC,GAErDC,GAAc,SAAUh8Q,GAG1B,OAFAA,EAAOrxB,WAAW,IAClBqxB,EAAOt8B,UAAU8kC,qBACV,GAELyzQ,GAAc,SAAUj8Q,GAC1B,IAAI6H,EAAW7iE,GAAQZ,QAAQ47D,EAAOv8C,WAClCkgB,EAAMq8B,EAAOt8B,UAAU6nC,SAC3B,OAAOswQ,GAAqBh0Q,EAAUlkC,GAAOq4S,GAAYh8Q,GAAU07Q,GAAuB7zQ,EAAU7H,EAAOt8B,YAEzGw4S,GAAoB,SAAUl8Q,EAAQqgI,GACxC,OAAOrgI,EAAOt8B,UAAUmtG,eAAwBorM,GAAYj8Q,IAE1Dm8Q,GAAmB,CAAEpgJ,gBAAiBmgJ,IAEtCE,GAAS,SAAU3iT,GACrB,OAAOimQ,GAAuBjmQ,GAAKzpC,OAAOi7Q,KAExCzpB,GAAS,SAAUnhD,EAAS53J,EAAMhP,GACpC,IAAI4iT,EAAensV,EAAO0xT,GAAQD,eAAe38S,GAAQZ,QAAQq1B,EAAIrhB,aAAcqwB,GAAOg/B,IACtF7jE,EAAQ7O,EAAKsnV,GAAchtV,MAAMo5C,GACrC,OAAOq5P,GAAYZ,aAAa7gG,EAASz8L,EAAMe,MAAO80B,GAAKvpC,OAAOksV,KAEhEE,GAAa,SAAU7zS,EAAMhP,GAC/B,OAAOimQ,GAAuBjmQ,GAAKzpC,OAAOi7Q,KAAWzpB,IAAO,EAAM/4M,EAAMhP,GAAKrqC,UAE3EmtV,GAAY,SAAU9zS,EAAMhP,GAC9B,OAAOkmQ,GAA2BlmQ,GAAKzpC,OAAOi7Q,KAAWzpB,IAAO,EAAO/4M,EAAMhP,GAAKrqC,UAEhFotV,GAAiBzwV,EAAMy1P,IAAQ,GAC/Bi7F,GAAa1wV,EAAMy1P,IAAQ,GAE3Bk7F,GAAoB,SAAUn4U,GAChC,OAAO6mQ,GAAYpmQ,GAAQZ,QAAQG,KAAU6gO,GAAWpgO,GAAQZ,QAAQG,KAEtEo4U,GAAevlV,GAAInB,SAAS,CAC9B,CAAEshB,OAAQ,CAAC,YACX,CAAEqlU,cAAe,CAAC,YAClB,CAAEC,eAAgB,CAAC,eAEjBC,GAAgC,SAAUz8I,EAASvvM,GACrD,IAAIw3E,EAAMx3E,EAAKo3E,SAAoB,IAAZm4H,GACnB08I,EAAgB18I,EAAU,QAAU,SACxC,OAAOrR,GAASv2K,UAAU6vD,IAAQA,EAAIrvD,aAAa,oBAAsB8jU,GAEvEC,GAAiC,SAAUv0S,EAAM43J,EAASvvM,EAAMq6B,GAClE,IAAI40Q,EAAc,SAAUz3N,GAC1B,OAAO+uF,GAASryJ,GAAQZ,QAAQkkE,MAAUq2N,GAAc7tS,EAAMq6B,EAAIsd,IAEpE,OAAO82P,IAAmBl/F,EAASvvM,GAAM5B,MAAK,WAC5C,OAAOqwS,GAAkBl/F,EAASl1K,GAAIj8B,KAAKvD,GAAS,GAAQo0S,KAC3DA,IAEDk9C,GAA8B,SAAUx0S,EAAM43J,EAASvvM,EAAMq6B,GAC/D,IAAI+xT,EAAW/xT,EAAG+8C,SAAoB,IAAZm4H,GAC1B,OAAOq5I,GAAYh7C,eAAe15R,GAAQZ,QAAQqkC,GAAOzjC,GAAQZ,QAAQtT,EAAKo3E,YAAYr4E,KAAI,SAAUstV,GACtG,OAAOxmB,GAAM/nI,QAAQuuJ,GAAYR,GAAaplU,OAAO4lU,EAASx4U,OAASg4U,GAAaC,cAAcM,MACjGttV,SAAQ,WACT,OAAOmB,EAAOP,KAAKmsV,GAAaC,cAAcM,QAG9CE,GAAkB,SAAU30S,EAAM43J,EAASvvM,GAC7C,OAAOgxS,GAAYZ,aAAa7gG,EAAS53J,EAAM33C,GAAMf,MAAK,SAAUo7B,GAClE,OAAIuxT,GAAkBvxT,EAAG+8C,YAEd80Q,GAA+Bv0S,EAAM43J,EAASvvM,EAAMq6B,GADtDp6B,EAAOrC,OAGL2xM,GAAWrR,GAAS/oD,uBAAuB96G,EAAG+8C,aAElC,IAAZm4H,GAAqBrR,GAAS/oD,uBAAuB96G,EAAG+8C,SAAQ,IADlE+0Q,GAA4Bx0S,EAAM43J,EAASvvM,EAAMq6B,GAG/Ck1K,GAAW0xI,GAA4BjhV,KAE3B,IAAZuvM,GAAqByxI,GAA6BhhV,GADpDC,EAAOP,KAAKmsV,GAAaE,eAAe1xT,IAIxCp6B,EAAOrC,WAIhB2uV,GAAgC,SAAUh9I,EAAS/3H,GACrD,OAAI+3H,GAAWrR,GAAS/oD,uBAAuB39D,EAAIvyD,aAC1ChlB,EAAOP,KAAKmsV,GAAaC,cAAct0Q,EAAIvyD,eAC7B,IAAZsqL,GAAqBrR,GAAS/oD,uBAAuB39D,EAAIqmH,iBAC3D59L,EAAOP,KAAKmsV,GAAaC,cAAct0Q,EAAIqmH,kBAE3C59L,EAAOrC,QAGd4uV,GAAyC,SAAU70S,EAAM33C,EAAMysV,GACjE,OAAOA,EAAaruV,MAAK,SAAUo5E,GACjC,OAAOv3E,EAAOP,KAAKmsV,GAAaplU,OAAO+wD,OACtC,SAAUA,GACX,OAAOv3E,EAAOP,KAAKmsV,GAAaC,cAAct0Q,OAC7C,SAAUn9C,GACX,OAAIwzQ,GAAc7tS,EAAMq6B,EAAIsd,GACnB13C,EAAOrC,OAEPqC,EAAOP,KAAKmsV,GAAaE,eAAe1xT,QAIjDqyT,GAA2B,SAAU/0S,EAAM43J,EAASvvM,GACtD,OAAIgsV,GAA8Bz8I,EAASvvM,GAClCusV,GAA8Bh9I,EAASvvM,EAAKo3E,SAAoB,IAAZm4H,IAAoBnxM,MAAK,WAClF,OAAOkuV,GAAgB30S,EAAM43J,EAASvvM,KACrCC,EAAOP,MAEH4sV,GAAgB30S,EAAM43J,EAASvvM,GAAMf,MAAK,SAAUwtV,GACzD,OAAOD,GAAuC70S,EAAM33C,EAAMysV,OAI5DE,GAAS,SAAUh1S,EAAM43J,EAAS18J,GACpC,IAAI87P,EAAkB1pG,GAAesK,EAAU,GAAK,EAAG53J,EAAM9E,GACzD7yC,EAAOwlS,GAAgBP,eAAe0J,GACtCmd,EAAc53S,GAAQZ,QAAQqkC,GAClC,OAAgB,IAAZ43J,GAAqB0xI,GAA4BjhV,GAC5CC,EAAOP,KAAKmsV,GAAaplU,OAAOzmB,EAAKo3E,SAAQ,KAC3Cm4H,GAAWyxI,GAA6BhhV,GAC1CC,EAAOP,KAAKmsV,GAAaplU,OAAOzmB,EAAKo3E,aACvB,IAAZm4H,GAAqByxI,GAA6BhhV,IAASyrV,GAAU3/B,EAAa9rT,GACpF0rV,GAAe5/B,EAAa9rT,GAAMjB,KAAI,SAAU6xP,GACrD,OAAOi7F,GAAaplU,OAAOmqO,EAAGx5K,cAEvBm4H,GAAW0xI,GAA4BjhV,IAASwrV,GAAW1/B,EAAa9rT,GAC1E2rV,GAAW7/B,EAAa9rT,GAAMjB,KAAI,SAAU6xP,GACjD,OAAOi7F,GAAaplU,OAAOmqO,EAAGx5K,cAGzBs1Q,GAAyB/0S,EAAM43J,EAASvvM,IAI/C4sV,GAAkB,SAAU19Q,EAAQqgI,GACtC,OAAO,SAAUxzL,GAGf,OAFAmzD,EAAOyzO,oBAAoBkqC,gBAC3BtlB,GAAcL,cAAch4P,EAAQqgI,EAASr7L,GAAQZ,QAAQyI,KACtD,IAGP+vU,GAAgB,SAAU58Q,EAAQqgI,GACpC,OAAO,SAAUxzL,GACf,IAAI4sB,EAAM4mK,EAAUi2F,GAAgBhgR,OAAOzJ,GAAWypR,GAAgB5/Q,MAAM7J,GAE5E,OADAmzD,EAAOt8B,UAAUm8H,OAAOpmI,EAAIq8P,YACrB,IAGP+mD,GAAiB,SAAU78Q,GAC7B,OAAO,SAAUvmC,GAEf,OADAumC,EAAOt8B,UAAUm8H,OAAOpmI,EAAIq8P,YACrB,IAGP8nD,GAAgB,SAAU59Q,EAAQz7D,GACpC,OAAOxT,EAAOD,KAAK+sV,GAAyB79Q,EAAOv8C,UAAWlf,KAE5Dq3L,GAAuB,SAAU57H,EAAQqgI,GAC3C,IAAIhX,EAAerpH,EAAOt8B,UAAUwkC,UACpC,OAAO01Q,GAAc59Q,EAAQqpH,GAAcn5L,OAAO8+L,GAAS/oD,wBAAwB/2I,MAAK,WACtF,IAAIsL,EAASijV,GAAOz9Q,EAAOv8C,UAAW48K,EAASrgI,EAAOt8B,UAAU6nC,UAAU17E,KAAI,SAAU0tV,GACtF,OAAOA,EAAaruV,KAAKwuV,GAAgB19Q,EAAQqgI,GAAUu8I,GAAc58Q,EAAQqgI,GAAUw8I,GAAe78Q,OAE5G,OAAOxlE,EAAOnL,OAAM,MACnB,WACD,OAAO,MAGPyuV,GAA2B,SAAUlhC,GACvC9sT,EAAKw+E,GAAcsuO,EAAa,4BAA6BrlS,KAE3DskL,GAAuB,SAAU77H,EAAQqgI,GAC3C,IAAIhX,EAAerpH,EAAOt8B,UAAUwkC,UACpC,GAAI8mH,GAAS/oD,uBAAuBojD,GAAe,CACjD,IAAI00J,EAAiBH,GAAc59Q,EAAQqpH,EAAaj7K,YAAYle,OAAO8+L,GAAS/oD,wBACpF,OAAO83M,EAAe7uV,MAAK,WAIzB,OAHA4uV,GAAyB94U,GAAQZ,QAAQ47D,EAAOv8C,YAChD40S,GAAcL,cAAch4P,EAAQqgI,EAASr7L,GAAQZ,QAAQ47D,EAAOt8B,UAAUwkC,YAC9EwxQ,GAAYP,cAAcn5Q,IACnB,KACN,WACD,OAAO,KAGX,OAAO,GAEL69Q,GAA2B,SAAUp1S,EAAMlkC,GAC7C,MAAOA,GAAQA,IAASkkC,EAAM,CAC5B,GAAIumJ,GAAShpD,sBAAsBzhI,IAASyqL,GAAS/oD,uBAAuB1hI,GAC1E,OAAOA,EAETA,EAAOA,EAAK6J,WAEd,OAAO,MAEL4vU,GAAmB,SAAUh+Q,GAC/B,IAAI0hL,EACAsvF,EAAS6M,GAAyB79Q,EAAOv8C,UAAWu8C,EAAOt8B,UAAUwkC,WAOzE,OANI8mH,GAAShpD,sBAAsBgrM,IAAWhxQ,EAAOr7D,IAAI8iE,QAAQupQ,IAAWhxQ,EAAOr7D,IAAIiqL,QAAQoiJ,KAC7FtvF,EAAK1hL,EAAOr7D,IAAIiwB,OAAO,KAAM,CAAE,iBAAkB,MACjDorC,EAAOr7D,IAAI0kR,QAAQ2nD,EAAQ,IAC3BA,EAAOj6T,YAAY2qO,GACnB1hL,EAAOt8B,UAAUm8H,OAAOy2H,GAAgBhgR,OAAOorO,GAAIo0C,aAE9C,GAELmoD,GAAoB,SAAUj+Q,EAAQqgI,GACxC,OAAIrgI,EAAOt8B,UAAUmtG,cACZ+qD,GAAqB57H,EAAQqgI,GAE7BxE,GAAqB77H,EAAQqgI,IAGpC69I,GAAY,CACdniJ,gBAAiBkiJ,GACjBD,iBAAkBA,IAGhBG,GAAsB,SAAUx5U,EAAKJ,GACnCyqL,GAASt2K,OAAOnU,IAA8B,IAArBA,EAAKiO,KAAK/mB,QACrCkZ,EAAI4S,OAAOhT,IAGX65U,GAA4B,SAAUp+Q,EAAQ1sE,EAAOiR,EAAM40B,EAAWknK,EAASg0I,GACjF,IAAInD,EAAaP,GAAUx3S,EAAW6mC,EAAQq0Q,EAAkBnsQ,SAASm4H,GAAUA,GAAS,GAC5F,GAAI/sM,EAAMmyC,UAAW,CACnB,IAAIw2S,EAAc3oV,EAAMm2E,aACpB42H,EACF47I,EAAYz3S,OAAO0sS,EAAWttS,eAAgBstS,EAAW/rS,aAEzD82S,EAAY93S,SAAS+sS,EAAW9rS,aAAc8rS,EAAW7rS,WAE3D42S,EAAY90B,sBAEZ7zT,EAAM6zT,iBAIR,OAFAnnP,EAAOt8B,UAAUm8H,OAAOqxK,GACxBiN,GAAoBn+Q,EAAOr7D,IAAKJ,IACzB,GAEL85U,GAAwB,SAAUr+Q,EAAQqgI,GAC5C,IAAI/sM,EAAQ0sE,EAAOt8B,UAAU6nC,SAC7B,IAAKyjH,GAASt2K,OAAOplB,EAAMmxT,yBACzB,OAAO,EAET,IAAItrR,EAAYknK,EAAUg2F,GAAWuK,SAAWvK,GAAW2K,UACvDiuC,EAAcluC,GAAY/gO,EAAOv8C,WACjCwxT,EAA6BlpV,EAAM6zS,GAAwBqvC,EAAY9tU,MACvE+zU,EAA6BnpV,EAAM6zS,GAAwBqvC,EAAYv+K,MACvEujL,EAAe5zI,EAAU40I,EAA6BC,EACtDhB,EAAiC7zI,EAAUyxI,GAA+BC,GAC1Et8C,EAAgB+J,GAA2BrmQ,EAAW6mC,EAAOv8C,UAAWnwB,GACxE8gV,EAAoBvJ,GAAYH,kBAAkBrqI,EAAS4zI,EAAax+C,IAC5E,IAAK2+C,IAAsBt0C,GAAsBrK,EAAe2+C,GAC9D,OAAO,EACF,GAAIF,EAA+BE,GACxC,OAAOgK,GAA0Bp+Q,EAAQ1sE,EAAOmiS,EAAcvtN,UAAW/uC,EAAWknK,EAAS+zI,GAE/F,IAAIC,EAAoBJ,EAAaG,GACrC,SAAIC,GAAqBH,EAA+BG,IAClDv0C,GAAsBs0C,EAAmBC,KACpC+J,GAA0Bp+Q,EAAQ1sE,EAAOmiS,EAAcvtN,UAAW/uC,EAAWknK,EAASg0I,IAK/FiK,GAAoB,SAAUt+Q,EAAQqgI,GACxC,OAAOg+I,GAAsBr+Q,EAAQqgI,IAEnCk+I,GAAoB,CAAExiJ,gBAAiBuiJ,IAEvCE,GAAqB,SAAUx+Q,GACjC,OAA6C,IAAtCA,EAAOC,SAASgtQ,mBAErBwR,GAAqB,SAAU3tV,EAAMq6B,GACvC,IAAI73B,EAAQvI,EAAW+Y,SAAS6gC,cAGhC,OAFArxC,EAAM6wC,SAASrzC,EAAKsnB,YAAatnB,EAAK87B,UACtCt5B,EAAMkxC,OAAOrZ,EAAG/S,YAAa+S,EAAGyB,UACzBt5B,GAELorV,GAAgC,SAAUp2Q,GAC5C,OAAO3sB,GAAMmmP,GAAYC,gBAAgBz5N,GAAMw5N,GAAYE,eAAe15N,IAAM,SAAUgxQ,EAAUtG,GAClG,IAAIuG,EAAqB1O,GAAYH,mBAAkB,EAAM4O,GACzDE,EAAoB3O,GAAYH,mBAAkB,EAAOsI,GAC7D,OAAOlxC,GAAYF,aAAat5N,EAAKixQ,GAAoB1pV,KAAI,SAAU4pC,GACrE,OAAOA,EAAI25P,QAAQomD,MAClBnqV,OAAM,MACRA,OAAM,IAEPsvV,GAAmB,SAAU3+Q,EAAQqU,GACvC,OAAO,SAAUkyF,GACf,OAAOwjK,GAAcD,YAAYz1P,EAAOkyF,GAAU12K,KAAI,SAAU4pC,GAE9D,OADAs0S,GAAkBhB,iBAAiB/sQ,EAAQvmC,IACpC,KACNpqC,OAAM,KAGTuvV,GAAe,SAAU5+Q,EAAQqU,EAAOvjF,EAAMq6B,GAChD,IAAI08C,EAAW7H,EAAOv8C,UAClBymT,EAAiBn+U,EAAM8+U,GAAYX,eAAgBlqQ,GACvDA,EAAOigB,YAAYtvB,QAAO,WACxBqP,EAAOt8B,UAAUm8H,OAAO4+K,GAAmB3tV,EAAMq6B,IACjD60C,EAAOkhB,YAAY,UACnBsrP,GAAiBf,aAAavB,EAAgBriQ,EAAUyuN,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,WAAW17E,IAAI28U,GAAiBxwR,QAAQnsD,IAAI8uV,GAAiB3+Q,EAAQqU,OAE/KrU,EAAOogB,eAELy+P,GAAY,SAAUh3Q,EAAUtjE,GAClC,IAAIk3L,EAAcijG,GAAen6R,EAAMsjE,GACvC,OAAO4zH,GAA4B5zH,GAEjCi3Q,GAA2B,SAAU9+Q,EAAQqU,EAAOgsH,EAASvvM,GAC/D,IAAI+2E,EAAWg3Q,GAAU7+Q,EAAOv8C,UAAW3yB,EAAKsnB,aAC5C8xT,EAAiBn+U,EAAM8+U,GAAYX,eAAgBlqQ,GACnDmsQ,EAAeK,GAAiBf,aAAavB,EAAgBriQ,EAAU/2E,GAC3E,OAAOq7U,EAAap8U,MAAK,SAAUw2K,GACjC,OAAI85B,EACK95B,EAASr3K,KAAKvD,EAASoF,EAAOP,KAAKg8U,GAAiBxwR,OAAOuqH,KAAax1K,EAAOrC,KAAM/C,EAASoF,EAAOP,KAAKg8U,GAAiBb,QAAQplK,KAAax1K,EAAOrC,MAEvJ63K,EAASr3K,KAAK6B,EAAOrC,KAAM/C,EAASoF,EAAOP,KAAKg8U,GAAiBb,QAAQplK,KAAax1K,EAAOrC,KAAM/C,EAASoF,EAAOP,KAAKg8U,GAAiBxwR,OAAOuqH,SAExJ12K,IAAI8uV,GAAiB3+Q,EAAQqU,IAAQ/kF,YAAW,WACjD,IAAIyvV,EAAaj9C,GAAY5+O,SAASm9I,EAASx4H,EAAU/2E,GACrDs7U,EAAa2S,EAAWhvV,MAAK,SAAU0pC,GACzC,OAAO+yS,GAAiBf,aAAavB,EAAgBriQ,EAAUpuC,MAEjE,OAAI0yS,EAAa/8U,UAAYg9U,EAAWh9U,SAC/By7U,GAAYR,eAAeH,EAAgBriQ,EAAU/2E,GAAMjB,KAAI,SAAUy4E,GAC9E,QAAIo2Q,GAA8Bp2Q,KAChC+vP,GAAcL,cAAch4P,EAAQqgI,EAASr7L,GAAQZ,QAAQkkE,KACtD,MAIRj5E,OAAM,GAEF+8U,EAAWr8U,MAAK,SAAUmB,GAC/B,OAAO6tV,EAAWlvV,KAAI,SAAUs7B,GAM9B,OALIk1K,EACFu+I,GAAa5+Q,EAAQqU,EAAOvjF,EAAMq6B,GAElCyzT,GAAa5+Q,EAAQqU,EAAOlpD,EAAIr6B,IAE3B,QAERzB,OAAM,OAIX2vV,GAAoB,SAAUh/Q,EAAQqU,EAAOgsH,GAC/C,GAAIrgI,EAAOt8B,UAAUmtG,eAAiB2tM,GAAmBx+Q,GAAS,CAChE,IAAIlvE,EAAOwlS,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UAC3D,OAAOuzQ,GAAyB9+Q,EAAQqU,EAAOgsH,EAASvvM,GAE1D,OAAO,GAELmuV,GAAiB,CAAEljJ,gBAAiBijJ,IAEpCE,GAAmB,SAAU/vL,EAAS8uJ,GACxC,IAAI18J,EAAUqgK,GAAQD,eAAe1D,EAAU9uJ,GAC/C,OAAO/6J,EAAUmtJ,EAAS95E,IAASv4E,KAAKvD,EAAS41J,IAAU,SAAUrrI,GACnE,OAAOqrI,EAAQzuJ,MAAM,EAAGojB,OAGxBipU,GAAkB,SAAU72Q,GAC9B,OAAgC,IAAzBtyD,GAASsyD,GAAK78E,QAEnB2zV,GAAqB,SAAU/+I,EAASrgI,EAAQjpE,EAAQsoV,GAC1D,IAAIC,EAAoBvzV,EAAMguU,GAAiB/5P,GAC3Cm5P,EAActpU,EAAIK,EAAOmvV,EAAeC,IAAoB,SAAUh3Q,GACxE,OAAOA,EAAI3jE,SAEb,GAA2B,IAAvBw0T,EAAY1tU,OACd4sU,GAAcL,cAAch4P,EAAQqgI,EAAStpM,OACxC,CACL,IAAI0iC,EAAMogS,GAAuB9iU,EAAO4N,MAAOw0T,GAC/Cn5P,EAAOt8B,UAAUm8H,OAAOpmI,EAAIq8P,aAG5BypD,GAAc,SAAUv/Q,EAAQqgI,GAClC,IAAIlxC,EAAUnqJ,GAAQZ,QAAQ47D,EAAOv8C,WACjCw6R,EAAWj5S,GAAQZ,QAAQ47D,EAAOt8B,UAAUd,YAC5Cy8S,EAAgBnvV,EAAOgvV,GAAiB/vL,EAAS8uJ,GAAWkhC,IAChE,OAAOnqV,EAAKqqV,GAAexvV,KAAI,SAAUkH,GACvC,IAAIsiV,EAAU/iD,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UAC9D,SAAImuQ,GAAYN,gCAAgC/4I,EAASg5I,EAAStiV,EAAO4N,QAAWs1T,GAA0BljU,MAC5GqoV,GAAmB/+I,EAASrgI,EAAQjpE,EAAQsoV,IACrC,MAIRhwV,OAAM,IAEPmwV,GAAoB,SAAUx/Q,EAAQqgI,GACxC,QAAOrgI,EAAOt8B,UAAUmtG,eAAgB0uM,GAAYv/Q,EAAQqgI,IAE1Do/I,GAAqB,CAAE1jJ,gBAAiByjJ,IAExCE,GAAe,SAAUj1U,EAAO8sG,GAClC,MAAO,CACL9sG,MAAO9e,EAAS8e,GAChB8sG,IAAK5rH,EAAS4rH,KAGdooO,GAAiB,SAAUh8S,EAAKq9F,EAAOtnD,GACzC,MAAO,CACL/1C,IAAKh4C,EAASg4C,GACdq9F,MAAOr1I,EAASq1I,GAChBtnD,MAAO/tF,EAAS+tF,KAGhB6jQ,GAAenmV,GAAInB,SAAS,CAC9B,CAAE2pV,YAAa,CAAC,YAChB,CAAEC,WAAY,CAAC,YAEbC,GAAoB,SAAUr3S,GAChC,OAAO,SAAU25I,GACf,OAAOxzL,GAAG65C,EAAM25I,KAGhB29J,GAAmB,SAAU3nU,EAAWlK,GAC1C,OAAO8F,GAAUhP,GAAQZ,QAAQgU,GAAY,QAASlK,IAEpD8xU,GAAkB,SAAUh2R,EAAM97C,GACpC,OAAOqf,GAAWy8B,EAAM,QAAS97C,IAE/B+xU,GAAoB,SAAUC,GAChC,OAA8C,IAAvCtxV,GAAGsxV,EAAQz1U,QAASy1U,EAAQ3oO,QAEjC4oO,GAAsB,SAAUD,EAAShyU,GAC3C,OAAO8xU,GAAgBE,EAAQz1U,QAASyD,GAAQne,MAAK,SAAUqwV,GAC7D,OAAOJ,GAAgBE,EAAQ3oO,MAAOrpG,GAAQne,MAAK,SAAUswV,GAC3D,OAAOxsD,GAAOjlS,GAAGwxV,EAAkBC,GAAiBD,UAItDE,GAAgB,SAAUt/M,GAC5B,OAAO1yD,GAAc0yD,EAAO,UAE1Bu/M,GAA6B,SAAUL,EAAShyU,GAClD,OAAO8xU,GAAgBE,EAAQz1U,QAASyD,GAAQne,MAAK,SAAUixI,GAC7D,OAAOhsI,EAAKsrV,GAAct/M,IAAQnxI,KAAI,SAAU2wV,GAC9C,OAAOd,GAAaQ,EAAQz1U,QAAS+1U,UAIvCC,GAAmB,SAAUvyU,EAAQy1B,GACvC,IAAIqnI,EAAY+0K,GAAiBp8S,EAAIC,eAAgB11B,GACjDsyU,EAAUT,GAAiBp8S,EAAIyB,aAAcl3B,GACjD,OAAOy1B,EAAI8B,UAAY10C,EAAOrC,OAASitD,GAAMqvH,EAAWw1K,EAASd,IAAcxwV,MAAK,WAClF,OAAO87K,EAAU97K,MAAK,WACpB,OAAOsxV,EAAQzwV,MAAK,SAAUywV,GAC5B,OAAOR,GAAgBQ,EAAStyU,GAAQne,MAAK,SAAUixI,GACrD,OAAOjsI,EAAKurV,GAAct/M,IAAQnxI,KAAI,SAAUm7K,GAC9C,OAAO00K,GAAa10K,EAAWw1K,eAIpC,SAAUx1K,GACX,OAAOg1K,GAAgBh1K,EAAW98J,GAAQne,MAAK,SAAUixI,GACvD,OAAOhsI,EAAKsrV,GAAct/M,IAAQnxI,KAAI,SAAU2wV,GAC9C,OAAOd,GAAa10K,EAAWw1K,eAIpC,SAAUN,GACX,OAAOQ,GAAkBxyU,EAAQgyU,GAAWnvV,EAAOrC,OAAS6xV,GAA2BL,EAAShyU,OAGhGwyU,GAAoB,SAAUxyU,EAAQgyU,GACxC,OAAOC,GAAoBD,EAAShyU,GAAQ9e,UAE1CuxV,GAAa,SAAUh9S,EAAKz1B,GAC9B,IAAI88J,EAAY+0K,GAAiBp8S,EAAIC,eAAgB11B,GACjDsyU,EAAUT,GAAiBp8S,EAAIyB,aAAcl3B,GACjD,OAAOytC,GAAMqvH,EAAWw1K,EAASd,IAAcxvV,OAAO+vV,IAAmB/vV,QAAO,SAAUgwV,GACxF,OAAOQ,GAAkBxyU,EAAQgyU,MAChCtwV,SAAQ,WACT,OAAO6wV,GAAiBvyU,EAAQy1B,OAGhCi9S,GAA+B,SAAUV,EAAShyU,GACpD,OAAOiyU,GAAoBD,EAAShyU,GAAQre,KAAI,SAAUmxI,GACxD,OAAO2+M,GAAeO,EAASl/M,EAAOs/M,GAAct/M,QAGpD6/M,GAA2B,SAAUp4S,EAAM9E,GAC7C,IAAIz1B,EAAS4xU,GAAkBr3S,GAC/B,OAAOk4S,GAAWh9S,EAAKz1B,GAAQne,MAAK,SAAUmwV,GAC5C,OAAOU,GAA6BV,EAAShyU,OAG7C4yU,GAAe,SAAUpnQ,EAAO1vB,GAClC,OAAO51D,EAAUslF,GAAO,SAAU5tF,GAChC,OAAO8C,GAAG9C,EAAGk+D,OAGb+2R,GAAmB,SAAUpB,GAC/B,OAAOhkS,GAAMmlS,GAAanB,EAAejmQ,QAASimQ,EAAeh8S,MAAMl5B,SAAUq2U,GAAanB,EAAejmQ,QAASimQ,EAAeh8S,MAAM4zE,QAAQ,SAAUo0G,EAAYpvM,GACvK,OAAOojU,EAAejmQ,QAAQ5mF,MAAM64N,EAAYpvM,EAAW,OAG3DmnG,GAAY,SAAUi8N,GACxB,OAAOoB,GAAiBpB,GAAgB9vV,KAAI,SAAUsuD,GACpD,IAAIu7B,EAAQimQ,EAAejmQ,QAC3B,OAAOv7B,EAAS1yD,SAAWiuF,EAAMjuF,OAAS8xV,GAAaqC,YAAYD,EAAe3+M,SAAWu8M,GAAasC,WAAW1hS,OAGrH6iS,GAAqB,SAAUv4S,EAAM9E,GACvC,OAAOk9S,GAAyBp4S,EAAM9E,GAAK5zC,KAAK2zH,KAG9Cm8N,GAAa,SAAU7/Q,EAAQ0Z,GAGjC,OAFA5pF,EAAK4pF,EAAO86O,GAAUL,mBACtBn0P,EAAOt8B,UAAU8kC,kBAAkBkR,EAAM,GAAG/0E,MAAO,IAC5C,GAELs8U,GAAqB,SAAUjhR,EAAQghE,GAEzC,OADAq3L,GAAcL,cAAch4P,GAAQ,EAAOghE,IACpC,GAELkgN,GAAkB,SAAUlhR,EAAQmvF,EAASxrH,GAC/C,OAAOq9S,GAAmB7xL,EAASxrH,GAAK9zC,KAAI,SAAUqjB,GACpD,OAAOA,EAAOhkB,KAAKnD,EAAMk1V,GAAoBjhR,GAASj0E,EAAM8zV,GAAY7/Q,QAGxEmhR,GAAqB,SAAUnhR,EAAQquK,GACzC,OAAO+yG,GAAaphR,EAAQquK,IAE1BgzG,GAAmB,SAAUrhR,EAAQmvF,EAASxrH,EAAKs6Q,GACrD,OAAOqjC,GAAiBnyL,EAAS8uJ,GAAU/uT,MAAK,WAC9C,OAAOgyV,GAAgBlhR,EAAQmvF,EAASxrH,MACvC,SAAU0qM,GACX,OAAO8yG,GAAmBnhR,EAAQquK,MACjCh/O,OAAM,IAEPkyV,GAAgB,SAAUvhR,EAAQi+O,GACpC,IAAIp2O,EAAW7iE,GAAQZ,QAAQ47D,EAAOv8C,WAClCkgB,EAAMq8B,EAAOt8B,UAAU6nC,SACvB8/J,EAAgB44E,GAAmBD,mBAAmBhkP,GAC1D,OAAgC,IAAzBqrK,EAAc5/O,OAAeo0V,GAAW7/Q,EAAQqrK,GAAiBg2G,GAAiBrhR,EAAQ6H,EAAUlkC,EAAKs6Q,IAE9GujC,GAAgB,SAAUryL,EAAS7mF,GACrC,OAAOn0E,EAAKytT,GAAQD,eAAer5O,EAAK6mF,GAAUi8G,KAEhDk2E,GAAmB,SAAUnyL,EAAS7mF,GACxC,OAAOn0E,EAAKytT,GAAQD,eAAer5O,EAAK6mF,IAAU,SAAU7mF,GAC1D,MAAqB,YAAdr2E,GAAKq2E,OAGZm5Q,GAAqB,SAAUzhR,EAAQmvF,EAASkxC,EAASqhJ,EAAU5wV,GACrE,OAAOgxS,GAAY5+O,SAASm9I,EAASrgI,EAAOv8C,UAAW3yB,GAAMf,MAAK,SAAUo7B,GAC1E,OAAOq2T,GAAcryL,EAASnqJ,GAAQZ,QAAQ+mB,EAAG+8C,YAAYr4E,KAAI,SAAU+5D,GACzE,OAAgC,IAAzBh7D,GAAGg7D,EAAQ83R,UAIpBN,GAAe,SAAUphR,EAAQsI,GAGnC,OAFAksP,GAAUL,kBAAkB7rP,GAC5BtI,EAAOt8B,UAAU8kC,kBAAkBF,EAAI3jE,MAAO,GACvC5T,EAAOP,MAAK,IAEjBmxV,GAAwB,SAAUC,EAAavhJ,EAASvvM,EAAMq6B,GAChE,OAAO22Q,GAAYC,gBAAgB6/C,EAAYj9U,OAAO5U,MAAK,SAAUy3D,GACnE,OAAOs6O,GAAYE,eAAe4/C,EAAYj9U,OAAO9U,KAAI,SAAUmF,GACjE,OAAOqrM,EAAUvvM,EAAKsiS,QAAQ5rO,IAAUr8B,EAAGioQ,QAAQp+R,GAAQlE,EAAKsiS,QAAQp+R,IAASm2B,EAAGioQ,QAAQ5rO,SAE7Fn4D,OAAM,IAEPwyV,GAAoB,SAAU7hR,EAAQsI,GACxC,OAAO84Q,GAAaphR,EAAQsI,IAE1Bw5Q,GAAuB,SAAU3yL,EAASyyL,EAAaz2T,GACzD,OAAOm2T,GAAiBnyL,EAASnqJ,GAAQZ,QAAQ+mB,EAAG+8C,YAAYr4E,KAAI,SAAUkyV,GAC5E,OAAsC,IAA/BnzV,GAAGmzV,EAAWH,OAGrBI,GAA2B,SAAUhiR,EAAQmvF,EAASkxC,EAASuhJ,EAAa9wV,GAC9E,OAAOgxS,GAAY5+O,SAASm9I,EAASrgI,EAAOv8C,UAAW3yB,GAAMf,MAAK,SAAUo7B,GAC1E,OAAOw2T,GAAsBC,EAAavhJ,EAASvvM,EAAMq6B,GAAM02T,GAAkB7hR,EAAQ4hR,GAAeE,GAAqB3yL,EAASyyL,EAAaz2T,MAClJx7B,GAAGoB,EAAOP,MAAK,KAEhByxV,GAAmB,SAAUjiR,EAAQqgI,EAASlxC,EAAS8uJ,GACzD,IAAIntT,EAAOwlS,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UAC3D,OAAOi2Q,GAAcryL,EAAS8uJ,GAAUluT,MAAK,SAAU2xV,GACrD,OAAO/qB,GAAM/nI,QAAQ8yJ,GAAYN,GAAaphR,EAAQ0hR,GAAYD,GAAmBzhR,EAAQmvF,EAASkxC,EAASqhJ,EAAU5wV,MACxHzB,OAAM,IAEP6yV,GAAqB,SAAUliR,EAAQqgI,EAASlxC,EAASyyL,GAC3D,IAAI9wV,EAAOwlS,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UAC3D,OAAOorP,GAAM/nI,QAAQgzJ,GAAeR,GAAaphR,EAAQ4hR,GAAeI,GAAyBhiR,EAAQmvF,EAASkxC,EAASuhJ,EAAa9wV,IAEtIqxV,GAAc,SAAU9hJ,EAAS5mK,GACnC,OAAO4mK,EAAUuxI,GAAcn4S,GAAOo4S,GAAap4S,IAEjD2oT,GAAuB,SAAUpiR,EAAQqgI,GAC3C,IAAIg5I,EAAU/iD,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UAC9D,OAAO42Q,GAAY9hJ,EAASg5I,IAAYv3C,GAAYZ,aAAa7gG,EAASrgI,EAAOv8C,UAAW41T,GAASxpV,KAAI,SAAU4pC,GACjH,OAAO0oT,GAAY9hJ,EAAS5mK,MAC3BpqC,OAAM,IAEPgzV,GAAgB,SAAUriR,EAAQqgI,EAAS49G,GAC7C,IAAI9uJ,EAAUnqJ,GAAQZ,QAAQ47D,EAAOv8C,WACrC,OAAO69T,GAAiBnyL,EAAS8uJ,GAAU/uT,MAAK,WAC9C,OAAO+yV,GAAiBjiR,EAAQqgI,EAASlxC,EAAS8uJ,IAAamkC,GAAqBpiR,EAAQqgI,MAC3F,SAAUuhJ,GACX,OAAOM,GAAmBliR,EAAQqgI,EAASlxC,EAASyyL,GAAavyV,OAAM,OAGvEizV,GAAoB,SAAUtiR,EAAQqgI,GACxC,IAAI49G,EAAWj5S,GAAQZ,QAAQ47D,EAAOt8B,UAAUd,UAAS,IACrD82C,EAAQuqO,GAAmBD,mBAAmBhkP,GAClD,OAAOA,EAAOt8B,UAAUmtG,eAAkC,IAAjBn3D,EAAMjuF,OAAe42V,GAAcriR,EAAQqgI,EAAS49G,GAAYsjC,GAAcvhR,EAAQi+O,IAE7HskC,GAAc,CAAExmJ,gBAAiBumJ,IAEjCE,GAAgB,SAAUxiR,EAAQqgI,GACpC,IAAIg5I,EAAU/iD,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UAC9D,OAAOu2N,GAAYZ,aAAa7gG,EAASrgI,EAAOv8C,UAAW41T,GAASnpV,QAAO,SAAUupC,GACnF,OAAO4mK,EAAUqxI,GAAmBj4S,GAAOk4S,GAAkBl4S,MAC5D1pC,MAAK,SAAU0pC,GAChB,OAAO1oC,EAAOD,KAAKguS,GAA6Bz+F,EAAU,GAAK,EAAG5mK,OACjE5pC,KAAI,SAAUy4E,GAEf,OADAtI,EAAOt8B,UAAUs+C,OAAO1Z,IACjB,KACNj5E,OAAM,IAEPozV,GAAoB,SAAUziR,EAAQqgI,GACxC,QAAOrgI,EAAOt8B,UAAUmtG,eAAgB2xM,GAAcxiR,EAAQqgI,IAE5DqiJ,GAAkB,CAAE3mJ,gBAAiB0mJ,IAErCE,GAAe,SAAU5rV,GAC3B,OAAOwX,GAAQxX,GAAQ,SAAUuxE,GAC/B,OAAO0mH,GAAShpD,sBAAsB19D,EAAI3jE,QAAUqqL,GAAS/oD,uBAAuB39D,EAAI3jE,UACvF3U,QAAO,SAAUs4E,GAClB,OAAO0mH,GAAShpD,sBAAsB19D,EAAI3jE,WAG1Ci+U,GAAmB,SAAUh3V,GAC/B,IAAI+U,EAASinB,SAASh8B,EAAO,IAC7B,OAAOi8B,MAAMlnB,GAAU,EAAIA,GAEzBkiV,GAAqB,SAAUC,EAAWj2U,GAC5C,IAAIk2U,EAAkBD,GAAa93E,GAAUn+P,GAAW,SAAW,UAC/DjC,EAAyC,QAAhCuZ,GAAMtX,EAAS,aAAyB,SAAW,QAChE,OAAOk2U,EAAkBn4U,GAEvBo4U,GAAgB,SAAUr+U,EAAKm6I,EAASgkM,EAAWl3V,EAAO8pE,EAAM7oD,GAClE,IAAIk2U,EAAkBF,GAAmBC,EAAW99U,GAAQZ,QAAQyI,IACpE,GAAgB,YAAZiyI,EAAuB,CACzB,IAAIu3D,EAAa57L,KAAKqN,IAAI,EAAG86T,GAAiB/1U,EAAQwW,MAAM0/T,IAAoBn3V,GAChF+Y,EAAI6yL,SAAS3qL,EAASk2U,EAAiB1sI,EAAaA,EAAa3gJ,EAAO,QACnE,CACD2gJ,EAAausI,GAAiB/1U,EAAQwW,MAAM0/T,IAAoBn3V,EAAQ8pE,EAC5E/wD,EAAI6yL,SAAS3qL,EAASk2U,EAAiB1sI,KAGvC4sI,GAAiB,SAAUjjR,EAAQqzI,GACrC,OAAOpjN,EAAOojN,GAAQ,SAAUz+E,GAC9B,IAAImuN,EAAkBF,GAAmB1jQ,GAAS88M,sBAAsBj8N,GAAS40D,GAC7EsuN,EAAc5+T,GAAOswG,EAAOmuN,GAAiBlzV,IAAI+yV,IAAkBvzV,MAAM,GACzE02I,EAAkB/lE,EAAOr7D,IAAI+iE,mBAAmBktD,EAAMjwH,OAC1D,MAA2B,UAApBohI,GAA+Bm9M,EAAc,MAGpDC,GAAa,SAAUnjR,GACzB,IAAIqzI,EAAS+vI,GAAkBpjR,GAC/B,OAAQA,EAAO/tB,KAAKuuB,eAAiB6yI,EAAO5nN,OAAS,GAAKw3V,GAAejjR,EAAQqzI,KAE/EgwI,GAAkB,SAAUh1U,GAC9B,OAAOqiL,GAAOriL,IAAO+2N,GAAW/2N,IAE9Bi1U,GAAwB,SAAUj1U,GACpC,OAAOwH,GAAOxH,GAAIxe,IAAIwzV,IAAiBh0V,OAAM,IAE3C+zV,GAAoB,SAAUpjR,GAChC,OAAO9vE,EAAOL,EAAImwE,EAAOt8B,UAAU+rJ,oBAAqBzqL,GAAQZ,UAAU,SAAUiK,GAClF,OAAQg1U,GAAgBh1U,KAAQi1U,GAAsBj1U,IAAOs0U,GAAat0U,OAG1Emc,GAAS,SAAUw1C,EAAQ8+E,GAC7B,IAAIn6I,EAAMq7D,EAAOr7D,IAAK++B,EAAYs8B,EAAOt8B,UAAWy8C,EAAYngB,EAAOmgB,UACnEkzG,EAAcl0G,GAAS+8M,eAAel8N,GACtCujR,EAAa,YAAYxoQ,KAAKs4G,GAAa,GAC3CmwJ,EAAc57T,SAASyrK,EAAa,IACpCyvJ,EAAY3jQ,GAAS88M,sBAAsBj8N,GAC3C+7P,EAAkB58O,GAASyxG,mBAAmB5wH,GAC7CA,EAAOq9F,kBAAkB,wBAA2Br9F,EAAOq9F,kBAAkB,sBACxD,KAApB0+J,GAA2Bp3T,EAAI2kE,UAAU5lC,EAAUwkC,UAAWvjE,EAAI8iE,UACpE0Y,EAAUz0F,MAAM,OAGpBoE,EAAKszV,GAAkBpjR,IAAS,SAAU40D,GACxCouN,GAAcr+U,EAAKm6I,EAASgkM,EAAWU,EAAaD,EAAY3uN,EAAMjwH,WAItE8+U,GAA+B,SAAUpjJ,EAAS53J,EAAM33C,GAC1D,OAAOgxS,GAAYL,eAAephG,EAAS53J,EAAM33C,EAAMwgV,KAErDoS,GAAkB,SAAUj7S,EAAMhP,GACpC,OAAOtlC,EAAKytT,GAAQD,eAAe38S,GAAQZ,QAAQq1B,EAAIrhB,aAAcqwB,GAAOg/B,KAE1Ek8Q,GAA+B,SAAUtjJ,EAAS53J,EAAMhP,GAC1D,OAAOgqT,GAA6BpjJ,EAAS53J,EAAK9jC,MAAO80B,GAAKxpC,QAAO,SAAU8iV,GAC7E,OAAO2Q,GAAgBj7S,EAAMhP,GAAKvqC,MAAK,WACrC,OAAkD,IAA3CyvS,GAAco0C,EAAQt5S,EAAKgP,EAAK9jC,UACtC,SAAUo2U,GACX,OAAkD,IAA3Cp8C,GAAco0C,EAAQt5S,EAAKgP,EAAK9jC,QAAoBoJ,GAAWgtU,EAAW/1U,GAAQZ,QAAQ2uU,EAAO36T,qBAI1GwrU,GAAoB,SAAUvjJ,EAAS53J,EAAMhP,GAC/C,OAAOiqT,GAAgBj7S,EAAMhP,GAAKvqC,MAAK,WACrC,OAAOu0V,GAA6BpjJ,EAAS53J,EAAK9jC,MAAO80B,GAAKxpC,QAAO,SAAU8iV,GAC7E,OAAkD,IAA3Cp0C,GAAco0C,EAAQt5S,EAAKgP,EAAK9jC,aAExC,SAAUkR,GACX,OAAO4tU,GAA6BpjJ,EAASxqL,EAAOlR,MAAO80B,GAAK3qC,aAGhE+0V,GAAmB93V,EAAM63V,IAAmB,GAC5CE,GAAiB/3V,EAAM63V,IAAmB,GAC1CG,GAAgBh4V,EAAM43V,IAA8B,GACpDK,GAAej4V,EAAM43V,IAA8B,GAEnDM,GAAoB,SAAUjkR,EAAQkkR,EAAQC,GAChD,GAAInkR,EAAOt8B,UAAUmtG,eAAiBsyM,GAAWnjR,GAAS,CACxD,IAAIr7D,EAAMq7D,EAAOr7D,IACbg/B,EAAMq8B,EAAOt8B,UAAU6nC,SACvB9xC,EAAM68P,GAAgBP,eAAepyP,GACrCixF,EAAQjwH,EAAI2kE,UAAU3lC,EAAIC,eAAgBj/B,EAAI8iE,SAClD,GAAc,OAAVmtD,GAAkBivN,GAAiB7+U,GAAQZ,QAAQwwH,GAAQn7F,GAE7D,OADAjP,GAAOw1C,EAAQ,YACR,EAGX,OAAO,GAELokR,GAAU,CAAEroJ,gBAAiBkoJ,IAE7BI,GAA2B,SAAUrkR,EAAQqU,EAAOysB,GACtD+3O,GAAU/nU,QAAQ,CAChB,CACEo/G,QAASsrL,GAAG98P,UACZxrC,OAAQ2lU,GAAU3lU,OAAOkxU,GAAQroJ,gBAAiB/7H,GAAQ,IAE5D,CACEkwD,QAASsrL,GAAG98P,UACZxrC,OAAQ2lU,GAAU3lU,OAAOgrU,GAAUniJ,gBAAiB/7H,GAAQ,IAE9D,CACEkwD,QAASsrL,GAAGx/G,OACZ9oL,OAAQ2lU,GAAU3lU,OAAOgrU,GAAUniJ,gBAAiB/7H,GAAQ,IAE9D,CACEkwD,QAASsrL,GAAG98P,UACZxrC,OAAQ2lU,GAAU3lU,OAAOqrU,GAAkBxiJ,gBAAiB/7H,GAAQ,IAEtE,CACEkwD,QAASsrL,GAAGx/G,OACZ9oL,OAAQ2lU,GAAU3lU,OAAOqrU,GAAkBxiJ,gBAAiB/7H,GAAQ,IAEtE,CACEkwD,QAASsrL,GAAG98P,UACZxrC,OAAQ2lU,GAAU3lU,OAAO+rU,GAAeljJ,gBAAiB/7H,EAAQqU,GAAO,IAE1E,CACE67C,QAASsrL,GAAGx/G,OACZ9oL,OAAQ2lU,GAAU3lU,OAAO+rU,GAAeljJ,gBAAiB/7H,EAAQqU,GAAO,IAE1E,CACE67C,QAASsrL,GAAG98P,UACZxrC,OAAQ2lU,GAAU3lU,OAAOqvU,GAAYxmJ,gBAAiB/7H,GAAQ,IAEhE,CACEkwD,QAASsrL,GAAGx/G,OACZ9oL,OAAQ2lU,GAAU3lU,OAAOqvU,GAAYxmJ,gBAAiB/7H,GAAQ,IAEhE,CACEkwD,QAASsrL,GAAG98P,UACZxrC,OAAQ2lU,GAAU3lU,OAAOwvU,GAAgB3mJ,gBAAiB/7H,GAAQ,IAEpE,CACEkwD,QAASsrL,GAAGx/G,OACZ9oL,OAAQ2lU,GAAU3lU,OAAOwvU,GAAgB3mJ,gBAAiB/7H,GAAQ,IAEpE,CACEkwD,QAASsrL,GAAG98P,UACZxrC,OAAQ2lU,GAAU3lU,OAAOipU,GAAiBpgJ,gBAAiB/7H,GAAQ,IAErE,CACEkwD,QAASsrL,GAAGx/G,OACZ9oL,OAAQ2lU,GAAU3lU,OAAOipU,GAAiBpgJ,gBAAiB/7H,GAAQ,IAErE,CACEkwD,QAASsrL,GAAG98P,UACZxrC,OAAQ2lU,GAAU3lU,OAAOuoU,GAAoB1/I,gBAAiB/7H,GAAQ,IAExE,CACEkwD,QAASsrL,GAAGx/G,OACZ9oL,OAAQ2lU,GAAU3lU,OAAOuoU,GAAoB1/I,gBAAiB/7H,GAAQ,IAExE,CACEkwD,QAASsrL,GAAG98P,UACZxrC,OAAQ2lU,GAAU3lU,OAAOusU,GAAmB1jJ,gBAAiB/7H,GAAQ,IAEvE,CACEkwD,QAASsrL,GAAGx/G,OACZ9oL,OAAQ2lU,GAAU3lU,OAAOusU,GAAmB1jJ,gBAAiB/7H,GAAQ,KAEtE8gC,GAAKhxG,MAAK,SAAUoB,GACrB4vG,EAAI/tF,qBAGJuxU,GAAuB,SAAUtkR,EAAQ8gC,GAC3C+3O,GAAU/nU,QAAQ,CAChB,CACEo/G,QAASsrL,GAAG98P,UACZxrC,OAAQ2lU,GAAU3lU,OAAOgrU,GAAUF,iBAAkBh+Q,IAEvD,CACEkwD,QAASsrL,GAAGx/G,OACZ9oL,OAAQ2lU,GAAU3lU,OAAOgrU,GAAUF,iBAAkBh+Q,KAEtD8gC,IAED+pE,GAAU,SAAU7qG,EAAQqU,GAC9BrU,EAAOpjC,GAAG,WAAW,SAAUkkE,IACI,IAA7BA,EAAI6sE,sBACN02K,GAAyBrkR,EAAQqU,EAAOysB,MAG5C9gC,EAAOpjC,GAAG,SAAS,SAAUkkE,IACM,IAA7BA,EAAI6sE,sBACN22K,GAAqBtkR,EAAQ8gC,OAI/ByjP,GAAsB,CAAEvqR,MAAO6wG,IAE/B25K,GAAgC,SAAUjgV,GAC5C,MAAOA,EAAM,CACX,GAAsB,IAAlBA,EAAKwI,UAAoC,IAAlBxI,EAAKwI,UAAkBxI,EAAKiO,MAAQ,WAAW/M,KAAKlB,EAAKiO,MAClF,OAAOjO,EAETA,EAAOA,EAAKwR,cAGZ0uU,GAAsB,SAAUzkR,EAAQv3B,GAC1C,IAAIlkC,EAAMo/B,EAAKgjL,EAAWl+K,EACtB9jC,EAAMq7D,EAAOr7D,IACb6rQ,EAAoCxwM,EAAOlhE,OAAOw1Q,oCACtD,GAAK7rO,EAAL,CAGA,GAAI,eAAehjC,KAAKgjC,EAAKlwB,UAAW,CACtC,IAAInC,EAAaouU,GAA8B/7S,EAAKryB,YAChDA,GAAc,eAAe3Q,KAAK2Q,EAAWmC,WAC/CkwB,EAAKhyB,aAAa9R,EAAId,IAAIa,eAAe09B,IAAOqG,EAAKryB,YAKzD,GAFAutB,EAAMh/B,EAAImlE,YACVrhC,EAAK8/B,YACD9/B,EAAKvkC,gBAAiB,CACxB,IAAIk2L,EAAS,IAAI0sF,GAAWr+O,EAAMA,GAClC,MAAOlkC,EAAO61L,EAAOrzL,UAAW,CAC9B,GAAIioL,GAASt2K,OAAOnU,GAAO,CACzBo/B,EAAIQ,SAAS5/B,EAAM,GACnBo/B,EAAIa,OAAOjgC,EAAM,GACjB,MAEF,GAAIisQ,EAAkCjsQ,EAAKgU,SAASlS,eAAgB,CAClEs9B,EAAIS,eAAe7/B,GACnBo/B,EAAIY,aAAahgC,GACjB,MAEFoiN,EAAWpiN,EACXA,EAAO61L,EAAOj5L,OAEXoD,IACHo/B,EAAIQ,SAASwiL,EAAU,GACvBhjL,EAAIa,OAAOmiL,EAAU,SAGnB33B,GAASZ,KAAK3lJ,GACZA,EAAK1yB,aAAepR,EAAI8iE,QAAQh/B,EAAK1yB,cACvC4tB,EAAIS,eAAeqE,GACnB9E,EAAIY,aAAakE,KAEjB9E,EAAIU,cAAcoE,GAClB9E,EAAIc,YAAYgE,KAGlB9E,EAAIQ,SAASsE,EAAM,GACnB9E,EAAIa,OAAOiE,EAAM,IAGrBu3B,EAAOt8B,UAAUm8H,OAAOl8H,GACxB88Q,GAAeE,oBAAoB3gP,EAAQr8B,KAEzC+gT,GAAkB,SAAU//U,EAAKJ,GACnC,IACIsR,EAAQ8uU,EADRl8S,EAAO9jC,EAAI4kE,UAEf1zD,EAAStR,EACT,MAAOsR,IAAW4yB,GAA2C,UAAnC9jC,EAAI+iE,mBAAmB7xD,GACR,SAAnClR,EAAI+iE,mBAAmB7xD,KACzB8uU,EAAe9uU,GAEjBA,EAASA,EAAOzH,WAElB,OAAOyH,IAAW4yB,EAAOk8S,EAAel8S,GAEtCm8S,GAAmB,SAAU5kR,GAC/B,OAAOjvE,EAAOD,KAAKkvE,EAAOr7D,IAAI2kE,UAAUtJ,EAAOt8B,UAAUd,UAAS,GAAOo9B,EAAOr7D,IAAI8iE,WAElFo9Q,GAAqB,SAAU7kR,GACjC,OAAO4kR,GAAiB5kR,GAAQ9wE,KAAKvD,EAAS,KAAK,SAAU8vM,GAC3D,OAAOA,EAAYljL,SAAS8lE,kBAG5BymQ,GAAwB,SAAU9kR,GACpC,OAAO4kR,GAAiB5kR,GAAQ9vE,QAAO,SAAUo4E,GAC/C,OAAO88J,GAAWpgO,GAAQZ,QAAQkkE,OACjCl5E,UAED21V,GAAe,CACjBN,oBAAqBA,GACrBC,gBAAiBA,GACjBhmD,eAAgBkmD,GAChBC,mBAAoBA,GACpBC,sBAAuBA,IAGrBE,GAAgB,SAAU18Q,EAAKr2E,GACjC,OAAOq2E,EAAIlyD,YAAckyD,EAAIlyD,WAAWmC,WAAatmB,GAEnDgzV,GAAc,SAAU38Q,EAAK+6I,GAC/B,OAAO/6I,GAAOA,EAAIl6D,YAAck6D,EAAIl6D,WAAWmK,WAAa8qM,GAE1D6hI,GAAc,SAAU58Q,GAC1B,OAAOA,GAAO,eAAe7iE,KAAK6iE,EAAI/vD,WAEpC4sU,GAAe,SAAU78Q,GAC3B,OAAO48Q,GAAY58Q,IAAQ48Q,GAAY58Q,EAAIl6D,aAEzCg3U,GAAoB,SAAUC,GAChC,IAAIC,EAAuBD,EAAej3U,WAC1C,MAAI,eAAe3I,KAAK6/U,EAAqB/sU,UACpC+sU,EAEFD,GAELE,GAAkB,SAAUF,EAAgB5pJ,EAAaj0I,GAC3D,IAAIjjD,EAAO8gV,EAAe79R,EAAQ,aAAe,aACjD,MAAOjjD,EAAM,CACX,GAAIyqL,GAASv2K,UAAUlU,GACrB,MAEFA,EAAOA,EAAKijD,EAAQ,cAAgB,mBAEtC,OAAOjjD,IAASk3L,GAEdnsI,GAAS,SAAU0Q,EAAQwlR,EAAgBH,EAAgB5pJ,EAAagqJ,GAC1E,IAAI9gV,EAAMq7D,EAAOr7D,IACbg/B,EAAMq8B,EAAOt8B,UAAU6nC,SAC3B,GAAI85Q,IAAmBrlR,EAAOv8C,UAA9B,CAGI0hU,GAAaE,KACfI,EAAe,MAEjB,IAAIpwJ,EAAWowJ,EAAeD,EAAeC,GAAgB9gV,EAAIiwB,OAAO,MACxE,GAAI2wT,GAAgBF,EAAgB5pJ,GAAa,IAAS8pJ,GAAgBF,EAAgB5pJ,GAAa,GACjGwpJ,GAAYI,EAAgB,MAC9B1gV,EAAI4wL,YAAYF,EAAU+vJ,GAAkBC,IAE5C1gV,EAAIqB,QAAQqvL,EAAUgwJ,QAEnB,GAAIE,GAAgBF,EAAgB5pJ,GAAa,GAClDwpJ,GAAYI,EAAgB,OAC9B1gV,EAAI4wL,YAAYF,EAAU+vJ,GAAkBC,IAC5ChwJ,EAASt+K,YAAYpS,EAAId,IAAIa,eAAe,MAC5C2wL,EAASt+K,YAAYsuU,IAErBA,EAAej3U,WAAWqI,aAAa4+K,EAAUgwJ,QAE9C,GAAIE,GAAgBF,EAAgB5pJ,GAAa,GACtD92L,EAAI4wL,YAAYF,EAAU+vJ,GAAkBC,QACvC,CACLA,EAAiBD,GAAkBC,GACnC,IAAIlwJ,EAASxxJ,EAAI8lC,aACjB0rH,EAAO9wJ,cAAco3J,GACrBtG,EAAO1wJ,YAAY4gT,GACnB,IAAIrtU,EAAWm9K,EAAO/sH,kBACD,OAAjBq9Q,GAAyBT,GAAchtU,EAAU,OACnDq9K,EAAWr9K,EAAS5B,WACpBzR,EAAI4wL,YAAYv9K,EAAUqtU,KAE1B1gV,EAAI4wL,YAAYv9K,EAAUqtU,GAC1B1gV,EAAI4wL,YAAYF,EAAUgwJ,IAG9B1gV,EAAI4S,OAAOkkL,GACXspJ,GAAaN,oBAAoBzkR,EAAQq1H,KAEvCqwJ,GAAW,CAAEp2R,OAAQA,IAErBq2R,GAAW,SAAU3tU,GACvBloB,EAAK62C,GAAY3hC,GAAQZ,QAAQ4T,GAAWU,KAAS,SAAUjU,GAC7D,IAAIuvT,EAAUvvT,EAAKE,MACnBqvT,EAAQ/tR,UAAY2qP,GAAK/lR,KAAKmpT,EAAQ/tR,eAGtC2/S,GAAgB,SAAUjhV,EAAK2jE,GACjC,OAAOA,GAAwB,MAAjBA,EAAI/vD,UAAoB5T,EAAIiqL,QAAQtmH,IAEhDu9Q,GAAgB,SAAUthV,GAC5B,OAAOA,GAAQ,oBAAoBkB,KAAKlB,EAAKgU,WAE3CutU,GAAa,SAAUx9Q,GACzBA,EAAIrkE,UAAY,2BAEd8hV,GAA0B,SAAU3tU,EAAWG,GACjD,OAAOH,EAAUG,WAAaA,GAAYH,EAAUu2K,iBAAmBv2K,EAAUu2K,gBAAgBp2K,WAAaA,GAE5GytU,GAAgB,SAAUrhV,EAAKJ,GACjC,OAAOA,GAAQI,EAAI8iE,QAAQljE,KAAU,yBAAyBkB,KAAKlB,EAAKgU,YAAc,qBAAqB9S,KAAKlB,EAAK8e,MAAM+J,WAA8C,SAAjCzoB,EAAI+iE,mBAAmBnjE,IAE7J0hV,GAAsC,SAAUthV,EAAK4rQ,EAAqB37I,GAC5E,IAEIvnI,EAFAkX,EAAOqwH,EACPsxN,EAAc,GAElB,GAAK3hV,EAAL,CAGA,MAAOA,EAAOA,EAAK6R,WAAY,CAC7B,GAAIzR,EAAI8iE,QAAQljE,GACd,OAEEyqL,GAASv2K,UAAUlU,KAAUgsQ,EAAoBhsQ,EAAKgU,SAASlS,gBACjE6/U,EAAYjzV,KAAKsR,GAGrBlX,EAAI64V,EAAYz6V,OAChB,MAAO4B,IACLkX,EAAO2hV,EAAY74V,KACdkX,EAAKL,iBAAmBK,EAAK6R,aAAe7R,EAAKgpL,WAA2C,KAA9BhpL,EAAK6R,WAAW6vB,WAG7E2/S,GAAcjhV,EAAKJ,KAFvBI,EAAI4S,OAAOhT,KAQb4hV,GAAsB,SAAU17U,EAAO2N,EAAWwU,GACpD,OAAmC,IAA/BoiK,GAASt2K,OAAON,GACXwU,EACEniB,EACS,IAAXmiB,GAAgBxU,EAAU5F,KAAKy2D,OAAOr8C,EAAS,KAAOgkQ,GAAKH,KAAO,EAAI7jQ,EAEtEA,IAAWxU,EAAU5F,KAAK/mB,OAAS,GAAK2sB,EAAU5F,KAAKy2D,OAAOr8C,KAAYgkQ,GAAKH,KAAOr4Q,EAAU5F,KAAK/mB,OAASmhC,GAGrHw5T,GAAqB,SAAUziT,GACjC,IAAIwxP,EAASxxP,EAAI8lC,aAGjB,OAFA0rN,EAAOhxP,SAASR,EAAIC,eAAgBuiT,IAAoB,EAAMxiT,EAAIC,eAAgBD,EAAIwB,cACtFgwP,EAAO3wP,OAAOb,EAAIyB,aAAc+gT,IAAoB,EAAOxiT,EAAIyB,aAAczB,EAAI0B,YAC1E8vP,GAELkxD,GAAwB,SAAU9hV,GACpC,GACMyqL,GAASt2K,OAAOnU,KAClBA,EAAK0hC,UAAY1hC,EAAK0hC,UAAUjgC,QAAQ,WAAY,KAEtDzB,EAAOA,EAAK6R,iBACL7R,IAEP+hV,GAAoB,SAAU3hV,EAAKJ,GACrC,IACIsR,EAAQ8uU,EADRl8S,EAAO9jC,EAAI4kE,UAEf1zD,EAAStR,EACT,MAAOsR,IAAW4yB,GAA2C,UAAnC9jC,EAAI+iE,mBAAmB7xD,GACR,SAAnClR,EAAI+iE,mBAAmB7xD,KACzB8uU,EAAe9uU,GAEjBA,EAASA,EAAOzH,WAElB,OAAOyH,IAAW4yB,EAAOk8S,EAAel8S,GAEtC89S,GAAkB,SAAUvmR,EAAQz7D,EAAMiiV,GAC5Cz1V,EAAOD,KAAK01V,EAAqBnjU,OAAOxzB,IAAImwE,EAAOr7D,IAAIsgI,YAAYn1I,MAAK,SAAU22V,GAChF,IAAIC,EAAgBliU,GAAUxf,GAAQZ,QAAQG,IAC1CoiV,EAAY35V,GAASA,GAAS,GAAI05V,GAAgBD,GACtDzmR,EAAOr7D,IAAIu5M,UAAU35M,EAAMoiV,MAE7B,IAAIC,EAAiB71V,EAAOD,KAAK01V,EAAqBn8I,OAAOx6M,KAAI,SAAUg3V,GACzE,OAAOA,EAAYlqU,MAAM,UAEvBmqU,EAAoB/1V,EAAOD,KAAKyT,EAAKm6H,WAAW7uI,KAAI,SAAUk3V,GAChE,OAAO72V,EAAO62V,EAAepqU,MAAM,QAAQ,SAAUiG,GACnD,MAAiB,KAAVA,QAGX+4B,GAAMirS,EAAgBE,GAAmB,SAAUD,EAAaE,GAC9D,IAAIC,EAAkB92V,EAAO62V,GAAgB,SAAUnkU,GACrD,OAAQvvB,EAASwzV,EAAajkU,MAE5BqkU,EAAah5V,GAAe44V,EAAaG,GAC7ChnR,EAAOr7D,IAAI84L,UAAUl5L,EAAM,QAAS0iV,EAAWrwV,KAAK,SAEtD,IAAIswV,EAAe,CACjB,QACA,SAEEC,EAAiBh+P,GAASq9P,GAAsB,SAAUt1V,EAAG6nB,GAC/D,OAAQ1lB,EAAS6zV,EAAcnuU,MAEjCinD,EAAOr7D,IAAI0sL,WAAW9sL,EAAM4iV,IAE1BC,GAAsB,SAAUpnR,EAAQz7D,GAC1C,IAAIwtS,EAAsB5yN,GAASyxG,mBAAmB5wH,GACtD,GAAI+xO,GAAuBA,EAAoB1rS,gBAAkB9B,EAAK0kL,QAAQ5iL,cAAe,CAC3F,IAAImgV,EAAuBrnQ,GAAS0xG,wBAAwB7wH,GAC5DumR,GAAgBvmR,EAAQz7D,EAAMiiV,KAG9Ba,GAAoC,SAAUrnR,EAAQylR,EAAc9hT,EAAKvrB,EAAWwU,GACtF,IAAIyoK,EAAUoG,EAAa3/C,EAAWv3I,EAAMpD,EAAM8rT,EAC9C77H,EAAYq0J,GAAgB,IAC5B9gV,EAAMq7D,EAAOr7D,IAAKggV,EAAe2B,GAAkB3hV,EAAKyT,GAE5D,GADAqjL,EAAc92L,EAAI2kE,UAAUlxD,EAAWzT,EAAI8iE,UACtCg0H,IAAgBuqJ,GAAcrhV,EAAK82L,GAAc,CAOpD,GANAA,EAAcA,GAAekpJ,EAE3B13B,EADExxH,IAAgBz7H,EAAOv8C,WAAaoiU,GAAcpqJ,GACpCA,EAAYljL,SAASlS,cAErBo1L,EAAYrtL,WAAWmK,SAASlS,eAE7Co1L,EAAYv3L,gBAMf,OALAmxL,EAAW1wL,EAAIiwB,OAAOw8J,GACtBg2J,GAAoBpnR,EAAQq1H,GAC5BoG,EAAY1kL,YAAYs+K,GACxB1xJ,EAAIQ,SAASkxJ,EAAU,GACvB1xJ,EAAIa,OAAO6wJ,EAAU,GACdA,EAET9wL,EAAO6T,EACP,MAAO7T,EAAK6J,aAAeqtL,EACzBl3L,EAAOA,EAAK6J,WAEd,MAAO7J,IAASI,EAAI8iE,QAAQljE,GAC1Bu3I,EAAYv3I,EACZA,EAAOA,EAAKoqL,gBAEd,GAAI7yC,GAAa97E,EAAOlhE,OAAOy1Q,aAAa04C,EAAe77H,EAAU/qL,eAAgB,CACnFgvL,EAAW1wL,EAAIiwB,OAAOw8J,GACtBg2J,GAAoBpnR,EAAQq1H,GAC5Bv5C,EAAU1tI,WAAWqI,aAAa4+K,EAAUv5C,GAC5Cv3I,EAAOu3I,EACP,MAAOv3I,IAASI,EAAI8iE,QAAQljE,GAC1BpD,EAAOoD,EAAKwR,YACZs/K,EAASt+K,YAAYxS,GACrBA,EAAOpD,EAETwiC,EAAIQ,SAAS/rB,EAAWwU,GACxB+W,EAAIa,OAAOpsB,EAAWwU,IAG1B,OAAOxU,GAELkvU,GAAuB,SAAU3iV,EAAKiwH,GACxC,IAAI24D,EACJ34D,EAAMrsD,YACNglH,EAAY34D,EAAM24D,UACbA,IAAa,mBAAmB9nL,KAAKd,EAAIo8D,SAASwsH,EAAW,SAAS,KACzE5oL,EAAI2d,IAAIsyG,EAAO,OAGf29G,GAAW,SAAUvyK,EAAQ8gC,GAC/B,IAAIq0F,EAAQwvJ,EAAcvsU,EAAWwU,EAAQ6uK,EAAa77I,EACtDy1I,EAAUr9K,EAAUqtU,EAAgBkC,EAAiBC,EAAoB/B,EAAcgC,EACvF9iV,EAAMq7D,EAAOr7D,IACb7F,EAASkhE,EAAOlhE,OAAQyxQ,EAAsBzxQ,EAAOq7L,sBACrDx2J,EAAMq8B,EAAOt8B,UAAU6nC,SACvBi6Q,EAAiB,SAAUvzV,GAC7B,IAAsB2iI,EAAO8yN,EAAY/tB,EAArCp1T,EAAO6T,EACPuvU,EAAqB7oV,EAAOs1Q,wBAOhC,GALEx/I,EADE3iI,GAA4B,UAApBs1V,GAAmD,OAApBA,EACjC5iV,EAAIiwB,OAAO3iC,GAAQwzV,GAEnBhqJ,EAAYpjL,WAAU,GAEhCshT,EAAY/kM,GAC8B,IAAtCz1C,GAAS87M,iBAAiBj7N,GAC5Br7D,EAAI84L,UAAU7oE,EAAO,QAAS,MAC9BjwH,EAAI84L,UAAU7oE,EAAO,QAAS,WAE9B,GACE,GAAI+yN,EAAmBpjV,EAAKgU,UAAW,CACrC,GAAI8gR,GAAY90R,IAASi/R,GAAUvrG,eAAe1zL,GAChD,SAEFmjV,EAAanjV,EAAK8T,WAAU,GAC5B1T,EAAI84L,UAAUiqJ,EAAY,KAAM,IAC5B9yN,EAAM1wH,iBACRwjV,EAAW3wU,YAAY69G,EAAMx+G,YAC7Bw+G,EAAM79G,YAAY2wU,KAElB/tB,EAAY+tB,EACZ9yN,EAAM79G,YAAY2wU,YAGdnjV,EAAOA,EAAK6J,aAAe7J,IAASogV,GAIhD,OAFAyC,GAAoBpnR,EAAQ40D,GAC5BkxN,GAAWnsB,GACJ/kM,GAELgzN,EAA6B,SAAUn9U,GACzC,IAAIlG,EAAMtS,EACN41V,EAAmB1B,GAAoB17U,EAAO2N,EAAWwU,GAC7D,GAAIoiK,GAASt2K,OAAON,KAAe3N,EAAQo9U,EAAmB,EAAIA,EAAmBzvU,EAAU6tB,UAAUx6C,QACvG,OAAO,EAET,GAAI2sB,EAAUhK,aAAeqtL,GAAegsJ,IAA+Bh9U,EACzE,OAAO,EAET,GAAIA,GAASukL,GAASv2K,UAAUL,IAAcA,IAAcqjL,EAAYrlL,WACtE,OAAO,EAET,GAAI2vU,GAAwB3tU,EAAW,UAAY2tU,GAAwB3tU,EAAW,MACpF,OAAOqvU,IAA+Bh9U,IAAUg9U,GAA8Bh9U,EAEhF,IAAI2vL,EAAS,IAAI0sF,GAAW1uQ,EAAWqjL,GACnCzM,GAASt2K,OAAON,KACd3N,GAA8B,IAArBo9U,EACXztJ,EAAO1pC,OACGjmJ,GAASo9U,IAAqBzvU,EAAU6tB,UAAUx6C,QAC5D2uM,EAAOj5L,QAGX,MAAOoD,EAAO61L,EAAOrzL,UAAW,CAC9B,GAAIioL,GAASv2K,UAAUlU,IACrB,IAAKA,EAAK0U,aAAa,oBACrBhnB,EAAOsS,EAAKgU,SAASlS,cACjBkqQ,EAAoBt+Q,IAAkB,OAATA,GAC/B,OAAO,OAGN,GAAI+8L,GAASt2K,OAAOnU,KAAU,eAAekB,KAAKlB,EAAK0hC,WAC5D,OAAO,EAELx7B,EACF2vL,EAAO1pC,OAEP0pC,EAAOj5L,OAGX,OAAO,GAEL2mV,EAAsB,WAEtBzyJ,EADE,wBAAwB5vL,KAAK8hV,IAA2C,WAAvBC,EACxChC,EAAeC,GAEfD,IAETrmQ,GAAS+7M,+BAA+Bl7N,IAAWgmR,GAAcrhV,EAAK0gV,IAAmB1gV,EAAIiqL,QAAQ6M,GACvGpG,EAAW1wL,EAAIgY,MAAM0oU,EAAgB5pJ,GAErC92L,EAAI4wL,YAAYF,EAAUoG,GAE5BspJ,GAAaN,oBAAoBzkR,EAAQq1H,IAE3C0xH,GAAex+O,UAAU5jE,EAAKg/B,GAAK7zC,MAAK,SAAUg3T,GAChDnjR,EAAIQ,SAAS2iR,EAAQljR,eAAgBkjR,EAAQ3hR,aAC7CxB,EAAIa,OAAOsiR,EAAQ1hR,aAAc0hR,EAAQzhR,cAE3CjtB,EAAYurB,EAAIC,eAChBhX,EAAS+W,EAAIwB,YACbsgT,EAAetmQ,GAASyxG,mBAAmB5wH,GAC3CpgB,KAAckhD,IAAOA,EAAIlhD,UACzB,IAAIE,KAAaghD,IAAOA,EAAIhhD,SACxBkvI,GAASv2K,UAAUL,IAAcA,EAAUlU,kBAC7CujV,EAA6B76T,EAASxU,EAAUjU,WAAW1Y,OAAS,EACpE2sB,EAAYA,EAAUjU,WAAWsW,KAAK2f,IAAIxN,EAAQxU,EAAUjU,WAAW1Y,OAAS,KAAO2sB,EAErFwU,EADE66T,GAA8Bz4J,GAASt2K,OAAON,GACvCA,EAAU6tB,UAAUx6C,OAEpB,GAGbk5V,EAAe2B,GAAkB3hV,EAAKyT,GACjCusU,KAGDc,IAAiB7lS,IAAa6lS,GAAgB7lS,KAChDxnC,EAAYivU,GAAkCrnR,EAAQylR,EAAc9hT,EAAKvrB,EAAWwU,IAEtF6uK,EAAc92L,EAAI2kE,UAAUlxD,EAAWzT,EAAI8iE,SAC3C49Q,EAAiB5pJ,EAAc92L,EAAI2kE,UAAUmyH,EAAYrtL,WAAYzJ,EAAI8iE,SAAW,KACpF8/Q,EAAkB9rJ,EAAcA,EAAYljL,SAAS8lE,cAAgB,GACrEmpQ,EAAqBnC,EAAiBA,EAAe9sU,SAAS8lE,cAAgB,GACnD,OAAvBmpQ,GAAgC1nS,IAClC27I,EAAc4pJ,EACdA,EAAiBA,EAAej3U,WAChCm5U,EAAkBC,GAEhB,eAAe/hV,KAAK8hV,IAClB5iV,EAAIiqL,QAAQ6M,GACdiqJ,GAASp2R,OAAO0Q,EAAQwlR,EAAgBH,EAAgB5pJ,EAAagqJ,GAIrEA,GAAgBhqJ,IAAgBz7H,EAAOv8C,YAG3CgiU,EAAeA,GAAgB,IAC3B10D,GAAsBt1F,IACxBpG,EAAW68F,GAAwBz2F,GAC/B92L,EAAIiqL,QAAQ6M,IACdqqJ,GAAWrqJ,GAEb2rJ,GAAoBpnR,EAAQq1H,GAC5B0vJ,GAAaN,oBAAoBzkR,EAAQq1H,IAChCuyJ,IACTE,IACSF,GAA2B,IACpCvyJ,EAAWoG,EAAYrtL,WAAWqI,aAAa+uU,IAAkB/pJ,GACjEspJ,GAAaN,oBAAoBzkR,EAAQ+lR,GAAwBtqJ,EAAa,MAAQpG,EAAWoG,KAEjGtG,EAASixJ,GAAmBziT,GAAK8lC,aACjC0rH,EAAO1wJ,YAAYg3J,GACnBzjL,EAAWm9K,EAAO/sH,kBAClBu9Q,GAAS3tU,GACTquU,GAAsBruU,GACtBq9K,EAAWr9K,EAAS5B,WACpBzR,EAAI4wL,YAAYv9K,EAAUyjL,GAC1BwqJ,GAAoCthV,EAAK4rQ,EAAqBl7E,GAC9DiyJ,GAAqB3iV,EAAK82L,GACtB92L,EAAIiqL,QAAQ6M,IACdqqJ,GAAWrqJ,GAEbpG,EAAS9sH,YACL5jE,EAAIiqL,QAAQyG,IACd1wL,EAAI4S,OAAO89K,GACXyyJ,MAEAV,GAAoBpnR,EAAQq1H,GAC5B0vJ,GAAaN,oBAAoBzkR,EAAQq1H,KAG7C1wL,EAAI84L,UAAUpI,EAAU,KAAM,IAC9Br1H,EAAOqf,KAAK,WAAY,CAAEg2G,SAAUA,OAElC0yJ,GAAc,CAAEz4R,OAAQijL,IAExBy1G,GAAsB,SAAUlpV,EAAQsZ,EAAWqjL,GACrD,IACIl3L,EADA61L,EAAS,IAAI0sF,GAAW1uQ,EAAWqjL,GAEnC80E,EAAsBzxQ,EAAOq7L,sBACjC,MAAO51L,EAAO61L,EAAOj5L,OACnB,GAAIovQ,EAAoBhsQ,EAAKgU,SAASlS,gBAAkB9B,EAAK9Y,OAAS,EACpE,OAAO,GAITw8V,GAAa,SAAUtjV,EAAK++B,EAAWwkT,GACzC,IAAI3xU,EAAS5R,EAAIiwB,OAAO,OAAQ,GAAI,UACpCszT,EAAM95U,WAAWqI,aAAaF,EAAQ2xU,GACtCxkT,EAAU88J,eAAejqL,GACzB5R,EAAI4S,OAAOhB,IAET4xU,GAAoB,SAAUxjV,EAAK++B,EAAWwkT,EAAOE,GACvD,IAAIzkT,EAAMh/B,EAAImlE,YACTs+Q,GAIHzkT,EAAIS,eAAe8jT,GACnBvkT,EAAIY,aAAa2jT,KAJjBvkT,EAAIU,cAAc6jT,GAClBvkT,EAAIc,YAAYyjT,IAKlBxkT,EAAUm8H,OAAOl8H,IAEf0kT,GAAkB,SAAUroR,EAAQ8gC,GACtC,IAGIonP,EACAE,EAJA1kT,EAAYs8B,EAAOt8B,UACnB/+B,EAAMq7D,EAAOr7D,IACbg/B,EAAMD,EAAU6nC,SAGpBw7O,GAAex+O,UAAU5jE,EAAKg/B,GAAK7zC,MAAK,SAAUg3T,GAChDnjR,EAAIQ,SAAS2iR,EAAQljR,eAAgBkjR,EAAQ3hR,aAC7CxB,EAAIa,OAAOsiR,EAAQ1hR,aAAc0hR,EAAQzhR,cAE3C,IAAIzY,EAAS+W,EAAIwB,YACb/sB,EAAYurB,EAAIC,eACpB,GAA2B,IAAvBxrB,EAAUrL,UAAkBqL,EAAUlU,gBAAiB,CACzD,IAAIujV,EAA6B76T,EAASxU,EAAUjU,WAAW1Y,OAAS,EACxE2sB,EAAYA,EAAUjU,WAAWsW,KAAK2f,IAAIxN,EAAQxU,EAAUjU,WAAW1Y,OAAS,KAAO2sB,EAErFwU,EADE66T,GAAqD,IAAvBrvU,EAAUrL,SACjCqL,EAAU6tB,UAAUx6C,OAEpB,EAGb,IAAIgwM,EAAc92L,EAAI2kE,UAAUlxD,EAAWzT,EAAI8iE,SAC3C49Q,EAAiB5pJ,EAAc92L,EAAI2kE,UAAUmyH,EAAYrtL,WAAYzJ,EAAI8iE,SAAW,KACpF+/Q,EAAqBnC,EAAiBA,EAAe9sU,SAAS8lE,cAAgB,GAC9EiqQ,KAAkBxnP,IAAOA,EAAIhhD,SACN,OAAvB0nS,GAAgCc,IAClC7sJ,EAAc4pJ,GAEZjtU,GAAoC,IAAvBA,EAAUrL,UAAkB6f,GAAUxU,EAAU6tB,UAAUx6C,SACpEu8V,GAAoBhoR,EAAOlhE,OAAQsZ,EAAWqjL,KACjDysJ,EAAQvjV,EAAIiwB,OAAO,MACnB+O,EAAI0kC,WAAW6/Q,GACfvkT,EAAIU,cAAc6jT,GAClBvkT,EAAIc,YAAYyjT,GAChBE,GAAU,IAGdF,EAAQvjV,EAAIiwB,OAAO,MACnB6iQ,GAAgB9yR,EAAKg/B,EAAKukT,GAC1BD,GAAWtjV,EAAK++B,EAAWwkT,GAC3BC,GAAkBxjV,EAAK++B,EAAWwkT,EAAOE,GACzCpoR,EAAOigB,YAAY39D,OAEjBimU,GAAiB,SAAUvoR,EAAQ0C,GACrC,IAAIg/K,EAAK18O,GAAQX,QAAQ,MACzBiS,GAAOtR,GAAQZ,QAAQs+D,GAASg/K,GAChC1hL,EAAOigB,YAAY39D,OAEjBkmU,GAAgB,SAAUxoR,EAAQ0C,GAC/B+lR,GAAWzoR,EAAOv8C,UAAWi/C,IAChChsD,GAAM1R,GAAQZ,QAAQs+D,GAAS19D,GAAQX,QAAQ,OAEjD,IAAIq9O,EAAK18O,GAAQX,QAAQ,MACzBqS,GAAM1R,GAAQZ,QAAQs+D,GAASg/K,GAC/BumG,GAAWjoR,EAAOr7D,IAAKq7D,EAAOt8B,UAAWg+M,EAAG/8O,OAC5CwjV,GAAkBnoR,EAAOr7D,IAAKq7D,EAAOt8B,UAAWg+M,EAAG/8O,OAAO,GAC1Dq7D,EAAOigB,YAAY39D,OAEjBomU,GAAe,SAAUjvT,GAC3B,OAAOu1J,GAASZ,KAAK30J,EAAIyuC,YAEvBugR,GAAa,SAAU5gR,EAAUi0E,GACnC,QAAI4sM,GAAapyD,GAAgB5/Q,MAAMolI,KAG9BgmJ,GAAYF,aAAa/5N,EAAUyuN,GAAgB5/Q,MAAMolI,IAAYjsJ,KAAI,SAAU4pC,GACxF,OAAOu1J,GAASZ,KAAK30J,EAAIyuC,cACxB74E,OAAM,IAGTs5V,GAAe,SAAUrgR,GAC3B,OAAOA,GAAwB,MAAjBA,EAAI/vD,UAAoB,SAAU+vD,GAE9CsgR,GAAiB,SAAUriL,GAC7B,OAAOA,EAASr3K,KAAKvD,GAAS,GAAQg9V,GAAcA,GAAch9V,GAAS,KAEzEk9V,GAA2B,SAAU7oR,GACvC,IAAIkqQ,EAAiBn+U,EAAM8+U,GAAYX,eAAgBlqQ,GACnD5yC,EAAWkpQ,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UAC/D,OAAOihQ,GAAiBf,aAAavB,EAAgBlqQ,EAAOv8C,UAAW2J,GAAUl9B,OAAO04V,KAEtFE,GAAwB,SAAU9oR,EAAQumG,GAC5CA,EAASr3K,KAAKlE,EAAMe,EAAMw8V,GAAgBvoR,GAASj0E,EAAMy8V,GAAexoR,GAASh1E,IAE/E+9V,GAAW,SAAU/oR,EAAQ8gC,GAC/B,IAAIkoP,EAAiBH,GAAyB7oR,GAC1CgpR,EAAe55V,SACjB45V,EAAel5V,KAAK/D,EAAM+8V,GAAuB9oR,IAEjDqoR,GAAgBroR,EAAQ8gC,IAGxBmoP,GAAW,CAAE35R,OAAQy5R,IAErBrqE,GAAkB,SAAU1+M,EAAQlzD,GACtC,OAAOi4U,GAAarmD,eAAe1+N,GAAQ9vE,QAAO,SAAUurM,GAC1D,OAAO3uL,EAASrhB,OAAS,GAAK0D,GAAG6V,GAAQZ,QAAQq3L,GAAc3uL,MAC9D1d,UAED85V,GAAiB,SAAUlpR,GAC7B,OAAO0+M,GAAgB1+M,EAAQmf,GAAS47M,qBAAqB/6N,KAE3DmpR,GAAqB,SAAUnpR,GACjC,OAAO0+M,GAAgB1+M,EAAQmf,GAAS67M,qBAAqBh7N,KAE3DopR,GAAmB,CACrBF,eAAgBA,GAChBC,mBAAoBA,IAGlBE,GAAgBjyV,GAAInB,SAAS,CAC/B,CAAEyrP,GAAI,IACN,CAAE9sH,MAAO,IACT,CAAElmI,KAAM,MAEN46V,GAAuB,SAAUtpR,EAAQpgB,GAC3C,OAAOwpS,GAAiBD,mBAAmBnpR,IAEzCupR,GAAW,SAAUC,GACvB,OAAO,SAAUxpR,EAAQpgB,GACvB,IAAI6pS,EAAiD,KAAxCtqQ,GAASyxG,mBAAmB5wH,GACzC,OAAOypR,IAAWD,IAGlBE,GAAc,SAAUF,GAC1B,OAAO,SAAUxpR,EAAQpgB,GACvB,OAAOmlS,GAAaD,sBAAsB9kR,KAAYwpR,IAGtDpzH,GAAU,SAAUhlC,EAAWo4J,GACjC,OAAO,SAAUxpR,EAAQpgB,GACvB,IAAIrjD,EAAQwoV,GAAaF,mBAAmB7kR,KAAYoxH,EAAU/yG,cAClE,OAAO9hF,IAAUitV,IAGjBG,GAAa,SAAUH,GACzB,OAAOpzH,GAAQ,MAAOozH,IAEpBI,GAAiB,WACnB,OAAOxzH,GAAQ,WAAW,IAExByzH,GAAqB,SAAUL,GACjC,OAAO,SAAUxpR,EAAQpgB,GACvB,OAAOu/B,GAAS27M,iBAAiB96N,KAAYwpR,IAG7CM,GAAc,SAAU9pR,EAAQpgB,GAClC,OAAOwpS,GAAiBF,eAAelpR,IAErCspL,GAAc,SAAUtpL,EAAQpgB,GAClC,OAAOA,GAELmqS,GAA4B,SAAU/pR,GACxC,IAAI+7P,EAAkB58O,GAASyxG,mBAAmB5wH,GAC9CgqR,EAAejF,GAAaL,gBAAgB1kR,EAAOr7D,IAAKq7D,EAAOt8B,UAAUd,YAC7E,OAAOonT,GAAgBhqR,EAAOlhE,OAAOy1Q,aAAay1E,EAAazxU,SAAUwjT,GAAoC,MAE3GkuB,GAAU,SAAUC,EAAYh3U,GAClC,OAAO,SAAU8sD,EAAQpgB,GACvB,IAAIuqS,EAAUj2V,EAAMg2V,GAAY,SAAU9xV,EAAK7K,GAC7C,OAAO6K,GAAO7K,EAAEyyE,EAAQpgB,MACvB,GACH,OAAOuqS,EAAUp5V,EAAOP,KAAK0iB,GAAUniB,EAAOrC,SAG9C07V,GAAc,SAAUpqR,EAAQ8gC,GAClC,OAAOkqO,GAAcF,cAAc,CACjCmf,GAAQ,CAACX,IAAuBD,GAAc36V,QAC9Cu7V,GAAQ,CAACL,MAAmBP,GAAc3nG,MAC1CuoG,GAAQ,CACNN,IAAW,GACXE,IAAmB,GACnBvgG,IACC+/F,GAAc3nG,MACjBuoG,GAAQ,CACNN,IAAW,GACXE,IAAmB,IAClBR,GAAcz0N,SACjBq1N,GAAQ,CACNN,IAAW,GACXE,IAAmB,GACnBvgG,IACC+/F,GAAcz0N,SACjBq1N,GAAQ,CACNN,IAAW,GACXE,IAAmB,IAClBR,GAAc3nG,MACjBuoG,GAAQ,CACNP,IAAY,GACZpgG,IACC+/F,GAAc3nG,MACjBuoG,GAAQ,CAACP,IAAY,IAAQL,GAAcz0N,SAC3Cq1N,GAAQ,CACNV,IAAS,GACTjgG,GACAygG,IACCV,GAAcz0N,SACjBq1N,GAAQ,CAACV,IAAS,IAAQF,GAAc3nG,MACxCuoG,GAAQ,CAACH,IAAcT,GAAc3nG,MACrCuoG,GAAQ,CACNV,IAAS,GACTjgG,IACC+/F,GAAc3nG,MACjBuoG,GAAQ,CAACF,IAA4BV,GAAcz0N,UAClD,CACD50D,KACG8gC,IAAOA,EAAIlhD,YACbvwD,MAAMg6V,GAAc36V,SAErB27V,GAAgB,CAAE3mO,UAAW0mO,IAE7BE,GAAW,SAAUtqR,EAAQ8gC,GAC/BupP,GAAc3mO,UAAU1jD,EAAQ8gC,GAAK5xG,MAAK,WACxC+5V,GAAS35R,OAAO0Q,EAAQ8gC,MACvB,WACDinP,GAAYz4R,OAAO0Q,EAAQ8gC,KAC1B91G,IAEDu/V,GAAgB,CAAEj7R,OAAQg7R,IAE1BE,GAAsB,SAAUxqR,EAAQrxD,GACtCA,EAAMg/J,uBAGVh/J,EAAMoE,iBACN2zT,GAA0B1mQ,EAAOigB,aACjCjgB,EAAOigB,YAAYC,UAAS,YACa,IAAnClgB,EAAOt8B,UAAUmtG,eACnB7wE,EAAOkhB,YAAY,UAErBqpQ,GAAcj7R,OAAO0Q,EAAQrxD,QAG7BogK,GAAU,SAAU/uG,GACtBA,EAAOpjC,GAAG,WAAW,SAAUjuB,GACzBA,EAAMuhH,UAAYsrL,GAAG58P,OACvB4rS,GAAoBxqR,EAAQrxD,OAI9B87U,GAAW,CAAEzwR,MAAO+0G,IAEpB27K,GAAuB,SAAUjmV,EAAMg1B,GACzC,IAAIrhB,EAAYqhB,EAAIrhB,YAChBwU,EAAS6M,EAAI7M,SACjB,OAAIoiK,GAASt2K,OAAON,IAClBA,EAAU6uS,WAAWr6R,EAAQnoB,GACtB1T,EAAOP,KAAKqlS,GAAcz9Q,EAAWwU,EAASnoB,EAAKhZ,UAEnDi0S,GAAuBjmQ,GAAK5pC,KAAI,SAAUy4E,GAC/C,IAAI8oN,EAAWpsR,GAAQR,SAASC,GAMhC,OALIg1B,EAAIk4P,UACNj7Q,GAAM4xD,EAAK8oN,GAEX96Q,GAAOgyD,EAAK8oN,GAEPyE,GAAczE,EAASzsR,MAAOF,EAAKhZ,YAI5Ck/V,GAAuB5+V,EAAM2+V,GAAsBtoT,IACnDwoT,GAAwB7+V,EAAM2+V,GAAsB,KAEpDG,GAAmB,SAAUpxT,GAC/B,OAAOo8P,GAAcM,eAAe18P,KAASA,EAAIg4P,cAAgBh4P,EAAIk4P,WAEnEm5D,GAAoB,SAAUriT,EAAMhP,GACtC,IAAI4iT,EAAensV,EAAO0xT,GAAQD,eAAe38S,GAAQZ,QAAQq1B,EAAIrhB,aAAcqwB,GAAOg/B,IAC1F,OAAO1yE,EAAKsnV,GAAchtV,MAAMo5C,IAE9BsiT,GAAiB,SAAUtiT,EAAMhP,GACnC,OAAIoxT,GAAiBpxT,GACZ43S,GAAa53S,GAEb43S,GAAa53S,IAAQqoQ,GAAYD,aAAaipD,GAAkBriT,EAAMhP,GAAK90B,MAAO80B,GAAKzpC,OAAOqhV,KAGrG2Z,GAAgB,SAAUviT,EAAMhP,GAClC,OAAIoxT,GAAiBpxT,GACZ23S,GAAc33S,GAEd23S,GAAc33S,IAAQqoQ,GAAYF,aAAakpD,GAAkBriT,EAAMhP,GAAK90B,MAAO80B,GAAKzpC,OAAOohV,KAGtG6Z,GAAa,SAAUr/V,GACzB,OAAOyH,EAAS,CACd,MACA,YACCzH,IAEDs/V,GAAU,SAAUzxT,GACtB,OAAOimQ,GAAuBjmQ,GAAK1pC,MAAK,SAAUu4E,GAChD,OAAO/5D,GAAQ+5D,EAAK7vD,OACnBzoB,QAAO,SAAUs4E,GAClB,OAAO2iR,GAAW9mU,GAAMmkD,EAAK,oBAG7B6iR,GAAsB,SAAU1iT,EAAMhP,GACxC,OAAOqoQ,GAAYD,aAAap5P,EAAK9jC,MAAO80B,GAAK3qC,UAE/Cs8V,GAAgB,SAAU3iT,EAAMhP,GAClC,OAAOqoQ,GAAYF,aAAan5P,EAAK9jC,MAAO80B,GAAK3qC,UAE/Cu8V,GAAmB,SAAU5iT,EAAMhP,GACrC,OAAO0xT,GAAoB1iT,EAAMhP,IAAQ2xT,GAAc3iT,EAAMhP,IAAQoqT,GAAiBp7S,EAAMhP,IAAQqqT,GAAer7S,EAAMhP,IAAQ8iT,GAAU9zS,EAAMhP,IAAQ6iT,GAAW7zS,EAAMhP,IAExK6xT,GAAkB,SAAU7iT,EAAMhP,GACpC,OAAIyxT,GAAQzxT,KAGH4xT,GAAiB5iT,EAAMhP,IAAQsxT,GAAetiT,EAAMhP,IAAQuxT,GAAcviT,EAAMhP,KAGvF8xT,GAAoB,SAAU9iT,EAAMhP,GACtC,OAAIyxT,GAAQzxT,KAGHoqT,GAAiBp7S,EAAMhP,IAAQsqT,GAAct7S,EAAMhP,IAAQ8iT,GAAU9zS,EAAMhP,IAAQsxT,GAAetiT,EAAMhP,KAG/G6lQ,GAAY,SAAU7lQ,GACxB,IAAIrhB,EAAYqhB,EAAIrhB,YAChBwU,EAAS6M,EAAI7M,SACjB,OAAIoiK,GAASt2K,OAAON,IAAcwU,EAASxU,EAAU5F,KAAK/mB,OACjDoqS,GAAcz9Q,EAAWwU,EAAS,GAElC6M,GAGP+xT,GAAqB,SAAU/iT,EAAMhP,GACvC,IAAIgyT,EAAWnsD,GAAU7lQ,GACzB,OAAIyxT,GAAQO,KAGH3H,GAAer7S,EAAMgjT,IAAazH,GAAav7S,EAAMgjT,IAAanP,GAAW7zS,EAAMgjT,IAAaT,GAAcviT,EAAMgjT,KAG3HC,GAAgB,SAAUjjT,EAAMhP,GAClC,OAAO8xT,GAAkB9iT,EAAMhP,IAAQ+xT,GAAmB/iT,EAAMhP,IAE9DkyT,GAAW,SAAUlnV,EAAMmoB,GAC7B,OAAO+2Q,GAAOl/R,EAAKwkE,OAAOr8C,KAExBg/T,GAAU,SAAUnyT,GACtB,IAAIrhB,EAAYqhB,EAAIrhB,YACpB,OAAO42K,GAASt2K,OAAON,IAAc1N,GAAW0N,EAAU5F,KAAM4vB,KAE9DypT,GAAsB,SAAUpnV,GAClC,IAAIqnV,EAAQrnV,EAAKkY,MAAM,IACvB,OAAO9sB,EAAIi8V,GAAO,SAAUljR,EAAKv7E,GAC/B,OAAIs2S,GAAO/6N,IAAQv7E,EAAI,GAAKA,EAAIy+V,EAAMrgW,OAAS,GAAKo4S,GAAUioD,EAAMz+V,EAAI,KAAOw2S,GAAUioD,EAAMz+V,EAAI,IAC1F,IAEAu7E,KAERhyE,KAAK,KAENm1V,GAAuB,SAAUtjT,EAAMlkC,GACzC,IAAIE,EAAOF,EAAKiO,KACZ8mU,EAAWzjD,GAActxR,EAAM,GACnC,SAAIonV,GAASlnV,EAAM,IAAOinV,GAAcjjT,EAAM6wS,MAC5C/0U,EAAKiO,KAAO,IAAM/N,EAAK3R,MAAM,IACtB,IAKPk5V,GAAkC,SAAUznV,GAC9C,IAAIE,EAAOF,EAAKiO,KACZy5U,EAAUJ,GAAoBpnV,GAClC,OAAIwnV,IAAYxnV,IACdF,EAAKiO,KAAOy5U,GACL,IAKPC,GAAqB,SAAUzjT,EAAMlkC,GACvC,IAAIE,EAAOF,EAAKiO,KACZwgU,EAAUn9C,GAActxR,EAAME,EAAKhZ,OAAS,GAChD,SAAIkgW,GAASlnV,EAAMA,EAAKhZ,OAAS,IAAOigW,GAAcjjT,EAAMuqS,MAC1DzuU,EAAKiO,KAAO/N,EAAK3R,MAAM,GAAI,GAAK,KACzB,IAKPq5V,GAAiB,SAAU1jT,EAAMhP,GACnC,OAAO1oC,EAAOP,KAAKipC,GAAKvpC,OAAO07V,IAAS77V,MAAK,SAAU0pC,GACrD,IAAIrhB,EAAYqhB,EAAIrhB,YAChB8kP,EAAa6uF,GAAqBtjT,EAAMrwB,IAAc4zU,GAAgC5zU,IAAc8zU,GAAmBzjT,EAAMrwB,GACjI,OAAO8kP,EAAansQ,EAAOP,KAAKipC,GAAO1oC,EAAOrC,WAG9C09V,GAAyB,SAAUpsR,GACrC,IAAIv3B,EAAOzjC,GAAQZ,QAAQ47D,EAAOv8C,WAC9Bu8C,EAAOt8B,UAAUmtG,eACnBs7M,GAAe1jT,EAAMotP,GAAcE,eAAe/1N,EAAOt8B,UAAU6nC,WAAWz7E,MAAK,SAAU2pC,GAC3FumC,EAAOt8B,UAAUm8H,OAAOpmI,EAAIq8P,eAK9Bu2D,GAA0B,SAAU5jT,GACtC,OAAO,SAAU89H,GACf,OAAOA,EAASr3K,MAAK,SAAU2d,GAC7B,OAAOi1R,GAAYD,aAAap5P,EAAK9jC,MAAO2xR,GAAgBhgR,OAAOzJ,OAClE,SAAUA,GACX,OAAOi1R,GAAYC,gBAAgBl1R,MAClC,SAAUA,GACX,OAAOi1R,GAAYE,eAAen1R,MACjC,SAAUA,GACX,OAAOi1R,GAAYF,aAAan5P,EAAK9jC,MAAO2xR,GAAgB5/Q,MAAM7J,SAIpEy/U,GAAkC,SAAU7jT,EAAMhP,GACpD,OAAO,SAAU8yT,GACf,OAAOjB,GAAgB7iT,EAAM8jT,GAAY5B,GAAqBlxT,GAAOmxT,GAAsBnxT,KAG3F+yT,GAAiB,SAAUxsR,GAC7B,OAAO,SAAUvmC,GAGf,OAFAumC,EAAOt8B,UAAUm8H,OAAOpmI,EAAIq8P,WAC5B91N,EAAOogB,eACA,IAGPqsQ,GAA+B,SAAUzsR,GAC3C,IAAIvmC,EAAM68P,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UACtD9iC,EAAOzjC,GAAQZ,QAAQ47D,EAAOv8C,WAClC,GAAIu8C,EAAOt8B,UAAUmtG,cAAe,CAClC,IAAIq5L,EAAiBn+U,EAAM8+U,GAAYX,eAAgBlqQ,GACnDy1N,EAAgBa,GAAgBP,eAAe/1N,EAAOt8B,UAAU6nC,UACpE,OAAOihQ,GAAiBf,aAAavB,EAAgBlqQ,EAAOv8C,UAAWgyQ,GAAe1lS,KAAKs8V,GAAwB5jT,IAAO14C,KAAKu8V,GAAgC7jT,EAAMhP,IAAMzpC,OAAOw8V,GAAexsR,IAEjM,OAAO,GAIP0sR,GAA2B,SAAU1sR,EAAQ8gC,GAC/C+3O,GAAU/nU,QAAQ,CAAC,CACfo/G,QAASsrL,GAAGrrL,SACZj9G,OAAQ2lU,GAAU3lU,OAAOu5U,GAA8BzsR,KACrD8gC,GAAKhxG,MAAK,SAAUoB,GACxB4vG,EAAI/tF,qBAGJi0K,GAAU,SAAUhnH,GACtBA,EAAOpjC,GAAG,WAAW,SAAUkkE,IACI,IAA7BA,EAAI6sE,sBACN++K,GAAyB1sR,EAAQ8gC,OAInC6rP,GAAW,CAAE3yR,MAAOgtH,IAEpB4lK,GAA0B,SAAU5sR,GACtC,OAAOxyC,GAAWxoB,GAAQZ,QAAQ47D,EAAOv8C,WAAY,qBAAqBv0B,KAAKvD,EAAS,OAAO,SAAU28E,GACvG,OAAOA,EAAI3jE,UAGXkoV,GAAsB,SAAU7sR,GAClCA,EAAOt8B,UAAUm8H,OAAO7/F,EAAOt8B,UAAU6nC,WAEvCuhR,GAA0B,SAAU9sR,EAAQ+sR,GAC1CA,EAAoB3zU,aAAa,oBACnC84Q,GAAwB66D,GACxBF,GAAoB7sR,GACpBA,EAAOt8B,UAAU88J,eAAeusJ,KAGhCC,GAAuB,SAAUhtR,EAAQnyE,GAC3C,IAAIk/V,EAAsBH,GAAwB5sR,GAClD,GAAK+sR,EAGL,MAAe,qBAAXl/V,EAAEsE,MACJtE,EAAEklB,iBACFllB,EAAEw8B,uBACFyiU,GAAwB9sR,EAAQ+sR,SAG9B77D,GAAW67D,KACbD,GAAwB9sR,EAAQ+sR,GAChC/sR,EAAOigB,YAAY39D,SAGnBilK,GAAU,SAAUvnH,GACtBA,EAAOpjC,GAAG,yBAA0B7wC,EAAMihW,GAAsBhtR,KAE9DitR,GAAsB,CAAEjzR,MAAOutH,IAE/B2lK,GAAYvhV,KAAW1C,QACvBkkV,GAAe,SAAUntR,GAC3B,IAAIotR,EAAmB5lS,IAAM,WACtBwY,EAAOy+O,WACV2tC,GAAuBpsR,KAExB,GACCktR,GAAU5lV,SACZ04D,EAAOpjC,GAAG,YAAY,SAAU/uC,GAC9Bu/V,EAAiB/lR,cAEnBrH,EAAOpjC,GAAG,UAAU,SAAU/uC,GAC5Bu/V,EAAiBjmR,cAInB4gH,GAAU,SAAU/nH,GACtBmtR,GAAantR,GACbA,EAAOpjC,GAAG,SAAS,SAAU/uC,IACL,IAAlBA,EAAEw/V,aACJjB,GAAuBpsR,OAKzBstR,GAA2B,SAAUttR,EAAQ8gC,GAC/C+3O,GAAU/nU,QAAQ,CAChB,CACEo/G,QAASsrL,GAAGC,IACZvoS,OAAQuiU,GAAmBz1Q,GAAQ,IAErC,CACEkwD,QAASsrL,GAAGE,KACZxoS,OAAQuiU,GAAmBz1Q,GAAQ,KAEpC8gC,GAAKhxG,MAAK,SAAUoB,GACrB4vG,EAAI/tF,qBAGJw6U,GAAU,SAAUvtR,GACtBA,EAAOpjC,GAAG,WAAW,SAAUkkE,IACI,IAA7BA,EAAI6sE,sBACN2/K,GAAyBttR,EAAQ8gC,OAInC0sP,GAAc,CAAExzR,MAAOuzR,IAEvBE,GAAU,SAAUztR,GACtB,IAAIqU,EAAQ05P,GAAkBH,mBAAmB5tQ,GACjDitR,GAAoBjzR,MAAMgG,GAC1B+4Q,GAAU/+Q,MAAMgG,EAAQqU,GACxBkwQ,GAAoBvqR,MAAMgG,EAAQqU,GAClCo2Q,GAASzwR,MAAMgG,GACf2sR,GAAS3yR,MAAMgG,GACf+nH,GAAQ/nH,GACRwtR,GAAYxzR,MAAMgG,IAEhB0tR,GAAoB,CAAE1zR,MAAOyzR,IAE7BE,GAAa,WACf,SAASA,EAAW3tR,GAGlB,IAAI74B,EAFJx5C,KAAKigW,SAAW,GAChBjgW,KAAKqyE,OAASA,EAEd,IAAItvE,EAAO/C,KACL,sBAAuBqyE,EAAOmI,UAClCnI,EAAOpjC,GAAG,wCAAwC,SAAU/uC,GAC1D,IAAIggW,EAAWC,EACfD,EAAY7tR,EAAOt8B,UAAU6nC,SAC7BuiR,EAAU,CACRlqT,eAAgBiqT,EAAUjqT,eAC1BuB,YAAa0oT,EAAU1oT,YACvBC,aAAcyoT,EAAUzoT,aACxBC,UAAWwoT,EAAUxoT,WAER,eAAXx3C,EAAEsE,MAA0B2zT,GAAarhB,KAAKqpD,EAAS3mT,IACzD64B,EAAOqf,KAAK,mBAEdl4C,EAAU2mT,KAGd9tR,EAAOpjC,GAAG,eAAe,WACvBojC,EAAOqf,KAAK,sBAEdrf,EAAOpjC,GAAG,mBAAmB,WAC3B,IAAIqhR,EAAWj+O,EAAOt8B,UAAUd,UAAS,IACpCq7Q,IAAan3C,GAAIxzQ,OAAS0sE,EAAOt8B,UAAUmtG,eAG5CsxK,GAAaniP,KAAYtvE,EAAKq9V,kBAAkB9vC,IAAaj+O,EAAOr7D,IAAIoqL,UAAUkvH,EAAUj+O,EAAOv8C,YACrGu8C,EAAOogB,YAAY,CAAE8uN,iBAAiB,OAG1ClvO,EAAOpjC,GAAG,WAAW,SAAU/uC,IACxBA,EAAE8/K,sBAAwBw0I,GAAaniP,KACE,QAAxCA,EAAOt8B,UAAUwkC,UAAU3vD,SAC7BkuP,GAAMv/G,iBAAiBlnF,GAAQ,WAC7BA,EAAOogB,iBAGTpgB,EAAOogB,kBA4Cf,OAvCAutQ,EAAWngW,UAAU4yF,YAAc,SAAU90F,GAC3C,IACIiZ,EAAMg9I,EAAS94G,EADf/E,EAAY/1C,KAAKqyE,OAAOt8B,UAExB/1C,KAAKqyE,OAAO8hF,aAAep+G,IAAc/1C,KAAKqyE,OAAOC,SAAS+tR,qBAAuBrgW,KAAKqyE,OAAO/tB,KAAKuuB,eACxG/3B,EAAO96C,KAAKqyE,OAAOv8C,UACnBlf,EAAOm/B,EAAUd,UAAS,IAAS6F,EAC/BlkC,EAAKmR,gBAAkB/nB,KAAKqyE,OAAOmI,UAAax6E,KAAKqyE,OAAOr7D,IAAIoqL,UAAUxqL,EAAMkkC,KAClFlkC,EAAOkkC,GAET84G,EAAU,GACV5zJ,KAAKqyE,OAAOr7D,IAAI2kE,UAAU/kE,GAAM,SAAUA,GACxC,GAAIA,IAASkkC,EACX,OAAO,EAET84G,EAAQtuJ,KAAKsR,MAEfjZ,EAAOA,GAAQ,GACfA,EAAKuhB,QAAUtI,EACfjZ,EAAKi2J,QAAUA,EACf5zJ,KAAKqyE,OAAOqf,KAAK,aAAc/zF,KAGnCqiW,EAAWngW,UAAUugW,kBAAoB,SAAU9vC,GACjD,IAAI5wT,EAAG4gW,EAEP,GADAA,EAActgW,KAAKqyE,OAAO46H,EAAEqjH,GAAUv3B,aAAa/4R,KAAKqyE,OAAOv8C,WAAWnB,IAAI27R,GAC1EgwC,EAAYxiW,SAAWkC,KAAKigW,SAASniW,OAAQ,CAC/C,IAAK4B,EAAI4gW,EAAYxiW,OAAQ4B,GAAK,EAAGA,IACnC,GAAI4gW,EAAY5gW,KAAOM,KAAKigW,SAASvgW,GACnC,MAGJ,IAAW,IAAPA,EAEF,OADAM,KAAKigW,SAAWK,GACT,EAIX,OADAtgW,KAAKigW,SAAWK,GACT,GAEFN,EArFQ,GAwFbO,GAAuB,SAAUluR,GACnCA,EAAOpjC,GAAG,SAAS,SAAU/uC,GACvBmyE,EAAOr7D,IAAI2kE,UAAUz7E,EAAEkJ,OAAQ,YACjClJ,EAAEklB,qBAIJo7U,GAAgB,SAAUnuR,GAC5BA,EAAOgqH,OAAOC,cAAc,WAAW,SAAU9iD,GAC/Cr3I,EAAKq3I,GAAM,SAAUxkD,GACnBA,EAAQtgE,KAAK,gBAAiBsgE,EAAQtgE,KAAK,SAC3CsgE,EAAQtgE,KAAK,OAAQ,cAGzB29C,EAAOkqH,WAAWD,cAAc,WAAW,SAAU9iD,GACnDr3I,EAAKq3I,GAAM,SAAUxkD,GACnB,IAAIn0C,EAAOm0C,EAAQtgE,KAAK,iBACxBsgE,EAAQtgE,KAAK,OAAQjwB,EAASo8C,GAAQA,EAAO,MAC7Cm0C,EAAQtgE,KAAK,gBAAiB,aAIhC+rU,GAAU,SAAUpuR,GACtBkuR,GAAqBluR,GACrBmuR,GAAcnuR,IAGZquR,GAAkB,SAAU9pV,GAC9B,OAAOyqL,GAASv2K,UAAUlU,IAASgqL,GAAYvpL,GAAQZ,QAAQG,KAE7D+pV,GAAuB,SAAUtuR,GACnC,IAAIr8B,EAAMq8B,EAAOt8B,UAAU6nC,SACvBs1N,EAAWhL,GAAcE,eAAepyP,GACxCq/P,EAASnN,GAAcG,aAAaryP,GACxC,GAAIkyP,GAAcO,kBAAkByK,GAAW,CAC7C,IAAIzoR,EAAYyoR,EAASzoR,YACrBi2U,GAAgBj2U,IAClB0pR,GAAYC,gBAAgB3pR,GAAWtoB,MAAK,SAAU2pC,GACpD,OAAOkK,EAAIQ,SAAS1K,EAAIrhB,YAAaqhB,EAAI7M,aAI/C,GAAIipQ,GAAcO,kBAAkB4M,GAAS,CACvC5qR,EAAYyoR,EAASzoR,YACrBi2U,GAAgBj2U,IAClB0pR,GAAYE,eAAe5pR,GAAWtoB,MAAK,SAAU2pC,GACnD,OAAOkK,EAAIa,OAAO/K,EAAIrhB,YAAaqhB,EAAI7M,aAI7CozC,EAAOt8B,UAAUm8H,OAAO++J,GAAgBr2P,UAAU5kC,KAEhD4qT,GAAU,SAAUvuR,GACtBA,EAAOpjC,GAAG,SAAS,SAAU/uC,GACvBA,EAAE6lB,QAAU,GACd46U,GAAqBtuR,OAKvBwuR,GAAsB,SAAUlmR,GAClC,IAAIzkE,EAAK0wI,EAASrrH,EAAK2rQ,EAKvB,OAJAA,EAAavsN,EAAIpgD,wBACjBrkB,EAAMykE,EAAI5yD,cACV6+H,EAAU1wI,EAAI8R,gBACduT,EAAMrlB,EAAI+R,YACH,CACL+S,IAAKksQ,EAAWlsQ,IAAMO,EAAII,YAAcirH,EAAQ9qH,UAChDf,KAAMmsQ,EAAWnsQ,KAAOQ,EAAIM,YAAc+qH,EAAQ7qH,aAGlD+kU,GAAkB,SAAUzuR,GAC9B,OAAOA,EAAO0C,OAAS8rR,GAAoBxuR,EAAOv8C,WAAa,CAC7DiF,KAAM,EACNC,IAAK,IAGL+lU,GAAoB,SAAU1uR,GAChC,IAAIx8C,EAAOw8C,EAAOv8C,UAClB,OAAOu8C,EAAO0C,OAAS,CACrBh6C,KAAMlF,EAAK+F,WACXZ,IAAKnF,EAAK6F,WACR,CACFX,KAAM,EACNC,IAAK,IAGLgmU,GAAgB,SAAU3uR,GAC5B,IAAIx8C,EAAOw8C,EAAOv8C,UAAW5e,EAASm7D,EAAOmI,SAASxyD,gBAClDi5U,EAAe,CACjBlmU,KAAMlF,EAAK+F,WACXZ,IAAKnF,EAAK6F,WAERwlU,EAAe,CACjBnmU,KAAMlF,EAAK+F,YAAc1kB,EAAO0kB,WAChCZ,IAAKnF,EAAK6F,WAAaxkB,EAAOwkB,WAEhC,OAAO22C,EAAO0C,OAASksR,EAAeC,GAEpCC,GAAmB,SAAU9uR,EAAQrxD,GACvC,GAAIA,EAAM5X,OAAO2e,gBAAkBsqD,EAAOmI,SAAU,CAClD,IAAI4mR,EAAiBP,GAAoBxuR,EAAOyiE,2BAC5CusN,EAAiBL,GAAc3uR,GACnC,MAAO,CACLt3C,KAAM/Z,EAAMyvJ,MAAQ2wL,EAAermU,KAAOsmU,EAAetmU,KACzDC,IAAKha,EAAM0vJ,MAAQ0wL,EAAepmU,IAAMqmU,EAAermU,KAG3D,MAAO,CACLD,KAAM/Z,EAAMyvJ,MACZz1I,IAAKha,EAAM0vJ,QAGX4wL,GAAoB,SAAUC,EAAcF,EAAgBG,GAC9D,MAAO,CACL/wL,MAAO+wL,EAAczmU,KAAOwmU,EAAaxmU,KAAOsmU,EAAetmU,KAC/D21I,MAAO8wL,EAAcxmU,IAAMumU,EAAavmU,IAAMqmU,EAAermU,MAG7DymU,GAAO,SAAUpvR,EAAQrxD,GAC3B,OAAOsgV,GAAkBR,GAAgBzuR,GAAS0uR,GAAkB1uR,GAAS8uR,GAAiB9uR,EAAQrxD,KAEpG0gV,GAAgB,CAAED,KAAMA,IAExBE,GAA2BtgK,GAAS/oD,uBAAwBspN,GAA0BvgK,GAAShpD,sBAC/FwpN,GAAc,SAAUrgM,EAAS7mF,GACnC,OAAOgnR,GAAyBhnR,IAAQA,IAAQ6mF,GAE9CsgM,GAAoB,SAAUzvR,EAAQ51B,EAAeslT,GACvD,OAAItlT,IAAkBslT,IAAe1vR,EAAOr7D,IAAIoqL,UAAU3kJ,EAAeslT,KAGjEJ,GAAyBllT,IAE/BulT,GAAe,SAAUrnR,GAC3B,IAAIsnR,EAAWtnR,EAAIjwD,WAAU,GAE7B,OADAu3U,EAASt2U,gBAAgB,qBAClBs2U,GAELC,GAAc,SAAU7vR,EAAQsI,EAAK98C,EAAOrD,GAC9C,IAAI2nU,EAAYxnR,EAAIjwD,WAAU,GAC9B2nD,EAAOr7D,IAAIu5M,UAAU4xI,EAAW,CAC9BtkU,MAAOA,EACPrD,OAAQA,IAEV63C,EAAOr7D,IAAI84L,UAAUqyJ,EAAW,oBAAqB,MACrD,IAAIC,EAAW/vR,EAAOr7D,IAAIiwB,OAAO,MAAO,CACtC,MAAS,qBACT,iBAAkB,MAClB,aAAgB,KAChB,gBAAmB,UAiBrB,OAfAorC,EAAOr7D,IAAIu5M,UAAU6xI,EAAU,CAC7B3iU,SAAU,WACVihG,QAAS,GACTyd,SAAU,SACVqkC,OAAQ,EACR1hB,QAAS,EACTrgF,OAAQ,EACR5iD,MAAOA,EACPrD,OAAQA,IAEV63C,EAAOr7D,IAAIu5M,UAAU4xI,EAAW,CAC9B1hR,OAAQ,EACRijJ,UAAW,eAEb0+H,EAASh5U,YAAY+4U,GACdC,GAELC,GAAoB,SAAUD,EAAUt3C,GACtCs3C,EAAS3hV,aAAeqqS,GAC1BA,EAAQ1hS,YAAYg5U,IAGpBE,GAAY,SAAUF,EAAU3iU,EAAU5B,EAAOrD,EAAQsT,EAAMC,GACjE,IAAIw0T,EAAY,EAAG18D,EAAY,EAC/Bu8D,EAAS1sU,MAAMqF,KAAO0E,EAASgxI,MAAQ,KACvC2xL,EAAS1sU,MAAMsF,IAAMyE,EAASixI,MAAQ,KAClCjxI,EAASgxI,MAAQ5yI,EAAQiQ,IAC3By0T,EAAY9iU,EAASgxI,MAAQ5yI,EAAQiQ,GAEnCrO,EAASixI,MAAQl2I,EAASuT,IAC5B83P,EAAYpmQ,EAASixI,MAAQl2I,EAASuT,GAExCq0T,EAAS1sU,MAAMmI,MAAQA,EAAQ0kU,EAAY,KAC3CH,EAAS1sU,MAAM8E,OAASA,EAASqrQ,EAAY,MAE3C28D,GAAgB,SAAU7nR,GACxBA,GAAOA,EAAIl6D,YACbk6D,EAAIl6D,WAAWoJ,YAAY8wD,IAG3B8nR,GAA2B,SAAUviW,GACvC,OAAoB,IAAbA,EAAE4oF,QAEP45Q,GAAsB,SAAU9zV,GAClC,OAAOA,EAAMsQ,SAEXyjV,GAAc,SAAU/zV,EAAO6wB,GACjC,MAAO,CACLgxI,MAAOhxI,EAASgxI,MAAQ7hK,EAAMg0V,KAC9BlyL,MAAOjxI,EAASixI,MAAQ,IAGxBmyL,GAAU,SAAUj0V,EAAOyjE,GAC7B,OAAO,SAAUnyE,GACf,GAAIuiW,GAAyBviW,GAAI,CAC/B,IAAI4iW,EAAQt8V,EAAK6rE,EAAOr7D,IAAIo7E,WAAWlyF,EAAEkJ,QAASg9R,GAAUpkS,GAAG2/V,GAA0BC,KAA0BlgW,MAAM,MACzH,GAAImgW,GAAYxvR,EAAOv8C,UAAWgtU,GAAQ,CACxC,IAAIC,EAAS1wR,EAAOr7D,IAAI85J,OAAOgyL,GAC3Bh4C,EAAUz4O,EAAOv8C,UACjB5e,EAASm7D,EAAOmI,SAASxyD,gBAC7BpZ,EAAMsQ,QAAU4jV,EAChBl0V,EAAM0xH,QAAUpgI,EAAEogI,QAClB1xH,EAAM2xH,QAAUrgI,EAAEqgI,QAClB3xH,EAAMk/B,MAAQukC,EAAO0C,OAAS+1O,EAAQvrL,YAAcroH,EAAOigB,aAAe,EAC1EvoB,EAAMm/B,MAAQskC,EAAO0C,OAAS+1O,EAAQtrL,aAAetoH,EAAOujB,cAAgB,EAC5E7rB,EAAMg0V,KAAO1iW,EAAEuwK,MAAQsyL,EAAO5kW,EAC9ByQ,EAAMo0V,KAAO9iW,EAAEwwK,MAAQqyL,EAAO5rV,EAC9BvI,EAAMivB,MAAQilU,EAAM3rU,YACpBvoB,EAAM4rB,OAASsoU,EAAMroU,aACrB7rB,EAAMq0V,MAAQf,GAAY7vR,EAAQywR,EAAOl0V,EAAMivB,MAAOjvB,EAAM4rB,YAKhEk/I,GAAS,SAAU9qK,EAAOyjE,GAC5B,IAAI6wR,EAAwBpqF,GAAMp/L,UAAS,SAAU/8C,EAASC,GAC5Dy1C,EAAOyzO,oBAAoBkqC,gBAC3B39Q,EAAOt8B,UAAUumR,aAAa3/R,EAASC,KACtC,GACH,OAAO,SAAU18B,GACf,IAAIs3D,EAAW1qC,KAAKqN,IAAIrN,KAAK8gB,IAAI1tC,EAAEogI,QAAU1xH,EAAM0xH,SAAUxzG,KAAK8gB,IAAI1tC,EAAEqgI,QAAU3xH,EAAM2xH,UACxF,GAAImiO,GAAoB9zV,KAAWA,EAAMu0V,UAAY3rS,EAAW,GAAI,CAClE,IAAI75D,EAAO00E,EAAOqf,KAAK,YAAa,CAAEtoF,OAAQwF,EAAMsQ,UACpD,GAAIvhB,EAAKqiL,qBACP,OAEFpxK,EAAMu0V,UAAW,EACjB9wR,EAAOtvD,QAET,GAAInU,EAAMu0V,SAAU,CAClB,IAAIC,EAAYT,GAAY/zV,EAAO8yV,GAAcD,KAAKpvR,EAAQnyE,IAC9DmiW,GAAkBzzV,EAAMq0V,MAAO5wR,EAAOv8C,WACtCwsU,GAAU1zV,EAAMq0V,MAAOG,EAAWx0V,EAAMivB,MAAOjvB,EAAM4rB,OAAQ5rB,EAAMk/B,KAAMl/B,EAAMm/B,MAC/Em1T,EAAsBhjW,EAAEy8B,QAASz8B,EAAE08B,YAIrCymU,GAAe,SAAUttT,GAC3B,IAAIC,EAAMD,EAAU0+Q,SAASl7Q,WAAW,GACpCtD,EAAiBD,EAAIC,eACzB,OAAmC,IAA5BA,EAAe72B,SAAiB62B,EAAex1B,WAAaw1B,GAEjEokI,GAAO,SAAUzrK,EAAOyjE,GAC1B,OAAO,SAAUnyE,GACf,GAAI0O,EAAMu0V,UACJrB,GAAkBzvR,EAAQgxR,GAAahxR,EAAOt8B,WAAYnnC,EAAMsQ,SAAU,CAC5E,IAAIokV,EAAgBtB,GAAapzV,EAAMsQ,SACnCvhB,EAAO00E,EAAOqf,KAAK,OAAQ,CAC7B6xQ,YAAaD,EACb3mU,QAASz8B,EAAEy8B,QACXC,QAAS18B,EAAE08B,UAERj/B,EAAKqiL,uBACRsjL,EAAgB3lW,EAAK4lW,YACrBlxR,EAAOigB,YAAYC,UAAS,WAC1BiwQ,GAAc5zV,EAAMsQ,SACpBmzD,EAAOgmH,cAAchmH,EAAOr7D,IAAIslR,aAAagnE,IAC7CjxR,EAAOyzO,oBAAoBkqC,oBAKnCwT,GAAgB50V,KAGhB4R,GAAO,SAAU5R,EAAOyjE,GAC1B,OAAO,WACDzjE,EAAMu0V,UACR9wR,EAAOqf,KAAK,WAEd8xQ,GAAgB50V,KAGhB40V,GAAkB,SAAU50V,GAC9BA,EAAMu0V,UAAW,EACjBv0V,EAAMsQ,QAAU,KAChBsjV,GAAc5zV,EAAMq0V,QAElBQ,GAAqB,SAAUpxR,GACjC,IACIqxR,EAASC,EAAkBC,EAAaC,EAAaC,EAAgB90C,EADrEpgT,EAAQ,GAEZ80V,EAAUhmE,GAAWvqN,IACrB67O,EAAe5xT,EAAW+Y,SAC1BwtV,EAAmBd,GAAQj0V,EAAOyjE,GAClCuxR,EAAclqL,GAAO9qK,EAAOyjE,GAC5BwxR,EAAcxpL,GAAKzrK,EAAOyjE,GAC1ByxR,EAAiBtjV,GAAK5R,EAAOyjE,GAC7BA,EAAOpjC,GAAG,YAAa00T,GACvBtxR,EAAOpjC,GAAG,YAAa20T,GACvBvxR,EAAOpjC,GAAG,UAAW40T,GACrBH,EAAQthW,KAAK4sT,EAAc,YAAa40C,GACxCF,EAAQthW,KAAK4sT,EAAc,UAAW80C,GACtCzxR,EAAOpjC,GAAG,UAAU,WAClBy0T,EAAQxmU,OAAO8xR,EAAc,YAAa40C,GAC1CF,EAAQxmU,OAAO8xR,EAAc,UAAW80C,OAGxCC,GAAc,SAAU1xR,GAC1BA,EAAOpjC,GAAG,QAAQ,SAAU/uC,GAC1B,IAAI8jW,EAAkC,qBAAd9jW,EAAEy8B,QAA0B01C,EAAOmI,SAASpjE,iBAAiBlX,EAAEy8B,QAASz8B,EAAE08B,SAAW,MACzG+kU,GAAyBqC,IAAerC,GAAyBtvR,EAAOr7D,IAAIwmR,yBAAyBwmE,MACvG9jW,EAAEklB,qBAIJ2K,GAAO,SAAUsiD,GACnBoxR,GAAmBpxR,GACnB0xR,GAAY1xR,IAEV4xR,GAAoB,CAAEl0U,KAAMA,IAE5Bm0U,GAAU,SAAU7xR,GACtB,IAAI8xR,EAAmBtqS,IAAM,WAC3B,IAAKwY,EAAO2yD,SAAW3yD,EAAOv8C,UAAUpwB,SAAStI,EAAW+Y,SAAS8zB,eAAgB,CACnF,IAAI+L,EAAMq8B,EAAOt8B,UAAU6nC,SAC3B,GAAI5nC,EAAI8B,UAAW,CACjB,IAAIyrS,EAAaD,GAAiBjxQ,EAAQA,EAAOt8B,UAAU6nC,UAAU,GACrEvL,EAAOt8B,UAAUm8H,OAAOqxK,OAG3B,GACHlxQ,EAAOpjC,GAAG,SAAS,WACjBk1T,EAAiBzqR,cAEnBrH,EAAOpjC,GAAG,QAAQ,WAChBk1T,EAAiB3qR,aAGjB4qR,GAAW,CAAE/3R,MAAO63R,IAEpBG,GAA0BhjK,GAAShpD,sBACnCisN,GAA2BjjK,GAAS/oD,uBACpCisN,GAA2B,SAAUlyR,EAAQz7D,GAC/C,IAAIkkC,EAAOu3B,EAAOv8C,UAClB,MAAOlf,GAAQA,IAASkkC,EAAM,CAC5B,GAAIupT,GAAwBztV,IAAS0tV,GAAyB1tV,GAC5D,OAAOA,EAETA,EAAOA,EAAK6J,WAEd,OAAO,MAEL+jV,GAAqB,SAAUnyR,GACjC,IAQIoyR,EARA3qR,EAAU,SAAUljE,GACtB,OAAOy7D,EAAOr7D,IAAI8iE,QAAQljE,IAExBsjE,EAAW7H,EAAOv8C,UAClB4uU,EAAYh1D,GAAUr9N,EAAQ6H,EAAUJ,GAAS,WACnD,OAAOiqO,GAAY/5Q,SAASqoC,MAE1BsyR,EAAkB,OAAStyR,EAAOr7D,IAAIw1M,WAEtCo4I,EAAyB,SAAUjqR,GACrC,OAAOtI,EAAOr7D,IAAIinM,SAAStjI,EAAK,4BAE9BkqR,EAA0B,WAC5B,IAAIp6U,EAAY4nD,EAAOr7D,IAAI9O,IAAIy8V,GAC/B,OAAOl6U,EAAYA,EAAU+nL,qBAAqB,KAAK,GAAK/nL,GAE1Dq6U,EAAW,SAAUn/V,GACnBA,GACF0sE,EAAOt8B,UAAUm8H,OAAOvsK,IAGxBo/V,EAAW,WACb,OAAO1yR,EAAOt8B,UAAU6nC,UAEtBolQ,EAAY,SAAUx3S,EAAW50B,EAAM+R,EAAQkqL,GAIjD,IAAI3yM,EAMJ,YATuB,IAAnB2yM,IACFA,GAAiB,GAGnB3yM,EAAImyE,EAAOqf,KAAK,YAAa,CAC3BtoF,OAAQwN,EACR40B,UAAWA,EACX7iB,OAAQA,IAENzoB,EAAE8/K,qBACG,MAEL6yB,GACFxgI,EAAOt8B,UAAU88J,eAAej8L,GAAqB,IAAf40B,GAEjCk5T,EAAUliR,KAAK75D,EAAQ/R,KAE5BuoV,EAA0B,SAAUC,GAClCA,EAAoB3zU,aAAa,oBACnC84Q,GAAwB66D,GACxB0F,EAASC,KACT1yR,EAAOt8B,UAAU88J,eAAeusJ,KAGhCx8H,EAAiB,WACnBvwJ,EAAOpjC,GAAG,WAAW,SAAU/uC,GAC7B,IAAIyF,EAAQo/V,IACRp/V,EAAMmyC,WAAaszQ,GAAWL,kBAAkB14O,EAAQnyE,EAAEy8B,QAASz8B,EAAE08B,UACvEkoU,EAAS5hB,GAAmB7wQ,EAAQ1sE,GAAO,OAG/C0sE,EAAOpjC,GAAG,SAAS,SAAU/uC,GAC3B,IAAI8kW,EACJA,EAAsBT,GAAyBlyR,EAAQnyE,EAAEkJ,QACrD47V,IACEV,GAAyBU,KAC3B9kW,EAAEklB,iBACFitD,EAAOtvD,SAELshV,GAAwBW,IACtB3yR,EAAOr7D,IAAIoqL,UAAU4jK,EAAqB3yR,EAAOt8B,UAAUwkC,YAC7D0qR,QAKR5yR,EAAOpjC,GAAG,iBAAiB,WACzBg2T,OAEF5yR,EAAOpjC,GAAG,uCAAuC,WAC/C,OAAOy1T,EAAUj5T,gBAEnB,IAAIy5T,EAAoB,SAAU7yR,GAChCA,EAAOpjC,GAAG,OAAO,SAAU/uC,GACzB,IAAI8kW,EAAsBT,GAAyBlyR,EAAQnyE,EAAEkJ,QACzDk7V,GAAyBU,KAC3B9kW,EAAEklB,iBACF+/U,EAA4B/oR,GAAW/J,EAAQ2yR,QAEhD,IAEDI,EAAyB,SAAUzqR,GACrC,IAAI2mQ,EAAcluC,GAAYz4N,GAC9B,IAAKA,EAAIlyD,WACP,OAAO,EAET,IAAIyqR,EAAWvK,GAAgBhgR,OAAOgyD,EAAIlyD,YACtC28T,EAAS9D,EAAY9tU,KAAK0/R,GAC9B,OAAOkyC,IAAWjB,GAA6BiB,KAAYhB,GAA4BgB,IAErFp0C,EAAgB,SAAUO,EAAOC,GACnC,IAAIorC,EAASvqQ,EAAOr7D,IAAI2kE,UAAU41N,EAAOl/N,EAAOr7D,IAAI8iE,SAChD+iQ,EAASxqQ,EAAOr7D,IAAI2kE,UAAU61N,EAAOn/N,EAAOr7D,IAAI8iE,SACpD,OAAO8iQ,IAAWC,GAEhBwoB,EAAuB,SAAUz6L,EAAYohK,GAC/C,IAAIs5B,EAAcjzR,EAAOr7D,IAAI2kE,UAAUivF,EAAYv4F,EAAOr7D,IAAI8iE,SAC1Dg2N,EAAaz9N,EAAOr7D,IAAI2kE,UAAUqwP,EAAW35P,EAAOr7D,IAAI8iE,SAC5D,SAAIwrR,IAAejzR,EAAOr7D,IAAIoqL,UAAUkkK,EAAax1D,KAA2F,IAA5Ew0D,GAAyBC,GAAyBlyR,EAAQizR,MAGvHA,IAAgBt0D,EAAcs0D,EAAax1D,IAAes1D,EAAuBE,IAE1FJ,EAAkB7yR,GAClBA,EAAOpjC,GAAG,aAAa,SAAU/uC,GAC/B,IAAI8kW,EACA34L,EAAYnsK,EAAEkJ,OAClB,IAAIijK,IAAcnyF,GAAmC,SAAvBmyF,EAAUzhJ,UAAwBynD,EAAOr7D,IAAIoqL,UAAU/0B,EAAWnyF,MAG7B,IAA/DkxO,GAAWL,kBAAkB14O,EAAQnyE,EAAEy8B,QAASz8B,EAAE08B,SAItD,GADAooU,EAAsBT,GAAyBlyR,EAAQg6F,GACnD24L,EACEV,GAAyBU,IAC3B9kW,EAAEklB,iBACF+/U,EAA4B/oR,GAAW/J,EAAQ2yR,MAE/CC,IACMZ,GAAwBW,IAAwB9kW,EAAE+xD,UAAc27P,GAAWD,gBAAgBztT,EAAEy8B,QAASz8B,EAAE08B,QAASy1C,EAAOt8B,UAAU6nC,YACtIoyQ,IACA39Q,EAAOt8B,UAAUumR,aAAap8T,EAAEy8B,QAASz8B,EAAE08B,gBAG1C,IAAqC,IAAjCuzQ,GAAkB9jI,GAAsB,CACjD44L,IACAjV,IACA,IAAIvN,EAAYC,GAAaxoQ,EAAUh6E,EAAEy8B,QAASz8B,EAAE08B,SACpD,GAAI6lT,IACG4iB,EAAqBnlW,EAAEkJ,OAAQq5U,EAAU7rU,MAAO,CACnD1W,EAAEklB,iBACF,IAAIzf,EAAQq9U,EAAU,EAAGP,EAAU7rU,KAAM6rU,EAAU95T,QAAQ,GAC3D0pD,EAAOv8C,UAAU/S,QACjB+hV,EAASn/V,QAKjB0sE,EAAOpjC,GAAG,YAAY,SAAU/uC,GAC9B,IAAI2tT,GAAGG,gBAAgB9tT,GAGvB,OAAQA,EAAEqiI,SACV,QACM+hO,GAAyBjyR,EAAOt8B,UAAUwkC,YAC5Cr6E,EAAEklB,iBAEJ,UAGJitD,EAAOpjC,GAAG,qBAAqB,SAAU/uC,GACvC,IAAI81C,EAAM91C,EAAEyF,MACZ,GAAI8+V,EAA6B,CAC/B,IAAKA,EAA4BhkV,WAE/B,YADAgkV,EAA8B,MAGhCzuT,EAAMA,EAAI8lC,aACV9lC,EAAIomC,WAAWqoR,GACfvkW,EAAEyF,MAAQqwC,MAGdq8B,EAAOpjC,GAAG,qBAAqB,SAAU/uC,GACvCA,EAAEyF,MAAQ4/V,EAAoCrlW,EAAEyF,OAChD,IAAIqwC,EAAMmvT,EAA4BjlW,EAAEyF,MAAOzF,EAAEwyM,SAC7C18J,IACF91C,EAAEyF,MAAQqwC,MAGd,IAAI65K,EAAa,SAAUj5M,GACzB,MAAmB,gBAAZA,EAAKvV,IAEdgxE,EAAOpjC,GAAG,0BAA0B,SAAU/uC,GAC5C,IAAI81C,EAAM91C,EAAEyF,MACP6/V,EAAwBxvT,IAAS65K,EAAW75K,EAAIC,eAAex1B,aAClEuvU,IAEG4U,EAAuB5uT,EAAIC,eAAex1B,aAC7CwkV,OAGJ5yR,EAAOpjC,GAAG,QAAQ,SAAU/uC,GAC1B,IAAI4rN,EAAgB5rN,EAAE4rN,cACtB,IAAK5rN,EAAE8/K,sBAAwB9/K,EAAE4rN,gBAAkBqtD,GAAIpgQ,GAAI,CACzD,IAAI0sV,EAAuBZ,IACvBY,IACFvlW,EAAEklB,iBACF0mM,EAAcqE,YACdrE,EAAct1B,QAAQ,YAAaivK,EAAqB31F,WACxDhkD,EAAct1B,QAAQ,aAAcivK,EAAqBC,gBAI/DzB,GAAkBl0U,KAAKsiD,GACvB+xR,GAAS/3R,MAAMgG,IAEbszR,EAAyB,SAAU/uV,GACrC,OAAO0sR,GAAiB1sR,IAASgtR,GAAyBhtR,IAAS8sR,GAAuB9sR,IAExF4uV,EAA0B,SAAUxvT,GACtC,OAAO2vT,EAAuB3vT,EAAIC,iBAAmB0vT,EAAuB3vT,EAAIyB,eAE9E8tT,EAAsC,SAAUvvT,GAClD,IAAIgxK,EAAqB30I,EAAOlhE,OAAO8gM,wBACnCu1F,EAASn1N,EAAOr7D,IAAImlE,YACpBlmC,EAAiBD,EAAIC,eACrBuB,EAAcxB,EAAIwB,YAClBC,EAAezB,EAAIyB,aACnBC,EAAY1B,EAAI0B,UAmBpB,OAlBItvC,GAAI4+M,EAAoB/wK,EAAerrB,SAASlS,eAC9B,IAAhB8+B,EACFgwP,EAAO/wP,eAAeR,GAEtBuxP,EAAO9wP,cAAcT,GAGvBuxP,EAAOhxP,SAASP,EAAgBuB,GAE9BpvC,GAAI4+M,EAAoBvvK,EAAa7sB,SAASlS,eAC9B,IAAdg/B,EACF8vP,EAAO5wP,aAAaa,GAEpB+vP,EAAO1wP,YAAYW,GAGrB+vP,EAAO3wP,OAAOY,EAAcC,GAEvB8vP,GAEL29D,EAA8B,SAAUx/V,EAAO+sM,GACjD,IAAI97L,EAGAgvV,EAAyB5rT,EAAK/D,EAAgBuB,EAAaE,EAAWx3C,EAAG4nS,EAAey7D,EAAasC,EAFrG54J,EAAI56H,EAAO46H,EACXj2L,EAAMq7D,EAAOr7D,IAEjB,IAAKrR,EACH,OAAO,KAET,GAAIA,EAAMmyC,UAAW,CACnB,IAAK0tT,EAAwB7/V,GAC3B,IAAgB,IAAZ+sM,EAAmB,CAErB,GADAo1F,EAAgB+J,IAA4B,EAAG33N,EAAUv0E,GACrDwqS,GAAkBrI,EAAcvtN,SAAQ,IAC1C,OAAOyoQ,GAAW,EAAGl7C,EAAcvtN,SAAQ,IAAO,GAAO,GAE3D,GAAI41N,GAAkBrI,EAAcvtN,WAClC,OAAOyoQ,GAAW,EAAGl7C,EAAcvtN,WAAYutN,EAAc9D,WAAW,OAErE,CAEL,GADA8D,EAAgB+J,GAA2B,EAAG33N,EAAUv0E,GACpDwqS,GAAkBrI,EAAcvtN,WAClC,OAAOyoQ,EAAU,EAAGl7C,EAAcvtN,WAAYutN,EAAc9D,WAAW,GAEzE,GAAImM,GAAkBrI,EAAcvtN,SAAQ,IAC1C,OAAOyoQ,EAAU,EAAGl7C,EAAcvtN,SAAQ,IAAO,GAAO,GAI9D,OAAO,KAUT,GARAtkC,EAAiBtwC,EAAMswC,eACvBuB,EAAc7xC,EAAM6xC,YACpBE,EAAY/xC,EAAM+xC,UACc,IAA5BzB,EAAe72B,UAAkC,IAAhBo4B,GAAqB8sT,GAAyBruT,EAAex1B,cAChGw1B,EAAiBA,EAAex1B,WAChC+2B,EAAcxgC,EAAIuyL,UAAUtzJ,GAC5BA,EAAiBA,EAAex1B,YAEF,IAA5Bw1B,EAAe72B,SACjB,OAAO,KAKT,GAHIs4B,IAAcF,EAAc,GAAKvB,IAAmBtwC,EAAM8xC,eAC5D7gC,EAAOq/B,EAAez/B,WAAWghC,KAE9B8sT,GAAyB1tV,GAC5B,OAAO,KAOT,GALA2sV,EAAcsC,EAAkBjvV,EAAK8T,WAAU,GAC/CxqB,EAAImyE,EAAOqf,KAAK,iBAAkB,CAChCtoF,OAAQwN,EACR2sV,YAAaA,IAEXrjW,EAAE8/K,qBACJ,OAAO,KAET4lL,EAA0B/lU,GAAWxoB,GAAQZ,QAAQ47D,EAAOv8C,WAAY,IAAM6uU,GAAiBpjW,MAAK,WAClG,OAAO0rM,EAAE,OACR,SAAUtyH,GACX,OAAOsyH,EAAE,CAACtyH,EAAI3jE,WAEhBusV,EAAcrjW,EAAEqjW,YACuB,IAAnCqC,EAAwB9nW,SAC1B8nW,EAA0B34J,EAAE,oEAAoEv4K,KAAK,KAAMiwU,GAC3GiB,EAAwBjlO,SAAStuD,EAAOv8C,YAE1CnwB,EAAQ0sE,EAAOr7D,IAAImlE,YACfonR,IAAgBsC,GAAmB1sF,GAAIpgQ,IACzC6sV,EAAwBn8U,QAAQR,OAAO,sDAAyDA,OAAOs6U,GACvG59V,EAAM+wC,cAAckvT,EAAwB,GAAGn9U,WAAWA,YAC1D9iB,EAAMmxC,YAAYysT,KAElBqC,EAAwBn8U,QAAQR,OAAOwrB,IAAMxrB,OAAOs6U,GAAat6U,OAAOwrB,IACxE9uC,EAAM6wC,SAASovT,EAAwB,GAAGn9U,WAAY,GACtD9iB,EAAMkxC,OAAO+uT,EAAwB,GAAGhmK,UAAW,IAErDgmK,EAAwBtvU,IAAI,CAAE0E,IAAKhkB,EAAI85J,OAAOl6J,EAAMy7D,EAAOv8C,WAAW3e,IACtEyuV,EAAwB,GAAG7iV,QAC3Bi3B,EAAMq4B,EAAOt8B,UAAU0+Q,SACvBz6Q,EAAI60M,kBACJ70M,EAAI80M,SAASnpP,GACb,IAAImgW,EAAUzuV,GAAQZ,QAAQG,GAW9B,OAVAzU,EAAKw+E,GAActpE,GAAQZ,QAAQ47D,EAAOv8C,WAAY,yBAAyB,SAAU6kD,GAClF15E,GAAG6kW,EAASnrR,IACfjvD,GAASivD,EAAK,wBAGbtI,EAAOr7D,IAAIukL,UAAU3kL,EAAM,sBAC9BA,EAAKqU,aAAa,oBAAqB,KAEzCw5U,EAA8B7tV,EAC9Bo5U,IACOrqV,GAELs/V,EAAiC,WAC/BR,IACFA,EAA4B94U,gBAAgB,qBAC5CkU,GAAWxoB,GAAQZ,QAAQ47D,EAAOv8C,WAAY,IAAM6uU,GAAiBxiW,KAAKynB,IAC1E66U,EAA8B,MAEhC5kU,GAAWxoB,GAAQZ,QAAQ47D,EAAOv8C,WAAY,IAAM6uU,GAAiBxiW,KAAKynB,IAC1E66U,EAA8B,MAE5B1jQ,EAAU,WACZ2jQ,EAAU3jQ,UACV0jQ,EAA8B,MAE5BzU,EAAgB,WAClB0U,EAAU5zR,QAKZ,OAHIqoM,GAAI97D,SACNulB,IAEK,CACLogH,UAAWA,EACXmc,wBAAyBA,EACzBnP,cAAeA,EACfjvP,QAASA,IAIToxH,GAAS,SAAU9/I,GACrB,IAAIlwE,EAAOhD,GAAMgD,KACb4uD,EAAY88P,GAAG98P,UAAWs9I,EAASw/G,GAAGx/G,OAAQr3L,EAAMq7D,EAAOr7D,IAAK++B,EAAYs8B,EAAOt8B,UAAWu8B,EAAWD,EAAOC,SAAU+pH,EAAShqH,EAAOgqH,OAC1I0pK,EAAU5sF,GAAI5pD,MAAO51M,EAAOw/P,GAAIpgQ,GAAIitV,EAAW7sF,GAAI1qD,OACnDhD,EAAuB,0BACvBw6I,EAAsBtsV,EAAO,OAAS,MACtCusV,EAAwB,SAAUt4L,EAAKh/J,GACzC,IACEyjE,EAAOmI,SAAS+Y,YAAYq6E,GAAK,EAAOh/J,GACxC,MAAOq4F,MAGP+4E,EAAqB,SAAU9/K,GACjC,OAAOA,EAAE8/K,sBAEPmmL,EAAwB,SAAUjmW,GACpC,IAAIkmW,EAAeC,EACfnmW,EAAE6lH,eACA1zC,EAAOt8B,UAAUmtG,eAAsC,QAArBhjJ,EAAEkJ,OAAOkyL,SAC7CvlJ,EAAUs+C,OAAOn0F,EAAEkJ,QAErBg9V,EAAgB/zR,EAAOt8B,UAAUg7B,aAC7Bq1R,EAActoW,OAAS,IACzBuoW,EAAkB56I,EAAuBzO,OAAO3qI,EAAOhxE,IAAM,IAAM27M,OAAOopJ,GAC1ElmW,EAAE6lH,aAAaywE,QAAQyvK,EAAqBI,MAI9CC,EAAwB,SAAUpmW,GACpC,IAAImmW,EACJ,OAAInmW,EAAE6lH,eACJsgP,EAAkBnmW,EAAE6lH,aAAan1F,QAAQq1U,GACrCI,GAAmBA,EAAgBlmW,QAAQsrN,IAAyB,IACtE46I,EAAkBA,EAAgBxpV,OAAO4uM,EAAqB3tN,QAAQkxB,MAAM,KACrE,CACL3tB,GAAIy8M,SAASuoJ,EAAgB,IAC7BrwV,KAAM8nM,SAASuoJ,EAAgB,MAI9B,MAELE,EAA0B,SAAUr8U,EAASiwG,GAC3C9nD,EAAOm0R,sBAAsB,6BAC/Bn0R,EAAOkhB,YAAY,6BAA6B,EAAO,CACrDrpE,QAASA,EACTiwG,SAAUA,IAGZ9nD,EAAOkhB,YAAY,oBAAoB,EAAOrpE,IAG9Cu8U,EAA0B,WAC5B,IAAIC,EAAe,SAAU1wT,GAC3B,IAAIngB,EAAO7e,EAAIiwB,OAAO,QAClBwb,EAAWzM,EAAIohR,gBAEnB,OADAvhS,EAAKzM,YAAYq5B,GACV1M,EAAUwmJ,WAAWie,UAAU3kL,EAAM,CAAEs8D,OAAQ,UAEpDw0Q,EAAsB,SAAU3wT,GAClC,IAAID,EAAY2wT,EAAa1wT,GACzB4wT,EAAS5vV,EAAImlE,YACjByqR,EAAOxqR,WAAW/J,EAAOv8C,WACzB,IAAI+wU,EAAeH,EAAaE,GAChC,OAAO7wT,IAAc8wT,GAEvBx0R,EAAOpjC,GAAG,WAAW,SAAU/uC,GAC7B,IACIgjJ,EAAartH,EADb0sG,EAAUriI,EAAEqiI,QAEhB,IAAKy9C,EAAmB9/K,KAAOqiI,IAAY8rE,GAAU9rE,IAAYxxE,GAAY,CAG3E,GAFAmyF,EAAc7wE,EAAOt8B,UAAUmtG,cAC/BrtH,EAAOw8C,EAAOv8C,UACVotH,IAAgBlsI,EAAIiqL,QAAQprK,GAC9B,OAEF,IAAKqtH,IAAgByjN,EAAoBt0R,EAAOt8B,UAAU6nC,UACxD,OAEF19E,EAAEklB,iBACFitD,EAAOrxB,WAAW,IACdnrB,EAAKpN,YAAczR,EAAI8iE,QAAQjkD,EAAKpN,YACtC4pD,EAAOt8B,UAAU8kC,kBAAkBhlD,EAAKpN,WAAY,GAEpD4pD,EAAOt8B,UAAU8kC,kBAAkBhlD,EAAM,GAE3Cw8C,EAAOogB,mBAITq0Q,EAAY,WACdz0R,EAAOwmF,UAAUlkI,IAAI,SAAU,KAAM,cAEnCoyU,EAAmB,WAChB10R,EAAO0C,QACV/9D,EAAI5U,KAAKiwE,EAAOmI,SAAU,qBAAqB,SAAUt6E,GACvD,IAAI81C,EACJ,GAAI91C,EAAEkJ,SAAWipE,EAAOmI,SAASxyD,gBAG/B,GAFAguB,EAAMD,EAAU6nC,SAChBvL,EAAOv8C,UAAU/S,QACF,cAAX7iB,EAAEsE,KAAsB,CAC1B,GAAI8+R,GAAiBttP,EAAIC,gBACvB,OAEFF,EAAUumR,aAAap8T,EAAEy8B,QAASz8B,EAAE08B,cAEpCmZ,EAAUm8H,OAAOl8H,OAMvBgxT,EAAsB,WACxB30R,EAAOpjC,GAAG,WAAW,SAAU/uC,GAC7B,IAAK8/K,EAAmB9/K,IAAMA,EAAEqiI,UAAYxxE,EAAW,CACrD,IAAKshB,EAAOv8C,UAAU08K,qBAAqB,MAAM10M,OAC/C,OAEF,GAAIi4C,EAAUmtG,eAAoD,IAAnCntG,EAAU6nC,SAASpmC,YAAmB,CACnE,IAAI5gC,EAAOm/B,EAAUwkC,UACjBymH,EAAkBpqL,EAAKoqL,gBAC3B,GAAsB,OAAlBpqL,EAAKgU,SAGP,OAFA5T,EAAI4S,OAAOhT,QACX1W,EAAEklB,iBAGA47K,GAAmBA,EAAgBp2K,UAAuD,OAA3Co2K,EAAgBp2K,SAASlS,gBAC1E1B,EAAI4S,OAAOo3K,GACX9gM,EAAEklB,wBAMR49R,EAAY,WACT5lT,EAAWorM,MAAM3oM,UAAUw3C,gBAC9Bg7B,EAAOpjC,GAAG,aAAa,SAAU/uC,GAC/B,IAAK8/K,EAAmB9/K,IAA4B,SAAtBA,EAAEkJ,OAAOwhB,SAAqB,CAC1D,IAAIklO,EAASz9K,EAAOv8C,UACpBg6N,EAAO/lN,OACP+uO,GAAMv/G,iBAAiBlnF,GAAQ,WAC7By9K,EAAO/sO,gBAMbkkV,EAAwB,WAC1B50R,EAAOpjC,GAAG,SAAS,SAAU/uC,GAC3B,IAAIkJ,EAASlJ,EAAEkJ,OACX,aAAa0O,KAAK1O,EAAOwhB,WAAsD,UAAzC5T,EAAIwmR,yBAAyBp0R,KACrElJ,EAAEklB,iBACFitD,EAAOt8B,UAAUs+C,OAAOjrF,GACxBipE,EAAOogB,eAEe,MAApBrpF,EAAOwhB,UAAoB5T,EAAIinM,SAAS70M,EAAQ,qBAClDlJ,EAAEklB,iBACF2wB,EAAUs+C,OAAOjrF,QAInB89V,EAA8C,WAChD,IAAIC,EAA4B,WAC9B,IAAIC,EAAWpwV,EAAI8jR,WAAW/kP,EAAUd,WAAWvqB,WAAU,IAC7D,OAAO,WACL,IAAIthB,EAAS2sC,EAAUd,WACnB7rC,IAAWipE,EAAOv8C,YACpB9e,EAAI84L,UAAU1mM,EAAQ,QAAS,MAC/BjH,EAAKilW,GAAU,SAAU1yU,GACvBtrB,EAAOi+V,iBAAiB3yU,EAAKhK,WAAU,UAK3C48U,EAA4B,WAC9B,OAAQvxT,EAAUmtG,eAAiBlsI,EAAI2kE,UAAU5lC,EAAUd,WAAYj+B,EAAI8iE,WAAa9iE,EAAI2kE,UAAU5lC,EAAU0C,SAAUzhC,EAAI8iE,UAEhIzH,EAAOpjC,GAAG,YAAY,SAAU/uC,GAC9B,IAAI04V,EACJ,IAAK54K,EAAmB9/K,KAAqB,IAAdA,EAAEqiI,SAA+B,KAAdriI,EAAEqiI,UAAmB+kO,IAKrE,OAJA1O,EAAkBuO,IAClB90R,EAAOmI,SAAS+Y,YAAY,UAAU,EAAO,MAC7CqlQ,IACA14V,EAAEklB,kBACK,KAGXpO,EAAI5U,KAAKiwE,EAAOmI,SAAU,OAAO,SAAUt6E,GACzC,IAAI04V,GACC54K,EAAmB9/K,IAAMonW,MAC5B1O,EAAkBuO,IAClBruF,GAAMv/G,iBAAiBlnF,GAAQ,WAC7BumR,YAKJ2O,EAA6B,WAC/Bl1R,EAAOpjC,GAAG,WAAW,SAAU/uC,GAC7B,IAAK8/K,EAAmB9/K,IAAMA,EAAEqiI,UAAYxxE,GACtChb,EAAUmtG,eAAoD,IAAnCntG,EAAU6nC,SAASpmC,YAAmB,CACnE,IAAIwpJ,EAAkBjrJ,EAAUwkC,UAAUymH,gBAC1C,GAAIA,GAAmBA,EAAgBp2K,UAAuD,UAA3Co2K,EAAgBp2K,SAASlS,cAE1E,OADAxY,EAAEklB,kBACK,OAMboiV,EAA8B,WAChCn1R,EAAOpjC,GAAG,WAAW,SAAU/uC,GAC7B,IAAI81C,EAAKvrB,EAAWwU,EAAQ6b,EAAM5yB,EAClC,IAAI83J,EAAmB9/K,IAAMA,EAAEqiI,UAAYsrL,GAAG98P,YAG9C/a,EAAMD,EAAU6nC,SAChBnzD,EAAYurB,EAAIC,eAChBhX,EAAS+W,EAAIwB,YACbsD,EAAO9jC,EAAI4kE,UACX1zD,EAASuC,EACJurB,EAAI8B,WAAwB,IAAX7Y,GAAtB,CAGA,MAAO/W,GAAUA,EAAOzH,YAAcyH,EAAOzH,WAAWgI,aAAeP,GAAUA,EAAOzH,aAAeq6B,EACrG5yB,EAASA,EAAOzH,WAEK,eAAnByH,EAAOozK,UACTjpH,EAAOmgB,UAAUruB,OAAO,aAAc,KAAMj8C,GAC5C8tB,EAAMh/B,EAAImlE,YACVnmC,EAAIQ,SAAS/rB,EAAW,GACxBurB,EAAIa,OAAOpsB,EAAW,GACtBsrB,EAAUm8H,OAAOl8H,SAInByxT,EAAyB,WAC3B,IAAIC,EAAU,WACZxB,EAAsB,gBAAgB,GACtCA,EAAsB,4BAA4B,GAC7C5zR,EAASu0O,iBACZq/C,EAAsB,wBAAwB,IAG7C5zR,EAAS8yE,UACZ/yE,EAAOpjC,GAAG,8BAA+By4T,IAGzCC,EAAsB,WACxB,IAAIC,EAAW,WACbzlW,EAAK6U,EAAIq9E,OAAO,MAAM,SAAUz9E,GAC9B,IAAI6J,EAAa7J,EAAK6J,WAClBq6B,EAAO9jC,EAAI4kE,UACf,GAAIn7D,EAAWm/K,YAAchpL,EAAM,CACjC,MAAO6J,IAAezJ,EAAI8iE,QAAQr5D,GAAa,CAC7C,GAAIA,EAAWA,WAAWm/K,YAAcn/K,GAAcA,IAAeq6B,EACnE,OAEFr6B,EAAaA,EAAWA,WAE1BzJ,EAAI2d,IAAIlU,EAAY,KAAM,CAAE,iBAAkB,SAIpD4xD,EAAOpjC,GAAG,0BAA0B,SAAU/uC,GAC7B,eAAXA,EAAEsE,MAAuC,kBAAdtE,EAAEixJ,SAC/By2M,QAIFC,EAAsB,WACpBv1R,EAASg3I,mBACXj3I,EAAOpjC,GAAG,QAAQ,WAChBi3T,EAAsB,4BAA6B10Q,GAASyxG,mBAAmB5wH,QAIjFywO,EAAqB,WACvBzwO,EAAOpjC,GAAG,yBAAyB,SAAU/uC,GACtC2tT,GAAGG,gBAAgB9tT,IACtB61C,EAAU6kC,eAEX,IAEDktR,EAAsB,WACxBz1R,EAAO01R,cAAcziW,KAAK,oFAExB0iW,EAAwB,WACrB31R,EAAO0C,QACV1C,EAAOpjC,GAAG,WAAW,WACf7xC,EAAW+Y,SAAS8zB,gBAAkB7sC,EAAW+Y,SAAS0f,MAC5Dw8C,EAAOh8B,SAAStzB,YAKpBklV,EAAa,WACV51R,EAAO0C,SACV1C,EAAO01R,cAAcziW,KAAK,4BAC1B+sE,EAAOpjC,GAAG,SAAS,SAAU/uC,GAC3B,IAAI81C,EACJ,GAA0B,SAAtB91C,EAAEkJ,OAAOwhB,SAAqB,CAChC,GAAIuuP,GAAIpgQ,GAAK,GAEX,YADAs5D,EAAOv8C,UAAU/S,QAGnBizB,EAAMq8B,EAAOt8B,UAAU6nC,SACvBvL,EAAOv8C,UAAU/S,QACjBsvD,EAAOt8B,UAAUm8H,OAAOl8H,GACxBq8B,EAAOt8B,UAAU6kC,YACjBvI,EAAOogB,oBAKXy1Q,EAA0B,WACxB/uF,GAAIl1L,KACN5R,EAAOpjC,GAAG,WAAW,SAAU/uC,GAC7B,GAAI2tT,GAAGn/G,eAAexuM,KAAOA,EAAE+xD,WAA2B,KAAd/xD,EAAEqiI,SAAgC,KAAdriI,EAAEqiI,SAAiB,CACjFriI,EAAEklB,iBACF,IAAI+iV,EAAc91R,EAAOt8B,UAAU0+Q,SACnC0zC,EAAYlpB,OAAO,OAAsB,KAAd/+U,EAAEqiI,QAAiB,WAAa,UAAW,qBAK1E6lO,EAAuB,WACzBlC,EAAsB,iBAAiB,IAErCmC,EAAoB,WACtBh2R,EAAOpjC,GAAG,SAAS,SAAU/uC,GAC3B,IAAIy6E,EAAMz6E,EAAEkJ,OACZ,GACE,GAAoB,MAAhBuxE,EAAI2gH,QAEN,YADAp7L,EAAEklB,uBAGGu1D,EAAMA,EAAIl6D,eAErB4xD,EAAO01R,cAAcziW,KAAK,oDAExBgjW,EAA8B,WAChCj2R,EAAOpjC,GAAG,QAAQ,WAChBojC,EAAOr7D,IAAI5U,KAAKiwE,EAAOv8C,UAAW,UAAU,SAAU51B,GACpDA,EAAEklB,wBAIJmjV,EAA4B,WAC9BlsK,EAAOC,cAAc,MAAM,SAAUF,GACnC,IAAI18L,EAAI08L,EAAMt+L,OACd,MAAO4B,IAC0B,8BAA3B08L,EAAM18L,GAAGg1B,KAAK,UAChB0nK,EAAM18L,GAAGkqB,aAKb4+U,EAAwB,WAC1Bn2R,EAAOpjC,GAAG,aAAa,SAAU/uC,GAC/BimW,EAAsBjmW,MAExBmyE,EAAOpjC,GAAG,QAAQ,SAAU/uC,GAC1B,IAAK8/K,EAAmB9/K,GAAI,CAC1B,IAAImmW,EAAkBC,EAAsBpmW,GAC5C,GAAImmW,GAAmBA,EAAgBhlW,KAAOgxE,EAAOhxE,GAAI,CACvDnB,EAAEklB,iBACF,IAAI4wB,EAAM09Q,GAAoBz8S,UAAU/W,EAAE/B,EAAG+B,EAAEiX,EAAGk7D,EAAOmI,UACzDzkC,EAAUm8H,OAAOl8H,GACjBuwT,EAAwBF,EAAgBrwV,MAAM,SAKlD0tS,EAAyB,aAEzBxrP,EAAW,WACb,IAAIle,EACJ,SAAK+rT,GAAW1zR,EAAO2yD,WAGvBhrF,EAAMq4B,EAAOt8B,UAAU0+Q,UACfz6Q,IAAQA,EAAIX,YAAiC,IAAnBW,EAAIX,aAyCxC,OAvCAmuT,IACAf,IACKttF,GAAID,cACP4pC,IAEEkjD,IACFe,IACAE,IACAY,IACAS,IACAf,IACAgB,IACIpvF,GAAIlpD,KACN+3I,IACAC,IACAI,KAEAvB,KAGA3tF,GAAIpgQ,IAAM,KACZkvV,IACAV,KAEEpuF,GAAIpgQ,KACN+tV,IACAsB,IACAI,KAEEzC,IACFiB,IACAhkD,IACAkkD,IACAO,IACAE,IACAG,IACAI,IACAX,KAEK,CACL7jD,uBAAwBA,EACxBxrP,SAAUA,IAIVuwS,GAAQ/qE,GAAWvqN,IACnBu1R,GAAc,SAAUr2R,EAAQv7D,GAClC,IAAI1P,EAAOiQ,GAAQZ,QAAQ47D,EAAOmI,SAASpzE,MACvCuP,EAAMU,GAAQX,QAAQ,SAC1Bb,GAAIc,EAAK,OAAQ,YACjBsS,GAAOtS,EAAKU,GAAQR,SAASC,IAC7BmS,GAAO7hB,EAAMuP,IAEXgyV,GAAe,SAAUt2R,GAC3B,IAAIgqH,EAASiiI,GAAUjsP,EAAOC,SAAUD,EAAOlhE,QA2D/C,OA1DAkrL,EAAOshB,mBAAmB,2BAA2B,SAAUvhB,EAAO93L,GACpE,IAAsBsS,EAAM3Y,EAAxByB,EAAI08L,EAAMt+L,OACVkZ,EAAMq7D,EAAOr7D,IACbqpT,EAAe,YAAc/7T,EACjC,MAAO5E,IAGL,GAFAkX,EAAOwlL,EAAM18L,GACbzB,EAAQ2Y,EAAK8d,KAAKpwB,GACdrG,IAAU2Y,EAAK8d,KAAK2rS,GAAe,CACrC,GAA+B,IAA3BpiU,EAAMkC,QAAQ,UAA6C,IAA3BlC,EAAMkC,QAAQ,SAChD,SAEW,UAATmE,GACFrG,EAAQ+Y,EAAI+/L,eAAe//L,EAAIsgI,WAAWr5I,GAAQ2Y,EAAKtS,MAClDrG,EAAMH,SACTG,EAAQ,MAEV2Y,EAAK8d,KAAK2rS,EAAcpiU,GACxB2Y,EAAK8d,KAAKpwB,EAAMrG,IACE,aAATqG,GACTsS,EAAK8d,KAAK2rS,EAAcpiU,GACxB2Y,EAAK8d,KAAKpwB,EAAM,OAEhBsS,EAAK8d,KAAK2rS,EAAchuP,EAAOwmI,WAAW56M,EAAOqG,EAAMsS,EAAKtS,WAKpE+3L,EAAOC,cAAc,UAAU,SAAUF,GACvC,IAAsBxlL,EAAMpS,EAAxB9E,EAAI08L,EAAMt+L,OACd,MAAO4B,IACLkX,EAAOwlL,EAAM18L,GACb8E,EAAOoS,EAAK8d,KAAK,SAAW,UACC,IAAzBlwB,EAAKrE,QAAQ,SACfyW,EAAK8d,KAAK,OAAQ,OAASlwB,MAI7B6tE,EAAOC,SAAS2rO,gBAClB5hH,EAAOC,cAAc,UAAU,SAAUF,GACvC,IAAsBxlL,EAAlBlX,EAAI08L,EAAMt+L,OACd,MAAO4B,IACLkX,EAAOwlL,EAAM18L,GACbkX,EAAKpS,KAAO,EACZoS,EAAKtS,KAAO,WACZsS,EAAK3Y,MAAQ,UAAYo0E,EAAOr7D,IAAIyzE,OAAO7zE,EAAK3Y,OAAS,QAI/Do+L,EAAOC,cAAc,2BAA2B,SAAUF,GACxD,IAAsBxlL,EAAlBlX,EAAI08L,EAAMt+L,OACVu/T,EAAmBhrP,EAAOlhE,OAAOq7L,sBACrC,MAAO9sM,IACLkX,EAAOwlL,EAAM18L,GACTkX,EAAKqqL,QAAQo8H,IAAkD,IAA7BzmT,EAAK4oE,OAAO,MAAM1hF,SACtD8Y,EAAKqS,OAAO,IAAI2xR,GAAO,KAAM,IAAI1+F,YAAa,MAI7C7f,GAELusK,GAAY,SAAUv2R,GACpBA,EAAOC,SAASu2R,YAClB/vF,GAAMv/G,iBAAiBlnF,GAAQ,WAC7B,IAAIoxO,EAEFA,GADiC,IAA/BpxO,EAAOC,SAASu2R,WACJx2R,EAEAA,EAAOgwO,cAAcn6S,IAAImqE,EAAOC,SAASu2R,YAEpDplD,EAAY2C,WACf3C,EAAY1gS,UAEb,MAGH+lV,GAAoC,SAAUz2R,GAChD,IAAIv3B,EAAOu3B,EAAOr7D,IAAI4kE,UACjBvJ,EAAO0C,QAAYy/O,GAAaniP,IAAWA,EAAOt8B,UAAUd,UAAS,KAAU6F,GAClFq5P,GAAYC,gBAAgBt5P,GAAM34C,MAAK,SAAU2pC,GAC/C,IAAIl1B,EAAOk1B,EAAIyuC,UACXwoO,EAAW1hH,GAAS2qD,QAAQp1O,GAAQu9R,GAAYC,gBAAgBx9R,GAAMlV,MAAMoqC,GAAOA,EACnFqtO,GAAI79P,QAAQ3B,OACdwnS,GAAkBD,YAAY7uO,EAAQ0wO,EAAS5a,WAE/C91N,EAAOt8B,UAAUm8H,OAAO6wI,EAAS5a,eAKrC7+B,GAAa,SAAUj3L,GACzBA,EAAO02R,4BACP12R,EAAO8hF,aAAc,EACrB6wJ,GAAS3yO,GACTA,EAAOtvD,OAAM,GACb+lV,GAAkCz2R,GAClCA,EAAOogB,YAAY,CAAE78E,SAAS,IAC9By8D,EAAO22R,aAAa,yBAA0B32R,GAC9Cu2R,GAAUv2R,IAER42R,GAAsB,SAAU52R,GAClC,OAAOA,EAAO0C,OAAS0zR,GAAM5+L,iBAAmBx3F,EAAOr7D,IAAI6yJ,kBAEzDq/L,GAAkB,SAAU72R,EAAQ82R,GACtC,IAE2BtzU,EAAMuzU,EAF7B92R,EAAWD,EAAOC,SAClB+5F,EAAYh6F,EAAOY,aACnB/8D,EAAMm8D,EAAOmI,SACZlI,EAASyC,SACZ1C,EAAOY,aAAav9C,MAAM6pI,WAAaltF,EAAOg3R,eAE3CF,GAAc92R,EAAO0C,SACxB7+D,EAAI2qC,OACJ3qC,EAAIiX,MAAMklD,EAAOi3R,YACjBpzV,EAAImrC,SAEFgxB,EAAO0C,SACT1C,EAAOpjC,GAAG,UAAU,WAClB,IAAIs6T,EAASvpW,KAAK81B,UAClB2yU,GAAMp7L,YAAYk8L,EAAQ,oBAC1Bd,GAAMp7L,YAAYk8L,EAAQ,kBAC1Bd,GAAM34J,UAAUy5J,EAAQ,kBAAmB,SAE7Cd,GAAMr7L,SAASf,EAAW,oBAC1Bh6F,EAAOs0H,gBAAkBzwL,EAAM9Y,EAAW+Y,SAC1Ck8D,EAAO+0C,cAAgBhqH,EAAWugB,OAClC00D,EAAOqiE,YAAc23B,EACrBh6F,EAAOozO,qBAAuBp5I,EAC9B/5F,EAASmsP,UAAYpyJ,EAAUzhJ,SAASlS,eAE1Cmd,EAAOw8C,EAAOv8C,UACdD,EAAK2xD,UAAW,EAChBnV,EAAO+yE,WAAa9yE,EAAS8yE,SACxB/yE,EAAO+yE,WACN/yE,EAAO0C,QAAqD,WAA3C0zR,GAAMr1R,SAASv9C,EAAM,YAAY,KACpDA,EAAKH,MAAM+J,SAAW,YAExB5J,EAAKuiH,gBAAkB/lE,EAAOS,SAAS,0BAA0B,IAEnEj9C,EAAK2xD,UAAW,EAChBnV,EAAOw6I,aAAei4G,GAAazyP,GACnCA,EAAOlhE,OAASkxQ,GAAO/vM,GACvBD,EAAOr7D,IAAM0mR,GAAWxnR,EAAK,CAC3B4jR,aAAa,EACbzR,cAAeh2M,EAAOwmI,WACtB0vE,oBAAqBl2M,EACrBm3R,WAAYl3R,EAASm3R,uBACrBnuE,eAAe,EACfH,aAAc9oN,EAAO0C,OAAS1C,EAAOv8C,UAAY,KACjDiwO,QAAS,WACP,OAAO1zL,EAAO0C,QAEhB5jE,OAAQkhE,EAAOlhE,OACfmrQ,eAAgB9qL,GAAS2wH,wBAAwB9vI,GACjD+3L,eAAgB54K,GAAS28M,kBAAkB97N,GAC3C2oN,YAAa,SAAU96R,GACrBmyE,EAAOqf,KAAK,YAAaxxF,MAG7BmyE,EAAOgqH,OAASssK,GAAat2R,GAC7BA,EAAOkqH,WAAaqlI,GAAatvP,EAAUD,GAC3CA,EAAOt8B,UAAYilR,GAAY3oP,EAAOr7D,IAAKq7D,EAAOh8B,SAAUg8B,EAAOkqH,WAAYlqH,GAC/EA,EAAOq3R,UAAYpvD,GAAUjoO,GAC7BA,EAAOmgB,UAAYwjP,GAAU3jQ,GAC7BA,EAAOigB,YAAc6nP,GAAY9nQ,GACjCA,EAAOs3R,sBAAwB,IAAI3J,GAAW3tR,GAC9CA,EAAOyzO,oBAAsB0+C,GAAmBnyR,GAChD6oQ,GAAY7uQ,MAAMgG,GAClBouR,GAAQpuR,GACRuuR,GAAQvuR,GACR0tR,GAAkB1zR,MAAMgG,GACxBopQ,GAAYpvQ,MAAMgG,GAClBoyF,GAAQpyF,GACRyyO,GAAYzyO,GACPC,EAASs3R,oBAAuBt3R,EAASu3R,mBAC5C3zV,EAAI2f,KAAKi0U,YAAa,EACtBrB,GAAM34J,UAAUj6K,EAAM,aAAc,UAEtCw8C,EAAOqxI,OAASyO,GAAO9/I,GACvB0yO,GAAe1yO,GACf,IAAI0wI,EAAiBvxH,GAASm9M,kBAAkBt8N,QACzBtwE,IAAnBghN,IACFltL,EAAK8O,IAAMo+K,GAETzwI,EAASy3R,SACX13R,EAAOpjC,GAAG,oBAAoB,SAAU/uC,GACtCf,GAAMgD,KAAKmwE,EAASy3R,SAAS,SAAUpmP,GACrCzjH,EAAEgqB,QAAUhqB,EAAEgqB,QAAQ7R,QAAQsrG,GAAS,SAAU/mG,GAC/C,MAAO,wBAAuBogM,OAAOpgM,GAAO,kBAKpDy1D,EAAOpjC,GAAG,cAAc,WACtBojC,EAAOszK,UAAUtzK,EAAOv8C,cAE1Bu8C,EAAO1N,KAAK,CACV/uD,SAAS,EACTu8E,OAAQ,SAEV9f,EAAO23R,aAAe33R,EAAOtB,WAAW,CAAEohB,OAAQ,QAClD9f,EAAOpjC,GAAG,mCAAmC,SAAU/uC,GACrDmyE,EAAOy+O,UAAuB,qBAAX5wT,EAAEsE,QAEnB6tE,EAAO01R,cAAcjqW,OAAS,IAChCsrW,EAAiB,GACjBjqW,GAAMgD,KAAKkwE,EAAO01R,eAAe,SAAUryU,GACzC0zU,GAAkB1zU,EAAQ,UAE5B28C,EAAOr7D,IAAIklR,SAASktE,IAEtBH,GAAoB52R,GAAQqqM,QAAQrqM,EAAOu3F,YAAY,SAAUrmK,GAC/D+lQ,GAAWj3L,MACV,SAAU4sI,GACXqqD,GAAWj3L,MAETC,EAAS23R,eACXvB,GAAYr2R,EAAQC,EAAS23R,gBAG7BC,GAAkB,CAAEhB,gBAAiBA,IAErCiB,GAAQzsE,GAAWvqN,IACnBi3R,GAAc,SAAU/3R,EAAQg4R,GAClC,GAAIjtW,EAAW+Y,SAASm0V,SAAWltW,EAAWugB,OAAOi7J,SAAS2xL,UAAYpxF,GAAI79P,QAAQ3B,OAAQ,CAC5F,IAAI6wV,EAAW/lC,GAAKj7D,KAAK,OACzBn3L,EAAOm4R,GAAY,WACjBN,GAAgBhB,gBAAgB72R,IAElC,IAAIo4R,EAAiB,2DAAkErtW,EAAW+Y,SAASm0V,OAAtF,yCAA+Ij4R,EAAOhxE,GAAtJ,wDAA0NmpW,EAAW,cAE1P,OADAL,GAAMr6J,UAAUu6J,EAAK,MAAOI,IACrB,EAET,OAAO,GAELC,GAAsB,SAAUrpW,EAAIukF,EAAOprD,EAAQmwU,GACrD,IAAI/3N,EAASv7H,GAAQX,QAAQ,UAS7B,OARAyU,GAAOynH,EAAQ+3N,GACfx/U,GAAOynH,EAAQ,CACbvxI,GAAIA,EAAK,OACTupW,YAAa,IACbC,kBAAmB,OACnBjlR,MAAOA,IAETrwD,GAAMq9G,EAAQ,yBACPA,GAELqlE,GAAgB,SAAU5lI,GAC5B,IAAIowI,EAAQE,EAAW2mJ,EAYvB,OAXAA,EAAa93Q,GAASs7M,WAAWz6N,GAAU,eACvCmf,GAASu7M,mBAAmB16N,KAAYA,EAAOo1O,kBACjD6hD,GAAc,eAAiBj3R,EAAOM,gBAAgB4vI,SAAW,QAEnE+mJ,GAAc,wEACd7mJ,EAASjxH,GAASw7M,UAAU36N,GAC5BswI,EAAYnxH,GAASy7M,aAAa56N,GAC9Bmf,GAAS07M,yBAAyB76N,KACpCi3R,GAAc,uDAAyD93Q,GAAS07M,yBAAyB76N,GAAU,QAErHi3R,GAAc,oBAAsB7mJ,EAAS,6BAA+BE,EAAY,cAAgBtwI,EAAOhxE,GAAK,uBAC7GioW,GAELwB,GAAe,SAAUz4R,EAAQnxE,GACnC,IAAI0kF,EAAQvT,EAAOgwO,cAAcpnR,UAAU,yCACvCovU,EAAMK,GAAoBr4R,EAAOhxE,GAAIukF,EAAO1kF,EAAEs5B,OAAQg3D,GAASq7M,eAAex6N,IAASr7D,MAC3FqzV,EAAI/8I,OAAS,WACX+8I,EAAI/8I,OAAS,KACbj7I,EAAOqf,KAAK,SAEd,IAAIq5Q,EAAkBX,GAAY/3R,EAAQg4R,GAK1C,OAJAh4R,EAAOozO,qBAAuBvkT,EAAEgqK,gBAChC74F,EAAO8wO,cAAgBknD,EACvBh4R,EAAOi3R,WAAarxJ,GAAc5lI,GAClC83R,GAAMx1U,IAAIzzB,EAAEgqK,gBAAiBm/L,GACtBU,GAEL1lT,GAAS,SAAUgtB,EAAQ24R,GAC7B,IAAID,EAAkBD,GAAaz4R,EAAQ24R,GACvCA,EAAQ7pM,kBACVgpM,GAAMjiW,IAAI8iW,EAAQ7pM,iBAAiBzrI,MAAMslE,QAAU3oB,EAAOizO,WAC1DjzO,EAAO44R,OAASd,GAAMjyS,SAAS8yS,EAAQ7pM,kBAEzC9uF,EAAOY,aAAav9C,MAAMslE,QAAU,OACpCmvQ,GAAMr6J,UAAUz9H,EAAOhxE,GAAI,cAAe,QACrC0pW,GACHb,GAAgBhB,gBAAgB72R,IAGhC64R,GAAa,CAAEn7U,KAAMs1B,IAErB8lT,GAAQztE,GAAWvqN,IACnBi4R,GAAa,SAAU/4R,EAAQg5R,EAAoBt8J,GACrD,IAAIpS,EAAS2kG,GAAcp5R,IAAI6mM,GAC3B0S,EAAY6/E,GAAcriF,KAAKlQ,IAAW18H,EAAOo1O,gBAAgBpvS,QAAQ,MAAO,IAEpF,GADA02L,EAAS5vM,GAAM+d,KAAK6xL,GAChBpS,IAAyD,IAA/Cx9L,GAAM6vM,QAAQq8J,EAAoBt8J,GAAgB,CAI9D,GAHA5vM,GAAMgD,KAAKm/R,GAAclB,aAAarxF,IAAS,SAAUxuK,GACvD6qU,GAAW/4R,EAAQg5R,EAAoB9qU,MAErC8xC,EAAO0uG,QAAQguB,GACjB,OAEF,IACE,IAAIu8J,EAAiB,IAAI3uK,EAAOtqH,EAAQovI,EAAWpvI,EAAO46H,GAC1D56H,EAAO0uG,QAAQguB,GAAUu8J,EACrBA,EAAev7U,OACjBu7U,EAAev7U,KAAKsiD,EAAQovI,GAC5B4pJ,EAAmB/lW,KAAKypM,IAE1B,MAAO7uM,IACPktT,GAAcF,gBAAgB76O,EAAQ08H,EAAQ7uM,OAIhDqrW,GAAmB,SAAUjnW,GAC/B,OAAOA,EAAK+T,QAAQ,MAAO,KAEzBwxP,GAAc,SAAUx3L,GAC1B,IAAIg5R,EAAqB,GACzBlsW,GAAMgD,KAAKkwE,EAAOC,SAASyuG,QAAQ/xJ,MAAM,SAAS,SAAU1qB,GAC1D8mW,GAAW/4R,EAAQg5R,EAAoBE,GAAiBjnW,QAGxDknW,GAAY,SAAUn5R,GACxB,IAAIo5R,EAAetsW,GAAM+d,KAAKm1D,EAAOC,SAAS0D,OAC1C01R,EAAer5R,EAAOiN,GAAGC,SAASC,SAASxJ,MAC3C21R,EAAensR,KACfosR,EAAYvsW,GAASA,GAAS,GAAIssW,GAAethD,GAAYniT,IAAIujW,GAAcz1R,OACnFvuE,GAAOmkW,GAAW,SAAUC,EAAS10R,GAC9B/uE,GAAIsjW,EAAcv0R,IACrB9E,EAAOiN,GAAGC,SAASusR,QAAQ30R,EAAM00R,OAInCE,GAAY,SAAU15R,GACxB,IAAIi0O,EAAQj0O,EAAOC,SAASg0O,MAC5B,GAAI7hT,EAAS6hT,GAAQ,CACnBj0O,EAAOC,SAASg0O,MAAQilD,GAAiBjlD,GACzC,IAAIrrH,EAAQsmG,GAAar5R,IAAIo+S,GAC7Bj0O,EAAOi0O,MAAQ,IAAIrrH,EAAM5oH,EAAQkvN,GAAatiF,KAAKqnG,IAC/Cj0O,EAAOi0O,MAAMv2R,MACfsiD,EAAOi0O,MAAMv2R,KAAKsiD,EAAQkvN,GAAatiF,KAAKqnG,IAAUj0O,EAAOo1O,gBAAgBpvS,QAAQ,MAAO,IAAKg6D,EAAO46H,QAG1G56H,EAAOi0O,MAAQ,IAGf0lD,GAAwB,SAAU35R,GACpC,OAAOA,EAAOi0O,MAAMxjI,YAElBmpL,GAAsB,SAAU55R,GAClC,IAAIsI,EAAMtI,EAAOY,aACbqzO,EAAQj0O,EAAOC,SAASg0O,MACxB9sS,EAAO8sS,EAAMj0O,EAAQsI,GAQzB,OAPInhE,EAAK2nJ,gBAAgB/hJ,WACvB5F,EAAK2nJ,gBAAgB9/J,GAAKmY,EAAK2nJ,gBAAgB9/J,IAAMgxE,EAAOhxE,GAAK,WAE/DmY,EAAK0xJ,iBAAmB1xJ,EAAK0xJ,gBAAgB9rJ,WAC/C5F,EAAK0xJ,gBAAgB7pK,GAAKmY,EAAK0xJ,gBAAgB7pK,IAAMgxE,EAAOhxE,GAAK,oBAEnEmY,EAAKghB,OAAShhB,EAAK0yV,aAAe1yV,EAAK0yV,aAAevxR,EAAIlgD,aACnDjhB,GAEL2yV,GAAyB,SAAUjtV,GACrC,MAAO,CACLiiJ,gBAAiBjiJ,EACjBgsJ,gBAAiBhsJ,IAGjBktV,GAAyB,SAAU3vT,GACrC,IAAIyuH,EAAkBigM,GAAMlkU,OAAO,OAEnC,OADAkkU,GAAMvjK,YAAY18B,EAAiBzuH,GAC5B0vT,GAAuBjhM,IAE5BmhM,GAAmB,SAAUh6R,GAC/B,IAAI51B,EAAgB41B,EAAOY,aAC3B,OAAOZ,EAAO0C,OAASo3R,GAAuB,MAAQC,GAAuB3vT,IAE3E6vT,GAAgB,SAAUj6R,GAC5B,IAAIsI,EAAMtI,EAAOY,aAEjB,OADAZ,EAAOizO,WAAa3qO,EAAIjlD,MAAMslE,QAC1Bv2F,EAAS4tE,EAAOC,SAASg0O,OACpB0lD,GAAsB35R,GACpBxtE,EAAWwtE,EAAOC,SAASg0O,OAC7B2lD,GAAoB55R,GAEpBg6R,GAAiBh6R,IAGxBhb,GAAS,SAAUgb,GACrBA,EAAOqf,KAAK,iBACZ85Q,GAAUn5R,GACV05R,GAAU15R,GACVw3L,GAAYx3L,GACZ,IAAI24R,EAAUsB,GAAcj6R,GAG5B,OAFAA,EAAO8uF,gBAAkB6pM,EAAQ7pM,gBAAkB6pM,EAAQ7pM,gBAAkB,KAC7EqsJ,GAA6Bn7O,GACzBA,EAAO0C,OACFm1R,GAAgBhB,gBAAgB72R,GAEhC64R,GAAWn7U,KAAKsiD,EAAQ24R,IAG/BuB,GAAO,CAAEx8U,KAAMsnC,IAEfm1S,GAAQ9uE,GAAWvqN,IACnBs5R,GAAoB,SAAUnoW,GAChC,MAA0B,MAAnBA,EAAKg3E,OAAO,IAEjBoxR,GAAe,SAAUC,EAAct6R,GACzC,IAAIu6R,EAAep7Q,GAAS48M,gBAAgB/7N,GACxCw6R,EAAcr7Q,GAAS68M,eAAeh8N,GAC1C,IAAmC,IAA/B0tN,GAAKD,QAAQ8sE,IAA4C,OAAjBA,EAAuB,CACjE,IAAIE,EAAwB,KAAhBD,EAAqBA,EAAcx6R,EAAOgwO,cAAczvO,QAAU,UAAYg6R,EAAe,MACzGD,EAAah4U,IAAIm4U,EAAOzvW,OAAM0E,GAAW,WACvCqrT,GAAcH,kBAAkB56O,EAAQy6R,EAAOF,QAIjDG,GAAY,SAAUJ,EAAct6R,EAAQp1D,EAAQy2E,GACtD,IAAIphB,EAAWD,EAAOC,SAAUg0O,EAAQh0O,EAASg0O,MACjD,GAAI7hT,EAAS6hT,GAAQ,CACnB,IAAKmmD,GAAkBnmD,KAAW/kB,GAAatiF,KAAKn/M,eAAewmT,GAAQ,CACzE,IAAI0mD,EAAW16R,EAAS26R,UACpBD,EACFzrE,GAAa58N,KAAK2hP,EAAOj0O,EAAOM,gBAAgBp4B,WAAWyyT,IAE3DzrE,GAAa58N,KAAK2hP,EAAO,UAAYA,EAAQ,SAAWrpS,EAAS,OAGrE0vV,EAAanuE,WAAU,WACrB+C,GAAaf,QAAQ8lB,EAAO5yN,WAG9BA,KAGAw5Q,GAAyB,SAAU76R,GACrC,OAAOjvE,EAAOD,KAAKquF,GAASs8M,YAAYz7N,IAAS9vE,QAAO,SAAUu/F,GAChE,OAAOA,EAAIhkG,OAAS,KACnBoE,KAAI,SAAU4/F,GACf,MAAO,CACLA,IAAKA,EACLx9F,KAAMlB,EAAOrC,YAIfosW,GAA0B,SAAU96R,GACtC,OAAOjvE,EAAOD,KAAKquF,GAASq8M,gBAAgBx7N,IAAS9vE,QAAO,SAAU+B,GACpE,OAAOA,EAAKxG,OAAS,IAAMusT,GAAYjiT,IAAI9D,MAC1CpC,KAAI,SAAUoC,GACf,MAAO,CACLw9F,IAAKzvB,EAAOgwO,cAAczvO,QAAU,UAAYtuE,EAAO,YACvDA,KAAMlB,EAAOP,KAAKyB,QAIpBsnW,GAAY,SAAUe,EAAct6R,GACtC66R,GAAuB76R,GAAQpwE,SAAQ,WACrC,OAAOkrW,GAAwB96R,MAC9BlwE,MAAK,SAAUirW,GAChBT,EAAah4U,IAAIy4U,EAAQtrQ,IAAKzkG,OAAM0E,GAAW,WAC7CqrT,GAAcJ,eAAe36O,EAAQ+6R,EAAQtrQ,IAAKsrQ,EAAQ9oW,KAAKxC,yBAIjEurW,GAAc,SAAUh7R,EAAQC,EAAUr1D,GACxCtY,EAAQ2tE,EAASyuG,WACnBzuG,EAASyuG,QAAUzuG,EAASyuG,QAAQ93K,KAAK,MAE3C9J,GAAMgD,KAAKmwE,EAASy2O,kBAAkB,SAAUjnN,EAAKx9F,GACnDg9R,GAAc38N,KAAKrgE,EAAMw9F,EAAKzkG,OAAM0E,GAAW,WAC7CqrT,GAAcL,gBAAgB16O,EAAQyvB,EAAKx9F,MAE7CguE,EAASyuG,SAAW,IAAMz8K,KAE5BnF,GAAMgD,KAAKmwE,EAASyuG,QAAQ/xJ,MAAM,SAAS,SAAU+/K,GAEnD,GADAA,EAAS5vM,GAAM+d,KAAK6xL,GAChBA,IAAWuyF,GAAcriF,KAAKlQ,GAChC,GAAI09J,GAAkB19J,GAAS,CAC7BA,EAASA,EAAOlyL,OAAO,EAAGkyL,EAAOjxM,QACjC,IAAIsiS,EAAekB,GAAclB,aAAarxF,GAC9C5vM,GAAMgD,KAAKi+R,GAAc,SAAUktE,GACjC,IAAI1jD,EAAkB,CACpBp9R,OAAQ,WACRu0Q,SAAUusE,EACVrwV,OAAQ,UAAYA,EAAS,OAE3BsjB,EAAM+gQ,GAAcT,UAAU+oB,EAAiB0jD,GACnDhsE,GAAc38N,KAAKpkC,EAAIwgQ,SAAUxgQ,EAAKljC,OAAM0E,GAAW,WACrDqrT,GAAcL,gBAAgB16O,EAAQ9xC,EAAI/T,OAAS+T,EAAIwgQ,SAAWxgQ,EAAItjB,OAAQsjB,EAAIwgQ,oBAGjF,CACL,IAAIwsE,EAAQ,CACV/gV,OAAQ,WACRu0Q,SAAUhyF,EACV9xL,OAAQ,UAAYA,EAAS,OAE/BqkR,GAAc38N,KAAKoqI,EAAQw+J,EAAOlwW,OAAM0E,GAAW,WACjDqrT,GAAcL,gBAAgB16O,EAAQk7R,EAAM/gV,OAAS+gV,EAAMxsE,SAAWwsE,EAAMtwV,OAAQ8xL,WAM1F0vF,GAAc,SAAUpsN,EAAQp1D,GAClC,IAAI0vV,EAAeriG,GAAaA,aAChCyiG,GAAUJ,EAAct6R,EAAQp1D,GAAQ,WACtCyvV,GAAaC,EAAct6R,GAC3Bu5R,GAAUe,EAAct6R,GACxBg7R,GAAYh7R,EAAQA,EAAOC,SAAUr1D,GACrC0vV,EAAanuE,WAAU,WAChBnsN,EAAO2yD,SACVunO,GAAKx8U,KAAKsiD,KAEXA,GAAQ,WACJA,EAAO2yD,SACVunO,GAAKx8U,KAAKsiD,UAKdkmB,GAAS,SAAUlmB,GACrB,IAAIC,EAAWD,EAAOC,SAAUjxE,EAAKgxE,EAAOhxE,GAC5C0+R,GAAKZ,QAAQ3tM,GAAS48M,gBAAgB/7N,IACtC,IAAIm5M,EAAe,WACjBghF,GAAMtvU,OAAO9/B,EAAWugB,OAAQ,QAAS6tQ,GACzCn5M,EAAOkmB,UAET,GAAKkzL,GAAWljC,MAAM8iC,WAItB,GAAKh5M,EAAOY,cAGPkmM,GAAI/gI,gBAAT,CAGK9lE,EAASyC,OAIZ1C,EAAO0C,QAAS,GAHhB1C,EAAOg3R,cAAgBh3R,EAAOY,aAAav9C,MAAM6pI,WACjDltF,EAAOY,aAAav9C,MAAM6pI,WAAa,UAIzC,IAAInhD,EAAO/rC,EAAOY,aAAamrC,MAAQouP,GAAM7wR,UAAUt6E,EAAI,QACvD+8G,IACF/rC,EAAOqzO,YAActnM,EACjB9rC,EAAS+1O,eAAiBhnH,GAASm2E,kBAAkBnlM,EAAOY,gBAC9Du5R,GAAM5kK,YAAY4kK,GAAMvlU,OAAO,QAAS,CACtCziC,KAAM,SACNF,KAAMjD,IACJA,GACJgxE,EAAO6zO,gBAAiB,GAE1B7zO,EAAOwzO,kBAAoB,SAAU3lT,GACnCmyE,EAAOqf,KAAKxxF,EAAEsE,KAAMtE,IAEtBssW,GAAMpqW,KAAKg8G,EAAM,eAAgB/rC,EAAOwzO,mBACxCxzO,EAAOpjC,GAAG,SAAS,WACjBojC,EAAOm7R,mBAELl7R,EAASw1O,cAAiB1pM,EAAKlpB,OAAO91E,UAAag/F,EAAKlpB,OAAOp3F,QAAWsgH,EAAKwnM,gBACjFxnM,EAAKwnM,cAAgBxnM,EAAKlpB,OAC1BkpB,EAAKlpB,OAAS,WAGZ,OAFA7iB,EAAOgwO,cAAcorD,cACrBp7R,EAAOgnQ,UAAS,GACTj7N,EAAKwnM,cAAcxnM,MAIhC/rC,EAAO8iB,cAAgB6lG,GAAc3oH,GACrCA,EAAO6nI,oBAAsBoxG,GAAoBj5O,GACvB,QAAtBC,EAASo7R,UACXr7R,EAAOpjC,GAAG,cAAc,SAAU/uC,GAC5BA,EAAE6lT,OACJ7lT,EAAEgqB,QAAUsiV,GAAM/hR,OAAOvqF,EAAEgqB,aAI7BooD,EAASu1O,yBACXx1O,EAAOpjC,GAAG,UAAU,WACdojC,EAAO8hF,aACT9hF,EAAO0zO,UAITzzO,EAASy1O,qBACX11O,EAAOg0O,cAAgB,YACjBh0O,EAAO8hF,aAAgB9hF,EAAO+zO,WAAc/zO,EAAOna,YACrDma,EAAO0zO,KAAK,CACV5zN,OAAQ,MACR8sN,WAAW,EACX0uD,WAAW,KAIjBt7R,EAAOgwO,cAAcpzQ,GAAG,eAAgBojC,EAAOg0O,gBAEjDh0O,EAAOgwO,cAAc1tR,IAAI09C,GACzBosN,GAAYpsN,EAAQA,EAAOp1D,cAtEzBuvV,GAAMpqW,KAAKhF,EAAWugB,OAAQ,QAAS6tQ,IAwEvCtoG,GAAS,CAAE3qF,OAAQA,IAEnBq1Q,GAAoB,SAAUh3V,GAChC,OAAOA,EAAK6R,YAAc7R,EAAK6R,aAAe7R,EAAKgpL,WAEjDiuK,GAAgB,SAAUj3V,GAC5B,MAAqB,OAAdA,EAAKtS,MAAiBsS,EAAK3Y,QAAUw2C,IAE1Cq5T,GAAqB,SAAU38V,EAAQyF,GACzC,IAAIkqL,EAAgB3vL,EAAOoyL,mBAC3B,OAAOzC,EAAclqL,EAAKtS,OAASspW,GAAkBh3V,IAASi3V,GAAcj3V,EAAK6R,aAE/EslV,GAAyB,SAAU58V,EAAQyF,GAC7C,IAAIymT,EAAmBlsT,EAAOq7L,sBAC9B,OAAO51L,IAASA,EAAKqqL,QAAQo8H,IAAqBywC,GAAmB38V,EAAQyF,KAE3Eo3V,GAAiB,SAAU78V,EAAQkZ,GACrC,IAAI5B,EAAa4B,EAAS5B,WACtBm3K,EAAYv1K,EAASu1K,UAUzB,OATIn3K,GAAkC,SAApBA,EAAWnkB,OAC3BmkB,EAAaA,EAAWjV,MAEtBosL,GAAsC,eAAzBA,EAAUlrK,KAAK,QAC9BkrK,EAAYA,EAAU78B,MAEpBgrM,GAAuB58V,EAAQyuL,KACjCA,EAAYA,EAAU78B,SAEnBt6I,GAAcA,IAAem3K,KAGP,OAApBn3K,EAAWnkB,MAAqC,OAApBmkB,EAAWnkB,OAE5C2pW,GAAqB,SAAUC,GACjC,IAAIzlV,EAAaylV,EAAYzlV,WACzBm3K,EAAYsuK,EAAYtuK,UAO5B,OANIn3K,GAAsC,SAAxBA,EAAWmC,UAC3BnC,EAAWhI,WAAWoJ,YAAYpB,GAEhCm3K,GAA8B,eAAjBA,EAAUv+L,IACzBu+L,EAAUn/K,WAAWoJ,YAAY+1K,GAE5BsuK,GAELC,GAAgB,SAAUn3V,EAAKulL,EAAYlyK,GAC7C,IAAIrU,EAAOumL,EAAWie,UAAUnwL,GAC5B6jV,EAAcl3V,EAAIwsL,eAAextL,GACrC,OAAOi4V,GAAmBC,IAExBE,GAAc,SAAUzzR,GAC1B,OAAOx7E,GAAMq+L,KAAK7iH,EAAInkE,YAAY,SAAU8R,GAC1C,MAA0B,OAAnBA,EAAMsC,aAGbyjV,GAAY,SAAUz3V,GACxB,OAAOA,EAAKiO,OAAS4vB,IAAQ4sJ,GAASZ,KAAK7pL,IAEzC03V,GAAmB,SAAU13V,GAC/B,OAAOA,GAAQA,EAAK6R,YAAc7R,EAAK6R,aAAe7R,EAAKgpL,WAAayuK,GAAUz3V,EAAK6R,aAErF8lV,GAAkB,SAAU5zR,GAC9B,OAAQA,EAAIlyD,YAAc6lV,GAAiB3zR,IAEzC6zR,GAAgB,SAAUh1N,GAC5B,OAAOA,EAAK17I,OAAS,GAAKywW,GAAgB/0N,EAAKA,EAAK17I,OAAS,IAAM07I,EAAKr0I,MAAM,GAAI,GAAKq0I,GAErFi1N,GAAc,SAAUz3V,EAAKJ,GAC/B,IAAIk3L,EAAc92L,EAAI2kE,UAAU/kE,EAAMI,EAAI8iE,SAC1C,OAAOg0H,GAAwC,OAAzBA,EAAYljL,SAAoBkjL,EAAc,MAElE4gK,GAAkB,SAAU13V,EAAKJ,GACnC,QAAS63V,GAAYz3V,EAAKJ,IAExB+3V,GAAW,SAAUluV,EAAYu1B,GACnC,IAAI44T,EAAY54T,EAAI8lC,aAChB+yR,EAAW74T,EAAI8lC,aAGnB,OAFA8yR,EAAUn4T,eAAeh2B,GACzBouV,EAAS/3T,YAAYr2B,GACd,CACLmuV,EAAUx3C,gBACVy3C,EAASz3C,kBAGT03C,GAAc,SAAUl4V,EAAMsjE,GAChC,IAAI6oO,EAAWpa,GAAgBhgR,OAAO/R,GAClC0qU,EAAcluC,GAAYl5N,GAC1B60R,EAAcztB,EAAY9tU,KAAKuvS,GACnC,OAAOgsD,EAAcA,EAAY5mE,UAAY,MAE3C6mE,GAAa,SAAUp4V,EAAMsjE,GAC/B,IAAI6oO,EAAWpa,GAAgB5/Q,MAAMnS,GACjC0qU,EAAcluC,GAAYl5N,GAC1B60R,EAAcztB,EAAYv+K,KAAKggJ,GACnC,OAAOgsD,EAAcA,EAAY5mE,UAAY,MAE3C8mE,GAAe,SAAU7lW,EAAQowI,EAAMt/D,EAAUlkC,GACnD,IAAI90B,EAAQytV,GAASvlW,EAAQ4sC,GACzBotM,EAAYh6O,EAAOqX,WAOvB,OANA2iO,EAAUt6N,aAAa5H,EAAM,GAAI9X,GACjCjK,GAAMgD,KAAKq3I,GAAM,SAAU+rD,GACzB69C,EAAUt6N,aAAay8K,EAAIn8L,MAE7Bg6O,EAAUt6N,aAAa5H,EAAM,GAAI9X,GACjCg6O,EAAUv5N,YAAYzgB,GACf4lW,GAAWx1N,EAAKA,EAAK17I,OAAS,GAAIo8E,IAEvCg1R,GAAiB,SAAU9lW,EAAQowI,EAAMt/D,GAC3C,IAAIkpK,EAAYh6O,EAAOqX,WAIvB,OAHAthB,GAAMgD,KAAKq3I,GAAM,SAAU7+D,GACzByoK,EAAUt6N,aAAa6xD,EAAKvxE,MAEvB0lW,GAAY1lW,EAAQ8wE,IAEzBi1R,GAAgB,SAAU/lW,EAAQowI,EAAMt/D,EAAUljE,GAEpD,OADAA,EAAI4wL,YAAYpuD,EAAK7yI,UAAWyC,GACzB4lW,GAAWx1N,EAAK,GAAIt/D,IAEzBk1R,GAAgB,SAAU7yK,EAAYvlL,EAAKg/B,EAAK3rB,GAClD,IAAI6jV,EAAcC,GAAcn3V,EAAKulL,EAAYlyK,GAC7CglV,EAAWZ,GAAYz3V,EAAKg/B,EAAIC,gBAChCq5T,EAASd,GAAcJ,GAAYF,EAAYzlV,aAC/C8mV,EAAY,EAAGzhD,EAAM,EACrB5zO,EAAWljE,EAAI4kE,UACf4zR,EAAO,SAAU52L,GACnB,IAAImqI,EAAWpa,GAAgBP,eAAepyP,GAC1CsrS,EAAcluC,GAAYp8R,EAAI4kE,WAC9BwpQ,EAASxsK,IAAa22L,EAAYjuB,EAAYv+K,KAAKggJ,GAAYu+B,EAAY9tU,KAAKuvS,GACpF,OAAOqiC,GAASqpB,GAAYz3V,EAAKouU,EAAO7qQ,aAAe80R,GAEzD,OAAIG,EAAKD,GACAL,GAAeG,EAAUC,EAAQp1R,GAC/Bs1R,EAAK1hD,GACPqhD,GAAcE,EAAUC,EAAQp1R,EAAUljE,GAE5Ci4V,GAAaI,EAAUC,EAAQp1R,EAAUlkC,IAE9Cy5T,GAAa,CACfzB,eAAgBA,GAChBoB,cAAeA,GACfV,gBAAiBA,GACjBF,cAAeA,GACftxF,UAAWkxF,IAGTsB,GAAc,SAAUjlV,EAAWwU,GACrC,OAAOoiK,GAASt2K,OAAON,IAAcA,EAAU6tB,UAAUrZ,EAAS,KAAOwV,IAEvEk7T,GAAqB,SAAU35T,EAAKhgC,GACtC,IAAIyU,EAAWwU,EACfxU,EAAYurB,EAAIC,eAChBhX,EAAS+W,EAAIwB,YACb,IAAIo4T,EAAiB,SAAUh3E,GAC7B,OAAOnuQ,EAAUmuQ,IAAoD,IAApCnuQ,EAAUmuQ,GAAax5Q,UAc1D,OAZ2B,IAAvBqL,EAAUrL,WACR6f,EAAS,EACXjpB,EAAOA,EAAKqC,QAAQ,UAAW,KACrBu3V,EAAe,qBACzB55V,EAAOA,EAAKqC,QAAQ,KAAM,WAExB4mB,EAASxU,EAAU3sB,OACrBkY,EAAOA,EAAKqC,QAAQ,iBAAkB,KAC5Bu3V,EAAe,iBACzB55V,EAAOA,EAAKqC,QAAQ,qBAAsB,YAGvCrC,GAEL65V,GAAiC,SAAU75T,EAAK/3C,GAClD,IAAIwsB,EAAWwU,EAgBf,OAfAxU,EAAYurB,EAAIC,eAChBhX,EAAS+W,EAAIwB,YACc,IAAvB/sB,EAAUrL,UAAkB42B,EAAI8B,YAC9BrtB,EAAU5F,KAAKoa,KAAYwV,IAC7BhqB,EAAUglR,WAAWxwQ,EAAQ,GACxB,cAAcnnB,KAAK7Z,KACtBA,GAAS,MAEFwsB,EAAU5F,KAAKoa,EAAS,KAAOwV,KACxChqB,EAAUglR,WAAWxwQ,EAAS,EAAG,GAC5B,cAAcnnB,KAAK7Z,KACtBA,EAAQ,IAAMA,KAIbA,GAGL6xW,GAAgBzuK,GAASw1E,eAAe,CAC1C,KACA,OAEEk5F,GAAsB,SAAU19R,EAAQnoD,GAC1C,IAAI8rB,EAAMq8B,EAAOt8B,UAAU6nC,SACvBnzD,EAAYurB,EAAIC,eAChBhX,EAAS+W,EAAIwB,YACbxB,EAAI8B,WAAa43T,GAAYjlV,EAAWwU,IAAWoiK,GAASt2K,OAAON,KACrEA,EAAU6uS,WAAWr6R,EAAS,EAAG,KACjCxU,EAAUglR,WAAWxwQ,EAAQ,GAC7B+W,EAAIQ,SAAS/rB,EAAWwU,GACxB+W,EAAIa,OAAOpsB,EAAWwU,GACtBozC,EAAOt8B,UAAUm8H,OAAOl8H,IAE1Bq8B,EAAOt8B,UAAUiL,WAAW92B,IAE1B8lV,GAAiB,SAAU39R,EAAQp0E,EAAOwiB,GAC5C,GAAkD,QAA9CA,EAAW6K,aAAa,kBAC1B7K,EAAWA,WAAWqI,aAAaupD,EAAOr7D,IAAIwsL,eAAevlM,GAAQwiB,OAChE,CACL,IAAI7J,EAAO6J,EAAWgI,WAClB+oR,EAAQ/wR,EAAWm/K,WAClBhpL,GAAQA,IAAS46R,GAA2B,OAAlB56R,EAAKgU,SAClCynD,EAAOr7D,IAAI0kR,QAAQj7Q,EAAYxiB,GAE/B8xW,GAAoB19R,EAAQp0E,KAI9BgyW,GAAuB,SAAUj5V,EAAK2jE,GACxCv3E,EAAOD,KAAK6T,EAAI2kE,UAAUhB,EAAK,UAAUz4E,IAAImV,GAAQZ,SAAStU,KAAK0kU,GAAUF,sBAE3EupC,GAA2B,SAAU79R,EAAQ/nE,GAC/C,IAAI0vV,EAAqB3nR,EAAOlhE,OAAOs1Q,wBACnCzvQ,EAAMq7D,EAAOr7D,IACjB,GAAI1M,EAAO,CACT,IAAI6lW,EAAS99R,EAAOv8C,UAAWs6U,EAAiB,IAAIhjC,GAAap2T,GACjE7X,GAAMgD,KAAK6U,EAAIq9E,OAAO,yBAAyB,SAAUz9E,GACvD,IAAK,IAAIy5V,EAAWz5V,EAAK6J,WAAY4vV,GAAYA,IAAaF,EAAQE,EAAWA,EAAS5vV,WACpFu5U,EAAmBpjV,EAAKgU,SAASlS,gBAAkB03V,EAAennH,QAAQonH,EAAUz5V,IACtFI,EAAI4S,OAAOhT,GAAM,QAMvB05V,GAAuB,SAAUjmV,GACnC,IAAIzT,EAAOyT,EACX,MAAOzT,EAAOA,EAAKswM,OACC,IAAdtwM,EAAKpS,MACPoS,EAAK8d,KAAK,oBAAqB,MAIjC67U,GAAwB,SAAU51R,GACpCx7E,GAAMgD,KAAKw4E,EAAI63H,qBAAqB,MAAM,SAAU73H,GAClDA,EAAIhvD,gBAAgB,yBAGpB6kV,GAAmB,SAAU55V,GAC/B,QAASA,EAAK0U,aAAa,sBAEzBmlV,GAAkB,SAAUp+R,EAAQz7D,GACtC,OAAOA,IAASy7D,EAAOlhE,OAAO8gM,wBAAwBr7L,EAAKgU,WAEzD8lV,GAAwB,SAAUr+R,EAAQzpD,GAC5C,IAAI+nV,EAAwB7iK,EAAa8iK,EAErCh6V,EAAM46R,EADNx6R,EAAMq7D,EAAOr7D,IAAK++B,EAAYs8B,EAAOt8B,UAErC86T,EAAgC,SAAUj6V,GAE5C,IADA,IAAIkkC,EAAOu3B,EAAOv8C,UACXlf,GAAQA,IAASkkC,EAAMlkC,EAAOA,EAAK6J,WACxC,GAA4C,UAAxC4xD,EAAOr7D,IAAI+iE,mBAAmBnjE,GAChC,OAAOA,EAGX,OAAO,MAET,GAAKgS,EAAL,CAKA,GAFAypD,EAAOt8B,UAAU88J,eAAejqL,GAChC+nV,EAAyBE,EAA8BjoV,GACnD+nV,EAGF,OAFA35V,EAAI4S,OAAOhB,QACXmtB,EAAUs+C,OAAOs8Q,GAGnB,IAAI36T,EAAMh/B,EAAImlE,YACdvlE,EAAOgS,EAAOo4K,gBACVpqL,GAA0B,IAAlBA,EAAKwI,UACf42B,EAAIQ,SAAS5/B,EAAMA,EAAK0hC,UAAUx6C,QAC7Bq7Q,GAAIpgQ,KACPy4R,EAAQ5oR,EAAOR,YACXopR,GAA4B,IAAnBA,EAAMpyR,WACjBxI,EAAKs+R,WAAW1D,EAAM3sR,MACtB2sR,EAAM/wR,WAAWoJ,YAAY2nR,OAIjCx7P,EAAIS,eAAe7tB,GACnBotB,EAAIY,aAAahuB,IAEnB,IAAIkoV,EAAmB,SAAU96T,GAC/B,IAAI+sQ,EAAWpa,GAAgBP,eAAepyP,GAC1CsrS,EAAcluC,GAAY/gO,EAAOv8C,WAErC,GADAitR,EAAWu+B,EAAY9tU,KAAKuvS,GACxBA,EACF,OAAOA,EAAS5a,WAGpBr6F,EAAc92L,EAAI2kE,UAAU/yD,EAAQ5R,EAAI8iE,SACxC9iE,EAAI4S,OAAOhB,GACPklL,GAAe92L,EAAIiqL,QAAQ6M,KAC7Bz7H,EAAO46H,EAAEa,GAAarkL,QACtBusB,EAAIQ,SAASs3J,EAAa,GAC1B93J,EAAIa,OAAOi3J,EAAa,GACnBgiK,GAAchiK,IAAiB0iK,GAAiB1iK,MAAiB8iK,EAAUE,EAAiB96T,IAI/Fh/B,EAAI2d,IAAIm5K,EAAa92L,EAAIiwB,OAAO,KAAM,CAAE,iBAAkB,QAH1D+O,EAAM46T,EACN55V,EAAI4S,OAAOkkL,KAKf/3J,EAAUm8H,OAAOl8H,KAEf+6T,GAAoB,SAAU1+R,EAAQp0E,EAAO+2F,GAC/C,IAAIqnG,EAAQE,EAAY97K,EAAYy5D,EAAU7vD,EAAU1sB,EACpDirB,EAAQotB,EAAKp/B,EAAMo6V,EAAc1mW,EACjCyrC,EAAYs8B,EAAOt8B,UAAW/+B,EAAMq7D,EAAOr7D,IAe/C,GAdI,QAAQc,KAAK7Z,KACfA,EAAQ0xW,GAAmB55T,EAAU6nC,SAAU3/E,IAEjDo+L,EAAShqH,EAAOgqH,OAChB/xL,EAAQ0qF,EAAQ1qF,MAChBiyL,EAAaqjH,GAAW,CAAE50M,SAAU34B,EAAOC,SAAS04B,UAAY34B,EAAOlhE,QACvE6/V,EAAe,yEACfrzW,EAAO,CACLusB,QAASjsB,EACTk0F,OAAQ,OACRp8C,WAAW,EACXm0K,MAAOl1H,EAAQk1H,OAEjBvsN,EAAO00E,EAAOqf,KAAK,mBAAoB/zF,GACnCA,EAAKqiL,qBACP3tG,EAAOqf,KAAK,aAAc,CACxBxnE,QAASvsB,EAAKusB,QACdioE,OAAQ,OACRp8C,WAAW,EACXm0K,MAAOl1H,EAAQk1H,YALnB,CASAjsN,EAAQN,EAAKusB,SACsB,IAA/BjsB,EAAMkC,QAAQ,cAChBlC,GAAS,YAEXA,EAAQA,EAAMoa,QAAQ,cAAe24V,GACrCh7T,EAAMD,EAAU6nC,SAChB,IAAIqzR,EAAej7T,EAAIC,iBAAmBD,EAAIw9Q,cAAgBx9Q,EAAIw9Q,gBAAkB,MAChF39R,EAAOw8C,EAAOv8C,UACdm7U,IAAiBp7U,GAAQkgB,EAAUmtG,eACjClsI,EAAI8iE,QAAQjkD,EAAKpN,aAAegoV,GAAgBp+R,EAAQx8C,EAAKpN,aAAezR,EAAIiqL,QAAQprK,EAAKpN,cAC/FutB,EAAMh/B,EAAImlE,YACVnmC,EAAIQ,SAAS3gB,EAAKpN,WAAY,GAC9ButB,EAAIa,OAAOhhB,EAAKpN,WAAY,GAC5BstB,EAAUm8H,OAAOl8H,IAGhBD,EAAUmtG,gBACb7wE,EAAOt8B,UAAUm8H,OAAO++J,GAAgBr2P,UAAUvI,EAAOt8B,UAAU6nC,WACnEvL,EAAOmI,SAAS+Y,YAAY,UAAU,EAAO,MAC7Ct1F,EAAQ4xW,GAA+Bx9R,EAAOt8B,UAAU6nC,SAAU3/E,IAEpEwiB,EAAas1B,EAAUwkC,UACvB,IAAI8mP,EAAa,CACfxjP,QAASp9D,EAAWmK,SAASlS,cAC7BmM,KAAMmwE,EAAQnwE,KACd88C,QAAQ,GAGV,GADAt3C,EAAWgyK,EAAOjtG,MAAMnxF,EAAOojU,IACT,IAAlBrsO,EAAQk1H,OAAkBulJ,GAAWzB,eAAe37R,EAAOlhE,OAAQkZ,IAAaolV,GAAWf,gBAAgB13V,EAAKyJ,GAIlH,OAHAu1B,EAAMy5T,GAAWL,cAAc7yK,EAAYvlL,EAAKq7D,EAAOt8B,UAAU6nC,SAAUvzD,GAC3EgoD,EAAOt8B,UAAUm8H,OAAOl8H,QACxBq8B,EAAOqf,KAAK,aAAc/zF,GAK5B,GAFA2yW,GAAqBjmV,GACrBzT,EAAOyT,EAASu1K,UACQ,eAApBhpL,EAAK8d,KAAK,MAEZ,IADA9L,EAAShS,EACJA,EAAOA,EAAKmsJ,KAAMnsJ,EAAMA,EAAOA,EAAKswM,MAAK,GAC5C,GAAkB,IAAdtwM,EAAKpS,OAAewS,EAAI8iE,QAAQljE,EAAKtS,MAAO,CAC1C+tE,EAAOlhE,OAAOy1Q,aAAahwQ,EAAKsR,OAAO5jB,KAAM,SAC/CsS,EAAKsR,OAAOy5C,OAAO/4C,EAAQhS,EAAoB,OAAdA,EAAKtS,MAExC,MAKN,GADA+tE,EAAOyzO,oBAAoBq5C,wBAAwB1+U,GAC9C4gT,EAAWpxK,QAGT,CACL8/M,GAAoB19R,EAAQ2+R,GAC5BvwV,EAAas1B,EAAUwkC,UACvBL,EAAW7H,EAAOv8C,UACU,IAAxBrV,EAAWrB,SACbqB,EAAa7J,EAAOsjE,EAEpBtjE,EAAO6J,EAET,MAAO7J,IAASsjE,EACdz5D,EAAa7J,EACbA,EAAOA,EAAK6J,WAEdxiB,EAAQwiB,IAAey5D,EAAWA,EAAS5jE,UAAYU,EAAIslR,aAAa77Q,GACxExiB,EAAQs+L,EAAWie,UAAUne,EAAOjtG,MAAMnxF,EAAMoa,QAAQ,qDAAqD,WAC3G,OAAOkkL,EAAWie,UAAUnwL,QAE1B5J,IAAey5D,EACjBljE,EAAI0kR,QAAQxhN,EAAUj8E,GAEtB+Y,EAAIulR,aAAa97Q,EAAYxiB,QAtB/BA,EAAQs+L,EAAWie,UAAUnwL,GAC7B2lV,GAAe39R,EAAQp0E,EAAOwiB,GAwBhCyvV,GAAyB79R,EAAQ/nE,GACjComW,GAAsBr+R,EAAQr7D,EAAI9O,IAAI,eACtCqoW,GAAsBl+R,EAAOv8C,WAC7Bm6U,GAAqB59R,EAAOr7D,IAAKq7D,EAAOt8B,UAAUd,YAClDo9B,EAAOqf,KAAK,aAAc/zF,GAC1B00E,EAAOszK,cAELurH,GAAe,SAAUjzW,GAC3B,IAAI+2F,EACJ,MAAqB,kBAAV/2F,GACT+2F,EAAU71F,GAAM4jI,OAAO,CACrBmnF,MAAOjsN,EAAMisN,MACbrlM,KAAM,CAAEqlM,MAAOjsN,EAAMisN,QACpBjsN,GACI,CACLisB,QAASjsB,EAAMisB,QACf8qE,QAASA,IAGN,CACL9qE,QAASjsB,EACT+2F,QAAS,KAGTm8Q,GAAkB,SAAU9+R,EAAQp0E,GACtC,IAAI4O,EAASqkW,GAAajzW,GAC1B8yW,GAAkB1+R,EAAQxlE,EAAOqd,QAASrd,EAAOmoF,UAE/Co8Q,GAAgB,CAAEhC,cAAe+B,IAEjCE,GAAgB,SAAUh/R,EAAQ8+E,GACpC9+E,EAAOmI,SAAS+Y,YAAY49D,GAAS,EAAO,OAE1CmgN,GAAgB,SAAUj/R,GACxBokR,GAAQroJ,gBAAgB/7H,GAAQ,IAEzBk+Q,GAAUniJ,gBAAgB/7H,GAAQ,IAElCu+Q,GAAkBxiJ,gBAAgB/7H,GAAQ,IAE1Ci/Q,GAAeljJ,gBAAgB/7H,GAAQ,IAEvCy7Q,GAAoB1/I,gBAAgB/7H,GAAQ,IAE5CuiR,GAAYxmJ,gBAAgB/7H,IAE5Bm8Q,GAAiBpgJ,gBAAgB/7H,GAAQ,IAEzCy/Q,GAAmB1jJ,gBAAgB/7H,GAAQ,KAGpDg/R,GAAch/R,EAAQ,UACtB05Q,GAAYP,cAAcn5Q,KAG1Bk/R,GAAuB,SAAUl/R,GAC/Bk+Q,GAAUniJ,gBAAgB/7H,GAAQ,IAE3Bu+Q,GAAkBxiJ,gBAAgB/7H,GAAQ,IAE1Ci/Q,GAAeljJ,gBAAgB/7H,GAAQ,IAEvCy7Q,GAAoB1/I,gBAAgB/7H,GAAQ,IAE5CuiR,GAAYxmJ,gBAAgB/7H,IAE5Bm8Q,GAAiBpgJ,gBAAgB/7H,GAAQ,IAEzCy/Q,GAAmB1jJ,gBAAgB/7H,GAAQ,IAGpDg/R,GAAch/R,EAAQ,kBAGtBm/R,GAAiB,CACnBF,cAAeA,GACfC,qBAAsBA,IAGpBE,GAAa,SAAUx7V,EAAOqK,EAAWC,GAC3C,IAAIrB,EAAUjJ,EAAMe,MAChBwJ,EAAO3b,EAAW0b,GAAUA,EAASviB,GAAS,GAClD,MAAOkhB,EAAQuB,WAAY,CACzBvB,EAAUA,EAAQuB,WAClB,IAAIC,EAAKrJ,GAAQZ,QAAQyI,GACrByB,EAAcL,EAAUI,GAC5B,GAAIC,EAAYlf,SACd,OAAOkf,EACF,GAAIH,EAAKE,GACd,MAGJ,OAAOtd,EAAOrC,QAEZi/B,GAAY,SAAU/pB,EAAOqK,EAAWC,GAC1C,IAAInH,EAAUkH,EAAUrK,GACxB,OAAOmD,EAAQnX,SAAQ,WACrB,OAAOse,EAAOtK,GAAS7S,EAAOrC,OAAS0wW,GAAWx7V,EAAOqK,EAAWC,OAIpEmxV,GAAkB,CACpB,YAAa,OACb,cAAe,QAEbC,GAAuB,SAAUx6F,EAAU31G,EAAS7mF,GACtD,IAAIi3R,EAAc,SAAUj3R,GAC1B,OAAOhkD,GAAOgkD,EAAKw8L,GAAUl1Q,SAAQ,WACnC,MAAkB,SAAdqC,GAAKq2E,GACAzyE,GAAIwpW,GAAiBv6F,GAAU/0Q,MAAK,SAAUyvW,GACnD,OAAOtmV,GAAOovD,EAAKk3R,MAGdzuW,EAAOrC,WAIhBwf,EAAS,SAAUo6D,GACrB,OAAO15E,GAAGoW,GAAQZ,QAAQ+qJ,GAAU7mF,IAEtC,OAAO36C,GAAU3oB,GAAQZ,QAAQkkE,IAAM,SAAUA,GAC/C,OAAOi3R,EAAYj3R,KAClBp6D,IAEDsyI,GAAU,SAAU7/I,EAAQ8/I,GAC9B,IAAIC,EAASjmI,KAAKsjG,IAAI,GAAI0iC,GAC1B,OAAOhmI,KAAK6gE,MAAM36E,EAAS+/I,GAAUA,GAEnCC,GAAO,SAAUC,EAAUH,GAC7B,MAAI,aAAah7I,KAAKm7I,GACbJ,GAAiC,GAAzB54H,SAASg5H,EAAU,IAAW,GAAIH,GAAa,GAAK,KAE9DG,GAEL6+M,GAAsB,SAAU//M,GAClC,OAAOA,EAAW15I,QAAQ,YAAa,IAAIA,QAAQ,QAAS,MAE1D05V,GAAsB,SAAU56F,EAAUx8L,GAC5C,OAAOv3E,EAAOD,KAAKu6R,GAAWvqN,IAAIC,SAASuH,EAAKw8L,GAAU,KAExD66F,GAAc,SAAU76F,GAC1B,OAAO,SAAU31G,EAAS7mF,GACxB,OAAOv3E,EAAOD,KAAKw3E,GAAKz4E,IAAImV,GAAQZ,SAASlU,OAAOuoB,IAAW1oB,MAAK,SAAU8c,GAC5E,OAAOyyV,GAAqBx6F,EAAU31G,EAAStiJ,EAAQlI,OAAOhV,GAAG+vW,GAAoB56F,EAAUj4P,EAAQlI,WACtGtV,MAAM,MAGTuwW,GAAW,CACbC,YAAaF,GAAY,aACzBG,cAAe30W,EAAQs0W,GAAqBE,GAAY,gBACxDh/M,KAAMA,IAGJo/M,GAAwB,SAAU//R,GACpC,OAAO8hO,GAAYC,gBAAgB/hO,EAAOv8C,WAAW5zB,KAAI,SAAUwkF,GACjE,IAAIj8D,EAAYi8D,EAAMj8D,YACtB,OAAO42K,GAASt2K,OAAON,GAAaA,EAAUhK,WAAagK,MAG3D4nV,GAAuB,SAAUr8T,EAAK8E,GACxC,OAAO9E,EAAIC,iBAAmB6E,GAA4B,IAApB9E,EAAIwB,aAExC86T,GAAkB,SAAUjgS,GAC9B,OAAOjvE,EAAOD,KAAKkvE,EAAOt8B,UAAU6nC,UAAUx7E,MAAK,SAAU4zC,GAC3D,IAAI8E,EAAOu3B,EAAOv8C,UAClB,OAAOu8U,GAAqBr8T,EAAK8E,GAAQ13C,EAAOrC,OAASqC,EAAOD,KAAKkvE,EAAOt8B,UAAUd,UAAS,QAG/Fs9T,GAAqB,SAAUlgS,EAAQp0E,GACzC,GAAI,aAAa6Z,KAAK7Z,GAAQ,CAC5B,IAAIu0W,EAAiBv4U,SAASh8B,EAAO,IACrC,GAAIu0W,GAAkB,GAAKA,GAAkB,EAAG,CAC9C,IAAI/1C,EAAYjrO,GAASg8M,mBAAmBn7N,GACxCogS,EAAcjhR,GAASi8M,mBAAmBp7N,GAC9C,OAAIogS,EACKA,EAAYD,EAAiB,IAAMv0W,EAEnCw+T,EAAU+1C,EAAiB,IAAMv0W,EAG1C,OAAOA,EAGT,OAAOA,GAGPy0W,GAAqB,SAAUzgN,GACjC,IAAID,EAAQC,EAAKjjI,MAAM,WACvB,OAAO9sB,EAAI8vJ,GAAO,SAAUC,GAC1B,OAA2B,IAAvBA,EAAK9xJ,QAAQ,MAAiBmzN,GAAWrhE,EAAM,MAAQqhE,GAAWrhE,EAAM,KAGnEA,EAFA,IAAOA,EAAO,OAItBhpJ,KAAK,MAEN0pW,GAAiB,SAAUtgS,EAAQp0E,GACrC,IAAIg0J,EAAOsgN,GAAmBlgS,EAAQp0E,GACtCo0E,EAAOmgB,UAAUruB,OAAO,WAAY,CAAElmE,MAAOy0W,GAAmBzgN,KAChE5/E,EAAOogB,eAELmgR,GAAgB,SAAUvgS,GAC5B,OAAOigS,GAAgBjgS,GAAQ9wE,MAAK,WAClC,OAAO6wW,GAAsB//R,GAAQnwE,KAAI,SAAU+uW,GACjD,OAAOgB,GAASE,cAAc9/R,EAAOv8C,UAAWm7U,MAC/CvvW,MAAM,OACR,SAAUuvW,GACX,OAAOgB,GAASE,cAAc9/R,EAAOv8C,UAAWm7U,OAGhD4B,GAAiB,SAAUxgS,EAAQp0E,GACrCo0E,EAAOmgB,UAAUruB,OAAO,WAAY,CAAElmE,MAAOs0W,GAAmBlgS,EAAQp0E,KACxEo0E,EAAOogB,eAELqgR,GAAgB,SAAUzgS,GAC5B,OAAOigS,GAAgBjgS,GAAQ9wE,MAAK,WAClC,OAAO6wW,GAAsB//R,GAAQnwE,KAAI,SAAU+uW,GACjD,OAAOgB,GAASC,YAAY7/R,EAAOv8C,UAAWm7U,MAC7CvvW,MAAM,OACR,SAAUuvW,GACX,OAAOgB,GAASC,YAAY7/R,EAAOv8C,UAAWm7U,OAI9C8B,GAAS5zW,GAAMgD,KACf6wW,GAAQ7zW,GAAM+C,IAAK+wW,GAAY9zW,GAAM6vM,QACrCkkK,GAAiB,WACnB,SAASA,EAAe7gS,GACtBryE,KAAK8sJ,SAAW,CACdl+I,MAAO,GACPw+E,KAAM,GACNnvF,MAAO,IAET+B,KAAKqyE,OAASA,EACdryE,KAAKmzW,cAAc9gS,GAqYrB,OAnYA6gS,EAAerzW,UAAU0zF,YAAc,SAAU49D,EAAS7xE,EAAIrhF,EAAON,GACnE,IAAImqP,EAAMsrH,EAAexkW,GAAQ,EAC7B7L,EAAO/C,KACX,IAAI+C,EAAKsvE,OAAO2yD,QAAhB,CAaA,GAVK,mEAAmEltH,KAAKq5I,IAAcxzJ,GAASA,EAAK01W,WAGvGlyD,GAAkBr/P,QAAQ/+C,EAAKsvE,QAF/BtvE,EAAKsvE,OAAOtvD,QAIdplB,EAAOoF,EAAKsvE,OAAOqf,KAAK,oBAAqB,CAC3Cy/D,QAASA,EACT7xE,GAAIA,EACJrhF,MAAOA,IAELN,EAAKqiL,qBACP,OAAO,EAGT,GADAozL,EAAgBjiN,EAAQz4I,cACpBovO,EAAO/kP,EAAK+pJ,SAAS1/D,KAAKgmR,GAO5B,OANAtrH,EAAKsrH,EAAe9zR,EAAIrhF,GACxB8E,EAAKsvE,OAAOqf,KAAK,cAAe,CAC9By/D,QAASA,EACT7xE,GAAIA,EACJrhF,MAAOA,KAEF,EAaT,GAXA80W,GAAO/yW,KAAKqyE,OAAO0uG,SAAS,SAAUnhL,GACpC,GAAIA,EAAE2zF,aAAe3zF,EAAE2zF,YAAY49D,EAAS7xE,EAAIrhF,GAO9C,OANA8E,EAAKsvE,OAAOqf,KAAK,cAAe,CAC9By/D,QAASA,EACT7xE,GAAIA,EACJrhF,MAAOA,IAET2Q,GAAQ,GACD,KAGPA,EACF,OAAOA,EAET,GAAI7L,EAAKsvE,OAAOi0O,OAASvjT,EAAKsvE,OAAOi0O,MAAM/yN,aAAexwF,EAAKsvE,OAAOi0O,MAAM/yN,YAAY49D,EAAS7xE,EAAIrhF,GAMnG,OALA8E,EAAKsvE,OAAOqf,KAAK,cAAe,CAC9By/D,QAASA,EACT7xE,GAAIA,EACJrhF,MAAOA,KAEF,EAET,IACE2Q,EAAQ7L,EAAKsvE,OAAOmI,SAAS+Y,YAAY49D,EAAS7xE,EAAIrhF,GACtD,MAAOgpG,IAET,QAAIr4F,IACF7L,EAAKsvE,OAAOqf,KAAK,cAAe,CAC9By/D,QAASA,EACT7xE,GAAIA,EACJrhF,MAAOA,KAEF,KAIXi1W,EAAerzW,UAAU6vK,kBAAoB,SAAUve,GACrD,IAAI22F,EACJ,IAAI9nP,KAAKqyE,OAAOqxI,OAAOxrJ,aAAcl4D,KAAKqyE,OAAO2yD,QAAjD,CAIA,GADAmsB,EAAUA,EAAQz4I,cACdovO,EAAO9nP,KAAK8sJ,SAASl+I,MAAMuiJ,GAC7B,OAAO22F,EAAK32F,GAEd,IACE,OAAOnxJ,KAAKqyE,OAAOmI,SAASk1F,kBAAkBve,GAC9C,MAAOlqD,IAET,OAAO,IAETisQ,EAAerzW,UAAUyyJ,kBAAoB,SAAUnB,GACrD,IAAI22F,EACJ,IAAI9nP,KAAKqyE,OAAOqxI,OAAOxrJ,aAAcl4D,KAAKqyE,OAAO2yD,QAAjD,CAIA,GADAmsB,EAAUA,EAAQz4I,cACdovO,EAAO9nP,KAAK8sJ,SAAS7uJ,MAAMkzJ,GAC7B,OAAO22F,EAAK32F,GAEd,IACE,OAAOnxJ,KAAKqyE,OAAOmI,SAAS83E,kBAAkBnB,GAC9C,MAAOlqD,OAGXisQ,EAAerzW,UAAUyzW,YAAc,SAAUC,EAAa/uW,GAC5D,IAAIzB,EAAO/C,KACXwE,EAAOA,GAAQ,OACfuuW,GAAOQ,GAAa,SAAU7/Q,EAAUy9D,GACtC4hN,GAAO5hN,EAAQz4I,cAAcsW,MAAM,MAAM,SAAUmiI,GACjDpuJ,EAAK+pJ,SAAStoJ,GAAM2sJ,GAAWz9D,SAIrCw/Q,EAAerzW,UAAU+yF,WAAa,SAAUu+D,EAASz9D,EAAUz9E,GACjE,IAAImkR,EAAQp6R,KACZmxJ,EAAUA,EAAQz4I,cAClB1Y,KAAK8sJ,SAAS1/D,KAAK+jE,GAAW,SAAUA,EAAS7xE,EAAIrhF,EAAON,GAC1D,OAAO+1F,EAAS3zF,KAAKkW,GAASmkR,EAAM/nN,OAAQiN,EAAIrhF,EAAON,KAG3Du1W,EAAerzW,UAAU2mW,sBAAwB,SAAUr1M,GAEzD,GADAA,EAAUA,EAAQz4I,cACd1Y,KAAK8sJ,SAAS1/D,KAAK+jE,GACrB,OAAO,EAET,IACE,OAAOnxJ,KAAKqyE,OAAOmI,SAASgsR,sBAAsBr1M,GAClD,MAAOlqD,IAET,OAAO,GAETisQ,EAAerzW,UAAU2uM,qBAAuB,SAAUr9C,EAASz9D,EAAUz9E,GAC3E,IAAImkR,EAAQp6R,KACZmxJ,EAAUA,EAAQz4I,cAClB1Y,KAAK8sJ,SAASl+I,MAAMuiJ,GAAW,WAC7B,OAAOz9D,EAAS3zF,KAAKkW,GAASmkR,EAAM/nN,UAGxC6gS,EAAerzW,UAAUkrK,qBAAuB,SAAU5Z,EAASz9D,EAAUz9E,GAC3E,IAAImkR,EAAQp6R,KACZmxJ,EAAUA,EAAQz4I,cAClB1Y,KAAK8sJ,SAAS7uJ,MAAMkzJ,GAAW,WAC7B,OAAOz9D,EAAS3zF,KAAKkW,GAASmkR,EAAM/nN,UAGxC6gS,EAAerzW,UAAU2zW,iBAAmB,SAAUriN,GAEpD,OADAA,EAAUA,EAAQz4I,gBACT1Y,KAAK8sJ,SAAS1/D,KAAK+jE,IAE9B+hN,EAAerzW,UAAU4zW,kBAAoB,SAAUtiN,EAAS7xE,EAAIrhF,GAOlE,YANW8D,IAAPu9E,IACFA,GAAK,QAEOv9E,IAAV9D,IACFA,EAAQ,MAEH+B,KAAKqyE,OAAOmI,SAAS+Y,YAAY49D,EAAS7xE,EAAIrhF,IAEvDi1W,EAAerzW,UAAU6zW,cAAgB,SAAUpvW,GACjD,OAAOtE,KAAKqyE,OAAOmgB,UAAU1pF,MAAMxE,IAErC4uW,EAAerzW,UAAUmuK,aAAe,SAAU1pK,EAAMrG,GACtD+B,KAAKqyE,OAAOmgB,UAAUruB,OAAO7/D,EAAMrG,EAAQ,CAAEA,MAAOA,QAAU8D,GAC9D/B,KAAKqyE,OAAOogB,eAEdygR,EAAerzW,UAAU8zW,eAAiB,SAAUnvW,GAClDxE,KAAK4zW,kBAAoB5zW,KAAKqyE,OAAOt8B,UAAU6yJ,YAAYpkM,IAE7D0uW,EAAerzW,UAAU07U,iBAAmB,WAC1Cv7U,KAAKqyE,OAAOt8B,UAAU8yJ,eAAe7oM,KAAK4zW,oBAE5CV,EAAerzW,UAAUszW,cAAgB,SAAU9gS,GACjD,IAAItvE,EAAO/C,KACXA,KAAKszW,YAAY,CACf,uCAAwC,aAExC,kCAAmC,WACjCjhS,EAAOigB,YAAY39D,OAErB,iBAAkB,SAAUw8H,GAC1B,IACImqH,EADAplQ,EAAMm8D,EAAOmI,SAEjB,IACEz3E,EAAK0wW,kBAAkBtiN,GACvB,MAAOlqD,GACPq0K,GAAS,EAKX,GAHgB,UAAZnqH,GAAwBj7I,EAAI29V,oBAAoB1iN,KAClDmqH,GAAS,GAEPA,IAAWplQ,EAAIswV,sBAAsBr1M,GAAU,CACjD,IAAIvyJ,EAAMyzE,EAAOp3C,UAAU,sHACvBk+O,GAAIl1L,MACNrlF,EAAMA,EAAIyZ,QAAQ,UAAW,OAE/Bg6D,EAAO6nI,oBAAoBr5J,KAAK,CAC9B/pC,KAAMlY,EACN4F,KAAM,YAIZ,OAAU,WACR,GAAI6tE,EAAOt8B,UAAUmtG,cAArB,CACE,IAAIvoE,EAAMtI,EAAOr7D,IAAI2kE,UAAUtJ,EAAOt8B,UAAUd,WAAY,KACxD0lC,GACFtI,EAAOr7D,IAAI4S,OAAO+wD,GAAK,QAI3BtI,EAAOmgB,UAAU5oE,OAAO,SAE1B,iEAAkE,SAAUunI,GAC1E,IAAIkF,EAAQlF,EAAQpiI,UAAU,GAChB,SAAVsnI,IACFA,EAAQ,WAEV08M,GAAO,4BAA4B/jV,MAAM,MAAM,SAAU1qB,GACnD+xJ,IAAU/xJ,GACZ+tE,EAAOmgB,UAAU5oE,OAAO,QAAUtlB,MAGxB,SAAV+xJ,GACFtzJ,EAAKirK,aAAa,QAAU3X,IAGhC,wCAAyC,SAAUlF,GACjD,IAAIuhE,EAASohJ,EACb/wW,EAAK0wW,kBAAkBtiN,GACvBuhE,EAAUrgJ,EAAOr7D,IAAI2kE,UAAUtJ,EAAOt8B,UAAUwkC,UAAW,SACvDm4I,IACFohJ,EAAaphJ,EAAQjyM,WACjB,2BAA2B3I,KAAKg8V,EAAWlpV,YAC7C7nB,EAAK4wW,iBACLthS,EAAOr7D,IAAIgY,MAAM8kV,EAAYphJ,GAC7B3vN,EAAKw4U,sBAIX,4DAA6D,SAAUpqL,GACrEpuJ,EAAKirK,aAAa7c,IAEpB,wBAAyB,SAAUA,EAAS7xE,EAAIrhF,GAC9C8E,EAAKirK,aAAa7c,EAASlzJ,IAE7B,SAAY,SAAUkzJ,EAAS7xE,EAAIrhF,GACjC00W,GAAetgS,EAAQp0E,IAEzB,SAAY,SAAUkzJ,EAAS7xE,EAAIrhF,GACjC40W,GAAexgS,EAAQp0E,IAEzB,aAAgB,SAAUkzJ,GACxB9+E,EAAOmgB,UAAU5oE,OAAOunI,IAE1B,cAAiB,WACfpuJ,EAAKirK,aAAa,eAEpB,YAAe,SAAU7c,EAAS7xE,EAAIrhF,GACpC,OAAO8E,EAAKirK,aAAa/vK,GAAS,MAEpC,WAAc,WACZ,IAAI0qM,EAAWt2H,EAAOt8B,UAAU6yJ,cAChCv2H,EAAOrxB,WAAWqxB,EAAOtB,cACzBsB,EAAOt8B,UAAU8yJ,eAAeF,IAElC,cAAiB,SAAUx3C,EAAS7xE,EAAIrhF,GACtC,IAAI2Y,EAAO3Y,GAASo0E,EAAOt8B,UAAUwkC,UACjC3jE,IAASy7D,EAAOv8C,YAClB/yB,EAAK4wW,iBACLthS,EAAOr7D,IAAI4S,OAAOhT,GAAM,GACxB7T,EAAKw4U,qBAGT,mBAAsB,SAAUpqL,EAAS7xE,EAAIrhF,GAC3C,IAAIq8R,EAAU,EACdjoN,EAAOr7D,IAAI2kE,UAAUtJ,EAAOt8B,UAAUwkC,WAAW,SAAU3jE,GACzD,GAAsB,IAAlBA,EAAKwI,UAAkBk7Q,MAAcr8R,EAEvC,OADAo0E,EAAOt8B,UAAUs+C,OAAOz9E,IACjB,IAERy7D,EAAOv8C,YAEZ,cAAiB,SAAUq7H,EAAS7xE,EAAIrhF,GACtCo0E,EAAOt8B,UAAUs+C,OAAOp2F,IAE1B,iBAAoB,SAAUkzJ,EAAS7xE,EAAIrhF,GACzCmzW,GAAchC,cAAc/8R,EAAQp0E,IAEtC,iBAAoB,SAAUkzJ,EAAS7xE,EAAIrhF,GACzCo0E,EAAOt8B,UAAUiL,WAAW,mBAC5B,IAAI92B,EAAUmoD,EAAOtB,aACrBsB,EAAOrxB,WAAW92B,EAAQ7R,QAAQ,oBAAoB,WACpD,OAAOpa,OAGX,iBAAoB,SAAUkzJ,EAAS7xE,EAAIrhF,GACzC2+V,GAAcj7R,OAAO0Q,EAAQp0E,IAE/B,gBAAmB,SAAUkzJ,EAAS7xE,EAAIrhF,GACxC8E,EAAKirK,aAAa/vK,IAEpB,cAAiB,SAAUkzJ,EAAS7xE,EAAIrhF,GACtCo0E,EAAOrxB,WAAW/iD,IAEpB,iBAAkB,SAAUkzJ,GAC1Bt0H,GAAOw1C,EAAQ8+E,IAEjB,WAAc,aAEd,qBAAwB,WACtB9+E,EAAOkhB,YAAY,oBAAoB,EAAO,WAEhD,mBAAsB,WACpBlhB,EAAO68F,WAAa78F,EAAO68F,UAC3B78F,EAAOszK,aAET,kBAAqB,SAAUx0F,EAAS7xE,EAAIrhF,GAC1Co0E,EAAOkhB,YAAY,oBAAoB,EAAOt1F,EAAMoa,QAAQ,mBAAoBg6D,EAAOt8B,UAAUg7B,WAAW,CAAEohB,OAAQ,YAExH,cAAiB,SAAUg/D,EAAS7xE,EAAIrhF,GACtC,IAAIsmC,EACiB,kBAAVtmC,IACTA,EAAQ,CAAEw6L,KAAMx6L,IAElBsmC,EAAS8tC,EAAOr7D,IAAI2kE,UAAUtJ,EAAOt8B,UAAUwkC,UAAW,KAC1Dt8E,EAAMw6L,KAAOx6L,EAAMw6L,KAAKpgL,QAAQ,KAAM,OACjCksB,GAAWtmC,EAAMw6L,MACpBpmH,EAAOmgB,UAAU5oE,OAAO,QAEtB3rB,EAAMw6L,MACRpmH,EAAOmgB,UAAUz0F,MAAM,OAAQE,EAAOsmC,IAG1C,UAAa,WACX,IAAIwvU,EAAc1hS,EAAOr7D,IAAI2kE,UAAUtJ,EAAOt8B,UAAUd,WAAYosJ,GAAShpD,uBAC7E,GAAI07N,EAAa,CACf,IAAI/9T,EAAMq8B,EAAOr7D,IAAImlE,YACrBnmC,EAAIy6K,mBAAmBsjJ,GACvB1hS,EAAOt8B,UAAUm8H,OAAOl8H,KAG5B,OAAU,WACRw7T,GAAeF,cAAcj/R,IAE/B,cAAiB,WACfm/R,GAAeD,qBAAqBl/R,IAEtC,eAAkB,WAChBA,EAAOrxB,WAAW,KAEpB,gBAAmB,SAAUmwG,EAAS7xE,EAAIrhF,GAExC,OADAq9V,GAAS35R,OAAO0Q,EAAQp0E,IACjB,KAGX,IAAI+1W,EAAc,SAAU1vW,GAC1B,OAAO,WACL,IAAI83L,EAAQ/pH,EAAOt8B,UAAUmtG,cAAgB,CAAC7wE,EAAOr7D,IAAI2kE,UAAUtJ,EAAOt8B,UAAUwkC,UAAWlI,EAAOr7D,IAAI8iE,UAAYzH,EAAOt8B,UAAU+rJ,oBACnIjkL,EAAUm1V,GAAM52K,GAAO,SAAUxlL,GACnC,QAASy7D,EAAOmgB,UAAUqhE,UAAUj9I,EAAMtS,MAE5C,OAAqC,IAA9B2uW,GAAUp1V,GAAS,KAG9B9a,EAAKuwW,YAAY,CACf,YAAeU,EAAY,aAC3B,cAAiBA,EAAY,eAC7B,aAAgBA,EAAY,cAC5B,YAAeA,EAAY,gBAC3B,4DAA6D,SAAU7iN,GACrE,OAAOpuJ,EAAK2wW,cAAcviN,IAE5B,cAAiB,WACf,OAAOpuJ,EAAK2wW,cAAc,eAE5B,QAAW,WACT,OAAOle,GAAWnjR,IAEpB,wCAAyC,SAAU8+E,GACjD,IAAI9gI,EAAOgiD,EAAOr7D,IAAI2kE,UAAUtJ,EAAOt8B,UAAUwkC,UAAW,SAC5D,OAAOlqD,IAAqB,wBAAZ8gI,GAAsD,OAAjB9gI,EAAKirK,SAAgC,sBAAZnqC,GAAoD,OAAjB9gI,EAAKirK,WAEvH,SACHv4L,EAAKuwW,YAAY,CACfW,KAAM,WACJ5hS,EAAOigB,YAAYsnC,QAErBs6O,KAAM,WACJ7hS,EAAOigB,YAAYunC,UAGvB92H,EAAKgoK,qBAAqB,YAAY,WACpC,OAAO6nM,GAAcvgS,KACpBryE,MACH+C,EAAKgoK,qBAAqB,YAAY,WACpC,OAAO+nM,GAAczgS,KACpBryE,OAEEkzW,EA7YY,GAgZjBiB,GAAeh1W,GAAMw7I,QAAQ,qXAAqY,KAClay5N,GAAkB,WACpB,SAASA,EAAgB9hS,GACvBtyE,KAAKq0W,SAAW,GAChBr0W,KAAKsyE,SAAWA,GAAY,GAC5BtyE,KAAKiW,MAAQjW,KAAKsyE,SAASr8D,OAASjW,KACpCA,KAAKs0W,YAAct0W,KAAKsyE,SAASgiS,aAAex1W,EA6HlD,OA3HAs1W,EAAgBG,SAAW,SAAUjwW,GACnC,QAAS6vW,GAAa7vW,EAAKoU,gBAE7B07V,EAAgBv0W,UAAU6xF,KAAO,SAAUptF,EAAM3G,GAC/C,IAAIyjB,EAAU1hB,EAAG8zG,EAAG9f,EAyBpB,GAxBApvF,EAAOA,EAAKoU,cACZ/a,EAAOA,GAAQ,GACfA,EAAK6G,KAAOF,EACP3G,EAAKyL,SACRzL,EAAKyL,OAASpJ,KAAKiW,OAEhBtY,EAAKynB,iBACRznB,EAAKynB,eAAiB,WACpBznB,EAAKqiL,mBAAqBjhL,GAE5BpB,EAAK++B,gBAAkB,WACrB/+B,EAAKsiL,qBAAuBlhL,GAE9BpB,EAAKi/E,yBAA2B,WAC9Bj/E,EAAKutR,8BAAgCnsR,GAEvCpB,EAAKqiL,mBAAqBlhL,EAC1BnB,EAAKsiL,qBAAuBnhL,EAC5BnB,EAAKutR,8BAAgCpsR,GAEnCkB,KAAKsyE,SAASkiS,YAChBx0W,KAAKsyE,SAASkiS,WAAW72W,GAE3ByjB,EAAWphB,KAAKq0W,SAAS/vW,GACrB8c,EACF,IAAK1hB,EAAI,EAAG8zG,EAAIpyF,EAAStjB,OAAQ4B,EAAI8zG,EAAG9zG,IAAK,CAK3C,GAJAg0F,EAAWtyE,EAAS1hB,GAChBg0F,EAASwR,MACXllG,KAAKmvC,IAAI7qC,EAAMovF,EAASo0J,MAEtBnqP,EAAKutR,gCAEP,OADAvtR,EAAK++B,kBACE/+B,EAET,IAA6C,IAAzC+1F,EAASo0J,KAAK/nP,KAAKC,KAAKiW,MAAOtY,GAEjC,OADAA,EAAKynB,iBACEznB,EAIb,OAAOA,GAETy2W,EAAgBv0W,UAAUovC,GAAK,SAAU3qC,EAAMovF,EAAUxqE,EAASxY,GAChE,IAAI0Q,EAAUkqC,EAAO5rD,EAIrB,IAHiB,IAAbg0F,IACFA,EAAW50F,GAET40F,EAAU,CACZ,IAAI+gR,EAAkB,CAAE3sH,KAAMp0J,GAC1BhjF,GACFvR,GAAM4jI,OAAO0xO,EAAiB/jW,GAEhC46C,EAAQhnD,EAAKoU,cAAcsW,MAAM,KACjCtvB,EAAI4rD,EAAMxtD,OACV,MAAO4B,IACL4E,EAAOgnD,EAAM5rD,GACb0hB,EAAWphB,KAAKq0W,SAAS/vW,GACpB8c,IACHA,EAAWphB,KAAKq0W,SAAS/vW,GAAQ,GACjCtE,KAAKs0W,YAAYhwW,GAAM,IAErB4kB,EACF9H,EAASouE,QAAQilR,GAEjBrzV,EAAS9b,KAAKmvW,GAIpB,OAAOz0W,MAETo0W,EAAgBv0W,UAAUsvC,IAAM,SAAU7qC,EAAMovF,GAC9C,IAAIh0F,EAAG0hB,EAAUszV,EAAappT,EAAOqpT,EACrC,GAAIrwW,EAAM,CACRgnD,EAAQhnD,EAAKoU,cAAcsW,MAAM,KACjCtvB,EAAI4rD,EAAMxtD,OACV,MAAO4B,IAAK,CAGV,GAFA4E,EAAOgnD,EAAM5rD,GACb0hB,EAAWphB,KAAKq0W,SAAS/vW,IACpBA,EAAM,CACT,IAAKowW,KAAe10W,KAAKq0W,SACvBr0W,KAAKs0W,YAAYI,GAAa,UACvB10W,KAAKq0W,SAASK,GAEvB,OAAO10W,KAET,GAAIohB,EAAU,CACZ,GAAKsyE,EAEE,CACLihR,EAAKvzV,EAAStjB,OACd,MAAO62W,IACDvzV,EAASuzV,GAAI7sH,OAASp0J,IACxBtyE,EAAWA,EAASjc,MAAM,EAAGwvW,GAAIl2W,OAAO2iB,EAASjc,MAAMwvW,EAAK,IAC5D30W,KAAKq0W,SAAS/vW,GAAQ8c,QAN1BA,EAAStjB,OAAS,EAUfsjB,EAAStjB,SACZkC,KAAKs0W,YAAYhwW,GAAM,UAChBtE,KAAKq0W,SAAS/vW,UAItB,CACL,IAAKA,KAAQtE,KAAKq0W,SAChBr0W,KAAKs0W,YAAYhwW,GAAM,GAEzBtE,KAAKq0W,SAAW,GAElB,OAAOr0W,MAETo0W,EAAgBv0W,UAAUqlG,KAAO,SAAU5gG,EAAMovF,EAAUxqE,GACzD,OAAOlpB,KAAKivC,GAAG3qC,EAAMovF,EAAUxqE,EAAS,CAAEg8E,MAAM,KAElDkvQ,EAAgBv0W,UAAUuI,IAAM,SAAU9D,GAExC,OADAA,EAAOA,EAAKoU,iBACF1Y,KAAKq0W,SAAS/vW,IAAwC,IAA/BtE,KAAKq0W,SAAS/vW,GAAMxG,SAEhDs2W,EAlIa,GAqIlBQ,GAAqB,SAAUltW,GAWjC,OAVKA,EAAImtW,mBACPntW,EAAImtW,iBAAmB,IAAIT,GAAgB,CACzCn+V,MAAOvO,EACP4sW,YAAa,SAAUhwW,EAAMsK,GACvBwlW,GAAgBG,SAASjwW,IAASoD,EAAIotW,mBACxCptW,EAAIotW,kBAAkBxwW,EAAMsK,OAK7BlH,EAAImtW,kBAETE,GAAa,CACfrjR,KAAM,SAAUptF,EAAM3G,EAAM0wC,GAC1B,IAAItrC,EAAO/C,KACX,GAAI+C,EAAKiiI,SAAoB,WAAT1gI,GAA8B,WAATA,EACvC,OAAO3G,EAET,IAAIq3W,EAAiBJ,GAAmB7xW,GAAM2uF,KAAKptF,EAAM3G,GACzD,IAAe,IAAX0wC,GAAoBtrC,EAAKmlB,OAAQ,CACnC,IAAI63J,EAAWh9K,EAAKmlB,SACpB,MAAO63J,IAAai1L,EAAe/0L,uBACjCF,EAASruF,KAAKptF,EAAM0wW,GAAgB,GACpCj1L,EAAWA,EAAS73J,SAGxB,OAAO8sV,GAET/lU,GAAI,SAAU3qC,EAAMovF,EAAUxqE,GAC5B,OAAO0rV,GAAmB50W,MAAMivC,GAAG3qC,EAAMovF,EAAUxqE,IAErDimB,IAAK,SAAU7qC,EAAMovF,GACnB,OAAOkhR,GAAmB50W,MAAMmvC,IAAI7qC,EAAMovF,IAE5CwR,KAAM,SAAU5gG,EAAMovF,GACpB,OAAOkhR,GAAmB50W,MAAMklG,KAAK5gG,EAAMovF,IAE7Cs2H,kBAAmB,SAAU1lN,GAC3B,OAAOswW,GAAmB50W,MAAMoI,IAAI9D,KAIpC2wW,GAA8B,2BAC9B/wS,GAAc,SAAUyW,EAAK0hN,EAAKztR,GAChC0mB,GAAMqlD,EAAK0hN,KAAkB,IAAVztR,EACrBymB,GAASslD,EAAK0hN,GACLztR,GACT2mB,GAAMolD,EAAK0hN,IAGX6pE,GAAwB,SAAU7zR,EAAQu7F,EAAKh/J,GACjD,IACEyjE,EAAOmI,SAAS+Y,YAAYq6E,GAAK,EAAOh/J,GACxC,MAAOq4F,MAGPk1F,GAAqB,SAAUxhH,EAAK/rE,GACtC+rE,EAAI3jE,MAAMohI,gBAAkBxpI,EAAQ,OAAS,SAE3CsmW,GAA+B,SAAUv6R,GAC3Cx4E,EAAKw+E,GAAchG,EAAK,8BAA8B,SAAUA,GAC9D9kE,GAAI8kE,EAAKs6R,GAA6B,QACtC94K,GAAmBxhH,GAAK,OAGxBw6R,GAA8B,SAAUx6R,GAC1Cx4E,EAAKw+E,GAAchG,EAAK,KAAOs6R,GAA8B,aAAa,SAAUt6R,GAClFjvD,GAASivD,EAAKs6R,IACd94K,GAAmBxhH,GAAK,OAGxBy6R,GAAsB,SAAU/iS,GAClCjvE,EAAOD,KAAKkvE,EAAOt8B,UAAUwkC,WAAWp4E,MAAK,SAAUw4E,GACrDA,EAAIhvD,gBAAgB,yBAGpB0pV,GAAuB,SAAUhjS,GACnCA,EAAOt8B,UAAUm8H,OAAO7/F,EAAOt8B,UAAU6nC,WAEvC03R,GAAiB,SAAUjjS,EAAQzjE,GACrC,IAAIinB,EAAOxe,GAAQZ,QAAQ47D,EAAOv8C,WAClCouC,GAAYruC,EAAM,uBAAwBjnB,GACtCA,GACFyjE,EAAOt8B,UAAUmlR,iBAAiBhL,iBAClC79O,EAAOyzO,oBAAoBkqC,gBAC3BolB,GAAoB/iS,GACpBA,EAAO+yE,UAAW,EAClB+2C,GAAmBtmK,GAAM,GACzBq/U,GAA6Br/U,KAE7Bw8C,EAAO+yE,UAAW,EAClB+2C,GAAmBtmK,GAAM,GACzBs/U,GAA4Bt/U,GAC5BqwU,GAAsB7zR,EAAQ,gBAAgB,GAC9C6zR,GAAsB7zR,EAAQ,4BAA4B,GAC1D6zR,GAAsB7zR,EAAQ,wBAAwB,GAClD0xO,GAAYP,mBAAmBnxO,IACjCA,EAAOtvD,QAETsyV,GAAqBhjS,GACrBA,EAAOogB,gBAGP5f,GAAa,SAAUR,GACzB,OAAOA,EAAO+yE,UAEZmwN,GAAkB,SAAUljS,GAC9BA,EAAOgqH,OAAOshB,mBAAmB,mBAAmB,SAAUvhB,GACxDvpH,GAAWR,IACblwE,EAAKi6L,GAAO,SAAUxlL,GACpBA,EAAK8d,KAAKugV,GAA6Br+V,EAAK8d,KAAK,oBACjD9d,EAAK8d,KAAK,kBAAmB,eAInC29C,EAAOkqH,WAAWohB,mBAAmBs3J,IAA6B,SAAU74K,GACtEvpH,GAAWR,IACblwE,EAAKi6L,GAAO,SAAUxlL,GACpBA,EAAK8d,KAAK,kBAAmB9d,EAAK8d,KAAKugV,WAI7C5iS,EAAOkqH,WAAWgiE,YAAY02G,KAE5BO,GAAiC,SAAUnjS,GACzCA,EAAOkqH,WACTg5K,GAAgBljS,GAEhBA,EAAOpjC,GAAG,WAAW,WACnBsmU,GAAgBljS,OAIlBojS,GAAe,SAAUv1W,GAC3B,MAAkB,UAAXA,EAAEsE,MAEPkxW,GAAa,SAAUrjS,EAAQjpE,GACjC,OAA6C,OAAtCipE,EAAOr7D,IAAI2kE,UAAUvyE,EAAQ,MAElCusW,GAAwB,SAAUtjS,EAAQnyE,GAC5C,IAAIkJ,EAASlJ,EAAEkJ,OACXqsW,GAAav1W,KAAO2tT,GAAGn/G,eAAexuM,IAAMw1W,GAAWrjS,EAAQjpE,IACjElJ,EAAEklB,kBAGFwwV,GAAoC,SAAUvjS,GAChDA,EAAOpjC,GAAG,aAAa,SAAU/uC,GAC3B2yE,GAAWR,IACbnyE,EAAEklB,oBAGNitD,EAAOpjC,GAAG,kBAAkB,SAAU/uC,GAChC2yE,GAAWR,IACbnyE,EAAEklB,qBAKJywV,GAAQn4E,GAAWvqN,IAEnB2iS,GAAiB,SAAUzjS,EAAQz+C,GACrC,MAAkB,oBAAdA,EACKy+C,EAAOmI,UAEXnI,EAAO0C,QAAU,uDAAuDj9D,KAAK8b,GACzEy+C,EAAOmI,SAASxyD,gBAErBqqD,EAAOC,SAASyjS,YACb1jS,EAAO2jS,YACV3jS,EAAO2jS,UAAYH,GAAMxhR,OAAOhiB,EAAOC,SAASyjS,YAAY,IAEvD1jS,EAAO2jS,WAET3jS,EAAOv8C,WAEZmgV,GAAc,SAAU5jS,GAC1B,OAAQA,EAAO44R,SAAWp4R,GAAWR,IAEnC6jS,GAAY,SAAU7jS,EAAQz+C,EAAW1zB,GACvC+1W,GAAY5jS,GACdA,EAAOqf,KAAK99D,EAAW1zB,GACd2yE,GAAWR,IACpBsjS,GAAsBtjS,EAAQnyE,IAG9Bi2W,GAAoB,SAAU9jS,EAAQz+C,GACxC,IAAIwiV,EAAc7lW,EAIlB,GAHK8hE,EAAOgkS,YACVhkS,EAAOgkS,UAAY,KAEjBhkS,EAAOgkS,UAAUziV,KAAcy+C,EAAO2yD,QAI1C,GADAoxO,EAAeN,GAAezjS,EAAQz+C,GAClCy+C,EAAOC,SAASyjS,WAAY,CAe9B,GAdK1xB,KACHA,GAA2B,GAC3BhyQ,EAAOgwO,cAAcpzQ,GAAG,gBAAgB,WACtC,IAAI3qC,EACJ,IAAK+tE,EAAOgwO,cAAcG,cACpB6hC,GAA0B,CAC5B,IAAK//U,KAAQ+/U,GACXhyQ,EAAOr7D,IAAIkmB,OAAO44U,GAAezjS,EAAQ/tE,IAE3C+/U,GAA2B,UAK/BA,GAAyBzwT,GAC3B,OAEFrjB,EAAW,SAAUrQ,GACnB,IAAIkJ,EAASlJ,EAAEkJ,OACXktW,EAAUjkS,EAAOgwO,cAAcn6S,MAC/BxI,EAAI42W,EAAQx4W,OAChB,MAAO4B,IAAK,CACV,IAAIm2B,EAAOygV,EAAQ52W,GAAGo2B,WAClBD,IAASzsB,GAAUysW,GAAMz0K,UAAUh4L,EAAQysB,KAC7CqgV,GAAUI,EAAQ52W,GAAIk0B,EAAW1zB,KAIvCmkV,GAAyBzwT,GAAarjB,EACtCslW,GAAMzzW,KAAKg0W,EAAcxiV,EAAWrjB,QAEpCA,EAAW,SAAUrQ,GACnBg2W,GAAU7jS,EAAQz+C,EAAW1zB,IAE/B21W,GAAMzzW,KAAKg0W,EAAcxiV,EAAWrjB,GACpC8hE,EAAOgkS,UAAUziV,GAAarjB,GAG9BgmW,GAAmBl3W,GAASA,GAAS,GAAI01W,IAAa,CACxDhM,0BAA2B,WACzB,IAAIhmW,EAAO/C,KACXb,GAAMgD,KAAKY,EAAKyzW,sBAAsB,SAAUlyW,GAC9C6xW,GAAkBpzW,EAAMuB,OAG5BwwW,kBAAmB,SAAUxwW,EAAMsK,GACjC,IAAI7L,EAAO/C,KACE,UAATsE,GAA6B,SAATA,IAGpBsK,EACE7L,EAAKoxJ,YACPgiN,GAAkBpzW,EAAMuB,GAEnBvB,EAAKyzW,qBAGRzzW,EAAKyzW,qBAAqBlxW,KAAKhB,GAF/BvB,EAAKyzW,qBAAuB,CAAClyW,GAKxBvB,EAAKoxJ,cACdpxJ,EAAKiU,IAAIkmB,OAAO44U,GAAe/yW,EAAMuB,GAAOA,EAAMvB,EAAKszW,UAAU/xW,WAC1DvB,EAAKszW,UAAU/xW,MAG1B2hT,sBAAuB,WACrB,IAGI3hT,EAHAvB,EAAO/C,KACP61B,EAAO9yB,EAAK+yB,UACZ9e,EAAMjU,EAAKiU,IAEf,GAAIjU,EAAKszW,UAAW,CAClB,IAAK/xW,KAAQvB,EAAKszW,UAChBtzW,EAAKiU,IAAIkmB,OAAO44U,GAAe/yW,EAAMuB,GAAOA,EAAMvB,EAAKszW,UAAU/xW,WAE5DvB,EAAKszW,WAETtzW,EAAKgyE,QAAUl/C,GAAQ7e,IAC1B6e,EAAKy3L,OAAS,KACdt2M,EAAIkmB,OAAOn6B,EAAKszC,UAChBr/B,EAAIkmB,OAAOn6B,EAAKy3E,WAEdxjE,IACFA,EAAIkmB,OAAOrH,GACX7e,EAAIkmB,OAAOn6B,EAAK0nG,oBAKlBgsQ,GAAe,CACjB,SACA,YAEEC,GAAe,SAAUrkS,EAAQskS,EAAYC,EAAgBtyT,GAC/D,IAAIuyT,EAAUD,EAAeD,EAAWzuW,OACpCs4K,EAAUo2L,EAAetyT,GAC7B,IACEk8H,EAAQs2L,WACR,MAAO52W,IAEP,YADA9C,EAAWmM,QAAQ3F,MAAM,wCAA0C0gD,EAAO,IAAKpkD,IAGjF22W,EAAQE,aACJF,EAAQG,iBAAmBx2L,EAAQw2L,gBACrC1B,GAAejjS,EAAQmuG,EAAQw2L,gBAEjCL,EAAW9gW,IAAIyuC,GACfugQ,GAAexyO,EAAQ/tB,IAErBmhG,GAAU,SAAUpzE,EAAQukS,EAAgBD,EAAYryT,GAC1D,GAAIA,IAASqyT,EAAWzuW,MAAxB,CAEO,IAAKE,GAAIwuW,EAAgBtyT,GAC9B,MAAM,IAAIzlD,MAAM,gBAAmBylD,EAAO,gBAExC+tB,EAAO8hF,YACTuiN,GAAarkS,EAAQskS,EAAYC,EAAgBtyT,GAEjD+tB,EAAOpjC,GAAG,QAAQ,WAChB,OAAOynU,GAAarkS,EAAQskS,EAAYC,EAAgBtyT,QAI1D2yT,GAAe,SAAUL,EAAgBtyT,EAAMhqB,GACjD,IAAIluB,EACJ,GAAI1G,EAAS+wW,GAAcnyT,GACzB,MAAM,IAAIzlD,MAAM,gCAAkCylD,GAEpD,OAAOjlD,GAASA,GAAS,GAAIu3W,IAAkBxqW,EAAK,GAAIA,EAAGk4C,GAAQjlD,GAASA,GAAS,GAAIi7B,GAAM,CAC7Fy8U,WAAY,WACV,IACEz8U,EAAIy8U,aACJ,MAAO72W,IACP9C,EAAWmM,QAAQ3F,MAAM,0CAA4C0gD,EAAO,IAAKpkD,QAGnFkM,KAGFiuE,GAAW,SAAUhI,GACvB,IAAIskS,EAAahhW,GAAK,UAClBihW,EAAiBjhW,GAAK,CACxBuhW,OAAQ,CACNJ,SAAUz5W,EACV05W,WAAY15W,EACZ25W,gBAAgB,GAElB5xN,SAAU,CACR0xN,SAAUz5W,EACV05W,WAAY15W,EACZ25W,gBAAgB,KAKpB,OAFAxB,GAA+BnjS,GAC/BujS,GAAkCvjS,GAC3B,CACLQ,WAAY,WACV,OAAOA,GAAWR,IAEpBx8D,IAAK,SAAUyuC,GACb,OAAOmhG,GAAQpzE,EAAQukS,EAAe1uW,MAAOyuW,EAAYryT,IAE3Dp8C,IAAK,WACH,OAAOyuW,EAAWzuW,OAEpBk3E,SAAU,SAAU96B,EAAMhqB,GACxBs8U,EAAe/gW,IAAIohW,GAAaL,EAAe1uW,MAAOo8C,EAAMhqB,OAK9D68U,GAASh4W,GAAMgD,KAAMi1W,GAAYj4W,GAAMu7Q,QACvC28F,GAAgB,CAClBC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,IAAK,IACLC,IAAK,IACLC,IAAK,KAEHC,GAAgB/4W,GAAMw7I,QAAQ,8BAC9Bw9N,GAAY,WACd,SAASA,EAAU9lS,GACjBryE,KAAK64J,UAAY,GACjB74J,KAAKo4W,gBAAkB,GACvBp4W,KAAKqyE,OAASA,EACd,IAAItvE,EAAO/C,KACXqyE,EAAOpjC,GAAG,0BAA0B,SAAU/uC,IACvC6C,EAAKs1W,YAAYn4W,KAAM6C,EAAKu1W,cAAcp4W,IAAQA,EAAE8/K,uBACvDm3L,GAAOp0W,EAAK81J,WAAW,SAAUt0E,GAC/B,GAAIxhF,EAAKw1W,cAAcr4W,EAAGqkF,GAKxB,OAJAxhF,EAAKq1W,gBAAkB7zR,EAASi0R,YAAYrzW,MAAM,GACnC,YAAXjF,EAAEsE,MACJzB,EAAK01W,sBAAsBl0R,IAEtB,KAGPxhF,EAAKw1W,cAAcr4W,EAAG6C,EAAKq1W,gBAAgB,MACT,IAAhCr1W,EAAKq1W,gBAAgBt6W,QACR,YAAXoC,EAAEsE,MACJzB,EAAK01W,sBAAsB11W,EAAKq1W,gBAAgB,IAGpDr1W,EAAKq1W,gBAAgBh0R,aA+G7B,OA1GA+zR,EAAUt4W,UAAU80B,IAAM,SAAUgvF,EAAS+0P,EAAMC,EAAS1iW,GAC1D,IACI23J,EADA7qK,EAAO/C,KAgBX,OAdA4tK,EAAM+qM,EACiB,kBAAZA,EACTA,EAAU,WACR51W,EAAKsvE,OAAOkhB,YAAYq6E,GAAK,EAAO,OAE7BzuK,GAAMwF,QAAQipK,KACvB+qM,EAAU,WACR51W,EAAKsvE,OAAOkhB,YAAYq6E,EAAI,GAAIA,EAAI,GAAIA,EAAI,MAGhDupM,GAAOC,GAAUj4W,GAAM+d,KAAKymG,KAAW,SAAUA,GAC/C,IAAIp/B,EAAWxhF,EAAK61W,eAAej1P,EAAS+0P,EAAMC,EAAS1iW,GAC3DlT,EAAK81J,UAAUt0E,EAASljF,IAAMkjF,MAEzB,GAET4zR,EAAUt4W,UAAU+pB,OAAS,SAAU+5F,GACrC,IAAIp/B,EAAWvkF,KAAK44W,eAAej1P,GACnC,QAAI3jH,KAAK64J,UAAUt0E,EAASljF,aACnBrB,KAAK64J,UAAUt0E,EAASljF,KACxB,IAIX82W,EAAUt4W,UAAUg5W,cAAgB,SAAUl1P,GAC5C,IAAItiH,EAAI8G,EACJo8E,EAAW,GAcf,IAAKp8E,KAbLgvW,GAAOC,GAAUzzP,EAAQjrG,cAAe,MAAM,SAAUza,GAClDA,KAASi6W,GACX3zR,EAAStmF,IAAS,EAEd,cAAc6Z,KAAK7Z,GACrBsmF,EAASg+C,QAAUtoG,SAASh8B,EAAO,KAEnCsmF,EAAS65G,SAAWngM,EAAM6rH,WAAW,GACrCvlC,EAASg+C,QAAU80O,GAAcp5W,IAAUA,EAAMyyF,cAAco5B,WAAW,OAIhFzoH,EAAK,CAACkjF,EAASg+C,SACH21O,GACN3zR,EAASp8E,GACX9G,EAAGiE,KAAK6C,GAERo8E,EAASp8E,IAAO,EAoBpB,OAjBAo8E,EAASljF,GAAKA,EAAG4H,KAAK,KAClBs7E,EAASF,SACXE,EAASL,KAAM,EACXi1L,GAAIl1L,IACNM,EAASJ,MAAO,EAEhBI,EAASH,OAAQ,GAGjBG,EAASn/B,OACP+zN,GAAIl1L,IACNM,EAASn/B,MAAO,GAEhBm/B,EAASJ,MAAO,EAChBI,EAASn/B,MAAO,IAGbm/B,GAET4zR,EAAUt4W,UAAU+4W,eAAiB,SAAUj1P,EAAS+0P,EAAMC,EAAS1iW,GACrE,IAAI4iJ,EAMJ,OALAA,EAAY15J,GAAM+C,IAAIk1W,GAAUzzP,EAAS,KAAM3jH,KAAK64W,eACpDhgN,EAAUA,EAAU/6J,OAAS,GAAKqB,GAAM4jI,OAAO81B,EAAUA,EAAU/6J,OAAS,GAAI,CAC9EgqP,KAAM6wH,EACN1iW,MAAOA,GAASjW,KAAKqyE,SAEhBlzE,GAAM4jI,OAAO81B,EAAU,GAAI,CAChC6/M,KAAM14W,KAAKqyE,OAAOp3C,UAAUy9U,GAC5BF,YAAa3/M,EAAU1zJ,MAAM,MAGjCgzW,EAAUt4W,UAAUw4W,YAAc,SAAUn4W,GAC1C,OAAOA,EAAEknQ,QAAUlnQ,EAAEiyD,SAAWjyD,EAAEmnQ,SAEpC8wG,EAAUt4W,UAAUy4W,cAAgB,SAAUp4W,GAC5C,MAAkB,YAAXA,EAAEsE,MAAsBtE,EAAEqiI,SAAW,KAAOriI,EAAEqiI,SAAW,KAElE41O,EAAUt4W,UAAU04W,cAAgB,SAAUr4W,EAAGqkF,GAC/C,QAAKA,IAGDA,EAASJ,OAASjkF,EAAEiyD,SAAWoyB,EAASn/B,OAASllD,EAAEmnQ,UAGnD9iL,EAASL,MAAQhkF,EAAEknQ,QAAU7iL,EAASH,QAAUlkF,EAAE+xD,cAGlD/xD,EAAEqiI,UAAYh+C,EAASg+C,SAAWriI,EAAEk+L,UAAYl+L,EAAEk+L,WAAa75G,EAAS65G,YAC1El+L,EAAEklB,kBACK,OAIX+yV,EAAUt4W,UAAU44W,sBAAwB,SAAUl0R,GACpD,OAAOA,EAASujK,KAAOvjK,EAASujK,KAAK/nP,KAAKwkF,EAAStuE,OAAS,MAEvDkiW,EAtIO,GAyIZ3wP,GAAW,WACb,IAAIpyB,EAAU,GACVlsB,EAAY,GACZmW,EAAS,GACTrJ,EAAQ,GACR88F,EAAe,GACftkB,EAAkB,GAClBkW,EAAW,GACX/vI,EAAM,SAAU89G,EAAYjuI,GAC9B,OAAO,SAAUF,EAAMorB,GACrB,OAAO+iH,EAAWnuI,EAAKoU,eAAiBrZ,GAASA,GAAS,GAAIqwB,GAAO,CAAElrB,KAAMA,MAG7EsnW,EAAU,SAAUxnW,EAAMunW,GAC5B,OAAO71R,EAAM1xE,EAAKoU,eAAiBmzV,GAErC,MAAO,CACL/9L,UAAWn5I,EAAIygE,EAAS,UACxB4tF,sBAAuBruJ,EAAIygE,EAAS,sBACpCuvE,gBAAiBhwI,EAAIygE,EAAS,gBAC9BkoK,cAAe3oO,EAAIygE,EAAS,cAC5BhB,eAAgBz/D,EAAIygE,EAAS,eAC7Bm5E,YAAa55I,EAAIu0C,EAAW,YAC5ByrB,kBAAmBhgE,EAAIu0C,EAAW,kBAClCmmG,kBAAmB16I,EAAIu0C,EAAW,kBAClCo2H,iBAAkB3qK,EAAI0qD,EAAQ,iBAC9B2+K,eAAgBrpO,EAAIm+I,EAAc,eAClC0qF,kBAAmB7oO,EAAI65H,EAAiB,kBACxC85G,eAAgB3zO,EAAI65H,EAAiB,eACrCsqN,WAAYnkV,EAAI+vI,EAAU,WAC1BonM,QAASA,EACTtsR,OAAQ,WACN,MAAO,CACL4V,QAASA,EACTlsB,UAAWA,EACX8M,MAAOA,EACPqJ,OAAQA,EACRyzF,aAAcA,EACdtkB,gBAAiBA,EACjBkW,SAAUA,MAMdnlF,GAAW,WACb,IAAIizK,EAAShrI,KACb,MAAO,CACL83E,iBAAkBkzD,EAAOlzD,iBACzBxxB,UAAW0kF,EAAO1kF,UAClBw6F,eAAgB9V,EAAO8V,eACvBtK,eAAgBxL,EAAOwL,eACvBR,kBAAmBhL,EAAOgL,kBAC1BsuG,QAASt5G,EAAOs5G,QAChBxuG,cAAe9K,EAAO8K,cACtB/uF,YAAaikF,EAAOjkF,YACpB55E,kBAAmB69J,EAAO79J,kBAC1BmkR,WAAYtmH,EAAOsmH,WACnB1kR,eAAgBo+J,EAAOp+J,eACvBuwE,gBAAiB6tF,EAAO7tF,gBACxBqe,sBAAuBwvE,EAAOxvE,sBAC9B3T,kBAAmBmjF,EAAOnjF,kBAC1B7vF,OAAQgzK,EAAOhzK,SAIfu5R,GAAS55W,GAAMgD,KAAM62W,GAAS75W,GAAM+d,KACpC+7V,GAAa,uGAAuGjqV,MAAM,KAC1HkqV,GAAgB,CAClBC,IAAK,GACLC,KAAM,GACNC,MAAO,IACPC,OAAQ,IAENC,GAAM,WACR,SAASA,EAAIz3Q,EAAKxvB,GAChBwvB,EAAMk3Q,GAAOl3Q,GACb9hG,KAAKsyE,SAAWA,GAAY,GAC5B,IAAIknS,EAAUx5W,KAAKsyE,SAASkmH,SACxBz1L,EAAO/C,KACX,GAAI,yBAAyB8X,KAAKgqF,IAAQ,QAAQhqF,KAAKgqF,GACrD/+F,EAAK8jD,OAASi7C,MADhB,CAIA,IAAI23Q,EAA2C,IAAtB33Q,EAAI3hG,QAAQ,MAIrC,GAHyB,IAArB2hG,EAAI3hG,QAAQ,MAAes5W,IAC7B33Q,GAAO03Q,GAAUA,EAAQ7gL,UAAqB,QAAU,cAAgB72F,IAErE,iBAAiBhqF,KAAKgqF,GAAM,CAC/B,IAAIg/L,EAAU9gS,KAAKsyE,SAASkmH,SAAWx4L,KAAKsyE,SAASkmH,SAASvqL,KAAO,IAAIsrW,EAAIn8W,EAAW+Y,SAASyiK,SAAS6f,MAAMlvH,UAChH,GAAIvpE,KAAKsyE,SAASkmH,UAA+C,IAAnCx4L,KAAKsyE,SAASkmH,SAASG,SACnD72F,EAAM,aAAe/+F,EAAK22W,UAAU54E,EAASh/L,OACxC,CACL,IAAIh5F,EAAQ,oBAAoBskF,KAAK0U,GACrCA,GAAO03Q,GAAWA,EAAQ7gL,UAAY,QAAU,cAAgB51L,EAAK22W,UAAU54E,EAASh4R,EAAM,IAAMA,EAAM,IAG9Gg5F,EAAMA,EAAIzpF,QAAQ,MAAO,YACzB,IAAIshW,EAAW,mMAAmMvsR,KAAK0U,GACvNi3Q,GAAOE,IAAY,SAAUj2W,EAAGtD,GAC9B,IAAIkqD,EAAO+vT,EAASj6W,GAChBkqD,IACFA,EAAOA,EAAKvxC,QAAQ,cAAe,OAErCtV,EAAKC,GAAK4mD,KAER4vT,IACGz2W,EAAK41L,WACR51L,EAAK41L,SAAW6gL,EAAQ7gL,UAErB51L,EAAK62W,WACR72W,EAAK62W,SAAWJ,EAAQI,UAErB72W,EAAK81L,MAAsB,aAAd91L,EAAK61L,OACrB71L,EAAK81L,KAAO2gL,EAAQ3gL,MAEjB91L,EAAK61L,MAAsB,aAAd71L,EAAK61L,OACrB71L,EAAK61L,KAAO4gL,EAAQ5gL,MAEtB71L,EAAK8jD,OAAS,IAEZ4yT,IACF12W,EAAK41L,SAAW,KA0LpB,OAvLA4gL,EAAIt3C,aAAe,SAAUh5M,GAC3B,IAAIzkH,EACAq1W,EAAgBj8D,mBAAmB30L,GAAKj6F,MAAM,KAC9CnR,EAAU,eAAeuvE,KAAKysR,EAAc,IAIhD,OAHIh8V,IACFrZ,EAAOqZ,EAAQ,IAEV,CACLrZ,KAAMA,EACNqgB,KAAMg1V,EAAc,KAGxBN,EAAIxsE,mBAAqB,SAAU7tQ,GACjC,IAAI4hQ,EAYJ,OAVEA,EADmC,IAAjC5hQ,EAAIy5J,SAASx4L,QAAQ,SAAkC,UAAjB++B,EAAIy5J,SAClCz5J,EAAIu5J,KAEJv5J,EAAIy5J,SAAW,KAAOz5J,EAAI05J,KAAO15J,EAAI46U,SAE7C,yBAAyBhiW,KAAKgpR,KAChCA,EAAUA,EAAQzoR,QAAQ,WAAY,IAAIA,QAAQ,gBAAiB,IAC9D,UAAUP,KAAKgpR,KAClBA,GAAW,MAGRA,GAETy4E,EAAI15W,UAAUk6W,QAAU,SAAU9rW,GAChC,IAAI+rW,EAAY,mBAAmB5sR,KAAKn/E,GACxCjO,KAAKiO,KAAO+rW,EAAU,GACtBh6W,KAAKupE,UAAYywS,EAAU,GAC3Bh6W,KAAKylH,KAAOu0P,EAAU,GACtBh6W,KAAK6mD,OAAS,GACd7mD,KAAKuiN,UAEPg3J,EAAI15W,UAAUo6W,WAAa,SAAUhxP,GACnC,IAAI14F,EACJ,GAAY,OAAR04F,EACF,OAAOA,EAET,IAAIixP,EAAc,IAAIX,EAAItwP,EAAK,CAAEuvE,SAAUx4L,OAC3C,GAAyB,aAArBk6W,EAAYthL,MAAuB54L,KAAK44L,OAASshL,EAAYthL,MAAQshL,EAAYthL,MAAQ54L,KAAK64L,OAASqhL,EAAYrhL,MAAQ74L,KAAK24L,WAAauhL,EAAYvhL,UAAqC,KAAzBuhL,EAAYvhL,SACnL,OAAOuhL,EAAY33J,SAErB,IAAI43J,EAAKn6W,KAAKuiN,SAAU63J,EAAKF,EAAY33J,SACzC,OAAI43J,IAAOC,GAAmC,MAA7BD,EAAG7+R,OAAO6+R,EAAGr8W,OAAS,IAAcq8W,EAAGt9V,OAAO,EAAGs9V,EAAGr8W,OAAS,KAAOs8W,EAC5ED,GAET5pV,EAASvwB,KAAKq6W,UAAUr6W,KAAKiO,KAAMisW,EAAYjsW,MAC3CisW,EAAYx8V,QACd6S,GAAU,IAAM2pV,EAAYx8V,OAE1Bw8V,EAAY31U,SACdhU,GAAU,IAAM2pV,EAAY31U,QAEvBhU,IAETgpV,EAAI15W,UAAU06C,WAAa,SAAU0uE,EAAKqxP,GACxC,IAAIC,EAAc,IAAIhB,EAAItwP,EAAK,CAAEuvE,SAAUx4L,OAC3C,OAAOu6W,EAAYh4J,OAAO+3J,GAAUt6W,KAAK+4L,aAAawhL,KAExDhB,EAAI15W,UAAUk5L,aAAe,SAAU9vE,GACrC,GAAIjpH,KAAK44L,MAAQ3vE,EAAI2vE,MAAQ54L,KAAK24L,UAAY1vE,EAAI0vE,SAAU,CAC1D,GAAI34L,KAAK64L,MAAQ5vE,EAAI4vE,KACnB,OAAO,EAET,IAAI2hL,EAActB,GAAcl5W,KAAK24L,UACrC,GAAI6hL,IAAgBx6W,KAAK64L,MAAQ2hL,KAAiBvxP,EAAI4vE,MAAQ2hL,GAC5D,OAAO,EAGX,OAAO,GAETjB,EAAI15W,UAAUw6W,UAAY,SAAUruW,EAAMiC,GACxC,IAAI82C,EAAiCrlD,EAAG8zG,EAA7BinQ,EAAa,EAAGruP,EAAM,GAC7BsuP,EAAiB1uW,EAAK+iB,UAAU,EAAG/iB,EAAKgwE,YAAY,MAAMhtD,MAAM,KAEpE,GADA+1B,EAAQ92C,EAAK+gB,MAAM,KACf0rV,EAAe58W,QAAUinD,EAAMjnD,OACjC,IAAK4B,EAAI,EAAG8zG,EAAIknQ,EAAe58W,OAAQ4B,EAAI8zG,EAAG9zG,IAC5C,GAAIA,GAAKqlD,EAAMjnD,QAAU48W,EAAeh7W,KAAOqlD,EAAMrlD,GAAI,CACvD+6W,EAAa/6W,EAAI,EACjB,MAIN,GAAIg7W,EAAe58W,OAASinD,EAAMjnD,OAChC,IAAK4B,EAAI,EAAG8zG,EAAIzuD,EAAMjnD,OAAQ4B,EAAI8zG,EAAG9zG,IACnC,GAAIA,GAAKg7W,EAAe58W,QAAU48W,EAAeh7W,KAAOqlD,EAAMrlD,GAAI,CAChE+6W,EAAa/6W,EAAI,EACjB,MAIN,GAAmB,IAAf+6W,EACF,OAAOxsW,EAET,IAAKvO,EAAI,EAAG8zG,EAAIknQ,EAAe58W,QAAU28W,EAAa,GAAI/6W,EAAI8zG,EAAG9zG,IAC/D0sH,GAAO,MAET,IAAK1sH,EAAI+6W,EAAa,EAAGjnQ,EAAIzuD,EAAMjnD,OAAQ4B,EAAI8zG,EAAG9zG,IAE9C0sH,GADE1sH,IAAM+6W,EAAa,EACd,IAAM11T,EAAMrlD,GAEZqlD,EAAMrlD,GAGjB,OAAO0sH,GAETmtP,EAAI15W,UAAU65W,UAAY,SAAU1tW,EAAMiC,GACxC,IAAIvO,EAAmB6nO,EAAIozI,EAApBC,EAAK,EAAG15W,EAAI,GACnBqmO,EAAK,MAAMzvN,KAAK7J,GAAQ,IAAM,GAC9B,IAAIysW,EAAiB1uW,EAAKgjB,MAAM,KAC5B6rV,EAAiB5sW,EAAK+gB,MAAM,KAOhC,IANA+pV,GAAO2B,GAAgB,SAAUh6W,GAC3BA,GACFQ,EAAEoE,KAAK5E,MAGXg6W,EAAiBx5W,EACZxB,EAAIm7W,EAAe/8W,OAAS,EAAGoD,EAAI,GAAIxB,GAAK,EAAGA,IACjB,IAA7Bm7W,EAAen7W,GAAG5B,QAAsC,MAAtB+8W,EAAen7W,KAG3B,OAAtBm7W,EAAen7W,GAIfk7W,EAAK,EACPA,IAGF15W,EAAEoE,KAAKu1W,EAAen7W,IAPpBk7W,KAqBJ,OAZAl7W,EAAIg7W,EAAe58W,OAAS88W,EAE1BD,EADEj7W,GAAK,EACGiH,EAAQzF,GAAG+H,KAAK,KAEhByxW,EAAev1W,MAAM,EAAGzF,GAAGuJ,KAAK,KAAO,IAAMtC,EAAQzF,GAAG+H,KAAK,KAE5C,IAAzB0xW,EAAQx6W,QAAQ,OAClBw6W,EAAU,IAAMA,GAEdpzI,GAAMozI,EAAQ3+R,YAAY,OAAS2+R,EAAQ78W,OAAS,IACtD68W,GAAWpzI,GAENozI,GAETpB,EAAI15W,UAAU0iN,OAAS,SAAUu4J,GAI/B,IAAIr7W,EA8BJ,YAjCoB,IAAhBq7W,IACFA,GAAc,GAGX96W,KAAK6mD,SAAUi0T,IAClBr7W,EAAI,GACCq7W,IACC96W,KAAK24L,SACPl5L,GAAKO,KAAK24L,SAAW,MAErBl5L,GAAK,KAEHO,KAAK45W,WACPn6W,GAAKO,KAAK45W,SAAW,KAEnB55W,KAAK44L,OACPn5L,GAAKO,KAAK44L,MAER54L,KAAK64L,OACPp5L,GAAK,IAAMO,KAAK64L,OAGhB74L,KAAKiO,OACPxO,GAAKO,KAAKiO,MAERjO,KAAK0d,QACPje,GAAK,IAAMO,KAAK0d,OAEd1d,KAAKukC,SACP9kC,GAAK,IAAMO,KAAKukC,QAElBvkC,KAAK6mD,OAASpnD,GAETO,KAAK6mD,QAEP0yT,EA1OC,GA6ONwB,GAAQr9E,GAAWvqN,IACnB6nS,GAAW77W,GAAM4jI,OAAQk4O,GAAS97W,GAAMgD,KACxC+4W,GAAY/7W,GAAMC,QAClB+7W,GAAOhiG,GAAIpgQ,GACXmyP,GAAS,WACX,SAASA,EAAO7pQ,EAAIixE,EAAU+vO,GAC5B,IAAIjoB,EAAQp6R,KACZA,KAAK+gL,QAAU,GACf/gL,KAAK4pK,WAAa,GAClB5pK,KAAK+nW,cAAgB,GACrB/nW,KAAKo7W,UAAY,GACjBp7W,KAAKq7W,YAAa,EAClBr7W,KAAKqiT,cAAgBA,EACrBriT,KAAKynT,gBAAkBpF,EAAci5D,gBACrCN,GAASh7W,KAAMu2W,IACfv2W,KAAKsyE,SAAW03O,GAAkBhqT,KAAMqB,EAAIrB,KAAKynT,gBAAiBpF,EAAcuH,gBAAiBt3O,GAC7FtyE,KAAKsyE,SAASr1D,SAChBolS,EAAcplS,OAASjd,KAAKsyE,SAASr1D,QAEvCjd,KAAKid,OAASolS,EAAcplS,OACxBjd,KAAKsyE,SAASipS,UAChBl5D,EAAcm5D,YAAYx7W,KAAKsyE,SAASipS,UAE1Cv7W,KAAKw5W,QAAUn3D,EAAco5D,QACzBz7W,KAAKsyE,SAASopS,kBAChBpxG,GAAaA,aAAa2Q,mBAAmBj7Q,KAAKsyE,SAASopS,iBAC3Dh+E,GAAWvqN,IAAI02F,iBAAiBoxG,mBAAmBj7Q,KAAKsyE,SAASopS,kBAEnEl6E,GAAejB,aAAevgS,KAAKsyE,SAASqpS,cAC5Cn6E,GAAe5uN,QAAUyvO,EAAczvO,QACvC5yE,KAAKqB,GAAKA,EACVrB,KAAKq5U,UAAS,GACdr5U,KAAK2yE,gBAAkB,IAAI4mS,GAAIv5W,KAAKsyE,SAASs1O,kBAAmB,CAAEpvH,SAAUx4L,KAAKw5W,UACjFx5W,KAAKy7W,QAAUz7W,KAAKw5W,QACpBx5W,KAAK+0E,SAAW/0E,KAAKsyE,SAASyC,OAC9B/0E,KAAK64J,UAAY,IAAIs/M,GAAUn4W,MAC/BA,KAAK47W,eAAiB,IAAI1I,GAAelzW,MACrCA,KAAKsyE,SAASupS,eAChB1iG,GAAIG,YAAct5Q,KAAKsyE,SAASupS,aAAaxjW,QAAQ,WAAY,KAEnErY,KAAKs/E,GAAK,CAAEC,SAAUA,MACtB,IAAIx8E,EAAO/C,KACP87W,EAAezhS,GAASt3E,GAC5B/C,KAAKskD,KAAOw3T,EACZ97W,KAAKylJ,QAAUq2N,EAAajmW,IAC5BwsS,EAAc3wN,KAAK,cAAe,CAAErf,OAAQryE,OAC5CA,KAAKgpW,aAAa,QAAShpW,MAC3BA,KAAKitM,EAAI+pF,GAASkC,kBAAiB,WACjC,MAAO,CACLr7M,QAASu8M,EAAMrlN,OAASqlN,EAAMtkQ,UAAYskQ,EAAM5/M,SAChDt7D,QAASk7Q,EAAMtkQ,cAmUrB,OA/TAo1O,EAAOrrQ,UAAU04F,OAAS,WACxB2qF,GAAO3qF,OAAOv4F,OAEhBkrQ,EAAOrrQ,UAAUkjB,MAAQ,SAAU+gS,GACjCC,GAAYhhS,MAAM/iB,KAAM8jT,IAE1B54C,EAAOrrQ,UAAUmqC,SAAW,WAC1B,OAAO+5Q,GAAY/5Q,SAAShqC,OAE9BkrQ,EAAOrrQ,UAAUmpW,aAAe,SAAU1kW,GAExC,IADA,IAAInG,EAAI,GACCP,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACtCO,EAAEP,EAAK,GAAKC,UAAUD,GAExB,IACoCqY,EADhClT,EAAO/C,KACP0zF,EAAW3wF,EAAKuvE,SAAShuE,GAC7B,GAAKovF,EAiBL,OAdI3wF,EAAKg5W,iBAAmB9lW,EAAQlT,EAAKg5W,eAAez3W,MACtDovF,EAAWz9E,EAAM6xO,KACjB7xO,EAAQA,EAAMA,OAEQ,kBAAby9E,IACTz9E,EAAQy9E,EAASr7E,QAAQ,SAAU,IACnCpC,EAAQA,EAAQilW,GAAUjlW,GAAS,EACnCy9E,EAAWwnR,GAAUxnR,GACrB3wF,EAAKg5W,eAAiBh5W,EAAKg5W,gBAAkB,GAC7Ch5W,EAAKg5W,eAAez3W,GAAQ,CAC1BwjP,KAAMp0J,EACNz9E,MAAOA,IAGJy9E,EAAS31F,MAAMkY,GAASlT,EAAMtC,MAAMZ,UAAUsF,MAAMpF,KAAKlC,UAAW,KAE7EqtQ,EAAOrrQ,UAAUo7B,UAAY,SAAUnkB,GACrC,OAAOipR,GAAK9kQ,UAAUnkB,IAExBo0P,EAAOrrQ,UAAUizE,SAAW,SAAUxuE,EAAMu2R,EAAYr2R,GACtD,OAAOsuE,GAAS9yE,KAAMsE,EAAMu2R,EAAYr2R,IAE1C0mQ,EAAOrrQ,UAAU4yF,YAAc,SAAU90F,GACvCqC,KAAK2pW,sBAAsBl3Q,YAAY90F,IAEzCutQ,EAAOrrQ,UAAU+yF,WAAa,SAAUtuF,EAAMovF,EAAUz9E,GACtDjW,KAAK47W,eAAehpR,WAAWtuF,EAAMovF,EAAUz9E,IAEjDi1P,EAAOrrQ,UAAU2uM,qBAAuB,SAAUlqM,EAAMovF,EAAUz9E,GAChEjW,KAAK47W,eAAeptK,qBAAqBlqM,EAAMovF,EAAUz9E,IAE3Di1P,EAAOrrQ,UAAUkrK,qBAAuB,SAAUzmK,EAAMovF,EAAUz9E,GAChEjW,KAAK47W,eAAe7wM,qBAAqBzmK,EAAMovF,EAAUz9E,IAE3Di1P,EAAOrrQ,UAAUgoQ,YAAc,SAAUlkJ,EAAS+0P,EAAMC,EAAS1iW,GAC/DjW,KAAK64J,UAAUlkI,IAAIgvF,EAAS+0P,EAAMC,EAAS1iW,IAE7Ci1P,EAAOrrQ,UAAU0zF,YAAc,SAAUq6E,EAAKtuF,EAAIrhF,EAAON,GACvD,OAAOqC,KAAK47W,eAAeroR,YAAYq6E,EAAKtuF,EAAIrhF,EAAON,IAEzDutQ,EAAOrrQ,UAAU6vK,kBAAoB,SAAU9B,GAC7C,OAAO5tK,KAAK47W,eAAelsM,kBAAkB9B,IAE/Cs9F,EAAOrrQ,UAAUyyJ,kBAAoB,SAAUsb,GAC7C,OAAO5tK,KAAK47W,eAAetpN,kBAAkBsb,IAE/Cs9F,EAAOrrQ,UAAU2mW,sBAAwB,SAAU54L,GACjD,OAAO5tK,KAAK47W,eAAepV,sBAAsB54L,IAEnDs9F,EAAOrrQ,UAAU2iF,KAAO,WACtB,IAAIz/E,EAAO/C,KACP+C,EAAKkoW,SACPloW,EAAKkoW,QAAS,EACVloW,EAAKgyE,OACPhyE,EAAK+yB,UAAUsiH,gBAAkB,QAEjC2iO,GAAMv4R,KAAKz/E,EAAK0nG,gBAChBswQ,GAAMjqS,KAAK/tE,EAAK1B,KAElB0B,EAAK4hE,OACL5hE,EAAK2uF,KAAK,UAGdw5K,EAAOrrQ,UAAUixE,KAAO,WACtB,IAAI/tE,EAAO/C,KAAMkW,EAAMnT,EAAKy3E,SACvBz3E,EAAKkoW,SACJkQ,IAAQjlW,IAAQnT,EAAKgyE,QACvB7+D,EAAIq9E,YAAY,aAElBxwF,EAAKgjT,OACDhjT,EAAKgyE,QACPhyE,EAAK+yB,UAAUsiH,gBAAkB,QAC7Br1I,IAASA,EAAKs/S,cAAcC,gBAC9Bv/S,EAAKs/S,cAAcC,cAAgB,QAGrCy4D,GAAMjqS,KAAK/tE,EAAK0nG,gBAChBswQ,GAAMlxK,SAAS9mM,EAAK1B,GAAI,UAAW0B,EAAKuiT,aAE1CviT,EAAKkoW,QAAS,EACdloW,EAAK2uF,KAAK,UAGdw5K,EAAOrrQ,UAAUq4D,SAAW,WAC1B,QAASl4D,KAAKirW,QAEhB//F,EAAOrrQ,UAAUm8W,iBAAmB,SAAUptW,EAAO+d,GACnD3sB,KAAK0xF,KAAK,gBAAiB,CACzB9iF,MAAOA,EACP+d,KAAMA,KAGVu+O,EAAOrrQ,UAAU8kE,KAAO,SAAUhnE,GAChC,IAC6BqY,EADzBjT,EAAO/C,KACP26E,EAAM53E,EAAKkwE,aACf,GAAIlwE,EAAKiiI,QACP,MAAO,GAET,GAAIrqD,EAAK,CACPh9E,EAAOA,GAAQ,GACfA,EAAKgnE,MAAO,EACZ,IAAI1mE,EAAQojM,GAASm2E,kBAAkB78L,GAAOA,EAAI18E,MAAQ08E,EAAIrkE,UAO9D,OANAN,EAAOjT,EAAKi+C,WAAW/iD,EAAON,GAC9BA,EAAKuhB,QAAUy7D,EACVh9E,EAAKshT,WACRl8S,EAAK2uF,KAAK,cAAe/zF,GAE3BA,EAAKuhB,QAAUy7D,EAAM,KACd3kE,IAGXk1P,EAAOrrQ,UAAUkmT,KAAO,SAAUpoT,GAChC,IAC6BqY,EAAMooG,EAD/Br7G,EAAO/C,KACP26E,EAAM53E,EAAKkwE,aACf,GAAK0H,GAAQ53E,EAAKoxJ,cAAepxJ,EAAKiiI,QAiCtC,OA9BArnI,EAAOA,GAAQ,GACfA,EAAKooT,MAAO,EACZpoT,EAAKuhB,QAAUy7D,EACf3kE,EAAOrY,EAAKusB,QAAUnnB,EAAKguE,WAAWpzE,GACjCA,EAAKshT,WACRl8S,EAAK2uF,KAAK,cAAe/zF,GAEP,QAAhBA,EAAKw0F,QACPpvF,EAAK2uF,KAAK,iBAAkB/zF,GAE9BqY,EAAOrY,EAAKusB,QACPm3K,GAASm2E,kBAAkB78L,GAa9BA,EAAI18E,MAAQ+X,IAZRrY,EAAKqoT,aAAgBjjT,EAAKgyE,SAC5B4F,EAAIrkE,UAAYN,IAEdooG,EAAO28P,GAAMp/R,UAAU54E,EAAK1B,GAAI,UAClC45W,GAAO78P,EAAK70F,UAAU,SAAUoxD,GAC9B,GAAIA,EAAIr2E,OAASvB,EAAK1B,GAEpB,OADAs5E,EAAI18E,MAAQ+X,GACL,MAOfrY,EAAKuhB,QAAUy7D,EAAM,MACE,IAAnBh9E,EAAKgwW,WACP5qW,EAAKs2U,UAAS,GAETrjU,GAETk1P,EAAOrrQ,UAAUmhD,WAAa,SAAU92B,EAASvsB,GAC/C,OAAOqjD,GAAWhhD,KAAMkqB,EAASvsB,IAEnCutQ,EAAOrrQ,UAAUkxE,WAAa,SAAUpzE,GACtC,OAAOozE,GAAW/wE,KAAMrC,IAE1ButQ,EAAOrrQ,UAAUw4L,cAAgB,SAAUnuK,EAASvsB,GAC9CA,IACFusB,EAAU8wV,GAAS,CAAE9wV,QAASA,GAAWvsB,IAE3CqC,KAAKuzF,YAAY,oBAAoB,EAAOrpE,IAE9CghP,EAAOrrQ,UAAU2tW,aAAe,SAAUyO,QACjBl6W,IAAnBk6W,EACFj7T,GAAWhhD,KAAMA,KAAKgqW,aAAc,CAAE73Q,OAAQ,QAE9CnxC,GAAWhhD,KAAMi8W,GAEnBj8W,KAAKsyF,YAAYosE,QACjB1+J,KAAKq5U,UAAS,GACdr5U,KAAKyyF,eAEPy4K,EAAOrrQ,UAAUg6U,QAAU,WACzB,OAAQ75U,KAAKq7W,YAEfnwG,EAAOrrQ,UAAUw5U,SAAW,SAAUzqU,GACpC,IAAIstW,GAAYl8W,KAAKq7W,WACrBr7W,KAAKq7W,YAAczsW,EACfA,GAASA,IAAUstW,GACrBl8W,KAAK0xF,KAAK,UAGdw5K,EAAOrrQ,UAAU4qG,aAAe,WAC9B,IAAI1nG,EAAO/C,KAIX,OAHK+C,EAAK0nB,YACR1nB,EAAK0nB,UAAYswV,GAAM7yW,IAAInF,EAAKo+J,iBAAmBp+J,EAAK1B,GAAK,YAExD0B,EAAK0nB,WAEdygP,EAAOrrQ,UAAUi1I,wBAA0B,WACzC,OAAO90I,KAAKylT,sBAEdv6C,EAAOrrQ,UAAUozE,WAAa,WAI5B,OAHKjzE,KAAKqsK,YACRrsK,KAAKqsK,UAAY0uM,GAAM7yW,IAAIlI,KAAKqB,KAE3BrB,KAAKqsK,WAEd6+F,EAAOrrQ,UAAUw2C,OAAS,WACxB,IACIskC,EADA53E,EAAO/C,KAQX,OANK+C,EAAKqkH,gBACRzsC,EAAM53E,EAAKogT,cACPxoO,IACF53E,EAAKqkH,cAAgBzsC,EAAIysC,gBAGtBrkH,EAAKqkH,eAEd8jJ,EAAOrrQ,UAAU26E,OAAS,WACxB,IACIj/C,EADAx4B,EAAO/C,KAQX,OANK+C,EAAK4jM,kBACRprK,EAAMx4B,EAAKszC,SACP9a,IACFx4B,EAAK4jM,gBAAkBprK,EAAIplB,WAGxBpT,EAAK4jM,iBAEdukE,EAAOrrQ,UAAUi2B,QAAU,WACzB,IAAI5f,EAAMlW,KAAKw6E,SACf,OAAOx6E,KAAK00I,cAAgBx+H,EAAMA,EAAI2f,KAAO,OAE/Cq1O,EAAOrrQ,UAAUg5M,WAAa,SAAU/2G,EAAKx9F,EAAMq2E,GACjD,IAAI53E,EAAO/C,KAAMsyE,EAAWvvE,EAAKuvE,SACjC,OAAIA,EAAS6pS,sBACJp5W,EAAKimW,aAAa,wBAAyBlnQ,EAAKnnB,GAAK,EAAMr2E,IAE/DguE,EAAS01O,cAAgBrtO,GAAwB,SAAjBA,EAAI/vD,UAAgD,IAAzBk3E,EAAI3hG,QAAQ,UAAiC,IAAf2hG,EAAIhkG,OACzFgkG,EAELxvB,EAAS21O,cACJllT,EAAK4vE,gBAAgBsnS,WAAWn4Q,IAEzCA,EAAM/+F,EAAK4vE,gBAAgBp4B,WAAWunD,EAAKxvB,EAAS41O,oBAC7CpmN,IAETopK,EAAOrrQ,UAAU8lP,UAAY,SAAUhrK,GACrC,IAGI0hN,EAHAt5R,EAAO/C,KACPsyE,EAAWvvE,EAAKuvE,SAChBt7D,EAAMjU,EAAKiU,IAEf2jE,EAAMA,GAAO53E,EAAK+yB,eACK/zB,IAAnBgB,EAAKmsK,YACPnsK,EAAKmsK,UAAY58F,EAAS61O,QAE5B8yD,GAAOjkW,EAAIq9E,OAAO,UAAW1Z,IAAM,SAAUA,GAC3C,IAAI18E,EACJ,OAAQ08E,EAAI/vD,UACZ,IAAK,QAQH,OAPAyxQ,EAAM/pN,EAAS8pS,oBAAsB,iBACrCn+W,EAAQ+Y,EAAIukL,UAAU5gH,EAAK,eACrB18E,GAAmB,MAAVA,IAAkB8E,EAAKmsK,UAGpCl4J,EAAIq2J,YAAY1yF,EAAK0hN,GAFrBrlR,EAAIo2J,SAASzyF,EAAK0hN,IAKtB,IAAK,IAUH,YATKrlR,EAAIukL,UAAU5gH,EAAK,UACtB18E,EAAQ+Y,EAAIukL,UAAU5gH,EAAK,SAAWA,EAAIt5E,GAC1Cg7R,EAAM/pN,EAAS+pS,qBAAuB,kBAClCp+W,GAAS8E,EAAKmsK,UAChBl4J,EAAIo2J,SAASzyF,EAAK0hN,GAElBrlR,EAAIq2J,YAAY1yF,EAAK0hN,SAM7Bt5R,EAAK2uF,KAAK,YAAa,CACrBxyE,QAASy7D,EACTu0F,UAAWnsK,EAAKmsK,aAGpBg8F,EAAOrrQ,UAAU+pB,OAAS,WACxBqN,GAASj3B,OAEXkrQ,EAAOrrQ,UAAUkhG,QAAU,SAAUolN,GACnCplN,GAAQ/gG,KAAMmmT,IAEhBj7C,EAAOrrQ,UAAU6lU,aAAe,SAAUhyO,GACxC,OAAO1zF,KAAK6sN,aAAa64G,aAAahyO,IAExCw3K,EAAOrrQ,UAAUy8W,eAAiB,WAChC,OAAOt8W,KAAK6sN,aAAa84G,iBAE3Bz6D,EAAOrrQ,UAAUiuK,UAAY,WAC3B,MAAM,IAAIjvK,MAAM,yKAElBqsQ,EAAOrrQ,UAAUi5W,WAAa,WAC5B,MAAM,IAAIj6W,MAAM,gGAElBqsQ,EAAOrrQ,UAAU0uK,YAAc,WAC7B,MAAM,IAAI1vK,MAAM,kGAElBqsQ,EAAOrrQ,UAAU29P,kBAAoB,WACnC,MAAM,IAAI3+P,MAAM,8GAEXqsQ,EAjXI,GAoXTqxG,GAAQ7+E,GAAWvqN,IACnBqpS,GAAYr9W,GAAMu7Q,QAAS+hG,GAASt9W,GAAMgD,KAAMu6W,GAAWv9W,GAAM4jI,OACjE45O,GAAkB,EAAGC,IAAoB,EAEzCC,GAAgB,GAChBvG,GAAU,GACVwG,GAAmB,SAAUz7W,GAC/B,MAAc,WAAPA,GAEL07W,GAAsB,SAAU78W,GAClC,IAAIsE,EAAOtE,EAAEsE,KACbi4W,GAAOO,GAAc90W,OAAO,SAAUmqE,GACpC,OAAQ7tE,GACR,IAAK,SACH6tE,EAAOqf,KAAK,eAAgBxxF,GAC5B,MACF,IAAK,SACHmyE,EAAOqf,KAAK,eAAgBxxF,GAC5B,WAIF+8W,GAAqB,SAAUruW,GAC7BA,IAAUguW,KACRhuW,EACFooR,GAASr5Q,QAAQsxB,GAAG,gBAAiB8tU,IAErC/lF,GAASr5Q,QAAQwxB,IAAI,gBAAiB4tU,IAExCH,GAAoBhuW,IAGpBsuW,GAAuB,SAAUC,GACnC,IAAIC,EAAa9G,UACVuG,GAAcM,EAAa97W,IAClC,IAAK,IAAI3B,EAAI,EAAGA,EAAIm9W,GAAc/+W,OAAQ4B,IACxC,GAAIm9W,GAAcn9W,KAAOy9W,EAAc,CACrCN,GAAcjtR,OAAOlwF,EAAG,GACxB,MAYJ,OATA42W,GAAU/zW,EAAO+zW,IAAS,SAAUjkS,GAClC,OAAO8qS,IAAiB9qS,KAEtB2qS,GAAcx6D,eAAiB26D,IACjCH,GAAcx6D,aAAe8zD,GAAQx4W,OAAS,EAAIw4W,GAAQ,GAAK,MAE7D0G,GAAc16D,gBAAkB66D,IAClCH,GAAc16D,cAAgB,MAEzB86D,EAAWt/W,SAAWw4W,GAAQx4W,QAEnCu/W,GAAuB,SAAUhrS,GAQnC,OAPIA,GAAUA,EAAO8hF,eAAiB9hF,EAAOo4B,gBAAkBp4B,EAAOv8C,WAAWrV,aAC/Ey8V,GAAqB7qS,GACrBA,EAAO4zO,wBACP5zO,EAAO0uB,SAAQ,GACf1uB,EAAO2yD,SAAU,EACjB3yD,EAAS,MAEJA,GAELirS,GAAkD,eAAnClgX,EAAW+Y,SAASonW,WACnCP,GAAgB39W,GAASA,GAAS,GAAI01W,IAAa,CACrD0G,QAAS,KACT7oS,QAAS,KACTg3O,gBAAiB,GACjB0xD,gBAAiB,KACjBr+V,OAAQ,KACRgwL,EAAG+pF,GACH32E,aAAc,IACdC,aAAc,MACdk9J,YAAa,aACblH,QAASuG,GACTY,KAAM19E,GACNyiB,aAAc,KACdF,cAAe,KACfhwO,SAAU,GACVjG,MAAO,WACL,IACIuG,EAAS0oS,EADTv4W,EAAO/C,KACmBid,EAAS,GACvCq+V,EAAkB/B,GAAIxsE,mBAAmB3vS,EAAW+Y,SAASyiK,UACzD,yBAAyB9gK,KAAKwjW,KAChCA,EAAkBA,EAAgBjjW,QAAQ,WAAY,IAAIA,QAAQ,gBAAiB,IAC9E,UAAUP,KAAKwjW,KAClBA,GAAmB,MAGvB,IAAIoC,EAAU//V,OAAO1e,SAAW0e,OAAOggW,eACvC,GAAID,EACF9qS,EAAU8qS,EAAQ1xW,MAAQ0xW,EAAQ9qS,QAClC31D,EAASygW,EAAQzgW,WACZ,CAEL,IADA,IAAIyhR,EAAUthS,EAAW+Y,SAASq8L,qBAAqB,UAC9C9yM,EAAI,EAAGA,EAAIg/R,EAAQ5gS,OAAQ4B,IAAK,CACvC,IAAIqpH,EAAM21K,EAAQh/R,GAAGqpH,KAAO,GAC5B,GAAY,KAARA,EAAJ,CAGA,IAAI60P,EAAY70P,EAAIh6F,UAAUg6F,EAAI/sC,YAAY,MAC9C,GAAI,8CAA8ClkE,KAAKixG,GAAM,EACxB,IAA/B60P,EAAUz9W,QAAQ,UACpB8c,EAAS,QAEX21D,EAAUm2C,EAAIh6F,UAAU,EAAGg6F,EAAI/sC,YAAY,MAC3C,QAGJ,IAAKpJ,GAAWx1E,EAAW+Y,SAAS0nW,cAAe,CAC7C90P,EAAM3rH,EAAW+Y,SAAS0nW,cAAc90P,KACf,IAAzBA,EAAI5oH,QAAQ,UACd8c,EAAS,QAEX21D,EAAUm2C,EAAIh6F,UAAU,EAAGg6F,EAAI/sC,YAAY,OAG/Cj5E,EAAK6vE,QAAU,IAAI2mS,GAAI+B,GAAiB/gU,WAAWq4B,GACnD7vE,EAAKu4W,gBAAkBA,EACvBv4W,EAAK04W,QAAU,IAAIlC,GAAIx2W,EAAK6vE,SAC5B7vE,EAAKka,OAASA,EACdylS,GAAgBr2O,MAAMtpE,IAExBm2R,iBAAkB,SAAU0wB,GAC1B,IAAI9oB,EAAS7jR,EACb6jR,EAAU8oB,EAAgB2xD,SACtBz6E,GACF9gS,KAAKw7W,YAAY16E,GAEnB7jR,EAAS2sS,EAAgB3sS,OACrB2sS,EAAgB3sS,SAClBjd,KAAKid,OAASA,GAEhBjd,KAAK4pT,gBAAkBA,EACvB,IAAIk0D,EAAiBl0D,EAAgBm0D,iBACrC,IAAK,IAAI7vM,KAAU4vM,EACjBt8E,GAAeF,cAAcriF,KAAK/wC,GAAU4vM,EAAe5vM,IAG/Dn+I,KAAM,SAAUuiD,GACd,IACIzlE,EAAQmxW,EADRj7W,EAAO/C,KAEXg+W,EAAuB7+W,GAAMw7I,QAAQ,6MAAmN,KACxP,IAAIsjO,EAAwB,SAAU3rS,EAAUqI,GAC9C,OAAOrI,EAASyC,QAAU4F,EAAI2gH,QAAQ5iL,gBAAiBslW,GAErDE,EAAW,SAAUvjS,GACvB,IAAIt5E,EAAKs5E,EAAIt5E,GAUb,OATKA,IACHA,EAAKs5E,EAAIr2E,KAEPjD,EADEA,IAAOk7W,GAAMr0W,IAAI7G,GACds5E,EAAIr2E,KAEJi4W,GAAM/vJ,WAEb7xI,EAAI1vD,aAAa,KAAM5pB,IAElBA,GAEL2nW,EAAe,SAAU1kW,GAC3B,IAAIovF,EAAWphB,EAAShuE,GACxB,GAAKovF,EAGL,OAAOA,EAAS31F,MAAMgF,EAAMtC,MAAMZ,UAAUsF,MAAMpF,KAAKlC,UAAW,KAEhEogN,EAAW,SAAUtjI,EAAKo2D,GAC5B,OAAOA,EAAU1sI,cAAgBymF,OAASimD,EAAUj5H,KAAK6iE,EAAIo2D,WAAawrO,GAAMt+J,SAAStjI,EAAKo2D,IAE5FgsH,EAAc,SAAUzqL,GAC1B,IAAIkhC,EAAGo6B,EAAU,GACjB,GAAIurI,GAAI79P,QAAQ3B,QAAUw/P,GAAI79P,QAAQ/B,QAAQtB,MAAQ,GAEpD,OADAm1S,GAAcD,UAAU,kKACjB,GACF,GAAImwD,GAET,OADAlwD,GAAcD,UAAU,8GACjB,GAET,GAAI76O,EAASkpE,MAIX,OAHAihO,GAAOnqS,EAASkpE,OAAO,SAAUh3I,GAC/BopI,EAAUA,EAAQnvI,OAAO89W,GAAMloR,OAAO7vF,EAAK2a,cAEtCyuH,EACF,GAAIt7D,EAASnzD,SAClB,OAAOo9V,GAAMloR,OAAO/hB,EAASnzD,UACxB,GAAImzD,EAASlpE,OAClB,MAAO,CAACkpE,EAASlpE,QAEnB,OAAQkpE,EAAShuB,MACjB,IAAK,QACHkvD,EAAIlhC,EAAS/oD,UAAY,GACrBiqF,EAAE11G,OAAS,GACb2+W,GAAOD,GAAUhpQ,IAAI,SAAUnyG,GAC7B,IAAIs5E,GACAA,EAAM4hS,GAAMr0W,IAAI7G,IAClBusI,EAAQtoI,KAAKq1E,GAEb8hS,GAAOr/W,EAAW+Y,SAASs4I,OAAO,SAAUlxJ,GAC1Ck/W,GAAOl/W,EAAEgsB,UAAU,SAAUrpB,GACvBA,EAAEoE,OAASjD,IACbA,EAAK,cAAgBs7W,KACrBJ,GAAMzsK,UAAU5vM,EAAG,KAAMmB,GACzBusI,EAAQtoI,KAAKpF,aAOzB,MACF,IAAK,YACL,IAAK,qBACHu8W,GAAOF,GAAMloR,OAAO,aAAa,SAAU1Z,GACrCrI,EAAS6rS,mBAAqBlgK,EAAStjI,EAAKrI,EAAS6rS,oBAGpD7rS,EAAS8rS,kBAAmBngK,EAAStjI,EAAKrI,EAAS8rS,kBACtDxwO,EAAQtoI,KAAKq1E,MAGjB,MAEF,OAAOizD,GAELywO,EAAiB,SAAU/H,GAC7BzpW,EAASypW,GAEPgI,EAAc,WAChB,IAEI1wO,EAFA2wO,EAAY,EACZjI,EAAU,GAEVkI,EAAe,SAAUn9W,EAAIixE,EAAU+5F,GACzC,IAAIh6F,EAAS,IAAI64L,GAAO7pQ,EAAIixE,EAAUvvE,GACtCuzW,EAAQhxW,KAAK+sE,GACbA,EAAOpjC,GAAG,QAAQ,aACVsvU,IAAc3wO,EAAQ9vI,QAC1BugX,EAAe/H,MAGnBjkS,EAAOg6F,UAAYh6F,EAAOg6F,WAAaA,EACvCh6F,EAAOkmB,UAETgkR,GAAMr/U,OAAOvf,OAAQ,QAAS2gW,GAC9BtV,EAAa,cACbp7N,EAAUopJ,GAAS1qQ,OAAOywO,EAAYzqL,IAClCA,EAASkpE,MACXihO,GAAOnqS,EAASkpE,OAAO,SAAUh3I,GAC/BrF,GAAMgD,KAAKyrI,GAAS,SAAUjzD,GAC5B,OAAI4hS,GAAM/6W,GAAGm5E,EAAKn2E,EAAK2a,YACrBq/V,EAAaN,EAASvjS,GAAM+hS,GAAS,GAAIpqS,EAAU9tE,GAAOm2E,IACnD,UAOfx7E,GAAMgD,KAAKyrI,GAAS,SAAUjzD,GAC5B0iS,GAAqBt6W,EAAKmF,IAAIyyE,EAAIt5E,QAEpCusI,EAAUzuI,GAAMq+L,KAAK5vD,GAAS,SAAUjzD,GACtC,OAAQ53E,EAAKmF,IAAIyyE,EAAIt5E,OAEA,IAAnBusI,EAAQ9vI,OACVugX,EAAe,IAEf5B,GAAO7uO,GAAS,SAAUjzD,GACpBsjS,EAAsB3rS,EAAUqI,GAClCyyO,GAAcD,UAAU,sEAAuExyO,GAE/F6jS,EAAaN,EAASvjS,GAAMrI,EAAUqI,QAO9C,OAFA53E,EAAKuvE,SAAWA,EAChBiqS,GAAMn6W,KAAKub,OAAQ,QAAS2gW,GACrB,IAAIjmG,IAAW,SAAUj5Q,GAC1ByN,EACFzN,EAAQyN,GAERwxW,EAAiB,SAAU/H,GACzBl3W,EAAQk3W,QAKhBpuW,IAAK,SAAU7G,GACb,OAAyB,IAArBxD,UAAUC,OACLw4W,GAAQnxW,MAAM,GACZV,EAASpD,GACXmF,EAAK8vW,IAAS,SAAUjkS,GAC7B,OAAOA,EAAOhxE,KAAOA,KACpBK,MAAM,MACAoD,EAASzD,IACXi1W,GAAQj1W,GAAMi1W,GAAQj1W,GAEtB,MAGXszB,IAAK,SAAU09C,GACb,IACIosS,EADA17W,EAAO/C,KAGX,OADAy+W,EAAiB5B,GAAcxqS,EAAOhxE,IAClCo9W,IAAmBpsS,IAGK,OAAxBtvE,EAAKmF,IAAImqE,EAAOhxE,MACdy7W,GAAiBzqS,EAAOhxE,MAC1Bw7W,GAAcxqS,EAAOhxE,IAAMgxE,GAE7BwqS,GAAcv3W,KAAK+sE,GACnBikS,GAAQhxW,KAAK+sE,IAEf4qS,IAAmB,GACnBl6W,EAAKy/S,aAAenwO,EACpBtvE,EAAK2uF,KAAK,YAAa,CAAErf,OAAQA,IAC5BiyQ,KACHA,GAAuB,SAAUpkV,GAC/B,IAAI8gB,EAAQje,EAAK2uF,KAAK,gBACtB,GAAI1wE,EAAM+oQ,YAGR,OAFA7pR,EAAEklB,iBACFllB,EAAE6pR,YAAc/oQ,EAAM+oQ,YACf/oQ,EAAM+oQ,aAGjBpsQ,OAAOsf,iBAAiB,eAAgBqnT,MArBjCjyQ,GAyBXmsS,aAAc,SAAUn9W,EAAIixE,GAC1B,OAAOtyE,KAAK20B,IAAI,IAAIu2O,GAAO7pQ,EAAIixE,EAAUtyE,QAE3C4pB,OAAQ,SAAUzK,GAChB,IACIzf,EAAG2yE,EADHtvE,EAAO/C,KAEX,GAAKmf,EAAL,CAMA,IAAI1a,EAAS0a,GAUb,OADAkzD,EAASlzD,EACLu2P,EAAO3yQ,EAAKmF,IAAImqE,EAAOhxE,KAClB,MAEL67W,GAAqB7qS,IACvBtvE,EAAK2uF,KAAK,eAAgB,CAAErf,OAAQA,IAEf,IAAnBikS,GAAQx4W,QACV6f,OAAO0f,oBAAoB,eAAgBinT,IAE7CjyQ,EAAOzoD,SACPqzV,GAAmB3G,GAAQx4W,OAAS,GAC7Bu0E,GApBLoqS,GAAOF,GAAMloR,OAAOl1E,IAAW,SAAUw7D,GACvCtI,EAAStvE,EAAKmF,IAAIyyE,EAAIt5E,IAClBgxE,GACFtvE,EAAK6mB,OAAOyoD,WAThB,IAAK3yE,EAAI42W,GAAQx4W,OAAS,EAAG4B,GAAK,EAAGA,IACnCqD,EAAK6mB,OAAO0sV,GAAQ52W,KA2B1B6zF,YAAa,SAAUq6E,EAAKtuF,EAAIrhF,GAC9B,IAAI8E,EAAO/C,KAAMqyE,EAAStvE,EAAKmF,IAAIjK,GACnC,OAAQ2vK,GACR,IAAK,eAIH,OAHK7qK,EAAKmF,IAAIjK,IACZ,IAAIitQ,GAAOjtQ,EAAO8E,EAAKuvE,SAAUvvE,GAAMw1F,UAElC,EACT,IAAK,kBAIH,OAHIlmB,GACFA,EAAOzoD,UAEF,EACT,IAAK,kBACH,OAAKyoD,GAIDA,EAAOna,WACTma,EAAOmQ,OAEPnQ,EAAOvB,QAEF,IARL/tE,EAAKwwF,YAAY,eAAgB,EAAGt1F,IAC7B,GASX,QAAI8E,EAAKy/S,cACAz/S,EAAKy/S,aAAajvN,YAAYq6E,EAAKtuF,EAAIrhF,IAIlDwvW,YAAa,WACXgP,GAAOnG,IAAS,SAAUjkS,GACxBA,EAAO0zO,WAGX24D,QAAS,SAAU56Q,EAAM/+C,GACvBg7O,GAAKprQ,IAAImvE,EAAM/+C,IAEjB9pB,UAAW,SAAUnkB,GACnB,OAAOipR,GAAK9kQ,UAAUnkB,IAExBu0E,UAAW,SAAUhZ,GACnB,IAAImwO,EAAexiT,KAAKwiT,aACpBxiT,KAAKwiT,eAAiBnwO,IACpBmwO,GACFA,EAAa9wN,KAAK,aAAc,CAAE26L,cAAeh6M,IAEnDA,EAAOqf,KAAK,WAAY,CAAE26L,cAAem2B,KAE3CxiT,KAAKwiT,aAAenwO,GAEtBmpS,YAAa,SAAU16E,GACrB9gS,KAAK4yE,QAAU,IAAI2mS,GAAIv5W,KAAKs7W,iBAAiB/gU,WAAWumP,EAAQzoR,QAAQ,OAAQ,KAChFrY,KAAKy7W,QAAU,IAAIlC,GAAIv5W,KAAK4yE,YAKhC,SAAS+rS,GAAW3nW,GAClB,IAAIkwM,EAAO,SAAUlxK,EAAK09C,GACxB,OAAO0lN,GAAUlyF,KAAKlwM,EAAKg/B,EAAK09C,IAE9B1kE,EAAQ24S,GACR/sP,EAAY,SAAU5kC,GACxB,OAAOojR,GAAex+O,UAAU5jE,EAAKg/B,GAAKz0C,KAAKvD,GAAS,IAAQ,SAAU4gX,GAGxE,OAFA5oU,EAAIQ,SAASooU,EAAc3oU,eAAgB2oU,EAAcpnU,aACzDxB,EAAIa,OAAO+nU,EAAcnnU,aAAcmnU,EAAclnU,YAC9C,MAGX,MAAO,CACLwvK,KAAMA,EACNl4L,MAAOA,EACP4rD,UAAWA,GAjBfoiS,GAAc3wS,QAoBb,SAAUsyS,GACTA,EAAWE,cAAgB1mD,GAAarhB,KACxC6nE,EAAW7tJ,uBAAyB4iG,GAAoBz8S,UACxD0nW,EAAW54E,gBAAkBA,GAC7B44E,EAAWpkS,QAAUA,GAJvB,CAKEokS,KAAeA,GAAa,KAC9B,IAyLIG,GAAaC,GAzLbC,GAAeL,GAEfM,GAAU,SAAUC,EAAWC,EAAU1mS,QAC3B,IAAZA,IACFA,EAAU,KAEZ,IAAIhlE,GAAO,EACP8lE,EAAQ,KACRslB,EAAW,SAAUyuC,GACvB,OAAO,WAEL,IADA,IAAI3vI,EAAO,GACFC,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACtCD,EAAKC,GAAMC,UAAUD,GAElB6V,IACHA,GAAO,EACO,OAAV8lE,IACFn8E,EAAWq8E,aAAaF,GACxBA,EAAQ,MAEV+zD,EAAUvvI,MAAM,KAAMJ,MAIxByB,EAAUy/F,EAASqgR,GACnBv4Q,EAAS9H,EAASsgR,GAClBriW,EAAQ,WAEV,IADA,IAAInf,EAAO,GACFC,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACtCD,EAAKC,GAAMC,UAAUD,GAElB6V,GAAkB,OAAV8lE,IACXA,EAAQn8E,EAAW27E,YAAW,WAC5B,OAAO4tB,EAAO5oG,MAAM,KAAMJ,KACzB86E,KAGP,MAAO,CACL37D,MAAOA,EACP1d,QAASA,EACTunG,OAAQA,IAGRqkB,GAAW,WACb,IAAIo0P,EAAQ,GACRC,EAAY,GACZ16S,EAAO,SAAUtjE,EAAIygG,GACvB,IAAIw9Q,EAAa,kBAAoBx9Q,EAAM,mBACvCy9Q,EAAY,kBAAoBz9Q,EAAM,0CAA4CzgG,EAAK,4BAC3F,QAAkBU,IAAdq9W,EAAM/9W,GACR,OAAO+9W,EAAM/9W,GAEb,IAAIm+W,EAAO,IAAInnG,IAAW,SAAUj5Q,EAASunG,GAC3C,IAAI84Q,EAASR,GAAQ7/W,EAASunG,GAC9B04Q,EAAUh+W,GAAMo+W,EAAOrgX,QACvBkrQ,GAAaA,aAAa8zB,WAAWt8L,GAAK,WACxC,OAAO29Q,EAAO3iW,MAAMyiW,MACnB,WACD,OAAOE,EAAO94Q,OAAO24Q,SAIzB,OADAF,EAAM/9W,GAAMm+W,EACLA,GAGP7qV,EAAM,SAAUtzB,EAAIwjB,QACA9iB,IAAlBs9W,EAAUh+W,KACZg+W,EAAUh+W,GAAIwjB,UACPw6V,EAAUh+W,IAEnB+9W,EAAM/9W,GAAMg3Q,GAAWj5Q,QAAQylB,IAEjC,MAAO,CACL8/C,KAAMA,EACNhwC,IAAKA,IAGL+qV,GAAW10P,KAEXv+E,GAAM3f,KAAK2f,IAAKtS,GAAMrN,KAAKqN,IAAKwlV,GAAU7yV,KAAK6gE,MAC/CiyR,GAAmB,SAAUxgV,EAAMsmT,EAAY95S,GACjD,IAAIztC,EAAGgZ,EAAGooB,EAAGzF,EAAG+lV,EAASC,EAgCzB,OA/BA3hX,EAAIunV,EAAWvnV,EACfgZ,EAAIuuU,EAAWvuU,EACfooB,EAAIH,EAAKG,EACTzF,EAAIsF,EAAKtF,EACT+lV,EAAUn6B,EAAWnmT,EACrBugV,EAAUp6B,EAAW5rT,EACrB8R,GAAOA,GAAO,IAAI5c,MAAM,IACT,MAAX4c,EAAI,KACNz0B,GAAK2oW,GAEQ,MAAXl0U,EAAI,KACNztC,GAAK0hX,GAEQ,MAAXj0U,EAAI,KACNz0B,GAAKwoW,GAAQG,EAAU,IAEV,MAAXl0U,EAAI,KACNztC,GAAKwhX,GAAQE,EAAU,IAEV,MAAXj0U,EAAI,KACNz0B,GAAK2iB,GAEQ,MAAX8R,EAAI,KACNztC,GAAKohC,GAEQ,MAAXqM,EAAI,KACNz0B,GAAKwoW,GAAQ7lV,EAAI,IAEJ,MAAX8R,EAAI,KACNztC,GAAKwhX,GAAQpgV,EAAI,IAEZuhG,GAAS3iI,EAAGgZ,EAAGooB,EAAGzF,IAEvBimV,GAA2B,SAAU3gV,EAAMsmT,EAAYs6B,EAAez+G,GACxE,IAAIz1N,EAAKpsC,EACT,IAAKA,EAAI,EAAGA,EAAI6hQ,EAAKzjQ,OAAQ4B,IAE3B,GADAosC,EAAM8zU,GAAiBxgV,EAAMsmT,EAAYnkF,EAAK7hQ,IAC1CosC,EAAI3tC,GAAK6hX,EAAc7hX,GAAK2tC,EAAI3tC,EAAI2tC,EAAIvM,GAAKygV,EAAczgV,EAAIygV,EAAc7hX,GAAK2tC,EAAI30B,GAAK6oW,EAAc7oW,GAAK20B,EAAI30B,EAAI20B,EAAIhS,GAAKkmV,EAAclmV,EAAIkmV,EAAc7oW,EACjK,OAAOoqP,EAAK7hQ,GAGhB,OAAO,MAELykI,GAAU,SAAU/kG,EAAMG,EAAGzF,GAC/B,OAAOgnG,GAAS1hG,EAAKjhC,EAAIohC,EAAGH,EAAKjoB,EAAI2iB,EAAGsF,EAAKG,EAAQ,EAAJA,EAAOH,EAAKtF,EAAQ,EAAJA,IAE/DmmV,GAAY,SAAU7gV,EAAMkkG,GAC9B,IAAI48O,EAAIC,EAAIrrD,EAAID,EAKhB,OAJAqrD,EAAK/lV,GAAIiF,EAAKjhC,EAAGmlI,EAASnlI,GAC1BgiX,EAAKhmV,GAAIiF,EAAKjoB,EAAGmsH,EAASnsH,GAC1B29S,EAAKroR,GAAIrN,EAAKjhC,EAAIihC,EAAKG,EAAG+jG,EAASnlI,EAAImlI,EAAS/jG,GAChDs1R,EAAKpoR,GAAIrN,EAAKjoB,EAAIioB,EAAKtF,EAAGwpG,EAASnsH,EAAImsH,EAASxpG,GAC5Cg7R,EAAKorD,EAAK,GAAKrrD,EAAKsrD,EAAK,EACpB,KAEFr/O,GAASo/O,EAAIC,EAAIrrD,EAAKorD,EAAIrrD,EAAKsrD,IAEpCt0P,GAAU,SAAUzsF,EAAM6hG,EAAWm/O,GACvC,IAAIC,EAAaC,EAAaC,EAAYC,EAAYN,EAAIC,EAAIrrD,EAAID,EAAI4rD,EAAKC,EAqB3E,OApBAR,EAAK9gV,EAAKjhC,EACVgiX,EAAK/gV,EAAKjoB,EACV29S,EAAK11R,EAAKjhC,EAAIihC,EAAKG,EACnBs1R,EAAKz1R,EAAKjoB,EAAIioB,EAAKtF,EACnB2mV,EAAMx/O,EAAU9iI,EAAI8iI,EAAU1hG,EAC9BmhV,EAAMz/O,EAAU9pH,EAAI8pH,EAAUnnG,EAC9BumV,EAAclmV,GAAI,EAAG8mG,EAAU9iI,EAAI+hX,GACnCI,EAAcnmV,GAAI,EAAG8mG,EAAU9pH,EAAIgpW,GACnCI,EAAapmV,GAAI,EAAG26R,EAAK2rD,GACzBD,EAAarmV,GAAI,EAAG06R,EAAK6rD,GACzBR,GAAMG,EACNF,GAAMG,EACFF,IACFtrD,GAAMurD,EACNxrD,GAAMyrD,EACNJ,GAAMK,EACNJ,GAAMK,GAER1rD,GAAMyrD,EACN1rD,GAAM2rD,EACC1/O,GAASo/O,EAAIC,EAAIrrD,EAAKorD,EAAIrrD,EAAKsrD,IAEpCr/O,GAAW,SAAU3iI,EAAGgZ,EAAGooB,EAAGzF,GAChC,MAAO,CACL37B,EAAGA,EACHgZ,EAAGA,EACHooB,EAAGA,EACHzF,EAAGA,IAGH6mV,GAAiB,SAAUz5E,GAC7B,OAAOpmK,GAASomK,EAAWnsQ,KAAMmsQ,EAAWlsQ,IAAKksQ,EAAWrpQ,MAAOqpQ,EAAW1sQ,SAE5Ey+N,GAAO,CACT90H,QAASA,GACTy7O,iBAAkBA,GAClBG,yBAA0BA,GAC1BE,UAAWA,GACXvzU,MAAOm/E,GACP5kF,OAAQ65F,GACR6/O,eAAgBA,IAGdC,GAASzhX,GAAMgD,KAAM0+W,GAAW1hX,GAAM4jI,OAEtC+9O,GAAQ,aAEZA,GAAM/9O,OAAS+7O,GAAc,SAAUxvW,GACrC,IAEIzP,EAAWyE,EAAMy8W,EAFjBh+W,EAAO/C,KACPghX,EAASj+W,EAAKlD,UAEdihX,EAAQ,WACV,IAAIphX,EAAGuhX,EAAQC,EACXn+W,EAAO/C,KACX,IAAK++W,KACCh8W,EAAKgtB,MACPhtB,EAAKgtB,KAAKhyB,MAAMgF,EAAMlF,WAExBojX,EAASl+W,EAAKo+W,OACVF,GAAQ,CACVvhX,EAAIuhX,EAAOnjX,OACX,MAAO4B,IACLwhX,EAAQD,EAAOvhX,GACXwhX,EAAMnxV,MACRmxV,EAAMnxV,KAAKhyB,MAAMgF,EAAMlF,aAM7BujX,EAAQ,WACV,OAAOphX,MAELqhX,EAAe,SAAU/8W,EAAMjG,GACjC,OAAO,WACL,IAEI+L,EAFArH,EAAO/C,KACPswR,EAAMvtR,EAAKi+W,OAKf,OAHAj+W,EAAKi+W,OAASA,EAAO18W,GACrB8F,EAAM/L,EAAGN,MAAMgF,EAAMlF,WACrBkF,EAAKi+W,OAAS1wF,EACPlmR,IA4CX,IAAK9F,KAzCLy6W,IAAe,EACfl/W,EAAY,IAAIkD,EAChBg8W,IAAe,EACXzvW,EAAK6xW,SACPP,GAAOtxW,EAAK6xW,QAAQ,SAAUD,GAC5B,IAAK,IAAIhzM,KAAUgzM,EACF,SAAXhzM,IACF5+J,EAAK4+J,GAAUgzM,EAAMhzM,OAIvB8yM,EAAOG,SACT7xW,EAAK6xW,OAASH,EAAOG,OAAO1iX,OAAO6Q,EAAK6xW,UAGxC7xW,EAAKgyW,SACPV,GAAOtxW,EAAKgyW,QAAQtyV,MAAM,MAAM,SAAU1qB,GACxCgL,EAAKhL,GAAQ88W,KAGb9xW,EAAKiyW,YACPX,GAAOtxW,EAAKiyW,WAAWvyV,MAAM,MAAM,SAAU1qB,GAC3C,IAAI2+B,EAAY,IAAM3+B,EACtBgL,EAAKhL,GAAQ,SAAUrG,GACrB,IAAI8E,EAAO/C,KACX,YAAc+B,IAAV9D,GACF8E,EAAKkgC,GAAahlC,EACX8E,GAEFA,EAAKkgC,OAId3zB,EAAKkyW,SACPZ,GAAOtxW,EAAKkyW,SAAS,SAAU15H,EAAMxjP,GACnCw8W,EAAMx8W,GAAQwjP,KAGdx4O,EAAKmyW,UAAYT,EAAOS,WAC1BnyW,EAAKmyW,SAAWZ,GAAS,GAAIG,EAAOS,SAAUnyW,EAAKmyW,WAExCnyW,EACXyxW,EAASzxW,EAAKhL,GACQ,oBAAXy8W,GAAyBC,EAAO18W,GACzCzE,EAAUyE,GAAQ+8W,EAAa/8W,EAAMy8W,GAErClhX,EAAUyE,GAAQy8W,EAMtB,OAHAD,EAAMjhX,UAAYA,EAClBihX,EAAMz8W,YAAcy8W,EACpBA,EAAM/9O,OAAS+7O,GACRgC,GAGT,IAyTIzmO,GAzTAqnO,GAAQ50V,KAAK2f,IAAKk1U,GAAQ70V,KAAKqN,IAAKynV,GAAU90V,KAAK6gE,MACnDk0R,GAAQ,SAAU5jX,GACpB,IAAI8E,EAAO,GACPvC,EAAI,EAAG0qD,EAAI,EAAGhoD,EAAI,EAClB4+W,EAAU,SAAUthX,EAAG0qD,EAAGhoD,GAC5B,IAAI42B,EAAGr6B,EAAGuD,EAAG0kB,EAAG2pF,EAAQC,EASxB,OARAx3E,EAAI,EACJr6B,EAAI,EACJuD,EAAI,EACJxC,GAAQ,IACR0qD,GAAQ,IACRhoD,GAAQ,IACRmuG,EAASqwQ,GAAMlhX,EAAGkhX,GAAMx2T,EAAGhoD,IAC3BouG,EAASqwQ,GAAMnhX,EAAGmhX,GAAMz2T,EAAGhoD,IACvBmuG,IAAWC,GACbtuG,EAAIquG,EACG,CACLv3E,EAAG,EACHr6B,EAAG,EACHuD,EAAO,IAAJA,KAGP0kB,EAAIlnB,IAAM6wG,EAASnmD,EAAIhoD,EAAIA,IAAMmuG,EAAS7wG,EAAI0qD,EAAIhoD,EAAI1C,EACtDs5B,EAAIt5B,IAAM6wG,EAAS,EAAInuG,IAAMmuG,EAAS,EAAI,EAC1Cv3E,EAAI,IAAMA,EAAIpS,GAAK4pF,EAASD,IAC5B5xG,GAAK6xG,EAASD,GAAUC,EACxBtuG,EAAIsuG,EACG,CACLx3E,EAAG8nV,GAAQ9nV,GACXr6B,EAAGmiX,GAAY,IAAJniX,GACXuD,EAAG4+W,GAAY,IAAJ5+W,MAGX++W,EAAW,SAAU7zR,EAAKC,EAAYC,GACxC,IAAIC,EAAMC,EAAQnwF,EAAG2K,EAMrB,GALAolF,GAAOj0D,SAASi0D,EAAK,KAAO,GAAK,IACjCC,EAAal0D,SAASk0D,EAAY,IAAM,IACxCC,EAAan0D,SAASm0D,EAAY,IAAM,IACxCD,EAAawzR,GAAM,EAAGD,GAAMvzR,EAAY,IACxCC,EAAauzR,GAAM,EAAGD,GAAMtzR,EAAY,IACrB,IAAfD,EAAJ,CAQA,OAJAE,EAAOH,EAAM,GACbI,EAASF,EAAaD,EACtBhwF,EAAImwF,GAAU,EAAIxhE,KAAK8gB,IAAIygD,EAAO,EAAI,IACtCvlF,EAAQslF,EAAaE,EACbxhE,KAAKC,MAAMshE,IACnB,KAAK,EACH7tF,EAAI8tF,EACJpjC,EAAI/sD,EACJ+E,EAAI,EACJ,MACF,KAAK,EACH1C,EAAIrC,EACJ+sD,EAAIojC,EACJprF,EAAI,EACJ,MACF,KAAK,EACH1C,EAAI,EACJ0qD,EAAIojC,EACJprF,EAAI/E,EACJ,MACF,KAAK,EACHqC,EAAI,EACJ0qD,EAAI/sD,EACJ+E,EAAIorF,EACJ,MACF,KAAK,EACH9tF,EAAIrC,EACJ+sD,EAAI,EACJhoD,EAAIorF,EACJ,MACF,KAAK,EACH9tF,EAAI8tF,EACJpjC,EAAI,EACJhoD,EAAI/E,EACJ,MACF,QACEqC,EAAI0qD,EAAIhoD,EAAI,EAEd1C,EAAIohX,GAAQ,KAAOphX,EAAIsI,IACvBoiD,EAAI02T,GAAQ,KAAO12T,EAAIpiD,IACvB5F,EAAI0+W,GAAQ,KAAO1+W,EAAI4F,SA3CrBtI,EAAI0qD,EAAIhoD,EAAI0+W,GAAQ,IAAMxzR,IA6C1Bf,EAAQ,WACV,IAAIP,EAAM,SAAU9hF,GAElB,OADAA,EAAMivB,SAASjvB,EAAK,IAAIrI,SAAS,IAC1BqI,EAAIlN,OAAS,EAAIkN,EAAM,IAAMA,GAEtC,MAAO,IAAM8hF,EAAItsF,GAAKssF,EAAI5hC,GAAK4hC,EAAI5pF,IAEjC8+W,EAAQ,WACV,MAAO,CACLxhX,EAAGA,EACH0qD,EAAGA,EACHhoD,EAAGA,IAGH++W,EAAQ,WACV,OAAOH,EAAQthX,EAAG0qD,EAAGhoD,IAEnBksF,EAAQ,SAAUnxF,GACpB,IAAI4f,EA2BJ,MA1BqB,kBAAV5f,EACL,MAAOA,GACTuC,EAAIvC,EAAMuC,EACV0qD,EAAIjtD,EAAMitD,EACVhoD,EAAIjF,EAAMiF,GACD,MAAOjF,GAChB8jX,EAAS9jX,EAAM67B,EAAG77B,EAAMwB,EAAGxB,EAAM+E,IAG/B6a,EAAU,8DAA8DuvE,KAAKnvF,KAC/EuC,EAAIy5B,SAASpc,EAAQ,GAAI,IACzBqtC,EAAIjxB,SAASpc,EAAQ,GAAI,IACzB3a,EAAI+2B,SAASpc,EAAQ,GAAI,MAChBA,EAAU,oCAAoCuvE,KAAKnvF,KAC5DuC,EAAIy5B,SAASpc,EAAQ,GAAI,IACzBqtC,EAAIjxB,SAASpc,EAAQ,GAAI,IACzB3a,EAAI+2B,SAASpc,EAAQ,GAAI,MAChBA,EAAU,2BAA2BuvE,KAAKnvF,MACnDuC,EAAIy5B,SAASpc,EAAQ,GAAKA,EAAQ,GAAI,IACtCqtC,EAAIjxB,SAASpc,EAAQ,GAAKA,EAAQ,GAAI,IACtC3a,EAAI+2B,SAASpc,EAAQ,GAAKA,EAAQ,GAAI,KAG1Crd,EAAIA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,EAChC0qD,EAAIA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,EAChChoD,EAAIA,EAAI,EAAI,EAAIA,EAAI,IAAM,IAAMA,EACzBH,GAST,OAPI9E,GACFmxF,EAAMnxF,GAER8E,EAAKi/W,MAAQA,EACbj/W,EAAKk/W,MAAQA,EACbl/W,EAAKsqF,MAAQA,EACbtqF,EAAKqsF,MAAQA,EACNrsF,GAGLy3M,GAAY,SAAU9yM,GACxB,IAAImd,EAAOhX,KAAKC,UAAUpG,GAC1B,OAAKjD,EAASogB,GAGPA,EAAKxM,QAAQ,oBAAoB,SAAUvP,GAChD,IAAIo5W,EAAUp5W,EAAMghH,WAAW,GAAGnnH,SAAS,IAC3C,MAAO,MAAQ,OAAOosB,UAAUmzV,EAAQpkX,QAAUokX,KAJ3Cr9V,GAOPs9V,GAAY,CACd3nK,UAAWA,GACXprH,MAAO,SAAUt4E,GACf,IACE,OAAOjJ,KAAKuhF,MAAMt4E,GAClB,MAAOmwF,OAKTm7Q,GAAQ,CACVp5Q,UAAW,GACXrgG,MAAO,EACPo8P,KAAM,SAAUzyL,GACd,IAAIvvE,EAAO/C,KAAMgX,EAAM0mR,GAAWvqN,IAAKxqE,OAA2B5G,IAAnBuwE,EAAS3pE,MAAsB2pE,EAAS3pE,MAAQ5F,EAAK4F,MAChGtH,EAAK,iBAAmBsH,EAC5B5F,EAAKimG,UAAUrgG,GAAS,SAAUwoQ,GAChCn6P,EAAI4S,OAAOvoB,UACJ0B,EAAKimG,UAAUrgG,GACtB2pE,EAASohB,SAASy9K,IAEpBn6P,EAAI2d,IAAI3d,EAAId,IAAI2f,KAAM,SAAU,CAC9Bx0B,GAAIA,EACJ0nH,IAAKz2C,EAASwvB,IACdt9F,KAAM,oBAERzB,EAAK4F,UAIL05W,GAAMhjX,GAASA,GAAS,GAAI01W,IAAa,CAC3ChwG,KAAM,SAAUzyL,GACd,IAAIu+L,EAAKloQ,EAAQ,EACb25W,EAAQ,YACLhwS,EAAS8pM,OAA4B,IAAnBvL,EAAI0a,YAAoB5iR,IAAU,KACnD2pE,EAAS8D,SAAWztE,EAAQ,KAAwB,MAAfkoQ,EAAIjvO,OAC3C0wC,EAAS8D,QAAQr2E,KAAKuyE,EAASiwS,cAAe,GAAK1xG,EAAIO,aAAcP,EAAKv+L,GACjEA,EAAS1uE,OAClB0uE,EAAS1uE,MAAM7D,KAAKuyE,EAASkwS,YAAa75W,EAAQ,IAAQ,YAAc,UAAWkoQ,EAAKv+L,GAE1Fu+L,EAAM,MAENiI,GAAM//L,WAAWupS,EAAO,KAU5B,GAPAhwS,EAASr8D,MAAQq8D,EAASr8D,OAASjW,KACnCsyE,EAASiwS,cAAgBjwS,EAASiwS,eAAiBjwS,EAASr8D,MAC5Dq8D,EAASkwS,YAAclwS,EAASkwS,aAAelwS,EAASr8D,MACxDq8D,EAAS8pM,OAA2B,IAAnB9pM,EAAS8pM,MAC1B9pM,EAASztD,KAAOytD,EAASztD,MAAQ,GACjCw9V,GAAI3wR,KAAK,mBAAoB,CAAEpf,SAAUA,IACzCu+L,EAAM,IAAIzzQ,EAAW0zQ,eACjBD,EAAK,CAsBP,GArBIA,EAAI4xG,kBACN5xG,EAAI4xG,iBAAiBnwS,EAASowS,cAEhC7xG,EAAIhwN,KAAKyxB,EAAS9tE,OAAS8tE,EAASztD,KAAO,OAAS,OAAQytD,EAASwvB,IAAKxvB,EAAS8pM,OAC/E9pM,EAASqwS,cACX9xG,EAAIE,iBAAkB,GAEpBz+L,EAASowS,cACX7xG,EAAI+xG,iBAAiB,eAAgBtwS,EAASowS,cAE5CpwS,EAASuwS,gBACX1jX,GAAMgD,KAAKmwE,EAASuwS,gBAAgB,SAAU9wO,GAC5C8+H,EAAI+xG,iBAAiB7wO,EAAO5pI,IAAK4pI,EAAO9zI,UAG5C4yQ,EAAI+xG,iBAAiB,mBAAoB,kBACzC/xG,EAAMwxG,GAAI3wR,KAAK,aAAc,CAC3Bm/K,IAAKA,EACLv+L,SAAUA,IACTu+L,IACHA,EAAI9L,KAAKzyL,EAASztD,OACbytD,EAAS8pM,MACZ,OAAOkmG,IAETxpG,GAAM//L,WAAWupS,EAAO,QAK1BQ,GAAW3jX,GAAM4jI,OACjBggP,GAAc,WAChB,SAASA,EAAYzwS,GACnBtyE,KAAKsyE,SAAWwwS,GAAS,GAAIxwS,GAC7BtyE,KAAK2I,MAAQ,EAgCf,OA9BAo6W,EAAYC,QAAU,SAAU9hX,GAC9B,OAAO,IAAI6hX,GAAch+G,KAAK7jQ,IAEhC6hX,EAAYljX,UAAUklQ,KAAO,SAAUpnQ,GACrC,IAAIslX,EAAMtlX,EAAKiG,MAAOs/W,EAAMvlX,EAAKy4E,QAC7B+sS,EAAUL,GAAS9iX,KAAKsyE,SAAU30E,GACtCwlX,EAAQ/sS,QAAU,SAAU9vD,EAAGnoB,GAC7BmoB,EAAI67V,GAAU/yR,MAAM9oE,GACH,qBAANA,IACTA,EAAI,CAAE1iB,MAAO,sBAEX0iB,EAAE1iB,MACJq/W,EAAIljX,KAAKojX,EAAQX,aAAeW,EAAQltW,MAAOqQ,EAAE1iB,MAAOzF,GAExD+kX,EAAInjX,KAAKojX,EAAQZ,eAAiBY,EAAQltW,MAAOqQ,EAAEzZ,SAGvDs2W,EAAQv/W,MAAQ,SAAUw/W,EAAIjlX,GACxB8kX,GACFA,EAAIljX,KAAKojX,EAAQX,aAAeW,EAAQltW,MAAOmtW,EAAIjlX,IAGvDglX,EAAQt+V,KAAOs9V,GAAU3nK,UAAU,CACjCn5M,GAAI1D,EAAK0D,IAAM,IAAMrB,KAAK2I,QAC1Bi1J,OAAQjgK,EAAKigK,OACbp0J,OAAQ7L,EAAK6L,SAEf25W,EAAQT,aAAe,mBACvBL,GAAIt9G,KAAKo+G,IAEJJ,EAnCS,GAsCdxqO,GAAW,WACb,OAAO,WACL,IAAI1zH,EAAO,GACPrd,EAAO,GACPytH,EAAU,CACZ14C,QAAS,SAAUp0E,GACjB,IAAI4uB,EAAOlS,EAAK1c,GAChB,OAAO4uB,GAAc,MAEvB24D,QAAS,SAAUvnF,EAAKlK,GACtBuJ,EAAKlC,KAAK6C,GACV0c,EAAK1c,GAAOrE,OAAO7F,IAErBkK,IAAK,SAAUogB,GACb,OAAO/gB,EAAK+gB,IAEd86V,WAAY,SAAUl7W,GACpBX,EAAOA,EAAKjF,QAAO,SAAU7B,GAC3B,OAAOA,IAAMyH,YAER0c,EAAK1c,IAEdo5C,MAAO,WACL/5C,EAAO,GACPqd,EAAO,IAET/mB,OAAQ,GASV,OAPAwB,OAAO+tB,eAAe4nG,EAAS,SAAU,CACvC/sH,IAAK,WACH,OAAOV,EAAK1J,QAEdwlX,cAAc,EACdC,YAAY,IAEPtuP,EAlCF,IAuCT,IACEolB,GAAej9I,EAAWugB,OAAO08H,aACjC,MAAOn6I,IACPm6I,GAAe9B,KAEjB,IAAIirO,GAAenpO,GAEfopO,GAAY,CACdC,KAAM,CAAEzqH,KAAMA,IACd/5P,KAAM,CACJ6mG,QAASsyK,GACTS,MAAOA,GACP35Q,MAAOA,GACP0uT,GAAIA,GACJ0rD,IAAKA,GACLuH,MAAOA,GACP1M,gBAAiBA,GACjBW,WAAYA,GACZh1E,KAAMA,GACNsiF,IAAKA,GACLx0W,KAAMs0W,GACNY,YAAaA,GACbX,MAAOA,GACPoB,aAAcA,GACd3B,MAAOA,IAET7qW,IAAK,CACHy0Q,WAAYA,GACZyD,OAAQA,GACR8H,SAAUA,GACVmC,WAAYA,GACZkS,WAAYA,GACZlR,SAAUuD,GACVpzB,aAAcA,GACdq0G,WAAYK,GACZp/D,WAAYgiB,GACZxT,iBAAkBA,GAClBX,gBAAiBC,GACjBn3Q,UAAWykR,GACXzyE,MAAOkjC,GAAWljC,OAEpBvyO,KAAM,CACJgzN,OAAQA,GACRk4C,SAAUA,GACV1pQ,KAAMojS,GACNv4B,OAAQA,GACRu5B,UAAWwC,GACXkgB,UAAWA,GACXnf,OAAQA,GACRS,WAAYA,IAEdzmC,IAAKA,GACL6mB,aAAcwB,GACd8Y,UAAWA,GACX07B,UAAWA,GACXmE,YAAaA,GACb+4B,eAAgBA,GAChBl4K,cAAeA,GACfswH,oBAAqBA,GACrBirD,iBAAkBA,GAClB4B,UAAWA,GACXjtG,OAAQA,GACRm2C,aAAcA,GACd27D,cAAeA,GACf7pS,IAAKuqN,GAAWvqN,IAChBm3L,aAAcA,GAAaA,aAC3Bg3B,cAAeE,GAAeF,cAC9BC,aAAcC,GAAeD,aAC7B8oB,YAAaA,GACbq1D,SAAUA,GACVxiW,KAAM/d,GAAM+d,KACZvY,QAASxF,GAAMwF,QACfnD,GAAIrC,GAAMqC,GACVkB,QAASvD,GAAMuD,QACfi4I,QAASx7I,GAAMw7I,QACfx4I,KAAMhD,GAAMgD,KACZD,IAAK/C,GAAM+C,IACXs7L,KAAMr+L,GAAMq+L,KACZwR,QAAS7vM,GAAM6vM,QACfjsE,OAAQ5jI,GAAM4jI,OACd97F,OAAQ9nC,GAAM8nC,OACdigL,KAAM/nN,GAAM+nN,KACZqzD,SAAUp7Q,GAAMo7Q,SAChBn7Q,QAASD,GAAMC,QACfs7Q,QAASv7Q,GAAMu7Q,QACfC,gBAAiBx7Q,GAAMw7Q,gBACvB/gQ,QAASu/P,GAAIngQ,MACbgtV,SAAU7sF,GAAI1qD,OACd90M,KAAMw/P,GAAIpgQ,GACVgtV,QAAS5sF,GAAI5pD,MACbo0J,MAAOxqG,GAAIl1L,KAEThlF,GAAUE,GAAM4jI,OAAOi6O,GAAeyG,IAEtCG,GAAwB,SAAU3kX,GAElC,IACEskG,EAAOC,QAAUvkG,EACjB,MAAOsE,MAITsgX,GAAuB,SAAU5kX,GACnC0e,OAAO1e,QAAUA,EACjB0e,OAAOmmW,QAAU7kX,GAEnB4kX,GAAqB5kX,IACrB2kX,GAAsB3kX,KAh/3B1B,CAk/3BE0e,U,2CC1/3BF4lF,EAAOC,QAAU,IAA0B,gC,oBCQ1C,WACG,aAEA,IAAII,EAAS3kG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpC/B,EAAO,aAEPW,EAAW,SAAUC,GACvB,OAAO,WACL,OAAOA,IAGPC,EAAW,SAAUC,GACvB,OAAOA,GAELW,EAAQd,GAAS,GACjBe,EAASf,GAAS,GAElBqB,EAAW,WAUb,OATAA,EAAWC,OAAOC,QAAU,SAAkBC,GAC5C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAI9B,UAAUC,OAAQ4B,EAAIC,EAAGD,IAE9C,IAAK,IAAIE,KADTH,EAAI5B,UAAU6B,GACAD,EACRH,OAAOO,UAAUC,eAAeC,KAAKN,EAAGG,KAC1CJ,EAAEI,GAAKH,EAAEG,IAEf,OAAOJ,GAEFH,EAAStB,MAAMiC,KAAMnC,YAG1BoyM,EAAiB,uQACjB8zK,EAAU,CACZC,QAAS,owBACTC,UAAW,gBACXC,UAAW,aACXC,OAAQ,wBACRljG,QAAS,4GACTzqD,GAAI,MACJ4tJ,GAAI,MACJC,QAAS,sBACTthP,OAAQ,yaACR5wC,OAAQ,iCACRmyR,SAAU,4BACVC,aAAc,qBACdr0K,YAAaD,GAEXu0K,EAAmB,CACrBC,QAAS,EACTC,UAAW,EACXC,UAAW,EACXC,OAAQ,EACRC,QAAS,EACTC,GAAI,EACJC,GAAI,EACJC,QAAS,EACTC,OAAQ,EACRC,OAAQ,EACRC,SAAU,GACVC,aAAc,GACdC,GAAI,GACJC,MAAO,IAELC,EAAO,CACT,IAAIz6R,OAAOi5R,EAAQC,SACnB,IAAIl5R,OAAOi5R,EAAQE,WACnB,IAAIn5R,OAAOi5R,EAAQG,WACnB,IAAIp5R,OAAOi5R,EAAQI,QACnB,IAAIr5R,OAAOi5R,EAAQ9iG,SACnB,IAAIn2L,OAAOi5R,EAAQvtJ,IACnB,IAAI1rI,OAAOi5R,EAAQK,IACnB,IAAIt5R,OAAOi5R,EAAQM,SACnB,IAAIv5R,OAAOi5R,EAAQhhP,QACnB,IAAIj4C,OAAOi5R,EAAQ5xR,QACnB,IAAIrH,OAAOi5R,EAAQO,UACnB,IAAIx5R,OAAOi5R,EAAQQ,cACnB,IAAIz5R,OAAO,MAET06R,EAAe,GACfC,EAAc,IAAI36R,OAAO,IAAMi5R,EAAQ7zK,YAAc,KACrDw1K,EAAa,QAEb3kX,EAAO,WACT,OAAOC,GAELA,EAAO,WACT,IAAIC,EAAK,SAAUC,GACjB,OAAOA,EAAEC,UAEPpB,EAAO,SAAUqB,GACnB,OAAOA,KAELC,EAAK,SAAU1B,GACjB,OAAOA,GAEL2B,EAAK,CACPC,KAAM,SAAU5B,EAAGF,GACjB,OAAOE,KAET6B,GAAI1C,EACJ2C,OAAQ3C,EACRqC,OAAQpC,EACR2C,MAAOL,EACPM,WAAY5B,EACZ6B,SAAU,SAAUhD,GAClB,MAAM,IAAIC,MAAMD,GAAO,oCAEzBiD,UAAW7D,EAAS,MACpB8D,eAAgB9D,OAAS+D,GACzBC,GAAIX,EACJY,QAASlC,EACTmC,IAAKnB,EACLoB,KAAM9E,EACN+E,KAAMrB,EACNsB,OAAQvD,EACRwD,OAAQvD,EACRwD,OAAQxB,EACRyB,OAAQvB,EACRwB,QAASxB,EACTyB,QAAS,WACP,MAAO,IAETC,SAAU3E,EAAS,WAKrB,OAHIsB,OAAOsD,QACTtD,OAAOsD,OAAOtB,GAETA,EA1CE,GA6CP6C,EAAS,SAAUhG,GACrB,GAAU,OAANA,EACF,MAAO,OAET,IAAIqB,SAAWrB,EACf,MAAU,WAANqB,IAAmBiB,MAAMZ,UAAUuE,cAAcjG,IAAMA,EAAEkG,aAAsC,UAAvBlG,EAAEkG,YAAYC,MACjF,QAEC,WAAN9E,IAAmBsE,OAAOjE,UAAUuE,cAAcjG,IAAMA,EAAEkG,aAAsC,WAAvBlG,EAAEkG,YAAYC,MAClF,SAEF9E,GAEL+E,EAAS,SAAUC,GACrB,OAAO,SAAUvG,GACf,OAAOkG,EAAOlG,KAAWuG,IAGzBK,EAAaN,EAAO,YAEpBW,EAAczE,MAAMZ,UAAUsF,MAC9BjD,EAAM,SAAUuD,EAAIlI,GAGtB,IAFA,IAAI0H,EAAMQ,EAAG3H,OACT0C,EAAI,IAAIC,MAAMwE,GACTvF,EAAI,EAAGA,EAAIuF,EAAKvF,IAAK,CAC5B,IAAIvB,EAAIsH,EAAG/F,GACXc,EAAEd,GAAKnC,EAAEY,EAAGuB,GAEd,OAAOc,GAMLmlX,GAJO9gX,EAAWpE,MAAM0C,OAAQ1C,MAAM0C,KAI7BoiX,GACTD,EAAQd,EAAiBc,MACzBn6P,EAAU,SAAU9vC,GAGtB,IAFA,IAAI72E,EAAO8gX,EACPM,EAAaD,EAAO7nX,OACf8C,EAAI,EAAGA,EAAIglX,IAAchlX,EAAG,CACnC,IAAIiV,EAAM8vW,EAAO/kX,GACjB,GAAIiV,GAAOA,EAAIiC,KAAKujE,GAAO,CACzB72E,EAAO5D,EACP,OAGJ,OAAO4D,GAELqhX,EAAU,SAAU/9H,GACtB,IAAIv4J,EAAQ,GACZ,OAAO,SAAUlU,GACf,GAAIkU,EAAMlU,GACR,OAAOkU,EAAMlU,GAEb,IAAIxuE,EAASi7O,EAAKzsK,GAElB,OADAkU,EAAMlU,GAAQxuE,EACPA,IAITi5W,EAAW,SAAUxlM,GACvB,IAAIylM,EAAWF,EAAQ16P,GACvB,OAAOjpH,EAAIo+K,EAAYylM,IAGrBC,EAAiB,SAAU9jX,EAAKqmB,GAClC,IAAI09V,EAGAC,EAFA1hX,EAAOtC,EAAIqmB,GACX49V,EAAWjkX,EAAIqmB,EAAQ,GAE3B,QAAIA,EAAQ,GAAKA,EAAQrmB,EAAIpE,OAAS,GAAe,IAAVyqB,MAGvC/jB,IAASggX,EAAiBC,SAAW0B,IAAa3B,EAAiBC,WAGvEyB,EAAehkX,EAAIqmB,EAAQ,IACvB/jB,IAASggX,EAAiBC,SAAY0B,IAAa3B,EAAiBG,WAAawB,IAAa3B,EAAiBE,WAAayB,IAAa3B,EAAiBa,IAAOa,IAAiB1B,EAAiBC,WAGvMwB,EAAW/jX,EAAIqmB,EAAQ,IAClB/jB,IAASggX,EAAiBG,WAAangX,IAASggX,EAAiBE,WAAayB,IAAa3B,EAAiBa,IAAOc,IAAa3B,EAAiBC,SAAWwB,IAAazB,EAAiBC,YAG1LjgX,IAASggX,EAAiBK,SAAWrgX,IAASggX,EAAiBC,SAAa0B,IAAa3B,EAAiBK,SAAWsB,IAAa3B,EAAiBC,YAGnJjgX,IAASggX,EAAiBI,QAAUpgX,IAASggX,EAAiBE,WAAcyB,IAAa3B,EAAiBK,SAAWoB,IAAazB,EAAiBK,YAGpJrgX,IAASggX,EAAiBK,SAAYsB,IAAa3B,EAAiBI,QAAUuB,IAAa3B,EAAiBE,WAAcwB,IAAiB1B,EAAiBK,WAG5JrgX,IAASggX,EAAiBS,QAAUzgX,IAASggX,EAAiBU,QAAUe,IAAazB,EAAiBS,QAAUgB,IAAazB,EAAiBU,QAAUiB,IAAa3B,EAAiBS,QAAUkB,IAAa3B,EAAiBU,UAG9N1gX,IAASggX,EAAiBM,IAAMqB,IAAa3B,EAAiBO,MAG9DvgX,IAASggX,EAAiBQ,SAAWxgX,IAASggX,EAAiBM,IAAMtgX,IAASggX,EAAiBO,KAG/FoB,IAAa3B,EAAiBQ,SAAWmB,IAAa3B,EAAiBM,IAAMqB,IAAa3B,EAAiBO,KAG3GvgX,IAASggX,EAAiBW,UAAYgB,IAAa3B,EAAiBW,aAGpEgB,IAAa3B,EAAiBY,cAAiB5gX,IAASggX,EAAiBC,SAAWjgX,IAASggX,EAAiBK,SAAWrgX,IAASggX,EAAiBW,UAAY3gX,IAASggX,EAAiBY,iBAGzL5gX,IAASggX,EAAiBY,cAAiBe,IAAa3B,EAAiBC,SAAW0B,IAAa3B,EAAiBK,SAAWsB,IAAa3B,EAAiBW,WAG3J3gX,IAASggX,EAAiBa,gBAM5B7wU,EAAY,SAEZ4xU,EAAiBZ,EACjBa,EAAeX,EACfY,EAAgBb,EAChBc,EAAa,SAAU3pW,GACzB,MAAe,SAARA,GAA0B,UAARA,GAEvB4pW,EAAc,SAAUlmM,EAAY09C,GACtC,IAAIt+N,EACJ,IAAKA,EAAIs+N,EAAYt+N,EAAI4gL,EAAWxiL,OAAQ4B,IAC1C,GAAI2mX,EAAavuW,KAAKwoK,EAAW5gL,IAC/B,MAGJ,OAAOA,GAEL+mX,EAAa,SAAUnmM,EAAY09C,GACrC,IAAIpvM,EAAW43V,EAAYlmM,EAAY09C,EAAa,GAChD0oJ,EAAapmM,EAAWn7K,MAAM64N,EAAa,EAAGpvM,GAAU3lB,KAAKm9W,GACjE,MAAmC,QAA5BM,EAAW7pW,OAAO,EAAG,GAAe+R,EAAWovM,GAEpD2oJ,EAAY,SAAUxoB,EAAOyoB,EAAQC,EAAcz2U,GAGrD,IAFA,IAAIiwI,EAAQ,GACRymM,EAAO,GACFpnX,EAAI,EAAGA,EAAImnX,EAAa/oX,SAAU4B,EAEzC,GADAonX,EAAKxhX,KAAK64V,EAAMz+V,IACZsmX,EAAea,EAAcnnX,GAAI,CACnC,IAAI8R,EAAKo1W,EAAOlnX,GAChB,IAAK0wC,EAAQ22U,oBAAsBV,EAAavuW,KAAKtG,MAAS4+B,EAAQ42U,qBAAuBV,EAAcxuW,KAAKtG,IAAM,CACpH,IAAIy1W,EAAcvnX,EAAIonX,EAAKhpX,OAAS,EAChCopX,EAAYxnX,EAAI,EAChBkd,EAAMgqW,EAAOzhX,MAAM8hX,EAAaC,GAAWj+W,KAAKm9W,GACpD,GAAIG,EAAW3pW,GAAM,CACnB,IAAIuqW,EAAWV,EAAWG,EAAQlnX,GAC9BoiG,EAAMq8P,EAAMh5V,MAAM+hX,EAAWC,GACjC1mX,MAAMZ,UAAUyF,KAAKvH,MAAM+oX,EAAMhlR,GACjCpiG,EAAIynX,EAEN9mM,EAAM/6K,KAAKwhX,GAEbA,EAAO,GAGX,OAAOzmM,GAEL+mM,EAAoB,WACtB,MAAO,CACLL,mBAAmB,EACnBC,oBAAoB,IAGpBK,EAAW,SAAUlpB,EAAO1uV,EAAS2gC,GACvCA,EAAU/wC,EAASA,EAAS,GAAI+nX,KAAsBh3U,GAGtD,IAFA,IAAIk3U,EAAgB,GAChBC,EAAiB,GACZ7nX,EAAI,EAAGA,EAAIy+V,EAAMrgW,OAAQ4B,IAAK,CACrC,IAAI8R,EAAK/B,EAAQ0uV,EAAMz+V,IACnB8R,IAAOgjC,IACT8yU,EAAchiX,KAAK64V,EAAMz+V,IACzB6nX,EAAejiX,KAAKkM,IAGxB,IAAIq1W,EAAef,EAASyB,GAC5B,OAAOZ,EAAUW,EAAeC,EAAgBV,EAAcz2U,IAG5Do3U,EAAaH,EAEbroX,EAAWC,QAAQC,KAAKC,MAAMC,QAAQ,0BAEtC27E,EAAU,SAAUnkE,EAAMzF,GAC5B,IAAI2vL,EAAgB3vL,EAAOoyL,mBACvByjB,EAAqB71M,EAAO8gM,wBAC5B8Y,EAAY,SAAUn0M,GACxB,OAAOkqL,EAAclqL,EAAKgU,WAAao8L,EAAmBpwM,EAAKgU,WAE7Du/K,EAAa,GACbyG,EAAM,GACN62K,EAAa,IAAIzoX,EAAS4X,EAAMA,GACpC,MAAOA,EAAO6wW,EAAWj0W,OACD,IAAlBoD,EAAKwI,SACPwxL,GAAOh6L,EAAKiO,KACHkmM,EAAUn0M,IAASg6L,EAAI9yM,SAChCqsM,EAAW7kM,KAAKsrM,GAChBA,EAAM,IAMV,OAHIA,EAAI9yM,QACNqsM,EAAW7kM,KAAKsrM,GAEXzG,GAGLu9K,EAAS,SAAU9qW,GACrB,OAAOA,EAAIvE,QAAQ,kCAAmC,KAAKva,QAEzD6pX,EAAa,SAAU/wW,EAAMzF,GAC/B,IAAI2F,EAAOikE,EAAQnkE,EAAMzF,GAAQlI,KAAK,MACtC,OAAOu+W,EAAW1wW,EAAKkY,MAAM,IAAK9wB,GAAUJ,QAE1C8pX,EAAkB,SAAUhxW,EAAMzF,GACpC,IAAI2F,EAAOikE,EAAQnkE,EAAMzF,GAAQlI,KAAK,IACtC,OAAOy+W,EAAO5wW,IAEZ+wW,EAA+B,SAAUjxW,EAAMzF,GACjD,IAAI2F,EAAOikE,EAAQnkE,EAAMzF,GAAQlI,KAAK,IAAIoP,QAAQ,MAAO,IACzD,OAAOqvW,EAAO5wW,IAGZgxW,EAAoB,SAAUz1S,EAAQ1pE,GACxC,OAAO,WACL,OAAOA,EAAM0pE,EAAOv8C,UAAWu8C,EAAOlhE,UAGtC42W,EAAyB,SAAU11S,EAAQ1pE,GAC7C,OAAO,WACL,OAAOA,EAAM0pE,EAAOt8B,UAAU6nC,SAASw5O,gBAAiB/kP,EAAOlhE,UAG/D62W,EAAwB,SAAU31S,GACpC,OAAOy1S,EAAkBz1S,EAAQs1S,IAE/Bz/W,EAAM,SAAUmqE,GAClB,MAAO,CACLx8C,KAAM,CACJoyV,aAAcD,EAAsB31S,GACpC61S,kBAAmBJ,EAAkBz1S,EAAQu1S,GAC7CO,+BAAgCL,EAAkBz1S,EAAQw1S,IAE5D9xU,UAAW,CACTkyU,aAAcF,EAAuB11S,EAAQs1S,GAC7CO,kBAAmBH,EAAuB11S,EAAQu1S,GAClDO,+BAAgCJ,EAAuB11S,EAAQw1S,IAEjEO,SAAUJ,EAAsB31S,KAIhCJ,EAAWhzE,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCipX,EAAsB,SAAUh2S,EAAQ/3C,GAC1C+3C,EAAOqf,KAAK,kBAAmB,CAC7B+uF,UAAW,CACTJ,MAAO/lJ,EAAIzE,KAAKoyV,eAChB3nM,WAAYhmJ,EAAIzE,KAAKqyV,oBACrBI,wBAAyBhuV,EAAIzE,KAAKsyV,qCAKpCI,EAAc,SAAUl2S,EAAQ/3C,GAClC+tV,EAAoBh2S,EAAQ/3C,IAE1B+xC,EAAQ,SAAUgG,EAAQ/3C,EAAKonD,GACjC,IAAI8mS,EAAkBv2S,EAAS4mM,UAAS,WACtC,OAAO0vG,EAAYl2S,EAAQ/3C,KAC1BonD,GACHrP,EAAOpjC,GAAG,QAAQ,WAChBs5U,EAAYl2S,EAAQ/3C,GACpB23C,EAASsnF,iBAAiBlnF,GAAQ,WAChCA,EAAOpjC,GAAG,2CAA4Cu5U,KACrD,OAIH3nU,EAAO,SAAUwxB,EAAQ/3C,GAC3B+3C,EAAO8iB,cAAct0C,KAAK,CACxB+kC,MAAO,aACP/vD,KAAM,CACJrxB,KAAM,QACNugD,MAAO,CAAC,CACJvgD,KAAM,QACNutI,OAAQ,CACN,QACA,WACA,aAEFhmD,MAAO,CACL,CACE,QACAjoF,OAAOw2B,EAAIzE,KAAKoyV,gBAChBnkX,OAAOw2B,EAAIyb,UAAUkyU,iBAEvB,CACE,yBACAnkX,OAAOw2B,EAAIzE,KAAKsyV,kCAChBrkX,OAAOw2B,EAAIyb,UAAUoyU,mCAEvB,CACE,aACArkX,OAAOw2B,EAAIzE,KAAKqyV,qBAChBpkX,OAAOw2B,EAAIyb,UAAUmyU,0BAK/B9yR,QAAS,CAAC,CACN5wF,KAAM,SACNF,KAAM,QACNwS,KAAM,QACNwyD,SAAS,OAKb8V,EAAW,SAAU/M,EAAQ/3C,GAC/B+3C,EAAOiN,GAAGC,SAASuuF,UAAU,YAAa,CACxC1rF,QAAS,aACTjL,KAAM,kBACNI,SAAU,WACR,OAAO12B,EAAKwxB,EAAQ/3C,MAGxB+3C,EAAOiN,GAAGC,SAASgvF,YAAY,YAAa,CAC1Cz3J,KAAM,aACNqgE,KAAM,kBACNI,SAAU,WACR,OAAO12B,EAAKwxB,EAAQ/3C,OAK1B,SAASqiK,GAAQj7G,QACD,IAAVA,IACFA,EAAQ,KAEVkiB,EAAOjvE,IAAI,aAAa,SAAU09C,GAChC,IAAI/3C,EAAMpyB,EAAImqE,GAGd,OAFA+M,EAAS/M,EAAQ/3C,GACjB+xC,EAAMgG,EAAQ/3C,EAAKonD,GACZpnD,KAIXqiK,MAreJ,I,oBCAC,WACG,aAEA,IAAI/4F,EAAS3kG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpC4hD,EAAa,SAAUqxB,EAAQr8D,GACjCq8D,EAAOtvD,QACPsvD,EAAOigB,YAAYC,UAAS,WAC1BlgB,EAAOrxB,WAAWhrC,MAEpBq8D,EAAOt8B,UAAU8kC,oBACjBxI,EAAOogB,eAEL1hB,EAAa,SAAUsB,GACzB,OAAOA,EAAOtB,WAAW,CAAEo1P,aAAa,KAEtCsiD,EAAU,CACZznU,WAAYA,EACZ+vB,WAAYA,GAGVlwB,EAAO,SAAUwxB,GACnB,IAAIq2S,EAAgBD,EAAQ13S,WAAWsB,GACvCA,EAAO8iB,cAAct0C,KAAK,CACxB+kC,MAAO,cACP7/E,KAAM,QACN8vB,KAAM,CACJrxB,KAAM,QACNugD,MAAO,CAAC,CACJvgD,KAAM,WACNF,KAAM,UAGZ8wF,QAAS,CACP,CACE5wF,KAAM,SACNF,KAAM,SACNwS,KAAM,UAER,CACEtS,KAAM,SACNF,KAAM,OACNwS,KAAM,OACNwyD,SAAS,IAGb2rB,YAAa,CAAE6O,KAAM4kR,GACrBrzR,SAAU,SAAU/6D,GAClBmuV,EAAQznU,WAAWqxB,EAAQ/3C,EAAI1J,UAAUkzE,MACzCxpE,EAAI+mB,YAIN26I,EAAS,CAAEn7I,KAAMA,GAEjBu+B,EAAW,SAAU/M,GACvBA,EAAOugB,WAAW,iBAAiB,WACjCopG,EAAOn7I,KAAKwxB,OAGZ4pH,EAAW,CAAE78G,SAAUA,GAEvBmW,EAAa,SAAUljB,GACzBA,EAAOiN,GAAGC,SAASuuF,UAAU,OAAQ,CACnC32F,KAAM,aACNiL,QAAS,cACT7K,SAAU,WACR,OAAOykH,EAAOn7I,KAAKwxB,MAGvBA,EAAOiN,GAAGC,SAASgvF,YAAY,OAAQ,CACrCp3F,KAAM,aACNrgE,KAAM,cACNygE,SAAU,WACR,OAAOykH,EAAOn7I,KAAKwxB,OAIrBqqH,EAAU,CAAEt9G,SAAUmW,GAE1B,SAASonG,IACP/4F,EAAOjvE,IAAI,QAAQ,SAAU09C,GAG3B,OAFA4pH,EAAS78G,SAAS/M,GAClBqqH,EAAQt9G,SAAS/M,GACV,MAIXsqH,KAxFJ,I,qBCRA,IAAIz6L,EAAM,CACT,gBAAiB,OACjB,oBAAqB,QAItB,SAASkhN,EAAev7L,GACvB,IAAIxmB,EAAKgiN,EAAsBx7L,GAC/B,OAAOy7L,EAAoBjiN,GAE5B,SAASgiN,EAAsBx7L,GAC9B,IAAIy7L,EAAoBpiN,EAAEgB,EAAK2lB,GAAM,CACpC,IAAI3nB,EAAI,IAAIrB,MAAM,uBAAyBgpB,EAAM,KAEjD,MADA3nB,EAAE4jG,KAAO,mBACH5jG,EAEP,OAAOgC,EAAI2lB,GAEZu7L,EAAe57M,KAAO,WACrB,OAAOlI,OAAOkI,KAAKtF,IAEpBkhN,EAAehkN,QAAUikN,EACzB9/G,EAAOC,QAAU4/G,EACjBA,EAAe/hN,GAAK,Q,oBCfnB,SAAUjE,GACP,aAEA,IAAIuY,EAAO,SAAUC,GACnB,IAAI3X,EAAQ2X,EACR1N,EAAM,WACR,OAAOjK,GAEL4X,EAAM,SAAU7S,GAClB/E,EAAQ+E,GAEN8S,EAAQ,WACV,OAAOH,EAAKzN,MAEd,MAAO,CACLA,IAAKA,EACL2N,IAAKA,EACLC,MAAOA,IAIP8tF,EAAS3kG,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpC8I,EAAM,SAAUygX,GAClB,MAAO,CACLC,aAAc,WACZ,OAAiC,OAA1BD,EAAgBzgX,SAIzBg2L,EAAM,CAAEh2L,IAAKA,GAEb7K,EAAO,aAEPG,EAAU,SAAUC,EAAIC,GAC1B,OAAO,WAEL,IADA,IAAIC,EAAO,GACFC,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACtCD,EAAKC,GAAMC,UAAUD,GAEvB,OAAOH,EAAGC,EAAGK,MAAM,KAAMJ,MAGzBK,EAAW,SAAUC,GACvB,OAAO,WACL,OAAOA,IAGPa,EAAQd,GAAS,GACjBe,EAASf,GAAS,GAElB+C,EAAO,WACT,OAAOC,GAELA,EAAO,WACT,IAAIC,EAAK,SAAUC,GACjB,OAAOA,EAAEC,UAEPpB,EAAO,SAAUqB,GACnB,OAAOA,KAELC,EAAK,SAAU1B,GACjB,OAAOA,GAEL2B,EAAK,CACPC,KAAM,SAAU5B,EAAGF,GACjB,OAAOE,KAET6B,GAAI1C,EACJ2C,OAAQ3C,EACRqC,OAAQpC,EACR2C,MAAOL,EACPM,WAAY5B,EACZ6B,SAAU,SAAUhD,GAClB,MAAM,IAAIC,MAAMD,GAAO,oCAEzBiD,UAAW7D,EAAS,MACpB8D,eAAgB9D,OAAS+D,GACzBC,GAAIX,EACJY,QAASlC,EACTmC,IAAKnB,EACLoB,KAAM9E,EACN+E,KAAMrB,EACNsB,OAAQvD,EACRwD,OAAQvD,EACRwD,OAAQxB,EACRyB,OAAQvB,EACRwB,QAASxB,EACTyB,QAAS,WACP,MAAO,IAETC,SAAU3E,EAAS,WAKrB,OAHIsB,OAAOsD,QACTtD,OAAOsD,OAAOtB,GAETA,EA1CE,GA4CPuB,EAAO,SAAUlC,GACnB,IAAImC,EAAa9E,EAAS2C,GACtBoC,EAAO,WACT,OAAOzB,GAELc,EAAO,SAAU7E,GACnB,OAAOA,EAAEoD,IAEPW,EAAK,CACPC,KAAM,SAAU5B,EAAGF,GACjB,OAAOA,EAAEkB,IAEXa,GAAI,SAAUwB,GACZ,OAAOrC,IAAMqC,GAEfvB,OAAQ1C,EACRoC,OAAQrC,EACR4C,MAAOoB,EACPnB,WAAYmB,EACZlB,SAAUkB,EACVjB,UAAWiB,EACXhB,eAAgBgB,EAChBd,GAAIe,EACJd,QAASc,EACTb,IAAK,SAAU3E,GACb,OAAOsF,EAAKtF,EAAEoD,KAEhBwB,KAAM,SAAU5E,GACdA,EAAEoD,IAEJyB,KAAMA,EACNC,OAAQD,EACRE,OAAQF,EACRG,OAAQ,SAAUhF,GAChB,OAAOA,EAAEoD,GAAKW,EAAKN,GAErB0B,QAAS,WACP,MAAO,CAAC/B,IAEVgC,SAAU,WACR,MAAO,QAAUhC,EAAI,KAEvB6B,OAAQ,SAAUtB,GAChB,OAAOA,EAAEM,GAAGb,IAEd8B,QAAS,SAAUvB,EAAG+B,GACpB,OAAO/B,EAAEK,KAAKzC,GAAO,SAAUoE,GAC7B,OAAOD,EAAUtC,EAAGuC,QAI1B,OAAO5B,GAEL6B,EAAO,SAAUlF,GACnB,OAAiB,OAAVA,QAA4B8D,IAAV9D,EAAsB+C,EAAO6B,EAAK5E,IAEzDmF,EAAS,CACXP,KAAMA,EACN9B,KAAMA,EACNoC,KAAMA,GAGJ0lX,EAAY,SAAUC,GACxB,IAAItxV,EAAU7hB,EAAKvS,EAAOrC,QACtBinC,EAAS,WACXxQ,EAAQtvB,MAAM/F,KAAK2mX,IAEjBvnU,EAAQ,WACVvZ,IACAxQ,EAAQ3hB,IAAIzS,EAAOrC,SAEjB8U,EAAM,SAAUpW,GAClBuoC,IACAxQ,EAAQ3hB,IAAIzS,EAAOP,KAAKpD,KAEtBwrL,EAAQ,WACV,OAAOzzJ,EAAQtvB,MAAMzG,UAEvB,MAAO,CACL8/C,MAAOA,EACP0pI,MAAOA,EACPp1K,IAAKA,IAGLkzW,EAAa,WACf,OAAOF,GAAU,SAAUppX,GACzBA,EAAEy9B,aAGFj/B,EAAQ,WACV,IAAIu5B,EAAU7hB,EAAKvS,EAAOrC,QACtBwgD,EAAQ,WACV/pB,EAAQ3hB,IAAIzS,EAAOrC,SAEjB8U,EAAM,SAAUpW,GAClB+3B,EAAQ3hB,IAAIzS,EAAOP,KAAKpD,KAEtBwvC,EAAK,SAAU1xC,GACjBi6B,EAAQtvB,MAAM/F,KAAK5E,IAEjB0tL,EAAQ,WACV,OAAOzzJ,EAAQtvB,MAAMzG,UAEvB,MAAO,CACL8/C,MAAOA,EACP1rC,IAAKA,EACLo1K,MAAOA,EACPh8I,GAAIA,IAIJ9qC,EAAS,SAAUhG,GACrB,GAAU,OAANA,EACF,MAAO,OAET,IAAIqB,SAAWrB,EACf,MAAU,WAANqB,IAAmBiB,MAAMZ,UAAUuE,cAAcjG,IAAMA,EAAEkG,aAAsC,UAAvBlG,EAAEkG,YAAYC,MACjF,QAEC,WAAN9E,IAAmBsE,OAAOjE,UAAUuE,cAAcjG,IAAMA,EAAEkG,aAAsC,WAAvBlG,EAAEkG,YAAYC,MAClF,SAEF9E,GAEL+E,EAAS,SAAUC,GACrB,OAAO,SAAUvG,GACf,OAAOkG,EAAOlG,KAAWuG,IAGzBC,EAAWF,EAAO,UAClBI,EAAUJ,EAAO,SACjBK,EAAYL,EAAO,WACnBM,EAAaN,EAAO,YACpBO,EAAWP,EAAO,UAElBW,EAAczE,MAAMZ,UAAUsF,MAC9BE,EAAa5E,MAAMZ,UAAUyF,KAC7BpD,EAAM,SAAUuD,EAAIlI,GAGtB,IAFA,IAAI0H,EAAMQ,EAAG3H,OACT0C,EAAI,IAAIC,MAAMwE,GACTvF,EAAI,EAAGA,EAAIuF,EAAKvF,IAAK,CAC5B,IAAIvB,EAAIsH,EAAG/F,GACXc,EAAEd,GAAKnC,EAAEY,EAAGuB,GAEd,OAAOc,GAEL2B,EAAO,SAAUsD,EAAIlI,GACvB,IAAK,IAAImC,EAAI,EAAGuF,EAAMQ,EAAG3H,OAAQ4B,EAAIuF,EAAKvF,IAAK,CAC7C,IAAIvB,EAAIsH,EAAG/F,GACXnC,EAAEY,EAAGuB,KAGL6C,EAAS,SAAUkD,EAAIT,GAEzB,IADA,IAAIxE,EAAI,GACCd,EAAI,EAAGuF,EAAMQ,EAAG3H,OAAQ4B,EAAIuF,EAAKvF,IAAK,CAC7C,IAAIvB,EAAIsH,EAAG/F,GACPsF,EAAK7G,EAAGuB,IACVc,EAAE8E,KAAKnH,GAGX,OAAOqC,GAELgG,EAAO,SAAUf,EAAIT,GACvB,IAAK,IAAItF,EAAI,EAAGuF,EAAMQ,EAAG3H,OAAQ4B,EAAIuF,EAAKvF,IAAK,CAC7C,IAAIvB,EAAIsH,EAAG/F,GACX,GAAIsF,EAAK7G,EAAGuB,GACV,OAAO0D,EAAOP,KAAK1E,GAGvB,OAAOiF,EAAOrC,QAEZ2F,EAAU,SAAUjB,GAEtB,IADA,IAAIjF,EAAI,GACCd,EAAI,EAAGuF,EAAMQ,EAAG3H,OAAQ4B,EAAIuF,IAAOvF,EAAG,CAC7C,IAAKiF,EAAQc,EAAG/F,IACd,MAAM,IAAIb,MAAM,oBAAsBa,EAAI,6BAA+B+F,GAE3EJ,EAAWtH,MAAMyC,EAAGiF,EAAG/F,IAEzB,OAAOc,GAEL4B,EAAO,SAAUqD,EAAIlI,GACvB,OAAOmJ,EAAQxE,EAAIuD,EAAIlI,KAMrBiK,GAJS3C,EAAWpE,MAAM0C,OAAQ1C,MAAM0C,KAIjC7D,OAAOkI,MACdC,EAAS,SAAUC,EAAKnK,GAE1B,IADA,IAAIoK,EAAQH,EAAKE,GACRhH,EAAI,EAAGuE,EAAM0C,EAAM7J,OAAQ4C,EAAIuE,EAAKvE,IAAK,CAChD,IAAIhB,EAAIiI,EAAMjH,GACVvC,EAAIuJ,EAAIhI,GACZnC,EAAEY,EAAGuB,KAILgG,EAAW,SAAUkX,EAAKC,GAC5B,OAAgC,IAAzBD,EAAIzc,QAAQ0c,IAGjB4Y,EAAc,SAAUze,GAC1B,YAAqBjV,IAAdiV,EAAI0e,OAAuB7wB,EAAWmS,EAAI0e,MAAMC,mBAGrD5f,EAAW,SAAUC,EAAMC,GAC7B,IAAIC,EAAMD,GAAS7Y,EAAW+Y,SAC1BC,EAAMF,EAAIG,cAAc,OAE5B,GADAD,EAAIE,UAAYN,GACXI,EAAIG,iBAAmBH,EAAII,WAAW1Y,OAAS,EAElD,MADAV,EAAWmM,QAAQ3F,MAAM,wCAAyCoS,GAC5D,IAAInX,MAAM,qCAElB,OAAO4X,EAAQL,EAAII,WAAW,KAE5BE,EAAU,SAAUC,EAAKV,GAC3B,IAAIC,EAAMD,GAAS7Y,EAAW+Y,SAC1BS,EAAOV,EAAIG,cAAcM,GAC7B,OAAOF,EAAQG,IAEbC,EAAW,SAAUC,EAAMb,GAC7B,IAAIC,EAAMD,GAAS7Y,EAAW+Y,SAC1BS,EAAOV,EAAIa,eAAeD,GAC9B,OAAOL,EAAQG,IAEbH,EAAU,SAAUG,GACtB,GAAa,OAATA,QAA0B7U,IAAT6U,EACnB,MAAM,IAAI/X,MAAM,oCAElB,MAAO,CAAEmY,IAAKhZ,EAAS4Y,KAErBK,EAAY,SAAUC,EAAQ/Y,EAAGgZ,GACnC,IAAIjB,EAAMgB,EAAOF,MACjB,OAAO5T,EAAOD,KAAK+S,EAAIkB,iBAAiBjZ,EAAGgZ,IAAIjV,IAAIuU,IAEjDY,EAAU,CACZtB,SAAUA,EACVW,QAASA,EACTG,SAAUA,EACVJ,QAASA,EACTQ,UAAWA,GAMTgH,GAHY7gB,EAAWoa,KAAK0G,eACZ9gB,EAAWoa,KAAK2G,mBACtB/gB,EAAWoa,KAAK4G,aACfhhB,EAAWoa,KAAK6G,eAG3BC,GAFgBlhB,EAAWoa,KAAK+G,mBACZnhB,EAAWoa,KAAKgH,uBAC1BphB,EAAWoa,KAAKiH,cAC1BC,EAAOthB,EAAWoa,KAAKmH,UAQvBna,GAPyBpH,EAAWoa,KAAKqH,4BACtBzhB,EAAWoa,KAAKsH,sBAC1B1hB,EAAWoa,KAAKuH,YACd3hB,EAAWoa,KAAKwH,cAEW,qBAAtB5hB,EAAWugB,OAAyBvgB,EAAWugB,OAASgN,SAAS,eAATA,GAEjE,SAAUzL,GACnB,OAAOA,EAAQlI,MAAMoI,WAEnByL,EAAW,SAAUrrB,GACvB,OAAO,SAAU0f,GACf,OAAO1a,EAAK0a,KAAa1f,IAGzBurB,EAASF,EAASnM,GAElBkX,EAAS,SAAU1W,GACrB,IAAIlI,EAAM+T,EAAO7L,GAAWA,EAAQlI,MAAMyJ,WAAavB,EAAQlI,MAC/D,YAAejV,IAARiV,GAA6B,OAARA,GAAgBA,EAAI+Q,cAAc8N,KAAKnwB,SAASsR,IAG1EgU,EAAS,SAAUhU,EAAK7O,EAAKlK,GAC/B,KAAIwG,EAASxG,IAAU2G,EAAU3G,IAAU6G,EAAS7G,IAIlD,MADAb,EAAWmM,QAAQ3F,MAAM,iCAAkCuE,EAAK,YAAalK,EAAO,cAAe+Y,GAC7F,IAAInY,MAAM,kCAHhBmY,EAAIiU,aAAa9iB,EAAKlK,EAAQ,KAM9B4X,EAAM,SAAUqJ,EAAS/W,EAAKlK,GAChC+sB,EAAO9L,EAAQlI,MAAO7O,EAAKlK,IAEzBgsB,EAAQ,SAAU/K,EAAS/W,GAC7B,IAAInF,EAAIkc,EAAQlI,MAAMsU,aAAanjB,GACnC,OAAa,OAANnF,OAAajB,EAAYiB,GAE9B4mB,EAAS,SAAU1K,EAAS/W,GAC9B+W,EAAQlI,MAAM2U,gBAAgBxjB,IAG5B4tB,GAAc,SAAU/e,EAAKgf,EAAU/3B,GACzC,IAAKwG,EAASxG,GAEZ,MADAb,EAAWmM,QAAQ3F,MAAM,qCAAsCoyB,EAAU,YAAa/3B,EAAO,cAAe+Y,GACtG,IAAInY,MAAM,+BAAiCZ,GAE/Cw3B,EAAYze,IACdA,EAAI0e,MAAMO,YAAYD,EAAU/3B,IAGhCktB,GAAS,SAAUjM,EAASoX,GAC9B,IAAItf,EAAMkI,EAAQlI,MAClBvP,EAAO6uB,GAAK,SAAUtzB,EAAGtC,GACvBq1B,GAAY/e,EAAKtW,EAAGsC,OAGpBqoB,GAAQ,SAAUnM,EAAS8W,GAC7B,IAAIhf,EAAMkI,EAAQlI,MACdma,EAAS/zB,EAAWugB,OAAO8Y,iBAAiBzf,GAC5CxW,EAAI2wB,EAAOwE,iBAAiBK,GAC5BhzB,EAAU,KAANxC,GAAao1B,EAAO1W,GAA8C1e,EAAnCk2B,GAAkB1f,EAAKgf,GAC9D,OAAa,OAANhzB,OAAajB,EAAYiB,GAE9B0zB,GAAoB,SAAU1f,EAAKgf,GACrC,OAAOP,EAAYze,GAAOA,EAAI0e,MAAMC,iBAAiBK,GAAY,IAG/DsG,GAAU,SAAUlzB,EAAQjL,EAAGgZ,EAAGqJ,EAAM6E,EAASkX,EAAM3F,GACzD,MAAO,CACLxtB,OAAQpL,EAASoL,GACjBjL,EAAGH,EAASG,GACZgZ,EAAGnZ,EAASmZ,GACZqJ,KAAMA,EACN6E,QAASA,EACTkX,KAAMA,EACN3F,IAAK54B,EAAS44B,KAGd4F,GAAe,SAAUC,GAC3B,IAAIrzB,EAASiO,EAAQZ,QAAQgmB,EAASrzB,QAClCoX,EAAO,WACTic,EAASC,mBAEPrX,EAAU,WACZoX,EAASrX,kBAEPmX,EAAO/+B,EAAQ6nB,EAAS7E,GAC5B,OAAO8b,GAAQlzB,EAAQqzB,EAASE,QAASF,EAASG,QAASpc,EAAM6E,EAASkX,EAAME,IAG9E7kB,GAAa,SAAUC,EAASpY,GAClC,IAAK,IAAIC,EAAI,EAAGA,EAAImY,EAAQ/Z,OAAQ4B,IAAK,CACvC,IAAIvB,EAAI0Z,EAAQnY,GAChB,GAAIvB,EAAE2Z,KAAKrY,GACT,OAAOtB,IAKT6J,GAAS,SAAU6P,EAASG,GAC9B,IAAIxX,EAAIoX,GAAWC,EAASG,GAC5B,IAAKxX,EACH,MAAO,CACLyX,MAAO,EACPC,MAAO,GAGX,IAAIC,EAAQ,SAAUzY,GACpB,OAAO0Y,OAAOJ,EAAMK,QAAQ7X,EAAG,IAAMd,KAEvC,OAAOmK,GAAGsO,EAAM,GAAIA,EAAM,KAExBI,GAAS,SAAUC,EAAgBR,GACrC,IAAIS,EAAe3U,OAAOkU,GAAOU,cACjC,OAA8B,IAA1BF,EAAe1a,OACV6a,KAEF3Q,GAAOwQ,EAAgBC,IAE5BE,GAAU,WACZ,OAAO9O,GAAG,EAAG,IAEXA,GAAK,SAAUoO,EAAOC,GACxB,MAAO,CACLD,MAAOA,EACPC,MAAOA,IAGPU,GAAU,CACZ/O,GAAIA,GACJ0O,OAAQA,GACRI,QAASA,IAGPE,GAAO,OACPC,GAAS,SACTC,GAAK,KACLC,GAAQ,QACRC,GAAU,UACVC,GAAS,SACTC,GAAY,SAAU7U,EAAM8U,GAC9B,OAAO,WACL,OAAOA,IAAY9U,IAGnB+U,GAAY,WACd,OAAOf,GAAK,CACVc,aAASrX,EACTwX,QAASX,GAAQD,aAGjBL,GAAO,SAAUkB,GACnB,IAAIJ,EAAUI,EAAKJ,QACfG,EAAUC,EAAKD,QACnB,MAAO,CACLH,QAASA,EACTG,QAASA,EACTE,OAAQN,GAAUN,GAAMO,GACxBM,SAAUP,GAAUL,GAAQM,GAC5BO,KAAMR,GAAUJ,GAAIK,GACpBQ,QAAST,GAAUH,GAAOI,GAC1BS,UAAWV,GAAUF,GAASG,GAC9BU,SAAUX,GAAUD,GAAQE,KAG5BW,GAAU,CACZpB,QAASU,GACTxP,GAAIyO,GACJO,KAAM7a,EAAS6a,IACfC,OAAQ9a,EAAS8a,IACjBC,GAAI/a,EAAS+a,IACbC,MAAOhb,EAASgb,IAChBC,QAASjb,EAASib,IAClBC,OAAQlb,EAASkb,KAGfc,GAAU,UACVC,GAAM,MACNC,GAAU,UACVC,GAAQ,QACRC,GAAM,MACNC,GAAU,UACVC,GAAU,UACVC,GAAW,WACXC,GAAO,SAAUlW,EAAM8U,GACzB,OAAO,WACL,OAAOA,IAAY9U,IAGnBmW,GAAY,WACd,OAAOnB,GAAK,CACVF,aAASrX,EACTwX,QAASX,GAAQD,aAGjBW,GAAO,SAAUE,GACnB,IAAIJ,EAAUI,EAAKJ,QACfG,EAAUC,EAAKD,QACnB,MAAO,CACLH,QAASA,EACTG,QAASA,EACToB,UAAWH,GAAKR,GAASZ,GACzBwB,MAAOJ,GAAKP,GAAKb,GACjByB,UAAWL,GAAKN,GAASd,GACzB0B,MAAON,GAAKJ,GAAKhB,GACjB2B,QAASP,GAAKL,GAAOf,GACrB4B,UAAWR,GAAKH,GAASjB,GACzB6B,UAAWT,GAAKF,GAASlB,GACzB8B,WAAYV,GAAKD,GAAUnB,KAG3B+B,GAAkB,CACpBxC,QAAS8B,GACT5Q,GAAIyP,GACJU,QAAShc,EAASgc,IAClBC,IAAKjc,EAASic,IACdC,QAASlc,EAASkc,IAClBC,MAAOnc,EAASmc,IAChBC,IAAKpc,EAASoc,IACdC,QAASrc,EAASqc,IAClBC,QAAStc,EAASsc,IAClBC,SAAUvc,EAASuc,KAGjBa,GAAa,SAAUC,EAAIC,EAASC,EAAWC,GACjD,IAAIC,EAASJ,EAAGT,UAAuC,IAA5B,QAAQ9C,KAAKyD,GACpCG,EAAWL,EAAGT,UAAYa,EAC1BE,EAAWN,EAAGT,SAAWS,EAAGR,YAC5Be,EAAUD,GAAYH,EAAW,oBACjCK,EAAWJ,IAAWC,GAAYC,GAAYH,EAAW,4BACzDM,EAAUJ,GAAYC,IAAaE,EACnCE,EAAaT,EAAQxB,YAAcuB,EAAGT,UAAyC,IAA9B,UAAU9C,KAAKyD,GAChES,GAAaF,IAAYD,IAAaE,EAC1C,MAAO,CACLN,OAAQzd,EAASyd,GACjBC,SAAU1d,EAAS0d,GACnBG,SAAU7d,EAAS6d,GACnBC,QAAS9d,EAAS8d,GAClBF,QAAS5d,EAAS4d,GAClBf,UAAWQ,EAAGR,UACdD,MAAOS,EAAGT,MACVqB,UAAWje,EAAS+d,GACpBC,UAAWhe,EAASge,KAIpBE,GAAW,SAAUC,EAAYZ,GACnC,IAAIvD,EAAQlU,OAAOyX,GAAW7C,cAC9B,OAAOlS,EAAK2V,GAAY,SAAUC,GAChC,OAAOA,EAAUC,OAAOrE,OAGxBsE,GAAgB,SAAUC,EAAUhB,GACtC,OAAOW,GAASK,EAAUhB,GAAWrZ,KAAI,SAAUoZ,GACjD,IAAI/B,EAAUX,GAAQL,OAAO+C,EAAQ9C,eAAgB+C,GACrD,MAAO,CACLnC,QAASkC,EAAQhX,KACjBiV,QAASA,OAIXiD,GAAW,SAAUC,EAAMlB,GAC7B,OAAOW,GAASO,EAAMlB,GAAWrZ,KAAI,SAAUmZ,GAC7C,IAAI9B,EAAUX,GAAQL,OAAO8C,EAAG7C,eAAgB+C,GAChD,MAAO,CACLnC,QAASiC,EAAG/W,KACZiV,QAASA,OAIXmD,GAAW,CACbJ,cAAeA,GACfE,SAAUA,IAGRW,GAAqB,sCACrBC,GAAgB,SAAUhU,GAC5B,OAAO,SAAUiU,GACf,OAAO3X,EAAS2X,EAAUjU,KAG1BmT,GAAW,CACb,CACEjY,KAAM,OACNkU,eAAgB,CAAC,kCACjB6D,OAAQ,SAAUgB,GAChB,OAAO3X,EAAS2X,EAAU,UAAY3X,EAAS2X,EAAU,WAAa3X,EAAS2X,EAAU,WAAa3X,EAAS2X,EAAU,iBAG7H,CACE/Y,KAAM,SACNkU,eAAgB,CACd,kCACA2E,IAEFd,OAAQ,SAAUgB,GAChB,OAAO3X,EAAS2X,EAAU,YAAc3X,EAAS2X,EAAU,iBAG/D,CACE/Y,KAAM,KACNkU,eAAgB,CACd,iCACA,8BAEF6D,OAAQ,SAAUgB,GAChB,OAAO3X,EAAS2X,EAAU,SAAW3X,EAAS2X,EAAU,aAG5D,CACE/Y,KAAM,QACNkU,eAAgB,CACd2E,GACA,kCAEFd,OAAQe,GAAc,UAExB,CACE9Y,KAAM,UACNkU,eAAgB,CAAC,uCACjB6D,OAAQe,GAAc,YAExB,CACE9Y,KAAM,SACNkU,eAAgB,CACd2E,GACA,iCAEFd,OAAQ,SAAUgB,GAChB,OAAQ3X,EAAS2X,EAAU,WAAa3X,EAAS2X,EAAU,aAAe3X,EAAS2X,EAAU,kBAI/FZ,GAAO,CACT,CACEnY,KAAM,UACN+X,OAAQe,GAAc,OACtB5E,eAAgB,CAAC,0CAEnB,CACElU,KAAM,MACN+X,OAAQ,SAAUgB,GAChB,OAAO3X,EAAS2X,EAAU,WAAa3X,EAAS2X,EAAU,SAE5D7E,eAAgB,CACd,sCACA,+BACA,wCAGJ,CACElU,KAAM,UACN+X,OAAQe,GAAc,WACtB5E,eAAgB,CAAC,sCAEnB,CACElU,KAAM,MACN+X,OAAQe,GAAc,YACtB5E,eAAgB,CAAC,wCAEnB,CACElU,KAAM,QACN+X,OAAQe,GAAc,SACtB5E,eAAgB,IAElB,CACElU,KAAM,UACN+X,OAAQe,GAAc,SACtB5E,eAAgB,IAElB,CACElU,KAAM,UACN+X,OAAQe,GAAc,WACtB5E,eAAgB,IAElB,CACElU,KAAM,WACN+X,OAAQe,GAAc,QACtB5E,eAAgB,CAAC,qCAGjB8E,GAAe,CACjBf,SAAUve,EAASue,IACnBE,KAAMze,EAASye,KAGbc,GAAW,SAAUhC,EAAWC,GAClC,IAAIe,EAAWe,GAAaf,WACxBE,EAAOa,GAAab,OACpBnB,EAAUoB,GAASJ,cAAcC,EAAUhB,GAAWha,KAAKwY,GAAQpB,QAASoB,GAAQlQ,IACpFwR,EAAKqB,GAASF,SAASC,EAAMlB,GAAWha,KAAK4Z,GAAgBxC,QAASwC,GAAgBtR,IACtF2T,EAAapC,GAAWC,EAAIC,EAASC,EAAWC,GACpD,MAAO,CACLF,QAASA,EACTD,GAAIA,EACJmC,WAAYA,IAGZC,GAAoB,CAAElF,OAAQgF,IAE9B/B,GAAa,SAAUkC,GACzB,OAAOtgB,EAAWugB,OAAOC,WAAWF,GAAOG,SAEzCC,GAAWnI,EAAK8H,GAAkBlF,OAAOnb,EAAW2gB,UAAUxC,UAAWC,KACzEwC,GAAW,WACb,OAAOF,GAAS5V,OAGd6e,GAAY,WAEd,IADA,IAAI7a,EAAS,GACJtO,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACtCsO,EAAOtO,GAAMC,UAAUD,GAEzB,OAAO,WAEL,IADA,IAAIqK,EAAS,GACJrK,EAAK,EAAGA,EAAKC,UAAUC,OAAQF,IACtCqK,EAAOrK,GAAMC,UAAUD,GAEzB,GAAIsO,EAAOpO,SAAWmK,EAAOnK,OAC3B,MAAM,IAAIe,MAAM,mDAAqDqN,EAAOpO,OAAS,WAAamK,EAAOnK,OAAS,cAEpH,IAAIkpB,EAAS,GAIb,OAHA7kB,EAAK+J,GAAQ,SAAU5H,EAAM5E,GAC3BsnB,EAAO1iB,GAAQtG,EAASiK,EAAOvI,OAE1BsnB,IAIP1P,GAA0B,SAAU3W,EAAGuC,EAAG4F,GAC5C,OAAkD,KAA1CnI,EAAE2W,wBAAwBpU,GAAK4F,IAErCyO,GAA4B,SAAU5W,EAAGuC,GAC3C,OAAOoU,GAAwB3W,EAAGuC,EAAG9F,EAAWoa,KAAKC,8BAEnDC,GAA8B,SAAU/W,EAAGuC,GAC7C,OAAOoU,GAAwB3W,EAAGuC,EAAG9F,EAAWoa,KAAKG,iCAEnDH,GAAO,CACTD,0BAA2BA,GAC3BG,4BAA6BA,IAG3BkH,GAAYN,EACZW,GAAahB,EACbzc,GAAK,SAAU0d,EAASC,GAC1B,IAAInI,EAAMkI,EAAQlI,MAClB,GAAIA,EAAIoI,WAAaR,GACnB,OAAO,EAEP,IAAIS,EAAOrI,EACX,QAAqBjV,IAAjBsd,EAAKxB,QACP,OAAOwB,EAAKxB,QAAQsB,GACf,QAA+Bpd,IAA3Bsd,EAAKC,kBACd,OAAOD,EAAKC,kBAAkBH,GACzB,QAAmCpd,IAA/Bsd,EAAKE,sBACd,OAAOF,EAAKE,sBAAsBJ,GAC7B,QAAgCpd,IAA5Bsd,EAAKG,mBACd,OAAOH,EAAKG,mBAAmBL,GAE/B,MAAM,IAAItgB,MAAM,mCAIlB4gB,GAAiB,SAAUzI,GAC7B,OAAOA,EAAIoI,WAAaR,IAAa5H,EAAIoI,WAAaH,IAAwC,IAA1BjI,EAAI0I,mBAEtElhB,GAAM,SAAU2gB,EAAUlJ,GAC5B,IAAIjK,OAAiBjK,IAAVkU,EAAsB7Y,EAAW+Y,SAAWF,EAAMe,MAC7D,OAAOyI,GAAezT,GAAQ,GAAK9J,EAAI8J,EAAK2T,iBAAiBR,GAAW9H,EAAQZ,UAG9ExV,GAAK,SAAU6e,EAAIC,GACrB,OAAOD,EAAG9I,QAAU+I,EAAG/I,OAErBgJ,GAAkB,SAAUF,EAAIC,GAClC,IAAIE,EAAKH,EAAG9I,MACRkJ,EAAKH,EAAG/I,MACZ,OAAOiJ,IAAOC,GAAaD,EAAGva,SAASwa,IAErCC,GAAa,SAAUL,EAAIC,GAC7B,OAAOvI,GAAKE,4BAA4BoI,EAAG9I,MAAO+I,EAAG/I,QAEnDsE,GAAU0C,KAAW1C,QAGrB4M,IAFa5M,GAAQ3B,OAEZ,SAAUuF,GACrB,OAAO9b,EAAOD,KAAK+b,EAAQlI,MAAMyJ,YAAYve,IAAImV,EAAQZ,WAEvDm9I,GAAU,SAAU10I,EAASqB,GAC/B,IAAIC,EAAO3b,EAAW0b,GAAUA,EAASzhB,EACrCkY,EAAMkI,EAAQlI,MACd5M,EAAM,GACV,MAA0B,OAAnB4M,EAAIyJ,iBAA0C1e,IAAnBiV,EAAIyJ,WAA0B,CAC9D,IAAIizM,EAAY18M,EAAIyJ,WAChB7gB,EAAIyX,EAAQZ,QAAQi9M,GAExB,GADAtpN,EAAI9E,KAAK1F,IACO,IAAZ4gB,EAAK5gB,GACP,MAEAoX,EAAM08M,EAGV,OAAOtpN,GAELigM,GAAW,SAAUnrL,GACvB,IAAI8pW,EAAa,SAAUz/V,GACzB,OAAOhnB,EAAOgnB,GAAU,SAAUprB,GAChC,OAAQ8C,GAAGie,EAAS/gB,OAGxB,OAAO+pB,GAAOhJ,GAAShd,IAAImmB,IAAUnmB,IAAI8mX,GAAYtnX,MAAM,KAEzD2mB,GAAW,SAAUnJ,GACvB,OAAOhd,EAAIgd,EAAQlI,MAAMR,WAAYa,EAAQZ,UAI3CjW,IAFOumB,GAAU,UAAW,UAExB,SAAUgU,EAAMC,GACtB,IAAIC,EAAY,SAAU98B,EAAGgZ,GAC3B,OAAO3W,GAAEu6B,EAAO58B,EAAG68B,EAAM7jB,IAE3B,MAAO,CACL4jB,KAAM/8B,EAAS+8B,GACfC,IAAKh9B,EAASg9B,GACdC,UAAWA,KAGXC,GAAW16B,GAGXu0B,IADW/W,KAAW1C,QAAQxB,WACtB,SAAUyjB,GACpB,IAAIrnB,OAAenU,IAATw7B,EAAqBA,EAAKvmB,MAAQ5Z,EAAW+Y,SACnDhY,EAAI+X,EAAI2f,KAAK+F,YAAc1lB,EAAI8R,gBAAgB4T,WAC/CzkB,EAAIjB,EAAI2f,KAAK6F,WAAaxlB,EAAI8R,gBAAgB0T,UAClD,OAAOR,GAAS/8B,EAAGgZ,KAGjBqf,GAAQ,SAAUmH,GACpB,IAAIpC,OAAex5B,IAAT47B,EAAqBvgC,EAAWugB,OAASggB,EACnD,OAAOv6B,EAAOD,KAAKo4B,EAAI,oBAErBqC,GAAS,SAAUz/B,EAAGgZ,EAAG0mB,EAAOrD,GAClC,MAAO,CACLr8B,EAAGH,EAASG,GACZgZ,EAAGnZ,EAASmZ,GACZ0mB,MAAO7/B,EAAS6/B,GAChBrD,OAAQx8B,EAASw8B,GACjBsD,MAAO9/B,EAASG,EAAI0/B,GACpBE,OAAQ//B,EAASmZ,EAAIqjB,KAGrBwD,GAAY,SAAUL,GACxB,IAAIpC,OAAex5B,IAAT47B,EAAqBvgC,EAAWugB,OAASggB,EAC/CznB,EAAMqlB,EAAIplB,SACV8nB,EAASlJ,GAAM1d,EAAQZ,QAAQP,IACnC,OAAOsgB,GAAM+E,GAAKh6B,MAAK,WACrB,IAAIyU,EAAOulB,EAAIplB,SAAS6R,gBACpB6V,EAAQ7nB,EAAKkoB,YACb1D,EAASxkB,EAAKmoB,aAClB,OAAOP,GAAOK,EAAOlD,OAAQkD,EAAOjD,MAAO6C,EAAOrD,MACjD,SAAU4D,GACX,OAAOR,GAAO9Q,KAAKqN,IAAIiE,EAAeC,SAAUJ,EAAOlD,QAASjO,KAAKqN,IAAIiE,EAAeE,QAASL,EAAOjD,OAAQoD,EAAeP,MAAOO,EAAe5D,YAGrJrvB,GAAS,SAAU7G,EAAMovF,EAAU/1D,GACrC,OAAOnH,GAAMmH,GAAMz7B,KAAI,SAAUk8B,GAC/B,IAAI/c,EAAU,SAAUnhB,GACtB,OAAOs8B,GAAat8B,IAGtB,OADAk+B,EAAenB,iBAAiB34B,EAAM+c,GAC/B,CACL6b,OAAQ,WACN,OAAOkB,EAAef,oBAAoB/4B,EAAM+c,QAGnD1f,YAAW,WACZ,MAAO,CAAEu7B,OAAQ7/B,OAIjB2B,GAAWC,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtC6yE,GAAWhzE,QAAQC,KAAKC,MAAMC,QAAQ,eAEtC8yE,GAAWjzE,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtC6pX,GAA6B,SAAU52S,EAAQzjE,GACjDyjE,EAAOqf,KAAK,yBAA0B,CAAE9iF,MAAOA,KAE7CqjF,GAAS,CAAEg3R,2BAA4BA,IAEvC90J,GAAY,SAAUl+M,EAAOkP,EAAW5E,GAC1C,OAAOhe,EAAOqxJ,GAAQ39I,EAAOsK,GAAS4E,IAEpC+jW,GAAa,SAAUjzW,EAAOkP,GAChC,OAAO5iB,EAAO8nM,GAASp0L,GAAQkP,IAG7BhE,GAAQ,SAAUhC,GACpB,OAAO3gB,GAAI2gB,IAETi1M,GAAc,SAAUn+M,EAAOkJ,EAAUoB,GAC3C,OAAO4zM,GAAUl+M,GAAO,SAAU/V,GAChC,OAAOsB,GAAGtB,EAAGif,KACZoB,IAED4oW,GAAa,SAAUlzW,EAAOkJ,GAChC,OAAO+pW,GAAWjzW,GAAO,SAAU/V,GACjC,OAAOsB,GAAGtB,EAAGif,OAIbuV,GAAO,qCACP00V,GAAgB,0BAChBC,GAAmB,+BACnBC,GAAiB,iJACjBC,GAAa,+CACb1uW,GAAYo3D,GAAS52D,GAAGR,YACxB2uW,GAAa,SAAUC,GACzB,IAAItmS,EAAQ93D,GAAMo+V,EAAY,oBAC9B,YAAiB1nX,IAAVohF,GAAiC,KAAVA,EAAe,oBAAsBA,EAAQ,aAAeomS,IAExFG,GAAgB,SAAU1yW,EAAKyT,EAAWg/V,GAC5C,IAAIE,EAAkB,SAAUzqW,GAC9B,OAAOiqW,GAAWjqW,EAAS,4BAEzB0qW,EAAU,SAAUC,GACtB,OAAO,SAAU3qW,GACf,IAAIiS,EAASlH,EAAM/K,EAAS,SACxB4qW,OAAoB/nX,IAAXovB,EAAuB,YAAcA,EAAOjU,OACrD4sW,IAAWD,IAGbh0W,EAAIqJ,EAASwV,GAAMo1V,GACnB3+V,GAAOjM,EAASlI,EAAIsgI,WAAWuyO,OAIjC11J,EAAYC,GAAY3pM,EAAW,KACnC4/K,EAAWjoM,EAAK+xN,EAAWw1J,GAC3B1qI,EAAUuqI,GAAWC,GACzBtnX,EAAKkoM,EAAUu/K,EAAQR,KACvBjnX,EAAKgyN,EAAWy1J,EAAQP,GAAmBC,GAAiBrqI,IAC5D,IAAI8qI,GAAgC,IAAdlvW,GAAqB,GAAKwuW,GAChDO,EAAQG,EAAkBT,GAAiBrqI,EAA3C2qI,CAAoDn/V,IAElDu/V,GAAgB,SAAUhzW,GAC5B,IAAIizW,EAAe9oW,GAAM,IAAMuT,GAAO,KACtCvyB,EAAK8nX,GAAc,SAAU/qW,GAC3B,IAAI4iC,EAAU73B,EAAM/K,EAASwV,IACb,cAAZotB,EACF32B,GAAOjM,EAASlI,EAAIsgI,WAAWx1F,IAE/Bl4B,EAAO1K,EAAS,SAElB0K,EAAO1K,EAASwV,QAGhBw1V,GAAO,CACTR,cAAeA,GACfM,cAAeA,IAGb72S,GAAMn0E,GAASm0E,IACfg3S,GAAe,WACjB,IAAI14W,EAAKusB,GAAU5gC,EAAWugB,QAC9B,MAAO,CACLxf,EAAGsT,EAAGtT,IACNgZ,EAAG1F,EAAG0F,MAGNizW,GAAe,SAAUt+U,GAC3B1uC,EAAWugB,OAAO8f,SAASqO,EAAI3tC,EAAG2tC,EAAI30B,IAEpCkzW,GAAiB7zV,KAAQj1B,MAAK,WAChC,MAAO,CACLa,KAAM/E,EACN6/B,OAAQ7/B,MAET,SAAU+gC,GACX,IAAI+iI,EAAkBljK,IAClBqsX,EAAevB,IACfwB,EAAexB,IACfyB,EAAgB,WAClBptX,EAAW+Y,SAAS0f,KAAK6F,UAAY,EACrCt+B,EAAW+Y,SAAS6R,gBAAgB0T,UAAY,GAE9C+uV,EAAwB,WAC1BrtX,EAAWugB,OAAO4vJ,uBAAsB,WACtCpM,EAAgBlyH,IAAG,SAAUxkB,GAC3B,OAAOU,GAAOV,EAAW,CACvBuQ,IAAKoD,EAAe3C,UAAY,KAChCV,KAAMqD,EAAe5C,WAAa,KAClChB,OAAQ4D,EAAe5D,OAAS,KAChCqD,MAAOO,EAAeP,MAAQ,cAKlCinB,EAASotB,GAASwH,UAAS,WAC7B8wS,IACAC,MACC,IACCroX,EAAO,SAAU8c,GACnBiiJ,EAAgBtrJ,IAAIqJ,GACpB4lC,IACAwlU,EAAaz0W,IAAI1K,GAAO,WACxBo/W,EAAa10W,IAAI1K,GAAO,YAEtB+xB,EAAS,WACXikI,EAAgBlyH,IAAG,WACjBq7U,EAAa/oU,QACbgpU,EAAahpU,WAEf4/G,EAAgB5/G,SAElB,MAAO,CACLn/C,KAAMA,EACN86B,OAAQA,MAGRwtV,GAAmB,SAAUr4S,EAAQs2S,GACvC,IAEIgC,EACAxpN,EAAiBvuB,EAAQg4O,EAHzB/0V,EAAOz4B,EAAW+Y,SAAS0f,KAC3B7N,EAAkB5qB,EAAW+Y,SAAS6R,gBAG1Cm5I,EAAkB9uF,EAAOo4B,eACzB,IAAIogR,EAAmBxzW,EAAQZ,QAAQ0qJ,GACnC2pN,EAAiBnC,EAAgBzgX,MACjCuhX,EAAapyW,EAAQZ,QAAQ47D,EAAOv8C,WACpCla,EAAUq2D,GAASz0D,WAAW5B,UAIlC,GAHA+uW,EAAuBxpN,EAAgBzrI,MACvCk9G,EAASvgE,EAAOyiE,0BAA0BrsH,WAC1CmiW,EAAch4O,EAAOl9G,MAChBo1V,EAuBHF,EAAY/sV,MAAQitV,EAAeC,YACnCH,EAAYpwV,OAASswV,EAAe5e,aACpCye,EAAqB9sV,MAAQitV,EAAeE,eAC5CL,EAAqBnwV,OAASswV,EAAeG,gBAC7CN,EAAqB3vV,IAAM8vV,EAAeI,aAC1CP,EAAqB5vV,KAAO+vV,EAAeK,cACvCvvW,GACFsuW,GAAKF,cAAc33S,EAAOr7D,KAE5Bm8D,GAAIk6F,YAAYx3I,EAAM,kBACtBs9C,GAAIk6F,YAAYrlJ,EAAiB,kBACjCmrD,GAAIk6F,YAAYlM,EAAiB,kBACjCipN,GAAaU,EAAehrN,WAC5B6oN,EAAgB9yW,IAAI,MACpBo8E,GAAOg3R,2BAA2B52S,GAAQ,GAC1Cg4S,GAAentV,SACfm1C,EAAOljC,IAAI,SAAUk7U,GAAentV,YAvCjB,CACnB,IAAIkuV,EAAoB,CACtBtrN,UAAWqqN,KACXa,eAAgBL,EAAqB9sV,MACrCotV,gBAAiBN,EAAqBnwV,OACtC0wV,aAAcP,EAAqB3vV,IACnCmwV,cAAeR,EAAqB5vV,KACpCgwV,YAAaH,EAAY/sV,MACzBquU,aAAc0e,EAAYpwV,QAExB5e,GACFsuW,GAAKR,cAAcr3S,EAAOr7D,IAAK6zW,EAAkBpB,GAEnDmB,EAAY/sV,MAAQ+sV,EAAYpwV,OAAS,OACzCmwV,EAAqB9sV,MAAQ8sV,EAAqBnwV,OAAS,GAC3D24C,GAAIi6F,SAASv3I,EAAM,kBACnBs9C,GAAIi6F,SAASplJ,EAAiB,kBAC9BmrD,GAAIi6F,SAASjM,EAAiB,kBAC9BkpN,GAAejoX,KAAKyoX,GACpBx4S,EAAOpjC,GAAG,SAAUo7U,GAAentV,QACnCyrV,EAAgB9yW,IAAIu1W,GACpBn5R,GAAOg3R,2BAA2B52S,GAAQ,KAqB1C0qH,GAAU,CAAE2tL,iBAAkBA,IAE9BtrS,GAAW,SAAU/M,EAAQs2S,GAC/Bt2S,EAAOugB,WAAW,iBAAiB,WACjCmqG,GAAQ2tL,iBAAiBr4S,EAAQs2S,OAGjC1sL,GAAW,CAAE78G,SAAUA,IAEvBgzI,GAAmB,SAAU//I,EAAQs2S,GACvC,OAAO,SAAUruV,GACfA,EAAI+wD,UAAoC,OAA1Bs9R,EAAgBzgX,OAC9B,IAAI65M,EAAsB,SAAU7hN,GAClC,OAAOo6B,EAAI+wD,UAAUnrF,EAAE0O,QAGzB,OADAyjE,EAAOpjC,GAAG,yBAA0B8yK,GAC7B,WACL,OAAO1vI,EAAOljC,IAAI,yBAA0B4yK,MAI9CxsH,GAAa,SAAUljB,EAAQs2S,GACjCt2S,EAAOiN,GAAGC,SAAS8vF,kBAAkB,aAAc,CACjDv4J,KAAM,aACNytE,SAAU,eACVhN,SAAU,WACR,OAAOlF,EAAOkhB,YAAY,kBAE5BhK,QAAS6oI,GAAiB//I,EAAQs2S,KAEpCt2S,EAAOiN,GAAGC,SAASolF,gBAAgB,aAAc,CAC/CviF,QAAS,aACTjL,KAAM,aACNI,SAAU,WACR,OAAOlF,EAAOkhB,YAAY,kBAE5BhK,QAAS6oI,GAAiB//I,EAAQs2S,MAGlCjsL,GAAU,CAAEt9G,SAAUmW,IAE1B,SAASonG,KACP/4F,EAAOjvE,IAAI,cAAc,SAAU09C,GACjC,IAAIs2S,EAAkBhzW,EAAK,MAC3B,OAAI08D,EAAOC,SAASyC,SAGpBknH,GAAS78G,SAAS/M,EAAQs2S,GAC1BjsL,GAAQt9G,SAAS/M,EAAQs2S,GACzBt2S,EAAOw1L,YAAY,eAAgB,GAAI,kBAJ9B3pE,EAAIh2L,IAAIygX,MASrBhsL,MA7pCJ,CA+pCEh/K","file":"js/chunk-482af9c8.8786615a.js","sourcesContent":["/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\n\n var noop = function () {\n };\n var noarg = function (f) {\n return function () {\n return f();\n };\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 global$1 = tinymce.util.Tools.resolve('tinymce.ThemeManager');\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 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 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 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 isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n var isArrayOf = function (value, pred) {\n if (isArray(value)) {\n for (var i = 0, len = value.length; i < len; ++i) {\n if (pred(value[i]) !== true) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\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 range = function (num, f) {\n var r = [];\n for (var i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n var chunk = function (array, size) {\n var r = [];\n for (var i = 0; i < array.length; i += size) {\n var s = nativeSlice.call(array, i, i + size);\n r.push(s);\n }\n return r;\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 return flatten(map(xs, f));\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 pure = function (x) {\n return [x];\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 var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Option.none();\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\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 var map$1 = 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$1(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var mapToArray = function (obj, f) {\n var r = [];\n each$1(obj, function (value, name) {\n r.push(f(value, name));\n });\n return r;\n };\n var find$1 = function (obj, pred) {\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 if (pred(x, i, obj)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var values = function (obj) {\n return mapToArray(obj, function (v) {\n return v;\n });\n };\n var get = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n var hasNonNullableKey = function (obj, key) {\n return has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n };\n\n var generate = 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 };\n\n var hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n var shallow = function (old, nu) {\n return nu;\n };\n var deep = function (old, nu) {\n var bothObjects = isObject(old) && isObject(nu);\n return bothObjects ? deepMerge(old, nu) : 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$1.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var deepMerge = baseMerge(deep);\n var merge = baseMerge(shallow);\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 SimpleResultType;\n (function (SimpleResultType) {\n SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';\n SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';\n }(SimpleResultType || (SimpleResultType = {})));\n var fold = function (res, onError, onValue) {\n return res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n };\n var partition$1 = function (results) {\n var values = [];\n var errors = [];\n each(results, function (obj) {\n fold(obj, function (err) {\n return errors.push(err);\n }, function (val) {\n return values.push(val);\n });\n });\n return {\n values: values,\n errors: errors\n };\n };\n var mapError = function (res, f) {\n if (res.stype === SimpleResultType.Error) {\n return {\n stype: SimpleResultType.Error,\n serror: f(res.serror)\n };\n } else {\n return res;\n }\n };\n var map$2 = function (res, f) {\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n } else {\n return res;\n }\n };\n var bind$1 = function (res, f) {\n if (res.stype === SimpleResultType.Value) {\n return f(res.svalue);\n } else {\n return res;\n }\n };\n var bindError = function (res, f) {\n if (res.stype === SimpleResultType.Error) {\n return f(res.serror);\n } else {\n return res;\n }\n };\n var svalue = function (v) {\n return {\n stype: SimpleResultType.Value,\n svalue: v\n };\n };\n var serror = function (e) {\n return {\n stype: SimpleResultType.Error,\n serror: e\n };\n };\n var toResult = function (res) {\n return fold(res, Result.error, Result.value);\n };\n var fromResult = function (res) {\n return res.fold(serror, svalue);\n };\n var SimpleResult = {\n fromResult: fromResult,\n toResult: toResult,\n svalue: svalue,\n partition: partition$1,\n serror: serror,\n bind: bind$1,\n bindError: bindError,\n map: map$2,\n mapError: mapError,\n fold: fold\n };\n\n var adt = Adt.generate([\n { strict: [] },\n { defaultedThunk: ['fallbackThunk'] },\n { asOption: [] },\n { asDefaultedOptionThunk: ['fallbackThunk'] },\n { mergeWithThunk: ['baseThunk'] }\n ]);\n var defaulted = function (fallback) {\n return adt.defaultedThunk(constant(fallback));\n };\n var mergeWith = function (base) {\n return adt.mergeWithThunk(constant(base));\n };\n var strict = adt.strict;\n var asOption = adt.asOption;\n var defaultedThunk = adt.defaultedThunk;\n var asDefaultedOptionThunk = adt.asDefaultedOptionThunk;\n var mergeWithThunk = adt.mergeWithThunk;\n\n var exclude = function (obj, fields) {\n var r = {};\n each$1(obj, function (v, k) {\n if (!contains(fields, k)) {\n r[k] = v;\n }\n });\n return r;\n };\n\n var wrap = function (key, value) {\n var _a;\n return _a = {}, _a[key] = value, _a;\n };\n var wrapAll = function (keyvalues) {\n var r = {};\n each(keyvalues, function (kv) {\n r[kv.key] = kv.value;\n });\n return r;\n };\n\n var comparison = Adt.generate([\n {\n bothErrors: [\n 'error1',\n 'error2'\n ]\n },\n {\n firstError: [\n 'error1',\n 'value2'\n ]\n },\n {\n secondError: [\n 'value1',\n 'error2'\n ]\n },\n {\n bothValues: [\n 'value1',\n 'value2'\n ]\n }\n ]);\n var partition$2 = function (results) {\n var errors = [];\n var values = [];\n each(results, function (result) {\n result.fold(function (err) {\n errors.push(err);\n }, function (value) {\n values.push(value);\n });\n });\n return {\n errors: errors,\n values: values\n };\n };\n\n var exclude$1 = function (obj, fields) {\n return exclude(obj, fields);\n };\n var wrap$1 = function (key, value) {\n return wrap(key, value);\n };\n var wrapAll$1 = function (keyvalues) {\n return wrapAll(keyvalues);\n };\n var mergeValues = function (values, base) {\n return values.length === 0 ? Result.value(base) : Result.value(deepMerge(base, merge.apply(undefined, values)));\n };\n var mergeErrors = function (errors) {\n return Result.error(flatten(errors));\n };\n var consolidate = function (objs, base) {\n var partitions = partition$2(objs);\n return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base);\n };\n\n var mergeValues$1 = function (values, base) {\n return values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge.apply(undefined, values))) : SimpleResult.svalue(base);\n };\n var mergeErrors$1 = function (errors) {\n return compose(SimpleResult.serror, flatten)(errors);\n };\n var consolidateObj = function (objects, base) {\n var partition = SimpleResult.partition(objects);\n return partition.errors.length > 0 ? mergeErrors$1(partition.errors) : mergeValues$1(partition.values, base);\n };\n var consolidateArr = function (objects) {\n var partitions = SimpleResult.partition(objects);\n return partitions.errors.length > 0 ? mergeErrors$1(partitions.errors) : SimpleResult.svalue(partitions.values);\n };\n var ResultCombine = {\n consolidateObj: consolidateObj,\n consolidateArr: consolidateArr\n };\n\n var formatObj = function (input) {\n return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2);\n };\n var formatErrors = function (errors) {\n var es = errors.length > 10 ? errors.slice(0, 10).concat([{\n path: [],\n getErrorInfo: function () {\n return '... (only showing first ten failures)';\n }\n }]) : errors;\n return map(es, function (e) {\n return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n });\n };\n\n var nu = function (path, getErrorInfo) {\n return SimpleResult.serror([{\n path: path,\n getErrorInfo: getErrorInfo\n }]);\n };\n var missingStrict = function (path, key, obj) {\n return nu(path, function () {\n return 'Could not find valid *strict* value for \"' + key + '\" in ' + formatObj(obj);\n });\n };\n var missingKey = function (path, key) {\n return nu(path, function () {\n return 'Choice schema did not contain choice key: \"' + key + '\"';\n });\n };\n var missingBranch = function (path, branches, branch) {\n return nu(path, function () {\n return 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches);\n });\n };\n var unsupportedFields = function (path, unsupported) {\n return nu(path, function () {\n return 'There are unsupported fields: [' + unsupported.join(', ') + '] specified';\n });\n };\n var custom = function (path, err) {\n return nu(path, function () {\n return err;\n });\n };\n\n var adt$1 = Adt.generate([\n {\n field: [\n 'key',\n 'okey',\n 'presence',\n 'prop'\n ]\n },\n {\n state: [\n 'okey',\n 'instantiator'\n ]\n }\n ]);\n var strictAccess = function (path, obj, key) {\n return get(obj, key).fold(function () {\n return missingStrict(path, key, obj);\n }, SimpleResult.svalue);\n };\n var fallbackAccess = function (obj, key, fallbackThunk) {\n var v = get(obj, key).fold(function () {\n return fallbackThunk(obj);\n }, identity);\n return SimpleResult.svalue(v);\n };\n var optionAccess = function (obj, key) {\n return SimpleResult.svalue(get(obj, key));\n };\n var optionDefaultedAccess = function (obj, key, fallback) {\n var opt = get(obj, key).map(function (val) {\n return val === true ? fallback(obj) : val;\n });\n return SimpleResult.svalue(opt);\n };\n var cExtractOne = function (path, obj, field, strength) {\n return field.fold(function (key, okey, presence, prop) {\n var bundle = function (av) {\n var result = prop.extract(path.concat([key]), strength, av);\n return SimpleResult.map(result, function (res) {\n return wrap(okey, strength(res));\n });\n };\n var bundleAsOption = function (optValue) {\n return optValue.fold(function () {\n var outcome = wrap(okey, strength(Option.none()));\n return SimpleResult.svalue(outcome);\n }, function (ov) {\n var result = prop.extract(path.concat([key]), strength, ov);\n return SimpleResult.map(result, function (res) {\n return wrap(okey, strength(Option.some(res)));\n });\n });\n };\n return function () {\n return presence.fold(function () {\n return SimpleResult.bind(strictAccess(path, obj, key), bundle);\n }, function (fallbackThunk) {\n return SimpleResult.bind(fallbackAccess(obj, key, fallbackThunk), bundle);\n }, function () {\n return SimpleResult.bind(optionAccess(obj, key), bundleAsOption);\n }, function (fallbackThunk) {\n return SimpleResult.bind(optionDefaultedAccess(obj, key, fallbackThunk), bundleAsOption);\n }, function (baseThunk) {\n var base = baseThunk(obj);\n var result = SimpleResult.map(fallbackAccess(obj, key, constant({})), function (v) {\n return deepMerge(base, v);\n });\n return SimpleResult.bind(result, bundle);\n });\n }();\n }, function (okey, instantiator) {\n var state = instantiator(obj);\n return SimpleResult.svalue(wrap(okey, strength(state)));\n });\n };\n var cExtract = function (path, obj, fields, strength) {\n var results = map(fields, function (field) {\n return cExtractOne(path, obj, field, strength);\n });\n return ResultCombine.consolidateObj(results, {});\n };\n var valueThunk = function (getDelegate) {\n var extract = function (path, strength, val) {\n return getDelegate().extract(path, strength, val);\n };\n var toString = function () {\n return getDelegate().toString();\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var value$1 = function (validator) {\n var extract = function (path, strength, val) {\n return SimpleResult.bindError(validator(val, strength), function (err) {\n return custom(path, err);\n });\n };\n var toString = function () {\n return 'val';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var getSetKeys = function (obj) {\n var keys$1 = keys(obj);\n return filter(keys$1, function (k) {\n return hasNonNullableKey(obj, k);\n });\n };\n var objOfOnly = function (fields) {\n var delegate = objOf(fields);\n var fieldNames = foldr(fields, function (acc, f) {\n return f.fold(function (key) {\n return deepMerge(acc, wrap$1(key, true));\n }, constant(acc));\n }, {});\n var extract = function (path, strength, o) {\n var keys = isBoolean(o) ? [] : getSetKeys(o);\n var extra = filter(keys, function (k) {\n return !hasNonNullableKey(fieldNames, k);\n });\n return extra.length === 0 ? delegate.extract(path, strength, o) : unsupportedFields(path, extra);\n };\n return {\n extract: extract,\n toString: delegate.toString\n };\n };\n var objOf = function (fields) {\n var extract = function (path, strength, o) {\n return cExtract(path, o, fields, strength);\n };\n var toString = function () {\n var fieldStrings = map(fields, function (field) {\n return field.fold(function (key, okey, presence, prop) {\n return key + ' -> ' + prop.toString();\n }, function (okey, instantiator) {\n return 'state(' + okey + ')';\n });\n });\n return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var arrOf = function (prop) {\n var extract = function (path, strength, array) {\n var results = map(array, function (a, i) {\n return prop.extract(path.concat(['[' + i + ']']), strength, a);\n });\n return ResultCombine.consolidateArr(results);\n };\n var toString = function () {\n return 'array(' + prop.toString() + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var oneOf = function (props) {\n var extract = function (path, strength, val) {\n var errors = [];\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var res = prop.extract(path, strength, val);\n if (res.stype === SimpleResultType.Value) {\n return res;\n }\n errors.push(res);\n }\n return ResultCombine.consolidateArr(errors);\n };\n var toString = function () {\n return 'oneOf(' + map(props, function (prop) {\n return prop.toString();\n }).join(', ') + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var setOf = function (validator, prop) {\n var validateKeys = function (path, keys) {\n return arrOf(value$1(validator)).extract(path, identity, keys);\n };\n var extract = function (path, strength, o) {\n var keys$1 = keys(o);\n var validatedKeys = validateKeys(path, keys$1);\n return SimpleResult.bind(validatedKeys, function (validKeys) {\n var schema = map(validKeys, function (vk) {\n return adt$1.field(vk, vk, strict(), prop);\n });\n return objOf(schema).extract(path, strength, o);\n });\n };\n var toString = function () {\n return 'setOf(' + prop.toString() + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var anyValue = constant(value$1(SimpleResult.svalue));\n var arrOfObj = compose(arrOf, objOf);\n var state = adt$1.state;\n var field = adt$1.field;\n\n var chooseFrom = function (path, strength, input, branches, ch) {\n var fields = get(branches, ch);\n return fields.fold(function () {\n return missingBranch(path, branches, ch);\n }, function (vp) {\n return vp.extract(path.concat(['branch: ' + ch]), strength, input);\n });\n };\n var choose = function (key, branches) {\n var extract = function (path, strength, input) {\n var choice = get(input, key);\n return choice.fold(function () {\n return missingKey(path, key);\n }, function (chosen) {\n return chooseFrom(path, strength, input, branches, chosen);\n });\n };\n var toString = function () {\n return 'chooseOn(' + key + '). Possible values: ' + keys(branches);\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n\n var _anyValue = value$1(SimpleResult.svalue);\n var arrOfObj$1 = function (objFields) {\n return arrOfObj(objFields);\n };\n var arrOfVal = function () {\n return arrOf(_anyValue);\n };\n var valueThunkOf = valueThunk;\n var valueOf = function (validator) {\n return value$1(function (v) {\n return validator(v).fold(SimpleResult.serror, SimpleResult.svalue);\n });\n };\n var setOf$1 = function (validator, prop) {\n return setOf(function (v) {\n return SimpleResult.fromResult(validator(v));\n }, prop);\n };\n var extract = function (label, prop, strength, obj) {\n var res = prop.extract([label], strength, obj);\n return SimpleResult.mapError(res, function (errs) {\n return {\n input: obj,\n errors: errs\n };\n });\n };\n var asRaw = function (label, prop, obj) {\n return SimpleResult.toResult(extract(label, prop, identity, obj));\n };\n var getOrDie = function (extraction) {\n return extraction.fold(function (errInfo) {\n throw new Error(formatError(errInfo));\n }, identity);\n };\n var asRawOrDie = function (label, prop, obj) {\n return getOrDie(asRaw(label, prop, obj));\n };\n var formatError = function (errInfo) {\n return 'Errors: \\n' + formatErrors(errInfo.errors).join('\\n') + '\\n\\nInput object: ' + formatObj(errInfo.input);\n };\n var chooseProcessor = function (key, branches) {\n return choose(key, branches);\n };\n var choose$1 = function (key, branches) {\n return choose(key, map$1(branches, objOf));\n };\n var anyValue$1 = constant(_anyValue);\n var typedValue = function (validator, expectedType) {\n return value$1(function (a) {\n var actualType = typeof a;\n return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror('Expected type: ' + expectedType + ' but got: ' + actualType);\n });\n };\n var number = typedValue(isNumber, 'number');\n var string = typedValue(isString, 'string');\n var boolean = typedValue(isBoolean, 'boolean');\n var functionProcessor = typedValue(isFunction, 'function');\n var isPostMessageable = function (val) {\n var every = function (iter, callbackFn) {\n var result = iter.next();\n while (!result.done) {\n if (!callbackFn(result.value)) {\n return false;\n }\n result = iter.next();\n }\n return true;\n };\n if (Object(val) !== val) {\n return true;\n }\n switch ({}.toString.call(val).slice(8, -1)) {\n case 'Boolean':\n case 'Number':\n case 'String':\n case 'Date':\n case 'RegExp':\n case 'Blob':\n case 'FileList':\n case 'ImageData':\n case 'ImageBitmap':\n case 'ArrayBuffer':\n return true;\n case 'Array':\n case 'Object':\n return Object.keys(val).every(function (prop) {\n return isPostMessageable(val[prop]);\n });\n case 'Map':\n return every(val.keys(), isPostMessageable) && every(val.values(), isPostMessageable);\n case 'Set':\n return every(val.keys(), isPostMessageable);\n default:\n return false;\n }\n };\n var postMessageable = value$1(function (a) {\n return isPostMessageable(a) ? SimpleResult.svalue(a) : SimpleResult.serror('Expected value to be acceptable for sending via postMessage');\n });\n\n var validateEnum = function (values) {\n return valueOf(function (value) {\n return contains(values, value) ? Result.value(value) : Result.error('Unsupported value: \"' + value + '\", choose one of \"' + values.join(', ') + '\".');\n });\n };\n var strict$1 = function (key) {\n return field(key, key, strict(), anyValue());\n };\n var strictOf = function (key, schema) {\n return field(key, key, strict(), schema);\n };\n var strictNumber = function (key) {\n return strictOf(key, number);\n };\n var strictString = function (key) {\n return strictOf(key, string);\n };\n var strictStringEnum = function (key, values) {\n return field(key, key, strict(), validateEnum(values));\n };\n var strictBoolean = function (key) {\n return strictOf(key, boolean);\n };\n var strictFunction = function (key) {\n return strictOf(key, functionProcessor);\n };\n var forbid = function (key, message) {\n return field(key, key, asOption(), value$1(function (v) {\n return SimpleResult.serror('The field: ' + key + ' is forbidden. ' + message);\n }));\n };\n var strictObjOf = function (key, objSchema) {\n return field(key, key, strict(), objOf(objSchema));\n };\n var strictArrayOfObj = function (key, objFields) {\n return field(key, key, strict(), arrOfObj(objFields));\n };\n var strictArrayOf = function (key, schema) {\n return field(key, key, strict(), arrOf(schema));\n };\n var option = function (key) {\n return field(key, key, asOption(), anyValue());\n };\n var optionOf = function (key, schema) {\n return field(key, key, asOption(), schema);\n };\n var optionNumber = function (key) {\n return optionOf(key, number);\n };\n var optionString = function (key) {\n return optionOf(key, string);\n };\n var optionFunction = function (key) {\n return optionOf(key, functionProcessor);\n };\n var optionArrayOf = function (key, schema) {\n return optionOf(key, arrOf(schema));\n };\n var optionObjOf = function (key, objSchema) {\n return optionOf(key, objOf(objSchema));\n };\n var optionObjOfOnly = function (key, objSchema) {\n return optionOf(key, objOfOnly(objSchema));\n };\n var defaulted$1 = function (key, fallback) {\n return field(key, key, defaulted(fallback), anyValue());\n };\n var defaultedOf = function (key, fallback, schema) {\n return field(key, key, defaulted(fallback), schema);\n };\n var defaultedNumber = function (key, fallback) {\n return defaultedOf(key, fallback, number);\n };\n var defaultedString = function (key, fallback) {\n return defaultedOf(key, fallback, string);\n };\n var defaultedStringEnum = function (key, fallback, values) {\n return defaultedOf(key, fallback, validateEnum(values));\n };\n var defaultedBoolean = function (key, fallback) {\n return defaultedOf(key, fallback, boolean);\n };\n var defaultedFunction = function (key, fallback) {\n return defaultedOf(key, fallback, functionProcessor);\n };\n var defaultedPostMsg = function (key, fallback) {\n return defaultedOf(key, fallback, postMessageable);\n };\n var defaultedArrayOf = function (key, fallback, schema) {\n return defaultedOf(key, fallback, arrOf(schema));\n };\n var defaultedObjOf = function (key, fallback, objSchema) {\n return defaultedOf(key, fallback, objOf(objSchema));\n };\n var state$1 = function (okey, instantiator) {\n return state(okey, instantiator);\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 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 compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.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$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$1(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$1(0, 0);\n };\n var nu$1 = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu$1,\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$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 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$2,\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 chromeos = 'ChromeOS';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$3({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$3 = 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 isChromeOS: isOS(chromeos, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$3,\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 chromeos: constant(chromeos)\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var isDesktop = !isPhone && !isTablet && !iOSwebview;\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 isDesktop: constant(isDesktop)\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 checkRange = function (str, substr, start) {\n if (substr === '') {\n return true;\n }\n if (str.length < substr.length) {\n return false;\n }\n var x = str.substr(start, start + substr.length);\n return x === substr;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n var trim = function (str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$1(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$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(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$1(uastring, 'chrome') && !contains$1(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$1(uastring, 'msie') || contains$1(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$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(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$1(uastring, 'iphone') || contains$1(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('mac os x'),\n versionRegexes: [/.*?mac\\ 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 name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent, mediaMatch) {\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, mediaMatch);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var mediaMatch = function (query) {\n return domGlobals.window.matchMedia(query).matches;\n };\n var platform = Cell(PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch));\n var detect$3 = function () {\n return platform.get();\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 ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\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 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 = detect$3().browser;\n var contains$2 = browser.isIE() ? ieContains : regularContains;\n\n var ancestor = function (scope, transform, 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 var transformed = transform(el);\n if (transformed.isSome()) {\n return transformed;\n } else if (stop(el)) {\n break;\n }\n }\n return Option.none();\n };\n var closest = function (scope, transform, isRoot) {\n var current = transform(scope);\n return current.orThunk(function () {\n return isRoot(scope) ? Option.none() : ancestor(scope, transform, isRoot);\n });\n };\n\n var isSource = function (component, simulatedEvent) {\n return eq(component.element(), simulatedEvent.event().target());\n };\n\n var nu$4 = function (parts) {\n if (!hasNonNullableKey(parts, 'can') && !hasNonNullableKey(parts, 'abort') && !hasNonNullableKey(parts, 'run')) {\n throw new Error('EventHandler defined by: ' + JSON.stringify(parts, null, 2) + ' does not have can, abort, or run!');\n }\n return asRawOrDie('Extracting event.handler', objOfOnly([\n defaulted$1('can', constant(true)),\n defaulted$1('abort', constant(false)),\n defaulted$1('run', noop)\n ]), parts);\n };\n var all$1 = function (handlers, f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return foldl(handlers, function (acc, handler) {\n return acc && f(handler).apply(undefined, args);\n }, true);\n };\n };\n var any = function (handlers, f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return foldl(handlers, function (acc, handler) {\n return acc || f(handler).apply(undefined, args);\n }, false);\n };\n };\n var read = function (handler) {\n return isFunction(handler) ? {\n can: constant(true),\n abort: constant(false),\n run: handler\n } : handler;\n };\n var fuse = function (handlers) {\n var can = all$1(handlers, function (handler) {\n return handler.can;\n });\n var abort = any(handlers, function (handler) {\n return handler.abort;\n });\n var run = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n each(handlers, function (handler) {\n handler.run.apply(undefined, args);\n });\n };\n return nu$4({\n can: can,\n abort: abort,\n run: run\n });\n };\n\n var touchstart = constant('touchstart');\n var touchmove = constant('touchmove');\n var touchend = constant('touchend');\n var touchcancel = constant('touchcancel');\n var mousedown = constant('mousedown');\n var mousemove = constant('mousemove');\n var mouseout = constant('mouseout');\n var mouseup = constant('mouseup');\n var mouseover = constant('mouseover');\n var focusin = constant('focusin');\n var focusout = constant('focusout');\n var keydown = constant('keydown');\n var keyup = constant('keyup');\n var input = constant('input');\n var change = constant('change');\n var click = constant('click');\n var transitionend = constant('transitionend');\n var selectstart = constant('selectstart');\n\n var alloy = { tap: constant('alloy.tap') };\n var focus = constant('alloy.focus');\n var postBlur = constant('alloy.blur.post');\n var postPaste = constant('alloy.paste.post');\n var receive = constant('alloy.receive');\n var execute = constant('alloy.execute');\n var focusItem = constant('alloy.focus.item');\n var tap = alloy.tap;\n var longpress = constant('alloy.longpress');\n var sandboxClose = constant('alloy.sandbox.close');\n var typeaheadCancel = constant('alloy.typeahead.cancel');\n var systemInit = constant('alloy.system.init');\n var documentTouchmove = constant('alloy.system.touchmove');\n var documentTouchend = constant('alloy.system.touchend');\n var windowScroll = constant('alloy.system.scroll');\n var windowResize = constant('alloy.system.resize');\n var attachedToDom = constant('alloy.system.attached');\n var detachedFromDom = constant('alloy.system.detached');\n var dismissRequested = constant('alloy.system.dismissRequested');\n var repositionRequested = constant('alloy.system.repositionRequested');\n var focusShifted = constant('alloy.focusmanager.shifted');\n var slotVisibility = constant('alloy.slotcontainer.visibility');\n var changeTab = constant('alloy.change.tab');\n var dismissTab = constant('alloy.dismiss.tab');\n var highlight = constant('alloy.highlight');\n var dehighlight = constant('alloy.dehighlight');\n\n var emit = function (component, event) {\n dispatchWith(component, component.element(), event, {});\n };\n var emitWith = function (component, event, properties) {\n dispatchWith(component, component.element(), event, properties);\n };\n var emitExecute = function (component) {\n emit(component, execute());\n };\n var dispatch = function (component, target, event) {\n dispatchWith(component, target, event, {});\n };\n var dispatchWith = function (component, target, event, properties) {\n var data = __assign({ target: target }, properties);\n component.getSystem().triggerEvent(event, target, map$1(data, constant));\n };\n var dispatchEvent = function (component, target, event, simulatedEvent) {\n component.getSystem().triggerEvent(event, target, simulatedEvent.event());\n };\n\n var derive = function (configs) {\n return wrapAll$1(configs);\n };\n var abort = function (name, predicate) {\n return {\n key: name,\n value: nu$4({ abort: predicate })\n };\n };\n var can = function (name, predicate) {\n return {\n key: name,\n value: nu$4({ can: predicate })\n };\n };\n var preventDefault = function (name) {\n return {\n key: name,\n value: nu$4({\n run: function (component, simulatedEvent) {\n simulatedEvent.event().prevent();\n }\n })\n };\n };\n var run = function (name, handler) {\n return {\n key: name,\n value: nu$4({ run: handler })\n };\n };\n var runActionExtra = function (name, action, extra) {\n return {\n key: name,\n value: nu$4({\n run: function (component, simulatedEvent) {\n action.apply(undefined, [\n component,\n simulatedEvent\n ].concat(extra));\n }\n })\n };\n };\n var runOnName = function (name) {\n return function (handler) {\n return run(name, handler);\n };\n };\n var runOnSourceName = function (name) {\n return function (handler) {\n return {\n key: name,\n value: nu$4({\n run: function (component, simulatedEvent) {\n if (isSource(component, simulatedEvent)) {\n handler(component, simulatedEvent);\n }\n }\n })\n };\n };\n };\n var redirectToUid = function (name, uid) {\n return run(name, function (component, simulatedEvent) {\n component.getSystem().getByUid(uid).each(function (redirectee) {\n dispatchEvent(redirectee, redirectee.element(), name, simulatedEvent);\n });\n });\n };\n var redirectToPart = function (name, detail, partName) {\n var uid = detail.partUids[partName];\n return redirectToUid(name, uid);\n };\n var runWithTarget = function (name, f) {\n return run(name, function (component, simulatedEvent) {\n var ev = simulatedEvent.event();\n var target = component.getSystem().getByDom(ev.target()).fold(function () {\n var closest$1 = closest(ev.target(), function (el) {\n return component.getSystem().getByDom(el).toOption();\n }, constant(false));\n return closest$1.getOr(component);\n }, function (c) {\n return c;\n });\n f(component, target, simulatedEvent);\n });\n };\n var cutter = function (name) {\n return run(name, function (component, simulatedEvent) {\n simulatedEvent.cut();\n });\n };\n var stopper = function (name) {\n return run(name, function (component, simulatedEvent) {\n simulatedEvent.stop();\n });\n };\n var runOnSource = function (name, f) {\n return runOnSourceName(name)(f);\n };\n var runOnAttached = runOnSourceName(attachedToDom());\n var runOnDetached = runOnSourceName(detachedFromDom());\n var runOnInit = runOnSourceName(systemInit());\n var runOnExecute = runOnName(execute());\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 sort$1 = function (arr) {\n return arr.slice(0).sort();\n };\n var reqMessage = function (required, keys) {\n throw new Error('All required keys (' + sort$1(required).join(', ') + ') were not specified. Specified keys were: ' + sort$1(keys).join(', ') + '.');\n };\n var unsuppMessage = function (unsupported) {\n throw new Error('Unsupported keys for object: ' + sort$1(unsupported).join(', '));\n };\n var validateStrArr = function (label, array) {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each(array, function (a) {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n var checkDupes = function (everything) {\n var sorted = sort$1(everything);\n var dupe = find(sorted, function (s, i) {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(function (d) {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n var MixedBag = function (required, optional) {\n var everything = required.concat(optional);\n if (everything.length === 0) {\n throw new Error('You must specify at least one required or optional field.');\n }\n validateStrArr('required', required);\n validateStrArr('optional', optional);\n checkDupes(everything);\n return function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n var unsupported = filter(keys$1, function (key) {\n return !contains(everything, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n var r = {};\n each(required, function (req) {\n r[req] = constant(obj[req]);\n });\n each(optional, function (opt) {\n r[opt] = constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());\n });\n return r;\n };\n };\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 offsetParent = function (element) {\n return Option.from(element.dom().offsetParent).map(Element.fromDom);\n };\n var nextSibling = function (element) {\n return Option.from(element.dom().nextSibling).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 spot = Immutable('element', 'offset');\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 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 appendAt = function (parent, element, index) {\n child(parent, index).fold(function () {\n append(parent, element);\n }, function (v) {\n before(v, element);\n });\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(rogue);\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 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(wrapper);\n };\n\n var get$1 = function (element) {\n return element.dom().innerHTML;\n };\n var set = 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 var getOuter = function (element) {\n var container = Element.fromTag('div');\n var clone = Element.fromDom(element.dom().cloneNode(true));\n append(container, clone);\n return get$1(container);\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\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 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$1 = function (element, key, value) {\n rawSet(element.dom(), key, value);\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 get$2 = function (element, key) {\n var v = element.dom().getAttribute(key);\n return v === null ? undefined : v;\n };\n var getOpt = function (element, key) {\n return Option.from(get$2(element, key));\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$1 = function (element, key) {\n element.dom().removeAttribute(key);\n };\n\n var clone = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var shallow$1 = function (original) {\n return clone(original, false);\n };\n\n var getHtml = function (element) {\n var clone = shallow$1(element);\n return getOuter(clone);\n };\n\n var element = function (elem) {\n return getHtml(elem);\n };\n\n var isRecursive = function (component, originator, target) {\n return eq(originator, component.element()) && !eq(originator, target);\n };\n var events = derive([can(focus(), function (component, simulatedEvent) {\n var originator = simulatedEvent.event().originator();\n var target = simulatedEvent.event().target();\n if (isRecursive(component, originator, target)) {\n domGlobals.console.warn(focus() + ' did not get interpreted by the desired target. ' + '\\nOriginator: ' + element(originator) + '\\nTarget: ' + element(target) + '\\nCheck the ' + focus() + ' event handlers');\n return false;\n } else {\n return true;\n }\n })]);\n\n var DefaultEvents = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events\n });\n\n var unique = 0;\n var generate$1 = 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 prefix = constant('alloy-id-');\n var idAttr = constant('data-alloy-id');\n\n var prefix$1 = prefix();\n var idAttr$1 = idAttr();\n var write = function (label, elem) {\n var id = generate$1(prefix$1 + label);\n writeOnly(elem, id);\n return id;\n };\n var writeOnly = function (elem, uid) {\n Object.defineProperty(elem.dom(), idAttr$1, {\n value: uid,\n writable: true\n });\n };\n var read$1 = function (elem) {\n var id = isElement(elem) ? elem.dom()[idAttr$1] : null;\n return Option.from(id);\n };\n var generate$2 = function (prefix) {\n return generate$1(prefix);\n };\n\n var make = identity;\n\n var NoContextApi = function (getComp) {\n var fail = function (event) {\n return function () {\n throw new Error('The component must be in a context to send: ' + event + (getComp ? '\\n' + element(getComp().element()) + ' is not in context.' : ''));\n };\n };\n return {\n debugInfo: constant('fake'),\n triggerEvent: fail('triggerEvent'),\n triggerFocus: fail('triggerFocus'),\n triggerEscape: fail('triggerEscape'),\n build: fail('build'),\n addToWorld: fail('addToWorld'),\n removeFromWorld: fail('removeFromWorld'),\n addToGui: fail('addToGui'),\n removeFromGui: fail('removeFromGui'),\n getByUid: fail('getByUid'),\n getByDom: fail('getByDom'),\n broadcast: fail('broadcast'),\n broadcastOn: fail('broadcastOn'),\n broadcastEvent: fail('broadcastEvent'),\n isConnected: constant(false)\n };\n };\n var singleton = NoContextApi();\n\n var markAsBehaviourApi = function (f, apiName, apiFunction) {\n var delegate = apiFunction.toString();\n var endIndex = delegate.indexOf(')') + 1;\n var openBracketIndex = delegate.indexOf('(');\n var parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = function () {\n return {\n name: apiName,\n parameters: cleanParameters(parameters.slice(0, 1).concat(parameters.slice(3)))\n };\n };\n return f;\n };\n var cleanParameters = function (parameters) {\n return map(parameters, function (p) {\n return endsWith(p, '/*') ? p.substring(0, p.length - '/*'.length) : p;\n });\n };\n var markAsExtraApi = function (f, extraName) {\n var delegate = f.toString();\n var endIndex = delegate.indexOf(')') + 1;\n var openBracketIndex = delegate.indexOf('(');\n var parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = function () {\n return {\n name: extraName,\n parameters: cleanParameters(parameters)\n };\n };\n return f;\n };\n var markAsSketchApi = function (f, apiFunction) {\n var delegate = apiFunction.toString();\n var endIndex = delegate.indexOf(')') + 1;\n var openBracketIndex = delegate.indexOf('(');\n var parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = function () {\n return {\n name: 'OVERRIDE',\n parameters: cleanParameters(parameters.slice(1))\n };\n };\n return f;\n };\n\n var premadeTag = generate$1('alloy-premade');\n var premade = function (comp) {\n return wrap$1(premadeTag, comp);\n };\n var getPremade = function (spec) {\n return get(spec, premadeTag);\n };\n var makeApi = function (f) {\n return markAsSketchApi(function (component) {\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n return f.apply(undefined, [component.getApis()].concat([component].concat(rest)));\n }, f);\n };\n\n var NoState = {\n init: function () {\n return nu$5({\n readState: function () {\n return 'No State required';\n }\n });\n }\n };\n var nu$5 = function (spec) {\n return spec;\n };\n\n var generateFrom = function (spec, all) {\n var schema = map(all, function (a) {\n return optionObjOf(a.name(), [\n strict$1('config'),\n defaulted$1('state', NoState)\n ]);\n });\n var validated = asRaw('component.behaviours', objOf(schema), spec.behaviours).fold(function (errInfo) {\n throw new Error(formatError(errInfo) + '\\nComplete spec:\\n' + JSON.stringify(spec, null, 2));\n }, function (v) {\n return v;\n });\n return {\n list: all,\n data: map$1(validated, function (optBlobThunk) {\n var output = optBlobThunk.map(function (blob) {\n return {\n config: blob.config,\n state: blob.state.init(blob.config)\n };\n });\n return function () {\n return output;\n };\n })\n };\n };\n var getBehaviours = function (bData) {\n return bData.list;\n };\n var getData = function (bData) {\n return bData.data;\n };\n\n var byInnerKey = function (data, tuple) {\n var r = {};\n each$1(data, function (detail, key) {\n each$1(detail, function (value, indexKey) {\n var chain = get(r, indexKey).getOr([]);\n r[indexKey] = chain.concat([tuple(key, value)]);\n });\n });\n return r;\n };\n\n var nu$6 = function (s) {\n return {\n classes: s.classes !== undefined ? s.classes : [],\n attributes: s.attributes !== undefined ? s.attributes : {},\n styles: s.styles !== undefined ? s.styles : {}\n };\n };\n var merge$1 = function (defnA, mod) {\n return __assign(__assign({}, defnA), {\n attributes: __assign(__assign({}, defnA.attributes), mod.attributes),\n styles: __assign(__assign({}, defnA.styles), mod.styles),\n classes: defnA.classes.concat(mod.classes)\n });\n };\n\n var combine = function (info, baseMod, behaviours, base) {\n var modsByBehaviour = __assign({}, baseMod);\n each(behaviours, function (behaviour) {\n modsByBehaviour[behaviour.name()] = behaviour.exhibit(info, base);\n });\n var byAspect = byInnerKey(modsByBehaviour, function (name, modification) {\n return {\n name: name,\n modification: modification\n };\n });\n var combineObjects = function (objects) {\n return foldr(objects, function (b, a) {\n return __assign(__assign({}, a.modification), b);\n }, {});\n };\n var combinedClasses = foldr(byAspect.classes, function (b, a) {\n return a.modification.concat(b);\n }, []);\n var combinedAttributes = combineObjects(byAspect.attributes);\n var combinedStyles = combineObjects(byAspect.styles);\n return nu$6({\n classes: combinedClasses,\n attributes: combinedAttributes,\n styles: combinedStyles\n });\n };\n\n var sortKeys = function (label, keyName, array, order) {\n try {\n var sorted = sort(array, function (a, b) {\n var aKey = a[keyName]();\n var bKey = b[keyName]();\n var aIndex = order.indexOf(aKey);\n var bIndex = order.indexOf(bKey);\n if (aIndex === -1) {\n throw new Error('The ordering for ' + label + ' does not have an entry for ' + aKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n }\n if (bIndex === -1) {\n throw new Error('The ordering for ' + label + ' does not have an entry for ' + bKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n }\n if (aIndex < bIndex) {\n return -1;\n } else if (bIndex < aIndex) {\n return 1;\n } else {\n return 0;\n }\n });\n return Result.value(sorted);\n } catch (err) {\n return Result.error([err]);\n }\n };\n\n var uncurried = function (handler, purpose) {\n return {\n handler: handler,\n purpose: constant(purpose)\n };\n };\n var curried = function (handler, purpose) {\n return {\n cHandler: handler,\n purpose: constant(purpose)\n };\n };\n var curryArgs = function (descHandler, extraArgs) {\n return curried(curry.apply(undefined, [descHandler.handler].concat(extraArgs)), descHandler.purpose());\n };\n var getCurried = function (descHandler) {\n return descHandler.cHandler;\n };\n\n var behaviourTuple = function (name, handler) {\n return {\n name: constant(name),\n handler: constant(handler)\n };\n };\n var nameToHandlers = function (behaviours, info) {\n var r = {};\n each(behaviours, function (behaviour) {\n r[behaviour.name()] = behaviour.handlers(info);\n });\n return r;\n };\n var groupByEvents = function (info, behaviours, base) {\n var behaviourEvents = __assign(__assign({}, base), nameToHandlers(behaviours, info));\n return byInnerKey(behaviourEvents, behaviourTuple);\n };\n var combine$1 = function (info, eventOrder, behaviours, base) {\n var byEventName = groupByEvents(info, behaviours, base);\n return combineGroups(byEventName, eventOrder);\n };\n var assemble = function (rawHandler) {\n var handler = read(rawHandler);\n return function (component, simulatedEvent) {\n var rest = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n rest[_i - 2] = arguments[_i];\n }\n var args = [\n component,\n simulatedEvent\n ].concat(rest);\n if (handler.abort.apply(undefined, args)) {\n simulatedEvent.stop();\n } else if (handler.can.apply(undefined, args)) {\n handler.run.apply(undefined, args);\n }\n };\n };\n var missingOrderError = function (eventName, tuples) {\n return Result.error(['The event (' + eventName + ') has more than one behaviour that listens to it.\\nWhen this occurs, you must ' + 'specify an event ordering for the behaviours in your spec (e.g. [ \"listing\", \"toggling\" ]).\\nThe behaviours that ' + 'can trigger it are: ' + JSON.stringify(map(tuples, function (c) {\n return c.name();\n }), null, 2)]);\n };\n var fuse$1 = function (tuples, eventOrder, eventName) {\n var order = eventOrder[eventName];\n if (!order) {\n return missingOrderError(eventName, tuples);\n } else {\n return sortKeys('Event: ' + eventName, 'name', tuples, order).map(function (sortedTuples) {\n var handlers = map(sortedTuples, function (tuple) {\n return tuple.handler();\n });\n return fuse(handlers);\n });\n }\n };\n var combineGroups = function (byEventName, eventOrder) {\n var r = mapToArray(byEventName, function (tuples, eventName) {\n var combined = tuples.length === 1 ? Result.value(tuples[0].handler()) : fuse$1(tuples, eventOrder, eventName);\n return combined.map(function (handler) {\n var assembled = assemble(handler);\n var purpose = tuples.length > 1 ? filter(eventOrder[eventName], function (o) {\n return exists(tuples, function (t) {\n return t.name() === o;\n });\n }).join(' > ') : tuples[0].name();\n return wrap$1(eventName, uncurried(assembled, purpose));\n });\n });\n return consolidate(r, {});\n };\n\n var toInfo = function (spec) {\n return asRaw('custom.definition', objOf([\n field('dom', 'dom', strict(), objOf([\n strict$1('tag'),\n defaulted$1('styles', {}),\n defaulted$1('classes', []),\n defaulted$1('attributes', {}),\n option('value'),\n option('innerHtml')\n ])),\n strict$1('components'),\n strict$1('uid'),\n defaulted$1('events', {}),\n defaulted$1('apis', {}),\n field('eventOrder', 'eventOrder', mergeWith({\n 'alloy.execute': [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'typeaheadevents'\n ],\n 'alloy.focus': [\n 'alloy.base.behaviour',\n 'focusing',\n 'keying'\n ],\n 'alloy.system.init': [\n 'alloy.base.behaviour',\n 'disabling',\n 'toggling',\n 'representing'\n ],\n 'input': [\n 'alloy.base.behaviour',\n 'representing',\n 'streaming',\n 'invalidating'\n ],\n 'alloy.system.detached': [\n 'alloy.base.behaviour',\n 'representing',\n 'item-events',\n 'tooltipping'\n ],\n 'mousedown': [\n 'focusing',\n 'alloy.base.behaviour',\n 'item-type-events'\n ],\n 'touchstart': [\n 'focusing',\n 'alloy.base.behaviour',\n 'item-type-events'\n ],\n 'mouseover': [\n 'item-type-events',\n 'tooltipping'\n ]\n }), anyValue$1()),\n option('domModification')\n ]), spec);\n };\n var toDefinition = function (detail) {\n return __assign(__assign({}, detail.dom), {\n uid: detail.uid,\n domChildren: map(detail.components, function (comp) {\n return comp.element();\n })\n });\n };\n var toModification = function (detail) {\n return detail.domModification.fold(function () {\n return nu$6({});\n }, nu$6);\n };\n var toEvents = function (info) {\n return info.events;\n };\n\n var read$2 = function (element, attr) {\n var value = get$2(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add = function (element, attr, id) {\n var old = read$2(element, attr);\n var nu = old.concat([id]);\n set$1(element, attr, nu.join(' '));\n return true;\n };\n var remove$2 = function (element, attr, id) {\n var nu = filter(read$2(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set$1(element, attr, nu.join(' '));\n } else {\n remove$1(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom().classList !== undefined;\n };\n var get$3 = function (element) {\n return read$2(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$3(element);\n if (classList.length === 0) {\n remove$1(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 add$3 = function (element, classes) {\n each(classes, function (x) {\n add$2(element, x);\n });\n };\n var remove$5 = function (element, classes) {\n each(classes, function (x) {\n remove$4(element, x);\n });\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 var body = cached(function () {\n return getBody(Element.fromDom(domGlobals.document));\n });\n var getBody = function (doc) {\n var b = doc.dom().body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return Element.fromDom(b);\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 internalRemove = function (dom, property) {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n var set$2 = function (element, property, value) {\n var dom = element.dom();\n internalSet(dom, property, value);\n };\n var setAll$1 = function (element, css) {\n var dom = element.dom();\n each$1(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var setOptions = function (element, css) {\n var dom = element.dom();\n each$1(css, function (v, k) {\n v.fold(function () {\n internalRemove(dom, k);\n }, function (value) {\n internalSet(dom, k, value);\n });\n });\n };\n var get$4 = 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 var isValidValue = function (tag, property, value) {\n var element = Element.fromTag(tag);\n set$2(element, property, value);\n var style = getRaw(element, property);\n return style.isSome();\n };\n var remove$6 = function (element, property) {\n var dom = element.dom();\n internalRemove(dom, property);\n if (has$1(element, 'style') && trim(get$2(element, 'style')) === '') {\n remove$1(element, 'style');\n }\n };\n var reflow = function (e) {\n return e.dom().offsetWidth;\n };\n\n var get$5 = function (element) {\n return element.dom().value;\n };\n var set$3 = function (element, value) {\n if (value === undefined) {\n throw new Error('Value.set was undefined');\n }\n element.dom().value = value;\n };\n\n var renderToDom = function (definition) {\n var subject = Element.fromTag(definition.tag);\n setAll(subject, definition.attributes);\n add$3(subject, definition.classes);\n setAll$1(subject, definition.styles);\n definition.innerHtml.each(function (html) {\n return set(subject, html);\n });\n var children = definition.domChildren;\n append$1(subject, children);\n definition.value.each(function (value) {\n set$3(subject, value);\n });\n if (!definition.uid) {\n debugger;\n }\n writeOnly(subject, definition.uid);\n return subject;\n };\n\n var getBehaviours$1 = function (spec) {\n var behaviours = get(spec, 'behaviours').getOr({});\n var keys$1 = filter(keys(behaviours), function (k) {\n return behaviours[k] !== undefined;\n });\n return map(keys$1, function (k) {\n return behaviours[k].me;\n });\n };\n var generateFrom$1 = function (spec, all) {\n return generateFrom(spec, all);\n };\n var generate$3 = function (spec) {\n var all = getBehaviours$1(spec);\n return generateFrom$1(spec, all);\n };\n\n var getDomDefinition = function (info, bList, bData) {\n var definition = toDefinition(info);\n var infoModification = toModification(info);\n var baseModification = { 'alloy.base.modification': infoModification };\n var modification = bList.length > 0 ? combine(bData, baseModification, bList, definition) : infoModification;\n return merge$1(definition, modification);\n };\n var getEvents = function (info, bList, bData) {\n var baseEvents = { 'alloy.base.behaviour': toEvents(info) };\n return combine$1(bData, info.eventOrder, bList, baseEvents).getOrDie();\n };\n var build = function (spec) {\n var getMe = function () {\n return me;\n };\n var systemApi = Cell(singleton);\n var info = getOrDie(toInfo(spec));\n var bBlob = generate$3(spec);\n var bList = getBehaviours(bBlob);\n var bData = getData(bBlob);\n var modDefinition = getDomDefinition(info, bList, bData);\n var item = renderToDom(modDefinition);\n var events = getEvents(info, bList, bData);\n var subcomponents = Cell(info.components);\n var connect = function (newApi) {\n systemApi.set(newApi);\n };\n var disconnect = function () {\n systemApi.set(NoContextApi(getMe));\n };\n var syncComponents = function () {\n var children$1 = children(item);\n var subs = bind(children$1, function (child) {\n return systemApi.get().getByDom(child).fold(function () {\n return [];\n }, function (c) {\n return [c];\n });\n });\n subcomponents.set(subs);\n };\n var config = function (behaviour) {\n var b = bData;\n var f = isFunction(b[behaviour.name()]) ? b[behaviour.name()] : function () {\n throw new Error('Could not find ' + behaviour.name() + ' in ' + JSON.stringify(spec, null, 2));\n };\n return f();\n };\n var hasConfigured = function (behaviour) {\n return isFunction(bData[behaviour.name()]);\n };\n var getApis = function () {\n return info.apis;\n };\n var readState = function (behaviourName) {\n return bData[behaviourName]().map(function (b) {\n return b.state.readState();\n }).getOr('not enabled');\n };\n var me = {\n getSystem: systemApi.get,\n config: config,\n hasConfigured: hasConfigured,\n spec: constant(spec),\n readState: readState,\n getApis: getApis,\n connect: connect,\n disconnect: disconnect,\n element: constant(item),\n syncComponents: syncComponents,\n components: subcomponents.get,\n events: constant(events)\n };\n return me;\n };\n\n var buildSubcomponents = function (spec) {\n var components = get(spec, 'components').getOr([]);\n return map(components, build$1);\n };\n var buildFromSpec = function (userSpec) {\n var _a = make(userSpec), specEvents = _a.events, spec = __rest(_a, ['events']);\n var components = buildSubcomponents(spec);\n var completeSpec = __assign(__assign({}, spec), {\n events: __assign(__assign({}, DefaultEvents), specEvents),\n components: components\n });\n return Result.value(build(completeSpec));\n };\n var text = function (textContent) {\n var element = Element.fromText(textContent);\n return external({ element: element });\n };\n var external = function (spec) {\n var extSpec = asRawOrDie('external.component', objOfOnly([\n strict$1('element'),\n option('uid')\n ]), spec);\n var systemApi = Cell(NoContextApi());\n var connect = function (newApi) {\n systemApi.set(newApi);\n };\n var disconnect = function () {\n systemApi.set(NoContextApi(function () {\n return me;\n }));\n };\n extSpec.uid.each(function (uid) {\n writeOnly(extSpec.element, uid);\n });\n var me = {\n getSystem: systemApi.get,\n config: Option.none,\n hasConfigured: constant(false),\n connect: connect,\n disconnect: disconnect,\n getApis: function () {\n return {};\n },\n element: constant(extSpec.element),\n spec: constant(spec),\n readState: constant('No state'),\n syncComponents: noop,\n components: constant([]),\n events: constant({})\n };\n return premade(me);\n };\n var uids = generate$2;\n var build$1 = function (spec) {\n return getPremade(spec).fold(function () {\n var userSpecWithUid = spec.hasOwnProperty('uid') ? spec : __assign({ uid: uids('') }, spec);\n return buildFromSpec(userSpecWithUid).getOrDie();\n }, function (prebuilt) {\n return prebuilt;\n });\n };\n var premade$1 = premade;\n\n function Dimension (name, getOffset) {\n var set = function (element, h) {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n var dom = element.dom();\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$4(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$4(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n }\n\n var api = Dimension('height', function (element) {\n var dom = element.dom();\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$6 = function (element) {\n return api.get(element);\n };\n var getOuter$1 = function (element) {\n return api.getOuter(element);\n };\n var setMax = function (element, value) {\n var inclusions = [\n 'margin-top',\n 'border-top-width',\n 'padding-top',\n 'padding-bottom',\n 'border-bottom-width',\n 'margin-bottom'\n ];\n var absMax = api.max(element, value, inclusions);\n set$2(element, 'max-height', absMax + 'px');\n };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: constant(left),\n top: constant(top),\n translate: translate\n };\n };\n var Position = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return Position(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n return a !== undefined ? a : b !== undefined ? b : 0;\n };\n var absolute = function (element) {\n var doc = element.dom().ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom()) {\n return Position(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom();\n var doc = dom.ownerDocument;\n var body = doc.body;\n if (body === dom) {\n return Position(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return Position(0, 0);\n }\n return boxPosition(dom);\n };\n\n var api$1 = Dimension('width', function (element) {\n return element.dom().offsetWidth;\n });\n var set$4 = function (element, h) {\n api$1.set(element, h);\n };\n var get$7 = function (element) {\n return api$1.get(element);\n };\n var getOuter$2 = function (element) {\n return api$1.getOuter(element);\n };\n var setMax$1 = function (element, value) {\n var inclusions = [\n 'margin-left',\n 'border-left-width',\n 'padding-left',\n 'padding-right',\n 'border-right-width',\n 'margin-right'\n ];\n var absMax = api$1.max(element, value, inclusions);\n set$2(element, 'max-width', absMax + 'px');\n };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: constant(target),\n x: constant(x),\n y: constant(y),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(raw)\n };\n };\n var fromRawEvent = function (rawEvent) {\n var target = Element.fromDom(rawEvent.target);\n var stop = function () {\n rawEvent.stopPropagation();\n };\n var prevent = function () {\n rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (!filter(rawEvent)) {\n return;\n }\n handler(fromRawEvent(rawEvent));\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle(filter, handler);\n element.dom().addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n var bind$2 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, false);\n };\n var capture = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, true);\n };\n var unbind = function (element, event, handler, useCapture) {\n element.dom().removeEventListener(event, handler, useCapture);\n };\n\n var isSafari = detect$3().browser.isSafari();\n var get$8 = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return Position(x, y);\n };\n var to = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var win = doc.defaultView;\n win.scrollTo(x, y);\n };\n\n var get$9 = function (_win) {\n var win = _win === undefined ? domGlobals.window : _win;\n return Option.from(win['visualViewport']);\n };\n var bounds = function (x, y, width, height) {\n return {\n x: constant(x),\n y: constant(y),\n width: constant(width),\n height: constant(height),\n right: constant(x + width),\n bottom: constant(y + height)\n };\n };\n var getBounds = function (_win) {\n var win = _win === undefined ? domGlobals.window : _win;\n var doc = win.document;\n var scroll = get$8(Element.fromDom(doc));\n return get$9(win).fold(function () {\n var html = win.document.documentElement;\n var width = html.clientWidth;\n var height = html.clientHeight;\n return bounds(scroll.left(), scroll.top(), width, height);\n }, function (visualViewport) {\n return bounds(Math.max(visualViewport.pageLeft, scroll.left()), Math.max(visualViewport.pageTop, scroll.top()), visualViewport.width, visualViewport.height);\n });\n };\n\n var walkUp = function (navigation, doc) {\n var frame = navigation.view(doc);\n return frame.fold(constant([]), function (f) {\n var parent = navigation.owner(f);\n var rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n var pathTo = function (element, navigation) {\n var d = navigation.owner(element);\n var paths = walkUp(navigation, d);\n return Option.some(paths);\n };\n\n var view = function (doc) {\n var element = doc.dom() === domGlobals.document ? Option.none() : Option.from(doc.dom().defaultView.frameElement);\n return element.map(Element.fromDom);\n };\n var owner$1 = function (element) {\n return owner(element);\n };\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner$1\n });\n\n var find$3 = function (element) {\n var doc = Element.fromDom(domGlobals.document);\n var scroll = get$8(doc);\n var path = pathTo(element, Navigation);\n return path.fold(curry(absolute, element), function (frames) {\n var offset = viewport(element);\n var r = foldr(frames, function (b, a) {\n var loc = viewport(a);\n return {\n left: b.left + loc.left(),\n top: b.top + loc.top()\n };\n }, {\n left: 0,\n top: 0\n });\n return Position(r.left + offset.left() + scroll.left(), r.top + offset.top() + scroll.top());\n });\n };\n\n var pointed = Immutable('point', 'width', 'height');\n var rect = Immutable('x', 'y', 'width', 'height');\n var bounds$1 = function (x, y, width, height) {\n return {\n x: constant(x),\n y: constant(y),\n width: constant(width),\n height: constant(height),\n right: constant(x + width),\n bottom: constant(y + height)\n };\n };\n var box = function (element) {\n var xy = absolute(element);\n var w = getOuter$2(element);\n var h = getOuter$1(element);\n return bounds$1(xy.left(), xy.top(), w, h);\n };\n var absolute$1 = function (element) {\n var position = find$3(element);\n var width = getOuter$2(element);\n var height = getOuter$1(element);\n return bounds$1(position.left(), position.top(), width, height);\n };\n var win = function () {\n return getBounds(domGlobals.window);\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$1 = 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$1 = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor$1, scope, predicate, isRoot);\n };\n var descendant = function (scope, predicate) {\n var descend = function (node) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var child_1 = Element.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Option.some(child_1);\n }\n var res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope.dom());\n };\n\n var closest$2 = function (scope, predicate, isRoot) {\n return closest$1(scope, predicate, isRoot).isSome();\n };\n\n var ancestor$2 = function (scope, selector, isRoot) {\n return ancestor$1(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var descendant$1 = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$3 = function (scope, selector, isRoot) {\n return ClosestOrAncestor(is, ancestor$2, scope, selector, isRoot);\n };\n\n var find$4 = function (queryElem) {\n var dependent = closest$1(queryElem, function (elem) {\n if (!isElement(elem)) {\n return false;\n }\n var id = get$2(elem, 'id');\n return id !== undefined && id.indexOf('aria-owns') > -1;\n });\n return dependent.bind(function (dep) {\n var id = get$2(dep, 'id');\n var doc = owner(dep);\n return descendant$1(doc, '[aria-owns=\"' + id + '\"]');\n });\n };\n var manager = function () {\n var ariaId = generate$1('aria-owns');\n var link = function (elem) {\n set$1(elem, 'aria-owns', ariaId);\n };\n var unlink = function (elem) {\n remove$1(elem, 'aria-owns');\n };\n return {\n id: constant(ariaId),\n link: link,\n unlink: unlink\n };\n };\n\n var isAriaPartOf = function (component, queryElem) {\n return find$4(queryElem).exists(function (owner) {\n return isPartOf(component, owner);\n });\n };\n var isPartOf = function (component, queryElem) {\n return closest$2(queryElem, function (el) {\n return eq(el, component.element());\n }, constant(false)) || isAriaPartOf(component, queryElem);\n };\n\n var unknown$3 = 'unknown';\n var EventConfiguration;\n (function (EventConfiguration) {\n EventConfiguration[EventConfiguration['STOP'] = 0] = 'STOP';\n EventConfiguration[EventConfiguration['NORMAL'] = 1] = 'NORMAL';\n EventConfiguration[EventConfiguration['LOGGING'] = 2] = 'LOGGING';\n }(EventConfiguration || (EventConfiguration = {})));\n var eventConfig = Cell({});\n var makeEventLogger = function (eventName, initialTarget) {\n var sequence = [];\n var startTime = new Date().getTime();\n return {\n logEventCut: function (name, target, purpose) {\n sequence.push({\n outcome: 'cut',\n target: target,\n purpose: purpose\n });\n },\n logEventStopped: function (name, target, purpose) {\n sequence.push({\n outcome: 'stopped',\n target: target,\n purpose: purpose\n });\n },\n logNoParent: function (name, target, purpose) {\n sequence.push({\n outcome: 'no-parent',\n target: target,\n purpose: purpose\n });\n },\n logEventNoHandlers: function (name, target) {\n sequence.push({\n outcome: 'no-handlers-left',\n target: target\n });\n },\n logEventResponse: function (name, target, purpose) {\n sequence.push({\n outcome: 'response',\n purpose: purpose,\n target: target\n });\n },\n write: function () {\n var finishTime = new Date().getTime();\n if (contains([\n 'mousemove',\n 'mouseover',\n 'mouseout',\n systemInit()\n ], eventName)) {\n return;\n }\n domGlobals.console.log(eventName, {\n event: eventName,\n time: finishTime - startTime,\n target: initialTarget.dom(),\n sequence: map(sequence, function (s) {\n if (!contains([\n 'cut',\n 'stopped',\n 'response'\n ], s.outcome)) {\n return s.outcome;\n } else {\n return '{' + s.purpose + '} ' + s.outcome + ' at (' + element(s.target) + ')';\n }\n })\n });\n }\n };\n };\n var processEvent = function (eventName, initialTarget, f) {\n var status = get(eventConfig.get(), eventName).orThunk(function () {\n var patterns = keys(eventConfig.get());\n return findMap(patterns, function (p) {\n return eventName.indexOf(p) > -1 ? Option.some(eventConfig.get()[p]) : Option.none();\n });\n }).getOr(EventConfiguration.NORMAL);\n switch (status) {\n case EventConfiguration.NORMAL:\n return f(noLogger());\n case EventConfiguration.LOGGING: {\n var logger = makeEventLogger(eventName, initialTarget);\n var output = f(logger);\n logger.write();\n return output;\n }\n case EventConfiguration.STOP:\n return true;\n }\n };\n var path = [\n 'alloy/data/Fields',\n 'alloy/debugging/Debugging'\n ];\n var getTrace = function () {\n var err = new Error();\n if (err.stack !== undefined) {\n var lines = err.stack.split('\\n');\n return find(lines, function (line) {\n return line.indexOf('alloy') > 0 && !exists(path, function (p) {\n return line.indexOf(p) > -1;\n });\n }).getOr(unknown$3);\n } else {\n return unknown$3;\n }\n };\n var ignoreEvent = {\n logEventCut: noop,\n logEventStopped: noop,\n logNoParent: noop,\n logEventNoHandlers: noop,\n logEventResponse: noop,\n write: noop\n };\n var monitorEvent = function (eventName, initialTarget, f) {\n return processEvent(eventName, initialTarget, f);\n };\n var noLogger = constant(ignoreEvent);\n\n var menuFields = constant([\n strict$1('menu'),\n strict$1('selectedMenu')\n ]);\n var itemFields = constant([\n strict$1('item'),\n strict$1('selectedItem')\n ]);\n var schema = constant(objOf(itemFields().concat(menuFields())));\n var itemSchema = constant(objOf(itemFields()));\n\n var _initSize = strictObjOf('initSize', [\n strict$1('numColumns'),\n strict$1('numRows')\n ]);\n var itemMarkers = function () {\n return strictOf('markers', itemSchema());\n };\n var tieredMenuMarkers = function () {\n return strictObjOf('markers', [strict$1('backgroundMenu')].concat(menuFields()).concat(itemFields()));\n };\n var markers = function (required) {\n return strictObjOf('markers', map(required, strict$1));\n };\n var onPresenceHandler = function (label, fieldName, presence) {\n var trace = getTrace();\n return field(fieldName, fieldName, presence, valueOf(function (f) {\n return Result.value(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return f.apply(undefined, args);\n });\n }));\n };\n var onHandler = function (fieldName) {\n return onPresenceHandler('onHandler', fieldName, defaulted(noop));\n };\n var onKeyboardHandler = function (fieldName) {\n return onPresenceHandler('onKeyboardHandler', fieldName, defaulted(Option.none));\n };\n var onStrictHandler = function (fieldName) {\n return onPresenceHandler('onHandler', fieldName, strict());\n };\n var onStrictKeyboardHandler = function (fieldName) {\n return onPresenceHandler('onKeyboardHandler', fieldName, strict());\n };\n var output = function (name, value) {\n return state$1(name, constant(value));\n };\n var snapshot = function (name) {\n return state$1(name, identity);\n };\n var initSize = constant(_initSize);\n\n var nu$7 = Immutable('x', 'y', 'bubble', 'direction', 'boundsRestriction', 'label');\n\n var adt$2 = Adt.generate([\n { southeast: [] },\n { southwest: [] },\n { northeast: [] },\n { northwest: [] },\n { south: [] },\n { north: [] },\n { east: [] },\n { west: [] }\n ]);\n var cata = function (subject, southeast, southwest, northeast, northwest, south, north, east, west) {\n return subject.fold(southeast, southwest, northeast, northwest, south, north, east, west);\n };\n var cataVertical = function (subject, south, middle, north) {\n return subject.fold(south, south, north, north, south, north, middle, middle);\n };\n var cataHorizontal = function (subject, east, middle, west) {\n return subject.fold(east, west, east, west, middle, middle, east, west);\n };\n var southeast = adt$2.southeast;\n var southwest = adt$2.southwest;\n var northeast = adt$2.northeast;\n var northwest = adt$2.northwest;\n var south = adt$2.south;\n var north = adt$2.north;\n var east = adt$2.east;\n var west = adt$2.west;\n\n var getRestriction = function (anchor, restriction) {\n switch (restriction) {\n case 1:\n return anchor.x();\n case 0:\n return anchor.x() + anchor.width();\n case 2:\n return anchor.y();\n case 3:\n return anchor.y() + anchor.height();\n }\n };\n var boundsRestriction = function (anchor, restrictions) {\n return mapToObject([\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], function (dir) {\n return get(restrictions, dir).map(function (restriction) {\n return getRestriction(anchor, restriction);\n });\n });\n };\n var adjustBounds = function (bounds, boundsRestrictions, bubbleOffsets) {\n var applyRestriction = function (dir, current) {\n var bubbleOffset = dir === 'top' || dir === 'bottom' ? bubbleOffsets.top() : bubbleOffsets.left();\n return get(boundsRestrictions, dir).bind(identity).bind(function (restriction) {\n if (dir === 'left' || dir === 'top') {\n return restriction >= current ? Option.some(restriction) : Option.none();\n } else {\n return restriction <= current ? Option.some(restriction) : Option.none();\n }\n }).map(function (restriction) {\n return restriction + bubbleOffset;\n }).getOr(current);\n };\n var adjustedLeft = applyRestriction('left', bounds.x());\n var adjustedTop = applyRestriction('top', bounds.y());\n var adjustedRight = applyRestriction('right', bounds.right());\n var adjustedBottom = applyRestriction('bottom', bounds.bottom());\n return bounds$1(adjustedLeft, adjustedTop, adjustedRight - adjustedLeft, adjustedBottom - adjustedTop);\n };\n\n var eastX = function (anchor) {\n return anchor.x();\n };\n var middleX = function (anchor, element) {\n return anchor.x() + anchor.width() / 2 - element.width() / 2;\n };\n var westX = function (anchor, element) {\n return anchor.x() + anchor.width() - element.width();\n };\n var northY = function (anchor, element) {\n return anchor.y() - element.height();\n };\n var southY = function (anchor) {\n return anchor.y() + anchor.height();\n };\n var centreY = function (anchor, element) {\n return anchor.y() + anchor.height() / 2 - element.height() / 2;\n };\n var eastEdgeX = function (anchor) {\n return anchor.x() + anchor.width();\n };\n var westEdgeX = function (anchor, element) {\n return anchor.x() - element.width();\n };\n var southeast$1 = function (anchor, element, bubbles) {\n return nu$7(eastX(anchor), southY(anchor), bubbles.southeast(), southeast(), boundsRestriction(anchor, {\n left: 1,\n top: 3\n }), 'layout-se');\n };\n var southwest$1 = function (anchor, element, bubbles) {\n return nu$7(westX(anchor, element), southY(anchor), bubbles.southwest(), southwest(), boundsRestriction(anchor, {\n right: 0,\n top: 3\n }), 'layout-sw');\n };\n var northeast$1 = function (anchor, element, bubbles) {\n return nu$7(eastX(anchor), northY(anchor, element), bubbles.northeast(), northeast(), boundsRestriction(anchor, {\n left: 1,\n bottom: 2\n }), 'layout-ne');\n };\n var northwest$1 = function (anchor, element, bubbles) {\n return nu$7(westX(anchor, element), northY(anchor, element), bubbles.northwest(), northwest(), boundsRestriction(anchor, {\n right: 0,\n bottom: 2\n }), 'layout-nw');\n };\n var north$1 = function (anchor, element, bubbles) {\n return nu$7(middleX(anchor, element), northY(anchor, element), bubbles.north(), north(), boundsRestriction(anchor, { bottom: 2 }), 'layout-n');\n };\n var south$1 = function (anchor, element, bubbles) {\n return nu$7(middleX(anchor, element), southY(anchor), bubbles.south(), south(), boundsRestriction(anchor, { top: 3 }), 'layout-s');\n };\n var east$1 = function (anchor, element, bubbles) {\n return nu$7(eastEdgeX(anchor), centreY(anchor, element), bubbles.east(), east(), boundsRestriction(anchor, { left: 0 }), 'layout-e');\n };\n var west$1 = function (anchor, element, bubbles) {\n return nu$7(westEdgeX(anchor, element), centreY(anchor, element), bubbles.west(), west(), boundsRestriction(anchor, { right: 1 }), 'layout-w');\n };\n var all$2 = function () {\n return [\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1,\n south$1,\n north$1,\n east$1,\n west$1\n ];\n };\n var allRtl = function () {\n return [\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1,\n south$1,\n north$1,\n east$1,\n west$1\n ];\n };\n var aboveOrBelow = function () {\n return [\n northeast$1,\n northwest$1,\n southeast$1,\n southwest$1,\n north$1,\n south$1\n ];\n };\n var aboveOrBelowRtl = function () {\n return [\n northwest$1,\n northeast$1,\n southwest$1,\n southeast$1,\n north$1,\n south$1\n ];\n };\n var belowOrAbove = function () {\n return [\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1,\n south$1,\n north$1\n ];\n };\n var belowOrAboveRtl = function () {\n return [\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1,\n south$1,\n north$1\n ];\n };\n\n var executeEvent = function (bConfig, bState, executor) {\n return runOnExecute(function (component) {\n executor(component, bConfig, bState);\n });\n };\n var loadEvent = function (bConfig, bState, f) {\n return runOnInit(function (component, simulatedEvent) {\n f(component, bConfig, bState);\n });\n };\n var create = function (schema, name, active, apis, extra, state) {\n var configSchema = objOfOnly(schema);\n var schemaSchema = optionObjOf(name, [optionObjOfOnly('config', schema)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n var createModes = function (modes, name, active, apis, extra, state) {\n var configSchema = modes;\n var schemaSchema = optionObjOf(name, [optionOf('config', modes)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n var wrapApi = function (bName, apiFunction, apiName) {\n var f = function (component) {\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n var args = [component].concat(rest);\n return component.config({ name: constant(bName) }).fold(function () {\n throw new Error('We could not find any behaviour configuration for: ' + bName + '. Using API: ' + apiName);\n }, function (info) {\n var rest = Array.prototype.slice.call(args, 1);\n return apiFunction.apply(undefined, [\n component,\n info.config,\n info.state\n ].concat(rest));\n });\n };\n return markAsBehaviourApi(f, apiName, apiFunction);\n };\n var revokeBehaviour = function (name) {\n return {\n key: name,\n value: undefined\n };\n };\n var doCreate = function (configSchema, schemaSchema, name, active, apis, extra, state) {\n var getConfig = function (info) {\n return hasNonNullableKey(info, name) ? info[name]() : Option.none();\n };\n var wrappedApis = map$1(apis, function (apiF, apiName) {\n return wrapApi(name, apiF, apiName);\n });\n var wrappedExtra = map$1(extra, function (extraF, extraName) {\n return markAsExtraApi(extraF, extraName);\n });\n var me = __assign(__assign(__assign({}, wrappedExtra), wrappedApis), {\n revoke: curry(revokeBehaviour, name),\n config: function (spec) {\n var prepared = asRawOrDie(name + '-config', configSchema, spec);\n return {\n key: name,\n value: {\n config: prepared,\n me: me,\n configAsRaw: cached(function () {\n return asRawOrDie(name + '-config', configSchema, spec);\n }),\n initialConfig: spec,\n state: state\n }\n };\n },\n schema: function () {\n return schemaSchema;\n },\n exhibit: function (info, base) {\n return getConfig(info).bind(function (behaviourInfo) {\n return get(active, 'exhibit').map(function (exhibitor) {\n return exhibitor(base, behaviourInfo.config, behaviourInfo.state);\n });\n }).getOr(nu$6({}));\n },\n name: function () {\n return name;\n },\n handlers: function (info) {\n return getConfig(info).map(function (behaviourInfo) {\n var getEvents = get(active, 'events').getOr(function () {\n return {};\n });\n return getEvents(behaviourInfo.config, behaviourInfo.state);\n }).getOr({});\n }\n });\n return me;\n };\n\n var derive$1 = function (capabilities) {\n return wrapAll$1(capabilities);\n };\n var simpleSchema = objOfOnly([\n strict$1('fields'),\n strict$1('name'),\n defaulted$1('active', {}),\n defaulted$1('apis', {}),\n defaulted$1('state', NoState),\n defaulted$1('extra', {})\n ]);\n var create$1 = function (data) {\n var value = asRawOrDie('Creating behaviour: ' + data.name, simpleSchema, data);\n return create(value.fields, value.name, value.active, value.apis, value.extra, value.state);\n };\n var modeSchema = objOfOnly([\n strict$1('branchKey'),\n strict$1('branches'),\n strict$1('name'),\n defaulted$1('active', {}),\n defaulted$1('apis', {}),\n defaulted$1('state', NoState),\n defaulted$1('extra', {})\n ]);\n var createModes$1 = function (data) {\n var value = asRawOrDie('Creating behaviour: ' + data.name, modeSchema, data);\n return createModes(choose$1(value.branchKey, value.branches), value.name, value.active, value.apis, value.extra, value.state);\n };\n var revoke = constant(undefined);\n\n var chooseChannels = function (channels, message) {\n return message.universal() ? channels : filter(channels, function (ch) {\n return contains(message.channels(), ch);\n });\n };\n var events$1 = function (receiveConfig) {\n return derive([run(receive(), function (component, message) {\n var channelMap = receiveConfig.channels;\n var channels = keys(channelMap);\n var receivingData = message;\n var targetChannels = chooseChannels(channels, receivingData);\n each(targetChannels, function (ch) {\n var channelInfo = channelMap[ch];\n var channelSchema = channelInfo.schema;\n var data = asRawOrDie('channel[' + ch + '] data\\nReceiver: ' + element(component.element()), channelSchema, receivingData.data());\n channelInfo.onReceive(component, data);\n });\n })]);\n };\n\n var ActiveReceiving = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$1\n });\n\n var ReceivingSchema = [strictOf('channels', setOf$1(Result.value, objOfOnly([\n onStrictHandler('onReceive'),\n defaulted$1('schema', anyValue$1())\n ])))];\n\n var Receiving = create$1({\n fields: ReceivingSchema,\n name: 'receiving',\n active: ActiveReceiving\n });\n\n var exhibit = function (base, posConfig) {\n return nu$6({\n classes: [],\n styles: posConfig.useFixed() ? {} : { position: 'relative' }\n });\n };\n\n var ActivePosition = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit\n });\n\n var focus$1 = function (element) {\n element.dom().focus();\n };\n var blur = function (element) {\n element.dom().blur();\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 preserve = function (f, container) {\n var ownerDoc = owner(container);\n var refocus = active(ownerDoc).bind(function (focused) {\n var hasFocus = function (elem) {\n return eq(focused, elem);\n };\n return hasFocus(container) ? Option.some(container) : descendant(container, hasFocus);\n });\n var result = f(container);\n refocus.each(function (oldFocus) {\n active(ownerDoc).filter(function (newFocus) {\n return eq(newFocus, oldFocus);\n }).fold(function () {\n focus$1(oldFocus);\n }, noop);\n });\n return result;\n };\n\n var NuPositionCss = Immutable('position', 'left', 'top', 'right', 'bottom');\n var applyPositionCss = function (element, position) {\n var addPx = function (num) {\n return num + 'px';\n };\n setOptions(element, {\n position: Option.some(position.position()),\n left: position.left().map(addPx),\n top: position.top().map(addPx),\n right: position.right().map(addPx),\n bottom: position.bottom().map(addPx)\n });\n };\n\n var adt$3 = Adt.generate([\n { none: [] },\n {\n relative: [\n 'x',\n 'y',\n 'width',\n 'height'\n ]\n },\n {\n fixed: [\n 'x',\n 'y',\n 'width',\n 'height'\n ]\n }\n ]);\n var positionWithDirection = function (posName, decision, x, y, width, height) {\n var decisionX = decision.x() - x;\n var decisionY = decision.y() - y;\n var decisionWidth = decision.width();\n var decisionHeight = decision.height();\n var decisionRight = width - (decisionX + decisionWidth);\n var decisionBottom = height - (decisionY + decisionHeight);\n var left = Option.some(decisionX);\n var top = Option.some(decisionY);\n var right = Option.some(decisionRight);\n var bottom = Option.some(decisionBottom);\n var none = Option.none();\n return cata(decision.direction(), function () {\n return NuPositionCss(posName, left, top, none, none);\n }, function () {\n return NuPositionCss(posName, none, top, right, none);\n }, function () {\n return NuPositionCss(posName, left, none, none, bottom);\n }, function () {\n return NuPositionCss(posName, none, none, right, bottom);\n }, function () {\n return NuPositionCss(posName, left, top, none, none);\n }, function () {\n return NuPositionCss(posName, left, none, none, bottom);\n }, function () {\n return NuPositionCss(posName, left, top, none, none);\n }, function () {\n return NuPositionCss(posName, none, top, right, none);\n });\n };\n var reposition = function (origin, decision) {\n return origin.fold(function () {\n return NuPositionCss('absolute', Option.some(decision.x()), Option.some(decision.y()), Option.none(), Option.none());\n }, function (x, y, width, height) {\n return positionWithDirection('absolute', decision, x, y, width, height);\n }, function (x, y, width, height) {\n return positionWithDirection('fixed', decision, x, y, width, height);\n });\n };\n var toBox = function (origin, element) {\n var rel = curry(find$3, element);\n var position = origin.fold(rel, rel, function () {\n var scroll = get$8();\n return find$3(element).translate(-scroll.left(), -scroll.top());\n });\n var width = getOuter$2(element);\n var height = getOuter$1(element);\n return bounds$1(position.left(), position.top(), width, height);\n };\n var viewport$1 = function (origin, getBounds) {\n return getBounds.fold(function () {\n return origin.fold(win, win, bounds$1);\n }, function (b) {\n return origin.fold(b, b, function () {\n var bounds = b();\n var pos = translate(origin, bounds.x(), bounds.y());\n return bounds$1(pos.left(), pos.top(), bounds.width(), bounds.height());\n });\n });\n };\n var translate = function (origin, x, y) {\n var pos = Position(x, y);\n var removeScroll = function () {\n var outerScroll = get$8();\n return pos.translate(-outerScroll.left(), -outerScroll.top());\n };\n return origin.fold(constant(pos), constant(pos), removeScroll);\n };\n var cata$1 = function (subject, onNone, onRelative, onFixed) {\n return subject.fold(onNone, onRelative, onFixed);\n };\n var none$1 = adt$3.none;\n var relative = adt$3.relative;\n var fixed = adt$3.fixed;\n\n var anchor = Immutable('anchorBox', 'origin');\n var box$1 = function (anchorBox, origin) {\n return anchor(anchorBox, origin);\n };\n\n var cycleBy = function (value, delta, min, max) {\n var r = value + delta;\n return r > max ? min : r < min ? max : r;\n };\n var clamp = function (value, min, max) {\n return Math.min(Math.max(value, min), max);\n };\n\n var decision = MixedBag([\n 'x',\n 'y',\n 'width',\n 'height',\n 'maxHeight',\n 'maxWidth',\n 'direction',\n 'classes',\n 'label',\n 'candidateYforTest'\n ], []);\n\n var adt$4 = Adt.generate([\n { fit: ['reposition'] },\n {\n nofit: [\n 'reposition',\n 'deltaW',\n 'deltaH'\n ]\n }\n ]);\n var calcReposition = function (newX, newY, width, height, bounds) {\n var boundsX = bounds.x();\n var boundsY = bounds.y();\n var boundsWidth = bounds.width();\n var boundsHeight = bounds.height();\n var xInBounds = newX >= boundsX;\n var yInBounds = newY >= boundsY;\n var originInBounds = xInBounds && yInBounds;\n var xFit = newX + width <= boundsX + boundsWidth;\n var yFit = newY + height <= boundsY + boundsHeight;\n var sizeInBounds = xFit && yFit;\n var deltaW = Math.abs(Math.min(width, xInBounds ? boundsX + boundsWidth - newX : boundsX - (newX + width)));\n var deltaH = Math.abs(Math.min(height, yInBounds ? boundsY + boundsHeight - newY : boundsY - (newY + height)));\n var maxX = Math.max(bounds.x(), bounds.right() - width);\n var maxY = Math.max(bounds.y(), bounds.bottom() - height);\n var limitX = clamp(newX, bounds.x(), maxX);\n var limitY = clamp(newY, bounds.y(), maxY);\n return {\n originInBounds: originInBounds,\n sizeInBounds: sizeInBounds,\n limitX: limitX,\n limitY: limitY,\n deltaW: deltaW,\n deltaH: deltaH\n };\n };\n var attempt = function (candidate, width, height, bounds) {\n var candidateX = candidate.x();\n var candidateY = candidate.y();\n var bubbleOffsets = candidate.bubble().offset();\n var bubbleLeft = bubbleOffsets.left();\n var bubbleTop = bubbleOffsets.top();\n var adjustedBounds = adjustBounds(bounds, candidate.boundsRestriction(), bubbleOffsets);\n var boundsY = adjustedBounds.y();\n var boundsBottom = adjustedBounds.bottom();\n var boundsX = adjustedBounds.x();\n var boundsRight = adjustedBounds.right();\n var newX = candidateX + bubbleLeft;\n var newY = candidateY + bubbleTop;\n var _a = calcReposition(newX, newY, width, height, adjustedBounds), originInBounds = _a.originInBounds, sizeInBounds = _a.sizeInBounds, limitX = _a.limitX, limitY = _a.limitY, deltaW = _a.deltaW, deltaH = _a.deltaH;\n var upAvailable = constant(limitY + deltaH - boundsY);\n var downAvailable = constant(boundsBottom - limitY);\n var maxHeight = cataVertical(candidate.direction(), downAvailable, downAvailable, upAvailable);\n var westAvailable = constant(limitX + deltaW - boundsX);\n var eastAvailable = constant(boundsRight - limitX);\n var maxWidth = cataHorizontal(candidate.direction(), eastAvailable, eastAvailable, westAvailable);\n var reposition = decision({\n x: limitX,\n y: limitY,\n width: deltaW,\n height: deltaH,\n maxHeight: maxHeight,\n maxWidth: maxWidth,\n direction: candidate.direction(),\n classes: {\n on: candidate.bubble().classesOn(),\n off: candidate.bubble().classesOff()\n },\n label: candidate.label(),\n candidateYforTest: newY\n });\n return originInBounds && sizeInBounds ? adt$4.fit(reposition) : adt$4.nofit(reposition, deltaW, deltaH);\n };\n var attempts = function (candidates, anchorBox, elementBox, bubbles, bounds) {\n var panelWidth = elementBox.width();\n var panelHeight = elementBox.height();\n var attemptBestFit = function (layout, reposition, deltaW, deltaH) {\n var next = layout(anchorBox, elementBox, bubbles);\n var attemptLayout = attempt(next, panelWidth, panelHeight, bounds);\n return attemptLayout.fold(adt$4.fit, function (newReposition, newDeltaW, newDeltaH) {\n var improved = newDeltaH > deltaH || newDeltaW > deltaW;\n return improved ? adt$4.nofit(newReposition, newDeltaW, newDeltaH) : adt$4.nofit(reposition, deltaW, deltaH);\n });\n };\n var abc = foldl(candidates, function (b, a) {\n var bestNext = curry(attemptBestFit, a);\n return b.fold(adt$4.fit, bestNext);\n }, adt$4.nofit(decision({\n x: anchorBox.x(),\n y: anchorBox.y(),\n width: elementBox.width(),\n height: elementBox.height(),\n maxHeight: elementBox.height(),\n maxWidth: elementBox.width(),\n direction: southeast(),\n classes: {\n on: [],\n off: []\n },\n label: 'none',\n candidateYforTest: anchorBox.y()\n }), -1, -1));\n return abc.fold(identity, identity);\n };\n\n var elementSize = function (p) {\n return {\n width: constant(getOuter$2(p)),\n height: constant(getOuter$1(p))\n };\n };\n var layout = function (anchorBox, element, bubbles, options) {\n remove$6(element, 'max-height');\n remove$6(element, 'max-width');\n var elementBox = elementSize(element);\n return attempts(options.preference(), anchorBox, elementBox, bubbles, options.bounds());\n };\n var setClasses = function (element, decision) {\n var classInfo = decision.classes();\n remove$5(element, classInfo.off);\n add$3(element, classInfo.on);\n };\n var setHeight = function (element, decision, options) {\n var maxHeightFunction = options.maxHeightFunction();\n maxHeightFunction(element, decision.maxHeight());\n };\n var setWidth = function (element, decision, options) {\n var maxWidthFunction = options.maxWidthFunction();\n maxWidthFunction(element, decision.maxWidth());\n };\n var position = function (element, decision, options) {\n applyPositionCss(element, reposition(options.origin(), decision));\n };\n\n var setMaxHeight = function (element, maxHeight) {\n setMax(element, Math.floor(maxHeight));\n };\n var anchored = constant(function (element, available) {\n setMaxHeight(element, available);\n setAll$1(element, {\n 'overflow-x': 'hidden',\n 'overflow-y': 'auto'\n });\n });\n var expandable = constant(function (element, available) {\n setMaxHeight(element, available);\n });\n\n var reparteeOptions = MixedBag([\n 'bounds',\n 'origin',\n 'preference',\n 'maxHeightFunction',\n 'maxWidthFunction'\n ], []);\n var defaultOr = function (options, key, dephault) {\n return options[key] === undefined ? dephault : options[key];\n };\n var simple = function (anchor, element, bubble, layouts, getBounds, overrideOptions) {\n var maxHeightFunction = defaultOr(overrideOptions, 'maxHeightFunction', anchored());\n var maxWidthFunction = defaultOr(overrideOptions, 'maxWidthFunction', noop);\n var anchorBox = anchor.anchorBox();\n var origin = anchor.origin();\n var options = reparteeOptions({\n bounds: viewport$1(origin, getBounds),\n origin: origin,\n preference: layouts,\n maxHeightFunction: maxHeightFunction,\n maxWidthFunction: maxWidthFunction\n });\n go(anchorBox, element, bubble, options);\n };\n var go = function (anchorBox, element, bubble, options) {\n var decision = layout(anchorBox, element, bubble, options);\n position(element, decision, options);\n setClasses(element, decision);\n setHeight(element, decision, options);\n setWidth(element, decision, options);\n };\n\n var allAlignments = [\n 'valignCentre',\n 'alignLeft',\n 'alignRight',\n 'alignCentre',\n 'top',\n 'bottom',\n 'left',\n 'right'\n ];\n var nu$8 = function (width, yoffset, classes) {\n var getClasses = function (prop) {\n return get(classes, prop).getOr([]);\n };\n var make = function (xDelta, yDelta, alignmentsOn) {\n var alignmentsOff = difference(allAlignments, alignmentsOn);\n return {\n offset: function () {\n return Position(xDelta, yDelta);\n },\n classesOn: function () {\n return bind(alignmentsOn, getClasses);\n },\n classesOff: function () {\n return bind(alignmentsOff, getClasses);\n }\n };\n };\n return {\n southeast: function () {\n return make(-width, yoffset, [\n 'top',\n 'alignLeft'\n ]);\n },\n southwest: function () {\n return make(width, yoffset, [\n 'top',\n 'alignRight'\n ]);\n },\n south: function () {\n return make(-width / 2, yoffset, [\n 'top',\n 'alignCentre'\n ]);\n },\n northeast: function () {\n return make(-width, -yoffset, [\n 'bottom',\n 'alignLeft'\n ]);\n },\n northwest: function () {\n return make(width, -yoffset, [\n 'bottom',\n 'alignRight'\n ]);\n },\n north: function () {\n return make(-width / 2, -yoffset, [\n 'bottom',\n 'alignCentre'\n ]);\n },\n east: function () {\n return make(width, -yoffset / 2, [\n 'valignCentre',\n 'left'\n ]);\n },\n west: function () {\n return make(-width, -yoffset / 2, [\n 'valignCentre',\n 'right'\n ]);\n },\n innerNorthwest: function () {\n return make(-width, yoffset, [\n 'top',\n 'alignRight'\n ]);\n },\n innerNortheast: function () {\n return make(width, yoffset, [\n 'top',\n 'alignLeft'\n ]);\n },\n innerNorth: function () {\n return make(-width / 2, yoffset, [\n 'top',\n 'alignCentre'\n ]);\n },\n innerSouthwest: function () {\n return make(-width, -yoffset, [\n 'bottom',\n 'alignRight'\n ]);\n },\n innerSoutheast: function () {\n return make(width, -yoffset, [\n 'bottom',\n 'alignLeft'\n ]);\n },\n innerSouth: function () {\n return make(-width / 2, -yoffset, [\n 'bottom',\n 'alignCentre'\n ]);\n },\n innerWest: function () {\n return make(width, -yoffset / 2, [\n 'valignCentre',\n 'right'\n ]);\n },\n innerEast: function () {\n return make(-width, -yoffset / 2, [\n 'valignCentre',\n 'left'\n ]);\n }\n };\n };\n var fallback = function () {\n return nu$8(0, 0, {});\n };\n\n var nu$9 = function (x) {\n return x;\n };\n\n var onDirection = function (isLtr, isRtl) {\n return function (element) {\n return getDirection(element) === 'rtl' ? isRtl : isLtr;\n };\n };\n var getDirection = function (element) {\n return get$4(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n };\n\n var AttributeValue;\n (function (AttributeValue) {\n AttributeValue['TopToBottom'] = 'toptobottom';\n AttributeValue['BottomToTop'] = 'bottomtotop';\n }(AttributeValue || (AttributeValue = {})));\n var Attribute = 'data-alloy-vertical-dir';\n var isBottomToTopDir = function (el) {\n return closest$2(el, function (current) {\n return isElement(current) && get$2(current, Attribute) === AttributeValue.BottomToTop;\n });\n };\n\n var schema$1 = function () {\n return optionObjOf('layouts', [\n strict$1('onLtr'),\n strict$1('onRtl'),\n option('onBottomLtr'),\n option('onBottomRtl')\n ]);\n };\n var get$a = function (elem, info, defaultLtr, defaultRtl, defaultBottomLtr, defaultBottomRtl, dirElement) {\n var isBottomToTop = dirElement.map(isBottomToTopDir).getOr(false);\n var customLtr = info.layouts.map(function (ls) {\n return ls.onLtr(elem);\n });\n var customRtl = info.layouts.map(function (ls) {\n return ls.onRtl(elem);\n });\n var ltr = isBottomToTop ? info.layouts.bind(function (ls) {\n return ls.onBottomLtr.map(function (f) {\n return f(elem);\n });\n }).or(customLtr).getOr(defaultBottomLtr) : customLtr.getOr(defaultLtr);\n var rtl = isBottomToTop ? info.layouts.bind(function (ls) {\n return ls.onBottomRtl.map(function (f) {\n return f(elem);\n });\n }).or(customRtl).getOr(defaultBottomRtl) : customRtl.getOr(defaultRtl);\n var f = onDirection(ltr, rtl);\n return f(elem);\n };\n\n var placement = function (component, anchorInfo, origin) {\n var hotspot = anchorInfo.hotspot;\n var anchorBox = toBox(origin, hotspot.element());\n var layouts = get$a(component.element(), anchorInfo, belowOrAbove(), belowOrAboveRtl(), aboveOrBelow(), aboveOrBelowRtl(), Option.some(anchorInfo.hotspot.element()));\n return Option.some(nu$9({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Option.none()\n }));\n };\n var HotspotAnchor = [\n strict$1('hotspot'),\n option('bubble'),\n defaulted$1('overrides', {}),\n schema$1(),\n output('placement', placement)\n ];\n\n var placement$1 = function (component, anchorInfo, origin) {\n var pos = translate(origin, anchorInfo.x, anchorInfo.y);\n var anchorBox = bounds$1(pos.left(), pos.top(), anchorInfo.width, anchorInfo.height);\n var layouts = get$a(component.element(), anchorInfo, all$2(), allRtl(), all$2(), allRtl(), Option.none());\n return Option.some(nu$9({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble,\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Option.none()\n }));\n };\n var MakeshiftAnchor = [\n strict$1('x'),\n strict$1('y'),\n defaulted$1('height', 0),\n defaulted$1('width', 0),\n defaulted$1('bubble', fallback()),\n defaulted$1('overrides', {}),\n schema$1(),\n output('placement', placement$1)\n ];\n\n var zeroWidth = '\\uFEFF';\n var nbsp = '\\xA0';\n\n var create$2 = Immutable('start', 'soffset', 'finish', 'foffset');\n var SimRange = { create: create$2 };\n\n var adt$5 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata$2 = 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$2 = adt$5.before;\n var on = adt$5.on;\n var after$1 = adt$5.after;\n var Situ = {\n before: before$2,\n on: on,\n after: after$1,\n cata: cata$2,\n getStart: getStart\n };\n\n var adt$6 = 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$6.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$6.domRange;\n var relative$1 = adt$6.relative;\n var exact = adt$6.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range$1 = SimRange.create;\n var Selection = {\n domRange: domRange,\n relative: relative$1,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range$1\n };\n\n var setStart = function (rng, situ) {\n situ.fold(function (e) {\n rng.setStartBefore(e.dom());\n }, function (e, o) {\n rng.setStart(e.dom(), o);\n }, function (e) {\n rng.setStartAfter(e.dom());\n });\n };\n var setFinish = function (rng, situ) {\n situ.fold(function (e) {\n rng.setEndBefore(e.dom());\n }, function (e, o) {\n rng.setEnd(e.dom(), o);\n }, function (e) {\n rng.setEndAfter(e.dom());\n });\n };\n var relativeToNative = function (win, startSitu, finishSitu) {\n var range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n var exactToNative = function (win, start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var toRect = function (rect) {\n return {\n left: constant(rect.left),\n top: constant(rect.top),\n right: constant(rect.right),\n bottom: constant(rect.bottom),\n width: constant(rect.width),\n height: constant(rect.height)\n };\n };\n var getFirstRect = function (rng) {\n var rects = rng.getClientRects();\n var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();\n };\n\n var adt$7 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var fromRange = function (win, type, range) {\n return type(Element.fromDom(range.startContainer), range.startOffset, Element.fromDom(range.endContainer), range.endOffset);\n };\n var getRanges = function (win, selection) {\n return selection.match({\n domRange: function (rng) {\n return {\n ltr: constant(rng),\n rtl: Option.none\n };\n },\n relative: function (startSitu, finishSitu) {\n return {\n ltr: cached(function () {\n return relativeToNative(win, startSitu, finishSitu);\n }),\n rtl: cached(function () {\n return Option.some(relativeToNative(win, finishSitu, startSitu));\n })\n };\n },\n exact: function (start, soffset, finish, foffset) {\n return {\n ltr: cached(function () {\n return exactToNative(win, start, soffset, finish, foffset);\n }),\n rtl: cached(function () {\n return Option.some(exactToNative(win, finish, foffset, start, soffset));\n })\n };\n }\n });\n };\n var doDiagnose = function (win, ranges) {\n var rng = ranges.ltr();\n if (rng.collapsed) {\n var reversed = ranges.rtl().filter(function (rev) {\n return rev.collapsed === false;\n });\n return reversed.map(function (rev) {\n return adt$7.rtl(Element.fromDom(rev.endContainer), rev.endOffset, Element.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$7.ltr, rng);\n });\n } else {\n return fromRange(win, adt$7.ltr, rng);\n }\n };\n var diagnose = function (win, selection) {\n var ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n var asLtrRange = function (win, selection) {\n var diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n },\n rtl: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(finish.dom(), foffset);\n rng.setEnd(start.dom(), soffset);\n return rng;\n }\n });\n };\n var ltr = adt$7.ltr;\n var rtl = adt$7.rtl;\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$2 = NodeValue(isText, 'text');\n var get$b = function (element) {\n return api$2.get(element);\n };\n var getOption = function (element) {\n return api$2.getOption(element);\n };\n\n var getEnd = function (element) {\n return name(element) === 'img' ? 1 : getOption(element).fold(function () {\n return children(element).length;\n }, function (v) {\n return v.length;\n });\n };\n var isTextNodeWithCursorPosition = function (el) {\n return getOption(el).filter(function (text) {\n return text.trim().length !== 0 || text.indexOf(nbsp) > -1;\n }).isSome();\n };\n var elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n var isCursorPosition = function (elem) {\n var hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains(elementsWithCursorPosition, name(elem));\n };\n\n var last$1 = function (element) {\n return descendantRtl(element, isCursorPosition);\n };\n var descendantRtl = function (scope, predicate) {\n var descend = function (element) {\n var children$1 = children(element);\n for (var i = children$1.length - 1; i >= 0; i--) {\n var child = children$1[i];\n if (predicate(child)) {\n return Option.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope);\n };\n\n var descendants = function (scope, selector) {\n return all(selector, scope);\n };\n\n var makeRange = function (start, soffset, finish, foffset) {\n var doc = owner(start);\n var rng = doc.dom().createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var after$2 = function (start, soffset, finish, foffset) {\n var r = makeRange(start, soffset, finish, foffset);\n var same = eq(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n var readRange = function (selection) {\n if (selection.rangeCount > 0) {\n var firstRng = selection.getRangeAt(0);\n var lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Option.some(SimRange.create(Element.fromDom(firstRng.startContainer), firstRng.startOffset, Element.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Option.none();\n }\n };\n var doGetExact = function (selection) {\n var anchor = Element.fromDom(selection.anchorNode);\n var focus = Element.fromDom(selection.focusNode);\n return after$2(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Option.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n };\n var getExact = function (win) {\n return Option.from(win.getSelection()).filter(function (sel) {\n return sel.rangeCount > 0;\n }).bind(doGetExact);\n };\n var getFirstRect$1 = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getFirstRect(rng);\n };\n\n var point = Immutable('element', 'offset');\n var descendOnce = function (element, offset) {\n var children$1 = children(element);\n if (children$1.length === 0) {\n return point(element, offset);\n } else if (offset < children$1.length) {\n return point(children$1[offset], 0);\n } else {\n var last = children$1[children$1.length - 1];\n var len = isText(last) ? get$b(last).length : children(last).length;\n return point(last, len);\n }\n };\n\n var adt$8 = Adt.generate([\n { screen: ['point'] },\n {\n absolute: [\n 'point',\n 'scrollLeft',\n 'scrollTop'\n ]\n }\n ]);\n var toFixed = function (pos) {\n return pos.fold(identity, function (point, scrollLeft, scrollTop) {\n return point.translate(-scrollLeft, -scrollTop);\n });\n };\n var toAbsolute = function (pos) {\n return pos.fold(identity, identity);\n };\n var sum = function (points) {\n return foldl(points, function (b, a) {\n return b.translate(a.left(), a.top());\n }, Position(0, 0));\n };\n var sumAsFixed = function (positions) {\n var points = map(positions, toFixed);\n return sum(points);\n };\n var sumAsAbsolute = function (positions) {\n var points = map(positions, toAbsolute);\n return sum(points);\n };\n var screen = adt$8.screen;\n var absolute$2 = adt$8.absolute;\n\n var getOffset = function (component, origin, anchorInfo) {\n var win = defaultView(anchorInfo.root).dom();\n var hasSameOwner = function (frame) {\n var frameOwner = owner(frame);\n var compOwner = owner(component.element());\n return eq(frameOwner, compOwner);\n };\n return Option.from(win.frameElement).map(Element.fromDom).filter(hasSameOwner).map(absolute);\n };\n var getRootPoint = function (component, origin, anchorInfo) {\n var doc = owner(component.element());\n var outerScroll = get$8(doc);\n var offset = getOffset(component, origin, anchorInfo).getOr(outerScroll);\n return absolute$2(offset, outerScroll.left(), outerScroll.top());\n };\n\n var capRect = function (left, top, width, height) {\n var newLeft = left, newTop = top, newWidth = width, newHeight = height;\n if (left < 0) {\n newLeft = 0;\n newWidth = width + left;\n }\n if (top < 0) {\n newTop = 0;\n newHeight = height + top;\n }\n var point = screen(Position(newLeft, newTop));\n return Option.some(pointed(point, newWidth, newHeight));\n };\n var calcNewAnchor = function (optBox, rootPoint, anchorInfo, origin, elem) {\n return optBox.map(function (box) {\n var points = [\n rootPoint,\n box.point()\n ];\n var topLeft = cata$1(origin, function () {\n return sumAsAbsolute(points);\n }, function () {\n return sumAsAbsolute(points);\n }, function () {\n return sumAsFixed(points);\n });\n var anchorBox = rect(topLeft.left(), topLeft.top(), box.width(), box.height());\n var layoutsLtr = anchorInfo.showAbove ? aboveOrBelow() : belowOrAbove();\n var layoutsRtl = anchorInfo.showAbove ? belowOrAboveRtl() : belowOrAboveRtl();\n var layouts = get$a(elem, anchorInfo, layoutsLtr, layoutsRtl, layoutsLtr, layoutsRtl, Option.none());\n return nu$9({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Option.none()\n });\n });\n };\n var ContentAnchorCommon = {\n capRect: capRect,\n calcNewAnchor: calcNewAnchor\n };\n\n var point$1 = Immutable('element', 'offset');\n var descendOnce$1 = function (element, offset) {\n return isText(element) ? point$1(element, offset) : descendOnce(element, offset);\n };\n var getAnchorSelection = function (win, anchorInfo) {\n var getSelection = anchorInfo.getSelection.getOrThunk(function () {\n return function () {\n return getExact(win);\n };\n });\n return getSelection().map(function (sel) {\n var modStart = descendOnce$1(sel.start(), sel.soffset());\n var modFinish = descendOnce$1(sel.finish(), sel.foffset());\n return Selection.range(modStart.element(), modStart.offset(), modFinish.element(), modFinish.offset());\n });\n };\n var placement$2 = function (component, anchorInfo, origin) {\n var win = defaultView(anchorInfo.root).dom();\n var rootPoint = getRootPoint(component, origin, anchorInfo);\n var selectionBox = getAnchorSelection(win, anchorInfo).bind(function (sel) {\n var optRect = getFirstRect$1(win, Selection.exactFromRange(sel)).orThunk(function () {\n var x = Element.fromText(zeroWidth);\n before(sel.start(), x);\n return getFirstRect$1(win, Selection.exact(x, 0, x, 1)).map(function (rect) {\n remove(x);\n return rect;\n });\n });\n return optRect.bind(function (rawRect) {\n return ContentAnchorCommon.capRect(rawRect.left(), rawRect.top(), rawRect.width(), rawRect.height());\n });\n });\n var targetElement = getAnchorSelection(win, anchorInfo).bind(function (sel) {\n return isElement(sel.start()) ? Option.some(sel.start()) : parent(sel.start());\n });\n var elem = targetElement.getOr(component.element());\n return ContentAnchorCommon.calcNewAnchor(selectionBox, rootPoint, anchorInfo, origin, elem);\n };\n var SelectionAnchor = [\n option('getSelection'),\n strict$1('root'),\n option('bubble'),\n schema$1(),\n defaulted$1('overrides', {}),\n defaulted$1('showAbove', false),\n output('placement', placement$2)\n ];\n\n var placement$3 = function (component, anchorInfo, origin) {\n var rootPoint = getRootPoint(component, origin, anchorInfo);\n return anchorInfo.node.bind(function (target) {\n var rect = target.dom().getBoundingClientRect();\n var nodeBox = ContentAnchorCommon.capRect(rect.left, rect.top, rect.width, rect.height);\n var elem = anchorInfo.node.getOr(component.element());\n return ContentAnchorCommon.calcNewAnchor(nodeBox, rootPoint, anchorInfo, origin, elem);\n });\n };\n var NodeAnchor = [\n strict$1('node'),\n strict$1('root'),\n option('bubble'),\n schema$1(),\n defaulted$1('overrides', {}),\n defaulted$1('showAbove', false),\n output('placement', placement$3)\n ];\n\n var eastX$1 = function (anchor) {\n return anchor.x() + anchor.width();\n };\n var westX$1 = function (anchor, element) {\n return anchor.x() - element.width();\n };\n var northY$1 = function (anchor, element) {\n return anchor.y() - element.height() + anchor.height();\n };\n var southY$1 = function (anchor) {\n return anchor.y();\n };\n var southeast$2 = function (anchor, element, bubbles) {\n return nu$7(eastX$1(anchor), southY$1(anchor), bubbles.southeast(), southeast(), boundsRestriction(anchor, {\n left: 0,\n top: 2\n }), 'link-layout-se');\n };\n var southwest$2 = function (anchor, element, bubbles) {\n return nu$7(westX$1(anchor, element), southY$1(anchor), bubbles.southwest(), southwest(), boundsRestriction(anchor, {\n right: 1,\n top: 2\n }), 'link-layout-sw');\n };\n var northeast$2 = function (anchor, element, bubbles) {\n return nu$7(eastX$1(anchor), northY$1(anchor, element), bubbles.northeast(), northeast(), boundsRestriction(anchor, {\n left: 0,\n bottom: 3\n }), 'link-layout-ne');\n };\n var northwest$2 = function (anchor, element, bubbles) {\n return nu$7(westX$1(anchor, element), northY$1(anchor, element), bubbles.northwest(), northwest(), boundsRestriction(anchor, {\n right: 1,\n bottom: 3\n }), 'link-layout-nw');\n };\n var all$3 = function () {\n return [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2\n ];\n };\n var allRtl$1 = function () {\n return [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2\n ];\n };\n\n var placement$4 = function (component, submenuInfo, origin) {\n var anchorBox = toBox(origin, submenuInfo.item.element());\n var layouts = get$a(component.element(), submenuInfo, all$3(), allRtl$1(), all$3(), allRtl$1(), Option.none());\n return Option.some(nu$9({\n anchorBox: anchorBox,\n bubble: fallback(),\n overrides: submenuInfo.overrides,\n layouts: layouts,\n placer: Option.none()\n }));\n };\n var SubmenuAnchor = [\n strict$1('item'),\n schema$1(),\n defaulted$1('overrides', {}),\n output('placement', placement$4)\n ];\n\n var AnchorSchema = choose$1('anchor', {\n selection: SelectionAnchor,\n node: NodeAnchor,\n hotspot: HotspotAnchor,\n submenu: SubmenuAnchor,\n makeshift: MakeshiftAnchor\n });\n\n var getFixedOrigin = function () {\n var html = domGlobals.document.documentElement;\n return fixed(0, 0, html.clientWidth, html.clientHeight);\n };\n var getRelativeOrigin = function (component) {\n var position = absolute(component.element());\n var bounds = component.element().dom().getBoundingClientRect();\n return relative(position.left(), position.top(), bounds.width, bounds.height);\n };\n var place = function (component, origin, anchoring, getBounds, placee) {\n var anchor = box$1(anchoring.anchorBox, origin);\n simple(anchor, placee.element(), anchoring.bubble, anchoring.layouts, getBounds, anchoring.overrides);\n };\n var position$1 = function (component, posConfig, posState, anchor, placee) {\n positionWithin(component, posConfig, posState, anchor, placee, Option.none());\n };\n var positionWithin = function (component, posConfig, posState, anchor, placee, boxElement) {\n var boundsBox = boxElement.map(box);\n return positionWithinBounds(component, posConfig, posState, anchor, placee, boundsBox);\n };\n var positionWithinBounds = function (component, posConfig, posState, anchor, placee, bounds) {\n var anchorage = asRawOrDie('positioning anchor.info', AnchorSchema, anchor);\n preserve(function () {\n set$2(placee.element(), 'position', 'fixed');\n var oldVisibility = getRaw(placee.element(), 'visibility');\n set$2(placee.element(), 'visibility', 'hidden');\n var origin = posConfig.useFixed() ? getFixedOrigin() : getRelativeOrigin(component);\n var placer = anchorage.placement;\n var getBounds = bounds.map(constant).or(posConfig.getBounds);\n placer(component, anchorage, origin).each(function (anchoring) {\n var doPlace = anchoring.placer.getOr(place);\n doPlace(component, origin, anchoring, getBounds, placee);\n });\n oldVisibility.fold(function () {\n remove$6(placee.element(), 'visibility');\n }, function (vis) {\n set$2(placee.element(), 'visibility', vis);\n });\n if (getRaw(placee.element(), 'left').isNone() && getRaw(placee.element(), 'top').isNone() && getRaw(placee.element(), 'right').isNone() && getRaw(placee.element(), 'bottom').isNone() && getRaw(placee.element(), 'position').is('fixed')) {\n remove$6(placee.element(), 'position');\n }\n }, placee.element());\n };\n var getMode = function (component, pConfig, pState) {\n return pConfig.useFixed() ? 'fixed' : 'absolute';\n };\n\n var PositionApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n position: position$1,\n positionWithin: positionWithin,\n positionWithinBounds: positionWithinBounds,\n getMode: getMode\n });\n\n var PositionSchema = [\n defaulted$1('useFixed', never),\n option('getBounds')\n ];\n\n var Positioning = create$1({\n fields: PositionSchema,\n name: 'positioning',\n active: ActivePosition,\n apis: PositionApis\n });\n\n var fireDetaching = function (component) {\n emit(component, detachedFromDom());\n var children = component.components();\n each(children, fireDetaching);\n };\n var fireAttaching = function (component) {\n var children = component.components();\n each(children, fireAttaching);\n emit(component, attachedToDom());\n };\n var attach = function (parent, child) {\n append(parent.element(), child.element());\n };\n var detachChildren = function (component) {\n each(component.components(), function (childComp) {\n return remove(childComp.element());\n });\n empty(component.element());\n component.syncComponents();\n };\n var replaceChildren = function (component, newChildren) {\n var subs = component.components();\n detachChildren(component);\n var deleted = difference(subs, newChildren);\n each(deleted, function (comp) {\n fireDetaching(comp);\n component.getSystem().removeFromWorld(comp);\n });\n each(newChildren, function (childComp) {\n if (!childComp.getSystem().isConnected()) {\n component.getSystem().addToWorld(childComp);\n attach(component, childComp);\n if (inBody(component.element())) {\n fireAttaching(childComp);\n }\n } else {\n attach(component, childComp);\n }\n component.syncComponents();\n });\n };\n\n var attach$1 = function (parent, child) {\n attachWith(parent, child, append);\n };\n var attachWith = function (parent, child, insertion) {\n parent.getSystem().addToWorld(child);\n insertion(parent.element(), child.element());\n if (inBody(parent.element())) {\n fireAttaching(child);\n }\n parent.syncComponents();\n };\n var doDetach = function (component) {\n fireDetaching(component);\n remove(component.element());\n component.getSystem().removeFromWorld(component);\n };\n var detach = function (component) {\n var parent$1 = parent(component.element()).bind(function (p) {\n return component.getSystem().getByDom(p).toOption();\n });\n doDetach(component);\n parent$1.each(function (p) {\n p.syncComponents();\n });\n };\n var detachChildren$1 = function (component) {\n var subs = component.components();\n each(subs, doDetach);\n empty(component.element());\n component.syncComponents();\n };\n var attachSystem = function (element, guiSystem) {\n attachSystemWith(element, guiSystem, append);\n };\n var attachSystemAfter = function (element, guiSystem) {\n attachSystemWith(element, guiSystem, after);\n };\n var attachSystemWith = function (element, guiSystem, inserter) {\n inserter(element, guiSystem.element());\n var children$1 = children(guiSystem.element());\n each(children$1, function (child) {\n guiSystem.getByDom(child).each(fireAttaching);\n });\n };\n var detachSystem = function (guiSystem) {\n var children$1 = children(guiSystem.element());\n each(children$1, function (child) {\n guiSystem.getByDom(child).each(fireDetaching);\n });\n remove(guiSystem.element());\n };\n\n var rebuild = function (sandbox, sConfig, sState, data) {\n sState.get().each(function (data) {\n detachChildren$1(sandbox);\n });\n var point = sConfig.getAttachPoint(sandbox);\n attach$1(point, sandbox);\n var built = sandbox.getSystem().build(data);\n attach$1(sandbox, built);\n sState.set(built);\n return built;\n };\n var open = function (sandbox, sConfig, sState, data) {\n var newState = rebuild(sandbox, sConfig, sState, data);\n sConfig.onOpen(sandbox, newState);\n return newState;\n };\n var setContent = function (sandbox, sConfig, sState, data) {\n return sState.get().map(function () {\n return rebuild(sandbox, sConfig, sState, data);\n });\n };\n var openWhileCloaked = function (sandbox, sConfig, sState, data, transaction) {\n cloak(sandbox, sConfig);\n open(sandbox, sConfig, sState, data);\n transaction();\n decloak(sandbox, sConfig);\n };\n var close = function (sandbox, sConfig, sState) {\n sState.get().each(function (data) {\n detachChildren$1(sandbox);\n detach(sandbox);\n sConfig.onClose(sandbox, data);\n sState.clear();\n });\n };\n var isOpen = function (sandbox, sConfig, sState) {\n return sState.isOpen();\n };\n var isPartOf$1 = function (sandbox, sConfig, sState, queryElem) {\n return isOpen(sandbox, sConfig, sState) && sState.get().exists(function (data) {\n return sConfig.isPartOf(sandbox, data, queryElem);\n });\n };\n var getState = function (sandbox, sConfig, sState) {\n return sState.get();\n };\n var store = function (sandbox, cssKey, attr, newValue) {\n getRaw(sandbox.element(), cssKey).fold(function () {\n remove$1(sandbox.element(), attr);\n }, function (v) {\n set$1(sandbox.element(), attr, v);\n });\n set$2(sandbox.element(), cssKey, newValue);\n };\n var restore = function (sandbox, cssKey, attr) {\n if (has$1(sandbox.element(), attr)) {\n var oldValue = get$2(sandbox.element(), attr);\n set$2(sandbox.element(), cssKey, oldValue);\n } else {\n remove$6(sandbox.element(), cssKey);\n }\n };\n var cloak = function (sandbox, sConfig, sState) {\n var sink = sConfig.getAttachPoint(sandbox);\n set$2(sandbox.element(), 'position', Positioning.getMode(sink));\n store(sandbox, 'visibility', sConfig.cloakVisibilityAttr, 'hidden');\n };\n var hasPosition = function (element) {\n return exists([\n 'top',\n 'left',\n 'right',\n 'bottom'\n ], function (pos) {\n return getRaw(element, pos).isSome();\n });\n };\n var decloak = function (sandbox, sConfig, sState) {\n if (!hasPosition(sandbox.element())) {\n remove$6(sandbox.element(), 'position');\n }\n restore(sandbox, 'visibility', sConfig.cloakVisibilityAttr);\n };\n\n var SandboxApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n cloak: cloak,\n decloak: decloak,\n open: open,\n openWhileCloaked: openWhileCloaked,\n close: close,\n isOpen: isOpen,\n isPartOf: isPartOf$1,\n getState: getState,\n setContent: setContent\n });\n\n var events$2 = function (sandboxConfig, sandboxState) {\n return derive([run(sandboxClose(), function (sandbox, simulatedEvent) {\n close(sandbox, sandboxConfig, sandboxState);\n })]);\n };\n\n var ActiveSandbox = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$2\n });\n\n var SandboxSchema = [\n onHandler('onOpen'),\n onHandler('onClose'),\n strict$1('isPartOf'),\n strict$1('getAttachPoint'),\n defaulted$1('cloakVisibilityAttr', 'data-precloak-visibility')\n ];\n\n var init = function () {\n var contents = Cell(Option.none());\n var readState = constant('not-implemented');\n var isOpen = function () {\n return contents.get().isSome();\n };\n var set = function (comp) {\n contents.set(Option.some(comp));\n };\n var get = function () {\n return contents.get();\n };\n var clear = function () {\n contents.set(Option.none());\n };\n return nu$5({\n readState: readState,\n isOpen: isOpen,\n clear: clear,\n set: set,\n get: get\n });\n };\n\n var SandboxState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init\n });\n\n var Sandboxing = create$1({\n fields: SandboxSchema,\n name: 'sandboxing',\n active: ActiveSandbox,\n apis: SandboxApis,\n state: SandboxState\n });\n\n var dismissPopups = constant('dismiss.popups');\n var repositionPopups = constant('reposition.popups');\n var mouseReleased = constant('mouse.released');\n\n var schema$2 = objOfOnly([\n defaulted$1('isExtraPart', constant(false)),\n optionObjOf('fireEventInstead', [defaulted$1('event', dismissRequested())])\n ]);\n var receivingChannel = function (rawSpec) {\n var _a;\n var detail = asRawOrDie('Dismissal', schema$2, rawSpec);\n return _a = {}, _a[dismissPopups()] = {\n schema: objOfOnly([strict$1('target')]),\n onReceive: function (sandbox, data) {\n if (Sandboxing.isOpen(sandbox)) {\n var isPart = Sandboxing.isPartOf(sandbox, data.target) || detail.isExtraPart(sandbox, data.target);\n if (!isPart) {\n detail.fireEventInstead.fold(function () {\n return Sandboxing.close(sandbox);\n }, function (fe) {\n return emit(sandbox, fe.event);\n });\n }\n }\n }\n }, _a;\n };\n\n var schema$3 = objOfOnly([\n optionObjOf('fireEventInstead', [defaulted$1('event', repositionRequested())]),\n strictFunction('doReposition')\n ]);\n var receivingChannel$1 = function (rawSpec) {\n var _a;\n var detail = asRawOrDie('Reposition', schema$3, rawSpec);\n return _a = {}, _a[repositionPopups()] = {\n onReceive: function (sandbox) {\n if (Sandboxing.isOpen(sandbox)) {\n detail.fireEventInstead.fold(function () {\n return detail.doReposition(sandbox);\n }, function (fe) {\n return emit(sandbox, fe.event);\n });\n }\n }\n }, _a;\n };\n\n var onLoad = function (component, repConfig, repState) {\n repConfig.store.manager.onLoad(component, repConfig, repState);\n };\n var onUnload = function (component, repConfig, repState) {\n repConfig.store.manager.onUnload(component, repConfig, repState);\n };\n var setValue = function (component, repConfig, repState, data) {\n repConfig.store.manager.setValue(component, repConfig, repState, data);\n };\n var getValue = function (component, repConfig, repState) {\n return repConfig.store.manager.getValue(component, repConfig, repState);\n };\n var getState$1 = function (component, repConfig, repState) {\n return repState;\n };\n\n var RepresentApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad,\n onUnload: onUnload,\n setValue: setValue,\n getValue: getValue,\n getState: getState$1\n });\n\n var events$3 = function (repConfig, repState) {\n var es = repConfig.resetOnDom ? [\n runOnAttached(function (comp, se) {\n onLoad(comp, repConfig, repState);\n }),\n runOnDetached(function (comp, se) {\n onUnload(comp, repConfig, repState);\n })\n ] : [loadEvent(repConfig, repState, onLoad)];\n return derive(es);\n };\n\n var ActiveRepresenting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$3\n });\n\n var memory = function () {\n var data = Cell(null);\n var readState = function () {\n return {\n mode: 'memory',\n value: data.get()\n };\n };\n var isNotSet = function () {\n return data.get() === null;\n };\n var clear = function () {\n data.set(null);\n };\n return nu$5({\n set: data.set,\n get: data.get,\n isNotSet: isNotSet,\n clear: clear,\n readState: readState\n });\n };\n var manual = function () {\n var readState = function () {\n };\n return nu$5({ readState: readState });\n };\n var dataset = function () {\n var dataByValue = Cell({});\n var dataByText = Cell({});\n var readState = function () {\n return {\n mode: 'dataset',\n dataByValue: dataByValue.get(),\n dataByText: dataByText.get()\n };\n };\n var clear = function () {\n dataByValue.set({});\n dataByText.set({});\n };\n var lookup = function (itemString) {\n return get(dataByValue.get(), itemString).orThunk(function () {\n return get(dataByText.get(), itemString);\n });\n };\n var update = function (items) {\n var currentDataByValue = dataByValue.get();\n var currentDataByText = dataByText.get();\n var newDataByValue = {};\n var newDataByText = {};\n each(items, function (item) {\n newDataByValue[item.value] = item;\n get(item, 'meta').each(function (meta) {\n get(meta, 'text').each(function (text) {\n newDataByText[text] = item;\n });\n });\n });\n dataByValue.set(__assign(__assign({}, currentDataByValue), newDataByValue));\n dataByText.set(__assign(__assign({}, currentDataByText), newDataByText));\n };\n return nu$5({\n readState: readState,\n lookup: lookup,\n update: update,\n clear: clear\n });\n };\n var init$1 = function (spec) {\n return spec.store.manager.state(spec);\n };\n\n var RepresentState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n memory: memory,\n dataset: dataset,\n manual: manual,\n init: init$1\n });\n\n var setValue$1 = function (component, repConfig, repState, data) {\n var store = repConfig.store;\n repState.update([data]);\n store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n var getValue$1 = function (component, repConfig, repState) {\n var store = repConfig.store;\n var key = store.getDataKey(component);\n return repState.lookup(key).fold(function () {\n return store.getFallbackEntry(key);\n }, function (data) {\n return data;\n });\n };\n var onLoad$1 = function (component, repConfig, repState) {\n var store = repConfig.store;\n store.initialValue.each(function (data) {\n setValue$1(component, repConfig, repState, data);\n });\n };\n var onUnload$1 = function (component, repConfig, repState) {\n repState.clear();\n };\n var DatasetStore = [\n option('initialValue'),\n strict$1('getFallbackEntry'),\n strict$1('getDataKey'),\n strict$1('setValue'),\n output('manager', {\n setValue: setValue$1,\n getValue: getValue$1,\n onLoad: onLoad$1,\n onUnload: onUnload$1,\n state: dataset\n })\n ];\n\n var getValue$2 = function (component, repConfig, repState) {\n return repConfig.store.getValue(component);\n };\n var setValue$2 = function (component, repConfig, repState, data) {\n repConfig.store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n var onLoad$2 = function (component, repConfig, repState) {\n repConfig.store.initialValue.each(function (data) {\n repConfig.store.setValue(component, data);\n });\n };\n var ManualStore = [\n strict$1('getValue'),\n defaulted$1('setValue', noop),\n option('initialValue'),\n output('manager', {\n setValue: setValue$2,\n getValue: getValue$2,\n onLoad: onLoad$2,\n onUnload: noop,\n state: NoState.init\n })\n ];\n\n var setValue$3 = function (component, repConfig, repState, data) {\n repState.set(data);\n repConfig.onSetValue(component, data);\n };\n var getValue$3 = function (component, repConfig, repState) {\n return repState.get();\n };\n var onLoad$3 = function (component, repConfig, repState) {\n repConfig.store.initialValue.each(function (initVal) {\n if (repState.isNotSet()) {\n repState.set(initVal);\n }\n });\n };\n var onUnload$2 = function (component, repConfig, repState) {\n repState.clear();\n };\n var MemoryStore = [\n option('initialValue'),\n output('manager', {\n setValue: setValue$3,\n getValue: getValue$3,\n onLoad: onLoad$3,\n onUnload: onUnload$2,\n state: memory\n })\n ];\n\n var RepresentSchema = [\n defaultedOf('store', { mode: 'memory' }, choose$1('mode', {\n memory: MemoryStore,\n manual: ManualStore,\n dataset: DatasetStore\n })),\n onHandler('onSetValue'),\n defaulted$1('resetOnDom', false)\n ];\n\n var Representing = create$1({\n fields: RepresentSchema,\n name: 'representing',\n active: ActiveRepresenting,\n apis: RepresentApis,\n extra: {\n setValueFrom: function (component, source) {\n var value = Representing.getValue(source);\n Representing.setValue(component, value);\n }\n },\n state: RepresentState\n });\n\n var field$1 = function (name, forbidden) {\n return defaultedObjOf(name, {}, map(forbidden, function (f) {\n return forbid(f.name(), 'Cannot configure ' + f.name() + ' for ' + name);\n }).concat([state$1('dump', identity)]));\n };\n var get$c = function (data) {\n return data.dump;\n };\n var augment = function (data, original) {\n return __assign(__assign({}, data.dump), derive$1(original));\n };\n var SketchBehaviours = {\n field: field$1,\n augment: augment,\n get: get$c\n };\n\n var _placeholder = 'placeholder';\n var adt$9 = Adt.generate([\n {\n single: [\n 'required',\n 'valueThunk'\n ]\n },\n {\n multiple: [\n 'required',\n 'valueThunks'\n ]\n }\n ]);\n var isSubstituted = function (spec) {\n return has(spec, 'uiType');\n };\n var subPlaceholder = function (owner, detail, compSpec, placeholders) {\n if (owner.exists(function (o) {\n return o !== compSpec.owner;\n })) {\n return adt$9.single(true, constant(compSpec));\n }\n return get(placeholders, compSpec.name).fold(function () {\n throw new Error('Unknown placeholder component: ' + compSpec.name + '\\nKnown: [' + keys(placeholders) + ']\\nNamespace: ' + owner.getOr('none') + '\\nSpec: ' + JSON.stringify(compSpec, null, 2));\n }, function (newSpec) {\n return newSpec.replace();\n });\n };\n var scan = function (owner, detail, compSpec, placeholders) {\n if (isSubstituted(compSpec) && compSpec.uiType === _placeholder) {\n return subPlaceholder(owner, detail, compSpec, placeholders);\n } else {\n return adt$9.single(false, constant(compSpec));\n }\n };\n var substitute = function (owner, detail, compSpec, placeholders) {\n var base = scan(owner, detail, compSpec, placeholders);\n return base.fold(function (req, valueThunk) {\n var value = isSubstituted(compSpec) ? valueThunk(detail, compSpec.config, compSpec.validated) : valueThunk(detail);\n var childSpecs = get(value, 'components').getOr([]);\n var substituted = bind(childSpecs, function (c) {\n return substitute(owner, detail, c, placeholders);\n });\n return [__assign(__assign({}, value), { components: substituted })];\n }, function (req, valuesThunk) {\n if (isSubstituted(compSpec)) {\n var values = valuesThunk(detail, compSpec.config, compSpec.validated);\n var preprocessor = compSpec.validated.preprocess.getOr(identity);\n return preprocessor(values);\n } else {\n return valuesThunk(detail);\n }\n });\n };\n var substituteAll = function (owner, detail, components, placeholders) {\n return bind(components, function (c) {\n return substitute(owner, detail, c, placeholders);\n });\n };\n var oneReplace = function (label, replacements) {\n var called = false;\n var used = function () {\n return called;\n };\n var replace = function () {\n if (called) {\n throw new Error('Trying to use the same placeholder more than once: ' + label);\n }\n called = true;\n return replacements;\n };\n var required = function () {\n return replacements.fold(function (req, _) {\n return req;\n }, function (req, _) {\n return req;\n });\n };\n return {\n name: constant(label),\n required: required,\n used: used,\n replace: replace\n };\n };\n var substitutePlaces = function (owner, detail, components, placeholders) {\n var ps = map$1(placeholders, function (ph, name) {\n return oneReplace(name, ph);\n });\n var outcome = substituteAll(owner, detail, components, ps);\n each$1(ps, function (p) {\n if (p.used() === false && p.required()) {\n throw new Error('Placeholder: ' + p.name() + ' was not found in components list\\nNamespace: ' + owner.getOr('none') + '\\nComponents: ' + JSON.stringify(detail.components, null, 2));\n }\n });\n return outcome;\n };\n var single = adt$9.single;\n var multiple = adt$9.multiple;\n var placeholder = constant(_placeholder);\n\n var adt$a = Adt.generate([\n { required: ['data'] },\n { external: ['data'] },\n { optional: ['data'] },\n { group: ['data'] }\n ]);\n var fFactory = defaulted$1('factory', { sketch: identity });\n var fSchema = defaulted$1('schema', []);\n var fName = strict$1('name');\n var fPname = field('pname', 'pname', defaultedThunk(function (typeSpec) {\n return '';\n }), anyValue$1());\n var fGroupSchema = state$1('schema', function () {\n return [option('preprocess')];\n });\n var fDefaults = defaulted$1('defaults', constant({}));\n var fOverrides = defaulted$1('overrides', constant({}));\n var requiredSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n var externalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fDefaults,\n fOverrides\n ]);\n var optionalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n var groupSpec = objOf([\n fFactory,\n fGroupSchema,\n fName,\n strict$1('unit'),\n fPname,\n fDefaults,\n fOverrides\n ]);\n var asNamedPart = function (part) {\n return part.fold(Option.some, Option.none, Option.some, Option.some);\n };\n var name$1 = function (part) {\n var get = function (data) {\n return data.name;\n };\n return part.fold(get, get, get, get);\n };\n var asCommon = function (part) {\n return part.fold(identity, identity, identity, identity);\n };\n var convert = function (adtConstructor, partSchema) {\n return function (spec) {\n var data = asRawOrDie('Converting part type', partSchema, spec);\n return adtConstructor(data);\n };\n };\n var required = convert(adt$a.required, requiredSpec);\n var external$1 = convert(adt$a.external, externalSpec);\n var optional = convert(adt$a.optional, optionalSpec);\n var group = convert(adt$a.group, groupSpec);\n var original = constant('entirety');\n\n var PartType = /*#__PURE__*/Object.freeze({\n __proto__: null,\n required: required,\n external: external$1,\n optional: optional,\n group: group,\n asNamedPart: asNamedPart,\n name: name$1,\n asCommon: asCommon,\n original: original\n });\n\n var combine$2 = function (detail, data, partSpec, partValidated) {\n return deepMerge(data.defaults(detail, partSpec, partValidated), partSpec, { uid: detail.partUids[data.name] }, data.overrides(detail, partSpec, partValidated));\n };\n var subs = function (owner, detail, parts) {\n var internals = {};\n var externals = {};\n each(parts, function (part) {\n part.fold(function (data) {\n internals[data.pname] = single(true, function (detail, partSpec, partValidated) {\n return data.factory.sketch(combine$2(detail, data, partSpec, partValidated));\n });\n }, function (data) {\n var partSpec = detail.parts[data.name];\n externals[data.name] = constant(data.factory.sketch(combine$2(detail, data, partSpec[original()]), partSpec));\n }, function (data) {\n internals[data.pname] = single(false, function (detail, partSpec, partValidated) {\n return data.factory.sketch(combine$2(detail, data, partSpec, partValidated));\n });\n }, function (data) {\n internals[data.pname] = multiple(true, function (detail, _partSpec, _partValidated) {\n var units = detail[data.name];\n return map(units, function (u) {\n return data.factory.sketch(deepMerge(data.defaults(detail, u, _partValidated), u, data.overrides(detail, u)));\n });\n });\n });\n });\n return {\n internals: constant(internals),\n externals: constant(externals)\n };\n };\n\n var generate$4 = function (owner, parts) {\n var r = {};\n each(parts, function (part) {\n asNamedPart(part).each(function (np) {\n var g = doGenerateOne(owner, np.pname);\n r[np.name] = function (config) {\n var validated = asRawOrDie('Part: ' + np.name + ' in ' + owner, objOf(np.schema), config);\n return __assign(__assign({}, g), {\n config: config,\n validated: validated\n });\n };\n });\n });\n return r;\n };\n var doGenerateOne = function (owner, pname) {\n return {\n uiType: placeholder(),\n owner: owner,\n name: pname\n };\n };\n var generateOne = function (owner, pname, config) {\n return {\n uiType: placeholder(),\n owner: owner,\n name: pname,\n config: config,\n validated: {}\n };\n };\n var schemas = function (parts) {\n return bind(parts, function (part) {\n return part.fold(Option.none, Option.some, Option.none, Option.none).map(function (data) {\n return strictObjOf(data.name, data.schema.concat([snapshot(original())]));\n }).toArray();\n });\n };\n var names = function (parts) {\n return map(parts, name$1);\n };\n var substitutes = function (owner, detail, parts) {\n return subs(owner, detail, parts);\n };\n var components = function (owner, detail, internals) {\n return substitutePlaces(Option.some(owner), detail, detail.components, internals);\n };\n var getPart = function (component, detail, partKey) {\n var uid = detail.partUids[partKey];\n return component.getSystem().getByUid(uid).toOption();\n };\n var getPartOrDie = function (component, detail, partKey) {\n return getPart(component, detail, partKey).getOrDie('Could not find part: ' + partKey);\n };\n var getParts = function (component, detail, partKeys) {\n var r = {};\n var uids = detail.partUids;\n var system = component.getSystem();\n each(partKeys, function (pk) {\n r[pk] = constant(system.getByUid(uids[pk]));\n });\n return r;\n };\n var getAllParts = function (component, detail) {\n var system = component.getSystem();\n return map$1(detail.partUids, function (pUid, k) {\n return constant(system.getByUid(pUid));\n });\n };\n var getAllPartNames = function (detail) {\n return keys(detail.partUids);\n };\n var getPartsOrDie = function (component, detail, partKeys) {\n var r = {};\n var uids = detail.partUids;\n var system = component.getSystem();\n each(partKeys, function (pk) {\n r[pk] = constant(system.getByUid(uids[pk]).getOrDie());\n });\n return r;\n };\n var defaultUids = function (baseUid, partTypes) {\n var partNames = names(partTypes);\n return wrapAll$1(map(partNames, function (pn) {\n return {\n key: pn,\n value: baseUid + '-' + pn\n };\n }));\n };\n var defaultUidsSchema = function (partTypes) {\n return field('partUids', 'partUids', mergeWithThunk(function (spec) {\n return defaultUids(spec.uid, partTypes);\n }), anyValue$1());\n };\n\n var AlloyParts = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$4,\n generateOne: generateOne,\n schemas: schemas,\n names: names,\n substitutes: substitutes,\n components: components,\n defaultUids: defaultUids,\n defaultUidsSchema: defaultUidsSchema,\n getAllParts: getAllParts,\n getAllPartNames: getAllPartNames,\n getPart: getPart,\n getPartOrDie: getPartOrDie,\n getParts: getParts,\n getPartsOrDie: getPartsOrDie\n });\n\n var base = function (partSchemas, partUidsSchemas) {\n var ps = partSchemas.length > 0 ? [strictObjOf('parts', partSchemas)] : [];\n return ps.concat([\n strict$1('uid'),\n defaulted$1('dom', {}),\n defaulted$1('components', []),\n snapshot('originalSpec'),\n defaulted$1('debug.sketcher', {})\n ]).concat(partUidsSchemas);\n };\n var asRawOrDie$1 = function (label, schema, spec, partSchemas, partUidsSchemas) {\n var baseS = base(partSchemas, partUidsSchemas);\n return asRawOrDie(label + ' [SpecSchema]', objOfOnly(baseS.concat(schema)), spec);\n };\n\n var single$1 = function (owner, schema, factory, spec) {\n var specWithUid = supplyUid(spec);\n var detail = asRawOrDie$1(owner, schema, specWithUid, [], []);\n return factory(detail, specWithUid);\n };\n var composite = function (owner, schema, partTypes, factory, spec) {\n var specWithUid = supplyUid(spec);\n var partSchemas = schemas(partTypes);\n var partUidsSchema = defaultUidsSchema(partTypes);\n var detail = asRawOrDie$1(owner, schema, specWithUid, partSchemas, [partUidsSchema]);\n var subs = substitutes(owner, detail, partTypes);\n var components$1 = components(owner, detail, subs.internals());\n return factory(detail, components$1, specWithUid, subs.externals());\n };\n var hasUid = function (spec) {\n return has(spec, 'uid');\n };\n var supplyUid = function (spec) {\n return hasUid(spec) ? spec : __assign(__assign({}, spec), { uid: generate$2('uid') });\n };\n\n function isSketchSpec(spec) {\n return spec.uid !== undefined;\n }\n var singleSchema = objOfOnly([\n strict$1('name'),\n strict$1('factory'),\n strict$1('configFields'),\n defaulted$1('apis', {}),\n defaulted$1('extraApis', {})\n ]);\n var compositeSchema = objOfOnly([\n strict$1('name'),\n strict$1('factory'),\n strict$1('configFields'),\n strict$1('partFields'),\n defaulted$1('apis', {}),\n defaulted$1('extraApis', {})\n ]);\n var single$2 = function (rawConfig) {\n var config = asRawOrDie('Sketcher for ' + rawConfig.name, singleSchema, rawConfig);\n var sketch = function (spec) {\n return single$1(config.name, config.configFields, config.factory, spec);\n };\n var apis = map$1(config.apis, makeApi);\n var extraApis = map$1(config.extraApis, function (f, k) {\n return markAsExtraApi(f, k);\n });\n return __assign(__assign({\n name: constant(config.name),\n configFields: constant(config.configFields),\n sketch: sketch\n }, apis), extraApis);\n };\n var composite$1 = function (rawConfig) {\n var config = asRawOrDie('Sketcher for ' + rawConfig.name, compositeSchema, rawConfig);\n var sketch = function (spec) {\n return composite(config.name, config.configFields, config.partFields, config.factory, spec);\n };\n var parts = generate$4(config.name, config.partFields);\n var apis = map$1(config.apis, makeApi);\n var extraApis = map$1(config.extraApis, function (f, k) {\n return markAsExtraApi(f, k);\n });\n return __assign(__assign({\n name: constant(config.name),\n partFields: constant(config.partFields),\n configFields: constant(config.configFields),\n sketch: sketch,\n parts: constant(parts)\n }, apis), extraApis);\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var sequence = function (arr) {\n var r = [];\n for (var i = 0; i < arr.length; i++) {\n var x = arr[i];\n if (x.isSome()) {\n r.push(x.getOrDie());\n } else {\n return Option.none();\n }\n }\n return Option.some(r);\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 inside = function (target) {\n return name(target) === 'input' && get$2(target, 'type') !== 'radio' || name(target) === 'textarea';\n };\n\n var getCurrent = function (component, composeConfig, composeState) {\n return composeConfig.find(component);\n };\n\n var ComposeApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCurrent: getCurrent\n });\n\n var ComposeSchema = [strict$1('find')];\n\n var Composing = create$1({\n fields: ComposeSchema,\n name: 'composing',\n apis: ComposeApis\n });\n\n var dehighlightAllExcept = function (component, hConfig, hState, skip) {\n var highlighted = descendants(component.element(), '.' + hConfig.highlightClass);\n each(highlighted, function (h) {\n if (!exists(skip, function (skipComp) {\n return skipComp.element() === h;\n })) {\n remove$4(h, hConfig.highlightClass);\n component.getSystem().getByDom(h).each(function (target) {\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight());\n });\n }\n });\n };\n var dehighlightAll = function (component, hConfig, hState) {\n return dehighlightAllExcept(component, hConfig, hState, []);\n };\n var dehighlight$1 = function (component, hConfig, hState, target) {\n if (isHighlighted(component, hConfig, hState, target)) {\n remove$4(target.element(), hConfig.highlightClass);\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight());\n }\n };\n var highlight$1 = function (component, hConfig, hState, target) {\n dehighlightAllExcept(component, hConfig, hState, [target]);\n if (!isHighlighted(component, hConfig, hState, target)) {\n add$2(target.element(), hConfig.highlightClass);\n hConfig.onHighlight(component, target);\n emit(target, highlight());\n }\n };\n var highlightFirst = function (component, hConfig, hState) {\n getFirst(component, hConfig).each(function (firstComp) {\n highlight$1(component, hConfig, hState, firstComp);\n });\n };\n var highlightLast = function (component, hConfig, hState) {\n getLast(component, hConfig).each(function (lastComp) {\n highlight$1(component, hConfig, hState, lastComp);\n });\n };\n var highlightAt = function (component, hConfig, hState, index) {\n getByIndex(component, hConfig, hState, index).fold(function (err) {\n throw new Error(err);\n }, function (firstComp) {\n highlight$1(component, hConfig, hState, firstComp);\n });\n };\n var highlightBy = function (component, hConfig, hState, predicate) {\n var candidates = getCandidates(component, hConfig);\n var targetComp = find(candidates, predicate);\n targetComp.each(function (c) {\n highlight$1(component, hConfig, hState, c);\n });\n };\n var isHighlighted = function (component, hConfig, hState, queryTarget) {\n return has$2(queryTarget.element(), hConfig.highlightClass);\n };\n var getHighlighted = function (component, hConfig, hState) {\n return descendant$1(component.element(), '.' + hConfig.highlightClass).bind(function (e) {\n return component.getSystem().getByDom(e).toOption();\n });\n };\n var getByIndex = function (component, hConfig, hState, index) {\n var items = descendants(component.element(), '.' + hConfig.itemClass);\n return Option.from(items[index]).fold(function () {\n return Result.error('No element found with index ' + index);\n }, component.getSystem().getByDom);\n };\n var getFirst = function (component, hConfig, hState) {\n return descendant$1(component.element(), '.' + hConfig.itemClass).bind(function (e) {\n return component.getSystem().getByDom(e).toOption();\n });\n };\n var getLast = function (component, hConfig, hState) {\n var items = descendants(component.element(), '.' + hConfig.itemClass);\n var last = items.length > 0 ? Option.some(items[items.length - 1]) : Option.none();\n return last.bind(function (c) {\n return component.getSystem().getByDom(c).toOption();\n });\n };\n var getDelta = function (component, hConfig, hState, delta) {\n var items = descendants(component.element(), '.' + hConfig.itemClass);\n var current = findIndex(items, function (item) {\n return has$2(item, hConfig.highlightClass);\n });\n return current.bind(function (selected) {\n var dest = cycleBy(selected, delta, 0, items.length - 1);\n return component.getSystem().getByDom(items[dest]).toOption();\n });\n };\n var getPrevious = function (component, hConfig, hState) {\n return getDelta(component, hConfig, hState, -1);\n };\n var getNext = function (component, hConfig, hState) {\n return getDelta(component, hConfig, hState, +1);\n };\n var getCandidates = function (component, hConfig, hState) {\n var items = descendants(component.element(), '.' + hConfig.itemClass);\n return cat(map(items, function (i) {\n return component.getSystem().getByDom(i).toOption();\n }));\n };\n\n var HighlightApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n dehighlightAll: dehighlightAll,\n dehighlight: dehighlight$1,\n highlight: highlight$1,\n highlightFirst: highlightFirst,\n highlightLast: highlightLast,\n highlightAt: highlightAt,\n highlightBy: highlightBy,\n isHighlighted: isHighlighted,\n getHighlighted: getHighlighted,\n getFirst: getFirst,\n getLast: getLast,\n getPrevious: getPrevious,\n getNext: getNext,\n getCandidates: getCandidates\n });\n\n var HighlightSchema = [\n strict$1('highlightClass'),\n strict$1('itemClass'),\n onHandler('onHighlight'),\n onHandler('onDehighlight')\n ];\n\n var Highlighting = create$1({\n fields: HighlightSchema,\n name: 'highlighting',\n apis: HighlightApis\n });\n\n var BACKSPACE = function () {\n return [8];\n };\n var TAB = function () {\n return [9];\n };\n var ENTER = function () {\n return [13];\n };\n var ESCAPE = function () {\n return [27];\n };\n var SPACE = function () {\n return [32];\n };\n var LEFT = function () {\n return [37];\n };\n var UP = function () {\n return [38];\n };\n var RIGHT = function () {\n return [39];\n };\n var DOWN = function () {\n return [40];\n };\n\n var cyclePrev = function (values, index, predicate) {\n var before = reverse(values.slice(0, index));\n var after = reverse(values.slice(index + 1));\n return find(before.concat(after), predicate);\n };\n var tryPrev = function (values, index, predicate) {\n var before = reverse(values.slice(0, index));\n return find(before, predicate);\n };\n var cycleNext = function (values, index, predicate) {\n var before = values.slice(0, index);\n var after = values.slice(index + 1);\n return find(after.concat(before), predicate);\n };\n var tryNext = function (values, index, predicate) {\n var after = values.slice(index + 1);\n return find(after, predicate);\n };\n\n var inSet = function (keys) {\n return function (event) {\n var raw = event.raw();\n return contains(keys, raw.which);\n };\n };\n var and = function (preds) {\n return function (event) {\n return forall(preds, function (pred) {\n return pred(event);\n });\n };\n };\n var isShift = function (event) {\n var raw = event.raw();\n return raw.shiftKey === true;\n };\n var isControl = function (event) {\n var raw = event.raw();\n return raw.ctrlKey === true;\n };\n var isNotShift = not(isShift);\n\n var rule = function (matches, action) {\n return {\n matches: matches,\n classification: action\n };\n };\n var choose$2 = function (transitions, event) {\n var transition = find(transitions, function (t) {\n return t.matches(event);\n });\n return transition.map(function (t) {\n return t.classification;\n });\n };\n\n var reportFocusShifting = function (component, prevFocus, newFocus) {\n var noChange = prevFocus.exists(function (p) {\n return newFocus.exists(function (n) {\n return eq(n, p);\n });\n });\n if (!noChange) {\n emitWith(component, focusShifted(), {\n prevFocus: prevFocus,\n newFocus: newFocus\n });\n }\n };\n var dom = function () {\n var get = function (component) {\n return search(component.element());\n };\n var set = function (component, focusee) {\n var prevFocus = get(component);\n component.getSystem().triggerFocus(focusee, component.element());\n var newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get: get,\n set: set\n };\n };\n var highlights = function () {\n var get = function (component) {\n return Highlighting.getHighlighted(component).map(function (item) {\n return item.element();\n });\n };\n var set = function (component, element) {\n var prevFocus = get(component);\n component.getSystem().getByDom(element).fold(noop, function (item) {\n Highlighting.highlight(component, item);\n });\n var newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get: get,\n set: set\n };\n };\n\n var FocusInsideModes;\n (function (FocusInsideModes) {\n FocusInsideModes['OnFocusMode'] = 'onFocus';\n FocusInsideModes['OnEnterOrSpaceMode'] = 'onEnterOrSpace';\n FocusInsideModes['OnApiMode'] = 'onApi';\n }(FocusInsideModes || (FocusInsideModes = {})));\n\n var typical = function (infoSchema, stateInit, getKeydownRules, getKeyupRules, optFocusIn) {\n var schema = function () {\n return infoSchema.concat([\n defaulted$1('focusManager', dom()),\n defaultedOf('focusInside', 'onFocus', valueOf(function (val) {\n return contains([\n 'onFocus',\n 'onEnterOrSpace',\n 'onApi'\n ], val) ? Result.value(val) : Result.error('Invalid value for focusInside');\n })),\n output('handler', me),\n output('state', stateInit),\n output('sendFocusIn', optFocusIn)\n ]);\n };\n var processKey = function (component, simulatedEvent, getRules, keyingConfig, keyingState) {\n var rules = getRules(component, simulatedEvent, keyingConfig, keyingState);\n return choose$2(rules, simulatedEvent.event()).bind(function (rule) {\n return rule(component, simulatedEvent, keyingConfig, keyingState);\n });\n };\n var toEvents = function (keyingConfig, keyingState) {\n var onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode ? Option.none() : optFocusIn(keyingConfig).map(function (focusIn) {\n return run(focus(), function (component, simulatedEvent) {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n });\n });\n var tryGoInsideComponent = function (component, simulatedEvent) {\n var isEnterOrSpace = inSet(SPACE().concat(ENTER()))(simulatedEvent.event());\n if (keyingConfig.focusInside === FocusInsideModes.OnEnterOrSpaceMode && isEnterOrSpace && isSource(component, simulatedEvent)) {\n optFocusIn(keyingConfig).each(function (focusIn) {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n });\n }\n };\n return derive(onFocusHandler.toArray().concat([\n run(keydown(), function (component, simulatedEvent) {\n processKey(component, simulatedEvent, getKeydownRules, keyingConfig, keyingState).fold(function () {\n tryGoInsideComponent(component, simulatedEvent);\n }, function (_) {\n simulatedEvent.stop();\n });\n }),\n run(keyup(), function (component, simulatedEvent) {\n processKey(component, simulatedEvent, getKeyupRules, keyingConfig, keyingState).each(function (_) {\n simulatedEvent.stop();\n });\n })\n ]));\n };\n var me = {\n schema: schema,\n processKey: processKey,\n toEvents: toEvents\n };\n return me;\n };\n\n var create$3 = function (cyclicField) {\n var schema = [\n option('onEscape'),\n option('onEnter'),\n defaulted$1('selector', '[data-alloy-tabstop=\"true\"]:not(:disabled)'),\n defaulted$1('firstTabstop', 0),\n defaulted$1('useTabstopAt', constant(true)),\n option('visibilitySelector')\n ].concat([cyclicField]);\n var isVisible = function (tabbingConfig, element) {\n var target = tabbingConfig.visibilitySelector.bind(function (sel) {\n return closest$3(element, sel);\n }).getOr(element);\n return get$6(target) > 0;\n };\n var findInitial = function (component, tabbingConfig) {\n var tabstops = descendants(component.element(), tabbingConfig.selector);\n var visibles = filter(tabstops, function (elem) {\n return isVisible(tabbingConfig, elem);\n });\n return Option.from(visibles[tabbingConfig.firstTabstop]);\n };\n var findCurrent = function (component, tabbingConfig) {\n return tabbingConfig.focusManager.get(component).bind(function (elem) {\n return closest$3(elem, tabbingConfig.selector);\n });\n };\n var isTabstop = function (tabbingConfig, element) {\n return isVisible(tabbingConfig, element) && tabbingConfig.useTabstopAt(element);\n };\n var focusIn = function (component, tabbingConfig, tabbingState) {\n findInitial(component, tabbingConfig).each(function (target) {\n tabbingConfig.focusManager.set(component, target);\n });\n };\n var goFromTabstop = function (component, tabstops, stopIndex, tabbingConfig, cycle) {\n return cycle(tabstops, stopIndex, function (elem) {\n return isTabstop(tabbingConfig, elem);\n }).fold(function () {\n return tabbingConfig.cyclic ? Option.some(true) : Option.none();\n }, function (target) {\n tabbingConfig.focusManager.set(component, target);\n return Option.some(true);\n });\n };\n var go = function (component, simulatedEvent, tabbingConfig, cycle) {\n var tabstops = descendants(component.element(), tabbingConfig.selector);\n return findCurrent(component, tabbingConfig).bind(function (tabstop) {\n var optStopIndex = findIndex(tabstops, curry(eq, tabstop));\n return optStopIndex.bind(function (stopIndex) {\n return goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle);\n });\n });\n };\n var goBackwards = function (component, simulatedEvent, tabbingConfig) {\n var navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n var goForwards = function (component, simulatedEvent, tabbingConfig) {\n var navigate = tabbingConfig.cyclic ? cycleNext : tryNext;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n var execute = function (component, simulatedEvent, tabbingConfig) {\n return tabbingConfig.onEnter.bind(function (f) {\n return f(component, simulatedEvent);\n });\n };\n var exit = function (component, simulatedEvent, tabbingConfig) {\n return tabbingConfig.onEscape.bind(function (f) {\n return f(component, simulatedEvent);\n });\n };\n var getKeydownRules = constant([\n rule(and([\n isShift,\n inSet(TAB())\n ]), goBackwards),\n rule(inSet(TAB()), goForwards),\n rule(inSet(ESCAPE()), exit),\n rule(and([\n isNotShift,\n inSet(ENTER())\n ]), execute)\n ]);\n var getKeyupRules = constant([]);\n return typical(schema, NoState.init, getKeydownRules, getKeyupRules, function () {\n return Option.some(focusIn);\n });\n };\n\n var AcyclicType = create$3(state$1('cyclic', constant(false)));\n\n var CyclicType = create$3(state$1('cyclic', constant(true)));\n\n var doDefaultExecute = function (component, simulatedEvent, focused) {\n dispatch(component, focused, execute());\n return Option.some(true);\n };\n var defaultExecute = function (component, simulatedEvent, focused) {\n return inside(focused) && inSet(SPACE())(simulatedEvent.event()) ? Option.none() : doDefaultExecute(component, simulatedEvent, focused);\n };\n var stopEventForFirefox = function (component, simulatedEvent) {\n return Option.some(true);\n };\n\n var schema$4 = [\n defaulted$1('execute', defaultExecute),\n defaulted$1('useSpace', false),\n defaulted$1('useEnter', true),\n defaulted$1('useControlEnter', false),\n defaulted$1('useDown', false)\n ];\n var execute$1 = function (component, simulatedEvent, executeConfig) {\n return executeConfig.execute(component, simulatedEvent, component.element());\n };\n var getKeydownRules = function (component, simulatedEvent, executeConfig, executeState) {\n var spaceExec = executeConfig.useSpace && !inside(component.element()) ? SPACE() : [];\n var enterExec = executeConfig.useEnter ? ENTER() : [];\n var downExec = executeConfig.useDown ? DOWN() : [];\n var execKeys = spaceExec.concat(enterExec).concat(downExec);\n return [rule(inSet(execKeys), execute$1)].concat(executeConfig.useControlEnter ? [rule(and([\n isControl,\n inSet(ENTER())\n ]), execute$1)] : []);\n };\n var getKeyupRules = function (component, simulatedEvent, executeConfig, executeState) {\n return executeConfig.useSpace && !inside(component.element()) ? [rule(inSet(SPACE()), stopEventForFirefox)] : [];\n };\n var ExecutionType = typical(schema$4, NoState.init, getKeydownRules, getKeyupRules, function () {\n return Option.none();\n });\n\n var flatgrid = function () {\n var dimensions = Cell(Option.none());\n var setGridSize = function (numRows, numColumns) {\n dimensions.set(Option.some({\n numRows: constant(numRows),\n numColumns: constant(numColumns)\n }));\n };\n var getNumRows = function () {\n return dimensions.get().map(function (d) {\n return d.numRows();\n });\n };\n var getNumColumns = function () {\n return dimensions.get().map(function (d) {\n return d.numColumns();\n });\n };\n return nu$5({\n readState: function () {\n return dimensions.get().map(function (d) {\n return {\n numRows: String(d.numRows()),\n numColumns: String(d.numColumns())\n };\n }).getOr({\n numRows: '?',\n numColumns: '?'\n });\n },\n setGridSize: setGridSize,\n getNumRows: getNumRows,\n getNumColumns: getNumColumns\n });\n };\n var init$2 = function (spec) {\n return spec.state(spec);\n };\n\n var KeyingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n flatgrid: flatgrid,\n init: init$2\n });\n\n var useH = function (movement) {\n return function (component, simulatedEvent, config, state) {\n var move = movement(component.element());\n return use(move, component, simulatedEvent, config, state);\n };\n };\n var west$2 = function (moveLeft, moveRight) {\n var movement = onDirection(moveLeft, moveRight);\n return useH(movement);\n };\n var east$2 = function (moveLeft, moveRight) {\n var movement = onDirection(moveRight, moveLeft);\n return useH(movement);\n };\n var useV = function (move) {\n return function (component, simulatedEvent, config, state) {\n return use(move, component, simulatedEvent, config, state);\n };\n };\n var use = function (move, component, simulatedEvent, config, state) {\n var outcome = config.focusManager.get(component).bind(function (focused) {\n return move(component.element(), focused, config, state);\n });\n return outcome.map(function (newFocus) {\n config.focusManager.set(component, newFocus);\n return true;\n });\n };\n var north$2 = useV;\n var south$2 = useV;\n var move = useV;\n\n var isHidden = function (dom) {\n return dom.offsetWidth <= 0 && dom.offsetHeight <= 0;\n };\n var isVisible = function (element) {\n var dom = element.dom();\n return !isHidden(dom);\n };\n\n var locate = function (candidates, predicate) {\n return findIndex(candidates, predicate).map(function (index) {\n return {\n index: constant(index),\n candidates: constant(candidates)\n };\n });\n };\n\n var locateVisible = function (container, current, selector) {\n var predicate = function (x) {\n return eq(x, current);\n };\n var candidates = descendants(container, selector);\n var visible = filter(candidates, isVisible);\n return locate(visible, predicate);\n };\n var findIndex$1 = function (elements, target) {\n return findIndex(elements, function (elem) {\n return eq(target, elem);\n });\n };\n\n var withGrid = function (values, index, numCols, f) {\n var oldRow = Math.floor(index / numCols);\n var oldColumn = index % numCols;\n return f(oldRow, oldColumn).bind(function (address) {\n var newIndex = address.row() * numCols + address.column();\n return newIndex >= 0 && newIndex < values.length ? Option.some(values[newIndex]) : Option.none();\n });\n };\n var cycleHorizontal = function (values, index, numRows, numCols, delta) {\n return withGrid(values, index, numCols, function (oldRow, oldColumn) {\n var onLastRow = oldRow === numRows - 1;\n var colsInRow = onLastRow ? values.length - oldRow * numCols : numCols;\n var newColumn = cycleBy(oldColumn, delta, 0, colsInRow - 1);\n return Option.some({\n row: constant(oldRow),\n column: constant(newColumn)\n });\n });\n };\n var cycleVertical = function (values, index, numRows, numCols, delta) {\n return withGrid(values, index, numCols, function (oldRow, oldColumn) {\n var newRow = cycleBy(oldRow, delta, 0, numRows - 1);\n var onLastRow = newRow === numRows - 1;\n var colsInRow = onLastRow ? values.length - newRow * numCols : numCols;\n var newCol = clamp(oldColumn, 0, colsInRow - 1);\n return Option.some({\n row: constant(newRow),\n column: constant(newCol)\n });\n });\n };\n var cycleRight = function (values, index, numRows, numCols) {\n return cycleHorizontal(values, index, numRows, numCols, +1);\n };\n var cycleLeft = function (values, index, numRows, numCols) {\n return cycleHorizontal(values, index, numRows, numCols, -1);\n };\n var cycleUp = function (values, index, numRows, numCols) {\n return cycleVertical(values, index, numRows, numCols, -1);\n };\n var cycleDown = function (values, index, numRows, numCols) {\n return cycleVertical(values, index, numRows, numCols, +1);\n };\n\n var schema$5 = [\n strict$1('selector'),\n defaulted$1('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted$1('captureTab', false),\n initSize()\n ];\n var focusIn = function (component, gridConfig, gridState) {\n descendant$1(component.element(), gridConfig.selector).each(function (first) {\n gridConfig.focusManager.set(component, first);\n });\n };\n var findCurrent = function (component, gridConfig) {\n return gridConfig.focusManager.get(component).bind(function (elem) {\n return closest$3(elem, gridConfig.selector);\n });\n };\n var execute$2 = function (component, simulatedEvent, gridConfig, gridState) {\n return findCurrent(component, gridConfig).bind(function (focused) {\n return gridConfig.execute(component, simulatedEvent, focused);\n });\n };\n var doMove = function (cycle) {\n return function (element, focused, gridConfig, gridState) {\n return locateVisible(element, focused, gridConfig.selector).bind(function (identified) {\n return cycle(identified.candidates(), identified.index(), gridState.getNumRows().getOr(gridConfig.initSize.numRows), gridState.getNumColumns().getOr(gridConfig.initSize.numColumns));\n });\n };\n };\n var handleTab = function (component, simulatedEvent, gridConfig) {\n return gridConfig.captureTab ? Option.some(true) : Option.none();\n };\n var doEscape = function (component, simulatedEvent, gridConfig) {\n return gridConfig.onEscape(component, simulatedEvent);\n };\n var moveLeft = doMove(cycleLeft);\n var moveRight = doMove(cycleRight);\n var moveNorth = doMove(cycleUp);\n var moveSouth = doMove(cycleDown);\n var getKeydownRules$1 = constant([\n rule(inSet(LEFT()), west$2(moveLeft, moveRight)),\n rule(inSet(RIGHT()), east$2(moveLeft, moveRight)),\n rule(inSet(UP()), north$2(moveNorth)),\n rule(inSet(DOWN()), south$2(moveSouth)),\n rule(and([\n isShift,\n inSet(TAB())\n ]), handleTab),\n rule(and([\n isNotShift,\n inSet(TAB())\n ]), handleTab),\n rule(inSet(ESCAPE()), doEscape),\n rule(inSet(SPACE().concat(ENTER())), execute$2)\n ]);\n var getKeyupRules$1 = constant([rule(inSet(SPACE()), stopEventForFirefox)]);\n var FlatgridType = typical(schema$5, flatgrid, getKeydownRules$1, getKeyupRules$1, function () {\n return Option.some(focusIn);\n });\n\n var horizontal = function (container, selector, current, delta) {\n var isDisabledButton = function (candidate) {\n return name(candidate) === 'button' && get$2(candidate, 'disabled') === 'disabled';\n };\n var tryCycle = function (initial, index, candidates) {\n var newIndex = cycleBy(index, delta, 0, candidates.length - 1);\n if (newIndex === initial) {\n return Option.none();\n } else {\n return isDisabledButton(candidates[newIndex]) ? tryCycle(initial, newIndex, candidates) : Option.from(candidates[newIndex]);\n }\n };\n return locateVisible(container, current, selector).bind(function (identified) {\n var index = identified.index();\n var candidates = identified.candidates();\n return tryCycle(index, index, candidates);\n });\n };\n\n var schema$6 = [\n strict$1('selector'),\n defaulted$1('getInitial', Option.none),\n defaulted$1('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted$1('executeOnMove', false),\n defaulted$1('allowVertical', true)\n ];\n var findCurrent$1 = function (component, flowConfig) {\n return flowConfig.focusManager.get(component).bind(function (elem) {\n return closest$3(elem, flowConfig.selector);\n });\n };\n var execute$3 = function (component, simulatedEvent, flowConfig) {\n return findCurrent$1(component, flowConfig).bind(function (focused) {\n return flowConfig.execute(component, simulatedEvent, focused);\n });\n };\n var focusIn$1 = function (component, flowConfig, state) {\n flowConfig.getInitial(component).orThunk(function () {\n return descendant$1(component.element(), flowConfig.selector);\n }).each(function (first) {\n flowConfig.focusManager.set(component, first);\n });\n };\n var moveLeft$1 = function (element, focused, info) {\n return horizontal(element, info.selector, focused, -1);\n };\n var moveRight$1 = function (element, focused, info) {\n return horizontal(element, info.selector, focused, +1);\n };\n var doMove$1 = function (movement) {\n return function (component, simulatedEvent, flowConfig, flowState) {\n return movement(component, simulatedEvent, flowConfig, flowState).bind(function () {\n return flowConfig.executeOnMove ? execute$3(component, simulatedEvent, flowConfig) : Option.some(true);\n });\n };\n };\n var doEscape$1 = function (component, simulatedEvent, flowConfig) {\n return flowConfig.onEscape(component, simulatedEvent);\n };\n var getKeydownRules$2 = function (_component, _se, flowConfig, _flowState) {\n var westMovers = LEFT().concat(flowConfig.allowVertical ? UP() : []);\n var eastMovers = RIGHT().concat(flowConfig.allowVertical ? DOWN() : []);\n return [\n rule(inSet(westMovers), doMove$1(west$2(moveLeft$1, moveRight$1))),\n rule(inSet(eastMovers), doMove$1(east$2(moveLeft$1, moveRight$1))),\n rule(inSet(ENTER()), execute$3),\n rule(inSet(SPACE()), execute$3),\n rule(inSet(ESCAPE()), doEscape$1)\n ];\n };\n var getKeyupRules$2 = constant([rule(inSet(SPACE()), stopEventForFirefox)]);\n var FlowType = typical(schema$6, NoState.init, getKeydownRules$2, getKeyupRules$2, function () {\n return Option.some(focusIn$1);\n });\n\n var outcome = MixedBag([\n 'rowIndex',\n 'columnIndex',\n 'cell'\n ], []);\n var toCell = function (matrix, rowIndex, columnIndex) {\n return Option.from(matrix[rowIndex]).bind(function (row) {\n return Option.from(row[columnIndex]).map(function (cell) {\n return outcome({\n rowIndex: rowIndex,\n columnIndex: columnIndex,\n cell: cell\n });\n });\n });\n };\n var cycleHorizontal$1 = function (matrix, rowIndex, startCol, deltaCol) {\n var row = matrix[rowIndex];\n var colsInRow = row.length;\n var newColIndex = cycleBy(startCol, deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n var cycleVertical$1 = function (matrix, colIndex, startRow, deltaRow) {\n var nextRowIndex = cycleBy(startRow, deltaRow, 0, matrix.length - 1);\n var colsInNextRow = matrix[nextRowIndex].length;\n var nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n var moveHorizontal = function (matrix, rowIndex, startCol, deltaCol) {\n var row = matrix[rowIndex];\n var colsInRow = row.length;\n var newColIndex = clamp(startCol + deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n var moveVertical = function (matrix, colIndex, startRow, deltaRow) {\n var nextRowIndex = clamp(startRow + deltaRow, 0, matrix.length - 1);\n var colsInNextRow = matrix[nextRowIndex].length;\n var nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n var cycleRight$1 = function (matrix, startRow, startCol) {\n return cycleHorizontal$1(matrix, startRow, startCol, +1);\n };\n var cycleLeft$1 = function (matrix, startRow, startCol) {\n return cycleHorizontal$1(matrix, startRow, startCol, -1);\n };\n var cycleUp$1 = function (matrix, startRow, startCol) {\n return cycleVertical$1(matrix, startCol, startRow, -1);\n };\n var cycleDown$1 = function (matrix, startRow, startCol) {\n return cycleVertical$1(matrix, startCol, startRow, +1);\n };\n var moveLeft$2 = function (matrix, startRow, startCol) {\n return moveHorizontal(matrix, startRow, startCol, -1);\n };\n var moveRight$2 = function (matrix, startRow, startCol) {\n return moveHorizontal(matrix, startRow, startCol, +1);\n };\n var moveUp = function (matrix, startRow, startCol) {\n return moveVertical(matrix, startCol, startRow, -1);\n };\n var moveDown = function (matrix, startRow, startCol) {\n return moveVertical(matrix, startCol, startRow, +1);\n };\n\n var schema$7 = [\n strictObjOf('selectors', [\n strict$1('row'),\n strict$1('cell')\n ]),\n defaulted$1('cycles', true),\n defaulted$1('previousSelector', Option.none),\n defaulted$1('execute', defaultExecute)\n ];\n var focusIn$2 = function (component, matrixConfig, state) {\n var focused = matrixConfig.previousSelector(component).orThunk(function () {\n var selectors = matrixConfig.selectors;\n return descendant$1(component.element(), selectors.cell);\n });\n focused.each(function (cell) {\n matrixConfig.focusManager.set(component, cell);\n });\n };\n var execute$4 = function (component, simulatedEvent, matrixConfig) {\n return search(component.element()).bind(function (focused) {\n return matrixConfig.execute(component, simulatedEvent, focused);\n });\n };\n var toMatrix = function (rows, matrixConfig) {\n return map(rows, function (row) {\n return descendants(row, matrixConfig.selectors.cell);\n });\n };\n var doMove$2 = function (ifCycle, ifMove) {\n return function (element, focused, matrixConfig) {\n var move = matrixConfig.cycles ? ifCycle : ifMove;\n return closest$3(focused, matrixConfig.selectors.row).bind(function (inRow) {\n var cellsInRow = descendants(inRow, matrixConfig.selectors.cell);\n return findIndex$1(cellsInRow, focused).bind(function (colIndex) {\n var allRows = descendants(element, matrixConfig.selectors.row);\n return findIndex$1(allRows, inRow).bind(function (rowIndex) {\n var matrix = toMatrix(allRows, matrixConfig);\n return move(matrix, rowIndex, colIndex).map(function (next) {\n return next.cell();\n });\n });\n });\n });\n };\n };\n var moveLeft$3 = doMove$2(cycleLeft$1, moveLeft$2);\n var moveRight$3 = doMove$2(cycleRight$1, moveRight$2);\n var moveNorth$1 = doMove$2(cycleUp$1, moveUp);\n var moveSouth$1 = doMove$2(cycleDown$1, moveDown);\n var getKeydownRules$3 = constant([\n rule(inSet(LEFT()), west$2(moveLeft$3, moveRight$3)),\n rule(inSet(RIGHT()), east$2(moveLeft$3, moveRight$3)),\n rule(inSet(UP()), north$2(moveNorth$1)),\n rule(inSet(DOWN()), south$2(moveSouth$1)),\n rule(inSet(SPACE().concat(ENTER())), execute$4)\n ]);\n var getKeyupRules$3 = constant([rule(inSet(SPACE()), stopEventForFirefox)]);\n var MatrixType = typical(schema$7, NoState.init, getKeydownRules$3, getKeyupRules$3, function () {\n return Option.some(focusIn$2);\n });\n\n var schema$8 = [\n strict$1('selector'),\n defaulted$1('execute', defaultExecute),\n defaulted$1('moveOnTab', false)\n ];\n var execute$5 = function (component, simulatedEvent, menuConfig) {\n return menuConfig.focusManager.get(component).bind(function (focused) {\n return menuConfig.execute(component, simulatedEvent, focused);\n });\n };\n var focusIn$3 = function (component, menuConfig, state) {\n descendant$1(component.element(), menuConfig.selector).each(function (first) {\n menuConfig.focusManager.set(component, first);\n });\n };\n var moveUp$1 = function (element, focused, info) {\n return horizontal(element, info.selector, focused, -1);\n };\n var moveDown$1 = function (element, focused, info) {\n return horizontal(element, info.selector, focused, +1);\n };\n var fireShiftTab = function (component, simulatedEvent, menuConfig, menuState) {\n return menuConfig.moveOnTab ? move(moveUp$1)(component, simulatedEvent, menuConfig, menuState) : Option.none();\n };\n var fireTab = function (component, simulatedEvent, menuConfig, menuState) {\n return menuConfig.moveOnTab ? move(moveDown$1)(component, simulatedEvent, menuConfig, menuState) : Option.none();\n };\n var getKeydownRules$4 = constant([\n rule(inSet(UP()), move(moveUp$1)),\n rule(inSet(DOWN()), move(moveDown$1)),\n rule(and([\n isShift,\n inSet(TAB())\n ]), fireShiftTab),\n rule(and([\n isNotShift,\n inSet(TAB())\n ]), fireTab),\n rule(inSet(ENTER()), execute$5),\n rule(inSet(SPACE()), execute$5)\n ]);\n var getKeyupRules$4 = constant([rule(inSet(SPACE()), stopEventForFirefox)]);\n var MenuType = typical(schema$8, NoState.init, getKeydownRules$4, getKeyupRules$4, function () {\n return Option.some(focusIn$3);\n });\n\n var schema$9 = [\n onKeyboardHandler('onSpace'),\n onKeyboardHandler('onEnter'),\n onKeyboardHandler('onShiftEnter'),\n onKeyboardHandler('onLeft'),\n onKeyboardHandler('onRight'),\n onKeyboardHandler('onTab'),\n onKeyboardHandler('onShiftTab'),\n onKeyboardHandler('onUp'),\n onKeyboardHandler('onDown'),\n onKeyboardHandler('onEscape'),\n defaulted$1('stopSpaceKeyup', false),\n option('focusIn')\n ];\n var getKeydownRules$5 = function (component, simulatedEvent, specialInfo) {\n return [\n rule(inSet(SPACE()), specialInfo.onSpace),\n rule(and([\n isNotShift,\n inSet(ENTER())\n ]), specialInfo.onEnter),\n rule(and([\n isShift,\n inSet(ENTER())\n ]), specialInfo.onShiftEnter),\n rule(and([\n isShift,\n inSet(TAB())\n ]), specialInfo.onShiftTab),\n rule(and([\n isNotShift,\n inSet(TAB())\n ]), specialInfo.onTab),\n rule(inSet(UP()), specialInfo.onUp),\n rule(inSet(DOWN()), specialInfo.onDown),\n rule(inSet(LEFT()), specialInfo.onLeft),\n rule(inSet(RIGHT()), specialInfo.onRight),\n rule(inSet(SPACE()), specialInfo.onSpace),\n rule(inSet(ESCAPE()), specialInfo.onEscape)\n ];\n };\n var getKeyupRules$5 = function (component, simulatedEvent, specialInfo) {\n return specialInfo.stopSpaceKeyup ? [rule(inSet(SPACE()), stopEventForFirefox)] : [];\n };\n var SpecialType = typical(schema$9, NoState.init, getKeydownRules$5, getKeyupRules$5, function (specialInfo) {\n return specialInfo.focusIn;\n });\n\n var acyclic = AcyclicType.schema();\n var cyclic = CyclicType.schema();\n var flow = FlowType.schema();\n var flatgrid$1 = FlatgridType.schema();\n var matrix = MatrixType.schema();\n var execution = ExecutionType.schema();\n var menu = MenuType.schema();\n var special = SpecialType.schema();\n\n var KeyboardBranches = /*#__PURE__*/Object.freeze({\n __proto__: null,\n acyclic: acyclic,\n cyclic: cyclic,\n flow: flow,\n flatgrid: flatgrid$1,\n matrix: matrix,\n execution: execution,\n menu: menu,\n special: special\n });\n\n var isFlatgridState = function (keyState) {\n return hasNonNullableKey(keyState, 'setGridSize');\n };\n var Keying = createModes$1({\n branchKey: 'mode',\n branches: KeyboardBranches,\n name: 'keying',\n active: {\n events: function (keyingConfig, keyingState) {\n var handler = keyingConfig.handler;\n return handler.toEvents(keyingConfig, keyingState);\n }\n },\n apis: {\n focusIn: function (component, keyConfig, keyState) {\n keyConfig.sendFocusIn(keyConfig).fold(function () {\n component.getSystem().triggerFocus(component.element(), component.element());\n }, function (sendFocusIn) {\n sendFocusIn(component, keyConfig, keyState);\n });\n },\n setGridSize: function (component, keyConfig, keyState, numRows, numColumns) {\n if (!isFlatgridState(keyState)) {\n domGlobals.console.error('Layout does not support setGridSize');\n } else {\n keyState.setGridSize(numRows, numColumns);\n }\n }\n },\n state: KeyingState\n });\n\n var set$5 = function (component, replaceConfig, replaceState, data) {\n preserve(function () {\n var newChildren = map(data, component.getSystem().build);\n replaceChildren(component, newChildren);\n }, component.element());\n };\n var insert = function (component, replaceConfig, insertion, childSpec) {\n var child = component.getSystem().build(childSpec);\n attachWith(component, child, insertion);\n };\n var append$2 = function (component, replaceConfig, replaceState, appendee) {\n insert(component, replaceConfig, append, appendee);\n };\n var prepend$1 = function (component, replaceConfig, replaceState, prependee) {\n insert(component, replaceConfig, prepend, prependee);\n };\n var remove$7 = function (component, replaceConfig, replaceState, removee) {\n var children = contents(component);\n var foundChild = find(children, function (child) {\n return eq(removee.element(), child.element());\n });\n foundChild.each(detach);\n };\n var contents = function (component, replaceConfig) {\n return component.components();\n };\n var replaceAt = function (component, replaceConfig, replaceState, replaceeIndex, replacer) {\n var children = contents(component);\n return Option.from(children[replaceeIndex]).map(function (replacee) {\n remove$7(component, replaceConfig, replaceState, replacee);\n replacer.each(function (r) {\n insert(component, replaceConfig, function (p, c) {\n appendAt(p, c, replaceeIndex);\n }, r);\n });\n return replacee;\n });\n };\n var replaceBy = function (component, replaceConfig, replaceState, replaceePred, replacer) {\n var children = contents(component);\n return findIndex(children, replaceePred).bind(function (replaceeIndex) {\n return replaceAt(component, replaceConfig, replaceState, replaceeIndex, replacer);\n });\n };\n\n var ReplaceApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n append: append$2,\n prepend: prepend$1,\n remove: remove$7,\n replaceAt: replaceAt,\n replaceBy: replaceBy,\n set: set$5,\n contents: contents\n });\n\n var Replacing = create$1({\n fields: [],\n name: 'replacing',\n apis: ReplaceApis\n });\n\n var events$4 = function (name, eventHandlers) {\n var events = derive(eventHandlers);\n return create$1({\n fields: [strict$1('enabled')],\n name: name,\n active: { events: constant(events) }\n });\n };\n var config = function (name, eventHandlers) {\n var me = events$4(name, eventHandlers);\n return {\n key: name,\n value: {\n config: {},\n me: me,\n configAsRaw: constant({}),\n initialConfig: {},\n state: NoState\n }\n };\n };\n\n var focus$2 = function (component, focusConfig) {\n if (!focusConfig.ignore) {\n focus$1(component.element());\n focusConfig.onFocus(component);\n }\n };\n var blur$1 = function (component, focusConfig) {\n if (!focusConfig.ignore) {\n blur(component.element());\n }\n };\n var isFocused = function (component) {\n return hasFocus(component.element());\n };\n\n var FocusApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n focus: focus$2,\n blur: blur$1,\n isFocused: isFocused\n });\n\n var exhibit$1 = function (base, focusConfig) {\n var mod = focusConfig.ignore ? {} : { attributes: { tabindex: '-1' } };\n return nu$6(mod);\n };\n var events$5 = function (focusConfig) {\n return derive([run(focus(), function (component, simulatedEvent) {\n focus$2(component, focusConfig);\n simulatedEvent.stop();\n })].concat(focusConfig.stopMousedown ? [run(mousedown(), function (_, simulatedEvent) {\n simulatedEvent.event().prevent();\n })] : []));\n };\n\n var ActiveFocus = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$1,\n events: events$5\n });\n\n var FocusSchema = [\n onHandler('onFocus'),\n defaulted$1('stopMousedown', false),\n defaulted$1('ignore', false)\n ];\n\n var Focusing = create$1({\n fields: FocusSchema,\n name: 'focusing',\n active: ActiveFocus,\n apis: FocusApis\n });\n\n var updateAriaState = function (component, toggleConfig, toggleState) {\n var ariaInfo = toggleConfig.aria;\n ariaInfo.update(component, ariaInfo, toggleState.get());\n };\n var updateClass = function (component, toggleConfig, toggleState) {\n toggleConfig.toggleClass.each(function (toggleClass) {\n if (toggleState.get()) {\n add$2(component.element(), toggleClass);\n } else {\n remove$4(component.element(), toggleClass);\n }\n });\n };\n var toggle = function (component, toggleConfig, toggleState) {\n set$6(component, toggleConfig, toggleState, !toggleState.get());\n };\n var on$1 = function (component, toggleConfig, toggleState) {\n toggleState.set(true);\n updateClass(component, toggleConfig, toggleState);\n updateAriaState(component, toggleConfig, toggleState);\n };\n var off = function (component, toggleConfig, toggleState) {\n toggleState.set(false);\n updateClass(component, toggleConfig, toggleState);\n updateAriaState(component, toggleConfig, toggleState);\n };\n var set$6 = function (component, toggleConfig, toggleState, state) {\n var action = state ? on$1 : off;\n action(component, toggleConfig, toggleState);\n };\n var isOn = function (component, toggleConfig, toggleState) {\n return toggleState.get();\n };\n var onLoad$4 = function (component, toggleConfig, toggleState) {\n set$6(component, toggleConfig, toggleState, toggleConfig.selected);\n };\n\n var ToggleApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad$4,\n toggle: toggle,\n isOn: isOn,\n on: on$1,\n off: off,\n set: set$6\n });\n\n var exhibit$2 = function () {\n return nu$6({});\n };\n var events$6 = function (toggleConfig, toggleState) {\n var execute = executeEvent(toggleConfig, toggleState, toggle);\n var load = loadEvent(toggleConfig, toggleState, onLoad$4);\n return derive(flatten([\n toggleConfig.toggleOnExecute ? [execute] : [],\n [load]\n ]));\n };\n\n var ActiveToggle = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$2,\n events: events$6\n });\n\n var SetupBehaviourCellState = function (initialState) {\n var init = function () {\n var cell = Cell(initialState);\n var get = function () {\n return cell.get();\n };\n var set = function (newState) {\n return cell.set(newState);\n };\n var clear = function () {\n return cell.set(initialState);\n };\n var readState = function () {\n return cell.get();\n };\n return {\n get: get,\n set: set,\n clear: clear,\n readState: readState\n };\n };\n return { init: init };\n };\n\n var updatePressed = function (component, ariaInfo, status) {\n set$1(component.element(), 'aria-pressed', status);\n if (ariaInfo.syncWithExpanded) {\n updateExpanded(component, ariaInfo, status);\n }\n };\n var updateSelected = function (component, ariaInfo, status) {\n set$1(component.element(), 'aria-selected', status);\n };\n var updateChecked = function (component, ariaInfo, status) {\n set$1(component.element(), 'aria-checked', status);\n };\n var updateExpanded = function (component, ariaInfo, status) {\n set$1(component.element(), 'aria-expanded', status);\n };\n\n var ToggleSchema = [\n defaulted$1('selected', false),\n option('toggleClass'),\n defaulted$1('toggleOnExecute', true),\n defaultedOf('aria', { mode: 'none' }, choose$1('mode', {\n pressed: [\n defaulted$1('syncWithExpanded', false),\n output('update', updatePressed)\n ],\n checked: [output('update', updateChecked)],\n expanded: [output('update', updateExpanded)],\n selected: [output('update', updateSelected)],\n none: [output('update', noop)]\n }))\n ];\n\n var Toggling = create$1({\n fields: ToggleSchema,\n name: 'toggling',\n active: ActiveToggle,\n apis: ToggleApis,\n state: SetupBehaviourCellState(false)\n });\n\n var pointerEvents = function () {\n var onClick = function (component, simulatedEvent) {\n simulatedEvent.stop();\n emitExecute(component);\n };\n return [\n run(click(), onClick),\n run(tap(), onClick),\n cutter(touchstart()),\n cutter(mousedown())\n ];\n };\n var events$7 = function (optAction) {\n var executeHandler = function (action) {\n return runOnExecute(function (component, simulatedEvent) {\n action(component);\n simulatedEvent.stop();\n });\n };\n return derive(flatten([\n optAction.map(executeHandler).toArray(),\n pointerEvents()\n ]));\n };\n\n var hoverEvent = 'alloy.item-hover';\n var focusEvent = 'alloy.item-focus';\n var onHover = function (item) {\n if (search(item.element()).isNone() || Focusing.isFocused(item)) {\n if (!Focusing.isFocused(item)) {\n Focusing.focus(item);\n }\n emitWith(item, hoverEvent, { item: item });\n }\n };\n var onFocus = function (item) {\n emitWith(item, focusEvent, { item: item });\n };\n var hover = constant(hoverEvent);\n var focus$3 = constant(focusEvent);\n\n var builder = function (detail) {\n return {\n dom: detail.dom,\n domModification: __assign(__assign({}, detail.domModification), { attributes: __assign(__assign(__assign({ 'role': detail.toggling.isSome() ? 'menuitemcheckbox' : 'menuitem' }, detail.domModification.attributes), { 'aria-haspopup': detail.hasSubmenu }), detail.hasSubmenu ? { 'aria-expanded': false } : {}) }),\n behaviours: SketchBehaviours.augment(detail.itemBehaviours, [\n detail.toggling.fold(Toggling.revoke, function (tConfig) {\n return Toggling.config(__assign({ aria: { mode: 'checked' } }, tConfig));\n }),\n Focusing.config({\n ignore: detail.ignoreFocus,\n stopMousedown: detail.ignoreFocus,\n onFocus: function (component) {\n onFocus(component);\n }\n }),\n Keying.config({ mode: 'execution' }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.data\n }\n }),\n config('item-type-events', __spreadArrays(pointerEvents(), [\n run(mouseover(), onHover),\n run(focusItem(), Focusing.focus)\n ]))\n ]),\n components: detail.components,\n eventOrder: detail.eventOrder\n };\n };\n var schema$a = [\n strict$1('data'),\n strict$1('components'),\n strict$1('dom'),\n defaulted$1('hasSubmenu', false),\n option('toggling'),\n SketchBehaviours.field('itemBehaviours', [\n Toggling,\n Focusing,\n Keying,\n Representing\n ]),\n defaulted$1('ignoreFocus', false),\n defaulted$1('domModification', {}),\n output('builder', builder),\n defaulted$1('eventOrder', {})\n ];\n\n var builder$1 = function (detail) {\n return {\n dom: detail.dom,\n components: detail.components,\n events: derive([stopper(focusItem())])\n };\n };\n var schema$b = [\n strict$1('dom'),\n strict$1('components'),\n output('builder', builder$1)\n ];\n\n var owner$2 = function () {\n return 'item-widget';\n };\n var parts = constant([required({\n name: 'widget',\n overrides: function (detail) {\n return {\n behaviours: derive$1([Representing.config({\n store: {\n mode: 'manual',\n getValue: function (component) {\n return detail.data;\n },\n setValue: function () {\n }\n }\n })])\n };\n }\n })]);\n\n var builder$2 = function (detail) {\n var subs = substitutes(owner$2(), detail, parts());\n var components$1 = components(owner$2(), detail, subs.internals());\n var focusWidget = function (component) {\n return getPart(component, detail, 'widget').map(function (widget) {\n Keying.focusIn(widget);\n return widget;\n });\n };\n var onHorizontalArrow = function (component, simulatedEvent) {\n return inside(simulatedEvent.event().target()) ? Option.none() : function () {\n if (detail.autofocus) {\n simulatedEvent.setSource(component.element());\n return Option.none();\n } else {\n return Option.none();\n }\n }();\n };\n return {\n dom: detail.dom,\n components: components$1,\n domModification: detail.domModification,\n events: derive([\n runOnExecute(function (component, simulatedEvent) {\n focusWidget(component).each(function (widget) {\n simulatedEvent.stop();\n });\n }),\n run(mouseover(), onHover),\n run(focusItem(), function (component, simulatedEvent) {\n if (detail.autofocus) {\n focusWidget(component);\n } else {\n Focusing.focus(component);\n }\n })\n ]),\n behaviours: SketchBehaviours.augment(detail.widgetBehaviours, [\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.data\n }\n }),\n Focusing.config({\n ignore: detail.ignoreFocus,\n onFocus: function (component) {\n onFocus(component);\n }\n }),\n Keying.config({\n mode: 'special',\n focusIn: detail.autofocus ? function (component) {\n focusWidget(component);\n } : revoke(),\n onLeft: onHorizontalArrow,\n onRight: onHorizontalArrow,\n onEscape: function (component, simulatedEvent) {\n if (!Focusing.isFocused(component) && !detail.autofocus) {\n Focusing.focus(component);\n return Option.some(true);\n } else if (detail.autofocus) {\n simulatedEvent.setSource(component.element());\n return Option.none();\n } else {\n return Option.none();\n }\n }\n })\n ])\n };\n };\n var schema$c = [\n strict$1('uid'),\n strict$1('data'),\n strict$1('components'),\n strict$1('dom'),\n defaulted$1('autofocus', false),\n defaulted$1('ignoreFocus', false),\n SketchBehaviours.field('widgetBehaviours', [\n Representing,\n Focusing,\n Keying\n ]),\n defaulted$1('domModification', {}),\n defaultUidsSchema(parts()),\n output('builder', builder$2)\n ];\n\n var itemSchema$1 = choose$1('type', {\n widget: schema$c,\n item: schema$a,\n separator: schema$b\n });\n var configureGrid = function (detail, movementInfo) {\n return {\n mode: 'flatgrid',\n selector: '.' + detail.markers.item,\n initSize: {\n numColumns: movementInfo.initSize.numColumns,\n numRows: movementInfo.initSize.numRows\n },\n focusManager: detail.focusManager\n };\n };\n var configureMatrix = function (detail, movementInfo) {\n return {\n mode: 'matrix',\n selectors: {\n row: movementInfo.rowSelector,\n cell: '.' + detail.markers.item\n },\n focusManager: detail.focusManager\n };\n };\n var configureMenu = function (detail, movementInfo) {\n return {\n mode: 'menu',\n selector: '.' + detail.markers.item,\n moveOnTab: movementInfo.moveOnTab,\n focusManager: detail.focusManager\n };\n };\n var parts$1 = constant([group({\n factory: {\n sketch: function (spec) {\n var itemInfo = asRawOrDie('menu.spec item', itemSchema$1, spec);\n return itemInfo.builder(itemInfo);\n }\n },\n name: 'items',\n unit: 'item',\n defaults: function (detail, u) {\n return u.hasOwnProperty('uid') ? u : __assign(__assign({}, u), { uid: generate$2('item') });\n },\n overrides: function (detail, u) {\n return {\n type: u.type,\n ignoreFocus: detail.fakeFocus,\n domModification: { classes: [detail.markers.item] }\n };\n }\n })]);\n var schema$d = constant([\n strict$1('value'),\n strict$1('items'),\n strict$1('dom'),\n strict$1('components'),\n defaulted$1('eventOrder', {}),\n field$1('menuBehaviours', [\n Highlighting,\n Representing,\n Composing,\n Keying\n ]),\n defaultedOf('movement', {\n mode: 'menu',\n moveOnTab: true\n }, choose$1('mode', {\n grid: [\n initSize(),\n output('config', configureGrid)\n ],\n matrix: [\n output('config', configureMatrix),\n strict$1('rowSelector')\n ],\n menu: [\n defaulted$1('moveOnTab', true),\n output('config', configureMenu)\n ]\n })),\n itemMarkers(),\n defaulted$1('fakeFocus', false),\n defaulted$1('focusManager', dom()),\n onHandler('onHighlight')\n ]);\n\n var focus$4 = constant('alloy.menu-focus');\n\n var make$1 = function (detail, components, spec, externals) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n markers: detail.markers,\n behaviours: augment(detail.menuBehaviours, [\n Highlighting.config({\n highlightClass: detail.markers.selectedItem,\n itemClass: detail.markers.item,\n onHighlight: detail.onHighlight\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.value\n }\n }),\n Composing.config({ find: Option.some }),\n Keying.config(detail.movement.config(detail, detail.movement))\n ]),\n events: derive([\n run(focus$3(), function (menu, simulatedEvent) {\n var event = simulatedEvent.event();\n menu.getSystem().getByDom(event.target()).each(function (item) {\n Highlighting.highlight(menu, item);\n simulatedEvent.stop();\n emitWith(menu, focus$4(), {\n menu: menu,\n item: item\n });\n });\n }),\n run(hover(), function (menu, simulatedEvent) {\n var item = simulatedEvent.event().item();\n Highlighting.highlight(menu, item);\n })\n ]),\n components: components,\n eventOrder: detail.eventOrder,\n domModification: { attributes: { role: 'menu' } }\n };\n };\n\n var Menu = composite$1({\n name: 'Menu',\n configFields: schema$d(),\n partFields: parts$1(),\n factory: make$1\n });\n\n var transpose = function (obj) {\n return tupleMap(obj, function (v, k) {\n return {\n k: v,\n v: k\n };\n });\n };\n var trace = function (items, byItem, byMenu, finish) {\n return get(byMenu, finish).bind(function (triggerItem) {\n return get(items, triggerItem).bind(function (triggerMenu) {\n var rest = trace(items, byItem, byMenu, triggerMenu);\n return Option.some([triggerMenu].concat(rest));\n });\n }).getOr([]);\n };\n var generate$5 = function (menus, expansions) {\n var items = {};\n each$1(menus, function (menuItems, menu) {\n each(menuItems, function (item) {\n items[item] = menu;\n });\n });\n var byItem = expansions;\n var byMenu = transpose(expansions);\n var menuPaths = map$1(byMenu, function (_triggerItem, submenu) {\n return [submenu].concat(trace(items, byItem, byMenu, submenu));\n });\n return map$1(items, function (menu) {\n return get(menuPaths, menu).getOr([menu]);\n });\n };\n\n var init$3 = function () {\n var expansions = Cell({});\n var menus = Cell({});\n var paths = Cell({});\n var primary = Cell(Option.none());\n var directory = Cell({});\n var clear = function () {\n expansions.set({});\n menus.set({});\n paths.set({});\n primary.set(Option.none());\n };\n var isClear = function () {\n return primary.get().isNone();\n };\n var setMenuBuilt = function (menuName, built) {\n var _a;\n menus.set(__assign(__assign({}, menus.get()), (_a = {}, _a[menuName] = {\n type: 'prepared',\n menu: built\n }, _a)));\n };\n var setContents = function (sPrimary, sMenus, sExpansions, dir) {\n primary.set(Option.some(sPrimary));\n expansions.set(sExpansions);\n menus.set(sMenus);\n directory.set(dir);\n var sPaths = generate$5(dir, sExpansions);\n paths.set(sPaths);\n };\n var getTriggeringItem = function (menuValue) {\n return find$1(expansions.get(), function (v, k) {\n return v === menuValue;\n });\n };\n var getTriggerData = function (menuValue, getItemByValue, path) {\n return getPreparedMenu(menuValue).bind(function (menu) {\n return getTriggeringItem(menuValue).bind(function (triggeringItemValue) {\n return getItemByValue(triggeringItemValue).map(function (triggeredItem) {\n return {\n triggeredMenu: menu,\n triggeringItem: triggeredItem,\n triggeringPath: path\n };\n });\n });\n });\n };\n var getTriggeringPath = function (itemValue, getItemByValue) {\n var extraPath = filter(lookupItem(itemValue).toArray(), function (menuValue) {\n return getPreparedMenu(menuValue).isSome();\n });\n return get(paths.get(), itemValue).bind(function (path) {\n var revPath = reverse(extraPath.concat(path));\n var triggers = bind(revPath, function (menuValue, menuIndex) {\n return getTriggerData(menuValue, getItemByValue, revPath.slice(0, menuIndex + 1)).fold(function () {\n return primary.get().is(menuValue) ? [] : [Option.none()];\n }, function (data) {\n return [Option.some(data)];\n });\n });\n return sequence(triggers);\n });\n };\n var expand = function (itemValue) {\n return get(expansions.get(), itemValue).map(function (menu) {\n var current = get(paths.get(), itemValue).getOr([]);\n return [menu].concat(current);\n });\n };\n var collapse = function (itemValue) {\n return get(paths.get(), itemValue).bind(function (path) {\n return path.length > 1 ? Option.some(path.slice(1)) : Option.none();\n });\n };\n var refresh = function (itemValue) {\n return get(paths.get(), itemValue);\n };\n var getPreparedMenu = function (menuValue) {\n return lookupMenu(menuValue).bind(extractPreparedMenu);\n };\n var lookupMenu = function (menuValue) {\n return get(menus.get(), menuValue);\n };\n var lookupItem = function (itemValue) {\n return get(expansions.get(), itemValue);\n };\n var otherMenus = function (path) {\n var menuValues = directory.get();\n return difference(keys(menuValues), path);\n };\n var getPrimary = function () {\n return primary.get().bind(getPreparedMenu);\n };\n var getMenus = function () {\n return menus.get();\n };\n return {\n setMenuBuilt: setMenuBuilt,\n setContents: setContents,\n expand: expand,\n refresh: refresh,\n collapse: collapse,\n lookupMenu: lookupMenu,\n lookupItem: lookupItem,\n otherMenus: otherMenus,\n getPrimary: getPrimary,\n getMenus: getMenus,\n clear: clear,\n isClear: isClear,\n getTriggeringPath: getTriggeringPath\n };\n };\n var extractPreparedMenu = function (prep) {\n return prep.type === 'prepared' ? Option.some(prep.menu) : Option.none();\n };\n var LayeredState = {\n init: init$3,\n extractPreparedMenu: extractPreparedMenu\n };\n\n var make$2 = function (detail, rawUiSpec) {\n var submenuParentItems = Cell(Option.none());\n var buildMenus = function (container, primaryName, menus) {\n return map$1(menus, function (spec, name) {\n var makeSketch = function () {\n return Menu.sketch(__assign(__assign({ dom: spec.dom }, spec), {\n value: name,\n items: spec.items,\n markers: detail.markers,\n fakeFocus: detail.fakeFocus,\n onHighlight: detail.onHighlight,\n focusManager: detail.fakeFocus ? highlights() : dom()\n }));\n };\n return name === primaryName ? {\n type: 'prepared',\n menu: container.getSystem().build(makeSketch())\n } : {\n type: 'notbuilt',\n nbMenu: makeSketch\n };\n });\n };\n var layeredState = LayeredState.init();\n var setup = function (container) {\n var componentMap = buildMenus(container, detail.data.primary, detail.data.menus);\n var directory = toDirectory();\n layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory);\n return layeredState.getPrimary();\n };\n var getItemValue = function (item) {\n return Representing.getValue(item).value;\n };\n var getItemByValue = function (container, menus, itemValue) {\n return findMap(menus, function (menu) {\n if (!menu.getSystem().isConnected()) {\n return Option.none();\n }\n var candidates = Highlighting.getCandidates(menu);\n return find(candidates, function (c) {\n return getItemValue(c) === itemValue;\n });\n });\n };\n var toDirectory = function (container) {\n return map$1(detail.data.menus, function (data, menuName) {\n return bind(data.items, function (item) {\n return item.type === 'separator' ? [] : [item.data.value];\n });\n });\n };\n var setActiveMenu = function (container, menu) {\n Highlighting.highlight(container, menu);\n Highlighting.getHighlighted(menu).orThunk(function () {\n return Highlighting.getFirst(menu);\n }).each(function (item) {\n dispatch(container, item.element(), focusItem());\n });\n };\n var getMenus = function (state, menuValues) {\n return cat(map(menuValues, function (mv) {\n return state.lookupMenu(mv).bind(function (prep) {\n return prep.type === 'prepared' ? Option.some(prep.menu) : Option.none();\n });\n }));\n };\n var closeOthers = function (container, state, path) {\n var others = getMenus(state, state.otherMenus(path));\n each(others, function (o) {\n remove$5(o.element(), [detail.markers.backgroundMenu]);\n if (!detail.stayInDom) {\n Replacing.remove(container, o);\n }\n });\n };\n var getSubmenuParents = function (container) {\n return submenuParentItems.get().getOrThunk(function () {\n var r = {};\n var items = descendants(container.element(), '.' + detail.markers.item);\n var parentItems = filter(items, function (i) {\n return get$2(i, 'aria-haspopup') === 'true';\n });\n each(parentItems, function (i) {\n container.getSystem().getByDom(i).each(function (itemComp) {\n var key = getItemValue(itemComp);\n r[key] = itemComp;\n });\n });\n submenuParentItems.set(Option.some(r));\n return r;\n });\n };\n var updateAriaExpansions = function (container, path) {\n var parentItems = getSubmenuParents(container);\n each$1(parentItems, function (v, k) {\n var expanded = contains(path, k);\n set$1(v.element(), 'aria-expanded', expanded);\n });\n };\n var updateMenuPath = function (container, state, path) {\n return Option.from(path[0]).bind(function (latestMenuName) {\n return state.lookupMenu(latestMenuName).bind(function (menuPrep) {\n if (menuPrep.type === 'notbuilt') {\n return Option.none();\n } else {\n var activeMenu = menuPrep.menu;\n var rest = getMenus(state, path.slice(1));\n each(rest, function (r) {\n add$2(r.element(), detail.markers.backgroundMenu);\n });\n if (!inBody(activeMenu.element())) {\n Replacing.append(container, premade$1(activeMenu));\n }\n remove$5(activeMenu.element(), [detail.markers.backgroundMenu]);\n setActiveMenu(container, activeMenu);\n closeOthers(container, state, path);\n return Option.some(activeMenu);\n }\n });\n });\n };\n var ExpandHighlightDecision;\n (function (ExpandHighlightDecision) {\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightSubmenu'] = 0] = 'HighlightSubmenu';\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightParent'] = 1] = 'HighlightParent';\n }(ExpandHighlightDecision || (ExpandHighlightDecision = {})));\n var buildIfRequired = function (container, menuName, menuPrep) {\n if (menuPrep.type === 'notbuilt') {\n var menu = container.getSystem().build(menuPrep.nbMenu());\n layeredState.setMenuBuilt(menuName, menu);\n return menu;\n } else {\n return menuPrep.menu;\n }\n };\n var expandRight = function (container, item, decision) {\n if (decision === void 0) {\n decision = ExpandHighlightDecision.HighlightSubmenu;\n }\n var value = getItemValue(item);\n return layeredState.expand(value).bind(function (path) {\n updateAriaExpansions(container, path);\n return Option.from(path[0]).bind(function (menuName) {\n return layeredState.lookupMenu(menuName).bind(function (activeMenuPrep) {\n var activeMenu = buildIfRequired(container, menuName, activeMenuPrep);\n if (!inBody(activeMenu.element())) {\n Replacing.append(container, premade$1(activeMenu));\n }\n detail.onOpenSubmenu(container, item, activeMenu, reverse(path));\n if (decision === ExpandHighlightDecision.HighlightSubmenu) {\n Highlighting.highlightFirst(activeMenu);\n return updateMenuPath(container, layeredState, path);\n } else {\n Highlighting.dehighlightAll(activeMenu);\n return Option.some(item);\n }\n });\n });\n });\n };\n var collapseLeft = function (container, item) {\n var value = getItemValue(item);\n return layeredState.collapse(value).bind(function (path) {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path).map(function (activeMenu) {\n detail.onCollapseMenu(container, item, activeMenu);\n return activeMenu;\n });\n });\n };\n var updateView = function (container, item) {\n var value = getItemValue(item);\n return layeredState.refresh(value).bind(function (path) {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path);\n });\n };\n var onRight = function (container, item) {\n return inside(item.element()) ? Option.none() : expandRight(container, item, ExpandHighlightDecision.HighlightSubmenu);\n };\n var onLeft = function (container, item) {\n return inside(item.element()) ? Option.none() : collapseLeft(container, item);\n };\n var onEscape = function (container, item) {\n return collapseLeft(container, item).orThunk(function () {\n return detail.onEscape(container, item).map(function () {\n return container;\n });\n });\n };\n var keyOnItem = function (f) {\n return function (container, simulatedEvent) {\n return closest$3(simulatedEvent.getSource(), '.' + detail.markers.item).bind(function (target) {\n return container.getSystem().getByDom(target).toOption().bind(function (item) {\n return f(container, item).map(function () {\n return true;\n });\n });\n });\n };\n };\n var events = derive([\n run(focus$4(), function (sandbox, simulatedEvent) {\n var item = simulatedEvent.event().item();\n layeredState.lookupItem(getItemValue(item)).each(function () {\n var menu = simulatedEvent.event().menu();\n Highlighting.highlight(sandbox, menu);\n var value = getItemValue(simulatedEvent.event().item());\n layeredState.refresh(value).each(function (path) {\n return closeOthers(sandbox, layeredState, path);\n });\n });\n }),\n runOnExecute(function (component, simulatedEvent) {\n var target = simulatedEvent.event().target();\n component.getSystem().getByDom(target).each(function (item) {\n var itemValue = getItemValue(item);\n if (itemValue.indexOf('collapse-item') === 0) {\n collapseLeft(component, item);\n }\n expandRight(component, item, ExpandHighlightDecision.HighlightSubmenu).fold(function () {\n detail.onExecute(component, item);\n }, function () {\n });\n });\n }),\n runOnAttached(function (container, simulatedEvent) {\n setup(container).each(function (primary) {\n Replacing.append(container, premade$1(primary));\n detail.onOpenMenu(container, primary);\n if (detail.highlightImmediately) {\n setActiveMenu(container, primary);\n }\n });\n })\n ].concat(detail.navigateOnHover ? [run(hover(), function (sandbox, simulatedEvent) {\n var item = simulatedEvent.event().item();\n updateView(sandbox, item);\n expandRight(sandbox, item, ExpandHighlightDecision.HighlightParent);\n detail.onHover(sandbox, item);\n })] : []));\n var getActiveItem = function (container) {\n return Highlighting.getHighlighted(container).bind(Highlighting.getHighlighted);\n };\n var collapseMenuApi = function (container) {\n getActiveItem(container).each(function (currentItem) {\n collapseLeft(container, currentItem);\n });\n };\n var highlightPrimary = function (container) {\n layeredState.getPrimary().each(function (primary) {\n setActiveMenu(container, primary);\n });\n };\n var extractMenuFromContainer = function (container) {\n return Option.from(container.components()[0]).filter(function (comp) {\n return get$2(comp.element(), 'role') === 'menu';\n });\n };\n var repositionMenus = function (container) {\n var maybeActivePrimary = layeredState.getPrimary().bind(function (primary) {\n return getActiveItem(container).bind(function (currentItem) {\n var itemValue = getItemValue(currentItem);\n var allMenus = values(layeredState.getMenus());\n var preparedMenus = cat(map(allMenus, LayeredState.extractPreparedMenu));\n return layeredState.getTriggeringPath(itemValue, function (v) {\n return getItemByValue(container, preparedMenus, v);\n });\n }).map(function (triggeringPath) {\n return {\n primary: primary,\n triggeringPath: triggeringPath\n };\n });\n });\n maybeActivePrimary.fold(function () {\n extractMenuFromContainer(container).each(function (primaryMenu) {\n detail.onRepositionMenu(container, primaryMenu, []);\n });\n }, function (_a) {\n var primary = _a.primary, triggeringPath = _a.triggeringPath;\n detail.onRepositionMenu(container, primary, triggeringPath);\n });\n };\n var apis = {\n collapseMenu: collapseMenuApi,\n highlightPrimary: highlightPrimary,\n repositionMenus: repositionMenus\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n markers: detail.markers,\n behaviours: augment(detail.tmenuBehaviours, [\n Keying.config({\n mode: 'special',\n onRight: keyOnItem(onRight),\n onLeft: keyOnItem(onLeft),\n onEscape: keyOnItem(onEscape),\n focusIn: function (container, keyInfo) {\n layeredState.getPrimary().each(function (primary) {\n dispatch(container, primary.element(), focusItem());\n });\n }\n }),\n Highlighting.config({\n highlightClass: detail.markers.selectedMenu,\n itemClass: detail.markers.menu\n }),\n Composing.config({\n find: function (container) {\n return Highlighting.getHighlighted(container);\n }\n }),\n Replacing.config({})\n ]),\n eventOrder: detail.eventOrder,\n apis: apis,\n events: events\n };\n };\n var collapseItem = constant('collapse-item');\n\n var tieredData = function (primary, menus, expansions) {\n return {\n primary: primary,\n menus: menus,\n expansions: expansions\n };\n };\n var singleData = function (name, menu) {\n return {\n primary: name,\n menus: wrap$1(name, menu),\n expansions: {}\n };\n };\n var collapseItem$1 = function (text) {\n return {\n value: generate$1(collapseItem()),\n meta: { text: text }\n };\n };\n var tieredMenu = single$2({\n name: 'TieredMenu',\n configFields: [\n onStrictKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape'),\n onStrictHandler('onOpenMenu'),\n onStrictHandler('onOpenSubmenu'),\n onHandler('onRepositionMenu'),\n onHandler('onCollapseMenu'),\n defaulted$1('highlightImmediately', true),\n strictObjOf('data', [\n strict$1('primary'),\n strict$1('menus'),\n strict$1('expansions')\n ]),\n defaulted$1('fakeFocus', false),\n onHandler('onHighlight'),\n onHandler('onHover'),\n tieredMenuMarkers(),\n strict$1('dom'),\n defaulted$1('navigateOnHover', true),\n defaulted$1('stayInDom', false),\n field$1('tmenuBehaviours', [\n Keying,\n Highlighting,\n Composing,\n Replacing\n ]),\n defaulted$1('eventOrder', {})\n ],\n apis: {\n collapseMenu: function (apis, tmenu) {\n apis.collapseMenu(tmenu);\n },\n highlightPrimary: function (apis, tmenu) {\n apis.highlightPrimary(tmenu);\n },\n repositionMenus: function (apis, tmenu) {\n apis.repositionMenus(tmenu);\n }\n },\n factory: make$2,\n extraApis: {\n tieredData: tieredData,\n singleData: singleData,\n collapseItem: collapseItem$1\n }\n });\n\n var makeMenu = function (detail, menuSandbox, anchor, menuSpec, getBounds) {\n var lazySink = function () {\n return detail.lazySink(menuSandbox);\n };\n var layouts = menuSpec.type === 'horizontal' ? {\n layouts: {\n onLtr: function () {\n return belowOrAbove();\n },\n onRtl: function () {\n return belowOrAboveRtl();\n }\n }\n } : {};\n var isFirstTierSubmenu = function (triggeringPaths) {\n return triggeringPaths.length === 2;\n };\n var getSubmenuLayouts = function (triggeringPaths) {\n return isFirstTierSubmenu(triggeringPaths) ? layouts : {};\n };\n return tieredMenu.sketch({\n dom: { tag: 'div' },\n data: menuSpec.data,\n markers: menuSpec.menu.markers,\n highlightImmediately: menuSpec.menu.highlightImmediately,\n onEscape: function () {\n Sandboxing.close(menuSandbox);\n detail.onEscape.map(function (handler) {\n return handler(menuSandbox);\n });\n return Option.some(true);\n },\n onExecute: function () {\n return Option.some(true);\n },\n onOpenMenu: function (tmenu, menu) {\n Positioning.positionWithinBounds(lazySink().getOrDie(), anchor, menu, getBounds());\n },\n onOpenSubmenu: function (tmenu, item, submenu, triggeringPaths) {\n var sink = lazySink().getOrDie();\n Positioning.position(sink, __assign({\n anchor: 'submenu',\n item: item\n }, getSubmenuLayouts(triggeringPaths)), submenu);\n },\n onRepositionMenu: function (tmenu, primaryMenu, submenuTriggers) {\n var sink = lazySink().getOrDie();\n Positioning.positionWithinBounds(sink, anchor, primaryMenu, getBounds());\n each(submenuTriggers, function (st) {\n var submenuLayouts = getSubmenuLayouts(st.triggeringPath);\n Positioning.position(sink, __assign({\n anchor: 'submenu',\n item: st.triggeringItem\n }, submenuLayouts), st.triggeredMenu);\n });\n }\n });\n };\n var factory = function (detail, spec) {\n var isPartOfRelated = function (sandbox, queryElem) {\n var related = detail.getRelated(sandbox);\n return related.exists(function (rel) {\n return isPartOf(rel, queryElem);\n });\n };\n var setContent = function (sandbox, thing) {\n Sandboxing.setContent(sandbox, thing);\n };\n var showAt = function (sandbox, anchor, thing) {\n showWithin(sandbox, anchor, thing, Option.none());\n };\n var showWithin = function (sandbox, anchor, thing, boxElement) {\n showWithinBounds(sandbox, anchor, thing, function () {\n return boxElement.map(function (elem) {\n return box(elem);\n });\n });\n };\n var showWithinBounds = function (sandbox, anchor, thing, getBounds) {\n var sink = detail.lazySink(sandbox).getOrDie();\n Sandboxing.openWhileCloaked(sandbox, thing, function () {\n return Positioning.positionWithinBounds(sink, anchor, sandbox, getBounds());\n });\n Representing.setValue(sandbox, Option.some({\n mode: 'position',\n anchor: anchor,\n getBounds: getBounds\n }));\n };\n var showMenuAt = function (sandbox, anchor, menuSpec) {\n showMenuWithinBounds(sandbox, anchor, menuSpec, function () {\n return Option.none();\n });\n };\n var showMenuWithinBounds = function (sandbox, anchor, menuSpec, getBounds) {\n var menu = makeMenu(detail, sandbox, anchor, menuSpec, getBounds);\n Sandboxing.open(sandbox, menu);\n Representing.setValue(sandbox, Option.some({\n mode: 'menu',\n menu: menu\n }));\n };\n var hide = function (sandbox) {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.setValue(sandbox, Option.none());\n Sandboxing.close(sandbox);\n }\n };\n var getContent = function (sandbox) {\n return Sandboxing.getState(sandbox);\n };\n var reposition = function (sandbox) {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.getValue(sandbox).each(function (state) {\n switch (state.mode) {\n case 'menu':\n Sandboxing.getState(sandbox).each(function (tmenu) {\n tieredMenu.repositionMenus(tmenu);\n });\n break;\n case 'position':\n var sink = detail.lazySink(sandbox).getOrDie();\n Positioning.positionWithinBounds(sink, state.anchor, sandbox, state.getBounds());\n break;\n }\n });\n }\n };\n var apis = {\n setContent: setContent,\n showAt: showAt,\n showWithin: showWithin,\n showWithinBounds: showWithinBounds,\n showMenuAt: showMenuAt,\n showMenuWithinBounds: showMenuWithinBounds,\n hide: hide,\n getContent: getContent,\n reposition: reposition,\n isOpen: Sandboxing.isOpen\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n behaviours: augment(detail.inlineBehaviours, [\n Sandboxing.config({\n isPartOf: function (sandbox, data, queryElem) {\n return isPartOf(data, queryElem) || isPartOfRelated(sandbox, queryElem);\n },\n getAttachPoint: function (sandbox) {\n return detail.lazySink(sandbox).getOrDie();\n },\n onOpen: function (sandbox) {\n detail.onShow(sandbox);\n },\n onClose: function (sandbox) {\n detail.onHide(sandbox);\n }\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: Option.none()\n }\n }),\n Receiving.config({\n channels: __assign(__assign({}, receivingChannel(__assign({ isExtraPart: spec.isExtraPart }, detail.fireDismissalEventInstead.map(function (fe) {\n return { fireEventInstead: { event: fe.event } };\n }).getOr({})))), receivingChannel$1(__assign(__assign({}, detail.fireRepositionEventInstead.map(function (fe) {\n return { fireEventInstead: { event: fe.event } };\n }).getOr({})), { doReposition: reposition })))\n })\n ]),\n eventOrder: detail.eventOrder,\n apis: apis\n };\n };\n var InlineView = single$2({\n name: 'InlineView',\n configFields: [\n strict$1('lazySink'),\n onHandler('onShow'),\n onHandler('onHide'),\n optionFunction('onEscape'),\n field$1('inlineBehaviours', [\n Sandboxing,\n Representing,\n Receiving\n ]),\n optionObjOf('fireDismissalEventInstead', [defaulted$1('event', dismissRequested())]),\n optionObjOf('fireRepositionEventInstead', [defaulted$1('event', repositionRequested())]),\n defaulted$1('getRelated', Option.none),\n defaulted$1('isExtraPart', never),\n defaulted$1('eventOrder', Option.none)\n ],\n factory: factory,\n apis: {\n showAt: function (apis, component, anchor, thing) {\n apis.showAt(component, anchor, thing);\n },\n showWithin: function (apis, component, anchor, thing, boxElement) {\n apis.showWithin(component, anchor, thing, boxElement);\n },\n showWithinBounds: function (apis, component, anchor, thing, bounds) {\n apis.showWithinBounds(component, anchor, thing, bounds);\n },\n showMenuAt: function (apis, component, anchor, menuSpec) {\n apis.showMenuAt(component, anchor, menuSpec);\n },\n showMenuWithinBounds: function (apis, component, anchor, menuSpec, bounds) {\n apis.showMenuWithinBounds(component, anchor, menuSpec, bounds);\n },\n hide: function (apis, component) {\n apis.hide(component);\n },\n isOpen: function (apis, component) {\n return apis.isOpen(component);\n },\n getContent: function (apis, component) {\n return apis.getContent(component);\n },\n setContent: function (apis, component, thing) {\n apis.setContent(component, thing);\n },\n reposition: function (apis, component) {\n apis.reposition(component);\n }\n }\n });\n\n var westEdgeX$1 = function (anchor) {\n return anchor.x();\n };\n var middleX$1 = function (anchor, element) {\n return anchor.x() + anchor.width() / 2 - element.width() / 2;\n };\n var eastEdgeX$1 = function (anchor, element) {\n return anchor.x() + anchor.width() - element.width();\n };\n var northY$2 = function (anchor) {\n return anchor.y();\n };\n var southY$2 = function (anchor, element) {\n return anchor.y() + anchor.height() - element.height();\n };\n var southeast$3 = function (anchor, element, bubbles) {\n return nu$7(eastEdgeX$1(anchor, element), southY$2(anchor, element), bubbles.innerSoutheast(), northwest(), boundsRestriction(anchor, {\n right: 0,\n bottom: 3\n }), 'layout-inner-se');\n };\n var southwest$3 = function (anchor, element, bubbles) {\n return nu$7(westEdgeX$1(anchor), southY$2(anchor, element), bubbles.innerSouthwest(), northeast(), boundsRestriction(anchor, {\n left: 1,\n bottom: 3\n }), 'layout-inner-sw');\n };\n var northeast$3 = function (anchor, element, bubbles) {\n return nu$7(eastEdgeX$1(anchor, element), northY$2(anchor), bubbles.innerNortheast(), southwest(), boundsRestriction(anchor, {\n right: 0,\n top: 2\n }), 'layout-inner-ne');\n };\n var northwest$3 = function (anchor, element, bubbles) {\n return nu$7(westEdgeX$1(anchor), northY$2(anchor), bubbles.innerNorthwest(), southeast(), boundsRestriction(anchor, {\n left: 1,\n top: 2\n }), 'layout-inner-nw');\n };\n var north$3 = function (anchor, element, bubbles) {\n return nu$7(middleX$1(anchor, element), northY$2(anchor), bubbles.innerNorth(), south(), boundsRestriction(anchor, { top: 2 }), 'layout-inner-n');\n };\n var south$3 = function (anchor, element, bubbles) {\n return nu$7(middleX$1(anchor, element), southY$2(anchor, element), bubbles.innerSouth(), north(), boundsRestriction(anchor, { bottom: 3 }), 'layout-inner-s');\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.EditorManager');\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 : 'oxide';\n if (skinUrl) {\n skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);\n } else {\n skinUrl = global$4.baseURL + '/skins/ui/' + skinName;\n }\n }\n return skinUrl;\n };\n var isReadOnly = function (editor) {\n return editor.getParam('readonly', false, 'boolean');\n };\n var isSkinDisabled = function (editor) {\n return editor.getParam('skin') === false;\n };\n var getHeightSetting = function (editor) {\n return editor.getParam('height', Math.max(editor.getElement().offsetHeight, 200));\n };\n var getWidthSetting = function (editor) {\n return editor.getParam('width', global$3.DOM.getStyle(editor.getElement(), 'width'));\n };\n var getMinWidthSetting = function (editor) {\n return Option.from(editor.settings.min_width).filter(isNumber);\n };\n var getMinHeightSetting = function (editor) {\n return Option.from(editor.settings.min_height).filter(isNumber);\n };\n var getMaxWidthSetting = function (editor) {\n return Option.from(editor.getParam('max_width')).filter(isNumber);\n };\n var getMaxHeightSetting = function (editor) {\n return Option.from(editor.getParam('max_height')).filter(isNumber);\n };\n var getUserStyleFormats = function (editor) {\n return Option.from(editor.getParam('style_formats')).filter(isArray);\n };\n var isMergeStyleFormats = function (editor) {\n return editor.getParam('style_formats_merge', false, 'boolean');\n };\n var getRemovedMenuItems = function (editor) {\n return editor.getParam('removed_menuitems', '');\n };\n var isMenubarEnabled = function (editor) {\n return editor.getParam('menubar', true, 'boolean') !== false;\n };\n var isToolbarEnabled = function (editor) {\n var toolbar = editor.getParam('toolbar', true);\n var isToolbarTrue = toolbar === true;\n var isToolbarString = isString(toolbar);\n var isToolbarObjectArray = isArray(toolbar) && toolbar.length > 0;\n return !isMultipleToolbars(editor) && (isToolbarObjectArray || isToolbarString || isToolbarTrue);\n };\n var getMultipleToolbarsSetting = function (editor) {\n var keys$1 = keys(editor.settings);\n var toolbarKeys = filter(keys$1, function (key) {\n return /^toolbar([1-9])$/.test(key);\n });\n var toolbars = map(toolbarKeys, function (key) {\n return editor.getParam(key, false, 'string');\n });\n var toolbarArray = filter(toolbars, function (toolbar) {\n return typeof toolbar === 'string';\n });\n return toolbarArray.length > 0 ? Option.some(toolbarArray) : Option.none();\n };\n var isMultipleToolbars = function (editor) {\n return getMultipleToolbarsSetting(editor).fold(function () {\n var toolbar = editor.getParam('toolbar', [], 'string[]');\n return toolbar.length > 0;\n }, function () {\n return true;\n });\n };\n var ToolbarMode;\n (function (ToolbarMode) {\n ToolbarMode['default'] = 'wrap';\n ToolbarMode['floating'] = 'floating';\n ToolbarMode['sliding'] = 'sliding';\n ToolbarMode['scrolling'] = 'scrolling';\n }(ToolbarMode || (ToolbarMode = {})));\n var getToolbarMode = function (editor) {\n return editor.getParam('toolbar_mode', '', 'string');\n };\n var ToolbarLocation;\n (function (ToolbarLocation) {\n ToolbarLocation['top'] = 'top';\n ToolbarLocation['bottom'] = 'bottom';\n }(ToolbarLocation || (ToolbarLocation = {})));\n var getToolbarGroups = function (editor) {\n return editor.getParam('toolbar_groups', {}, 'object');\n };\n var isToolbarLocationTop = function (editor) {\n return editor.getParam('toolbar_location', ToolbarLocation.top, 'string') !== ToolbarLocation.bottom;\n };\n var fixedContainerSelector = function (editor) {\n return editor.getParam('fixed_toolbar_container', '', 'string');\n };\n var fixedContainerElement = function (editor) {\n var selector = fixedContainerSelector(editor);\n return selector.length > 0 && editor.inline ? descendant$1(body(), selector) : Option.none();\n };\n var useFixedContainer = function (editor) {\n return editor.inline && fixedContainerElement(editor).isSome();\n };\n var getUiContainer = function (editor) {\n var fixedContainer = fixedContainerElement(editor);\n return fixedContainer.getOr(body());\n };\n var isDistractionFree = function (editor) {\n return editor.inline && !isMenubarEnabled(editor) && !isToolbarEnabled(editor) && !isMultipleToolbars(editor);\n };\n var isStickyToolbar = function (editor) {\n var isStickyToolbar = editor.getParam('toolbar_sticky', false, 'boolean');\n return (isStickyToolbar || editor.inline) && !useFixedContainer(editor) && !isDistractionFree(editor);\n };\n var isDraggableModal = function (editor) {\n return editor.getParam('draggable_modal', false, 'boolean');\n };\n\n var factory$1 = function (detail) {\n var events = events$7(detail.action);\n var tag = detail.dom.tag;\n var lookupAttr = function (attr) {\n return get(detail.dom, 'attributes').bind(function (attrs) {\n return get(attrs, attr);\n });\n };\n var getModAttributes = function () {\n if (tag === 'button') {\n var type = lookupAttr('type').getOr('button');\n var roleAttrs = lookupAttr('role').map(function (role) {\n return { role: role };\n }).getOr({});\n return __assign({ type: type }, roleAttrs);\n } else {\n var role = lookupAttr('role').getOr('button');\n return { role: role };\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events: events,\n behaviours: SketchBehaviours.augment(detail.buttonBehaviours, [\n Focusing.config({}),\n Keying.config({\n mode: 'execution',\n useSpace: true,\n useEnter: true\n })\n ]),\n domModification: { attributes: getModAttributes() },\n eventOrder: detail.eventOrder\n };\n };\n var Button = single$2({\n name: 'Button',\n factory: factory$1,\n configFields: [\n defaulted$1('uid', undefined),\n strict$1('dom'),\n defaulted$1('components', []),\n SketchBehaviours.field('buttonBehaviours', [\n Focusing,\n Keying\n ]),\n option('action'),\n option('role'),\n defaulted$1('eventOrder', {})\n ]\n });\n\n var record = function (spec) {\n var uid = isSketchSpec(spec) && hasNonNullableKey(spec, 'uid') ? spec.uid : generate$2('memento');\n var get = function (anyInSystem) {\n return anyInSystem.getSystem().getByUid(uid).getOrDie();\n };\n var getOpt = function (anyInSystem) {\n return anyInSystem.getSystem().getByUid(uid).toOption();\n };\n var asSpec = function () {\n return __assign(__assign({}, spec), { uid: uid });\n };\n return {\n get: get,\n getOpt: getOpt,\n asSpec: asSpec\n };\n };\n\n var defaultIcon = function (icons) {\n return Option.from(icons()['temporary-placeholder']).getOr('!not found!');\n };\n var get$d = function (name, icons) {\n return Option.from(icons()[name]).getOrThunk(function () {\n return defaultIcon(icons);\n });\n };\n var getOr = function (name, icons, fallback) {\n return Option.from(icons()[name]).or(fallback).getOrThunk(function () {\n return defaultIcon(icons);\n });\n };\n var getFirst$1 = function (names, icons) {\n return findMap(names, function (name) {\n return Option.from(icons()[name]);\n }).getOrThunk(function () {\n return defaultIcon(icons);\n });\n };\n\n var notificationIconMap = {\n success: 'checkmark',\n error: 'warning',\n err: 'error',\n warning: 'warning',\n warn: 'warning',\n info: 'info'\n };\n var factory$2 = function (detail) {\n var memBannerText = record({\n dom: {\n tag: 'p',\n innerHtml: detail.translationProvider(detail.text)\n },\n behaviours: derive$1([Replacing.config({})])\n });\n var renderPercentBar = function (percent) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-bar'],\n attributes: { style: 'width: ' + percent + '%' }\n }\n };\n };\n var renderPercentText = function (percent) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-text'],\n innerHtml: percent + '%'\n }\n };\n };\n var memBannerProgress = record({\n dom: {\n tag: 'div',\n classes: detail.progress ? [\n 'tox-progress-bar',\n 'tox-progress-indicator'\n ] : ['tox-progress-bar']\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-bar-container']\n },\n components: [renderPercentBar(0)]\n },\n renderPercentText(0)\n ],\n behaviours: derive$1([Replacing.config({})])\n });\n var updateProgress = function (comp, percent) {\n if (comp.getSystem().isConnected()) {\n memBannerProgress.getOpt(comp).each(function (progress) {\n Replacing.set(progress, [\n {\n dom: {\n tag: 'div',\n classes: ['tox-bar-container']\n },\n components: [renderPercentBar(percent)]\n },\n renderPercentText(percent)\n ]);\n });\n }\n };\n var updateText = function (comp, text$1) {\n if (comp.getSystem().isConnected()) {\n var banner = memBannerText.get(comp);\n Replacing.set(banner, [text(text$1)]);\n }\n };\n var apis = {\n updateProgress: updateProgress,\n updateText: updateText\n };\n var iconChoices = flatten([\n detail.icon.toArray(),\n detail.level.toArray(),\n detail.level.bind(function (level) {\n return Option.from(notificationIconMap[level]);\n }).toArray()\n ]);\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: { role: 'alert' },\n classes: detail.level.map(function (level) {\n return [\n 'tox-notification',\n 'tox-notification--in',\n 'tox-notification--' + level\n ];\n }).getOr([\n 'tox-notification',\n 'tox-notification--in'\n ])\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__icon'],\n innerHtml: getFirst$1(iconChoices, detail.iconProvider)\n }\n },\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body']\n },\n components: [memBannerText.asSpec()],\n behaviours: derive$1([Replacing.config({})])\n }\n ].concat(detail.progress ? [memBannerProgress.asSpec()] : []).concat(!detail.closeButton ? [] : [Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-notification__dismiss',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ]\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-icon'],\n innerHtml: get$d('close', detail.iconProvider),\n attributes: { 'aria-label': detail.translationProvider('Close') }\n }\n }],\n action: function (comp) {\n detail.onAction(comp);\n }\n })]),\n apis: apis\n };\n };\n var Notification = single$2({\n name: 'Notification',\n factory: factory$2,\n configFields: [\n option('level'),\n strict$1('progress'),\n strict$1('icon'),\n strict$1('onAction'),\n strict$1('text'),\n strict$1('iconProvider'),\n strict$1('translationProvider'),\n defaultedBoolean('closeButton', true)\n ],\n apis: {\n updateProgress: function (apis, comp, percent) {\n apis.updateProgress(comp, percent);\n },\n updateText: function (apis, comp, text) {\n apis.updateText(comp, text);\n }\n }\n });\n\n function NotificationManagerImpl (editor, extras, uiMothership) {\n var backstage = extras.backstage;\n var isToolbarLocationTop$1 = isToolbarLocationTop(editor);\n var getLayoutDirection = function (rel) {\n switch (rel) {\n case 'bc-bc':\n return south$3;\n case 'tc-tc':\n return north$3;\n case 'tc-bc':\n return north$1;\n case 'bc-tc':\n default:\n return south$1;\n }\n };\n var prePositionNotifications = function (notifications) {\n each(notifications, function (notification) {\n return notification.moveTo(0, 0);\n });\n };\n var positionNotifications = function (notifications) {\n if (notifications.length > 0) {\n head(notifications).each(function (firstItem) {\n return firstItem.moveRel(null, 'banner');\n });\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 (settings, closeCallback) {\n var hideCloseButton = !settings.closeButton && settings.timeout && (settings.timeout > 0 || settings.timeout < 0);\n var close = function () {\n closeCallback();\n InlineView.hide(notificationWrapper);\n };\n var notification = build$1(Notification.sketch({\n text: settings.text,\n level: contains([\n 'success',\n 'error',\n 'warning',\n 'warn',\n 'info'\n ], settings.type) ? settings.type : undefined,\n progress: settings.progressBar === true,\n icon: Option.from(settings.icon),\n closeButton: !hideCloseButton,\n onAction: close,\n iconProvider: backstage.shared.providers.icons,\n translationProvider: backstage.shared.providers.translate\n }));\n var notificationWrapper = build$1(InlineView.sketch(__assign({\n dom: {\n tag: 'div',\n classes: ['tox-notifications-container']\n },\n lazySink: extras.backstage.shared.getSink,\n fireDismissalEventInstead: {}\n }, isToolbarLocationTop$1 ? {} : { fireRepositionEventInstead: {} })));\n uiMothership.add(notificationWrapper);\n if (settings.timeout > 0) {\n global$2.setTimeout(function () {\n close();\n }, settings.timeout);\n }\n return {\n close: close,\n moveTo: function (x, y) {\n InlineView.showAt(notificationWrapper, {\n anchor: 'makeshift',\n x: x,\n y: y\n }, premade$1(notification));\n },\n moveRel: function (element, rel) {\n if (rel !== 'banner') {\n var layoutDirection_1 = getLayoutDirection(rel);\n var nodeAnchor = {\n anchor: 'node',\n root: body(),\n node: Option.some(Element.fromDom(element)),\n layouts: {\n onRtl: function () {\n return [layoutDirection_1];\n },\n onLtr: function () {\n return [layoutDirection_1];\n }\n }\n };\n InlineView.showAt(notificationWrapper, nodeAnchor, premade$1(notification));\n } else {\n InlineView.showAt(notificationWrapper, extras.backstage.shared.anchors.banner(), premade$1(notification));\n }\n },\n text: function (nuText) {\n Notification.updateText(notification, nuText);\n },\n settings: settings,\n getEl: function () {\n return notification.element().dom();\n },\n progressBar: {\n value: function (percent) {\n Notification.updateProgress(notification, percent);\n }\n }\n };\n };\n var close = function (notification) {\n notification.close();\n };\n var getArgs = function (notification) {\n return notification.settings;\n };\n return {\n open: open,\n close: close,\n reposition: reposition,\n getArgs: getArgs\n };\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 global$5 = tinymce.util.Tools.resolve('tinymce.dom.TextSeeker');\n\n var isBoundary = function (dom, node) {\n return dom.isBlock(node) || contains([\n 'BR',\n 'IMG',\n 'HR',\n 'INPUT'\n ], node.nodeName) || dom.getContentEditable(node) === 'false';\n };\n var repeatLeft = function (dom, node, offset, process, rootNode) {\n var search = global$5(dom, function (node) {\n return isBoundary(dom, node);\n });\n return Option.from(search.backwards(node, offset, process, rootNode));\n };\n\n var autocompleteSelector = '[data-mce-autocompleter]';\n var create$4 = function (editor, range) {\n return detect$4(Element.fromDom(editor.selection.getNode())).getOrThunk(function () {\n var wrapper = Element.fromHtml('', editor.getDoc());\n append(wrapper, Element.fromDom(range.extractContents()));\n range.insertNode(wrapper.dom());\n parent(wrapper).each(function (elm) {\n return elm.dom().normalize();\n });\n last$1(wrapper).map(function (last) {\n editor.selection.setCursorLocation(last.dom(), getEnd(last));\n });\n return wrapper;\n });\n };\n var detect$4 = function (elm) {\n return closest$3(elm, autocompleteSelector);\n };\n\n var isValidTextRange = function (rng) {\n return rng.collapsed && rng.startContainer.nodeType === 3;\n };\n var getText = function (rng) {\n return rng.toString().replace(/\\u00A0/g, ' ').replace(/\\uFEFF/g, '');\n };\n var isWhitespace = function (chr) {\n return chr !== '' && ' \\xA0\\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n };\n\n var stripTriggerChar = function (text, triggerCh) {\n return text.substring(triggerCh.length);\n };\n var findChar = function (text, index, ch) {\n var i;\n for (i = index - 1; i >= 0; i--) {\n var char = text.charAt(i);\n if (isWhitespace(char)) {\n return Option.none();\n }\n if (char === ch) {\n break;\n }\n }\n return Option.some(i);\n };\n var findStart = function (dom, initRange, ch, minChars) {\n if (minChars === void 0) {\n minChars = 0;\n }\n if (!isValidTextRange(initRange)) {\n return Option.none();\n }\n var findTriggerChIndex = function (element, offset, text) {\n return findChar(text, offset, ch).getOr(offset);\n };\n var root = dom.getParent(initRange.startContainer, dom.isBlock) || dom.getRoot();\n return repeatLeft(dom, initRange.startContainer, initRange.startOffset, findTriggerChIndex, root).bind(function (spot) {\n var range = initRange.cloneRange();\n range.setStart(spot.container, spot.offset);\n range.setEnd(initRange.endContainer, initRange.endOffset);\n if (range.collapsed) {\n return Option.none();\n }\n var text = getText(range);\n var triggerCharIndex = text.lastIndexOf(ch);\n if (triggerCharIndex !== 0 || stripTriggerChar(text, ch).length < minChars) {\n return Option.none();\n } else {\n return Option.some({\n text: stripTriggerChar(text, ch),\n range: range,\n triggerChar: ch\n });\n }\n });\n };\n var getContext = function (dom, initRange, ch, minChars) {\n if (minChars === void 0) {\n minChars = 0;\n }\n return detect$4(Element.fromDom(initRange.startContainer)).fold(function () {\n return findStart(dom, initRange, ch, minChars);\n }, function (elm) {\n var range = dom.createRng();\n range.selectNode(elm.dom());\n var text = getText(range);\n return Option.some({\n range: range,\n text: stripTriggerChar(text, ch),\n triggerChar: ch\n });\n });\n };\n\n var setup = function (api, editor) {\n editor.on('keypress compositionend', api.onKeypress.throttle);\n editor.on('remove', api.onKeypress.cancel);\n var redirectKeyToItem = function (item, e) {\n emitWith(item, keydown(), { raw: e });\n };\n editor.on('keydown', function (e) {\n var getItem = function () {\n return api.getView().bind(Highlighting.getHighlighted);\n };\n if (e.which === 8) {\n api.onKeypress.throttle(e);\n }\n if (api.isActive()) {\n if (e.which === 27) {\n api.cancelIfNecessary();\n }\n if (api.isMenuOpen()) {\n if (e.which === 13) {\n getItem().each(emitExecute);\n e.preventDefault();\n } else if (e.which === 40) {\n getItem().fold(function () {\n api.getView().each(Highlighting.highlightFirst);\n }, function (item) {\n redirectKeyToItem(item, e);\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n } else if (e.which === 37 || e.which === 38 || e.which === 39) {\n getItem().each(function (item) {\n redirectKeyToItem(item, e);\n e.preventDefault();\n e.stopImmediatePropagation();\n });\n }\n } else {\n if (e.which === 13 || e.which === 38 || e.which === 40) {\n api.cancelIfNecessary();\n }\n }\n }\n });\n editor.on('NodeChange', function (e) {\n if (api.isActive() && !api.isProcessingAction() && detect$4(Element.fromDom(e.element)).isNone()) {\n api.cancelIfNecessary();\n }\n });\n };\n var AutocompleterEditorEvents = { setup: setup };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var point$2 = function (container, offset) {\n return {\n container: container,\n offset: offset\n };\n };\n\n var isText$1 = function (node) {\n return node.nodeType === domGlobals.Node.TEXT_NODE;\n };\n var isElement$1 = function (node) {\n return node.nodeType === domGlobals.Node.ELEMENT_NODE;\n };\n var toLast = function (node) {\n if (isText$1(node)) {\n return point$2(node, node.data.length);\n } else {\n var children = node.childNodes;\n return children.length > 0 ? toLast(children[children.length - 1]) : point$2(node, children.length);\n }\n };\n var toLeaf = function (node, offset) {\n var children = node.childNodes;\n if (children.length > 0 && offset < children.length) {\n return toLeaf(children[offset], 0);\n } else if (children.length > 0 && isElement$1(node) && children.length === offset) {\n return toLast(children[children.length - 1]);\n } else {\n return point$2(node, offset);\n }\n };\n\n var isPreviousCharContent = function (dom, leaf) {\n return repeatLeft(dom, leaf.container, leaf.offset, function (element, offset) {\n return offset === 0 ? -1 : offset;\n }, dom.getRoot()).filter(function (spot) {\n var char = spot.container.data.charAt(spot.offset - 1);\n return !isWhitespace(char);\n }).isSome();\n };\n var isStartOfWord = function (dom) {\n return function (rng) {\n var leaf = toLeaf(rng.startContainer, rng.startOffset);\n return !isPreviousCharContent(dom, leaf);\n };\n };\n var getTriggerContext = function (dom, initRange, database) {\n return findMap(database.triggerChars, function (ch) {\n return getContext(dom, initRange, ch);\n });\n };\n var lookup = function (editor, getDatabase) {\n var database = getDatabase();\n var rng = editor.selection.getRng();\n return getTriggerContext(editor.dom, rng, database).bind(function (context) {\n return lookupWithContext(editor, getDatabase, context);\n });\n };\n var lookupWithContext = function (editor, getDatabase, context, fetchOptions) {\n if (fetchOptions === void 0) {\n fetchOptions = {};\n }\n var database = getDatabase();\n var rng = editor.selection.getRng();\n var startText = rng.startContainer.nodeValue;\n var autocompleters = filter(database.lookupByChar(context.triggerChar), function (autocompleter) {\n return context.text.length >= autocompleter.minChars && autocompleter.matches.getOrThunk(function () {\n return isStartOfWord(editor.dom);\n })(context.range, startText, context.text);\n });\n if (autocompleters.length === 0) {\n return Option.none();\n }\n var lookupData = global$6.all(map(autocompleters, function (ac) {\n var fetchResult = ac.fetch(context.text, ac.maxResults, fetchOptions);\n return fetchResult.then(function (results) {\n return {\n matchText: context.text,\n items: results,\n columns: ac.columns,\n onAction: ac.onAction\n };\n });\n }));\n return Option.some({\n lookupData: lookupData,\n context: context\n });\n };\n\n var separatorMenuItemSchema = objOf([\n strictString('type'),\n optionString('text')\n ]);\n var createSeparatorMenuItem = function (spec) {\n return asRaw('separatormenuitem', separatorMenuItemSchema, spec);\n };\n\n var autocompleterItemSchema = objOf([\n state$1('type', function () {\n return 'autocompleteitem';\n }),\n state$1('active', function () {\n return false;\n }),\n state$1('disabled', function () {\n return false;\n }),\n defaulted$1('meta', {}),\n strictString('value'),\n optionString('text'),\n optionString('icon')\n ]);\n var autocompleterSchema = objOf([\n strictString('type'),\n strictString('ch'),\n defaultedNumber('minChars', 1),\n defaulted$1('columns', 1),\n defaultedNumber('maxResults', 10),\n optionFunction('matches'),\n strictFunction('fetch'),\n strictFunction('onAction')\n ]);\n var createSeparatorItem = function (spec) {\n return asRaw('Autocompleter.Separator', separatorMenuItemSchema, spec);\n };\n var createAutocompleterItem = function (spec) {\n return asRaw('Autocompleter.Item', autocompleterItemSchema, spec);\n };\n var createAutocompleter = function (spec) {\n return asRaw('Autocompleter', autocompleterSchema, spec);\n };\n\n var stringArray = function (a) {\n var all = {};\n each(a, function (key) {\n all[key] = {};\n });\n return keys(all);\n };\n\n var register = function (editor) {\n var popups = editor.ui.registry.getAll().popups;\n var dataset = map$1(popups, function (popup) {\n return createAutocompleter(popup).fold(function (err) {\n throw new Error(formatError(err));\n }, function (x) {\n return x;\n });\n });\n var triggerChars = stringArray(mapToArray(dataset, function (v) {\n return v.ch;\n }));\n var datasetValues = values(dataset);\n var lookupByChar = function (ch) {\n return filter(datasetValues, function (dv) {\n return dv.ch === ch;\n });\n };\n return {\n dataset: dataset,\n triggerChars: triggerChars,\n lookupByChar: lookupByChar\n };\n };\n\n var commonMenuItemFields = [\n defaultedBoolean('disabled', false),\n optionString('text'),\n optionString('shortcut'),\n field('value', 'value', defaultedThunk(function () {\n return generate$1('menuitem-value');\n }), anyValue$1()),\n defaulted$1('meta', {})\n ];\n\n var menuItemSchema = objOf([\n strictString('type'),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n defaultedFunction('onAction', noop),\n optionString('icon')\n ].concat(commonMenuItemFields));\n var createMenuItem = function (spec) {\n return asRaw('menuitem', menuItemSchema, spec);\n };\n\n var nestedMenuItemSchema = objOf([\n strictString('type'),\n strictFunction('getSubmenuItems'),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n optionString('icon')\n ].concat(commonMenuItemFields));\n var createNestedMenuItem = function (spec) {\n return asRaw('nestedmenuitem', nestedMenuItemSchema, spec);\n };\n\n var toggleMenuItemSchema = objOf([\n strictString('type'),\n defaultedBoolean('active', false),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n strictFunction('onAction')\n ].concat(commonMenuItemFields));\n var createToggleMenuItem = function (spec) {\n return asRaw('togglemenuitem', toggleMenuItemSchema, spec);\n };\n\n var choiceMenuItemSchema = objOf([\n strictString('type'),\n defaultedBoolean('active', false),\n optionString('icon')\n ].concat(commonMenuItemFields));\n var createChoiceMenuItem = function (spec) {\n return asRaw('choicemenuitem', choiceMenuItemSchema, spec);\n };\n\n var fancyTypes = [\n 'inserttable',\n 'colorswatch'\n ];\n var fancyMenuItemSchema = objOf([\n strictString('type'),\n strictStringEnum('fancytype', fancyTypes),\n defaultedFunction('onAction', noop)\n ]);\n var createFancyMenuItem = function (spec) {\n return asRaw('fancymenuitem', fancyMenuItemSchema, spec);\n };\n\n var detectSize = function (comp, margin, selectorClass) {\n var descendants$1 = descendants(comp.element(), '.' + selectorClass);\n if (descendants$1.length > 0) {\n var columnLength = findIndex(descendants$1, function (c) {\n var thisTop = c.dom().getBoundingClientRect().top;\n var cTop = descendants$1[0].dom().getBoundingClientRect().top;\n return Math.abs(thisTop - cTop) > margin;\n }).getOr(descendants$1.length);\n return Option.some({\n numColumns: columnLength,\n numRows: Math.ceil(descendants$1.length / columnLength)\n });\n } else {\n return Option.none();\n }\n };\n\n var namedEvents = function (name, handlers) {\n return derive$1([config(name, handlers)]);\n };\n var unnamedEvents = function (handlers) {\n return namedEvents(generate$1('unnamed-events'), handlers);\n };\n var SimpleBehaviours = {\n namedEvents: namedEvents,\n unnamedEvents: unnamedEvents\n };\n\n var TooltippingSchema = [\n strict$1('lazySink'),\n strict$1('tooltipDom'),\n defaulted$1('exclusive', true),\n defaulted$1('tooltipComponents', []),\n defaulted$1('delay', 300),\n defaultedStringEnum('mode', 'normal', [\n 'normal',\n 'follow-highlight'\n ]),\n defaulted$1('anchor', function (comp) {\n return {\n anchor: 'hotspot',\n hotspot: comp,\n layouts: {\n onLtr: constant([\n south$1,\n north$1,\n southeast$1,\n northeast$1,\n southwest$1,\n northwest$1\n ]),\n onRtl: constant([\n south$1,\n north$1,\n southeast$1,\n northeast$1,\n southwest$1,\n northwest$1\n ])\n }\n };\n }),\n onHandler('onHide'),\n onHandler('onShow')\n ];\n\n var init$4 = function () {\n var timer = Cell(Option.none());\n var popup = Cell(Option.none());\n var getTooltip = function () {\n return popup.get();\n };\n var setTooltip = function (comp) {\n popup.set(Option.some(comp));\n };\n var clearTooltip = function () {\n popup.set(Option.none());\n };\n var clearTimer = function () {\n timer.get().each(function (t) {\n domGlobals.clearTimeout(t);\n });\n };\n var resetTimer = function (f, delay) {\n clearTimer();\n timer.set(Option.some(domGlobals.setTimeout(function () {\n f();\n }, delay)));\n };\n var isShowing = function () {\n return popup.get().isSome();\n };\n var readState = constant('not-implemented');\n return nu$5({\n getTooltip: getTooltip,\n isShowing: isShowing,\n setTooltip: setTooltip,\n clearTooltip: clearTooltip,\n clearTimer: clearTimer,\n resetTimer: resetTimer,\n readState: readState\n });\n };\n\n var TooltippingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$4\n });\n\n var ExclusivityChannel = generate$1('tooltip.exclusive');\n var ShowTooltipEvent = generate$1('tooltip.show');\n var HideTooltipEvent = generate$1('tooltip.hide');\n\n var hideAllExclusive = function (component, tConfig, tState) {\n component.getSystem().broadcastOn([ExclusivityChannel], {});\n };\n var setComponents = function (component, tConfig, tState, specs) {\n tState.getTooltip().each(function (tooltip) {\n if (tooltip.getSystem().isConnected()) {\n Replacing.set(tooltip, specs);\n }\n });\n };\n\n var TooltippingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n hideAllExclusive: hideAllExclusive,\n setComponents: setComponents\n });\n\n var events$8 = function (tooltipConfig, state) {\n var hide = function (comp) {\n state.getTooltip().each(function (p) {\n detach(p);\n tooltipConfig.onHide(comp, p);\n state.clearTooltip();\n });\n state.clearTimer();\n };\n var show = function (comp) {\n if (!state.isShowing()) {\n hideAllExclusive(comp);\n var sink = tooltipConfig.lazySink(comp).getOrDie();\n var popup = comp.getSystem().build({\n dom: tooltipConfig.tooltipDom,\n components: tooltipConfig.tooltipComponents,\n events: derive(tooltipConfig.mode === 'normal' ? [\n run(mouseover(), function (_) {\n emit(comp, ShowTooltipEvent);\n }),\n run(mouseout(), function (_) {\n emit(comp, HideTooltipEvent);\n })\n ] : []),\n behaviours: derive$1([Replacing.config({})])\n });\n state.setTooltip(popup);\n attach$1(sink, popup);\n tooltipConfig.onShow(comp, popup);\n Positioning.position(sink, tooltipConfig.anchor(comp), popup);\n }\n };\n return derive(flatten([\n [\n run(ShowTooltipEvent, function (comp) {\n state.resetTimer(function () {\n show(comp);\n }, tooltipConfig.delay);\n }),\n run(HideTooltipEvent, function (comp) {\n state.resetTimer(function () {\n hide(comp);\n }, tooltipConfig.delay);\n }),\n run(receive(), function (comp, message) {\n var receivingData = message;\n if (contains(receivingData.channels(), ExclusivityChannel)) {\n hide(comp);\n }\n }),\n runOnDetached(function (comp) {\n hide(comp);\n })\n ],\n tooltipConfig.mode === 'normal' ? [\n run(focusin(), function (comp) {\n emit(comp, ShowTooltipEvent);\n }),\n run(postBlur(), function (comp) {\n emit(comp, HideTooltipEvent);\n }),\n run(mouseover(), function (comp) {\n emit(comp, ShowTooltipEvent);\n }),\n run(mouseout(), function (comp) {\n emit(comp, HideTooltipEvent);\n })\n ] : [\n run(highlight(), function (comp, se) {\n emit(comp, ShowTooltipEvent);\n }),\n run(dehighlight(), function (comp) {\n emit(comp, HideTooltipEvent);\n })\n ]\n ]));\n };\n\n var ActiveTooltipping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$8\n });\n\n var Tooltipping = create$1({\n fields: TooltippingSchema,\n name: 'tooltipping',\n active: ActiveTooltipping,\n state: TooltippingState,\n apis: TooltippingApis\n });\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var navClass = 'tox-menu-nav__js';\n var selectableClass = 'tox-collection__item';\n var colorClass = 'tox-swatch';\n var presetClasses = {\n normal: navClass,\n color: colorClass\n };\n var tickedClass = 'tox-collection__item--enabled';\n var groupHeadingClass = 'tox-collection__group-heading';\n var iconClass = 'tox-collection__item-icon';\n var textClass = 'tox-collection__item-label';\n var accessoryClass = 'tox-collection__item-accessory';\n var caretClass = 'tox-collection__item-caret';\n var checkmarkClass = 'tox-collection__item-checkmark';\n var activeClass = 'tox-collection__item--active';\n var iconClassRtl = 'tox-collection__item-icon-rtl';\n var classForPreset = function (presets) {\n return get(presetClasses, presets).getOr(navClass);\n };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var convertText = function (source) {\n var mac = {\n alt: '⌥',\n ctrl: '⌃',\n shift: '⇧',\n meta: '⌘',\n access: '⌃⌥'\n };\n var other = {\n meta: 'Ctrl',\n access: 'Shift+Alt'\n };\n var replace = global$8.mac ? mac : other;\n var shortcut = source.split('+');\n var updated = map(shortcut, function (segment) {\n var search = segment.toLowerCase().trim();\n return has(replace, search) ? replace[search] : segment;\n });\n return global$8.mac ? updated.join('') : updated.join('+');\n };\n var ConvertShortcut = { convertText: convertText };\n\n var renderIcon = function (iconHtml) {\n return {\n dom: {\n tag: 'div',\n classes: [iconClass],\n innerHtml: iconHtml\n }\n };\n };\n var renderText = function (text$1) {\n return {\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [text(global$7.translate(text$1))]\n };\n };\n var renderHtml = function (html) {\n return {\n dom: {\n tag: 'div',\n classes: [textClass],\n innerHtml: html\n }\n };\n };\n var renderStyledText = function (style, text$1) {\n return {\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [{\n dom: {\n tag: style.tag,\n styles: style.styles\n },\n components: [text(global$7.translate(text$1))]\n }]\n };\n };\n var renderShortcut = function (shortcut) {\n return {\n dom: {\n tag: 'div',\n classes: [accessoryClass],\n innerHtml: ConvertShortcut.convertText(shortcut)\n }\n };\n };\n var renderCheckmark = function (icons) {\n return {\n dom: {\n tag: 'div',\n classes: [\n iconClass,\n checkmarkClass\n ],\n innerHtml: get$d('checkmark', icons)\n }\n };\n };\n var renderSubmenuCaret = function (icons) {\n return {\n dom: {\n tag: 'div',\n classes: [caretClass],\n innerHtml: get$d('chevron-right', icons)\n }\n };\n };\n var renderDownwardsCaret = function (icons) {\n return {\n dom: {\n tag: 'div',\n classes: [caretClass],\n innerHtml: get$d('chevron-down', icons)\n }\n };\n };\n\n var renderColorStructure = function (itemText, itemValue, iconSvg, providerBackstage) {\n var colorPickerCommand = 'custom';\n var removeColorCommand = 'remove';\n var getDom = function () {\n var common = colorClass;\n var icon = iconSvg.getOr('');\n var attributes = itemText.map(function (text) {\n return { title: providerBackstage.translate(text) };\n }).getOr({});\n var baseDom = {\n tag: 'div',\n attributes: attributes,\n classes: [common]\n };\n if (itemValue === colorPickerCommand) {\n return __assign(__assign({}, baseDom), {\n tag: 'button',\n classes: __spreadArrays(baseDom.classes, ['tox-swatches__picker-btn']),\n innerHtml: icon\n });\n } else if (itemValue === removeColorCommand) {\n return __assign(__assign({}, baseDom), {\n classes: __spreadArrays(baseDom.classes, ['tox-swatch--remove']),\n innerHtml: icon\n });\n } else {\n return __assign(__assign({}, baseDom), {\n attributes: __assign(__assign({}, baseDom.attributes), { 'data-mce-color': itemValue }),\n styles: { 'background-color': itemValue }\n });\n }\n };\n return {\n dom: getDom(),\n optComponents: []\n };\n };\n var renderNormalItemStructure = function (info, icon, renderIcons, textRender, rtlClass) {\n var leftIcon = renderIcons ? info.checkMark.orThunk(function () {\n return icon.or(Option.some('')).map(renderIcon);\n }) : Option.none();\n var domTitle = info.ariaLabel.map(function (label) {\n return { attributes: { title: global$7.translate(label) } };\n }).getOr({});\n var dom = __assign({\n tag: 'div',\n classes: [\n navClass,\n selectableClass\n ].concat(rtlClass ? [iconClassRtl] : [])\n }, domTitle);\n var content = info.htmlContent.fold(function () {\n return info.textContent.map(textRender);\n }, function (html) {\n return Option.some(renderHtml(html));\n });\n var menuItem = {\n dom: dom,\n optComponents: [\n leftIcon,\n content,\n info.shortcutContent.map(renderShortcut),\n info.caret\n ]\n };\n return menuItem;\n };\n var rtlIcon = [\n 'list-num-default',\n 'list-num-lower-alpha',\n 'list-num-lower-greek',\n 'list-num-lower-roman',\n 'list-num-upper-alpha',\n 'list-num-upper-roman'\n ];\n var rtlTransform = [\n 'list-bull-circle',\n 'list-bull-default',\n 'list-bull-square'\n ];\n var renderItemStructure = function (info, providersBackstage, renderIcons, fallbackIcon) {\n if (fallbackIcon === void 0) {\n fallbackIcon = Option.none();\n }\n var getIconName = function (iconName) {\n return iconName.map(function (name) {\n return global$7.isRtl() && contains(rtlIcon, name) ? name + '-rtl' : name;\n });\n };\n var needRtlClass = global$7.isRtl() && info.iconContent.exists(function (name) {\n return contains(rtlTransform, name);\n });\n var icon = getIconName(info.iconContent).map(function (iconName) {\n return getOr(iconName, providersBackstage.icons, fallbackIcon);\n });\n var textRender = Option.from(info.meta).fold(function () {\n return renderText;\n }, function (meta) {\n return has(meta, 'style') ? curry(renderStyledText, meta.style) : renderText;\n });\n if (info.presets === 'color') {\n return renderColorStructure(info.ariaLabel, info.value, icon, providersBackstage);\n } else {\n return renderNormalItemStructure(info, icon, renderIcons, textRender, needRtlClass);\n }\n };\n\n var nativeDisabled = [\n 'input',\n 'button',\n 'textarea',\n 'select'\n ];\n var onLoad$5 = function (component, disableConfig, disableState) {\n if (disableConfig.disabled) {\n disable(component, disableConfig);\n }\n };\n var hasNative = function (component, config) {\n return config.useNative === true && contains(nativeDisabled, name(component.element()));\n };\n var nativeIsDisabled = function (component) {\n return has$1(component.element(), 'disabled');\n };\n var nativeDisable = function (component) {\n set$1(component.element(), 'disabled', 'disabled');\n };\n var nativeEnable = function (component) {\n remove$1(component.element(), 'disabled');\n };\n var ariaIsDisabled = function (component) {\n return get$2(component.element(), 'aria-disabled') === 'true';\n };\n var ariaDisable = function (component) {\n set$1(component.element(), 'aria-disabled', 'true');\n };\n var ariaEnable = function (component) {\n set$1(component.element(), 'aria-disabled', 'false');\n };\n var disable = function (component, disableConfig, disableState) {\n disableConfig.disableClass.each(function (disableClass) {\n add$2(component.element(), disableClass);\n });\n var f = hasNative(component, disableConfig) ? nativeDisable : ariaDisable;\n f(component);\n disableConfig.onDisabled(component);\n };\n var enable = function (component, disableConfig, disableState) {\n disableConfig.disableClass.each(function (disableClass) {\n remove$4(component.element(), disableClass);\n });\n var f = hasNative(component, disableConfig) ? nativeEnable : ariaEnable;\n f(component);\n disableConfig.onEnabled(component);\n };\n var isDisabled = function (component, disableConfig) {\n return hasNative(component, disableConfig) ? nativeIsDisabled(component) : ariaIsDisabled(component);\n };\n var set$7 = function (component, disableConfig, disableState, disabled) {\n var f = disabled ? disable : enable;\n f(component, disableConfig, disableState);\n };\n\n var DisableApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n enable: enable,\n disable: disable,\n isDisabled: isDisabled,\n onLoad: onLoad$5,\n set: set$7\n });\n\n var exhibit$3 = function (base, disableConfig) {\n return nu$6({ classes: disableConfig.disabled ? disableConfig.disableClass.map(pure).getOr([]) : [] });\n };\n var events$9 = function (disableConfig, disableState) {\n return derive([\n abort(execute(), function (component, simulatedEvent) {\n return isDisabled(component, disableConfig);\n }),\n loadEvent(disableConfig, disableState, onLoad$5)\n ]);\n };\n\n var ActiveDisable = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$3,\n events: events$9\n });\n\n var DisableSchema = [\n defaulted$1('disabled', false),\n defaulted$1('useNative', true),\n option('disableClass'),\n onHandler('onDisabled'),\n onHandler('onEnabled')\n ];\n\n var Disabling = create$1({\n fields: DisableSchema,\n name: 'disabling',\n active: ActiveDisable,\n apis: DisableApis\n });\n\n var item = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-collection__item--state-disabled'\n });\n };\n var button = function (disabled) {\n return Disabling.config({ disabled: disabled });\n };\n var splitButton = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-tbtn--disabled'\n });\n };\n var toolbarButton = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-tbtn--disabled',\n useNative: false\n });\n };\n var DisablingConfigs = {\n item: item,\n button: button,\n splitButton: splitButton,\n toolbarButton: toolbarButton\n };\n\n var runWithApi = function (info, comp) {\n var api = info.getApi(comp);\n return function (f) {\n f(api);\n };\n };\n var onControlAttached = function (info, editorOffCell) {\n return runOnAttached(function (comp) {\n var run = runWithApi(info, comp);\n run(function (api) {\n var onDestroy = info.onSetup(api);\n if (onDestroy !== null && onDestroy !== undefined) {\n editorOffCell.set(onDestroy);\n }\n });\n });\n };\n var onControlDetached = function (getApi, editorOffCell) {\n return runOnDetached(function (comp) {\n return runWithApi(getApi, comp)(editorOffCell.get());\n });\n };\n\n var ItemResponse;\n (function (ItemResponse) {\n ItemResponse[ItemResponse['CLOSE_ON_EXECUTE'] = 0] = 'CLOSE_ON_EXECUTE';\n ItemResponse[ItemResponse['BUBBLE_TO_SANDBOX'] = 1] = 'BUBBLE_TO_SANDBOX';\n }(ItemResponse || (ItemResponse = {})));\n var ItemResponse$1 = ItemResponse;\n\n var onMenuItemExecute = function (info, itemResponse) {\n return runOnExecute(function (comp, simulatedEvent) {\n runWithApi(info, comp)(info.onAction);\n if (!info.triggersSubmenu && itemResponse === ItemResponse$1.CLOSE_ON_EXECUTE) {\n emit(comp, sandboxClose());\n simulatedEvent.stop();\n }\n });\n };\n var menuItemEventOrder = {\n 'alloy.execute': [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'item-events'\n ]\n };\n\n var componentRenderPipeline = function (xs) {\n return bind(xs, function (o) {\n return o.toArray();\n });\n };\n var renderCommonItem = function (spec, structure, itemResponse) {\n var editorOffCell = Cell(noop);\n return {\n type: 'item',\n dom: structure.dom,\n components: componentRenderPipeline(structure.optComponents),\n data: spec.data,\n eventOrder: menuItemEventOrder,\n hasSubmenu: spec.triggersSubmenu,\n itemBehaviours: derive$1([\n config('item-events', [\n onMenuItemExecute(spec, itemResponse),\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n DisablingConfigs.item(spec.disabled),\n Replacing.config({})\n ].concat(spec.itemBehaviours))\n };\n };\n var buildData = function (source) {\n return {\n value: source.value,\n meta: __assign({ text: source.text.getOr('') }, source.meta)\n };\n };\n\n var tooltipBehaviour = function (meta, sharedBackstage) {\n return get(meta, 'tooltipWorker').map(function (tooltipWorker) {\n return [Tooltipping.config({\n lazySink: sharedBackstage.getSink,\n tooltipDom: {\n tag: 'div',\n classes: ['tox-tooltip-worker-container']\n },\n tooltipComponents: [],\n anchor: function (comp) {\n return {\n anchor: 'submenu',\n item: comp,\n overrides: { maxHeightFunction: expandable }\n };\n },\n mode: 'follow-highlight',\n onShow: function (component, _tooltip) {\n tooltipWorker(function (elm) {\n Tooltipping.setComponents(component, [external({ element: Element.fromDom(elm) })]);\n });\n }\n })];\n }).getOr([]);\n };\n var escapeRegExp = function (text) {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n };\n var encodeText = function (text) {\n return global$3.DOM.encode(text);\n };\n var replaceText = function (text, matchText) {\n var translated = global$7.translate(text);\n var encoded = encodeText(translated);\n if (matchText.length > 0) {\n var escapedMatchRegex = new RegExp(escapeRegExp(matchText), 'gi');\n return encoded.replace(escapedMatchRegex, function (match) {\n return '' + match + '';\n });\n } else {\n return encoded;\n }\n };\n var renderAutocompleteItem = function (spec, matchText, useText, presets, onItemValueHandler, itemResponse, sharedBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var structure = renderItemStructure({\n presets: presets,\n textContent: Option.none(),\n htmlContent: useText ? spec.text.map(function (text) {\n return replaceText(text, matchText);\n }) : Option.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: Option.none(),\n checkMark: Option.none(),\n caret: Option.none(),\n value: spec.value\n }, sharedBackstage.providers, renderIcons, spec.icon);\n return renderCommonItem({\n data: buildData(spec),\n disabled: spec.disabled,\n getApi: function () {\n return {};\n },\n onAction: function (_api) {\n return onItemValueHandler(spec.value, spec.meta);\n },\n onSetup: function () {\n return function () {\n };\n },\n triggersSubmenu: false,\n itemBehaviours: tooltipBehaviour(spec.meta, sharedBackstage)\n }, structure, itemResponse);\n };\n\n var renderChoiceItem = function (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage) {\n var getApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var structure = renderItemStructure({\n presets: presets,\n textContent: useText ? spec.text : Option.none(),\n htmlContent: Option.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: useText ? spec.shortcut : Option.none(),\n checkMark: useText ? Option.some(renderCheckmark(providersBackstage.icons)) : Option.none(),\n caret: Option.none(),\n value: spec.value\n }, providersBackstage, true);\n return deepMerge(renderCommonItem({\n data: buildData(spec),\n disabled: spec.disabled,\n getApi: getApi,\n onAction: function (_api) {\n return onItemValueHandler(spec.value);\n },\n onSetup: function (api) {\n api.setActive(isSelected);\n return function () {\n };\n },\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active\n }\n });\n };\n\n var parts$2 = constant(generate$4(owner$2(), parts()));\n\n var cellOverEvent = generate$1('cell-over');\n var cellExecuteEvent = generate$1('cell-execute');\n var makeCell = function (row, col, labelId) {\n var _a;\n var emitCellOver = function (c) {\n return emitWith(c, cellOverEvent, {\n row: row,\n col: col\n });\n };\n var emitExecute = function (c) {\n return emitWith(c, cellExecuteEvent, {\n row: row,\n col: col\n });\n };\n var onClick = function (c, se) {\n se.stop();\n emitExecute(c);\n };\n return build$1({\n dom: {\n tag: 'div',\n attributes: (_a = { role: 'button' }, _a['aria-labelledby'] = labelId, _a)\n },\n behaviours: derive$1([\n config('insert-table-picker-cell', [\n run(mouseover(), Focusing.focus),\n run(execute(), emitExecute),\n run(click(), onClick),\n run(tap(), onClick)\n ]),\n Toggling.config({\n toggleClass: 'tox-insert-table-picker__selected',\n toggleOnExecute: false\n }),\n Focusing.config({ onFocus: emitCellOver })\n ])\n });\n };\n var makeCells = function (labelId, numRows, numCols) {\n var cells = [];\n for (var i = 0; i < numRows; i++) {\n var row = [];\n for (var j = 0; j < numCols; j++) {\n row.push(makeCell(i, j, labelId));\n }\n cells.push(row);\n }\n return cells;\n };\n var selectCells = function (cells, selectedRow, selectedColumn, numRows, numColumns) {\n for (var i = 0; i < numRows; i++) {\n for (var j = 0; j < numColumns; j++) {\n Toggling.set(cells[i][j], i <= selectedRow && j <= selectedColumn);\n }\n }\n };\n var makeComponents = function (cells) {\n return bind(cells, function (cellRow) {\n return map(cellRow, premade$1);\n });\n };\n var makeLabelText = function (row, col) {\n return text(col + 1 + 'x' + (row + 1));\n };\n function renderInsertTableMenuItem(spec) {\n var numRows = 10;\n var numColumns = 10;\n var sizeLabelId = generate$1('size-label');\n var cells = makeCells(sizeLabelId, numRows, numColumns);\n var memLabel = record({\n dom: {\n tag: 'span',\n classes: ['tox-insert-table-picker__label'],\n attributes: { id: sizeLabelId }\n },\n components: [text('0x0')],\n behaviours: derive$1([Replacing.config({})])\n });\n return {\n type: 'widget',\n data: { value: generate$1('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$2().widget({\n dom: {\n tag: 'div',\n classes: ['tox-insert-table-picker']\n },\n components: makeComponents(cells).concat(memLabel.asSpec()),\n behaviours: derive$1([\n config('insert-table-picker', [\n runWithTarget(cellOverEvent, function (c, t, e) {\n var row = e.event().row();\n var col = e.event().col();\n selectCells(cells, row, col, numRows, numColumns);\n Replacing.set(memLabel.get(c), [makeLabelText(row, col)]);\n }),\n runWithTarget(cellExecuteEvent, function (c, _, e) {\n spec.onAction({\n numRows: e.event().row() + 1,\n numColumns: e.event().col() + 1\n });\n emit(c, sandboxClose());\n })\n ]),\n Keying.config({\n initSize: {\n numRows: numRows,\n numColumns: numColumns\n },\n mode: 'flatgrid',\n selector: '[role=\"button\"]'\n })\n ])\n })]\n };\n }\n\n var hexColour = function (hexString) {\n return { value: constant(hexString) };\n };\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n var longformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n var isHexString = function (hex) {\n return shorthandRegex.test(hex) || longformRegex.test(hex);\n };\n var getLongForm = function (hex) {\n var hexString = hex.value().replace(shorthandRegex, function (m, r, g, b) {\n return r + r + g + g + b + b;\n });\n return { value: constant(hexString) };\n };\n var extractValues = function (hex) {\n var longForm = getLongForm(hex);\n var splitForm = longformRegex.exec(longForm.value());\n return splitForm === null ? [\n 'FFFFFF',\n 'FF',\n 'FF',\n 'FF'\n ] : splitForm;\n };\n var toHex = function (component) {\n var hex = component.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n var fromRgba = function (rgbaColour) {\n var value = toHex(rgbaColour.red()) + toHex(rgbaColour.green()) + toHex(rgbaColour.blue());\n return hexColour(value);\n };\n\n var min = Math.min;\n var max = Math.max;\n var round = Math.round;\n var rgbRegex = /^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/;\n var rgbaRegex = /^rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*(\\d?(?:\\.\\d+)?)\\)/;\n var rgbaColour = function (red, green, blue, alpha) {\n return {\n red: constant(red),\n green: constant(green),\n blue: constant(blue),\n alpha: constant(alpha)\n };\n };\n var isRgbaComponent = function (value) {\n var num = parseInt(value, 10);\n return num.toString() === value && num >= 0 && num <= 255;\n };\n var fromHsv = function (hsv) {\n var r;\n var g;\n var b;\n var hue = (hsv.hue() || 0) % 360;\n var saturation = hsv.saturation() / 100;\n var brightness = hsv.value() / 100;\n saturation = max(0, min(saturation, 1));\n brightness = max(0, min(brightness, 1));\n if (saturation === 0) {\n r = g = b = round(255 * brightness);\n return rgbaColour(r, g, b, 1);\n }\n var side = hue / 60;\n var chroma = brightness * saturation;\n var x = chroma * (1 - Math.abs(side % 2 - 1));\n var 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(255 * (r + match));\n g = round(255 * (g + match));\n b = round(255 * (b + match));\n return rgbaColour(r, g, b, 1);\n };\n var fromHex = function (hexColour) {\n var result = extractValues(hexColour);\n var red = parseInt(result[1], 16);\n var green = parseInt(result[2], 16);\n var blue = parseInt(result[3], 16);\n return rgbaColour(red, green, blue, 1);\n };\n var fromStringValues = function (red, green, blue, alpha) {\n var r = parseInt(red, 10);\n var g = parseInt(green, 10);\n var b = parseInt(blue, 10);\n var a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n var fromString = function (rgbaString) {\n if (rgbaString === 'transparent') {\n return Option.some(rgbaColour(0, 0, 0, 0));\n }\n var rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Option.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n var rgbaMatch = rgbaRegex.exec(rgbaString);\n if (rgbaMatch !== null) {\n return Option.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n }\n return Option.none();\n };\n var toString = function (rgba) {\n return 'rgba(' + rgba.red() + ',' + rgba.green() + ',' + rgba.blue() + ',' + rgba.alpha() + ')';\n };\n var redColour = constant(rgbaColour(255, 0, 0, 1));\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n var storageName = 'tinymce-custom-colors';\n function ColorCache (max) {\n if (max === void 0) {\n max = 10;\n }\n var storageString = global$9.getItem(storageName);\n var localstorage = isString(storageString) ? JSON.parse(storageString) : [];\n var prune = function (list) {\n var diff = max - list.length;\n return diff < 0 ? list.slice(0, max) : list;\n };\n var cache = prune(localstorage);\n var add = function (key) {\n indexOf(cache, key).each(remove);\n cache.unshift(key);\n if (cache.length > max) {\n cache.pop();\n }\n global$9.setItem(storageName, JSON.stringify(cache));\n };\n var remove = function (idx) {\n cache.splice(idx, 1);\n };\n var state = function () {\n return cache.slice(0);\n };\n return {\n add: add,\n state: state\n };\n }\n\n var choiceItem = 'choiceitem';\n var defaultColors = [\n {\n type: choiceItem,\n text: 'Light Green',\n value: '#BFEDD2'\n },\n {\n type: choiceItem,\n text: 'Light Yellow',\n value: '#FBEEB8'\n },\n {\n type: choiceItem,\n text: 'Light Red',\n value: '#F8CAC6'\n },\n {\n type: choiceItem,\n text: 'Light Purple',\n value: '#ECCAFA'\n },\n {\n type: choiceItem,\n text: 'Light Blue',\n value: '#C2E0F4'\n },\n {\n type: choiceItem,\n text: 'Green',\n value: '#2DC26B'\n },\n {\n type: choiceItem,\n text: 'Yellow',\n value: '#F1C40F'\n },\n {\n type: choiceItem,\n text: 'Red',\n value: '#E03E2D'\n },\n {\n type: choiceItem,\n text: 'Purple',\n value: '#B96AD9'\n },\n {\n type: choiceItem,\n text: 'Blue',\n value: '#3598DB'\n },\n {\n type: choiceItem,\n text: 'Dark Turquoise',\n value: '#169179'\n },\n {\n type: choiceItem,\n text: 'Orange',\n value: '#E67E23'\n },\n {\n type: choiceItem,\n text: 'Dark Red',\n value: '#BA372A'\n },\n {\n type: choiceItem,\n text: 'Dark Purple',\n value: '#843FA1'\n },\n {\n type: choiceItem,\n text: 'Dark Blue',\n value: '#236FA1'\n },\n {\n type: choiceItem,\n text: 'Light Gray',\n value: '#ECF0F1'\n },\n {\n type: choiceItem,\n text: 'Medium Gray',\n value: '#CED4D9'\n },\n {\n type: choiceItem,\n text: 'Gray',\n value: '#95A5A6'\n },\n {\n type: choiceItem,\n text: 'Dark Gray',\n value: '#7E8C8D'\n },\n {\n type: choiceItem,\n text: 'Navy Blue',\n value: '#34495E'\n },\n {\n type: choiceItem,\n text: 'Black',\n value: '#000000'\n },\n {\n type: choiceItem,\n text: 'White',\n value: '#ffffff'\n }\n ];\n var colorCache = ColorCache(10);\n var mapColors = function (colorMap) {\n var colors = [];\n var canvas = domGlobals.document.createElement('canvas');\n canvas.height = 1;\n canvas.width = 1;\n var ctx = canvas.getContext('2d');\n var byteAsHex = function (colorByte, alphaByte) {\n var bg = 255;\n var alpha = alphaByte / 255;\n var colorByteWithWhiteBg = Math.round(colorByte * alpha + bg * (1 - alpha));\n return ('0' + colorByteWithWhiteBg.toString(16)).slice(-2).toUpperCase();\n };\n var asHexColor = function (color) {\n if (/^[0-9A-Fa-f]{6}$/.test(color)) {\n return '#' + color.toUpperCase();\n }\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = '#FFFFFF';\n ctx.fillStyle = color;\n ctx.fillRect(0, 0, 1, 1);\n var rgba = ctx.getImageData(0, 0, 1, 1).data;\n var r = rgba[0], g = rgba[1], b = rgba[2], a = rgba[3];\n return '#' + byteAsHex(r, a) + byteAsHex(g, a) + byteAsHex(b, a);\n };\n for (var i = 0; i < colorMap.length; i += 2) {\n colors.push({\n text: colorMap[i + 1],\n value: asHexColor(colorMap[i]),\n type: 'choiceitem'\n });\n }\n return colors;\n };\n var getColorCols = function (editor, defaultCols) {\n return editor.getParam('color_cols', defaultCols, 'number');\n };\n var hasCustomColors = function (editor) {\n return editor.getParam('custom_colors') !== false;\n };\n var getColorMap = function (editor) {\n return editor.getParam('color_map');\n };\n var getColors = function (editor) {\n var unmapped = getColorMap(editor);\n return unmapped !== undefined ? mapColors(unmapped) : defaultColors;\n };\n var getCurrentColors = function () {\n return map(colorCache.state(), function (color) {\n return {\n type: choiceItem,\n text: color,\n value: color\n };\n });\n };\n var addColor = function (color) {\n colorCache.add(color);\n };\n var Settings = {\n mapColors: mapColors,\n getColorCols: getColorCols,\n hasCustomColors: hasCustomColors,\n getColorMap: getColorMap,\n getColors: getColors,\n getCurrentColors: getCurrentColors,\n addColor: addColor\n };\n\n var fireSkinLoaded = function (editor) {\n return editor.fire('SkinLoaded');\n };\n var fireSkinLoadError = function (editor, error) {\n return editor.fire('SkinLoadError', error);\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 fireResizeContent = function (editor, e) {\n return editor.fire('ResizeContent', e);\n };\n var fireScrollContent = function (editor, e) {\n return editor.fire('ScrollContent', e);\n };\n var fireTextColorChange = function (editor, data) {\n return editor.fire('TextColorChange', data);\n };\n var Events = {\n fireSkinLoaded: fireSkinLoaded,\n fireSkinLoadError: fireSkinLoadError,\n fireResizeEditor: fireResizeEditor,\n fireScrollContent: fireScrollContent,\n fireBeforeRenderUI: fireBeforeRenderUI,\n fireResizeContent: fireResizeContent,\n fireTextColorChange: fireTextColorChange\n };\n\n var getCurrentColor = function (editor, format) {\n var color;\n editor.dom.getParents(editor.selection.getStart(), function (elm) {\n var value;\n if (value = elm.style[format === 'forecolor' ? 'color' : 'background-color']) {\n color = color ? color : value;\n }\n });\n return color;\n };\n var applyFormat = function (editor, format, value) {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.formatter.apply(format, { value: value });\n editor.nodeChanged();\n });\n };\n var removeFormat = function (editor, format) {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.formatter.remove(format, { value: null }, null, true);\n editor.nodeChanged();\n });\n };\n var registerCommands = function (editor) {\n editor.addCommand('mceApplyTextcolor', function (format, value) {\n applyFormat(editor, format, value);\n });\n editor.addCommand('mceRemoveTextcolor', function (format) {\n removeFormat(editor, format);\n });\n };\n var calcCols = function (colors) {\n return Math.max(5, Math.ceil(Math.sqrt(colors)));\n };\n var getColorCols$1 = function (editor) {\n var colors = Settings.getColors(editor);\n var defaultCols = calcCols(colors.length);\n return Settings.getColorCols(editor, defaultCols);\n };\n var getAdditionalColors = function (hasCustom) {\n var type = 'choiceitem';\n var remove = {\n type: type,\n text: 'Remove color',\n icon: 'color-swatch-remove-color',\n value: 'remove'\n };\n var custom = {\n type: type,\n text: 'Custom color',\n icon: 'color-picker',\n value: 'custom'\n };\n return hasCustom ? [\n remove,\n custom\n ] : [remove];\n };\n var applyColor = function (editor, format, value, onChoice) {\n if (value === 'custom') {\n var dialog = colorPickerDialog(editor);\n dialog(function (colorOpt) {\n colorOpt.each(function (color) {\n Settings.addColor(color);\n editor.execCommand('mceApplyTextcolor', format, color);\n onChoice(color);\n });\n }, '#000000');\n } else if (value === 'remove') {\n onChoice('');\n editor.execCommand('mceRemoveTextcolor', format);\n } else {\n onChoice(value);\n editor.execCommand('mceApplyTextcolor', format, value);\n }\n };\n var getMenuColors = function (colors, hasCustom) {\n return colors.concat(Settings.getCurrentColors().concat(getAdditionalColors(hasCustom)));\n };\n var getFetch = function (colors, hasCustom) {\n return function (callback) {\n callback(getMenuColors(colors, hasCustom));\n };\n };\n var setIconColor = function (splitButtonApi, name, newColor) {\n var setIconFillAndStroke = function (pathId, color) {\n splitButtonApi.setIconFill(pathId, color);\n splitButtonApi.setIconStroke(pathId, color);\n };\n var id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';\n setIconFillAndStroke(id, newColor);\n };\n var registerTextColorButton = function (editor, name, format, tooltip, lastColor) {\n editor.ui.registry.addSplitButton(name, {\n tooltip: tooltip,\n presets: 'color',\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n select: function (value) {\n var optCurrentRgb = Option.from(getCurrentColor(editor, format));\n return optCurrentRgb.bind(function (currentRgb) {\n return fromString(currentRgb).map(function (rgba) {\n var currentHex = fromRgba(rgba).value();\n return contains$1(value.toLowerCase(), currentHex);\n });\n }).getOr(false);\n },\n columns: getColorCols$1(editor),\n fetch: getFetch(Settings.getColors(editor), Settings.hasCustomColors(editor)),\n onAction: function (splitButtonApi) {\n if (lastColor.get() !== null) {\n applyColor(editor, format, lastColor.get(), function () {\n });\n }\n },\n onItemAction: function (splitButtonApi, value) {\n applyColor(editor, format, value, function (newColor) {\n lastColor.set(newColor);\n Events.fireTextColorChange(editor, {\n name: name,\n color: newColor\n });\n });\n },\n onSetup: function (splitButtonApi) {\n if (lastColor.get() !== null) {\n setIconColor(splitButtonApi, name, lastColor.get());\n }\n var handler = function (e) {\n if (e.name === name) {\n setIconColor(splitButtonApi, e.name, e.color);\n }\n };\n editor.on('TextColorChange', handler);\n return function () {\n editor.off('TextColorChange', handler);\n };\n }\n });\n };\n var registerTextColorMenuItem = function (editor, name, format, text) {\n editor.ui.registry.addNestedMenuItem(name, {\n text: text,\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n getSubmenuItems: function () {\n return [{\n type: 'fancymenuitem',\n fancytype: 'colorswatch',\n onAction: function (data) {\n applyColor(editor, format, data.value, noop);\n }\n }];\n }\n });\n };\n var colorPickerDialog = function (editor) {\n return function (callback, value) {\n var getOnSubmit = function (callback) {\n return function (api) {\n var data = api.getData();\n callback(Option.from(data.colorpicker));\n api.close();\n };\n };\n var onAction = function (api, details) {\n if (details.name === 'hex-valid') {\n if (details.value) {\n api.enable('ok');\n } else {\n api.disable('ok');\n }\n }\n };\n var initialData = { colorpicker: value };\n var submit = getOnSubmit(callback);\n editor.windowManager.open({\n title: 'Color Picker',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n type: 'colorpicker',\n name: 'colorpicker',\n label: 'Color'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: initialData,\n onAction: onAction,\n onSubmit: submit,\n onClose: function () {\n },\n onCancel: function () {\n callback(Option.none());\n }\n });\n };\n };\n var register$1 = function (editor) {\n registerCommands(editor);\n var lastForeColor = Cell(null);\n var lastBackColor = Cell(null);\n registerTextColorButton(editor, 'forecolor', 'forecolor', 'Text color', lastForeColor);\n registerTextColorButton(editor, 'backcolor', 'hilitecolor', 'Background color', lastBackColor);\n registerTextColorMenuItem(editor, 'forecolor', 'forecolor', 'Text color');\n registerTextColorMenuItem(editor, 'backcolor', 'hilitecolor', 'Background color');\n };\n var ColorSwatch = {\n register: register$1,\n getColors: getMenuColors,\n getFetch: getFetch,\n colorPickerDialog: colorPickerDialog,\n getCurrentColor: getCurrentColor,\n getColorCols: getColorCols$1,\n calcCols: calcCols\n };\n\n var forMenu = function (presets) {\n if (presets === 'color') {\n return 'tox-swatches';\n } else {\n return 'tox-menu';\n }\n };\n var classes = function (presets) {\n return {\n backgroundMenu: 'tox-background-menu',\n selectedMenu: 'tox-selected-menu',\n selectedItem: 'tox-collection__item--active',\n hasIcons: 'tox-menu--has-icons',\n menu: forMenu(presets),\n tieredMenu: 'tox-tiered-menu'\n };\n };\n\n var markers$1 = function (presets) {\n var menuClasses = classes(presets);\n return {\n backgroundMenu: menuClasses.backgroundMenu,\n selectedMenu: menuClasses.selectedMenu,\n menu: menuClasses.menu,\n selectedItem: menuClasses.selectedItem,\n item: classForPreset(presets)\n };\n };\n var dom$1 = function (hasIcons, columns, presets) {\n var menuClasses = classes(presets);\n return {\n tag: 'div',\n classes: flatten([\n [\n menuClasses.menu,\n 'tox-menu-' + columns + '-column'\n ],\n hasIcons ? [menuClasses.hasIcons] : []\n ])\n };\n };\n var components$1 = [Menu.parts().items({})];\n var part = function (hasIcons, columns, presets) {\n var menuClasses = classes(presets);\n var d = {\n tag: 'div',\n classes: flatten([[menuClasses.tieredMenu]])\n };\n return {\n dom: d,\n markers: markers$1(presets)\n };\n };\n\n var chunk$1 = function (rowDom, numColumns) {\n return function (items) {\n var chunks = chunk(items, numColumns);\n return map(chunks, function (c) {\n return {\n dom: rowDom,\n components: c\n };\n });\n };\n };\n var forSwatch = function (columns) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-swatches-menu'\n ]\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-swatches']\n },\n components: [Menu.parts().items({\n preprocess: columns !== 'auto' ? chunk$1({\n tag: 'div',\n classes: ['tox-swatches__row']\n }, columns) : identity\n })]\n }]\n };\n };\n var forToolbar = function (columns) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection',\n 'tox-collection--toolbar',\n 'tox-collection--toolbar-lg'\n ]\n },\n components: [Menu.parts().items({\n preprocess: chunk$1({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)\n })]\n };\n };\n var preprocessCollection = function (items, isSeparator) {\n var allSplits = [];\n var currentSplit = [];\n each(items, function (item, i) {\n if (isSeparator(item, i)) {\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n currentSplit = [];\n if (has(item.dom, 'innerHtml')) {\n currentSplit.push(item);\n }\n } else {\n currentSplit.push(item);\n }\n });\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n return map(allSplits, function (s) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-collection__group']\n },\n components: s\n };\n });\n };\n var forCollection = function (columns, initItems, _hasIcons) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection'\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])\n },\n components: [Menu.parts().items({\n preprocess: function (items) {\n if (columns !== 'auto' && columns > 1) {\n return chunk$1({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)(items);\n } else {\n return preprocessCollection(items, function (_item, i) {\n return initItems[i].type === 'separator';\n });\n }\n }\n })]\n };\n };\n var forHorizontalCollection = function (initItems, _hasIcons) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-collection',\n 'tox-collection--horizontal'\n ]\n },\n components: [Menu.parts().items({\n preprocess: function (items) {\n return preprocessCollection(items, function (_item, i) {\n return initItems[i].type === 'separator';\n });\n }\n })]\n };\n };\n\n var hasIcon = function (item) {\n return item.icon !== undefined || item.type === 'togglemenuitem' || item.type === 'choicemenuitem';\n };\n var menuHasIcons = function (xs) {\n return exists(xs, hasIcon);\n };\n var handleError = function (error) {\n domGlobals.console.error(formatError(error));\n domGlobals.console.log(error);\n return Option.none();\n };\n var createHorizontalPartialMenuWithAlloyItems = function (value, _hasIcons, items, _columns, _presets) {\n var structure = forHorizontalCollection(items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n };\n var createPartialMenuWithAlloyItems = function (value, hasIcons, items, columns, presets) {\n if (presets === 'color') {\n var structure = forSwatch(columns);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'normal' && columns === 'auto') {\n var structure = forCollection(columns, items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'normal' && columns === 1) {\n var structure = forCollection(1, items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'normal') {\n var structure = forCollection(columns, items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'listpreview' && columns !== 'auto') {\n var structure = forToolbar(columns);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n return {\n value: value,\n dom: dom$1(hasIcons, columns, presets),\n components: components$1,\n items: items\n };\n };\n\n var createPartialChoiceMenu = function (value, items, onItemValueHandler, columns, presets, itemResponse, select, providersBackstage) {\n var hasIcons = menuHasIcons(items);\n var presetItemTypes = presets !== 'color' ? 'normal' : 'color';\n var alloyItems = createChoiceItems(items, onItemValueHandler, columns, presetItemTypes, itemResponse, select, providersBackstage);\n return createPartialMenuWithAlloyItems(value, hasIcons, alloyItems, columns, presets);\n };\n var createChoiceItems = function (items, onItemValueHandler, columns, itemPresets, itemResponse, select, providersBackstage) {\n return cat(map(items, function (item) {\n if (item.type === 'choiceitem') {\n return createChoiceMenuItem(item).fold(handleError, function (d) {\n return Option.some(renderChoiceItem(d, columns === 1, itemPresets, onItemValueHandler, select(item.value), itemResponse, providersBackstage));\n });\n } else {\n return Option.none();\n }\n }));\n };\n\n var deriveMenuMovement = function (columns, presets) {\n var menuMarkers = markers$1(presets);\n if (columns === 1) {\n return {\n mode: 'menu',\n moveOnTab: true\n };\n } else if (columns === 'auto') {\n return {\n mode: 'grid',\n selector: '.' + menuMarkers.item,\n initSize: {\n numColumns: 1,\n numRows: 1\n }\n };\n } else {\n var rowClass = presets === 'color' ? 'tox-swatches__row' : 'tox-collection__group';\n return {\n mode: 'matrix',\n rowSelector: '.' + rowClass\n };\n }\n };\n var deriveCollectionMovement = function (columns, presets) {\n if (columns === 1) {\n return {\n mode: 'menu',\n moveOnTab: false,\n selector: '.tox-collection__item'\n };\n } else if (columns === 'auto') {\n return {\n mode: 'flatgrid',\n selector: '.' + 'tox-collection__item',\n initSize: {\n numColumns: 1,\n numRows: 1\n }\n };\n } else {\n return {\n mode: 'matrix',\n selectors: {\n row: presets === 'color' ? '.tox-swatches__row' : '.tox-collection__group',\n cell: presets === 'color' ? '.' + colorClass : '.' + selectableClass\n }\n };\n }\n };\n\n function renderColorSwatchItem(spec, backstage) {\n var items = ColorSwatch.getColors(backstage.colorinput.getColors(), backstage.colorinput.hasCustomColors());\n var columns = backstage.colorinput.getColorCols();\n var presets = 'color';\n var menuSpec = createPartialChoiceMenu(generate$1('menu-value'), items, function (value) {\n spec.onAction({ value: value });\n }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, function () {\n return false;\n }, backstage.shared.providers);\n var widgetSpec = __assign(__assign({}, menuSpec), {\n markers: markers$1(presets),\n movement: deriveMenuMovement(columns, presets)\n });\n return {\n type: 'widget',\n data: { value: generate$1('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$2().widget(Menu.sketch(widgetSpec))]\n };\n }\n\n var fancyMenuItems = {\n inserttable: renderInsertTableMenuItem,\n colorswatch: renderColorSwatchItem\n };\n var valueOpt = function (obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key) ? Option.some(obj[key]) : Option.none();\n };\n var renderFancyMenuItem = function (spec, backstage) {\n return valueOpt(fancyMenuItems, spec.fancytype).map(function (render) {\n return render(spec, backstage);\n });\n };\n\n var renderNormalItem = function (spec, itemResponse, providersBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var getApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var structure = renderItemStructure({\n presets: 'normal',\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Option.none(),\n ariaLabel: spec.text,\n caret: Option.none(),\n checkMark: Option.none(),\n shortcutContent: spec.shortcut\n }, providersBackstage, renderIcons);\n return renderCommonItem({\n data: buildData(spec),\n getApi: getApi,\n disabled: spec.disabled,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse);\n };\n\n var renderNestedItem = function (spec, itemResponse, providersBackstage, renderIcons, downwardsCaret) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n if (downwardsCaret === void 0) {\n downwardsCaret = false;\n }\n var caret = downwardsCaret ? renderDownwardsCaret(providersBackstage.icons) : renderSubmenuCaret(providersBackstage.icons);\n var getApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var structure = renderItemStructure({\n presets: 'normal',\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Option.none(),\n ariaLabel: spec.text,\n caret: Option.some(caret),\n checkMark: Option.none(),\n shortcutContent: spec.shortcut\n }, providersBackstage, renderIcons);\n return renderCommonItem({\n data: buildData(spec),\n getApi: getApi,\n disabled: spec.disabled,\n onAction: noop,\n onSetup: spec.onSetup,\n triggersSubmenu: true,\n itemBehaviours: []\n }, structure, itemResponse);\n };\n\n var renderSeparatorItem = function (spec) {\n var innerHtml = spec.text.fold(function () {\n return {};\n }, function (text) {\n return { innerHtml: text };\n });\n return {\n type: 'separator',\n dom: __assign({\n tag: 'div',\n classes: [\n selectableClass,\n groupHeadingClass\n ]\n }, innerHtml),\n components: []\n };\n };\n\n var renderToggleMenuItem = function (spec, itemResponse, providersBackstage) {\n var getApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var structure = renderItemStructure({\n iconContent: Option.none(),\n textContent: spec.text,\n htmlContent: Option.none(),\n ariaLabel: spec.text,\n checkMark: Option.some(renderCheckmark(providersBackstage.icons)),\n caret: Option.none(),\n shortcutContent: spec.shortcut,\n presets: 'normal',\n meta: spec.meta\n }, providersBackstage, true);\n return deepMerge(renderCommonItem({\n data: buildData(spec),\n disabled: spec.disabled,\n getApi: getApi,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active\n }\n });\n };\n\n var autocomplete = renderAutocompleteItem;\n var separator = renderSeparatorItem;\n var normal = renderNormalItem;\n var nested = renderNestedItem;\n var toggle$1 = renderToggleMenuItem;\n var fancy = renderFancyMenuItem;\n\n var FocusMode;\n (function (FocusMode) {\n FocusMode[FocusMode['ContentFocus'] = 0] = 'ContentFocus';\n FocusMode[FocusMode['UiFocus'] = 1] = 'UiFocus';\n }(FocusMode || (FocusMode = {})));\n var hasIcon$1 = function (item) {\n return item.icon !== undefined || item.type === 'togglemenuitem' || item.type === 'choicemenuitem';\n };\n var menuHasIcons$1 = function (xs) {\n return exists(xs, hasIcon$1);\n };\n var createMenuItemFromBridge = function (item, itemResponse, backstage, menuHasIcons, isHorizontalMenu) {\n var providersBackstage = backstage.shared.providers;\n var parseForHorizontalMenu = function (menuitem) {\n return !isHorizontalMenu ? menuitem : __assign(__assign({}, menuitem), {\n shortcut: Option.none(),\n icon: menuitem.text.isSome() ? Option.none() : menuitem.icon\n });\n };\n switch (item.type) {\n case 'menuitem':\n return createMenuItem(item).fold(handleError, function (d) {\n return Option.some(normal(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons));\n });\n case 'nestedmenuitem':\n return createNestedMenuItem(item).fold(handleError, function (d) {\n return Option.some(nested(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons, isHorizontalMenu));\n });\n case 'togglemenuitem':\n return createToggleMenuItem(item).fold(handleError, function (d) {\n return Option.some(toggle$1(parseForHorizontalMenu(d), itemResponse, providersBackstage));\n });\n case 'separator':\n return createSeparatorMenuItem(item).fold(handleError, function (d) {\n return Option.some(separator(d));\n });\n case 'fancymenuitem':\n return createFancyMenuItem(item).fold(handleError, function (d) {\n return fancy(parseForHorizontalMenu(d), backstage);\n });\n default: {\n domGlobals.console.error('Unknown item in general menu', item);\n return Option.none();\n }\n }\n };\n var createAutocompleteItems = function (items, matchText, onItemValueHandler, columns, itemResponse, sharedBackstage) {\n var renderText = columns === 1;\n var renderIcons = !renderText || menuHasIcons$1(items);\n return cat(map(items, function (item) {\n if (item.type === 'separator') {\n return createSeparatorItem(item).fold(handleError, function (d) {\n return Option.some(separator(d));\n });\n } else {\n return createAutocompleterItem(item).fold(handleError, function (d) {\n return Option.some(autocomplete(d, matchText, renderText, 'normal', onItemValueHandler, itemResponse, sharedBackstage, renderIcons));\n });\n }\n }));\n };\n var createPartialMenu = function (value, items, itemResponse, backstage, isHorizontalMenu) {\n var hasIcons = menuHasIcons$1(items);\n var alloyItems = cat(map(items, function (item) {\n var itemHasIcon = function (i) {\n return isHorizontalMenu ? !i.hasOwnProperty('text') : hasIcons;\n };\n var createItem = function (i) {\n return createMenuItemFromBridge(i, itemResponse, backstage, itemHasIcon(i), isHorizontalMenu);\n };\n if (item.type === 'nestedmenuitem' && item.getSubmenuItems().length <= 0) {\n return createItem(__assign(__assign({}, item), { disabled: true }));\n } else {\n return createItem(item);\n }\n }));\n var createPartial = isHorizontalMenu ? createHorizontalPartialMenuWithAlloyItems : createPartialMenuWithAlloyItems;\n return createPartial(value, hasIcons, alloyItems, 1, 'normal');\n };\n var createTieredDataFrom = function (partialMenu) {\n return tieredMenu.singleData(partialMenu.value, partialMenu);\n };\n var createMenuFrom = function (partialMenu, columns, focusMode, presets) {\n var focusManager = focusMode === FocusMode.ContentFocus ? highlights() : dom();\n var movement = deriveMenuMovement(columns, presets);\n var menuMarkers = markers$1(presets);\n return {\n dom: partialMenu.dom,\n components: partialMenu.components,\n items: partialMenu.items,\n value: partialMenu.value,\n markers: {\n selectedItem: menuMarkers.selectedItem,\n item: menuMarkers.item\n },\n movement: movement,\n fakeFocus: focusMode === FocusMode.ContentFocus,\n focusManager: focusManager,\n menuBehaviours: SimpleBehaviours.unnamedEvents(columns !== 'auto' ? [] : [runOnAttached(function (comp, se) {\n detectSize(comp, 4, menuMarkers.item).each(function (_a) {\n var numColumns = _a.numColumns, numRows = _a.numRows;\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n };\n };\n\n var register$2 = function (editor, sharedBackstage) {\n var activeAutocompleter = Cell(Option.none());\n var processingAction = Cell(false);\n var autocompleter = build$1(InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-autocompleter']\n },\n components: [],\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissAutocompleter', [run(dismissRequested(), function () {\n return cancelIfNecessary();\n })])]),\n lazySink: sharedBackstage.getSink\n }));\n var isMenuOpen = function () {\n return InlineView.isOpen(autocompleter);\n };\n var isActive = function () {\n return activeAutocompleter.get().isSome();\n };\n var hideIfNecessary = function () {\n if (isActive()) {\n InlineView.hide(autocompleter);\n }\n };\n var cancelIfNecessary = function () {\n if (isActive()) {\n var lastElement = activeAutocompleter.get().map(function (ac) {\n return ac.element;\n });\n detect$4(lastElement.getOr(Element.fromDom(editor.selection.getNode()))).each(unwrap);\n hideIfNecessary();\n activeAutocompleter.set(Option.none());\n processingAction.set(false);\n }\n };\n var getAutocompleters = cached(function () {\n return register(editor);\n });\n var getCombinedItems = function (triggerChar, matches) {\n var columns = findMap(matches, function (m) {\n return Option.from(m.columns);\n }).getOr(1);\n return bind(matches, function (match) {\n var choices = match.items;\n return createAutocompleteItems(choices, match.matchText, function (itemValue, itemMeta) {\n var nr = editor.selection.getRng();\n getContext(editor.dom, nr, triggerChar).fold(function () {\n return domGlobals.console.error('Lost context. Cursor probably moved');\n }, function (_a) {\n var range = _a.range;\n var autocompleterApi = {\n hide: function () {\n cancelIfNecessary();\n },\n reload: function (fetchOptions) {\n hideIfNecessary();\n load(fetchOptions);\n }\n };\n processingAction.set(true);\n match.onAction(autocompleterApi, range, itemValue, itemMeta);\n processingAction.set(false);\n });\n }, columns, ItemResponse$1.BUBBLE_TO_SANDBOX, sharedBackstage);\n });\n };\n var commenceIfNecessary = function (context) {\n if (!isActive()) {\n var wrapper = create$4(editor, context.range);\n activeAutocompleter.set(Option.some({\n triggerChar: context.triggerChar,\n element: wrapper,\n matchLength: context.text.length\n }));\n processingAction.set(false);\n }\n };\n var display = function (ac, context, lookupData, items) {\n ac.matchLength = context.text.length;\n var columns = findMap(lookupData, function (ld) {\n return Option.from(ld.columns);\n }).getOr(1);\n InlineView.showAt(autocompleter, {\n anchor: 'node',\n root: Element.fromDom(editor.getBody()),\n node: Option.from(ac.element)\n }, Menu.sketch(createMenuFrom(createPartialMenuWithAlloyItems('autocompleter-value', true, items, columns, 'normal'), columns, FocusMode.ContentFocus, 'normal')));\n InlineView.getContent(autocompleter).each(Highlighting.highlightFirst);\n };\n var doLookup = function (fetchOptions) {\n return activeAutocompleter.get().map(function (ac) {\n return getContext(editor.dom, editor.selection.getRng(), ac.triggerChar).bind(function (newContext) {\n return lookupWithContext(editor, getAutocompleters, newContext, fetchOptions);\n });\n }).getOrThunk(function () {\n return lookup(editor, getAutocompleters);\n });\n };\n var load = function (fetchOptions) {\n doLookup(fetchOptions).fold(cancelIfNecessary, function (lookupInfo) {\n commenceIfNecessary(lookupInfo.context);\n lookupInfo.lookupData.then(function (lookupData) {\n activeAutocompleter.get().map(function (ac) {\n var context = lookupInfo.context;\n if (ac.triggerChar === context.triggerChar) {\n var combinedItems = getCombinedItems(context.triggerChar, lookupData);\n if (combinedItems.length > 0) {\n display(ac, context, lookupData, combinedItems);\n } else if (context.text.length - ac.matchLength >= 10) {\n cancelIfNecessary();\n } else {\n hideIfNecessary();\n }\n }\n });\n });\n });\n };\n var onKeypress = last$2(function (e) {\n if (e.which === 27) {\n return;\n }\n load();\n }, 50);\n var autocompleterUiApi = {\n onKeypress: onKeypress,\n cancelIfNecessary: cancelIfNecessary,\n isMenuOpen: isMenuOpen,\n isActive: isActive,\n isProcessingAction: processingAction.get,\n getView: function () {\n return InlineView.getContent(autocompleter);\n }\n };\n AutocompleterEditorEvents.setup(autocompleterUiApi, editor);\n };\n var Autocompleter = { register: register$2 };\n\n var filter$1 = constant(true);\n var bind$3 = function (element, event, handler) {\n return bind$2(element, event, filter$1, handler);\n };\n var capture$1 = function (element, event, handler) {\n return capture(element, event, filter$1, handler);\n };\n var fromRawEvent$1 = fromRawEvent;\n\n var closest$4 = function (scope, selector, isRoot) {\n return closest$3(scope, selector, isRoot).isSome();\n };\n\n function DelayedFunction (fun, delay) {\n var ref = null;\n var schedule = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n ref = domGlobals.setTimeout(function () {\n fun.apply(null, args);\n ref = null;\n }, delay);\n };\n var cancel = function () {\n if (ref !== null) {\n domGlobals.clearTimeout(ref);\n ref = null;\n }\n };\n return {\n cancel: cancel,\n schedule: schedule\n };\n }\n\n var SIGNIFICANT_MOVE = 5;\n var LONGPRESS_DELAY = 400;\n var getTouch = function (event) {\n var raw = event.raw();\n if (raw.touches === undefined || raw.touches.length !== 1) {\n return Option.none();\n }\n return Option.some(raw.touches[0]);\n };\n var isFarEnough = function (touch, data) {\n var distX = Math.abs(touch.clientX - data.x());\n var distY = Math.abs(touch.clientY - data.y());\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n var monitor = function (settings) {\n var startData = Cell(Option.none());\n var longpressFired = Cell(false);\n var longpress$1 = DelayedFunction(function (event) {\n settings.triggerEvent(longpress(), event);\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n var handleTouchstart = function (event) {\n getTouch(event).each(function (touch) {\n longpress$1.cancel();\n var data = {\n x: constant(touch.clientX),\n y: constant(touch.clientY),\n target: event.target\n };\n longpress$1.schedule(event);\n longpressFired.set(false);\n startData.set(Option.some(data));\n });\n return Option.none();\n };\n var handleTouchmove = function (event) {\n longpress$1.cancel();\n getTouch(event).each(function (touch) {\n startData.get().each(function (data) {\n if (isFarEnough(touch, data)) {\n startData.set(Option.none());\n }\n });\n });\n return Option.none();\n };\n var handleTouchend = function (event) {\n longpress$1.cancel();\n var isSame = function (data) {\n return eq(data.target(), event.target());\n };\n return startData.get().filter(isSame).map(function (data) {\n if (longpressFired.get()) {\n event.prevent();\n return false;\n } else {\n return settings.triggerEvent(tap(), event);\n }\n });\n };\n var handlers = wrapAll$1([\n {\n key: touchstart(),\n value: handleTouchstart\n },\n {\n key: touchmove(),\n value: handleTouchmove\n },\n {\n key: touchend(),\n value: handleTouchend\n }\n ]);\n var fireIfReady = function (event, type) {\n return get(handlers, type).bind(function (handler) {\n return handler(event);\n });\n };\n return { fireIfReady: fireIfReady };\n };\n\n var isDangerous = function (event) {\n var keyEv = event.raw();\n return keyEv.which === BACKSPACE()[0] && !contains([\n 'input',\n 'textarea'\n ], name(event.target())) && !closest$4(event.target(), '[contenteditable=\"true\"]');\n };\n var isFirefox = detect$3().browser.isFirefox();\n var settingsSchema = objOfOnly([\n strictFunction('triggerEvent'),\n defaulted$1('stopBackspace', true)\n ]);\n var bindFocus = function (container, handler) {\n if (isFirefox) {\n return capture$1(container, 'focus', handler);\n } else {\n return bind$3(container, 'focusin', handler);\n }\n };\n var bindBlur = function (container, handler) {\n if (isFirefox) {\n return capture$1(container, 'blur', handler);\n } else {\n return bind$3(container, 'focusout', handler);\n }\n };\n var setup$1 = function (container, rawSettings) {\n var settings = asRawOrDie('Getting GUI events settings', settingsSchema, rawSettings);\n var pointerEvents = [\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'gesturestart',\n 'mousedown',\n 'mouseup',\n 'mouseover',\n 'mousemove',\n 'mouseout',\n 'click'\n ];\n var tapEvent = monitor(settings);\n var simpleEvents = map(pointerEvents.concat([\n 'selectstart',\n 'input',\n 'contextmenu',\n 'change',\n 'transitionend',\n 'drag',\n 'dragstart',\n 'dragend',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'drop',\n 'keyup'\n ]), function (type) {\n return bind$3(container, type, function (event) {\n tapEvent.fireIfReady(event, type).each(function (tapStopped) {\n if (tapStopped) {\n event.kill();\n }\n });\n var stopped = settings.triggerEvent(type, event);\n if (stopped) {\n event.kill();\n }\n });\n });\n var pasteTimeout = Cell(Option.none());\n var onPaste = bind$3(container, 'paste', function (event) {\n tapEvent.fireIfReady(event, 'paste').each(function (tapStopped) {\n if (tapStopped) {\n event.kill();\n }\n });\n var stopped = settings.triggerEvent('paste', event);\n if (stopped) {\n event.kill();\n }\n pasteTimeout.set(Option.some(domGlobals.setTimeout(function () {\n settings.triggerEvent(postPaste(), event);\n }, 0)));\n });\n var onKeydown = bind$3(container, 'keydown', function (event) {\n var stopped = settings.triggerEvent('keydown', event);\n if (stopped) {\n event.kill();\n } else if (settings.stopBackspace === true && isDangerous(event)) {\n event.prevent();\n }\n });\n var onFocusIn = bindFocus(container, function (event) {\n var stopped = settings.triggerEvent('focusin', event);\n if (stopped) {\n event.kill();\n }\n });\n var focusoutTimeout = Cell(Option.none());\n var onFocusOut = bindBlur(container, function (event) {\n var stopped = settings.triggerEvent('focusout', event);\n if (stopped) {\n event.kill();\n }\n focusoutTimeout.set(Option.some(domGlobals.setTimeout(function () {\n settings.triggerEvent(postBlur(), event);\n }, 0)));\n });\n var unbind = function () {\n each(simpleEvents, function (e) {\n e.unbind();\n });\n onKeydown.unbind();\n onFocusIn.unbind();\n onFocusOut.unbind();\n onPaste.unbind();\n pasteTimeout.get().each(domGlobals.clearTimeout);\n focusoutTimeout.get().each(domGlobals.clearTimeout);\n };\n return { unbind: unbind };\n };\n\n var derive$2 = function (rawEvent, rawTarget) {\n var source = get(rawEvent, 'target').map(function (getTarget) {\n return getTarget();\n }).getOr(rawTarget);\n return Cell(source);\n };\n\n var fromSource = function (event, source) {\n var stopper = Cell(false);\n var cutter = Cell(false);\n var stop = function () {\n stopper.set(true);\n };\n var cut = function () {\n cutter.set(true);\n };\n return {\n stop: stop,\n cut: cut,\n isStopped: stopper.get,\n isCut: cutter.get,\n event: constant(event),\n setSource: source.set,\n getSource: source.get\n };\n };\n var fromExternal = function (event) {\n var stopper = Cell(false);\n var stop = function () {\n stopper.set(true);\n };\n return {\n stop: stop,\n cut: noop,\n isStopped: stopper.get,\n isCut: constant(false),\n event: constant(event),\n setSource: die('Cannot set source of a broadcasted event'),\n getSource: die('Cannot get source of a broadcasted event')\n };\n };\n\n var adt$b = Adt.generate([\n { stopped: [] },\n { resume: ['element'] },\n { complete: [] }\n ]);\n var doTriggerHandler = function (lookup, eventType, rawEvent, target, source, logger) {\n var handler = lookup(eventType, target);\n var simulatedEvent = fromSource(rawEvent, source);\n return handler.fold(function () {\n logger.logEventNoHandlers(eventType, target);\n return adt$b.complete();\n }, function (handlerInfo) {\n var descHandler = handlerInfo.descHandler();\n var eventHandler = getCurried(descHandler);\n eventHandler(simulatedEvent);\n if (simulatedEvent.isStopped()) {\n logger.logEventStopped(eventType, handlerInfo.element(), descHandler.purpose());\n return adt$b.stopped();\n } else if (simulatedEvent.isCut()) {\n logger.logEventCut(eventType, handlerInfo.element(), descHandler.purpose());\n return adt$b.complete();\n } else {\n return parent(handlerInfo.element()).fold(function () {\n logger.logNoParent(eventType, handlerInfo.element(), descHandler.purpose());\n return adt$b.complete();\n }, function (parent) {\n logger.logEventResponse(eventType, handlerInfo.element(), descHandler.purpose());\n return adt$b.resume(parent);\n });\n }\n });\n };\n var doTriggerOnUntilStopped = function (lookup, eventType, rawEvent, rawTarget, source, logger) {\n return doTriggerHandler(lookup, eventType, rawEvent, rawTarget, source, logger).fold(function () {\n return true;\n }, function (parent) {\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger);\n }, function () {\n return false;\n });\n };\n var triggerHandler = function (lookup, eventType, rawEvent, target, logger) {\n var source = derive$2(rawEvent, target);\n return doTriggerHandler(lookup, eventType, rawEvent, target, source, logger);\n };\n var broadcast = function (listeners, rawEvent, logger) {\n var simulatedEvent = fromExternal(rawEvent);\n each(listeners, function (listener) {\n var descHandler = listener.descHandler();\n var handler = getCurried(descHandler);\n handler(simulatedEvent);\n });\n return simulatedEvent.isStopped();\n };\n var triggerUntilStopped = function (lookup, eventType, rawEvent, logger) {\n var rawTarget = rawEvent.target();\n return triggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, logger);\n };\n var triggerOnUntilStopped = function (lookup, eventType, rawEvent, rawTarget, logger) {\n var source = derive$2(rawEvent, rawTarget);\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, source, logger);\n };\n\n var eventHandler = Immutable('element', 'descHandler');\n var broadcastHandler = function (id, handler) {\n return {\n id: constant(id),\n descHandler: constant(handler)\n };\n };\n function EventRegistry () {\n var registry = {};\n var registerId = function (extraArgs, id, events) {\n each$1(events, function (v, k) {\n var handlers = registry[k] !== undefined ? registry[k] : {};\n handlers[id] = curryArgs(v, extraArgs);\n registry[k] = handlers;\n });\n };\n var findHandler = function (handlers, elem) {\n return read$1(elem).fold(function () {\n return Option.none();\n }, function (id) {\n return handlers.bind(function (h) {\n return get(h, id);\n }).map(function (descHandler) {\n return eventHandler(elem, descHandler);\n });\n });\n };\n var filterByType = function (type) {\n return get(registry, type).map(function (handlers) {\n return mapToArray(handlers, function (f, id) {\n return broadcastHandler(id, f);\n });\n }).getOr([]);\n };\n var find = function (isAboveRoot, type, target) {\n var handlers = get(registry, type);\n return closest(target, function (elem) {\n return findHandler(handlers, elem);\n }, isAboveRoot);\n };\n var unregisterId = function (id) {\n each$1(registry, function (handlersById, eventName) {\n if (handlersById.hasOwnProperty(id)) {\n delete handlersById[id];\n }\n });\n };\n return {\n registerId: registerId,\n unregisterId: unregisterId,\n filterByType: filterByType,\n find: find\n };\n }\n\n function Registry () {\n var events = EventRegistry();\n var components = {};\n var readOrTag = function (component) {\n var elem = component.element();\n return read$1(elem).fold(function () {\n return write('uid-', component.element());\n }, function (uid) {\n return uid;\n });\n };\n var failOnDuplicate = function (component, tagId) {\n var conflict = components[tagId];\n if (conflict === component) {\n unregister(component);\n } else {\n throw new Error('The tagId \"' + tagId + '\" is already used by: ' + element(conflict.element()) + '\\nCannot use it for: ' + element(component.element()) + '\\n' + 'The conflicting element is' + (inBody(conflict.element()) ? ' ' : ' not ') + 'already in the DOM');\n }\n };\n var register = function (component) {\n var tagId = readOrTag(component);\n if (hasNonNullableKey(components, tagId)) {\n failOnDuplicate(component, tagId);\n }\n var extraArgs = [component];\n events.registerId(extraArgs, tagId, component.events());\n components[tagId] = component;\n };\n var unregister = function (component) {\n read$1(component.element()).each(function (tagId) {\n delete components[tagId];\n events.unregisterId(tagId);\n });\n };\n var filter = function (type) {\n return events.filterByType(type);\n };\n var find = function (isAboveRoot, type, target) {\n return events.find(isAboveRoot, type, target);\n };\n var getById = function (id) {\n return get(components, id);\n };\n return {\n find: find,\n filter: filter,\n register: register,\n unregister: unregister,\n getById: getById\n };\n }\n\n var factory$3 = function (detail) {\n var _a = detail.dom, attributes = _a.attributes, domWithoutAttributes = __rest(_a, ['attributes']);\n return {\n uid: detail.uid,\n dom: __assign({\n tag: 'div',\n attributes: __assign({ role: 'presentation' }, attributes)\n }, domWithoutAttributes),\n components: detail.components,\n behaviours: get$c(detail.containerBehaviours),\n events: detail.events,\n domModification: detail.domModification,\n eventOrder: detail.eventOrder\n };\n };\n var Container = single$2({\n name: 'Container',\n factory: factory$3,\n configFields: [\n defaulted$1('components', []),\n field$1('containerBehaviours', []),\n defaulted$1('events', {}),\n defaulted$1('domModification', {}),\n defaulted$1('eventOrder', {})\n ]\n });\n\n var takeover = function (root) {\n var isAboveRoot = function (el) {\n return parent(root.element()).fold(function () {\n return true;\n }, function (parent) {\n return eq(el, parent);\n });\n };\n var registry = Registry();\n var lookup = function (eventName, target) {\n return registry.find(isAboveRoot, eventName, target);\n };\n var domEvents = setup$1(root.element(), {\n triggerEvent: function (eventName, event) {\n return monitorEvent(eventName, event.target(), function (logger) {\n return triggerUntilStopped(lookup, eventName, event, logger);\n });\n }\n });\n var systemApi = {\n debugInfo: constant('real'),\n triggerEvent: function (eventName, target, data) {\n monitorEvent(eventName, target, function (logger) {\n return triggerOnUntilStopped(lookup, eventName, data, target, logger);\n });\n },\n triggerFocus: function (target, originator) {\n read$1(target).fold(function () {\n focus$1(target);\n }, function (_alloyId) {\n monitorEvent(focus(), target, function (logger) {\n triggerHandler(lookup, focus(), {\n originator: constant(originator),\n kill: noop,\n prevent: noop,\n target: constant(target)\n }, target, logger);\n return false;\n });\n });\n },\n triggerEscape: function (comp, simulatedEvent) {\n systemApi.triggerEvent('keydown', comp.element(), simulatedEvent.event());\n },\n getByUid: function (uid) {\n return getByUid(uid);\n },\n getByDom: function (elem) {\n return getByDom(elem);\n },\n build: build$1,\n addToGui: function (c) {\n add(c);\n },\n removeFromGui: function (c) {\n remove$1(c);\n },\n addToWorld: function (c) {\n addToWorld(c);\n },\n removeFromWorld: function (c) {\n removeFromWorld(c);\n },\n broadcast: function (message) {\n broadcast$1(message);\n },\n broadcastOn: function (channels, message) {\n broadcastOn(channels, message);\n },\n broadcastEvent: function (eventName, event) {\n broadcastEvent(eventName, event);\n },\n isConnected: constant(true)\n };\n var addToWorld = function (component) {\n component.connect(systemApi);\n if (!isText(component.element())) {\n registry.register(component);\n each(component.components(), addToWorld);\n systemApi.triggerEvent(systemInit(), component.element(), { target: constant(component.element()) });\n }\n };\n var removeFromWorld = function (component) {\n if (!isText(component.element())) {\n each(component.components(), removeFromWorld);\n registry.unregister(component);\n }\n component.disconnect();\n };\n var add = function (component) {\n attach$1(root, component);\n };\n var remove$1 = function (component) {\n detach(component);\n };\n var destroy = function () {\n domEvents.unbind();\n remove(root.element());\n };\n var broadcastData = function (data) {\n var receivers = registry.filter(receive());\n each(receivers, function (receiver) {\n var descHandler = receiver.descHandler();\n var handler = getCurried(descHandler);\n handler(data);\n });\n };\n var broadcast$1 = function (message) {\n broadcastData({\n universal: constant(true),\n data: constant(message)\n });\n };\n var broadcastOn = function (channels, message) {\n broadcastData({\n universal: constant(false),\n channels: constant(channels),\n data: constant(message)\n });\n };\n var broadcastEvent = function (eventName, event) {\n var listeners = registry.filter(eventName);\n return broadcast(listeners, event);\n };\n var getByUid = function (uid) {\n return registry.getById(uid).fold(function () {\n return Result.error(new Error('Could not find component with uid: \"' + uid + '\" in system.'));\n }, Result.value);\n };\n var getByDom = function (elem) {\n var uid = read$1(elem).getOr('not found');\n return getByUid(uid);\n };\n addToWorld(root);\n return {\n root: constant(root),\n element: root.element,\n destroy: destroy,\n add: add,\n remove: remove$1,\n getByUid: getByUid,\n getByDom: getByDom,\n addToWorld: addToWorld,\n removeFromWorld: removeFromWorld,\n broadcast: broadcast$1,\n broadcastOn: broadcastOn,\n broadcastEvent: broadcastEvent\n };\n };\n\n var formChangeEvent = generate$1('form-component-change');\n var formCloseEvent = generate$1('form-close');\n var formCancelEvent = generate$1('form-cancel');\n var formActionEvent = generate$1('form-action');\n var formSubmitEvent = generate$1('form-submit');\n var formBlockEvent = generate$1('form-block');\n var formUnblockEvent = generate$1('form-unblock');\n var formTabChangeEvent = generate$1('form-tabchange');\n var formResizeEvent = generate$1('form-resize');\n\n var renderAlertBanner = function (spec, providersBackstage) {\n return Container.sketch({\n dom: {\n tag: 'div',\n attributes: { role: 'alert' },\n classes: [\n 'tox-notification',\n 'tox-notification--in',\n 'tox-notification--' + spec.level\n ]\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__icon']\n },\n components: [Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n innerHtml: get$d(spec.icon, providersBackstage.icons),\n attributes: { title: providersBackstage.translate(spec.iconTooltip) }\n },\n action: function (comp) {\n emitWith(comp, formActionEvent, {\n name: 'alert-banner',\n value: spec.url\n });\n }\n })]\n },\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body'],\n innerHtml: providersBackstage.translate(spec.text)\n }\n }\n ]\n });\n };\n\n var renderBar = function (spec, backstage) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-bar',\n 'tox-form__controls-h-stack'\n ]\n },\n components: map(spec.items, backstage.interpreter)\n };\n };\n\n var schema$e = constant([\n defaulted$1('prefix', 'form-field'),\n field$1('fieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n var parts$3 = constant([\n optional({\n schema: [strict$1('dom')],\n name: 'label'\n }),\n optional({\n factory: {\n sketch: function (spec) {\n return {\n uid: spec.uid,\n dom: {\n tag: 'span',\n styles: { display: 'none' },\n attributes: { 'aria-hidden': 'true' },\n innerHtml: spec.text\n }\n };\n }\n },\n schema: [strict$1('text')],\n name: 'aria-descriptor'\n }),\n required({\n factory: {\n sketch: function (spec) {\n var excludeFactory = exclude$1(spec, ['factory']);\n return spec.factory.sketch(excludeFactory);\n }\n },\n schema: [strict$1('factory')],\n name: 'field'\n })\n ]);\n\n var factory$4 = function (detail, components, spec, externals) {\n var behaviours = augment(detail.fieldBehaviours, [\n Composing.config({\n find: function (container) {\n return getPart(container, detail, 'field');\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (field) {\n return Composing.getCurrent(field).bind(Representing.getValue);\n },\n setValue: function (field, value) {\n Composing.getCurrent(field).each(function (current) {\n Representing.setValue(current, value);\n });\n }\n }\n })\n ]);\n var events = derive([runOnAttached(function (component, simulatedEvent) {\n var ps = getParts(component, detail, [\n 'label',\n 'field',\n 'aria-descriptor'\n ]);\n ps.field().each(function (field) {\n var id = generate$1(detail.prefix);\n ps.label().each(function (label) {\n set$1(label.element(), 'for', id);\n set$1(field.element(), 'id', id);\n });\n ps['aria-descriptor']().each(function (descriptor) {\n var descriptorId = generate$1(detail.prefix);\n set$1(descriptor.element(), 'id', descriptorId);\n set$1(field.element(), 'aria-describedby', descriptorId);\n });\n });\n })]);\n var apis = {\n getField: function (container) {\n return getPart(container, detail, 'field');\n },\n getLabel: function (container) {\n return getPart(container, detail, 'label');\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: behaviours,\n events: events,\n apis: apis\n };\n };\n var FormField = composite$1({\n name: 'FormField',\n configFields: schema$e(),\n partFields: parts$3(),\n factory: factory$4,\n apis: {\n getField: function (apis, comp) {\n return apis.getField(comp);\n },\n getLabel: function (apis, comp) {\n return apis.getLabel(comp);\n }\n }\n });\n\n var schema$f = constant([\n option('data'),\n defaulted$1('inputAttributes', {}),\n defaulted$1('inputStyles', {}),\n defaulted$1('tag', 'input'),\n defaulted$1('inputClasses', []),\n onHandler('onSetValue'),\n defaulted$1('styles', {}),\n defaulted$1('eventOrder', {}),\n field$1('inputBehaviours', [\n Representing,\n Focusing\n ]),\n defaulted$1('selectOnFocus', true)\n ]);\n var focusBehaviours = function (detail) {\n return derive$1([Focusing.config({\n onFocus: !detail.selectOnFocus ? noop : function (component) {\n var input = component.element();\n var value = get$5(input);\n input.dom().setSelectionRange(0, value.length);\n }\n })]);\n };\n var behaviours = function (detail) {\n return __assign(__assign({}, focusBehaviours(detail)), augment(detail.inputBehaviours, [Representing.config({\n store: __assign(__assign({ mode: 'manual' }, detail.data.map(function (data) {\n return { initialValue: data };\n }).getOr({})), {\n getValue: function (input) {\n return get$5(input.element());\n },\n setValue: function (input, data) {\n var current = get$5(input.element());\n if (current !== data) {\n set$3(input.element(), data);\n }\n }\n }),\n onSetValue: detail.onSetValue\n })]));\n };\n var dom$2 = function (detail) {\n return {\n tag: detail.tag,\n attributes: __assign({ type: 'text' }, detail.inputAttributes),\n styles: detail.inputStyles,\n classes: detail.inputClasses\n };\n };\n\n var factory$5 = function (detail, spec) {\n return {\n uid: detail.uid,\n dom: dom$2(detail),\n components: [],\n behaviours: behaviours(detail),\n eventOrder: detail.eventOrder\n };\n };\n var Input = single$2({\n name: 'Input',\n configFields: schema$f(),\n factory: factory$5\n });\n\n var exports$1 = {}, module = { 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, undefined));\n var Promise = module.exports.boltExport;\n\n var nu$a = function (baseFn) {\n var data = Option.none();\n var callbacks = [];\n var map = function (f) {\n return nu$a(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$1 = function (a) {\n return nu$a(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu$a,\n pure: pure$1\n };\n\n var errorReporter = function (err) {\n domGlobals.setTimeout(function () {\n throw err;\n }, 0);\n };\n var make$3 = function (run) {\n var get = function (callback) {\n run().then(callback, errorReporter);\n };\n var map = function (fab) {\n return make$3(function () {\n return run().then(fab);\n });\n };\n var bind = function (aFutureB) {\n return make$3(function () {\n return run().then(function (v) {\n return aFutureB(v).toPromise();\n });\n });\n };\n var anonBind = function (futureB) {\n return make$3(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$3(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$b = function (baseFn) {\n return make$3(function () {\n return new Promise(baseFn);\n });\n };\n var pure$2 = function (a) {\n return make$3(function () {\n return Promise.resolve(a);\n });\n };\n var Future = {\n nu: nu$b,\n pure: pure$2\n };\n\n var ariaElements = [\n 'input',\n 'textarea'\n ];\n var isAriaElement = function (elem) {\n var name$1 = name(elem);\n return contains(ariaElements, name$1);\n };\n var markValid = function (component, invalidConfig) {\n var elem = invalidConfig.getRoot(component).getOr(component.element());\n remove$4(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(function (notifyInfo) {\n if (isAriaElement(component.element())) {\n set$1(component.element(), 'aria-invalid', false);\n }\n notifyInfo.getContainer(component).each(function (container) {\n set(container, notifyInfo.validHtml);\n });\n notifyInfo.onValid(component);\n });\n };\n var markInvalid = function (component, invalidConfig, invalidState, text) {\n var elem = invalidConfig.getRoot(component).getOr(component.element());\n add$2(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(function (notifyInfo) {\n if (isAriaElement(component.element())) {\n set$1(component.element(), 'aria-invalid', true);\n }\n notifyInfo.getContainer(component).each(function (container) {\n set(container, text);\n });\n notifyInfo.onInvalid(component, text);\n });\n };\n var query = function (component, invalidConfig, invalidState) {\n return invalidConfig.validator.fold(function () {\n return Future.pure(Result.value(true));\n }, function (validatorInfo) {\n return validatorInfo.validate(component);\n });\n };\n var run$1 = function (component, invalidConfig, invalidState) {\n invalidConfig.notify.each(function (notifyInfo) {\n notifyInfo.onValidate(component);\n });\n return query(component, invalidConfig).map(function (valid) {\n if (component.getSystem().isConnected()) {\n return valid.fold(function (err) {\n markInvalid(component, invalidConfig, invalidState, err);\n return Result.error(err);\n }, function (v) {\n markValid(component, invalidConfig);\n return Result.value(v);\n });\n } else {\n return Result.error('No longer in system');\n }\n });\n };\n var isInvalid = function (component, invalidConfig) {\n var elem = invalidConfig.getRoot(component).getOr(component.element());\n return has$2(elem, invalidConfig.invalidClass);\n };\n\n var InvalidateApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n markValid: markValid,\n markInvalid: markInvalid,\n query: query,\n run: run$1,\n isInvalid: isInvalid\n });\n\n var events$a = function (invalidConfig, invalidState) {\n return invalidConfig.validator.map(function (validatorInfo) {\n return derive([run(validatorInfo.onEvent, function (component) {\n run$1(component, invalidConfig, invalidState).get(identity);\n })].concat(validatorInfo.validateOnLoad ? [runOnAttached(function (component) {\n run$1(component, invalidConfig, invalidState).get(noop);\n })] : []));\n }).getOr({});\n };\n\n var ActiveInvalidate = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$a\n });\n\n var InvalidateSchema = [\n strict$1('invalidClass'),\n defaulted$1('getRoot', Option.none),\n optionObjOf('notify', [\n defaulted$1('aria', 'alert'),\n defaulted$1('getContainer', Option.none),\n defaulted$1('validHtml', ''),\n onHandler('onValid'),\n onHandler('onInvalid'),\n onHandler('onValidate')\n ]),\n optionObjOf('validator', [\n strict$1('validate'),\n defaulted$1('onEvent', 'input'),\n defaulted$1('validateOnLoad', true)\n ])\n ];\n\n var Invalidating = create$1({\n fields: InvalidateSchema,\n name: 'invalidating',\n active: ActiveInvalidate,\n apis: InvalidateApis,\n extra: {\n validation: function (validator) {\n return function (component) {\n var v = Representing.getValue(component);\n return Future.pure(validator(v));\n };\n }\n }\n });\n\n var exhibit$4 = function (base, tabConfig) {\n return nu$6({\n attributes: wrapAll$1([{\n key: tabConfig.tabAttr,\n value: 'true'\n }])\n });\n };\n\n var ActiveTabstopping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$4\n });\n\n var TabstopSchema = [defaulted$1('tabAttr', 'data-alloy-tabstop')];\n\n var Tabstopping = create$1({\n fields: TabstopSchema,\n name: 'tabstopping',\n active: ActiveTabstopping\n });\n\n var renderFormFieldWith = function (pLabel, pField, extraClasses, extraBehaviours) {\n var spec = renderFormFieldSpecWith(pLabel, pField, extraClasses, extraBehaviours);\n return FormField.sketch(spec);\n };\n var renderFormField = function (pLabel, pField) {\n return renderFormFieldWith(pLabel, pField, [], []);\n };\n var renderFormFieldSpecWith = function (pLabel, pField, extraClasses, extraBehaviours) {\n return {\n dom: renderFormFieldDomWith(extraClasses),\n components: pLabel.toArray().concat([pField]),\n fieldBehaviours: derive$1(extraBehaviours)\n };\n };\n var renderFormFieldDom = function () {\n return renderFormFieldDomWith([]);\n };\n var renderFormFieldDomWith = function (extraClasses) {\n return {\n tag: 'div',\n classes: ['tox-form__group'].concat(extraClasses)\n };\n };\n var renderLabel = function (label, providersBackstage) {\n return FormField.parts().label({\n dom: {\n tag: 'label',\n classes: ['tox-label'],\n innerHtml: providersBackstage.translate(label)\n }\n });\n };\n\n var getCoupled = function (component, coupleConfig, coupleState, name) {\n return coupleState.getOrCreate(component, coupleConfig, name);\n };\n\n var CouplingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCoupled: getCoupled\n });\n\n var CouplingSchema = [strictOf('others', setOf$1(Result.value, anyValue$1()))];\n\n var init$5 = function () {\n var coupled = {};\n var getOrCreate = function (component, coupleConfig, name) {\n var available = keys(coupleConfig.others);\n if (!available) {\n throw new Error('Cannot find coupled component: ' + name + '. Known coupled components: ' + JSON.stringify(available, null, 2));\n } else {\n return get(coupled, name).getOrThunk(function () {\n var builder = get(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n var spec = builder(component);\n var built = component.getSystem().build(spec);\n coupled[name] = built;\n return built;\n });\n }\n };\n var readState = constant({});\n return nu$5({\n readState: readState,\n getOrCreate: getOrCreate\n });\n };\n\n var CouplingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$5\n });\n\n var Coupling = create$1({\n fields: CouplingSchema,\n name: 'coupling',\n apis: CouplingApis,\n state: CouplingState\n });\n\n var suffix = constant('sink');\n var partType = constant(optional({\n name: suffix(),\n overrides: constant({\n dom: { tag: 'div' },\n behaviours: derive$1([Positioning.config({ useFixed: always })]),\n events: derive([\n cutter(keydown()),\n cutter(mousedown()),\n cutter(click())\n ])\n })\n }));\n\n var HighlightOnOpen;\n (function (HighlightOnOpen) {\n HighlightOnOpen[HighlightOnOpen['HighlightFirst'] = 0] = 'HighlightFirst';\n HighlightOnOpen[HighlightOnOpen['HighlightNone'] = 1] = 'HighlightNone';\n }(HighlightOnOpen || (HighlightOnOpen = {})));\n var getAnchor = function (detail, component) {\n var hotspot = detail.getHotspot(component).getOr(component);\n var anchor = 'hotspot';\n var overrides = detail.getAnchorOverrides();\n return detail.layouts.fold(function () {\n return {\n anchor: anchor,\n hotspot: hotspot,\n overrides: overrides\n };\n }, function (layouts) {\n return {\n anchor: anchor,\n hotspot: hotspot,\n overrides: overrides,\n layouts: layouts\n };\n });\n };\n var fetch = function (detail, mapFetch, component) {\n var fetcher = detail.fetch;\n return fetcher(component).map(mapFetch);\n };\n var openF = function (detail, mapFetch, anchor, component, sandbox, externals, highlightOnOpen) {\n var futureData = fetch(detail, mapFetch, component);\n var getLazySink = getSink(component, detail);\n return futureData.map(function (tdata) {\n return tdata.bind(function (data) {\n return Option.from(tieredMenu.sketch(__assign(__assign({}, externals.menu()), {\n uid: generate$2(''),\n data: data,\n highlightImmediately: highlightOnOpen === HighlightOnOpen.HighlightFirst,\n onOpenMenu: function (tmenu, menu) {\n var sink = getLazySink().getOrDie();\n Positioning.position(sink, anchor, menu);\n Sandboxing.decloak(sandbox);\n },\n onOpenSubmenu: function (tmenu, item, submenu) {\n var sink = getLazySink().getOrDie();\n Positioning.position(sink, {\n anchor: 'submenu',\n item: item\n }, submenu);\n Sandboxing.decloak(sandbox);\n },\n onRepositionMenu: function (tmenu, primaryMenu, submenuTriggers) {\n var sink = getLazySink().getOrDie();\n Positioning.position(sink, anchor, primaryMenu);\n each(submenuTriggers, function (st) {\n Positioning.position(sink, {\n anchor: 'submenu',\n item: st.triggeringItem\n }, st.triggeredMenu);\n });\n },\n onEscape: function () {\n Focusing.focus(component);\n Sandboxing.close(sandbox);\n return Option.some(true);\n }\n })));\n });\n });\n };\n var open$1 = function (detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen) {\n var anchor = getAnchor(detail, hotspot);\n var processed = openF(detail, mapFetch, anchor, hotspot, sandbox, externals, highlightOnOpen);\n return processed.map(function (tdata) {\n tdata.fold(function () {\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n }\n }, function (data) {\n Sandboxing.cloak(sandbox);\n Sandboxing.open(sandbox, data);\n onOpenSync(sandbox);\n });\n return sandbox;\n });\n };\n var close$1 = function (detail, mapFetch, component, sandbox, _externals, _onOpenSync, _highlightOnOpen) {\n Sandboxing.close(sandbox);\n return Future.pure(sandbox);\n };\n var togglePopup = function (detail, mapFetch, hotspot, externals, onOpenSync, highlightOnOpen) {\n var sandbox = Coupling.getCoupled(hotspot, 'sandbox');\n var showing = Sandboxing.isOpen(sandbox);\n var action = showing ? close$1 : open$1;\n return action(detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen);\n };\n var matchWidth = function (hotspot, container, useMinWidth) {\n var menu = Composing.getCurrent(container).getOr(container);\n var buttonWidth = get$7(hotspot.element());\n if (useMinWidth) {\n set$2(menu.element(), 'min-width', buttonWidth + 'px');\n } else {\n set$4(menu.element(), buttonWidth);\n }\n };\n var getSink = function (anyInSystem, sinkDetail) {\n return anyInSystem.getSystem().getByUid(sinkDetail.uid + '-' + suffix()).map(function (internalSink) {\n return function () {\n return Result.value(internalSink);\n };\n }).getOrThunk(function () {\n return sinkDetail.lazySink.fold(function () {\n return function () {\n return Result.error(new Error('No internal sink is specified, nor could an external sink be found'));\n };\n }, function (lazySinkFn) {\n return function () {\n return lazySinkFn(anyInSystem);\n };\n });\n });\n };\n var doRepositionMenus = function (sandbox) {\n Sandboxing.getState(sandbox).each(function (tmenu) {\n tieredMenu.repositionMenus(tmenu);\n });\n };\n var makeSandbox = function (detail, hotspot, extras) {\n var ariaOwner = manager();\n var onOpen = function (component, menu) {\n var anchor = getAnchor(detail, hotspot);\n ariaOwner.link(hotspot.element());\n if (detail.matchWidth) {\n matchWidth(anchor.hotspot, menu, detail.useMinWidth);\n }\n detail.onOpen(anchor, component, menu);\n if (extras !== undefined && extras.onOpen !== undefined) {\n extras.onOpen(component, menu);\n }\n };\n var onClose = function (component, menu) {\n ariaOwner.unlink(hotspot.element());\n if (extras !== undefined && extras.onClose !== undefined) {\n extras.onClose(component, menu);\n }\n };\n var lazySink = getSink(hotspot, detail);\n return {\n dom: {\n tag: 'div',\n classes: detail.sandboxClasses,\n attributes: {\n id: ariaOwner.id(),\n role: 'listbox'\n }\n },\n behaviours: SketchBehaviours.augment(detail.sandboxBehaviours, [\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: hotspot\n }\n }),\n Sandboxing.config({\n onOpen: onOpen,\n onClose: onClose,\n isPartOf: function (container, data, queryElem) {\n return isPartOf(data, queryElem) || isPartOf(hotspot, queryElem);\n },\n getAttachPoint: function () {\n return lazySink().getOrDie();\n }\n }),\n Composing.config({\n find: function (sandbox) {\n return Sandboxing.getState(sandbox).bind(function (menu) {\n return Composing.getCurrent(menu);\n });\n }\n }),\n Receiving.config({ channels: __assign(__assign({}, receivingChannel({ isExtraPart: never })), receivingChannel$1({ doReposition: doRepositionMenus })) })\n ])\n };\n };\n var repositionMenus = function (comp) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n doRepositionMenus(sandbox);\n };\n\n var sandboxFields = function () {\n return [\n defaulted$1('sandboxClasses', []),\n SketchBehaviours.field('sandboxBehaviours', [\n Composing,\n Receiving,\n Sandboxing,\n Representing\n ])\n ];\n };\n\n var schema$g = constant([\n strict$1('dom'),\n strict$1('fetch'),\n onHandler('onOpen'),\n onKeyboardHandler('onExecute'),\n defaulted$1('getHotspot', Option.some),\n defaulted$1('getAnchorOverrides', constant({})),\n schema$1(),\n field$1('dropdownBehaviours', [\n Toggling,\n Coupling,\n Keying,\n Focusing\n ]),\n strict$1('toggleClass'),\n defaulted$1('eventOrder', {}),\n option('lazySink'),\n defaulted$1('matchWidth', false),\n defaulted$1('useMinWidth', false),\n option('role')\n ].concat(sandboxFields()));\n var parts$4 = constant([\n external$1({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n defaults: function (detail) {\n return { onExecute: detail.onExecute };\n }\n }),\n partType()\n ]);\n\n var factory$6 = function (detail, components, _spec, externals) {\n var _a;\n var lookupAttr = function (attr) {\n return get(detail.dom, 'attributes').bind(function (attrs) {\n return get(attrs, attr);\n });\n };\n var switchToMenu = function (sandbox) {\n Sandboxing.getState(sandbox).each(function (tmenu) {\n tieredMenu.highlightPrimary(tmenu);\n });\n };\n var action = function (component) {\n var onOpenSync = switchToMenu;\n togglePopup(detail, function (x) {\n return x;\n }, component, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n };\n var apis = {\n expand: function (comp) {\n if (!Toggling.isOn(comp)) {\n togglePopup(detail, function (x) {\n return x;\n }, comp, externals, noop, HighlightOnOpen.HighlightNone).get(noop);\n }\n },\n open: function (comp) {\n if (!Toggling.isOn(comp)) {\n togglePopup(detail, function (x) {\n return x;\n }, comp, externals, noop, HighlightOnOpen.HighlightFirst).get(noop);\n }\n },\n isOpen: Toggling.isOn,\n close: function (comp) {\n if (Toggling.isOn(comp)) {\n togglePopup(detail, function (x) {\n return x;\n }, comp, externals, noop, HighlightOnOpen.HighlightFirst).get(noop);\n }\n },\n repositionMenus: function (comp) {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n var triggerExecute = function (comp, se) {\n emitExecute(comp);\n return Option.some(true);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.dropdownBehaviours, [\n Toggling.config({\n toggleClass: detail.toggleClass,\n aria: { mode: 'expanded' }\n }),\n Coupling.config({\n others: {\n sandbox: function (hotspot) {\n return makeSandbox(detail, hotspot, {\n onOpen: function () {\n Toggling.on(hotspot);\n },\n onClose: function () {\n Toggling.off(hotspot);\n }\n });\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: triggerExecute,\n onEnter: triggerExecute,\n onDown: function (comp, se) {\n if (Dropdown.isOpen(comp)) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n switchToMenu(sandbox);\n } else {\n Dropdown.open(comp);\n }\n return Option.some(true);\n },\n onEscape: function (comp, se) {\n if (Dropdown.isOpen(comp)) {\n Dropdown.close(comp);\n return Option.some(true);\n } else {\n return Option.none();\n }\n }\n }),\n Focusing.config({})\n ]),\n events: events$7(Option.some(action)),\n eventOrder: __assign(__assign({}, detail.eventOrder), (_a = {}, _a[execute()] = [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ], _a)),\n apis: apis,\n domModification: {\n attributes: __assign(__assign({ 'aria-haspopup': 'true' }, detail.role.fold(function () {\n return {};\n }, function (role) {\n return { role: role };\n })), detail.dom.tag === 'button' ? { type: lookupAttr('type').getOr('button') } : {})\n }\n };\n };\n var Dropdown = composite$1({\n name: 'Dropdown',\n configFields: schema$g(),\n partFields: parts$4(),\n factory: factory$6,\n apis: {\n open: function (apis, comp) {\n return apis.open(comp);\n },\n expand: function (apis, comp) {\n return apis.expand(comp);\n },\n close: function (apis, comp) {\n return apis.close(comp);\n },\n isOpen: function (apis, comp) {\n return apis.isOpen(comp);\n },\n repositionMenus: function (apis, comp) {\n return apis.repositionMenus(comp);\n }\n }\n });\n\n var exhibit$5 = function () {\n return nu$6({\n styles: {\n '-webkit-user-select': 'none',\n 'user-select': 'none',\n '-ms-user-select': 'none',\n '-moz-user-select': '-moz-none'\n },\n attributes: { unselectable: 'on' }\n });\n };\n var events$b = function () {\n return derive([abort(selectstart(), constant(true))]);\n };\n\n var ActiveUnselecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$b,\n exhibit: exhibit$5\n });\n\n var Unselecting = create$1({\n fields: [],\n name: 'unselecting',\n active: ActiveUnselecting\n });\n\n var renderPanelButton = function (spec, sharedBackstage) {\n return Dropdown.sketch({\n dom: spec.dom,\n components: spec.components,\n toggleClass: 'mce-active',\n dropdownBehaviours: derive$1([\n Unselecting.config({}),\n Tabstopping.config({})\n ]),\n layouts: spec.layouts,\n sandboxClasses: ['tox-dialog__popups'],\n lazySink: sharedBackstage.getSink,\n fetch: function (comp) {\n return Future.nu(function (callback) {\n return spec.fetch(callback);\n }).map(function (items) {\n return Option.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$1('menu-value'), items, function (value) {\n spec.onItemAction(comp, value);\n }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, function () {\n return false;\n }, sharedBackstage.providers), { movement: deriveMenuMovement(spec.columns, spec.presets) })));\n });\n },\n parts: { menu: part(false, 1, spec.presets) }\n });\n };\n\n var colorInputChangeEvent = generate$1('color-input-change');\n var colorSwatchChangeEvent = generate$1('color-swatch-change');\n var colorPickerCancelEvent = generate$1('color-picker-cancel');\n var renderColorInput = function (spec, sharedBackstage, colorInputBackstage) {\n var pField = FormField.parts().field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n onSetValue: function (c) {\n return Invalidating.run(c).get(function () {\n });\n },\n inputBehaviours: derive$1([\n Tabstopping.config({}),\n Invalidating.config({\n invalidClass: 'tox-textbox-field-invalid',\n getRoot: function (comp) {\n return parent(comp.element());\n },\n notify: {\n onValid: function (comp) {\n var val = Representing.getValue(comp);\n emitWith(comp, colorInputChangeEvent, { color: val });\n }\n },\n validator: {\n validateOnLoad: false,\n validate: function (input) {\n var inputValue = Representing.getValue(input);\n if (inputValue.length === 0) {\n return Future.pure(Result.value(true));\n } else {\n var span = Element.fromTag('span');\n set$2(span, 'background-color', inputValue);\n var res = getRaw(span, 'background-color').fold(function () {\n return Result.error('blah');\n }, function (_) {\n return Result.value(inputValue);\n });\n return Future.pure(res);\n }\n }\n }\n })\n ]),\n selectOnFocus: false\n });\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, sharedBackstage.providers);\n });\n var emitSwatchChange = function (colorBit, value) {\n emitWith(colorBit, colorSwatchChangeEvent, { value: value });\n };\n var onItemAction = function (comp, value) {\n memColorButton.getOpt(comp).each(function (colorBit) {\n if (value === 'custom') {\n colorInputBackstage.colorPicker(function (valueOpt) {\n valueOpt.fold(function () {\n return emit(colorBit, colorPickerCancelEvent);\n }, function (value) {\n emitSwatchChange(colorBit, value);\n Settings.addColor(value);\n });\n }, '#ffffff');\n } else if (value === 'remove') {\n emitSwatchChange(colorBit, '');\n } else {\n emitSwatchChange(colorBit, value);\n }\n });\n };\n var memColorButton = record(renderPanelButton({\n dom: {\n tag: 'span',\n attributes: { 'aria-label': sharedBackstage.providers.translate('Color swatch') }\n },\n layouts: {\n onRtl: function () {\n return [\n southwest$1,\n southeast$1,\n south$1\n ];\n },\n onLtr: function () {\n return [\n southeast$1,\n southwest$1,\n south$1\n ];\n }\n },\n components: [],\n fetch: ColorSwatch.getFetch(colorInputBackstage.getColors(), colorInputBackstage.hasCustomColors()),\n columns: colorInputBackstage.getColorCols(),\n presets: 'color',\n onItemAction: onItemAction\n }, sharedBackstage));\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: pLabel.toArray().concat([{\n dom: {\n tag: 'div',\n classes: ['tox-color-input']\n },\n components: [\n pField,\n memColorButton.asSpec()\n ]\n }]),\n fieldBehaviours: derive$1([config('form-field-events', [\n run(colorInputChangeEvent, function (comp, se) {\n memColorButton.getOpt(comp).each(function (colorButton) {\n set$2(colorButton.element(), 'background-color', se.event().color());\n });\n emitWith(comp, formChangeEvent, { name: spec.name });\n }),\n run(colorSwatchChangeEvent, function (comp, se) {\n FormField.getField(comp).each(function (field) {\n Representing.setValue(field, se.event().value());\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n }),\n run(colorPickerCancelEvent, function (comp, se) {\n FormField.getField(comp).each(function (field) {\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n })\n ])])\n });\n };\n\n var hsvColour = function (hue, saturation, value) {\n return {\n hue: constant(hue),\n saturation: constant(saturation),\n value: constant(value)\n };\n };\n var fromRgb = function (rgbaColour) {\n var h = 0;\n var s = 0;\n var v = 0;\n var r = rgbaColour.red() / 255;\n var g = rgbaColour.green() / 255;\n var b = rgbaColour.blue() / 255;\n var minRGB = Math.min(r, Math.min(g, b));\n var maxRGB = Math.max(r, Math.max(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return hsvColour(0, 0, v * 100);\n }\n var 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 hsvColour(Math.round(h), Math.round(s * 100), Math.round(v * 100));\n };\n\n var calcHex = function (value) {\n var hue = (100 - value) / 100 * 360;\n var hsv = hsvColour(hue, 100, 100);\n var rgb = fromHsv(hsv);\n return fromRgba(rgb);\n };\n\n var fieldsUpdate = constant(generate$1('rgb-hex-update'));\n var sliderUpdate = constant(generate$1('slider-update'));\n var paletteUpdate = constant(generate$1('palette-update'));\n\n var labelPart = optional({\n schema: [strict$1('dom')],\n name: 'label'\n });\n var edgePart = function (name) {\n return optional({\n name: '' + name + '-edge',\n overrides: function (detail) {\n var action = detail.model.manager.edgeActions[name];\n return action.fold(function () {\n return {};\n }, function (a) {\n return {\n events: derive([\n runActionExtra(touchstart(), function (comp, se, d) {\n return a(comp, d);\n }, [detail]),\n runActionExtra(mousedown(), function (comp, se, d) {\n return a(comp, d);\n }, [detail]),\n runActionExtra(mousemove(), function (comp, se, det) {\n if (det.mouseIsDown.get()) {\n a(comp, det);\n }\n }, [detail])\n ])\n };\n });\n }\n });\n };\n var tlEdgePart = edgePart('top-left');\n var tedgePart = edgePart('top');\n var trEdgePart = edgePart('top-right');\n var redgePart = edgePart('right');\n var brEdgePart = edgePart('bottom-right');\n var bedgePart = edgePart('bottom');\n var blEdgePart = edgePart('bottom-left');\n var ledgePart = edgePart('left');\n var thumbPart = required({\n name: 'thumb',\n defaults: constant({ dom: { styles: { position: 'absolute' } } }),\n overrides: function (detail) {\n return {\n events: derive([\n redirectToPart(touchstart(), detail, 'spectrum'),\n redirectToPart(touchmove(), detail, 'spectrum'),\n redirectToPart(touchend(), detail, 'spectrum'),\n redirectToPart(mousedown(), detail, 'spectrum'),\n redirectToPart(mousemove(), detail, 'spectrum'),\n redirectToPart(mouseup(), detail, 'spectrum')\n ])\n };\n }\n });\n var spectrumPart = required({\n schema: [state$1('mouseIsDown', function () {\n return Cell(false);\n })],\n name: 'spectrum',\n overrides: function (detail) {\n var modelDetail = detail.model;\n var model = modelDetail.manager;\n var setValueFrom = function (component, simulatedEvent) {\n return model.getValueFromEvent(simulatedEvent).map(function (value) {\n return model.setValueFrom(component, detail, value);\n });\n };\n return {\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: function (spectrum) {\n return model.onLeft(spectrum, detail);\n },\n onRight: function (spectrum) {\n return model.onRight(spectrum, detail);\n },\n onUp: function (spectrum) {\n return model.onUp(spectrum, detail);\n },\n onDown: function (spectrum) {\n return model.onDown(spectrum, detail);\n }\n }),\n Focusing.config({})\n ]),\n events: derive([\n run(touchstart(), setValueFrom),\n run(touchmove(), setValueFrom),\n run(mousedown(), setValueFrom),\n run(mousemove(), function (spectrum, se) {\n if (detail.mouseIsDown.get()) {\n setValueFrom(spectrum, se);\n }\n })\n ])\n };\n }\n });\n var SliderParts = [\n labelPart,\n ledgePart,\n redgePart,\n tedgePart,\n bedgePart,\n tlEdgePart,\n trEdgePart,\n blEdgePart,\n brEdgePart,\n thumbPart,\n spectrumPart\n ];\n\n var _sliderChangeEvent = 'slider.change.value';\n var sliderChangeEvent = constant(_sliderChangeEvent);\n var isTouchEvent = function (evt) {\n return evt.type.indexOf('touch') !== -1;\n };\n var getEventSource = function (simulatedEvent) {\n var evt = simulatedEvent.event().raw();\n if (isTouchEvent(evt)) {\n var touchEvent = evt;\n return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? Option.some(touchEvent.touches[0]).map(function (t) {\n return Position(t.clientX, t.clientY);\n }) : Option.none();\n } else {\n var mouseEvent = evt;\n return mouseEvent.clientX !== undefined ? Option.some(mouseEvent).map(function (me) {\n return Position(me.clientX, me.clientY);\n }) : Option.none();\n }\n };\n\n var t = 'top', r$1 = 'right', b = 'bottom', l = 'left';\n var minX = function (detail) {\n return detail.model.minX;\n };\n var minY = function (detail) {\n return detail.model.minY;\n };\n var min1X = function (detail) {\n return detail.model.minX - 1;\n };\n var min1Y = function (detail) {\n return detail.model.minY - 1;\n };\n var maxX = function (detail) {\n return detail.model.maxX;\n };\n var maxY = function (detail) {\n return detail.model.maxY;\n };\n var max1X = function (detail) {\n return detail.model.maxX + 1;\n };\n var max1Y = function (detail) {\n return detail.model.maxY + 1;\n };\n var range$2 = function (detail, max, min) {\n return max(detail) - min(detail);\n };\n var xRange = function (detail) {\n return range$2(detail, maxX, minX);\n };\n var yRange = function (detail) {\n return range$2(detail, maxY, minY);\n };\n var halfX = function (detail) {\n return xRange(detail) / 2;\n };\n var halfY = function (detail) {\n return yRange(detail) / 2;\n };\n var step = function (detail) {\n return detail.stepSize;\n };\n var snap = function (detail) {\n return detail.snapToGrid;\n };\n var snapStart = function (detail) {\n return detail.snapStart;\n };\n var rounded = function (detail) {\n return detail.rounded;\n };\n var hasEdge = function (detail, edgeName) {\n return detail[edgeName + '-edge'] !== undefined;\n };\n var hasLEdge = function (detail) {\n return hasEdge(detail, l);\n };\n var hasREdge = function (detail) {\n return hasEdge(detail, r$1);\n };\n var hasTEdge = function (detail) {\n return hasEdge(detail, t);\n };\n var hasBEdge = function (detail) {\n return hasEdge(detail, b);\n };\n var currentValue = function (detail) {\n return detail.model.value.get();\n };\n\n var xValue = function (x) {\n return { x: constant(x) };\n };\n var yValue = function (y) {\n return { y: constant(y) };\n };\n var xyValue = function (x, y) {\n return {\n x: constant(x),\n y: constant(y)\n };\n };\n var fireSliderChange = function (component, value) {\n emitWith(component, sliderChangeEvent(), { value: value });\n };\n var setToTLEdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(min1X(detail), min1Y(detail)));\n };\n var setToTEdge = function (edge, detail) {\n fireSliderChange(edge, yValue(min1Y(detail)));\n };\n var setToTEdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(halfX(detail), min1Y(detail)));\n };\n var setToTREdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(max1X(detail), min1Y(detail)));\n };\n var setToREdge = function (edge, detail) {\n fireSliderChange(edge, xValue(max1X(detail)));\n };\n var setToREdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(max1X(detail), halfY(detail)));\n };\n var setToBREdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(max1X(detail), max1Y(detail)));\n };\n var setToBEdge = function (edge, detail) {\n fireSliderChange(edge, yValue(max1Y(detail)));\n };\n var setToBEdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(halfX(detail), max1Y(detail)));\n };\n var setToBLEdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(min1X(detail), max1Y(detail)));\n };\n var setToLEdge = function (edge, detail) {\n fireSliderChange(edge, xValue(min1X(detail)));\n };\n var setToLEdgeXY = function (edge, detail) {\n fireSliderChange(edge, xyValue(min1X(detail), halfY(detail)));\n };\n\n var reduceBy = function (value, min, max, step) {\n if (value < min) {\n return value;\n } else if (value > max) {\n return max;\n } else if (value === min) {\n return min - 1;\n } else {\n return Math.max(min, value - step);\n }\n };\n var increaseBy = function (value, min, max, step) {\n if (value > max) {\n return value;\n } else if (value < min) {\n return min;\n } else if (value === max) {\n return max + 1;\n } else {\n return Math.min(max, value + step);\n }\n };\n var capValue = function (value, min, max) {\n return Math.max(min, Math.min(max, value));\n };\n var snapValueOf = function (value, min, max, step, snapStart) {\n return snapStart.fold(function () {\n var initValue = value - min;\n var extraValue = Math.round(initValue / step) * step;\n return capValue(min + extraValue, min - 1, max + 1);\n }, function (start) {\n var remainder = (value - start) % step;\n var adjustment = Math.round(remainder / step);\n var rawSteps = Math.floor((value - start) / step);\n var maxSteps = Math.floor((max - start) / step);\n var numSteps = Math.min(maxSteps, rawSteps + adjustment);\n var r = start + numSteps * step;\n return Math.max(start, r);\n });\n };\n var findOffsetOf = function (value, min, max) {\n return Math.min(max, Math.max(value, min)) - min;\n };\n var findValueOf = function (args) {\n var min = args.min, max = args.max, range = args.range, value = args.value, step = args.step, snap = args.snap, snapStart = args.snapStart, rounded = args.rounded, hasMinEdge = args.hasMinEdge, hasMaxEdge = args.hasMaxEdge, minBound = args.minBound, maxBound = args.maxBound, screenRange = args.screenRange;\n var capMin = hasMinEdge ? min - 1 : min;\n var capMax = hasMaxEdge ? max + 1 : max;\n if (value < minBound) {\n return capMin;\n } else if (value > maxBound) {\n return capMax;\n } else {\n var offset = findOffsetOf(value, minBound, maxBound);\n var newValue = capValue(offset / screenRange * range + min, capMin, capMax);\n if (snap && newValue >= min && newValue <= max) {\n return snapValueOf(newValue, min, max, step, snapStart);\n } else if (rounded) {\n return Math.round(newValue);\n } else {\n return newValue;\n }\n }\n };\n var findOffsetOfValue = function (args) {\n var min = args.min, max = args.max, range = args.range, value = args.value, hasMinEdge = args.hasMinEdge, hasMaxEdge = args.hasMaxEdge, maxBound = args.maxBound, maxOffset = args.maxOffset, centerMinEdge = args.centerMinEdge, centerMaxEdge = args.centerMaxEdge;\n if (value < min) {\n return hasMinEdge ? 0 : centerMinEdge;\n } else if (value > max) {\n return hasMaxEdge ? maxBound : centerMaxEdge;\n } else {\n return (value - min) / range * maxOffset;\n }\n };\n\n var top = 'top', right = 'right', bottom = 'bottom', left = 'left', width = 'width', height = 'height';\n var getBounds$1 = function (component) {\n return component.element().dom().getBoundingClientRect();\n };\n var getBoundsProperty = function (bounds, property) {\n return bounds[property];\n };\n var getMinXBounds = function (component) {\n var bounds = getBounds$1(component);\n return getBoundsProperty(bounds, left);\n };\n var getMaxXBounds = function (component) {\n var bounds = getBounds$1(component);\n return getBoundsProperty(bounds, right);\n };\n var getMinYBounds = function (component) {\n var bounds = getBounds$1(component);\n return getBoundsProperty(bounds, top);\n };\n var getMaxYBounds = function (component) {\n var bounds = getBounds$1(component);\n return getBoundsProperty(bounds, bottom);\n };\n var getXScreenRange = function (component) {\n var bounds = getBounds$1(component);\n return getBoundsProperty(bounds, width);\n };\n var getYScreenRange = function (component) {\n var bounds = getBounds$1(component);\n return getBoundsProperty(bounds, height);\n };\n var getCenterOffsetOf = function (componentMinEdge, componentMaxEdge, spectrumMinEdge) {\n return (componentMinEdge + componentMaxEdge) / 2 - spectrumMinEdge;\n };\n var getXCenterOffSetOf = function (component, spectrum) {\n var componentBounds = getBounds$1(component);\n var spectrumBounds = getBounds$1(spectrum);\n var componentMinEdge = getBoundsProperty(componentBounds, left);\n var componentMaxEdge = getBoundsProperty(componentBounds, right);\n var spectrumMinEdge = getBoundsProperty(spectrumBounds, left);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n var getYCenterOffSetOf = function (component, spectrum) {\n var componentBounds = getBounds$1(component);\n var spectrumBounds = getBounds$1(spectrum);\n var componentMinEdge = getBoundsProperty(componentBounds, top);\n var componentMaxEdge = getBoundsProperty(componentBounds, bottom);\n var spectrumMinEdge = getBoundsProperty(spectrumBounds, top);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n\n var fireSliderChange$1 = function (spectrum, value) {\n emitWith(spectrum, sliderChangeEvent(), { value: value });\n };\n var sliderValue = function (x) {\n return { x: constant(x) };\n };\n var findValueOfOffset = function (spectrum, detail, left) {\n var args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value: left,\n step: step(detail),\n snap: snap(detail),\n snapStart: snapStart(detail),\n rounded: rounded(detail),\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n maxBound: getMaxXBounds(spectrum),\n screenRange: getXScreenRange(spectrum)\n };\n return findValueOf(args);\n };\n var setValueFrom = function (spectrum, detail, value) {\n var xValue = findValueOfOffset(spectrum, detail, value);\n var sliderVal = sliderValue(xValue);\n fireSliderChange$1(spectrum, sliderVal);\n return xValue;\n };\n var setToMin = function (spectrum, detail) {\n var min = minX(detail);\n fireSliderChange$1(spectrum, sliderValue(min));\n };\n var setToMax = function (spectrum, detail) {\n var max = maxX(detail);\n fireSliderChange$1(spectrum, sliderValue(max));\n };\n var moveBy = function (direction, spectrum, detail) {\n var f = direction > 0 ? increaseBy : reduceBy;\n var xValue = f(currentValue(detail).x(), minX(detail), maxX(detail), step(detail));\n fireSliderChange$1(spectrum, sliderValue(xValue));\n return Option.some(xValue);\n };\n var handleMovement = function (direction) {\n return function (spectrum, detail) {\n return moveBy(direction, spectrum, detail).map(function () {\n return true;\n });\n };\n };\n var getValueFromEvent = function (simulatedEvent) {\n var pos = getEventSource(simulatedEvent);\n return pos.map(function (p) {\n return p.left();\n });\n };\n var findOffsetOfValue$1 = function (spectrum, detail, value, minEdge, maxEdge) {\n var minOffset = 0;\n var maxOffset = getXScreenRange(spectrum);\n var centerMinEdge = minEdge.bind(function (edge) {\n return Option.some(getXCenterOffSetOf(edge, spectrum));\n }).getOr(minOffset);\n var centerMaxEdge = maxEdge.bind(function (edge) {\n return Option.some(getXCenterOffSetOf(edge, spectrum));\n }).getOr(maxOffset);\n var args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value: value,\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n minOffset: minOffset,\n maxBound: getMaxXBounds(spectrum),\n maxOffset: maxOffset,\n centerMinEdge: centerMinEdge,\n centerMaxEdge: centerMaxEdge\n };\n return findOffsetOfValue(args);\n };\n var findPositionOfValue = function (slider, spectrum, value, minEdge, maxEdge, detail) {\n var offset = findOffsetOfValue$1(spectrum, detail, value, minEdge, maxEdge);\n return getMinXBounds(spectrum) - getMinXBounds(slider) + offset;\n };\n var setPositionFromValue = function (slider, thumb, detail, edges) {\n var value = currentValue(detail);\n var pos = findPositionOfValue(slider, edges.getSpectrum(slider), value.x(), edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n var thumbRadius = get$7(thumb.element()) / 2;\n set$2(thumb.element(), 'left', pos - thumbRadius + 'px');\n };\n var onLeft = handleMovement(-1);\n var onRight = handleMovement(1);\n var onUp = Option.none;\n var onDown = Option.none;\n var edgeActions = {\n 'top-left': Option.none(),\n 'top': Option.none(),\n 'top-right': Option.none(),\n 'right': Option.some(setToREdge),\n 'bottom-right': Option.none(),\n 'bottom': Option.none(),\n 'bottom-left': Option.none(),\n 'left': Option.some(setToLEdge)\n };\n\n var HorizontalModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom,\n setToMin: setToMin,\n setToMax: setToMax,\n findValueOfOffset: findValueOfOffset,\n getValueFromEvent: getValueFromEvent,\n findPositionOfValue: findPositionOfValue,\n setPositionFromValue: setPositionFromValue,\n onLeft: onLeft,\n onRight: onRight,\n onUp: onUp,\n onDown: onDown,\n edgeActions: edgeActions\n });\n\n var fireSliderChange$2 = function (spectrum, value) {\n emitWith(spectrum, sliderChangeEvent(), { value: value });\n };\n var sliderValue$1 = function (y) {\n return { y: constant(y) };\n };\n var findValueOfOffset$1 = function (spectrum, detail, top) {\n var args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value: top,\n step: step(detail),\n snap: snap(detail),\n snapStart: snapStart(detail),\n rounded: rounded(detail),\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n maxBound: getMaxYBounds(spectrum),\n screenRange: getYScreenRange(spectrum)\n };\n return findValueOf(args);\n };\n var setValueFrom$1 = function (spectrum, detail, value) {\n var yValue = findValueOfOffset$1(spectrum, detail, value);\n var sliderVal = sliderValue$1(yValue);\n fireSliderChange$2(spectrum, sliderVal);\n return yValue;\n };\n var setToMin$1 = function (spectrum, detail) {\n var min = minY(detail);\n fireSliderChange$2(spectrum, sliderValue$1(min));\n };\n var setToMax$1 = function (spectrum, detail) {\n var max = maxY(detail);\n fireSliderChange$2(spectrum, sliderValue$1(max));\n };\n var moveBy$1 = function (direction, spectrum, detail) {\n var f = direction > 0 ? increaseBy : reduceBy;\n var yValue = f(currentValue(detail).y(), minY(detail), maxY(detail), step(detail));\n fireSliderChange$2(spectrum, sliderValue$1(yValue));\n return Option.some(yValue);\n };\n var handleMovement$1 = function (direction) {\n return function (spectrum, detail) {\n return moveBy$1(direction, spectrum, detail).map(function () {\n return true;\n });\n };\n };\n var getValueFromEvent$1 = function (simulatedEvent) {\n var pos = getEventSource(simulatedEvent);\n return pos.map(function (p) {\n return p.top();\n });\n };\n var findOffsetOfValue$2 = function (spectrum, detail, value, minEdge, maxEdge) {\n var minOffset = 0;\n var maxOffset = getYScreenRange(spectrum);\n var centerMinEdge = minEdge.bind(function (edge) {\n return Option.some(getYCenterOffSetOf(edge, spectrum));\n }).getOr(minOffset);\n var centerMaxEdge = maxEdge.bind(function (edge) {\n return Option.some(getYCenterOffSetOf(edge, spectrum));\n }).getOr(maxOffset);\n var args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value: value,\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n minOffset: minOffset,\n maxBound: getMaxYBounds(spectrum),\n maxOffset: maxOffset,\n centerMinEdge: centerMinEdge,\n centerMaxEdge: centerMaxEdge\n };\n return findOffsetOfValue(args);\n };\n var findPositionOfValue$1 = function (slider, spectrum, value, minEdge, maxEdge, detail) {\n var offset = findOffsetOfValue$2(spectrum, detail, value, minEdge, maxEdge);\n return getMinYBounds(spectrum) - getMinYBounds(slider) + offset;\n };\n var setPositionFromValue$1 = function (slider, thumb, detail, edges) {\n var value = currentValue(detail);\n var pos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.y(), edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n var thumbRadius = get$6(thumb.element()) / 2;\n set$2(thumb.element(), 'top', pos - thumbRadius + 'px');\n };\n var onLeft$1 = Option.none;\n var onRight$1 = Option.none;\n var onUp$1 = handleMovement$1(-1);\n var onDown$1 = handleMovement$1(1);\n var edgeActions$1 = {\n 'top-left': Option.none(),\n 'top': Option.some(setToTEdge),\n 'top-right': Option.none(),\n 'right': Option.none(),\n 'bottom-right': Option.none(),\n 'bottom': Option.some(setToBEdge),\n 'bottom-left': Option.none(),\n 'left': Option.none()\n };\n\n var VerticalModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom$1,\n setToMin: setToMin$1,\n setToMax: setToMax$1,\n findValueOfOffset: findValueOfOffset$1,\n getValueFromEvent: getValueFromEvent$1,\n findPositionOfValue: findPositionOfValue$1,\n setPositionFromValue: setPositionFromValue$1,\n onLeft: onLeft$1,\n onRight: onRight$1,\n onUp: onUp$1,\n onDown: onDown$1,\n edgeActions: edgeActions$1\n });\n\n var fireSliderChange$3 = function (spectrum, value) {\n emitWith(spectrum, sliderChangeEvent(), { value: value });\n };\n var sliderValue$2 = function (x, y) {\n return {\n x: constant(x),\n y: constant(y)\n };\n };\n var setValueFrom$2 = function (spectrum, detail, value) {\n var xValue = findValueOfOffset(spectrum, detail, value.left());\n var yValue = findValueOfOffset$1(spectrum, detail, value.top());\n var val = sliderValue$2(xValue, yValue);\n fireSliderChange$3(spectrum, val);\n return val;\n };\n var moveBy$2 = function (direction, isVerticalMovement, spectrum, detail) {\n var f = direction > 0 ? increaseBy : reduceBy;\n var xValue = isVerticalMovement ? currentValue(detail).x() : f(currentValue(detail).x(), minX(detail), maxX(detail), step(detail));\n var yValue = !isVerticalMovement ? currentValue(detail).y() : f(currentValue(detail).y(), minY(detail), maxY(detail), step(detail));\n fireSliderChange$3(spectrum, sliderValue$2(xValue, yValue));\n return Option.some(xValue);\n };\n var handleMovement$2 = function (direction, isVerticalMovement) {\n return function (spectrum, detail) {\n return moveBy$2(direction, isVerticalMovement, spectrum, detail).map(function () {\n return true;\n });\n };\n };\n var setToMin$2 = function (spectrum, detail) {\n var mX = minX(detail);\n var mY = minY(detail);\n fireSliderChange$3(spectrum, sliderValue$2(mX, mY));\n };\n var setToMax$2 = function (spectrum, detail) {\n var mX = maxX(detail);\n var mY = maxY(detail);\n fireSliderChange$3(spectrum, sliderValue$2(mX, mY));\n };\n var getValueFromEvent$2 = function (simulatedEvent) {\n return getEventSource(simulatedEvent);\n };\n var setPositionFromValue$2 = function (slider, thumb, detail, edges) {\n var value = currentValue(detail);\n var xPos = findPositionOfValue(slider, edges.getSpectrum(slider), value.x(), edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n var yPos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.y(), edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n var thumbXRadius = get$7(thumb.element()) / 2;\n var thumbYRadius = get$6(thumb.element()) / 2;\n set$2(thumb.element(), 'left', xPos - thumbXRadius + 'px');\n set$2(thumb.element(), 'top', yPos - thumbYRadius + 'px');\n };\n var onLeft$2 = handleMovement$2(-1, false);\n var onRight$2 = handleMovement$2(1, false);\n var onUp$2 = handleMovement$2(-1, true);\n var onDown$2 = handleMovement$2(1, true);\n var edgeActions$2 = {\n 'top-left': Option.some(setToTLEdgeXY),\n 'top': Option.some(setToTEdgeXY),\n 'top-right': Option.some(setToTREdgeXY),\n 'right': Option.some(setToREdgeXY),\n 'bottom-right': Option.some(setToBREdgeXY),\n 'bottom': Option.some(setToBEdgeXY),\n 'bottom-left': Option.some(setToBLEdgeXY),\n 'left': Option.some(setToLEdgeXY)\n };\n\n var TwoDModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom$2,\n setToMin: setToMin$2,\n setToMax: setToMax$2,\n getValueFromEvent: getValueFromEvent$2,\n setPositionFromValue: setPositionFromValue$2,\n onLeft: onLeft$2,\n onRight: onRight$2,\n onUp: onUp$2,\n onDown: onDown$2,\n edgeActions: edgeActions$2\n });\n\n var SliderSchema = [\n defaulted$1('stepSize', 1),\n defaulted$1('onChange', noop),\n defaulted$1('onChoose', noop),\n defaulted$1('onInit', noop),\n defaulted$1('onDragStart', noop),\n defaulted$1('onDragEnd', noop),\n defaulted$1('snapToGrid', false),\n defaulted$1('rounded', true),\n option('snapStart'),\n strictOf('model', choose$1('mode', {\n x: [\n defaulted$1('minX', 0),\n defaulted$1('maxX', 100),\n state$1('value', function (spec) {\n return Cell(spec.mode.minX);\n }),\n strict$1('getInitialValue'),\n output('manager', HorizontalModel)\n ],\n y: [\n defaulted$1('minY', 0),\n defaulted$1('maxY', 100),\n state$1('value', function (spec) {\n return Cell(spec.mode.minY);\n }),\n strict$1('getInitialValue'),\n output('manager', VerticalModel)\n ],\n xy: [\n defaulted$1('minX', 0),\n defaulted$1('maxX', 100),\n defaulted$1('minY', 0),\n defaulted$1('maxY', 100),\n state$1('value', function (spec) {\n return Cell({\n x: constant(spec.mode.minX),\n y: constant(spec.mode.minY)\n });\n }),\n strict$1('getInitialValue'),\n output('manager', TwoDModel)\n ]\n })),\n field$1('sliderBehaviours', [\n Keying,\n Representing\n ]),\n state$1('mouseIsDown', function () {\n return Cell(false);\n })\n ];\n\n var sketch = function (detail, components, _spec, _externals) {\n var _a;\n var getThumb = function (component) {\n return getPartOrDie(component, detail, 'thumb');\n };\n var getSpectrum = function (component) {\n return getPartOrDie(component, detail, 'spectrum');\n };\n var getLeftEdge = function (component) {\n return getPart(component, detail, 'left-edge');\n };\n var getRightEdge = function (component) {\n return getPart(component, detail, 'right-edge');\n };\n var getTopEdge = function (component) {\n return getPart(component, detail, 'top-edge');\n };\n var getBottomEdge = function (component) {\n return getPart(component, detail, 'bottom-edge');\n };\n var modelDetail = detail.model;\n var model = modelDetail.manager;\n var refresh = function (slider, thumb) {\n model.setPositionFromValue(slider, thumb, detail, {\n getLeftEdge: getLeftEdge,\n getRightEdge: getRightEdge,\n getTopEdge: getTopEdge,\n getBottomEdge: getBottomEdge,\n getSpectrum: getSpectrum\n });\n };\n var changeValue = function (slider, newValue) {\n modelDetail.value.set(newValue);\n var thumb = getThumb(slider);\n refresh(slider, thumb);\n detail.onChange(slider, thumb, newValue);\n return Option.some(true);\n };\n var resetToMin = function (slider) {\n model.setToMin(slider, detail);\n };\n var resetToMax = function (slider) {\n model.setToMax(slider, detail);\n };\n var choose = function (slider) {\n var fireOnChoose = function () {\n getPart(slider, detail, 'thumb').each(function (thumb) {\n var value = modelDetail.value.get();\n detail.onChoose(slider, thumb, value);\n });\n };\n var wasDown = detail.mouseIsDown.get();\n detail.mouseIsDown.set(false);\n if (wasDown) {\n fireOnChoose();\n }\n };\n var onDragStart = function (slider, simulatedEvent) {\n simulatedEvent.stop();\n detail.mouseIsDown.set(true);\n detail.onDragStart(slider, getThumb(slider));\n };\n var onDragEnd = function (slider, simulatedEvent) {\n simulatedEvent.stop();\n detail.onDragEnd(slider, getThumb(slider));\n choose(slider);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.sliderBehaviours, [\n Keying.config({\n mode: 'special',\n focusIn: function (slider) {\n return getPart(slider, detail, 'spectrum').map(Keying.focusIn).map(constant(true));\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (_) {\n return modelDetail.value.get();\n }\n }\n }),\n Receiving.config({ channels: (_a = {}, _a[mouseReleased()] = { onReceive: choose }, _a) })\n ]),\n events: derive([\n run(sliderChangeEvent(), function (slider, simulatedEvent) {\n changeValue(slider, simulatedEvent.event().value());\n }),\n runOnAttached(function (slider, simulatedEvent) {\n var getInitial = modelDetail.getInitialValue();\n modelDetail.value.set(getInitial);\n var thumb = getThumb(slider);\n refresh(slider, thumb);\n var spectrum = getSpectrum(slider);\n detail.onInit(slider, thumb, spectrum, modelDetail.value.get());\n }),\n run(touchstart(), onDragStart),\n run(touchend(), onDragEnd),\n run(mousedown(), onDragStart),\n run(mouseup(), onDragEnd)\n ]),\n apis: {\n resetToMin: resetToMin,\n resetToMax: resetToMax,\n changeValue: changeValue,\n refresh: refresh\n },\n domModification: { styles: { position: 'relative' } }\n };\n };\n\n var Slider = composite$1({\n name: 'Slider',\n configFields: SliderSchema,\n partFields: SliderParts,\n factory: sketch,\n apis: {\n resetToMin: function (apis, slider) {\n apis.resetToMin(slider);\n },\n resetToMax: function (apis, slider) {\n apis.resetToMax(slider);\n },\n refresh: function (apis, slider) {\n apis.refresh(slider);\n }\n }\n });\n\n var sliderFactory = function (translate, getClass) {\n var spectrum = Slider.parts().spectrum({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-spectrum')],\n attributes: { role: 'presentation' }\n }\n });\n var thumb = Slider.parts().thumb({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-thumb')],\n attributes: { role: 'presentation' }\n }\n });\n return Slider.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider')],\n attributes: { role: 'presentation' }\n },\n rounded: false,\n model: {\n mode: 'y',\n getInitialValue: constant({ y: constant(0) })\n },\n components: [\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([Focusing.config({})]),\n onChange: function (slider, _thumb, value) {\n emitWith(slider, sliderUpdate(), { value: value });\n }\n });\n };\n\n var owner$3 = 'form';\n var schema$h = [field$1('formBehaviours', [Representing])];\n var getPartName = function (name) {\n return '';\n };\n var sketch$1 = function (fSpec) {\n var parts = function () {\n var record = [];\n var field = function (name, config) {\n record.push(name);\n return generateOne(owner$3, getPartName(name), config);\n };\n return {\n field: field,\n record: function () {\n return record;\n }\n };\n }();\n var spec = fSpec(parts);\n var partNames = parts.record();\n var fieldParts = map(partNames, function (n) {\n return required({\n name: n,\n pname: getPartName(n)\n });\n });\n return composite(owner$3, schema$h, fieldParts, make$4, spec);\n };\n var toResult$1 = function (o, e) {\n return o.fold(function () {\n return Result.error(e);\n }, Result.value);\n };\n var make$4 = function (detail, components) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.formBehaviours, [Representing.config({\n store: {\n mode: 'manual',\n getValue: function (form) {\n var resPs = getAllParts(form, detail);\n return map$1(resPs, function (resPThunk, pName) {\n return resPThunk().bind(function (v) {\n var opt = Composing.getCurrent(v);\n return toResult$1(opt, new Error('Cannot find a current component to extract the value from for form part \\'' + pName + '\\': ' + element(v.element())));\n }).map(Representing.getValue);\n });\n },\n setValue: function (form, values) {\n each$1(values, function (newValue, key) {\n getPart(form, detail, key).each(function (wrapper) {\n Composing.getCurrent(wrapper).each(function (field) {\n Representing.setValue(field, newValue);\n });\n });\n });\n }\n }\n })]),\n apis: {\n getField: function (form, key) {\n return getPart(form, detail, key).bind(Composing.getCurrent);\n }\n }\n };\n };\n var Form = {\n getField: makeApi(function (apis, component, key) {\n return apis.getField(component, key);\n }),\n sketch: sketch$1\n };\n\n var validInput = generate$1('valid-input');\n var invalidInput = generate$1('invalid-input');\n var validatingInput = generate$1('validating-input');\n var translatePrefix = 'colorcustom.rgb.';\n var rgbFormFactory = function (translate, getClass, onValidHexx, onInvalidHexx) {\n var invalidation = function (label, isValid) {\n return Invalidating.config({\n invalidClass: getClass('invalid'),\n notify: {\n onValidate: function (comp) {\n emitWith(comp, validatingInput, { type: label });\n },\n onValid: function (comp) {\n emitWith(comp, validInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n },\n onInvalid: function (comp) {\n emitWith(comp, invalidInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n }\n },\n validator: {\n validate: function (comp) {\n var value = Representing.getValue(comp);\n var res = isValid(value) ? Result.value(true) : Result.error(translate('aria.input.invalid'));\n return Future.pure(res);\n },\n validateOnLoad: false\n }\n });\n };\n var renderTextField = function (isValid, name, label, description, data) {\n var helptext = translate(translatePrefix + 'range');\n var pLabel = FormField.parts().label({\n dom: {\n tag: 'label',\n innerHtml: label,\n attributes: { 'aria-label': description }\n }\n });\n var pField = FormField.parts().field({\n data: data,\n factory: Input,\n inputAttributes: __assign({ type: 'text' }, name === 'hex' ? { 'aria-live': 'polite' } : {}),\n inputClasses: [getClass('textfield')],\n inputBehaviours: derive$1([\n invalidation(name, isValid),\n Tabstopping.config({})\n ]),\n onSetValue: function (input) {\n if (Invalidating.isInvalid(input)) {\n var run = Invalidating.run(input);\n run.get(noop);\n }\n }\n });\n var comps = [\n pLabel,\n pField\n ];\n var concats = name !== 'hex' ? [FormField.parts()['aria-descriptor']({ text: helptext })] : [];\n var components = comps.concat(concats);\n return {\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' }\n },\n components: components\n };\n };\n var copyRgbToHex = function (form, rgba) {\n var hex = fromRgba(rgba);\n Form.getField(form, 'hex').each(function (hexField) {\n if (!Focusing.isFocused(hexField)) {\n Representing.setValue(form, { hex: hex.value() });\n }\n });\n return hex;\n };\n var copyRgbToForm = function (form, rgb) {\n var red = rgb.red();\n var green = rgb.green();\n var blue = rgb.blue();\n Representing.setValue(form, {\n red: red,\n green: green,\n blue: blue\n });\n };\n var memPreview = record({\n dom: {\n tag: 'div',\n classes: [getClass('rgba-preview')],\n styles: { 'background-color': 'white' },\n attributes: { role: 'presentation' }\n }\n });\n var updatePreview = function (anyInSystem, hex) {\n memPreview.getOpt(anyInSystem).each(function (preview) {\n set$2(preview.element(), 'background-color', '#' + hex.value());\n });\n };\n var factory = function () {\n var state = {\n red: constant(Cell(Option.some(255))),\n green: constant(Cell(Option.some(255))),\n blue: constant(Cell(Option.some(255))),\n hex: constant(Cell(Option.some('ffffff')))\n };\n var copyHexToRgb = function (form, hex) {\n var rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n };\n var get = function (prop) {\n return state[prop]().get();\n };\n var set = function (prop, value) {\n state[prop]().set(value);\n };\n var getValueRgb = function () {\n return get('red').bind(function (red) {\n return get('green').bind(function (green) {\n return get('blue').map(function (blue) {\n return rgbaColour(red, green, blue, 1);\n });\n });\n });\n };\n var setValueRgb = function (rgb) {\n var red = rgb.red();\n var green = rgb.green();\n var blue = rgb.blue();\n set('red', Option.some(red));\n set('green', Option.some(green));\n set('blue', Option.some(blue));\n };\n var onInvalidInput = function (form, simulatedEvent) {\n var data = simulatedEvent.event();\n if (data.type() !== 'hex') {\n set(data.type(), Option.none());\n } else {\n onInvalidHexx(form);\n }\n };\n var onValidHex = function (form, value) {\n onValidHexx(form);\n var hex = hexColour(value);\n set('hex', Option.some(value));\n var rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n emitWith(form, fieldsUpdate(), { hex: hex });\n updatePreview(form, hex);\n };\n var onValidRgb = function (form, prop, value) {\n var val = parseInt(value, 10);\n set(prop, Option.some(val));\n getValueRgb().each(function (rgb) {\n var hex = copyRgbToHex(form, rgb);\n updatePreview(form, hex);\n });\n };\n var isHexInputEvent = function (data) {\n return data.type() === 'hex';\n };\n var onValidInput = function (form, simulatedEvent) {\n var data = simulatedEvent.event();\n if (isHexInputEvent(data)) {\n onValidHex(form, data.value());\n } else {\n onValidRgb(form, data.type(), data.value());\n }\n };\n var formPartStrings = function (key) {\n return {\n label: translate(translatePrefix + key + '.label'),\n description: translate(translatePrefix + key + '.description')\n };\n };\n var redStrings = formPartStrings('red');\n var greenStrings = formPartStrings('green');\n var blueStrings = formPartStrings('blue');\n var hexStrings = formPartStrings('hex');\n return deepMerge(Form.sketch(function (parts) {\n return {\n dom: {\n tag: 'form',\n classes: [getClass('rgb-form')],\n attributes: { 'aria-label': translate('aria.color.picker') }\n },\n components: [\n parts.field('red', FormField.sketch(renderTextField(isRgbaComponent, 'red', redStrings.label, redStrings.description, 255))),\n parts.field('green', FormField.sketch(renderTextField(isRgbaComponent, 'green', greenStrings.label, greenStrings.description, 255))),\n parts.field('blue', FormField.sketch(renderTextField(isRgbaComponent, 'blue', blueStrings.label, blueStrings.description, 255))),\n parts.field('hex', FormField.sketch(renderTextField(isHexString, 'hex', hexStrings.label, hexStrings.description, 'ffffff'))),\n memPreview.asSpec()\n ],\n formBehaviours: derive$1([\n Invalidating.config({ invalidClass: getClass('form-invalid') }),\n config('rgb-form-events', [\n run(validInput, onValidInput),\n run(invalidInput, onInvalidInput),\n run(validatingInput, onInvalidInput)\n ])\n ])\n };\n }), {\n apis: {\n updateHex: function (form, hex) {\n Representing.setValue(form, { hex: hex.value() });\n copyHexToRgb(form, hex);\n updatePreview(form, hex);\n }\n }\n });\n };\n var rgbFormSketcher = single$2({\n factory: factory,\n name: 'RgbForm',\n configFields: [],\n apis: {\n updateHex: function (apis, form, hex) {\n apis.updateHex(form, hex);\n }\n },\n extraApis: {}\n });\n return rgbFormSketcher;\n };\n\n var paletteFactory = function (_translate, getClass) {\n var spectrumPart = Slider.parts().spectrum({\n dom: {\n tag: 'canvas',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-spectrum')]\n }\n });\n var thumbPart = Slider.parts().thumb({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-thumb')],\n innerHtml: '
'\n }\n });\n var setColour = function (canvas, rgba) {\n var width = canvas.width, height = canvas.height;\n var ctx = canvas.getContext('2d');\n if (ctx === null) {\n return;\n }\n ctx.fillStyle = rgba;\n ctx.fillRect(0, 0, width, height);\n var grdWhite = ctx.createLinearGradient(0, 0, width, 0);\n grdWhite.addColorStop(0, 'rgba(255,255,255,1)');\n grdWhite.addColorStop(1, 'rgba(255,255,255,0)');\n ctx.fillStyle = grdWhite;\n ctx.fillRect(0, 0, width, height);\n var grdBlack = ctx.createLinearGradient(0, 0, 0, height);\n grdBlack.addColorStop(0, 'rgba(0,0,0,0)');\n grdBlack.addColorStop(1, 'rgba(0,0,0,1)');\n ctx.fillStyle = grdBlack;\n ctx.fillRect(0, 0, width, height);\n };\n var setSliderColour = function (slider, rgba) {\n var canvas = slider.components()[0].element().dom();\n setColour(canvas, toString(rgba));\n };\n var factory = function (_detail) {\n var getInitialValue = constant({\n x: constant(0),\n y: constant(0)\n });\n var onChange = function (slider, _thumb, value) {\n emitWith(slider, paletteUpdate(), { value: value });\n };\n var onInit = function (_slider, _thumb, spectrum, _value) {\n setColour(spectrum.element().dom(), toString(redColour()));\n };\n var sliderBehaviours = derive$1([\n Composing.config({ find: Option.some }),\n Focusing.config({})\n ]);\n return Slider.sketch({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette')]\n },\n model: {\n mode: 'xy',\n getInitialValue: getInitialValue\n },\n rounded: false,\n components: [\n spectrumPart,\n thumbPart\n ],\n onChange: onChange,\n onInit: onInit,\n sliderBehaviours: sliderBehaviours\n });\n };\n var saturationBrightnessPaletteSketcher = single$2({\n factory: factory,\n name: 'SaturationBrightnessPalette',\n configFields: [],\n apis: {\n setRgba: function (_apis, slider, rgba) {\n setSliderColour(slider, rgba);\n }\n },\n extraApis: {}\n });\n return saturationBrightnessPaletteSketcher;\n };\n\n var makeFactory = function (translate, getClass) {\n var factory = function (detail) {\n var rgbForm = rgbFormFactory(translate, getClass, detail.onValidHex, detail.onInvalidHex);\n var sbPalette = paletteFactory(translate, getClass);\n var state = { paletteRgba: constant(Cell(redColour())) };\n var memPalette = record(sbPalette.sketch({}));\n var memRgb = record(rgbForm.sketch({}));\n var updatePalette = function (anyInSystem, hex) {\n memPalette.getOpt(anyInSystem).each(function (palette) {\n var rgba = fromHex(hex);\n state.paletteRgba().set(rgba);\n sbPalette.setRgba(palette, rgba);\n });\n };\n var updateFields = function (anyInSystem, hex) {\n memRgb.getOpt(anyInSystem).each(function (form) {\n rgbForm.updateHex(form, hex);\n });\n };\n var runUpdates = function (anyInSystem, hex, updates) {\n each(updates, function (update) {\n update(anyInSystem, hex);\n });\n };\n var paletteUpdates = function () {\n var updates = [updateFields];\n return function (form, simulatedEvent) {\n var value = simulatedEvent.event().value();\n var oldRgb = state.paletteRgba().get();\n var hsvColour$1 = fromRgb(oldRgb);\n var newHsvColour = hsvColour(hsvColour$1.hue(), value.x(), 100 - value.y());\n var rgb = fromHsv(newHsvColour);\n var nuHex = fromRgba(rgb);\n runUpdates(form, nuHex, updates);\n };\n };\n var sliderUpdates = function () {\n var updates = [\n updatePalette,\n updateFields\n ];\n return function (form, simulatedEvent) {\n var value = simulatedEvent.event().value();\n var hex = calcHex(value.y());\n runUpdates(form, hex, updates);\n };\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [\n memPalette.asSpec(),\n sliderFactory(translate, getClass),\n memRgb.asSpec()\n ],\n behaviours: derive$1([\n config('colour-picker-events', [\n run(paletteUpdate(), paletteUpdates()),\n run(sliderUpdate(), sliderUpdates())\n ]),\n Composing.config({\n find: function (comp) {\n return memRgb.getOpt(comp);\n }\n }),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n var colourPickerSketcher = single$2({\n name: 'ColourPicker',\n configFields: [\n strict$1('dom'),\n defaulted$1('onValidHex', noop),\n defaulted$1('onInvalidHex', noop)\n ],\n factory: factory\n });\n return colourPickerSketcher;\n };\n\n var self$1 = function () {\n return Composing.config({ find: Option.some });\n };\n var memento = function (mem) {\n return Composing.config({ find: mem.getOpt });\n };\n var childAt = function (index) {\n return Composing.config({\n find: function (comp) {\n return child(comp.element(), index).bind(function (element) {\n return comp.getSystem().getByDom(element).toOption();\n });\n }\n });\n };\n var ComposingConfigs = {\n self: self$1,\n memento: memento,\n childAt: childAt\n };\n\n var english = {\n 'colorcustom.rgb.red.label': 'R',\n 'colorcustom.rgb.red.description': 'Red component',\n 'colorcustom.rgb.green.label': 'G',\n 'colorcustom.rgb.green.description': 'Green component',\n 'colorcustom.rgb.blue.label': 'B',\n 'colorcustom.rgb.blue.description': 'Blue component',\n 'colorcustom.rgb.hex.label': '#',\n 'colorcustom.rgb.hex.description': 'Hex color code',\n 'colorcustom.rgb.range': 'Range 0 to 255',\n 'colorcustom.sb.saturation': 'Saturation',\n 'colorcustom.sb.brightness': 'Brightness',\n 'colorcustom.sb.picker': 'Saturation and Brightness Picker',\n 'colorcustom.sb.palette': 'Saturation and Brightness Palette',\n 'colorcustom.sb.instructions': 'Use arrow keys to select saturation and brightness, on x and y axes',\n 'colorcustom.hue.hue': 'Hue',\n 'colorcustom.hue.slider': 'Hue Slider',\n 'colorcustom.hue.palette': 'Hue Palette',\n 'colorcustom.hue.instructions': 'Use arrow keys to select a hue',\n 'aria.color.picker': 'Color Picker',\n 'aria.input.invalid': 'Invalid input'\n };\n var getEnglishText = function (key) {\n return english[key];\n };\n var translate$1 = function (key) {\n return getEnglishText(key);\n };\n var renderColorPicker = function (spec) {\n var getClass = function (key) {\n return 'tox-' + key;\n };\n var colourPickerFactory = makeFactory(translate$1, getClass);\n var onValidHex = function (form) {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: true\n });\n };\n var onInvalidHex = function (form) {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: false\n });\n };\n var memPicker = record(colourPickerFactory.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('color-picker-container')],\n attributes: { role: 'presentation' }\n },\n onValidHex: onValidHex,\n onInvalidHex: onInvalidHex\n }));\n return {\n dom: { tag: 'div' },\n components: [memPicker.asSpec()],\n behaviours: derive$1([\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var picker = memPicker.get(comp);\n var optRgbForm = Composing.getCurrent(picker);\n var optHex = optRgbForm.bind(function (rgbForm) {\n var formValues = Representing.getValue(rgbForm);\n return formValues.hex;\n });\n return optHex.map(function (hex) {\n return '#' + hex;\n }).getOr('');\n },\n setValue: function (comp, newValue) {\n var pattern = /^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/;\n var m = pattern.exec(newValue);\n var picker = memPicker.get(comp);\n var optRgbForm = Composing.getCurrent(picker);\n optRgbForm.fold(function () {\n domGlobals.console.log('Can not find form');\n }, function (rgbForm) {\n Representing.setValue(rgbForm, { hex: Option.from(m[1]).getOr('') });\n Form.getField(rgbForm, 'hex').each(function (hexField) {\n emit(hexField, input());\n });\n });\n }\n }\n }),\n ComposingConfigs.self()\n ])\n };\n };\n\n var global$a = tinymce.util.Tools.resolve('tinymce.Resource');\n\n var isOldCustomEditor = function (spec) {\n return Object.prototype.hasOwnProperty.call(spec, 'init');\n };\n var renderCustomEditor = function (spec) {\n var editorApi = Cell(Option.none());\n var memReplaced = record({ dom: { tag: spec.tag } });\n var initialValue = Cell(Option.none());\n return {\n dom: {\n tag: 'div',\n classes: ['tox-custom-editor']\n },\n behaviours: derive$1([\n config('editor-foo-events', [runOnAttached(function (component) {\n memReplaced.getOpt(component).each(function (ta) {\n (isOldCustomEditor(spec) ? spec.init(ta.element().dom()) : global$a.load(spec.scriptId, spec.scriptUrl).then(function (init) {\n return init(ta.element().dom(), spec.settings);\n })).then(function (ea) {\n initialValue.get().each(function (cvalue) {\n ea.setValue(cvalue);\n });\n initialValue.set(Option.none());\n editorApi.set(Option.some(ea));\n });\n });\n })]),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function () {\n return editorApi.get().fold(function () {\n return initialValue.get().getOr('');\n }, function (ed) {\n return ed.getValue();\n });\n },\n setValue: function (component, value) {\n editorApi.get().fold(function () {\n initialValue.set(Option.some(value));\n }, function (ed) {\n return ed.setValue(value);\n });\n }\n }\n }),\n ComposingConfigs.self()\n ]),\n components: [memReplaced.asSpec()]\n };\n };\n\n var processors = objOf([\n defaulted$1('preprocess', identity),\n defaulted$1('postprocess', identity)\n ]);\n var memento$1 = function (mem, rawProcessors) {\n var ps = asRawOrDie('RepresentingConfigs.memento processors', processors, rawProcessors);\n return Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var other = mem.get(comp);\n var rawValue = Representing.getValue(other);\n return ps.postprocess(rawValue);\n },\n setValue: function (comp, rawValue) {\n var newValue = ps.preprocess(rawValue);\n var other = mem.get(comp);\n Representing.setValue(other, newValue);\n }\n }\n });\n };\n var withComp = function (optInitialValue, getter, setter) {\n return Representing.config(deepMerge({\n store: {\n mode: 'manual',\n getValue: getter,\n setValue: setter\n }\n }, optInitialValue.map(function (initialValue) {\n return { store: { initialValue: initialValue } };\n }).getOr({})));\n };\n var withElement = function (initialValue, getter, setter) {\n return withComp(initialValue, function (c) {\n return getter(c.element());\n }, function (c, v) {\n return setter(c.element(), v);\n });\n };\n var domValue = function (optInitialValue) {\n return withElement(optInitialValue, get$5, set$3);\n };\n var domHtml = function (optInitialValue) {\n return withElement(optInitialValue, get$1, set);\n };\n var memory$1 = function (initialValue) {\n return Representing.config({\n store: {\n mode: 'memory',\n initialValue: initialValue\n }\n });\n };\n var RepresentingConfigs = {\n memento: memento$1,\n withElement: withElement,\n withComp: withComp,\n domValue: domValue,\n domHtml: domHtml,\n memory: memory$1\n };\n\n var extensionsAccepted = '.jpg,.jpeg,.png,.gif';\n var filterByExtension = function (files) {\n var re = new RegExp('(' + extensionsAccepted.split(/\\s*,\\s*/).join('|') + ')$', 'i');\n return filter(from$1(files), function (file) {\n return re.test(file.name);\n });\n };\n var renderDropZone = function (spec, providersBackstage) {\n var stopper = function (_, se) {\n se.stop();\n };\n var sequence = function (actions) {\n return function (comp, se) {\n each(actions, function (a) {\n a(comp, se);\n });\n };\n };\n var onDrop = function (comp, se) {\n if (!Disabling.isDisabled(comp)) {\n var transferEvent = se.event().raw();\n handleFiles(comp, transferEvent.dataTransfer.files);\n }\n };\n var onSelect = function (component, simulatedEvent) {\n var files = simulatedEvent.event().raw().target.files;\n handleFiles(component, files);\n };\n var handleFiles = function (component, files) {\n Representing.setValue(component, filterByExtension(files));\n emitWith(component, formChangeEvent, { name: spec.name });\n };\n var memInput = record({\n dom: {\n tag: 'input',\n attributes: {\n type: 'file',\n accept: 'image/*'\n },\n styles: { display: 'none' }\n },\n behaviours: derive$1([config('input-file-events', [\n cutter(click()),\n cutter(tap())\n ])])\n });\n var renderField = function (s) {\n return {\n uid: s.uid,\n dom: {\n tag: 'div',\n classes: ['tox-dropzone-container']\n },\n behaviours: derive$1([\n RepresentingConfigs.memory([]),\n ComposingConfigs.self(),\n Disabling.config({}),\n Toggling.config({\n toggleClass: 'dragenter',\n toggleOnExecute: false\n }),\n config('dropzone-events', [\n run('dragenter', sequence([\n stopper,\n Toggling.toggle\n ])),\n run('dragleave', sequence([\n stopper,\n Toggling.toggle\n ])),\n run('dragover', stopper),\n run('drop', sequence([\n stopper,\n onDrop\n ])),\n run(change(), onSelect)\n ])\n ]),\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dropzone'],\n styles: {}\n },\n components: [\n {\n dom: {\n tag: 'p',\n innerHtml: providersBackstage.translate('Drop an image here')\n }\n },\n Button.sketch({\n dom: {\n tag: 'button',\n innerHtml: providersBackstage.translate('Browse for an image'),\n styles: { position: 'relative' },\n classes: [\n 'tox-button',\n 'tox-button--secondary'\n ]\n },\n components: [memInput.asSpec()],\n action: function (comp) {\n var inputComp = memInput.get(comp);\n inputComp.element().dom().click();\n },\n buttonBehaviours: derive$1([Tabstopping.config({})])\n })\n ]\n }]\n };\n };\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var pField = FormField.parts().field({ factory: { sketch: renderField } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n var renderGrid = function (spec, backstage) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-form__grid',\n 'tox-form__grid--' + spec.columns + 'col'\n ]\n },\n components: map(spec.items, backstage.interpreter)\n };\n };\n\n var beforeObject = generate$1('alloy-fake-before-tabstop');\n var afterObject = generate$1('alloy-fake-after-tabstop');\n var craftWithClasses = function (classes) {\n return {\n dom: {\n tag: 'div',\n styles: {\n width: '1px',\n height: '1px',\n outline: 'none'\n },\n attributes: { tabindex: '0' },\n classes: classes\n },\n behaviours: derive$1([\n Focusing.config({ ignore: true }),\n Tabstopping.config({})\n ])\n };\n };\n var craft = function (spec) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-navobj']\n },\n components: [\n craftWithClasses([beforeObject]),\n spec,\n craftWithClasses([afterObject])\n ],\n behaviours: derive$1([ComposingConfigs.childAt(1)])\n };\n };\n var triggerTab = function (placeholder, shiftKey) {\n emitWith(placeholder, keydown(), {\n raw: {\n which: 9,\n shiftKey: shiftKey\n }\n });\n };\n var onFocus$1 = function (container, targetComp) {\n var target = targetComp.element();\n if (has$2(target, beforeObject)) {\n triggerTab(container, true);\n } else if (has$2(target, afterObject)) {\n triggerTab(container, false);\n }\n };\n var isPseudoStop = function (element) {\n return closest$4(element, [\n '.' + beforeObject,\n '.' + afterObject\n ].join(','), constant(false));\n };\n var NavigableObject = {\n isPseudoStop: isPseudoStop,\n onFocus: onFocus$1,\n craft: craft\n };\n\n var platformNeedsSandboxing = !(detect$3().browser.isIE() || detect$3().browser.isEdge());\n var getDynamicSource = function (isSandbox) {\n var cachedValue = Cell('');\n return {\n getValue: function (frameComponent) {\n return cachedValue.get();\n },\n setValue: function (frameComponent, html) {\n if (!isSandbox) {\n set$1(frameComponent.element(), 'src', 'javascript:\\'\\'');\n var doc = frameComponent.element().dom().contentWindow.document;\n doc.open();\n doc.write(html);\n doc.close();\n } else {\n set$1(frameComponent.element(), 'srcdoc', html);\n }\n cachedValue.set(html);\n }\n };\n };\n var renderIFrame = function (spec, providersBackstage) {\n var isSandbox = platformNeedsSandboxing && spec.sandboxed;\n var attributes = __assign(__assign({}, spec.label.map(function (title) {\n return { title: title };\n }).getOr({})), isSandbox ? { sandbox: 'allow-scripts allow-same-origin' } : {});\n var sourcing = getDynamicSource(isSandbox);\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var factory = function (newSpec) {\n return NavigableObject.craft({\n uid: newSpec.uid,\n dom: {\n tag: 'iframe',\n attributes: attributes\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n RepresentingConfigs.withComp(Option.none(), sourcing.getValue, sourcing.setValue)\n ])\n });\n };\n var pField = FormField.parts().field({ factory: { sketch: factory } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n function create$5(width, height) {\n return resize(domGlobals.document.createElement('canvas'), width, height);\n }\n function clone$1(canvas) {\n var tCanvas = create$5(canvas.width, canvas.height);\n var ctx = get2dContext(tCanvas);\n ctx.drawImage(canvas, 0, 0);\n return tCanvas;\n }\n function get2dContext(canvas) {\n return canvas.getContext('2d');\n }\n function resize(canvas, width, height) {\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n\n function getWidth(image) {\n return image.naturalWidth || image.width;\n }\n function getHeight(image) {\n return image.naturalHeight || image.height;\n }\n\n var promise = function () {\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 window.setImmediate === 'function' && window.setImmediate || function (fn) {\n domGlobals.setTimeout(fn, 1);\n };\n function bind(fn, thisArg) {\n return function () {\n return fn.apply(thisArg, arguments);\n };\n }\n var isArray = Array.isArray || function (value) {\n return Object.prototype.toString.call(value) === '[object Array]';\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, _a = this._deferreds; _i < _a.length; _i++) {\n var deferred = _a[_i];\n handle.call(this, deferred);\n }\n this._deferreds = [];\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 values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var args = Array.prototype.slice.call(values.length === 1 && isArray(values[0]) ? values[0] : values);\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 (reason) {\n return new Promise(function (resolve, reject) {\n reject(reason);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n value.then(resolve, reject);\n }\n });\n };\n return Promise;\n };\n var Promise$1 = window.Promise ? window.Promise : promise();\n\n function blobToImage(blob) {\n return new Promise$1(function (resolve, reject) {\n var blobUrl = domGlobals.URL.createObjectURL(blob);\n var image = new domGlobals.Image();\n var removeListeners = function () {\n image.removeEventListener('load', loaded);\n image.removeEventListener('error', error);\n };\n function loaded() {\n removeListeners();\n resolve(image);\n }\n function error() {\n removeListeners();\n reject('Unable to load data of type ' + blob.type + ': ' + blobUrl);\n }\n image.addEventListener('load', loaded);\n image.addEventListener('error', error);\n image.src = blobUrl;\n if (image.complete) {\n loaded();\n }\n });\n }\n function dataUriToBlobSync(uri) {\n var data = uri.split(',');\n var matches = /data:([^;]+)/.exec(data[0]);\n if (!matches) {\n return Option.none();\n }\n var mimetype = matches[1];\n var base64 = data[1];\n var sliceSize = 1024;\n var byteCharacters = domGlobals.atob(base64);\n var bytesLength = byteCharacters.length;\n var slicesCount = Math.ceil(bytesLength / sliceSize);\n var byteArrays = new Array(slicesCount);\n for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\n var begin = sliceIndex * sliceSize;\n var end = Math.min(begin + sliceSize, bytesLength);\n var bytes = new Array(end - begin);\n for (var offset = begin, i = 0; offset < end; ++i, ++offset) {\n bytes[i] = byteCharacters[offset].charCodeAt(0);\n }\n byteArrays[sliceIndex] = new Uint8Array(bytes);\n }\n return Option.some(new domGlobals.Blob(byteArrays, { type: mimetype }));\n }\n function dataUriToBlob(uri) {\n return new Promise$1(function (resolve, reject) {\n dataUriToBlobSync(uri).fold(function () {\n reject('uri is not base64: ' + uri);\n }, resolve);\n });\n }\n function canvasToBlob(canvas, type, quality) {\n type = type || 'image/png';\n if (domGlobals.HTMLCanvasElement.prototype.toBlob) {\n return new Promise$1(function (resolve, reject) {\n canvas.toBlob(function (blob) {\n if (blob) {\n resolve(blob);\n } else {\n reject();\n }\n }, type, quality);\n });\n } else {\n return dataUriToBlob(canvas.toDataURL(type, quality));\n }\n }\n function canvasToDataURL(canvas, type, quality) {\n type = type || 'image/png';\n return canvas.toDataURL(type, quality);\n }\n function blobToCanvas(blob) {\n return blobToImage(blob).then(function (image) {\n revokeImageUrl(image);\n var canvas = create$5(getWidth(image), getHeight(image));\n var context = get2dContext(canvas);\n context.drawImage(image, 0, 0);\n return canvas;\n });\n }\n function blobToDataUri(blob) {\n return new Promise$1(function (resolve) {\n var reader = new domGlobals.FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n }\n function revokeImageUrl(image) {\n domGlobals.URL.revokeObjectURL(image.src);\n }\n\n function create$6(getCanvas, blob, uri) {\n var initialType = blob.type;\n var getType = constant(initialType);\n function toBlob() {\n return Promise$1.resolve(blob);\n }\n function toDataURL() {\n return uri;\n }\n function toBase64() {\n return uri.split(',')[1];\n }\n function toAdjustedBlob(type, quality) {\n return getCanvas.then(function (canvas) {\n return canvasToBlob(canvas, type, quality);\n });\n }\n function toAdjustedDataURL(type, quality) {\n return getCanvas.then(function (canvas) {\n return canvasToDataURL(canvas, type, quality);\n });\n }\n function toAdjustedBase64(type, quality) {\n return toAdjustedDataURL(type, quality).then(function (dataurl) {\n return dataurl.split(',')[1];\n });\n }\n function toCanvas() {\n return getCanvas.then(clone$1);\n }\n return {\n getType: getType,\n toBlob: toBlob,\n toDataURL: toDataURL,\n toBase64: toBase64,\n toAdjustedBlob: toAdjustedBlob,\n toAdjustedDataURL: toAdjustedDataURL,\n toAdjustedBase64: toAdjustedBase64,\n toCanvas: toCanvas\n };\n }\n function fromBlob(blob) {\n return blobToDataUri(blob).then(function (uri) {\n return create$6(blobToCanvas(blob), blob, uri);\n });\n }\n function fromCanvas(canvas, type) {\n return canvasToBlob(canvas, type).then(function (blob) {\n return create$6(Promise$1.resolve(canvas), blob, canvas.toDataURL());\n });\n }\n\n var blobToImageResult = function (blob) {\n return fromBlob(blob);\n };\n\n function clamp$1(value, min, max) {\n var parsedValue = typeof value === 'string' ? parseFloat(value) : value;\n if (parsedValue > max) {\n parsedValue = max;\n } else if (parsedValue < min) {\n parsedValue = min;\n }\n return parsedValue;\n }\n function identity$1() {\n return [\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ];\n }\n var DELTA_INDEX = [\n 0,\n 0.01,\n 0.02,\n 0.04,\n 0.05,\n 0.06,\n 0.07,\n 0.08,\n 0.1,\n 0.11,\n 0.12,\n 0.14,\n 0.15,\n 0.16,\n 0.17,\n 0.18,\n 0.2,\n 0.21,\n 0.22,\n 0.24,\n 0.25,\n 0.27,\n 0.28,\n 0.3,\n 0.32,\n 0.34,\n 0.36,\n 0.38,\n 0.4,\n 0.42,\n 0.44,\n 0.46,\n 0.48,\n 0.5,\n 0.53,\n 0.56,\n 0.59,\n 0.62,\n 0.65,\n 0.68,\n 0.71,\n 0.74,\n 0.77,\n 0.8,\n 0.83,\n 0.86,\n 0.89,\n 0.92,\n 0.95,\n 0.98,\n 1,\n 1.06,\n 1.12,\n 1.18,\n 1.24,\n 1.3,\n 1.36,\n 1.42,\n 1.48,\n 1.54,\n 1.6,\n 1.66,\n 1.72,\n 1.78,\n 1.84,\n 1.9,\n 1.96,\n 2,\n 2.12,\n 2.25,\n 2.37,\n 2.5,\n 2.62,\n 2.75,\n 2.87,\n 3,\n 3.2,\n 3.4,\n 3.6,\n 3.8,\n 4,\n 4.3,\n 4.7,\n 4.9,\n 5,\n 5.5,\n 6,\n 6.5,\n 6.8,\n 7,\n 7.3,\n 7.5,\n 7.8,\n 8,\n 8.4,\n 8.7,\n 9,\n 9.4,\n 9.6,\n 9.8,\n 10\n ];\n function multiply(matrix1, matrix2) {\n var col = [];\n var out = new Array(25);\n var val;\n for (var i = 0; i < 5; i++) {\n for (var j = 0; j < 5; j++) {\n col[j] = matrix2[j + i * 5];\n }\n for (var j = 0; j < 5; j++) {\n val = 0;\n for (var k = 0; k < 5; k++) {\n val += matrix1[j + k * 5] * col[k];\n }\n out[j + i * 5] = val;\n }\n }\n return out;\n }\n function adjustContrast(matrix, value) {\n var x;\n value = clamp$1(value, -1, 1);\n value *= 100;\n if (value < 0) {\n x = 127 + value / 100 * 127;\n } else {\n x = value % 1;\n if (x === 0) {\n x = DELTA_INDEX[value];\n } else {\n x = DELTA_INDEX[Math.floor(value)] * (1 - x) + DELTA_INDEX[Math.floor(value) + 1] * x;\n }\n x = x * 127 + 127;\n }\n return multiply(matrix, [\n x / 127,\n 0,\n 0,\n 0,\n 0.5 * (127 - x),\n 0,\n x / 127,\n 0,\n 0,\n 0.5 * (127 - x),\n 0,\n 0,\n x / 127,\n 0,\n 0.5 * (127 - x),\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n }\n function adjustBrightness(matrix, value) {\n value = clamp$1(255 * value, -255, 255);\n return multiply(matrix, [\n 1,\n 0,\n 0,\n 0,\n value,\n 0,\n 1,\n 0,\n 0,\n value,\n 0,\n 0,\n 1,\n 0,\n value,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n }\n function adjustColors(matrix, adjustR, adjustG, adjustB) {\n adjustR = clamp$1(adjustR, 0, 2);\n adjustG = clamp$1(adjustG, 0, 2);\n adjustB = clamp$1(adjustB, 0, 2);\n return multiply(matrix, [\n adjustR,\n 0,\n 0,\n 0,\n 0,\n 0,\n adjustG,\n 0,\n 0,\n 0,\n 0,\n 0,\n adjustB,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n }\n\n function colorFilter(ir, matrix) {\n return ir.toCanvas().then(function (canvas) {\n return applyColorFilter(canvas, ir.getType(), matrix);\n });\n }\n function applyColorFilter(canvas, type, matrix) {\n var context = get2dContext(canvas);\n function applyMatrix(pixelsData, m) {\n var r, g, b, a;\n var data = pixelsData.data, m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5], m6 = m[6], m7 = m[7], m8 = m[8], m9 = m[9], m10 = m[10], m11 = m[11], m12 = m[12], m13 = m[13], m14 = m[14], m15 = m[15], m16 = m[16], m17 = m[17], m18 = m[18], m19 = m[19];\n for (var i = 0; i < data.length; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n a = data[i + 3];\n data[i] = r * m0 + g * m1 + b * m2 + a * m3 + m4;\n data[i + 1] = r * m5 + g * m6 + b * m7 + a * m8 + m9;\n data[i + 2] = r * m10 + g * m11 + b * m12 + a * m13 + m14;\n data[i + 3] = r * m15 + g * m16 + b * m17 + a * m18 + m19;\n }\n return pixelsData;\n }\n var pixels = applyMatrix(context.getImageData(0, 0, canvas.width, canvas.height), matrix);\n context.putImageData(pixels, 0, 0);\n return fromCanvas(canvas, type);\n }\n function convoluteFilter(ir, matrix) {\n return ir.toCanvas().then(function (canvas) {\n return applyConvoluteFilter(canvas, ir.getType(), matrix);\n });\n }\n function applyConvoluteFilter(canvas, type, matrix) {\n var context = get2dContext(canvas);\n function applyMatrix(pIn, pOut, aMatrix) {\n function clamp(value, min, max) {\n if (value > max) {\n value = max;\n } else if (value < min) {\n value = min;\n }\n return value;\n }\n var side = Math.round(Math.sqrt(aMatrix.length));\n var halfSide = Math.floor(side / 2);\n var rgba = pIn.data;\n var drgba = pOut.data;\n var w = pIn.width;\n var h = pIn.height;\n for (var y = 0; y < h; y++) {\n for (var x = 0; x < w; x++) {\n var r = 0;\n var g = 0;\n var b = 0;\n for (var cy = 0; cy < side; cy++) {\n for (var cx = 0; cx < side; cx++) {\n var scx = clamp(x + cx - halfSide, 0, w - 1);\n var scy = clamp(y + cy - halfSide, 0, h - 1);\n var innerOffset = (scy * w + scx) * 4;\n var wt = aMatrix[cy * side + cx];\n r += rgba[innerOffset] * wt;\n g += rgba[innerOffset + 1] * wt;\n b += rgba[innerOffset + 2] * wt;\n }\n }\n var offset = (y * w + x) * 4;\n drgba[offset] = clamp(r, 0, 255);\n drgba[offset + 1] = clamp(g, 0, 255);\n drgba[offset + 2] = clamp(b, 0, 255);\n }\n }\n return pOut;\n }\n var pixelsIn = context.getImageData(0, 0, canvas.width, canvas.height);\n var pixelsOut = context.getImageData(0, 0, canvas.width, canvas.height);\n pixelsOut = applyMatrix(pixelsIn, pixelsOut, matrix);\n context.putImageData(pixelsOut, 0, 0);\n return fromCanvas(canvas, type);\n }\n function functionColorFilter(colorFn) {\n var filterImpl = function (canvas, type, value) {\n var context = get2dContext(canvas);\n var lookup = new Array(256);\n function applyLookup(pixelsData, lookupData) {\n var data = pixelsData.data;\n for (var i = 0; i < data.length; i += 4) {\n data[i] = lookupData[data[i]];\n data[i + 1] = lookupData[data[i + 1]];\n data[i + 2] = lookupData[data[i + 2]];\n }\n return pixelsData;\n }\n for (var i = 0; i < lookup.length; i++) {\n lookup[i] = colorFn(i, value);\n }\n var pixels = applyLookup(context.getImageData(0, 0, canvas.width, canvas.height), lookup);\n context.putImageData(pixels, 0, 0);\n return fromCanvas(canvas, type);\n };\n return function (ir, value) {\n return ir.toCanvas().then(function (canvas) {\n return filterImpl(canvas, ir.getType(), value);\n });\n };\n }\n function complexAdjustableColorFilter(matrixAdjustFn) {\n return function (ir, adjust) {\n return colorFilter(ir, matrixAdjustFn(identity$1(), adjust));\n };\n }\n function basicColorFilter(matrix) {\n return function (ir) {\n return colorFilter(ir, matrix);\n };\n }\n function basicConvolutionFilter(kernel) {\n return function (ir) {\n return convoluteFilter(ir, kernel);\n };\n }\n var invert = basicColorFilter([\n -1,\n 0,\n 0,\n 0,\n 255,\n 0,\n -1,\n 0,\n 0,\n 255,\n 0,\n 0,\n -1,\n 0,\n 255,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n var brightness = complexAdjustableColorFilter(adjustBrightness);\n var contrast = complexAdjustableColorFilter(adjustContrast);\n var colorize = function (ir, adjustR, adjustG, adjustB) {\n return colorFilter(ir, adjustColors(identity$1(), adjustR, adjustG, adjustB));\n };\n var sharpen = basicConvolutionFilter([\n 0,\n -1,\n 0,\n -1,\n 5,\n -1,\n 0,\n -1,\n 0\n ]);\n var gamma = functionColorFilter(function (color, value) {\n return Math.pow(color / 255, 1 - value) * 255;\n });\n\n function scale(image, dW, dH) {\n var sW = getWidth(image);\n var sH = getHeight(image);\n var wRatio = dW / sW;\n var hRatio = dH / sH;\n var scaleCapped = false;\n if (wRatio < 0.5 || wRatio > 2) {\n wRatio = wRatio < 0.5 ? 0.5 : 2;\n scaleCapped = true;\n }\n if (hRatio < 0.5 || hRatio > 2) {\n hRatio = hRatio < 0.5 ? 0.5 : 2;\n scaleCapped = true;\n }\n var scaled = _scale(image, wRatio, hRatio);\n return !scaleCapped ? scaled : scaled.then(function (tCanvas) {\n return scale(tCanvas, dW, dH);\n });\n }\n function _scale(image, wRatio, hRatio) {\n return new Promise$1(function (resolve) {\n var sW = getWidth(image);\n var sH = getHeight(image);\n var dW = Math.floor(sW * wRatio);\n var dH = Math.floor(sH * hRatio);\n var canvas = create$5(dW, dH);\n var context = get2dContext(canvas);\n context.drawImage(image, 0, 0, sW, sH, 0, 0, dW, dH);\n resolve(canvas);\n });\n }\n\n function rotate(ir, angle) {\n return ir.toCanvas().then(function (canvas) {\n return applyRotate(canvas, ir.getType(), angle);\n });\n }\n function applyRotate(image, type, angle) {\n var canvas = create$5(image.width, image.height);\n var context = get2dContext(canvas);\n var translateX = 0;\n var translateY = 0;\n angle = angle < 0 ? 360 + angle : angle;\n if (angle === 90 || angle === 270) {\n resize(canvas, canvas.height, canvas.width);\n }\n if (angle === 90 || angle === 180) {\n translateX = canvas.width;\n }\n if (angle === 270 || angle === 180) {\n translateY = canvas.height;\n }\n context.translate(translateX, translateY);\n context.rotate(angle * Math.PI / 180);\n context.drawImage(image, 0, 0);\n return fromCanvas(canvas, type);\n }\n function flip(ir, axis) {\n return ir.toCanvas().then(function (canvas) {\n return applyFlip(canvas, ir.getType(), axis);\n });\n }\n function applyFlip(image, type, axis) {\n var canvas = create$5(image.width, image.height);\n var context = get2dContext(canvas);\n if (axis === 'v') {\n context.scale(1, -1);\n context.drawImage(image, 0, -canvas.height);\n } else {\n context.scale(-1, 1);\n context.drawImage(image, -canvas.width, 0);\n }\n return fromCanvas(canvas, type);\n }\n function crop(ir, x, y, w, h) {\n return ir.toCanvas().then(function (canvas) {\n return applyCrop(canvas, ir.getType(), x, y, w, h);\n });\n }\n function applyCrop(image, type, x, y, w, h) {\n var canvas = create$5(w, h);\n var context = get2dContext(canvas);\n context.drawImage(image, -x, -y);\n return fromCanvas(canvas, type);\n }\n function resize$1(ir, w, h) {\n return ir.toCanvas().then(function (canvas) {\n return scale(canvas, w, h).then(function (newCanvas) {\n return fromCanvas(newCanvas, ir.getType());\n });\n });\n }\n\n var invert$1 = function (ir) {\n return invert(ir);\n };\n var sharpen$1 = function (ir) {\n return sharpen(ir);\n };\n var gamma$1 = function (ir, value) {\n return gamma(ir, value);\n };\n var colorize$1 = function (ir, adjustR, adjustG, adjustB) {\n return colorize(ir, adjustR, adjustG, adjustB);\n };\n var brightness$1 = function (ir, adjust) {\n return brightness(ir, adjust);\n };\n var contrast$1 = function (ir, adjust) {\n return contrast(ir, adjust);\n };\n var flip$1 = function (ir, axis) {\n return flip(ir, axis);\n };\n var crop$1 = function (ir, x, y, w, h) {\n return crop(ir, x, y, w, h);\n };\n var resize$2 = function (ir, w, h) {\n return resize$1(ir, w, h);\n };\n var rotate$1 = function (ir, angle) {\n return rotate(ir, angle);\n };\n\n var renderIcon$1 = function (iconHtml, behaviours) {\n return __assign({\n dom: {\n tag: 'span',\n innerHtml: iconHtml,\n classes: [\n 'tox-icon',\n 'tox-tbtn__icon-wrap'\n ]\n }\n }, behaviours);\n };\n var renderIconFromPack = function (iconName, iconsProvider) {\n return renderIcon$1(get$d(iconName, iconsProvider), {});\n };\n var renderReplacableIconFromPack = function (iconName, iconsProvider) {\n return renderIcon$1(get$d(iconName, iconsProvider), { behaviours: derive$1([Replacing.config({})]) });\n };\n var renderLabel$1 = function (text, prefix, providersBackstage) {\n return {\n dom: {\n tag: 'span',\n innerHtml: providersBackstage.translate(text),\n classes: [prefix + '__select-label']\n },\n behaviours: derive$1([Replacing.config({})])\n };\n };\n\n var internalToolbarButtonExecute = generate$1('toolbar.button.execute');\n var onToolbarButtonExecute = function (info) {\n return runOnExecute(function (comp, simulatedEvent) {\n runWithApi(info, comp)(function (itemApi) {\n emitWith(comp, internalToolbarButtonExecute, { buttonApi: itemApi });\n info.onAction(itemApi);\n });\n });\n };\n var toolbarButtonEventOrder = {\n 'alloy.execute': [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'toolbar-button-events'\n ]\n };\n\n var updateMenuText = generate$1('update-menu-text');\n var updateMenuIcon = generate$1('update-menu-icon');\n var renderCommonDropdown = function (spec, prefix, sharedBackstage) {\n var editorOffCell = Cell(noop);\n var optMemDisplayText = spec.text.map(function (text) {\n return record(renderLabel$1(text, prefix, sharedBackstage.providers));\n });\n var optMemDisplayIcon = spec.icon.map(function (iconName) {\n return record(renderReplacableIconFromPack(iconName, sharedBackstage.providers.icons));\n });\n var onLeftOrRightInMenu = function (comp, se) {\n var dropdown = Representing.getValue(comp);\n Focusing.focus(dropdown);\n emitWith(dropdown, 'keydown', { raw: se.event().raw() });\n Dropdown.close(dropdown);\n return Option.some(true);\n };\n var role = spec.role.fold(function () {\n return {};\n }, function (role) {\n return { role: role };\n });\n var tooltipAttributes = spec.tooltip.fold(function () {\n return {};\n }, function (tooltip) {\n var translatedTooltip = sharedBackstage.providers.translate(tooltip);\n return {\n 'title': translatedTooltip,\n 'aria-label': translatedTooltip\n };\n });\n var memDropdown = record(Dropdown.sketch(__assign(__assign({}, role), {\n dom: {\n tag: 'button',\n classes: [\n prefix,\n prefix + '--select'\n ].concat(map(spec.classes, function (c) {\n return prefix + '--' + c;\n })),\n attributes: __assign({}, tooltipAttributes)\n },\n components: componentRenderPipeline([\n optMemDisplayIcon.map(function (mem) {\n return mem.asSpec();\n }),\n optMemDisplayText.map(function (mem) {\n return mem.asSpec();\n }),\n Option.some({\n dom: {\n tag: 'div',\n classes: [prefix + '__select-chevron'],\n innerHtml: get$d('chevron-down', sharedBackstage.providers.icons)\n }\n })\n ]),\n matchWidth: true,\n useMinWidth: true,\n dropdownBehaviours: derive$1(__spreadArrays(spec.dropdownBehaviours, [\n DisablingConfigs.button(spec.disabled),\n Unselecting.config({}),\n Replacing.config({}),\n config('dropdown-events', [\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n config('menubutton-update-display-text', [\n run(updateMenuText, function (comp, se) {\n optMemDisplayText.bind(function (mem) {\n return mem.getOpt(comp);\n }).each(function (displayText) {\n Replacing.set(displayText, [text(sharedBackstage.providers.translate(se.event().text()))]);\n });\n }),\n run(updateMenuIcon, function (comp, se) {\n optMemDisplayIcon.bind(function (mem) {\n return mem.getOpt(comp);\n }).each(function (displayIcon) {\n Replacing.set(displayIcon, [renderReplacableIconFromPack(se.event().icon(), sharedBackstage.providers.icons)]);\n });\n })\n ])\n ])),\n eventOrder: deepMerge(toolbarButtonEventOrder, {\n mousedown: [\n 'focusing',\n 'alloy.base.behaviour',\n 'item-type-events',\n 'normal-dropdown-events'\n ]\n }),\n sandboxBehaviours: derive$1([Keying.config({\n mode: 'special',\n onLeft: onLeftOrRightInMenu,\n onRight: onLeftOrRightInMenu\n })]),\n lazySink: sharedBackstage.getSink,\n toggleClass: prefix + '--active',\n parts: { menu: part(false, spec.columns, spec.presets) },\n fetch: function () {\n return Future.nu(spec.fetch);\n }\n })));\n return memDropdown.asSpec();\n };\n\n var isMenuItemReference = function (item) {\n return isString(item);\n };\n var isSeparator = function (item) {\n return item.type === 'separator';\n };\n var isExpandingMenuItem = function (item) {\n return has(item, 'getSubmenuItems');\n };\n var separator$1 = { type: 'separator' };\n var unwrapReferences = function (items, menuItems) {\n var realItems = foldl(items, function (acc, item) {\n if (isMenuItemReference(item)) {\n if (item === '') {\n return acc;\n } else if (item === '|') {\n return acc.length > 0 && !isSeparator(acc[acc.length - 1]) ? acc.concat([separator$1]) : acc;\n } else if (has(menuItems, item.toLowerCase())) {\n return acc.concat([menuItems[item.toLowerCase()]]);\n } else {\n return acc;\n }\n } else {\n return acc.concat([item]);\n }\n }, []);\n if (realItems.length > 0 && isSeparator(realItems[realItems.length - 1])) {\n realItems.pop();\n }\n return realItems;\n };\n var getFromExpandingItem = function (item, menuItems) {\n var submenuItems = item.getSubmenuItems();\n var rest = expand(submenuItems, menuItems);\n var newMenus = deepMerge(rest.menus, wrap$1(item.value, rest.items));\n var newExpansions = deepMerge(rest.expansions, wrap$1(item.value, item.value));\n return {\n item: item,\n menus: newMenus,\n expansions: newExpansions\n };\n };\n var getFromItem = function (item, menuItems) {\n return isExpandingMenuItem(item) ? getFromExpandingItem(item, menuItems) : {\n item: item,\n menus: {},\n expansions: {}\n };\n };\n var generateValueIfRequired = function (item) {\n if (isSeparator(item)) {\n return item;\n } else {\n var itemValue = get(item, 'value').getOrThunk(function () {\n return generate$1('generated-menu-item');\n });\n return deepMerge({ value: itemValue }, item);\n }\n };\n var expand = function (items, menuItems) {\n var realItems = unwrapReferences(isString(items) ? items.split(' ') : items, menuItems);\n return foldr(realItems, function (acc, item) {\n var itemWithValue = generateValueIfRequired(item);\n var newData = getFromItem(itemWithValue, menuItems);\n return {\n menus: deepMerge(acc.menus, newData.menus),\n items: [newData.item].concat(acc.items),\n expansions: deepMerge(acc.expansions, newData.expansions)\n };\n }, {\n menus: {},\n expansions: {},\n items: []\n });\n };\n\n var build$2 = function (items, itemResponse, backstage, isHorizontalMenu) {\n var primary = generate$1('primary-menu');\n var data = expand(items, backstage.shared.providers.menuItems());\n if (data.items.length === 0) {\n return Option.none();\n }\n var mainMenu = createPartialMenu(primary, data.items, itemResponse, backstage, isHorizontalMenu);\n var submenus = map$1(data.menus, function (menuItems, menuName) {\n return createPartialMenu(menuName, menuItems, itemResponse, backstage, false);\n });\n var menus = deepMerge(submenus, wrap$1(primary, mainMenu));\n return Option.from(tieredMenu.tieredData(primary, menus, data.expansions));\n };\n\n var getMenuButtonApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n },\n setActive: function (state) {\n var elm = component.element();\n if (state) {\n add$2(elm, 'tox-tbtn--enabled');\n set$1(elm, 'aria-pressed', true);\n } else {\n remove$4(elm, 'tox-tbtn--enabled');\n remove$1(elm, 'aria-pressed');\n }\n },\n isActive: function () {\n return has$2(component.element(), 'tox-tbtn--enabled');\n }\n };\n };\n var renderMenuButton = function (spec, prefix, backstage, role) {\n return renderCommonDropdown({\n text: spec.text,\n icon: spec.icon,\n tooltip: spec.tooltip,\n role: role,\n fetch: function (callback) {\n spec.fetch(function (items) {\n callback(build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false));\n });\n },\n onSetup: spec.onSetup,\n getApi: getMenuButtonApi,\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [Tabstopping.config({})]\n }, prefix, backstage.shared);\n };\n var getFetch$1 = function (items, getButton, backstage) {\n var getMenuItemAction = function (item) {\n return function (api) {\n var newValue = !api.isActive();\n api.setActive(newValue);\n item.storage.set(newValue);\n backstage.shared.getSink().each(function (sink) {\n getButton().getOpt(sink).each(function (orig) {\n focus$1(orig.element());\n emitWith(orig, formActionEvent, {\n name: item.name,\n value: item.storage.get()\n });\n });\n });\n };\n };\n var getMenuItemSetup = function (item) {\n return function (api) {\n api.setActive(item.storage.get());\n };\n };\n return function (success) {\n success(map(items, function (item) {\n var text = item.text.fold(function () {\n return {};\n }, function (text) {\n return { text: text };\n });\n return __assign(__assign({\n type: item.type,\n active: false\n }, text), {\n onAction: getMenuItemAction(item),\n onSetup: getMenuItemSetup(item)\n });\n }));\n };\n };\n\n var renderCommonSpec = function (spec, actionOpt, extraBehaviours, dom, components) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var action = actionOpt.fold(function () {\n return {};\n }, function (action) {\n return { action: action };\n });\n var common = __assign({\n buttonBehaviours: derive$1([\n DisablingConfigs.button(spec.disabled),\n Tabstopping.config({}),\n config('button press', [\n preventDefault('click'),\n preventDefault('mousedown')\n ])\n ].concat(extraBehaviours)),\n eventOrder: {\n click: [\n 'button press',\n 'alloy.base.behaviour'\n ],\n mousedown: [\n 'button press',\n 'alloy.base.behaviour'\n ]\n }\n }, action);\n var domFinal = deepMerge(common, { dom: dom });\n return deepMerge(domFinal, { components: components });\n };\n var renderIconButtonSpec = function (spec, action, providersBackstage, extraBehaviours) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var tooltipAttributes = spec.tooltip.map(function (tooltip) {\n return {\n 'aria-label': providersBackstage.translate(tooltip),\n 'title': providersBackstage.translate(tooltip)\n };\n }).getOr({});\n var dom = {\n tag: 'button',\n classes: ['tox-tbtn'],\n attributes: tooltipAttributes\n };\n var icon = spec.icon.map(function (iconName) {\n return renderIconFromPack(iconName, providersBackstage.icons);\n });\n var components = componentRenderPipeline([icon]);\n return renderCommonSpec(spec, action, extraBehaviours, dom, components);\n };\n var renderIconButton = function (spec, action, providersBackstage, extraBehaviours) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var iconButtonSpec = renderIconButtonSpec(spec, Option.some(action), providersBackstage, extraBehaviours);\n return Button.sketch(iconButtonSpec);\n };\n var renderButtonSpec = function (spec, action, providersBackstage, extraBehaviours, extraClasses) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n if (extraClasses === void 0) {\n extraClasses = [];\n }\n var translatedText = providersBackstage.translate(spec.text);\n var icon = spec.icon ? spec.icon.map(function (iconName) {\n return renderIconFromPack(iconName, providersBackstage.icons);\n }) : Option.none();\n var components = icon.isSome() ? componentRenderPipeline([icon]) : [];\n var innerHtml = icon.isSome() ? {} : { innerHtml: translatedText };\n var classes = __spreadArrays(!spec.primary && !spec.borderless ? [\n 'tox-button',\n 'tox-button--secondary'\n ] : ['tox-button'], icon.isSome() ? ['tox-button--icon'] : [], spec.borderless ? ['tox-button--naked'] : [], extraClasses);\n var dom = __assign(__assign({\n tag: 'button',\n classes: classes\n }, innerHtml), { attributes: { title: translatedText } });\n return renderCommonSpec(spec, action, extraBehaviours, dom, components);\n };\n var renderButton = function (spec, action, providersBackstage, extraBehaviours, extraClasses) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n if (extraClasses === void 0) {\n extraClasses = [];\n }\n var buttonSpec = renderButtonSpec(spec, Option.some(action), providersBackstage, extraBehaviours, extraClasses);\n return Button.sketch(buttonSpec);\n };\n var getAction = function (name, buttonType) {\n return function (comp) {\n if (buttonType === 'custom') {\n emitWith(comp, formActionEvent, {\n name: name,\n value: {}\n });\n } else if (buttonType === 'submit') {\n emit(comp, formSubmitEvent);\n } else if (buttonType === 'cancel') {\n emit(comp, formCancelEvent);\n } else {\n domGlobals.console.error('Unknown button type: ', buttonType);\n }\n };\n };\n var isMenuFooterButtonSpec = function (spec, buttonType) {\n return buttonType === 'menu';\n };\n var isNormalFooterButtonSpec = function (spec, buttonType) {\n return buttonType === 'custom' || buttonType === 'cancel' || buttonType === 'submit';\n };\n var renderFooterButton = function (spec, buttonType, backstage) {\n if (isMenuFooterButtonSpec(spec, buttonType)) {\n var getButton = function () {\n return memButton_1;\n };\n var menuButtonSpec = spec;\n var fixedSpec = __assign(__assign({}, spec), {\n onSetup: function (api) {\n api.setDisabled(spec.disabled);\n return noop;\n },\n fetch: getFetch$1(menuButtonSpec.items, getButton, backstage)\n });\n var memButton_1 = record(renderMenuButton(fixedSpec, 'tox-tbtn', backstage, Option.none()));\n return memButton_1.asSpec();\n } else if (isNormalFooterButtonSpec(spec, buttonType)) {\n var action = getAction(spec.name, buttonType);\n var buttonSpec = __assign(__assign({}, spec), { borderless: false });\n return renderButton(buttonSpec, action, backstage.shared.providers, []);\n } else {\n domGlobals.console.error('Unknown footer button type: ', buttonType);\n }\n };\n var renderDialogButton = function (spec, providersBackstage) {\n var action = getAction(spec.name, 'custom');\n return renderFormField(Option.none(), FormField.parts().field(__assign({ factory: Button }, renderButtonSpec(spec, Option.some(action), providersBackstage, [\n RepresentingConfigs.memory(''),\n ComposingConfigs.self()\n ]))));\n };\n\n var schema$i = constant([\n defaulted$1('field1Name', 'field1'),\n defaulted$1('field2Name', 'field2'),\n onStrictHandler('onLockedChange'),\n markers(['lockClass']),\n defaulted$1('locked', false),\n SketchBehaviours.field('coupledFieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n var getField = function (comp, detail, partName) {\n return getPart(comp, detail, partName).bind(Composing.getCurrent);\n };\n var coupledPart = function (selfName, otherName) {\n return required({\n factory: FormField,\n name: selfName,\n overrides: function (detail) {\n return {\n fieldBehaviours: derive$1([config('coupled-input-behaviour', [run(input(), function (me) {\n getField(me, detail, otherName).each(function (other) {\n getPart(me, detail, 'lock').each(function (lock) {\n if (Toggling.isOn(lock)) {\n detail.onLockedChange(me, other, lock);\n }\n });\n });\n })])])\n };\n }\n });\n };\n var parts$5 = constant([\n coupledPart('field1', 'field2'),\n coupledPart('field2', 'field1'),\n required({\n factory: Button,\n schema: [strict$1('dom')],\n name: 'lock',\n overrides: function (detail) {\n return {\n buttonBehaviours: derive$1([Toggling.config({\n selected: detail.locked,\n toggleClass: detail.markers.lockClass,\n aria: { mode: 'pressed' }\n })])\n };\n }\n })\n ]);\n\n var factory$7 = function (detail, components, spec, externals) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: SketchBehaviours.augment(detail.coupledFieldBehaviours, [\n Composing.config({ find: Option.some }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var _a;\n var parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n return _a = {}, _a[detail.field1Name] = Representing.getValue(parts.field1()), _a[detail.field2Name] = Representing.getValue(parts.field2()), _a;\n },\n setValue: function (comp, value) {\n var parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n if (hasNonNullableKey(value, detail.field1Name)) {\n Representing.setValue(parts.field1(), value[detail.field1Name]);\n }\n if (hasNonNullableKey(value, detail.field2Name)) {\n Representing.setValue(parts.field2(), value[detail.field2Name]);\n }\n }\n }\n })\n ]),\n apis: {\n getField1: function (component) {\n return getPart(component, detail, 'field1');\n },\n getField2: function (component) {\n return getPart(component, detail, 'field2');\n },\n getLock: function (component) {\n return getPart(component, detail, 'lock');\n }\n }\n };\n };\n var FormCoupledInputs = composite$1({\n name: 'FormCoupledInputs',\n configFields: schema$i(),\n partFields: parts$5(),\n factory: factory$7,\n apis: {\n getField1: function (apis, component) {\n return apis.getField1(component);\n },\n getField2: function (apis, component) {\n return apis.getField2(component);\n },\n getLock: function (apis, component) {\n return apis.getLock(component);\n }\n }\n });\n\n var formatSize = function (size) {\n var unitDec = {\n '': 0,\n 'px': 0,\n 'pt': 1,\n 'mm': 1,\n 'pc': 2,\n 'ex': 2,\n 'em': 2,\n 'ch': 2,\n 'rem': 2,\n 'cm': 3,\n 'in': 4,\n '%': 4\n };\n var maxDecimal = function (unit) {\n return unit in unitDec ? unitDec[unit] : 1;\n };\n var numText = size.value.toFixed(maxDecimal(size.unit));\n if (numText.indexOf('.') !== -1) {\n numText = numText.replace(/\\.?0*$/, '');\n }\n return numText + size.unit;\n };\n var parseSize = function (sizeText) {\n var numPattern = /^\\s*(\\d+(?:\\.\\d+)?)\\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\\s*$/;\n var match = numPattern.exec(sizeText);\n if (match !== null) {\n var value = parseFloat(match[1]);\n var unit = match[2];\n return Result.value({\n value: value,\n unit: unit\n });\n } else {\n return Result.error(sizeText);\n }\n };\n var convertUnit = function (size, unit) {\n var inInch = {\n '': 96,\n 'px': 96,\n 'pt': 72,\n 'cm': 2.54,\n 'pc': 12,\n 'mm': 25.4,\n 'in': 1\n };\n var supported = function (u) {\n return Object.prototype.hasOwnProperty.call(inInch, u);\n };\n if (size.unit === unit) {\n return Option.some(size.value);\n } else if (supported(size.unit) && supported(unit)) {\n if (inInch[size.unit] === inInch[unit]) {\n return Option.some(size.value);\n } else {\n return Option.some(size.value / inInch[size.unit] * inInch[unit]);\n }\n } else {\n return Option.none();\n }\n };\n var noSizeConversion = function (input) {\n return Option.none();\n };\n var ratioSizeConversion = function (scale, unit) {\n return function (size) {\n return convertUnit(size, unit).map(function (value) {\n return {\n value: value * scale,\n unit: unit\n };\n });\n };\n };\n var makeRatioConverter = function (currentFieldText, otherFieldText) {\n var cValue = parseSize(currentFieldText).toOption();\n var oValue = parseSize(otherFieldText).toOption();\n return lift2(cValue, oValue, function (cSize, oSize) {\n return convertUnit(cSize, oSize.unit).map(function (val) {\n return oSize.value / val;\n }).map(function (r) {\n return ratioSizeConversion(r, oSize.unit);\n }).getOr(noSizeConversion);\n }).getOr(noSizeConversion);\n };\n\n var renderSizeInput = function (spec, providersBackstage) {\n var converter = noSizeConversion;\n var ratioEvent = generate$1('ratio-event');\n var pLock = FormCoupledInputs.parts().lock({\n dom: {\n tag: 'button',\n classes: [\n 'tox-lock',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n attributes: { title: providersBackstage.translate(spec.label.getOr('Constrain proportions')) }\n },\n components: [\n {\n dom: {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-lock-icon__lock'\n ],\n innerHtml: get$d('lock', providersBackstage.icons)\n }\n },\n {\n dom: {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-lock-icon__unlock'\n ],\n innerHtml: get$d('unlock', providersBackstage.icons)\n }\n }\n ],\n buttonBehaviours: derive$1([\n DisablingConfigs.button(spec.disabled),\n Tabstopping.config({})\n ])\n });\n var formGroup = function (components) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: components\n };\n };\n var getFieldPart = function (isField1) {\n return FormField.parts().field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n inputBehaviours: derive$1([\n Disabling.config({ disabled: spec.disabled }),\n Tabstopping.config({}),\n config('size-input-events', [\n run(focusin(), function (component, simulatedEvent) {\n emitWith(component, ratioEvent, { isField1: isField1 });\n }),\n run(change(), function (component, simulatedEvent) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ])\n ]),\n selectOnFocus: false\n });\n };\n var getLabel = function (label) {\n return {\n dom: {\n tag: 'label',\n classes: ['tox-label'],\n innerHtml: providersBackstage.translate(label)\n }\n };\n };\n var widthField = FormCoupledInputs.parts().field1(formGroup([\n FormField.parts().label(getLabel('Width')),\n getFieldPart(true)\n ]));\n var heightField = FormCoupledInputs.parts().field2(formGroup([\n FormField.parts().label(getLabel('Height')),\n getFieldPart(false)\n ]));\n return FormCoupledInputs.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: [\n widthField,\n heightField,\n formGroup([\n getLabel(' '),\n pLock\n ])\n ]\n }],\n field1Name: 'width',\n field2Name: 'height',\n locked: true,\n markers: { lockClass: 'tox-locked' },\n onLockedChange: function (current, other, lock) {\n parseSize(Representing.getValue(current)).each(function (size) {\n converter(size).each(function (newSize) {\n Representing.setValue(other, formatSize(newSize));\n });\n });\n },\n coupledFieldBehaviours: derive$1([\n Disabling.config({\n disabled: spec.disabled,\n onDisabled: function (comp) {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getLock(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getLock(comp).each(Disabling.enable);\n }\n }),\n config('size-input-events2', [run(ratioEvent, function (component, simulatedEvent) {\n var isField1 = simulatedEvent.event().isField1();\n var optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);\n var optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);\n var value1 = optCurrent.map(Representing.getValue).getOr('');\n var value2 = optOther.map(Representing.getValue).getOr('');\n converter = makeRatioConverter(value1, value2);\n })])\n ])\n });\n };\n\n var undo = constant(generate$1('undo'));\n var redo = constant(generate$1('redo'));\n var zoom = constant(generate$1('zoom'));\n var back = constant(generate$1('back'));\n var apply = constant(generate$1('apply'));\n var swap = constant(generate$1('swap'));\n var transform = constant(generate$1('transform'));\n var tempTransform = constant(generate$1('temp-transform'));\n var transformApply = constant(generate$1('transform-apply'));\n var internal = {\n undo: undo,\n redo: redo,\n zoom: zoom,\n back: back,\n apply: apply,\n swap: swap,\n transform: transform,\n tempTransform: tempTransform,\n transformApply: transformApply\n };\n var saveState = constant('save-state');\n var disable$1 = constant('disable');\n var enable$1 = constant('enable');\n var external$2 = {\n formActionEvent: formActionEvent,\n saveState: saveState,\n disable: disable$1,\n enable: enable$1\n };\n\n var renderEditPanel = function (imagePanel, providersBackstage) {\n var createButton = function (text, action, disabled, primary) {\n return record(renderButton({\n name: text,\n text: text,\n disabled: disabled,\n primary: primary,\n icon: Option.none(),\n borderless: false\n }, action, providersBackstage));\n };\n var createIconButton = function (icon, tooltip, action, disabled) {\n return record(renderIconButton({\n name: icon,\n icon: Option.some(icon),\n tooltip: Option.some(tooltip),\n disabled: disabled,\n primary: false,\n borderless: false\n }, action, providersBackstage));\n };\n var disableAllComponents = function (comps, eventcomp) {\n comps.map(function (mem) {\n var component = mem.get(eventcomp);\n if (component.hasConfigured(Disabling)) {\n Disabling.disable(component);\n }\n });\n };\n var enableAllComponents = function (comps, eventcomp) {\n comps.map(function (mem) {\n var component = mem.get(eventcomp);\n if (component.hasConfigured(Disabling)) {\n Disabling.enable(component);\n }\n });\n };\n var panelDom = {\n tag: 'div',\n classes: [\n 'tox-image-tools__toolbar',\n 'tox-image-tools-edit-panel'\n ]\n };\n var noop$1 = noop;\n var emit$1 = function (comp, event, data) {\n emitWith(comp, event, data);\n };\n var emitDisable = function (component) {\n return emit(component, external$2.disable());\n };\n var emitEnable = function (component) {\n return emit(component, external$2.enable());\n };\n var emitTransform = function (comp, transform) {\n emitDisable(comp);\n emit$1(comp, internal.transform(), { transform: transform });\n emitEnable(comp);\n };\n var emitTempTransform = function (comp, transform) {\n emitDisable(comp);\n emit$1(comp, internal.tempTransform(), { transform: transform });\n emitEnable(comp);\n };\n var getBackSwap = function (anyInSystem) {\n return function () {\n memContainer.getOpt(anyInSystem).each(function (container) {\n Replacing.set(container, [ButtonPanel]);\n });\n };\n };\n var emitTransformApply = function (comp, transform) {\n emitDisable(comp);\n emit$1(comp, internal.transformApply(), {\n transform: transform,\n swap: getBackSwap(comp)\n });\n emitEnable(comp);\n };\n var createBackButton = function () {\n return createButton('Back', function (button) {\n return emit$1(button, internal.back(), { swap: getBackSwap(button) });\n }, false, false);\n };\n var createSpacer = function () {\n return record({\n dom: {\n tag: 'div',\n classes: ['tox-spacer']\n },\n behaviours: derive$1([Disabling.config({})])\n });\n };\n var createApplyButton = function () {\n return createButton('Apply', function (button) {\n return emit$1(button, internal.apply(), { swap: getBackSwap(button) });\n }, true, true);\n };\n var makeCropTransform = function () {\n return function (ir) {\n var rect = imagePanel.getRect();\n return crop$1(ir, rect.x, rect.y, rect.w, rect.h);\n };\n };\n var cropPanelComponents = [\n createBackButton(),\n createSpacer(),\n createButton('Apply', function (button) {\n var transform = makeCropTransform();\n emitTransformApply(button, transform);\n imagePanel.hideCrop();\n }, false, true)\n ];\n var CropPanel = Container.sketch({\n dom: panelDom,\n components: cropPanelComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-crop-buttons-events', [\n run(external$2.disable(), function (comp, se) {\n disableAllComponents(cropPanelComponents, comp);\n }),\n run(external$2.enable(), function (comp, se) {\n enableAllComponents(cropPanelComponents, comp);\n })\n ])])\n });\n var memSize = record(renderSizeInput({\n name: 'size',\n label: Option.none(),\n constrain: true,\n disabled: false\n }, providersBackstage));\n var makeResizeTransform = function (width, height) {\n return function (ir) {\n return resize$2(ir, width, height);\n };\n };\n var resizePanelComponents = [\n createBackButton(),\n createSpacer(),\n memSize,\n createSpacer(),\n createButton('Apply', function (button) {\n memSize.getOpt(button).each(function (sizeInput) {\n var value = Representing.getValue(sizeInput);\n var width = parseInt(value.width, 10);\n var height = parseInt(value.height, 10);\n var transform = makeResizeTransform(width, height);\n emitTransformApply(button, transform);\n });\n }, false, true)\n ];\n var ResizePanel = Container.sketch({\n dom: panelDom,\n components: resizePanelComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-resize-buttons-events', [\n run(external$2.disable(), function (comp, se) {\n disableAllComponents(resizePanelComponents, comp);\n }),\n run(external$2.enable(), function (comp, se) {\n enableAllComponents(resizePanelComponents, comp);\n })\n ])])\n });\n var makeValueTransform = function (transform, value) {\n return function (ir) {\n return transform(ir, value);\n };\n };\n var horizontalFlip = makeValueTransform(flip$1, 'h');\n var verticalFlip = makeValueTransform(flip$1, 'v');\n var counterclockwiseRotate = makeValueTransform(rotate$1, -90);\n var clockwiseRotate = makeValueTransform(rotate$1, 90);\n var flipRotateOnAction = function (comp, operation) {\n emitTempTransform(comp, operation);\n };\n var flipRotateComponents = [\n createBackButton(),\n createSpacer(),\n createIconButton('flip-horizontally', 'Flip horizontally', function (button) {\n flipRotateOnAction(button, horizontalFlip);\n }, false),\n createIconButton('flip-vertically', 'Flip vertically', function (button) {\n flipRotateOnAction(button, verticalFlip);\n }, false),\n createIconButton('rotate-left', 'Rotate counterclockwise', function (button) {\n flipRotateOnAction(button, counterclockwiseRotate);\n }, false),\n createIconButton('rotate-right', 'Rotate clockwise', function (button) {\n flipRotateOnAction(button, clockwiseRotate);\n }, false),\n createSpacer(),\n createApplyButton()\n ];\n var FlipRotatePanel = Container.sketch({\n dom: panelDom,\n components: flipRotateComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-fliprotate-buttons-events', [\n run(external$2.disable(), function (comp, se) {\n disableAllComponents(flipRotateComponents, comp);\n }),\n run(external$2.enable(), function (comp, se) {\n enableAllComponents(flipRotateComponents, comp);\n })\n ])])\n });\n var makeSlider = function (label, onChoose, min, value, max) {\n var labelPart = Slider.parts().label({\n dom: {\n tag: 'label',\n classes: ['tox-label'],\n innerHtml: providersBackstage.translate(label)\n }\n });\n var spectrum = Slider.parts().spectrum({\n dom: {\n tag: 'div',\n classes: ['tox-slider__rail'],\n attributes: { role: 'presentation' }\n }\n });\n var thumb = Slider.parts().thumb({\n dom: {\n tag: 'div',\n classes: ['tox-slider__handle'],\n attributes: { role: 'presentation' }\n }\n });\n return record(Slider.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-slider'],\n attributes: { role: 'presentation' }\n },\n model: {\n mode: 'x',\n minX: min,\n maxX: max,\n getInitialValue: constant({ x: constant(value) })\n },\n components: [\n labelPart,\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([Focusing.config({})]),\n onChoose: onChoose\n }));\n };\n var makeVariableSlider = function (label, transform, min, value, max) {\n var onChoose = function (slider, thumb, value) {\n var valTransform = makeValueTransform(transform, value.x() / 100);\n emitTransform(slider, valTransform);\n };\n return makeSlider(label, onChoose, min, value, max);\n };\n var variableFilterPanelComponents = function (label, transform, min, value, max) {\n return [\n createBackButton(),\n makeVariableSlider(label, transform, min, value, max),\n createApplyButton()\n ];\n };\n var createVariableFilterPanel = function (label, transform, min, value, max) {\n var filterPanelComponents = variableFilterPanelComponents(label, transform, min, value, max);\n return Container.sketch({\n dom: panelDom,\n components: filterPanelComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-filter-panel-buttons-events', [\n run(external$2.disable(), function (comp, se) {\n disableAllComponents(filterPanelComponents, comp);\n }),\n run(external$2.enable(), function (comp, se) {\n enableAllComponents(filterPanelComponents, comp);\n })\n ])])\n });\n };\n var filterPanelComponents = [\n createBackButton(),\n createSpacer(),\n createApplyButton()\n ];\n var FilterPanel = Container.sketch({\n dom: panelDom,\n components: filterPanelComponents.map(function (mem) {\n return mem.asSpec();\n })\n });\n var BrightnessPanel = createVariableFilterPanel('Brightness', brightness$1, -100, 0, 100);\n var ContrastPanel = createVariableFilterPanel('Contrast', contrast$1, -100, 0, 100);\n var GammaPanel = createVariableFilterPanel('Gamma', gamma$1, -100, 0, 100);\n var makeColorTransform = function (red, green, blue) {\n return function (ir) {\n return colorize$1(ir, red, green, blue);\n };\n };\n var makeColorSlider = function (label) {\n var onChoose = function (slider, thumb, value) {\n var redOpt = memRed.getOpt(slider);\n var blueOpt = memBlue.getOpt(slider);\n var greenOpt = memGreen.getOpt(slider);\n redOpt.each(function (red) {\n blueOpt.each(function (blue) {\n greenOpt.each(function (green) {\n var r = Representing.getValue(red).x() / 100;\n var g = Representing.getValue(green).x() / 100;\n var b = Representing.getValue(blue).x() / 100;\n var transform = makeColorTransform(r, g, b);\n emitTransform(slider, transform);\n });\n });\n });\n };\n return makeSlider(label, onChoose, 0, 100, 200);\n };\n var memRed = makeColorSlider('R');\n var memGreen = makeColorSlider('G');\n var memBlue = makeColorSlider('B');\n var colorizePanelComponents = [\n createBackButton(),\n memRed,\n memGreen,\n memBlue,\n createApplyButton()\n ];\n var ColorizePanel = Container.sketch({\n dom: panelDom,\n components: colorizePanelComponents.map(function (mem) {\n return mem.asSpec();\n })\n });\n var getTransformPanelEvent = function (panel, transform, update) {\n return function (button) {\n var swap = function () {\n memContainer.getOpt(button).each(function (container) {\n Replacing.set(container, [panel]);\n update(container);\n });\n };\n emit$1(button, internal.swap(), {\n transform: transform,\n swap: swap\n });\n };\n };\n var cropPanelUpdate = function (_anyInSystem) {\n imagePanel.showCrop();\n };\n var resizePanelUpdate = function (anyInSystem) {\n memSize.getOpt(anyInSystem).each(function (sizeInput) {\n var measurements = imagePanel.getMeasurements();\n var width = measurements.width;\n var height = measurements.height;\n Representing.setValue(sizeInput, {\n width: width,\n height: height\n });\n });\n };\n var sharpenTransform = Option.some(sharpen$1);\n var invertTransform = Option.some(invert$1);\n var buttonPanelComponents = [\n createIconButton('crop', 'Crop', getTransformPanelEvent(CropPanel, Option.none(), cropPanelUpdate), false),\n createIconButton('resize', 'Resize', getTransformPanelEvent(ResizePanel, Option.none(), resizePanelUpdate), false),\n createIconButton('orientation', 'Orientation', getTransformPanelEvent(FlipRotatePanel, Option.none(), noop$1), false),\n createIconButton('brightness', 'Brightness', getTransformPanelEvent(BrightnessPanel, Option.none(), noop$1), false),\n createIconButton('sharpen', 'Sharpen', getTransformPanelEvent(FilterPanel, sharpenTransform, noop$1), false),\n createIconButton('contrast', 'Contrast', getTransformPanelEvent(ContrastPanel, Option.none(), noop$1), false),\n createIconButton('color-levels', 'Color levels', getTransformPanelEvent(ColorizePanel, Option.none(), noop$1), false),\n createIconButton('gamma', 'Gamma', getTransformPanelEvent(GammaPanel, Option.none(), noop$1), false),\n createIconButton('invert', 'Invert', getTransformPanelEvent(FilterPanel, invertTransform, noop$1), false)\n ];\n var ButtonPanel = Container.sketch({\n dom: panelDom,\n components: buttonPanelComponents.map(function (mem) {\n return mem.asSpec();\n })\n });\n var container = Container.sketch({\n dom: { tag: 'div' },\n components: [ButtonPanel],\n containerBehaviours: derive$1([Replacing.config({})])\n });\n var memContainer = record(container);\n var getApplyButton = function (anyInSystem) {\n return memContainer.getOpt(anyInSystem).map(function (container) {\n var panel = container.components()[0];\n return panel.components()[panel.components().length - 1];\n });\n };\n return {\n memContainer: memContainer,\n getApplyButton: getApplyButton\n };\n };\n\n var global$b = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var global$c = tinymce.util.Tools.resolve('tinymce.geom.Rect');\n\n var global$d = tinymce.util.Tools.resolve('tinymce.util.Observable');\n\n var global$e = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$f = tinymce.util.Tools.resolve('tinymce.util.VK');\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$b('
').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$b(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$b(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$b(handleElement).off();\n };\n global$b(handleElement).on('mousedown touchstart', start);\n }\n\n var count = 0;\n var create$7 = function (currentRect, viewPortRect, clampRect, containerElm, action) {\n var instance;\n var dragHelpers;\n var blockers;\n var prefix = 'tox-';\n var id = prefix + 'crid-' + count++;\n var handles = [\n {\n name: 'move',\n xMul: 0,\n yMul: 0,\n deltaX: 1,\n deltaY: 1,\n deltaW: 0,\n deltaH: 0,\n label: 'Crop Mask'\n },\n {\n name: 'nw',\n xMul: 0,\n yMul: 0,\n deltaX: 1,\n deltaY: 1,\n deltaW: -1,\n deltaH: -1,\n label: 'Top Left Crop Handle'\n },\n {\n name: 'ne',\n xMul: 1,\n yMul: 0,\n deltaX: 0,\n deltaY: 1,\n deltaW: 1,\n deltaH: -1,\n label: 'Top Right Crop Handle'\n },\n {\n name: 'sw',\n xMul: 0,\n yMul: 1,\n deltaX: 1,\n deltaY: 0,\n deltaW: -1,\n deltaH: 1,\n label: 'Bottom Left Crop Handle'\n },\n {\n name: 'se',\n xMul: 1,\n yMul: 1,\n deltaX: 0,\n deltaY: 0,\n deltaW: 1,\n deltaH: 1,\n label: 'Bottom Right Crop Handle'\n }\n ];\n blockers = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ];\n var getAbsoluteRect = function (outerRect, relativeRect) {\n return {\n x: relativeRect.x + outerRect.x,\n y: relativeRect.y + outerRect.y,\n w: relativeRect.w,\n h: relativeRect.h\n };\n };\n var getRelativeRect = function (outerRect, innerRect) {\n return {\n x: innerRect.x - outerRect.x,\n y: innerRect.y - outerRect.y,\n w: innerRect.w,\n h: innerRect.h\n };\n };\n var getInnerRect = function () {\n return getRelativeRect(clampRect, currentRect);\n };\n function moveRect(handle, startRect, deltaX, deltaY) {\n var x, y, w, h, rect;\n x = startRect.x;\n y = startRect.y;\n w = startRect.w;\n h = startRect.h;\n x += deltaX * handle.deltaX;\n y += deltaY * handle.deltaY;\n w += deltaX * handle.deltaW;\n h += deltaY * handle.deltaH;\n if (w < 20) {\n w = 20;\n }\n if (h < 20) {\n h = 20;\n }\n rect = currentRect = global$c.clamp({\n x: x,\n y: y,\n w: w,\n h: h\n }, clampRect, handle.name === 'move');\n rect = getRelativeRect(clampRect, rect);\n instance.fire('updateRect', { rect: rect });\n setInnerRect(rect);\n }\n function render() {\n function createDragHelper(handle) {\n var startRect;\n return new DragHelper(id, {\n document: containerElm.ownerDocument,\n handle: id + '-' + handle.name,\n start: function () {\n startRect = currentRect;\n },\n drag: function (e) {\n moveRect(handle, startRect, e.deltaX, e.deltaY);\n }\n });\n }\n global$b('
').appendTo(containerElm);\n global$e.each(blockers, function (blocker) {\n global$b('#' + id, containerElm).append('
');\n });\n global$e.each(handles, function (handle) {\n global$b('#' + id, containerElm).append('
');\n });\n dragHelpers = global$e.map(handles, createDragHelper);\n repaint(currentRect);\n global$b(containerElm).on('focusin focusout', function (e) {\n global$b(e.target).attr('aria-grabbed', e.type === 'focus' ? 'true' : 'false');\n });\n global$b(containerElm).on('keydown', function (e) {\n var activeHandle;\n global$e.each(handles, function (handle) {\n if (e.target.id === id + '-' + handle.name) {\n activeHandle = handle;\n return false;\n }\n });\n function moveAndBlock(evt, handle, startRect, deltaX, deltaY) {\n evt.stopPropagation();\n evt.preventDefault();\n moveRect(activeHandle, startRect, deltaX, deltaY);\n }\n switch (e.keyCode) {\n case global$f.LEFT:\n moveAndBlock(e, activeHandle, currentRect, -10, 0);\n break;\n case global$f.RIGHT:\n moveAndBlock(e, activeHandle, currentRect, 10, 0);\n break;\n case global$f.UP:\n moveAndBlock(e, activeHandle, currentRect, 0, -10);\n break;\n case global$f.DOWN:\n moveAndBlock(e, activeHandle, currentRect, 0, 10);\n break;\n case global$f.ENTER:\n case global$f.SPACEBAR:\n e.preventDefault();\n action();\n break;\n }\n });\n }\n function toggleVisibility(state) {\n var selectors;\n selectors = global$e.map(handles, function (handle) {\n return '#' + id + '-' + handle.name;\n }).concat(global$e.map(blockers, function (blocker) {\n return '#' + id + '-' + blocker;\n })).join(',');\n if (state) {\n global$b(selectors, containerElm).show();\n } else {\n global$b(selectors, containerElm).hide();\n }\n }\n function repaint(rect) {\n function updateElementRect(name, rect) {\n if (rect.h < 0) {\n rect.h = 0;\n }\n if (rect.w < 0) {\n rect.w = 0;\n }\n global$b('#' + id + '-' + name, containerElm).css({\n left: rect.x,\n top: rect.y,\n width: rect.w,\n height: rect.h\n });\n }\n global$e.each(handles, function (handle) {\n global$b('#' + id + '-' + handle.name, containerElm).css({\n left: rect.w * handle.xMul + rect.x,\n top: rect.h * handle.yMul + rect.y\n });\n });\n updateElementRect('top', {\n x: viewPortRect.x,\n y: viewPortRect.y,\n w: viewPortRect.w,\n h: rect.y - viewPortRect.y\n });\n updateElementRect('right', {\n x: rect.x + rect.w,\n y: rect.y,\n w: viewPortRect.w - rect.x - rect.w + viewPortRect.x,\n h: rect.h\n });\n updateElementRect('bottom', {\n x: viewPortRect.x,\n y: rect.y + rect.h,\n w: viewPortRect.w,\n h: viewPortRect.h - rect.y - rect.h + viewPortRect.y\n });\n updateElementRect('left', {\n x: viewPortRect.x,\n y: rect.y,\n w: rect.x - viewPortRect.x,\n h: rect.h\n });\n updateElementRect('move', rect);\n }\n function setRect(rect) {\n currentRect = rect;\n repaint(currentRect);\n }\n function setViewPortRect(rect) {\n viewPortRect = rect;\n repaint(currentRect);\n }\n function setInnerRect(rect) {\n setRect(getAbsoluteRect(clampRect, rect));\n }\n function setClampRect(rect) {\n clampRect = rect;\n repaint(currentRect);\n }\n function destroy() {\n global$e.each(dragHelpers, function (helper) {\n helper.destroy();\n });\n dragHelpers = [];\n }\n render();\n instance = global$e.extend({\n toggleVisibility: toggleVisibility,\n setClampRect: setClampRect,\n setRect: setRect,\n getInnerRect: getInnerRect,\n setInnerRect: setInnerRect,\n setViewPortRect: setViewPortRect,\n destroy: destroy\n }, global$d);\n return instance;\n };\n var CropRect = { create: create$7 };\n\n var loadImage = function (image) {\n return new global$6(function (resolve) {\n var loaded = function () {\n image.removeEventListener('load', loaded);\n resolve(image);\n };\n if (image.complete) {\n resolve(image);\n } else {\n image.addEventListener('load', loaded);\n }\n });\n };\n var renderImagePanel = function (initialUrl) {\n var memBg = record({\n dom: {\n tag: 'div',\n classes: ['tox-image-tools__image-bg'],\n attributes: { role: 'presentation' }\n }\n });\n var zoomState = Cell(1);\n var cropRect = Cell(Option.none());\n var rectState = Cell({\n x: 0,\n y: 0,\n w: 1,\n h: 1\n });\n var viewRectState = Cell({\n x: 0,\n y: 0,\n w: 1,\n h: 1\n });\n var repaintImg = function (anyInSystem, img) {\n memContainer.getOpt(anyInSystem).each(function (panel) {\n var zoom = zoomState.get();\n var panelW = get$7(panel.element());\n var panelH = get$6(panel.element());\n var width = img.dom().naturalWidth * zoom;\n var height = img.dom().naturalHeight * zoom;\n var left = Math.max(0, panelW / 2 - width / 2);\n var top = Math.max(0, panelH / 2 - height / 2);\n var css = {\n left: left.toString() + 'px',\n top: top.toString() + 'px',\n width: width.toString() + 'px',\n height: height.toString() + 'px',\n position: 'absolute'\n };\n setAll$1(img, css);\n memBg.getOpt(panel).each(function (bg) {\n setAll$1(bg.element(), css);\n });\n cropRect.get().each(function (cRect) {\n var rect = rectState.get();\n cRect.setRect({\n x: rect.x * zoom + left,\n y: rect.y * zoom + top,\n w: rect.w * zoom,\n h: rect.h * zoom\n });\n cRect.setClampRect({\n x: left,\n y: top,\n w: width,\n h: height\n });\n cRect.setViewPortRect({\n x: 0,\n y: 0,\n w: panelW,\n h: panelH\n });\n });\n });\n };\n var zoomFit = function (anyInSystem, img) {\n memContainer.getOpt(anyInSystem).each(function (panel) {\n var panelW = get$7(panel.element());\n var panelH = get$6(panel.element());\n var width = img.dom().naturalWidth;\n var height = img.dom().naturalHeight;\n var zoom = Math.min(panelW / width, panelH / height);\n if (zoom >= 1) {\n zoomState.set(1);\n } else {\n zoomState.set(zoom);\n }\n });\n };\n var updateSrc = function (anyInSystem, url) {\n var img = Element.fromTag('img');\n set$1(img, 'src', url);\n return loadImage(img.dom()).then(function () {\n return memContainer.getOpt(anyInSystem).map(function (panel) {\n var aImg = external({ element: img });\n Replacing.replaceAt(panel, 1, Option.some(aImg));\n var lastViewRect = viewRectState.get();\n var viewRect = {\n x: 0,\n y: 0,\n w: img.dom().naturalWidth,\n h: img.dom().naturalHeight\n };\n viewRectState.set(viewRect);\n var rect = global$c.inflate(viewRect, -20, -20);\n rectState.set(rect);\n if (lastViewRect.w !== viewRect.w || lastViewRect.h !== viewRect.h) {\n zoomFit(panel, img);\n }\n repaintImg(panel, img);\n return img;\n });\n });\n };\n var zoom = function (anyInSystem, direction) {\n var currentZoom = zoomState.get();\n var newZoom = direction > 0 ? Math.min(2, currentZoom + 0.1) : Math.max(0.1, currentZoom - 0.1);\n zoomState.set(newZoom);\n memContainer.getOpt(anyInSystem).each(function (panel) {\n var img = panel.components()[1].element();\n repaintImg(panel, img);\n });\n };\n var showCrop = function () {\n cropRect.get().each(function (cRect) {\n cRect.toggleVisibility(true);\n });\n };\n var hideCrop = function () {\n cropRect.get().each(function (cRect) {\n cRect.toggleVisibility(false);\n });\n };\n var getRect = function () {\n return rectState.get();\n };\n var container = Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-image-tools__image']\n },\n components: [\n memBg.asSpec(),\n {\n dom: {\n tag: 'img',\n attributes: { src: initialUrl }\n }\n },\n {\n dom: { tag: 'div' },\n behaviours: derive$1([config('image-panel-crop-events', [runOnAttached(function (comp) {\n memContainer.getOpt(comp).each(function (container) {\n var el = container.element().dom();\n var cRect = CropRect.create({\n x: 10,\n y: 10,\n w: 100,\n h: 100\n }, {\n x: 0,\n y: 0,\n w: 200,\n h: 200\n }, {\n x: 0,\n y: 0,\n w: 200,\n h: 200\n }, el, function () {\n });\n cRect.toggleVisibility(false);\n cRect.on('updateRect', function (e) {\n var rect = e.rect;\n var zoom = zoomState.get();\n var newRect = {\n x: Math.round(rect.x / zoom),\n y: Math.round(rect.y / zoom),\n w: Math.round(rect.w / zoom),\n h: Math.round(rect.h / zoom)\n };\n rectState.set(newRect);\n });\n cropRect.set(Option.some(cRect));\n });\n })])])\n }\n ],\n containerBehaviours: derive$1([\n Replacing.config({}),\n config('image-panel-events', [runOnAttached(function (comp) {\n updateSrc(comp, initialUrl);\n })])\n ])\n });\n var memContainer = record(container);\n var getMeasurements = function () {\n var viewRect = viewRectState.get();\n return {\n width: viewRect.w,\n height: viewRect.h\n };\n };\n return {\n memContainer: memContainer,\n updateSrc: updateSrc,\n zoom: zoom,\n showCrop: showCrop,\n hideCrop: hideCrop,\n getRect: getRect,\n getMeasurements: getMeasurements\n };\n };\n\n var createButton = function (innerHtml, icon, disabled, action, providersBackstage) {\n return renderIconButton({\n name: innerHtml,\n icon: Option.some(icon),\n disabled: disabled,\n tooltip: Option.some(innerHtml),\n primary: false,\n borderless: false\n }, action, providersBackstage);\n };\n var setButtonEnabled = function (button, enabled) {\n if (enabled) {\n Disabling.enable(button);\n } else {\n Disabling.disable(button);\n }\n };\n var renderSideBar = function (providersBackstage) {\n var updateButtonUndoStates = function (anyInSystem, undoEnabled, redoEnabled) {\n memUndo.getOpt(anyInSystem).each(function (undo) {\n setButtonEnabled(undo, undoEnabled);\n });\n memRedo.getOpt(anyInSystem).each(function (redo) {\n setButtonEnabled(redo, redoEnabled);\n });\n };\n var memUndo = record(createButton('Undo', 'undo', true, function (button) {\n emitWith(button, internal.undo(), { direction: 1 });\n }, providersBackstage));\n var memRedo = record(createButton('Redo', 'redo', true, function (button) {\n emitWith(button, internal.redo(), { direction: 1 });\n }, providersBackstage));\n var container = Container.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox-image-tools__toolbar',\n 'tox-image-tools__sidebar'\n ]\n },\n components: [\n memUndo.asSpec(),\n memRedo.asSpec(),\n createButton('Zoom in', 'zoom-in', false, function (button) {\n emitWith(button, internal.zoom(), { direction: 1 });\n }, providersBackstage),\n createButton('Zoom out', 'zoom-out', false, function (button) {\n emitWith(button, internal.zoom(), { direction: -1 });\n }, providersBackstage)\n ]\n });\n return {\n container: container,\n updateButtonUndoStates: updateButtonUndoStates\n };\n };\n\n function UndoStack () {\n var data = [];\n var index = -1;\n function add(state) {\n var removed;\n removed = data.splice(++index);\n data.push(state);\n return {\n state: state,\n removed: removed\n };\n }\n function undo() {\n if (canUndo()) {\n return data[--index];\n }\n }\n function redo() {\n if (canRedo()) {\n return data[++index];\n }\n }\n function canUndo() {\n return index > 0;\n }\n function canRedo() {\n return index !== -1 && index < data.length - 1;\n }\n return {\n data: data,\n add: add,\n undo: undo,\n redo: redo,\n canUndo: canUndo,\n canRedo: canRedo\n };\n }\n\n var makeState = function (initialState) {\n var blobState = Cell(initialState);\n var tempState = Cell(Option.none());\n var undoStack = UndoStack();\n undoStack.add(initialState);\n var getBlobState = function () {\n return blobState.get();\n };\n var setBlobState = function (state) {\n blobState.set(state);\n };\n var getTempState = function () {\n return tempState.get().fold(function () {\n return blobState.get();\n }, function (temp) {\n return temp;\n });\n };\n var updateTempState = function (blob) {\n var newTempState = createState(blob);\n destroyTempState();\n tempState.set(Option.some(newTempState));\n return newTempState.url;\n };\n var createState = function (blob) {\n return {\n blob: blob,\n url: domGlobals.URL.createObjectURL(blob)\n };\n };\n var destroyState = function (state) {\n domGlobals.URL.revokeObjectURL(state.url);\n };\n var destroyStates = function (states) {\n global$e.each(states, destroyState);\n };\n var destroyTempState = function () {\n tempState.get().each(destroyState);\n tempState.set(Option.none());\n };\n var addBlobState = function (blob) {\n var newState = createState(blob);\n setBlobState(newState);\n var removed = undoStack.add(newState).removed;\n destroyStates(removed);\n return newState.url;\n };\n var addTempState = function (blob) {\n var newState = createState(blob);\n tempState.set(Option.some(newState));\n return newState.url;\n };\n var applyTempState = function (postApply) {\n return tempState.get().fold(function () {\n }, function (temp) {\n addBlobState(temp.blob);\n postApply();\n });\n };\n var undo = function () {\n var currentState = undoStack.undo();\n setBlobState(currentState);\n return currentState.url;\n };\n var redo = function () {\n var currentState = undoStack.redo();\n setBlobState(currentState);\n return currentState.url;\n };\n var getHistoryStates = function () {\n var undoEnabled = undoStack.canUndo();\n var redoEnabled = undoStack.canRedo();\n return {\n undoEnabled: undoEnabled,\n redoEnabled: redoEnabled\n };\n };\n return {\n getBlobState: getBlobState,\n setBlobState: setBlobState,\n addBlobState: addBlobState,\n getTempState: getTempState,\n updateTempState: updateTempState,\n addTempState: addTempState,\n applyTempState: applyTempState,\n destroyTempState: destroyTempState,\n undo: undo,\n redo: redo,\n getHistoryStates: getHistoryStates\n };\n };\n\n var renderImageTools = function (detail, providersBackstage) {\n var state = makeState(detail.currentState);\n var zoom = function (anyInSystem, simulatedEvent) {\n var direction = simulatedEvent.event().direction();\n imagePanel.zoom(anyInSystem, direction);\n };\n var updateButtonUndoStates = function (anyInSystem) {\n var historyStates = state.getHistoryStates();\n sideBar.updateButtonUndoStates(anyInSystem, historyStates.undoEnabled, historyStates.redoEnabled);\n emitWith(anyInSystem, external$2.formActionEvent, {\n name: external$2.saveState(),\n value: historyStates.undoEnabled\n });\n };\n var disableUndoRedo = function (anyInSystem) {\n sideBar.updateButtonUndoStates(anyInSystem, false, false);\n };\n var undo = function (anyInSystem, _simulatedEvent) {\n var url = state.undo();\n updateSrc(anyInSystem, url).then(function (oImg) {\n unblock(anyInSystem);\n updateButtonUndoStates(anyInSystem);\n });\n };\n var redo = function (anyInSystem, _simulatedEvent) {\n var url = state.redo();\n updateSrc(anyInSystem, url).then(function (oImg) {\n unblock(anyInSystem);\n updateButtonUndoStates(anyInSystem);\n });\n };\n var imageResultToBlob = function (ir) {\n return ir.toBlob();\n };\n var block = function (anyInSystem) {\n emitWith(anyInSystem, external$2.formActionEvent, {\n name: external$2.disable(),\n value: {}\n });\n };\n var unblock = function (anyInSystem) {\n editPanel.getApplyButton(anyInSystem).each(function (applyButton) {\n Disabling.enable(applyButton);\n });\n emitWith(anyInSystem, external$2.formActionEvent, {\n name: external$2.enable(),\n value: {}\n });\n };\n var updateSrc = function (anyInSystem, src) {\n block(anyInSystem);\n return imagePanel.updateSrc(anyInSystem, src);\n };\n var blobManipulate = function (anyInSystem, blob, filter, action, swap) {\n block(anyInSystem);\n return blobToImageResult(blob).then(filter).then(imageResultToBlob).then(action).then(function (url) {\n return updateSrc(anyInSystem, url).then(function (oImg) {\n updateButtonUndoStates(anyInSystem);\n swap();\n unblock(anyInSystem);\n return oImg;\n });\n }).catch(function (err) {\n domGlobals.console.log(err);\n unblock(anyInSystem);\n return err;\n });\n };\n var manipulate = function (anyInSystem, filter, swap) {\n var blob = state.getBlobState().blob;\n var action = function (blob) {\n return state.updateTempState(blob);\n };\n blobManipulate(anyInSystem, blob, filter, action, swap);\n };\n var tempManipulate = function (anyInSystem, filter) {\n var blob = state.getTempState().blob;\n var action = function (blob) {\n return state.addTempState(blob);\n };\n blobManipulate(anyInSystem, blob, filter, action, noop);\n };\n var manipulateApply = function (anyInSystem, filter, swap) {\n var blob = state.getBlobState().blob;\n var action = function (blob) {\n var url = state.addBlobState(blob);\n destroyTempState(anyInSystem);\n return url;\n };\n blobManipulate(anyInSystem, blob, filter, action, swap);\n };\n var apply = function (anyInSystem, simulatedEvent) {\n var postApply = function () {\n destroyTempState(anyInSystem);\n var swap = simulatedEvent.event().swap();\n swap();\n };\n state.applyTempState(postApply);\n };\n var destroyTempState = function (anyInSystem) {\n var currentUrl = state.getBlobState().url;\n state.destroyTempState();\n updateButtonUndoStates(anyInSystem);\n return currentUrl;\n };\n var cancel = function (anyInSystem) {\n var currentUrl = destroyTempState(anyInSystem);\n updateSrc(anyInSystem, currentUrl).then(function (oImg) {\n unblock(anyInSystem);\n });\n };\n var back = function (anyInSystem, simulatedEvent) {\n cancel(anyInSystem);\n var swap = simulatedEvent.event().swap();\n swap();\n imagePanel.hideCrop();\n };\n var transform = function (anyInSystem, simulatedEvent) {\n return manipulate(anyInSystem, simulatedEvent.event().transform(), noop);\n };\n var tempTransform = function (anyInSystem, simulatedEvent) {\n return tempManipulate(anyInSystem, simulatedEvent.event().transform());\n };\n var transformApply = function (anyInSystem, simulatedEvent) {\n return manipulateApply(anyInSystem, simulatedEvent.event().transform(), simulatedEvent.event().swap());\n };\n var imagePanel = renderImagePanel(detail.currentState.url);\n var sideBar = renderSideBar(providersBackstage);\n var editPanel = renderEditPanel(imagePanel, providersBackstage);\n var swap = function (anyInSystem, simulatedEvent) {\n disableUndoRedo(anyInSystem);\n var transform = simulatedEvent.event().transform();\n var swap = simulatedEvent.event().swap();\n transform.fold(function () {\n swap();\n }, function (transform) {\n manipulate(anyInSystem, transform, swap);\n });\n };\n return {\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' }\n },\n components: [\n editPanel.memContainer.asSpec(),\n imagePanel.memContainer.asSpec(),\n sideBar.container\n ],\n behaviours: derive$1([\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function () {\n return state.getBlobState();\n }\n }\n }),\n config('image-tools-events', [\n run(internal.undo(), undo),\n run(internal.redo(), redo),\n run(internal.zoom(), zoom),\n run(internal.back(), back),\n run(internal.apply(), apply),\n run(internal.transform(), transform),\n run(internal.tempTransform(), tempTransform),\n run(internal.transformApply(), transformApply),\n run(internal.swap(), swap)\n ]),\n ComposingConfigs.self()\n ])\n };\n };\n\n var factory$8 = function (detail, spec) {\n var options = map(detail.options, function (option) {\n return {\n dom: {\n tag: 'option',\n value: option.value,\n innerHtml: option.text\n }\n };\n });\n var initialValues = detail.data.map(function (v) {\n return wrap$1('initialValue', v);\n }).getOr({});\n return {\n uid: detail.uid,\n dom: {\n tag: 'select',\n classes: detail.selectClasses,\n attributes: detail.selectAttributes\n },\n components: options,\n behaviours: augment(detail.selectBehaviours, [\n Focusing.config({}),\n Representing.config({\n store: __assign({\n mode: 'manual',\n getValue: function (select) {\n return get$5(select.element());\n },\n setValue: function (select, newValue) {\n var found = find(detail.options, function (opt) {\n return opt.value === newValue;\n });\n if (found.isSome()) {\n set$3(select.element(), newValue);\n }\n }\n }, initialValues)\n })\n ])\n };\n };\n var HtmlSelect = single$2({\n name: 'HtmlSelect',\n configFields: [\n strict$1('options'),\n field$1('selectBehaviours', [\n Focusing,\n Representing\n ]),\n defaulted$1('selectClasses', []),\n defaulted$1('selectAttributes', {}),\n option('data')\n ],\n factory: factory$8\n });\n\n var renderSelectBox = function (spec, providersBackstage) {\n var translatedOptions = map(spec.items, function (item) {\n return {\n text: providersBackstage.translate(item.text),\n value: item.value\n };\n });\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var pField = FormField.parts().field({\n dom: {},\n selectAttributes: { size: spec.size },\n options: translatedOptions,\n factory: HtmlSelect,\n selectBehaviours: derive$1([\n Disabling.config({ disabled: spec.disabled }),\n Tabstopping.config({}),\n config('selectbox-change', [run(change(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n var chevron = spec.size > 1 ? Option.none() : Option.some({\n dom: {\n tag: 'div',\n classes: ['tox-selectfield__icon-js'],\n innerHtml: get$d('chevron-down', providersBackstage.icons)\n }\n });\n var selectWrap = {\n dom: {\n tag: 'div',\n classes: ['tox-selectfield']\n },\n components: flatten([\n [pField],\n chevron.toArray()\n ])\n };\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: flatten([\n pLabel.toArray(),\n [selectWrap]\n ]),\n fieldBehaviours: derive$1([Disabling.config({\n disabled: spec.disabled,\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n })])\n });\n };\n\n var renderTextField = function (spec, providersBackstage) {\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var baseInputBehaviours = [\n Disabling.config({ disabled: spec.disabled }),\n Keying.config({\n mode: 'execution',\n useEnter: spec.multiline !== true,\n useControlEnter: spec.multiline === true,\n execute: function (comp) {\n emit(comp, formSubmitEvent);\n return Option.some(true);\n }\n }),\n config('textfield-change', [\n run(input(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n }),\n run(postPaste(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ]),\n Tabstopping.config({})\n ];\n var validatingBehaviours = spec.validation.map(function (vl) {\n return Invalidating.config({\n getRoot: function (input) {\n return parent(input.element());\n },\n invalidClass: 'tox-invalid',\n validator: {\n validate: function (input) {\n var v = Representing.getValue(input);\n var result = vl.validator(v);\n return Future.pure(result === true ? Result.value(v) : Result.error(result));\n },\n validateOnLoad: vl.validateOnLoad\n }\n });\n }).toArray();\n var placeholder = spec.placeholder.fold(constant({}), function (p) {\n return { placeholder: providersBackstage.translate(p) };\n });\n var inputMode = spec.inputMode.fold(constant({}), function (mode) {\n return { inputmode: mode };\n });\n var inputAttributes = __assign(__assign({}, placeholder), inputMode);\n var pField = FormField.parts().field({\n tag: spec.multiline === true ? 'textarea' : 'input',\n inputAttributes: inputAttributes,\n inputClasses: [spec.classname],\n inputBehaviours: derive$1(flatten([\n baseInputBehaviours,\n validatingBehaviours\n ])),\n selectOnFocus: false,\n factory: Input\n });\n var extraClasses = spec.flex ? ['tox-form__group--stretched'] : [];\n var extraClasses2 = extraClasses.concat(spec.maximized ? ['tox-form-group--maximize'] : []);\n var extraBehaviours = [Disabling.config({\n disabled: spec.disabled,\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n })];\n return renderFormFieldWith(pLabel, pField, extraClasses2, extraBehaviours);\n };\n var renderInput = function (spec, providersBackstage) {\n return renderTextField({\n name: spec.name,\n multiline: false,\n label: spec.label,\n inputMode: spec.inputMode,\n placeholder: spec.placeholder,\n flex: false,\n disabled: spec.disabled,\n classname: 'tox-textfield',\n validation: Option.none(),\n maximized: spec.maximized\n }, providersBackstage);\n };\n var renderTextarea = function (spec, providersBackstage) {\n return renderTextField({\n name: spec.name,\n multiline: true,\n label: spec.label,\n inputMode: Option.none(),\n placeholder: spec.placeholder,\n flex: true,\n disabled: spec.disabled,\n classname: 'tox-textarea',\n validation: Option.none(),\n maximized: spec.maximized\n }, providersBackstage);\n };\n\n var events$c = function (streamConfig, streamState) {\n var streams = streamConfig.stream.streams;\n var processor = streams.setup(streamConfig, streamState);\n return derive([\n run(streamConfig.event, processor),\n runOnDetached(function () {\n return streamState.cancel();\n })\n ].concat(streamConfig.cancelEvent.map(function (e) {\n return [run(e, function () {\n return streamState.cancel();\n })];\n }).getOr([])));\n };\n\n var ActiveStreaming = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$c\n });\n\n var throttle = function (_config) {\n var state = Cell(null);\n var readState = function () {\n return { timer: state.get() !== null ? 'set' : 'unset' };\n };\n var setTimer = function (t) {\n state.set(t);\n };\n var cancel = function () {\n var t = state.get();\n if (t !== null) {\n t.cancel();\n }\n };\n return nu$5({\n readState: readState,\n setTimer: setTimer,\n cancel: cancel\n });\n };\n var init$6 = function (spec) {\n return spec.stream.streams.state(spec);\n };\n\n var StreamingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n throttle: throttle,\n init: init$6\n });\n\n var setup$2 = function (streamInfo, streamState) {\n var sInfo = streamInfo.stream;\n var throttler = last$2(streamInfo.onStream, sInfo.delay);\n streamState.setTimer(throttler);\n return function (component, simulatedEvent) {\n throttler.throttle(component, simulatedEvent);\n if (sInfo.stopEvent) {\n simulatedEvent.stop();\n }\n };\n };\n var StreamingSchema = [\n strictOf('stream', choose$1('mode', {\n throttle: [\n strict$1('delay'),\n defaulted$1('stopEvent', true),\n output('streams', {\n setup: setup$2,\n state: throttle\n })\n ]\n })),\n defaulted$1('event', 'input'),\n option('cancelEvent'),\n onStrictHandler('onStream')\n ];\n\n var Streaming = create$1({\n fields: StreamingSchema,\n name: 'streaming',\n active: ActiveStreaming,\n state: StreamingState\n });\n\n var setValueFromItem = function (model, input, item) {\n var itemData = Representing.getValue(item);\n Representing.setValue(input, itemData);\n setCursorAtEnd(input);\n };\n var setSelectionOn = function (input, f) {\n var el = input.element();\n var value = get$5(el);\n var node = el.dom();\n if (get$2(el, 'type') !== 'number') {\n f(node, value);\n }\n };\n var setCursorAtEnd = function (input) {\n setSelectionOn(input, function (node, value) {\n return node.setSelectionRange(value.length, value.length);\n });\n };\n var setSelectionToEnd = function (input, startOffset) {\n setSelectionOn(input, function (node, value) {\n return node.setSelectionRange(startOffset, value.length);\n });\n };\n var attemptSelectOver = function (model, input, item) {\n if (!model.selectsOver) {\n return Option.none();\n } else {\n var currentValue = Representing.getValue(input);\n var inputDisplay_1 = model.getDisplayText(currentValue);\n var itemValue = Representing.getValue(item);\n var itemDisplay = model.getDisplayText(itemValue);\n return itemDisplay.indexOf(inputDisplay_1) === 0 ? Option.some(function () {\n setValueFromItem(model, input, item);\n setSelectionToEnd(input, inputDisplay_1.length);\n }) : Option.none();\n }\n };\n\n var itemExecute = constant('alloy.typeahead.itemexecute');\n\n var make$5 = function (detail, components, spec, externals) {\n var navigateList = function (comp, simulatedEvent, highlighter) {\n detail.previewing.set(false);\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Composing.getCurrent(sandbox).each(function (menu) {\n Highlighting.getHighlighted(menu).fold(function () {\n highlighter(menu);\n }, function () {\n dispatchEvent(sandbox, menu.element(), 'keydown', simulatedEvent);\n });\n });\n } else {\n var onOpenSync = function (sandbox) {\n Composing.getCurrent(sandbox).each(highlighter);\n };\n open$1(detail, mapFetch(comp), comp, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n }\n };\n var focusBehaviours$1 = focusBehaviours(detail);\n var mapFetch = function (comp) {\n return function (tdata) {\n return tdata.map(function (data) {\n var menus = values(data.menus);\n var items = bind(menus, function (menu) {\n return filter(menu.items, function (item) {\n return item.type === 'item';\n });\n });\n var repState = Representing.getState(comp);\n repState.update(map(items, function (item) {\n return item.data;\n }));\n return data;\n });\n };\n };\n var behaviours = [\n Focusing.config({}),\n Representing.config({\n onSetValue: detail.onSetValue,\n store: __assign({\n mode: 'dataset',\n getDataKey: function (comp) {\n return get$5(comp.element());\n },\n getFallbackEntry: function (itemString) {\n return {\n value: itemString,\n meta: {}\n };\n },\n setValue: function (comp, data) {\n set$3(comp.element(), detail.model.getDisplayText(data));\n }\n }, detail.initialData.map(function (d) {\n return wrap$1('initialValue', d);\n }).getOr({}))\n }),\n Streaming.config({\n stream: {\n mode: 'throttle',\n delay: detail.responseTime,\n stopEvent: false\n },\n onStream: function (component, simulatedEvent) {\n var sandbox = Coupling.getCoupled(component, 'sandbox');\n var focusInInput = Focusing.isFocused(component);\n if (focusInInput) {\n if (get$5(component.element()).length >= detail.minChars) {\n var previousValue_1 = Composing.getCurrent(sandbox).bind(function (menu) {\n return Highlighting.getHighlighted(menu).map(Representing.getValue);\n });\n detail.previewing.set(true);\n var onOpenSync = function (_sandbox) {\n Composing.getCurrent(sandbox).each(function (menu) {\n previousValue_1.fold(function () {\n if (detail.model.selectsOver) {\n Highlighting.highlightFirst(menu);\n }\n }, function (pv) {\n Highlighting.highlightBy(menu, function (item) {\n var itemData = Representing.getValue(item);\n return itemData.value === pv.value;\n });\n Highlighting.getHighlighted(menu).orThunk(function () {\n Highlighting.highlightFirst(menu);\n return Option.none();\n });\n });\n });\n };\n open$1(detail, mapFetch(component), component, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n }\n }\n },\n cancelEvent: typeaheadCancel()\n }),\n Keying.config({\n mode: 'special',\n onDown: function (comp, simulatedEvent) {\n navigateList(comp, simulatedEvent, Highlighting.highlightFirst);\n return Option.some(true);\n },\n onEscape: function (comp) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n return Option.some(true);\n }\n return Option.none();\n },\n onUp: function (comp, simulatedEvent) {\n navigateList(comp, simulatedEvent, Highlighting.highlightLast);\n return Option.some(true);\n },\n onEnter: function (comp) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n var sandboxIsOpen = Sandboxing.isOpen(sandbox);\n if (sandboxIsOpen && !detail.previewing.get()) {\n return Composing.getCurrent(sandbox).bind(function (menu) {\n return Highlighting.getHighlighted(menu);\n }).map(function (item) {\n emitWith(comp, itemExecute(), { item: item });\n return true;\n });\n } else {\n var currentValue = Representing.getValue(comp);\n emit(comp, typeaheadCancel());\n detail.onExecute(sandbox, comp, currentValue);\n if (sandboxIsOpen) {\n Sandboxing.close(sandbox);\n }\n return Option.some(true);\n }\n }\n }),\n Toggling.config({\n toggleClass: detail.markers.openClass,\n aria: { mode: 'expanded' }\n }),\n Coupling.config({\n others: {\n sandbox: function (hotspot) {\n return makeSandbox(detail, hotspot, {\n onOpen: function () {\n return Toggling.on(hotspot);\n },\n onClose: function () {\n return Toggling.off(hotspot);\n }\n });\n }\n }\n }),\n config('typeaheadevents', [\n runOnExecute(function (comp) {\n var onOpenSync = noop;\n togglePopup(detail, mapFetch(comp), comp, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n }),\n run(itemExecute(), function (comp, se) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n setValueFromItem(detail.model, comp, se.event().item());\n emit(comp, typeaheadCancel());\n detail.onItemExecute(comp, sandbox, se.event().item(), Representing.getValue(comp));\n Sandboxing.close(sandbox);\n setCursorAtEnd(comp);\n })\n ].concat(detail.dismissOnBlur ? [run(postBlur(), function (typeahead) {\n var sandbox = Coupling.getCoupled(typeahead, 'sandbox');\n if (search(sandbox.element()).isNone()) {\n Sandboxing.close(sandbox);\n }\n })] : []))\n ];\n return {\n uid: detail.uid,\n dom: dom$2(deepMerge(detail, {\n inputAttributes: {\n 'role': 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'true'\n }\n })),\n behaviours: __assign(__assign({}, focusBehaviours$1), augment(detail.typeaheadBehaviours, behaviours)),\n eventOrder: detail.eventOrder\n };\n };\n\n var schema$j = constant([\n option('lazySink'),\n strict$1('fetch'),\n defaulted$1('minChars', 5),\n defaulted$1('responseTime', 1000),\n onHandler('onOpen'),\n defaulted$1('getHotspot', Option.some),\n defaulted$1('getAnchorOverrides', constant({})),\n defaulted$1('layouts', Option.none()),\n defaulted$1('eventOrder', {}),\n defaultedObjOf('model', {}, [\n defaulted$1('getDisplayText', function (itemData) {\n return itemData.meta !== undefined && itemData.meta.text !== undefined ? itemData.meta.text : itemData.value;\n }),\n defaulted$1('selectsOver', true),\n defaulted$1('populateFromBrowse', true)\n ]),\n onHandler('onSetValue'),\n onKeyboardHandler('onExecute'),\n onHandler('onItemExecute'),\n defaulted$1('inputClasses', []),\n defaulted$1('inputAttributes', {}),\n defaulted$1('inputStyles', {}),\n defaulted$1('matchWidth', true),\n defaulted$1('useMinWidth', false),\n defaulted$1('dismissOnBlur', true),\n markers(['openClass']),\n option('initialData'),\n field$1('typeaheadBehaviours', [\n Focusing,\n Representing,\n Streaming,\n Keying,\n Toggling,\n Coupling\n ]),\n state$1('previewing', function () {\n return Cell(true);\n })\n ].concat(schema$f()).concat(sandboxFields()));\n var parts$6 = constant([external$1({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n overrides: function (detail) {\n return {\n fakeFocus: true,\n onHighlight: function (menu, item) {\n if (!detail.previewing.get()) {\n menu.getSystem().getByUid(detail.uid).each(function (input) {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n } else {\n menu.getSystem().getByUid(detail.uid).each(function (input) {\n attemptSelectOver(detail.model, input, item).fold(function () {\n return Highlighting.dehighlight(menu, item);\n }, function (fn) {\n return fn();\n });\n });\n }\n detail.previewing.set(false);\n },\n onExecute: function (menu, item) {\n return menu.getSystem().getByUid(detail.uid).toOption().map(function (typeahead) {\n emitWith(typeahead, itemExecute(), { item: item });\n return true;\n });\n },\n onHover: function (menu, item) {\n detail.previewing.set(false);\n menu.getSystem().getByUid(detail.uid).each(function (input) {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n }\n };\n }\n })]);\n\n var Typeahead = composite$1({\n name: 'Typeahead',\n configFields: schema$j(),\n partFields: parts$6(),\n factory: make$5\n });\n\n var wrap$2 = function (delegate) {\n var toCached = function () {\n return wrap$2(delegate.toCached());\n };\n var bindFuture = function (f) {\n return wrap$2(delegate.bind(function (resA) {\n return resA.fold(function (err) {\n return Future.pure(Result.error(err));\n }, function (a) {\n return f(a);\n });\n }));\n };\n var bindResult = function (f) {\n return wrap$2(delegate.map(function (resA) {\n return resA.bind(f);\n }));\n };\n var mapResult = function (f) {\n return wrap$2(delegate.map(function (resA) {\n return resA.map(f);\n }));\n };\n var mapError = function (f) {\n return wrap$2(delegate.map(function (resA) {\n return resA.mapError(f);\n }));\n };\n var foldResult = function (whenError, whenValue) {\n return delegate.map(function (res) {\n return res.fold(whenError, whenValue);\n });\n };\n var withTimeout = function (timeout, errorThunk) {\n return wrap$2(Future.nu(function (callback) {\n var timedOut = false;\n var timer = domGlobals.setTimeout(function () {\n timedOut = true;\n callback(Result.error(errorThunk()));\n }, timeout);\n delegate.get(function (result) {\n if (!timedOut) {\n domGlobals.clearTimeout(timer);\n callback(result);\n }\n });\n }));\n };\n return __assign(__assign({}, delegate), {\n toCached: toCached,\n bindFuture: bindFuture,\n bindResult: bindResult,\n mapResult: mapResult,\n mapError: mapError,\n foldResult: foldResult,\n withTimeout: withTimeout\n });\n };\n var nu$c = function (worker) {\n return wrap$2(Future.nu(worker));\n };\n var value$2 = function (value) {\n return wrap$2(Future.pure(Result.value(value)));\n };\n var error$1 = function (error) {\n return wrap$2(Future.pure(Result.error(error)));\n };\n var fromResult$1 = function (result) {\n return wrap$2(Future.pure(result));\n };\n var fromFuture = function (future) {\n return wrap$2(future.map(Result.value));\n };\n var fromPromise = function (promise) {\n return nu$c(function (completer) {\n promise.then(function (value) {\n completer(Result.value(value));\n }, function (error) {\n completer(Result.error(error));\n });\n });\n };\n var FutureResult = {\n nu: nu$c,\n wrap: wrap$2,\n pure: value$2,\n value: value$2,\n error: error$1,\n fromResult: fromResult$1,\n fromFuture: fromFuture,\n fromPromise: fromPromise\n };\n\n var separator$2 = { type: 'separator' };\n var toMenuItem = function (target) {\n return {\n type: 'menuitem',\n value: target.url,\n text: target.title,\n meta: { attach: target.attach },\n onAction: function () {\n }\n };\n };\n var staticMenuItem = function (title, url) {\n return {\n type: 'menuitem',\n value: url,\n text: title,\n meta: { attach: undefined },\n onAction: function () {\n }\n };\n };\n var toMenuItems = function (targets) {\n return map(targets, toMenuItem);\n };\n var filterLinkTargets = function (type, targets) {\n return filter(targets, function (target) {\n return target.type === type;\n });\n };\n var filteredTargets = function (type, targets) {\n return toMenuItems(filterLinkTargets(type, targets));\n };\n var headerTargets = function (linkInfo) {\n return filteredTargets('header', linkInfo.targets);\n };\n var anchorTargets = function (linkInfo) {\n return filteredTargets('anchor', linkInfo.targets);\n };\n var anchorTargetTop = function (linkInfo) {\n return Option.from(linkInfo.anchorTop).map(function (url) {\n return staticMenuItem('', url);\n }).toArray();\n };\n var anchorTargetBottom = function (linkInfo) {\n return Option.from(linkInfo.anchorBottom).map(function (url) {\n return staticMenuItem('', url);\n }).toArray();\n };\n var historyTargets = function (history) {\n return map(history, function (url) {\n return staticMenuItem(url, url);\n });\n };\n var joinMenuLists = 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$2, b);\n }, []);\n };\n var filterByQuery = function (term, menuItems) {\n var lowerCaseTerm = term.toLowerCase();\n return filter(menuItems, function (item) {\n var text = item.meta !== undefined && item.meta.text !== undefined ? item.meta.text : item.text;\n return contains$1(text.toLowerCase(), lowerCaseTerm) || contains$1(item.value.toLowerCase(), lowerCaseTerm);\n });\n };\n\n var getItems = function (fileType, input, urlBackstage) {\n var urlInputValue = Representing.getValue(input);\n var term = urlInputValue.meta.text !== undefined ? urlInputValue.meta.text : urlInputValue.value;\n var info = urlBackstage.getLinkInformation();\n return info.fold(function () {\n return [];\n }, function (linkInfo) {\n var history = filterByQuery(term, historyTargets(urlBackstage.getHistory(fileType)));\n return fileType === 'file' ? joinMenuLists([\n history,\n filterByQuery(term, headerTargets(linkInfo)),\n filterByQuery(term, flatten([\n anchorTargetTop(linkInfo),\n anchorTargets(linkInfo),\n anchorTargetBottom(linkInfo)\n ]))\n ]) : history;\n });\n };\n var errorId = generate$1('aria-invalid');\n var renderUrlInput = function (spec, backstage, urlBackstage) {\n var _a;\n var providersBackstage = backstage.shared.providers;\n var updateHistory = function (component) {\n var urlEntry = Representing.getValue(component);\n urlBackstage.addToHistory(urlEntry.value, spec.filetype);\n };\n var pField = FormField.parts().field({\n factory: Typeahead,\n dismissOnBlur: true,\n inputClasses: ['tox-textfield'],\n sandboxClasses: ['tox-dialog__popups'],\n inputAttributes: {\n 'aria-errormessage': errorId,\n 'type': 'url'\n },\n minChars: 0,\n responseTime: 0,\n fetch: function (input) {\n var items = getItems(spec.filetype, input, urlBackstage);\n var tdata = build$2(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage, false);\n return Future.pure(tdata);\n },\n getHotspot: function (comp) {\n return memUrlBox.getOpt(comp);\n },\n onSetValue: function (comp, newValue) {\n if (comp.hasConfigured(Invalidating)) {\n Invalidating.run(comp).get(noop);\n }\n },\n typeaheadBehaviours: derive$1(flatten([\n urlBackstage.getValidationHandler().map(function (handler) {\n return Invalidating.config({\n getRoot: function (comp) {\n return parent(comp.element());\n },\n invalidClass: 'tox-control-wrap--status-invalid',\n notify: {\n onInvalid: function (comp, err) {\n memInvalidIcon.getOpt(comp).each(function (invalidComp) {\n set$1(invalidComp.element(), 'title', providersBackstage.translate(err));\n });\n }\n },\n validator: {\n validate: function (input) {\n var urlEntry = Representing.getValue(input);\n return FutureResult.nu(function (completer) {\n handler({\n type: spec.filetype,\n url: urlEntry.value\n }, function (validation) {\n if (validation.status === 'invalid') {\n var err = Result.error(validation.message);\n completer(err);\n } else {\n var val = Result.value(validation.message);\n completer(val);\n }\n });\n });\n },\n validateOnLoad: false\n }\n });\n }).toArray(),\n [\n Disabling.config({ disabled: spec.disabled }),\n Tabstopping.config({}),\n config('urlinput-events', flatten([\n spec.filetype === 'file' ? [run(input(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n })] : [],\n [\n run(change(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n }),\n run(postPaste(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n })\n ]\n ]))\n ]\n ])),\n eventOrder: (_a = {}, _a[input()] = [\n 'streaming',\n 'urlinput-events',\n 'invalidating'\n ], _a),\n model: {\n getDisplayText: function (itemData) {\n return itemData.value;\n },\n selectsOver: false,\n populateFromBrowse: false\n },\n markers: { openClass: 'tox-textfield--popup-open' },\n lazySink: backstage.shared.getSink,\n parts: { menu: part(false, 1, 'normal') },\n onExecute: function (_menu, component, _entry) {\n emitWith(component, formSubmitEvent, {});\n },\n onItemExecute: function (typeahead, _sandbox, _item, _value) {\n updateHistory(typeahead);\n emitWith(typeahead, formChangeEvent, { name: spec.name });\n }\n });\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var makeIcon = function (name, errId, icon, label) {\n if (icon === void 0) {\n icon = name;\n }\n if (label === void 0) {\n label = name;\n }\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-icon',\n 'tox-control-wrap__status-icon-' + name\n ],\n innerHtml: get$d(icon, providersBackstage.icons),\n attributes: __assign({\n 'title': providersBackstage.translate(label),\n 'aria-live': 'polite'\n }, errId.fold(function () {\n return {};\n }, function (id) {\n return { id: id };\n }))\n }\n };\n };\n var memInvalidIcon = record(makeIcon('invalid', Option.some(errorId), 'warning'));\n var memStatus = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap__status-icon-wrap']\n },\n components: [memInvalidIcon.asSpec()]\n });\n var optUrlPicker = urlBackstage.getUrlPicker(spec.filetype);\n var browseUrlEvent = generate$1('browser.url.event');\n var memUrlBox = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap']\n },\n components: [\n pField,\n memStatus.asSpec()\n ],\n behaviours: derive$1([Disabling.config({ disabled: spec.disabled })])\n });\n var memUrlPickerButton = record(renderButton({\n name: spec.name,\n icon: Option.some('browse'),\n text: spec.label.getOr(''),\n disabled: spec.disabled,\n primary: false,\n borderless: true\n }, function (component) {\n return emit(component, browseUrlEvent);\n }, providersBackstage, [], ['tox-browse-url']));\n var controlHWrapper = function () {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: flatten([\n [memUrlBox.asSpec()],\n optUrlPicker.map(function () {\n return memUrlPickerButton.asSpec();\n }).toArray()\n ])\n };\n };\n var openUrlPicker = function (comp) {\n Composing.getCurrent(comp).each(function (field) {\n var componentData = Representing.getValue(field);\n var urlData = __assign({ fieldname: spec.name }, componentData);\n optUrlPicker.each(function (picker) {\n picker(urlData).get(function (chosenData) {\n Representing.setValue(field, chosenData);\n emitWith(comp, formChangeEvent, { name: spec.name });\n });\n });\n });\n };\n return FormField.sketch({\n dom: renderFormFieldDom(),\n components: pLabel.toArray().concat([controlHWrapper()]),\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: spec.disabled,\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n memUrlPickerButton.getOpt(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n memUrlPickerButton.getOpt(comp).each(Disabling.enable);\n }\n }),\n config('url-input-events', [run(browseUrlEvent, openUrlPicker)])\n ])\n });\n };\n\n var renderCheckbox = function (spec, providerBackstage) {\n var repBehaviour = Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var el = comp.element().dom();\n return el.checked;\n },\n setValue: function (comp, value) {\n var el = comp.element().dom();\n el.checked = value;\n }\n }\n });\n var toggleCheckboxHandler = function (comp) {\n comp.element().dom().click();\n return Option.some(true);\n };\n var pField = FormField.parts().field({\n factory: { sketch: identity },\n dom: {\n tag: 'input',\n classes: ['tox-checkbox__input'],\n attributes: { type: 'checkbox' }\n },\n behaviours: derive$1([\n ComposingConfigs.self(),\n Disabling.config({ disabled: spec.disabled }),\n Tabstopping.config({}),\n Focusing.config({}),\n repBehaviour,\n Keying.config({\n mode: 'special',\n onEnter: toggleCheckboxHandler,\n onSpace: toggleCheckboxHandler,\n stopSpaceKeyup: true\n }),\n config('checkbox-events', [run(change(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n var pLabel = FormField.parts().label({\n dom: {\n tag: 'span',\n classes: ['tox-checkbox__label'],\n innerHtml: providerBackstage.translate(spec.label)\n },\n behaviours: derive$1([Unselecting.config({})])\n });\n var makeIcon = function (className) {\n var iconName = className === 'checked' ? 'selected' : 'unselected';\n return {\n dom: {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-checkbox-icon__' + className\n ],\n innerHtml: get$d(iconName, providerBackstage.icons)\n }\n };\n };\n var memIcons = record({\n dom: {\n tag: 'div',\n classes: ['tox-checkbox__icons']\n },\n components: [\n makeIcon('checked'),\n makeIcon('unchecked')\n ]\n });\n return FormField.sketch({\n dom: {\n tag: 'label',\n classes: ['tox-checkbox']\n },\n components: [\n pField,\n memIcons.asSpec(),\n pLabel\n ],\n fieldBehaviours: derive$1([Disabling.config({\n disabled: spec.disabled,\n disableClass: 'tox-checkbox--disabled',\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n })])\n });\n };\n\n var renderHtmlPanel = function (spec) {\n if (spec.presets === 'presentation') {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group'],\n innerHtml: spec.html\n }\n });\n } else {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group'],\n innerHtml: spec.html,\n attributes: { role: 'document' }\n },\n containerBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n });\n }\n };\n\n var renderLabel$2 = function (spec, backstageShared) {\n var label = {\n dom: {\n tag: 'label',\n innerHtml: backstageShared.providers.translate(spec.label),\n classes: ['tox-label']\n }\n };\n var comps = map(spec.items, backstageShared.interpreter);\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [label].concat(comps),\n behaviours: derive$1([\n ComposingConfigs.self(),\n Replacing.config({}),\n RepresentingConfigs.domHtml(Option.none()),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n\n var renderCollection = function (spec, providersBackstage) {\n var pLabel = spec.label.map(function (label) {\n return renderLabel(label, providersBackstage);\n });\n var runOnItem = function (f) {\n return function (comp, se) {\n closest$3(se.event().target(), '[data-collection-item-value]').each(function (target) {\n f(comp, se, target, get$2(target, 'data-collection-item-value'));\n });\n };\n };\n var escapeAttribute = function (ch) {\n if (ch === '\"') {\n return '"';\n }\n return ch;\n };\n var setContents = function (comp, items) {\n var htmlLines = map(items, function (item) {\n var itemText = global$7.translate(item.text);\n var textContent = spec.columns === 1 ? '
' + itemText + '
' : '';\n var iconContent = '
' + item.icon + '
';\n var mapItemName = {\n '_': ' ',\n ' - ': ' ',\n '-': ' '\n };\n var ariaLabel = itemText.replace(/\\_| \\- |\\-/g, function (match) {\n return mapItemName[match];\n });\n return '
' + iconContent + textContent + '
';\n });\n var chunks = spec.columns > 1 && spec.columns !== 'auto' ? chunk(htmlLines, spec.columns) : [htmlLines];\n var html = map(chunks, function (ch) {\n return '
' + ch.join('') + '
';\n });\n set(comp.element(), html.join(''));\n };\n var onClick = runOnItem(function (comp, se, tgt, itemValue) {\n se.stop();\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n });\n var collectionEvents = [\n run(mouseover(), runOnItem(function (comp, se, tgt) {\n focus$1(tgt);\n })),\n run(click(), onClick),\n run(tap(), onClick),\n run(focusin(), runOnItem(function (comp, se, tgt) {\n descendant$1(comp.element(), '.' + activeClass).each(function (currentActive) {\n remove$4(currentActive, activeClass);\n });\n add$2(tgt, activeClass);\n })),\n run(focusout(), runOnItem(function (comp) {\n descendant$1(comp.element(), '.' + activeClass).each(function (currentActive) {\n remove$4(currentActive, activeClass);\n });\n })),\n runOnExecute(runOnItem(function (comp, se, tgt, itemValue) {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }))\n ];\n var pField = FormField.parts().field({\n dom: {\n tag: 'div',\n classes: ['tox-collection'].concat(spec.columns !== 1 ? ['tox-collection--grid'] : ['tox-collection--list'])\n },\n components: [],\n factory: { sketch: identity },\n behaviours: derive$1([\n Replacing.config({}),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: []\n },\n onSetValue: function (comp, items) {\n setContents(comp, items);\n if (spec.columns === 'auto') {\n detectSize(comp, 5, 'tox-collection__item').each(function (_a) {\n var numRows = _a.numRows, numColumns = _a.numColumns;\n Keying.setGridSize(comp, numRows, numColumns);\n });\n }\n emit(comp, formResizeEvent);\n }\n }),\n Tabstopping.config({}),\n Keying.config(deriveCollectionMovement(spec.columns, 'normal')),\n config('collection-events', collectionEvents)\n ])\n });\n var extraClasses = ['tox-form__group--collection'];\n return renderFormFieldWith(pLabel, pField, extraClasses, []);\n };\n\n var renderTable = function (spec, providersBackstage) {\n var renderTh = function (text) {\n return {\n dom: {\n tag: 'th',\n innerHtml: providersBackstage.translate(text)\n }\n };\n };\n var renderHeader = function (header) {\n return {\n dom: { tag: 'thead' },\n components: [{\n dom: { tag: 'tr' },\n components: map(header, renderTh)\n }]\n };\n };\n var renderTd = function (text) {\n return {\n dom: {\n tag: 'td',\n innerHtml: providersBackstage.translate(text)\n }\n };\n };\n var renderTr = function (row) {\n return {\n dom: { tag: 'tr' },\n components: map(row, renderTd)\n };\n };\n var renderRows = function (rows) {\n return {\n dom: { tag: 'tbody' },\n components: map(rows, renderTr)\n };\n };\n return {\n dom: {\n tag: 'table',\n classes: ['tox-dialog__table']\n },\n components: [\n renderHeader(spec.header),\n renderRows(spec.cells)\n ],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n };\n };\n\n var renderPanel = function (spec, backstage) {\n return {\n dom: {\n tag: 'div',\n classes: spec.classes\n },\n components: map(spec.items, backstage.shared.interpreter)\n };\n };\n\n var make$6 = function (render) {\n return function (parts, spec, backstage) {\n return get(spec, 'name').fold(function () {\n return render(spec, backstage);\n }, function (fieldName) {\n return parts.field(fieldName, render(spec, backstage));\n });\n };\n };\n var makeIframe = function (render) {\n return function (parts, spec, backstage) {\n var iframeSpec = deepMerge(spec, { source: 'dynamic' });\n return make$6(render)(parts, iframeSpec, backstage);\n };\n };\n var factories = {\n bar: make$6(function (spec, backstage) {\n return renderBar(spec, backstage.shared);\n }),\n collection: make$6(function (spec, backstage) {\n return renderCollection(spec, backstage.shared.providers);\n }),\n alertbanner: make$6(function (spec, backstage) {\n return renderAlertBanner(spec, backstage.shared.providers);\n }),\n input: make$6(function (spec, backstage) {\n return renderInput(spec, backstage.shared.providers);\n }),\n textarea: make$6(function (spec, backstage) {\n return renderTextarea(spec, backstage.shared.providers);\n }),\n label: make$6(function (spec, backstage) {\n return renderLabel$2(spec, backstage.shared);\n }),\n iframe: makeIframe(function (spec, backstage) {\n return renderIFrame(spec, backstage.shared.providers);\n }),\n button: make$6(function (spec, backstage) {\n return renderDialogButton(spec, backstage.shared.providers);\n }),\n checkbox: make$6(function (spec, backstage) {\n return renderCheckbox(spec, backstage.shared.providers);\n }),\n colorinput: make$6(function (spec, backstage) {\n return renderColorInput(spec, backstage.shared, backstage.colorinput);\n }),\n colorpicker: make$6(renderColorPicker),\n dropzone: make$6(function (spec, backstage) {\n return renderDropZone(spec, backstage.shared.providers);\n }),\n grid: make$6(function (spec, backstage) {\n return renderGrid(spec, backstage.shared);\n }),\n selectbox: make$6(function (spec, backstage) {\n return renderSelectBox(spec, backstage.shared.providers);\n }),\n sizeinput: make$6(function (spec, backstage) {\n return renderSizeInput(spec, backstage.shared.providers);\n }),\n urlinput: make$6(function (spec, backstage) {\n return renderUrlInput(spec, backstage, backstage.urlinput);\n }),\n customeditor: make$6(renderCustomEditor),\n htmlpanel: make$6(renderHtmlPanel),\n imagetools: make$6(function (spec, backstage) {\n return renderImageTools(spec, backstage.shared.providers);\n }),\n table: make$6(function (spec, backstage) {\n return renderTable(spec, backstage.shared.providers);\n }),\n panel: make$6(function (spec, backstage) {\n return renderPanel(spec, backstage);\n })\n };\n var noFormParts = {\n field: function (_name, spec) {\n return spec;\n }\n };\n var interpretInForm = function (parts, spec, oldBackstage) {\n var newBackstage = deepMerge(oldBackstage, {\n shared: {\n interpreter: function (childSpec) {\n return interpretParts(parts, childSpec, newBackstage);\n }\n }\n });\n return interpretParts(parts, spec, newBackstage);\n };\n var interpretParts = function (parts, spec, backstage) {\n return get(factories, spec.type).fold(function () {\n domGlobals.console.error('Unknown factory type \"' + spec.type + '\", defaulting to container: ', spec);\n return spec;\n }, function (factory) {\n return factory(parts, spec, backstage);\n });\n };\n var interpretWithoutForm = function (spec, backstage) {\n var parts = noFormParts;\n return interpretParts(parts, spec, backstage);\n };\n\n var bubbleAlignments = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: [],\n alignRight: [],\n right: [],\n left: [],\n bottom: [],\n top: []\n };\n var getInlineDialogAnchor = function (contentAreaElement, lazyAnchorbar, useEditableAreaAnchor) {\n var bubble = nu$8(-12, 12, bubbleAlignments);\n var overrides = { maxHeightFunction: expandable() };\n var editableAreaAnchor = function () {\n return {\n anchor: 'node',\n root: getBody(owner(contentAreaElement())),\n node: Option.from(contentAreaElement()),\n bubble: bubble,\n layouts: {\n onRtl: function () {\n return [northwest$3];\n },\n onLtr: function () {\n return [northeast$3];\n }\n },\n overrides: overrides\n };\n };\n var standardAnchor = function () {\n return {\n anchor: 'hotspot',\n hotspot: lazyAnchorbar(),\n bubble: bubble,\n layouts: {\n onRtl: function () {\n return [southeast$1];\n },\n onLtr: function () {\n return [southwest$1];\n }\n },\n overrides: overrides\n };\n };\n return useEditableAreaAnchor ? editableAreaAnchor : standardAnchor;\n };\n var getBannerAnchor = function (contentAreaElement, lazyAnchorbar, useEditableAreaAnchor) {\n var editableAreaAnchor = function () {\n return {\n anchor: 'node',\n root: getBody(owner(contentAreaElement())),\n node: Option.from(contentAreaElement()),\n layouts: {\n onRtl: function () {\n return [north$3];\n },\n onLtr: function () {\n return [north$3];\n }\n }\n };\n };\n var standardAnchor = function () {\n return {\n anchor: 'hotspot',\n hotspot: lazyAnchorbar(),\n layouts: {\n onRtl: function () {\n return [south$1];\n },\n onLtr: function () {\n return [south$1];\n }\n }\n };\n };\n return useEditableAreaAnchor ? editableAreaAnchor : standardAnchor;\n };\n var getCursorAnchor = function (editor, bodyElement) {\n return function () {\n return {\n anchor: 'selection',\n root: bodyElement(),\n getSelection: function () {\n var rng = editor.selection.getRng();\n return Option.some(Selection.range(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset));\n }\n };\n };\n };\n var getNodeAnchor = function (bodyElement) {\n return function (element) {\n return {\n anchor: 'node',\n root: bodyElement(),\n node: element\n };\n };\n };\n var getAnchors = function (editor, lazyAnchorbar) {\n var useFixedToolbarContainer = useFixedContainer(editor);\n var bodyElement = function () {\n return Element.fromDom(editor.getBody());\n };\n var contentAreaElement = function () {\n return Element.fromDom(editor.getContentAreaContainer());\n };\n var useEditableAreaAnchor = useFixedToolbarContainer || !isToolbarLocationTop(editor);\n return {\n inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, useEditableAreaAnchor),\n banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, useEditableAreaAnchor),\n cursor: getCursorAnchor(editor, bodyElement),\n node: getNodeAnchor(bodyElement)\n };\n };\n var Anchors = { getAnchors: getAnchors };\n\n var colorPicker = function (editor) {\n return function (callback, value) {\n var dialog = ColorSwatch.colorPickerDialog(editor);\n dialog(callback, value);\n };\n };\n var hasCustomColors$1 = function (editor) {\n return function () {\n return Settings.hasCustomColors(editor);\n };\n };\n var getColors$1 = function (editor) {\n return function () {\n return Settings.getColors(editor);\n };\n };\n var getColorCols$2 = function (editor) {\n return function () {\n return ColorSwatch.getColorCols(editor);\n };\n };\n var ColorInputBackstage = function (editor) {\n return {\n colorPicker: colorPicker(editor),\n hasCustomColors: hasCustomColors$1(editor),\n getColors: getColors$1(editor),\n getColorCols: getColorCols$2(editor)\n };\n };\n\n var isDraggableModal$1 = function (editor) {\n return function () {\n return isDraggableModal(editor);\n };\n };\n var DialogBackstage = function (editor) {\n return { isDraggableModal: isDraggableModal$1(editor) };\n };\n\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: 'strike-through',\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: 'Align',\n items: [\n {\n title: 'Left',\n icon: 'align-left',\n format: 'alignleft'\n },\n {\n title: 'Center',\n icon: 'align-center',\n format: 'aligncenter'\n },\n {\n title: 'Right',\n icon: 'align-right',\n format: 'alignright'\n },\n {\n title: 'Justify',\n icon: 'align-justify',\n format: 'alignjustify'\n }\n ]\n }\n ];\n var isNestedFormat = function (format) {\n return has(format, 'items');\n };\n var isBlockFormat = function (format) {\n return has(format, 'block');\n };\n var isInlineFormat = function (format) {\n return has(format, 'inline');\n };\n var isSelectorFormat = function (format) {\n return has(format, 'selector');\n };\n var mapFormats = function (userFormats) {\n return foldl(userFormats, function (acc, fmt) {\n if (isNestedFormat(fmt)) {\n var result = mapFormats(fmt.items);\n return {\n customFormats: acc.customFormats.concat(result.customFormats),\n formats: acc.formats.concat([{\n title: fmt.title,\n items: result.formats\n }])\n };\n } else if (isInlineFormat(fmt) || isBlockFormat(fmt) || isSelectorFormat(fmt)) {\n var formatName = 'custom-' + fmt.title.toLowerCase();\n return {\n customFormats: acc.customFormats.concat([{\n name: formatName,\n format: fmt\n }]),\n formats: acc.formats.concat([{\n title: fmt.title,\n format: formatName,\n icon: fmt.icon\n }])\n };\n } else {\n return __assign(__assign({}, acc), { formats: acc.formats.concat(fmt) });\n }\n }, {\n customFormats: [],\n formats: []\n });\n };\n var registerCustomFormats = function (editor, userFormats) {\n var result = mapFormats(userFormats);\n var registerFormats = function (customFormats) {\n each(customFormats, function (fmt) {\n if (!editor.formatter.has(fmt.name)) {\n editor.formatter.register(fmt.name, fmt.format);\n }\n });\n };\n if (editor.formatter) {\n registerFormats(result.customFormats);\n } else {\n editor.on('init', function () {\n registerFormats(result.customFormats);\n });\n }\n return result.formats;\n };\n var getStyleFormats = function (editor) {\n return getUserStyleFormats(editor).map(function (userFormats) {\n var registeredUserFormats = registerCustomFormats(editor, userFormats);\n return isMergeStyleFormats(editor) ? defaultStyleFormats.concat(registeredUserFormats) : registeredUserFormats;\n }).getOr(defaultStyleFormats);\n };\n\n var processBasic = function (item, isSelectedFor, getPreviewFor) {\n var formatterSpec = {\n type: 'formatter',\n isSelected: isSelectedFor(item.format),\n getStylePreview: getPreviewFor(item.format)\n };\n return deepMerge(item, formatterSpec);\n };\n var register$3 = function (editor, formats, isSelectedFor, getPreviewFor) {\n var enrichSupported = function (item) {\n return processBasic(item, isSelectedFor, getPreviewFor);\n };\n var enrichMenu = function (item) {\n var submenuSpec = { type: 'submenu' };\n return deepMerge(item, submenuSpec);\n };\n var enrichCustom = function (item) {\n var formatName = generate$1(item.title);\n var customSpec = {\n type: 'formatter',\n format: formatName,\n isSelected: isSelectedFor(formatName),\n getStylePreview: getPreviewFor(formatName)\n };\n var newItem = deepMerge(item, customSpec);\n editor.formatter.register(formatName, newItem);\n return newItem;\n };\n var doEnrich = function (items) {\n return map(items, function (item) {\n var keys$1 = keys(item);\n if (hasNonNullableKey(item, 'items')) {\n var newItems_1 = doEnrich(item.items);\n return deepMerge(enrichMenu(item), {\n getStyleItems: function () {\n return newItems_1;\n }\n });\n } else if (hasNonNullableKey(item, 'format')) {\n return enrichSupported(item);\n } else if (keys$1.length === 1 && contains(keys$1, 'title')) {\n return deepMerge(item, { type: 'separator' });\n } else {\n return enrichCustom(item);\n }\n });\n };\n return doEnrich(formats);\n };\n\n var init$7 = function (editor) {\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var fmt = editor.formatter.get(format);\n return fmt !== undefined ? Option.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Option.none();\n };\n };\n var flatten = function (fmt) {\n var subs = fmt.items;\n return subs !== undefined && subs.length > 0 ? bind(subs, flatten) : [fmt.format];\n };\n var settingsFormats = Cell([]);\n var settingsFlattenedFormats = Cell([]);\n var eventsFormats = Cell([]);\n var eventsFlattenedFormats = Cell([]);\n var replaceSettings = Cell(false);\n editor.on('PreInit', function (e) {\n var formats = getStyleFormats(editor);\n var enriched = register$3(editor, formats, isSelectedFor, getPreviewFor);\n settingsFormats.set(enriched);\n settingsFlattenedFormats.set(bind(enriched, flatten));\n });\n editor.on('addStyleModifications', function (e) {\n var modifications = register$3(editor, e.items, isSelectedFor, getPreviewFor);\n eventsFormats.set(modifications);\n replaceSettings.set(e.replace);\n eventsFlattenedFormats.set(bind(modifications, flatten));\n });\n var getData = function () {\n var fromSettings = replaceSettings.get() ? [] : settingsFormats.get();\n var fromEvents = eventsFormats.get();\n return fromSettings.concat(fromEvents);\n };\n var getFlattenedKeys = function () {\n var fromSettings = replaceSettings.get() ? [] : settingsFlattenedFormats.get();\n var fromEvents = eventsFlattenedFormats.get();\n return fromSettings.concat(fromEvents);\n };\n return {\n getData: getData,\n getFlattenedKeys: getFlattenedKeys\n };\n };\n\n var trim$1 = global$e.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$8 = 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$1('h');\n };\n var isAnchor = function (elm) {\n return elm && elm.nodeName === 'A' && (elm.id || elm.name) !== undefined;\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$8('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$8('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$1(target.title).length > 0;\n };\n var find$5 = function (elm) {\n var elms = getTargetElements(elm);\n return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n };\n var LinkTargets = { find: find$5 };\n\n var STORAGE_KEY = 'tinymce-url-history';\n var HISTORY_LENGTH = 5;\n var isHttpUrl = function (url) {\n return isString(url) && /^https?/.test(url);\n };\n var isArrayOfUrl = function (a) {\n return isArray(a) && a.length <= HISTORY_LENGTH && forall(a, isHttpUrl);\n };\n var isRecordOfUrlArray = function (r) {\n return isObject(r) && find$1(r, function (value) {\n return !isArrayOfUrl(value);\n }).isNone();\n };\n var getAllHistory = function () {\n var unparsedHistory = domGlobals.localStorage.getItem(STORAGE_KEY);\n if (unparsedHistory === null) {\n return {};\n }\n var history;\n try {\n history = JSON.parse(unparsedHistory);\n } catch (e) {\n if (e instanceof SyntaxError) {\n domGlobals.console.log('Local storage ' + STORAGE_KEY + ' was not valid JSON', e);\n return {};\n }\n throw e;\n }\n if (!isRecordOfUrlArray(history)) {\n domGlobals.console.log('Local storage ' + STORAGE_KEY + ' was not valid format', history);\n return {};\n }\n return history;\n };\n var setAllHistory = function (history) {\n if (!isRecordOfUrlArray(history)) {\n throw new Error('Bad format for history:\\n' + JSON.stringify(history));\n }\n domGlobals.localStorage.setItem(STORAGE_KEY, JSON.stringify(history));\n };\n var getHistory = function (fileType) {\n var history = getAllHistory();\n return Object.prototype.hasOwnProperty.call(history, fileType) ? history[fileType] : [];\n };\n var addToHistory = function (url, fileType) {\n if (!isHttpUrl(url)) {\n return;\n }\n var history = getAllHistory();\n var items = Object.prototype.hasOwnProperty.call(history, fileType) ? history[fileType] : [];\n var itemsWithoutUrl = filter(items, function (item) {\n return item !== url;\n });\n history[fileType] = [url].concat(itemsWithoutUrl).slice(0, HISTORY_LENGTH);\n setAllHistory(history);\n };\n\n var hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n var isTruthy = function (value) {\n return !!value;\n };\n var makeMap = function (value) {\n return map$1(global$e.makeMap(value, /[, ]/), isTruthy);\n };\n var getOpt$1 = function (obj, key) {\n return hasOwnProperty$2.call(obj, key) ? Option.some(obj[key]) : Option.none();\n };\n var getTextSetting = function (settings, name, defaultValue) {\n var value = getOpt$1(settings, name).getOr(defaultValue);\n return isString(value) ? Option.some(value) : Option.none();\n };\n var getPicker = function (settings) {\n return Option.some(settings.file_picker_callback).filter(isFunction);\n };\n var getPickerTypes = function (settings) {\n var optFileTypes = Option.some(settings.file_picker_types).filter(isTruthy);\n var optLegacyTypes = Option.some(settings.file_browser_callback_types).filter(isTruthy);\n var optTypes = optFileTypes.or(optLegacyTypes).map(makeMap);\n return getPicker(settings).fold(function () {\n return false;\n }, function (_picker) {\n return optTypes.fold(function () {\n return true;\n }, function (types) {\n return keys(types).length > 0 ? types : false;\n });\n });\n };\n var getPickerSetting = function (settings, filetype) {\n var pickerTypes = getPickerTypes(settings);\n if (isBoolean(pickerTypes)) {\n return pickerTypes ? getPicker(settings) : Option.none();\n } else {\n return pickerTypes[filetype] ? getPicker(settings) : Option.none();\n }\n };\n var getUrlPicker = function (editor, filetype) {\n return getPickerSetting(editor.settings, filetype).map(function (picker) {\n return function (entry) {\n return Future.nu(function (completer) {\n var handler = function (value, meta) {\n if (!isString(value)) {\n throw new Error('Expected value to be string');\n }\n if (meta !== undefined && !isObject(meta)) {\n throw new Error('Expected meta to be a object');\n }\n var r = {\n value: value,\n meta: meta\n };\n completer(r);\n };\n var meta = __assign({\n filetype: filetype,\n fieldname: entry.fieldname\n }, Option.from(entry.meta).getOr({}));\n picker.call(editor, handler, entry.value, meta);\n });\n };\n });\n };\n var getLinkInformation = function (editor) {\n if (editor.settings.typeahead_urls === false) {\n return Option.none();\n }\n return Option.some({\n targets: LinkTargets.find(editor.getBody()),\n anchorTop: getTextSetting(editor.settings, 'anchor_top', '#top').getOrUndefined(),\n anchorBottom: getTextSetting(editor.settings, 'anchor_bottom', '#bottom').getOrUndefined()\n });\n };\n var getValidationHandler = function (editor) {\n var optValidator = Option.from(editor.settings.file_picker_validator_handler).filter(isFunction);\n return optValidator.orThunk(function () {\n return Option.from(editor.settings.filepicker_validator_handler).filter(isFunction);\n });\n };\n var UrlInputBackstage = function (editor) {\n return {\n getHistory: getHistory,\n addToHistory: addToHistory,\n getLinkInformation: function () {\n return getLinkInformation(editor);\n },\n getValidationHandler: function () {\n return getValidationHandler(editor);\n },\n getUrlPicker: function (filetype) {\n return getUrlPicker(editor, filetype);\n }\n };\n };\n\n var init$8 = function (sink, editor, lazyAnchorbar) {\n var contextMenuState = Cell(false);\n var backstage = {\n shared: {\n providers: {\n icons: function () {\n return editor.ui.registry.getAll().icons;\n },\n menuItems: function () {\n return editor.ui.registry.getAll().menuItems;\n },\n translate: global$7.translate\n },\n interpreter: function (s) {\n return interpretWithoutForm(s, backstage);\n },\n anchors: Anchors.getAnchors(editor, lazyAnchorbar),\n getSink: function () {\n return Result.value(sink);\n }\n },\n urlinput: UrlInputBackstage(editor),\n styleselect: init$7(editor),\n colorinput: ColorInputBackstage(editor),\n dialog: DialogBackstage(editor),\n isContextMenuOpen: function () {\n return contextMenuState.get();\n },\n setContextMenuState: function (state) {\n return contextMenuState.set(state);\n }\n };\n return backstage;\n };\n\n var expandable$1 = constant(function (element, available) {\n setMax$1(element, Math.floor(available));\n });\n\n var showContextToolbarEvent = 'contexttoolbar-show';\n var hideContextToolbarEvent = 'contexttoolbar-hide';\n\n var schema$k = constant([\n strict$1('items'),\n markers(['itemSelector']),\n field$1('tgroupBehaviours', [Keying])\n ]);\n var parts$7 = constant([group({\n name: 'items',\n unit: 'item'\n })]);\n\n var factory$9 = function (detail, components, spec, _externals) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.tgroupBehaviours, [Keying.config({\n mode: 'flow',\n selector: detail.markers.itemSelector\n })]),\n domModification: { attributes: { role: 'toolbar' } }\n };\n };\n var ToolbarGroup = composite$1({\n name: 'ToolbarGroup',\n configFields: schema$k(),\n partFields: parts$7(),\n factory: factory$9\n });\n\n var schema$l = constant([\n strict$1('dom'),\n defaulted$1('shell', true),\n field$1('toolbarBehaviours', [Replacing])\n ]);\n var enhanceGroups = function () {\n return { behaviours: derive$1([Replacing.config({})]) };\n };\n var parts$8 = constant([optional({\n name: 'groups',\n overrides: enhanceGroups\n })]);\n\n var factory$a = function (detail, components, spec, _externals) {\n var setGroups = function (toolbar, groups) {\n getGroupContainer(toolbar).fold(function () {\n domGlobals.console.error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n throw new Error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n }, function (container) {\n Replacing.set(container, groups);\n });\n };\n var getGroupContainer = function (component) {\n return detail.shell ? Option.some(component) : getPart(component, detail, 'groups');\n };\n var extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components: components\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.toolbarBehaviours, extra.behaviours),\n apis: { setGroups: setGroups },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var Toolbar = composite$1({\n name: 'Toolbar',\n configFields: schema$l(),\n partFields: parts$8(),\n factory: factory$a,\n apis: {\n setGroups: function (apis, toolbar, groups) {\n apis.setGroups(toolbar, groups);\n }\n }\n });\n\n var generate$6 = function (xs, f) {\n var init = {\n len: 0,\n list: []\n };\n var r = foldl(xs, function (b, a) {\n var value = f(a, b.len);\n return value.fold(constant(b), function (v) {\n return {\n len: v.finish(),\n list: b.list.concat([v])\n };\n });\n }, init);\n return r.list;\n };\n\n var output$1 = Immutable('within', 'extra', 'withinWidth');\n var apportion = function (units, total, len) {\n var parray = generate$6(units, function (unit, current) {\n var width = len(unit);\n return Option.some({\n element: constant(unit),\n start: constant(current),\n finish: constant(current + width),\n width: constant(width)\n });\n });\n var within = filter(parray, function (unit) {\n return unit.finish() <= total;\n });\n var withinWidth = foldr(within, function (acc, el) {\n return acc + el.width();\n }, 0);\n var extra = parray.slice(within.length);\n return {\n within: constant(within),\n extra: constant(extra),\n withinWidth: constant(withinWidth)\n };\n };\n var toUnit = function (parray) {\n return map(parray, function (unit) {\n return unit.element();\n });\n };\n var fitLast = function (within, extra, withinWidth) {\n var fits = toUnit(within.concat(extra));\n return output$1(fits, [], withinWidth);\n };\n var overflow = function (within, extra, overflower, withinWidth) {\n var fits = toUnit(within).concat([overflower]);\n return output$1(fits, toUnit(extra), withinWidth);\n };\n var fitAll = function (within, extra, withinWidth) {\n return output$1(toUnit(within), [], withinWidth);\n };\n var tryFit = function (total, units, len) {\n var divide = apportion(units, total, len);\n return divide.extra().length === 0 ? Option.some(divide) : Option.none();\n };\n var partition$3 = function (total, units, len, overflower) {\n var divide = tryFit(total, units, len).getOrThunk(function () {\n return apportion(units, total - len(overflower), len);\n });\n var within = divide.within();\n var extra = divide.extra();\n var withinWidth = divide.withinWidth();\n if (extra.length === 1 && extra[0].width() <= len(overflower)) {\n return fitLast(within, extra, withinWidth);\n } else if (extra.length >= 1) {\n return overflow(within, extra, overflower, withinWidth);\n } else {\n return fitAll(within, extra, withinWidth);\n }\n };\n\n var setGroups = function (toolbar, storedGroups) {\n var bGroups = map(storedGroups, function (g) {\n return premade$1(g);\n });\n Toolbar.setGroups(toolbar, bGroups);\n };\n var findFocusedComp = function (comps) {\n return findMap(comps, function (comp) {\n return search(comp.element()).bind(function (focusedElm) {\n return comp.getSystem().getByDom(focusedElm).toOption();\n });\n });\n };\n var refresh = function (toolbar, detail, setOverflow) {\n var primary = getPartOrDie(toolbar, detail, 'primary');\n var overflowGroup = Coupling.getCoupled(toolbar, 'overflowGroup');\n set$2(primary.element(), 'visibility', 'hidden');\n var groups = detail.builtGroups.get().concat([overflowGroup]);\n var focusedComp = findFocusedComp(groups);\n setOverflow([]);\n setGroups(primary, groups);\n var availableWidth = get$7(primary.element());\n var overflows = partition$3(availableWidth, detail.builtGroups.get(), function (comp) {\n return get$7(comp.element());\n }, overflowGroup);\n if (overflows.extra().length === 0) {\n Replacing.remove(primary, overflowGroup);\n setOverflow([]);\n } else {\n setGroups(primary, overflows.within());\n setOverflow(overflows.extra());\n }\n remove$6(primary.element(), 'visibility');\n reflow(primary.element());\n focusedComp.each(Focusing.focus);\n };\n\n var schema$m = constant([\n field$1('splitToolbarBehaviours', [Coupling]),\n state$1('builtGroups', function () {\n return Cell([]);\n })\n ]);\n\n var schema$n = constant([\n markers(['overflowToggledClass']),\n optionFunction('getOverflowBounds'),\n strict$1('lazySink'),\n state$1('overflowGroups', function () {\n return Cell([]);\n })\n ].concat(schema$m()));\n var parts$9 = constant([\n required({\n factory: Toolbar,\n schema: schema$l(),\n name: 'primary'\n }),\n external$1({\n schema: schema$l(),\n name: 'overflow'\n }),\n external$1({ name: 'overflow-button' }),\n external$1({ name: 'overflow-group' })\n ]);\n\n var schema$o = constant([\n markers(['toggledClass']),\n strict$1('lazySink'),\n strictFunction('fetch'),\n optionFunction('getBounds'),\n optionObjOf('fireDismissalEventInstead', [defaulted$1('event', dismissRequested())]),\n schema$1()\n ]);\n var parts$a = constant([\n external$1({\n name: 'button',\n overrides: function (detail) {\n return {\n dom: { attributes: { 'aria-haspopup': 'true' } },\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.toggledClass,\n aria: { mode: 'expanded' },\n toggleOnExecute: false\n })])\n };\n }\n }),\n external$1({\n factory: Toolbar,\n schema: schema$l(),\n name: 'toolbar',\n overrides: function (detail) {\n return {\n toolbarBehaviours: derive$1([Keying.config({\n mode: 'cyclic',\n onEscape: function (comp) {\n getPart(comp, detail, 'button').each(Focusing.focus);\n return Option.none();\n }\n })])\n };\n }\n })\n ]);\n\n var toggle$2 = function (button, externals) {\n var toolbarSandbox = Coupling.getCoupled(button, 'toolbarSandbox');\n if (Sandboxing.isOpen(toolbarSandbox)) {\n Sandboxing.close(toolbarSandbox);\n } else {\n Sandboxing.open(toolbarSandbox, externals.toolbar());\n }\n };\n var position$2 = function (button, toolbar, detail, layouts) {\n var bounds = detail.getBounds.map(function (bounder) {\n return bounder();\n });\n var sink = detail.lazySink(button).getOrDie();\n Positioning.positionWithinBounds(sink, {\n anchor: 'hotspot',\n hotspot: button,\n layouts: layouts,\n overrides: { maxWidthFunction: expandable$1() }\n }, toolbar, bounds);\n };\n var setGroups$1 = function (button, toolbar, detail, layouts, groups) {\n Toolbar.setGroups(toolbar, groups);\n position$2(button, toolbar, detail, layouts);\n Toggling.on(button);\n };\n var makeSandbox$1 = function (button, spec, detail) {\n var ariaOwner = manager();\n var onOpen = function (sandbox, toolbar) {\n detail.fetch().get(function (groups) {\n setGroups$1(button, toolbar, detail, spec.layouts, groups);\n ariaOwner.link(button.element());\n Keying.focusIn(toolbar);\n });\n };\n var onClose = function () {\n Toggling.off(button);\n Focusing.focus(button);\n ariaOwner.unlink(button.element());\n };\n return {\n dom: {\n tag: 'div',\n attributes: { id: ariaOwner.id() }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onEscape: function (comp) {\n Sandboxing.close(comp);\n return Option.some(true);\n }\n }),\n Sandboxing.config({\n onOpen: onOpen,\n onClose: onClose,\n isPartOf: function (container, data, queryElem) {\n return isPartOf(data, queryElem) || isPartOf(button, queryElem);\n },\n getAttachPoint: function () {\n return detail.lazySink(button).getOrDie();\n }\n }),\n Receiving.config({\n channels: __assign(__assign({}, receivingChannel(__assign({ isExtraPart: never }, detail.fireDismissalEventInstead.map(function (fe) {\n return { fireEventInstead: { event: fe.event } };\n }).getOr({})))), receivingChannel$1({\n doReposition: function () {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(function (toolbar) {\n position$2(button, toolbar, detail, spec.layouts);\n });\n }\n }))\n })\n ])\n };\n };\n var factory$b = function (detail, components, spec, externals) {\n return __assign(__assign({}, Button.sketch(__assign(__assign({}, externals.button()), {\n action: function (button) {\n toggle$2(button, externals);\n },\n buttonBehaviours: SketchBehaviours.augment({ dump: externals.button().buttonBehaviours }, [Coupling.config({\n others: {\n toolbarSandbox: function (button) {\n return makeSandbox$1(button, spec, detail);\n }\n }\n })])\n }))), {\n apis: {\n setGroups: function (button, groups) {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(function (toolbar) {\n setGroups$1(button, toolbar, detail, spec.layouts, groups);\n });\n },\n reposition: function (button) {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(function (toolbar) {\n position$2(button, toolbar, detail, spec.layouts);\n });\n },\n toggle: function (button) {\n toggle$2(button, externals);\n },\n getToolbar: function (button) {\n return Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox'));\n }\n }\n });\n };\n var FloatingToolbarButton = composite$1({\n name: 'FloatingToolbarButton',\n factory: factory$b,\n configFields: schema$o(),\n partFields: parts$a(),\n apis: {\n setGroups: function (apis, button, groups) {\n apis.setGroups(button, groups);\n },\n reposition: function (apis, button) {\n apis.reposition(button);\n },\n toggle: function (apis, button) {\n apis.toggle(button);\n },\n getToolbar: function (apis, button) {\n return apis.getToolbar(button);\n }\n }\n });\n\n var buildGroups = function (comps) {\n return map(comps, function (g) {\n return premade$1(g);\n });\n };\n var refresh$1 = function (toolbar, memFloatingToolbarButton, detail) {\n refresh(toolbar, detail, function (overflowGroups) {\n detail.overflowGroups.set(overflowGroups);\n memFloatingToolbarButton.getOpt(toolbar).each(function (floatingToolbarButton) {\n FloatingToolbarButton.setGroups(floatingToolbarButton, buildGroups(overflowGroups));\n });\n });\n };\n var factory$c = function (detail, components, spec, externals) {\n var memFloatingToolbarButton = record(FloatingToolbarButton.sketch({\n fetch: function () {\n return Future.nu(function (resolve) {\n resolve(buildGroups(detail.overflowGroups.get()));\n });\n },\n layouts: {\n onLtr: function () {\n return [\n southwest$1,\n southeast$1\n ];\n },\n onRtl: function () {\n return [\n southeast$1,\n southwest$1\n ];\n },\n onBottomLtr: function () {\n return [\n northwest$1,\n northeast$1\n ];\n },\n onBottomRtl: function () {\n return [\n northeast$1,\n northwest$1\n ];\n }\n },\n getBounds: spec.getOverflowBounds,\n lazySink: detail.lazySink,\n fireDismissalEventInstead: {},\n markers: { toggledClass: detail.markers.overflowToggledClass },\n parts: {\n button: externals['overflow-button'](),\n toolbar: externals.overflow()\n }\n }));\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.splitToolbarBehaviours, [Coupling.config({\n others: {\n overflowGroup: function () {\n return ToolbarGroup.sketch(__assign(__assign({}, externals['overflow-group']()), { items: [memFloatingToolbarButton.asSpec()] }));\n }\n }\n })]),\n apis: {\n setGroups: function (toolbar, groups) {\n detail.builtGroups.set(map(groups, toolbar.getSystem().build));\n refresh$1(toolbar, memFloatingToolbarButton, detail);\n },\n refresh: function (toolbar) {\n return refresh$1(toolbar, memFloatingToolbarButton, detail);\n },\n toggle: function (toolbar) {\n memFloatingToolbarButton.getOpt(toolbar).each(function (floatingToolbarButton) {\n FloatingToolbarButton.toggle(floatingToolbarButton);\n });\n },\n reposition: function (toolbar) {\n memFloatingToolbarButton.getOpt(toolbar).each(function (floatingToolbarButton) {\n FloatingToolbarButton.reposition(floatingToolbarButton);\n });\n },\n getOverflow: function (toolbar) {\n return memFloatingToolbarButton.getOpt(toolbar).bind(function (floatingToolbarButton) {\n return FloatingToolbarButton.getToolbar(floatingToolbarButton);\n });\n }\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var SplitFloatingToolbar = composite$1({\n name: 'SplitFloatingToolbar',\n configFields: schema$n(),\n partFields: parts$9(),\n factory: factory$c,\n apis: {\n setGroups: function (apis, toolbar, groups) {\n apis.setGroups(toolbar, groups);\n },\n refresh: function (apis, toolbar) {\n apis.refresh(toolbar);\n },\n reposition: function (apis, toolbar) {\n apis.reposition(toolbar);\n },\n toggle: function (apis, toolbar) {\n apis.toggle(toolbar);\n },\n getOverflow: function (apis, toolbar) {\n return apis.getOverflow(toolbar);\n }\n }\n });\n\n var getAnimationRoot = function (component, slideConfig) {\n return slideConfig.getAnimationRoot.fold(function () {\n return component.element();\n }, function (get) {\n return get(component);\n });\n };\n\n var getDimensionProperty = function (slideConfig) {\n return slideConfig.dimension.property;\n };\n var getDimension = function (slideConfig, elem) {\n return slideConfig.dimension.getDimension(elem);\n };\n var disableTransitions = function (component, slideConfig) {\n var root = getAnimationRoot(component, slideConfig);\n remove$5(root, [\n slideConfig.shrinkingClass,\n slideConfig.growingClass\n ]);\n };\n var setShrunk = function (component, slideConfig) {\n remove$4(component.element(), slideConfig.openClass);\n add$2(component.element(), slideConfig.closedClass);\n set$2(component.element(), getDimensionProperty(slideConfig), '0px');\n reflow(component.element());\n };\n var setGrown = function (component, slideConfig) {\n remove$4(component.element(), slideConfig.closedClass);\n add$2(component.element(), slideConfig.openClass);\n remove$6(component.element(), getDimensionProperty(slideConfig));\n };\n var doImmediateShrink = function (component, slideConfig, slideState, _calculatedSize) {\n slideState.setCollapsed();\n set$2(component.element(), getDimensionProperty(slideConfig), getDimension(slideConfig, component.element()));\n reflow(component.element());\n disableTransitions(component, slideConfig);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n slideConfig.onShrunk(component);\n };\n var doStartShrink = function (component, slideConfig, slideState, calculatedSize) {\n var size = calculatedSize.getOrThunk(function () {\n return getDimension(slideConfig, component.element());\n });\n slideState.setCollapsed();\n set$2(component.element(), getDimensionProperty(slideConfig), size);\n reflow(component.element());\n var root = getAnimationRoot(component, slideConfig);\n remove$4(root, slideConfig.growingClass);\n add$2(root, slideConfig.shrinkingClass);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n };\n var doStartSmartShrink = function (component, slideConfig, slideState) {\n var size = getDimension(slideConfig, component.element());\n var shrinker = size === '0px' ? doImmediateShrink : doStartShrink;\n shrinker(component, slideConfig, slideState, Option.some(size));\n };\n var doStartGrow = function (component, slideConfig, slideState) {\n var root = getAnimationRoot(component, slideConfig);\n var wasShrinking = has$2(root, slideConfig.shrinkingClass);\n var beforeSize = getDimension(slideConfig, component.element());\n setGrown(component, slideConfig);\n var fullSize = getDimension(slideConfig, component.element());\n var startPartialGrow = function () {\n set$2(component.element(), getDimensionProperty(slideConfig), beforeSize);\n reflow(component.element());\n };\n var startCompleteGrow = function () {\n setShrunk(component, slideConfig);\n };\n var setStartSize = wasShrinking ? startPartialGrow : startCompleteGrow;\n setStartSize();\n remove$4(root, slideConfig.shrinkingClass);\n add$2(root, slideConfig.growingClass);\n setGrown(component, slideConfig);\n set$2(component.element(), getDimensionProperty(slideConfig), fullSize);\n slideState.setExpanded();\n slideConfig.onStartGrow(component);\n };\n var refresh$2 = function (component, slideConfig, slideState) {\n if (slideState.isExpanded()) {\n remove$6(component.element(), getDimensionProperty(slideConfig));\n var fullSize = getDimension(slideConfig, component.element());\n set$2(component.element(), getDimensionProperty(slideConfig), fullSize);\n }\n };\n var grow = function (component, slideConfig, slideState) {\n if (!slideState.isExpanded()) {\n doStartGrow(component, slideConfig, slideState);\n }\n };\n var shrink = function (component, slideConfig, slideState) {\n if (slideState.isExpanded()) {\n doStartSmartShrink(component, slideConfig, slideState);\n }\n };\n var immediateShrink = function (component, slideConfig, slideState) {\n if (slideState.isExpanded()) {\n doImmediateShrink(component, slideConfig, slideState, Option.none());\n }\n };\n var hasGrown = function (component, slideConfig, slideState) {\n return slideState.isExpanded();\n };\n var hasShrunk = function (component, slideConfig, slideState) {\n return slideState.isCollapsed();\n };\n var isGrowing = function (component, slideConfig, slideState) {\n var root = getAnimationRoot(component, slideConfig);\n return has$2(root, slideConfig.growingClass) === true;\n };\n var isShrinking = function (component, slideConfig, slideState) {\n var root = getAnimationRoot(component, slideConfig);\n return has$2(root, slideConfig.shrinkingClass) === true;\n };\n var isTransitioning = function (component, slideConfig, slideState) {\n return isGrowing(component, slideConfig) === true || isShrinking(component, slideConfig) === true;\n };\n var toggleGrow = function (component, slideConfig, slideState) {\n var f = slideState.isExpanded() ? doStartSmartShrink : doStartGrow;\n f(component, slideConfig, slideState);\n };\n\n var SlidingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$2,\n grow: grow,\n shrink: shrink,\n immediateShrink: immediateShrink,\n hasGrown: hasGrown,\n hasShrunk: hasShrunk,\n isGrowing: isGrowing,\n isShrinking: isShrinking,\n isTransitioning: isTransitioning,\n toggleGrow: toggleGrow,\n disableTransitions: disableTransitions\n });\n\n var exhibit$6 = function (base, slideConfig) {\n var expanded = slideConfig.expanded;\n return expanded ? nu$6({\n classes: [slideConfig.openClass],\n styles: {}\n }) : nu$6({\n classes: [slideConfig.closedClass],\n styles: wrap$1(slideConfig.dimension.property, '0px')\n });\n };\n var events$d = function (slideConfig, slideState) {\n return derive([runOnSource(transitionend(), function (component, simulatedEvent) {\n var raw = simulatedEvent.event().raw();\n if (raw.propertyName === slideConfig.dimension.property) {\n disableTransitions(component, slideConfig);\n if (slideState.isExpanded()) {\n remove$6(component.element(), slideConfig.dimension.property);\n }\n var notify = slideState.isExpanded() ? slideConfig.onGrown : slideConfig.onShrunk;\n notify(component);\n }\n })]);\n };\n\n var ActiveSliding = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$6,\n events: events$d\n });\n\n var SlidingSchema = [\n strict$1('closedClass'),\n strict$1('openClass'),\n strict$1('shrinkingClass'),\n strict$1('growingClass'),\n option('getAnimationRoot'),\n onHandler('onShrunk'),\n onHandler('onStartShrink'),\n onHandler('onGrown'),\n onHandler('onStartGrow'),\n defaulted$1('expanded', false),\n strictOf('dimension', choose$1('property', {\n width: [\n output('property', 'width'),\n output('getDimension', function (elem) {\n return get$7(elem) + 'px';\n })\n ],\n height: [\n output('property', 'height'),\n output('getDimension', function (elem) {\n return get$6(elem) + 'px';\n })\n ]\n }))\n ];\n\n var init$9 = function (spec) {\n var state = Cell(spec.expanded);\n var readState = function () {\n return 'expanded: ' + state.get();\n };\n return nu$5({\n isExpanded: function () {\n return state.get() === true;\n },\n isCollapsed: function () {\n return state.get() === false;\n },\n setCollapsed: curry(state.set, false),\n setExpanded: curry(state.set, true),\n readState: readState\n });\n };\n\n var SlidingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$9\n });\n\n var Sliding = create$1({\n fields: SlidingSchema,\n name: 'sliding',\n active: ActiveSliding,\n apis: SlidingApis,\n state: SlidingState\n });\n\n var schema$p = constant([\n markers([\n 'closedClass',\n 'openClass',\n 'shrinkingClass',\n 'growingClass',\n 'overflowToggledClass'\n ]),\n onHandler('onOpened'),\n onHandler('onClosed')\n ].concat(schema$m()));\n var parts$b = constant([\n required({\n factory: Toolbar,\n schema: schema$l(),\n name: 'primary'\n }),\n required({\n factory: Toolbar,\n schema: schema$l(),\n name: 'overflow',\n overrides: function (detail) {\n return {\n toolbarBehaviours: derive$1([\n Sliding.config({\n dimension: { property: 'height' },\n closedClass: detail.markers.closedClass,\n openClass: detail.markers.openClass,\n shrinkingClass: detail.markers.shrinkingClass,\n growingClass: detail.markers.growingClass,\n onShrunk: function (comp) {\n getPart(comp, detail, 'overflow-button').each(function (button) {\n Toggling.off(button);\n Focusing.focus(button);\n });\n detail.onClosed(comp);\n },\n onGrown: function (comp) {\n Keying.focusIn(comp);\n detail.onOpened(comp);\n },\n onStartGrow: function (comp) {\n getPart(comp, detail, 'overflow-button').each(Toggling.on);\n }\n }),\n Keying.config({\n mode: 'acyclic',\n onEscape: function (comp) {\n getPart(comp, detail, 'overflow-button').each(Focusing.focus);\n return Option.some(true);\n }\n })\n ])\n };\n }\n }),\n external$1({\n name: 'overflow-button',\n overrides: function (detail) {\n return {\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.overflowToggledClass,\n aria: { mode: 'pressed' },\n toggleOnExecute: false\n })])\n };\n }\n }),\n external$1({ name: 'overflow-group' })\n ]);\n\n var toggleToolbar = function (toolbar, detail) {\n getPart(toolbar, detail, 'overflow').each(function (overf) {\n refresh$3(toolbar, detail);\n Sliding.toggleGrow(overf);\n });\n };\n var refresh$3 = function (toolbar, detail) {\n getPart(toolbar, detail, 'overflow').each(function (overflow) {\n refresh(toolbar, detail, function (groups) {\n var builtGroups = map(groups, function (g) {\n return premade$1(g);\n });\n Toolbar.setGroups(overflow, builtGroups);\n });\n getPart(toolbar, detail, 'overflow-button').each(function (button) {\n if (Sliding.hasGrown(overflow)) {\n Toggling.on(button);\n }\n });\n Sliding.refresh(overflow);\n });\n };\n var factory$d = function (detail, components, spec, externals) {\n var toolbarToggleEvent = 'alloy.toolbar.toggle';\n var doSetGroups = function (toolbar, groups) {\n var built = map(groups, toolbar.getSystem().build);\n detail.builtGroups.set(built);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.splitToolbarBehaviours, [\n Coupling.config({\n others: {\n overflowGroup: function (toolbar) {\n return ToolbarGroup.sketch(__assign(__assign({}, externals['overflow-group']()), {\n items: [Button.sketch(__assign(__assign({}, externals['overflow-button']()), {\n action: function (_button) {\n emit(toolbar, toolbarToggleEvent);\n }\n }))]\n }));\n }\n }\n }),\n config('toolbar-toggle-events', [run(toolbarToggleEvent, function (toolbar) {\n getPart(toolbar, detail, 'overflow').each(function (overf) {\n refresh$3(toolbar, detail);\n Sliding.toggleGrow(overf);\n });\n })])\n ]),\n apis: {\n setGroups: function (toolbar, groups) {\n doSetGroups(toolbar, groups);\n refresh$3(toolbar, detail);\n },\n refresh: function (toolbar) {\n return refresh$3(toolbar, detail);\n },\n toggle: function (toolbar) {\n return toggleToolbar(toolbar, detail);\n }\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var SplitSlidingToolbar = composite$1({\n name: 'SplitSlidingToolbar',\n configFields: schema$p(),\n partFields: parts$b(),\n factory: factory$d,\n apis: {\n setGroups: function (apis, toolbar, groups) {\n apis.setGroups(toolbar, groups);\n },\n refresh: function (apis, toolbar) {\n apis.refresh(toolbar);\n },\n toggle: function (apis, toolbar) {\n apis.toggle(toolbar);\n }\n }\n });\n\n var toolbarHeightChange = constant(generate$1('toolbar-height-change'));\n\n var ReadOnlyChannel = 'silver.readonly';\n var ReadOnlyDataSchema = objOf([strictBoolean('readonly')]);\n var setDisabledAll = function (element, state) {\n all('*', element.element()).forEach(function (elm) {\n element.getSystem().getByDom(elm).each(function (comp) {\n if (comp.hasConfigured(Disabling)) {\n Disabling.set(comp, state);\n }\n });\n });\n };\n var broadcastReadonly = function (uiComponents, readonly) {\n var outerContainer = uiComponents.outerContainer;\n var target = outerContainer.element();\n if (readonly) {\n uiComponents.mothership.broadcastOn([dismissPopups()], { target: target });\n uiComponents.uiMothership.broadcastOn([dismissPopups()], { target: target });\n }\n uiComponents.mothership.broadcastOn([ReadOnlyChannel], { readonly: readonly });\n uiComponents.uiMothership.broadcastOn([ReadOnlyChannel], { readonly: readonly });\n };\n var toggleToReadOnly = function (uiComponents, readonly) {\n var outerContainer = uiComponents.outerContainer;\n broadcastReadonly(uiComponents, readonly);\n all('*', outerContainer.element()).forEach(function (elm) {\n outerContainer.getSystem().getByDom(elm).each(function (comp) {\n if (comp.hasConfigured(Disabling)) {\n Disabling.set(comp, readonly);\n }\n });\n });\n };\n var setupReadonlyModeSwitch = function (editor, uiComponents) {\n editor.on('init', function () {\n if (editor.mode.isReadOnly()) {\n toggleToReadOnly(uiComponents, true);\n }\n });\n editor.on('SwitchMode', function () {\n return toggleToReadOnly(uiComponents, editor.mode.isReadOnly());\n });\n if (isReadOnly(editor)) {\n editor.setMode('readonly');\n }\n };\n var createReadonlyReceivingForOverflow = function (getOverflow) {\n var _a;\n return Receiving.config({\n channels: (_a = {}, _a[ReadOnlyChannel] = {\n schema: ReadOnlyDataSchema,\n onReceive: function (comp, data) {\n getOverflow(comp).each(function (toolbar) {\n setDisabledAll(toolbar, data.readonly);\n });\n }\n }, _a)\n });\n };\n\n var renderToolbarGroupCommon = function (toolbarGroup) {\n var attributes = toolbarGroup.title.fold(function () {\n return {};\n }, function (title) {\n return { attributes: { title: title } };\n });\n return {\n dom: __assign({\n tag: 'div',\n classes: ['tox-toolbar__group']\n }, attributes),\n components: [ToolbarGroup.parts().items({})],\n items: toolbarGroup.items,\n markers: { itemSelector: '*:not(.tox-split-button) > .tox-tbtn:not([disabled]), .tox-split-button:not([disabled]), .tox-toolbar-nav-js:not([disabled])' },\n tgroupBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n };\n };\n var renderToolbarGroup = function (toolbarGroup) {\n return ToolbarGroup.sketch(renderToolbarGroupCommon(toolbarGroup));\n };\n var getToolbarbehaviours = function (toolbarSpec, modeName, getOverflow) {\n var onAttached = runOnAttached(function (component) {\n var groups = map(toolbarSpec.initGroups, renderToolbarGroup);\n Toolbar.setGroups(component, groups);\n });\n return derive$1([\n Keying.config({\n mode: modeName,\n onEscape: toolbarSpec.onEscape,\n selector: '.tox-toolbar__group'\n }),\n config('toolbar-events', [onAttached]),\n createReadonlyReceivingForOverflow(getOverflow)\n ]);\n };\n var renderMoreToolbarCommon = function (toolbarSpec, getOverflow) {\n var modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return {\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n parts: {\n 'overflow-group': renderToolbarGroupCommon({\n title: Option.none(),\n items: []\n }),\n 'overflow-button': renderIconButtonSpec({\n name: 'more',\n icon: Option.some('more-drawer'),\n disabled: false,\n tooltip: Option.some('More...'),\n primary: false,\n borderless: false\n }, Option.none(), toolbarSpec.backstage.shared.providers)\n },\n splitToolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName, getOverflow)\n };\n };\n var renderFloatingMoreToolbar = function (toolbarSpec) {\n var baseSpec = renderMoreToolbarCommon(toolbarSpec, SplitFloatingToolbar.getOverflow);\n var overflowXOffset = 4;\n var primary = SplitFloatingToolbar.parts().primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n return SplitFloatingToolbar.sketch(__assign(__assign({}, baseSpec), {\n lazySink: toolbarSpec.getSink,\n getOverflowBounds: function () {\n var headerElem = toolbarSpec.moreDrawerData.lazyHeader().element();\n var headerBounds = absolute$1(headerElem);\n var docElem = documentElement(headerElem);\n var docBounds = absolute$1(docElem);\n var height = Math.max(docElem.dom().scrollHeight, docBounds.height());\n return bounds$1(headerBounds.x() + overflowXOffset, docBounds.y(), headerBounds.width() - overflowXOffset * 2, height);\n },\n parts: __assign(__assign({}, baseSpec.parts), {\n overflow: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes: toolbarSpec.attributes\n }\n }\n }),\n components: [primary],\n markers: { overflowToggledClass: 'tox-tbtn--enabled' }\n }));\n };\n var renderSlidingMoreToolbar = function (toolbarSpec) {\n var primary = SplitSlidingToolbar.parts().primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n var overflow = SplitSlidingToolbar.parts().overflow({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow']\n }\n });\n var baseSpec = renderMoreToolbarCommon(toolbarSpec, Option.none);\n return SplitSlidingToolbar.sketch(__assign(__assign({}, baseSpec), {\n components: [\n primary,\n overflow\n ],\n markers: {\n openClass: 'tox-toolbar__overflow--open',\n closedClass: 'tox-toolbar__overflow--closed',\n growingClass: 'tox-toolbar__overflow--growing',\n shrinkingClass: 'tox-toolbar__overflow--shrinking',\n overflowToggledClass: 'tox-tbtn--enabled'\n },\n onOpened: function (comp) {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'opened' });\n },\n onClosed: function (comp) {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'closed' });\n }\n }));\n };\n var renderToolbar = function (toolbarSpec) {\n var modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return Toolbar.sketch({\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar'].concat(toolbarSpec.type === ToolbarMode.scrolling ? ['tox-toolbar--scrolling'] : [])\n },\n components: [Toolbar.parts().groups({})],\n toolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName, constant(Option.none()))\n });\n };\n\n var baseToolbarButtonFields = [\n defaultedBoolean('disabled', false),\n optionString('tooltip'),\n optionString('icon'),\n optionString('text'),\n defaultedFunction('onSetup', function () {\n return noop;\n })\n ];\n var toolbarButtonSchema = objOf([\n strictString('type'),\n strictFunction('onAction')\n ].concat(baseToolbarButtonFields));\n var createToolbarButton = function (spec) {\n return asRaw('toolbarbutton', toolbarButtonSchema, spec);\n };\n\n var baseMenuButtonFields = [\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n strictFunction('fetch'),\n defaultedFunction('onSetup', function () {\n return noop;\n })\n ];\n\n var MenuButtonSchema = objOf(__spreadArrays([strictString('type')], baseMenuButtonFields));\n var createMenuButton = function (spec) {\n return asRaw('menubutton', MenuButtonSchema, spec);\n };\n\n var splitButtonSchema = objOf([\n strictString('type'),\n optionString('tooltip'),\n optionString('icon'),\n optionString('text'),\n optionFunction('select'),\n strictFunction('fetch'),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n defaultedStringEnum('presets', 'normal', [\n 'normal',\n 'color',\n 'listpreview'\n ]),\n defaulted$1('columns', 1),\n strictFunction('onAction'),\n strictFunction('onItemAction')\n ]);\n var createSplitButton = function (spec) {\n return asRaw('SplitButton', splitButtonSchema, spec);\n };\n\n var baseToolbarToggleButtonFields = [defaultedBoolean('active', false)].concat(baseToolbarButtonFields);\n var toggleButtonSchema = objOf(baseToolbarToggleButtonFields.concat([\n strictString('type'),\n strictFunction('onAction')\n ]));\n var createToggleButton = function (spec) {\n return asRaw('ToggleButton', toggleButtonSchema, spec);\n };\n\n var groupToolbarButtonSchema = objOf([\n strictString('type'),\n strictOf('items', oneOf([\n arrOfObj$1([\n strictString('name'),\n strictArrayOf('items', string)\n ]),\n string\n ]))\n ].concat(baseToolbarButtonFields));\n var createGroupToolbarButton = function (spec) {\n return asRaw('GroupToolbarButton', groupToolbarButtonSchema, spec);\n };\n\n var contextBarFields = [\n defaultedFunction('predicate', function () {\n return false;\n }),\n defaultedStringEnum('scope', 'node', [\n 'node',\n 'editor'\n ]),\n defaultedStringEnum('position', 'selection', [\n 'node',\n 'selection',\n 'line'\n ])\n ];\n var contextButtonFields = baseToolbarButtonFields.concat([\n defaulted$1('type', 'contextformbutton'),\n defaulted$1('primary', false),\n strictFunction('onAction'),\n state$1('original', identity)\n ]);\n var contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n defaulted$1('type', 'contextformbutton'),\n defaulted$1('primary', false),\n strictFunction('onAction'),\n state$1('original', identity)\n ]);\n var launchButtonFields = baseToolbarButtonFields.concat([defaulted$1('type', 'contextformbutton')]);\n var launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaulted$1('type', 'contextformtogglebutton')]);\n var toggleOrNormal = choose$1('type', {\n contextformbutton: contextButtonFields,\n contextformtogglebutton: contextToggleButtonFields\n });\n var contextFormSchema = objOf([\n defaulted$1('type', 'contextform'),\n defaultedFunction('initValue', function () {\n return '';\n }),\n optionString('label'),\n strictArrayOf('commands', toggleOrNormal),\n optionOf('launch', choose$1('type', {\n contextformbutton: launchButtonFields,\n contextformtogglebutton: launchToggleButtonFields\n }))\n ].concat(contextBarFields));\n var contextToolbarSchema = objOf([\n defaulted$1('type', 'contexttoolbar'),\n strictString('items')\n ].concat(contextBarFields));\n var createContextToolbar = function (spec) {\n return asRaw('ContextToolbar', contextToolbarSchema, spec);\n };\n var createContextForm = function (spec) {\n return asRaw('ContextForm', contextFormSchema, spec);\n };\n\n var getState$2 = function (component, replaceConfig, reflectState) {\n return reflectState;\n };\n\n var ReflectingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getState: getState$2\n });\n\n var events$e = function (reflectingConfig, reflectingState) {\n var update = function (component, data) {\n reflectingConfig.updateState.each(function (updateState) {\n var newState = updateState(component, data);\n reflectingState.set(newState);\n });\n reflectingConfig.renderComponents.each(function (renderComponents) {\n var newComponents = renderComponents(data, reflectingState.get());\n var newChildren = map(newComponents, component.getSystem().build);\n replaceChildren(component, newChildren);\n });\n };\n return derive([\n run(receive(), function (component, message) {\n var receivingData = message;\n var channel = reflectingConfig.channel;\n if (contains(receivingData.channels(), channel)) {\n update(component, receivingData.data());\n }\n }),\n runOnAttached(function (comp, se) {\n reflectingConfig.initialData.each(function (rawData) {\n update(comp, rawData);\n });\n })\n ]);\n };\n\n var ActiveReflecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$e\n });\n\n var init$a = function () {\n var cell = Cell(Option.none());\n var set = function (optS) {\n return cell.set(optS);\n };\n var clear = function () {\n return cell.set(Option.none());\n };\n var get = function () {\n return cell.get();\n };\n var readState = function () {\n return cell.get().fold(function () {\n return 'none';\n }, function (x) {\n return x;\n });\n };\n return {\n readState: readState,\n get: get,\n set: set,\n clear: clear\n };\n };\n\n var ReflectingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$a\n });\n\n var ReflectingSchema = [\n strict$1('channel'),\n option('renderComponents'),\n option('updateState'),\n option('initialData')\n ];\n\n var Reflecting = create$1({\n fields: ReflectingSchema,\n name: 'reflecting',\n active: ActiveReflecting,\n apis: ReflectingApis,\n state: ReflectingState\n });\n\n var schema$q = constant([\n strict$1('toggleClass'),\n strict$1('fetch'),\n onStrictHandler('onExecute'),\n defaulted$1('getHotspot', Option.some),\n defaulted$1('getAnchorOverrides', constant({})),\n schema$1(),\n onStrictHandler('onItemExecute'),\n option('lazySink'),\n strict$1('dom'),\n onHandler('onOpen'),\n field$1('splitDropdownBehaviours', [\n Coupling,\n Keying,\n Focusing\n ]),\n defaulted$1('matchWidth', false),\n defaulted$1('useMinWidth', false),\n defaulted$1('eventOrder', {}),\n option('role')\n ].concat(sandboxFields()));\n var arrowPart = required({\n factory: Button,\n schema: [strict$1('dom')],\n name: 'arrow',\n defaults: function () {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: function (detail) {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: function (arrow) {\n arrow.getSystem().getByUid(detail.uid).each(emitExecute);\n },\n buttonBehaviours: derive$1([Toggling.config({\n toggleOnExecute: false,\n toggleClass: detail.toggleClass\n })])\n };\n }\n });\n var buttonPart = required({\n factory: Button,\n schema: [strict$1('dom')],\n name: 'button',\n defaults: function () {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: function (detail) {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: function (btn) {\n btn.getSystem().getByUid(detail.uid).each(function (splitDropdown) {\n detail.onExecute(splitDropdown, btn);\n });\n }\n };\n }\n });\n var parts$c = constant([\n arrowPart,\n buttonPart,\n optional({\n factory: {\n sketch: function (spec) {\n return {\n uid: spec.uid,\n dom: {\n tag: 'span',\n styles: { display: 'none' },\n attributes: { 'aria-hidden': 'true' },\n innerHtml: spec.text\n }\n };\n }\n },\n schema: [strict$1('text')],\n name: 'aria-descriptor'\n }),\n external$1({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n defaults: function (detail) {\n return {\n onExecute: function (tmenu, item) {\n tmenu.getSystem().getByUid(detail.uid).each(function (splitDropdown) {\n detail.onItemExecute(splitDropdown, tmenu, item);\n });\n }\n };\n }\n }),\n partType()\n ]);\n\n var factory$e = function (detail, components, spec, externals) {\n var switchToMenu = function (sandbox) {\n Composing.getCurrent(sandbox).each(function (current) {\n Highlighting.highlightFirst(current);\n Keying.focusIn(current);\n });\n };\n var action = function (component) {\n var onOpenSync = switchToMenu;\n togglePopup(detail, function (x) {\n return x;\n }, component, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n };\n var openMenu = function (comp) {\n action(comp);\n return Option.some(true);\n };\n var executeOnButton = function (comp) {\n var button = getPartOrDie(comp, detail, 'button');\n emitExecute(button);\n return Option.some(true);\n };\n var buttonEvents = __assign(__assign({}, derive([runOnAttached(function (component, simulatedEvent) {\n var ariaDescriptor = getPart(component, detail, 'aria-descriptor');\n ariaDescriptor.each(function (descriptor) {\n var descriptorId = generate$1('aria');\n set$1(descriptor.element(), 'id', descriptorId);\n set$1(component.element(), 'aria-describedby', descriptorId);\n });\n })])), events$7(Option.some(action)));\n var apis = {\n repositionMenus: function (comp) {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n apis: apis,\n eventOrder: __assign(__assign({}, detail.eventOrder), {\n 'alloy.execute': [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ]\n }),\n events: buttonEvents,\n behaviours: augment(detail.splitDropdownBehaviours, [\n Coupling.config({\n others: {\n sandbox: function (hotspot) {\n var arrow = getPartOrDie(hotspot, detail, 'arrow');\n var extras = {\n onOpen: function () {\n Toggling.on(arrow);\n Toggling.on(hotspot);\n },\n onClose: function () {\n Toggling.off(arrow);\n Toggling.off(hotspot);\n }\n };\n return makeSandbox(detail, hotspot, extras);\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: executeOnButton,\n onEnter: executeOnButton,\n onDown: openMenu\n }),\n Focusing.config({}),\n Toggling.config({\n toggleOnExecute: false,\n aria: { mode: 'expanded' }\n })\n ]),\n domModification: {\n attributes: {\n 'role': detail.role.getOr('button'),\n 'aria-haspopup': true\n }\n }\n };\n };\n var SplitDropdown = composite$1({\n name: 'SplitDropdown',\n configFields: schema$q(),\n partFields: parts$c(),\n factory: factory$e,\n apis: {\n repositionMenus: function (apis, comp) {\n return apis.repositionMenus(comp);\n }\n }\n });\n\n var getButtonApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var getToggleApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var getTooltipAttributes = function (tooltip, providersBackstage) {\n return tooltip.map(function (tooltip) {\n return {\n 'aria-label': providersBackstage.translate(tooltip),\n 'title': providersBackstage.translate(tooltip)\n };\n }).getOr({});\n };\n var focusButtonEvent = generate$1('focus-button');\n var rtlIcon$1 = [\n 'checklist',\n 'ordered-list'\n ];\n var rtlTransform$1 = [\n 'indent',\n 'outdent',\n 'table-insert-column-after',\n 'table-insert-column-before',\n 'unordered-list'\n ];\n var renderCommonStructure = function (icon, text, tooltip, receiver, behaviours, providersBackstage) {\n var _a;\n var getIconName = function (iconName) {\n return global$7.isRtl() && contains(rtlIcon$1, iconName) ? iconName + '-rtl' : iconName;\n };\n var needsRtlClass = global$7.isRtl() && icon.exists(function (name) {\n return contains(rtlTransform$1, name);\n });\n return {\n dom: {\n tag: 'button',\n classes: ['tox-tbtn'].concat(text.isSome() ? ['tox-tbtn--select'] : []).concat(needsRtlClass ? ['tox-tbtn__icon-rtl'] : []),\n attributes: getTooltipAttributes(tooltip, providersBackstage)\n },\n components: componentRenderPipeline([\n icon.map(function (iconName) {\n return renderIconFromPack(getIconName(iconName), providersBackstage.icons);\n }),\n text.map(function (text) {\n return renderLabel$1(text, 'tox-tbtn', providersBackstage);\n })\n ]),\n eventOrder: (_a = {}, _a[mousedown()] = [\n 'focusing',\n 'alloy.base.behaviour',\n 'common-button-display-events'\n ], _a),\n buttonBehaviours: derive$1([config('common-button-display-events', [run(mousedown(), function (button, se) {\n se.event().prevent();\n emit(button, focusButtonEvent);\n })])].concat(receiver.map(function (r) {\n return Reflecting.config({\n channel: r,\n initialData: {\n icon: icon,\n text: text\n },\n renderComponents: function (data, _state) {\n return componentRenderPipeline([\n data.icon.map(function (iconName) {\n return renderIconFromPack(getIconName(iconName), providersBackstage.icons);\n }),\n data.text.map(function (text) {\n return renderLabel$1(text, 'tox-tbtn', providersBackstage);\n })\n ]);\n }\n });\n }).toArray()).concat(behaviours.getOr([])))\n };\n };\n var renderFloatingToolbarButton = function (spec, backstage, identifyButtons, attributes) {\n var sharedBackstage = backstage.shared;\n return FloatingToolbarButton.sketch({\n lazySink: sharedBackstage.getSink,\n fetch: function () {\n return Future.nu(function (resolve) {\n resolve(map(identifyButtons(spec.items), renderToolbarGroup));\n });\n },\n markers: { toggledClass: 'tox-tbtn--enabled' },\n parts: {\n button: renderCommonStructure(spec.icon, spec.text, spec.tooltip, Option.none(), Option.none(), sharedBackstage.providers),\n toolbar: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes: attributes\n }\n }\n }\n });\n };\n var renderCommonToolbarButton = function (spec, specialisation, providersBackstage) {\n var editorOffCell = Cell(noop);\n var structure = renderCommonStructure(spec.icon, spec.text, spec.tooltip, Option.none(), Option.none(), providersBackstage);\n return Button.sketch({\n dom: structure.dom,\n components: structure.components,\n eventOrder: toolbarButtonEventOrder,\n buttonBehaviours: derive$1([\n config('toolbar-button-events', [\n onToolbarButtonExecute({\n onAction: spec.onAction,\n getApi: specialisation.getApi\n }),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n DisablingConfigs.toolbarButton(spec.disabled)\n ].concat(specialisation.toolbarButtonBehaviours))\n });\n };\n var renderToolbarButton = function (spec, providersBackstage) {\n return renderToolbarButtonWith(spec, providersBackstage, []);\n };\n var renderToolbarButtonWith = function (spec, providersBackstage, bonusEvents) {\n return renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: [].concat(bonusEvents.length > 0 ? [config('toolbarButtonWith', bonusEvents)] : []),\n getApi: getButtonApi,\n onSetup: spec.onSetup\n }, providersBackstage);\n };\n var renderToolbarToggleButton = function (spec, providersBackstage) {\n return renderToolbarToggleButtonWith(spec, providersBackstage, []);\n };\n var renderToolbarToggleButtonWith = function (spec, providersBackstage, bonusEvents) {\n return deepMerge(renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: [\n Replacing.config({}),\n Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n aria: { mode: 'pressed' },\n toggleOnExecute: false\n })\n ].concat(bonusEvents.length > 0 ? [config('toolbarToggleButtonWith', bonusEvents)] : []),\n getApi: getToggleApi,\n onSetup: spec.onSetup\n }, providersBackstage));\n };\n var fetchChoices = function (getApi, spec, providersBackstage) {\n return function (comp) {\n return Future.nu(function (callback) {\n return spec.fetch(callback);\n }).map(function (items) {\n return Option.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$1('menu-value'), items, function (value) {\n spec.onItemAction(getApi(comp), value);\n }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(function () {\n return false;\n }), providersBackstage), {\n movement: deriveMenuMovement(spec.columns, spec.presets),\n menuBehaviours: SimpleBehaviours.unnamedEvents(spec.columns !== 'auto' ? [] : [runOnAttached(function (comp, se) {\n detectSize(comp, 4, classForPreset(spec.presets)).each(function (_a) {\n var numRows = _a.numRows, numColumns = _a.numColumns;\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n })));\n });\n };\n };\n var renderSplitButton = function (spec, sharedBackstage) {\n var _a;\n var displayChannel = generate$1('channel-update-split-dropdown-display');\n var getApi = function (comp) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(comp);\n },\n setDisabled: function (state) {\n return Disabling.set(comp, state);\n },\n setIconFill: function (id, value) {\n descendant$1(comp.element(), 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(function (underlinePath) {\n set$1(underlinePath, 'fill', value);\n });\n },\n setIconStroke: function (id, value) {\n descendant$1(comp.element(), 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(function (underlinePath) {\n set$1(underlinePath, 'stroke', value);\n });\n },\n setActive: function (state) {\n set$1(comp.element(), 'aria-pressed', state);\n descendant$1(comp.element(), 'span').each(function (button) {\n comp.getSystem().getByDom(button).each(function (buttonComp) {\n return Toggling.set(buttonComp, state);\n });\n });\n },\n isActive: function () {\n return descendant$1(comp.element(), 'span').exists(function (button) {\n return comp.getSystem().getByDom(button).exists(Toggling.isOn);\n });\n }\n };\n };\n var editorOffCell = Cell(noop);\n var specialisation = {\n getApi: getApi,\n onSetup: spec.onSetup\n };\n return SplitDropdown.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-split-button'],\n attributes: __assign({ 'aria-pressed': false }, getTooltipAttributes(spec.tooltip, sharedBackstage.providers))\n },\n onExecute: function (button) {\n spec.onAction(getApi(button));\n },\n onItemExecute: function (a, b, c) {\n },\n splitDropdownBehaviours: derive$1([\n DisablingConfigs.splitButton(false),\n config('split-dropdown-events', [\n run(focusButtonEvent, Focusing.focus),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n Unselecting.config({})\n ]),\n eventOrder: (_a = {}, _a[attachedToDom()] = [\n 'alloy.base.behaviour',\n 'split-dropdown-events'\n ], _a),\n toggleClass: 'tox-tbtn--enabled',\n lazySink: sharedBackstage.getSink,\n fetch: fetchChoices(getApi, spec, sharedBackstage.providers),\n parts: { menu: part(false, spec.columns, spec.presets) },\n components: [\n SplitDropdown.parts().button(renderCommonStructure(spec.icon, spec.text, Option.none(), Option.some(displayChannel), Option.some([Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n toggleOnExecute: false\n })]), sharedBackstage.providers)),\n SplitDropdown.parts().arrow({\n dom: {\n tag: 'button',\n classes: [\n 'tox-tbtn',\n 'tox-split-button__chevron'\n ],\n innerHtml: get$d('chevron-down', sharedBackstage.providers.icons)\n }\n }),\n SplitDropdown.parts()['aria-descriptor']({ text: sharedBackstage.providers.translate('To open the popup, press Shift+Enter') })\n ]\n });\n };\n\n var getFormApi = function (input) {\n return {\n hide: function () {\n return emit(input, sandboxClose());\n },\n getValue: function () {\n return Representing.getValue(input);\n }\n };\n };\n var runOnExecute$1 = function (memInput, original) {\n return run(internalToolbarButtonExecute, function (comp, se) {\n var input = memInput.get(comp);\n var formApi = getFormApi(input);\n original.onAction(formApi, se.event().buttonApi());\n });\n };\n var renderContextButton = function (memInput, button, extras) {\n var _a = button.original, primary = _a.primary, rest = __rest(_a, ['primary']);\n var bridged = getOrDie(createToolbarButton(__assign(__assign({}, rest), {\n type: 'button',\n onAction: function () {\n }\n })));\n return renderToolbarButtonWith(bridged, extras.backstage.shared.providers, [runOnExecute$1(memInput, button)]);\n };\n var renderContextToggleButton = function (memInput, button, extras) {\n var _a = button.original, primary = _a.primary, rest = __rest(_a, ['primary']);\n var bridged = getOrDie(createToggleButton(__assign(__assign({}, rest), {\n type: 'togglebutton',\n onAction: function () {\n }\n })));\n return renderToolbarToggleButtonWith(bridged, extras.backstage.shared.providers, [runOnExecute$1(memInput, button)]);\n };\n var generateOne$1 = function (memInput, button, providersBackstage) {\n var extras = { backstage: { shared: { providers: providersBackstage } } };\n if (button.type === 'contextformtogglebutton') {\n return renderContextToggleButton(memInput, button, extras);\n } else {\n return renderContextButton(memInput, button, extras);\n }\n };\n var generate$7 = function (memInput, buttons, providersBackstage) {\n var mementos = map(buttons, function (button) {\n return record(generateOne$1(memInput, button, providersBackstage));\n });\n var asSpecs = function () {\n return map(mementos, function (mem) {\n return mem.asSpec();\n });\n };\n var findPrimary = function (compInSystem) {\n return findMap(buttons, function (button, i) {\n if (button.primary) {\n return Option.from(mementos[i]).bind(function (mem) {\n return mem.getOpt(compInSystem);\n }).filter(not(Disabling.isDisabled));\n } else {\n return Option.none();\n }\n });\n };\n return {\n asSpecs: asSpecs,\n findPrimary: findPrimary\n };\n };\n\n var renderContextForm = function (toolbarType, ctx, backstage) {\n var inputAttributes = ctx.label.fold(function () {\n return {};\n }, function (label) {\n return { 'aria-label': label };\n });\n var memInput = record(Input.sketch({\n inputClasses: [\n 'tox-toolbar-textfield',\n 'tox-toolbar-nav-js'\n ],\n data: ctx.initValue(),\n inputAttributes: inputAttributes,\n selectOnFocus: true,\n inputBehaviours: derive$1([Keying.config({\n mode: 'special',\n onEnter: function (input) {\n return commands.findPrimary(input).map(function (primary) {\n emitExecute(primary);\n return true;\n });\n },\n onLeft: function (comp, se) {\n se.cut();\n return Option.none();\n },\n onRight: function (comp, se) {\n se.cut();\n return Option.none();\n }\n })])\n }));\n var commands = generate$7(memInput, ctx.commands, backstage.shared.providers);\n return renderToolbar({\n type: toolbarType,\n uid: generate$1('context-toolbar'),\n initGroups: [\n {\n title: Option.none(),\n items: [memInput.asSpec()]\n },\n {\n title: Option.none(),\n items: commands.asSpecs()\n }\n ],\n onEscape: Option.none,\n cyclicKeying: true\n });\n };\n var ContextForm = { renderContextForm: renderContextForm };\n\n var getHorizontalBounds = function (contentAreaBox, viewportBounds) {\n var x = Math.max(viewportBounds.x(), contentAreaBox.x());\n var contentBoxWidth = contentAreaBox.right() - x;\n var maxViewportWidth = viewportBounds.width() - (x - viewportBounds.x());\n var width = Math.min(contentBoxWidth, maxViewportWidth);\n return {\n x: x,\n width: width\n };\n };\n var getVerticalBounds = function (editor, contentAreaBox, viewportBounds) {\n var container = Element.fromDom(editor.getContainer());\n var header = descendant$1(container, '.tox-editor-header').getOr(container);\n var headerBox = box(header);\n var isToolbarBelowContentArea = headerBox.y() >= contentAreaBox.bottom();\n var isToolbarLocationTop$1 = isToolbarLocationTop(editor);\n var isToolbarAbove = isToolbarLocationTop$1 && !isToolbarBelowContentArea;\n if (editor.inline && isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom(), viewportBounds.y()),\n bottom: viewportBounds.bottom()\n };\n }\n if (editor.inline && !isToolbarAbove) {\n return {\n y: viewportBounds.y(),\n bottom: Math.min(headerBox.y(), viewportBounds.bottom())\n };\n }\n var containerBounds = box(container);\n if (isToolbarAbove) {\n return {\n y: Math.max(headerBox.bottom(), viewportBounds.y()),\n bottom: Math.min(containerBounds.bottom(), viewportBounds.bottom())\n };\n }\n return {\n y: Math.max(containerBounds.y(), viewportBounds.y()),\n bottom: Math.min(headerBox.y(), viewportBounds.bottom())\n };\n };\n var getContextToolbarBounds = function (editor) {\n var viewportBounds = getBounds(domGlobals.window);\n var contentAreaBox = box(Element.fromDom(editor.getContentAreaContainer()));\n var toolbarOrMenubarEnabled = isMenubarEnabled(editor) || isToolbarEnabled(editor) || isMultipleToolbars(editor);\n var _a = getHorizontalBounds(contentAreaBox, viewportBounds), x = _a.x, width = _a.width;\n if (editor.inline && !toolbarOrMenubarEnabled) {\n return bounds$1(x, viewportBounds.y(), width, viewportBounds.height());\n } else {\n var _b = getVerticalBounds(editor, contentAreaBox, viewportBounds), y = _b.y, bottom = _b.bottom;\n return bounds$1(x, y, width, bottom - y);\n }\n };\n\n var matchTargetWith = function (elem, toolbars) {\n return findMap(toolbars, function (toolbarApi) {\n return toolbarApi.predicate(elem.dom()) ? Option.some({\n toolbarApi: toolbarApi,\n elem: elem\n }) : Option.none();\n });\n };\n var lookup$1 = function (scopes, editor) {\n var rootElem = Element.fromDom(editor.getBody());\n var isRoot = function (elem) {\n return eq(elem, rootElem);\n };\n var isOutsideRoot = function (startNode) {\n return !isRoot(startNode) && !contains$2(rootElem, startNode);\n };\n var startNode = Element.fromDom(editor.selection.getNode());\n if (isOutsideRoot(startNode)) {\n return Option.none();\n }\n return matchTargetWith(startNode, scopes.inNodeScope).orThunk(function () {\n return matchTargetWith(startNode, scopes.inEditorScope).orThunk(function () {\n if (isRoot(startNode)) {\n return Option.none();\n } else {\n return ancestor(startNode, function (elem) {\n return matchTargetWith(elem, scopes.inNodeScope);\n }, isRoot);\n }\n });\n });\n };\n var ToolbarLookup = { lookup: lookup$1 };\n\n var categorise = function (contextToolbars, navigate) {\n var forms = {};\n var inNodeScope = [];\n var inEditorScope = [];\n var formNavigators = {};\n var lookupTable = {};\n var registerForm = function (key, toolbarApi) {\n var contextForm = getOrDie(createContextForm(toolbarApi));\n forms[key] = contextForm;\n contextForm.launch.map(function (launch) {\n formNavigators['form:' + key + ''] = __assign(__assign({}, toolbarApi.launch), {\n type: launch.type === 'contextformtogglebutton' ? 'togglebutton' : 'button',\n onAction: function () {\n navigate(contextForm);\n }\n });\n });\n if (contextForm.scope === 'editor') {\n inEditorScope.push(contextForm);\n } else {\n inNodeScope.push(contextForm);\n }\n lookupTable[key] = contextForm;\n };\n var registerToolbar = function (key, toolbarApi) {\n createContextToolbar(toolbarApi).each(function (contextToolbar) {\n if (toolbarApi.scope === 'editor') {\n inEditorScope.push(contextToolbar);\n } else {\n inNodeScope.push(contextToolbar);\n }\n lookupTable[key] = contextToolbar;\n });\n };\n var keys$1 = keys(contextToolbars);\n each(keys$1, function (key) {\n var toolbarApi = contextToolbars[key];\n if (toolbarApi.type === 'contextform') {\n registerForm(key, toolbarApi);\n } else if (toolbarApi.type === 'contexttoolbar') {\n registerToolbar(key, toolbarApi);\n }\n });\n return {\n forms: forms,\n inNodeScope: inNodeScope,\n inEditorScope: inEditorScope,\n lookupTable: lookupTable,\n formNavigators: formNavigators\n };\n };\n var ToolbarScopes = { categorise: categorise };\n\n var forwardSlideEvent = generate$1('forward-slide');\n var backSlideEvent = generate$1('backward-slide');\n var changeSlideEvent = generate$1('change-slide-event');\n var resizingClass = 'tox-pop--resizing';\n var renderContextToolbar = function (spec) {\n var stack = Cell([]);\n return InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-pop']\n },\n fireDismissalEventInstead: { event: 'doNotDismissYet' },\n onShow: function (comp) {\n stack.set([]);\n InlineView.getContent(comp).each(function (c) {\n remove$6(c.element(), 'visibility');\n });\n remove$4(comp.element(), resizingClass);\n remove$6(comp.element(), 'width');\n },\n inlineBehaviours: derive$1([\n config('context-toolbar-events', [\n runOnSource(transitionend(), function (comp, se) {\n InlineView.getContent(comp).each(function (c) {\n });\n remove$4(comp.element(), resizingClass);\n remove$6(comp.element(), 'width');\n }),\n run(changeSlideEvent, function (comp, se) {\n remove$6(comp.element(), 'width');\n var currentWidth = get$7(comp.element());\n InlineView.setContent(comp, se.event().contents());\n add$2(comp.element(), resizingClass);\n var newWidth = get$7(comp.element());\n set$2(comp.element(), 'width', currentWidth + 'px');\n InlineView.getContent(comp).each(function (newContents) {\n se.event().focus().bind(function (f) {\n focus$1(f);\n return search(comp.element());\n }).orThunk(function () {\n Keying.focusIn(newContents);\n return active();\n });\n });\n global$2.setTimeout(function () {\n set$2(comp.element(), 'width', newWidth + 'px');\n }, 0);\n }),\n run(forwardSlideEvent, function (comp, se) {\n InlineView.getContent(comp).each(function (oldContents) {\n stack.set(stack.get().concat([{\n bar: oldContents,\n focus: active()\n }]));\n });\n emitWith(comp, changeSlideEvent, {\n contents: se.event().forwardContents(),\n focus: Option.none()\n });\n }),\n run(backSlideEvent, function (comp, se) {\n last(stack.get()).each(function (last) {\n stack.set(stack.get().slice(0, stack.get().length - 1));\n emitWith(comp, changeSlideEvent, {\n contents: premade$1(last.bar),\n focus: last.focus\n });\n });\n })\n ]),\n Keying.config({\n mode: 'special',\n onEscape: function (comp) {\n return last(stack.get()).fold(function () {\n return spec.onEscape();\n }, function (_) {\n emit(comp, backSlideEvent);\n return Option.some(true);\n });\n }\n })\n ]),\n lazySink: function () {\n return Result.value(spec.sink);\n }\n });\n };\n\n var generateSelectItems = function (_editor, backstage, spec) {\n var generateItem = function (rawItem, response, disabled, value) {\n var translatedText = backstage.shared.providers.translate(rawItem.title);\n if (rawItem.type === 'separator') {\n return Option.some({\n type: 'separator',\n text: translatedText\n });\n } else if (rawItem.type === 'submenu') {\n var items = bind(rawItem.getStyleItems(), function (si) {\n return validate(si, response, value);\n });\n if (response === 0 && items.length <= 0) {\n return Option.none();\n } else {\n return Option.some({\n type: 'nestedmenuitem',\n text: translatedText,\n disabled: items.length <= 0,\n getSubmenuItems: function () {\n return bind(rawItem.getStyleItems(), function (si) {\n return validate(si, response, value);\n });\n }\n });\n }\n } else {\n return Option.some(__assign({\n type: 'togglemenuitem',\n text: translatedText,\n active: rawItem.isSelected(value),\n disabled: disabled,\n onAction: spec.onAction(rawItem)\n }, rawItem.getStylePreview().fold(function () {\n return {};\n }, function (preview) {\n return { meta: { style: preview } };\n })));\n }\n };\n var validate = function (item, response, value) {\n var invalid = item.type === 'formatter' && spec.isInvalid(item);\n if (response === 0) {\n return invalid ? [] : generateItem(item, response, false, value).toArray();\n } else {\n return generateItem(item, response, invalid, value).toArray();\n }\n };\n var validateItems = function (preItems) {\n var value = spec.getCurrentValue();\n var response = spec.shouldHide ? 0 : 1;\n return bind(preItems, function (item) {\n return validate(item, response, value);\n });\n };\n var getFetch = function (backstage, getStyleItems) {\n return function (callback) {\n var preItems = getStyleItems();\n var items = validateItems(preItems);\n var menu = build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false);\n callback(menu);\n };\n };\n return {\n validateItems: validateItems,\n getFetch: getFetch\n };\n };\n var createMenuItems = function (editor, backstage, spec) {\n var dataset = spec.dataset;\n var getStyleItems = dataset.type === 'basic' ? function () {\n return map(dataset.data, function (d) {\n return processBasic(d, spec.isSelectedFor, spec.getPreviewFor);\n });\n } : dataset.getData;\n return {\n items: generateSelectItems(editor, backstage, spec),\n getStyleItems: getStyleItems\n };\n };\n var createSelectButton = function (editor, backstage, spec) {\n var _a = createMenuItems(editor, backstage, spec), items = _a.items, getStyleItems = _a.getStyleItems;\n var getApi = function (comp) {\n return {\n getComponent: function () {\n return comp;\n }\n };\n };\n var onSetup = function (api) {\n spec.setInitialValue.each(function (f) {\n return f(api.getComponent());\n });\n return spec.nodeChangeHandler.map(function (f) {\n var handler = f(api.getComponent());\n editor.on('NodeChange', handler);\n return function () {\n editor.off('NodeChange', handler);\n };\n }).getOr(noop);\n };\n return renderCommonDropdown({\n text: spec.icon.isSome() ? Option.none() : Option.some(''),\n icon: spec.icon,\n tooltip: Option.from(spec.tooltip),\n role: Option.none(),\n fetch: items.getFetch(backstage, getStyleItems),\n onSetup: onSetup,\n getApi: getApi,\n columns: 1,\n presets: 'normal',\n classes: spec.icon.isSome() ? [] : ['bespoke'],\n dropdownBehaviours: []\n }, 'tox-tbtn', backstage.shared);\n };\n\n var process = function (rawFormats) {\n return map(rawFormats, function (item) {\n var title = item, format = item;\n var values = item.split('=');\n if (values.length > 1) {\n title = values[0];\n format = values[1];\n }\n return {\n title: title,\n format: format\n };\n });\n };\n var buildBasicStaticDataset = function (data) {\n return {\n type: 'basic',\n data: data\n };\n };\n var Delimiter;\n (function (Delimiter) {\n Delimiter[Delimiter['SemiColon'] = 0] = 'SemiColon';\n Delimiter[Delimiter['Space'] = 1] = 'Space';\n }(Delimiter || (Delimiter = {})));\n var split = function (rawFormats, delimiter) {\n if (delimiter === Delimiter.SemiColon) {\n return rawFormats.replace(/;$/, '').split(';');\n } else {\n return rawFormats.split(' ');\n }\n };\n var buildBasicSettingsDataset = function (editor, settingName, defaults, delimiter) {\n var rawFormats = get(editor.settings, settingName).getOr(defaults);\n var data = process(split(rawFormats, delimiter));\n return {\n type: 'basic',\n data: data\n };\n };\n\n var alignMenuItems = [\n {\n title: 'Left',\n icon: 'align-left',\n format: 'alignleft',\n command: 'JustifyLeft'\n },\n {\n title: 'Center',\n icon: 'align-center',\n format: 'aligncenter',\n command: 'JustifyCenter'\n },\n {\n title: 'Right',\n icon: 'align-right',\n format: 'alignright',\n command: 'JustifyRight'\n },\n {\n title: 'Justify',\n icon: 'align-justify',\n format: 'alignjustify',\n command: 'JustifyFull'\n }\n ];\n var getSpec = function (editor) {\n var getMatchingValue = function () {\n return find(alignMenuItems, function (item) {\n return editor.formatter.match(item.format);\n });\n };\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (_format) {\n return function () {\n return Option.none();\n };\n };\n var updateSelectMenuIcon = function (comp) {\n var match = getMatchingValue();\n var alignment = match.fold(function () {\n return 'left';\n }, function (item) {\n return item.title.toLowerCase();\n });\n emitWith(comp, updateMenuIcon, { icon: 'align-' + alignment });\n };\n var nodeChangeHandler = Option.some(function (comp) {\n return function () {\n return updateSelectMenuIcon(comp);\n };\n });\n var setInitialValue = Option.some(function (comp) {\n return updateSelectMenuIcon(comp);\n });\n var dataset = buildBasicStaticDataset(alignMenuItems);\n var onAction = function (rawItem) {\n return function () {\n return find(alignMenuItems, function (item) {\n return item.format === rawItem.format;\n }).each(function (item) {\n return editor.execCommand(item.command);\n });\n };\n };\n return {\n tooltip: 'Align',\n icon: Option.some('align-left'),\n isSelectedFor: isSelectedFor,\n getCurrentValue: constant(Option.none()),\n getPreviewFor: getPreviewFor,\n onAction: onAction,\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n }\n };\n };\n var createAlignSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec(editor));\n };\n var alignSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec(editor));\n editor.ui.registry.addNestedMenuItem('align', {\n text: backstage.shared.providers.translate('Align'),\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\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 systemStackFonts = [\n '-apple-system',\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n 'sans-serif'\n ];\n var splitFonts = function (fontFamily) {\n var fonts = fontFamily.split(/\\s*,\\s*/);\n return map(fonts, function (font) {\n return font.replace(/^['\"]+|['\"]+$/g, '');\n });\n };\n var isSystemFontStack = function (fontFamily) {\n var matchesSystemStack = function () {\n var fonts = splitFonts(fontFamily.toLowerCase());\n return forall(systemStackFonts, function (font) {\n return fonts.indexOf(font.toLowerCase()) > -1;\n });\n };\n return fontFamily.indexOf('-apple-system') === 0 && matchesSystemStack();\n };\n var getSpec$1 = function (editor) {\n var getMatchingValue = function () {\n var getFirstFont = function (fontFamily) {\n return fontFamily ? splitFonts(fontFamily)[0] : '';\n };\n var fontFamily = editor.queryCommandValue('FontName');\n var items = dataset.data;\n var font = fontFamily ? fontFamily.toLowerCase() : '';\n var matchOpt = find(items, function (item) {\n var format = item.format;\n return format.toLowerCase() === font || getFirstFont(format).toLowerCase() === getFirstFont(font).toLowerCase();\n }).orThunk(function () {\n if (isSystemFontStack(font)) {\n return Option.from({\n title: 'System Font',\n format: font\n });\n } else {\n return Option.none();\n }\n });\n return {\n matchOpt: matchOpt,\n font: fontFamily\n };\n };\n var isSelectedFor = function (item) {\n return function (valueOpt) {\n return valueOpt.exists(function (value) {\n return value.format === item;\n });\n };\n };\n var getCurrentValue = function () {\n var matchOpt = getMatchingValue().matchOpt;\n return matchOpt;\n };\n var getPreviewFor = function (item) {\n return function () {\n return Option.some({\n tag: 'div',\n styles: item.indexOf('dings') === -1 ? { 'font-family': item } : {}\n });\n };\n };\n var onAction = function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('FontName', false, rawItem.format);\n });\n };\n };\n var updateSelectMenuText = function (comp) {\n var _a = getMatchingValue(), matchOpt = _a.matchOpt, font = _a.font;\n var text = matchOpt.fold(function () {\n return font;\n }, function (item) {\n return item.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var nodeChangeHandler = Option.some(function (comp) {\n return function () {\n return updateSelectMenuText(comp);\n };\n });\n var setInitialValue = Option.some(function (comp) {\n return updateSelectMenuText(comp);\n });\n var dataset = buildBasicSettingsDataset(editor, 'font_formats', defaultFontsFormats, Delimiter.SemiColon);\n return {\n tooltip: 'Fonts',\n icon: Option.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: getCurrentValue,\n getPreviewFor: getPreviewFor,\n onAction: onAction,\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function () {\n return false;\n }\n };\n };\n var createFontSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$1(editor));\n };\n var fontSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$1(editor));\n editor.ui.registry.addNestedMenuItem('fontformats', {\n text: backstage.shared.providers.translate('Fonts'),\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';\n var legacyFontSizes = {\n '8pt': '1',\n '10pt': '2',\n '12pt': '3',\n '14pt': '4',\n '18pt': '5',\n '24pt': '6',\n '36pt': '7'\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 toLegacy = function (fontSize) {\n return get(legacyFontSizes, fontSize).getOr('');\n };\n var getSpec$2 = function (editor) {\n var getMatchingValue = function () {\n var matchOpt = Option.none();\n var items = dataset.data;\n var fontSize = editor.queryCommandValue('FontSize');\n if (fontSize) {\n var _loop_1 = function (precision) {\n var pt = toPt(fontSize, precision);\n var legacy = toLegacy(pt);\n matchOpt = find(items, function (item) {\n return item.format === fontSize || item.format === pt || item.format === legacy;\n });\n };\n for (var precision = 3; matchOpt.isNone() && precision >= 0; precision--) {\n _loop_1(precision);\n }\n }\n return {\n matchOpt: matchOpt,\n size: fontSize\n };\n };\n var isSelectedFor = function (item) {\n return function (valueOpt) {\n return valueOpt.exists(function (value) {\n return value.format === item;\n });\n };\n };\n var getCurrentValue = function () {\n var matchOpt = getMatchingValue().matchOpt;\n return matchOpt;\n };\n var getPreviewFor = constant(constant(Option.none()));\n var onAction = function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('FontSize', false, rawItem.format);\n });\n };\n };\n var updateSelectMenuText = function (comp) {\n var _a = getMatchingValue(), matchOpt = _a.matchOpt, size = _a.size;\n var text = matchOpt.fold(function () {\n return size;\n }, function (match) {\n return match.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var nodeChangeHandler = Option.some(function (comp) {\n return function () {\n return updateSelectMenuText(comp);\n };\n });\n var setInitialValue = Option.some(function (comp) {\n return updateSelectMenuText(comp);\n });\n var dataset = buildBasicSettingsDataset(editor, 'fontsize_formats', defaultFontsizeFormats, Delimiter.Space);\n return {\n tooltip: 'Font sizes',\n icon: Option.none(),\n isSelectedFor: isSelectedFor,\n getPreviewFor: getPreviewFor,\n getCurrentValue: getCurrentValue,\n onAction: onAction,\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function () {\n return false;\n }\n };\n };\n var createFontsizeSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$2(editor));\n };\n var fontsizeSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$2(editor));\n editor.ui.registry.addNestedMenuItem('fontsizes', {\n text: 'Font sizes',\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var findNearest = function (editor, getStyles, parents) {\n var styles = getStyles();\n return findMap(parents, function (parent) {\n return find(styles, function (fmt) {\n return editor.formatter.matchNode(parent, fmt.format);\n });\n }).orThunk(function () {\n if (editor.formatter.match('p')) {\n return Option.some({\n title: 'Paragraph',\n format: 'p'\n });\n }\n return Option.none();\n });\n };\n var getCurrentSelectionParents = function (editor) {\n var currentNode = editor.selection.getStart(true) || editor.getBody();\n return editor.dom.getParents(currentNode, function () {\n return true;\n }, editor.getBody());\n };\n\n var onSetupFormatToggle = function (editor, name) {\n return function (api) {\n var unbindCell = Cell(Option.none());\n var init = function () {\n api.setActive(editor.formatter.match(name));\n var unbind = editor.formatter.formatChanged(name, api.setActive).unbind;\n unbindCell.set(Option.some(unbind));\n };\n editor.initialized ? init() : editor.on('init', init);\n return function () {\n return unbindCell.get().each(function (unbind) {\n return unbind();\n });\n };\n };\n };\n var onActionToggleFormat = function (editor) {\n return function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('mceToggleFormat', false, rawItem.format);\n });\n };\n };\n };\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 getSpec$3 = function (editor) {\n var getMatchingValue = function (nodeChangeEvent) {\n return findNearest(editor, function () {\n return dataset.data;\n }, nodeChangeEvent);\n };\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var fmt = editor.formatter.get(format);\n return Option.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n });\n };\n };\n var updateSelectMenuText = function (parents, comp) {\n var detectedFormat = getMatchingValue(parents);\n var text = detectedFormat.fold(function () {\n return 'Paragraph';\n }, function (fmt) {\n return fmt.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var nodeChangeHandler = Option.some(function (comp) {\n return function (e) {\n return updateSelectMenuText(e.parents, comp);\n };\n });\n var setInitialValue = Option.some(function (comp) {\n var parents = getCurrentSelectionParents(editor);\n updateSelectMenuText(parents, comp);\n });\n var dataset = buildBasicSettingsDataset(editor, 'block_formats', defaultBlocks, Delimiter.SemiColon);\n return {\n tooltip: 'Blocks',\n icon: Option.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: constant(Option.none()),\n getPreviewFor: getPreviewFor,\n onAction: onActionToggleFormat(editor),\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n }\n };\n };\n var createFormatSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$3(editor));\n };\n var formatSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$3(editor));\n editor.ui.registry.addNestedMenuItem('blockformats', {\n text: 'Blocks',\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var getSpec$4 = function (editor, dataset) {\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var fmt = editor.formatter.get(format);\n return fmt !== undefined ? Option.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Option.none();\n };\n };\n var updateSelectMenuText = function (parents, comp) {\n var getFormatItems = function (fmt) {\n var subs = fmt.items;\n return subs !== undefined && subs.length > 0 ? bind(subs, getFormatItems) : [{\n title: fmt.title,\n format: fmt.format\n }];\n };\n var flattenedItems = bind(getStyleFormats(editor), getFormatItems);\n var detectedFormat = findNearest(editor, function () {\n return flattenedItems;\n }, parents);\n var text = detectedFormat.fold(function () {\n return 'Paragraph';\n }, function (fmt) {\n return fmt.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var nodeChangeHandler = Option.some(function (comp) {\n return function (e) {\n return updateSelectMenuText(e.parents, comp);\n };\n });\n var setInitialValue = Option.some(function (comp) {\n var parents = getCurrentSelectionParents(editor);\n updateSelectMenuText(parents, comp);\n });\n return {\n tooltip: 'Formats',\n icon: Option.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: constant(Option.none()),\n getPreviewFor: getPreviewFor,\n onAction: onActionToggleFormat(editor),\n setInitialValue: setInitialValue,\n nodeChangeHandler: nodeChangeHandler,\n shouldHide: editor.getParam('style_formats_autohide', false, 'boolean'),\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n },\n dataset: dataset\n };\n };\n var createStyleSelect = function (editor, backstage) {\n var dataset = __assign({ type: 'advanced' }, backstage.styleselect);\n return createSelectButton(editor, backstage, getSpec$4(editor, dataset));\n };\n var styleSelectMenu = function (editor, backstage) {\n var dataset = __assign({ type: 'advanced' }, backstage.styleselect);\n var menuItems = createMenuItems(editor, backstage, getSpec$4(editor, dataset));\n editor.ui.registry.addNestedMenuItem('formats', {\n text: 'Formats',\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var defaultToolbar = [\n {\n name: 'history',\n items: [\n 'undo',\n 'redo'\n ]\n },\n {\n name: 'styles',\n items: ['styleselect']\n },\n {\n name: 'formatting',\n items: [\n 'bold',\n 'italic'\n ]\n },\n {\n name: 'alignment',\n items: [\n 'alignleft',\n 'aligncenter',\n 'alignright',\n 'alignjustify'\n ]\n },\n {\n name: 'indentation',\n items: [\n 'outdent',\n 'indent'\n ]\n },\n {\n name: 'permanent pen',\n items: ['permanentpen']\n },\n {\n name: 'comments',\n items: ['addcomment']\n }\n ];\n var renderFromBridge = function (bridgeBuilder, render) {\n return function (spec, extras, editor) {\n var internal = bridgeBuilder(spec).mapError(function (errInfo) {\n return formatError(errInfo);\n }).getOrDie();\n return render(internal, extras, editor);\n };\n };\n var types = {\n button: renderFromBridge(createToolbarButton, function (s, extras) {\n return renderToolbarButton(s, extras.backstage.shared.providers);\n }),\n togglebutton: renderFromBridge(createToggleButton, function (s, extras) {\n return renderToolbarToggleButton(s, extras.backstage.shared.providers);\n }),\n menubutton: renderFromBridge(createMenuButton, function (s, extras) {\n return renderMenuButton(s, 'tox-tbtn', extras.backstage, Option.none());\n }),\n splitbutton: renderFromBridge(createSplitButton, function (s, extras) {\n return renderSplitButton(s, extras.backstage.shared);\n }),\n grouptoolbarbutton: renderFromBridge(createGroupToolbarButton, function (s, extras, editor) {\n var _a;\n var buttons = editor.ui.registry.getAll().buttons;\n var identify = function (toolbar) {\n return identifyButtons(editor, {\n buttons: buttons,\n toolbar: toolbar,\n allowToolbarGroups: false\n }, extras, Option.none());\n };\n var attributes = (_a = {}, _a[Attribute] = isToolbarLocationTop(editor) ? AttributeValue.TopToBottom : AttributeValue.BottomToTop, _a);\n switch (getToolbarMode(editor)) {\n case ToolbarMode.floating:\n return renderFloatingToolbarButton(s, extras.backstage, identify, attributes);\n default:\n throw new Error('Toolbar groups are only supported when using floating toolbar mode');\n }\n }),\n styleSelectButton: function (editor, extras) {\n return createStyleSelect(editor, extras.backstage);\n },\n fontsizeSelectButton: function (editor, extras) {\n return createFontsizeSelect(editor, extras.backstage);\n },\n fontSelectButton: function (editor, extras) {\n return createFontSelect(editor, extras.backstage);\n },\n formatButton: function (editor, extras) {\n return createFormatSelect(editor, extras.backstage);\n },\n alignMenuButton: function (editor, extras) {\n return createAlignSelect(editor, extras.backstage);\n }\n };\n var extractFrom = function (spec, extras, editor) {\n return get(types, spec.type).fold(function () {\n domGlobals.console.error('skipping button defined by', spec);\n return Option.none();\n }, function (render) {\n return Option.some(render(spec, extras, editor));\n });\n };\n var bespokeButtons = {\n styleselect: types.styleSelectButton,\n fontsizeselect: types.fontsizeSelectButton,\n fontselect: types.fontSelectButton,\n formatselect: types.formatButton,\n align: types.alignMenuButton\n };\n var removeUnusedDefaults = function (buttons) {\n var filteredItemGroups = map(defaultToolbar, function (group) {\n var items = filter(group.items, function (subItem) {\n return has(buttons, subItem) || has(bespokeButtons, subItem);\n });\n return {\n name: group.name,\n items: items\n };\n });\n return filter(filteredItemGroups, function (group) {\n return group.items.length > 0;\n });\n };\n var convertStringToolbar = function (strToolbar) {\n var groupsStrings = strToolbar.split('|');\n return map(groupsStrings, function (g) {\n return { items: g.trim().split(' ') };\n });\n };\n var isToolbarGroupSettingArray = function (toolbar) {\n return isArrayOf(toolbar, function (t) {\n return has(t, 'name') && has(t, 'items');\n });\n };\n var createToolbar = function (toolbarConfig) {\n var toolbar = toolbarConfig.toolbar;\n var buttons = toolbarConfig.buttons;\n if (toolbar === false) {\n return [];\n } else if (toolbar === undefined || toolbar === true) {\n return removeUnusedDefaults(buttons);\n } else if (isString(toolbar)) {\n return convertStringToolbar(toolbar);\n } else if (isToolbarGroupSettingArray(toolbar)) {\n return toolbar;\n } else {\n domGlobals.console.error('Toolbar type should be string, string[], boolean or ToolbarGroup[]');\n return [];\n }\n };\n var lookupButton = function (editor, buttons, toolbarItem, allowToolbarGroups, extras, prefixes) {\n return get(buttons, toolbarItem.toLowerCase()).orThunk(function () {\n return prefixes.bind(function (ps) {\n return findMap(ps, function (prefix) {\n return get(buttons, prefix + toolbarItem.toLowerCase());\n });\n });\n }).fold(function () {\n return get(bespokeButtons, toolbarItem.toLowerCase()).map(function (r) {\n return r(editor, extras);\n }).orThunk(function () {\n return Option.none();\n });\n }, function (spec) {\n if (spec.type === 'grouptoolbarbutton' && !allowToolbarGroups) {\n domGlobals.console.warn('Ignoring the \\'' + toolbarItem + '\\' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested.');\n return Option.none();\n } else {\n return extractFrom(spec, extras, editor);\n }\n });\n };\n var identifyButtons = function (editor, toolbarConfig, extras, prefixes) {\n var toolbarGroups = createToolbar(toolbarConfig);\n var groups = map(toolbarGroups, function (group) {\n var items = bind(group.items, function (toolbarItem) {\n return toolbarItem.trim().length === 0 ? [] : lookupButton(editor, toolbarConfig.buttons, toolbarItem, toolbarConfig.allowToolbarGroups, extras, prefixes).toArray();\n });\n return {\n title: Option.from(editor.translate(group.name)),\n items: items\n };\n });\n return filter(groups, function (group) {\n return group.items.length > 0;\n });\n };\n\n var bubbleSize = 12;\n var bubbleAlignments$1 = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: ['tox-pop--align-left'],\n alignRight: ['tox-pop--align-right'],\n right: ['tox-pop--right'],\n left: ['tox-pop--left'],\n bottom: ['tox-pop--bottom'],\n top: ['tox-pop--top']\n };\n var anchorOverrides = {\n maxHeightFunction: expandable(),\n maxWidthFunction: expandable$1()\n };\n var desktopAnchorSpecLayouts = {\n onLtr: function () {\n return [\n north$1,\n south$1,\n northeast$1,\n southeast$1,\n northwest$1,\n southwest$1,\n north$3,\n south$3,\n northeast$3,\n southeast$3,\n northwest$3,\n southwest$3\n ];\n },\n onRtl: function () {\n return [\n north$1,\n south$1,\n northwest$1,\n southwest$1,\n northeast$1,\n southeast$1,\n north$3,\n south$3,\n northwest$3,\n southwest$3,\n northeast$3,\n southeast$3\n ];\n }\n };\n var mobileAnchorSpecLayouts = {\n onLtr: function () {\n return [\n south$1,\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1,\n north$1,\n north$3,\n south$3,\n northeast$3,\n southeast$3,\n northwest$3,\n southwest$3\n ];\n },\n onRtl: function () {\n return [\n south$1,\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1,\n north$1,\n north$3,\n south$3,\n northwest$3,\n southwest$3,\n northeast$3,\n southeast$3\n ];\n }\n };\n var getAnchorLayout = function (position, isTouch) {\n if (position === 'line') {\n return {\n bubble: nu$8(bubbleSize, 0, bubbleAlignments$1),\n layouts: {\n onLtr: function () {\n return [east$1];\n },\n onRtl: function () {\n return [west$1];\n }\n },\n overrides: anchorOverrides\n };\n } else {\n return {\n bubble: nu$8(0, bubbleSize, bubbleAlignments$1),\n layouts: isTouch ? mobileAnchorSpecLayouts : desktopAnchorSpecLayouts,\n overrides: anchorOverrides\n };\n }\n };\n var register$4 = function (editor, registryContextToolbars, sink, extras) {\n var isTouch = detect$3().deviceType.isTouch;\n var contextbar = build$1(renderContextToolbar({\n sink: sink,\n onEscape: function () {\n editor.focus();\n return Option.some(true);\n }\n }));\n var getBounds = function () {\n return getContextToolbarBounds(editor);\n };\n var isRangeOverlapping = function (aTop, aBottom, bTop, bBottom) {\n return Math.max(aTop, bTop) <= Math.min(aBottom, bBottom);\n };\n var getLastElementVerticalBound = function () {\n var nodeBounds = lastElement.get().map(function (ele) {\n return ele.getBoundingClientRect();\n }).getOrThunk(function () {\n return editor.selection.getRng().getBoundingClientRect();\n });\n var diffTop = editor.inline ? get$8().top() : absolute$1(Element.fromDom(editor.getBody())).y();\n return {\n y: nodeBounds.top + diffTop,\n bottom: nodeBounds.bottom + diffTop\n };\n };\n var shouldContextToolbarHide = function () {\n if (isTouch() && extras.backstage.isContextMenuOpen()) {\n return true;\n }\n var lastElementBounds = getLastElementVerticalBound();\n var contextToolbarBounds = getBounds();\n return !isRangeOverlapping(lastElementBounds.y, lastElementBounds.bottom, contextToolbarBounds.y(), contextToolbarBounds.bottom());\n };\n var forceHide = function () {\n InlineView.hide(contextbar);\n };\n var hideOrRepositionIfNecessary = function () {\n lastAnchor.get().each(function (anchor) {\n var contextBarEle = contextbar.element();\n remove$6(contextBarEle, 'display');\n if (shouldContextToolbarHide()) {\n set$2(contextBarEle, 'display', 'none');\n } else {\n Positioning.positionWithinBounds(sink, anchor, contextbar, Option.some(getBounds()));\n }\n });\n };\n var lastAnchor = Cell(Option.none());\n var lastElement = Cell(Option.none());\n var timer = Cell(null);\n var wrapInPopDialog = function (toolbarSpec) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-pop__dialog']\n },\n components: [toolbarSpec],\n behaviours: derive$1([\n Keying.config({ mode: 'acyclic' }),\n config('pop-dialog-wrap-events', [\n runOnAttached(function (comp) {\n editor.shortcuts.add('ctrl+F9', 'focus statusbar', function () {\n return Keying.focusIn(comp);\n });\n }),\n runOnDetached(function (comp) {\n editor.shortcuts.remove('ctrl+F9');\n })\n ])\n ])\n };\n };\n var getScopes = cached(function () {\n return ToolbarScopes.categorise(registryContextToolbars, function (toolbarApi) {\n var alloySpec = buildToolbar(toolbarApi);\n emitWith(contextbar, forwardSlideEvent, { forwardContents: wrapInPopDialog(alloySpec) });\n });\n });\n var buildToolbar = function (ctx) {\n var buttons = editor.ui.registry.getAll().buttons;\n var toolbarType = getToolbarMode(editor) === ToolbarMode.scrolling ? ToolbarMode.scrolling : ToolbarMode.default;\n var scopes = getScopes();\n return ctx.type === 'contexttoolbar' ? function () {\n var allButtons = __assign(__assign({}, buttons), scopes.formNavigators);\n var initGroups = identifyButtons(editor, {\n buttons: allButtons,\n toolbar: ctx.items,\n allowToolbarGroups: false\n }, extras, Option.some(['form:']));\n return renderToolbar({\n type: toolbarType,\n uid: generate$1('context-toolbar'),\n initGroups: initGroups,\n onEscape: Option.none,\n cyclicKeying: true\n });\n }() : function () {\n return ContextForm.renderContextForm(toolbarType, ctx, extras.backstage);\n }();\n };\n editor.on(showContextToolbarEvent, function (e) {\n var scopes = getScopes();\n get(scopes.lookupTable, e.toolbarKey).each(function (ctx) {\n launchContext(ctx, e.target === editor ? Option.none() : Option.some(e));\n InlineView.getContent(contextbar).each(Keying.focusIn);\n });\n });\n var getAnchor = function (position, element) {\n var anchorage = position === 'node' ? extras.backstage.shared.anchors.node(element) : extras.backstage.shared.anchors.cursor();\n return deepMerge(anchorage, getAnchorLayout(position, isTouch()));\n };\n var launchContext = function (toolbarApi, elem) {\n clearTimer();\n if (isTouch() && extras.backstage.isContextMenuOpen()) {\n return;\n }\n var toolbarSpec = buildToolbar(toolbarApi);\n var sElem = elem.map(Element.fromDom);\n var anchor = getAnchor(toolbarApi.position, sElem);\n lastAnchor.set(Option.some(anchor));\n lastElement.set(elem);\n var contextBarEle = contextbar.element();\n remove$6(contextBarEle, 'display');\n InlineView.showWithinBounds(contextbar, anchor, wrapInPopDialog(toolbarSpec), function () {\n return Option.some(getBounds());\n });\n if (shouldContextToolbarHide()) {\n set$2(contextBarEle, 'display', 'none');\n }\n };\n var launchContextToolbar = function () {\n if (!editor.hasFocus()) {\n return;\n }\n var scopes = getScopes();\n ToolbarLookup.lookup(scopes, editor).fold(function () {\n lastAnchor.set(Option.none());\n InlineView.hide(contextbar);\n }, function (info) {\n launchContext(info.toolbarApi, Option.some(info.elem.dom()));\n });\n };\n var clearTimer = function () {\n var current = timer.get();\n if (current !== null) {\n global$2.clearTimeout(current);\n timer.set(null);\n }\n };\n var resetTimer = function (t) {\n clearTimer();\n timer.set(t);\n };\n editor.on('init', function () {\n editor.on(hideContextToolbarEvent, forceHide);\n editor.on('ScrollContent ScrollWindow longpress', hideOrRepositionIfNecessary);\n editor.on('click keyup focus SetContent ObjectResized ResizeEditor', function () {\n resetTimer(global$2.setEditorTimeout(editor, launchContextToolbar, 0));\n });\n editor.on('focusout', function (e) {\n global$2.setEditorTimeout(editor, function () {\n if (search(sink.element()).isNone() && search(contextbar.element()).isNone()) {\n lastAnchor.set(Option.none());\n InlineView.hide(contextbar);\n }\n }, 0);\n });\n editor.on('SwitchMode', function () {\n if (editor.mode.isReadOnly()) {\n lastAnchor.set(Option.none());\n InlineView.hide(contextbar);\n }\n });\n editor.on('NodeChange', function (e) {\n search(contextbar.element()).fold(function () {\n resetTimer(global$2.setEditorTimeout(editor, launchContextToolbar, 0));\n }, function (_) {\n });\n });\n });\n };\n var ContextToolbar = { register: register$4 };\n\n var setup$3 = function (editor, mothership, uiMothership) {\n var broadcastEvent = function (name, evt) {\n each([\n mothership,\n uiMothership\n ], function (ship) {\n ship.broadcastEvent(name, evt);\n });\n };\n var broadcastOn = function (channel, message) {\n each([\n mothership,\n uiMothership\n ], function (ship) {\n ship.broadcastOn([channel], message);\n });\n };\n var fireDismissPopups = function (evt) {\n return broadcastOn(dismissPopups(), { target: evt.target() });\n };\n var onTouchstart = bind$3(Element.fromDom(domGlobals.document), 'touchstart', fireDismissPopups);\n var onTouchmove = bind$3(Element.fromDom(domGlobals.document), 'touchmove', function (evt) {\n return broadcastEvent(documentTouchmove(), evt);\n });\n var onTouchend = bind$3(Element.fromDom(domGlobals.document), 'touchend', function (evt) {\n return broadcastEvent(documentTouchend(), evt);\n });\n var onMousedown = bind$3(Element.fromDom(domGlobals.document), 'mousedown', fireDismissPopups);\n var onMouseup = bind$3(Element.fromDom(domGlobals.document), 'mouseup', function (evt) {\n if (evt.raw().button === 0) {\n broadcastOn(mouseReleased(), { target: evt.target() });\n }\n });\n var onContentClick = function (raw) {\n return broadcastOn(dismissPopups(), { target: Element.fromDom(raw.target) });\n };\n var onContentMouseup = function (raw) {\n if (raw.button === 0) {\n broadcastOn(mouseReleased(), { target: Element.fromDom(raw.target) });\n }\n };\n var onWindowScroll = function (evt) {\n return broadcastEvent(windowScroll(), fromRawEvent$1(evt));\n };\n var onWindowResize = function (evt) {\n broadcastOn(repositionPopups(), {});\n broadcastEvent(windowResize(), fromRawEvent$1(evt));\n };\n var onEditorResize = function () {\n return broadcastOn(repositionPopups(), {});\n };\n editor.on('PostRender', function () {\n editor.on('click', onContentClick);\n editor.on('tap', onContentClick);\n editor.on('mouseup', onContentMouseup);\n editor.on('ScrollWindow', onWindowScroll);\n editor.on('ResizeWindow', onWindowResize);\n editor.on('ResizeEditor', onEditorResize);\n });\n editor.on('remove', function () {\n editor.off('click', onContentClick);\n editor.off('tap', onContentClick);\n editor.off('mouseup', onContentMouseup);\n editor.off('ScrollWindow', onWindowScroll);\n editor.off('ResizeWindow', onWindowResize);\n editor.off('ResizeEditor', onEditorResize);\n onMousedown.unbind();\n onTouchstart.unbind();\n onTouchmove.unbind();\n onTouchend.unbind();\n onMouseup.unbind();\n });\n editor.on('detach', function () {\n detachSystem(mothership);\n detachSystem(uiMothership);\n mothership.destroy();\n uiMothership.destroy();\n });\n };\n var Events$1 = { setup: setup$3 };\n\n var parts$d = AlloyParts;\n var partType$1 = PartType;\n\n var schema$r = constant([\n defaulted$1('shell', false),\n strict$1('makeItem'),\n defaulted$1('setupItem', noop),\n SketchBehaviours.field('listBehaviours', [Replacing])\n ]);\n var customListDetail = function () {\n return { behaviours: derive$1([Replacing.config({})]) };\n };\n var itemsPart = optional({\n name: 'items',\n overrides: customListDetail\n });\n var parts$e = constant([itemsPart]);\n var name$2 = constant('CustomList');\n\n var factory$f = function (detail, components, spec, external) {\n var setItems = function (list, items) {\n getListContainer(list).fold(function () {\n domGlobals.console.error('Custom List was defined to not be a shell, but no item container was specified in components');\n throw new Error('Custom List was defined to not be a shell, but no item container was specified in components');\n }, function (container) {\n var itemComps = Replacing.contents(container);\n var numListsRequired = items.length;\n var numListsToAdd = numListsRequired - itemComps.length;\n var itemsToAdd = numListsToAdd > 0 ? range(numListsToAdd, function () {\n return detail.makeItem();\n }) : [];\n var itemsToRemove = itemComps.slice(numListsRequired);\n each(itemsToRemove, function (item) {\n return Replacing.remove(container, item);\n });\n each(itemsToAdd, function (item) {\n return Replacing.append(container, item);\n });\n var builtLists = Replacing.contents(container);\n each(builtLists, function (item, i) {\n detail.setupItem(list, item, items[i], i);\n });\n });\n };\n var extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components: components\n };\n var getListContainer = function (component) {\n return detail.shell ? Option.some(component) : getPart(component, detail, 'items');\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.listBehaviours, extra.behaviours),\n apis: { setItems: setItems }\n };\n };\n var CustomList = composite$1({\n name: name$2(),\n configFields: schema$r(),\n partFields: parts$e(),\n factory: factory$f,\n apis: {\n setItems: function (apis, list, items) {\n apis.setItems(list, items);\n }\n }\n });\n\n var getOffsetParent = function (element) {\n var isFixed = getRaw(element, 'position').is('fixed');\n var offsetParent$1 = isFixed ? Option.none() : offsetParent(element);\n return offsetParent$1.orThunk(function () {\n var marker = Element.fromTag('span');\n return parent(element).bind(function (parent) {\n append(parent, marker);\n var offsetParent$1 = offsetParent(marker);\n remove(marker);\n return offsetParent$1;\n });\n });\n };\n var getOrigin = function (element) {\n return getOffsetParent(element).map(absolute).getOrThunk(function () {\n return Position(0, 0);\n });\n };\n\n var morphAdt = Adt.generate([\n { static: [] },\n { absolute: ['positionCss'] },\n { fixed: ['positionCss'] }\n ]);\n var appear = function (component, contextualInfo) {\n var elem = component.element();\n add$2(elem, contextualInfo.transitionClass);\n remove$4(elem, contextualInfo.fadeOutClass);\n add$2(elem, contextualInfo.fadeInClass);\n contextualInfo.onShow(component);\n };\n var disappear = function (component, contextualInfo) {\n var elem = component.element();\n add$2(elem, contextualInfo.transitionClass);\n remove$4(elem, contextualInfo.fadeInClass);\n add$2(elem, contextualInfo.fadeOutClass);\n contextualInfo.onHide(component);\n };\n var isPartiallyVisible = function (box, viewport) {\n return box.y() < viewport.bottom() && box.bottom() > viewport.y();\n };\n var isTopCompletelyVisible = function (box, viewport) {\n return box.y() >= viewport.y();\n };\n var isBottomCompletelyVisible = function (box, viewport) {\n return box.bottom() <= viewport.bottom();\n };\n var isVisibleForModes = function (modes, box, viewport) {\n return forall(modes, function (mode) {\n switch (mode) {\n case 'bottom':\n return isBottomCompletelyVisible(box, viewport);\n case 'top':\n return isTopCompletelyVisible(box, viewport);\n }\n });\n };\n var getPrior = function (elem, state) {\n return state.getInitialPosition().map(function (pos) {\n return bounds$1(pos.bounds.x(), pos.bounds.y(), get$7(elem), get$6(elem));\n });\n };\n var storePrior = function (elem, box, state) {\n state.setInitialPosition(Option.some({\n style: getAllRaw(elem),\n position: get$4(elem, 'position') || 'static',\n bounds: box\n }));\n };\n var revertToOriginal = function (elem, box$1, state) {\n return state.getInitialPosition().bind(function (position) {\n state.setInitialPosition(Option.none());\n switch (position.position) {\n case 'static':\n return Option.some(morphAdt.static());\n case 'absolute':\n var offsetBox_1 = getOffsetParent(elem).map(box).getOrThunk(function () {\n return box(body());\n });\n return Option.some(morphAdt.absolute(NuPositionCss('absolute', get(position.style, 'left').map(function (_) {\n return box$1.x() - offsetBox_1.x();\n }), get(position.style, 'top').map(function (_) {\n return box$1.y() - offsetBox_1.y();\n }), get(position.style, 'right').map(function (_) {\n return offsetBox_1.right() - box$1.right();\n }), get(position.style, 'bottom').map(function (_) {\n return offsetBox_1.bottom() - box$1.bottom();\n }))));\n default:\n return Option.none();\n }\n });\n };\n var morphToOriginal = function (elem, dockInfo, viewport, state) {\n return getPrior(elem, state).filter(function (box) {\n return isVisibleForModes(dockInfo.modes, box, viewport);\n }).bind(function (box) {\n return revertToOriginal(elem, box, state);\n });\n };\n var morphToFixed = function (elem, dockInfo, viewport, state) {\n var box$1 = box(elem);\n if (!isVisibleForModes(dockInfo.modes, box$1, viewport)) {\n storePrior(elem, box$1, state);\n var winBox = win();\n var left = box$1.x() - winBox.x();\n var top = viewport.y() - winBox.y();\n var bottom = winBox.bottom() - viewport.bottom();\n var isTop = box$1.y() <= viewport.y();\n return Option.some(morphAdt.fixed(NuPositionCss('fixed', Option.some(left), isTop ? Option.some(top) : Option.none(), Option.none(), !isTop ? Option.some(bottom) : Option.none())));\n } else {\n return Option.none();\n }\n };\n var getMorph = function (component, dockInfo, viewport, state) {\n var elem = component.element();\n var isDocked = getRaw(elem, 'position').is('fixed');\n return isDocked ? morphToOriginal(elem, dockInfo, viewport, state) : morphToFixed(elem, dockInfo, viewport, state);\n };\n var getMorphToOriginal = function (component, state) {\n var elem = component.element();\n return getPrior(elem, state).bind(function (box) {\n return revertToOriginal(elem, box, state);\n });\n };\n\n var morphToStatic = function (component, config) {\n each([\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'position'\n ], function (prop) {\n return remove$6(component.element(), prop);\n });\n config.onUndocked(component);\n };\n var morphToCoord = function (component, config, position) {\n applyPositionCss(component.element(), position);\n var method = position.position() === 'fixed' ? config.onDocked : config.onUndocked;\n method(component);\n };\n var updateVisibility = function (component, config, state, viewport, morphToDocked) {\n if (morphToDocked === void 0) {\n morphToDocked = false;\n }\n config.contextual.each(function (contextInfo) {\n contextInfo.lazyContext(component).each(function (box) {\n var isVisible = isPartiallyVisible(box, viewport);\n if (isVisible !== state.isVisible()) {\n state.setVisible(isVisible);\n if (morphToDocked && !isVisible) {\n add$3(component.element(), [contextInfo.fadeOutClass]);\n contextInfo.onHide(component);\n } else {\n var method = isVisible ? appear : disappear;\n method(component, contextInfo);\n }\n }\n });\n });\n };\n var refreshInternal = function (component, config, state) {\n var viewport = config.lazyViewport(component);\n var isDocked = state.isDocked();\n if (isDocked) {\n updateVisibility(component, config, state, viewport);\n }\n getMorph(component, config, viewport, state).each(function (morph) {\n state.setDocked(!isDocked);\n morph.fold(function () {\n return morphToStatic(component, config);\n }, function (position) {\n return morphToCoord(component, config, position);\n }, function (position) {\n updateVisibility(component, config, state, viewport, true);\n morphToCoord(component, config, position);\n });\n });\n };\n var resetInternal = function (component, config, state) {\n var elem = component.element();\n state.setDocked(false);\n getMorphToOriginal(component, state).each(function (morph) {\n morph.fold(function () {\n return morphToStatic(component, config);\n }, function (position) {\n return morphToCoord(component, config, position);\n }, noop);\n });\n state.setVisible(true);\n config.contextual.each(function (contextInfo) {\n remove$5(elem, [\n contextInfo.fadeInClass,\n contextInfo.fadeOutClass,\n contextInfo.transitionClass\n ]);\n contextInfo.onShow(component);\n });\n refresh$4(component, config, state);\n };\n var refresh$4 = function (component, config, state) {\n if (component.getSystem().isConnected()) {\n refreshInternal(component, config, state);\n }\n };\n var reset = function (component, config, state) {\n if (state.isDocked()) {\n resetInternal(component, config, state);\n }\n };\n var isDocked = function (component, config, state) {\n return state.isDocked();\n };\n\n var DockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$4,\n reset: reset,\n isDocked: isDocked\n });\n\n var events$f = function (dockInfo, dockState) {\n return derive([\n runOnSource(transitionend(), function (component, simulatedEvent) {\n dockInfo.contextual.each(function (contextInfo) {\n if (has$2(component.element(), contextInfo.transitionClass)) {\n remove$5(component.element(), [\n contextInfo.transitionClass,\n contextInfo.fadeInClass\n ]);\n var notify = dockState.isVisible() ? contextInfo.onShown : contextInfo.onHidden;\n notify(component);\n }\n simulatedEvent.stop();\n });\n }),\n run(windowScroll(), function (component, _) {\n refresh$4(component, dockInfo, dockState);\n }),\n run(windowResize(), function (component, _) {\n reset(component, dockInfo, dockState);\n })\n ]);\n };\n\n var ActiveDocking = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$f\n });\n\n var DockingSchema = [\n optionObjOf('contextual', [\n strictString('fadeInClass'),\n strictString('fadeOutClass'),\n strictString('transitionClass'),\n strictFunction('lazyContext'),\n onHandler('onShow'),\n onHandler('onShown'),\n onHandler('onHide'),\n onHandler('onHidden')\n ]),\n defaultedFunction('lazyViewport', win),\n defaultedArrayOf('modes', [\n 'top',\n 'bottom'\n ], string),\n onHandler('onDocked'),\n onHandler('onUndocked')\n ];\n\n var init$b = function () {\n var docked = Cell(false);\n var visible = Cell(true);\n var initialBounds = Cell(Option.none());\n var readState = function () {\n return 'docked: ' + docked.get() + ', visible: ' + visible.get();\n };\n return nu$5({\n isDocked: function () {\n return docked.get();\n },\n setDocked: function (state) {\n return docked.set(state);\n },\n getInitialPosition: function () {\n return initialBounds.get();\n },\n setInitialPosition: function (pos) {\n return initialBounds.set(pos);\n },\n isVisible: function () {\n return visible.get();\n },\n setVisible: function (state) {\n return visible.set(state);\n },\n readState: readState\n });\n };\n\n var DockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$b\n });\n\n var Docking = create$1({\n fields: DockingSchema,\n name: 'docking',\n active: ActiveDocking,\n apis: DockingApis,\n state: DockingState\n });\n\n var visibility = {\n fadeInClass: 'tox-editor-dock-fadein',\n fadeOutClass: 'tox-editor-dock-fadeout',\n transitionClass: 'tox-editor-dock-transition'\n };\n var editorStickyOnClass = 'tox-tinymce--toolbar-sticky-on';\n var editorStickyOffClass = 'tox-tinymce--toolbar-sticky-off';\n var scrollFromBehindHeader = function (e, containerHeader) {\n var doc = owner(containerHeader);\n var viewHeight = doc.dom().defaultView.innerHeight;\n var scrollPos = get$8(doc);\n var markerElement = Element.fromDom(e.elm);\n var markerPos = absolute$1(markerElement);\n var markerHeight = get$6(markerElement);\n var markerTop = markerPos.y();\n var markerBottom = markerTop + markerHeight;\n var editorHeaderPos = absolute(containerHeader);\n var editorHeaderHeight = get$6(containerHeader);\n var editorHeaderTop = editorHeaderPos.top();\n var editorHeaderBottom = editorHeaderTop + editorHeaderHeight;\n var editorHeaderDockedAtTop = Math.abs(editorHeaderTop - scrollPos.top()) < 2;\n var editorHeaderDockedAtBottom = Math.abs(editorHeaderBottom - (scrollPos.top() + viewHeight)) < 2;\n if (editorHeaderDockedAtTop && markerTop < editorHeaderBottom) {\n to(scrollPos.left(), markerTop - editorHeaderHeight, doc);\n } else if (editorHeaderDockedAtBottom && markerBottom > editorHeaderTop) {\n var y = markerTop - viewHeight + markerHeight + editorHeaderHeight;\n to(scrollPos.left(), y, doc);\n }\n };\n var updateIframeContentFlow = function (header, isToolbarTop) {\n var getOccupiedHeight = function (elm) {\n return getOuter$1(elm) + (parseInt(get$4(elm, 'margin-top'), 10) || 0) + (parseInt(get$4(elm, 'margin-bottom'), 10) || 0);\n };\n var elm = header.element();\n parent(elm).each(function (parentElem) {\n var padding = 'padding-' + (isToolbarTop ? 'top' : 'bottom');\n if (Docking.isDocked(header)) {\n var parentWidth = get$7(parentElem);\n set$2(elm, 'width', parentWidth + 'px');\n set$2(parentElem, padding, getOccupiedHeight(elm) + 'px');\n } else {\n remove$6(elm, 'width');\n remove$6(parentElem, padding);\n }\n });\n };\n var updateSinkVisibility = function (sinkElem, visible) {\n if (visible) {\n remove$4(sinkElem, visibility.fadeOutClass);\n add$3(sinkElem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]);\n } else {\n remove$4(sinkElem, visibility.fadeInClass);\n add$3(sinkElem, [\n visibility.fadeOutClass,\n visibility.transitionClass\n ]);\n }\n };\n var updateEditorClasses = function (editor, docked) {\n var editorContainer = Element.fromDom(editor.getContainer());\n if (docked) {\n add$2(editorContainer, editorStickyOnClass);\n remove$4(editorContainer, editorStickyOffClass);\n } else {\n add$2(editorContainer, editorStickyOffClass);\n remove$4(editorContainer, editorStickyOnClass);\n }\n };\n var restoreFocus = function (headerElem, focusedElem) {\n var ownerDoc = owner(focusedElem);\n active(ownerDoc).filter(function (activeElm) {\n return !eq(focusedElem, activeElm);\n }).filter(function (activeElm) {\n return eq(activeElm, Element.fromDom(ownerDoc.dom().body)) || contains$2(headerElem, activeElm);\n }).each(function () {\n return focus$1(focusedElem);\n });\n };\n var findFocusedElem = function (rootElm, lazySink) {\n return search(rootElm).orThunk(function () {\n return lazySink().toOption().bind(function (sink) {\n return search(sink.element());\n });\n });\n };\n var setup$4 = function (editor, lazyHeader) {\n if (!editor.inline) {\n if (!isToolbarLocationTop(editor)) {\n editor.on('ResizeEditor', function () {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('ResizeWindow ResizeEditor', function () {\n lazyHeader().each(function (header) {\n return updateIframeContentFlow(header, isToolbarLocationTop(editor));\n });\n });\n editor.on('SkinLoaded', function () {\n lazyHeader().each(function (comp) {\n Docking.isDocked(comp) ? Docking.reset(comp) : Docking.refresh(comp);\n });\n });\n editor.on('FullscreenStateChanged', function () {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('AfterScrollIntoView', function (e) {\n lazyHeader().each(function (header) {\n Docking.refresh(header);\n var headerElem = header.element();\n if (isVisible(headerElem)) {\n scrollFromBehindHeader(e, headerElem);\n }\n });\n });\n editor.on('PostRender', function () {\n updateEditorClasses(editor, false);\n });\n };\n var isDocked$1 = function (lazyHeader) {\n return lazyHeader().map(Docking.isDocked).getOr(false);\n };\n var getIframeBehaviours = function (isToolbarTop) {\n var _a;\n return [Receiving.config({\n channels: (_a = {}, _a[toolbarHeightChange()] = {\n onReceive: function (comp) {\n updateIframeContentFlow(comp, isToolbarTop);\n }\n }, _a)\n })];\n };\n var getBehaviours$2 = function (editor, lazySink) {\n var focusedElm = Cell(Option.none());\n var isToolbarTop = isToolbarLocationTop(editor);\n var runOnSinkElement = function (f) {\n lazySink().each(function (sink) {\n return f(sink.element());\n });\n };\n var onDockingSwitch = function (comp) {\n if (!editor.inline) {\n updateIframeContentFlow(comp, isToolbarTop);\n }\n updateEditorClasses(editor, Docking.isDocked(comp));\n comp.getSystem().broadcastOn([repositionPopups()], {});\n lazySink().each(function (sink) {\n return sink.getSystem().broadcastOn([repositionPopups()], {});\n });\n };\n var additionalBehaviours = editor.inline ? [] : getIframeBehaviours(isToolbarTop);\n return __spreadArrays([\n Focusing.config({}),\n Docking.config({\n contextual: __assign({\n lazyContext: function (comp) {\n var headerHeight = getOuter$1(comp.element());\n var container = editor.inline ? editor.getContentAreaContainer() : editor.getContainer();\n var box$1 = box(Element.fromDom(container));\n var boxHeight = box$1.height() - headerHeight;\n var topBound = box$1.y() + (isToolbarTop ? 0 : headerHeight);\n return Option.some(bounds$1(box$1.x(), topBound, box$1.width(), boxHeight));\n },\n onShow: function () {\n runOnSinkElement(function (elem) {\n return updateSinkVisibility(elem, true);\n });\n },\n onShown: function (comp) {\n runOnSinkElement(function (elem) {\n return remove$5(elem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]);\n });\n focusedElm.get().each(function (elem) {\n restoreFocus(comp.element(), elem);\n focusedElm.set(Option.none());\n });\n },\n onHide: function (comp) {\n focusedElm.set(findFocusedElem(comp.element(), lazySink));\n runOnSinkElement(function (elem) {\n return updateSinkVisibility(elem, false);\n });\n },\n onHidden: function () {\n runOnSinkElement(function (elem) {\n return remove$5(elem, [visibility.transitionClass]);\n });\n }\n }, visibility),\n modes: [isToolbarTop ? 'top' : 'bottom'],\n onDocked: onDockingSwitch,\n onUndocked: onDockingSwitch\n })\n ], additionalBehaviours);\n };\n\n var StickyHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$4,\n isDocked: isDocked$1,\n getBehaviours: getBehaviours$2\n });\n\n var setup$5 = noop;\n var isDocked$2 = never;\n var getBehaviours$3 = constant([]);\n\n var StaticHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$5,\n isDocked: isDocked$2,\n getBehaviours: getBehaviours$3\n });\n\n var renderHeader = function (spec) {\n var editor = spec.editor;\n var getBehaviours = spec.sticky ? getBehaviours$2 : getBehaviours$3;\n return {\n uid: spec.uid,\n dom: spec.dom,\n components: spec.components,\n behaviours: derive$1(getBehaviours(editor, spec.getSink))\n };\n };\n\n var factory$g = function (detail, spec) {\n var setMenus = function (comp, menus) {\n var newMenus = map(menus, function (m) {\n var buttonSpec = {\n type: 'menubutton',\n text: m.text,\n fetch: function (callback) {\n callback(m.getItems());\n }\n };\n var internal = createMenuButton(buttonSpec).mapError(function (errInfo) {\n return formatError(errInfo);\n }).getOrDie();\n return renderMenuButton(internal, 'tox-mbtn', spec.backstage, Option.some('menuitem'));\n });\n Replacing.set(comp, newMenus);\n };\n var apis = {\n focus: Keying.focusIn,\n setMenus: setMenus\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [],\n behaviours: derive$1([\n Replacing.config({}),\n config('menubar-events', [\n runOnAttached(function (component) {\n detail.onSetup(component);\n }),\n run(mouseover(), function (comp, se) {\n descendant$1(comp.element(), '.' + 'tox-mbtn--active').each(function (activeButton) {\n closest$3(se.event().target(), '.' + 'tox-mbtn').each(function (hoveredButton) {\n if (!eq(activeButton, hoveredButton)) {\n comp.getSystem().getByDom(activeButton).each(function (activeComp) {\n comp.getSystem().getByDom(hoveredButton).each(function (hoveredComp) {\n Dropdown.expand(hoveredComp);\n Dropdown.close(activeComp);\n Focusing.focus(hoveredComp);\n });\n });\n }\n });\n });\n }),\n run(focusShifted(), function (comp, se) {\n se.event().prevFocus().bind(function (prev) {\n return comp.getSystem().getByDom(prev).toOption();\n }).each(function (prev) {\n se.event().newFocus().bind(function (nu) {\n return comp.getSystem().getByDom(nu).toOption();\n }).each(function (nu) {\n if (Dropdown.isOpen(prev)) {\n Dropdown.expand(nu);\n Dropdown.close(prev);\n }\n });\n });\n })\n ]),\n Keying.config({\n mode: 'flow',\n selector: '.' + 'tox-mbtn',\n onEscape: function (comp) {\n detail.onEscape(comp);\n return Option.some(true);\n }\n }),\n Tabstopping.config({})\n ]),\n apis: apis,\n domModification: { attributes: { role: 'menubar' } }\n };\n };\n var SilverMenubar = single$2({\n factory: factory$g,\n name: 'silver.Menubar',\n configFields: [\n strict$1('dom'),\n strict$1('uid'),\n strict$1('onEscape'),\n strict$1('backstage'),\n defaulted$1('onSetup', noop)\n ],\n apis: {\n focus: function (apis, comp) {\n apis.focus(comp);\n },\n setMenus: function (apis, comp, menus) {\n apis.setMenus(comp, menus);\n }\n }\n });\n\n var owner$4 = 'container';\n var schema$s = [field$1('slotBehaviours', [])];\n var getPartName$1 = function (name) {\n return '';\n };\n var sketch$2 = function (sSpec) {\n var parts = function () {\n var record = [];\n var slot = function (name, config) {\n record.push(name);\n return generateOne(owner$4, getPartName$1(name), config);\n };\n return {\n slot: slot,\n record: function () {\n return record;\n }\n };\n }();\n var spec = sSpec(parts);\n var partNames = parts.record();\n var fieldParts = map(partNames, function (n) {\n return required({\n name: n,\n pname: getPartName$1(n)\n });\n });\n return composite(owner$4, schema$s, fieldParts, make$7, spec);\n };\n var make$7 = function (detail, components) {\n var getSlotNames = function (_) {\n return getAllPartNames(detail);\n };\n var getSlot = function (container, key) {\n return getPart(container, detail, key);\n };\n var onSlot = function (f, def) {\n return function (container, key) {\n return getPart(container, detail, key).map(function (slot) {\n return f(slot, key);\n }).getOr(def);\n };\n };\n var onSlots = function (f) {\n return function (container, keys) {\n each(keys, function (key) {\n return f(container, key);\n });\n };\n };\n var doShowing = function (comp, key) {\n return get$2(comp.element(), 'aria-hidden') !== 'true';\n };\n var doShow = function (comp, key) {\n if (!doShowing(comp)) {\n var element = comp.element();\n remove$6(element, 'display');\n remove$1(element, 'aria-hidden');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: true\n });\n }\n };\n var doHide = function (comp, key) {\n if (doShowing(comp)) {\n var element = comp.element();\n set$2(element, 'display', 'none');\n set$1(element, 'aria-hidden', 'true');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: false\n });\n }\n };\n var isShowing = onSlot(doShowing, false);\n var hideSlot = onSlot(doHide);\n var hideSlots = onSlots(hideSlot);\n var hideAllSlots = function (container) {\n return hideSlots(container, getSlotNames());\n };\n var showSlot = onSlot(doShow);\n var apis = {\n getSlotNames: getSlotNames,\n getSlot: getSlot,\n isShowing: isShowing,\n hideSlot: hideSlot,\n hideAllSlots: hideAllSlots,\n showSlot: showSlot\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: get$c(detail.slotBehaviours),\n apis: apis\n };\n };\n var slotApis = map$1({\n getSlotNames: function (apis, c) {\n return apis.getSlotNames(c);\n },\n getSlot: function (apis, c, key) {\n return apis.getSlot(c, key);\n },\n isShowing: function (apis, c, key) {\n return apis.isShowing(c, key);\n },\n hideSlot: function (apis, c, key) {\n return apis.hideSlot(c, key);\n },\n hideAllSlots: function (apis, c) {\n return apis.hideAllSlots(c);\n },\n showSlot: function (apis, c, key) {\n return apis.showSlot(c, key);\n }\n }, function (value) {\n return makeApi(value);\n });\n var SlotContainer = __assign(__assign({}, slotApis), { sketch: sketch$2 });\n\n var sidebarSchema = objOf([\n optionString('icon'),\n optionString('tooltip'),\n defaultedFunction('onShow', noop),\n defaultedFunction('onHide', noop),\n defaultedFunction('onSetup', function () {\n return noop;\n })\n ]);\n var createSidebar = function (spec) {\n return asRaw('sidebar', sidebarSchema, spec);\n };\n\n var setup$6 = function (editor) {\n var sidebars = editor.ui.registry.getAll().sidebars;\n each(keys(sidebars), function (name) {\n var spec = sidebars[name];\n var isActive = function () {\n return Option.from(editor.queryCommandValue('ToggleSidebar')).is(name);\n };\n editor.ui.registry.addToggleButton(name, {\n icon: spec.icon,\n tooltip: spec.tooltip,\n onAction: function (buttonApi) {\n editor.execCommand('ToggleSidebar', false, name);\n buttonApi.setActive(isActive());\n },\n onSetup: function (buttonApi) {\n var handleToggle = function () {\n return buttonApi.setActive(isActive());\n };\n editor.on('ToggleSidebar', handleToggle);\n return function () {\n editor.off('ToggleSidebar', handleToggle);\n };\n }\n });\n });\n };\n var getApi = function (comp) {\n return {\n element: function () {\n return comp.element().dom();\n }\n };\n };\n var makePanels = function (parts, panelConfigs) {\n var specs = map(keys(panelConfigs), function (name) {\n var spec = panelConfigs[name];\n var bridged = getOrDie(createSidebar(spec));\n return {\n name: name,\n getApi: getApi,\n onSetup: bridged.onSetup,\n onShow: bridged.onShow,\n onHide: bridged.onHide\n };\n });\n return map(specs, function (spec) {\n var editorOffCell = Cell(noop);\n return parts.slot(spec.name, {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__pane']\n },\n behaviours: SimpleBehaviours.unnamedEvents([\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell),\n run(slotVisibility(), function (sidepanel, se) {\n var data = se.event();\n var optSidePanelSpec = find(specs, function (config) {\n return config.name === data.name();\n });\n optSidePanelSpec.each(function (sidePanelSpec) {\n var handler = data.visible() ? sidePanelSpec.onShow : sidePanelSpec.onHide;\n handler(sidePanelSpec.getApi(sidepanel));\n });\n })\n ])\n });\n });\n };\n var makeSidebar = function (panelConfigs) {\n return SlotContainer.sketch(function (parts) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__pane-container']\n },\n components: makePanels(parts, panelConfigs),\n slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached(function (slotContainer) {\n return SlotContainer.hideAllSlots(slotContainer);\n })])\n };\n });\n };\n var setSidebar = function (sidebar, panelConfigs) {\n var optSlider = Composing.getCurrent(sidebar);\n optSlider.each(function (slider) {\n return Replacing.set(slider, [makeSidebar(panelConfigs)]);\n });\n };\n var toggleSidebar = function (sidebar, name) {\n var optSlider = Composing.getCurrent(sidebar);\n optSlider.each(function (slider) {\n var optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(function (slotContainer) {\n if (Sliding.hasGrown(slider)) {\n if (SlotContainer.isShowing(slotContainer, name)) {\n Sliding.shrink(slider);\n } else {\n SlotContainer.hideAllSlots(slotContainer);\n SlotContainer.showSlot(slotContainer, name);\n }\n } else {\n SlotContainer.hideAllSlots(slotContainer);\n SlotContainer.showSlot(slotContainer, name);\n Sliding.grow(slider);\n }\n });\n });\n };\n var whichSidebar = function (sidebar) {\n var optSlider = Composing.getCurrent(sidebar);\n return optSlider.bind(function (slider) {\n var sidebarOpen = Sliding.isGrowing(slider) || Sliding.hasGrown(slider);\n if (sidebarOpen) {\n var optSlotContainer = Composing.getCurrent(slider);\n return optSlotContainer.bind(function (slotContainer) {\n return find(SlotContainer.getSlotNames(slotContainer), function (name) {\n return SlotContainer.isShowing(slotContainer, name);\n });\n });\n } else {\n return Option.none();\n }\n });\n };\n var fixSize = generate$1('FixSizeEvent');\n var autoSize = generate$1('AutoSizeEvent');\n var renderSidebar = function (spec) {\n return {\n uid: spec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-sidebar'],\n attributes: { role: 'complementary' }\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__slider']\n },\n components: [],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n Sliding.config({\n dimension: { property: 'width' },\n closedClass: 'tox-sidebar--sliding-closed',\n openClass: 'tox-sidebar--sliding-open',\n shrinkingClass: 'tox-sidebar--sliding-shrinking',\n growingClass: 'tox-sidebar--sliding-growing',\n onShrunk: function (slider) {\n var optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(SlotContainer.hideAllSlots);\n emit(slider, autoSize);\n },\n onGrown: function (slider) {\n emit(slider, autoSize);\n },\n onStartGrow: function (slider) {\n emitWith(slider, fixSize, { width: getRaw(slider.element(), 'width').getOr('') });\n },\n onStartShrink: function (slider) {\n emitWith(slider, fixSize, { width: get$7(slider.element()) + 'px' });\n }\n }),\n Replacing.config({}),\n Composing.config({\n find: function (comp) {\n var children = Replacing.contents(comp);\n return head(children);\n }\n })\n ])\n }],\n behaviours: derive$1([\n ComposingConfigs.childAt(0),\n config('sidebar-sliding-events', [\n run(fixSize, function (comp, se) {\n set$2(comp.element(), 'width', se.event().width());\n }),\n run(autoSize, function (comp, se) {\n remove$6(comp.element(), 'width');\n })\n ])\n ])\n };\n };\n\n var getAttrs = function (elem) {\n var attributes = elem.dom().attributes !== undefined ? elem.dom().attributes : [];\n return foldl(attributes, function (b, attr) {\n var _a;\n if (attr.name === 'class') {\n return b;\n } else {\n return __assign(__assign({}, b), (_a = {}, _a[attr.name] = attr.value, _a));\n }\n }, {});\n };\n var getClasses = function (elem) {\n return Array.prototype.slice.call(elem.dom().classList, 0);\n };\n var fromHtml$2 = function (html) {\n var elem = Element.fromHtml(html);\n var children$1 = children(elem);\n var attrs = getAttrs(elem);\n var classes = getClasses(elem);\n var contents = children$1.length === 0 ? {} : { innerHtml: get$1(elem) };\n return __assign({\n tag: name(elem),\n classes: classes,\n attributes: attrs\n }, contents);\n };\n\n var renderSpinner = function (providerBackstage) {\n return {\n dom: {\n tag: 'div',\n attributes: { 'aria-label': providerBackstage.translate('Loading...') },\n classes: ['tox-throbber__busy-spinner']\n },\n components: [{ dom: fromHtml$2('
') }],\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onTab: function () {\n return Option.some(true);\n },\n onShiftTab: function () {\n return Option.some(true);\n }\n }),\n Focusing.config({})\n ])\n };\n };\n var toggleThrobber = function (comp, state, providerBackstage) {\n var element = comp.element();\n if (state === true) {\n Replacing.set(comp, [renderSpinner(providerBackstage)]);\n remove$6(element, 'display');\n remove$1(element, 'aria-hidden');\n } else {\n Replacing.set(comp, []);\n set$2(element, 'display', 'none');\n set$1(element, 'aria-hidden', 'true');\n }\n };\n var renderThrobber = function (spec) {\n return {\n uid: spec.uid,\n dom: {\n tag: 'div',\n attributes: { 'aria-hidden': 'true' },\n classes: ['tox-throbber'],\n styles: { display: 'none' }\n },\n behaviours: derive$1([Replacing.config({})]),\n components: []\n };\n };\n var setup$7 = function (editor, lazyThrobber, sharedBackstage) {\n var throbberState = Cell(false);\n var timer = Cell(Option.none());\n var toggle = function (state) {\n if (state !== throbberState.get()) {\n toggleThrobber(lazyThrobber(), state, sharedBackstage.providers);\n throbberState.set(state);\n }\n };\n editor.on('ProgressState', function (e) {\n timer.get().each(global$2.clearTimeout);\n if (isNumber(e.time)) {\n var timerId = global$2.setEditorTimeout(editor, function () {\n return toggle(e.state);\n }, e.time);\n timer.set(Option.some(timerId));\n } else {\n toggle(e.state);\n timer.set(Option.none());\n }\n });\n };\n\n var factory$h = function (detail, components, spec) {\n var apis = {\n getSocket: function (comp) {\n return parts$d.getPart(comp, detail, 'socket');\n },\n setSidebar: function (comp, panelConfigs) {\n parts$d.getPart(comp, detail, 'sidebar').each(function (sidebar) {\n return setSidebar(sidebar, panelConfigs);\n });\n },\n toggleSidebar: function (comp, name) {\n parts$d.getPart(comp, detail, 'sidebar').each(function (sidebar) {\n return toggleSidebar(sidebar, name);\n });\n },\n whichSidebar: function (comp) {\n return parts$d.getPart(comp, detail, 'sidebar').bind(whichSidebar).getOrNull();\n },\n getHeader: function (comp) {\n return parts$d.getPart(comp, detail, 'header');\n },\n getToolbar: function (comp) {\n return parts$d.getPart(comp, detail, 'toolbar');\n },\n setToolbar: function (comp, groups) {\n parts$d.getPart(comp, detail, 'toolbar').each(function (toolbar) {\n toolbar.getApis().setGroups(toolbar, groups);\n });\n },\n setToolbars: function (comp, toolbars) {\n parts$d.getPart(comp, detail, 'multiple-toolbar').each(function (mToolbar) {\n CustomList.setItems(mToolbar, toolbars);\n });\n },\n refreshToolbar: function (comp) {\n var toolbar = parts$d.getPart(comp, detail, 'toolbar');\n toolbar.each(function (toolbar) {\n return toolbar.getApis().refresh(toolbar);\n });\n },\n getThrobber: function (comp) {\n return parts$d.getPart(comp, detail, 'throbber');\n },\n focusToolbar: function (comp) {\n var optToolbar = parts$d.getPart(comp, detail, 'toolbar').orThunk(function () {\n return parts$d.getPart(comp, detail, 'multiple-toolbar');\n });\n optToolbar.each(function (toolbar) {\n Keying.focusIn(toolbar);\n });\n },\n setMenubar: function (comp, menus) {\n parts$d.getPart(comp, detail, 'menubar').each(function (menubar) {\n SilverMenubar.setMenus(menubar, menus);\n });\n },\n focusMenubar: function (comp) {\n parts$d.getPart(comp, detail, 'menubar').each(function (menubar) {\n SilverMenubar.focus(menubar);\n });\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n apis: apis,\n behaviours: detail.behaviours\n };\n };\n var partMenubar = partType$1.optional({\n factory: SilverMenubar,\n name: 'menubar',\n schema: [strict$1('backstage')]\n });\n var toolbarFactory = function (spec) {\n if (spec.type === ToolbarMode.sliding) {\n return renderSlidingMoreToolbar;\n } else if (spec.type === ToolbarMode.floating) {\n return renderFloatingMoreToolbar;\n } else {\n return renderToolbar;\n }\n };\n var partMultipleToolbar = partType$1.optional({\n factory: {\n sketch: function (spec) {\n return CustomList.sketch({\n uid: spec.uid,\n dom: spec.dom,\n listBehaviours: derive$1([Keying.config({\n mode: 'acyclic',\n selector: '.tox-toolbar'\n })]),\n makeItem: function () {\n return renderToolbar({\n type: spec.type,\n uid: generate$1('multiple-toolbar-item'),\n cyclicKeying: false,\n initGroups: [],\n onEscape: function () {\n return Option.none();\n }\n });\n },\n setupItem: function (mToolbar, tc, data, index) {\n Toolbar.setGroups(tc, data);\n },\n shell: true\n });\n }\n },\n name: 'multiple-toolbar',\n schema: [\n strict$1('dom'),\n strict$1('onEscape')\n ]\n });\n var partToolbar = partType$1.optional({\n factory: {\n sketch: function (spec) {\n var renderer = toolbarFactory(spec);\n var toolbarSpec = {\n type: spec.type,\n uid: spec.uid,\n onEscape: function () {\n spec.onEscape();\n return Option.some(true);\n },\n cyclicKeying: false,\n initGroups: [],\n getSink: spec.getSink,\n backstage: spec.backstage,\n moreDrawerData: {\n lazyToolbar: spec.lazyToolbar,\n lazyMoreButton: spec.lazyMoreButton,\n lazyHeader: spec.lazyHeader\n },\n attributes: spec.attributes\n };\n return renderer(toolbarSpec);\n }\n },\n name: 'toolbar',\n schema: [\n strict$1('dom'),\n strict$1('onEscape'),\n strict$1('getSink')\n ]\n });\n var partHeader = partType$1.optional({\n factory: { sketch: renderHeader },\n name: 'header',\n schema: [strict$1('dom')]\n });\n var partSocket = partType$1.optional({\n name: 'socket',\n schema: [strict$1('dom')]\n });\n var partSidebar = partType$1.optional({\n factory: { sketch: renderSidebar },\n name: 'sidebar',\n schema: [strict$1('dom')]\n });\n var partThrobber = partType$1.optional({\n factory: { sketch: renderThrobber },\n name: 'throbber',\n schema: [strict$1('dom')]\n });\n var OuterContainer = composite$1({\n name: 'OuterContainer',\n factory: factory$h,\n configFields: [\n strict$1('dom'),\n strict$1('behaviours')\n ],\n partFields: [\n partHeader,\n partMenubar,\n partToolbar,\n partMultipleToolbar,\n partSocket,\n partSidebar,\n partThrobber\n ],\n apis: {\n getSocket: function (apis, comp) {\n return apis.getSocket(comp);\n },\n setSidebar: function (apis, comp, panelConfigs) {\n apis.setSidebar(comp, panelConfigs);\n },\n toggleSidebar: function (apis, comp, name) {\n apis.toggleSidebar(comp, name);\n },\n whichSidebar: function (apis, comp) {\n return apis.whichSidebar(comp);\n },\n getHeader: function (apis, comp) {\n return apis.getHeader(comp);\n },\n getToolbar: function (apis, comp) {\n return apis.getToolbar(comp);\n },\n setToolbar: function (apis, comp, grps) {\n var groups = map(grps, function (grp) {\n return renderToolbarGroup(grp);\n });\n apis.setToolbar(comp, groups);\n },\n setToolbars: function (apis, comp, ts) {\n var renderedToolbars = map(ts, function (g) {\n return map(g, renderToolbarGroup);\n });\n apis.setToolbars(comp, renderedToolbars);\n },\n refreshToolbar: function (apis, comp) {\n return apis.refreshToolbar(comp);\n },\n getThrobber: function (apis, comp) {\n return apis.getThrobber(comp);\n },\n setMenubar: function (apis, comp, menus) {\n apis.setMenubar(comp, menus);\n },\n focusMenubar: function (apis, comp) {\n apis.focusMenubar(comp);\n },\n focusToolbar: function (apis, comp) {\n apis.focusToolbar(comp);\n }\n }\n });\n\n var defaultMenubar = 'file edit view insert format tools table help';\n var defaultMenus = {\n file: {\n title: 'File',\n items: 'newdocument restoredraft | preview | print | deleteallconversations'\n },\n edit: {\n title: 'Edit',\n items: 'undo redo | cut copy paste pastetext | selectall | searchreplace'\n },\n view: {\n title: 'View',\n items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments'\n },\n insert: {\n title: 'Insert',\n items: 'image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor toc | insertdatetime'\n },\n format: {\n title: 'Format',\n items: 'bold italic underline strikethrough superscript subscript codeformat | formats blockformats fontformats fontsizes align | forecolor backcolor | removeformat'\n },\n tools: {\n title: 'Tools',\n items: 'spellchecker spellcheckerlanguage | a11ycheck code wordcount'\n },\n table: {\n title: 'Table',\n items: 'inserttable | cell row column | advtablesort | tableprops deletetable'\n },\n help: {\n title: 'Help',\n items: 'help'\n }\n };\n var make$8 = function (menu, registry, editor) {\n var removedMenuItems = getRemovedMenuItems(editor).split(/[ ,]/);\n return {\n text: menu.title,\n getItems: function () {\n return bind(menu.items, function (i) {\n var itemName = i.toLowerCase();\n if (itemName.trim().length === 0) {\n return [];\n } else if (exists(removedMenuItems, function (removedMenuItem) {\n return removedMenuItem === itemName;\n })) {\n return [];\n } else if (itemName === 'separator' || itemName === '|') {\n return [{ type: 'separator' }];\n } else if (registry.menuItems[itemName]) {\n return [registry.menuItems[itemName]];\n } else {\n return [];\n }\n });\n }\n };\n };\n var parseItemsString = function (items) {\n if (typeof items === 'string') {\n return items.split(' ');\n }\n return items;\n };\n var identifyMenus = function (editor, registry) {\n var rawMenuData = __assign(__assign({}, defaultMenus), registry.menus);\n var userDefinedMenus = keys(registry.menus).length > 0;\n var menubar = registry.menubar === undefined || registry.menubar === true ? parseItemsString(defaultMenubar) : parseItemsString(registry.menubar === false ? '' : registry.menubar);\n var validMenus = filter(menubar, function (menuName) {\n return userDefinedMenus ? registry.menus.hasOwnProperty(menuName) && registry.menus[menuName].hasOwnProperty('items') || defaultMenus.hasOwnProperty(menuName) : defaultMenus.hasOwnProperty(menuName);\n });\n var menus = map(validMenus, function (menuName) {\n var menuData = rawMenuData[menuName];\n return make$8({\n title: menuData.title,\n items: parseItemsString(menuData.items)\n }, registry, editor);\n });\n return filter(menus, function (menu) {\n var isNotSeparator = function (item) {\n return item.type !== 'separator';\n };\n return menu.getItems().length > 0 && exists(menu.getItems(), isNotSeparator);\n });\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 fireSkinLoadError$1 = function (editor, err) {\n return function () {\n return Events.fireSkinLoadError(editor, { message: err });\n };\n };\n var SkinLoaded = {\n fireSkinLoaded: fireSkinLoaded$1,\n fireSkinLoadError: fireSkinLoadError$1\n };\n\n var loadSkin = function (isInline, editor) {\n var skinUrl = getSkinUrl(editor);\n var skinUiCss;\n if (skinUrl) {\n skinUiCss = skinUrl + '/skin.min.css';\n editor.contentCSS.push(skinUrl + (isInline ? '/content.inline' : '/content') + '.min.css');\n }\n if (isSkinDisabled(editor) === false && skinUiCss) {\n global$3.DOM.styleSheetLoader.load(skinUiCss, SkinLoaded.fireSkinLoaded(editor), SkinLoaded.fireSkinLoadError(editor, 'Skin could not be loaded'));\n } else {\n SkinLoaded.fireSkinLoaded(editor)();\n }\n };\n var iframe = curry(loadSkin, false);\n var inline = curry(loadSkin, true);\n\n var setToolbar = function (editor, uiComponents, rawUiConfig, backstage) {\n var comp = uiComponents.outerContainer;\n var toolbarConfig = rawUiConfig.toolbar;\n var toolbarButtonsConfig = rawUiConfig.buttons;\n if (isArrayOf(toolbarConfig, isString)) {\n var toolbars = toolbarConfig.map(function (t) {\n var config = {\n toolbar: t,\n buttons: toolbarButtonsConfig,\n allowToolbarGroups: rawUiConfig.allowToolbarGroups\n };\n return identifyButtons(editor, config, { backstage: backstage }, Option.none());\n });\n OuterContainer.setToolbars(comp, toolbars);\n } else {\n OuterContainer.setToolbar(comp, identifyButtons(editor, rawUiConfig, { backstage: backstage }, Option.none()));\n }\n };\n\n var DOM = global$3.DOM;\n var detection = detect$3();\n var isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12;\n var setupEvents = function (editor) {\n var contentWindow = editor.getWin();\n var initialDocEle = editor.getDoc().documentElement;\n var lastWindowDimensions = Cell(Position(contentWindow.innerWidth, contentWindow.innerHeight));\n var lastDocumentDimensions = Cell(Position(initialDocEle.offsetWidth, initialDocEle.offsetHeight));\n var resize = function (e) {\n var docEle = editor.getDoc().documentElement;\n var outer = lastWindowDimensions.get();\n var inner = lastDocumentDimensions.get();\n if (outer.left() !== contentWindow.innerWidth || outer.top() !== contentWindow.innerHeight) {\n lastWindowDimensions.set(Position(contentWindow.innerWidth, contentWindow.innerHeight));\n Events.fireResizeContent(editor, e);\n } else if (inner.left() !== docEle.offsetWidth || inner.top() !== docEle.offsetHeight) {\n lastDocumentDimensions.set(Position(docEle.offsetWidth, docEle.offsetHeight));\n Events.fireResizeContent(editor, e);\n }\n };\n var scroll = function (e) {\n return Events.fireScrollContent(editor, e);\n };\n DOM.bind(contentWindow, 'resize', resize);\n DOM.bind(contentWindow, 'scroll', scroll);\n var elementLoad = capture$1(Element.fromDom(editor.getBody()), 'load', resize);\n editor.on('remove', function () {\n elementLoad.unbind();\n DOM.unbind(contentWindow, 'resize', resize);\n DOM.unbind(contentWindow, 'scroll', scroll);\n });\n };\n var render = function (editor, uiComponents, rawUiConfig, backstage, args) {\n var lastToolbarWidth = Cell(0);\n iframe(editor);\n attachSystemAfter(Element.fromDom(args.targetNode), uiComponents.mothership);\n attachSystem(body(), uiComponents.uiMothership);\n editor.on('PostRender', function () {\n setToolbar(editor, uiComponents, rawUiConfig, backstage);\n lastToolbarWidth.set(editor.getWin().innerWidth);\n OuterContainer.setMenubar(uiComponents.outerContainer, identifyMenus(editor, rawUiConfig));\n OuterContainer.setSidebar(uiComponents.outerContainer, rawUiConfig.sidebar);\n setupEvents(editor);\n });\n var socket = OuterContainer.getSocket(uiComponents.outerContainer).getOrDie('Could not find expected socket element');\n if (isiOS12 === true) {\n setAll$1(socket.element(), {\n 'overflow': 'scroll',\n '-webkit-overflow-scrolling': 'touch'\n });\n var limit = first(function () {\n editor.fire('ScrollContent');\n }, 20);\n bind$3(socket.element(), 'scroll', limit.throttle);\n }\n setupReadonlyModeSwitch(editor, uiComponents);\n editor.addCommand('ToggleSidebar', function (ui, value) {\n OuterContainer.toggleSidebar(uiComponents.outerContainer, value);\n editor.fire('ToggleSidebar');\n });\n editor.addQueryValueHandler('ToggleSidebar', function () {\n return OuterContainer.whichSidebar(uiComponents.outerContainer);\n });\n var toolbarMode = getToolbarMode(editor);\n var refreshDrawer = function () {\n OuterContainer.refreshToolbar(uiComponents.outerContainer);\n };\n if (toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating) {\n editor.on('ResizeWindow ResizeEditor ResizeContent', function () {\n var width = editor.getWin().innerWidth;\n if (width !== lastToolbarWidth.get()) {\n refreshDrawer();\n lastToolbarWidth.set(width);\n }\n });\n }\n return {\n iframeContainer: socket.element().dom(),\n editorContainer: uiComponents.outerContainer.element().dom()\n };\n };\n var Iframe = { render: render };\n\n var parseToInt = function (val) {\n var re = /^[0-9\\.]+(|px)$/i;\n if (re.test('' + val)) {\n return Option.some(parseInt('' + val, 10));\n }\n return Option.none();\n };\n var numToPx = function (val) {\n return isNumber(val) ? val + 'px' : val;\n };\n var calcCappedSize = function (size, minSize, maxSize) {\n var minOverride = minSize.filter(function (min) {\n return size < min;\n });\n var maxOverride = maxSize.filter(function (max) {\n return size > max;\n });\n return minOverride.or(maxOverride).getOr(size);\n };\n var Utils = {\n calcCappedSize: calcCappedSize,\n parseToInt: parseToInt,\n numToPx: numToPx\n };\n\n var getHeight$1 = function (editor) {\n var baseHeight = getHeightSetting(editor);\n var minHeight = getMinHeightSetting(editor);\n var maxHeight = getMaxHeightSetting(editor);\n return Utils.parseToInt(baseHeight).map(function (height) {\n return Utils.calcCappedSize(height, minHeight, maxHeight);\n });\n };\n var getHeightWithFallback = function (editor) {\n var height = getHeight$1(editor);\n return height.getOr(getHeightSetting(editor));\n };\n var getWidth$1 = function (editor) {\n var baseWidth = getWidthSetting(editor);\n var minWidth = getMinWidthSetting(editor);\n var maxWidth = getMaxWidthSetting(editor);\n return Utils.parseToInt(baseWidth).map(function (width) {\n return Utils.calcCappedSize(width, minWidth, maxWidth);\n });\n };\n var getWidthWithFallback = function (editor) {\n var width = getWidth$1(editor);\n return width.getOr(getWidthSetting(editor));\n };\n\n var getTargetPosAndHeight = function (targetElm, isToolbarTop) {\n var pos = box(targetElm);\n return {\n pos: isToolbarTop ? pos.y() : pos.bottom(),\n height: pos.height()\n };\n };\n var render$1 = function (editor, uiComponents, rawUiConfig, backstage, args) {\n var mothership = uiComponents.mothership, uiMothership = uiComponents.uiMothership, outerContainer = uiComponents.outerContainer;\n var floatContainer;\n var DOM = global$3.DOM;\n var useFixedToolbarContainer = useFixedContainer(editor);\n var isSticky = isStickyToolbar(editor);\n var targetElm = Element.fromDom(args.targetNode);\n var editorMaxWidthOpt = getMaxWidthSetting(editor).or(getWidth$1(editor));\n var toolbarMode = getToolbarMode(editor);\n var isSplitToolbar = toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating;\n var isToolbarTop = isToolbarLocationTop(editor);\n var prevPosAndHeight = Cell(getTargetPosAndHeight(targetElm, isToolbarTop));\n var visible = Cell(false);\n inline(editor);\n var updateChromePosition = function (toolbar) {\n var offset = isSplitToolbar ? toolbar.fold(function () {\n return 0;\n }, function (tbar) {\n return tbar.components().length > 1 ? get$6(tbar.components()[1].element()) : 0;\n }) : 0;\n var targetBounds = box(targetElm);\n var top = isToolbarTop ? targetBounds.y() - get$6(floatContainer.element()) + offset : targetBounds.bottom();\n setAll$1(outerContainer.element(), {\n position: 'absolute',\n top: Math.round(top) + 'px',\n left: Math.round(targetBounds.x()) + 'px'\n });\n var maxWidth = editorMaxWidthOpt.getOrThunk(function () {\n var bodyMargin = Utils.parseToInt(get$4(body(), 'margin-left')).getOr(0);\n return get$7(body()) - targetBounds.x() + bodyMargin;\n });\n set$2(floatContainer.element(), 'max-width', maxWidth + 'px');\n };\n var repositionFloatingUiComponents = function () {\n uiMothership.broadcastOn([repositionPopups()], {});\n };\n var updateChromeUi = function (resetDocking) {\n if (resetDocking === void 0) {\n resetDocking = false;\n }\n if (isSplitToolbar) {\n OuterContainer.refreshToolbar(outerContainer);\n }\n if (!useFixedToolbarContainer) {\n var toolbar_1 = OuterContainer.getToolbar(outerContainer);\n updateChromePosition(toolbar_1);\n }\n if (isSticky) {\n resetDocking ? Docking.reset(floatContainer) : Docking.refresh(floatContainer);\n }\n repositionFloatingUiComponents();\n };\n var show = function () {\n visible.set(true);\n set$2(outerContainer.element(), 'display', 'flex');\n DOM.addClass(editor.getBody(), 'mce-edit-focus');\n remove$6(uiMothership.element(), 'display');\n updateChromeUi();\n };\n var hide = function () {\n visible.set(false);\n if (uiComponents.outerContainer) {\n set$2(outerContainer.element(), 'display', 'none');\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n }\n set$2(uiMothership.element(), 'display', 'none');\n };\n var render = function () {\n if (floatContainer) {\n show();\n return;\n }\n floatContainer = OuterContainer.getHeader(outerContainer).getOrDie();\n var uiContainer = getUiContainer(editor);\n attachSystem(uiContainer, mothership);\n attachSystem(uiContainer, uiMothership);\n setToolbar(editor, uiComponents, rawUiConfig, backstage);\n OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n show();\n editor.on('activate', show);\n editor.on('deactivate', hide);\n editor.on('SkinLoaded ResizeWindow', function () {\n if (visible.get()) {\n updateChromeUi(true);\n }\n });\n editor.on('NodeChange keydown', function () {\n global$2.requestAnimationFrame(function () {\n var posAndHeight = getTargetPosAndHeight(targetElm, isToolbarTop);\n var prev = prevPosAndHeight.get();\n if (visible.get()) {\n if (posAndHeight.pos !== prev.pos) {\n updateChromeUi(true);\n prevPosAndHeight.set(posAndHeight);\n } else if (posAndHeight.height !== prev.height) {\n repositionFloatingUiComponents();\n prevPosAndHeight.set(posAndHeight);\n }\n }\n });\n });\n editor.nodeChanged();\n };\n editor.on('focus', render);\n editor.on('blur hide', hide);\n editor.on('init', function () {\n if (editor.hasFocus()) {\n render();\n }\n });\n setupReadonlyModeSwitch(editor, uiComponents);\n return { editorContainer: outerContainer.element().dom() };\n };\n var Inline = { render: render$1 };\n\n var register$5 = function (editor) {\n var alignToolbarButtons = [\n {\n name: 'alignleft',\n text: 'Align left',\n cmd: 'JustifyLeft',\n icon: 'align-left'\n },\n {\n name: 'aligncenter',\n text: 'Align center',\n cmd: 'JustifyCenter',\n icon: 'align-center'\n },\n {\n name: 'alignright',\n text: 'Align right',\n cmd: 'JustifyRight',\n icon: 'align-right'\n },\n {\n name: 'alignjustify',\n text: 'Justify',\n cmd: 'JustifyFull',\n icon: 'align-justify'\n }\n ];\n global$e.each(alignToolbarButtons, function (item) {\n editor.ui.registry.addToggleButton(item.name, {\n tooltip: item.text,\n onAction: function () {\n return editor.execCommand(item.cmd);\n },\n icon: item.icon,\n onSetup: onSetupFormatToggle(editor, item.name)\n });\n });\n var alignNoneToolbarButton = {\n name: 'alignnone',\n text: 'No alignment',\n cmd: 'JustifyNone',\n icon: 'align-none'\n };\n editor.ui.registry.addButton(alignNoneToolbarButton.name, {\n tooltip: alignNoneToolbarButton.text,\n onAction: function () {\n return editor.execCommand(alignNoneToolbarButton.cmd);\n },\n icon: alignNoneToolbarButton.icon\n });\n };\n var AlignmentButtons = { register: register$5 };\n\n var toggleFormat = function (editor, fmt) {\n return function () {\n editor.execCommand('mceToggleFormat', false, fmt);\n };\n };\n var registerFormatButtons = function (editor) {\n global$e.each([\n {\n name: 'bold',\n text: 'Bold',\n icon: 'bold'\n },\n {\n name: 'italic',\n text: 'Italic',\n icon: 'italic'\n },\n {\n name: 'underline',\n text: 'Underline',\n icon: 'underline'\n },\n {\n name: 'strikethrough',\n text: 'Strikethrough',\n icon: 'strike-through'\n },\n {\n name: 'subscript',\n text: 'Subscript',\n icon: 'subscript'\n },\n {\n name: 'superscript',\n text: 'Superscript',\n icon: 'superscript'\n }\n ], function (btn, idx) {\n editor.ui.registry.addToggleButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onSetup: onSetupFormatToggle(editor, btn.name),\n onAction: toggleFormat(editor, btn.name)\n });\n });\n for (var i = 1; i <= 6; i++) {\n var name_1 = 'h' + i;\n editor.ui.registry.addToggleButton(name_1, {\n text: name_1.toUpperCase(),\n tooltip: 'Heading ' + i,\n onSetup: onSetupFormatToggle(editor, name_1),\n onAction: toggleFormat(editor, name_1)\n });\n }\n };\n var registerCommandButtons = function (editor) {\n global$e.each([\n {\n name: 'cut',\n text: 'Cut',\n action: 'Cut',\n icon: 'cut'\n },\n {\n name: 'copy',\n text: 'Copy',\n action: 'Copy',\n icon: 'copy'\n },\n {\n name: 'paste',\n text: 'Paste',\n action: 'Paste',\n icon: 'paste'\n },\n {\n name: 'help',\n text: 'Help',\n action: 'mceHelp',\n icon: 'help'\n },\n {\n name: 'selectall',\n text: 'Select all',\n action: 'SelectAll',\n icon: 'select-all'\n },\n {\n name: 'newdocument',\n text: 'New document',\n action: 'mceNewDocument',\n icon: 'new-document'\n },\n {\n name: 'removeformat',\n text: 'Clear formatting',\n action: 'RemoveFormat',\n icon: 'remove-formatting'\n },\n {\n name: 'remove',\n text: 'Remove',\n action: 'Delete',\n icon: 'remove'\n }\n ], function (btn) {\n editor.ui.registry.addButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onAction: function () {\n return editor.execCommand(btn.action);\n }\n });\n });\n };\n var registerCommandToggleButtons = function (editor) {\n global$e.each([{\n name: 'blockquote',\n text: 'Blockquote',\n action: 'mceBlockQuote',\n icon: 'quote'\n }], function (btn) {\n editor.ui.registry.addToggleButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onAction: function () {\n return editor.execCommand(btn.action);\n },\n onSetup: onSetupFormatToggle(editor, btn.name)\n });\n });\n };\n var registerButtons = function (editor) {\n registerFormatButtons(editor);\n registerCommandButtons(editor);\n registerCommandToggleButtons(editor);\n };\n var registerMenuItems = function (editor) {\n global$e.each([\n {\n name: 'bold',\n text: 'Bold',\n action: 'Bold',\n icon: 'bold',\n shortcut: 'Meta+B'\n },\n {\n name: 'italic',\n text: 'Italic',\n action: 'Italic',\n icon: 'italic',\n shortcut: 'Meta+I'\n },\n {\n name: 'underline',\n text: 'Underline',\n action: 'Underline',\n icon: 'underline',\n shortcut: 'Meta+U'\n },\n {\n name: 'strikethrough',\n text: 'Strikethrough',\n action: 'Strikethrough',\n icon: 'strike-through',\n shortcut: ''\n },\n {\n name: 'subscript',\n text: 'Subscript',\n action: 'Subscript',\n icon: 'subscript',\n shortcut: ''\n },\n {\n name: 'superscript',\n text: 'Superscript',\n action: 'Superscript',\n icon: 'superscript',\n shortcut: ''\n },\n {\n name: 'removeformat',\n text: 'Clear formatting',\n action: 'RemoveFormat',\n icon: 'remove-formatting',\n shortcut: ''\n },\n {\n name: 'newdocument',\n text: 'New document',\n action: 'mceNewDocument',\n icon: 'new-document',\n shortcut: ''\n },\n {\n name: 'cut',\n text: 'Cut',\n action: 'Cut',\n icon: 'cut',\n shortcut: 'Meta+X'\n },\n {\n name: 'copy',\n text: 'Copy',\n action: 'Copy',\n icon: 'copy',\n shortcut: 'Meta+C'\n },\n {\n name: 'paste',\n text: 'Paste',\n action: 'Paste',\n icon: 'paste',\n shortcut: 'Meta+V'\n },\n {\n name: 'selectall',\n text: 'Select all',\n action: 'SelectAll',\n icon: 'select-all',\n shortcut: 'Meta+A'\n }\n ], function (btn) {\n editor.ui.registry.addMenuItem(btn.name, {\n text: btn.text,\n icon: btn.icon,\n shortcut: btn.shortcut,\n onAction: function () {\n return editor.execCommand(btn.action);\n }\n });\n });\n editor.ui.registry.addMenuItem('codeformat', {\n text: 'Code',\n icon: 'sourcecode',\n onAction: toggleFormat(editor, 'code')\n });\n };\n var register$6 = function (editor) {\n registerButtons(editor);\n registerMenuItems(editor);\n };\n var SimpleControls = { register: register$6 };\n\n var toggleUndoRedoState = function (api, editor, type) {\n var checkState = function () {\n return editor.undoManager ? editor.undoManager[type]() : false;\n };\n var onUndoStateChange = function () {\n api.setDisabled(editor.mode.isReadOnly() || !checkState());\n };\n api.setDisabled(!checkState());\n editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', onUndoStateChange);\n return function () {\n return editor.off('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', onUndoStateChange);\n };\n };\n var registerMenuItems$1 = function (editor) {\n editor.ui.registry.addMenuItem('undo', {\n text: 'Undo',\n icon: 'undo',\n shortcut: 'Meta+Z',\n onSetup: function (api) {\n return toggleUndoRedoState(api, editor, 'hasUndo');\n },\n onAction: function () {\n return editor.execCommand('undo');\n }\n });\n editor.ui.registry.addMenuItem('redo', {\n text: 'Redo',\n icon: 'redo',\n shortcut: 'Meta+Y',\n onSetup: function (api) {\n return toggleUndoRedoState(api, editor, 'hasRedo');\n },\n onAction: function () {\n return editor.execCommand('redo');\n }\n });\n };\n var registerButtons$1 = function (editor) {\n editor.ui.registry.addButton('undo', {\n tooltip: 'Undo',\n icon: 'undo',\n onSetup: function (api) {\n return toggleUndoRedoState(api, editor, 'hasUndo');\n },\n onAction: function () {\n return editor.execCommand('undo');\n }\n });\n editor.ui.registry.addButton('redo', {\n tooltip: 'Redo',\n icon: 'redo',\n onSetup: function (api) {\n return toggleUndoRedoState(api, editor, 'hasRedo');\n },\n onAction: function () {\n return editor.execCommand('redo');\n }\n });\n };\n var register$7 = function (editor) {\n registerMenuItems$1(editor);\n registerButtons$1(editor);\n };\n var UndoRedo = { register: register$7 };\n\n var toggleVisualAidState = function (api, editor) {\n api.setActive(editor.hasVisual);\n var onVisualAid = function (e) {\n api.setActive(e.hasVisual);\n };\n editor.on('VisualAid', onVisualAid);\n return function () {\n return editor.off('VisualAid', onVisualAid);\n };\n };\n var registerMenuItems$2 = function (editor) {\n editor.ui.registry.addToggleMenuItem('visualaid', {\n text: 'Visual aids',\n onSetup: function (api) {\n return toggleVisualAidState(api, editor);\n },\n onAction: function () {\n editor.execCommand('mceToggleVisualAid');\n }\n });\n };\n var registerToolbarButton = function (editor) {\n editor.ui.registry.addButton('visualaid', {\n tooltip: 'Visual aids',\n text: 'Visual aids',\n onAction: function () {\n return editor.execCommand('mceToggleVisualAid');\n }\n });\n };\n var register$8 = function (editor) {\n registerToolbarButton(editor);\n registerMenuItems$2(editor);\n };\n var VisualAid = { register: register$8 };\n\n var toggleOutdentState = function (api, editor) {\n api.setDisabled(!editor.queryCommandState('outdent'));\n var onNodeChange = function () {\n api.setDisabled(!editor.queryCommandState('outdent'));\n };\n editor.on('NodeChange', onNodeChange);\n return function () {\n return editor.off('NodeChange', onNodeChange);\n };\n };\n var registerButtons$2 = function (editor) {\n editor.ui.registry.addButton('outdent', {\n tooltip: 'Decrease indent',\n icon: 'outdent',\n onSetup: function (api) {\n return toggleOutdentState(api, editor);\n },\n onAction: function () {\n return editor.execCommand('outdent');\n }\n });\n editor.ui.registry.addButton('indent', {\n tooltip: 'Increase indent',\n icon: 'indent',\n onAction: function () {\n return editor.execCommand('indent');\n }\n });\n };\n var register$9 = function (editor) {\n registerButtons$2(editor);\n };\n var IndentOutdent = { register: register$9 };\n\n var register$a = function (editor, backstage) {\n alignSelectMenu(editor, backstage);\n fontSelectMenu(editor, backstage);\n styleSelectMenu(editor, backstage);\n formatSelectMenu(editor, backstage);\n fontsizeSelectMenu(editor, backstage);\n };\n var ComplexControls = { register: register$a };\n\n var setup$8 = function (editor, backstage) {\n AlignmentButtons.register(editor);\n SimpleControls.register(editor);\n ComplexControls.register(editor, backstage);\n UndoRedo.register(editor);\n ColorSwatch.register(editor);\n VisualAid.register(editor);\n IndentOutdent.register(editor);\n };\n var FormatControls = { setup: setup$8 };\n\n var nu$d = function (x, y) {\n return {\n anchor: 'makeshift',\n x: x,\n y: y\n };\n };\n var transpose$1 = function (pos, dx, dy) {\n return nu$d(pos.x + dx, pos.y + dy);\n };\n var isTouchEvent$1 = function (e) {\n return e.type === 'longpress' || e.type.indexOf('touch') === 0;\n };\n var fromPageXY = function (e) {\n if (isTouchEvent$1(e)) {\n var touch = e.touches[0];\n return nu$d(touch.pageX, touch.pageY);\n } else {\n return nu$d(e.pageX, e.pageY);\n }\n };\n var fromClientXY = function (e) {\n if (isTouchEvent$1(e)) {\n var touch = e.touches[0];\n return nu$d(touch.clientX, touch.clientY);\n } else {\n return nu$d(e.clientX, e.clientY);\n }\n };\n var transposeContentAreaContainer = function (element, pos) {\n var containerPos = global$3.DOM.getPos(element);\n return transpose$1(pos, containerPos.x, containerPos.y);\n };\n var getPointAnchor = function (editor, e) {\n if (e.type === 'contextmenu' || e.type === 'longpress') {\n if (editor.inline) {\n return fromPageXY(e);\n } else {\n return transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e));\n }\n } else {\n return getSelectionAnchor(editor);\n }\n };\n var getSelectionAnchor = function (editor) {\n return {\n anchor: 'selection',\n root: Element.fromDom(editor.selection.getNode())\n };\n };\n var getNodeAnchor$1 = function (editor) {\n return {\n anchor: 'node',\n node: Option.some(Element.fromDom(editor.selection.getNode())),\n root: Element.fromDom(editor.getBody())\n };\n };\n\n var getAnchorSpec = function (editor, e, isTriggeredByKeyboardEvent) {\n return isTriggeredByKeyboardEvent ? getNodeAnchor$1(editor) : getPointAnchor(editor, e);\n };\n var initAndShow = function (editor, e, buildMenu, backstage, contextmenu, isTriggeredByKeyboardEvent) {\n var items = buildMenu();\n var anchorSpec = getAnchorSpec(editor, e, isTriggeredByKeyboardEvent);\n build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false).map(function (menuData) {\n e.preventDefault();\n InlineView.showMenuAt(contextmenu, anchorSpec, {\n menu: { markers: markers$1('normal') },\n data: menuData\n });\n });\n };\n\n var layouts = {\n onLtr: function () {\n return [\n south$1,\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1,\n north$1,\n north$3,\n south$3,\n northeast$3,\n southeast$3,\n northwest$3,\n southwest$3\n ];\n },\n onRtl: function () {\n return [\n south$1,\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1,\n north$1,\n north$3,\n south$3,\n northwest$3,\n southwest$3,\n northeast$3,\n southeast$3\n ];\n }\n };\n var bubbleSize$1 = 12;\n var bubbleAlignments$2 = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: ['tox-pop--align-left'],\n alignRight: ['tox-pop--align-right'],\n right: ['tox-pop--right'],\n left: ['tox-pop--left'],\n bottom: ['tox-pop--bottom'],\n top: ['tox-pop--top']\n };\n var isTouchWithinSelection = function (editor, e) {\n var selection = editor.selection;\n if (selection.isCollapsed() || e.touches.length < 1) {\n return false;\n } else {\n var touch_1 = e.touches[0];\n var rng = selection.getRng();\n var rngRectOpt = getFirstRect$1(editor.getWin(), Selection.domRange(rng));\n return rngRectOpt.exists(function (rngRect) {\n return rngRect.left() <= touch_1.clientX && rngRect.right() >= touch_1.clientX && rngRect.top() <= touch_1.clientY && rngRect.bottom() >= touch_1.clientY;\n });\n }\n };\n var getAnchorSpec$1 = function (editor, isTriggeredByKeyboardEvent, e) {\n var anchorSpec = isTriggeredByKeyboardEvent ? getNodeAnchor$1(editor) : getPointAnchor(editor, e);\n return __assign({\n bubble: nu$8(0, bubbleSize$1, bubbleAlignments$2),\n layouts: layouts,\n overrides: {\n maxWidthFunction: expandable$1(),\n maxHeightFunction: expandable()\n }\n }, anchorSpec);\n };\n var setupiOSOverrides = function (editor) {\n var originalSelection = editor.selection.getRng();\n var selectionReset = function () {\n global$2.setEditorTimeout(editor, function () {\n editor.selection.setRng(originalSelection);\n }, 10);\n unbindEventListeners();\n };\n editor.once('touchend', selectionReset);\n var preventMousedown = function (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n editor.on('mousedown', preventMousedown, true);\n var clearSelectionReset = function () {\n return unbindEventListeners();\n };\n editor.once('longpresscancel', clearSelectionReset);\n var unbindEventListeners = function () {\n editor.off('touchend', selectionReset);\n editor.off('longpresscancel', clearSelectionReset);\n editor.off('mousedown', preventMousedown);\n };\n };\n var show = function (editor, e, items, backstage, contextmenu, isTriggeredByKeyboardEvent, highlightImmediately) {\n var anchorSpec = getAnchorSpec$1(editor, isTriggeredByKeyboardEvent, e);\n build$2(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, true).map(function (menuData) {\n e.preventDefault();\n InlineView.showMenuWithinBounds(contextmenu, anchorSpec, {\n menu: {\n markers: markers$1('normal'),\n highlightImmediately: highlightImmediately\n },\n data: menuData,\n type: 'horizontal'\n }, function () {\n return Option.some(getContextToolbarBounds(editor));\n });\n editor.fire(hideContextToolbarEvent);\n });\n };\n var initAndShow$1 = function (editor, e, buildMenu, backstage, contextmenu, isTriggeredByKeyboardEvent) {\n var detection = detect$3();\n var isiOS = detection.os.isiOS();\n var isOSX = detection.os.isOSX();\n var isAndroid = detection.os.isAndroid();\n var isTouch = detection.deviceType.isTouch();\n var shouldHighlightImmediately = function () {\n return !(isAndroid || isiOS || isOSX && isTouch);\n };\n var open = function () {\n var items = buildMenu();\n show(editor, e, items, backstage, contextmenu, isTriggeredByKeyboardEvent, shouldHighlightImmediately());\n };\n if ((isOSX || isiOS) && !isTriggeredByKeyboardEvent) {\n var openiOS_1 = function () {\n setupiOSOverrides(editor);\n open();\n };\n if (isTouchWithinSelection(editor, e)) {\n openiOS_1();\n } else {\n editor.once('selectionchange', openiOS_1);\n editor.once('touchend', function () {\n return editor.off('selectionchange', openiOS_1);\n });\n }\n } else {\n if (isAndroid && !isTriggeredByKeyboardEvent) {\n editor.selection.setCursorLocation(e.target, 0);\n }\n open();\n }\n };\n\n var patchPipeConfig = function (config) {\n return typeof config === 'string' ? config.split(/[ ,]/) : config;\n };\n var shouldNeverUseNative = function (editor) {\n return editor.settings.contextmenu_never_use_native || false;\n };\n var getMenuItems = function (editor, name, defaultItems) {\n var contextMenus = editor.ui.registry.getAll().contextMenus;\n return get(editor.settings, name).map(patchPipeConfig).getOrThunk(function () {\n return filter(patchPipeConfig(defaultItems), function (item) {\n return has(contextMenus, item);\n });\n });\n };\n var isContextMenuDisabled = function (editor) {\n return editor.getParam('contextmenu') === false;\n };\n var getContextMenu = function (editor) {\n return getMenuItems(editor, 'contextmenu', 'link linkchecker image imagetools table spellchecker configurepermanentpen');\n };\n var Settings$1 = {\n shouldNeverUseNative: shouldNeverUseNative,\n getContextMenu: getContextMenu,\n isContextMenuDisabled: isContextMenuDisabled\n };\n\n var isSeparator$1 = function (item) {\n return isString(item) ? item === '|' : item.type === 'separator';\n };\n var separator$3 = { type: 'separator' };\n var makeContextItem = function (item) {\n if (isString(item)) {\n return item;\n } else {\n switch (item.type) {\n case 'separator':\n return separator$3;\n case 'submenu':\n return {\n type: 'nestedmenuitem',\n text: item.text,\n icon: item.icon,\n getSubmenuItems: function () {\n var items = item.getSubmenuItems();\n if (isString(items)) {\n return items;\n } else {\n return map(items, makeContextItem);\n }\n }\n };\n default:\n return {\n type: 'menuitem',\n text: item.text,\n icon: item.icon,\n onAction: noarg(item.onAction)\n };\n }\n }\n };\n var addContextMenuGroup = function (xs, groupItems) {\n if (groupItems.length === 0) {\n return xs;\n }\n var lastMenuItem = last(xs).filter(function (item) {\n return !isSeparator$1(item);\n });\n var before = lastMenuItem.fold(function () {\n return [];\n }, function (_) {\n return [separator$3];\n });\n return xs.concat(before).concat(groupItems).concat([separator$3]);\n };\n var generateContextMenu = function (contextMenus, menuConfig, selectedElement) {\n var sections = foldl(menuConfig, function (acc, name) {\n if (has(contextMenus, name)) {\n var items = contextMenus[name].update(selectedElement);\n if (isString(items)) {\n return addContextMenuGroup(acc, items.split(' '));\n } else if (items.length > 0) {\n var allItems = map(items, makeContextItem);\n return addContextMenuGroup(acc, allItems);\n } else {\n return acc;\n }\n } else {\n return acc.concat([name]);\n }\n }, []);\n if (sections.length > 0 && isSeparator$1(sections[sections.length - 1])) {\n sections.pop();\n }\n return sections;\n };\n var isNativeOverrideKeyEvent = function (editor, e) {\n return e.ctrlKey && !Settings$1.shouldNeverUseNative(editor);\n };\n var isTriggeredByKeyboard = function (editor, e) {\n return e.type !== 'longpress' && (e.button !== 2 || e.target === editor.getBody() && e.pointerType === '');\n };\n var setup$9 = function (editor, lazySink, backstage) {\n var detection = detect$3();\n var isTouch = detection.deviceType.isTouch;\n var contextmenu = build$1(InlineView.sketch({\n dom: { tag: 'div' },\n lazySink: lazySink,\n onEscape: function () {\n return editor.focus();\n },\n onShow: function () {\n return backstage.setContextMenuState(true);\n },\n onHide: function () {\n return backstage.setContextMenuState(false);\n },\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissContextMenu', [run(dismissRequested(), function (comp, se) {\n Sandboxing.close(comp);\n editor.focus();\n })])])\n }));\n var hideContextMenu = function (_e) {\n return InlineView.hide(contextmenu);\n };\n var showContextMenu = function (e) {\n if (Settings$1.shouldNeverUseNative(editor)) {\n e.preventDefault();\n }\n if (isNativeOverrideKeyEvent(editor, e) || Settings$1.isContextMenuDisabled(editor)) {\n return;\n }\n var isTriggeredByKeyboardEvent = isTriggeredByKeyboard(editor, e);\n var buildMenu = function () {\n var selectedElement = isTriggeredByKeyboardEvent ? editor.selection.getStart(true) : e.target;\n var registry = editor.ui.registry.getAll();\n var menuConfig = Settings$1.getContextMenu(editor);\n return generateContextMenu(registry.contextMenus, menuConfig, selectedElement);\n };\n var initAndShow$2 = isTouch() ? initAndShow$1 : initAndShow;\n initAndShow$2(editor, e, buildMenu, backstage, contextmenu, isTriggeredByKeyboardEvent);\n };\n editor.on('init', function () {\n var hideEvents = 'ResizeEditor ScrollContent ScrollWindow longpresscancel' + (isTouch() ? '' : ' ResizeWindow');\n editor.on(hideEvents, hideContextMenu);\n editor.on('longpress contextmenu', showContextMenu);\n });\n };\n\n var adt$c = Adt.generate([\n {\n offset: [\n 'x',\n 'y'\n ]\n },\n {\n absolute: [\n 'x',\n 'y'\n ]\n },\n {\n fixed: [\n 'x',\n 'y'\n ]\n }\n ]);\n var subtract = function (change) {\n return function (point) {\n return point.translate(-change.left(), -change.top());\n };\n };\n var add$4 = function (change) {\n return function (point) {\n return point.translate(change.left(), change.top());\n };\n };\n var transform$1 = function (changes) {\n return function (x, y) {\n return foldl(changes, function (rest, f) {\n return f(rest);\n }, Position(x, y));\n };\n };\n var asFixed = function (coord, scroll, origin) {\n return coord.fold(transform$1([\n add$4(origin),\n subtract(scroll)\n ]), transform$1([subtract(scroll)]), transform$1([]));\n };\n var asAbsolute = function (coord, scroll, origin) {\n return coord.fold(transform$1([add$4(origin)]), transform$1([]), transform$1([add$4(scroll)]));\n };\n var asOffset = function (coord, scroll, origin) {\n return coord.fold(transform$1([]), transform$1([subtract(origin)]), transform$1([\n add$4(scroll),\n subtract(origin)\n ]));\n };\n var withinRange = function (coord1, coord2, xRange, yRange, scroll, origin) {\n var a1 = asAbsolute(coord1, scroll, origin);\n var a2 = asAbsolute(coord2, scroll, origin);\n return Math.abs(a1.left() - a2.left()) <= xRange && Math.abs(a1.top() - a2.top()) <= yRange;\n };\n var getDeltas = function (coord1, coord2, xRange, yRange, scroll, origin) {\n var a1 = asAbsolute(coord1, scroll, origin);\n var a2 = asAbsolute(coord2, scroll, origin);\n var left = Math.abs(a1.left() - a2.left());\n var top = Math.abs(a1.top() - a2.top());\n return Position(left, top);\n };\n var toStyles = function (coord, scroll, origin) {\n var stylesOpt = coord.fold(function (x, y) {\n return {\n position: Option.some('absolute'),\n left: Option.some(x + 'px'),\n top: Option.some(y + 'px')\n };\n }, function (x, y) {\n return {\n position: Option.some('absolute'),\n left: Option.some(x - origin.left() + 'px'),\n top: Option.some(y - origin.top() + 'px')\n };\n }, function (x, y) {\n return {\n position: Option.some('fixed'),\n left: Option.some(x + 'px'),\n top: Option.some(y + 'px')\n };\n });\n return __assign({\n right: Option.none(),\n bottom: Option.none()\n }, stylesOpt);\n };\n var translate$2 = function (coord, deltaX, deltaY) {\n return coord.fold(function (x, y) {\n return offset(x + deltaX, y + deltaY);\n }, function (x, y) {\n return absolute$3(x + deltaX, y + deltaY);\n }, function (x, y) {\n return fixed$1(x + deltaX, y + deltaY);\n });\n };\n var absorb = function (partialCoord, originalCoord, scroll, origin) {\n var absorbOne = function (stencil, nu) {\n return function (optX, optY) {\n var original = stencil(originalCoord, scroll, origin);\n return nu(optX.getOr(original.left()), optY.getOr(original.top()));\n };\n };\n return partialCoord.fold(absorbOne(asOffset, offset), absorbOne(asAbsolute, absolute$3), absorbOne(asFixed, fixed$1));\n };\n var offset = adt$c.offset;\n var absolute$3 = adt$c.absolute;\n var fixed$1 = adt$c.fixed;\n\n var get$e = function (component, snapsInfo) {\n var element = component.element();\n var x = parseInt(get$2(element, snapsInfo.leftAttr), 10);\n var y = parseInt(get$2(element, snapsInfo.topAttr), 10);\n return isNaN(x) || isNaN(y) ? Option.none() : Option.some(Position(x, y));\n };\n var set$8 = function (component, snapsInfo, pt) {\n var element = component.element();\n set$1(element, snapsInfo.leftAttr, pt.left() + 'px');\n set$1(element, snapsInfo.topAttr, pt.top() + 'px');\n };\n var clear = function (component, snapsInfo) {\n var element = component.element();\n remove$1(element, snapsInfo.leftAttr);\n remove$1(element, snapsInfo.topAttr);\n };\n\n var getCoords = function (component, snapInfo, coord, delta) {\n return get$e(component, snapInfo).fold(function () {\n return coord;\n }, function (fixed) {\n return fixed$1(fixed.left() + delta.left(), fixed.top() + delta.top());\n });\n };\n var moveOrSnap = function (component, snapInfo, coord, delta, scroll, origin) {\n var newCoord = getCoords(component, snapInfo, coord, delta);\n var snap = snapInfo.mustSnap ? findClosestSnap(component, snapInfo, newCoord, scroll, origin) : findSnap(component, snapInfo, newCoord, scroll, origin);\n var fixedCoord = asFixed(newCoord, scroll, origin);\n set$8(component, snapInfo, fixedCoord);\n return snap.fold(function () {\n return {\n coord: fixed$1(fixedCoord.left(), fixedCoord.top()),\n extra: Option.none()\n };\n }, function (spanned) {\n return {\n coord: spanned.output(),\n extra: spanned.extra()\n };\n });\n };\n var stopDrag = function (component, snapInfo) {\n clear(component, snapInfo);\n };\n var findMatchingSnap = function (snaps, newCoord, scroll, origin) {\n return findMap(snaps, function (snap) {\n var sensor = snap.sensor();\n var inRange = withinRange(newCoord, sensor, snap.range().left(), snap.range().top(), scroll, origin);\n return inRange ? Option.some({\n output: constant(absorb(snap.output(), newCoord, scroll, origin)),\n extra: snap.extra\n }) : Option.none();\n });\n };\n var findClosestSnap = function (component, snapInfo, newCoord, scroll, origin) {\n var snaps = snapInfo.getSnapPoints(component);\n var matchSnap = findMatchingSnap(snaps, newCoord, scroll, origin);\n return matchSnap.orThunk(function () {\n var bestSnap = foldl(snaps, function (acc, snap) {\n var sensor = snap.sensor();\n var deltas = getDeltas(newCoord, sensor, snap.range().left(), snap.range().top(), scroll, origin);\n return acc.deltas.fold(function () {\n return {\n deltas: Option.some(deltas),\n snap: Option.some(snap)\n };\n }, function (bestDeltas) {\n var currAvg = (deltas.left() + deltas.top()) / 2;\n var bestAvg = (bestDeltas.left() + bestDeltas.top()) / 2;\n if (currAvg <= bestAvg) {\n return {\n deltas: Option.some(deltas),\n snap: Option.some(snap)\n };\n } else {\n return acc;\n }\n });\n }, {\n deltas: Option.none(),\n snap: Option.none()\n });\n return bestSnap.snap.map(function (snap) {\n return {\n output: constant(absorb(snap.output(), newCoord, scroll, origin)),\n extra: snap.extra\n };\n });\n });\n };\n var findSnap = function (component, snapInfo, newCoord, scroll, origin) {\n var snaps = snapInfo.getSnapPoints(component);\n return findMatchingSnap(snaps, newCoord, scroll, origin);\n };\n var snapTo = function (snap, scroll, origin) {\n return {\n coord: absorb(snap.output(), snap.output(), scroll, origin),\n extra: snap.extra()\n };\n };\n\n var snapTo$1 = function (component, dragConfig, _state, snap) {\n var target = dragConfig.getTarget(component.element());\n if (dragConfig.repositionTarget) {\n var doc = owner(component.element());\n var scroll = get$8(doc);\n var origin = getOrigin(target);\n var snapPin = snapTo(snap, scroll, origin);\n var styles = toStyles(snapPin.coord, scroll, origin);\n setOptions(target, styles);\n }\n };\n\n var DraggingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n snapTo: snapTo$1\n });\n\n var initialAttribute = 'data-initial-z-index';\n var resetZIndex = function (blocker) {\n parent(blocker.element()).filter(isElement).each(function (root) {\n var initZIndex = get$2(root, initialAttribute);\n if (has$1(root, initialAttribute)) {\n set$2(root, 'z-index', initZIndex);\n } else {\n remove$6(root, 'z-index');\n }\n remove$1(root, initialAttribute);\n });\n };\n var changeZIndex = function (blocker) {\n parent(blocker.element()).filter(isElement).each(function (root) {\n getRaw(root, 'z-index').each(function (zindex) {\n set$1(root, initialAttribute, zindex);\n });\n set$2(root, 'z-index', get$4(blocker.element(), 'z-index'));\n });\n };\n var instigate = function (anyComponent, blocker) {\n anyComponent.getSystem().addToGui(blocker);\n changeZIndex(blocker);\n };\n var discard = function (blocker) {\n resetZIndex(blocker);\n blocker.getSystem().removeFromGui(blocker);\n };\n var createComponent = function (component, blockerClass, blockerEvents) {\n return component.getSystem().build(Container.sketch({\n dom: {\n styles: {\n 'left': '0px',\n 'top': '0px',\n 'width': '100%',\n 'height': '100%',\n 'position': 'fixed',\n 'z-index': '1000000000000000'\n },\n classes: [blockerClass]\n },\n events: blockerEvents\n }));\n };\n\n var SnapSchema = optionObjOf('snaps', [\n strict$1('getSnapPoints'),\n onHandler('onSensor'),\n strict$1('leftAttr'),\n strict$1('topAttr'),\n defaulted$1('lazyViewport', win),\n defaulted$1('mustSnap', false)\n ]);\n\n var schema$t = [\n defaulted$1('useFixed', never),\n strict$1('blockerClass'),\n defaulted$1('getTarget', identity),\n defaulted$1('onDrag', noop),\n defaulted$1('repositionTarget', true),\n defaulted$1('onDrop', noop),\n defaultedFunction('getBounds', win),\n SnapSchema\n ];\n\n var getCurrentCoord = function (target) {\n return lift3(getRaw(target, 'left'), getRaw(target, 'top'), getRaw(target, 'position'), function (left, top, position) {\n var nu = position === 'fixed' ? fixed$1 : offset;\n return nu(parseInt(left, 10), parseInt(top, 10));\n }).getOrThunk(function () {\n var location = absolute(target);\n return absolute$3(location.left(), location.top());\n });\n };\n var clampCoords = function (component, coords, scroll, origin, startData) {\n var bounds = startData.bounds;\n var absoluteCoord = asAbsolute(coords, scroll, origin);\n var newX = clamp(absoluteCoord.left(), bounds.x(), bounds.x() + bounds.width() - startData.width);\n var newY = clamp(absoluteCoord.top(), bounds.y(), bounds.y() + bounds.height() - startData.height);\n var newCoords = absolute$3(newX, newY);\n return coords.fold(function () {\n var offset$1 = asOffset(newCoords, scroll, origin);\n return offset(offset$1.left(), offset$1.top());\n }, function () {\n return newCoords;\n }, function () {\n var fixed = asFixed(newCoords, scroll, origin);\n return fixed$1(fixed.left(), fixed.top());\n });\n };\n var calcNewCoord = function (component, optSnaps, currentCoord, scroll, origin, delta, startData) {\n var newCoord = optSnaps.fold(function () {\n var translated = translate$2(currentCoord, delta.left(), delta.top());\n var fixedCoord = asFixed(translated, scroll, origin);\n return fixed$1(fixedCoord.left(), fixedCoord.top());\n }, function (snapInfo) {\n var snapping = moveOrSnap(component, snapInfo, currentCoord, delta, scroll, origin);\n snapping.extra.each(function (extra) {\n snapInfo.onSensor(component, extra);\n });\n return snapping.coord;\n });\n return clampCoords(component, newCoord, scroll, origin, startData);\n };\n var dragBy = function (component, dragConfig, startData, delta) {\n var target = dragConfig.getTarget(component.element());\n if (dragConfig.repositionTarget) {\n var doc = owner(component.element());\n var scroll = get$8(doc);\n var origin = getOrigin(target);\n var currentCoord = getCurrentCoord(target);\n var newCoord = calcNewCoord(component, dragConfig.snaps, currentCoord, scroll, origin, delta, startData);\n var styles = toStyles(newCoord, scroll, origin);\n setOptions(target, styles);\n }\n dragConfig.onDrag(component, target, delta);\n };\n\n var calcStartData = function (dragConfig, comp) {\n return {\n bounds: dragConfig.getBounds(),\n height: getOuter$1(comp.element()),\n width: getOuter$2(comp.element())\n };\n };\n var move$1 = function (component, dragConfig, dragState, dragMode, event) {\n var delta = dragState.update(dragMode, event);\n var dragStartData = dragState.getStartData().getOrThunk(function () {\n return calcStartData(dragConfig, component);\n });\n delta.each(function (dlt) {\n dragBy(component, dragConfig, dragStartData, dlt);\n });\n };\n var stop = function (component, blocker, dragConfig, dragState) {\n blocker.each(discard);\n dragConfig.snaps.each(function (snapInfo) {\n stopDrag(component, snapInfo);\n });\n var target = dragConfig.getTarget(component.element());\n dragState.reset();\n dragConfig.onDrop(component, target);\n };\n var handlers = function (events) {\n return function (dragConfig, dragState) {\n var updateStartState = function (comp) {\n dragState.setStartData(calcStartData(dragConfig, comp));\n };\n return derive(__spreadArrays([run(windowScroll(), function (comp) {\n dragState.getStartData().each(function () {\n return updateStartState(comp);\n });\n })], events(dragConfig, dragState, updateStartState)));\n };\n };\n\n var init$c = function (dragApi) {\n return derive([\n run(mousedown(), dragApi.forceDrop),\n run(mouseup(), dragApi.drop),\n run(mousemove(), function (comp, simulatedEvent) {\n dragApi.move(simulatedEvent.event());\n }),\n run(mouseout(), dragApi.delayDrop)\n ]);\n };\n\n var getData$1 = function (event) {\n return Option.from(Position(event.x(), event.y()));\n };\n var getDelta$1 = function (old, nu) {\n return Position(nu.left() - old.left(), nu.top() - old.top());\n };\n\n var MouseData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData$1,\n getDelta: getDelta$1\n });\n\n var events$g = function (dragConfig, dragState, updateStartState) {\n return [run(mousedown(), function (component, simulatedEvent) {\n var raw = simulatedEvent.event().raw();\n if (raw.button !== 0) {\n return;\n }\n simulatedEvent.stop();\n var stop$1 = function () {\n return stop(component, Option.some(blocker), dragConfig, dragState);\n };\n var delayDrop = DelayedFunction(stop$1, 200);\n var dragApi = {\n drop: stop$1,\n delayDrop: delayDrop.schedule,\n forceDrop: stop$1,\n move: function (event) {\n delayDrop.cancel();\n move$1(component, dragConfig, dragState, MouseData, event);\n }\n };\n var blocker = createComponent(component, dragConfig.blockerClass, init$c(dragApi));\n var start = function () {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n })];\n };\n var schema$u = __spreadArrays(schema$t, [output('dragger', { handlers: handlers(events$g) })]);\n\n var init$d = function (dragApi) {\n return derive([\n run(touchstart(), dragApi.forceDrop),\n run(touchend(), dragApi.drop),\n run(touchcancel(), dragApi.drop),\n run(touchmove(), function (comp, simulatedEvent) {\n dragApi.move(simulatedEvent.event());\n })\n ]);\n };\n\n var getDataFrom = function (touches) {\n var touch = touches[0];\n return Option.some(Position(touch.clientX, touch.clientY));\n };\n var getData$2 = function (event) {\n var raw = event.raw();\n var touches = raw.touches;\n return touches.length === 1 ? getDataFrom(touches) : Option.none();\n };\n var getDelta$2 = function (old, nu) {\n return Position(nu.left() - old.left(), nu.top() - old.top());\n };\n\n var TouchData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData$2,\n getDelta: getDelta$2\n });\n\n var events$h = function (dragConfig, dragState, updateStartState) {\n var blockerCell = Cell(Option.none());\n return [\n run(touchstart(), function (component, simulatedEvent) {\n simulatedEvent.stop();\n var stop$1 = function () {\n stop(component, blockerCell.get(), dragConfig, dragState);\n blockerCell.set(Option.none());\n };\n var dragApi = {\n drop: stop$1,\n delayDrop: function () {\n },\n forceDrop: stop$1,\n move: function (event) {\n move$1(component, dragConfig, dragState, TouchData, event);\n }\n };\n var blocker = createComponent(component, dragConfig.blockerClass, init$d(dragApi));\n blockerCell.set(Option.some(blocker));\n var start = function () {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n }),\n run(touchmove(), function (component, simulatedEvent) {\n simulatedEvent.stop();\n move$1(component, dragConfig, dragState, TouchData, simulatedEvent.event());\n }),\n run(touchend(), function (component, simulatedEvent) {\n simulatedEvent.stop();\n stop(component, blockerCell.get(), dragConfig, dragState);\n blockerCell.set(Option.none());\n }),\n run(touchcancel(), function (component) {\n stop(component, blockerCell.get(), dragConfig, dragState);\n blockerCell.set(Option.none());\n })\n ];\n };\n var schema$v = __spreadArrays(schema$t, [output('dragger', { handlers: handlers(events$h) })]);\n\n var events$i = function (dragConfig, dragState, updateStartState) {\n return __spreadArrays(events$g(dragConfig, dragState, updateStartState), events$h(dragConfig, dragState, updateStartState));\n };\n var schema$w = __spreadArrays(schema$t, [output('dragger', { handlers: handlers(events$i) })]);\n\n var mouse = schema$u;\n var touch = schema$v;\n var mouseOrTouch = schema$w;\n\n var DraggingBranches = /*#__PURE__*/Object.freeze({\n __proto__: null,\n mouse: mouse,\n touch: touch,\n mouseOrTouch: mouseOrTouch\n });\n\n var init$e = function () {\n var previous = Option.none();\n var startData = Option.none();\n var reset = function () {\n previous = Option.none();\n startData = Option.none();\n };\n var calculateDelta = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.getDelta(old, nu);\n });\n previous = Option.some(nu);\n return result;\n };\n var update = function (mode, dragEvent) {\n return mode.getData(dragEvent).bind(function (nuData) {\n return calculateDelta(mode, nuData);\n });\n };\n var setStartData = function (data) {\n startData = Option.some(data);\n };\n var getStartData = function () {\n return startData;\n };\n var readState = constant({});\n return nu$5({\n readState: readState,\n reset: reset,\n update: update,\n getStartData: getStartData,\n setStartData: setStartData\n });\n };\n\n var DragState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$e\n });\n\n var Dragging = createModes$1({\n branchKey: 'mode',\n branches: DraggingBranches,\n name: 'dragging',\n active: {\n events: function (dragConfig, dragState) {\n var dragger = dragConfig.dragger;\n return dragger.handlers(dragConfig, dragState);\n }\n },\n extra: {\n snap: MixedBag([\n 'sensor',\n 'range',\n 'output'\n ], ['extra'])\n },\n state: DragState,\n apis: DraggingApis\n });\n\n var platform$1 = detect$3();\n var snapWidth = 40;\n var snapOffset = snapWidth / 2;\n var calcSnap = function (selectorOpt, td, x, y, width, height) {\n return selectorOpt.fold(function () {\n return Dragging.snap({\n sensor: absolute$3(x - snapOffset, y - snapOffset),\n range: Position(width, height),\n output: absolute$3(Option.some(x), Option.some(y)),\n extra: { td: td }\n });\n }, function (selectorHandle) {\n var sensorLeft = x - snapOffset;\n var sensorTop = y - snapOffset;\n var sensorWidth = snapWidth;\n var sensorHeight = snapWidth;\n var rect = selectorHandle.element().dom().getBoundingClientRect();\n return Dragging.snap({\n sensor: absolute$3(sensorLeft, sensorTop),\n range: Position(sensorWidth, sensorHeight),\n output: absolute$3(Option.some(x - rect.width / 2), Option.some(y - rect.height / 2)),\n extra: { td: td }\n });\n });\n };\n var getSnapsConfig = function (getSnapPoints, cell, onChange) {\n var isSameCell = function (cellOpt, td) {\n return cellOpt.exists(function (currentTd) {\n return eq(currentTd, td);\n });\n };\n return {\n getSnapPoints: getSnapPoints,\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top',\n onSensor: function (component, extra) {\n var td = extra.td;\n if (!isSameCell(cell.get(), td)) {\n cell.set(Option.some(td));\n onChange(td);\n }\n },\n mustSnap: true\n };\n };\n var createSelector = function (snaps) {\n return record(Button.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-selector']\n },\n buttonBehaviours: derive$1([\n Dragging.config({\n mode: 'mouseOrTouch',\n blockerClass: 'blocker',\n snaps: snaps\n }),\n Unselecting.config({})\n ]),\n eventOrder: {\n mousedown: [\n 'dragging',\n 'alloy.base.behaviour'\n ],\n touchstart: [\n 'dragging',\n 'alloy.base.behaviour'\n ]\n }\n }));\n };\n var setup$a = function (editor, sink) {\n var tlTds = Cell([]);\n var brTds = Cell([]);\n var isVisible = Cell(false);\n var startCell = Cell(Option.none());\n var finishCell = Cell(Option.none());\n var getTopLeftSnap = function (td) {\n var box = absolute$1(td);\n return calcSnap(memTopLeft.getOpt(sink), td, box.x(), box.y(), box.width(), box.height());\n };\n var getTopLeftSnaps = function () {\n return map(tlTds.get(), function (td) {\n return getTopLeftSnap(td);\n });\n };\n var getBottomRightSnap = function (td) {\n var box = absolute$1(td);\n return calcSnap(memBottomRight.getOpt(sink), td, box.right(), box.bottom(), box.width(), box.height());\n };\n var getBottomRightSnaps = function () {\n return map(brTds.get(), function (td) {\n return getBottomRightSnap(td);\n });\n };\n var topLeftSnaps = getSnapsConfig(getTopLeftSnaps, startCell, function (start) {\n finishCell.get().each(function (finish) {\n editor.fire('TableSelectorChange', {\n start: start,\n finish: finish\n });\n });\n });\n var bottomRightSnaps = getSnapsConfig(getBottomRightSnaps, finishCell, function (finish) {\n startCell.get().each(function (start) {\n editor.fire('TableSelectorChange', {\n start: start,\n finish: finish\n });\n });\n });\n var memTopLeft = createSelector(topLeftSnaps);\n var memBottomRight = createSelector(bottomRightSnaps);\n var topLeft = build$1(memTopLeft.asSpec());\n var bottomRight = build$1(memBottomRight.asSpec());\n var showOrHideHandle = function (selector, cell, isAbove, isBelow) {\n var cellRect = cell.dom().getBoundingClientRect();\n remove$6(selector.element(), 'display');\n var viewportHeight = defaultView(Element.fromDom(editor.getBody())).dom().innerHeight;\n var aboveViewport = isAbove(cellRect);\n var belowViewport = isBelow(cellRect, viewportHeight);\n if (aboveViewport || belowViewport) {\n set$2(selector.element(), 'display', 'none');\n }\n };\n var snapTo = function (selector, cell, getSnapConfig, pos) {\n var snap = getSnapConfig(cell);\n Dragging.snapTo(selector, snap);\n var isAbove = function (rect) {\n return rect[pos] < 0;\n };\n var isBelow = function (rect, viewportHeight) {\n return rect[pos] > viewportHeight;\n };\n showOrHideHandle(selector, cell, isAbove, isBelow);\n };\n var snapTopLeft = function (cell) {\n return snapTo(topLeft, cell, getTopLeftSnap, 'top');\n };\n var snapLastTopLeft = function () {\n return startCell.get().each(snapTopLeft);\n };\n var snapBottomRight = function (cell) {\n return snapTo(bottomRight, cell, getBottomRightSnap, 'bottom');\n };\n var snapLastBottomRight = function () {\n return finishCell.get().each(snapBottomRight);\n };\n if (platform$1.deviceType.isTouch()) {\n editor.on('TableSelectionChange', function (e) {\n if (!isVisible.get()) {\n attach$1(sink, topLeft);\n attach$1(sink, bottomRight);\n isVisible.set(true);\n }\n startCell.set(Option.some(e.start));\n finishCell.set(Option.some(e.finish));\n e.otherCells.each(function (otherCells) {\n tlTds.set(otherCells.upOrLeftCells);\n brTds.set(otherCells.downOrRightCells);\n snapTopLeft(e.start);\n snapBottomRight(e.finish);\n });\n });\n editor.on('ResizeEditor ResizeWindow ScrollContent', function () {\n snapLastTopLeft();\n snapLastBottomRight();\n });\n editor.on('TableSelectionClear', function () {\n if (isVisible.get()) {\n detach(topLeft);\n detach(bottomRight);\n isVisible.set(false);\n }\n startCell.set(Option.none());\n finishCell.set(Option.none());\n });\n }\n };\n var TableSelectorHandles = { setup: setup$a };\n\n var ResizeTypes;\n (function (ResizeTypes) {\n ResizeTypes[ResizeTypes['None'] = 0] = 'None';\n ResizeTypes[ResizeTypes['Both'] = 1] = 'Both';\n ResizeTypes[ResizeTypes['Vertical'] = 2] = 'Vertical';\n }(ResizeTypes || (ResizeTypes = {})));\n var getDimensions = function (editor, deltas, resizeType, originalHeight, originalWidth) {\n var dimensions = {};\n dimensions.height = Utils.calcCappedSize(originalHeight + deltas.top(), getMinHeightSetting(editor), getMaxHeightSetting(editor));\n if (resizeType === ResizeTypes.Both) {\n dimensions.width = Utils.calcCappedSize(originalWidth + deltas.left(), getMinWidthSetting(editor), getMaxWidthSetting(editor));\n }\n return dimensions;\n };\n var resize$3 = function (editor, deltas, resizeType) {\n var container = Element.fromDom(editor.getContainer());\n var dimensions = getDimensions(editor, deltas, resizeType, get$6(container), get$7(container));\n each$1(dimensions, function (val, dim) {\n return set$2(container, dim, Utils.numToPx(val));\n });\n Events.fireResizeEditor(editor);\n };\n\n var isHidden$1 = function (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 var renderElementPath = function (editor, settings) {\n if (!settings.delimiter) {\n settings.delimiter = '\\xBB';\n }\n var getDataPath = function (data) {\n var parts = data || [];\n var newPathElements = map(parts, function (part, index) {\n return Button.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-item'],\n attributes: {\n 'role': 'button',\n 'data-index': index,\n 'tab-index': -1,\n 'aria-level': index + 1\n },\n innerHtml: part.name\n },\n action: function (btn) {\n editor.focus();\n editor.selection.select(part.element);\n editor.nodeChanged();\n }\n });\n });\n var divider = {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-divider'],\n attributes: { 'aria-hidden': true },\n innerHtml: ' ' + settings.delimiter + ' '\n }\n };\n return foldl(newPathElements.slice(1), function (acc, element) {\n var newAcc = acc;\n newAcc.push(divider);\n newAcc.push(element);\n return newAcc;\n }, [newPathElements[0]]);\n };\n var updatePath = function (parents) {\n var newPath = [];\n var i = parents.length;\n while (i-- > 0) {\n var parent_1 = parents[i];\n if (parent_1.nodeType === 1 && !isHidden$1(parent_1)) {\n var args = editor.fire('ResolveName', {\n name: parent_1.nodeName.toLowerCase(),\n target: parent_1\n });\n if (!args.isDefaultPrevented()) {\n newPath.push({\n name: args.name,\n element: parent_1\n });\n }\n if (args.isPropagationStopped()) {\n break;\n }\n }\n }\n return newPath;\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path'],\n attributes: { role: 'navigation' }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'flow',\n selector: 'div[role=button]'\n }),\n Tabstopping.config({}),\n Replacing.config({}),\n config('elementPathEvents', [runOnAttached(function (comp, e) {\n editor.shortcuts.add('alt+F11', 'focus statusbar elementpath', function () {\n return Keying.focusIn(comp);\n });\n editor.on('NodeChange', function (e) {\n var newPath = updatePath(e.parents);\n if (newPath.length > 0) {\n Replacing.set(comp, getDataPath(newPath));\n } else {\n Replacing.set(comp, []);\n }\n });\n })])\n ]),\n components: []\n };\n };\n var ElementPath = { renderElementPath: renderElementPath };\n\n var renderWordCount = function (editor, providersBackstage) {\n var replaceCountText = function (comp, count, mode) {\n return Replacing.set(comp, [text(providersBackstage.translate([\n '{0} ' + mode,\n count[mode]\n ]))]);\n };\n return Button.sketch({\n dom: {\n tag: 'button',\n classes: ['tox-statusbar__wordcount']\n },\n components: [],\n buttonBehaviours: derive$1([\n Tabstopping.config({}),\n Replacing.config({}),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: {\n mode: 'words',\n count: {\n words: 0,\n characters: 0\n }\n }\n }\n }),\n config('wordcount-events', [\n runOnExecute(function (comp) {\n var currentVal = Representing.getValue(comp);\n var newMode = currentVal.mode === 'words' ? 'characters' : 'words';\n Representing.setValue(comp, {\n mode: newMode,\n count: currentVal.count\n });\n replaceCountText(comp, currentVal.count, newMode);\n }),\n runOnAttached(function (comp) {\n editor.on('wordCountUpdate', function (e) {\n var mode = Representing.getValue(comp).mode;\n Representing.setValue(comp, {\n mode: mode,\n count: e.wordCount\n });\n replaceCountText(comp, e.wordCount, mode);\n });\n })\n ])\n ])\n });\n };\n\n var renderStatusbar = function (editor, providersBackstage) {\n var renderResizeHandlerIcon = function (resizeType) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__resize-handle'],\n attributes: {\n 'title': providersBackstage.translate('Resize'),\n 'aria-hidden': 'true'\n },\n innerHtml: get$d('resize-handle', providersBackstage.icons)\n },\n behaviours: derive$1([Dragging.config({\n mode: 'mouse',\n repositionTarget: false,\n onDrag: function (comp, target, delta) {\n resize$3(editor, delta, resizeType);\n },\n blockerClass: 'tox-blocker'\n })])\n };\n };\n var renderBranding = function () {\n var label = global$7.translate([\n 'Powered by {0}',\n 'Tiny'\n ]);\n var linkHtml = '' + label + '';\n return {\n dom: {\n tag: 'span',\n classes: ['tox-statusbar__branding'],\n innerHtml: linkHtml\n }\n };\n };\n var getResizeType = function (editor) {\n var fallback = !contains$1(editor.settings.plugins, 'autoresize');\n var resize = editor.getParam('resize', fallback);\n if (resize === false) {\n return ResizeTypes.None;\n } else if (resize === 'both') {\n return ResizeTypes.Both;\n } else {\n return ResizeTypes.Vertical;\n }\n };\n var getTextComponents = function () {\n var components = [];\n if (editor.getParam('elementpath', true, 'boolean')) {\n components.push(ElementPath.renderElementPath(editor, {}));\n }\n if (contains$1(editor.settings.plugins, 'wordcount')) {\n components.push(renderWordCount(editor, providersBackstage));\n }\n if (editor.getParam('branding', true, 'boolean')) {\n components.push(renderBranding());\n }\n if (components.length > 0) {\n return [{\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__text-container']\n },\n components: components\n }];\n }\n return [];\n };\n var getComponents = function () {\n var components = getTextComponents();\n var resizeType = getResizeType(editor);\n if (resizeType !== ResizeTypes.None) {\n components.push(renderResizeHandlerIcon(resizeType));\n }\n return components;\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar']\n },\n components: getComponents()\n };\n };\n\n var setup$b = function (editor) {\n var _a;\n var isInline = editor.inline;\n var mode = isInline ? Inline : Iframe;\n var header = isStickyToolbar(editor) ? StickyHeader : StaticHeader;\n var lazyOuterContainer = Option.none();\n var platform = detect$3();\n var isIE = platform.browser.isIE();\n var platformClasses = isIE ? ['tox-platform-ie'] : [];\n var isTouch = platform.deviceType.isTouch();\n var touchPlatformClass = 'tox-platform-touch';\n var deviceClasses = isTouch ? [touchPlatformClass] : [];\n var isToolbarTop = isToolbarLocationTop(editor);\n var dirAttributes = global$7.isRtl() ? { attributes: { dir: 'rtl' } } : {};\n var verticalDirAttributes = { attributes: (_a = {}, _a[Attribute] = isToolbarTop ? AttributeValue.TopToBottom : AttributeValue.BottomToTop, _a) };\n var lazyHeader = function () {\n return lazyOuterContainer.bind(OuterContainer.getHeader);\n };\n var isHeaderDocked = function () {\n return header.isDocked(lazyHeader);\n };\n var sink = build$1({\n dom: __assign({\n tag: 'div',\n classes: [\n 'tox',\n 'tox-silver-sink',\n 'tox-tinymce-aux'\n ].concat(platformClasses).concat(deviceClasses)\n }, dirAttributes),\n behaviours: derive$1([Positioning.config({\n useFixed: function () {\n return isHeaderDocked();\n }\n })])\n });\n var lazySink = function () {\n return Result.value(sink);\n };\n var memAnchorBar = record({\n dom: {\n tag: 'div',\n classes: ['tox-anchorbar']\n }\n });\n var lazyAnchorBar = function () {\n return lazyOuterContainer.bind(function (container) {\n return memAnchorBar.getOpt(container);\n }).getOrDie('Could not find a anchor bar element');\n };\n var lazyToolbar = function () {\n return lazyOuterContainer.bind(function (container) {\n return OuterContainer.getToolbar(container);\n }).getOrDie('Could not find more toolbar element');\n };\n var lazyThrobber = function () {\n return lazyOuterContainer.bind(function (container) {\n return OuterContainer.getThrobber(container);\n }).getOrDie('Could not find throbber element');\n };\n var backstage = init$8(sink, editor, lazyAnchorBar);\n var partMenubar = OuterContainer.parts().menubar({\n dom: {\n tag: 'div',\n classes: ['tox-menubar']\n },\n backstage: backstage,\n onEscape: function () {\n editor.focus();\n }\n });\n var toolbarMode = getToolbarMode(editor);\n var partToolbar = OuterContainer.parts().toolbar(__assign({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar']\n },\n getSink: lazySink,\n backstage: backstage,\n onEscape: function () {\n editor.focus();\n },\n type: toolbarMode,\n lazyToolbar: lazyToolbar,\n lazyHeader: function () {\n return lazyHeader().getOrDie('Could not find header element');\n }\n }, verticalDirAttributes));\n var partMultipleToolbar = OuterContainer.parts()['multiple-toolbar']({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n onEscape: function () {\n },\n type: toolbarMode\n });\n var partSocket = OuterContainer.parts().socket({\n dom: {\n tag: 'div',\n classes: ['tox-edit-area']\n }\n });\n var partSidebar = OuterContainer.parts().sidebar({\n dom: {\n tag: 'div',\n classes: ['tox-sidebar']\n }\n });\n var partThrobber = OuterContainer.parts().throbber({\n dom: {\n tag: 'div',\n classes: ['tox-throbber']\n },\n backstage: backstage\n });\n var sb = editor.getParam('statusbar', true, 'boolean');\n var statusbar = sb && !isInline ? Option.some(renderStatusbar(editor, backstage.shared.providers)) : Option.none();\n var socketSidebarContainer = {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar-wrap']\n },\n components: [\n partSocket,\n partSidebar\n ]\n };\n var hasMultipleToolbar = isMultipleToolbars(editor);\n var hasToolbar = isToolbarEnabled(editor);\n var hasMenubar = isMenubarEnabled(editor);\n var getPartToolbar = function () {\n if (hasMultipleToolbar) {\n return [partMultipleToolbar];\n } else if (hasToolbar) {\n return [partToolbar];\n } else {\n return [];\n }\n };\n var partHeader = OuterContainer.parts().header({\n dom: __assign({\n tag: 'div',\n classes: ['tox-editor-header']\n }, verticalDirAttributes),\n components: flatten([\n hasMenubar ? [partMenubar] : [],\n getPartToolbar(),\n useFixedContainer(editor) ? [] : [memAnchorBar.asSpec()]\n ]),\n sticky: isStickyToolbar(editor),\n editor: editor,\n getSink: lazySink\n });\n var editorComponents = flatten([\n isToolbarTop ? [partHeader] : [],\n isInline ? [] : [socketSidebarContainer],\n isToolbarTop ? [] : [partHeader]\n ]);\n var editorContainer = {\n dom: {\n tag: 'div',\n classes: ['tox-editor-container']\n },\n components: editorComponents\n };\n var containerComponents = flatten([\n [editorContainer],\n isInline ? [] : statusbar.toArray(),\n [partThrobber]\n ]);\n var isHidden = isDistractionFree(editor);\n var attributes = __assign(__assign({ role: 'application' }, global$7.isRtl() ? { dir: 'rtl' } : {}), isHidden ? { 'aria-hidden': 'true' } : {});\n var outerContainer = build$1(OuterContainer.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox',\n 'tox-tinymce'\n ].concat(isInline ? ['tox-tinymce-inline'] : []).concat(isToolbarTop ? [] : ['tox-tinymce--toolbar-bottom']).concat(deviceClasses).concat(platformClasses),\n styles: __assign({ visibility: 'hidden' }, isHidden ? {\n opacity: '0',\n border: '0'\n } : {}),\n attributes: attributes\n },\n components: containerComponents,\n behaviours: derive$1([Keying.config({\n mode: 'cyclic',\n selector: '.tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a'\n })])\n }));\n lazyOuterContainer = Option.some(outerContainer);\n editor.shortcuts.add('alt+F9', 'focus menubar', function () {\n OuterContainer.focusMenubar(outerContainer);\n });\n editor.shortcuts.add('alt+F10', 'focus toolbar', function () {\n OuterContainer.focusToolbar(outerContainer);\n });\n var mothership = takeover(outerContainer);\n var uiMothership = takeover(sink);\n Events$1.setup(editor, mothership, uiMothership);\n var getUi = function () {\n var channels = {\n broadcastAll: uiMothership.broadcast,\n broadcastOn: uiMothership.broadcastOn,\n register: function () {\n }\n };\n return { channels: channels };\n };\n var setEditorSize = function () {\n var parsedHeight = Utils.numToPx(getHeightWithFallback(editor));\n var parsedWidth = Utils.numToPx(getWidthWithFallback(editor));\n if (!editor.inline) {\n if (isValidValue('div', 'width', parsedWidth)) {\n set$2(outerContainer.element(), 'width', parsedWidth);\n }\n if (isValidValue('div', 'height', parsedHeight)) {\n set$2(outerContainer.element(), 'height', parsedHeight);\n } else {\n set$2(outerContainer.element(), 'height', '200px');\n }\n }\n return parsedHeight;\n };\n var renderUI = function () {\n header.setup(editor, lazyHeader);\n FormatControls.setup(editor, backstage);\n setup$9(editor, lazySink, backstage);\n setup$6(editor);\n setup$7(editor, lazyThrobber, backstage.shared);\n map$1(getToolbarGroups(editor), function (toolbarGroupButtonConfig, name) {\n editor.ui.registry.addGroupToolbarButton(name, toolbarGroupButtonConfig);\n });\n var _a = editor.ui.registry.getAll(), buttons = _a.buttons, menuItems = _a.menuItems, contextToolbars = _a.contextToolbars, sidebars = _a.sidebars;\n var toolbarOpt = getMultipleToolbarsSetting(editor);\n var rawUiConfig = {\n menuItems: menuItems,\n menus: !editor.settings.menu ? {} : map$1(editor.settings.menu, function (menu) {\n return __assign(__assign({}, menu), { items: menu.items });\n }),\n menubar: editor.settings.menubar,\n toolbar: toolbarOpt.getOrThunk(function () {\n return editor.getParam('toolbar', true);\n }),\n allowToolbarGroups: toolbarMode === ToolbarMode.floating,\n buttons: buttons,\n sidebar: sidebars\n };\n ContextToolbar.register(editor, contextToolbars, sink, { backstage: backstage });\n TableSelectorHandles.setup(editor, sink);\n var elm = editor.getElement();\n var height = setEditorSize();\n var uiComponents = {\n mothership: mothership,\n uiMothership: uiMothership,\n outerContainer: outerContainer\n };\n var args = {\n targetNode: elm,\n height: height\n };\n return mode.render(editor, uiComponents, rawUiConfig, backstage, args);\n };\n return {\n mothership: mothership,\n uiMothership: uiMothership,\n backstage: backstage,\n renderUI: renderUI,\n getUi: getUi\n };\n };\n var Render = { setup: setup$b };\n\n var describedBy = function (describedElement, describeElement) {\n var describeId = Option.from(get$2(describedElement, 'id')).fold(function () {\n var id = generate$1('dialog-describe');\n set$1(describeElement, 'id', id);\n return id;\n }, identity);\n set$1(describedElement, 'aria-describedby', describeId);\n };\n\n var AriaLabel = {\n labelledBy: function (labelledElement, labelElement) {\n var labelId = Option.from(get$2(labelledElement, 'id')).fold(function () {\n var id = generate$1('dialog-label');\n set$1(labelElement, 'id', id);\n return id;\n }, identity);\n set$1(labelledElement, 'aria-labelledby', labelId);\n }\n };\n\n var schema$x = constant([\n strict$1('lazySink'),\n option('dragBlockClass'),\n defaultedFunction('getBounds', win),\n defaulted$1('useTabstopAt', constant(true)),\n defaulted$1('eventOrder', {}),\n field$1('modalBehaviours', [Keying]),\n onKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape')\n ]);\n var basic = { sketch: identity };\n var parts$f = constant([\n optional({\n name: 'draghandle',\n overrides: function (detail, spec) {\n return {\n behaviours: derive$1([Dragging.config({\n mode: 'mouse',\n getTarget: function (handle) {\n return ancestor$2(handle, '[role=\"dialog\"]').getOr(handle);\n },\n blockerClass: detail.dragBlockClass.getOrDie(new Error('The drag blocker class was not specified for a dialog with a drag handle: \\n' + JSON.stringify(spec, null, 2)).message),\n getBounds: detail.getDragBounds\n })])\n };\n }\n }),\n required({\n schema: [strict$1('dom')],\n name: 'title'\n }),\n required({\n factory: basic,\n schema: [strict$1('dom')],\n name: 'close'\n }),\n required({\n factory: basic,\n schema: [strict$1('dom')],\n name: 'body'\n }),\n optional({\n factory: basic,\n schema: [strict$1('dom')],\n name: 'footer'\n }),\n external$1({\n factory: {\n sketch: function (spec, detail) {\n return __assign(__assign({}, spec), {\n dom: detail.dom,\n components: detail.components\n });\n }\n },\n schema: [\n defaulted$1('dom', {\n tag: 'div',\n styles: {\n position: 'fixed',\n left: '0px',\n top: '0px',\n right: '0px',\n bottom: '0px'\n }\n }),\n defaulted$1('components', [])\n ],\n name: 'blocker'\n })\n ]);\n\n var factory$i = function (detail, components, spec, externals) {\n var dialogBusyEvent = generate$1('alloy.dialog.busy');\n var dialogIdleEvent = generate$1('alloy.dialog.idle');\n var busyBehaviours = derive$1([\n Keying.config({\n mode: 'special',\n onTab: function () {\n return Option.some(true);\n },\n onShiftTab: function () {\n return Option.some(true);\n }\n }),\n Focusing.config({})\n ]);\n var showDialog = function (dialog) {\n var sink = detail.lazySink(dialog).getOrDie();\n var busyComp = Cell(Option.none());\n var externalBlocker = externals.blocker();\n var blocker = sink.getSystem().build(__assign(__assign({}, externalBlocker), {\n components: externalBlocker.components.concat([premade$1(dialog)]),\n behaviours: derive$1([\n Focusing.config({}),\n config('dialog-blocker-events', [\n runOnSource(focusin(), function () {\n Keying.focusIn(dialog);\n }),\n run(dialogIdleEvent, function (blocker, se) {\n if (has$1(dialog.element(), 'aria-busy')) {\n remove$1(dialog.element(), 'aria-busy');\n busyComp.get().each(function (bc) {\n return Replacing.remove(dialog, bc);\n });\n }\n }),\n run(dialogBusyEvent, function (blocker, se) {\n set$1(dialog.element(), 'aria-busy', 'true');\n var getBusySpec = se.event().getBusySpec();\n busyComp.get().each(function (bc) {\n Replacing.remove(dialog, bc);\n });\n var busySpec = getBusySpec(dialog, busyBehaviours);\n var busy = blocker.getSystem().build(busySpec);\n busyComp.set(Option.some(busy));\n Replacing.append(dialog, premade$1(busy));\n if (busy.hasConfigured(Keying)) {\n Keying.focusIn(busy);\n }\n })\n ])\n ])\n }));\n attach$1(sink, blocker);\n Keying.focusIn(dialog);\n };\n var hideDialog = function (dialog) {\n parent(dialog.element()).each(function (blockerDom) {\n dialog.getSystem().getByDom(blockerDom).each(function (blocker) {\n detach(blocker);\n });\n });\n };\n var getDialogBody = function (dialog) {\n return getPartOrDie(dialog, detail, 'body');\n };\n var getDialogFooter = function (dialog) {\n return getPartOrDie(dialog, detail, 'footer');\n };\n var setBusy = function (dialog, getBusySpec) {\n emitWith(dialog, dialogBusyEvent, { getBusySpec: getBusySpec });\n };\n var setIdle = function (dialog) {\n emit(dialog, dialogIdleEvent);\n };\n var modalEventsId = generate$1('modal-events');\n var eventOrder = __assign(__assign({}, detail.eventOrder), { 'alloy.system.attached': [modalEventsId].concat(detail.eventOrder['alloy.system.attached'] || []) });\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n apis: {\n show: showDialog,\n hide: hideDialog,\n getBody: getDialogBody,\n getFooter: getDialogFooter,\n setIdle: setIdle,\n setBusy: setBusy\n },\n eventOrder: eventOrder,\n domModification: {\n attributes: {\n 'role': 'dialog',\n 'aria-modal': 'true'\n }\n },\n behaviours: augment(detail.modalBehaviours, [\n Replacing.config({}),\n Keying.config({\n mode: 'cyclic',\n onEnter: detail.onExecute,\n onEscape: detail.onEscape,\n useTabstopAt: detail.useTabstopAt\n }),\n config(modalEventsId, [runOnAttached(function (c) {\n AriaLabel.labelledBy(c.element(), getPartOrDie(c, detail, 'title').element());\n describedBy(c.element(), getPartOrDie(c, detail, 'body').element());\n })])\n ])\n };\n };\n var ModalDialog = composite$1({\n name: 'ModalDialog',\n configFields: schema$x(),\n partFields: parts$f(),\n factory: factory$i,\n apis: {\n show: function (apis, dialog) {\n apis.show(dialog);\n },\n hide: function (apis, dialog) {\n apis.hide(dialog);\n },\n getBody: function (apis, dialog) {\n return apis.getBody(dialog);\n },\n getFooter: function (apis, dialog) {\n return apis.getFooter(dialog);\n },\n setBusy: function (apis, dialog, getBusySpec) {\n apis.setBusy(dialog, getBusySpec);\n },\n setIdle: function (apis, dialog) {\n apis.setIdle(dialog);\n }\n }\n });\n\n var alertBannerFields = [\n strictString('type'),\n strictString('text'),\n strictStringEnum('level', [\n 'info',\n 'warn',\n 'error',\n 'success'\n ]),\n strictString('icon'),\n defaulted$1('url', '')\n ];\n var alertBannerSchema = objOf(alertBannerFields);\n\n var createBarFields = function (itemsField) {\n return [\n strictString('type'),\n itemsField\n ];\n };\n\n var buttonFields = [\n strictString('type'),\n strictString('text'),\n defaultedBoolean('disabled', false),\n defaultedBoolean('primary', false),\n field('name', 'name', defaultedThunk(function () {\n return generate$1('button-name');\n }), string),\n optionString('icon'),\n defaultedBoolean('borderless', false)\n ];\n var buttonSchema = objOf(buttonFields);\n\n var checkboxFields = [\n strictString('type'),\n strictString('name'),\n strictString('label'),\n defaultedBoolean('disabled', false)\n ];\n var checkboxSchema = objOf(checkboxFields);\n var checkboxDataProcessor = boolean;\n\n var formComponentFields = [\n strictString('type'),\n strictString('name')\n ];\n var formComponentWithLabelFields = formComponentFields.concat([optionString('label')]);\n\n var colorInputFields = formComponentWithLabelFields;\n var colorInputSchema = objOf(colorInputFields);\n var colorInputDataProcessor = string;\n\n var colorPickerFields = formComponentWithLabelFields;\n var colorPickerSchema = objOf(colorPickerFields);\n var colorPickerDataProcessor = string;\n\n var dropZoneFields = formComponentWithLabelFields;\n var dropZoneSchema = objOf(dropZoneFields);\n var dropZoneDataProcessor = arrOfVal();\n\n var createGridFields = function (itemsField) {\n return [\n strictString('type'),\n strictNumber('columns'),\n itemsField\n ];\n };\n\n var iframeFields = formComponentWithLabelFields.concat([defaultedBoolean('sandboxed', true)]);\n var iframeSchema = objOf(iframeFields);\n var iframeDataProcessor = string;\n\n var inputFields = formComponentWithLabelFields.concat([\n optionString('inputMode'),\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n defaultedBoolean('disabled', false)\n ]);\n var inputSchema = objOf(inputFields);\n var inputDataProcessor = string;\n\n var selectBoxFields = formComponentWithLabelFields.concat([\n strictArrayOfObj('items', [\n strictString('text'),\n strictString('value')\n ]),\n defaultedNumber('size', 1),\n defaultedBoolean('disabled', false)\n ]);\n var selectBoxSchema = objOf(selectBoxFields);\n var selectBoxDataProcessor = string;\n\n var sizeInputFields = formComponentWithLabelFields.concat([\n defaultedBoolean('constrain', true),\n defaultedBoolean('disabled', false)\n ]);\n var sizeInputSchema = objOf(sizeInputFields);\n var sizeInputDataProcessor = objOf([\n strictString('width'),\n strictString('height')\n ]);\n\n var textAreaFields = formComponentWithLabelFields.concat([\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n defaultedBoolean('disabled', false)\n ]);\n var textAreaSchema = objOf(textAreaFields);\n var textAreaDataProcessor = string;\n\n var urlInputFields = formComponentWithLabelFields.concat([\n defaultedStringEnum('filetype', 'file', [\n 'image',\n 'media',\n 'file'\n ]),\n defaulted$1('disabled', false)\n ]);\n var urlInputSchema = objOf(urlInputFields);\n var urlInputDataProcessor = objOf([\n strictString('value'),\n defaulted$1('meta', {})\n ]);\n\n var customEditorFields = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n strictString('scriptId'),\n strictString('scriptUrl'),\n defaultedPostMsg('settings', undefined)\n ]);\n var customEditorFieldsOld = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n strictFunction('init')\n ]);\n var customEditorSchema = valueOf(function (v) {\n return asRaw('customeditor.old', objOfOnly(customEditorFieldsOld), v).orThunk(function () {\n return asRaw('customeditor.new', objOfOnly(customEditorFields), v);\n });\n });\n var customEditorDataProcessor = string;\n\n var htmlPanelFields = [\n strictString('type'),\n strictString('html'),\n defaultedStringEnum('presets', 'presentation', [\n 'presentation',\n 'document'\n ])\n ];\n var htmlPanelSchema = objOf(htmlPanelFields);\n\n var imageToolsFields = formComponentWithLabelFields.concat([strictOf('currentState', objOf([\n strict$1('blob'),\n strictString('url')\n ]))]);\n var imageToolsSchema = objOf(imageToolsFields);\n\n var collectionFields = formComponentWithLabelFields.concat([defaulted$1('columns', 'auto')]);\n var collectionSchema = objOf(collectionFields);\n var collectionDataProcessor = arrOfObj$1([\n strictString('value'),\n strictString('text'),\n strictString('icon')\n ]);\n\n var createLabelFields = function (itemsField) {\n return [\n strictString('type'),\n strictString('label'),\n itemsField\n ];\n };\n\n var tableFields = [\n strictString('type'),\n strictArrayOf('header', string),\n strictArrayOf('cells', arrOf(string))\n ];\n var tableSchema = objOf(tableFields);\n\n var createItemsField = function (name) {\n return field('items', 'items', strict(), arrOf(valueOf(function (v) {\n return asRaw('Checking item of ' + name, itemSchema$2, v).fold(function (sErr) {\n return Result.error(formatError(sErr));\n }, function (passValue) {\n return Result.value(passValue);\n });\n })));\n };\n var itemSchema$2 = valueThunkOf(function () {\n return chooseProcessor('type', {\n alertbanner: alertBannerSchema,\n bar: objOf(createBarFields(createItemsField('bar'))),\n button: buttonSchema,\n checkbox: checkboxSchema,\n colorinput: colorInputSchema,\n colorpicker: colorPickerSchema,\n dropzone: dropZoneSchema,\n grid: objOf(createGridFields(createItemsField('grid'))),\n iframe: iframeSchema,\n input: inputSchema,\n selectbox: selectBoxSchema,\n sizeinput: sizeInputSchema,\n textarea: textAreaSchema,\n urlinput: urlInputSchema,\n customeditor: customEditorSchema,\n htmlpanel: htmlPanelSchema,\n imagetools: imageToolsSchema,\n collection: collectionSchema,\n label: objOf(createLabelFields(createItemsField('label'))),\n table: tableSchema,\n panel: panelSchema\n });\n });\n var panelFields = [\n strictString('type'),\n defaulted$1('classes', []),\n strictArrayOf('items', itemSchema$2)\n ];\n var panelSchema = objOf(panelFields);\n\n var tabFields = [\n field('name', 'name', defaultedThunk(function () {\n return generate$1('tab-name');\n }), string),\n strictString('title'),\n strictArrayOf('items', itemSchema$2)\n ];\n var tabPanelFields = [\n strictString('type'),\n strictArrayOfObj('tabs', tabFields)\n ];\n var tabPanelSchema = objOf(tabPanelFields);\n\n var dialogToggleMenuItemSchema = objOf([\n strictString('type'),\n strictString('name')\n ].concat(commonMenuItemFields));\n var dialogToggleMenuItemDataProcessor = boolean;\n\n var baseButtonFields = [\n field('name', 'name', defaultedThunk(function () {\n return generate$1('button-name');\n }), string),\n optionString('icon'),\n defaultedStringEnum('align', 'end', [\n 'start',\n 'end'\n ]),\n defaultedBoolean('primary', false),\n defaultedBoolean('disabled', false)\n ];\n var dialogButtonFields = __spreadArrays(baseButtonFields, [strictString('text')]);\n var normalButtonFields = __spreadArrays([strictStringEnum('type', [\n 'submit',\n 'cancel',\n 'custom'\n ])], dialogButtonFields);\n var menuButtonFields = __spreadArrays([\n strictStringEnum('type', ['menu']),\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n strictArrayOf('items', dialogToggleMenuItemSchema)\n ], baseButtonFields);\n var dialogButtonSchema = choose$1('type', {\n submit: normalButtonFields,\n cancel: normalButtonFields,\n custom: normalButtonFields,\n menu: menuButtonFields\n });\n\n var dialogButtonFields$1 = dialogButtonFields;\n var dialogButtonSchema$1 = dialogButtonSchema;\n var dialogSchema = objOf([\n strictString('title'),\n strictOf('body', chooseProcessor('type', {\n panel: panelSchema,\n tabpanel: tabPanelSchema\n })),\n defaultedString('size', 'normal'),\n strictArrayOf('buttons', dialogButtonSchema$1),\n defaulted$1('initialData', {}),\n defaultedFunction('onAction', noop),\n defaultedFunction('onChange', noop),\n defaultedFunction('onSubmit', noop),\n defaultedFunction('onClose', noop),\n defaultedFunction('onCancel', noop),\n defaulted$1('onTabChange', noop)\n ]);\n var createDialog = function (spec) {\n return asRaw('dialog', dialogSchema, spec);\n };\n\n var getAllObjects = function (obj) {\n if (isObject(obj)) {\n return [obj].concat(bind(values(obj), getAllObjects));\n } else if (isArray(obj)) {\n return bind(obj, getAllObjects);\n } else {\n return [];\n }\n };\n\n var isNamedItem = function (obj) {\n return isString(obj.type) && isString(obj.name);\n };\n var dataProcessors = {\n checkbox: checkboxDataProcessor,\n colorinput: colorInputDataProcessor,\n colorpicker: colorPickerDataProcessor,\n dropzone: dropZoneDataProcessor,\n input: inputDataProcessor,\n iframe: iframeDataProcessor,\n sizeinput: sizeInputDataProcessor,\n selectbox: selectBoxDataProcessor,\n size: sizeInputDataProcessor,\n textarea: textAreaDataProcessor,\n urlinput: urlInputDataProcessor,\n customeditor: customEditorDataProcessor,\n collection: collectionDataProcessor,\n togglemenuitem: dialogToggleMenuItemDataProcessor\n };\n var getDataProcessor = function (item) {\n return Option.from(dataProcessors[item.type]);\n };\n var getNamedItems = function (structure) {\n return filter(getAllObjects(structure), isNamedItem);\n };\n\n var createDataValidator = function (structure) {\n var namedItems = getNamedItems(structure);\n var fields = bind(namedItems, function (item) {\n return getDataProcessor(item).fold(function () {\n return [];\n }, function (schema) {\n return [strictOf(item.name, schema)];\n });\n });\n return objOf(fields);\n };\n\n var urlDialogButtonSchema = objOf(__spreadArrays([strictStringEnum('type', [\n 'cancel',\n 'custom'\n ])], dialogButtonFields$1));\n var urlDialogSchema = objOf([\n strictString('title'),\n strictString('url'),\n optionNumber('height'),\n optionNumber('width'),\n optionArrayOf('buttons', urlDialogButtonSchema),\n defaultedFunction('onAction', noop),\n defaultedFunction('onCancel', noop),\n defaultedFunction('onClose', noop),\n defaultedFunction('onMessage', noop)\n ]);\n var createUrlDialog = function (spec) {\n return asRaw('dialog', urlDialogSchema, spec);\n };\n\n var extract$1 = function (structure) {\n var internalDialog = getOrDie(createDialog(structure));\n var dataValidator = createDataValidator(structure);\n var initialData = structure.initialData;\n return {\n internalDialog: internalDialog,\n dataValidator: dataValidator,\n initialData: initialData\n };\n };\n var DialogManager = {\n open: function (factory, structure) {\n var extraction = extract$1(structure);\n return factory(extraction.internalDialog, extraction.initialData, extraction.dataValidator);\n },\n openUrl: function (factory, structure) {\n var internalDialog = getOrDie(createUrlDialog(structure));\n return factory(internalDialog);\n },\n redial: function (structure) {\n return extract$1(structure);\n }\n };\n\n var value$3 = function () {\n var subject = Cell(Option.none());\n var clear = function () {\n subject.set(Option.none());\n };\n var set = function (s) {\n subject.set(Option.some(s));\n };\n var on = function (f) {\n subject.get().each(f);\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\n };\n };\n\n var toValidValues = function (values) {\n var errors = [];\n var result = {};\n each$1(values, function (value, name) {\n value.fold(function () {\n errors.push(name);\n }, function (v) {\n result[name] = v;\n });\n });\n return errors.length > 0 ? Result.error(errors) : Result.value(result);\n };\n\n var renderBodyPanel = function (spec, backstage) {\n var memForm = record(Form.sketch(function (parts) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form'].concat(spec.classes)\n },\n components: map(spec.items, function (item) {\n return interpretInForm(parts, item, backstage);\n })\n };\n }));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n },\n components: [memForm.asSpec()]\n }],\n behaviours: derive$1([\n Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(NavigableObject.isPseudoStop)\n }),\n ComposingConfigs.memento(memForm),\n RepresentingConfigs.memento(memForm, {\n postprocess: function (formValue) {\n return toValidValues(formValue).fold(function (err) {\n domGlobals.console.error(err);\n return {};\n }, function (vals) {\n return vals;\n });\n }\n })\n ])\n };\n };\n\n var factory$j = function (detail, spec) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events: events$7(detail.action),\n behaviours: augment(detail.tabButtonBehaviours, [\n Focusing.config({}),\n Keying.config({\n mode: 'execution',\n useSpace: true,\n useEnter: true\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.value\n }\n })\n ]),\n domModification: detail.domModification\n };\n };\n var TabButton = single$2({\n name: 'TabButton',\n configFields: [\n defaulted$1('uid', undefined),\n strict$1('value'),\n field('dom', 'dom', mergeWithThunk(function () {\n return {\n attributes: {\n 'role': 'tab',\n 'id': generate$1('aria'),\n 'aria-selected': 'false'\n }\n };\n }), anyValue$1()),\n option('action'),\n defaulted$1('domModification', {}),\n field$1('tabButtonBehaviours', [\n Focusing,\n Keying,\n Representing\n ]),\n strict$1('view')\n ],\n factory: factory$j\n });\n\n var schema$y = constant([\n strict$1('tabs'),\n strict$1('dom'),\n defaulted$1('clickToDismiss', false),\n field$1('tabbarBehaviours', [\n Highlighting,\n Keying\n ]),\n markers([\n 'tabClass',\n 'selectedClass'\n ])\n ]);\n var tabsPart = group({\n factory: TabButton,\n name: 'tabs',\n unit: 'tab',\n overrides: function (barDetail) {\n var dismissTab$1 = function (tabbar, button) {\n Highlighting.dehighlight(tabbar, button);\n emitWith(tabbar, dismissTab(), {\n tabbar: tabbar,\n button: button\n });\n };\n var changeTab$1 = function (tabbar, button) {\n Highlighting.highlight(tabbar, button);\n emitWith(tabbar, changeTab(), {\n tabbar: tabbar,\n button: button\n });\n };\n return {\n action: function (button) {\n var tabbar = button.getSystem().getByUid(barDetail.uid).getOrDie();\n var activeButton = Highlighting.isHighlighted(tabbar, button);\n var response = function () {\n if (activeButton && barDetail.clickToDismiss) {\n return dismissTab$1;\n } else if (!activeButton) {\n return changeTab$1;\n } else {\n return noop;\n }\n }();\n response(tabbar, button);\n },\n domModification: { classes: [barDetail.markers.tabClass] }\n };\n }\n });\n var parts$g = constant([tabsPart]);\n\n var factory$k = function (detail, components, spec, externals) {\n return {\n 'uid': detail.uid,\n 'dom': detail.dom,\n 'components': components,\n 'debug.sketcher': 'Tabbar',\n 'domModification': { attributes: { role: 'tablist' } },\n 'behaviours': augment(detail.tabbarBehaviours, [\n Highlighting.config({\n highlightClass: detail.markers.selectedClass,\n itemClass: detail.markers.tabClass,\n onHighlight: function (tabbar, tab) {\n set$1(tab.element(), 'aria-selected', 'true');\n },\n onDehighlight: function (tabbar, tab) {\n set$1(tab.element(), 'aria-selected', 'false');\n }\n }),\n Keying.config({\n mode: 'flow',\n getInitial: function (tabbar) {\n return Highlighting.getHighlighted(tabbar).map(function (tab) {\n return tab.element();\n });\n },\n selector: '.' + detail.markers.tabClass,\n executeOnMove: true\n })\n ])\n };\n };\n var Tabbar = composite$1({\n name: 'Tabbar',\n configFields: schema$y(),\n partFields: parts$g(),\n factory: factory$k\n });\n\n var factory$l = function (detail, spec) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n behaviours: augment(detail.tabviewBehaviours, [Replacing.config({})]),\n domModification: { attributes: { role: 'tabpanel' } }\n };\n };\n var Tabview = single$2({\n name: 'Tabview',\n configFields: [field$1('tabviewBehaviours', [Replacing])],\n factory: factory$l\n });\n\n var schema$z = constant([\n defaulted$1('selectFirst', true),\n onHandler('onChangeTab'),\n onHandler('onDismissTab'),\n defaulted$1('tabs', []),\n field$1('tabSectionBehaviours', [])\n ]);\n var barPart = required({\n factory: Tabbar,\n schema: [\n strict$1('dom'),\n strictObjOf('markers', [\n strict$1('tabClass'),\n strict$1('selectedClass')\n ])\n ],\n name: 'tabbar',\n defaults: function (detail) {\n return { tabs: detail.tabs };\n }\n });\n var viewPart = required({\n factory: Tabview,\n name: 'tabview'\n });\n var parts$h = constant([\n barPart,\n viewPart\n ]);\n\n var factory$m = function (detail, components, spec, externals) {\n var changeTab$1 = function (button) {\n var tabValue = Representing.getValue(button);\n getPart(button, detail, 'tabview').each(function (tabview) {\n var tabWithValue = find(detail.tabs, function (t) {\n return t.value === tabValue;\n });\n tabWithValue.each(function (tabData) {\n var panel = tabData.view();\n getOpt(button.element(), 'id').each(function (id) {\n set$1(tabview.element(), 'aria-labelledby', id);\n });\n Replacing.set(tabview, panel);\n detail.onChangeTab(tabview, button, panel);\n });\n });\n };\n var changeTabBy = function (section, byPred) {\n getPart(section, detail, 'tabbar').each(function (tabbar) {\n byPred(tabbar).each(emitExecute);\n });\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: get$c(detail.tabSectionBehaviours),\n events: derive(flatten([\n detail.selectFirst ? [runOnAttached(function (section, simulatedEvent) {\n changeTabBy(section, Highlighting.getFirst);\n })] : [],\n [\n run(changeTab(), function (section, simulatedEvent) {\n var button = simulatedEvent.event().button();\n changeTab$1(button);\n }),\n run(dismissTab(), function (section, simulatedEvent) {\n var button = simulatedEvent.event().button();\n detail.onDismissTab(section, button);\n })\n ]\n ])),\n apis: {\n getViewItems: function (section) {\n return getPart(section, detail, 'tabview').map(function (tabview) {\n return Replacing.contents(tabview);\n }).getOr([]);\n },\n showTab: function (section, tabKey) {\n var getTabIfNotActive = function (tabbar) {\n var candidates = Highlighting.getCandidates(tabbar);\n var optTab = find(candidates, function (c) {\n return Representing.getValue(c) === tabKey;\n });\n return optTab.filter(function (tab) {\n return !Highlighting.isHighlighted(tabbar, tab);\n });\n };\n changeTabBy(section, getTabIfNotActive);\n }\n }\n };\n };\n var TabSection = composite$1({\n name: 'TabSection',\n configFields: schema$z(),\n partFields: parts$h(),\n factory: factory$m,\n apis: {\n getViewItems: function (apis, component) {\n return apis.getViewItems(component);\n },\n showTab: function (apis, component, tabKey) {\n apis.showTab(component, tabKey);\n }\n }\n });\n\n var measureHeights = function (allTabs, tabview, tabviewComp) {\n return map(allTabs, function (tab, i) {\n Replacing.set(tabviewComp, allTabs[i].view());\n var rect = tabview.dom().getBoundingClientRect();\n Replacing.set(tabviewComp, []);\n return rect.height;\n });\n };\n var getMaxHeight = function (heights) {\n return head(sort(heights, function (a, b) {\n if (a > b) {\n return -1;\n } else if (a < b) {\n return +1;\n } else {\n return 0;\n }\n }));\n };\n var getMaxTabviewHeight = function (dialog, tabview, tablist) {\n var documentElement$1 = documentElement(dialog).dom();\n var rootElm = ancestor$2(dialog, '.tox-dialog-wrap').getOr(dialog);\n var isFixed = get$4(rootElm, 'position') === 'fixed';\n var maxHeight;\n if (isFixed) {\n maxHeight = Math.max(documentElement$1.clientHeight, domGlobals.window.innerHeight);\n } else {\n maxHeight = Math.max(documentElement$1.offsetHeight, documentElement$1.scrollHeight);\n }\n var tabviewHeight = get$6(tabview);\n var isTabListBeside = tabview.dom().offsetLeft >= tablist.dom().offsetLeft + get$7(tablist);\n var currentTabHeight = isTabListBeside ? Math.max(get$6(tablist), tabviewHeight) : tabviewHeight;\n var dialogTopMargin = parseInt(get$4(dialog, 'margin-top'), 10) || 0;\n var dialogBottomMargin = parseInt(get$4(dialog, 'margin-bottom'), 10) || 0;\n var dialogHeight = get$6(dialog) + dialogTopMargin + dialogBottomMargin;\n var chromeHeight = dialogHeight - currentTabHeight;\n return maxHeight - chromeHeight;\n };\n var showTab = function (allTabs, comp) {\n head(allTabs).each(function (tab) {\n return TabSection.showTab(comp, tab.value);\n });\n };\n var setTabviewHeight = function (tabview, height) {\n set$2(tabview, 'height', height + 'px');\n if (!detect$3().browser.isIE()) {\n set$2(tabview, 'flex-basis', height + 'px');\n } else {\n remove$6(tabview, 'flex-basis');\n }\n };\n var updateTabviewHeight = function (dialogBody, tabview, maxTabHeight) {\n ancestor$2(dialogBody, '[role=\"dialog\"]').each(function (dialog) {\n descendant$1(dialog, '[role=\"tablist\"]').each(function (tablist) {\n maxTabHeight.get().map(function (height) {\n set$2(tabview, 'height', '0');\n set$2(tabview, 'flex-basis', '0');\n return Math.min(height, getMaxTabviewHeight(dialog, tabview, tablist));\n }).each(function (height) {\n setTabviewHeight(tabview, height);\n });\n });\n });\n };\n var getTabview = function (dialog) {\n return descendant$1(dialog, '[role=\"tabpanel\"]');\n };\n var setMode = function (allTabs) {\n var smartTabHeight = function () {\n var maxTabHeight = Cell(Option.none());\n var extraEvents = [\n runOnAttached(function (comp) {\n var dialog = comp.element();\n getTabview(dialog).each(function (tabview) {\n set$2(tabview, 'visibility', 'hidden');\n comp.getSystem().getByDom(tabview).toOption().each(function (tabviewComp) {\n var heights = measureHeights(allTabs, tabview, tabviewComp);\n var maxTabHeightOpt = getMaxHeight(heights);\n maxTabHeight.set(maxTabHeightOpt);\n });\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n remove$6(tabview, 'visibility');\n showTab(allTabs, comp);\n global$2.requestAnimationFrame(function () {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n });\n }),\n run(windowResize(), function (comp) {\n var dialog = comp.element();\n getTabview(dialog).each(function (tabview) {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n }),\n run(formResizeEvent, function (comp, se) {\n var dialog = comp.element();\n getTabview(dialog).each(function (tabview) {\n var oldFocus = active();\n set$2(tabview, 'visibility', 'hidden');\n var oldHeight = getRaw(tabview, 'height').map(function (h) {\n return parseInt(h, 10);\n });\n remove$6(tabview, 'height');\n remove$6(tabview, 'flex-basis');\n var newHeight = tabview.dom().getBoundingClientRect().height;\n var hasGrown = oldHeight.forall(function (h) {\n return newHeight > h;\n });\n if (hasGrown) {\n maxTabHeight.set(Option.from(newHeight));\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n } else {\n oldHeight.each(function (h) {\n setTabviewHeight(tabview, h);\n });\n }\n remove$6(tabview, 'visibility');\n oldFocus.each(focus$1);\n });\n })\n ];\n var selectFirst = false;\n return {\n extraEvents: extraEvents,\n selectFirst: selectFirst\n };\n }();\n var naiveTabHeight = function () {\n var extraEvents = [];\n var selectFirst = true;\n return {\n extraEvents: extraEvents,\n selectFirst: selectFirst\n };\n }();\n return {\n smartTabHeight: smartTabHeight,\n naiveTabHeight: naiveTabHeight\n };\n };\n\n var SendDataToSectionChannel = 'send-data-to-section';\n var SendDataToViewChannel = 'send-data-to-view';\n var renderTabPanel = function (spec, backstage) {\n var storedValue = Cell({});\n var updateDataWithForm = function (form) {\n var formData = Representing.getValue(form);\n var validData = toValidValues(formData).getOr({});\n var currentData = storedValue.get();\n var newData = deepMerge(currentData, validData);\n storedValue.set(newData);\n };\n var setDataOnForm = function (form) {\n var tabData = storedValue.get();\n Representing.setValue(form, tabData);\n };\n var oldTab = Cell(null);\n var allTabs = map(spec.tabs, function (tab) {\n return {\n value: tab.name,\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-nav-item'],\n innerHtml: backstage.shared.providers.translate(tab.title)\n },\n view: function () {\n return [Form.sketch(function (parts) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form']\n },\n components: map(tab.items, function (item) {\n return interpretInForm(parts, item, backstage);\n }),\n formBehaviours: derive$1([\n Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(NavigableObject.isPseudoStop)\n }),\n config('TabView.form.events', [\n runOnAttached(setDataOnForm),\n runOnDetached(updateDataWithForm)\n ]),\n Receiving.config({\n channels: wrapAll$1([\n {\n key: SendDataToSectionChannel,\n value: { onReceive: updateDataWithForm }\n },\n {\n key: SendDataToViewChannel,\n value: { onReceive: setDataOnForm }\n }\n ])\n })\n ])\n };\n })];\n }\n };\n });\n var tabMode = setMode(allTabs).smartTabHeight;\n return TabSection.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n onChangeTab: function (section, button, _viewItems) {\n var name = Representing.getValue(button);\n emitWith(section, formTabChangeEvent, {\n name: name,\n oldName: oldTab.get()\n });\n oldTab.set(name);\n },\n tabs: allTabs,\n components: [\n TabSection.parts().tabbar({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-nav']\n },\n components: [Tabbar.parts().tabs({})],\n markers: {\n tabClass: 'tox-tab',\n selectedClass: 'tox-dialog__body-nav-item--active'\n },\n tabbarBehaviours: derive$1([Tabstopping.config({})])\n }),\n TabSection.parts().tabview({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n }\n })\n ],\n selectFirst: tabMode.selectFirst,\n tabSectionBehaviours: derive$1([\n config('tabpanel', tabMode.extraEvents),\n Keying.config({ mode: 'acyclic' }),\n Composing.config({\n find: function (comp) {\n return head(TabSection.getViewItems(comp));\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (tsection) {\n tsection.getSystem().broadcastOn([SendDataToSectionChannel], {});\n return storedValue.get();\n },\n setValue: function (tsection, value) {\n storedValue.set(value);\n tsection.getSystem().broadcastOn([SendDataToViewChannel], {});\n }\n }\n })\n ])\n });\n };\n\n var dialogChannel = generate$1('update-dialog');\n var titleChannel = generate$1('update-title');\n var bodyChannel = generate$1('update-body');\n var footerChannel = generate$1('update-footer');\n var bodySendMessageChannel = generate$1('body-send-message');\n\n var renderBody = function (spec, id, backstage, ariaAttrs) {\n var renderComponents = function (incoming) {\n switch (incoming.body.type) {\n case 'tabpanel': {\n return [renderTabPanel(incoming.body, backstage)];\n }\n default: {\n return [renderBodyPanel(incoming.body, backstage)];\n }\n }\n };\n var updateState = function (_comp, incoming) {\n return Option.some({\n isTabPanel: function () {\n return incoming.body.type === 'tabpanel';\n }\n });\n };\n var ariaAttributes = { 'aria-live': 'polite' };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__content-js'],\n attributes: __assign(__assign({}, id.map(function (x) {\n return { id: x };\n }).getOr({})), ariaAttrs ? ariaAttributes : {})\n },\n components: [],\n behaviours: derive$1([\n ComposingConfigs.childAt(0),\n Reflecting.config({\n channel: bodyChannel,\n updateState: updateState,\n renderComponents: renderComponents,\n initialData: spec\n })\n ])\n };\n };\n var renderInlineBody = function (spec, contentId, backstage, ariaAttrs) {\n return renderBody(spec, Option.some(contentId), backstage, ariaAttrs);\n };\n var renderModalBody = function (spec, backstage) {\n var bodySpec = renderBody(spec, Option.none(), backstage, false);\n return ModalDialog.parts().body(bodySpec);\n };\n var renderIframeBody = function (spec) {\n var bodySpec = {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__content-js']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-iframe']\n },\n components: [NavigableObject.craft({\n dom: {\n tag: 'iframe',\n attributes: { src: spec.url }\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n })]\n }],\n behaviours: derive$1([Keying.config({\n mode: 'acyclic',\n useTabstopAt: not(NavigableObject.isPseudoStop)\n })])\n };\n return ModalDialog.parts().body(bodySpec);\n };\n\n var isTouch = global$8.deviceType.isTouch();\n var hiddenHeader = function (title, close) {\n return {\n dom: {\n tag: 'div',\n styles: { display: 'none' },\n classes: ['tox-dialog__header']\n },\n components: [\n title,\n close\n ]\n };\n };\n var pClose = function (onClose, providersBackstage) {\n return ModalDialog.parts().close(Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--icon',\n 'tox-button--naked'\n ],\n attributes: {\n 'type': 'button',\n 'aria-label': providersBackstage.translate('Close')\n }\n },\n action: onClose,\n buttonBehaviours: derive$1([Tabstopping.config({})])\n }));\n };\n var pUntitled = function () {\n return ModalDialog.parts().title({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__title'],\n innerHtml: '',\n styles: { display: 'none' }\n }\n });\n };\n var pBodyMessage = function (message, providersBackstage) {\n return ModalDialog.parts().body({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-content']\n },\n components: [{ dom: fromHtml$2('

' + providersBackstage.translate(message) + '

') }]\n }]\n });\n };\n var pFooter = function (buttons) {\n return ModalDialog.parts().footer({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer']\n },\n components: buttons\n });\n };\n var pFooterGroup = function (startButtons, endButtons) {\n return [\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer-start']\n },\n components: startButtons\n }),\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer-end']\n },\n components: endButtons\n })\n ];\n };\n var renderDialog = function (spec) {\n var _a;\n var dialogClass = 'tox-dialog';\n var blockerClass = dialogClass + '-wrap';\n var blockerBackdropClass = blockerClass + '__backdrop';\n var scrollLockClass = dialogClass + '__disable-scroll';\n return ModalDialog.sketch({\n lazySink: spec.lazySink,\n onEscape: function (comp) {\n spec.onEscape(comp);\n return Option.some(true);\n },\n useTabstopAt: function (elem) {\n return !NavigableObject.isPseudoStop(elem);\n },\n dom: {\n tag: 'div',\n classes: [dialogClass].concat(spec.extraClasses),\n styles: __assign({ position: 'relative' }, spec.extraStyles)\n },\n components: __spreadArrays([\n spec.header,\n spec.body\n ], spec.footer.toArray()),\n parts: {\n blocker: {\n dom: fromHtml$2('
'),\n components: [{\n dom: {\n tag: 'div',\n classes: isTouch ? [\n blockerBackdropClass,\n blockerBackdropClass + '--opaque'\n ] : [blockerBackdropClass]\n }\n }]\n }\n },\n dragBlockClass: blockerClass,\n modalBehaviours: derive$1(__spreadArrays([\n Focusing.config({}),\n config('dialog-events', spec.dialogEvents.concat([runOnSource(focusin(), function (comp, se) {\n Keying.focusIn(comp);\n })])),\n config('scroll-lock', [\n runOnAttached(function () {\n add$2(body(), scrollLockClass);\n }),\n runOnDetached(function () {\n remove$4(body(), scrollLockClass);\n })\n ])\n ], spec.extraBehaviours)),\n eventOrder: __assign((_a = {}, _a[execute()] = ['dialog-events'], _a[attachedToDom()] = [\n 'scroll-lock',\n 'dialog-events',\n 'alloy.base.behaviour'\n ], _a[detachedFromDom()] = [\n 'alloy.base.behaviour',\n 'dialog-events',\n 'scroll-lock'\n ], _a), spec.eventOrder)\n });\n };\n\n var renderClose = function (providersBackstage) {\n return Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--icon',\n 'tox-button--naked'\n ],\n attributes: {\n 'type': 'button',\n 'aria-label': providersBackstage.translate('Close'),\n 'title': providersBackstage.translate('Close')\n }\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-icon'],\n innerHtml: ''\n }\n }],\n action: function (comp) {\n emit(comp, formCancelEvent);\n }\n });\n };\n var renderTitle = function (spec, id, providersBackstage) {\n var renderComponents = function (data) {\n return [text(providersBackstage.translate(data.title))];\n };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__title'],\n attributes: __assign({}, id.map(function (x) {\n return { id: x };\n }).getOr({}))\n },\n components: renderComponents(spec),\n behaviours: derive$1([Reflecting.config({\n channel: titleChannel,\n renderComponents: renderComponents\n })])\n };\n };\n var renderDragHandle = function () {\n return { dom: fromHtml$2('
') };\n };\n var renderInlineHeader = function (spec, titleId, providersBackstage) {\n return Container.sketch({\n dom: fromHtml$2('
'),\n components: [\n renderTitle(spec, Option.some(titleId), providersBackstage),\n renderDragHandle(),\n renderClose(providersBackstage)\n ],\n containerBehaviours: derive$1([Dragging.config({\n mode: 'mouse',\n blockerClass: 'blocker',\n getTarget: function (handle) {\n return closest$3(handle, '[role=\"dialog\"]').getOrDie();\n },\n snaps: {\n getSnapPoints: function () {\n return [];\n },\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top'\n }\n })])\n });\n };\n var renderModalHeader = function (spec, providersBackstage) {\n var pTitle = ModalDialog.parts().title(renderTitle(spec, Option.none(), providersBackstage));\n var pHandle = ModalDialog.parts().draghandle(renderDragHandle());\n var pClose = ModalDialog.parts().close(renderClose(providersBackstage));\n var components = [pTitle].concat(spec.draggable ? [pHandle] : []).concat([pClose]);\n return Container.sketch({\n dom: fromHtml$2('
'),\n components: components\n });\n };\n\n var getHeader = function (title, backstage) {\n return renderModalHeader({\n title: backstage.shared.providers.translate(title),\n draggable: backstage.dialog.isDraggableModal()\n }, backstage.shared.providers);\n };\n var getEventExtras = function (lazyDialog, extra) {\n return {\n onClose: function () {\n return extra.closeWindow();\n },\n onBlock: function (blockEvent) {\n ModalDialog.setBusy(lazyDialog(), function (d, bs) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__busy-spinner'],\n attributes: { 'aria-label': blockEvent.message() },\n styles: {\n left: '0px',\n right: '0px',\n bottom: '0px',\n top: '0px',\n position: 'absolute'\n }\n },\n behaviours: bs,\n components: [{ dom: fromHtml$2('
') }]\n };\n });\n },\n onUnblock: function () {\n ModalDialog.setIdle(lazyDialog());\n }\n };\n };\n var renderModalDialog = function (spec, initialData, dialogEvents, backstage) {\n var _a;\n var updateState = function (_comp, incoming) {\n return Option.some(incoming);\n };\n return build$1(renderDialog(__assign(__assign({}, spec), {\n lazySink: backstage.shared.getSink,\n extraBehaviours: __spreadArrays([\n Reflecting.config({\n channel: dialogChannel,\n updateState: updateState,\n initialData: initialData\n }),\n RepresentingConfigs.memory({})\n ], spec.extraBehaviours),\n onEscape: function (comp) {\n emit(comp, formCancelEvent);\n },\n dialogEvents: dialogEvents,\n eventOrder: (_a = {}, _a[receive()] = [\n 'reflecting',\n 'receiving'\n ], _a[attachedToDom()] = [\n 'scroll-lock',\n 'reflecting',\n 'messages',\n 'dialog-events',\n 'alloy.base.behaviour'\n ], _a[detachedFromDom()] = [\n 'alloy.base.behaviour',\n 'dialog-events',\n 'messages',\n 'reflecting',\n 'scroll-lock'\n ], _a)\n })));\n };\n var mapMenuButtons = function (buttons) {\n var mapItems = function (button) {\n var items = map(button.items, function (item) {\n var cell = Cell(false);\n return __assign(__assign({}, item), { storage: cell });\n });\n return __assign(__assign({}, button), { items: items });\n };\n return map(buttons, function (button) {\n if (button.type === 'menu') {\n return mapItems(button);\n }\n return button;\n });\n };\n var extractCellsToObject = function (buttons) {\n return foldl(buttons, function (acc, button) {\n if (button.type === 'menu') {\n var menuButton = button;\n return foldl(menuButton.items, function (innerAcc, item) {\n innerAcc[item.name] = item.storage;\n return innerAcc;\n }, acc);\n }\n return acc;\n }, {});\n };\n\n var initCommonEvents = function (fireApiEvent, extras) {\n return [\n runWithTarget(focusin(), NavigableObject.onFocus),\n fireApiEvent(formCloseEvent, function (api, spec) {\n extras.onClose();\n spec.onClose();\n }),\n fireApiEvent(formCancelEvent, function (api, spec, _event, self) {\n spec.onCancel(api);\n emit(self, formCloseEvent);\n }),\n run(formUnblockEvent, function (c, se) {\n return extras.onUnblock();\n }),\n run(formBlockEvent, function (c, se) {\n return extras.onBlock(se.event());\n })\n ];\n };\n var initUrlDialog = function (getInstanceApi, extras) {\n var fireApiEvent = function (eventName, f) {\n return run(eventName, function (c, se) {\n withSpec(c, function (spec, _c) {\n f(getInstanceApi(), spec, se.event(), c);\n });\n });\n };\n var withSpec = function (c, f) {\n Reflecting.getState(c).get().each(function (currentDialog) {\n f(currentDialog, c);\n });\n };\n return __spreadArrays(initCommonEvents(fireApiEvent, extras), [fireApiEvent(formActionEvent, function (api, spec, event) {\n spec.onAction(api, { name: event.name() });\n })]);\n };\n var initDialog = function (getInstanceApi, extras, getSink) {\n var fireApiEvent = function (eventName, f) {\n return run(eventName, function (c, se) {\n withSpec(c, function (spec, _c) {\n f(getInstanceApi(), spec, se.event(), c);\n });\n });\n };\n var withSpec = function (c, f) {\n Reflecting.getState(c).get().each(function (currentDialogInit) {\n f(currentDialogInit.internalDialog, c);\n });\n };\n return __spreadArrays(initCommonEvents(fireApiEvent, extras), [\n fireApiEvent(formSubmitEvent, function (api, spec) {\n return spec.onSubmit(api);\n }),\n fireApiEvent(formChangeEvent, function (api, spec, event) {\n spec.onChange(api, { name: event.name() });\n }),\n fireApiEvent(formActionEvent, function (api, spec, event, component) {\n var focusIn = function () {\n return Keying.focusIn(component);\n };\n var isDisabled = function (focused) {\n return has$1(focused, 'disabled') || getOpt(focused, 'aria-disabled').exists(function (val) {\n return val === 'true';\n });\n };\n var current = active();\n spec.onAction(api, {\n name: event.name(),\n value: event.value()\n });\n active().fold(focusIn, function (focused) {\n if (isDisabled(focused)) {\n focusIn();\n } else if (current.exists(function (cur) {\n return contains$2(focused, cur) && isDisabled(cur);\n })) {\n focusIn();\n } else {\n getSink().toOption().filter(function (sink) {\n return !contains$2(sink.element(), focused);\n }).each(focusIn);\n }\n });\n }),\n fireApiEvent(formTabChangeEvent, function (api, spec, event) {\n spec.onTabChange(api, {\n newTabName: event.name(),\n oldTabName: event.oldName()\n });\n }),\n runOnDetached(function (component) {\n var api = getInstanceApi();\n Representing.setValue(component, api.getData());\n })\n ]);\n };\n var SilverDialogEvents = {\n initUrlDialog: initUrlDialog,\n initDialog: initDialog\n };\n\n var makeButton = function (button, backstage) {\n return renderFooterButton(button, button.type, backstage);\n };\n var lookup$2 = function (compInSystem, footerButtons, buttonName) {\n return find(footerButtons, function (button) {\n return button.name === buttonName;\n }).bind(function (memButton) {\n return memButton.memento.getOpt(compInSystem);\n });\n };\n var renderComponents = function (_data, state) {\n var footerButtons = state.map(function (s) {\n return s.footerButtons;\n }).getOr([]);\n var buttonGroups = partition(footerButtons, function (button) {\n return button.align === 'start';\n });\n var makeGroup = function (edge, buttons) {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__footer-' + edge]\n },\n components: map(buttons, function (button) {\n return button.memento.asSpec();\n })\n });\n };\n var startButtons = makeGroup('start', buttonGroups.pass);\n var endButtons = makeGroup('end', buttonGroups.fail);\n return [\n startButtons,\n endButtons\n ];\n };\n var renderFooter = function (initSpec, backstage) {\n var updateState = function (_comp, data) {\n var footerButtons = map(data.buttons, function (button) {\n var memButton = record(makeButton(button, backstage));\n return {\n name: button.name,\n align: button.align,\n memento: memButton\n };\n });\n var lookupByName = function (compInSystem, buttonName) {\n return lookup$2(compInSystem, footerButtons, buttonName);\n };\n return Option.some({\n lookupByName: lookupByName,\n footerButtons: footerButtons\n });\n };\n return {\n dom: fromHtml$2('
'),\n components: [],\n behaviours: derive$1([Reflecting.config({\n channel: footerChannel,\n initialData: initSpec,\n updateState: updateState,\n renderComponents: renderComponents\n })])\n };\n };\n var renderInlineFooter = function (initSpec, backstage) {\n return renderFooter(initSpec, backstage);\n };\n var renderModalFooter = function (initSpec, backstage) {\n return ModalDialog.parts().footer(renderFooter(initSpec, backstage));\n };\n\n var getCompByName = function (access, name) {\n var root = access.getRoot();\n if (root.getSystem().isConnected()) {\n var form_1 = Composing.getCurrent(access.getFormWrapper()).getOr(access.getFormWrapper());\n return Form.getField(form_1, name).fold(function () {\n var footer = access.getFooter();\n var footerState = Reflecting.getState(footer);\n return footerState.get().bind(function (f) {\n return f.lookupByName(form_1, name);\n });\n }, function (comp) {\n return Option.some(comp);\n });\n } else {\n return Option.none();\n }\n };\n var validateData = function (access, data) {\n var root = access.getRoot();\n return Reflecting.getState(root).get().map(function (dialogState) {\n return getOrDie(asRaw('data', dialogState.dataValidator, data));\n }).getOr(data);\n };\n var getDialogApi = function (access, doRedial, menuItemStates) {\n var withRoot = function (f) {\n var root = access.getRoot();\n if (root.getSystem().isConnected()) {\n f(root);\n }\n };\n var getData = function () {\n var root = access.getRoot();\n var valueComp = root.getSystem().isConnected() ? access.getFormWrapper() : root;\n var representedValues = Representing.getValue(valueComp);\n var menuItemCurrentState = map$1(menuItemStates, function (cell) {\n return cell.get();\n });\n return __assign(__assign({}, representedValues), menuItemCurrentState);\n };\n var setData = function (newData) {\n withRoot(function (_) {\n var prevData = instanceApi.getData();\n var mergedData = __assign(__assign({}, prevData), newData);\n var newInternalData = validateData(access, mergedData);\n var form = access.getFormWrapper();\n Representing.setValue(form, newInternalData);\n each$1(menuItemStates, function (v, k) {\n if (has(mergedData, k)) {\n v.set(mergedData[k]);\n }\n });\n });\n };\n var disable = function (name) {\n getCompByName(access, name).each(Disabling.disable);\n };\n var enable = function (name) {\n getCompByName(access, name).each(Disabling.enable);\n };\n var focus = function (name) {\n getCompByName(access, name).each(Focusing.focus);\n };\n var block = function (message) {\n if (!isString(message)) {\n throw new Error('The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument');\n }\n withRoot(function (root) {\n emitWith(root, formBlockEvent, { message: message });\n });\n };\n var unblock = function () {\n withRoot(function (root) {\n emit(root, formUnblockEvent);\n });\n };\n var showTab = function (name) {\n withRoot(function (_) {\n var body = access.getBody();\n var bodyState = Reflecting.getState(body);\n if (bodyState.get().exists(function (b) {\n return b.isTabPanel();\n })) {\n Composing.getCurrent(body).each(function (tabSection) {\n TabSection.showTab(tabSection, name);\n });\n }\n });\n };\n var redial = function (d) {\n withRoot(function (root) {\n var dialogInit = doRedial(d);\n root.getSystem().broadcastOn([dialogChannel], dialogInit);\n root.getSystem().broadcastOn([titleChannel], dialogInit.internalDialog);\n root.getSystem().broadcastOn([bodyChannel], dialogInit.internalDialog);\n root.getSystem().broadcastOn([footerChannel], dialogInit.internalDialog);\n instanceApi.setData(dialogInit.initialData);\n });\n };\n var close = function () {\n withRoot(function (root) {\n emit(root, formCloseEvent);\n });\n };\n var instanceApi = {\n getData: getData,\n setData: setData,\n disable: disable,\n enable: enable,\n focus: focus,\n block: block,\n unblock: unblock,\n showTab: showTab,\n redial: redial,\n close: close\n };\n return instanceApi;\n };\n\n var renderDialog$1 = function (dialogInit, extra, backstage) {\n var header = getHeader(dialogInit.internalDialog.title, backstage);\n var body = renderModalBody({ body: dialogInit.internalDialog.body }, backstage);\n var storagedMenuButtons = mapMenuButtons(dialogInit.internalDialog.buttons);\n var objOfCells = extractCellsToObject(storagedMenuButtons);\n var footer = renderModalFooter({ buttons: storagedMenuButtons }, backstage);\n var dialogEvents = SilverDialogEvents.initDialog(function () {\n return instanceApi;\n }, getEventExtras(function () {\n return dialog;\n }, extra), backstage.shared.getSink);\n var dialogSize = dialogInit.internalDialog.size !== 'normal' ? dialogInit.internalDialog.size === 'large' ? ['tox-dialog--width-lg'] : ['tox-dialog--width-md'] : [];\n var spec = {\n header: header,\n body: body,\n footer: Option.some(footer),\n extraClasses: dialogSize,\n extraBehaviours: [],\n extraStyles: {}\n };\n var dialog = renderModalDialog(spec, dialogInit, dialogEvents, backstage);\n var modalAccess = function () {\n var getForm = function () {\n var outerForm = ModalDialog.getBody(dialog);\n return Composing.getCurrent(outerForm).getOr(outerForm);\n };\n return {\n getRoot: function () {\n return dialog;\n },\n getBody: function () {\n return ModalDialog.getBody(dialog);\n },\n getFooter: function () {\n return ModalDialog.getFooter(dialog);\n },\n getFormWrapper: getForm\n };\n }();\n var instanceApi = getDialogApi(modalAccess, extra.redial, objOfCells);\n return {\n dialog: dialog,\n instanceApi: instanceApi\n };\n };\n\n var renderInlineDialog = function (dialogInit, extra, backstage, ariaAttrs) {\n var _a, _b;\n var dialogLabelId = generate$1('dialog-label');\n var dialogContentId = generate$1('dialog-content');\n var updateState = function (_comp, incoming) {\n return Option.some(incoming);\n };\n var memHeader = record(renderInlineHeader({\n title: dialogInit.internalDialog.title,\n draggable: true\n }, dialogLabelId, backstage.shared.providers));\n var memBody = record(renderInlineBody({ body: dialogInit.internalDialog.body }, dialogContentId, backstage, ariaAttrs));\n var storagedMenuButtons = mapMenuButtons(dialogInit.internalDialog.buttons);\n var objOfCells = extractCellsToObject(storagedMenuButtons);\n var memFooter = record(renderInlineFooter({ buttons: storagedMenuButtons }, backstage));\n var dialogEvents = SilverDialogEvents.initDialog(function () {\n return instanceApi;\n }, {\n onBlock: function () {\n },\n onUnblock: function () {\n },\n onClose: function () {\n return extra.closeWindow();\n }\n }, backstage.shared.getSink);\n var dialog = build$1({\n dom: {\n tag: 'div',\n classes: [\n 'tox-dialog',\n 'tox-dialog-inline'\n ],\n attributes: (_a = { role: 'dialog' }, _a['aria-labelledby'] = dialogLabelId, _a['aria-describedby'] = '' + dialogContentId, _a)\n },\n eventOrder: (_b = {}, _b[receive()] = [\n Reflecting.name(),\n Receiving.name()\n ], _b[execute()] = ['execute-on-form'], _b[attachedToDom()] = [\n 'reflecting',\n 'execute-on-form'\n ], _b),\n behaviours: derive$1([\n Keying.config({\n mode: 'cyclic',\n onEscape: function (c) {\n emit(c, formCloseEvent);\n return Option.some(true);\n },\n useTabstopAt: function (elem) {\n return !NavigableObject.isPseudoStop(elem) && (name(elem) !== 'button' || get$2(elem, 'disabled') !== 'disabled');\n }\n }),\n Reflecting.config({\n channel: dialogChannel,\n updateState: updateState,\n initialData: dialogInit\n }),\n Focusing.config({}),\n config('execute-on-form', dialogEvents.concat([runOnSource(focusin(), function (comp, se) {\n Keying.focusIn(comp);\n })])),\n RepresentingConfigs.memory({})\n ]),\n components: [\n memHeader.asSpec(),\n memBody.asSpec(),\n memFooter.asSpec()\n ]\n });\n var instanceApi = getDialogApi({\n getRoot: function () {\n return dialog;\n },\n getFooter: function () {\n return memFooter.get(dialog);\n },\n getBody: function () {\n return memBody.get(dialog);\n },\n getFormWrapper: function () {\n var body = memBody.get(dialog);\n return Composing.getCurrent(body).getOr(body);\n }\n }, extra.redial, objOfCells);\n return {\n dialog: dialog,\n instanceApi: instanceApi\n };\n };\n\n var global$g = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n var getUrlDialogApi = function (root) {\n var withRoot = function (f) {\n if (root.getSystem().isConnected()) {\n f(root);\n }\n };\n var block = function (message) {\n if (!isString(message)) {\n throw new Error('The urlDialogInstanceAPI.block function should be passed a blocking message of type string as an argument');\n }\n withRoot(function (root) {\n emitWith(root, formBlockEvent, { message: message });\n });\n };\n var unblock = function () {\n withRoot(function (root) {\n emit(root, formUnblockEvent);\n });\n };\n var close = function () {\n withRoot(function (root) {\n emit(root, formCloseEvent);\n });\n };\n var sendMessage = function (data) {\n withRoot(function (root) {\n root.getSystem().broadcastOn([bodySendMessageChannel], data);\n });\n };\n return {\n block: block,\n unblock: unblock,\n close: close,\n sendMessage: sendMessage\n };\n };\n\n var SUPPORTED_MESSAGE_ACTIONS = [\n 'insertContent',\n 'setContent',\n 'execCommand',\n 'close',\n 'block',\n 'unblock'\n ];\n var isSupportedMessage = function (data) {\n return isObject(data) && SUPPORTED_MESSAGE_ACTIONS.indexOf(data.mceAction) !== -1;\n };\n var isCustomMessage = function (data) {\n return !isSupportedMessage(data) && isObject(data) && has(data, 'mceAction');\n };\n var handleMessage = function (editor, api, data) {\n switch (data.mceAction) {\n case 'insertContent':\n editor.insertContent(data.content);\n break;\n case 'setContent':\n editor.setContent(data.content);\n break;\n case 'execCommand':\n var ui = isBoolean(data.ui) ? data.ui : false;\n editor.execCommand(data.cmd, ui, data.value);\n break;\n case 'close':\n api.close();\n break;\n case 'block':\n api.block(data.message);\n break;\n case 'unblock':\n api.unblock();\n break;\n }\n };\n var renderUrlDialog = function (internalDialog, extra, editor, backstage) {\n var _a;\n var header = getHeader(internalDialog.title, backstage);\n var body = renderIframeBody(internalDialog);\n var footer = internalDialog.buttons.bind(function (buttons) {\n if (buttons.length === 0) {\n return Option.none();\n } else {\n return Option.some(renderModalFooter({ buttons: buttons }, backstage));\n }\n });\n var dialogEvents = SilverDialogEvents.initUrlDialog(function () {\n return instanceApi;\n }, getEventExtras(function () {\n return dialog;\n }, extra));\n var styles = __assign(__assign({}, internalDialog.height.fold(function () {\n return {};\n }, function (height) {\n return {\n 'height': height + 'px',\n 'max-height': height + 'px'\n };\n })), internalDialog.width.fold(function () {\n return {};\n }, function (width) {\n return {\n 'width': width + 'px',\n 'max-width': width + 'px'\n };\n }));\n var classes = internalDialog.width.isNone() && internalDialog.height.isNone() ? ['tox-dialog--width-lg'] : [];\n var iframeUri = new global$g(internalDialog.url, { base_uri: new global$g(domGlobals.window.location.href) });\n var iframeDomain = iframeUri.protocol + '://' + iframeUri.host + (iframeUri.port ? ':' + iframeUri.port : '');\n var messageHandlerUnbinder = Cell(Option.none());\n var extraBehaviours = [\n config('messages', [\n runOnAttached(function () {\n var unbind = bind$3(Element.fromDom(domGlobals.window), 'message', function (e) {\n if (iframeUri.isSameOrigin(new global$g(e.raw().origin))) {\n var data = e.raw().data;\n if (isSupportedMessage(data)) {\n handleMessage(editor, instanceApi, data);\n } else if (isCustomMessage(data)) {\n internalDialog.onMessage(instanceApi, data);\n }\n }\n });\n messageHandlerUnbinder.set(Option.some(unbind));\n }),\n runOnDetached(function () {\n messageHandlerUnbinder.get().each(function (unbinder) {\n return unbinder.unbind();\n });\n })\n ]),\n Receiving.config({\n channels: (_a = {}, _a[bodySendMessageChannel] = {\n onReceive: function (comp, data) {\n descendant$1(comp.element(), 'iframe').each(function (iframeEle) {\n var iframeWin = iframeEle.dom().contentWindow;\n iframeWin.postMessage(data, iframeDomain);\n });\n }\n }, _a)\n })\n ];\n var spec = {\n header: header,\n body: body,\n footer: footer,\n extraClasses: classes,\n extraBehaviours: extraBehaviours,\n extraStyles: styles\n };\n var dialog = renderModalDialog(spec, internalDialog, dialogEvents, backstage);\n var instanceApi = getUrlDialogApi(dialog);\n return {\n dialog: dialog,\n instanceApi: instanceApi\n };\n };\n\n var setup$c = function (extras) {\n var sharedBackstage = extras.backstage.shared;\n var open = function (message, callback) {\n var closeDialog = function () {\n ModalDialog.hide(alertDialog);\n callback();\n };\n var memFooterClose = record(renderFooterButton({\n name: 'close-alert',\n text: 'OK',\n primary: true,\n align: 'end',\n disabled: false,\n icon: Option.none()\n }, 'cancel', extras.backstage));\n var titleSpec = pUntitled();\n var closeSpec = pClose(closeDialog, sharedBackstage.providers);\n var alertDialog = build$1(renderDialog({\n lazySink: function () {\n return sharedBackstage.getSink();\n },\n header: hiddenHeader(titleSpec, closeSpec),\n body: pBodyMessage(message, sharedBackstage.providers),\n footer: Option.some(pFooter(pFooterGroup([], [memFooterClose.asSpec()]))),\n onEscape: closeDialog,\n extraClasses: ['tox-alert-dialog'],\n extraBehaviours: [],\n extraStyles: {},\n dialogEvents: [run(formCancelEvent, closeDialog)],\n eventOrder: {}\n }));\n ModalDialog.show(alertDialog);\n var footerCloseButton = memFooterClose.get(alertDialog);\n Focusing.focus(footerCloseButton);\n };\n return { open: open };\n };\n\n var setup$d = function (extras) {\n var sharedBackstage = extras.backstage.shared;\n var open = function (message, callback) {\n var closeDialog = function (state) {\n ModalDialog.hide(confirmDialog);\n callback(state);\n };\n var memFooterYes = record(renderFooterButton({\n name: 'yes',\n text: 'Yes',\n primary: true,\n align: 'end',\n disabled: false,\n icon: Option.none()\n }, 'submit', extras.backstage));\n var footerNo = renderFooterButton({\n name: 'no',\n text: 'No',\n primary: false,\n align: 'end',\n disabled: false,\n icon: Option.none()\n }, 'cancel', extras.backstage);\n var titleSpec = pUntitled();\n var closeSpec = pClose(function () {\n return closeDialog(false);\n }, sharedBackstage.providers);\n var confirmDialog = build$1(renderDialog({\n lazySink: function () {\n return sharedBackstage.getSink();\n },\n header: hiddenHeader(titleSpec, closeSpec),\n body: pBodyMessage(message, sharedBackstage.providers),\n footer: Option.some(pFooter(pFooterGroup([], [\n footerNo,\n memFooterYes.asSpec()\n ]))),\n onEscape: function () {\n return closeDialog(false);\n },\n extraClasses: ['tox-confirm-dialog'],\n extraBehaviours: [],\n extraStyles: {},\n dialogEvents: [\n run(formCancelEvent, function () {\n return closeDialog(false);\n }),\n run(formSubmitEvent, function () {\n return closeDialog(true);\n })\n ],\n eventOrder: {}\n }));\n ModalDialog.show(confirmDialog);\n var footerYesButton = memFooterYes.get(confirmDialog);\n Focusing.focus(footerYesButton);\n };\n return { open: open };\n };\n\n var validateData$1 = function (data, validator) {\n return getOrDie(asRaw('data', validator, data));\n };\n var isAlertOrConfirmDialog = function (target) {\n return closest$4(target, '.tox-alert-dialog') || closest$4(target, '.tox-confirm-dialog');\n };\n var inlineAdditionalBehaviours = function (editor, isStickyToolbar, isToolbarLocationTop) {\n if (isStickyToolbar && isToolbarLocationTop) {\n return [];\n } else {\n return [Docking.config({\n contextual: {\n lazyContext: function () {\n return Option.some(box(Element.fromDom(editor.getContentAreaContainer())));\n },\n fadeInClass: 'tox-dialog-dock-fadein',\n fadeOutClass: 'tox-dialog-dock-fadeout',\n transitionClass: 'tox-dialog-dock-transition'\n },\n modes: ['top']\n })];\n }\n };\n var setup$e = function (extras) {\n var backstage = extras.backstage;\n var editor = extras.editor;\n var isStickyToolbar$1 = isStickyToolbar(editor);\n var isToolbarLocationTop$1 = isToolbarLocationTop(editor);\n var alertDialog = setup$c(extras);\n var confirmDialog = setup$d(extras);\n var open = function (config, params, closeWindow) {\n if (params !== undefined && params.inline === 'toolbar') {\n return openInlineDialog(config, backstage.shared.anchors.inlineDialog(), closeWindow, params.ariaAttrs);\n } else if (params !== undefined && params.inline === 'cursor') {\n return openInlineDialog(config, backstage.shared.anchors.cursor(), closeWindow, params.ariaAttrs);\n } else {\n return openModalDialog(config, closeWindow);\n }\n };\n var openUrl = function (config, closeWindow) {\n return openModalUrlDialog(config, closeWindow);\n };\n var openModalUrlDialog = function (config, closeWindow) {\n var factory = function (contents) {\n var dialog = renderUrlDialog(contents, {\n closeWindow: function () {\n ModalDialog.hide(dialog.dialog);\n closeWindow(dialog.instanceApi);\n }\n }, editor, backstage);\n ModalDialog.show(dialog.dialog);\n return dialog.instanceApi;\n };\n return DialogManager.openUrl(factory, config);\n };\n var openModalDialog = function (config, closeWindow) {\n var factory = function (contents, internalInitialData, dataValidator) {\n var initialData = internalInitialData;\n var dialogInit = {\n dataValidator: dataValidator,\n initialData: initialData,\n internalDialog: contents\n };\n var dialog = renderDialog$1(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: function () {\n ModalDialog.hide(dialog.dialog);\n closeWindow(dialog.instanceApi);\n }\n }, backstage);\n ModalDialog.show(dialog.dialog);\n dialog.instanceApi.setData(initialData);\n return dialog.instanceApi;\n };\n return DialogManager.open(factory, config);\n };\n var openInlineDialog = function (config$1, anchor, closeWindow, ariaAttrs) {\n var factory = function (contents, internalInitialData, dataValidator) {\n var initialData = validateData$1(internalInitialData, dataValidator);\n var inlineDialog = value$3();\n var dialogInit = {\n dataValidator: dataValidator,\n initialData: initialData,\n internalDialog: contents\n };\n var refreshDocking = function () {\n return inlineDialog.on(function (dialog) {\n InlineView.reposition(dialog);\n Docking.refresh(dialog);\n });\n };\n var dialogUi = renderInlineDialog(dialogInit, {\n redial: DialogManager.redial,\n closeWindow: function () {\n inlineDialog.on(InlineView.hide);\n editor.off('ResizeEditor', refreshDocking);\n inlineDialog.clear();\n closeWindow(dialogUi.instanceApi);\n }\n }, backstage, ariaAttrs);\n var inlineDialogComp = build$1(InlineView.sketch(__assign(__assign({\n lazySink: backstage.shared.getSink,\n dom: {\n tag: 'div',\n classes: []\n },\n fireDismissalEventInstead: {}\n }, isToolbarLocationTop$1 ? {} : { fireRepositionEventInstead: {} }), {\n inlineBehaviours: derive$1(__spreadArrays([config('window-manager-inline-events', [run(dismissRequested(), function (comp, se) {\n emit(dialogUi.dialog, formCancelEvent);\n })])], inlineAdditionalBehaviours(editor, isStickyToolbar$1, isToolbarLocationTop$1))),\n isExtraPart: function (comp, target) {\n return isAlertOrConfirmDialog(target);\n }\n })));\n inlineDialog.set(inlineDialogComp);\n InlineView.showWithin(inlineDialogComp, anchor, premade$1(dialogUi.dialog), Option.some(body()));\n if (!isStickyToolbar$1 || !isToolbarLocationTop$1) {\n Docking.refresh(inlineDialogComp);\n editor.on('ResizeEditor', refreshDocking);\n }\n dialogUi.instanceApi.setData(initialData);\n Keying.focusIn(dialogUi.dialog);\n return dialogUi.instanceApi;\n };\n return DialogManager.open(factory, config$1);\n };\n var confirm = function (message, callback) {\n confirmDialog.open(message, function (state) {\n callback(state);\n });\n };\n var alert = function (message, callback) {\n alertDialog.open(message, function () {\n callback();\n });\n };\n var close = function (instanceApi) {\n instanceApi.close();\n };\n return {\n open: open,\n openUrl: openUrl,\n alert: alert,\n close: close,\n confirm: confirm\n };\n };\n var WindowManager = { setup: setup$e };\n\n function Theme () {\n global$1.add('silver', function (editor) {\n var _a = Render.setup(editor), uiMothership = _a.uiMothership, backstage = _a.backstage, renderUI = _a.renderUI, getUi = _a.getUi;\n Autocompleter.register(editor, backstage.shared);\n var windowMgr = WindowManager.setup({\n editor: editor,\n backstage: backstage\n });\n return {\n renderUI: renderUI,\n getWindowManagerImpl: constant(windowMgr),\n getNotificationManagerImpl: function () {\n return NotificationManagerImpl(editor, { backstage: backstage }, uiMothership);\n },\n ui: getUi()\n };\n });\n }\n\n Theme();\n\n}(window));\n","module.exports = __webpack_public_path__ + \"/tinymce/skins/content/dark//content.css\";","// Exports the \"table\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/table')\n// ES2015:\n// import 'tinymce/plugins/table'\nrequire('./plugin.js');","// Exports the \"advlist\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/advlist')\n// ES2015:\n// import 'tinymce/plugins/advlist'\nrequire('./plugin.js');","// Exports the \"preview\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/preview')\n// ES2015:\n// import 'tinymce/plugins/preview'\nrequire('./plugin.js');","// Exports the \"help\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/help')\n// ES2015:\n// import 'tinymce/plugins/help'\nrequire('./plugin.js');","// Exports the \"silver\" theme for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/themes/silver')\n// ES2015:\n// import 'tinymce/themes/silver'\nrequire('./theme.js');","// Exports the \"visualblocks\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/visualblocks')\n// ES2015:\n// import 'tinymce/plugins/visualblocks'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var isNamedAnchor = function (editor, node) {\n return node.tagName === 'A' && editor.dom.getAttrib(node, 'href') === '';\n };\n var isValidId = function (id) {\n return /^[A-Za-z][A-Za-z0-9\\-:._]*$/.test(id);\n };\n var getId = function (editor) {\n var selectedNode = editor.selection.getNode();\n return isNamedAnchor(editor, selectedNode) ? selectedNode.getAttribute('id') || selectedNode.getAttribute('name') : '';\n };\n var insert = function (editor, id) {\n var selectedNode = editor.selection.getNode();\n if (isNamedAnchor(editor, selectedNode)) {\n selectedNode.removeAttribute('name');\n selectedNode.id = id;\n editor.undoManager.add();\n } else {\n editor.focus();\n editor.selection.collapse(true);\n editor.insertContent(editor.dom.createHTML('a', { id: id }));\n }\n };\n var Anchor = {\n isValidId: isValidId,\n getId: getId,\n insert: insert\n };\n\n var insertAnchor = function (editor, newId) {\n if (!Anchor.isValidId(newId)) {\n editor.windowManager.alert('Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.');\n return false;\n } else {\n Anchor.insert(editor, newId);\n return true;\n }\n };\n var open = function (editor) {\n var currentId = Anchor.getId(editor);\n editor.windowManager.open({\n title: 'Anchor',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n name: 'id',\n type: 'input',\n label: 'ID',\n placeholder: 'example'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: { id: currentId },\n onSubmit: function (api) {\n if (insertAnchor(editor, api.getData().id)) {\n api.close();\n }\n }\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mceAnchor', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var isNamedAnchorNode = function (node) {\n return !node.attr('href') && (node.attr('id') || node.attr('name')) && !node.firstChild;\n };\n var setContentEditable = function (state) {\n return function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n if (isNamedAnchorNode(nodes[i])) {\n nodes[i].attr('contenteditable', state);\n }\n }\n };\n };\n var setup = function (editor) {\n editor.on('PreInit', function () {\n editor.parser.addNodeFilter('a', setContentEditable('false'));\n editor.serializer.addNodeFilter('a', setContentEditable(null));\n });\n };\n var FilterContent = { setup: setup };\n\n var register$1 = function (editor) {\n editor.ui.registry.addToggleButton('anchor', {\n icon: 'bookmark',\n tooltip: 'Anchor',\n onAction: function () {\n return editor.execCommand('mceAnchor');\n },\n onSetup: function (buttonApi) {\n return editor.selection.selectorChangedWithUnbind('a:not([href])', buttonApi.setActive).unbind;\n }\n });\n editor.ui.registry.addMenuItem('anchor', {\n icon: 'bookmark',\n text: 'Anchor...',\n onAction: function () {\n return editor.execCommand('mceAnchor');\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('anchor', function (editor) {\n FilterContent.setup(editor);\n Commands.register(editor);\n Buttons.register(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var fireInsertCustomChar = function (editor, chr) {\n return editor.fire('insertCustomChar', { chr: chr });\n };\n var Events = { fireInsertCustomChar: fireInsertCustomChar };\n\n var insertChar = function (editor, chr) {\n var evtChr = Events.fireInsertCustomChar(editor, chr).chr;\n editor.execCommand('mceInsertContent', false, evtChr);\n };\n var Actions = { insertChar: insertChar };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getCharMap = function (editor) {\n return editor.settings.charmap;\n };\n var getCharMapAppend = function (editor) {\n return editor.settings.charmap_append;\n };\n var Settings = {\n getCharMap: getCharMap,\n getCharMapAppend: getCharMapAppend\n };\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 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\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 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 return flatten(map(xs, f));\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var isArray$1 = global$1.isArray;\n var UserDefined = 'User Defined';\n var getDefaultCharMap = function () {\n return [\n {\n name: 'Currency',\n characters: [\n [\n 36,\n 'dollar sign'\n ],\n [\n 162,\n 'cent sign'\n ],\n [\n 8364,\n 'euro sign'\n ],\n [\n 163,\n 'pound sign'\n ],\n [\n 165,\n 'yen sign'\n ],\n [\n 164,\n 'currency sign'\n ],\n [\n 8352,\n 'euro-currency sign'\n ],\n [\n 8353,\n 'colon sign'\n ],\n [\n 8354,\n 'cruzeiro sign'\n ],\n [\n 8355,\n 'french franc sign'\n ],\n [\n 8356,\n 'lira sign'\n ],\n [\n 8357,\n 'mill sign'\n ],\n [\n 8358,\n 'naira sign'\n ],\n [\n 8359,\n 'peseta sign'\n ],\n [\n 8360,\n 'rupee sign'\n ],\n [\n 8361,\n 'won sign'\n ],\n [\n 8362,\n 'new sheqel sign'\n ],\n [\n 8363,\n 'dong sign'\n ],\n [\n 8365,\n 'kip sign'\n ],\n [\n 8366,\n 'tugrik sign'\n ],\n [\n 8367,\n 'drachma sign'\n ],\n [\n 8368,\n 'german penny symbol'\n ],\n [\n 8369,\n 'peso sign'\n ],\n [\n 8370,\n 'guarani sign'\n ],\n [\n 8371,\n 'austral sign'\n ],\n [\n 8372,\n 'hryvnia sign'\n ],\n [\n 8373,\n 'cedi sign'\n ],\n [\n 8374,\n 'livre tournois sign'\n ],\n [\n 8375,\n 'spesmilo sign'\n ],\n [\n 8376,\n 'tenge sign'\n ],\n [\n 8377,\n 'indian rupee sign'\n ],\n [\n 8378,\n 'turkish lira sign'\n ],\n [\n 8379,\n 'nordic mark sign'\n ],\n [\n 8380,\n 'manat sign'\n ],\n [\n 8381,\n 'ruble sign'\n ],\n [\n 20870,\n 'yen character'\n ],\n [\n 20803,\n 'yuan character'\n ],\n [\n 22291,\n 'yuan character, in hong kong and taiwan'\n ],\n [\n 22278,\n 'yen/yuan character variant one'\n ]\n ]\n },\n {\n name: 'Text',\n characters: [\n [\n 169,\n 'copyright sign'\n ],\n [\n 174,\n 'registered sign'\n ],\n [\n 8482,\n 'trade mark sign'\n ],\n [\n 8240,\n 'per mille sign'\n ],\n [\n 181,\n 'micro sign'\n ],\n [\n 183,\n 'middle dot'\n ],\n [\n 8226,\n 'bullet'\n ],\n [\n 8230,\n 'three dot leader'\n ],\n [\n 8242,\n 'minutes / feet'\n ],\n [\n 8243,\n 'seconds / inches'\n ],\n [\n 167,\n 'section sign'\n ],\n [\n 182,\n 'paragraph sign'\n ],\n [\n 223,\n 'sharp s / ess-zed'\n ]\n ]\n },\n {\n name: 'Quotations',\n characters: [\n [\n 8249,\n 'single left-pointing angle quotation mark'\n ],\n [\n 8250,\n 'single right-pointing angle quotation mark'\n ],\n [\n 171,\n 'left pointing guillemet'\n ],\n [\n 187,\n 'right pointing guillemet'\n ],\n [\n 8216,\n 'left single quotation mark'\n ],\n [\n 8217,\n 'right single quotation mark'\n ],\n [\n 8220,\n 'left double quotation mark'\n ],\n [\n 8221,\n 'right double quotation mark'\n ],\n [\n 8218,\n 'single low-9 quotation mark'\n ],\n [\n 8222,\n 'double low-9 quotation mark'\n ],\n [\n 60,\n 'less-than sign'\n ],\n [\n 62,\n 'greater-than sign'\n ],\n [\n 8804,\n 'less-than or equal to'\n ],\n [\n 8805,\n 'greater-than or equal to'\n ],\n [\n 8211,\n 'en dash'\n ],\n [\n 8212,\n 'em dash'\n ],\n [\n 175,\n 'macron'\n ],\n [\n 8254,\n 'overline'\n ],\n [\n 164,\n 'currency sign'\n ],\n [\n 166,\n 'broken bar'\n ],\n [\n 168,\n 'diaeresis'\n ],\n [\n 161,\n 'inverted exclamation mark'\n ],\n [\n 191,\n 'turned question mark'\n ],\n [\n 710,\n 'circumflex accent'\n ],\n [\n 732,\n 'small tilde'\n ],\n [\n 176,\n 'degree sign'\n ],\n [\n 8722,\n 'minus sign'\n ],\n [\n 177,\n 'plus-minus sign'\n ],\n [\n 247,\n 'division sign'\n ],\n [\n 8260,\n 'fraction slash'\n ],\n [\n 215,\n 'multiplication sign'\n ],\n [\n 185,\n 'superscript one'\n ],\n [\n 178,\n 'superscript two'\n ],\n [\n 179,\n 'superscript three'\n ],\n [\n 188,\n 'fraction one quarter'\n ],\n [\n 189,\n 'fraction one half'\n ],\n [\n 190,\n 'fraction three quarters'\n ]\n ]\n },\n {\n name: 'Mathematical',\n characters: [\n [\n 402,\n 'function / florin'\n ],\n [\n 8747,\n 'integral'\n ],\n [\n 8721,\n 'n-ary sumation'\n ],\n [\n 8734,\n 'infinity'\n ],\n [\n 8730,\n 'square root'\n ],\n [\n 8764,\n 'similar to'\n ],\n [\n 8773,\n 'approximately equal to'\n ],\n [\n 8776,\n 'almost equal to'\n ],\n [\n 8800,\n 'not equal to'\n ],\n [\n 8801,\n 'identical to'\n ],\n [\n 8712,\n 'element of'\n ],\n [\n 8713,\n 'not an element of'\n ],\n [\n 8715,\n 'contains as member'\n ],\n [\n 8719,\n 'n-ary product'\n ],\n [\n 8743,\n 'logical and'\n ],\n [\n 8744,\n 'logical or'\n ],\n [\n 172,\n 'not sign'\n ],\n [\n 8745,\n 'intersection'\n ],\n [\n 8746,\n 'union'\n ],\n [\n 8706,\n 'partial differential'\n ],\n [\n 8704,\n 'for all'\n ],\n [\n 8707,\n 'there exists'\n ],\n [\n 8709,\n 'diameter'\n ],\n [\n 8711,\n 'backward difference'\n ],\n [\n 8727,\n 'asterisk operator'\n ],\n [\n 8733,\n 'proportional to'\n ],\n [\n 8736,\n 'angle'\n ]\n ]\n },\n {\n name: 'Extended Latin',\n characters: [\n [\n 192,\n 'A - grave'\n ],\n [\n 193,\n 'A - acute'\n ],\n [\n 194,\n 'A - circumflex'\n ],\n [\n 195,\n 'A - tilde'\n ],\n [\n 196,\n 'A - diaeresis'\n ],\n [\n 197,\n 'A - ring above'\n ],\n [\n 256,\n 'A - macron'\n ],\n [\n 198,\n 'ligature AE'\n ],\n [\n 199,\n 'C - cedilla'\n ],\n [\n 200,\n 'E - grave'\n ],\n [\n 201,\n 'E - acute'\n ],\n [\n 202,\n 'E - circumflex'\n ],\n [\n 203,\n 'E - diaeresis'\n ],\n [\n 274,\n 'E - macron'\n ],\n [\n 204,\n 'I - grave'\n ],\n [\n 205,\n 'I - acute'\n ],\n [\n 206,\n 'I - circumflex'\n ],\n [\n 207,\n 'I - diaeresis'\n ],\n [\n 298,\n 'I - macron'\n ],\n [\n 208,\n 'ETH'\n ],\n [\n 209,\n 'N - tilde'\n ],\n [\n 210,\n 'O - grave'\n ],\n [\n 211,\n 'O - acute'\n ],\n [\n 212,\n 'O - circumflex'\n ],\n [\n 213,\n 'O - tilde'\n ],\n [\n 214,\n 'O - diaeresis'\n ],\n [\n 216,\n 'O - slash'\n ],\n [\n 332,\n 'O - macron'\n ],\n [\n 338,\n 'ligature OE'\n ],\n [\n 352,\n 'S - caron'\n ],\n [\n 217,\n 'U - grave'\n ],\n [\n 218,\n 'U - acute'\n ],\n [\n 219,\n 'U - circumflex'\n ],\n [\n 220,\n 'U - diaeresis'\n ],\n [\n 362,\n 'U - macron'\n ],\n [\n 221,\n 'Y - acute'\n ],\n [\n 376,\n 'Y - diaeresis'\n ],\n [\n 562,\n 'Y - macron'\n ],\n [\n 222,\n 'THORN'\n ],\n [\n 224,\n 'a - grave'\n ],\n [\n 225,\n 'a - acute'\n ],\n [\n 226,\n 'a - circumflex'\n ],\n [\n 227,\n 'a - tilde'\n ],\n [\n 228,\n 'a - diaeresis'\n ],\n [\n 229,\n 'a - ring above'\n ],\n [\n 257,\n 'a - macron'\n ],\n [\n 230,\n 'ligature ae'\n ],\n [\n 231,\n 'c - cedilla'\n ],\n [\n 232,\n 'e - grave'\n ],\n [\n 233,\n 'e - acute'\n ],\n [\n 234,\n 'e - circumflex'\n ],\n [\n 235,\n 'e - diaeresis'\n ],\n [\n 275,\n 'e - macron'\n ],\n [\n 236,\n 'i - grave'\n ],\n [\n 237,\n 'i - acute'\n ],\n [\n 238,\n 'i - circumflex'\n ],\n [\n 239,\n 'i - diaeresis'\n ],\n [\n 299,\n 'i - macron'\n ],\n [\n 240,\n 'eth'\n ],\n [\n 241,\n 'n - tilde'\n ],\n [\n 242,\n 'o - grave'\n ],\n [\n 243,\n 'o - acute'\n ],\n [\n 244,\n 'o - circumflex'\n ],\n [\n 245,\n 'o - tilde'\n ],\n [\n 246,\n 'o - diaeresis'\n ],\n [\n 248,\n 'o slash'\n ],\n [\n 333,\n 'o macron'\n ],\n [\n 339,\n 'ligature oe'\n ],\n [\n 353,\n 's - caron'\n ],\n [\n 249,\n 'u - grave'\n ],\n [\n 250,\n 'u - acute'\n ],\n [\n 251,\n 'u - circumflex'\n ],\n [\n 252,\n 'u - diaeresis'\n ],\n [\n 363,\n 'u - macron'\n ],\n [\n 253,\n 'y - acute'\n ],\n [\n 254,\n 'thorn'\n ],\n [\n 255,\n 'y - diaeresis'\n ],\n [\n 563,\n 'y - macron'\n ],\n [\n 913,\n 'Alpha'\n ],\n [\n 914,\n 'Beta'\n ],\n [\n 915,\n 'Gamma'\n ],\n [\n 916,\n 'Delta'\n ],\n [\n 917,\n 'Epsilon'\n ],\n [\n 918,\n 'Zeta'\n ],\n [\n 919,\n 'Eta'\n ],\n [\n 920,\n 'Theta'\n ],\n [\n 921,\n 'Iota'\n ],\n [\n 922,\n 'Kappa'\n ],\n [\n 923,\n 'Lambda'\n ],\n [\n 924,\n 'Mu'\n ],\n [\n 925,\n 'Nu'\n ],\n [\n 926,\n 'Xi'\n ],\n [\n 927,\n 'Omicron'\n ],\n [\n 928,\n 'Pi'\n ],\n [\n 929,\n 'Rho'\n ],\n [\n 931,\n 'Sigma'\n ],\n [\n 932,\n 'Tau'\n ],\n [\n 933,\n 'Upsilon'\n ],\n [\n 934,\n 'Phi'\n ],\n [\n 935,\n 'Chi'\n ],\n [\n 936,\n 'Psi'\n ],\n [\n 937,\n 'Omega'\n ],\n [\n 945,\n 'alpha'\n ],\n [\n 946,\n 'beta'\n ],\n [\n 947,\n 'gamma'\n ],\n [\n 948,\n 'delta'\n ],\n [\n 949,\n 'epsilon'\n ],\n [\n 950,\n 'zeta'\n ],\n [\n 951,\n 'eta'\n ],\n [\n 952,\n 'theta'\n ],\n [\n 953,\n 'iota'\n ],\n [\n 954,\n 'kappa'\n ],\n [\n 955,\n 'lambda'\n ],\n [\n 956,\n 'mu'\n ],\n [\n 957,\n 'nu'\n ],\n [\n 958,\n 'xi'\n ],\n [\n 959,\n 'omicron'\n ],\n [\n 960,\n 'pi'\n ],\n [\n 961,\n 'rho'\n ],\n [\n 962,\n 'final sigma'\n ],\n [\n 963,\n 'sigma'\n ],\n [\n 964,\n 'tau'\n ],\n [\n 965,\n 'upsilon'\n ],\n [\n 966,\n 'phi'\n ],\n [\n 967,\n 'chi'\n ],\n [\n 968,\n 'psi'\n ],\n [\n 969,\n 'omega'\n ]\n ]\n },\n {\n name: 'Symbols',\n characters: [\n [\n 8501,\n 'alef symbol'\n ],\n [\n 982,\n 'pi symbol'\n ],\n [\n 8476,\n 'real part symbol'\n ],\n [\n 978,\n 'upsilon - hook symbol'\n ],\n [\n 8472,\n 'Weierstrass p'\n ],\n [\n 8465,\n 'imaginary part'\n ]\n ]\n },\n {\n name: 'Arrows',\n characters: [\n [\n 8592,\n 'leftwards arrow'\n ],\n [\n 8593,\n 'upwards arrow'\n ],\n [\n 8594,\n 'rightwards arrow'\n ],\n [\n 8595,\n 'downwards arrow'\n ],\n [\n 8596,\n 'left right arrow'\n ],\n [\n 8629,\n 'carriage return'\n ],\n [\n 8656,\n 'leftwards double arrow'\n ],\n [\n 8657,\n 'upwards double arrow'\n ],\n [\n 8658,\n 'rightwards double arrow'\n ],\n [\n 8659,\n 'downwards double arrow'\n ],\n [\n 8660,\n 'left right double arrow'\n ],\n [\n 8756,\n 'therefore'\n ],\n [\n 8834,\n 'subset of'\n ],\n [\n 8835,\n 'superset of'\n ],\n [\n 8836,\n 'not a subset of'\n ],\n [\n 8838,\n 'subset of or equal to'\n ],\n [\n 8839,\n 'superset of or equal to'\n ],\n [\n 8853,\n 'circled plus'\n ],\n [\n 8855,\n 'circled times'\n ],\n [\n 8869,\n 'perpendicular'\n ],\n [\n 8901,\n 'dot operator'\n ],\n [\n 8968,\n 'left ceiling'\n ],\n [\n 8969,\n 'right ceiling'\n ],\n [\n 8970,\n 'left floor'\n ],\n [\n 8971,\n 'right floor'\n ],\n [\n 9001,\n 'left-pointing angle bracket'\n ],\n [\n 9002,\n 'right-pointing angle bracket'\n ],\n [\n 9674,\n 'lozenge'\n ],\n [\n 9824,\n 'black spade suit'\n ],\n [\n 9827,\n 'black club suit'\n ],\n [\n 9829,\n 'black heart suit'\n ],\n [\n 9830,\n 'black diamond suit'\n ],\n [\n 8194,\n 'en space'\n ],\n [\n 8195,\n 'em space'\n ],\n [\n 8201,\n 'thin space'\n ],\n [\n 8204,\n 'zero width non-joiner'\n ],\n [\n 8205,\n 'zero width joiner'\n ],\n [\n 8206,\n 'left-to-right mark'\n ],\n [\n 8207,\n 'right-to-left mark'\n ]\n ]\n }\n ];\n };\n var charmapFilter = function (charmap) {\n return global$1.grep(charmap, function (item) {\n return isArray$1(item) && item.length === 2;\n });\n };\n var getCharsFromSetting = function (settingValue) {\n if (isArray$1(settingValue)) {\n return [].concat(charmapFilter(settingValue));\n }\n if (typeof settingValue === 'function') {\n return settingValue();\n }\n return [];\n };\n var extendCharMap = function (editor, charmap) {\n var userCharMap = Settings.getCharMap(editor);\n if (userCharMap) {\n charmap = [{\n name: UserDefined,\n characters: getCharsFromSetting(userCharMap)\n }];\n }\n var userCharMapAppend = Settings.getCharMapAppend(editor);\n if (userCharMapAppend) {\n var userDefinedGroup = global$1.grep(charmap, function (cg) {\n return cg.name === UserDefined;\n });\n if (userDefinedGroup.length) {\n userDefinedGroup[0].characters = [].concat(userDefinedGroup[0].characters).concat(getCharsFromSetting(userCharMapAppend));\n return charmap;\n }\n return [].concat(charmap).concat({\n name: UserDefined,\n characters: getCharsFromSetting(userCharMapAppend)\n });\n }\n return charmap;\n };\n var getCharMap$1 = function (editor) {\n var groups = extendCharMap(editor, getDefaultCharMap());\n return groups.length > 1 ? [{\n name: 'All',\n characters: bind(groups, function (g) {\n return g.characters;\n })\n }].concat(groups) : groups;\n };\n var CharMap = { getCharMap: getCharMap$1 };\n\n var get = function (editor) {\n var getCharMap = function () {\n return CharMap.getCharMap(editor);\n };\n var insertChar = function (chr) {\n Actions.insertChar(editor, chr);\n };\n return {\n getCharMap: getCharMap,\n insertChar: insertChar\n };\n };\n var Api = { get: get };\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 last = 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 contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n\n var charMatches = function (charCode, name, lowerCasePattern) {\n if (contains(String.fromCharCode(charCode).toLowerCase(), lowerCasePattern)) {\n return true;\n } else {\n return contains(name.toLowerCase(), lowerCasePattern) || contains(name.toLowerCase().replace(/\\s+/g, ''), lowerCasePattern);\n }\n };\n var scan = function (group, pattern) {\n var matches = [];\n var lowerCasePattern = pattern.toLowerCase();\n each(group.characters, function (g) {\n if (charMatches(g[0], g[1], lowerCasePattern)) {\n matches.push(g);\n }\n });\n return map(matches, function (m) {\n return {\n text: m[1],\n value: String.fromCharCode(m[0]),\n icon: String.fromCharCode(m[0])\n };\n });\n };\n var Scan = { scan: scan };\n\n var patternName = 'pattern';\n var open = function (editor, charMap) {\n var makeGroupItems = function () {\n return [\n {\n label: 'Search',\n type: 'input',\n name: patternName\n },\n {\n type: 'collection',\n name: 'results'\n }\n ];\n };\n var makeTabs = function () {\n return map(charMap, function (charGroup) {\n return {\n title: charGroup.name,\n name: charGroup.name,\n items: makeGroupItems()\n };\n });\n };\n var makePanel = function () {\n return {\n type: 'panel',\n items: makeGroupItems()\n };\n };\n var makeTabPanel = function () {\n return {\n type: 'tabpanel',\n tabs: makeTabs()\n };\n };\n var currentTab = charMap.length === 1 ? Cell(UserDefined) : Cell('All');\n var scanAndSet = function (dialogApi, pattern) {\n find(charMap, function (group) {\n return group.name === currentTab.get();\n }).each(function (f) {\n var items = Scan.scan(f, pattern);\n dialogApi.setData({ results: items });\n });\n };\n var SEARCH_DELAY = 40;\n var updateFilter = last(function (dialogApi) {\n var pattern = dialogApi.getData().pattern;\n scanAndSet(dialogApi, pattern);\n }, SEARCH_DELAY);\n var body = charMap.length === 1 ? makePanel() : makeTabPanel();\n var initialData = {\n pattern: '',\n results: Scan.scan(charMap[0], '')\n };\n var bridgeSpec = {\n title: 'Special Character',\n size: 'normal',\n body: body,\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData: initialData,\n onAction: function (api, details) {\n if (details.name === 'results') {\n Actions.insertChar(editor, details.value);\n api.close();\n }\n },\n onTabChange: function (dialogApi, details) {\n currentTab.set(details.newTabName);\n updateFilter.throttle(dialogApi);\n },\n onChange: function (dialogApi, changeData) {\n if (changeData.name === patternName) {\n updateFilter.throttle(dialogApi);\n }\n }\n };\n var dialogApi = editor.windowManager.open(bridgeSpec);\n dialogApi.focus(patternName);\n };\n var Dialog = { open: open };\n\n var register = function (editor, charMap) {\n editor.addCommand('mceShowCharmap', function () {\n Dialog.open(editor, charMap);\n });\n };\n var Commands = { register: register };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var init = function (editor, all) {\n editor.ui.registry.addAutocompleter('charmap', {\n ch: ':',\n columns: 'auto',\n minChars: 2,\n fetch: function (pattern, maxResults) {\n return new global$2(function (resolve, reject) {\n resolve(Scan.scan(all, pattern));\n });\n },\n onAction: function (autocompleteApi, rng, value) {\n editor.selection.setRng(rng);\n editor.insertContent(value);\n autocompleteApi.hide();\n }\n });\n };\n\n var register$1 = function (editor) {\n editor.ui.registry.addButton('charmap', {\n icon: 'insert-character',\n tooltip: 'Special character',\n onAction: function () {\n return editor.execCommand('mceShowCharmap');\n }\n });\n editor.ui.registry.addMenuItem('charmap', {\n icon: 'insert-character',\n text: 'Special character...',\n onAction: function () {\n return editor.execCommand('mceShowCharmap');\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('charmap', function (editor) {\n var charMap = CharMap.getCharMap(editor);\n Commands.register(editor, charMap);\n Buttons.register(editor);\n init(editor, charMap[0]);\n return Api.get(editor);\n });\n }\n\n Plugin();\n\n}(window));\n","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide-dark//content.css\";","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\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 return flatten(map(xs, f));\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 compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\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\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 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 chromeos = 'ChromeOS';\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 isChromeOS: isOS(chromeos, 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 chromeos: constant(chromeos)\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var isDesktop = !isPhone && !isTablet && !iOSwebview;\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 isDesktop: constant(isDesktop)\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('mac os x'),\n versionRegexes: [/.*?mac\\ 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 name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent, mediaMatch) {\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, mediaMatch);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var mediaMatch = function (query) {\n return domGlobals.window.matchMedia(query).matches;\n };\n var platform = Cell(PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch));\n var detect$3 = function () {\n return platform.get();\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 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 = detect$3().browser;\n var contains$1 = browser.isIE() ? ieContains : regularContains;\n var is$1 = is;\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 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 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 fireListEvent = function (editor, action, element) {\n return editor.fire('ListMutation', {\n action: action,\n element: element\n });\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$4 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\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 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$4.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$4.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 shouldIndentOnTab = function (editor) {\n return editor.getParam('lists_indent_on_tab', true);\n };\n var getForcedRootBlock = function (editor) {\n var block = editor.getParam('forced_root_block', 'p');\n if (block === false) {\n return '';\n } else if (block === true) {\n return 'p';\n } else {\n return block;\n }\n };\n var getForcedRootBlockAttrs = function (editor) {\n return editor.getParam('forced_root_block_attrs', {});\n };\n var Settings = {\n shouldIndentOnTab: shouldIndentOnTab,\n getForcedRootBlock: getForcedRootBlock,\n getForcedRootBlockAttrs: getForcedRootBlockAttrs\n };\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 blockName = Settings.getForcedRootBlock(editor);\n var node, textBlock, hasContentNode;\n if (blockName) {\n textBlock = dom.create(blockName);\n if (textBlock.tagName === blockName.toUpperCase()) {\n dom.setAttribs(textBlock, Settings.getForcedRootBlockAttrs(editor));\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 (!blockName) {\n fragment.appendChild(dom.create('br'));\n } else {\n if (!hasContentNode) {\n textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n return fragment;\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 cloneListProperties = function (target, source) {\n target.listType = source.listType;\n target.listAttributes = __assign({}, 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 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 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 listIndentation = function (editor, lists, indentation) {\n var entrySets = parseLists(lists, getItemSelection(editor));\n each(entrySets, function (entrySet) {\n indentSelectedEntries(entrySet.entries, indentation);\n var composedLists = composeEntries(editor, entrySet.entries);\n each(composedLists, function (composedList) {\n fireListEvent(editor, indentation === 'Indent' ? 'IndentList' : 'OutdentList', composedList.dom());\n });\n before$1(entrySet.sourceList, composedLists);\n remove(entrySet.sourceList);\n });\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var DOM = 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.remove(targetNode);\n };\n bookmarks = DOM.select('span[data-mce-type=\"bookmark\"]', ul);\n newBlock = createTextBlock(editor, li);\n tmpRng = DOM.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.remove(node);\n break;\n }\n }\n if (!editor.dom.isEmpty(fragment)) {\n DOM.insertAfter(fragment, ul);\n }\n DOM.insertAfter(newBlock, ul);\n if (NodeType.isEmpty(editor.dom, li.parentNode)) {\n removeAndKeepBookmarks(li.parentNode);\n }\n DOM.remove(li);\n if (NodeType.isEmpty(editor.dom, ul)) {\n DOM.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 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 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 listIndentation(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 global$7 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');\n\n var DOM$1 = 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$1.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$1.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$1.remove(node);\n if (!container.hasChildNodes() && DOM$1.isBlock(container)) {\n container.appendChild(DOM$1.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$1.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 isCustomList = function (list) {\n return /\\btox\\-/.test(list.className);\n };\n\n var listToggleActionFromListName = function (listName) {\n switch (listName) {\n case 'UL':\n return 'ToggleUlList';\n case 'OL':\n return 'ToggleOlList';\n case 'DL':\n return 'ToggleDLList';\n }\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$7.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 (editor, list, listName, detail) {\n if (list.nodeName !== listName) {\n var newList = editor.dom.rename(list, listName);\n updateListWithDetails(editor.dom, newList, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n } else {\n updateListWithDetails(editor.dom, list, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), list);\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, 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) && !isCustomList(parentList)) {\n flattenListSelection(editor);\n } else {\n var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));\n updateListWithDetails(editor.dom, parentList, detail);\n var newList = editor.dom.rename(parentList, listName);\n mergeWithAdjacentLists(editor.dom, newList);\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n }\n } else {\n applyList(editor, listName, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), parentList);\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 if (NodeType.isTextNode(node) && (isForward ? offset < node.data.length : offset > 0)) {\n return node;\n }\n var nonEmptyBlocks = editor.schema.getNonEmptyElements();\n if (node.nodeType === 1) {\n node = global$1.getNode(node, offset);\n }\n var 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 (NodeType.isTextNode(node) && 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 if (li) {\n var ul = li.parentNode;\n if (ul === editor.getBody() && NodeType.isEmpty(dom, ul)) {\n return true;\n }\n var rng_1 = Range.normalizeRange(selection.getRng());\n var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng_1, isForward, root), 'LI', root);\n if (otherLi_1 && otherLi_1 !== li) {\n editor.undoManager.transact(function () {\n if (isForward) {\n mergeForward(editor, rng_1, otherLi_1, li);\n } else {\n if (NodeType.isFirstChild(li)) {\n outdentListSelection(editor);\n } else {\n mergeBackward(editor, rng_1, li, otherLi_1);\n }\n }\n });\n return true;\n } else if (!otherLi_1) {\n if (!isForward && rng_1.startOffset === 0 && rng_1.endOffset === 0) {\n editor.undoManager.transact(function () {\n flattenListSelection(editor);\n });\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());\n var otherLi_2 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi_2) {\n editor.undoManager.transact(function () {\n removeBlock(dom, block, root);\n ToggleList.mergeWithAdjacentLists(dom, otherLi_2.parentNode);\n editor.selection.select(otherLi_2, 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 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 (buttonApi) {\n var nodeChangeHandler = 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 buttonApi.setActive(lists.length > 0 && lists[0].nodeName === listName && !isCustomList(lists[0]));\n };\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\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 var exec = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n if (!hasPlugin(editor, 'advlist')) {\n editor.ui.registry.addToggleButton('numlist', {\n icon: 'ordered-list',\n active: false,\n tooltip: 'Numbered list',\n onAction: exec('InsertOrderedList'),\n onSetup: listState(editor, 'OL')\n });\n editor.ui.registry.addToggleButton('bullist', {\n icon: 'unordered-list',\n active: false,\n tooltip: 'Bullet list',\n onAction: exec('InsertUnorderedList'),\n onSetup: listState(editor, 'UL')\n });\n }\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\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 }\n\n Plugin();\n\n}(window));\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var getAutoLinkPattern = function (editor) {\n return editor.getParam('autolink_pattern', /^(https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.|(?:mailto:)?[A-Z0-9._%+\\-]+@)(.+)$/i);\n };\n var getDefaultLinkTarget = function (editor) {\n return editor.getParam('default_link_target', false);\n };\n var getDefaultLinkProtocol = function (editor) {\n return editor.getParam('link_default_protocol', 'http', 'string');\n };\n var Settings = {\n getAutoLinkPattern: getAutoLinkPattern,\n getDefaultLinkTarget: getDefaultLinkTarget,\n getDefaultLinkProtocol: getDefaultLinkProtocol\n };\n\n var rangeEqualsDelimiterOrSpace = function (rangeString, delimiter) {\n return rangeString === delimiter || rangeString === ' ' || rangeString.charCodeAt(0) === 160;\n };\n var handleEclipse = function (editor) {\n parseCurrentLine(editor, -1, '(');\n };\n var handleSpacebar = function (editor) {\n parseCurrentLine(editor, 0, '');\n };\n var handleEnter = function (editor) {\n parseCurrentLine(editor, -1, '');\n };\n var scopeIndex = function (container, index) {\n if (index < 0) {\n index = 0;\n }\n if (container.nodeType === 3) {\n var len = container.data.length;\n if (index > len) {\n index = len;\n }\n }\n return index;\n };\n var setStart = function (rng, container, offset) {\n if (container.nodeType !== 1 || container.hasChildNodes()) {\n rng.setStart(container, scopeIndex(container, offset));\n } else {\n rng.setStartBefore(container);\n }\n };\n var setEnd = function (rng, container, offset) {\n if (container.nodeType !== 1 || container.hasChildNodes()) {\n rng.setEnd(container, scopeIndex(container, offset));\n } else {\n rng.setEndAfter(container);\n }\n };\n var parseCurrentLine = function (editor, endOffset, delimiter) {\n var rng, end, start, endContainer, bookmark, text, matches, prev, len, rngText;\n var autoLinkPattern = Settings.getAutoLinkPattern(editor);\n var defaultLinkTarget = Settings.getDefaultLinkTarget(editor);\n if (editor.selection.getNode().tagName === 'A') {\n return;\n }\n rng = editor.selection.getRng(true).cloneRange();\n if (rng.startOffset < 5) {\n prev = rng.endContainer.previousSibling;\n if (!prev) {\n if (!rng.endContainer.firstChild || !rng.endContainer.firstChild.nextSibling) {\n return;\n }\n prev = rng.endContainer.firstChild.nextSibling;\n }\n len = prev.length;\n setStart(rng, prev, len);\n setEnd(rng, prev, len);\n if (rng.endOffset < 5) {\n return;\n }\n end = rng.endOffset;\n endContainer = prev;\n } else {\n endContainer = rng.endContainer;\n if (endContainer.nodeType !== 3 && endContainer.firstChild) {\n while (endContainer.nodeType !== 3 && endContainer.firstChild) {\n endContainer = endContainer.firstChild;\n }\n if (endContainer.nodeType === 3) {\n setStart(rng, endContainer, 0);\n setEnd(rng, endContainer, endContainer.nodeValue.length);\n }\n }\n if (rng.endOffset === 1) {\n end = 2;\n } else {\n end = rng.endOffset - 1 - endOffset;\n }\n }\n start = end;\n do {\n setStart(rng, endContainer, end >= 2 ? end - 2 : 0);\n setEnd(rng, endContainer, end >= 1 ? end - 1 : 0);\n end -= 1;\n rngText = rng.toString();\n } while (rngText !== ' ' && rngText !== '' && rngText.charCodeAt(0) !== 160 && end - 2 >= 0 && rngText !== delimiter);\n if (rangeEqualsDelimiterOrSpace(rng.toString(), delimiter)) {\n setStart(rng, endContainer, end);\n setEnd(rng, endContainer, start);\n end += 1;\n } else if (rng.startOffset === 0) {\n setStart(rng, endContainer, 0);\n setEnd(rng, endContainer, start);\n } else {\n setStart(rng, endContainer, end);\n setEnd(rng, endContainer, start);\n }\n text = rng.toString();\n if (text.charAt(text.length - 1) === '.') {\n setEnd(rng, endContainer, start - 1);\n }\n text = rng.toString().trim();\n matches = text.match(autoLinkPattern);\n var protocol = Settings.getDefaultLinkProtocol(editor);\n if (matches) {\n if (matches[1] === 'www.') {\n matches[1] = protocol + '://www.';\n } else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) {\n matches[1] = 'mailto:' + matches[1];\n }\n bookmark = editor.selection.getBookmark();\n editor.selection.setRng(rng);\n editor.execCommand('createlink', false, matches[1] + matches[2]);\n if (defaultLinkTarget !== false) {\n editor.dom.setAttrib(editor.selection.getNode(), 'target', defaultLinkTarget);\n }\n editor.selection.moveToBookmark(bookmark);\n editor.nodeChanged();\n }\n };\n var setup = function (editor) {\n var autoUrlDetectState;\n editor.on('keydown', function (e) {\n if (e.keyCode === 13) {\n return handleEnter(editor);\n }\n });\n if (global$1.browser.isIE()) {\n editor.on('focus', function () {\n if (!autoUrlDetectState) {\n autoUrlDetectState = true;\n try {\n editor.execCommand('AutoUrlDetect', false, true);\n } catch (ex) {\n }\n }\n });\n return;\n }\n editor.on('keypress', function (e) {\n if (e.keyCode === 41) {\n return handleEclipse(editor);\n }\n });\n editor.on('keyup', function (e) {\n if (e.keyCode === 32) {\n return handleSpacebar(editor);\n }\n });\n };\n var Keys = { setup: setup };\n\n function Plugin () {\n global.add('autolink', function (editor) {\n Keys.setup(editor);\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\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 global = tinymce.util.Tools.resolve('tinymce.PluginManager');\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\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 punctuationStr = '[!-#%-*,-\\\\/:;?@\\\\[-\\\\]_{}\\xA1\\xAB\\xB7\\xBB\\xBF;\\xB7\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1361-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u3008\\u3009\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30\\u2E31\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uff3f\\uFF5B\\uFF5D\\uFF5F-\\uFF65]';\n\n var punctuation = constant(punctuationStr);\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 punctuation$1 = punctuation;\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n function isContentEditableFalse(node) {\n return node && node.nodeType === 1 && node.contentEditable === 'false';\n }\n function findAndReplaceDOMText(regex, node, replacementNode, captureGroup, schema) {\n var m;\n var matches = [];\n var text, count = 0, doc;\n var blockElementsMap, hiddenTextElementsMap, shortEndedElementsMap;\n doc = node.ownerDocument;\n blockElementsMap = schema.getBlockElements();\n hiddenTextElementsMap = schema.getWhiteSpaceElements();\n shortEndedElementsMap = schema.getShortEndedElements();\n function getMatchIndexes(m, captureGroup) {\n captureGroup = captureGroup || 0;\n if (!m[0]) {\n throw new Error('findAndReplaceDOMText cannot handle zero-length matches');\n }\n var index = m.index;\n if (captureGroup > 0) {\n var cg = m[captureGroup];\n if (!cg) {\n throw new Error('Invalid capture group');\n }\n index += m[0].indexOf(cg);\n m[0] = cg;\n }\n return [\n index,\n index + m[0].length,\n [m[0]]\n ];\n }\n function getText(node) {\n var txt;\n if (node.nodeType === 3) {\n return node.data;\n }\n if (hiddenTextElementsMap[node.nodeName] && !blockElementsMap[node.nodeName]) {\n return '';\n }\n txt = '';\n if (isContentEditableFalse(node)) {\n return '\\n';\n }\n if (blockElementsMap[node.nodeName] || shortEndedElementsMap[node.nodeName]) {\n txt += '\\n';\n }\n if (node = node.firstChild) {\n do {\n txt += getText(node);\n } while (node = node.nextSibling);\n }\n return txt;\n }\n function stepThroughMatches(node, matches, replaceFn) {\n var startNode, endNode, startNodeIndex, endNodeIndex, innerNodes = [], atIndex = 0, curNode = node, matchLocation = matches.shift(), matchIndex = 0;\n out:\n while (true) {\n if (blockElementsMap[curNode.nodeName] || shortEndedElementsMap[curNode.nodeName] || isContentEditableFalse(curNode)) {\n atIndex++;\n }\n if (curNode.nodeType === 3) {\n if (!endNode && curNode.length + atIndex >= matchLocation[1]) {\n endNode = curNode;\n endNodeIndex = matchLocation[1] - atIndex;\n } else if (startNode) {\n innerNodes.push(curNode);\n }\n if (!startNode && curNode.length + atIndex > matchLocation[0]) {\n startNode = curNode;\n startNodeIndex = matchLocation[0] - atIndex;\n }\n atIndex += curNode.length;\n }\n if (startNode && endNode) {\n curNode = replaceFn({\n startNode: startNode,\n startNodeIndex: startNodeIndex,\n endNode: endNode,\n endNodeIndex: endNodeIndex,\n innerNodes: innerNodes,\n match: matchLocation[2],\n matchIndex: matchIndex\n });\n atIndex -= endNode.length - endNodeIndex;\n startNode = null;\n endNode = null;\n innerNodes = [];\n matchLocation = matches.shift();\n matchIndex++;\n if (!matchLocation) {\n break;\n }\n } else if ((!hiddenTextElementsMap[curNode.nodeName] || blockElementsMap[curNode.nodeName]) && curNode.firstChild) {\n if (!isContentEditableFalse(curNode)) {\n curNode = curNode.firstChild;\n continue;\n }\n } else if (curNode.nextSibling) {\n curNode = curNode.nextSibling;\n continue;\n }\n while (true) {\n if (curNode.nextSibling) {\n curNode = curNode.nextSibling;\n break;\n } else if (curNode.parentNode !== node) {\n curNode = curNode.parentNode;\n } else {\n break out;\n }\n }\n }\n }\n function genReplacer(nodeName) {\n var makeReplacementNode;\n if (typeof nodeName !== 'function') {\n var stencilNode_1 = nodeName.nodeType ? nodeName : doc.createElement(nodeName);\n makeReplacementNode = function (fill, matchIndex) {\n var clone = stencilNode_1.cloneNode(false);\n clone.setAttribute('data-mce-index', matchIndex);\n if (fill) {\n clone.appendChild(doc.createTextNode(fill));\n }\n return clone;\n };\n } else {\n makeReplacementNode = nodeName;\n }\n return function (range) {\n var before;\n var after;\n var parentNode;\n var startNode = range.startNode;\n var endNode = range.endNode;\n var matchIndex = range.matchIndex;\n if (startNode === endNode) {\n var node_1 = startNode;\n parentNode = node_1.parentNode;\n if (range.startNodeIndex > 0) {\n before = doc.createTextNode(node_1.data.substring(0, range.startNodeIndex));\n parentNode.insertBefore(before, node_1);\n }\n var el = makeReplacementNode(range.match[0], matchIndex);\n parentNode.insertBefore(el, node_1);\n if (range.endNodeIndex < node_1.length) {\n after = doc.createTextNode(node_1.data.substring(range.endNodeIndex));\n parentNode.insertBefore(after, node_1);\n }\n node_1.parentNode.removeChild(node_1);\n return el;\n }\n before = doc.createTextNode(startNode.data.substring(0, range.startNodeIndex));\n after = doc.createTextNode(endNode.data.substring(range.endNodeIndex));\n var elA = makeReplacementNode(startNode.data.substring(range.startNodeIndex), matchIndex);\n for (var i = 0, l = range.innerNodes.length; i < l; ++i) {\n var innerNode = range.innerNodes[i];\n var innerEl = makeReplacementNode(innerNode.data, matchIndex);\n innerNode.parentNode.replaceChild(innerEl, innerNode);\n }\n var elB = makeReplacementNode(endNode.data.substring(0, range.endNodeIndex), matchIndex);\n parentNode = startNode.parentNode;\n parentNode.insertBefore(before, startNode);\n parentNode.insertBefore(elA, startNode);\n parentNode.removeChild(startNode);\n parentNode = endNode.parentNode;\n parentNode.insertBefore(elB, endNode);\n parentNode.insertBefore(after, endNode);\n parentNode.removeChild(endNode);\n return elB;\n };\n }\n text = getText(node);\n if (!text) {\n return;\n }\n if (regex.global) {\n while (m = regex.exec(text)) {\n matches.push(getMatchIndexes(m, captureGroup));\n }\n } else {\n m = text.match(regex);\n matches.push(getMatchIndexes(m, captureGroup));\n }\n if (matches.length) {\n count = matches.length;\n stepThroughMatches(node, matches, genReplacer(replacementNode));\n }\n return count;\n }\n var FindReplaceText = { findAndReplaceDOMText: findAndReplaceDOMText };\n\n var getElmIndex = function (elm) {\n var value = elm.getAttribute('data-mce-index');\n if (typeof value === 'number') {\n return '' + value;\n }\n return value;\n };\n var markAllMatches = function (editor, currentSearchState, regex) {\n var node, marker;\n marker = editor.dom.create('span', { 'data-mce-bogus': 1 });\n marker.className = 'mce-match-marker';\n node = editor.getBody();\n done(editor, currentSearchState, false);\n return FindReplaceText.findAndReplaceDOMText(regex, node, marker, 1, editor.schema);\n };\n var unwrap = function (node) {\n var parentNode = node.parentNode;\n if (node.firstChild) {\n parentNode.insertBefore(node.firstChild, node);\n }\n node.parentNode.removeChild(node);\n };\n var findSpansByIndex = function (editor, index) {\n var nodes;\n var spans = [];\n nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n if (nodes.length) {\n for (var i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex === null || !nodeIndex.length) {\n continue;\n }\n if (nodeIndex === index.toString()) {\n spans.push(nodes[i]);\n }\n }\n }\n return spans;\n };\n var moveSelection = function (editor, currentSearchState, forward) {\n var searchState = currentSearchState.get();\n var testIndex = searchState.index;\n var dom = editor.dom;\n forward = forward !== false;\n if (forward) {\n if (testIndex + 1 === searchState.count) {\n testIndex = 0;\n } else {\n testIndex++;\n }\n } else {\n if (testIndex - 1 === -1) {\n testIndex = searchState.count - 1;\n } else {\n testIndex--;\n }\n }\n dom.removeClass(findSpansByIndex(editor, searchState.index), 'mce-match-marker-selected');\n var spans = findSpansByIndex(editor, testIndex);\n if (spans.length) {\n dom.addClass(findSpansByIndex(editor, testIndex), 'mce-match-marker-selected');\n editor.selection.scrollIntoView(spans[0]);\n return testIndex;\n }\n return -1;\n };\n var removeNode = function (dom, node) {\n var parent = node.parentNode;\n dom.remove(node);\n if (dom.isEmpty(parent)) {\n dom.remove(parent);\n }\n };\n var escapeSearchText = function (text, wholeWord) {\n var escapedText = text.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&').replace(/\\s/g, '[^\\\\S\\\\r\\\\n]');\n var wordRegex = '(' + escapedText + ')';\n return wholeWord ? '(?:^|\\\\s|' + punctuation$1() + ')' + wordRegex + ('(?=$|\\\\s|' + punctuation$1() + ')') : wordRegex;\n };\n var find = function (editor, currentSearchState, text, matchCase, wholeWord) {\n var escapedText = escapeSearchText(text, wholeWord);\n var count = markAllMatches(editor, currentSearchState, new RegExp(escapedText, matchCase ? 'g' : 'gi'));\n if (count) {\n var newIndex = moveSelection(editor, currentSearchState, true);\n currentSearchState.set({\n index: newIndex,\n count: count,\n text: text,\n matchCase: matchCase,\n wholeWord: wholeWord\n });\n }\n return count;\n };\n var next = function (editor, currentSearchState) {\n var index = moveSelection(editor, currentSearchState, true);\n currentSearchState.set(__assign(__assign({}, currentSearchState.get()), { index: index }));\n };\n var prev = function (editor, currentSearchState) {\n var index = moveSelection(editor, currentSearchState, false);\n currentSearchState.set(__assign(__assign({}, currentSearchState.get()), { index: index }));\n };\n var isMatchSpan = function (node) {\n var matchIndex = getElmIndex(node);\n return matchIndex !== null && matchIndex.length > 0;\n };\n var replace = function (editor, currentSearchState, text, forward, all) {\n var searchState = currentSearchState.get();\n var currentIndex = searchState.index;\n var i, nodes, node, matchIndex, currentMatchIndex, nextIndex = currentIndex;\n forward = forward !== false;\n node = editor.getBody();\n nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan);\n for (i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n matchIndex = currentMatchIndex = parseInt(nodeIndex, 10);\n if (all || matchIndex === searchState.index) {\n if (text.length) {\n nodes[i].firstChild.nodeValue = text;\n unwrap(nodes[i]);\n } else {\n removeNode(editor.dom, nodes[i]);\n }\n while (nodes[++i]) {\n matchIndex = parseInt(getElmIndex(nodes[i]), 10);\n if (matchIndex === currentMatchIndex) {\n removeNode(editor.dom, nodes[i]);\n } else {\n i--;\n break;\n }\n }\n if (forward) {\n nextIndex--;\n }\n } else if (currentMatchIndex > currentIndex) {\n nodes[i].setAttribute('data-mce-index', String(currentMatchIndex - 1));\n }\n }\n currentSearchState.set(__assign(__assign({}, searchState), {\n count: all ? 0 : searchState.count - 1,\n index: nextIndex\n }));\n if (forward) {\n next(editor, currentSearchState);\n } else {\n prev(editor, currentSearchState);\n }\n return !all && currentSearchState.get().count > 0;\n };\n var done = function (editor, currentSearchState, keepEditorSelection) {\n var i, nodes, startContainer, endContainer;\n var searchState = currentSearchState.get();\n nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n for (i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex !== null && nodeIndex.length) {\n if (nodeIndex === searchState.index.toString()) {\n if (!startContainer) {\n startContainer = nodes[i].firstChild;\n }\n endContainer = nodes[i].firstChild;\n }\n unwrap(nodes[i]);\n }\n }\n currentSearchState.set(__assign(__assign({}, searchState), {\n index: -1,\n count: 0,\n text: ''\n }));\n if (startContainer && endContainer) {\n var rng = editor.dom.createRng();\n rng.setStart(startContainer, 0);\n rng.setEnd(endContainer, endContainer.data.length);\n if (keepEditorSelection !== false) {\n editor.selection.setRng(rng);\n }\n return rng;\n }\n };\n var hasNext = function (editor, currentSearchState) {\n return currentSearchState.get().count > 1;\n };\n var hasPrev = function (editor, currentSearchState) {\n return currentSearchState.get().count > 1;\n };\n\n var get = function (editor, currentState) {\n var done$1 = function (keepEditorSelection) {\n return done(editor, currentState, keepEditorSelection);\n };\n var find$1 = function (text, matchCase, wholeWord) {\n return find(editor, currentState, text, matchCase, wholeWord);\n };\n var next$1 = function () {\n return next(editor, currentState);\n };\n var prev$1 = function () {\n return prev(editor, currentState);\n };\n var replace$1 = function (text, forward, all) {\n return replace(editor, currentState, text, forward, all);\n };\n return {\n done: done$1,\n find: find$1,\n next: next$1,\n prev: prev$1,\n replace: replace$1\n };\n };\n var Api = { get: get };\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 isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\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 from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var value = function () {\n var subject = Cell(Option.none());\n var clear = function () {\n subject.set(Option.none());\n };\n var set = function (s) {\n subject.set(Option.some(s));\n };\n var on = function (f) {\n subject.get().each(f);\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\n };\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var open = function (editor, currentSearchState) {\n var dialogApi = value();\n editor.undoManager.add();\n var selectedText = global$1.trim(editor.selection.getContent({ format: 'text' }));\n function updateButtonStates(api) {\n var updateNext = hasNext(editor, currentSearchState) ? api.enable : api.disable;\n updateNext('next');\n var updatePrev = hasPrev(editor, currentSearchState) ? api.enable : api.disable;\n updatePrev('prev');\n }\n var updateSearchState = function (api) {\n var data = api.getData();\n var current = currentSearchState.get();\n currentSearchState.set(__assign(__assign({}, current), {\n matchCase: data.matchcase,\n wholeWord: data.wholewords\n }));\n };\n var disableAll = function (api, disable) {\n var buttons = [\n 'replace',\n 'replaceall',\n 'prev',\n 'next'\n ];\n var toggle = disable ? api.disable : api.enable;\n each(buttons, toggle);\n };\n function notFoundAlert(api) {\n editor.windowManager.alert('Could not find the specified string.', function () {\n api.focus('findtext');\n });\n }\n var focusButtonIfRequired = function (api, name) {\n if (global$2.browser.isSafari() && global$2.deviceType.isTouch() && (name === 'find' || name === 'replace' || name === 'replaceall')) {\n api.focus(name);\n }\n };\n var reset = function (api) {\n done(editor, currentSearchState, false);\n disableAll(api, true);\n updateButtonStates(api);\n };\n var doFind = function (api) {\n var data = api.getData();\n var last = currentSearchState.get();\n if (!data.findtext.length) {\n reset(api);\n return;\n }\n if (last.text === data.findtext && last.matchCase === data.matchcase && last.wholeWord === data.wholewords) {\n next(editor, currentSearchState);\n } else {\n var count = find(editor, currentSearchState, data.findtext, data.matchcase, data.wholewords);\n if (count <= 0) {\n notFoundAlert(api);\n }\n disableAll(api, count === 0);\n }\n updateButtonStates(api);\n };\n var initialState = currentSearchState.get();\n var initialData = {\n findtext: selectedText,\n replacetext: '',\n wholewords: initialState.wholeWord,\n matchcase: initialState.matchCase\n };\n var spec = {\n title: 'Find and Replace',\n size: 'normal',\n body: {\n type: 'panel',\n items: [\n {\n type: 'bar',\n items: [\n {\n type: 'input',\n name: 'findtext',\n placeholder: 'Find',\n maximized: true,\n inputMode: 'search'\n },\n {\n type: 'button',\n name: 'prev',\n text: 'Previous',\n icon: 'action-prev',\n disabled: true,\n borderless: true\n },\n {\n type: 'button',\n name: 'next',\n text: 'Next',\n icon: 'action-next',\n disabled: true,\n borderless: true\n }\n ]\n },\n {\n type: 'input',\n name: 'replacetext',\n placeholder: 'Replace with',\n inputMode: 'search'\n }\n ]\n },\n buttons: [\n {\n type: 'menu',\n name: 'options',\n icon: 'preferences',\n tooltip: 'Preferences',\n align: 'start',\n items: [\n {\n type: 'togglemenuitem',\n name: 'matchcase',\n text: 'Match case'\n },\n {\n type: 'togglemenuitem',\n name: 'wholewords',\n text: 'Find whole words only'\n }\n ]\n },\n {\n type: 'custom',\n name: 'find',\n text: 'Find',\n primary: true\n },\n {\n type: 'custom',\n name: 'replace',\n text: 'Replace',\n disabled: true\n },\n {\n type: 'custom',\n name: 'replaceall',\n text: 'Replace All',\n disabled: true\n }\n ],\n initialData: initialData,\n onChange: function (api, details) {\n if (details.name === 'findtext' && currentSearchState.get().count > 0) {\n reset(api);\n }\n },\n onAction: function (api, details) {\n var data = api.getData();\n switch (details.name) {\n case 'find':\n doFind(api);\n break;\n case 'replace':\n if (!replace(editor, currentSearchState, data.replacetext)) {\n reset(api);\n } else {\n updateButtonStates(api);\n }\n break;\n case 'replaceall':\n replace(editor, currentSearchState, data.replacetext, true, true);\n reset(api);\n break;\n case 'prev':\n prev(editor, currentSearchState);\n updateButtonStates(api);\n break;\n case 'next':\n next(editor, currentSearchState);\n updateButtonStates(api);\n break;\n case 'matchcase':\n case 'wholewords':\n updateSearchState(api);\n reset(api);\n break;\n }\n focusButtonIfRequired(api, details.name);\n },\n onSubmit: function (api) {\n doFind(api);\n focusButtonIfRequired(api, 'find');\n },\n onClose: function () {\n editor.focus();\n done(editor, currentSearchState);\n editor.undoManager.add();\n }\n };\n dialogApi.set(editor.windowManager.open(spec, { inline: 'toolbar' }));\n };\n var Dialog = { open: open };\n\n var register = function (editor, currentSearchState) {\n editor.addCommand('SearchReplace', function () {\n Dialog.open(editor, currentSearchState);\n });\n };\n var Commands = { register: register };\n\n var showDialog = function (editor, currentSearchState) {\n return function () {\n Dialog.open(editor, currentSearchState);\n };\n };\n var register$1 = function (editor, currentSearchState) {\n editor.ui.registry.addMenuItem('searchreplace', {\n text: 'Find and replace...',\n shortcut: 'Meta+F',\n onAction: showDialog(editor, currentSearchState),\n icon: 'search'\n });\n editor.ui.registry.addButton('searchreplace', {\n tooltip: 'Find and replace',\n onAction: showDialog(editor, currentSearchState),\n icon: 'search'\n });\n editor.shortcuts.add('Meta+F', '', showDialog(editor, currentSearchState));\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('searchreplace', function (editor) {\n var currentSearchState = Cell({\n index: -1,\n count: 0,\n text: '',\n matchCase: false,\n wholeWord: false\n });\n Commands.register(editor, currentSearchState);\n Buttons.register(editor, currentSearchState);\n return Api.get(editor, currentSearchState);\n });\n }\n\n Plugin();\n\n}());\n","// Exports the \"autolink\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autolink')\n// ES2015:\n// import 'tinymce/plugins/autolink'\nrequire('./plugin.js');","// Exports the \"fullscreen\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/fullscreen')\n// ES2015:\n// import 'tinymce/plugins/fullscreen'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\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\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 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 isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\n var nativePush = Array.prototype.push;\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 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 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 hasOwnProperty = Object.hasOwnProperty;\n var get = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var getScripts = function (editor) {\n return editor.getParam('media_scripts');\n };\n var getAudioTemplateCallback = function (editor) {\n return editor.getParam('audio_template_callback');\n };\n var getVideoTemplateCallback = function (editor) {\n return editor.getParam('video_template_callback');\n };\n var hasLiveEmbeds = function (editor) {\n return editor.getParam('media_live_embeds', true);\n };\n var shouldFilterHtml = function (editor) {\n return editor.getParam('media_filter_html', true);\n };\n var getUrlResolver = function (editor) {\n return editor.getParam('media_url_resolver');\n };\n var hasAltSource = function (editor) {\n return editor.getParam('media_alt_source', true);\n };\n var hasPoster = function (editor) {\n return editor.getParam('media_poster', true);\n };\n var hasDimensions = function (editor) {\n return editor.getParam('media_dimensions', true);\n };\n var Settings = {\n getScripts: getScripts,\n getAudioTemplateCallback: getAudioTemplateCallback,\n getVideoTemplateCallback: getVideoTemplateCallback,\n hasLiveEmbeds: hasLiveEmbeds,\n shouldFilterHtml: shouldFilterHtml,\n getUrlResolver: getUrlResolver,\n hasAltSource: hasAltSource,\n hasPoster: hasPoster,\n hasDimensions: hasDimensions\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.html.SaxParser');\n\n var getVideoScriptMatch = function (prefixes, src) {\n if (prefixes) {\n for (var i = 0; i < prefixes.length; i++) {\n if (src.indexOf(prefixes[i].filter) !== -1) {\n return prefixes[i];\n }\n }\n }\n };\n\n var DOM = global$2.DOM;\n var trimPx = function (value) {\n return value.replace(/px$/, '');\n };\n var getEphoxEmbedData = function (attrs) {\n var style = attrs.map.style;\n var styles = style ? DOM.parseStyle(style) : {};\n return {\n type: 'ephox-embed-iri',\n source: attrs.map['data-ephox-embed-iri'],\n altsource: '',\n poster: '',\n width: get(styles, 'max-width').map(trimPx).getOr(''),\n height: get(styles, 'max-height').map(trimPx).getOr('')\n };\n };\n var htmlToData = function (prefixes, html) {\n var isEphoxEmbed = Cell(false);\n var data = {};\n global$3({\n validate: false,\n allow_conditional_comments: true,\n start: function (name, attrs) {\n if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {\n isEphoxEmbed.set(true);\n data = getEphoxEmbedData(attrs);\n } else {\n if (!data.source && name === 'param') {\n data.source = attrs.map.movie;\n }\n if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') {\n if (!data.type) {\n data.type = name;\n }\n data = global$1.extend(attrs.map, data);\n }\n if (name === 'script') {\n var videoScript = getVideoScriptMatch(prefixes, attrs.map.src);\n if (!videoScript) {\n return;\n }\n data = {\n type: 'script',\n source: attrs.map.src,\n width: String(videoScript.width),\n height: String(videoScript.height)\n };\n }\n if (name === 'source') {\n if (!data.source) {\n data.source = attrs.map.src;\n } else if (!data.altsource) {\n data.altsource = attrs.map.src;\n }\n }\n if (name === 'img' && !data.poster) {\n data.poster = attrs.map.src;\n }\n }\n }\n }).parse(html);\n data.source = data.source || data.src || data.data;\n data.altsource = data.altsource || '';\n data.poster = data.poster || '';\n return data;\n };\n\n var guess = function (url) {\n var mimes = {\n mp3: 'audio/mpeg',\n m4a: 'audio/x-m4a',\n wav: 'audio/wav',\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n swf: 'application/x-shockwave-flash'\n };\n var fileEnd = url.toLowerCase().split('.').pop();\n var mime = mimes[fileEnd];\n return mime ? mime : '';\n };\n var Mime = { guess: guess };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.html.Schema');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.html.Writer');\n\n var DOM$1 = global$2.DOM;\n var addPx = function (value) {\n return /^[0-9.]+$/.test(value) ? value + 'px' : value;\n };\n var setAttributes = function (attrs, updatedAttrs) {\n for (var name_1 in updatedAttrs) {\n var value = '' + updatedAttrs[name_1];\n if (attrs.map[name_1]) {\n var i = attrs.length;\n while (i--) {\n var attr = attrs[i];\n if (attr.name === name_1) {\n if (value) {\n attrs.map[name_1] = value;\n attr.value = value;\n } else {\n delete attrs.map[name_1];\n attrs.splice(i, 1);\n }\n }\n }\n } else if (value) {\n attrs.push({\n name: name_1,\n value: value\n });\n attrs.map[name_1] = value;\n }\n }\n };\n var updateEphoxEmbed = function (data, attrs) {\n var style = attrs.map.style;\n var styleMap = style ? DOM$1.parseStyle(style) : {};\n styleMap['max-width'] = addPx(data.width);\n styleMap['max-height'] = addPx(data.height);\n setAttributes(attrs, { style: DOM$1.serializeStyle(styleMap) });\n };\n var sources = [\n 'source',\n 'altsource'\n ];\n var updateHtml = function (html, data, updateAll) {\n var writer = global$5();\n var isEphoxEmbed = Cell(false);\n var sourceCount = 0;\n var hasImage;\n global$3({\n validate: false,\n allow_conditional_comments: true,\n comment: function (text) {\n writer.comment(text);\n },\n cdata: function (text) {\n writer.cdata(text);\n },\n text: function (text, raw) {\n writer.text(text, raw);\n },\n start: function (name, attrs, empty) {\n if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {\n isEphoxEmbed.set(true);\n updateEphoxEmbed(data, attrs);\n } else {\n switch (name) {\n case 'video':\n case 'object':\n case 'embed':\n case 'img':\n case 'iframe':\n if (data.height !== undefined && data.width !== undefined) {\n setAttributes(attrs, {\n width: data.width,\n height: data.height\n });\n }\n break;\n }\n if (updateAll) {\n switch (name) {\n case 'video':\n setAttributes(attrs, {\n poster: data.poster,\n src: ''\n });\n if (data.altsource) {\n setAttributes(attrs, { src: '' });\n }\n break;\n case 'iframe':\n setAttributes(attrs, { src: data.source });\n break;\n case 'source':\n if (sourceCount < 2) {\n setAttributes(attrs, {\n src: data[sources[sourceCount]],\n type: data[sources[sourceCount] + 'mime']\n });\n if (!data[sources[sourceCount]]) {\n return;\n }\n }\n sourceCount++;\n break;\n case 'img':\n if (!data.poster) {\n return;\n }\n hasImage = true;\n break;\n }\n }\n }\n writer.start(name, attrs, empty);\n },\n end: function (name) {\n if (!isEphoxEmbed.get()) {\n if (name === 'video' && updateAll) {\n for (var index = 0; index < 2; index++) {\n if (data[sources[index]]) {\n var attrs = [];\n attrs.map = {};\n if (sourceCount < index) {\n setAttributes(attrs, {\n src: data[sources[index]],\n type: data[sources[index] + 'mime']\n });\n writer.start('source', attrs, true);\n }\n }\n }\n }\n if (data.poster && name === 'object' && updateAll && !hasImage) {\n var imgAttrs = [];\n imgAttrs.map = {};\n setAttributes(imgAttrs, {\n src: data.poster,\n width: data.width,\n height: data.height\n });\n writer.start('img', imgAttrs, true);\n }\n }\n writer.end(name);\n }\n }, global$4({})).parse(html);\n return writer.getContent();\n };\n var UpdateHtml = { updateHtml: updateHtml };\n\n var urlPatterns = [\n {\n regex: /youtu\\.be\\/([\\w\\-_\\?&=.]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /youtube\\.com(.+)v=([^&]+)(&([a-z0-9&=\\-_]+))?/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$2?$4',\n allowFullscreen: true\n },\n {\n regex: /youtube.com\\/embed\\/([a-z0-9\\?&=\\-_]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/(.*)\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$2?title=0&byline=0',\n allowFullscreen: true\n },\n {\n regex: /maps\\.google\\.([a-z]{2,3})\\/maps\\/(.+)msid=(.+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'maps.google.com/maps/ms?msid=$2&output=embed\"',\n allowFullscreen: false\n },\n {\n regex: /dailymotion\\.com\\/video\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: 'www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n },\n {\n regex: /dai\\.ly\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: 'www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n }\n ];\n var getProtocol = function (url) {\n var protocolMatches = url.match(/^(https?:\\/\\/|www\\.)(.+)$/i);\n if (protocolMatches && protocolMatches.length > 1) {\n return protocolMatches[1] === 'www.' ? 'https://' : protocolMatches[1];\n } else {\n return 'https://';\n }\n };\n var getUrl = function (pattern, url) {\n var protocol = getProtocol(url);\n var match = pattern.regex.exec(url);\n var newUrl = protocol + pattern.url;\n var _loop_1 = function (i) {\n newUrl = newUrl.replace('$' + i, function () {\n return match[i] ? match[i] : '';\n });\n };\n for (var i = 0; i < match.length; i++) {\n _loop_1(i);\n }\n return newUrl.replace(/\\?$/, '');\n };\n var matchPattern = function (url) {\n var patterns = urlPatterns.filter(function (pattern) {\n return pattern.regex.test(url);\n });\n if (patterns.length > 0) {\n return global$1.extend({}, patterns[0], { url: getUrl(patterns[0], url) });\n } else {\n return null;\n }\n };\n\n var getIframeHtml = function (data) {\n var allowFullscreen = data.allowFullscreen ? ' allowFullscreen=\"1\"' : '';\n return '';\n };\n var getFlashHtml = function (data) {\n var html = '';\n if (data.poster) {\n html += '';\n }\n html += '';\n return html;\n };\n var getAudioHtml = function (data, audioTemplateCallback) {\n if (audioTemplateCallback) {\n return audioTemplateCallback(data);\n } else {\n return '';\n }\n };\n var getVideoHtml = function (data, videoTemplateCallback) {\n if (videoTemplateCallback) {\n return videoTemplateCallback(data);\n } else {\n return '';\n }\n };\n var getScriptHtml = function (data) {\n return '';\n };\n var dataToHtml = function (editor, dataIn) {\n var data = global$1.extend({}, dataIn);\n if (!data.source) {\n global$1.extend(data, htmlToData(Settings.getScripts(editor), data.embed));\n if (!data.source) {\n return '';\n }\n }\n if (!data.altsource) {\n data.altsource = '';\n }\n if (!data.poster) {\n data.poster = '';\n }\n data.source = editor.convertURL(data.source, 'source');\n data.altsource = editor.convertURL(data.altsource, 'source');\n data.sourcemime = Mime.guess(data.source);\n data.altsourcemime = Mime.guess(data.altsource);\n data.poster = editor.convertURL(data.poster, 'poster');\n var pattern = matchPattern(data.source);\n if (pattern) {\n data.source = pattern.url;\n data.type = pattern.type;\n data.allowFullscreen = pattern.allowFullscreen;\n data.width = data.width || String(pattern.w);\n data.height = data.height || String(pattern.h);\n }\n if (data.embed) {\n return UpdateHtml.updateHtml(data.embed, data, true);\n } else {\n var videoScript = getVideoScriptMatch(Settings.getScripts(editor), data.source);\n if (videoScript) {\n data.type = 'script';\n data.width = String(videoScript.width);\n data.height = String(videoScript.height);\n }\n var audioTemplateCallback = Settings.getAudioTemplateCallback(editor);\n var videoTemplateCallback = Settings.getVideoTemplateCallback(editor);\n data.width = data.width || '300';\n data.height = data.height || '150';\n global$1.each(data, function (value, key) {\n data[key] = editor.dom.encode('' + value);\n });\n if (data.type === 'iframe') {\n return getIframeHtml(data);\n } else if (data.sourcemime === 'application/x-shockwave-flash') {\n return getFlashHtml(data);\n } else if (data.sourcemime.indexOf('audio') !== -1) {\n return getAudioHtml(data, audioTemplateCallback);\n } else if (data.type === 'script') {\n return getScriptHtml(data);\n } else {\n return getVideoHtml(data, videoTemplateCallback);\n }\n }\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var cache = {};\n var embedPromise = function (data, dataToHtml, handler) {\n return new global$6(function (res, rej) {\n var wrappedResolve = function (response) {\n if (response.html) {\n cache[data.source] = response;\n }\n return res({\n url: data.source,\n html: response.html ? response.html : dataToHtml(data)\n });\n };\n if (cache[data.source]) {\n wrappedResolve(cache[data.source]);\n } else {\n handler({ url: data.source }, wrappedResolve, rej);\n }\n });\n };\n var defaultPromise = function (data, dataToHtml) {\n return new global$6(function (res) {\n res({\n html: dataToHtml(data),\n url: data.source\n });\n });\n };\n var loadedData = function (editor) {\n return function (data) {\n return dataToHtml(editor, data);\n };\n };\n var getEmbedHtml = function (editor, data) {\n var embedHandler = Settings.getUrlResolver(editor);\n return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));\n };\n var isCached = function (url) {\n return cache.hasOwnProperty(url);\n };\n var Service = {\n getEmbedHtml: getEmbedHtml,\n isCached: isCached\n };\n\n var extractMeta = function (sourceInput, data) {\n return get(data, sourceInput).bind(function (mainData) {\n return get(mainData, 'meta');\n });\n };\n var getValue = function (data, metaData, sourceInput) {\n return function (prop) {\n var _a;\n var getFromData = function () {\n return get(data, prop);\n };\n var getFromMetaData = function () {\n return get(metaData, prop);\n };\n var getNonEmptyValue = function (c) {\n return get(c, 'value').bind(function (v) {\n return v.length > 0 ? Option.some(v) : Option.none();\n });\n };\n var getFromValueFirst = function () {\n return getFromData().bind(function (child) {\n return isObject(child) ? getNonEmptyValue(child).orThunk(getFromMetaData) : getFromMetaData().orThunk(function () {\n return Option.from(child);\n });\n });\n };\n var getFromMetaFirst = function () {\n return getFromMetaData().orThunk(function () {\n return getFromData().bind(function (child) {\n return isObject(child) ? getNonEmptyValue(child) : Option.from(child);\n });\n });\n };\n return _a = {}, _a[prop] = (prop === sourceInput ? getFromValueFirst() : getFromMetaFirst()).getOr(''), _a;\n };\n };\n var getDimensions = function (data, metaData) {\n var dimensions = {};\n get(data, 'dimensions').each(function (dims) {\n each([\n 'width',\n 'height'\n ], function (prop) {\n get(metaData, prop).orThunk(function () {\n return get(dims, prop);\n }).each(function (value) {\n return dimensions[prop] = value;\n });\n });\n });\n return dimensions;\n };\n var unwrap = function (data, sourceInput) {\n var metaData = sourceInput ? extractMeta(sourceInput, data).getOr({}) : {};\n var get = getValue(data, metaData, sourceInput);\n return __assign(__assign(__assign(__assign(__assign({}, get('source')), get('altsource')), get('poster')), get('embed')), getDimensions(data, metaData));\n };\n var wrap = function (data) {\n var wrapped = __assign(__assign({}, data), {\n source: { value: get(data, 'source').getOr('') },\n altsource: { value: get(data, 'altsource').getOr('') },\n poster: { value: get(data, 'poster').getOr('') }\n });\n each([\n 'width',\n 'height'\n ], function (prop) {\n get(data, prop).each(function (value) {\n var dimensions = wrapped.dimensions || {};\n dimensions[prop] = value;\n wrapped.dimensions = dimensions;\n });\n });\n return wrapped;\n };\n var handleError = function (editor) {\n return function (error) {\n var errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.';\n editor.notificationManager.open({\n type: 'error',\n text: errorMessage\n });\n };\n };\n var snippetToData = function (editor, embedSnippet) {\n return htmlToData(Settings.getScripts(editor), embedSnippet);\n };\n var isMediaElement = function (element) {\n return element.getAttribute('data-mce-object') || element.getAttribute('data-ephox-embed-iri');\n };\n var getEditorData = function (editor) {\n var element = editor.selection.getNode();\n var snippet = isMediaElement(element) ? editor.serializer.serialize(element, { selection: true }) : '';\n return __assign({ embed: snippet }, htmlToData(Settings.getScripts(editor), snippet));\n };\n var addEmbedHtml = function (api, editor) {\n return function (response) {\n if (isString(response.url) && response.url.trim().length > 0) {\n var html = response.html;\n var snippetData = snippetToData(editor, html);\n var nuData = __assign(__assign({}, snippetData), {\n source: response.url,\n embed: html\n });\n api.setData(wrap(nuData));\n }\n };\n };\n var selectPlaceholder = function (editor, beforeObjects) {\n var afterObjects = editor.dom.select('img[data-mce-object]');\n for (var i = 0; i < beforeObjects.length; i++) {\n for (var y = afterObjects.length - 1; y >= 0; y--) {\n if (beforeObjects[i] === afterObjects[y]) {\n afterObjects.splice(y, 1);\n }\n }\n }\n editor.selection.select(afterObjects[0]);\n };\n var handleInsert = function (editor, html) {\n var beforeObjects = editor.dom.select('img[data-mce-object]');\n editor.insertContent(html);\n selectPlaceholder(editor, beforeObjects);\n editor.nodeChanged();\n };\n var submitForm = function (prevData, newData, editor) {\n newData.embed = UpdateHtml.updateHtml(newData.embed, newData);\n if (newData.embed && (prevData.source === newData.source || Service.isCached(newData.source))) {\n handleInsert(editor, newData.embed);\n } else {\n Service.getEmbedHtml(editor, newData).then(function (response) {\n handleInsert(editor, response.html);\n }).catch(handleError(editor));\n }\n };\n var showDialog = function (editor) {\n var editorData = getEditorData(editor);\n var currentData = Cell(editorData);\n var initialData = wrap(editorData);\n var handleSource = function (prevData, api) {\n var serviceData = unwrap(api.getData(), 'source');\n if (prevData.source !== serviceData.source) {\n addEmbedHtml(win, editor)({\n url: serviceData.source,\n html: ''\n });\n Service.getEmbedHtml(editor, serviceData).then(addEmbedHtml(win, editor)).catch(handleError(editor));\n }\n };\n var handleEmbed = function (api) {\n var data = unwrap(api.getData());\n var dataFromEmbed = snippetToData(editor, data.embed);\n api.setData(wrap(dataFromEmbed));\n };\n var handleUpdate = function (api, sourceInput) {\n var data = unwrap(api.getData(), sourceInput);\n var embed = dataToHtml(editor, data);\n api.setData(wrap(__assign(__assign({}, data), { embed: embed })));\n };\n var mediaInput = [{\n name: 'source',\n type: 'urlinput',\n filetype: 'media',\n label: 'Source'\n }];\n var sizeInput = !Settings.hasDimensions(editor) ? [] : [{\n type: 'sizeinput',\n name: 'dimensions',\n label: 'Constrain proportions',\n constrain: true\n }];\n var generalTab = {\n title: 'General',\n name: 'general',\n items: flatten([\n mediaInput,\n sizeInput\n ])\n };\n var embedTextarea = {\n type: 'textarea',\n name: 'embed',\n label: 'Paste your embed code below:'\n };\n var embedTab = {\n title: 'Embed',\n items: [embedTextarea]\n };\n var advancedFormItems = [];\n if (Settings.hasAltSource(editor)) {\n advancedFormItems.push({\n name: 'altsource',\n type: 'urlinput',\n filetype: 'media',\n label: 'Alternative source URL'\n });\n }\n if (Settings.hasPoster(editor)) {\n advancedFormItems.push({\n name: 'poster',\n type: 'urlinput',\n filetype: 'image',\n label: 'Media poster (Image URL)'\n });\n }\n var advancedTab = {\n title: 'Advanced',\n name: 'advanced',\n items: advancedFormItems\n };\n var tabs = [\n generalTab,\n embedTab\n ];\n if (advancedFormItems.length > 0) {\n tabs.push(advancedTab);\n }\n var body = {\n type: 'tabpanel',\n tabs: tabs\n };\n var win = editor.windowManager.open({\n title: 'Insert/Edit Media',\n size: 'normal',\n body: body,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: function (api) {\n var serviceData = unwrap(api.getData());\n submitForm(currentData.get(), serviceData, editor);\n api.close();\n },\n onChange: function (api, detail) {\n switch (detail.name) {\n case 'source':\n handleSource(currentData.get(), api);\n break;\n case 'embed':\n handleEmbed(api);\n break;\n case 'dimensions':\n case 'altsource':\n case 'poster':\n handleUpdate(api, detail.name);\n break;\n }\n currentData.set(unwrap(api.getData()));\n },\n initialData: initialData\n });\n };\n var Dialog = {\n showDialog: showDialog,\n unwrap: unwrap\n };\n\n var get$1 = function (editor) {\n var showDialog = function () {\n Dialog.showDialog(editor);\n };\n return { showDialog: showDialog };\n };\n var Api = { get: get$1 };\n\n var register = function (editor) {\n var showDialog = function () {\n Dialog.showDialog(editor);\n };\n editor.addCommand('mceMedia', showDialog);\n };\n var Commands = { register: register };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var sanitize = function (editor, html) {\n if (Settings.shouldFilterHtml(editor) === false) {\n return html;\n }\n var writer = global$5();\n var blocked;\n global$3({\n validate: false,\n allow_conditional_comments: false,\n comment: function (text) {\n writer.comment(text);\n },\n cdata: function (text) {\n writer.cdata(text);\n },\n text: function (text, raw) {\n writer.text(text, raw);\n },\n start: function (name, attrs, empty) {\n blocked = true;\n if (name === 'script' || name === 'noscript' || name === 'svg') {\n return;\n }\n for (var i = attrs.length - 1; i >= 0; i--) {\n var attrName = attrs[i].name;\n if (attrName.indexOf('on') === 0) {\n delete attrs.map[attrName];\n attrs.splice(i, 1);\n }\n if (attrName === 'style') {\n attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name);\n }\n }\n writer.start(name, attrs, empty);\n blocked = false;\n },\n end: function (name) {\n if (blocked) {\n return;\n }\n writer.end(name);\n }\n }, global$4({})).parse(html);\n return writer.getContent();\n };\n var Sanitize = { sanitize: sanitize };\n\n var createPlaceholderNode = function (editor, node) {\n var placeHolder;\n var name = node.name;\n placeHolder = new global$7('img', 1);\n placeHolder.shortEnded = true;\n retainAttributesAndInnerHtml(editor, node, placeHolder);\n placeHolder.attr({\n 'width': node.attr('width') || '300',\n 'height': node.attr('height') || (name === 'audio' ? '30' : '150'),\n 'style': node.attr('style'),\n 'src': global$8.transparentSrc,\n 'data-mce-object': name,\n 'class': 'mce-object mce-object-' + name\n });\n return placeHolder;\n };\n var createPreviewIframeNode = function (editor, node) {\n var previewWrapper;\n var previewNode;\n var shimNode;\n var name = node.name;\n previewWrapper = new global$7('span', 1);\n previewWrapper.attr({\n 'contentEditable': 'false',\n 'style': node.attr('style'),\n 'data-mce-object': name,\n 'class': 'mce-preview-object mce-object-' + name\n });\n retainAttributesAndInnerHtml(editor, node, previewWrapper);\n previewNode = new global$7(name, 1);\n previewNode.attr({\n src: node.attr('src'),\n allowfullscreen: node.attr('allowfullscreen'),\n style: node.attr('style'),\n class: node.attr('class'),\n width: node.attr('width'),\n height: node.attr('height'),\n frameborder: '0'\n });\n shimNode = new global$7('span', 1);\n shimNode.attr('class', 'mce-shim');\n previewWrapper.append(previewNode);\n previewWrapper.append(shimNode);\n return previewWrapper;\n };\n var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) {\n var attrName;\n var attrValue;\n var attribs;\n var ai;\n var innerHtml;\n attribs = sourceNode.attributes;\n ai = attribs.length;\n while (ai--) {\n attrName = attribs[ai].name;\n attrValue = attribs[ai].value;\n if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style') {\n if (attrName === 'data' || attrName === 'src') {\n attrValue = editor.convertURL(attrValue, attrName);\n }\n targetNode.attr('data-mce-p-' + attrName, attrValue);\n }\n }\n innerHtml = sourceNode.firstChild && sourceNode.firstChild.value;\n if (innerHtml) {\n targetNode.attr('data-mce-html', escape(Sanitize.sanitize(editor, innerHtml)));\n targetNode.firstChild = null;\n }\n };\n var isPageEmbedWrapper = function (node) {\n var nodeClass = node.attr('class');\n return nodeClass && /\\btiny-pageembed\\b/.test(nodeClass);\n };\n var isWithinEmbedWrapper = function (node) {\n while (node = node.parent) {\n if (node.attr('data-ephox-embed-iri') || isPageEmbedWrapper(node)) {\n return true;\n }\n }\n return false;\n };\n var placeHolderConverter = function (editor) {\n return function (nodes) {\n var i = nodes.length;\n var node;\n var videoScript;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n if (node.parent.attr('data-mce-object')) {\n continue;\n }\n if (node.name === 'script') {\n videoScript = getVideoScriptMatch(Settings.getScripts(editor), node.attr('src'));\n if (!videoScript) {\n continue;\n }\n }\n if (videoScript) {\n if (videoScript.width) {\n node.attr('width', videoScript.width.toString());\n }\n if (videoScript.height) {\n node.attr('height', videoScript.height.toString());\n }\n }\n if (node.name === 'iframe' && Settings.hasLiveEmbeds(editor) && global$8.ceFalse) {\n if (!isWithinEmbedWrapper(node)) {\n node.replace(createPreviewIframeNode(editor, node));\n }\n } else {\n if (!isWithinEmbedWrapper(node)) {\n node.replace(createPlaceholderNode(editor, node));\n }\n }\n }\n };\n };\n var Nodes = {\n createPreviewIframeNode: createPreviewIframeNode,\n createPlaceholderNode: createPlaceholderNode,\n placeHolderConverter: placeHolderConverter\n };\n\n var setup = function (editor) {\n editor.on('preInit', function () {\n var specialElements = editor.schema.getSpecialElements();\n global$1.each('video audio iframe object'.split(' '), function (name) {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n var boolAttrs = editor.schema.getBoolAttrs();\n global$1.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) {\n boolAttrs[name] = {};\n });\n editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', Nodes.placeHolderConverter(editor));\n editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) {\n var i = nodes.length;\n var node;\n var realElm;\n var ai;\n var attribs;\n var innerHtml;\n var innerNode;\n var realElmName;\n var className;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n realElmName = node.attr(name);\n realElm = new global$7(realElmName, 1);\n if (realElmName !== 'audio' && realElmName !== 'script') {\n className = node.attr('class');\n if (className && className.indexOf('mce-preview-object') !== -1) {\n realElm.attr({\n width: node.firstChild.attr('width'),\n height: node.firstChild.attr('height')\n });\n } else {\n realElm.attr({\n width: node.attr('width'),\n height: node.attr('height')\n });\n }\n }\n realElm.attr({ style: node.attr('style') });\n attribs = node.attributes;\n ai = attribs.length;\n while (ai--) {\n var attrName = attribs[ai].name;\n if (attrName.indexOf('data-mce-p-') === 0) {\n realElm.attr(attrName.substr(11), attribs[ai].value);\n }\n }\n if (realElmName === 'script') {\n realElm.attr('type', 'text/javascript');\n }\n innerHtml = node.attr('data-mce-html');\n if (innerHtml) {\n innerNode = new global$7('#text', 3);\n innerNode.raw = true;\n innerNode.value = Sanitize.sanitize(editor, unescape(innerHtml));\n realElm.append(innerNode);\n }\n node.replace(realElm);\n }\n });\n });\n editor.on('SetContent', function () {\n editor.$('span.mce-preview-object').each(function (index, elm) {\n var $elm = editor.$(elm);\n if ($elm.find('span.mce-shim').length === 0) {\n $elm.append('');\n }\n });\n });\n };\n var FilterContent = { setup: setup };\n\n var setup$1 = function (editor) {\n editor.on('ResolveName', function (e) {\n var name;\n if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {\n e.name = name;\n }\n });\n };\n var ResolveName = { setup: setup$1 };\n\n var setup$2 = function (editor) {\n editor.on('click keyup touchend', function () {\n var selectedNode = editor.selection.getNode();\n if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {\n if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {\n selectedNode.setAttribute('data-mce-selected', '2');\n }\n }\n });\n editor.on('ObjectSelected', function (e) {\n var objectType = e.target.getAttribute('data-mce-object');\n if (objectType === 'audio' || objectType === 'script') {\n e.preventDefault();\n }\n });\n editor.on('ObjectResized', function (e) {\n var target = e.target;\n var html;\n if (target.getAttribute('data-mce-object')) {\n html = target.getAttribute('data-mce-html');\n if (html) {\n html = unescape(html);\n target.setAttribute('data-mce-html', escape(UpdateHtml.updateHtml(html, {\n width: String(e.width),\n height: String(e.height)\n })));\n }\n }\n });\n };\n var Selection = { setup: setup$2 };\n\n var stateSelectorAdapter = function (editor, selector) {\n return function (buttonApi) {\n return editor.selection.selectorChangedWithUnbind(selector.join(','), buttonApi.setActive).unbind;\n };\n };\n var register$1 = function (editor) {\n editor.ui.registry.addToggleButton('media', {\n tooltip: 'Insert/edit media',\n icon: 'embed',\n onAction: function () {\n editor.execCommand('mceMedia');\n },\n onSetup: stateSelectorAdapter(editor, [\n 'img[data-mce-object]',\n 'span[data-mce-object]',\n 'div[data-ephox-embed-iri]'\n ])\n });\n editor.ui.registry.addMenuItem('media', {\n icon: 'embed',\n text: 'Media...',\n onAction: function () {\n editor.execCommand('mceMedia');\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('media', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n ResolveName.setup(editor);\n FilterContent.setup(editor);\n Selection.setup(editor);\n return Api.get(editor);\n });\n }\n\n Plugin();\n\n}());\n","module.exports = __webpack_public_path__ + \"/tinymce/skins/content/dark//content.min.css\";","// Exports the \"media\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/media')\n// ES2015:\n// import 'tinymce/plugins/media'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\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 global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var get = function (customTabs) {\n var addTab = function (spec) {\n var currentCustomTabs = customTabs.get();\n currentCustomTabs[spec.name] = spec;\n customTabs.set(currentCustomTabs);\n };\n return { addTab: addTab };\n };\n\n var register = function (editor, dialogOpener) {\n editor.addCommand('mceHelp', dialogOpener);\n };\n var Commands = { register: register };\n\n var register$1 = function (editor, dialogOpener) {\n editor.ui.registry.addButton('help', {\n icon: 'help',\n tooltip: 'Help',\n onAction: dialogOpener\n });\n editor.ui.registry.addMenuItem('help', {\n text: 'Help',\n icon: 'help',\n shortcut: 'Alt+0',\n onAction: dialogOpener\n });\n };\n var Buttons = { register: register$1 };\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\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\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 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 isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\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 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 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 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 from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\n var get$1 = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n\n var getHelpTabs = function (editor) {\n return Option.from(editor.getParam('help_tabs'));\n };\n\n var shortcuts = [\n {\n shortcuts: ['Meta + B'],\n action: 'Bold'\n },\n {\n shortcuts: ['Meta + I'],\n action: 'Italic'\n },\n {\n shortcuts: ['Meta + U'],\n action: 'Underline'\n },\n {\n shortcuts: ['Meta + A'],\n action: 'Select all'\n },\n {\n shortcuts: [\n 'Meta + Y',\n 'Meta + Shift + Z'\n ],\n action: 'Redo'\n },\n {\n shortcuts: ['Meta + Z'],\n action: 'Undo'\n },\n {\n shortcuts: ['Access + 1'],\n action: 'Header 1'\n },\n {\n shortcuts: ['Access + 2'],\n action: 'Header 2'\n },\n {\n shortcuts: ['Access + 3'],\n action: 'Header 3'\n },\n {\n shortcuts: ['Access + 4'],\n action: 'Header 4'\n },\n {\n shortcuts: ['Access + 5'],\n action: 'Header 5'\n },\n {\n shortcuts: ['Access + 6'],\n action: 'Header 6'\n },\n {\n shortcuts: ['Access + 7'],\n action: 'Paragraph'\n },\n {\n shortcuts: ['Access + 8'],\n action: 'Div'\n },\n {\n shortcuts: ['Access + 9'],\n action: 'Address'\n },\n {\n shortcuts: ['Alt + 0'],\n action: 'Open help dialog'\n },\n {\n shortcuts: ['Alt + F9'],\n action: 'Focus to menubar'\n },\n {\n shortcuts: ['Alt + F10'],\n action: 'Focus to toolbar'\n },\n {\n shortcuts: ['Alt + F11'],\n action: 'Focus to element path'\n },\n {\n shortcuts: ['Ctrl + F9'],\n action: 'Focus to contextual toolbar'\n },\n {\n shortcuts: ['Shift + Enter'],\n action: 'Open popup menu for split buttons'\n },\n {\n shortcuts: ['Meta + K'],\n action: 'Insert link (if link plugin activated)'\n },\n {\n shortcuts: ['Meta + S'],\n action: 'Save (if save plugin activated)'\n },\n {\n shortcuts: ['Meta + F'],\n action: 'Find (if searchreplace plugin activated)'\n },\n {\n shortcuts: ['Meta + Shift + F'],\n action: 'Switch to or from fullscreen mode'\n }\n ];\n var KeyboardShortcuts = { shortcuts: shortcuts };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var convertText = function (source) {\n var mac = {\n alt: '⌥',\n ctrl: '⌃',\n shift: '⇧',\n meta: '⌘',\n access: '⌃⌥'\n };\n var other = {\n meta: 'Ctrl ',\n access: 'Shift + Alt '\n };\n var replace = global$1.mac ? mac : other;\n var shortcut = source.split('+');\n var updated = map(shortcut, function (segment) {\n var search = segment.toLowerCase().trim();\n return has(replace, search) ? replace[search] : segment;\n });\n return global$1.mac ? updated.join('').replace(/\\s/, '') : updated.join('+');\n };\n var ConvertShortcut = { convertText: convertText };\n\n var tab = function () {\n var shortcutList = map(KeyboardShortcuts.shortcuts, function (shortcut) {\n var shortcutText = map(shortcut.shortcuts, ConvertShortcut.convertText).join(' or ');\n return [\n shortcut.action,\n shortcutText\n ];\n });\n var tablePanel = {\n type: 'table',\n header: [\n 'Action',\n 'Shortcut'\n ],\n cells: shortcutList\n };\n return {\n name: 'shortcuts',\n title: 'Handy Shortcuts',\n items: [tablePanel]\n };\n };\n var KeyboardShortcutsTab = { tab: tab };\n\n var supplant = function (str, obj) {\n var isStringOrNumber = function (a) {\n var t = typeof a;\n return t === 'string' || t === 'number';\n };\n return str.replace(/\\$\\{([^{}]*)\\}/g, function (fullMatch, key) {\n var value = obj[key];\n return isStringOrNumber(value) ? value.toString() : fullMatch;\n });\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var urls = [\n {\n key: 'advlist',\n name: 'Advanced List'\n },\n {\n key: 'anchor',\n name: 'Anchor'\n },\n {\n key: 'autolink',\n name: 'Autolink'\n },\n {\n key: 'autoresize',\n name: 'Autoresize'\n },\n {\n key: 'autosave',\n name: 'Autosave'\n },\n {\n key: 'bbcode',\n name: 'BBCode'\n },\n {\n key: 'charmap',\n name: 'Character Map'\n },\n {\n key: 'code',\n name: 'Code'\n },\n {\n key: 'codesample',\n name: 'Code Sample'\n },\n {\n key: 'colorpicker',\n name: 'Color Picker'\n },\n {\n key: 'directionality',\n name: 'Directionality'\n },\n {\n key: 'emoticons',\n name: 'Emoticons'\n },\n {\n key: 'fullpage',\n name: 'Full Page'\n },\n {\n key: 'fullscreen',\n name: 'Full Screen'\n },\n {\n key: 'help',\n name: 'Help'\n },\n {\n key: 'hr',\n name: 'Horizontal Rule'\n },\n {\n key: 'image',\n name: 'Image'\n },\n {\n key: 'imagetools',\n name: 'Image Tools'\n },\n {\n key: 'importcss',\n name: 'Import CSS'\n },\n {\n key: 'insertdatetime',\n name: 'Insert Date/Time'\n },\n {\n key: 'legacyoutput',\n name: 'Legacy Output'\n },\n {\n key: 'link',\n name: 'Link'\n },\n {\n key: 'lists',\n name: 'Lists'\n },\n {\n key: 'media',\n name: 'Media'\n },\n {\n key: 'nonbreaking',\n name: 'Nonbreaking'\n },\n {\n key: 'noneditable',\n name: 'Noneditable'\n },\n {\n key: 'pagebreak',\n name: 'Page Break'\n },\n {\n key: 'paste',\n name: 'Paste'\n },\n {\n key: 'preview',\n name: 'Preview'\n },\n {\n key: 'print',\n name: 'Print'\n },\n {\n key: 'save',\n name: 'Save'\n },\n {\n key: 'searchreplace',\n name: 'Search and Replace'\n },\n {\n key: 'spellchecker',\n name: 'Spell Checker'\n },\n {\n key: 'tabfocus',\n name: 'Tab Focus'\n },\n {\n key: 'table',\n name: 'Table'\n },\n {\n key: 'template',\n name: 'Template'\n },\n {\n key: 'textcolor',\n name: 'Text Color'\n },\n {\n key: 'textpattern',\n name: 'Text Pattern'\n },\n {\n key: 'toc',\n name: 'Table of Contents'\n },\n {\n key: 'visualblocks',\n name: 'Visual Blocks'\n },\n {\n key: 'visualchars',\n name: 'Visual Characters'\n },\n {\n key: 'wordcount',\n name: 'Word Count'\n },\n {\n key: 'advcode',\n name: 'Advanced Code Editor*'\n },\n {\n key: 'formatpainter',\n name: 'Format Painter*'\n },\n {\n key: 'powerpaste',\n name: 'PowerPaste*'\n },\n {\n key: 'tinydrive',\n name: 'Tiny Drive*'\n },\n {\n key: 'tinymcespellchecker',\n name: 'Spell Checker Pro*'\n },\n {\n key: 'a11ychecker',\n name: 'Accessibility Checker*'\n },\n {\n key: 'linkchecker',\n name: 'Link Checker*'\n },\n {\n key: 'mentions',\n name: 'Mentions*'\n },\n {\n key: 'mediaembed',\n name: 'Enhanced Media Embed*'\n },\n {\n key: 'checklist',\n name: 'Checklist*'\n },\n {\n key: 'casechange',\n name: 'Case Change*'\n },\n {\n key: 'permanentpen',\n name: 'Permanent Pen*'\n },\n {\n key: 'pageembed',\n name: 'Page Embed*'\n },\n {\n key: 'tinycomments',\n name: 'Tiny Comments*'\n },\n {\n key: 'advtable',\n name: 'Advanced Tables*'\n },\n {\n key: 'autocorrect',\n name: 'Autocorrect*'\n }\n ];\n var PluginUrls = { urls: urls };\n\n var tab$1 = function (editor) {\n var availablePlugins = function () {\n var premiumPlugins = [\n 'Accessibility Checker',\n 'Advanced Code Editor',\n 'Advanced Tables',\n 'Case Change',\n 'Checklist',\n 'Tiny Comments',\n 'Tiny Drive',\n 'Enhanced Media Embed',\n 'Format Painter',\n 'Link Checker',\n 'Mentions',\n 'MoxieManager',\n 'Page Embed',\n 'Permanent Pen',\n 'PowerPaste',\n 'Spell Checker Pro'\n ];\n var premiumPluginList = map(premiumPlugins, function (plugin) {\n return '
  • ' + global$2.translate(plugin) + '
  • ';\n }).join('');\n return '
    ' + '

    ' + global$2.translate('Premium plugins:') + '

    ' + '' + '
    ';\n };\n var makeLink = curry(supplant, '${name}');\n var maybeUrlize = function (editor, key) {\n return find(PluginUrls.urls, function (x) {\n return x.key === key;\n }).fold(function () {\n var getMetadata = editor.plugins[key].getMetadata;\n return typeof getMetadata === 'function' ? makeLink(getMetadata()) : key;\n }, function (x) {\n return makeLink({\n name: x.name,\n url: 'https://www.tiny.cloud/docs/plugins/' + x.key\n });\n });\n };\n var getPluginKeys = function (editor) {\n var keys$1 = keys(editor.plugins);\n return editor.settings.forced_plugins === undefined ? keys$1 : filter(keys$1, not(curry(contains, editor.settings.forced_plugins)));\n };\n var pluginLister = function (editor) {\n var pluginKeys = getPluginKeys(editor);\n var pluginLis = map(pluginKeys, function (key) {\n return '
  • ' + maybeUrlize(editor, key) + '
  • ';\n });\n var count = pluginLis.length;\n var pluginsString = pluginLis.join('');\n var html = '

    ' + global$2.translate([\n 'Plugins installed ({0}):',\n count\n ]) + '

    ' + '
      ' + pluginsString + '
    ';\n return html;\n };\n var installedPlugins = function (editor) {\n if (editor == null) {\n return '';\n }\n return '
    ' + pluginLister(editor) + '
    ';\n };\n var htmlPanel = {\n type: 'htmlpanel',\n presets: 'document',\n html: [\n installedPlugins(editor),\n availablePlugins()\n ].join('')\n };\n return {\n name: 'plugins',\n title: 'Plugins',\n items: [htmlPanel]\n };\n };\n var PluginsTab = { tab: tab$1 };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var tab$2 = function () {\n var getVersion = function (major, minor) {\n return major.indexOf('@') === 0 ? 'X.X.X' : major + '.' + minor;\n };\n var version = getVersion(global$3.majorVersion, global$3.minorVersion);\n var changeLogLink = 'TinyMCE ' + version + '';\n var htmlPanel = {\n type: 'htmlpanel',\n html: '

    ' + global$2.translate([\n 'You are using {0}',\n changeLogLink\n ]) + '

    ',\n presets: 'document'\n };\n return {\n name: 'versions',\n title: 'Version',\n items: [htmlPanel]\n };\n };\n var VersionTab = { tab: tab$2 };\n\n var description = '

    Editor UI keyboard navigation

    \\n\\n

    Activating keyboard navigation

    \\n\\n

    The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:

    \\n
      \\n
    • Focus the menubar: Alt + F9 (Windows) or ⌥F9 (MacOS)
    • \\n
    • Focus the toolbar: Alt + F10 (Windows) or ⌥F10 (MacOS)
    • \\n
    • Focus the footer: Alt + F11 (Windows) or ⌥F11 (MacOS)
    • \\n
    \\n\\n

    Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline.

    \\n\\n

    Moving between UI sections

    \\n\\n

    When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:

    \\n
      \\n
    • the menubar
    • \\n
    • each group of the toolbar
    • \\n
    • the sidebar
    • \\n
    • the element path in the footer
    • \\n
    • the wordcount toggle button in the footer
    • \\n
    • the branding link in the footer
    • \\n
    \\n\\n

    Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.

    \\n\\n

    Moving within UI sections

    \\n\\n

    Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:

    \\n
      \\n
    • moving between menus in the menubar
    • \\n
    • moving between buttons in a toolbar group
    • \\n
    • moving between items in the element path
    • \\n
    \\n\\n

    In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group.

    \\n\\n

    Executing buttons

    \\n\\n

    To execute a button, navigate the selection to the desired button and hit space or enter.

    \\n\\n

    Opening, navigating and closing menus

    \\n\\n

    When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.

    \\n\\n

    To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.

    \\n\\n

    Context toolbars and menus

    \\n\\n

    To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or ⌃F9 (MacOS).

    \\n\\n

    Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.

    \\n\\n

    Dialog navigation

    \\n\\n

    There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.

    \\n\\n

    When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.

    \\n\\n

    When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.

    ';\n var tab$3 = function () {\n var body = {\n type: 'htmlpanel',\n presets: 'document',\n html: description\n };\n return {\n name: 'keyboardnav',\n title: 'Keyboard Navigation',\n items: [body]\n };\n };\n var KeyboardNavTab = { tab: tab$3 };\n\n var parseHelpTabsSetting = function (tabsFromSettings, tabs) {\n var newTabs = {};\n var names = map(tabsFromSettings, function (t) {\n if (typeof t === 'string') {\n if (has(tabs, t)) {\n newTabs[t] = tabs[t];\n }\n return t;\n } else {\n newTabs[t.name] = t;\n return t.name;\n }\n });\n return {\n tabs: newTabs,\n names: names\n };\n };\n var getNamesFromTabs = function (tabs) {\n var names = keys(tabs);\n var versionsIdx = indexOf(names, 'versions');\n versionsIdx.each(function (idx) {\n names.splice(idx, 1);\n names.push('versions');\n });\n return {\n tabs: tabs,\n names: names\n };\n };\n var parseCustomTabs = function (editor, customTabs) {\n var _a;\n var shortcuts = KeyboardShortcutsTab.tab();\n var nav = KeyboardNavTab.tab();\n var plugins = PluginsTab.tab(editor);\n var versions = VersionTab.tab();\n var tabs = __assign((_a = {}, _a[shortcuts.name] = shortcuts, _a[nav.name] = nav, _a[plugins.name] = plugins, _a[versions.name] = versions, _a), customTabs.get());\n return getHelpTabs(editor).fold(function () {\n return getNamesFromTabs(tabs);\n }, function (tabsFromSettings) {\n return parseHelpTabsSetting(tabsFromSettings, tabs);\n });\n };\n var init = function (editor, customTabs) {\n return function () {\n var _a = parseCustomTabs(editor, customTabs), tabs = _a.tabs, names = _a.names;\n var foundTabs = map(names, function (name) {\n return get$1(tabs, name);\n });\n var dialogTabs = cat(foundTabs);\n var body = {\n type: 'tabpanel',\n tabs: dialogTabs\n };\n editor.windowManager.open({\n title: 'Help',\n size: 'medium',\n body: body,\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData: {}\n });\n };\n };\n\n function Plugin () {\n global.add('help', function (editor) {\n var customTabs = Cell({});\n var api = get(customTabs);\n var dialogOpener = init(editor, customTabs);\n Buttons.register(editor, dialogOpener);\n Commands.register(editor, dialogOpener);\n editor.shortcuts.add('Alt+0', 'Open help dialog', 'mceHelp');\n return api;\n });\n }\n\n Plugin();\n\n}());\n","// Exports the \"link\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/link')\n// ES2015:\n// import 'tinymce/plugins/link'\nrequire('./plugin.js');","module.exports = __webpack_public_path__ + \"/tinymce/default/content.min.css\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide//content.min.css\";","// this file must be imported before TinyMCE can be used\r\n\r\n// sets up skins and default css so they can be imported\r\n// ! prefix is important; stops other loaders from running and trying to replace files with JS to load from cache\r\nrequire.context(\r\n '!file-loader?name=/tinymce/[path]/[name].[ext]&context=node_modules/tinymce!tinymce/skins',\r\n true,\r\n /.*/\r\n);\r\nrequire.context(\r\n '!file-loader?name=/tinymce/default/[name].[ext]&context=node_modules/tinymce!tinymce/skins/content/default',\r\n true,\r\n /.*/\r\n);\r\nimport 'tinymce';\r\nimport 'tinymce/themes/silver';\r\n\r\n// Any plugins we use must be imported here\r\nimport 'tinymce/plugins/code';\r\nimport 'tinymce/plugins/advlist';\r\nimport 'tinymce/plugins/autolink';\r\nimport 'tinymce/plugins/lists';\r\nimport 'tinymce/plugins/link';\r\nimport 'tinymce/plugins/image';\r\nimport 'tinymce/plugins/charmap';\r\nimport 'tinymce/plugins/print';\r\nimport 'tinymce/plugins/preview';\r\nimport 'tinymce/plugins/anchor';\r\nimport 'tinymce/plugins/searchreplace';\r\nimport 'tinymce/plugins/visualblocks';\r\nimport 'tinymce/plugins/fullscreen';\r\nimport 'tinymce/plugins/insertdatetime';\r\nimport 'tinymce/plugins/media';\r\nimport 'tinymce/plugins/table';\r\nimport 'tinymce/plugins/paste';\r\nimport 'tinymce/plugins/help';\r\nimport 'tinymce/plugins/wordcount';\r\n\r\nexport default {\r\n skinsDirectory: '/tinymce/skins/ui/oxide/',\r\n contentCssPath: '/tinymce/default/content.min.css',\r\n // all plugins listed here must be imported above\r\n importedPlugins: [\r\n 'code advlist autolink lists link image charmap print preview anchor',\r\n 'searchreplace visualblocks code fullscreen',\r\n 'insertdatetime media table paste code help wordcount'\r\n ]\r\n};\r\n","// Exports the \"insertdatetime\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/insertdatetime')\n// ES2015:\n// import 'tinymce/plugins/insertdatetime'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\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 global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var fireVisualBlocks = function (editor, state) {\n editor.fire('VisualBlocks', { state: state });\n };\n var Events = { fireVisualBlocks: fireVisualBlocks };\n\n var toggleVisualBlocks = function (editor, pluginUrl, enabledState) {\n var dom = editor.dom;\n dom.toggleClass(editor.getBody(), 'mce-visualblocks');\n enabledState.set(!enabledState.get());\n Events.fireVisualBlocks(editor, enabledState.get());\n };\n var VisualBlocks = { toggleVisualBlocks: toggleVisualBlocks };\n\n var register = function (editor, pluginUrl, enabledState) {\n editor.addCommand('mceVisualBlocks', function () {\n VisualBlocks.toggleVisualBlocks(editor, pluginUrl, enabledState);\n });\n };\n var Commands = { register: register };\n\n var isEnabledByDefault = function (editor) {\n return editor.getParam('visualblocks_default_state', false, 'boolean');\n };\n var Settings = { isEnabledByDefault: isEnabledByDefault };\n\n var setup = function (editor, pluginUrl, enabledState) {\n editor.on('PreviewFormats AfterPreviewFormats', function (e) {\n if (enabledState.get()) {\n editor.dom.toggleClass(editor.getBody(), 'mce-visualblocks', e.type === 'afterpreviewformats');\n }\n });\n editor.on('init', function () {\n if (Settings.isEnabledByDefault(editor)) {\n VisualBlocks.toggleVisualBlocks(editor, pluginUrl, enabledState);\n }\n });\n editor.on('remove', function () {\n editor.dom.removeClass(editor.getBody(), 'mce-visualblocks');\n });\n };\n var Bindings = { setup: setup };\n\n var toggleActiveState = function (editor, enabledState) {\n return function (api) {\n api.setActive(enabledState.get());\n var editorEventCallback = function (e) {\n return api.setActive(e.state);\n };\n editor.on('VisualBlocks', editorEventCallback);\n return function () {\n return editor.off('VisualBlocks', editorEventCallback);\n };\n };\n };\n var register$1 = function (editor, enabledState) {\n editor.ui.registry.addToggleButton('visualblocks', {\n icon: 'visualblocks',\n tooltip: 'Show blocks',\n onAction: function () {\n return editor.execCommand('mceVisualBlocks');\n },\n onSetup: toggleActiveState(editor, enabledState)\n });\n editor.ui.registry.addToggleMenuItem('visualblocks', {\n text: 'Show blocks',\n onAction: function () {\n return editor.execCommand('mceVisualBlocks');\n },\n onSetup: toggleActiveState(editor, enabledState)\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('visualblocks', function (editor, pluginUrl) {\n var enabledState = Cell(false);\n Commands.register(editor, pluginUrl, enabledState);\n Buttons.register(editor, enabledState);\n Bindings.setup(editor, pluginUrl, enabledState);\n });\n }\n\n Plugin();\n\n}());\n","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide//content.mobile.min.css\";","// Exports the \"image\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/image')\n// ES2015:\n// import 'tinymce/plugins/image'\nrequire('./plugin.js');","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide-dark//content.mobile.min.css\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide-dark//content.min.css\";","// Exports the \"searchreplace\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/searchreplace')\n// ES2015:\n// import 'tinymce/plugins/searchreplace'\nrequire('./plugin.js');","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide//content.inline.css\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide-dark//skin.min.css\";","// Exports the \"code\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/code')\n// ES2015:\n// import 'tinymce/plugins/code'\nrequire('./plugin.js');","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide//content.css\";","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getPreviewDialogWidth = function (editor) {\n return parseInt(editor.getParam('plugin_preview_width', '650'), 10);\n };\n var getPreviewDialogHeight = function (editor) {\n return parseInt(editor.getParam('plugin_preview_height', '500'), 10);\n };\n var getContentStyle = function (editor) {\n return editor.getParam('content_style', '');\n };\n var shouldUseContentCssCors = function (editor) {\n return editor.getParam('content_css_cors', false, 'boolean');\n };\n var Settings = {\n getPreviewDialogWidth: getPreviewDialogWidth,\n getPreviewDialogHeight: getPreviewDialogHeight,\n getContentStyle: getContentStyle,\n shouldUseContentCssCors: shouldUseContentCssCors\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var getPreviewHtml = function (editor) {\n var headHtml = '';\n var encode = editor.dom.encode;\n var contentStyle = Settings.getContentStyle(editor);\n headHtml += '';\n if (contentStyle) {\n headHtml += '';\n }\n var cors = Settings.shouldUseContentCssCors(editor) ? ' crossorigin=\"anonymous\"' : '';\n global$1.each(editor.contentCSS, function (url) {\n headHtml += '';\n });\n var bodyId = editor.settings.body_id || 'tinymce';\n if (bodyId.indexOf('=') !== -1) {\n bodyId = editor.getParam('body_id', '', 'hash');\n bodyId = bodyId[editor.id] || bodyId;\n }\n var bodyClass = editor.settings.body_class || '';\n if (bodyClass.indexOf('=') !== -1) {\n bodyClass = editor.getParam('body_class', '', 'hash');\n bodyClass = bodyClass[editor.id] || '';\n }\n var isMetaKeyPressed = global$2.mac ? 'e.metaKey' : 'e.ctrlKey && !e.altKey';\n var preventClicksOnLinksScript = ' ';\n var directionality = editor.getBody().dir;\n var dirAttr = directionality ? ' dir=\"' + encode(directionality) + '\"' : '';\n var previewHtml = '' + '' + '' + headHtml + '' + '' + editor.getContent() + preventClicksOnLinksScript + '' + '';\n return previewHtml;\n };\n var IframeContent = { getPreviewHtml: getPreviewHtml };\n\n var open = function (editor) {\n var content = IframeContent.getPreviewHtml(editor);\n var dataApi = editor.windowManager.open({\n title: 'Preview',\n size: 'large',\n body: {\n type: 'panel',\n items: [{\n name: 'preview',\n type: 'iframe',\n sandboxed: true\n }]\n },\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData: { preview: content }\n });\n dataApi.focus('close');\n };\n\n var register = function (editor) {\n editor.addCommand('mcePreview', function () {\n open(editor);\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.ui.registry.addButton('preview', {\n icon: 'preview',\n tooltip: 'Preview',\n onAction: function () {\n return editor.execCommand('mcePreview');\n }\n });\n editor.ui.registry.addMenuItem('preview', {\n icon: 'preview',\n text: 'Preview',\n onAction: function () {\n return editor.execCommand('mcePreview');\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('preview', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n }\n\n Plugin();\n\n}());\n","module.exports = __webpack_public_path__ + \"/tinymce/skins/content/writer//content.min.css\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/content/writer//content.css\";","var map = {\n\t\"./content/dark/content.css\": \"075b\",\n\t\"./content/dark/content.min.css\": \"39bd\",\n\t\"./content/default/content.css\": \"7977\",\n\t\"./content/default/content.min.css\": \"ae53\",\n\t\"./content/document/content.css\": \"bd01\",\n\t\"./content/document/content.min.css\": \"9d90\",\n\t\"./content/writer/content.css\": \"743d\",\n\t\"./content/writer/content.min.css\": \"6cd7\",\n\t\"./ui/oxide-dark/content.css\": \"1847\",\n\t\"./ui/oxide-dark/content.inline.css\": \"8177\",\n\t\"./ui/oxide-dark/content.inline.min.css\": \"c609\",\n\t\"./ui/oxide-dark/content.min.css\": \"5a55\",\n\t\"./ui/oxide-dark/content.mobile.css\": \"df92\",\n\t\"./ui/oxide-dark/content.mobile.min.css\": \"560d\",\n\t\"./ui/oxide-dark/fonts/tinymce-mobile.woff\": \"ce16\",\n\t\"./ui/oxide-dark/skin.css\": \"849f\",\n\t\"./ui/oxide-dark/skin.min.css\": \"6448\",\n\t\"./ui/oxide-dark/skin.mobile.css\": \"87e7\",\n\t\"./ui/oxide-dark/skin.mobile.min.css\": \"a98f\",\n\t\"./ui/oxide/content.css\": \"67b1\",\n\t\"./ui/oxide/content.inline.css\": \"6401\",\n\t\"./ui/oxide/content.inline.min.css\": \"e2a6\",\n\t\"./ui/oxide/content.min.css\": \"46c4\",\n\t\"./ui/oxide/content.mobile.css\": \"dee1\",\n\t\"./ui/oxide/content.mobile.min.css\": \"4da0\",\n\t\"./ui/oxide/fonts/tinymce-mobile.woff\": \"7e79\",\n\t\"./ui/oxide/skin.css\": \"7b2e\",\n\t\"./ui/oxide/skin.min.css\": \"8744\",\n\t\"./ui/oxide/skin.mobile.css\": \"c7ed\",\n\t\"./ui/oxide/skin.mobile.min.css\": \"7df5\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"791b\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/content/default//content.css\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide//skin.css\";","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\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 global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var hasProPlugin = function (editor) {\n if (/(^|[ ,])powerpaste([, ]|$)/.test(editor.settings.plugins) && global$1.get('powerpaste')) {\n if (typeof domGlobals.window.console !== 'undefined' && domGlobals.window.console.log) {\n domGlobals.window.console.log('PowerPaste is incompatible with Paste plugin! Remove \\'paste\\' from the \\'plugins\\' option.');\n }\n return true;\n } else {\n return false;\n }\n };\n var DetectProPlugin = { hasProPlugin: hasProPlugin };\n\n var get = function (clipboard, quirks) {\n return {\n clipboard: clipboard,\n quirks: quirks\n };\n };\n var Api = { get: get };\n\n var firePastePreProcess = function (editor, html, internal, isWordHtml) {\n return editor.fire('PastePreProcess', {\n content: html,\n internal: internal,\n wordContent: isWordHtml\n });\n };\n var firePastePostProcess = function (editor, node, internal, isWordHtml) {\n return editor.fire('PastePostProcess', {\n node: node,\n internal: internal,\n wordContent: isWordHtml\n });\n };\n var firePastePlainTextToggle = function (editor, state) {\n return editor.fire('PastePlainTextToggle', { state: state });\n };\n var firePaste = function (editor, ieFake) {\n return editor.fire('paste', { ieFake: ieFake });\n };\n var Events = {\n firePastePreProcess: firePastePreProcess,\n firePastePostProcess: firePastePostProcess,\n firePastePlainTextToggle: firePastePlainTextToggle,\n firePaste: firePaste\n };\n\n var togglePlainTextPaste = function (editor, clipboard) {\n if (clipboard.pasteFormat.get() === 'text') {\n clipboard.pasteFormat.set('html');\n Events.firePastePlainTextToggle(editor, false);\n } else {\n clipboard.pasteFormat.set('text');\n Events.firePastePlainTextToggle(editor, true);\n }\n editor.focus();\n };\n var Actions = { togglePlainTextPaste: togglePlainTextPaste };\n\n var register = function (editor, clipboard) {\n editor.addCommand('mceTogglePlainTextPaste', function () {\n Actions.togglePlainTextPaste(editor, clipboard);\n });\n editor.addCommand('mceInsertClipboardContent', function (ui, value) {\n if (value.content) {\n clipboard.pasteHtml(value.content, value.internal);\n }\n if (value.text) {\n clipboard.pasteText(value.text);\n }\n });\n };\n var Commands = { register: register };\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 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 isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\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 from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var exports$1 = {}, module = { 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, undefined));\n var Promise = module.exports.boltExport;\n\n var nu = function (baseFn) {\n var data = Option.none();\n var callbacks = [];\n var map = function (f) {\n return nu(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(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu,\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$1 = 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$1,\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 var traverse = function (array, fn) {\n return par$1(map(array, fn));\n };\n\n var value = function () {\n var subject = Cell(Option.none());\n var clear = function () {\n subject.set(Option.none());\n };\n var set = function (s) {\n subject.set(Option.some(s));\n };\n var on = function (f) {\n subject.get().each(f);\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\n };\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var internalMimeType = 'x-tinymce/html';\n var internalMark = '';\n var mark = function (html) {\n return internalMark + html;\n };\n var unmark = function (html) {\n return html.replace(internalMark, '');\n };\n var isMarked = function (html) {\n return html.indexOf(internalMark) !== -1;\n };\n var InternalHtml = {\n mark: mark,\n unmark: unmark,\n isMarked: isMarked,\n internalHtmlMime: function () {\n return internalMimeType;\n }\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n var isPlainText = function (text) {\n return !/<(?:\\/?(?!(?:div|p|br|span)>)\\w+|(?:(?!(?:span style=\"white-space:\\s?pre;?\">)|br\\s?\\/>))\\w+\\s[^>]+)>/i.test(text);\n };\n var toBRs = function (text) {\n return text.replace(/\\r?\\n/g, '
    ');\n };\n var openContainer = function (rootTag, rootAttrs) {\n var key;\n var attrs = [];\n var tag = '<' + rootTag;\n if (typeof rootAttrs === 'object') {\n for (key in rootAttrs) {\n if (rootAttrs.hasOwnProperty(key)) {\n attrs.push(key + '=\"' + global$6.encodeAllRaw(rootAttrs[key]) + '\"');\n }\n }\n if (attrs.length) {\n tag += ' ' + attrs.join(' ');\n }\n }\n return tag + '>';\n };\n var toBlockElements = function (text, rootTag, rootAttrs) {\n var blocks = text.split(/\\n\\n/);\n var tagOpen = openContainer(rootTag, rootAttrs);\n var tagClose = '';\n var paragraphs = global$4.map(blocks, function (p) {\n return p.split(/\\n/).join('
    ');\n });\n var stitch = function (p) {\n return tagOpen + p + tagClose;\n };\n return paragraphs.length === 1 ? paragraphs[0] : global$4.map(paragraphs, stitch).join('');\n };\n var convert = function (text, rootTag, rootAttrs) {\n return rootTag ? toBlockElements(text, rootTag === true ? 'p' : rootTag, rootAttrs) : toBRs(text);\n };\n var Newlines = {\n isPlainText: isPlainText,\n convert: convert,\n toBRs: toBRs,\n toBlockElements: toBlockElements\n };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.html.DomParser');\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.html.Serializer');\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var global$a = tinymce.util.Tools.resolve('tinymce.html.Schema');\n\n var shouldBlockDrop = function (editor) {\n return editor.getParam('paste_block_drop', false);\n };\n var shouldPasteDataImages = function (editor) {\n return editor.getParam('paste_data_images', false);\n };\n var shouldFilterDrop = function (editor) {\n return editor.getParam('paste_filter_drop', true);\n };\n var getPreProcess = function (editor) {\n return editor.getParam('paste_preprocess');\n };\n var getPostProcess = function (editor) {\n return editor.getParam('paste_postprocess');\n };\n var getWebkitStyles = function (editor) {\n return editor.getParam('paste_webkit_styles');\n };\n var shouldRemoveWebKitStyles = function (editor) {\n return editor.getParam('paste_remove_styles_if_webkit', true);\n };\n var shouldMergeFormats = function (editor) {\n return editor.getParam('paste_merge_formats', true);\n };\n var isSmartPasteEnabled = function (editor) {\n return editor.getParam('smart_paste', true);\n };\n var isPasteAsTextEnabled = function (editor) {\n return editor.getParam('paste_as_text', false);\n };\n var getRetainStyleProps = function (editor) {\n return editor.getParam('paste_retain_style_properties');\n };\n var getWordValidElements = function (editor) {\n var defaultValidElements = '-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' + '-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,' + 'td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody';\n return editor.getParam('paste_word_valid_elements', defaultValidElements);\n };\n var shouldConvertWordFakeLists = function (editor) {\n return editor.getParam('paste_convert_word_fake_lists', true);\n };\n var shouldUseDefaultFilters = function (editor) {\n return editor.getParam('paste_enable_default_filters', true);\n };\n var Settings = {\n shouldBlockDrop: shouldBlockDrop,\n shouldPasteDataImages: shouldPasteDataImages,\n shouldFilterDrop: shouldFilterDrop,\n getPreProcess: getPreProcess,\n getPostProcess: getPostProcess,\n getWebkitStyles: getWebkitStyles,\n shouldRemoveWebKitStyles: shouldRemoveWebKitStyles,\n shouldMergeFormats: shouldMergeFormats,\n isSmartPasteEnabled: isSmartPasteEnabled,\n isPasteAsTextEnabled: isPasteAsTextEnabled,\n getRetainStyleProps: getRetainStyleProps,\n getWordValidElements: getWordValidElements,\n shouldConvertWordFakeLists: shouldConvertWordFakeLists,\n shouldUseDefaultFilters: shouldUseDefaultFilters\n };\n\n var nbsp = '\\xA0';\n\n function filter$1(content, items) {\n global$4.each(items, function (v) {\n if (v.constructor === RegExp) {\n content = content.replace(v, '');\n } else {\n content = content.replace(v[0], v[1]);\n }\n });\n return content;\n }\n function innerText(html) {\n var schema = global$a();\n var domParser = global$7({}, schema);\n var text = '';\n var shortEndedElements = schema.getShortEndedElements();\n var ignoreElements = global$4.makeMap('script noscript style textarea video audio iframe object', ' ');\n var blockElements = schema.getBlockElements();\n function walk(node) {\n var name = node.name, currentNode = node;\n if (name === 'br') {\n text += '\\n';\n return;\n }\n if (name === 'wbr') {\n return;\n }\n if (shortEndedElements[name]) {\n text += ' ';\n }\n if (ignoreElements[name]) {\n text += ' ';\n return;\n }\n if (node.type === 3) {\n text += node.value;\n }\n if (!node.shortEnded) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n }\n if (blockElements[name] && currentNode.next) {\n text += '\\n';\n if (name === 'p') {\n text += '\\n';\n }\n }\n }\n html = filter$1(html, [//g]);\n walk(domParser.parse(html));\n return text;\n }\n function trimHtml(html) {\n function trimSpaces(all, s1, s2) {\n if (!s1 && !s2) {\n return ' ';\n }\n return nbsp;\n }\n html = filter$1(html, [\n /^[\\s\\S]*]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/ig,\n /|/g,\n [\n /( ?)\\u00a0<\\/span>( ?)/g,\n trimSpaces\n ],\n /
    /g,\n /
    $/i\n ]);\n return html;\n }\n function createIdGenerator(prefix) {\n var count = 0;\n return function () {\n return prefix + count++;\n };\n }\n var isMsEdge = function () {\n return domGlobals.navigator.userAgent.indexOf(' Edge/') !== -1;\n };\n var Utils = {\n filter: filter$1,\n innerText: innerText,\n trimHtml: trimHtml,\n createIdGenerator: createIdGenerator,\n isMsEdge: isMsEdge\n };\n\n function isWordContent(content) {\n return / 1) {\n currentListNode.attr('start', '' + start);\n }\n paragraphNode.wrap(currentListNode);\n } else {\n currentListNode.append(paragraphNode);\n }\n paragraphNode.name = 'li';\n if (level > lastLevel && prevListNode) {\n prevListNode.lastChild.append(currentListNode);\n }\n lastLevel = level;\n removeIgnoredNodes(paragraphNode);\n trimListStart(paragraphNode, /^\\u00a0+/);\n trimListStart(paragraphNode, /^\\s*([\\u2022\\u00b7\\u00a7\\u25CF]|\\w+\\.)/);\n trimListStart(paragraphNode, /^\\u00a0+/);\n }\n var elements = [];\n var child = node.firstChild;\n while (typeof child !== 'undefined' && child !== null) {\n elements.push(child);\n child = child.walk();\n if (child !== null) {\n while (typeof child !== 'undefined' && child.parent !== node) {\n child = child.walk();\n }\n }\n }\n for (var i = 0; i < elements.length; i++) {\n node = elements[i];\n if (node.name === 'p' && node.firstChild) {\n var nodeText = getText(node);\n if (isBulletList(nodeText)) {\n convertParagraphToLi(node, 'ul');\n continue;\n }\n if (isNumericList(nodeText)) {\n var matches = /([0-9]+)\\./.exec(nodeText);\n var start = 1;\n if (matches) {\n start = parseInt(matches[1], 10);\n }\n convertParagraphToLi(node, 'ol', start);\n continue;\n }\n if (node._listLevel) {\n convertParagraphToLi(node, 'ul', 1);\n continue;\n }\n currentListNode = null;\n } else {\n prevListNode = currentListNode;\n currentListNode = null;\n }\n }\n }\n function filterStyles(editor, validStyles, node, styleValue) {\n var outputStyles = {}, matches;\n var styles = editor.dom.parseStyle(styleValue);\n global$4.each(styles, function (value, name) {\n switch (name) {\n case 'mso-list':\n matches = /\\w+ \\w+([0-9]+)/i.exec(styleValue);\n if (matches) {\n node._listLevel = parseInt(matches[1], 10);\n }\n if (/Ignore/i.test(value) && node.firstChild) {\n node._listIgnore = true;\n node.firstChild._listIgnore = true;\n }\n break;\n case 'horiz-align':\n name = 'text-align';\n break;\n case 'vert-align':\n name = 'vertical-align';\n break;\n case 'font-color':\n case 'mso-foreground':\n name = 'color';\n break;\n case 'mso-background':\n case 'mso-highlight':\n name = 'background';\n break;\n case 'font-weight':\n case 'font-style':\n if (value !== 'normal') {\n outputStyles[name] = value;\n }\n return;\n case 'mso-element':\n if (/^(comment|comment-list)$/i.test(value)) {\n node.remove();\n return;\n }\n break;\n }\n if (name.indexOf('mso-comment') === 0) {\n node.remove();\n return;\n }\n if (name.indexOf('mso-') === 0) {\n return;\n }\n if (Settings.getRetainStyleProps(editor) === 'all' || validStyles && validStyles[name]) {\n outputStyles[name] = value;\n }\n });\n if (/(bold)/i.test(outputStyles['font-weight'])) {\n delete outputStyles['font-weight'];\n node.wrap(new global$9('b', 1));\n }\n if (/(italic)/i.test(outputStyles['font-style'])) {\n delete outputStyles['font-style'];\n node.wrap(new global$9('i', 1));\n }\n outputStyles = editor.dom.serializeStyle(outputStyles, node.name);\n if (outputStyles) {\n return outputStyles;\n }\n return null;\n }\n var filterWordContent = function (editor, content) {\n var retainStyleProperties, validStyles;\n retainStyleProperties = Settings.getRetainStyleProps(editor);\n if (retainStyleProperties) {\n validStyles = global$4.makeMap(retainStyleProperties.split(/[, ]/));\n }\n content = Utils.filter(content, [\n /
    /gi,\n /]+id=\"?docs-internal-[^>]*>/gi,\n //gi,\n /<(!|script[^>]*>.*?<\\/script(?=[>\\s])|\\/?(\\?xml(:\\w+)?|img|meta|link|style|\\w:\\w+)(?=[\\s\\/>]))[^>]*>/gi,\n [\n /<(\\/?)s>/gi,\n '<$1strike>'\n ],\n [\n / /gi,\n nbsp\n ],\n [\n /([\\s\\u00a0]*)<\\/span>/gi,\n function (str, spaces) {\n return spaces.length > 0 ? spaces.replace(/./, ' ').slice(Math.floor(spaces.length / 2)).split('').join(nbsp) : '';\n }\n ]\n ]);\n var validElements = Settings.getWordValidElements(editor);\n var schema = global$a({\n valid_elements: validElements,\n valid_children: '-li[p]'\n });\n global$4.each(schema.elements, function (rule) {\n if (!rule.attributes.class) {\n rule.attributes.class = {};\n rule.attributesOrder.push('class');\n }\n if (!rule.attributes.style) {\n rule.attributes.style = {};\n rule.attributesOrder.push('style');\n }\n });\n var domParser = global$7({}, schema);\n domParser.addAttributeFilter('style', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n node.attr('style', filterStyles(editor, validStyles, node, node.attr('style')));\n if (node.name === 'span' && node.parent && !node.attributes.length) {\n node.unwrap();\n }\n }\n });\n domParser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, className;\n while (i--) {\n node = nodes[i];\n className = node.attr('class');\n if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) {\n node.remove();\n }\n node.attr('class', null);\n }\n });\n domParser.addNodeFilter('del', function (nodes) {\n var i = nodes.length;\n while (i--) {\n nodes[i].remove();\n }\n });\n domParser.addNodeFilter('a', function (nodes) {\n var i = nodes.length, node, href, name;\n while (i--) {\n node = nodes[i];\n href = node.attr('href');\n name = node.attr('name');\n if (href && href.indexOf('#_msocom_') !== -1) {\n node.remove();\n continue;\n }\n if (href && href.indexOf('file://') === 0) {\n href = href.split('#')[1];\n if (href) {\n href = '#' + href;\n }\n }\n if (!href && !name) {\n node.unwrap();\n } else {\n if (name && !/^_?(?:toc|edn|ftn)/i.test(name)) {\n node.unwrap();\n continue;\n }\n node.attr({\n href: href,\n name: name\n });\n }\n }\n });\n var rootNode = domParser.parse(content);\n if (Settings.shouldConvertWordFakeLists(editor)) {\n convertFakeListsToProperLists(rootNode);\n }\n content = global$8({ validate: editor.settings.validate }, schema).serialize(rootNode);\n return content;\n };\n var preProcess = function (editor, content) {\n return Settings.shouldUseDefaultFilters(editor) ? filterWordContent(editor, content) : content;\n };\n var WordFilter = {\n preProcess: preProcess,\n isWordContent: isWordContent\n };\n\n var preProcess$1 = function (editor, html) {\n var parser = global$7({}, editor.schema);\n parser.addNodeFilter('meta', function (nodes) {\n global$4.each(nodes, function (node) {\n return node.remove();\n });\n });\n var fragment = parser.parse(html, {\n forced_root_block: false,\n isRootContent: true\n });\n return global$8({ validate: editor.settings.validate }, editor.schema).serialize(fragment);\n };\n var processResult = function (content, cancelled) {\n return {\n content: content,\n cancelled: cancelled\n };\n };\n var postProcessFilter = function (editor, html, internal, isWordHtml) {\n var tempBody = editor.dom.create('div', { style: 'display:none' }, html);\n var postProcessArgs = Events.firePastePostProcess(editor, tempBody, internal, isWordHtml);\n return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());\n };\n var filterContent = function (editor, content, internal, isWordHtml) {\n var preProcessArgs = Events.firePastePreProcess(editor, content, internal, isWordHtml);\n var filteredContent = preProcess$1(editor, preProcessArgs.content);\n if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {\n return postProcessFilter(editor, filteredContent, internal, isWordHtml);\n } else {\n return processResult(filteredContent, preProcessArgs.isDefaultPrevented());\n }\n };\n var process = function (editor, html, internal) {\n var isWordHtml = WordFilter.isWordContent(html);\n var content = isWordHtml ? WordFilter.preProcess(editor, html) : html;\n return filterContent(editor, content, internal, isWordHtml);\n };\n var ProcessFilters = { process: process };\n\n var pasteHtml = function (editor, html) {\n editor.insertContent(html, {\n merge: Settings.shouldMergeFormats(editor),\n paste: true\n });\n return true;\n };\n var isAbsoluteUrl = function (url) {\n return /^https?:\\/\\/[\\w\\?\\-\\/+=.&%@~#]+$/i.test(url);\n };\n var isImageUrl = function (url) {\n return isAbsoluteUrl(url) && /.(gif|jpe?g|png)$/.test(url);\n };\n var createImage = function (editor, url, pasteHtmlFn) {\n editor.undoManager.extra(function () {\n pasteHtmlFn(editor, url);\n }, function () {\n editor.insertContent('');\n });\n return true;\n };\n var createLink = function (editor, url, pasteHtmlFn) {\n editor.undoManager.extra(function () {\n pasteHtmlFn(editor, url);\n }, function () {\n editor.execCommand('mceInsertLink', false, url);\n });\n return true;\n };\n var linkSelection = function (editor, html, pasteHtmlFn) {\n return editor.selection.isCollapsed() === false && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;\n };\n var insertImage = function (editor, html, pasteHtmlFn) {\n return isImageUrl(html) ? createImage(editor, html, pasteHtmlFn) : false;\n };\n var smartInsertContent = function (editor, html) {\n global$4.each([\n linkSelection,\n insertImage,\n pasteHtml\n ], function (action) {\n return action(editor, html, pasteHtml) !== true;\n });\n };\n var insertContent = function (editor, html, pasteAsText) {\n if (pasteAsText || Settings.isSmartPasteEnabled(editor) === false) {\n pasteHtml(editor, html);\n } else {\n smartInsertContent(editor, html);\n }\n };\n var SmartPaste = {\n isImageUrl: isImageUrl,\n isAbsoluteUrl: isAbsoluteUrl,\n insertContent: insertContent\n };\n\n var isCollapsibleWhitespace = function (c) {\n return ' \\f\\t\\x0B'.indexOf(c) !== -1;\n };\n var isNewLineChar = function (c) {\n return c === '\\n' || c === '\\r';\n };\n var isNewline = function (text, idx) {\n return idx < text.length && idx >= 0 ? isNewLineChar(text[idx]) : false;\n };\n var normalizeWhitespace = function (text) {\n var result = foldl(text, function (acc, c) {\n if (isCollapsibleWhitespace(c) || c === nbsp) {\n if (acc.pcIsSpace || acc.str === '' || acc.str.length === text.length - 1 || isNewline(text, acc.str.length + 1)) {\n return {\n pcIsSpace: false,\n str: acc.str + nbsp\n };\n } else {\n return {\n pcIsSpace: true,\n str: acc.str + ' '\n };\n }\n } else {\n return {\n pcIsSpace: isNewLineChar(c),\n str: acc.str + c\n };\n }\n }, {\n pcIsSpace: false,\n str: ''\n });\n return result.str;\n };\n\n var doPaste = function (editor, content, internal, pasteAsText) {\n var args = ProcessFilters.process(editor, content, internal);\n if (args.cancelled === false) {\n SmartPaste.insertContent(editor, args.content, pasteAsText);\n }\n };\n var pasteHtml$1 = function (editor, html, internalFlag) {\n var internal = internalFlag ? internalFlag : InternalHtml.isMarked(html);\n doPaste(editor, InternalHtml.unmark(html), internal, false);\n };\n var pasteText = function (editor, text) {\n var encodedText = editor.dom.encode(text).replace(/\\r\\n/g, '\\n');\n var normalizedText = normalizeWhitespace(encodedText);\n var html = Newlines.convert(normalizedText, editor.settings.forced_root_block, editor.settings.forced_root_block_attrs);\n doPaste(editor, html, false, true);\n };\n var getDataTransferItems = function (dataTransfer) {\n var items = {};\n var mceInternalUrlPrefix = 'data:text/mce-internal,';\n if (dataTransfer) {\n if (dataTransfer.getData) {\n var legacyText = dataTransfer.getData('Text');\n if (legacyText && legacyText.length > 0) {\n if (legacyText.indexOf(mceInternalUrlPrefix) === -1) {\n items['text/plain'] = legacyText;\n }\n }\n }\n if (dataTransfer.types) {\n for (var i = 0; i < dataTransfer.types.length; i++) {\n var contentType = dataTransfer.types[i];\n try {\n items[contentType] = dataTransfer.getData(contentType);\n } catch (ex) {\n items[contentType] = '';\n }\n }\n }\n }\n return items;\n };\n var getClipboardContent = function (editor, clipboardEvent) {\n var content = getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer);\n return Utils.isMsEdge() ? global$4.extend(content, { 'text/html': '' }) : content;\n };\n var hasContentType = function (clipboardContent, mimeType) {\n return mimeType in clipboardContent && clipboardContent[mimeType].length > 0;\n };\n var hasHtmlOrText = function (content) {\n return hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');\n };\n var getBase64FromUri = function (uri) {\n var idx;\n idx = uri.indexOf(',');\n if (idx !== -1) {\n return uri.substr(idx + 1);\n }\n return null;\n };\n var isValidDataUriImage = function (settings, imgElm) {\n return settings.images_dataimg_filter ? settings.images_dataimg_filter(imgElm) : true;\n };\n var extractFilename = function (editor, str) {\n var m = str.match(/([\\s\\S]+?)\\.(?:jpeg|jpg|png|gif)$/i);\n return m ? editor.dom.encode(m[1]) : null;\n };\n var uniqueId = Utils.createIdGenerator('mceclip');\n var pasteImage = function (editor, imageItem) {\n var base64 = getBase64FromUri(imageItem.uri);\n var id = uniqueId();\n var name = editor.settings.images_reuse_filename && imageItem.blob.name ? extractFilename(editor, imageItem.blob.name) : id;\n var img = new domGlobals.Image();\n img.src = imageItem.uri;\n if (isValidDataUriImage(editor.settings, img)) {\n var blobCache = editor.editorUpload.blobCache;\n var blobInfo = void 0, existingBlobInfo = void 0;\n existingBlobInfo = blobCache.findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.base64() === base64;\n });\n if (!existingBlobInfo) {\n blobInfo = blobCache.create(id, imageItem.blob, base64, name);\n blobCache.add(blobInfo);\n } else {\n blobInfo = existingBlobInfo;\n }\n pasteHtml$1(editor, '', false);\n } else {\n pasteHtml$1(editor, '', false);\n }\n };\n var isClipboardEvent = function (event) {\n return event.type === 'paste';\n };\n var readBlobsAsDataUris = function (items) {\n return traverse(items, function (item) {\n return Future.nu(function (resolve) {\n var blob = item.getAsFile ? item.getAsFile() : item;\n var reader = new window.FileReader();\n reader.onload = function () {\n resolve({\n blob: blob,\n uri: reader.result\n });\n };\n reader.readAsDataURL(blob);\n });\n });\n };\n var getImagesFromDataTransfer = function (dataTransfer) {\n var items = dataTransfer.items ? map(from$1(dataTransfer.items), function (item) {\n return item.getAsFile();\n }) : [];\n var files = dataTransfer.files ? from$1(dataTransfer.files) : [];\n var images = filter(items.length > 0 ? items : files, function (file) {\n return /^image\\/(jpeg|png|gif|bmp)$/.test(file.type);\n });\n return images;\n };\n var pasteImageData = function (editor, e, rng) {\n var dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;\n if (editor.settings.paste_data_images && dataTransfer) {\n var images = getImagesFromDataTransfer(dataTransfer);\n if (images.length > 0) {\n e.preventDefault();\n readBlobsAsDataUris(images).get(function (blobResults) {\n if (rng) {\n editor.selection.setRng(rng);\n }\n each(blobResults, function (result) {\n pasteImage(editor, result);\n });\n });\n return true;\n }\n }\n return false;\n };\n var isBrokenAndroidClipboardEvent = function (e) {\n var clipboardData = e.clipboardData;\n return domGlobals.navigator.userAgent.indexOf('Android') !== -1 && clipboardData && clipboardData.items && clipboardData.items.length === 0;\n };\n var isKeyboardPasteEvent = function (e) {\n return global$5.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;\n };\n var registerEventHandlers = function (editor, pasteBin, pasteFormat) {\n var keyboardPasteEvent = value();\n var keyboardPastePlainTextState;\n editor.on('keydown', function (e) {\n function removePasteBinOnKeyUp(e) {\n if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n pasteBin.remove();\n }\n }\n if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;\n if (keyboardPastePlainTextState && global$2.webkit && domGlobals.navigator.userAgent.indexOf('Version/') !== -1) {\n return;\n }\n e.stopImmediatePropagation();\n keyboardPasteEvent.set(e);\n window.setTimeout(function () {\n keyboardPasteEvent.clear();\n }, 100);\n if (global$2.ie && keyboardPastePlainTextState) {\n e.preventDefault();\n Events.firePaste(editor, true);\n return;\n }\n pasteBin.remove();\n pasteBin.create();\n editor.once('keyup', removePasteBinOnKeyUp);\n editor.once('paste', function () {\n editor.off('keyup', removePasteBinOnKeyUp);\n });\n }\n });\n function insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal) {\n var content, isPlainTextHtml, isImage;\n if (hasContentType(clipboardContent, 'text/html')) {\n content = clipboardContent['text/html'];\n } else {\n content = pasteBin.getHtml();\n internal = internal ? internal : InternalHtml.isMarked(content);\n if (pasteBin.isDefaultContent(content)) {\n plainTextMode = true;\n }\n }\n content = Utils.trimHtml(content);\n pasteBin.remove();\n isPlainTextHtml = internal === false && Newlines.isPlainText(content);\n isImage = SmartPaste.isImageUrl(content);\n if (!content.length || isPlainTextHtml && !isImage) {\n plainTextMode = true;\n }\n if (plainTextMode || isImage) {\n if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {\n content = clipboardContent['text/plain'];\n } else {\n content = Utils.innerText(content);\n }\n }\n if (pasteBin.isDefaultContent(content)) {\n if (!isKeyBoardPaste) {\n editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.');\n }\n return;\n }\n if (plainTextMode) {\n pasteText(editor, content);\n } else {\n pasteHtml$1(editor, content, internal);\n }\n }\n var getLastRng = function () {\n return pasteBin.getLastRng() || editor.selection.getRng();\n };\n editor.on('paste', function (e) {\n var isKeyBoardPaste = keyboardPasteEvent.isSet();\n var clipboardContent = getClipboardContent(editor, e);\n var plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;\n var internal = hasContentType(clipboardContent, InternalHtml.internalHtmlMime());\n keyboardPastePlainTextState = false;\n if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {\n pasteBin.remove();\n return;\n }\n if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {\n pasteBin.remove();\n return;\n }\n if (!isKeyBoardPaste) {\n e.preventDefault();\n }\n if (global$2.ie && (!isKeyBoardPaste || e.ieFake) && !hasContentType(clipboardContent, 'text/html')) {\n pasteBin.create();\n editor.dom.bind(pasteBin.getEl(), 'paste', function (e) {\n e.stopPropagation();\n });\n editor.getDoc().execCommand('Paste', false, null);\n clipboardContent['text/html'] = pasteBin.getHtml();\n }\n if (hasContentType(clipboardContent, 'text/html')) {\n e.preventDefault();\n if (!internal) {\n internal = InternalHtml.isMarked(clipboardContent['text/html']);\n }\n insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);\n } else {\n global$3.setEditorTimeout(editor, function () {\n insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);\n }, 0);\n }\n });\n };\n var registerEventsAndFilters = function (editor, pasteBin, pasteFormat) {\n registerEventHandlers(editor, pasteBin, pasteFormat);\n var src;\n editor.parser.addNodeFilter('img', function (nodes, name, args) {\n var isPasteInsert = function (args) {\n return args.data && args.data.paste === true;\n };\n var remove = function (node) {\n if (!node.attr('data-mce-object') && src !== global$2.transparentSrc) {\n node.remove();\n }\n };\n var isWebKitFakeUrl = function (src) {\n return src.indexOf('webkit-fake-url') === 0;\n };\n var isDataUri = function (src) {\n return src.indexOf('data:') === 0;\n };\n if (!editor.settings.paste_data_images && isPasteInsert(args)) {\n var i = nodes.length;\n while (i--) {\n src = nodes[i].attr('src');\n if (!src) {\n continue;\n }\n if (isWebKitFakeUrl(src)) {\n remove(nodes[i]);\n } else if (!editor.settings.allow_html_data_urls && isDataUri(src)) {\n remove(nodes[i]);\n }\n }\n }\n });\n };\n\n var getPasteBinParent = function (editor) {\n return global$2.ie && editor.inline ? domGlobals.document.body : editor.getBody();\n };\n var isExternalPasteBin = function (editor) {\n return getPasteBinParent(editor) !== editor.getBody();\n };\n var delegatePasteEvents = function (editor, pasteBinElm, pasteBinDefaultContent) {\n if (isExternalPasteBin(editor)) {\n editor.dom.bind(pasteBinElm, 'paste keyup', function (e) {\n if (!isDefault(editor, pasteBinDefaultContent)) {\n editor.fire('paste');\n }\n });\n }\n };\n var create = function (editor, lastRngCell, pasteBinDefaultContent) {\n var dom = editor.dom, body = editor.getBody();\n var pasteBinElm;\n lastRngCell.set(editor.selection.getRng());\n pasteBinElm = editor.dom.add(getPasteBinParent(editor), 'div', {\n 'id': 'mcepastebin',\n 'class': 'mce-pastebin',\n 'contentEditable': true,\n 'data-mce-bogus': 'all',\n 'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'\n }, pasteBinDefaultContent);\n if (global$2.ie || global$2.gecko) {\n dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);\n }\n dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function (e) {\n e.stopPropagation();\n });\n delegatePasteEvents(editor, pasteBinElm, pasteBinDefaultContent);\n pasteBinElm.focus();\n editor.selection.select(pasteBinElm, true);\n };\n var remove = function (editor, lastRngCell) {\n if (getEl(editor)) {\n var pasteBinClone = void 0;\n var lastRng = lastRngCell.get();\n while (pasteBinClone = editor.dom.get('mcepastebin')) {\n editor.dom.remove(pasteBinClone);\n editor.dom.unbind(pasteBinClone);\n }\n if (lastRng) {\n editor.selection.setRng(lastRng);\n }\n }\n lastRngCell.set(null);\n };\n var getEl = function (editor) {\n return editor.dom.get('mcepastebin');\n };\n var getHtml = function (editor) {\n var pasteBinElm, pasteBinClones, i, dirtyWrappers, cleanWrapper;\n var copyAndRemove = function (toElm, fromElm) {\n toElm.appendChild(fromElm);\n editor.dom.remove(fromElm, true);\n };\n pasteBinClones = global$4.grep(getPasteBinParent(editor).childNodes, function (elm) {\n return elm.id === 'mcepastebin';\n });\n pasteBinElm = pasteBinClones.shift();\n global$4.each(pasteBinClones, function (pasteBinClone) {\n copyAndRemove(pasteBinElm, pasteBinClone);\n });\n dirtyWrappers = editor.dom.select('div[id=mcepastebin]', pasteBinElm);\n for (i = dirtyWrappers.length - 1; i >= 0; i--) {\n cleanWrapper = editor.dom.create('div');\n pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);\n copyAndRemove(cleanWrapper, dirtyWrappers[i]);\n }\n return pasteBinElm ? pasteBinElm.innerHTML : '';\n };\n var getLastRng = function (lastRng) {\n return lastRng.get();\n };\n var isDefaultContent = function (pasteBinDefaultContent, content) {\n return content === pasteBinDefaultContent;\n };\n var isPasteBin = function (elm) {\n return elm && elm.id === 'mcepastebin';\n };\n var isDefault = function (editor, pasteBinDefaultContent) {\n var pasteBinElm = getEl(editor);\n return isPasteBin(pasteBinElm) && isDefaultContent(pasteBinDefaultContent, pasteBinElm.innerHTML);\n };\n var PasteBin = function (editor) {\n var lastRng = Cell(null);\n var pasteBinDefaultContent = '%MCEPASTEBIN%';\n return {\n create: function () {\n return create(editor, lastRng, pasteBinDefaultContent);\n },\n remove: function () {\n return remove(editor, lastRng);\n },\n getEl: function () {\n return getEl(editor);\n },\n getHtml: function () {\n return getHtml(editor);\n },\n getLastRng: function () {\n return getLastRng(lastRng);\n },\n isDefault: function () {\n return isDefault(editor, pasteBinDefaultContent);\n },\n isDefaultContent: function (content) {\n return isDefaultContent(pasteBinDefaultContent, content);\n }\n };\n };\n\n var Clipboard = function (editor, pasteFormat) {\n var pasteBin = PasteBin(editor);\n editor.on('PreInit', function () {\n return registerEventsAndFilters(editor, pasteBin, pasteFormat);\n });\n return {\n pasteFormat: pasteFormat,\n pasteHtml: function (html, internalFlag) {\n return pasteHtml$1(editor, html, internalFlag);\n },\n pasteText: function (text) {\n return pasteText(editor, text);\n },\n pasteImageData: function (e, rng) {\n return pasteImageData(editor, e, rng);\n },\n getDataTransferItems: getDataTransferItems,\n hasHtmlOrText: hasHtmlOrText,\n hasContentType: hasContentType\n };\n };\n\n var hasWorkingClipboardApi = function (clipboardData) {\n return global$2.iOS === false && clipboardData !== undefined && typeof clipboardData.setData === 'function' && Utils.isMsEdge() !== true;\n };\n var setHtml5Clipboard = function (clipboardData, html, text) {\n if (hasWorkingClipboardApi(clipboardData)) {\n try {\n clipboardData.clearData();\n clipboardData.setData('text/html', html);\n clipboardData.setData('text/plain', text);\n clipboardData.setData(InternalHtml.internalHtmlMime(), html);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n };\n var setClipboardData = function (evt, data, fallback, done) {\n if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {\n evt.preventDefault();\n done();\n } else {\n fallback(data.html, done);\n }\n };\n var fallback = function (editor) {\n return function (html, done) {\n var markedHtml = InternalHtml.mark(html);\n var outer = editor.dom.create('div', {\n 'contenteditable': 'false',\n 'data-mce-bogus': 'all'\n });\n var inner = editor.dom.create('div', { contenteditable: 'true' }, markedHtml);\n editor.dom.setStyles(outer, {\n position: 'fixed',\n top: '0',\n left: '-3000px',\n width: '1000px',\n overflow: 'hidden'\n });\n outer.appendChild(inner);\n editor.dom.add(editor.getBody(), outer);\n var range = editor.selection.getRng();\n inner.focus();\n var offscreenRange = editor.dom.createRng();\n offscreenRange.selectNodeContents(inner);\n editor.selection.setRng(offscreenRange);\n global$3.setTimeout(function () {\n editor.selection.setRng(range);\n outer.parentNode.removeChild(outer);\n done();\n }, 0);\n };\n };\n var getData = function (editor) {\n return {\n html: editor.selection.getContent({ contextual: true }),\n text: editor.selection.getContent({ format: 'text' })\n };\n };\n var isTableSelection = function (editor) {\n return !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());\n };\n var hasSelectedContent = function (editor) {\n return !editor.selection.isCollapsed() || isTableSelection(editor);\n };\n var cut = function (editor) {\n return function (evt) {\n if (hasSelectedContent(editor)) {\n setClipboardData(evt, getData(editor), fallback(editor), function () {\n if (global$2.browser.isChrome()) {\n var rng_1 = editor.selection.getRng();\n global$3.setEditorTimeout(editor, function () {\n editor.selection.setRng(rng_1);\n editor.execCommand('Delete');\n }, 0);\n } else {\n editor.execCommand('Delete');\n }\n });\n }\n };\n };\n var copy = function (editor) {\n return function (evt) {\n if (hasSelectedContent(editor)) {\n setClipboardData(evt, getData(editor), fallback(editor), function () {\n });\n }\n };\n };\n var register$1 = function (editor) {\n editor.on('cut', cut(editor));\n editor.on('copy', copy(editor));\n };\n var CutCopy = { register: register$1 };\n\n var global$b = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var getCaretRangeFromEvent = function (editor, e) {\n return global$b.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc());\n };\n var isPlainTextFileUrl = function (content) {\n var plainTextContent = content['text/plain'];\n return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;\n };\n var setFocusedRange = function (editor, rng) {\n editor.focus();\n editor.selection.setRng(rng);\n };\n var setup = function (editor, clipboard, draggingInternallyState) {\n if (Settings.shouldBlockDrop(editor)) {\n editor.on('dragend dragover draggesture dragdrop drop drag', function (e) {\n e.preventDefault();\n e.stopPropagation();\n });\n }\n if (!Settings.shouldPasteDataImages(editor)) {\n editor.on('drop', function (e) {\n var dataTransfer = e.dataTransfer;\n if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) {\n e.preventDefault();\n }\n });\n }\n editor.on('drop', function (e) {\n var dropContent, rng;\n rng = getCaretRangeFromEvent(editor, e);\n if (e.isDefaultPrevented() || draggingInternallyState.get()) {\n return;\n }\n dropContent = clipboard.getDataTransferItems(e.dataTransfer);\n var internal = clipboard.hasContentType(dropContent, InternalHtml.internalHtmlMime());\n if ((!clipboard.hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && clipboard.pasteImageData(e, rng)) {\n return;\n }\n if (rng && Settings.shouldFilterDrop(editor)) {\n var content_1 = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain'];\n if (content_1) {\n e.preventDefault();\n global$3.setEditorTimeout(editor, function () {\n editor.undoManager.transact(function () {\n if (dropContent['mce-internal']) {\n editor.execCommand('Delete');\n }\n setFocusedRange(editor, rng);\n content_1 = Utils.trimHtml(content_1);\n if (!dropContent['text/html']) {\n clipboard.pasteText(content_1);\n } else {\n clipboard.pasteHtml(content_1, internal);\n }\n });\n });\n }\n }\n });\n editor.on('dragstart', function (e) {\n draggingInternallyState.set(true);\n });\n editor.on('dragover dragend', function (e) {\n if (Settings.shouldPasteDataImages(editor) && draggingInternallyState.get() === false) {\n e.preventDefault();\n setFocusedRange(editor, getCaretRangeFromEvent(editor, e));\n }\n if (e.type === 'dragend') {\n draggingInternallyState.set(false);\n }\n });\n };\n var DragDrop = { setup: setup };\n\n var setup$1 = function (editor) {\n var plugin = editor.plugins.paste;\n var preProcess = Settings.getPreProcess(editor);\n if (preProcess) {\n editor.on('PastePreProcess', function (e) {\n preProcess.call(plugin, plugin, e);\n });\n }\n var postProcess = Settings.getPostProcess(editor);\n if (postProcess) {\n editor.on('PastePostProcess', function (e) {\n postProcess.call(plugin, plugin, e);\n });\n }\n };\n var PrePostProcess = { setup: setup$1 };\n\n function addPreProcessFilter(editor, filterFunc) {\n editor.on('PastePreProcess', function (e) {\n e.content = filterFunc(editor, e.content, e.internal, e.wordContent);\n });\n }\n function addPostProcessFilter(editor, filterFunc) {\n editor.on('PastePostProcess', function (e) {\n filterFunc(editor, e.node);\n });\n }\n function removeExplorerBrElementsAfterBlocks(editor, html) {\n if (!WordFilter.isWordContent(html)) {\n return html;\n }\n var blockElements = [];\n global$4.each(editor.schema.getBlockElements(), function (block, blockName) {\n blockElements.push(blockName);\n });\n var explorerBlocksRegExp = new RegExp('(?:
     [\\\\s\\\\r\\\\n]+|
    )*(<\\\\/?(' + blockElements.join('|') + ')[^>]*>)(?:
     [\\\\s\\\\r\\\\n]+|
    )*', 'g');\n html = Utils.filter(html, [[\n explorerBlocksRegExp,\n '$1'\n ]]);\n html = Utils.filter(html, [\n [\n /

    /g,\n '

    '\n ],\n [\n /
    /g,\n ' '\n ],\n [\n /

    /g,\n '
    '\n ]\n ]);\n return html;\n }\n function removeWebKitStyles(editor, content, internal, isWordHtml) {\n if (isWordHtml || internal) {\n return content;\n }\n var webKitStylesSetting = Settings.getWebkitStyles(editor);\n var webKitStyles;\n if (Settings.shouldRemoveWebKitStyles(editor) === false || webKitStylesSetting === 'all') {\n return content;\n }\n if (webKitStylesSetting) {\n webKitStyles = webKitStylesSetting.split(/[, ]/);\n }\n if (webKitStyles) {\n var dom_1 = editor.dom, node_1 = editor.selection.getNode();\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, function (all, before, value, after) {\n var inputStyles = dom_1.parseStyle(dom_1.decode(value));\n var outputStyles = {};\n if (webKitStyles === 'none') {\n return before + after;\n }\n for (var i = 0; i < webKitStyles.length; i++) {\n var inputValue = inputStyles[webKitStyles[i]], currentValue = dom_1.getStyle(node_1, webKitStyles[i], true);\n if (/color/.test(webKitStyles[i])) {\n inputValue = dom_1.toHex(inputValue);\n currentValue = dom_1.toHex(currentValue);\n }\n if (currentValue !== inputValue) {\n outputStyles[webKitStyles[i]] = inputValue;\n }\n }\n outputStyles = dom_1.serializeStyle(outputStyles, 'span');\n if (outputStyles) {\n return before + ' style=\"' + outputStyles + '\"' + after;\n }\n return before + after;\n });\n } else {\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, '$1$3');\n }\n content = content.replace(/(<[^>]+) data-mce-style=\"([^\"]+)\"([^>]*>)/gi, function (all, before, value, after) {\n return before + ' style=\"' + value + '\"' + after;\n });\n return content;\n }\n function removeUnderlineAndFontInAnchor(editor, root) {\n editor.$('a', root).find('font,u').each(function (i, node) {\n editor.dom.remove(node, true);\n });\n }\n var setup$2 = function (editor) {\n if (global$2.webkit) {\n addPreProcessFilter(editor, removeWebKitStyles);\n }\n if (global$2.ie) {\n addPreProcessFilter(editor, removeExplorerBrElementsAfterBlocks);\n addPostProcessFilter(editor, removeUnderlineAndFontInAnchor);\n }\n };\n var Quirks = { setup: setup$2 };\n\n var makeSetupHandler = function (editor, clipboard) {\n return function (api) {\n api.setActive(clipboard.pasteFormat.get() === 'text');\n var pastePlainTextToggleHandler = function (e) {\n return api.setActive(e.state);\n };\n editor.on('PastePlainTextToggle', pastePlainTextToggleHandler);\n return function () {\n return editor.off('PastePlainTextToggle', pastePlainTextToggleHandler);\n };\n };\n };\n var register$2 = function (editor, clipboard) {\n editor.ui.registry.addToggleButton('pastetext', {\n active: false,\n icon: 'paste-text',\n tooltip: 'Paste as text',\n onAction: function () {\n return editor.execCommand('mceTogglePlainTextPaste');\n },\n onSetup: makeSetupHandler(editor, clipboard)\n });\n editor.ui.registry.addToggleMenuItem('pastetext', {\n text: 'Paste as text',\n onAction: function () {\n return editor.execCommand('mceTogglePlainTextPaste');\n },\n onSetup: makeSetupHandler(editor, clipboard)\n });\n };\n var Buttons = { register: register$2 };\n\n function Plugin () {\n global$1.add('paste', function (editor) {\n if (DetectProPlugin.hasProPlugin(editor) === false) {\n var draggingInternallyState = Cell(false);\n var pasteFormat = Cell(Settings.isPasteAsTextEnabled(editor) ? 'text' : 'html');\n var clipboard = Clipboard(editor, pasteFormat);\n var quirks = Quirks.setup(editor);\n Buttons.register(editor, clipboard);\n Commands.register(editor, clipboard);\n PrePostProcess.setup(editor);\n CutCopy.register(editor);\n DragDrop.setup(editor, clipboard, draggingInternallyState);\n return Api.get(clipboard, quirks);\n }\n });\n }\n\n Plugin();\n\n}(window));\n","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide//skin.mobile.min.css\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide/fonts//tinymce-mobile.woff\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide-dark//content.inline.css\";","// Exports the \"print\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/print')\n// ES2015:\n// import 'tinymce/plugins/print'\nrequire('./plugin.js');","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide-dark//skin.css\";","// 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');","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide//skin.min.css\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide-dark//skin.mobile.css\";","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var applyListFormat = function (editor, listName, styleValue) {\n var cmd = listName === 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList';\n editor.execCommand(cmd, false, styleValue === false ? null : { 'list-style-type': styleValue });\n };\n var Actions = { applyListFormat: applyListFormat };\n\n var register = function (editor) {\n editor.addCommand('ApplyUnorderedListStyle', function (ui, value) {\n Actions.applyListFormat(editor, 'UL', value['list-style-type']);\n });\n editor.addCommand('ApplyOrderedListStyle', function (ui, value) {\n Actions.applyListFormat(editor, 'OL', value['list-style-type']);\n });\n };\n var Commands = { register: register };\n\n var getNumberStyles = function (editor) {\n var styles = editor.getParam('advlist_number_styles', 'default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman');\n return styles ? styles.split(/[ ,]/) : [];\n };\n var getBulletStyles = function (editor) {\n var styles = editor.getParam('advlist_bullet_styles', 'default,circle,square');\n return styles ? styles.split(/[ ,]/) : [];\n };\n var Settings = {\n getNumberStyles: getNumberStyles,\n getBulletStyles: getBulletStyles\n };\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 isChildOfBody = function (editor, elm) {\n return editor.$.contains(editor.getBody(), elm);\n };\n var isTableCellNode = function (node) {\n return node && /^(TH|TD)$/.test(node.nodeName);\n };\n var isListNode = function (editor) {\n return function (node) {\n return node && /^(OL|UL|DL)$/.test(node.nodeName) && isChildOfBody(editor, node);\n };\n };\n var getSelectedStyleType = function (editor) {\n var listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n var style = editor.dom.getStyle(listElm, 'listStyleType');\n return Option.from(style);\n };\n var ListUtils = {\n isTableCellNode: isTableCellNode,\n isListNode: isListNode,\n getSelectedStyleType: getSelectedStyleType\n };\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 styleValueToText = function (styleValue) {\n return styleValue.replace(/\\-/g, ' ').replace(/\\b\\w/g, function (chr) {\n return chr.toUpperCase();\n });\n };\n var isWithinList = function (editor, e, nodeName) {\n var tableCellIndex = findIndex(e.parents, ListUtils.isTableCellNode);\n var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;\n var lists = global$1.grep(parents, ListUtils.isListNode(editor));\n return lists.length > 0 && lists[0].nodeName === nodeName;\n };\n var addSplitButton = function (editor, id, tooltip, cmd, nodeName, styles) {\n editor.ui.registry.addSplitButton(id, {\n tooltip: tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n presets: 'listpreview',\n columns: 3,\n fetch: function (callback) {\n var items = global$1.map(styles, function (styleValue) {\n var iconStyle = nodeName === 'OL' ? 'num' : 'bull';\n var iconName = styleValue === 'disc' || styleValue === 'decimal' ? 'default' : styleValue;\n var itemValue = styleValue === 'default' ? '' : styleValue;\n var displayText = styleValueToText(styleValue);\n return {\n type: 'choiceitem',\n value: itemValue,\n icon: 'list-' + iconStyle + '-' + iconName,\n text: displayText\n };\n });\n callback(items);\n },\n onAction: function () {\n return editor.execCommand(cmd);\n },\n onItemAction: function (splitButtonApi, value) {\n Actions.applyListFormat(editor, nodeName, value);\n },\n select: function (value) {\n var listStyleType = ListUtils.getSelectedStyleType(editor);\n return listStyleType.map(function (listStyle) {\n return value === listStyle;\n }).getOr(false);\n },\n onSetup: function (api) {\n var nodeChangeHandler = function (e) {\n api.setActive(isWithinList(editor, e, nodeName));\n };\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\n };\n }\n });\n };\n var addButton = function (editor, id, tooltip, cmd, nodeName, styles) {\n editor.ui.registry.addToggleButton(id, {\n active: false,\n tooltip: tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n onSetup: function (api) {\n var nodeChangeHandler = function (e) {\n api.setActive(isWithinList(editor, e, nodeName));\n };\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\n };\n },\n onAction: function () {\n return editor.execCommand(cmd);\n }\n });\n };\n var addControl = function (editor, id, tooltip, cmd, nodeName, styles) {\n if (styles.length > 0) {\n addSplitButton(editor, id, tooltip, cmd, nodeName, styles);\n } else {\n addButton(editor, id, tooltip, cmd, nodeName);\n }\n };\n var register$1 = function (editor) {\n addControl(editor, 'numlist', 'Numbered list', 'InsertOrderedList', 'OL', Settings.getNumberStyles(editor));\n addControl(editor, 'bullist', 'Bullet list', 'InsertUnorderedList', 'UL', Settings.getBulletStyles(editor));\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('advlist', function (editor) {\n var hasPlugin = function (editor, plugin) {\n var plugins = editor.settings.plugins ? editor.settings.plugins : '';\n return global$1.inArray(plugins.split(/[ ,]/), plugin) !== -1;\n };\n if (hasPlugin(editor, 'lists')) {\n Buttons.register(editor);\n Commands.register(editor);\n }\n });\n }\n\n Plugin();\n\n}());\n","// Exports the \"wordcount\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/wordcount')\n// ES2015:\n// import 'tinymce/plugins/wordcount'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\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 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 global = tinymce.util.Tools.resolve('tinymce.PluginManager');\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 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 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 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 return flatten(map(xs, f));\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 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 var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Option.none();\n };\n\n var keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\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 var map$1 = 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$1(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var get = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\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 sort = function (arr) {\n return arr.slice(0).sort();\n };\n var reqMessage = function (required, keys) {\n throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n };\n var unsuppMessage = function (unsupported) {\n throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n };\n var validateStrArr = function (label, array) {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each(array, function (a) {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n var invalidTypeMessage = function (incorrect, type) {\n throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n };\n var checkDupes = function (everything) {\n var sorted = sort(everything);\n var dupe = find(sorted, function (s, i) {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(function (d) {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n var MixedBag = function (required, optional) {\n var everything = required.concat(optional);\n if (everything.length === 0) {\n throw new Error('You must specify at least one required or optional field.');\n }\n validateStrArr('required', required);\n validateStrArr('optional', optional);\n checkDupes(everything);\n return function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n var unsupported = filter(keys$1, function (key) {\n return !contains(everything, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n var r = {};\n each(required, function (req) {\n r[req] = constant(obj[req]);\n });\n each(optional, function (opt) {\n r[opt] = constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());\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 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 isComment = function (element) {\n return type(element) === COMMENT || name(element) === '#comment';\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\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$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get$1 = 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 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 checkRange = function (str, substr, start) {\n if (substr === '') {\n return true;\n }\n if (str.length < substr.length) {\n return false;\n }\n var x = str.substr(start, start + substr.length);\n return x === substr;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var startsWith = function (str, prefix) {\n return checkRange(str, prefix, 0);\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n var trim = function (str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\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 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 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 var body = cached(function () {\n return getBody(Element.fromDom(domGlobals.document));\n });\n var getBody = function (doc) {\n var b = doc.dom().body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return Element.fromDom(b);\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 internalRemove = function (dom, property) {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n var set$1 = function (element, property, value) {\n var dom = element.dom();\n internalSet(dom, property, value);\n };\n var setAll$1 = function (element, css) {\n var dom = element.dom();\n each$1(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$2 = 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 remove$1 = function (element, property) {\n var dom = element.dom();\n internalRemove(dom, property);\n if (has$1(element, 'style') && trim(get$1(element, 'style')) === '') {\n remove(element, 'style');\n }\n };\n var copy = function (source, target) {\n var sourceDom = source.dom();\n var targetDom = target.dom();\n if (isSupported(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\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, domGlobals.Node.DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\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\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 chromeos = 'ChromeOS';\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 isChromeOS: isOS(chromeos, 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 chromeos: constant(chromeos)\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var isDesktop = !isPhone && !isTablet && !iOSwebview;\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 isDesktop: constant(isDesktop)\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 normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$1(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$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(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$1(uastring, 'chrome') && !contains$1(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$1(uastring, 'msie') || contains$1(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$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(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$1(uastring, 'iphone') || contains$1(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('mac os x'),\n versionRegexes: [/.*?mac\\ 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 name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent, mediaMatch) {\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, mediaMatch);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var mediaMatch = function (query) {\n return domGlobals.window.matchMedia(query).matches;\n };\n var platform = Cell(PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch));\n var detect$3 = function () {\n return platform.get();\n };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\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 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 = detect$3().browser;\n var contains$2 = browser.isIE() ? ieContains : regularContains;\n var is$1 = is;\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\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 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 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 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 = 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 after$1 = function (marker, elements) {\n each(elements, function (x, i) {\n var e = i === 0 ? marker : elements[i - 1];\n after(e, 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$2(rogue);\n });\n };\n var remove$2 = 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$2(wrapper);\n };\n\n var dimension = Immutable('width', 'height');\n var dimensions = Immutable('width', 'height');\n var grid = Immutable('rows', 'columns');\n var address = Immutable('row', 'column');\n var coords = Immutable('x', 'y');\n var detail = Immutable('element', 'rowspan', 'colspan');\n var detailnew = Immutable('element', 'rowspan', 'colspan', 'isNew');\n var extended = Immutable('element', 'rowspan', 'colspan', 'row', 'column');\n var rowdata = Immutable('element', 'cells', 'section');\n var elementnew = Immutable('element', 'isNew');\n var rowdatanew = Immutable('element', 'cells', 'section', 'isNew');\n var rowcells = Immutable('cells', 'section');\n var rowdetails = Immutable('details', 'section');\n var bounds = Immutable('startRow', 'startCol', 'finishRow', 'finishCol');\n\n var ancestors = function (scope, predicate, isRoot) {\n return filter(parents(scope, isRoot), predicate);\n };\n var children$1 = function (scope, predicate) {\n return filter(children(scope), predicate);\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 ancestors$1 = function (scope, selector, isRoot) {\n return ancestors(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var children$2 = function (scope, selector) {\n return children$1(scope, function (e) {\n return is(e, selector);\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 var child$1 = function (scope, predicate) {\n var pred = function (node) {\n return predicate(Element.fromDom(node));\n };\n var result = find(scope.dom().childNodes, pred);\n return result.map(Element.fromDom);\n };\n var descendant = function (scope, predicate) {\n var descend = function (node) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var child_1 = Element.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Option.some(child_1);\n }\n var res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope.dom());\n };\n\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var child$2 = function (scope, selector) {\n return child$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendant$1 = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$1 = function (scope, selector, isRoot) {\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n var firstLayer = function (scope, selector) {\n return filterFirstLayer(scope, selector, constant(true));\n };\n var filterFirstLayer = function (scope, selector, predicate) {\n return bind(children(scope), function (x) {\n return is(x, selector) ? predicate(x) ? [x] : [] : filterFirstLayer(x, selector, predicate);\n });\n };\n var LayerSelector = {\n firstLayer: firstLayer,\n filterFirstLayer: filterFirstLayer\n };\n\n var lookup = function (tags, element, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n if (isRoot(element)) {\n return Option.none();\n }\n if (contains(tags, name(element))) {\n return Option.some(element);\n }\n var isRootOrUpperTable = function (elm) {\n return is(elm, 'table') || isRoot(elm);\n };\n return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n };\n var cell = function (element, isRoot) {\n return lookup([\n 'td',\n 'th'\n ], element, isRoot);\n };\n var cells = function (ancestor) {\n return LayerSelector.firstLayer(ancestor, 'th,td');\n };\n var notCell = function (element, isRoot) {\n return lookup([\n 'caption',\n 'tr',\n 'tbody',\n 'tfoot',\n 'thead'\n ], element, isRoot);\n };\n var neighbours = function (selector, element) {\n return parent(element).map(function (parent) {\n return children$2(parent, selector);\n });\n };\n var neighbourCells = curry(neighbours, 'th,td');\n var neighbourRows = curry(neighbours, 'tr');\n var firstCell = function (ancestor) {\n return descendant$1(ancestor, 'th,td');\n };\n var table = function (element, isRoot) {\n return closest$1(element, 'table', isRoot);\n };\n var row = function (element, isRoot) {\n return lookup(['tr'], element, isRoot);\n };\n var rows = function (ancestor) {\n return LayerSelector.firstLayer(ancestor, 'tr');\n };\n var attr = function (element, property) {\n return parseInt(get$1(element, property), 10);\n };\n var grid$1 = function (element, rowProp, colProp) {\n var rowsCount = attr(element, rowProp);\n var cols = attr(element, colProp);\n return grid(rowsCount, cols);\n };\n var TableLookup = {\n cell: cell,\n firstCell: firstCell,\n cells: cells,\n neighbourCells: neighbourCells,\n table: table,\n row: row,\n rows: rows,\n notCell: notCell,\n neighbourRows: neighbourRows,\n attr: attr,\n grid: grid$1\n };\n\n var fromTable = function (table) {\n var rows = TableLookup.rows(table);\n return map(rows, function (row) {\n var element = row;\n var parent$1 = parent(element);\n var parentSection = parent$1.map(function (p) {\n var parentName = name(p);\n return parentName === 'tfoot' || parentName === 'thead' || parentName === 'tbody' ? parentName : 'tbody';\n }).getOr('tbody');\n var cells = map(TableLookup.cells(row), function (cell) {\n var rowspan = has$1(cell, 'rowspan') ? parseInt(get$1(cell, 'rowspan'), 10) : 1;\n var colspan = has$1(cell, 'colspan') ? parseInt(get$1(cell, 'colspan'), 10) : 1;\n return detail(cell, rowspan, colspan);\n });\n return rowdata(element, cells, parentSection);\n });\n };\n var fromPastedRows = function (rows, example) {\n return map(rows, function (row) {\n var cells = map(TableLookup.cells(row), function (cell) {\n var rowspan = has$1(cell, 'rowspan') ? parseInt(get$1(cell, 'rowspan'), 10) : 1;\n var colspan = has$1(cell, 'colspan') ? parseInt(get$1(cell, 'colspan'), 10) : 1;\n return detail(cell, rowspan, colspan);\n });\n return rowdata(row, cells, example.section());\n });\n };\n var DetailsList = {\n fromTable: fromTable,\n fromPastedRows: fromPastedRows\n };\n\n var key = function (row, column) {\n return row + ',' + column;\n };\n var getAt = function (warehouse, row, column) {\n var raw = warehouse.access()[key(row, column)];\n return raw !== undefined ? Option.some(raw) : Option.none();\n };\n var findItem = function (warehouse, item, comparator) {\n var filtered = filterItems(warehouse, function (detail) {\n return comparator(item, detail.element());\n });\n return filtered.length > 0 ? Option.some(filtered[0]) : Option.none();\n };\n var filterItems = function (warehouse, predicate) {\n var all = bind(warehouse.all(), function (r) {\n return r.cells();\n });\n return filter(all, predicate);\n };\n var generate = function (list) {\n var access = {};\n var cells = [];\n var maxRows = list.length;\n var maxColumns = 0;\n each(list, function (details, r) {\n var currentRow = [];\n each(details.cells(), function (detail) {\n var start = 0;\n while (access[key(r, start)] !== undefined) {\n start++;\n }\n var current = extended(detail.element(), detail.rowspan(), detail.colspan(), r, start);\n for (var i = 0; i < detail.colspan(); i++) {\n for (var j = 0; j < detail.rowspan(); j++) {\n var cr = r + j;\n var cc = start + i;\n var newpos = key(cr, cc);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, cc + 1);\n }\n }\n currentRow.push(current);\n });\n cells.push(rowdata(details.element(), currentRow, details.section()));\n });\n var grid$1 = grid(maxRows, maxColumns);\n return {\n grid: constant(grid$1),\n access: constant(access),\n all: constant(cells)\n };\n };\n var justCells = function (warehouse) {\n var rows = map(warehouse.all(), function (w) {\n return w.cells();\n });\n return flatten(rows);\n };\n var Warehouse = {\n generate: generate,\n getAt: getAt,\n findItem: findItem,\n filterItems: filterItems,\n justCells: justCells\n };\n\n var statsStruct = Immutable('minRow', 'minCol', 'maxRow', 'maxCol');\n var findSelectedStats = function (house, isSelected) {\n var totalColumns = house.grid().columns();\n var totalRows = house.grid().rows();\n var minRow = totalRows;\n var minCol = totalColumns;\n var maxRow = 0;\n var maxCol = 0;\n each$1(house.access(), function (detail) {\n if (isSelected(detail)) {\n var startRow = detail.row();\n var endRow = startRow + detail.rowspan() - 1;\n var startCol = detail.column();\n var endCol = startCol + detail.colspan() - 1;\n if (startRow < minRow) {\n minRow = startRow;\n } else if (endRow > maxRow) {\n maxRow = endRow;\n }\n if (startCol < minCol) {\n minCol = startCol;\n } else if (endCol > maxCol) {\n maxCol = endCol;\n }\n }\n });\n return statsStruct(minRow, minCol, maxRow, maxCol);\n };\n var makeCell = function (list, seenSelected, rowIndex) {\n var row = list[rowIndex].element();\n var td = Element.fromTag('td');\n append(td, Element.fromTag('br'));\n var f = seenSelected ? append : prepend;\n f(row, td);\n };\n var fillInGaps = function (list, house, stats, isSelected) {\n var totalColumns = house.grid().columns();\n var totalRows = house.grid().rows();\n for (var i = 0; i < totalRows; i++) {\n var seenSelected = false;\n for (var j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow() || i > stats.maxRow() || j < stats.minCol() || j > stats.maxCol())) {\n var needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(list, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n var clean = function (table, stats) {\n var emptyRows = filter(LayerSelector.firstLayer(table, 'tr'), function (row) {\n return row.dom().childElementCount === 0;\n });\n each(emptyRows, remove$2);\n if (stats.minCol() === stats.maxCol() || stats.minRow() === stats.maxRow()) {\n each(LayerSelector.firstLayer(table, 'th,td'), function (cell) {\n remove(cell, 'rowspan');\n remove(cell, 'colspan');\n });\n }\n remove(table, 'width');\n remove(table, 'height');\n remove$1(table, 'width');\n remove$1(table, 'height');\n };\n var extract = function (table, selectedSelector) {\n var isSelected = function (detail) {\n return is(detail.element(), selectedSelector);\n };\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var stats = findSelectedStats(house, isSelected);\n var selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n var unselectedCells = LayerSelector.filterFirstLayer(table, 'th,td', function (cell) {\n return is(cell, selector);\n });\n each(unselectedCells, remove$2);\n fillInGaps(list, house, stats, isSelected);\n clean(table, stats);\n return table;\n };\n var CopySelected = { extract: extract };\n\n var nbsp = '\\xA0';\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$3 = function (element) {\n return api.get(element);\n };\n var getOption = function (element) {\n return api.getOption(element);\n };\n var set$2 = function (element, value) {\n api.set(element, value);\n };\n\n var getEnd = function (element) {\n return name(element) === 'img' ? 1 : getOption(element).fold(function () {\n return children(element).length;\n }, function (v) {\n return v.length;\n });\n };\n var isTextNodeWithCursorPosition = function (el) {\n return getOption(el).filter(function (text) {\n return text.trim().length !== 0 || text.indexOf(nbsp) > -1;\n }).isSome();\n };\n var elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n var isCursorPosition = function (elem) {\n var hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains(elementsWithCursorPosition, name(elem));\n };\n\n var first = function (element) {\n return descendant(element, isCursorPosition);\n };\n var last$1 = function (element) {\n return descendantRtl(element, isCursorPosition);\n };\n var descendantRtl = function (scope, predicate) {\n var descend = function (element) {\n var children$1 = children(element);\n for (var i = children$1.length - 1; i >= 0; i--) {\n var child = children$1[i];\n if (predicate(child)) {\n return Option.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope);\n };\n\n var clone$1 = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone$1(original, false);\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 copy$1 = function (original, tag) {\n var nu = shallowAs(original, tag);\n var cloneChildren = children(deep(original));\n append$1(nu, cloneChildren);\n return nu;\n };\n\n var createCell = function () {\n var td = Element.fromTag('td');\n append(td, Element.fromTag('br'));\n return td;\n };\n var replace = function (cell, tag, attrs) {\n var replica = copy$1(cell, tag);\n each$1(attrs, function (v, k) {\n if (v === null) {\n remove(replica, k);\n } else {\n set(replica, k, v);\n }\n });\n return replica;\n };\n var pasteReplace = function (cell) {\n return cell;\n };\n var newRow = function (doc) {\n return function () {\n return Element.fromTag('tr', doc.dom());\n };\n };\n var cloneFormats = function (oldCell, newCell, formats) {\n var first$1 = first(oldCell);\n return first$1.map(function (firstText) {\n var formatSelector = formats.join(',');\n var parents = ancestors$1(firstText, formatSelector, function (element) {\n return eq(element, oldCell);\n });\n return foldr(parents, function (last, parent) {\n var clonedFormat = shallow(parent);\n remove(clonedFormat, 'contenteditable');\n append(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n var cellOperations = function (mutate, doc, formatsToClone) {\n var newCell = function (prev) {\n var docu = owner(prev.element());\n var td = Element.fromTag(name(prev.element()), docu.dom());\n var formats = formatsToClone.getOr([\n 'strong',\n 'em',\n 'b',\n 'i',\n 'span',\n 'font',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div'\n ]);\n var lastNode = formats.length > 0 ? cloneFormats(prev.element(), td, formats) : td;\n append(lastNode, Element.fromTag('br'));\n copy(prev.element(), td);\n remove$1(td, 'height');\n if (prev.colspan() !== 1) {\n remove$1(prev.element(), 'width');\n }\n mutate(prev.element(), td);\n return td;\n };\n return {\n row: newRow(doc),\n cell: newCell,\n replace: replace,\n gap: createCell\n };\n };\n var paste = function (doc) {\n return {\n row: newRow(doc),\n cell: createCell,\n replace: pasteReplace,\n gap: createCell\n };\n };\n var TableFill = {\n cellOperations: cellOperations,\n paste: paste\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 inSelection = function (bounds, detail) {\n var leftEdge = detail.column();\n var rightEdge = detail.column() + detail.colspan() - 1;\n var topEdge = detail.row();\n var bottomEdge = detail.row() + detail.rowspan() - 1;\n return leftEdge <= bounds.finishCol() && rightEdge >= bounds.startCol() && (topEdge <= bounds.finishRow() && bottomEdge >= bounds.startRow());\n };\n var isWithin = function (bounds, detail) {\n return detail.column() >= bounds.startCol() && detail.column() + detail.colspan() - 1 <= bounds.finishCol() && detail.row() >= bounds.startRow() && detail.row() + detail.rowspan() - 1 <= bounds.finishRow();\n };\n var isRectangular = function (warehouse, bounds) {\n var isRect = true;\n var detailIsWithin = curry(isWithin, bounds);\n for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {\n for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Option.some(bounds) : Option.none();\n };\n var CellBounds = {\n inSelection: inSelection,\n isWithin: isWithin,\n isRectangular: isRectangular\n };\n\n var getBounds = function (detailA, detailB) {\n return bounds(Math.min(detailA.row(), detailB.row()), Math.min(detailA.column(), detailB.column()), Math.max(detailA.row() + detailA.rowspan() - 1, detailB.row() + detailB.rowspan() - 1), Math.max(detailA.column() + detailA.colspan() - 1, detailB.column() + detailB.colspan() - 1));\n };\n var getAnyBox = function (warehouse, startCell, finishCell) {\n var startCoords = Warehouse.findItem(warehouse, startCell, eq);\n var finishCoords = Warehouse.findItem(warehouse, finishCell, eq);\n return startCoords.bind(function (sc) {\n return finishCoords.map(function (fc) {\n return getBounds(sc, fc);\n });\n });\n };\n var getBox = function (warehouse, startCell, finishCell) {\n return getAnyBox(warehouse, startCell, finishCell).bind(function (bounds) {\n return CellBounds.isRectangular(warehouse, bounds);\n });\n };\n var CellGroup = {\n getAnyBox: getAnyBox,\n getBox: getBox\n };\n\n var moveBy = function (warehouse, cell, row, column) {\n return Warehouse.findItem(warehouse, cell, eq).bind(function (detail) {\n var startRow = row > 0 ? detail.row() + detail.rowspan() - 1 : detail.row();\n var startCol = column > 0 ? detail.column() + detail.colspan() - 1 : detail.column();\n var dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(function (d) {\n return d.element();\n });\n });\n };\n var intercepts = function (warehouse, start, finish) {\n return CellGroup.getAnyBox(warehouse, start, finish).map(function (bounds) {\n var inside = Warehouse.filterItems(warehouse, curry(CellBounds.inSelection, bounds));\n return map(inside, function (detail) {\n return detail.element();\n });\n });\n };\n var parentCell = function (warehouse, innerCell) {\n var isContainedBy = function (c1, c2) {\n return contains$2(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(function (detail) {\n return detail.element();\n });\n };\n var CellFinder = {\n moveBy: moveBy,\n intercepts: intercepts,\n parentCell: parentCell\n };\n\n var moveBy$1 = function (cell, deltaRow, deltaColumn) {\n return TableLookup.table(cell).bind(function (table) {\n var warehouse = getWarehouse(table);\n return CellFinder.moveBy(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n var intercepts$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return CellFinder.intercepts(warehouse, first, last);\n };\n var nestedIntercepts = function (table, first, firstTable, last, lastTable) {\n var warehouse = getWarehouse(table);\n var optStartCell = eq(table, firstTable) ? Option.some(first) : CellFinder.parentCell(warehouse, first);\n var optLastCell = eq(table, lastTable) ? Option.some(last) : CellFinder.parentCell(warehouse, last);\n return optStartCell.bind(function (startCell) {\n return optLastCell.bind(function (lastCell) {\n return CellFinder.intercepts(warehouse, startCell, lastCell);\n });\n });\n };\n var getBox$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return CellGroup.getBox(warehouse, first, last);\n };\n var getWarehouse = function (table) {\n var list = DetailsList.fromTable(table);\n return Warehouse.generate(list);\n };\n var TablePositions = {\n moveBy: moveBy$1,\n intercepts: intercepts$1,\n nestedIntercepts: nestedIntercepts,\n getBox: getBox$1\n };\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n function DomUniverse () {\n var clone$1 = function (element) {\n return Element.fromDom(element.dom().cloneNode(false));\n };\n var document = function (element) {\n return element.dom().ownerDocument;\n };\n var isBoundary = function (element) {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains(TagBoundaries, name(element));\n };\n var isEmptyTag = function (element) {\n if (!isElement(element)) {\n return false;\n }\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n var isNonEditable = function (element) {\n return isElement(element) && get$1(element, 'contenteditable') === 'false';\n };\n var comparePosition = function (element, other) {\n return element.dom().compareDocumentPosition(other.dom());\n };\n var copyAttributesTo = function (source, destination) {\n var as = clone(source);\n setAll(destination, as);\n };\n return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor,\n all: parents\n }),\n down: constant({\n selector: descendants$1,\n predicate: descendants\n }),\n styles: constant({\n get: get$2,\n getRaw: getRaw,\n set: set$1,\n remove: remove$1\n }),\n attrs: constant({\n get: get$1,\n set: set,\n remove: remove,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before,\n after: after,\n afterAll: after$1,\n append: append,\n appendAll: append$1,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$2\n }),\n create: constant({\n nu: Element.fromTag,\n clone: clone$1,\n text: Element.fromText\n }),\n query: constant({\n comparePosition: comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children,\n name: name,\n parent: parent,\n document: document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n getText: get$3,\n setText: set$2,\n isBoundary: isBoundary,\n isEmptyTag: isEmptyTag,\n isNonEditable: isNonEditable\n }),\n eq: eq,\n is: is$1\n };\n }\n\n var leftRight = Immutable('left', 'right');\n var brokenPath = Immutable('first', 'second', 'splits');\n var bisect = function (universe, parent, child) {\n var children = universe.property().children(parent);\n var index = findIndex(children, curry(universe.eq, child));\n return index.map(function (ind) {\n return {\n before: constant(children.slice(0, ind)),\n after: constant(children.slice(ind + 1))\n };\n });\n };\n var breakToRight = function (universe, parent, child) {\n return bisect(universe, parent, child).map(function (parts) {\n var second = universe.create().clone(parent);\n universe.insert().appendAll(second, parts.after());\n universe.insert().after(parent, second);\n return leftRight(parent, second);\n });\n };\n var breakToLeft = function (universe, parent, child) {\n return bisect(universe, parent, child).map(function (parts) {\n var prior = universe.create().clone(parent);\n universe.insert().appendAll(prior, parts.before().concat([child]));\n universe.insert().appendAll(parent, parts.after());\n universe.insert().before(parent, prior);\n return leftRight(prior, parent);\n });\n };\n var breakPath = function (universe, item, isTop, breaker) {\n var next = function (child, group, splits) {\n var fallback = brokenPath(child, Option.none(), splits);\n if (isTop(child)) {\n return brokenPath(child, group, splits);\n } else {\n return universe.property().parent(child).bind(function (parent) {\n return breaker(universe, parent, child).map(function (breakage) {\n var extra = [{\n first: breakage.left,\n second: breakage.right\n }];\n var nextChild = isTop(parent) ? parent : breakage.left();\n return next(nextChild, Option.some(breakage.right()), splits.concat(extra));\n });\n }).getOr(fallback);\n }\n };\n return next(item, Option.none(), []);\n };\n\n var all$1 = function (universe, look, elements, f) {\n var head = elements[0];\n var tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n var oneAll = function (universe, look, elements) {\n return elements.length > 0 ? all$1(universe, look, elements, unsafeOne) : Option.none();\n };\n var unsafeOne = function (universe, look, head, tail) {\n var start = look(universe, head);\n return foldr(tail, function (b, a) {\n var current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n var commonElement = function (universe, start, end) {\n return start.bind(function (s) {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n var eq$1 = function (universe, item) {\n return curry(universe.eq, item);\n };\n var unsafeSubset = function (universe, common, ps1, ps2) {\n var children = universe.property().children(common);\n if (universe.eq(common, ps1[0])) {\n return Option.some([ps1[0]]);\n }\n if (universe.eq(common, ps2[0])) {\n return Option.some([ps2[0]]);\n }\n var finder = function (ps) {\n var topDown = reverse(ps);\n var index = findIndex(topDown, eq$1(universe, common)).getOr(-1);\n var item = index < topDown.length - 1 ? topDown[index + 1] : topDown[index];\n return findIndex(children, eq$1(universe, item));\n };\n var startIndex = finder(ps1);\n var endIndex = finder(ps2);\n return startIndex.bind(function (sIndex) {\n return endIndex.map(function (eIndex) {\n var first = Math.min(sIndex, eIndex);\n var last = Math.max(sIndex, eIndex);\n return children.slice(first, last + 1);\n });\n });\n };\n var ancestors$2 = function (universe, start, end, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n var ps1 = [start].concat(universe.up().all(start));\n var ps2 = [end].concat(universe.up().all(end));\n var prune = function (path) {\n var index = findIndex(path, isRoot);\n return index.fold(function () {\n return path;\n }, function (ind) {\n return path.slice(0, ind + 1);\n });\n };\n var pruned1 = prune(ps1);\n var pruned2 = prune(ps2);\n var shared = find(pruned1, function (x) {\n return exists(pruned2, eq$1(universe, x));\n });\n return {\n firstpath: constant(pruned1),\n secondpath: constant(pruned2),\n shared: constant(shared)\n };\n };\n var subset = function (universe, start, end) {\n var ancs = ancestors$2(universe, start, end);\n return ancs.shared().bind(function (shared) {\n return unsafeSubset(universe, shared, ancs.firstpath(), ancs.secondpath());\n });\n };\n var SubsetFn = {\n subset: subset,\n ancestors: ancestors$2\n };\n\n var sharedOne = oneAll;\n var subset$1 = SubsetFn.subset;\n var ancestors$3 = SubsetFn.ancestors;\n var breakToLeft$1 = breakToLeft;\n var breakToRight$1 = breakToRight;\n var breakPath$1 = breakPath;\n var Parent = {\n sharedOne: sharedOne,\n subset: subset$1,\n ancestors: ancestors$3,\n breakToLeft: breakToLeft$1,\n breakToRight: breakToRight$1,\n breakPath: breakPath$1\n };\n\n var universe = DomUniverse();\n var sharedOne$1 = function (look, elements) {\n return Parent.sharedOne(universe, function (_universe, element) {\n return look(element);\n }, elements);\n };\n var subset$2 = function (start, finish) {\n return Parent.subset(universe, start, finish);\n };\n var ancestors$4 = function (start, finish, isRoot) {\n return Parent.ancestors(universe, start, finish, isRoot);\n };\n var breakToLeft$2 = function (parent, child) {\n return Parent.breakToLeft(universe, parent, child);\n };\n var breakToRight$2 = function (parent, child) {\n return Parent.breakToRight(universe, parent, child);\n };\n var breakPath$2 = function (child, isTop, breaker) {\n return Parent.breakPath(universe, child, isTop, function (u, p, c) {\n return breaker(p, c);\n });\n };\n var DomParent = {\n sharedOne: sharedOne$1,\n subset: subset$2,\n ancestors: ancestors$4,\n breakToLeft: breakToLeft$2,\n breakToRight: breakToRight$2,\n breakPath: breakPath$2\n };\n\n var create = MixedBag([\n 'boxes',\n 'start',\n 'finish'\n ], []);\n var Identified = { create: create };\n\n var lookupTable = function (container) {\n return ancestor$1(container, 'table');\n };\n var identify = function (start, finish, isRoot) {\n var getIsRoot = function (rootTable) {\n return function (element) {\n return isRoot !== undefined && isRoot(element) || eq(element, rootTable);\n };\n };\n if (eq(start, finish)) {\n return Option.some(Identified.create({\n boxes: Option.some([start]),\n start: start,\n finish: finish\n }));\n } else {\n return lookupTable(start).bind(function (startTable) {\n return lookupTable(finish).bind(function (finishTable) {\n if (eq(startTable, finishTable)) {\n return Option.some(Identified.create({\n boxes: TablePositions.intercepts(startTable, start, finish),\n start: start,\n finish: finish\n }));\n } else if (contains$2(startTable, finishTable)) {\n var ancestorCells = ancestors$1(finish, 'td,th', getIsRoot(startTable));\n var finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start: start,\n finish: finishCell\n }));\n } else if (contains$2(finishTable, startTable)) {\n var ancestorCells = ancestors$1(start, 'td,th', getIsRoot(finishTable));\n var startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start: start,\n finish: startCell\n }));\n } else {\n return DomParent.ancestors(start, finish).shared().bind(function (lca) {\n return closest$1(lca, 'table', isRoot).bind(function (lcaTable) {\n var finishAncestorCells = ancestors$1(finish, 'td,th', getIsRoot(lcaTable));\n var finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n var startAncestorCells = ancestors$1(start, 'td,th', getIsRoot(lcaTable));\n var startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n }));\n });\n });\n }\n });\n });\n }\n };\n var retrieve = function (container, selector) {\n var sels = descendants$1(container, selector);\n return sels.length > 0 ? Option.some(sels) : Option.none();\n };\n var getLast = function (boxes, lastSelectedSelector) {\n return find(boxes, function (box) {\n return is(box, lastSelectedSelector);\n });\n };\n var getEdges = function (container, firstSelectedSelector, lastSelectedSelector) {\n return descendant$1(container, firstSelectedSelector).bind(function (first) {\n return descendant$1(container, lastSelectedSelector).bind(function (last) {\n return DomParent.sharedOne(lookupTable, [\n first,\n last\n ]).map(function (tbl) {\n return {\n first: constant(first),\n last: constant(last),\n table: constant(tbl)\n };\n });\n });\n });\n };\n var expandTo = function (finish, firstSelectedSelector) {\n return ancestor$1(finish, 'table').bind(function (table) {\n return descendant$1(table, firstSelectedSelector).bind(function (start) {\n return identify(start, finish).bind(function (identified) {\n return identified.boxes().map(function (boxes) {\n return {\n boxes: constant(boxes),\n start: constant(identified.start()),\n finish: constant(identified.finish())\n };\n });\n });\n });\n });\n };\n var shiftSelection = function (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) {\n return getLast(boxes, lastSelectedSelector).bind(function (last) {\n return TablePositions.moveBy(last, deltaRow, deltaColumn).bind(function (finish) {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n var CellSelection = {\n identify: identify,\n retrieve: retrieve,\n shiftSelection: shiftSelection,\n getEdges: getEdges\n };\n\n var retrieve$1 = function (container, selector) {\n return CellSelection.retrieve(container, selector);\n };\n var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {\n return CellSelection.getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {\n var isRoot = function (ancestor) {\n return eq(container, ancestor);\n };\n var firstAncestor = ancestor$1(edges.first(), 'thead,tfoot,tbody,table', isRoot);\n var lastAncestor = ancestor$1(edges.last(), 'thead,tfoot,tbody,table', isRoot);\n return firstAncestor.bind(function (fA) {\n return lastAncestor.bind(function (lA) {\n return eq(fA, lA) ? TablePositions.getBox(edges.table(), edges.first(), edges.last()) : Option.none();\n });\n });\n });\n };\n var TableSelection = {\n retrieve: retrieve$1,\n retrieveBox: retrieveBox\n };\n\n var selected = 'data-mce-selected';\n var selectedSelector = 'td[' + selected + '],th[' + selected + ']';\n var attributeSelector = '[' + selected + ']';\n var firstSelected = 'data-mce-first-selected';\n var firstSelectedSelector = 'td[' + firstSelected + '],th[' + firstSelected + ']';\n var lastSelected = 'data-mce-last-selected';\n var lastSelectedSelector = 'td[' + lastSelected + '],th[' + lastSelected + ']';\n var Ephemera = {\n selected: constant(selected),\n selectedSelector: constant(selectedSelector),\n attributeSelector: constant(attributeSelector),\n firstSelected: constant(firstSelected),\n firstSelectedSelector: constant(firstSelectedSelector),\n lastSelected: constant(lastSelected),\n lastSelectedSelector: constant(lastSelectedSelector)\n };\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 type$1 = Adt.generate([\n { none: [] },\n { multiple: ['elements'] },\n { single: ['selection'] }\n ]);\n var cata = function (subject, onNone, onMultiple, onSingle) {\n return subject.fold(onNone, onMultiple, onSingle);\n };\n var SelectionTypes = {\n cata: cata,\n none: type$1.none,\n multiple: type$1.multiple,\n single: type$1.single\n };\n\n var selection = function (cell, selections) {\n return SelectionTypes.cata(selections.get(), constant([]), identity, constant([cell]));\n };\n var unmergable = function (cell, selections) {\n var hasSpan = function (elem) {\n return has$1(elem, 'rowspan') && parseInt(get$1(elem, 'rowspan'), 10) > 1 || has$1(elem, 'colspan') && parseInt(get$1(elem, 'colspan'), 10) > 1;\n };\n var candidates = selection(cell, selections);\n return candidates.length > 0 && forall(candidates, hasSpan) ? Option.some(candidates) : Option.none();\n };\n var mergable = function (table, selections) {\n return SelectionTypes.cata(selections.get(), Option.none, function (cells, _env) {\n if (cells.length === 0) {\n return Option.none();\n }\n return TableSelection.retrieveBox(table, Ephemera.firstSelectedSelector(), Ephemera.lastSelectedSelector()).bind(function (bounds) {\n return cells.length > 1 ? Option.some({\n bounds: constant(bounds),\n cells: constant(cells)\n }) : Option.none();\n });\n }, Option.none);\n };\n var CellOperations = {\n mergable: mergable,\n unmergable: unmergable,\n selection: selection\n };\n\n var noMenu = function (cell) {\n return {\n element: constant(cell),\n mergable: Option.none,\n unmergable: Option.none,\n selection: constant([cell])\n };\n };\n var forMenu = function (selections, table, cell) {\n return {\n element: constant(cell),\n mergable: constant(CellOperations.mergable(table, selections)),\n unmergable: constant(CellOperations.unmergable(cell, selections)),\n selection: constant(CellOperations.selection(cell, selections))\n };\n };\n var notCell$1 = function (element) {\n return noMenu(element);\n };\n var paste$1 = Immutable('element', 'clipboard', 'generators');\n var pasteRows = function (selections, table, cell, clipboard, generators) {\n return {\n element: constant(cell),\n mergable: Option.none,\n unmergable: Option.none,\n selection: constant(CellOperations.selection(cell, selections)),\n clipboard: constant(clipboard),\n generators: constant(generators)\n };\n };\n var TableTargets = {\n noMenu: noMenu,\n forMenu: forMenu,\n notCell: notCell$1,\n paste: paste$1,\n pasteRows: pasteRows\n };\n\n var extractSelected = function (cells) {\n return TableLookup.table(cells[0]).map(deep).map(function (replica) {\n return [CopySelected.extract(replica, Ephemera.attributeSelector())];\n });\n };\n var serializeElements = function (editor, elements) {\n return map(elements, function (elm) {\n return editor.selection.serializer.serialize(elm.dom(), {});\n }).join('');\n };\n var getTextContent = function (elements) {\n return map(elements, function (element) {\n return element.dom().innerText;\n }).join('');\n };\n var registerEvents = function (editor, selections, actions, cellSelection) {\n editor.on('BeforeGetContent', function (e) {\n var multiCellContext = function (cells) {\n e.preventDefault();\n extractSelected(cells).each(function (elements) {\n e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);\n });\n };\n if (e.selection === true) {\n SelectionTypes.cata(selections.get(), noop, multiCellContext, noop);\n }\n });\n editor.on('BeforeSetContent', function (e) {\n if (e.selection === true && e.paste === true) {\n var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\n cellOpt.each(function (domCell) {\n var cell = Element.fromDom(domCell);\n TableLookup.table(cell).each(function (table) {\n var elements = filter(fromHtml$1(e.content), function (content) {\n return name(content) !== 'meta';\n });\n if (elements.length === 1 && name(elements[0]) === 'table') {\n e.preventDefault();\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.paste(doc);\n var targets = TableTargets.paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n });\n }\n });\n });\n }\n });\n };\n var Clipboard = { registerEvents: registerEvents };\n\n function Dimension (name, getOffset) {\n var set = function (element, h) {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n var dom = element.dom();\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$2(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$2(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n }\n\n var api$1 = Dimension('height', function (element) {\n var dom = element.dom();\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$4 = function (element) {\n return api$1.get(element);\n };\n var getOuter = function (element) {\n return api$1.getOuter(element);\n };\n\n var api$2 = Dimension('width', function (element) {\n return element.dom().offsetWidth;\n });\n var get$5 = function (element) {\n return api$2.get(element);\n };\n var getOuter$1 = function (element) {\n return api$2.getOuter(element);\n };\n\n var platform$1 = detect$3();\n var needManualCalc = function () {\n return platform$1.browser.isIE() || platform$1.browser.isEdge();\n };\n var toNumber = function (px, fallback) {\n var num = parseFloat(px);\n return isNaN(num) ? fallback : num;\n };\n var getProp = function (elm, name, fallback) {\n return toNumber(get$2(elm, name), fallback);\n };\n var getCalculatedHeight = function (cell) {\n var paddingTop = getProp(cell, 'padding-top', 0);\n var paddingBottom = getProp(cell, 'padding-bottom', 0);\n var borderTop = getProp(cell, 'border-top-width', 0);\n var borderBottom = getProp(cell, 'border-bottom-width', 0);\n var height = cell.dom().getBoundingClientRect().height;\n var boxSizing = get$2(cell, 'box-sizing');\n var borders = borderTop + borderBottom;\n return boxSizing === 'border-box' ? height : height - paddingTop - paddingBottom - borders;\n };\n var getWidth = function (cell) {\n return getProp(cell, 'width', get$5(cell));\n };\n var getHeight = function (cell) {\n return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', get$4(cell));\n };\n var RuntimeSize = {\n getWidth: getWidth,\n getHeight: getHeight\n };\n\n var genericSizeRegex = /(\\d+(\\.\\d+)?)(\\w|%)*/;\n var percentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var pixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n var setPixelWidth = function (cell, amount) {\n set$1(cell, 'width', amount + 'px');\n };\n var setPercentageWidth = function (cell, amount) {\n set$1(cell, 'width', amount + '%');\n };\n var setHeight = function (cell, amount) {\n set$1(cell, 'height', amount + 'px');\n };\n var getHeightValue = function (cell) {\n return getRaw(cell, 'height').getOrThunk(function () {\n return RuntimeSize.getHeight(cell) + 'px';\n });\n };\n var convert = function (cell, number, getter, setter) {\n var newSize = TableLookup.table(cell).map(function (table) {\n var total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n var normalizePixelSize = function (value, cell, getter, setter) {\n var number = parseInt(value, 10);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n var getTotalHeight = function (cell) {\n var value = getHeightValue(cell);\n if (!value) {\n return get$4(cell);\n }\n return normalizePixelSize(value, cell, get$4, setHeight);\n };\n var get$6 = function (cell, type, f) {\n var v = f(cell);\n var span = getSpan(cell, type);\n return v / span;\n };\n var getSpan = function (cell, type) {\n return has$1(cell, type) ? parseInt(get$1(cell, type), 10) : 1;\n };\n var getRawWidth = function (element) {\n var cssWidth = getRaw(element, 'width');\n return cssWidth.fold(function () {\n return Option.from(get$1(element, 'width'));\n }, function (width) {\n return Option.some(width);\n });\n };\n var normalizePercentageWidth = function (cellWidth, tableSize) {\n return cellWidth / tableSize.pixelWidth() * 100;\n };\n var choosePercentageSize = function (element, width, tableSize) {\n var percentMatch = percentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n return parseFloat(percentMatch[1]);\n } else {\n var intWidth = get$5(element);\n return normalizePercentageWidth(intWidth, tableSize);\n }\n };\n var getPercentageWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n var intWidth = get$5(cell);\n return normalizePercentageWidth(intWidth, tableSize);\n }, function (w) {\n return choosePercentageSize(cell, w, tableSize);\n });\n };\n var normalizePixelWidth = function (cellWidth, tableSize) {\n return cellWidth / 100 * tableSize.pixelWidth();\n };\n var choosePixelSize = function (element, width, tableSize) {\n var pixelMatch = pixelBasedSizeRegex.exec(width);\n if (pixelMatch !== null) {\n return parseInt(pixelMatch[1], 10);\n }\n var percentMatch = percentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n var floatWidth = parseFloat(percentMatch[1]);\n return normalizePixelWidth(floatWidth, tableSize);\n }\n return get$5(element);\n };\n var getPixelWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n return get$5(cell);\n }, function (w) {\n return choosePixelSize(cell, w, tableSize);\n });\n };\n var getHeight$1 = function (cell) {\n return get$6(cell, 'rowspan', getTotalHeight);\n };\n var getGenericWidth = function (cell) {\n var width = getRawWidth(cell);\n return width.bind(function (w) {\n var match = genericSizeRegex.exec(w);\n if (match !== null) {\n return Option.some({\n width: constant(parseFloat(match[1])),\n unit: constant(match[3])\n });\n } else {\n return Option.none();\n }\n });\n };\n var setGenericWidth = function (cell, amount, unit) {\n set$1(cell, 'width', amount + unit);\n };\n var Sizes = {\n percentageBasedSizeRegex: constant(percentageBasedSizeRegex),\n pixelBasedSizeRegex: constant(pixelBasedSizeRegex),\n setPixelWidth: setPixelWidth,\n setPercentageWidth: setPercentageWidth,\n setHeight: setHeight,\n getPixelWidth: getPixelWidth,\n getPercentageWidth: getPercentageWidth,\n getGenericWidth: getGenericWidth,\n setGenericWidth: setGenericWidth,\n getHeight: getHeight$1,\n getRawWidth: getRawWidth\n };\n\n var halve = function (main, other) {\n var width = Sizes.getGenericWidth(main);\n width.each(function (w) {\n var newWidth = w.width() / 2;\n Sizes.setGenericWidth(main, newWidth, w.unit());\n Sizes.setGenericWidth(other, newWidth, w.unit());\n });\n };\n var CellMutations = { halve: halve };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: constant(left),\n top: constant(top),\n translate: translate\n };\n };\n var Position = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return Position(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n return a !== undefined ? a : b !== undefined ? b : 0;\n };\n var absolute = function (element) {\n var doc = element.dom().ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom()) {\n return Position(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom();\n var doc = dom.ownerDocument;\n var body = doc.body;\n if (body === dom) {\n return Position(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return Position(0, 0);\n }\n return boxPosition(dom);\n };\n\n var rowInfo = Immutable('row', 'y');\n var colInfo = Immutable('col', 'x');\n var rtlEdge = function (cell) {\n var pos = absolute(cell);\n return pos.left() + getOuter$1(cell);\n };\n var ltrEdge = function (cell) {\n return absolute(cell).left();\n };\n var getLeftEdge = function (index, cell) {\n return colInfo(index, ltrEdge(cell));\n };\n var getRightEdge = function (index, cell) {\n return colInfo(index, rtlEdge(cell));\n };\n var getTop = function (cell) {\n return absolute(cell).top();\n };\n var getTopEdge = function (index, cell) {\n return rowInfo(index, getTop(cell));\n };\n var getBottomEdge = function (index, cell) {\n return rowInfo(index, getTop(cell) + getOuter(cell));\n };\n var findPositions = function (getInnerEdge, getOuterEdge, array) {\n if (array.length === 0) {\n return [];\n }\n var lines = map(array.slice(1), function (cellOption, index) {\n return cellOption.map(function (cell) {\n return getInnerEdge(index, cell);\n });\n });\n var lastLine = array[array.length - 1].map(function (cell) {\n return getOuterEdge(array.length - 1, cell);\n });\n return lines.concat([lastLine]);\n };\n var negate = function (step) {\n return -step;\n };\n var height = {\n delta: identity,\n positions: function (optElements) {\n return findPositions(getTopEdge, getBottomEdge, optElements);\n },\n edge: getTop\n };\n var ltr = {\n delta: identity,\n edge: ltrEdge,\n positions: function (optElements) {\n return findPositions(getLeftEdge, getRightEdge, optElements);\n }\n };\n var rtl = {\n delta: negate,\n edge: rtlEdge,\n positions: function (optElements) {\n return findPositions(getRightEdge, getLeftEdge, optElements);\n }\n };\n var BarPositions = {\n height: height,\n rtl: rtl,\n ltr: ltr\n };\n\n var ResizeDirection = {\n ltr: BarPositions.ltr,\n rtl: BarPositions.rtl\n };\n\n function TableDirection (directionAt) {\n var auto = function (table) {\n return directionAt(table).isRtl() ? ResizeDirection.rtl : ResizeDirection.ltr;\n };\n var delta = function (amount, table) {\n return auto(table).delta(amount, table);\n };\n var positions = function (cols, table) {\n return auto(table).positions(cols, table);\n };\n var edge = function (cell) {\n return auto(cell).edge(cell);\n };\n return {\n delta: delta,\n edge: edge,\n positions: positions\n };\n }\n\n var getGridSize = function (table) {\n var input = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(input);\n return warehouse.grid();\n };\n var TableGridSize = { getGridSize: getGridSize };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n\n var setIfNot = function (element, property, value, ignore) {\n if (value === ignore) {\n remove(element, property);\n } else {\n set(element, property, value);\n }\n };\n var render = function (table, grid) {\n var newRows = [];\n var newCells = [];\n var renderSection = function (gridSection, sectionName) {\n var section = child$2(table, sectionName).getOrThunk(function () {\n var tb = Element.fromTag(sectionName, owner(table).dom());\n append(table, tb);\n return tb;\n });\n empty(section);\n var rows = map(gridSection, function (row) {\n if (row.isNew()) {\n newRows.push(row.element());\n }\n var tr = row.element();\n empty(tr);\n each(row.cells(), function (cell) {\n if (cell.isNew()) {\n newCells.push(cell.element());\n }\n setIfNot(cell.element(), 'colspan', cell.colspan(), 1);\n setIfNot(cell.element(), 'rowspan', cell.rowspan(), 1);\n append(tr, cell.element());\n });\n return tr;\n });\n append$1(section, rows);\n };\n var removeSection = function (sectionName) {\n child$2(table, sectionName).each(remove$2);\n };\n var renderOrRemoveSection = function (gridSection, sectionName) {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n var headSection = [];\n var bodySection = [];\n var footSection = [];\n each(grid, function (row) {\n switch (row.section()) {\n case 'thead':\n headSection.push(row);\n break;\n case 'tbody':\n bodySection.push(row);\n break;\n case 'tfoot':\n footSection.push(row);\n break;\n }\n });\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows: constant(newRows),\n newCells: constant(newCells)\n };\n };\n var copy$2 = function (grid) {\n var rows = map(grid, function (row) {\n var tr = shallow(row.element());\n each(row.cells(), function (cell) {\n var clonedCell = deep(cell.element());\n setIfNot(clonedCell, 'colspan', cell.colspan(), 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan(), 1);\n append(tr, clonedCell);\n });\n return tr;\n });\n return rows;\n };\n var Redraw = {\n render: render,\n copy: copy$2\n };\n\n var read = function (element, attr) {\n var value = get$1(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$3 = 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$7 = 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$4 = function (element, clazz) {\n return remove$3(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$7(element);\n if (classList.length === 0) {\n remove(element, 'class');\n }\n };\n var remove$5 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom().classList;\n classList.remove(clazz);\n } else {\n remove$4(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 repeat = function (repititions, f) {\n var r = [];\n for (var i = 0; i < repititions; i++) {\n r.push(f(i));\n }\n return r;\n };\n var range = function (start, end) {\n var r = [];\n for (var i = start; i < end; i++) {\n r.push(i);\n }\n return r;\n };\n var deduce = function (xs, index) {\n if (index < 0 || index >= xs.length - 1) {\n return Option.none();\n }\n var current = xs[index].fold(function () {\n var rest = reverse(xs.slice(0, index));\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (c) {\n return Option.some({\n value: c,\n delta: 0\n });\n });\n var next = xs[index + 1].fold(function () {\n var rest = xs.slice(index + 1);\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (n) {\n return Option.some({\n value: n,\n delta: 1\n });\n });\n return current.bind(function (c) {\n return next.map(function (n) {\n var extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n });\n });\n };\n\n var columns = function (warehouse) {\n var grid = warehouse.grid();\n var cols = range(0, grid.columns());\n var rowsArr = range(0, grid.rows());\n return map(cols, function (col) {\n var getBlock = function () {\n return bind(rowsArr, function (r) {\n return Warehouse.getAt(warehouse, r, col).filter(function (detail) {\n return detail.column() === col;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.colspan() === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, 0, col);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n var decide = function (getBlock, isSingle, getFallback) {\n var inBlock = getBlock();\n var singleInBlock = find(inBlock, isSingle);\n var detailOption = singleInBlock.orThunk(function () {\n return Option.from(inBlock[0]).orThunk(getFallback);\n });\n return detailOption.map(function (detail) {\n return detail.element();\n });\n };\n var rows$1 = function (warehouse) {\n var grid = warehouse.grid();\n var rowsArr = range(0, grid.rows());\n var cols = range(0, grid.columns());\n return map(rowsArr, function (row) {\n var getBlock = function () {\n return bind(cols, function (c) {\n return Warehouse.getAt(warehouse, row, c).filter(function (detail) {\n return detail.row() === row;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.rowspan() === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, row, 0);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n var Blocks = {\n columns: columns,\n rows: rows$1\n };\n\n var css = function (namespace) {\n var dashNamespace = namespace.replace(/\\./g, '-');\n var resolve = function (str) {\n return dashNamespace + '-' + str;\n };\n return { resolve: resolve };\n };\n\n var styles = css('ephox-snooker');\n var Styles = { resolve: styles.resolve };\n\n var col = function (column, x, y, w, h) {\n var bar = Element.fromTag('div');\n setAll$1(bar, {\n position: 'absolute',\n left: x - w / 2 + 'px',\n top: y + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll(bar, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return bar;\n };\n var row$1 = function (r, x, y, w, h) {\n var bar = Element.fromTag('div');\n setAll$1(bar, {\n position: 'absolute',\n left: x + 'px',\n top: y - h / 2 + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll(bar, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return bar;\n };\n var Bar = {\n col: col,\n row: row$1\n };\n\n var resizeBar = Styles.resolve('resizer-bar');\n var resizeRowBar = Styles.resolve('resizer-rows');\n var resizeColBar = Styles.resolve('resizer-cols');\n var BAR_THICKNESS = 7;\n var destroy = function (wire) {\n var previous = descendants$1(wire.parent(), '.' + resizeBar);\n each(previous, remove$2);\n };\n var drawBar = function (wire, positions, create) {\n var origin = wire.origin();\n each(positions, function (cpOption, i) {\n cpOption.each(function (cp) {\n var bar = create(origin, cp);\n add$2(bar, resizeBar);\n append(wire.parent(), bar);\n });\n });\n };\n var refreshCol = function (wire, colPositions, position, tableHeight) {\n drawBar(wire, colPositions, function (origin, cp) {\n var colBar = Bar.col(cp.col(), cp.x() - origin.left(), position.top() - origin.top(), BAR_THICKNESS, tableHeight);\n add$2(colBar, resizeColBar);\n return colBar;\n });\n };\n var refreshRow = function (wire, rowPositions, position, tableWidth) {\n drawBar(wire, rowPositions, function (origin, cp) {\n var rowBar = Bar.row(cp.row(), position.left() - origin.left(), cp.y() - origin.top(), tableWidth, BAR_THICKNESS);\n add$2(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n var refreshGrid = function (wire, table, rows, cols, hdirection, vdirection) {\n var position = absolute(table);\n var rowPositions = rows.length > 0 ? hdirection.positions(rows, table) : [];\n refreshRow(wire, rowPositions, position, getOuter$1(table));\n var colPositions = cols.length > 0 ? vdirection.positions(cols, table) : [];\n refreshCol(wire, colPositions, position, getOuter(table));\n };\n var refresh = function (wire, table, hdirection, vdirection) {\n destroy(wire);\n var list = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(list);\n var rows = Blocks.rows(warehouse);\n var cols = Blocks.columns(warehouse);\n refreshGrid(wire, table, rows, cols, hdirection, vdirection);\n };\n var each$2 = function (wire, f) {\n var bars = descendants$1(wire.parent(), '.' + resizeBar);\n each(bars, f);\n };\n var hide = function (wire) {\n each$2(wire, function (bar) {\n set$1(bar, 'display', 'none');\n });\n };\n var show = function (wire) {\n each$2(wire, function (bar) {\n set$1(bar, 'display', 'block');\n });\n };\n var isRowBar = function (element) {\n return has$2(element, resizeRowBar);\n };\n var isColBar = function (element) {\n return has$2(element, resizeColBar);\n };\n var Bars = {\n refresh: refresh,\n hide: hide,\n show: show,\n destroy: destroy,\n isRowBar: isRowBar,\n isColBar: isColBar\n };\n\n var addCell = function (gridRow, index, cell) {\n var cells = gridRow.cells();\n var before = cells.slice(0, index);\n var after = cells.slice(index);\n var newCells = before.concat([cell]).concat(after);\n return setCells(gridRow, newCells);\n };\n var mutateCell = function (gridRow, index, cell) {\n var cells = gridRow.cells();\n cells[index] = cell;\n };\n var setCells = function (gridRow, cells) {\n return rowcells(cells, gridRow.section());\n };\n var mapCells = function (gridRow, f) {\n var cells = gridRow.cells();\n var r = map(cells, f);\n return rowcells(r, gridRow.section());\n };\n var getCell = function (gridRow, index) {\n return gridRow.cells()[index];\n };\n var getCellElement = function (gridRow, index) {\n return getCell(gridRow, index).element();\n };\n var cellLength = function (gridRow) {\n return gridRow.cells().length;\n };\n var GridRow = {\n addCell: addCell,\n setCells: setCells,\n mutateCell: mutateCell,\n getCell: getCell,\n getCellElement: getCellElement,\n mapCells: mapCells,\n cellLength: cellLength\n };\n\n var getColumn = function (grid, index) {\n return map(grid, function (row) {\n return GridRow.getCell(row, index);\n });\n };\n var getRow = function (grid, index) {\n return grid[index];\n };\n var findDiff = function (xs, comp) {\n if (xs.length === 0) {\n return 0;\n }\n var first = xs[0];\n var index = findIndex(xs, function (x) {\n return !comp(first.element(), x.element());\n });\n return index.fold(function () {\n return xs.length;\n }, function (ind) {\n return ind;\n });\n };\n var subgrid = function (grid, row, column, comparator) {\n var restOfRow = getRow(grid, row).cells().slice(column);\n var endColIndex = findDiff(restOfRow, comparator);\n var restOfColumn = getColumn(grid, column).slice(row);\n var endRowIndex = findDiff(restOfColumn, comparator);\n return {\n colspan: constant(endColIndex),\n rowspan: constant(endRowIndex)\n };\n };\n var TableGrid = { subgrid: subgrid };\n\n var toDetails = function (grid, comparator) {\n var seen = map(grid, function (row, ri) {\n return map(row.cells(), function (col, ci) {\n return false;\n });\n });\n var updateSeen = function (ri, ci, rowspan, colspan) {\n for (var r = ri; r < ri + rowspan; r++) {\n for (var c = ci; c < ci + colspan; c++) {\n seen[r][c] = true;\n }\n }\n };\n return map(grid, function (row, ri) {\n var details = bind(row.cells(), function (cell, ci) {\n if (seen[ri][ci] === false) {\n var result = TableGrid.subgrid(grid, ri, ci, comparator);\n updateSeen(ri, ci, result.rowspan(), result.colspan());\n return [detailnew(cell.element(), result.rowspan(), result.colspan(), cell.isNew())];\n } else {\n return [];\n }\n });\n return rowdetails(details, row.section());\n });\n };\n var toGrid = function (warehouse, generators, isNew) {\n var grid = [];\n for (var i = 0; i < warehouse.grid().rows(); i++) {\n var rowCells = [];\n for (var j = 0; j < warehouse.grid().columns(); j++) {\n var element = Warehouse.getAt(warehouse, i, j).map(function (item) {\n return elementnew(item.element(), isNew);\n }).getOrThunk(function () {\n return elementnew(generators.gap(), true);\n });\n rowCells.push(element);\n }\n var row = rowcells(rowCells, warehouse.all()[i].section());\n grid.push(row);\n }\n return grid;\n };\n var Transitions = {\n toDetails: toDetails,\n toGrid: toGrid\n };\n\n var fromWarehouse = function (warehouse, generators) {\n return Transitions.toGrid(warehouse, generators, false);\n };\n var deriveRows = function (rendered, generators) {\n var findRow = function (details) {\n var rowOfCells = findMap(details, function (detail) {\n return parent(detail.element()).map(function (row) {\n var isNew = parent(row).isNone();\n return elementnew(row, isNew);\n });\n });\n return rowOfCells.getOrThunk(function () {\n return elementnew(generators.row(), true);\n });\n };\n return map(rendered, function (details) {\n var row = findRow(details.details());\n return rowdatanew(row.element(), details.details(), details.section(), row.isNew());\n });\n };\n var toDetailList = function (grid, generators) {\n var rendered = Transitions.toDetails(grid, eq);\n return deriveRows(rendered, generators);\n };\n var findInWarehouse = function (warehouse, element) {\n var all = flatten(map(warehouse.all(), function (r) {\n return r.cells();\n }));\n return find(all, function (e) {\n return eq(element, e.element());\n });\n };\n var run = function (operation, extract, adjustment, postAction, genWrappers) {\n return function (wire, table, target, generators, direction) {\n var input = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(input);\n var output = extract(warehouse, target).map(function (info) {\n var model = fromWarehouse(warehouse, generators);\n var result = operation(model, info, eq, genWrappers(generators));\n var grid = toDetailList(result.grid(), generators);\n return {\n grid: constant(grid),\n cursor: result.cursor\n };\n });\n return output.fold(function () {\n return Option.none();\n }, function (out) {\n var newElements = Redraw.render(table, out.grid());\n adjustment(table, out.grid(), direction);\n postAction(table);\n Bars.refresh(wire, table, BarPositions.height, direction);\n return Option.some({\n cursor: out.cursor,\n newRows: newElements.newRows,\n newCells: newElements.newCells\n });\n });\n };\n };\n var onCell = function (warehouse, target) {\n return TableLookup.cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell);\n });\n };\n var onPaste = function (warehouse, target) {\n return TableLookup.cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell).map(function (details) {\n var value = __assign(__assign({}, details), {\n generators: target.generators,\n clipboard: target.clipboard\n });\n return value;\n });\n });\n };\n var onPasteRows = function (warehouse, target) {\n var details = map(target.selection(), function (cell) {\n return TableLookup.cell(cell).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n });\n });\n var cells = cat(details);\n return cells.length > 0 ? Option.some({\n cells: cells,\n generators: target.generators,\n clipboard: target.clipboard\n }) : Option.none();\n };\n var onMergable = function (_warehouse, target) {\n return target.mergable();\n };\n var onUnmergable = function (_warehouse, target) {\n return target.unmergable();\n };\n var onCells = function (warehouse, target) {\n var details = map(target.selection(), function (cell) {\n return TableLookup.cell(cell).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n });\n });\n var cells = cat(details);\n return cells.length > 0 ? Option.some(cells) : Option.none();\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 var measure = function (startAddress, gridA, gridB) {\n if (startAddress.row() >= gridA.length || startAddress.column() > GridRow.cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row() + ', column: ' + startAddress.column());\n }\n var rowRemainder = gridA.slice(startAddress.row());\n var colRemainder = rowRemainder[0].cells().slice(startAddress.column());\n var colRequired = GridRow.cellLength(gridB[0]);\n var rowRequired = gridB.length;\n return Result.value({\n rowDelta: constant(rowRemainder.length - rowRequired),\n colDelta: constant(colRemainder.length - colRequired)\n });\n };\n var measureWidth = function (gridA, gridB) {\n var colLengthA = GridRow.cellLength(gridA[0]);\n var colLengthB = GridRow.cellLength(gridB[0]);\n return {\n rowDelta: constant(0),\n colDelta: constant(colLengthA - colLengthB)\n };\n };\n var fill = function (cells, generator) {\n return map(cells, function () {\n return elementnew(generator.cell(), true);\n });\n };\n var rowFill = function (grid, amount, generator) {\n return grid.concat(repeat(amount, function (_row) {\n return GridRow.setCells(grid[grid.length - 1], fill(grid[grid.length - 1].cells(), generator));\n }));\n };\n var colFill = function (grid, amount, generator) {\n return map(grid, function (row) {\n return GridRow.setCells(row, row.cells().concat(fill(range(0, amount), generator)));\n });\n };\n var tailor = function (gridA, delta, generator) {\n var fillCols = delta.colDelta() < 0 ? colFill : identity;\n var fillRows = delta.rowDelta() < 0 ? rowFill : identity;\n var modifiedCols = fillCols(gridA, Math.abs(delta.colDelta()), generator);\n var tailoredGrid = fillRows(modifiedCols, Math.abs(delta.rowDelta()), generator);\n return tailoredGrid;\n };\n var Fitment = {\n measure: measure,\n measureWidth: measureWidth,\n tailor: tailor\n };\n\n var merge = function (grid, bounds, comparator, substitution) {\n if (grid.length === 0) {\n return grid;\n }\n for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {\n for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {\n GridRow.mutateCell(grid[i], j, elementnew(substitution(), false));\n }\n }\n return grid;\n };\n var unmerge = function (grid, target, comparator, substitution) {\n var first = true;\n for (var i = 0; i < grid.length; i++) {\n for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\n var current = GridRow.getCellElement(grid[i], j);\n var isToReplace = comparator(current, target);\n if (isToReplace === true && first === false) {\n GridRow.mutateCell(grid[i], j, elementnew(substitution(), true));\n } else if (isToReplace === true) {\n first = false;\n }\n }\n }\n return grid;\n };\n var uniqueCells = function (row, comparator) {\n return foldl(row, function (rest, cell) {\n return exists(rest, function (currentCell) {\n return comparator(currentCell.element(), cell.element());\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n var splitRows = function (grid, index, comparator, substitution) {\n if (index > 0 && index < grid.length) {\n var rowPrevCells = grid[index - 1].cells();\n var cells = uniqueCells(rowPrevCells, comparator);\n each(cells, function (cell) {\n var replacement = Option.none();\n var _loop_1 = function (i) {\n var _loop_2 = function (j) {\n var current = grid[i].cells()[j];\n var isToReplace = comparator(current.element(), cell.element());\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Option.some(substitution());\n }\n replacement.each(function (sub) {\n GridRow.mutateCell(grid[i], j, elementnew(sub, true));\n });\n }\n };\n for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\n _loop_2(j);\n }\n };\n for (var i = index; i < grid.length; i++) {\n _loop_1(i);\n }\n });\n }\n return grid;\n };\n var MergingOperations = {\n merge: merge,\n unmerge: unmerge,\n splitRows: splitRows\n };\n\n var isSpanning = function (grid, row, col, comparator) {\n var candidate = GridRow.getCell(grid[row], col);\n var matching = curry(comparator, candidate.element());\n var currentRow = grid[row];\n return grid.length > 1 && GridRow.cellLength(currentRow) > 1 && (col > 0 && matching(GridRow.getCellElement(currentRow, col - 1)) || col < currentRow.cells().length - 1 && matching(GridRow.getCellElement(currentRow, col + 1)) || row > 0 && matching(GridRow.getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(GridRow.getCellElement(grid[row + 1], col)));\n };\n var mergeTables = function (startAddress, gridA, gridB, generator, comparator) {\n var startRow = startAddress.row();\n var startCol = startAddress.column();\n var mergeHeight = gridB.length;\n var mergeWidth = GridRow.cellLength(gridB[0]);\n var endRow = startRow + mergeHeight;\n var endCol = startCol + mergeWidth;\n for (var r = startRow; r < endRow; r++) {\n for (var c = startCol; c < endCol; c++) {\n if (isSpanning(gridA, r, c, comparator)) {\n MergingOperations.unmerge(gridA, GridRow.getCellElement(gridA[r], c), comparator, generator.cell);\n }\n var newCell = GridRow.getCellElement(gridB[r - startRow], c - startCol);\n var replacement = generator.replace(newCell);\n GridRow.mutateCell(gridA[r], c, elementnew(replacement, true));\n }\n }\n return gridA;\n };\n var merge$1 = function (startAddress, gridA, gridB, generator, comparator) {\n var result = Fitment.measure(startAddress, gridA, gridB);\n return result.map(function (delta) {\n var fittedGrid = Fitment.tailor(gridA, delta, generator);\n return mergeTables(startAddress, fittedGrid, gridB, generator, comparator);\n });\n };\n var insert = function (index, gridA, gridB, generator, comparator) {\n MergingOperations.splitRows(gridA, index, comparator, generator.cell);\n var delta = Fitment.measureWidth(gridB, gridA);\n var fittedNewGrid = Fitment.tailor(gridB, delta, generator);\n var secondDelta = Fitment.measureWidth(gridA, fittedNewGrid);\n var fittedOldGrid = Fitment.tailor(gridA, secondDelta, generator);\n return fittedOldGrid.slice(0, index).concat(fittedNewGrid).concat(fittedOldGrid.slice(index, fittedOldGrid.length));\n };\n var TableMerge = {\n merge: merge$1,\n insert: insert\n };\n\n var insertRowAt = function (grid, index, example, comparator, substitution) {\n var before = grid.slice(0, index);\n var after = grid.slice(index);\n var between = GridRow.mapCells(grid[example], function (ex, c) {\n var withinSpan = index > 0 && index < grid.length && comparator(GridRow.getCellElement(grid[index - 1], c), GridRow.getCellElement(grid[index], c));\n var ret = withinSpan ? GridRow.getCell(grid[index], c) : elementnew(substitution(ex.element(), comparator), true);\n return ret;\n });\n return before.concat([between]).concat(after);\n };\n var insertColumnAt = function (grid, index, example, comparator, substitution) {\n return map(grid, function (row) {\n var withinSpan = index > 0 && index < GridRow.cellLength(row) && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\n var sub = withinSpan ? GridRow.getCell(row, index) : elementnew(substitution(GridRow.getCellElement(row, example), comparator), true);\n return GridRow.addCell(row, index, sub);\n });\n };\n var splitCellIntoColumns = function (grid, exampleRow, exampleCol, comparator, substitution) {\n var index = exampleCol + 1;\n return map(grid, function (row, i) {\n var isTargetCell = i === exampleRow;\n var sub = isTargetCell ? elementnew(substitution(GridRow.getCellElement(row, exampleCol), comparator), true) : GridRow.getCell(row, exampleCol);\n return GridRow.addCell(row, index, sub);\n });\n };\n var splitCellIntoRows = function (grid, exampleRow, exampleCol, comparator, substitution) {\n var index = exampleRow + 1;\n var before = grid.slice(0, index);\n var after = grid.slice(index);\n var between = GridRow.mapCells(grid[exampleRow], function (ex, i) {\n var isTargetCell = i === exampleCol;\n return isTargetCell ? elementnew(substitution(ex.element(), comparator), true) : ex;\n });\n return before.concat([between]).concat(after);\n };\n var deleteColumnsAt = function (grid, start, finish) {\n var rows = map(grid, function (row) {\n var cells = row.cells().slice(0, start).concat(row.cells().slice(finish + 1));\n return rowcells(cells, row.section());\n });\n return filter(rows, function (row) {\n return row.cells().length > 0;\n });\n };\n var deleteRowsAt = function (grid, start, finish) {\n return grid.slice(0, start).concat(grid.slice(finish + 1));\n };\n var ModificationOperations = {\n insertRowAt: insertRowAt,\n insertColumnAt: insertColumnAt,\n splitCellIntoColumns: splitCellIntoColumns,\n splitCellIntoRows: splitCellIntoRows,\n deleteRowsAt: deleteRowsAt,\n deleteColumnsAt: deleteColumnsAt\n };\n\n var replaceIn = function (grid, targets, comparator, substitution) {\n var isTarget = function (cell) {\n return exists(targets, function (target) {\n return comparator(cell.element(), target.element());\n });\n };\n return map(grid, function (row) {\n return GridRow.mapCells(row, function (cell) {\n return isTarget(cell) ? elementnew(substitution(cell.element(), comparator), true) : cell;\n });\n });\n };\n var notStartRow = function (grid, rowIndex, colIndex, comparator) {\n return GridRow.getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(GridRow.getCellElement(grid[rowIndex - 1], colIndex), GridRow.getCellElement(grid[rowIndex], colIndex)));\n };\n var notStartColumn = function (row, index, comparator) {\n return index > 0 && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\n };\n var replaceColumn = function (grid, index, comparator, substitution) {\n var targets = bind(grid, function (row, i) {\n var alreadyAdded = notStartRow(grid, i, index, comparator) || notStartColumn(row, index, comparator);\n return alreadyAdded ? [] : [GridRow.getCell(row, index)];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var replaceRow = function (grid, index, comparator, substitution) {\n var targetRow = grid[index];\n var targets = bind(targetRow.cells(), function (item, i) {\n var alreadyAdded = notStartRow(grid, index, i, comparator) || notStartColumn(targetRow, i, comparator);\n return alreadyAdded ? [] : [item];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var TransformOperations = {\n replaceColumn: replaceColumn,\n replaceRow: replaceRow\n };\n\n var adt = Adt.generate([\n { none: [] },\n { only: ['index'] },\n {\n left: [\n 'index',\n 'next'\n ]\n },\n {\n middle: [\n 'prev',\n 'index',\n 'next'\n ]\n },\n {\n right: [\n 'prev',\n 'index'\n ]\n }\n ]);\n var ColumnContext = __assign({}, adt);\n\n var neighbours$1 = function (input, index) {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n var determine = function (input, column, step, tableSize) {\n var result = input.slice(0);\n var context = neighbours$1(input, column);\n var zero = function (array) {\n return map(array, constant(0));\n };\n var onNone = constant(zero(result));\n var onOnly = function (index) {\n return tableSize.singleColumnWidth(result[index], step);\n };\n var onChange = function (index, next) {\n if (step >= 0) {\n var newNext = Math.max(tableSize.minCellWidth(), result[next] - step);\n return zero(result.slice(0, index)).concat([\n step,\n newNext - result[next]\n ]).concat(zero(result.slice(next + 1)));\n } else {\n var newThis = Math.max(tableSize.minCellWidth(), result[index] + step);\n var diffx = result[index] - newThis;\n return zero(result.slice(0, index)).concat([\n newThis - result[index],\n diffx\n ]).concat(zero(result.slice(next + 1)));\n }\n };\n var onLeft = onChange;\n var onMiddle = function (_prev, index, next) {\n return onChange(index, next);\n };\n var onRight = function (_prev, index) {\n if (step >= 0) {\n return zero(result.slice(0, index)).concat([step]);\n } else {\n var size = Math.max(tableSize.minCellWidth(), result[index] + step);\n return zero(result.slice(0, index)).concat([size - result[index]]);\n }\n };\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n var Deltas = { determine: determine };\n\n var getSpan$1 = function (cell, type) {\n return has$1(cell, type) && parseInt(get$1(cell, type), 10) > 1;\n };\n var hasColspan = function (cell) {\n return getSpan$1(cell, 'colspan');\n };\n var hasRowspan = function (cell) {\n return getSpan$1(cell, 'rowspan');\n };\n var getInt = function (element, property) {\n return parseInt(get$2(element, property), 10);\n };\n var CellUtils = {\n hasColspan: hasColspan,\n hasRowspan: hasRowspan,\n minWidth: constant(10),\n minHeight: constant(10),\n getInt: getInt\n };\n\n var getRaw$1 = function (cell, property, getter) {\n return getRaw(cell, property).fold(function () {\n return getter(cell) + 'px';\n }, function (raw) {\n return raw;\n });\n };\n var getRawW = function (cell, tableSize) {\n return getRaw$1(cell, 'width', function (e) {\n return Sizes.getPixelWidth(e, tableSize);\n });\n };\n var getRawH = function (cell) {\n return getRaw$1(cell, 'height', Sizes.getHeight);\n };\n var getWidthFrom = function (warehouse, direction, getWidth, fallback, tableSize) {\n var columns = Blocks.columns(warehouse);\n var backups = map(columns, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(columns, function (cellOption, c) {\n var columnCell = cellOption.filter(not(CellUtils.hasColspan));\n return columnCell.fold(function () {\n var deduced = deduce(backups, c);\n return fallback(deduced);\n }, function (cell) {\n return getWidth(cell, tableSize);\n });\n });\n };\n var getDeduced = function (deduced) {\n return deduced.map(function (d) {\n return d + 'px';\n }).getOr('');\n };\n var getRawWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, getRawW, getDeduced, tableSize);\n };\n var getPercentageWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, Sizes.getPercentageWidth, function (deduced) {\n return deduced.fold(function () {\n return tableSize.minCellWidth();\n }, function (cellWidth) {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n }, tableSize);\n };\n var getPixelWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, Sizes.getPixelWidth, function (deduced) {\n return deduced.getOrThunk(tableSize.minCellWidth);\n }, tableSize);\n };\n var getHeightFrom = function (warehouse, direction, getHeight, fallback) {\n var rows = Blocks.rows(warehouse);\n var backups = map(rows, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(rows, function (cellOption, c) {\n var rowCell = cellOption.filter(not(CellUtils.hasRowspan));\n return rowCell.fold(function () {\n var deduced = deduce(backups, c);\n return fallback(deduced);\n }, function (cell) {\n return getHeight(cell);\n });\n });\n };\n var getPixelHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, Sizes.getHeight, function (deduced) {\n return deduced.getOrThunk(CellUtils.minHeight);\n });\n };\n var getRawHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, getRawH, getDeduced);\n };\n var ColumnSizes = {\n getRawWidths: getRawWidths,\n getPixelWidths: getPixelWidths,\n getPercentageWidths: getPercentageWidths,\n getPixelHeights: getPixelHeights,\n getRawHeights: getRawHeights\n };\n\n var total = function (start, end, measures) {\n var r = 0;\n for (var i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n var recalculateWidth = function (warehouse, widths) {\n var all = Warehouse.justCells(warehouse);\n return map(all, function (cell) {\n var width = total(cell.column(), cell.column() + cell.colspan(), widths);\n return {\n element: cell.element,\n width: constant(width),\n colspan: cell.colspan\n };\n });\n };\n var recalculateHeight = function (warehouse, heights) {\n var all = Warehouse.justCells(warehouse);\n return map(all, function (cell) {\n var height = total(cell.row(), cell.row() + cell.rowspan(), heights);\n return {\n element: cell.element,\n height: constant(height),\n rowspan: cell.rowspan\n };\n });\n };\n var matchRowHeight = function (warehouse, heights) {\n return map(warehouse.all(), function (row, i) {\n return {\n element: row.element,\n height: constant(heights[i])\n };\n });\n };\n var Recalculations = {\n recalculateWidth: recalculateWidth,\n recalculateHeight: recalculateHeight,\n matchRowHeight: matchRowHeight\n };\n\n var percentageSize = function (width, element) {\n var floatWidth = parseFloat(width);\n var pixelWidth = get$5(element);\n var getCellDelta = function (delta) {\n return delta / pixelWidth * 100;\n };\n var singleColumnWidth = function (w, _delta) {\n return [100 - w];\n };\n var minCellWidth = function () {\n return CellUtils.minWidth() / pixelWidth * 100;\n };\n var setTableWidth = function (table, _newWidths, delta) {\n var ratio = delta / 100;\n var change = ratio * floatWidth;\n Sizes.setPercentageWidth(table, floatWidth + change);\n };\n return {\n width: constant(floatWidth),\n pixelWidth: constant(pixelWidth),\n getWidths: ColumnSizes.getPercentageWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: minCellWidth,\n setElementWidth: Sizes.setPercentageWidth,\n setTableWidth: setTableWidth\n };\n };\n var pixelSize = function (width) {\n var getCellDelta = identity;\n var singleColumnWidth = function (w, delta) {\n var newNext = Math.max(CellUtils.minWidth(), w + delta);\n return [newNext - w];\n };\n var setTableWidth = function (table, newWidths, _delta) {\n var total = foldr(newWidths, function (b, a) {\n return b + a;\n }, 0);\n Sizes.setPixelWidth(table, total);\n };\n return {\n width: constant(width),\n pixelWidth: constant(width),\n getWidths: ColumnSizes.getPixelWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: CellUtils.minWidth,\n setElementWidth: Sizes.setPixelWidth,\n setTableWidth: setTableWidth\n };\n };\n var chooseSize = function (element, width) {\n var percentMatch = Sizes.percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(percentMatch[1], element);\n }\n var pixelMatch = Sizes.pixelBasedSizeRegex().exec(width);\n if (pixelMatch !== null) {\n var intWidth = parseInt(pixelMatch[1], 10);\n return pixelSize(intWidth);\n }\n var fallbackWidth = get$5(element);\n return pixelSize(fallbackWidth);\n };\n var getTableSize = function (element) {\n var width = Sizes.getRawWidth(element);\n return width.fold(function () {\n var fallbackWidth = get$5(element);\n return pixelSize(fallbackWidth);\n }, function (w) {\n return chooseSize(element, w);\n });\n };\n var TableSize = { getTableSize: getTableSize };\n\n var getWarehouse$1 = function (list) {\n return Warehouse.generate(list);\n };\n var sumUp = function (newSize) {\n return foldr(newSize, function (b, a) {\n return b + a;\n }, 0);\n };\n var getTableWarehouse = function (table) {\n var list = DetailsList.fromTable(table);\n return getWarehouse$1(list);\n };\n var adjustWidth = function (table, delta, index, direction) {\n var tableSize = TableSize.getTableSize(table);\n var step = tableSize.getCellDelta(delta);\n var warehouse = getTableWarehouse(table);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var deltas = Deltas.determine(widths, index, step, tableSize);\n var newWidths = map(deltas, function (dx, i) {\n return dx + widths[i];\n });\n var newSizes = Recalculations.recalculateWidth(warehouse, newWidths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element(), cell.width());\n });\n if (index === warehouse.grid().columns() - 1) {\n tableSize.setTableWidth(table, newWidths, step);\n }\n };\n var adjustHeight = function (table, delta, index, direction) {\n var warehouse = getTableWarehouse(table);\n var heights = ColumnSizes.getPixelHeights(warehouse, direction);\n var newHeights = map(heights, function (dy, i) {\n return index === i ? Math.max(delta + dy, CellUtils.minHeight()) : dy;\n });\n var newCellSizes = Recalculations.recalculateHeight(warehouse, newHeights);\n var newRowSizes = Recalculations.matchRowHeight(warehouse, newHeights);\n each(newRowSizes, function (row) {\n Sizes.setHeight(row.element(), row.height());\n });\n each(newCellSizes, function (cell) {\n Sizes.setHeight(cell.element(), cell.height());\n });\n var total = sumUp(newHeights);\n Sizes.setHeight(table, total);\n };\n var adjustWidthTo = function (table, list, direction) {\n var tableSize = TableSize.getTableSize(table);\n var warehouse = getWarehouse$1(list);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var newSizes = Recalculations.recalculateWidth(warehouse, widths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element(), cell.width());\n });\n if (newSizes.length > 0) {\n tableSize.setTableWidth(table, widths, tableSize.getCellDelta(0));\n }\n };\n var Adjustments = {\n adjustWidth: adjustWidth,\n adjustHeight: adjustHeight,\n adjustWidthTo: adjustWidthTo\n };\n\n var base = function (handleUnsupported, required) {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n var baseWith = function (handleUnsupported, required, pred) {\n if (required.length === 0) {\n throw new Error('You must specify at least one required field.');\n }\n validateStrArr('required', required);\n checkDupes(required);\n return function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n var invalidKeys = filter(required, function (key) {\n return !pred.validate(obj[key], key);\n });\n if (invalidKeys.length > 0) {\n invalidTypeMessage(invalidKeys, pred.label);\n }\n return obj;\n };\n };\n var handleExact = function (required, keys) {\n var unsupported = filter(keys, function (key) {\n return !contains(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n var exactly = function (required) {\n return base(handleExact, required);\n };\n\n var verifyGenerators = exactly([\n 'cell',\n 'row',\n 'replace',\n 'gap'\n ]);\n var elementToData = function (element) {\n var colspan = has$1(element, 'colspan') ? parseInt(get$1(element, 'colspan'), 10) : 1;\n var rowspan = has$1(element, 'rowspan') ? parseInt(get$1(element, 'rowspan'), 10) : 1;\n return {\n element: constant(element),\n colspan: constant(colspan),\n rowspan: constant(rowspan)\n };\n };\n var modification = function (generators, toData) {\n if (toData === void 0) {\n toData = elementToData;\n }\n verifyGenerators(generators);\n var position = Cell(Option.none());\n var nu = function (data) {\n return generators.cell(data);\n };\n var nuFrom = function (element) {\n var data = toData(element);\n return nu(data);\n };\n var add = function (element) {\n var replacement = nuFrom(element);\n if (position.get().isNone()) {\n position.set(Option.some(replacement));\n }\n recent = Option.some({\n item: element,\n replacement: replacement\n });\n return replacement;\n };\n var recent = Option.none();\n var getOrInit = function (element, comparator) {\n return recent.fold(function () {\n return add(element);\n }, function (p) {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return {\n getOrInit: getOrInit,\n cursor: position.get\n };\n };\n var transform = function (scope, tag) {\n return function (generators) {\n var position = Cell(Option.none());\n verifyGenerators(generators);\n var list = [];\n var find$1 = function (element, comparator) {\n return find(list, function (x) {\n return comparator(x.item, element);\n });\n };\n var makeNew = function (element) {\n var attrs = { scope: scope };\n var cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n if (position.get().isNone()) {\n position.set(Option.some(cell));\n }\n return cell;\n };\n var replaceOrInit = function (element, comparator) {\n return find$1(element, comparator).fold(function () {\n return makeNew(element);\n }, function (p) {\n return comparator(element, p.item) ? p.sub : makeNew(element);\n });\n };\n return {\n replaceOrInit: replaceOrInit,\n cursor: position.get\n };\n };\n };\n var merging = function (generators) {\n verifyGenerators(generators);\n var position = Cell(Option.none());\n var combine = function (cell) {\n if (position.get().isNone()) {\n position.set(Option.some(cell));\n }\n return function () {\n var raw = generators.cell({\n element: constant(cell),\n colspan: constant(1),\n rowspan: constant(1)\n });\n remove$1(raw, 'width');\n remove$1(cell, 'width');\n return raw;\n };\n };\n return {\n combine: combine,\n cursor: position.get\n };\n };\n var Generators = {\n modification: modification,\n transform: transform,\n merging: merging\n };\n\n var blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n var isList = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'ol',\n 'ul'\n ], tagName);\n };\n var isBlock = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains(blockList, tagName);\n };\n var isFormatting = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'address',\n 'pre',\n 'p',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ], tagName);\n };\n var isHeading = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ], tagName);\n };\n var isContainer = function (universe, item) {\n return contains([\n 'div',\n 'li',\n 'td',\n 'th',\n 'blockquote',\n 'body',\n 'caption'\n ], universe.property().name(item));\n };\n var isEmptyTag = function (universe, item) {\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n var isFrame = function (universe, item) {\n return universe.property().name(item) === 'iframe';\n };\n var isInline = function (universe, item) {\n return !(isBlock(universe, item) || isEmptyTag(universe, item)) && universe.property().name(item) !== 'li';\n };\n var Structure = {\n isBlock: isBlock,\n isList: isList,\n isFormatting: isFormatting,\n isHeading: isHeading,\n isContainer: isContainer,\n isEmptyTag: isEmptyTag,\n isFrame: isFrame,\n isInline: isInline\n };\n\n var universe$1 = DomUniverse();\n var isBlock$1 = function (element) {\n return Structure.isBlock(universe$1, element);\n };\n var isList$1 = function (element) {\n return Structure.isList(universe$1, element);\n };\n var isFormatting$1 = function (element) {\n return Structure.isFormatting(universe$1, element);\n };\n var isHeading$1 = function (element) {\n return Structure.isHeading(universe$1, element);\n };\n var isContainer$1 = function (element) {\n return Structure.isContainer(universe$1, element);\n };\n var isEmptyTag$1 = function (element) {\n return Structure.isEmptyTag(universe$1, element);\n };\n var isFrame$1 = function (element) {\n return Structure.isFrame(universe$1, element);\n };\n var isInline$1 = function (element) {\n return Structure.isInline(universe$1, element);\n };\n var DomStructure = {\n isBlock: isBlock$1,\n isList: isList$1,\n isFormatting: isFormatting$1,\n isHeading: isHeading$1,\n isContainer: isContainer$1,\n isEmptyTag: isEmptyTag$1,\n isFrame: isFrame$1,\n isInline: isInline$1\n };\n\n var merge$2 = function (cells) {\n var isBr = function (el) {\n return name(el) === 'br';\n };\n var advancedBr = function (children) {\n return forall(children, function (c) {\n return isBr(c) || isText(c) && get$3(c).trim().length === 0;\n });\n };\n var isListItem = function (el) {\n return name(el) === 'li' || ancestor(el, DomStructure.isList).isSome();\n };\n var siblingIsBlock = function (el) {\n return nextSibling(el).map(function (rightSibling) {\n if (DomStructure.isBlock(rightSibling)) {\n return true;\n }\n if (DomStructure.isEmptyTag(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n var markCell = function (cell) {\n return last$1(cell).bind(function (rightEdge) {\n var rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(function (parent) {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || DomStructure.isBlock(parent) && !eq(cell, parent) ? [] : [Element.fromTag('br')];\n });\n }).getOr([]);\n };\n var markContent = function () {\n var content = bind(cells, function (cell) {\n var children$1 = children(cell);\n return advancedBr(children$1) ? [] : children$1.concat(markCell(cell));\n });\n return content.length === 0 ? [Element.fromTag('br')] : content;\n };\n var contents = markContent();\n empty(cells[0]);\n append$1(cells[0], contents);\n };\n var TableContent = { merge: merge$2 };\n\n var prune = function (table) {\n var cells = TableLookup.cells(table);\n if (cells.length === 0) {\n remove$2(table);\n }\n };\n var outcome = Immutable('grid', 'cursor');\n var elementFromGrid = function (grid, row, column) {\n return findIn(grid, row, column).orThunk(function () {\n return findIn(grid, 0, 0);\n });\n };\n var findIn = function (grid, row, column) {\n return Option.from(grid[row]).bind(function (r) {\n return Option.from(r.cells()[column]).bind(function (c) {\n return Option.from(c.element());\n });\n });\n };\n var bundle = function (grid, row, column) {\n return outcome(grid, findIn(grid, row, column));\n };\n var uniqueRows = function (details) {\n return foldl(details, function (rest, detail) {\n return exists(rest, function (currentDetail) {\n return currentDetail.row() === detail.row();\n }) ? rest : rest.concat([detail]);\n }, []).sort(function (detailA, detailB) {\n return detailA.row() - detailB.row();\n });\n };\n var uniqueColumns = function (details) {\n return foldl(details, function (rest, detail) {\n return exists(rest, function (currentDetail) {\n return currentDetail.column() === detail.column();\n }) ? rest : rest.concat([detail]);\n }, []).sort(function (detailA, detailB) {\n return detailA.column() - detailB.column();\n });\n };\n var insertRowBefore = function (grid, detail, comparator, genWrappers) {\n var example = detail.row();\n var targetIndex = detail.row();\n var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, targetIndex, detail.column());\n };\n var insertRowsBefore = function (grid, details, comparator, genWrappers) {\n var example = details[0].row();\n var targetIndex = details[0].row();\n var rows = uniqueRows(details);\n var newGrid = foldl(rows, function (newG, _row) {\n return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var insertRowAfter = function (grid, detail, comparator, genWrappers) {\n var example = detail.row();\n var targetIndex = detail.row() + detail.rowspan();\n var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, targetIndex, detail.column());\n };\n var insertRowsAfter = function (grid, details, comparator, genWrappers) {\n var rows = uniqueRows(details);\n var example = rows[rows.length - 1].row();\n var targetIndex = rows[rows.length - 1].row() + rows[rows.length - 1].rowspan();\n var newGrid = foldl(rows, function (newG, _row) {\n return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var insertColumnBefore = function (grid, detail, comparator, genWrappers) {\n var example = detail.column();\n var targetIndex = detail.column();\n var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), targetIndex);\n };\n var insertColumnsBefore = function (grid, details, comparator, genWrappers) {\n var columns = uniqueColumns(details);\n var example = columns[0].column();\n var targetIndex = columns[0].column();\n var newGrid = foldl(columns, function (newG, _row) {\n return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var insertColumnAfter = function (grid, detail, comparator, genWrappers) {\n var example = detail.column();\n var targetIndex = detail.column() + detail.colspan();\n var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), targetIndex);\n };\n var insertColumnsAfter = function (grid, details, comparator, genWrappers) {\n var example = details[details.length - 1].column();\n var targetIndex = details[details.length - 1].column() + details[details.length - 1].colspan();\n var columns = uniqueColumns(details);\n var newGrid = foldl(columns, function (newG, _row) {\n return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var makeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var makeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var unmakeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var unmakeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var splitCellIntoColumns$1 = function (grid, detail, comparator, genWrappers) {\n var newGrid = ModificationOperations.splitCellIntoColumns(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var splitCellIntoRows$1 = function (grid, detail, comparator, genWrappers) {\n var newGrid = ModificationOperations.splitCellIntoRows(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var eraseColumns = function (grid, details, _comparator, _genWrappers) {\n var columns = uniqueColumns(details);\n var newGrid = ModificationOperations.deleteColumnsAt(grid, columns[0].column(), columns[columns.length - 1].column());\n var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\n return outcome(newGrid, cursor);\n };\n var eraseRows = function (grid, details, _comparator, _genWrappers) {\n var rows = uniqueRows(details);\n var newGrid = ModificationOperations.deleteRowsAt(grid, rows[0].row(), rows[rows.length - 1].row());\n var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\n return outcome(newGrid, cursor);\n };\n var mergeCells = function (grid, mergable, comparator, _genWrappers) {\n var cells = mergable.cells();\n TableContent.merge(cells);\n var newGrid = MergingOperations.merge(grid, mergable.bounds(), comparator, constant(cells[0]));\n return outcome(newGrid, Option.from(cells[0]));\n };\n var unmergeCells = function (grid, unmergable, comparator, genWrappers) {\n var newGrid = foldr(unmergable, function (b, cell) {\n return MergingOperations.unmerge(b, cell, comparator, genWrappers.combine(cell));\n }, grid);\n return outcome(newGrid, Option.from(unmergable[0]));\n };\n var pasteCells = function (grid, pasteDetails, comparator, _genWrappers) {\n var gridify = function (table, generators) {\n var list = DetailsList.fromTable(table);\n var wh = Warehouse.generate(list);\n return Transitions.toGrid(wh, generators, true);\n };\n var gridB = gridify(pasteDetails.clipboard(), pasteDetails.generators());\n var startAddress = address(pasteDetails.row(), pasteDetails.column());\n var mergedGrid = TableMerge.merge(startAddress, grid, gridB, pasteDetails.generators(), comparator);\n return mergedGrid.fold(function () {\n return outcome(grid, Option.some(pasteDetails.element()));\n }, function (nuGrid) {\n var cursor = elementFromGrid(nuGrid, pasteDetails.row(), pasteDetails.column());\n return outcome(nuGrid, cursor);\n });\n };\n var gridifyRows = function (rows, generators, example) {\n var pasteDetails = DetailsList.fromPastedRows(rows, example);\n var wh = Warehouse.generate(pasteDetails);\n return Transitions.toGrid(wh, generators, true);\n };\n var pasteRowsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[0].row();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var pasteRowsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[pasteDetails.cells.length - 1].row() + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var resize = Adjustments.adjustWidthTo;\n var TableOperations = {\n insertRowBefore: run(insertRowBefore, onCell, noop, noop, Generators.modification),\n insertRowsBefore: run(insertRowsBefore, onCells, noop, noop, Generators.modification),\n insertRowAfter: run(insertRowAfter, onCell, noop, noop, Generators.modification),\n insertRowsAfter: run(insertRowsAfter, onCells, noop, noop, Generators.modification),\n insertColumnBefore: run(insertColumnBefore, onCell, resize, noop, Generators.modification),\n insertColumnsBefore: run(insertColumnsBefore, onCells, resize, noop, Generators.modification),\n insertColumnAfter: run(insertColumnAfter, onCell, resize, noop, Generators.modification),\n insertColumnsAfter: run(insertColumnsAfter, onCells, resize, noop, Generators.modification),\n splitCellIntoColumns: run(splitCellIntoColumns$1, onCell, resize, noop, Generators.modification),\n splitCellIntoRows: run(splitCellIntoRows$1, onCell, noop, noop, Generators.modification),\n eraseColumns: run(eraseColumns, onCells, resize, prune, Generators.modification),\n eraseRows: run(eraseRows, onCells, noop, prune, Generators.modification),\n makeColumnHeader: run(makeColumnHeader, onCell, noop, noop, Generators.transform('row', 'th')),\n unmakeColumnHeader: run(unmakeColumnHeader, onCell, noop, noop, Generators.transform(null, 'td')),\n makeRowHeader: run(makeRowHeader, onCell, noop, noop, Generators.transform('col', 'th')),\n unmakeRowHeader: run(unmakeRowHeader, onCell, noop, noop, Generators.transform(null, 'td')),\n mergeCells: run(mergeCells, onMergable, noop, noop, Generators.merging),\n unmergeCells: run(unmergeCells, onUnmergable, resize, noop, Generators.merging),\n pasteCells: run(pasteCells, onPaste, resize, noop, Generators.modification),\n pasteRowsBefore: run(pasteRowsBefore, onPasteRows, noop, noop, Generators.modification),\n pasteRowsAfter: run(pasteRowsAfter, onPasteRows, noop, noop, Generators.modification)\n };\n\n var getBody$1 = function (editor) {\n return Element.fromDom(editor.getBody());\n };\n var getPixelWidth$1 = function (elm) {\n return elm.getBoundingClientRect().width;\n };\n var getPixelHeight = function (elm) {\n return elm.getBoundingClientRect().height;\n };\n var getIsRoot = function (editor) {\n return function (element) {\n return eq(element, getBody$1(editor));\n };\n };\n var removePxSuffix = function (size) {\n return size ? size.replace(/px$/, '') : '';\n };\n var addSizeSuffix = function (size) {\n if (/^[0-9]+$/.test(size)) {\n size += 'px';\n }\n return size;\n };\n var removeDataStyle = function (table) {\n var dataStyleCells = descendants$1(table, 'td[data-mce-style],th[data-mce-style]');\n remove(table, 'data-mce-style');\n each(dataStyleCells, function (cell) {\n remove(cell, 'data-mce-style');\n });\n };\n\n var getDirection = function (element) {\n return get$2(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n };\n\n var ltr$1 = { isRtl: constant(false) };\n var rtl$1 = { isRtl: constant(true) };\n var directionAt = function (element) {\n var dir = getDirection(element);\n return dir === 'rtl' ? rtl$1 : ltr$1;\n };\n var Direction = { directionAt: directionAt };\n\n var defaultTableToolbar = 'tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol';\n var defaultStyles = {\n 'border-collapse': 'collapse',\n 'width': '100%'\n };\n var defaultAttributes = { border: '1' };\n var getDefaultAttributes = function (editor) {\n return editor.getParam('table_default_attributes', defaultAttributes, 'object');\n };\n var getDefaultStyles = function (editor) {\n return editor.getParam('table_default_styles', defaultStyles, 'object');\n };\n var hasTableResizeBars = function (editor) {\n return editor.getParam('table_resize_bars', true, 'boolean');\n };\n var hasTabNavigation = function (editor) {\n return editor.getParam('table_tab_navigation', true, 'boolean');\n };\n var hasAdvancedCellTab = function (editor) {\n return editor.getParam('table_cell_advtab', true, 'boolean');\n };\n var hasAdvancedRowTab = function (editor) {\n return editor.getParam('table_row_advtab', true, 'boolean');\n };\n var hasAdvancedTableTab = function (editor) {\n return editor.getParam('table_advtab', true, 'boolean');\n };\n var hasAppearanceOptions = function (editor) {\n return editor.getParam('table_appearance_options', true, 'boolean');\n };\n var hasTableGrid = function (editor) {\n return editor.getParam('table_grid', true, 'boolean');\n };\n var shouldStyleWithCss = function (editor) {\n return editor.getParam('table_style_by_css', false, 'boolean');\n };\n var getCellClassList = function (editor) {\n return editor.getParam('table_cell_class_list', [], 'array');\n };\n var getRowClassList = function (editor) {\n return editor.getParam('table_row_class_list', [], 'array');\n };\n var getTableClassList = function (editor) {\n return editor.getParam('table_class_list', [], 'array');\n };\n var isPercentagesForced = function (editor) {\n return editor.getParam('table_responsive_width') === true;\n };\n var isPixelsForced = function (editor) {\n return editor.getParam('table_responsive_width') === false;\n };\n var getToolbar = function (editor) {\n return editor.getParam('table_toolbar', defaultTableToolbar);\n };\n var getCloneElements = function (editor) {\n var cloneElements = editor.getParam('table_clone_elements');\n if (isString(cloneElements)) {\n return Option.some(cloneElements.split(/[ ,]/));\n } else if (Array.isArray(cloneElements)) {\n return Option.some(cloneElements);\n } else {\n return Option.none();\n }\n };\n var hasObjectResizing = function (editor) {\n var objectResizing = editor.getParam('object_resizing', true);\n return isString(objectResizing) ? objectResizing === 'table' : objectResizing;\n };\n\n var fireNewRow = function (editor, row) {\n return editor.fire('newrow', { node: row });\n };\n var fireNewCell = function (editor, cell) {\n return editor.fire('newcell', { node: cell });\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 fireTableSelectionChange = function (editor, cells, start, finish, otherCells) {\n editor.fire('TableSelectionChange', {\n cells: cells,\n start: start,\n finish: finish,\n otherCells: otherCells\n });\n };\n var fireTableSelectionClear = function (editor) {\n editor.fire('TableSelectionClear');\n };\n\n var point = Immutable('element', 'offset');\n var delta = Immutable('element', 'deltaOffset');\n var range$1 = Immutable('element', 'start', 'finish');\n var points = Immutable('begin', 'end');\n var text = Immutable('element', 'text');\n\n var scan = function (universe, element, direction) {\n if (universe.property().isText(element) && universe.property().getText(element).trim().length === 0 || universe.property().isComment(element)) {\n return direction(element).bind(function (elem) {\n return scan(universe, elem, direction).orThunk(function () {\n return Option.some(elem);\n });\n });\n } else {\n return Option.none();\n }\n };\n var toEnd = function (universe, element) {\n if (universe.property().isText(element)) {\n return universe.property().getText(element).length;\n }\n var children = universe.property().children(element);\n return children.length;\n };\n var freefallRtl = function (universe, element) {\n var candidate = scan(universe, element, universe.query().prevSibling).getOr(element);\n if (universe.property().isText(candidate)) {\n return point(candidate, toEnd(universe, candidate));\n }\n var children = universe.property().children(candidate);\n return children.length > 0 ? freefallRtl(universe, children[children.length - 1]) : point(candidate, toEnd(universe, candidate));\n };\n\n var freefallRtl$1 = freefallRtl;\n\n var universe$2 = DomUniverse();\n var freefallRtl$2 = function (element) {\n return freefallRtl$1(universe$2, element);\n };\n\n var TableActions = function (editor, lazyWire) {\n var isTableBody = function (editor) {\n return name(getBody$1(editor)) === 'table';\n };\n var lastRowGuard = function (table) {\n var size = TableGridSize.getGridSize(table);\n return isTableBody(editor) === false || size.rows() > 1;\n };\n var lastColumnGuard = function (table) {\n var size = TableGridSize.getGridSize(table);\n return isTableBody(editor) === false || size.columns() > 1;\n };\n var cloneFormats = getCloneElements(editor);\n var execute = function (operation, guard, mutate, lazyWire) {\n return function (table, target) {\n removeDataStyle(table);\n var wire = lazyWire();\n var doc = Element.fromDom(editor.getDoc());\n var direction = TableDirection(Direction.directionAt);\n var generators = TableFill.cellOperations(mutate, doc, cloneFormats);\n return guard(table) ? operation(wire, table, target, generators, direction).bind(function (result) {\n each(result.newRows(), function (row) {\n fireNewRow(editor, row.dom());\n });\n each(result.newCells(), function (cell) {\n fireNewCell(editor, cell.dom());\n });\n return result.cursor().map(function (cell) {\n var des = freefallRtl$2(cell);\n var rng = editor.dom.createRng();\n rng.setStart(des.element().dom(), des.offset());\n rng.setEnd(des.element().dom(), des.offset());\n return rng;\n });\n }) : Option.none();\n };\n };\n var deleteRow = execute(TableOperations.eraseRows, lastRowGuard, noop, lazyWire);\n var deleteColumn = execute(TableOperations.eraseColumns, lastColumnGuard, noop, lazyWire);\n var insertRowsBefore = execute(TableOperations.insertRowsBefore, always, noop, lazyWire);\n var insertRowsAfter = execute(TableOperations.insertRowsAfter, always, noop, lazyWire);\n var insertColumnsBefore = execute(TableOperations.insertColumnsBefore, always, CellMutations.halve, lazyWire);\n var insertColumnsAfter = execute(TableOperations.insertColumnsAfter, always, CellMutations.halve, lazyWire);\n var mergeCells = execute(TableOperations.mergeCells, always, noop, lazyWire);\n var unmergeCells = execute(TableOperations.unmergeCells, always, noop, lazyWire);\n var pasteRowsBefore = execute(TableOperations.pasteRowsBefore, always, noop, lazyWire);\n var pasteRowsAfter = execute(TableOperations.pasteRowsAfter, always, noop, lazyWire);\n var pasteCells = execute(TableOperations.pasteCells, always, noop, lazyWire);\n return {\n deleteRow: deleteRow,\n deleteColumn: deleteColumn,\n insertRowsBefore: insertRowsBefore,\n insertRowsAfter: insertRowsAfter,\n insertColumnsBefore: insertColumnsBefore,\n insertColumnsAfter: insertColumnsAfter,\n mergeCells: mergeCells,\n unmergeCells: unmergeCells,\n pasteRowsBefore: pasteRowsBefore,\n pasteRowsAfter: pasteRowsAfter,\n pasteCells: pasteCells\n };\n };\n\n var copyRows = function (table, target, generators) {\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var details = onCells(house, target);\n return details.map(function (selectedCells) {\n var grid = Transitions.toGrid(house, generators, false);\n var slicedGrid = grid.slice(selectedCells[0].row(), selectedCells[selectedCells.length - 1].row() + selectedCells[selectedCells.length - 1].rowspan());\n var slicedDetails = toDetailList(slicedGrid, generators);\n return Redraw.copy(slicedDetails);\n });\n };\n var CopyRows = { copyRows: copyRows };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getTDTHOverallStyle = function (dom, elm, name) {\n var cells = dom.select('td,th', elm);\n var firstChildStyle;\n var checkChildren = function (firstChildStyle, elms) {\n for (var i = 0; i < elms.length; i++) {\n var currentStyle = dom.getStyle(elms[i], name);\n if (typeof firstChildStyle === 'undefined') {\n firstChildStyle = currentStyle;\n }\n if (firstChildStyle !== currentStyle) {\n return '';\n }\n }\n return firstChildStyle;\n };\n firstChildStyle = checkChildren(firstChildStyle, cells);\n return firstChildStyle;\n };\n var applyAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('align' + name, {}, elm);\n }\n };\n var applyVAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('valign' + name, {}, elm);\n }\n };\n var unApplyAlign = function (editor, elm) {\n global$1.each('left center right'.split(' '), function (name) {\n editor.formatter.remove('align' + name, {}, elm);\n });\n };\n var unApplyVAlign = function (editor, elm) {\n global$1.each('top middle bottom'.split(' '), function (name) {\n editor.formatter.remove('valign' + name, {}, elm);\n });\n };\n var Styles$1 = {\n applyAlign: applyAlign,\n applyVAlign: applyVAlign,\n unApplyAlign: unApplyAlign,\n unApplyVAlign: unApplyVAlign,\n getTDTHOverallStyle: getTDTHOverallStyle\n };\n\n var buildListItems = function (inputList, itemCallback, startItems) {\n var appendItems = function (values, output) {\n output = output || [];\n global$1.each(values, function (item) {\n var menuItem = { text: item.text || item.title };\n if (item.menu) {\n menuItem.menu = appendItems(item.menu);\n } else {\n menuItem.value = item.value;\n if (itemCallback) {\n itemCallback(menuItem);\n }\n }\n output.push(menuItem);\n });\n return output;\n };\n return appendItems(inputList, startItems || []);\n };\n var extractAdvancedStyles = function (dom, elm) {\n var rgbToHex = function (value) {\n return startsWith(value, 'rgb') ? dom.toHex(value) : value;\n };\n var borderWidth = getRaw(Element.fromDom(elm), 'border-width').getOr('');\n var borderStyle = getRaw(Element.fromDom(elm), 'border-style').getOr('');\n var borderColor = getRaw(Element.fromDom(elm), 'border-color').map(rgbToHex).getOr('');\n var bgColor = getRaw(Element.fromDom(elm), 'background-color').map(rgbToHex).getOr('');\n return {\n borderwidth: borderWidth,\n borderstyle: borderStyle,\n bordercolor: borderColor,\n backgroundcolor: bgColor\n };\n };\n var getSharedValues = function (data) {\n var baseData = data[0];\n var comparisonData = data.slice(1);\n var keys$1 = keys(baseData);\n each(comparisonData, function (items) {\n each(keys$1, function (key) {\n each$1(items, function (itemValue, itemKey) {\n var comparisonValue = baseData[key];\n if (comparisonValue !== '' && key === itemKey) {\n if (comparisonValue !== itemValue) {\n baseData[key] = '';\n }\n }\n });\n });\n });\n return baseData;\n };\n var getAdvancedTab = function (dialogName) {\n var advTabItems = [\n {\n name: 'borderstyle',\n type: 'selectbox',\n label: 'Border style',\n items: [\n {\n text: 'Select...',\n value: ''\n },\n {\n text: 'Solid',\n value: 'solid'\n },\n {\n text: 'Dotted',\n value: 'dotted'\n },\n {\n text: 'Dashed',\n value: 'dashed'\n },\n {\n text: 'Double',\n value: 'double'\n },\n {\n text: 'Groove',\n value: 'groove'\n },\n {\n text: 'Ridge',\n value: 'ridge'\n },\n {\n text: 'Inset',\n value: 'inset'\n },\n {\n text: 'Outset',\n value: 'outset'\n },\n {\n text: 'None',\n value: 'none'\n },\n {\n text: 'Hidden',\n value: 'hidden'\n }\n ]\n },\n {\n name: 'bordercolor',\n type: 'colorinput',\n label: 'Border color'\n },\n {\n name: 'backgroundcolor',\n type: 'colorinput',\n label: 'Background color'\n }\n ];\n var borderWidth = {\n name: 'borderwidth',\n type: 'input',\n label: 'Border width'\n };\n var items = dialogName === 'cell' ? [borderWidth].concat(advTabItems) : advTabItems;\n return {\n title: 'Advanced',\n name: 'advanced',\n items: items\n };\n };\n var getAlignment = function (alignments, formatName, dataName, editor, elm) {\n var alignmentData = {};\n global$1.each(alignments.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, formatName + name)) {\n alignmentData[dataName] = name;\n }\n });\n if (!alignmentData[dataName]) {\n alignmentData[dataName] = '';\n }\n return alignmentData;\n };\n var getHAlignment = curry(getAlignment, 'left center right');\n var getVAlignment = curry(getAlignment, 'top middle bottom');\n var extractDataFromSettings = function (editor, hasAdvTableTab) {\n var style = getDefaultStyles(editor);\n var attrs = getDefaultAttributes(editor);\n var extractAdvancedStyleData = function (dom) {\n var rgbToHex = function (value) {\n return startsWith(value, 'rgb') ? dom.toHex(value) : value;\n };\n var borderStyle = get(style, 'border-style').getOr('');\n var borderColor = get(style, 'border-color').getOr('');\n var bgColor = get(style, 'background-color').getOr('');\n return {\n borderstyle: borderStyle,\n bordercolor: rgbToHex(borderColor),\n backgroundcolor: rgbToHex(bgColor)\n };\n };\n var defaultData = {\n height: '',\n width: '100%',\n cellspacing: '',\n cellpadding: '',\n caption: false,\n class: '',\n align: '',\n border: ''\n };\n var getBorder = function () {\n var borderWidth = style['border-width'];\n if (shouldStyleWithCss(editor) && borderWidth) {\n return { border: borderWidth };\n }\n return get(attrs, 'border').fold(function () {\n return {};\n }, function (border) {\n return { border: border };\n });\n };\n var dom = editor.dom;\n var advStyle = hasAdvTableTab ? extractAdvancedStyleData(dom) : {};\n var getCellPaddingCellSpacing = function () {\n var spacing = get(style, 'border-spacing').or(get(attrs, 'cellspacing')).fold(function () {\n return {};\n }, function (cellspacing) {\n return { cellspacing: cellspacing };\n });\n var padding = get(style, 'border-padding').or(get(attrs, 'cellpadding')).fold(function () {\n return {};\n }, function (cellpadding) {\n return { cellpadding: cellpadding };\n });\n return __assign(__assign({}, spacing), padding);\n };\n var data = __assign(__assign(__assign(__assign(__assign(__assign({}, defaultData), style), attrs), advStyle), getBorder()), getCellPaddingCellSpacing());\n return data;\n };\n var extractDataFromTableElement = function (editor, elm, hasAdvTableTab) {\n var getBorder = function (dom, elm) {\n var optBorderWidth = getRaw(Element.fromDom(elm), 'border-width');\n if (shouldStyleWithCss(editor) && optBorderWidth.isSome()) {\n return optBorderWidth.getOr('');\n }\n return dom.getAttrib(elm, 'border') || Styles$1.getTDTHOverallStyle(editor.dom, elm, 'border-width') || Styles$1.getTDTHOverallStyle(editor.dom, elm, 'border');\n };\n var dom = editor.dom;\n var data = __assign(__assign({\n width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n cellspacing: dom.getStyle(elm, 'border-spacing') || dom.getAttrib(elm, 'cellspacing'),\n cellpadding: dom.getAttrib(elm, 'cellpadding') || Styles$1.getTDTHOverallStyle(editor.dom, elm, 'padding'),\n border: getBorder(dom, elm),\n caption: !!dom.select('caption', elm)[0],\n class: dom.getAttrib(elm, 'class', '')\n }, getHAlignment('align', 'align', editor, elm)), hasAdvTableTab ? extractAdvancedStyles(dom, elm) : {});\n return data;\n };\n var extractDataFromRowElement = function (editor, elm, hasAdvancedRowTab) {\n var dom = editor.dom;\n var data = __assign(__assign({\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n class: dom.getAttrib(elm, 'class', ''),\n align: '',\n type: elm.parentNode.nodeName.toLowerCase()\n }, getHAlignment('align', 'align', editor, elm)), hasAdvancedRowTab ? extractAdvancedStyles(dom, elm) : {});\n return data;\n };\n var extractDataFromCellElement = function (editor, elm, hasAdvancedCellTab) {\n var dom = editor.dom;\n var data = __assign(__assign(__assign({\n width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n celltype: elm.nodeName.toLowerCase(),\n class: dom.getAttrib(elm, 'class', '')\n }, getHAlignment('align', 'halign', editor, elm)), getVAlignment('valign', 'valign', editor, elm)), hasAdvancedCellTab ? extractAdvancedStyles(dom, elm) : {});\n return data;\n };\n var Helpers = {\n buildListItems: buildListItems,\n extractAdvancedStyles: extractAdvancedStyles,\n getSharedValues: getSharedValues,\n getAdvancedTab: getAdvancedTab,\n extractDataFromTableElement: extractDataFromTableElement,\n extractDataFromRowElement: extractDataFromRowElement,\n extractDataFromCellElement: extractDataFromCellElement,\n extractDataFromSettings: extractDataFromSettings\n };\n\n var getClassList = function (editor) {\n var rowClassList = getCellClassList(editor);\n var classes = Helpers.buildListItems(rowClassList, function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'tr',\n classes: [item.value]\n });\n };\n }\n });\n if (rowClassList.length > 0) {\n return Option.some({\n name: 'class',\n type: 'selectbox',\n label: 'Class',\n items: classes\n });\n }\n return Option.none();\n };\n var children$3 = [\n {\n name: 'width',\n type: 'input',\n label: 'Width'\n },\n {\n name: 'height',\n type: 'input',\n label: 'Height'\n },\n {\n name: 'celltype',\n type: 'selectbox',\n label: 'Cell type',\n items: [\n {\n text: 'Cell',\n value: 'td'\n },\n {\n text: 'Header cell',\n value: 'th'\n }\n ]\n },\n {\n name: 'scope',\n type: 'selectbox',\n label: 'Scope',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Row',\n value: 'row'\n },\n {\n text: 'Column',\n value: 'col'\n },\n {\n text: 'Row group',\n value: 'rowgroup'\n },\n {\n text: 'Column group',\n value: 'colgroup'\n }\n ]\n },\n {\n name: 'halign',\n type: 'selectbox',\n label: 'H Align',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n name: 'valign',\n type: 'selectbox',\n label: 'V Align',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Top',\n value: 'top'\n },\n {\n text: 'Middle',\n value: 'middle'\n },\n {\n text: 'Bottom',\n value: 'bottom'\n }\n ]\n }\n ];\n var getItems = function (editor) {\n return getClassList(editor).fold(function () {\n return children$3;\n }, function (classlist) {\n return children$3.concat(classlist);\n });\n };\n var CellDialogGeneralTab = { getItems: getItems };\n\n var normal = function (dom, node) {\n var setAttrib = function (attr, value) {\n dom.setAttrib(node, attr, value);\n };\n var setStyle = function (prop, value) {\n dom.setStyle(node, prop, value);\n };\n return {\n setAttrib: setAttrib,\n setStyle: setStyle\n };\n };\n var ifTruthy = function (dom, node) {\n var setAttrib = function (attr, value) {\n if (value) {\n dom.setAttrib(node, attr, value);\n }\n };\n var setStyle = function (prop, value) {\n if (value) {\n dom.setStyle(node, prop, value);\n }\n };\n return {\n setAttrib: setAttrib,\n setStyle: setStyle\n };\n };\n var DomModifier = {\n normal: normal,\n ifTruthy: ifTruthy\n };\n\n var updateSimpleProps = function (modifiers, data) {\n modifiers.setAttrib('scope', data.scope);\n modifiers.setAttrib('class', data.class);\n modifiers.setStyle('width', addSizeSuffix(data.width));\n modifiers.setStyle('height', addSizeSuffix(data.height));\n };\n var updateAdvancedProps = function (modifiers, data) {\n modifiers.setStyle('background-color', data.backgroundcolor);\n modifiers.setStyle('border-color', data.bordercolor);\n modifiers.setStyle('border-style', data.borderstyle);\n modifiers.setStyle('border-width', addSizeSuffix(data.borderwidth));\n };\n var applyToSingle = function (editor, cells, data) {\n var dom = editor.dom;\n var cellElm = data.celltype && cells[0].nodeName.toLowerCase() !== data.celltype ? dom.rename(cells[0], data.celltype) : cells[0];\n var modifiers = DomModifier.normal(dom, cellElm);\n updateSimpleProps(modifiers, data);\n if (hasAdvancedCellTab(editor)) {\n updateAdvancedProps(modifiers, data);\n }\n Styles$1.unApplyAlign(editor, cellElm);\n Styles$1.unApplyVAlign(editor, cellElm);\n if (data.halign) {\n Styles$1.applyAlign(editor, cellElm, data.halign);\n }\n if (data.valign) {\n Styles$1.applyVAlign(editor, cellElm, data.valign);\n }\n };\n var applyToMultiple = function (editor, cells, data) {\n var dom = editor.dom;\n global$1.each(cells, function (cellElm) {\n if (data.celltype && cellElm.nodeName.toLowerCase() !== data.celltype) {\n cellElm = dom.rename(cellElm, data.celltype);\n }\n var modifiers = DomModifier.ifTruthy(dom, cellElm);\n updateSimpleProps(modifiers, data);\n if (hasAdvancedCellTab(editor)) {\n updateAdvancedProps(modifiers, data);\n }\n if (data.halign) {\n Styles$1.applyAlign(editor, cellElm, data.halign);\n }\n if (data.valign) {\n Styles$1.applyVAlign(editor, cellElm, data.valign);\n }\n });\n };\n var onSubmitCellForm = function (editor, cells, api) {\n var data = api.getData();\n api.close();\n editor.undoManager.transact(function () {\n var applicator = cells.length === 1 ? applyToSingle : applyToMultiple;\n applicator(editor, cells, data);\n editor.focus();\n });\n };\n var open = function (editor) {\n var cellElm, cells = [];\n cells = editor.dom.select('td[data-mce-selected],th[data-mce-selected]');\n cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th');\n if (!cells.length && cellElm) {\n cells.push(cellElm);\n }\n cellElm = cellElm || cells[0];\n if (!cellElm) {\n return;\n }\n var cellsData = global$1.map(cells, function (cellElm) {\n return Helpers.extractDataFromCellElement(editor, cellElm, hasAdvancedCellTab(editor));\n });\n var data = Helpers.getSharedValues(cellsData);\n var dialogTabPanel = {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: CellDialogGeneralTab.getItems(editor)\n },\n Helpers.getAdvancedTab('cell')\n ]\n };\n var dialogPanel = {\n type: 'panel',\n items: [{\n type: 'grid',\n columns: 2,\n items: CellDialogGeneralTab.getItems(editor)\n }]\n };\n editor.windowManager.open({\n title: 'Cell Properties',\n size: 'normal',\n body: hasAdvancedCellTab(editor) ? dialogTabPanel : dialogPanel,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: data,\n onSubmit: curry(onSubmitCellForm, editor, cells)\n });\n };\n var CellDialog = { open: open };\n\n var getClassList$1 = function (editor) {\n var rowClassList = getRowClassList(editor);\n var classes = Helpers.buildListItems(rowClassList, function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'tr',\n classes: [item.value]\n });\n };\n }\n });\n if (rowClassList.length > 0) {\n return Option.some({\n name: 'class',\n type: 'selectbox',\n label: 'Class',\n items: classes\n });\n }\n return Option.none();\n };\n var formChildren = [\n {\n type: 'selectbox',\n name: 'type',\n label: 'Row type',\n items: [\n {\n text: 'Header',\n value: 'thead'\n },\n {\n text: 'Body',\n value: 'tbody'\n },\n {\n text: 'Footer',\n value: 'tfoot'\n }\n ]\n },\n {\n type: 'selectbox',\n name: 'align',\n label: 'Alignment',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n label: 'Height',\n name: 'height',\n type: 'input'\n }\n ];\n var getItems$1 = function (editor) {\n return getClassList$1(editor).fold(function () {\n return formChildren;\n }, function (classes) {\n return formChildren.concat(classes);\n });\n };\n var RowDialogGeneralTab = { getItems: getItems$1 };\n\n var switchRowType = function (dom, rowElm, toType) {\n var tableElm = dom.getParent(rowElm, 'table');\n var oldParentElm = rowElm.parentNode;\n var parentElm = dom.select(toType, tableElm)[0];\n if (!parentElm) {\n parentElm = dom.create(toType);\n if (tableElm.firstChild) {\n if (tableElm.firstChild.nodeName === 'CAPTION') {\n dom.insertAfter(parentElm, tableElm.firstChild);\n } else {\n tableElm.insertBefore(parentElm, tableElm.firstChild);\n }\n } else {\n tableElm.appendChild(parentElm);\n }\n }\n if (toType === 'tbody' && oldParentElm.nodeName === 'THEAD' && parentElm.firstChild) {\n parentElm.insertBefore(rowElm, parentElm.firstChild);\n } else {\n parentElm.appendChild(rowElm);\n }\n if (!oldParentElm.hasChildNodes()) {\n dom.remove(oldParentElm);\n }\n };\n var updateAdvancedProps$1 = function (modifier, data) {\n modifier.setStyle('background-color', data.backgroundcolor);\n modifier.setStyle('border-color', data.bordercolor);\n modifier.setStyle('border-style', data.borderstyle);\n };\n var onSubmitRowForm = function (editor, rows, oldData, api) {\n var dom = editor.dom;\n var data = api.getData();\n api.close();\n var createModifier = rows.length === 1 ? DomModifier.normal : DomModifier.ifTruthy;\n editor.undoManager.transact(function () {\n global$1.each(rows, function (rowElm) {\n if (data.type !== rowElm.parentNode.nodeName.toLowerCase()) {\n switchRowType(editor.dom, rowElm, data.type);\n }\n var modifier = createModifier(dom, rowElm);\n modifier.setAttrib('scope', data.scope);\n modifier.setAttrib('class', data.class);\n modifier.setStyle('height', addSizeSuffix(data.height));\n if (hasAdvancedRowTab(editor)) {\n updateAdvancedProps$1(modifier, data);\n }\n if (data.align !== oldData.align) {\n Styles$1.unApplyAlign(editor, rowElm);\n Styles$1.applyAlign(editor, rowElm, data.align);\n }\n });\n editor.focus();\n });\n };\n var open$1 = function (editor) {\n var dom = editor.dom;\n var tableElm, cellElm, rowElm;\n var rows = [];\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n if (!tableElm) {\n return;\n }\n cellElm = dom.getParent(editor.selection.getStart(), 'td,th');\n global$1.each(tableElm.rows, function (row) {\n global$1.each(row.cells, function (cell) {\n if ((dom.getAttrib(cell, 'data-mce-selected') || cell === cellElm) && rows.indexOf(row) < 0) {\n rows.push(row);\n return false;\n }\n });\n });\n rowElm = rows[0];\n if (!rowElm) {\n return;\n }\n var rowsData = global$1.map(rows, function (rowElm) {\n return Helpers.extractDataFromRowElement(editor, rowElm, hasAdvancedRowTab(editor));\n });\n var data = Helpers.getSharedValues(rowsData);\n var dialogTabPanel = {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: RowDialogGeneralTab.getItems(editor)\n },\n Helpers.getAdvancedTab('row')\n ]\n };\n var dialogPanel = {\n type: 'panel',\n items: [{\n type: 'grid',\n columns: 2,\n items: RowDialogGeneralTab.getItems(editor)\n }]\n };\n editor.windowManager.open({\n title: 'Row Properties',\n size: 'normal',\n body: hasAdvancedRowTab(editor) ? dialogTabPanel : dialogPanel,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: data,\n onSubmit: curry(onSubmitRowForm, editor, rows, data)\n });\n };\n var RowDialog = { open: open$1 };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n percentages: true\n };\n var makeTable = function () {\n return Element.fromTag('table');\n };\n var tableBody = function () {\n return Element.fromTag('tbody');\n };\n var tableRow = function () {\n return Element.fromTag('tr');\n };\n var tableHeaderCell = function () {\n return Element.fromTag('th');\n };\n var tableCell = function () {\n return Element.fromTag('td');\n };\n var render$1 = function (rows, columns, rowHeaders, columnHeaders, renderOpts) {\n if (renderOpts === void 0) {\n renderOpts = DefaultRenderOptions;\n }\n var table = makeTable();\n setAll$1(table, renderOpts.styles);\n setAll(table, renderOpts.attributes);\n var tbody = tableBody();\n append(table, tbody);\n var trs = [];\n for (var i = 0; i < rows; i++) {\n var tr = tableRow();\n for (var j = 0; j < columns; j++) {\n var td = i < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set(td, 'scope', 'row');\n }\n if (i < rowHeaders) {\n set(td, 'scope', 'col');\n }\n append(td, Element.fromTag('br'));\n if (renderOpts.percentages) {\n set$1(td, 'width', 100 / columns + '%');\n }\n append(tr, td);\n }\n trs.push(tr);\n }\n append$1(tbody, trs);\n return table;\n };\n\n var get$8 = function (element) {\n return element.dom().innerHTML;\n };\n var getOuter$2 = function (element) {\n var container = Element.fromTag('div');\n var clone = Element.fromDom(element.dom().cloneNode(true));\n append(container, clone);\n return get$8(container);\n };\n\n var placeCaretInCell = function (editor, cell) {\n editor.selection.select(cell.dom(), true);\n editor.selection.collapse(true);\n };\n var selectFirstCellInTable = function (editor, tableElm) {\n descendant$1(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n var fireEvents = function (editor, table) {\n each(descendants$1(table, 'tr'), function (row) {\n fireNewRow(editor, row.dom());\n each(descendants$1(row, 'th,td'), function (cell) {\n fireNewCell(editor, cell.dom());\n });\n });\n };\n var isPercentage = function (width) {\n return isString(width) && width.indexOf('%') !== -1;\n };\n var insert$1 = function (editor, columns, rows) {\n var defaultStyles = getDefaultStyles(editor);\n var options = {\n styles: defaultStyles,\n attributes: getDefaultAttributes(editor),\n percentages: isPercentage(defaultStyles.width) && !isPixelsForced(editor)\n };\n var table = render$1(rows, columns, 0, 0, options);\n set(table, 'data-mce-id', '__mce');\n var html = getOuter$2(table);\n editor.insertContent(html);\n return descendant$1(getBody$1(editor), 'table[data-mce-id=\"__mce\"]').map(function (table) {\n if (isPixelsForced(editor)) {\n set$1(table, 'width', get$2(table, 'width'));\n }\n remove(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom();\n }).getOr(null);\n };\n var InsertTable = { insert: insert$1 };\n\n var getItems$2 = function (editor, hasClasses, insertNewTable) {\n var rowColCountItems = !insertNewTable ? [] : [\n {\n type: 'input',\n name: 'cols',\n label: 'Cols',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n name: 'rows',\n label: 'Rows',\n inputMode: 'numeric'\n }\n ];\n var alwaysItems = [\n {\n type: 'input',\n name: 'width',\n label: 'Width'\n },\n {\n type: 'input',\n name: 'height',\n label: 'Height'\n }\n ];\n var appearanceItems = hasAppearanceOptions(editor) ? [\n {\n type: 'input',\n name: 'cellspacing',\n label: 'Cell spacing',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n name: 'cellpadding',\n label: 'Cell padding',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n name: 'border',\n label: 'Border width'\n },\n {\n type: 'label',\n label: 'Caption',\n items: [{\n type: 'checkbox',\n name: 'caption',\n label: 'Show caption'\n }]\n }\n ] : [];\n var alignmentItem = [{\n type: 'selectbox',\n name: 'align',\n label: 'Alignment',\n items: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n }];\n var classListItem = hasClasses ? [{\n type: 'selectbox',\n name: 'class',\n label: 'Class',\n items: Helpers.buildListItems(getTableClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'table',\n classes: [item.value]\n });\n };\n }\n })\n }] : [];\n return rowColCountItems.concat(alwaysItems).concat(appearanceItems).concat(alignmentItem).concat(classListItem);\n };\n var TableDialogGeneralTab = { getItems: getItems$2 };\n\n var styleTDTH = function (dom, elm, name, value) {\n if (elm.tagName === 'TD' || elm.tagName === 'TH') {\n if (isString(name)) {\n dom.setStyle(elm, name, value);\n } else {\n dom.setStyle(elm, name);\n }\n } else {\n if (elm.children) {\n for (var i = 0; i < elm.children.length; i++) {\n styleTDTH(dom, elm.children[i], name, value);\n }\n }\n }\n };\n var applyDataToElement = function (editor, tableElm, data) {\n var dom = editor.dom;\n var attrs = {};\n var styles = {};\n attrs.class = data.class;\n styles.height = addSizeSuffix(data.height);\n if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {\n attrs.width = removePxSuffix(data.width);\n } else {\n styles.width = addSizeSuffix(data.width);\n }\n if (shouldStyleWithCss(editor)) {\n styles['border-width'] = addSizeSuffix(data.border);\n styles['border-spacing'] = addSizeSuffix(data.cellspacing);\n } else {\n attrs.border = data.border;\n attrs.cellpadding = data.cellpadding;\n attrs.cellspacing = data.cellspacing;\n }\n if (shouldStyleWithCss(editor) && tableElm.children) {\n for (var i = 0; i < tableElm.children.length; i++) {\n styleTDTH(dom, tableElm.children[i], {\n 'border-width': addSizeSuffix(data.border),\n 'padding': addSizeSuffix(data.cellpadding)\n });\n if (hasAdvancedTableTab(editor)) {\n styleTDTH(dom, tableElm.children[i], { 'border-color': data.bordercolor });\n }\n }\n }\n if (hasAdvancedTableTab(editor)) {\n styles['background-color'] = data.backgroundcolor;\n styles['border-color'] = data.bordercolor;\n styles['border-style'] = data.borderstyle;\n }\n attrs.style = dom.serializeStyle(__assign(__assign({}, getDefaultStyles(editor)), styles));\n dom.setAttribs(tableElm, __assign(__assign({}, getDefaultAttributes(editor)), attrs));\n };\n var onSubmitTableForm = function (editor, tableElm, api) {\n var dom = editor.dom;\n var captionElm;\n var data = api.getData();\n api.close();\n if (data.class === '') {\n delete data.class;\n }\n editor.undoManager.transact(function () {\n if (!tableElm) {\n var cols = parseInt(data.cols, 10) || 1;\n var rows = parseInt(data.rows, 10) || 1;\n tableElm = InsertTable.insert(editor, cols, rows);\n }\n applyDataToElement(editor, tableElm, data);\n captionElm = dom.select('caption', tableElm)[0];\n if (captionElm && !data.caption) {\n dom.remove(captionElm);\n }\n if (!captionElm && data.caption) {\n captionElm = dom.create('caption');\n captionElm.innerHTML = !global$2.ie ? '
    ' : nbsp;\n tableElm.insertBefore(captionElm, tableElm.firstChild);\n }\n if (data.align === '') {\n Styles$1.unApplyAlign(editor, tableElm);\n } else {\n Styles$1.applyAlign(editor, tableElm, data.align);\n }\n editor.focus();\n editor.addVisual();\n });\n };\n var open$2 = function (editor, insertNewTable) {\n var dom = editor.dom;\n var tableElm;\n var data = Helpers.extractDataFromSettings(editor, hasAdvancedTableTab(editor));\n if (insertNewTable === false) {\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n if (tableElm) {\n data = Helpers.extractDataFromTableElement(editor, tableElm, hasAdvancedTableTab(editor));\n } else {\n if (hasAdvancedTableTab(editor)) {\n data.borderstyle = '';\n data.bordercolor = '';\n data.backgroundcolor = '';\n }\n }\n } else {\n data.cols = '1';\n data.rows = '1';\n if (hasAdvancedTableTab(editor)) {\n data.borderstyle = '';\n data.bordercolor = '';\n data.backgroundcolor = '';\n }\n }\n var hasClasses = getTableClassList(editor).length > 0;\n if (hasClasses) {\n if (data.class) {\n data.class = data.class.replace(/\\s*mce\\-item\\-table\\s*/g, '');\n }\n }\n var generalPanel = {\n type: 'grid',\n columns: 2,\n items: TableDialogGeneralTab.getItems(editor, hasClasses, insertNewTable)\n };\n var nonAdvancedForm = function () {\n return {\n type: 'panel',\n items: [generalPanel]\n };\n };\n var advancedForm = function () {\n return {\n type: 'tabpanel',\n tabs: [\n {\n title: 'General',\n name: 'general',\n items: [generalPanel]\n },\n Helpers.getAdvancedTab('table')\n ]\n };\n };\n var dialogBody = hasAdvancedTableTab(editor) ? advancedForm() : nonAdvancedForm();\n editor.windowManager.open({\n title: 'Table Properties',\n size: 'normal',\n body: dialogBody,\n onSubmit: curry(onSubmitTableForm, editor, tableElm),\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: data\n });\n };\n var TableDialog = { open: open$2 };\n\n var getSelectionStartFromSelector = function (selector) {\n return function (editor) {\n return Option.from(editor.dom.getParent(editor.selection.getStart(), selector)).map(Element.fromDom);\n };\n };\n var getSelectionStartCell = getSelectionStartFromSelector('th,td');\n var getSelectionStartCellOrCaption = getSelectionStartFromSelector('th,td,caption');\n\n var each$3 = global$1.each;\n var registerCommands = function (editor, actions, cellSelection, selections, clipboardRows) {\n var isRoot = getIsRoot(editor);\n var eraseTable = function () {\n getSelectionStartCellOrCaption(editor).each(function (cellOrCaption) {\n var tableOpt = TableLookup.table(cellOrCaption, isRoot);\n tableOpt.filter(not(isRoot)).each(function (table) {\n var cursor = Element.fromText('');\n after(table, cursor);\n remove$2(table);\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n var rng = editor.dom.createRng();\n rng.setStart(cursor.dom(), 0);\n rng.setEnd(cursor.dom(), 0);\n editor.selection.setRng(rng);\n editor.nodeChanged();\n }\n });\n });\n };\n var getTableFromCell = function (cell) {\n return TableLookup.table(cell, isRoot);\n };\n var getSize = function (table) {\n return {\n width: getPixelWidth$1(table.dom()),\n height: getPixelWidth$1(table.dom())\n };\n };\n var resizeChange = function (editor, oldSize, table) {\n var newSize = getSize(table);\n if (oldSize.width !== newSize.width || oldSize.height !== newSize.height) {\n fireObjectResizeStart(editor, table.dom(), oldSize.width, oldSize.height);\n fireObjectResized(editor, table.dom(), newSize.width, newSize.height);\n }\n };\n var actOnSelection = function (execute) {\n getSelectionStartCell(editor).each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var targets = TableTargets.forMenu(selections, table, cell);\n var beforeSize = getSize(table);\n execute(table, targets).each(function (rng) {\n resizeChange(editor, beforeSize, table);\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n removeDataStyle(table);\n });\n });\n });\n };\n var copyRowSelection = function (execute) {\n return getSelectionStartCell(editor).map(function (cell) {\n return getTableFromCell(cell).bind(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var targets = TableTargets.forMenu(selections, table, cell);\n var generators = TableFill.cellOperations(noop, doc, Option.none());\n return CopyRows.copyRows(table, targets, generators);\n });\n });\n };\n var pasteOnSelection = function (execute) {\n clipboardRows.get().each(function (rows) {\n var clonedRows = map(rows, function (row) {\n return deep(row);\n });\n getSelectionStartCell(editor).each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.paste(doc);\n var targets = TableTargets.pasteRows(selections, table, cell, clonedRows, generators);\n execute(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n });\n });\n });\n });\n };\n each$3({\n mceTableSplitCells: function () {\n actOnSelection(actions.unmergeCells);\n },\n mceTableMergeCells: function () {\n actOnSelection(actions.mergeCells);\n },\n mceTableInsertRowBefore: function () {\n actOnSelection(actions.insertRowsBefore);\n },\n mceTableInsertRowAfter: function () {\n actOnSelection(actions.insertRowsAfter);\n },\n mceTableInsertColBefore: function () {\n actOnSelection(actions.insertColumnsBefore);\n },\n mceTableInsertColAfter: function () {\n actOnSelection(actions.insertColumnsAfter);\n },\n mceTableDeleteCol: function () {\n actOnSelection(actions.deleteColumn);\n },\n mceTableDeleteRow: function () {\n actOnSelection(actions.deleteRow);\n },\n mceTableCutRow: function (grid) {\n copyRowSelection().each(function (selection) {\n clipboardRows.set(selection);\n actOnSelection(actions.deleteRow);\n });\n },\n mceTableCopyRow: function (grid) {\n copyRowSelection().each(function (selection) {\n clipboardRows.set(selection);\n });\n },\n mceTablePasteRowBefore: function (grid) {\n pasteOnSelection(actions.pasteRowsBefore);\n },\n mceTablePasteRowAfter: function (grid) {\n pasteOnSelection(actions.pasteRowsAfter);\n },\n mceTableDelete: eraseTable\n }, function (func, name) {\n editor.addCommand(name, func);\n });\n each$3({\n mceInsertTable: curry(TableDialog.open, editor, true),\n mceTableProps: curry(TableDialog.open, editor, false),\n mceTableRowProps: curry(RowDialog.open, editor),\n mceTableCellProps: curry(CellDialog.open, editor)\n }, function (func, name) {\n editor.addCommand(name, function () {\n func();\n });\n });\n };\n var Commands = { registerCommands: registerCommands };\n\n var only = function (element) {\n var parent = Option.from(element.dom().documentElement).map(Element.fromDom).getOr(element);\n return {\n parent: constant(parent),\n view: constant(element),\n origin: constant(Position(0, 0))\n };\n };\n var detached = function (editable, chrome) {\n var origin = function () {\n return absolute(chrome);\n };\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: origin\n };\n };\n var body$1 = function (editable, chrome) {\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: constant(Position(0, 0))\n };\n };\n var ResizeWire = {\n only: only,\n detached: detached,\n body: body$1\n };\n\n var Event = function (fields) {\n var struct = Immutable.apply(null, fields);\n var handlers = [];\n var bind = function (handler) {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n var unbind = function (handler) {\n handlers = filter(handlers, function (h) {\n return h !== handler;\n });\n };\n var trigger = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var event = struct.apply(null, args);\n each(handlers, function (handler) {\n handler(event);\n });\n };\n return {\n bind: bind,\n unbind: unbind,\n trigger: trigger\n };\n };\n\n var create$1 = function (typeDefs) {\n var registry = map$1(typeDefs, function (event) {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n var trigger = map$1(typeDefs, function (event) {\n return event.trigger;\n });\n return {\n registry: registry,\n trigger: trigger\n };\n };\n var Events = { create: create$1 };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: constant(target),\n x: constant(x),\n y: constant(y),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(raw)\n };\n };\n var fromRawEvent = function (rawEvent) {\n var target = Element.fromDom(rawEvent.target);\n var stop = function () {\n rawEvent.stopPropagation();\n };\n var prevent = function () {\n rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (!filter(rawEvent)) {\n return;\n }\n handler(fromRawEvent(rawEvent));\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle(filter, handler);\n element.dom().addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n var bind$1 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, false);\n };\n var unbind = function (element, event, handler, useCapture) {\n element.dom().removeEventListener(event, handler, useCapture);\n };\n\n var filter$1 = constant(true);\n var bind$2 = function (element, event, handler) {\n return bind$1(element, event, filter$1, handler);\n };\n var fromRawEvent$1 = fromRawEvent;\n\n var styles$1 = css('ephox-dragster');\n var Styles$2 = { resolve: styles$1.resolve };\n\n var Blocker = function (options) {\n var settings = __assign({ layerClass: Styles$2.resolve('blocker') }, options);\n var div = Element.fromTag('div');\n set(div, 'role', 'presentation');\n setAll$1(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add$2(div, Styles$2.resolve('blocker'));\n add$2(div, settings.layerClass);\n var element = function () {\n return div;\n };\n var destroy = function () {\n remove$2(div);\n };\n return {\n element: element,\n destroy: destroy\n };\n };\n\n var DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n var DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n var DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n var compare = function (old, nu) {\n return Position(nu.left() - old.left(), nu.top() - old.top());\n };\n var extract$1 = function (event) {\n return Option.some(Position(event.x(), event.y()));\n };\n var mutate = function (mutation, info) {\n mutation.mutate(info.left(), info.top());\n };\n var sink = function (dragApi, settings) {\n var blocker = Blocker(settings);\n var mdown = bind$2(blocker.element(), 'mousedown', dragApi.forceDrop);\n var mup = bind$2(blocker.element(), 'mouseup', dragApi.drop);\n var mmove = bind$2(blocker.element(), 'mousemove', dragApi.move);\n var mout = bind$2(blocker.element(), 'mouseout', dragApi.delayDrop);\n var destroy = function () {\n blocker.destroy();\n mup.unbind();\n mmove.unbind();\n mout.unbind();\n mdown.unbind();\n };\n var start = function (parent) {\n append(parent, blocker.element());\n };\n var stop = function () {\n remove$2(blocker.element());\n };\n return DragSink({\n element: blocker.element,\n start: start,\n stop: stop,\n destroy: destroy\n });\n };\n var MouseDrag = DragMode({\n compare: compare,\n extract: extract$1,\n sink: sink,\n mutate: mutate\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 function InDrag () {\n var previous = Option.none();\n var reset = function () {\n previous = Option.none();\n };\n var update = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.compare(old, nu);\n });\n previous = Option.some(nu);\n return result;\n };\n var onEvent = function (event, mode) {\n var dataOption = mode.extract(event);\n dataOption.each(function (data) {\n var offset = update(mode, data);\n offset.each(function (d) {\n events.trigger.move(d);\n });\n });\n };\n var events = Events.create({ move: Event(['info']) });\n return {\n onEvent: onEvent,\n reset: reset,\n events: events.registry\n };\n }\n\n function NoDrag () {\n return {\n onEvent: noop,\n reset: noop\n };\n }\n\n function Movement () {\n var noDragState = NoDrag();\n var inDragState = InDrag();\n var dragState = noDragState;\n var on = function () {\n dragState.reset();\n dragState = inDragState;\n };\n var off = function () {\n dragState.reset();\n dragState = noDragState;\n };\n var onEvent = function (event, mode) {\n dragState.onEvent(event, mode);\n };\n var isOn = function () {\n return dragState === inDragState;\n };\n return {\n on: on,\n off: off,\n isOn: isOn,\n onEvent: onEvent,\n events: inDragState.events\n };\n }\n\n var setup = function (mutation, mode, settings) {\n var active = false;\n var events = Events.create({\n start: Event([]),\n stop: Event([])\n });\n var movement = Movement();\n var drop = function () {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n var throttledDrop = last$2(drop, 200);\n var go = function (parent) {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n var mousemove = function (event) {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(function (event) {\n mode.mutate(mutation, event.info());\n });\n var on = function () {\n active = true;\n };\n var off = function () {\n active = false;\n };\n var runIfActive = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (active) {\n f.apply(null, args);\n }\n };\n };\n var sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n var destroy = function () {\n sink.destroy();\n };\n return {\n element: sink.element,\n go: go,\n on: on,\n off: off,\n destroy: destroy,\n events: events.registry\n };\n };\n var Dragging = { setup: setup };\n\n var transform$1 = function (mutation, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var mode = settings.mode !== undefined ? settings.mode : MouseDrag;\n return Dragging.setup(mutation, mode, settings);\n };\n var Dragger = { transform: transform$1 };\n\n var Mutation = function () {\n var events = Events.create({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n var mutate = function (x, y) {\n events.trigger.drag(x, y);\n };\n return {\n mutate: mutate,\n events: events.registry\n };\n };\n\n var BarMutation = function () {\n var events = Events.create({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n var target = Option.none();\n var delegate = Mutation();\n delegate.events.drag.bind(function (event) {\n target.each(function (t) {\n events.trigger.drag(event.xDelta(), event.yDelta(), t);\n });\n });\n var assign = function (t) {\n target = Option.some(t);\n };\n var get = function () {\n return target;\n };\n return {\n assign: assign,\n get: get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n var isContentEditableTrue = function (elm) {\n return get$1(elm, 'contenteditable') === 'true';\n };\n var findClosestContentEditable = function (target, isRoot) {\n return closest$1(target, '[contenteditable]', isRoot);\n };\n\n var resizeBarDragging = Styles.resolve('resizer-bar-dragging');\n var BarManager = function (wire, direction, hdirection) {\n var mutation = BarMutation();\n var resizing = Dragger.transform(mutation, {});\n var hoverTable = Option.none();\n var getResizer = function (element, type) {\n return Option.from(get$1(element, type));\n };\n mutation.events.drag.bind(function (event) {\n getResizer(event.target(), 'data-row').each(function (_dataRow) {\n var currentRow = CellUtils.getInt(event.target(), 'top');\n set$1(event.target(), 'top', currentRow + event.yDelta() + 'px');\n });\n getResizer(event.target(), 'data-column').each(function (_dataCol) {\n var currentCol = CellUtils.getInt(event.target(), 'left');\n set$1(event.target(), 'left', currentCol + event.xDelta() + 'px');\n });\n });\n var getDelta = function (target, dir) {\n var newX = CellUtils.getInt(target, dir);\n var oldX = parseInt(get$1(target, 'data-initial-' + dir), 10);\n return newX - oldX;\n };\n resizing.events.stop.bind(function () {\n mutation.get().each(function (target) {\n hoverTable.each(function (table) {\n getResizer(target, 'data-row').each(function (row) {\n var delta = getDelta(target, 'top');\n remove(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(function (column) {\n var delta = getDelta(target, 'left');\n remove(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n Bars.refresh(wire, table, hdirection, direction);\n });\n });\n });\n var handler = function (target, dir) {\n events.trigger.startAdjust();\n mutation.assign(target);\n set(target, 'data-initial-' + dir, parseInt(get$2(target, dir), 10));\n add$2(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.parent());\n };\n var mousedown = bind$2(wire.parent(), 'mousedown', function (event) {\n if (Bars.isRowBar(event.target())) {\n handler(event.target(), 'top');\n }\n if (Bars.isColBar(event.target())) {\n handler(event.target(), 'left');\n }\n });\n var isRoot = function (e) {\n return eq(e, wire.view());\n };\n var findClosestEditableTable = function (target) {\n return closest$1(target, 'table', isRoot).filter(function (table) {\n return findClosestContentEditable(table, isRoot).exists(isContentEditableTrue);\n });\n };\n var mouseover = bind$2(wire.view(), 'mouseover', function (event) {\n findClosestEditableTable(event.target()).fold(function () {\n if (inBody(event.target())) {\n Bars.destroy(wire);\n }\n }, function (table) {\n hoverTable = Option.some(table);\n Bars.refresh(wire, table, hdirection, direction);\n });\n });\n var destroy = function () {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n Bars.destroy(wire);\n };\n var refresh = function (tbl) {\n Bars.refresh(wire, tbl, hdirection, direction);\n };\n var events = Events.create({\n adjustHeight: Event([\n 'table',\n 'delta',\n 'row'\n ]),\n adjustWidth: Event([\n 'table',\n 'delta',\n 'column'\n ]),\n startAdjust: Event([])\n });\n return {\n destroy: destroy,\n refresh: refresh,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(Bars.hide, wire),\n showBars: curry(Bars.show, wire),\n events: events.registry\n };\n };\n\n var create$2 = function (wire, vdirection) {\n var hdirection = BarPositions.height;\n var manager = BarManager(wire, vdirection, hdirection);\n var events = Events.create({\n beforeResize: Event(['table']),\n afterResize: Event(['table']),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(function (event) {\n events.trigger.beforeResize(event.table());\n var delta = hdirection.delta(event.delta(), event.table());\n Adjustments.adjustHeight(event.table(), delta, event.row(), hdirection);\n events.trigger.afterResize(event.table());\n });\n manager.events.startAdjust.bind(function (event) {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(function (event) {\n events.trigger.beforeResize(event.table());\n var delta = vdirection.delta(event.delta(), event.table());\n Adjustments.adjustWidth(event.table(), delta, event.column(), vdirection);\n events.trigger.afterResize(event.table());\n });\n return {\n on: manager.on,\n off: manager.off,\n hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n var TableResize = { create: create$2 };\n\n var createContainer = function () {\n var container = Element.fromTag('div');\n setAll$1(container, {\n position: 'static',\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n append(body(), container);\n return container;\n };\n var get$9 = function (editor, container) {\n return editor.inline ? ResizeWire.body(getBody$1(editor), createContainer()) : ResizeWire.only(Element.fromDom(editor.getDoc()));\n };\n var remove$6 = function (editor, wire) {\n if (editor.inline) {\n remove$2(wire.parent());\n }\n };\n var TableWire = {\n get: get$9,\n remove: remove$6\n };\n\n var calculatePercentageWidth = function (element, parent) {\n return getPixelWidth$1(element.dom()) / getPixelWidth$1(parent.dom()) * 100 + '%';\n };\n var enforcePercentage = function (rawTable) {\n var table = Element.fromDom(rawTable);\n parent(table).map(function (parent) {\n return calculatePercentageWidth(table, parent);\n }).each(function (tablePercentage) {\n set$1(table, 'width', tablePercentage);\n each(descendants$1(table, 'tr'), function (tr) {\n each(children(tr), function (td) {\n set$1(td, 'width', calculatePercentageWidth(td, tr));\n });\n });\n });\n };\n var enforcePixels = function (table) {\n set$1(Element.fromDom(table), 'width', getPixelWidth$1(table).toString() + 'px');\n };\n\n var getResizeHandler = function (editor) {\n var selectionRng = Option.none();\n var resize = Option.none();\n var wire = Option.none();\n var percentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var startW;\n var startRawW;\n var isTable = function (elm) {\n return elm.nodeName === 'TABLE';\n };\n var getRawWidth = function (elm) {\n var raw = editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n return Option.from(raw).filter(function (s) {\n return s.length > 0;\n });\n };\n var lazyResize = function () {\n return resize;\n };\n var lazyWire = function () {\n return wire.getOr(ResizeWire.only(Element.fromDom(editor.getBody())));\n };\n var destroy = function () {\n resize.each(function (sz) {\n sz.destroy();\n });\n wire.each(function (w) {\n TableWire.remove(editor, w);\n });\n };\n editor.on('init', function () {\n var direction = TableDirection(Direction.directionAt);\n var rawWire = TableWire.get(editor);\n wire = Option.some(rawWire);\n if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {\n var sz = TableResize.create(rawWire, direction);\n sz.on();\n sz.events.startDrag.bind(function (event) {\n selectionRng = Option.some(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(function (event) {\n var rawTable = event.table().dom();\n fireObjectResizeStart(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));\n });\n sz.events.afterResize.bind(function (event) {\n var table = event.table();\n var rawTable = table.dom();\n removeDataStyle(table);\n selectionRng.each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));\n editor.undoManager.add();\n });\n resize = Option.some(sz);\n }\n });\n editor.on('ObjectResizeStart', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var tableHasPercentage = getRawWidth(targetElm).map(function (w) {\n return percentageBasedSizeRegex.test(w);\n }).getOr(false);\n if (tableHasPercentage && isPixelsForced(editor)) {\n enforcePixels(targetElm);\n } else if (!tableHasPercentage && isPercentagesForced(editor)) {\n enforcePercentage(targetElm);\n }\n startW = e.width;\n startRawW = getRawWidth(targetElm).getOr('');\n }\n });\n editor.on('ObjectResized', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var table = targetElm;\n if (percentageBasedSizeRegex.test(startRawW)) {\n var percentW = parseFloat(percentageBasedSizeRegex.exec(startRawW)[1]);\n var targetPercentW = e.width * percentW / startW;\n editor.dom.setStyle(table, 'width', targetPercentW + '%');\n } else {\n var newCellSizes_1 = [];\n global$1.each(table.rows, function (row) {\n global$1.each(row.cells, function (cell) {\n var width = editor.dom.getStyle(cell, 'width', true);\n newCellSizes_1.push({\n cell: cell,\n width: width\n });\n });\n });\n global$1.each(newCellSizes_1, function (newCellSize) {\n editor.dom.setStyle(newCellSize.cell, 'width', newCellSize.width);\n editor.dom.setAttrib(newCellSize.cell, 'width', null);\n });\n }\n }\n });\n editor.on('SwitchMode', function () {\n lazyResize().each(function (resize) {\n if (editor.mode.isReadOnly()) {\n resize.hideBars();\n } else {\n resize.showBars();\n }\n });\n });\n return {\n lazyResize: lazyResize,\n lazyWire: lazyWire,\n destroy: destroy\n };\n };\n\n var adt$1 = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n var none$1 = function (current) {\n if (current === void 0) {\n current = undefined;\n }\n return adt$1.none(current);\n };\n var CellLocation = __assign(__assign({}, adt$1), { none: none$1 });\n\n var detect$4 = function (current, isRoot) {\n return TableLookup.table(current, isRoot).bind(function (table) {\n var all = TableLookup.cells(table);\n var index = findIndex(all, function (x) {\n return eq(current, x);\n });\n return index.map(function (ind) {\n return {\n index: constant(ind),\n all: constant(all)\n };\n });\n });\n };\n var next = function (current, isRoot) {\n var detection = detect$4(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none(current);\n }, function (info) {\n return info.index() + 1 < info.all().length ? CellLocation.middle(current, info.all()[info.index() + 1]) : CellLocation.last(current);\n });\n };\n var prev = function (current, isRoot) {\n var detection = detect$4(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none();\n }, function (info) {\n return info.index() - 1 >= 0 ? CellLocation.middle(current, info.all()[info.index() - 1]) : CellLocation.first(current);\n });\n };\n var CellNavigation = {\n next: next,\n prev: prev\n };\n\n var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\n var SimRange = { create: create$3 };\n\n var adt$2 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata$1 = 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$2 = adt$2.before;\n var on = adt$2.on;\n var after$2 = adt$2.after;\n var Situ = {\n before: before$2,\n on: on,\n after: after$2,\n cata: cata$1,\n getStart: getStart\n };\n\n var adt$3 = 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$3.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$3.domRange;\n var relative = adt$3.relative;\n var exact = adt$3.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range$2 = SimRange.create;\n var Selection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range$2\n };\n\n var selectNodeContents = function (win, element) {\n var rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n var selectNodeContentsUsing = function (rng, element) {\n rng.selectNodeContents(element.dom());\n };\n var setStart = function (rng, situ) {\n situ.fold(function (e) {\n rng.setStartBefore(e.dom());\n }, function (e, o) {\n rng.setStart(e.dom(), o);\n }, function (e) {\n rng.setStartAfter(e.dom());\n });\n };\n var setFinish = function (rng, situ) {\n situ.fold(function (e) {\n rng.setEndBefore(e.dom());\n }, function (e, o) {\n rng.setEnd(e.dom(), o);\n }, function (e) {\n rng.setEndAfter(e.dom());\n });\n };\n var relativeToNative = function (win, startSitu, finishSitu) {\n var range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n var exactToNative = function (win, start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var toRect = function (rect) {\n return {\n left: constant(rect.left),\n top: constant(rect.top),\n right: constant(rect.right),\n bottom: constant(rect.bottom),\n width: constant(rect.width),\n height: constant(rect.height)\n };\n };\n var getFirstRect = function (rng) {\n var rects = rng.getClientRects();\n var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();\n };\n\n var adt$4 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var fromRange = function (win, type, range) {\n return type(Element.fromDom(range.startContainer), range.startOffset, Element.fromDom(range.endContainer), range.endOffset);\n };\n var getRanges = function (win, selection) {\n return selection.match({\n domRange: function (rng) {\n return {\n ltr: constant(rng),\n rtl: Option.none\n };\n },\n relative: function (startSitu, finishSitu) {\n return {\n ltr: cached(function () {\n return relativeToNative(win, startSitu, finishSitu);\n }),\n rtl: cached(function () {\n return Option.some(relativeToNative(win, finishSitu, startSitu));\n })\n };\n },\n exact: function (start, soffset, finish, foffset) {\n return {\n ltr: cached(function () {\n return exactToNative(win, start, soffset, finish, foffset);\n }),\n rtl: cached(function () {\n return Option.some(exactToNative(win, finish, foffset, start, soffset));\n })\n };\n }\n });\n };\n var doDiagnose = function (win, ranges) {\n var rng = ranges.ltr();\n if (rng.collapsed) {\n var reversed = ranges.rtl().filter(function (rev) {\n return rev.collapsed === false;\n });\n return reversed.map(function (rev) {\n return adt$4.rtl(Element.fromDom(rev.endContainer), rev.endOffset, Element.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$4.ltr, rng);\n });\n } else {\n return fromRange(win, adt$4.ltr, rng);\n }\n };\n var diagnose = function (win, selection) {\n var ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n var asLtrRange = function (win, selection) {\n var diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n },\n rtl: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(finish.dom(), foffset);\n rng.setEnd(start.dom(), soffset);\n return rng;\n }\n });\n };\n var ltr$2 = adt$4.ltr;\n var rtl$2 = adt$4.rtl;\n\n var searchForPoint = function (rectForOffset, x, y, maxX, length) {\n if (length === 0) {\n return 0;\n } else if (x === maxX) {\n return length - 1;\n }\n var xDelta = maxX;\n for (var i = 1; i < length; i++) {\n var rect = rectForOffset(i);\n var curDeltaX = Math.abs(x - rect.left);\n if (y <= rect.bottom) {\n if (y < rect.top || curDeltaX > xDelta) {\n return i - 1;\n } else {\n xDelta = curDeltaX;\n }\n }\n }\n return 0;\n };\n var inRect = function (rect, x, y) {\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n };\n\n var locateOffset = function (doc, textnode, x, y, rect) {\n var rangeForOffset = function (o) {\n var r = doc.dom().createRange();\n r.setStart(textnode.dom(), o);\n r.collapse(true);\n return r;\n };\n var rectForOffset = function (o) {\n var r = rangeForOffset(o);\n return r.getBoundingClientRect();\n };\n var length = get$3(textnode).length;\n var offset = searchForPoint(rectForOffset, x, y, rect.right, length);\n return rangeForOffset(offset);\n };\n var locate = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rects = r.getClientRects();\n var foundRect = findMap(rects, function (rect) {\n return inRect(rect, x, y) ? Option.some(rect) : Option.none();\n });\n return foundRect.map(function (rect) {\n return locateOffset(doc, node, x, y, rect);\n });\n };\n\n var searchInChildren = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n var nodes = children(node);\n return findMap(nodes, function (n) {\n r.selectNode(n.dom());\n return inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Option.none();\n });\n };\n var locateNode = function (doc, node, x, y) {\n return isText(node) ? locate(doc, node, x, y) : searchInChildren(doc, node, x, y);\n };\n var locate$1 = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locateNode(doc, node, boundedX, boundedY);\n };\n\n var COLLAPSE_TO_LEFT = true;\n var COLLAPSE_TO_RIGHT = false;\n var getCollapseDirection = function (rect, x) {\n return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT;\n };\n var createCollapsedNode = function (doc, target, collapseDirection) {\n var r = doc.dom().createRange();\n r.selectNode(target.dom());\n r.collapse(collapseDirection);\n return r;\n };\n var locateInElement = function (doc, node, x) {\n var cursorRange = doc.dom().createRange();\n cursorRange.selectNode(node.dom());\n var rect = cursorRange.getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n var f = collapseDirection === COLLAPSE_TO_LEFT ? first : last$1;\n return f(node).map(function (target) {\n return createCollapsedNode(doc, target, collapseDirection);\n });\n };\n var locateInEmpty = function (doc, node, x) {\n var rect = node.dom().getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n return Option.some(createCollapsedNode(doc, node, collapseDirection));\n };\n var search = function (doc, node, x) {\n var f = children(node).length === 0 ? locateInEmpty : locateInElement;\n return f(doc, node, x);\n };\n\n var caretPositionFromPoint = function (doc, x, y) {\n return Option.from(doc.dom().caretPositionFromPoint(x, y)).bind(function (pos) {\n if (pos.offsetNode === null) {\n return Option.none();\n }\n var r = doc.dom().createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Option.some(r);\n });\n };\n var caretRangeFromPoint = function (doc, x, y) {\n return Option.from(doc.dom().caretRangeFromPoint(x, y));\n };\n var searchTextNodes = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locate$1(doc, node, boundedX, boundedY);\n };\n var searchFromPoint = function (doc, x, y) {\n return Element.fromPoint(doc, x, y).bind(function (elem) {\n var fallback = function () {\n return search(doc, elem, x);\n };\n return children(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback);\n });\n };\n var availableSearch = document.caretPositionFromPoint ? caretPositionFromPoint : document.caretRangeFromPoint ? caretRangeFromPoint : searchFromPoint;\n var fromPoint$1 = function (win, x, y) {\n var doc = Element.fromDom(win.document);\n return availableSearch(doc, x, y).map(function (rng) {\n return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\n });\n };\n\n var beforeSpecial = function (element, offset) {\n var name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n var preprocessRelative = function (startSitu, finishSitu) {\n var start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n var finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return Selection.relative(start, finish);\n };\n var preprocessExact = function (start, soffset, finish, foffset) {\n var startSitu = beforeSpecial(start, soffset);\n var finishSitu = beforeSpecial(finish, foffset);\n return Selection.relative(startSitu, finishSitu);\n };\n var preprocess = function (selection) {\n return selection.match({\n domRange: function (rng) {\n var start = Element.fromDom(rng.startContainer);\n var finish = Element.fromDom(rng.endContainer);\n return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n },\n relative: preprocessRelative,\n exact: preprocessExact\n });\n };\n\n var makeRange = function (start, soffset, finish, foffset) {\n var doc = owner(start);\n var rng = doc.dom().createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var after$3 = function (start, soffset, finish, foffset) {\n var r = makeRange(start, soffset, finish, foffset);\n var same = eq(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n var doSetNativeRange = function (win, rng) {\n Option.from(win.getSelection()).each(function (selection) {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n var doSetRange = function (win, start, soffset, finish, foffset) {\n var rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n var setLegacyRtlRange = function (win, selection, start, soffset, finish, foffset) {\n selection.collapse(start.dom(), soffset);\n selection.extend(finish.dom(), foffset);\n };\n var setRangeFromRelative = function (win, relative) {\n return diagnose(win, relative).match({\n ltr: function (start, soffset, finish, foffset) {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: function (start, soffset, finish, foffset) {\n var selection = win.getSelection();\n if (selection.setBaseAndExtent) {\n selection.setBaseAndExtent(start.dom(), soffset, finish.dom(), foffset);\n } else if (selection.extend) {\n try {\n setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n } catch (e) {\n doSetRange(win, finish, foffset, start, soffset);\n }\n } else {\n doSetRange(win, finish, foffset, start, soffset);\n }\n }\n });\n };\n var setExact = function (win, start, soffset, finish, foffset) {\n var relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n var setRelative = function (win, startSitu, finishSitu) {\n var relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n var toNative = function (selection) {\n var win = Selection.getWin(selection).dom();\n var getDomRange = function (start, soffset, finish, foffset) {\n return exactToNative(win, start, soffset, finish, foffset);\n };\n var filtered = preprocess(selection);\n return diagnose(win, filtered).match({\n ltr: getDomRange,\n rtl: getDomRange\n });\n };\n var readRange = function (selection) {\n if (selection.rangeCount > 0) {\n var firstRng = selection.getRangeAt(0);\n var lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Option.some(SimRange.create(Element.fromDom(firstRng.startContainer), firstRng.startOffset, Element.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Option.none();\n }\n };\n var doGetExact = function (selection) {\n var anchor = Element.fromDom(selection.anchorNode);\n var focus = Element.fromDom(selection.focusNode);\n return after$3(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Option.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n };\n var setToElement = function (win, element) {\n var rng = selectNodeContents(win, element);\n doSetNativeRange(win, rng);\n };\n var getExact = function (win) {\n return Option.from(win.getSelection()).filter(function (sel) {\n return sel.rangeCount > 0;\n }).bind(doGetExact);\n };\n var get$a = function (win) {\n return getExact(win).map(function (range) {\n return Selection.exact(range.start(), range.soffset(), range.finish(), range.foffset());\n });\n };\n var getFirstRect$1 = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getFirstRect(rng);\n };\n var getAtPoint = function (win, x, y) {\n return fromPoint$1(win, x, y);\n };\n var clear = function (win) {\n var selection = win.getSelection();\n selection.removeAllRanges();\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var forward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, CellNavigation.next(cell), lazyWire);\n };\n var backward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, CellNavigation.prev(cell), lazyWire);\n };\n var getCellFirstCursorPosition = function (editor, cell) {\n var selection = Selection.exact(cell, 0, cell, 0);\n return toNative(selection);\n };\n var getNewRowCursorPosition = function (editor, table) {\n var rows = descendants$1(table, 'tr');\n return last(rows).bind(function (last) {\n return descendant$1(last, 'td,th').map(function (first) {\n return getCellFirstCursorPosition(editor, first);\n });\n });\n };\n var go = function (editor, isRoot, cell, actions, lazyWire) {\n return cell.fold(Option.none, Option.none, function (current, next) {\n return first(next).map(function (cell) {\n return getCellFirstCursorPosition(editor, cell);\n });\n }, function (current) {\n return TableLookup.table(current, isRoot).bind(function (table) {\n var targets = TableTargets.noMenu(current);\n editor.undoManager.transact(function () {\n actions.insertRowsAfter(table, targets);\n });\n return getNewRowCursorPosition(editor, table);\n });\n });\n };\n var rootElements = [\n 'table',\n 'li',\n 'dl'\n ];\n var handle$1 = function (event, editor, actions, lazyWire) {\n if (event.keyCode === global$3.TAB) {\n var body_1 = getBody$1(editor);\n var isRoot_1 = function (element) {\n var name$1 = name(element);\n return eq(element, body_1) || contains(rootElements, name$1);\n };\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var start = Element.fromDom(rng.startContainer);\n TableLookup.cell(start, isRoot_1).each(function (cell) {\n event.preventDefault();\n var navigation = event.shiftKey ? backward : forward;\n var rng = navigation(editor, isRoot_1, cell, actions, lazyWire);\n rng.each(function (range) {\n editor.selection.setRng(range);\n });\n });\n }\n }\n };\n var TabContext = { handle: handle$1 };\n\n var create$4 = Immutable('selection', 'kill');\n var Response = { create: create$4 };\n\n var create$5 = function (start, soffset, finish, foffset) {\n return {\n start: constant(Situ.on(start, soffset)),\n finish: constant(Situ.on(finish, foffset))\n };\n };\n var Situs = { create: create$5 };\n\n var convertToRange = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\n };\n var makeSitus = Situs.create;\n var Util = {\n convertToRange: convertToRange,\n makeSitus: makeSitus\n };\n\n var sync = function (container, isRoot, start, soffset, finish, foffset, selectRange) {\n if (!(eq(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(function (s) {\n return closest$1(finish, 'td,th', isRoot).bind(function (f) {\n return detect$5(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Option.none();\n }\n };\n var detect$5 = function (container, isRoot, start, finish, selectRange) {\n if (!eq(start, finish)) {\n return CellSelection.identify(start, finish, isRoot).bind(function (cellSel) {\n var boxes = cellSel.boxes().getOr([]);\n if (boxes.length > 0) {\n selectRange(container, boxes, cellSel.start(), cellSel.finish());\n return Option.some(Response.create(Option.some(Util.makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Option.none();\n }\n });\n } else {\n return Option.none();\n }\n };\n var update = function (rows, columns, container, selected, annotations) {\n var updateSelection = function (newSels) {\n annotations.clearBeforeUpdate(container);\n annotations.selectRange(container, newSels.boxes(), newSels.start(), newSels.finish());\n return newSels.boxes();\n };\n return CellSelection.shiftSelection(selected, rows, columns, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(updateSelection);\n };\n var KeySelection = {\n sync: sync,\n detect: detect$5,\n update: update\n };\n\n var traverse = Immutable('item', 'mode');\n var backtrack = function (universe, item, _direction, transition) {\n if (transition === void 0) {\n transition = sidestep;\n }\n return universe.property().parent(item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var sidestep = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n return direction.sibling(universe, item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var advance = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n var children = universe.property().children(item);\n var result = direction.first(children);\n return result.map(function (r) {\n return traverse(r, transition);\n });\n };\n var successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: Option.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Option.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Option.some(sidestep)\n }\n ];\n var go$1 = function (universe, item, mode, direction, rules) {\n if (rules === void 0) {\n rules = successors;\n }\n var ruleOpt = find(rules, function (succ) {\n return succ.current === mode;\n });\n return ruleOpt.bind(function (rule) {\n return rule.current(universe, item, direction, rule.next).orThunk(function () {\n return rule.fallback.bind(function (fb) {\n return go$1(universe, item, fb, direction);\n });\n });\n });\n };\n\n var left = function () {\n var sibling = function (universe, item) {\n return universe.query().prevSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Option.some(children[children.length - 1]) : Option.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var right = function () {\n var sibling = function (universe, item) {\n return universe.query().nextSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Option.some(children[0]) : Option.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var Walkers = {\n left: left,\n right: right\n };\n\n var hone = function (universe, item, predicate, mode, direction, isRoot) {\n var next = go$1(universe, item, mode, direction);\n return next.bind(function (n) {\n if (isRoot(n.item())) {\n return Option.none();\n } else {\n return predicate(n.item()) ? Option.some(n.item()) : hone(universe, n.item(), predicate, n.mode(), direction, isRoot);\n }\n });\n };\n var left$1 = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n var right$1 = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n };\n\n var isLeaf = function (universe) {\n return function (element) {\n return universe.property().children(element).length === 0;\n };\n };\n var before$3 = function (universe, item, isRoot) {\n return seekLeft(universe, item, isLeaf(universe), isRoot);\n };\n var after$4 = function (universe, item, isRoot) {\n return seekRight(universe, item, isLeaf(universe), isRoot);\n };\n var seekLeft = left$1;\n var seekRight = right$1;\n\n var universe$3 = DomUniverse();\n var before$4 = function (element, isRoot) {\n return before$3(universe$3, element, isRoot);\n };\n var after$5 = function (element, isRoot) {\n return after$4(universe$3, element, isRoot);\n };\n var seekLeft$1 = function (element, predicate, isRoot) {\n return seekLeft(universe$3, element, predicate, isRoot);\n };\n var seekRight$1 = function (element, predicate, isRoot) {\n return seekRight(universe$3, element, predicate, isRoot);\n };\n\n var ancestor$2 = function (scope, predicate, isRoot) {\n return ancestor(scope, predicate, isRoot).isSome();\n };\n\n var adt$5 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n var isOverlapping = function (bridge, before, after) {\n var beforeBounds = bridge.getRect(before);\n var afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n var isRow = function (elem) {\n return closest$1(elem, 'tr');\n };\n var verify = function (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) {\n return closest$1(after, 'td,th', isRoot).bind(function (afterCell) {\n return closest$1(before, 'td,th', isRoot).map(function (beforeCell) {\n if (!eq(afterCell, beforeCell)) {\n return DomParent.sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(function () {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$5.success() : failure(beforeCell);\n }, function (_sharedRow) {\n return failure(beforeCell);\n });\n } else {\n return eq(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$5.none('in same cell');\n }\n });\n }).getOr(adt$5.none('default'));\n };\n var cata$2 = function (subject, onNone, onSuccess, onFailedUp, onFailedDown) {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n var BeforeAfter = __assign(__assign({}, adt$5), {\n verify: verify,\n cata: cata$2\n });\n\n var inAncestor = Immutable('ancestor', 'descendants', 'element', 'index');\n var inParent = Immutable('parent', 'children', 'element', 'index');\n var indexInParent = function (element) {\n return parent(element).bind(function (parent) {\n var children$1 = children(parent);\n return indexOf(children$1, element).map(function (index) {\n return inParent(parent, children$1, element, index);\n });\n });\n };\n var indexOf = function (elements, element) {\n return findIndex(elements, curry(eq, element));\n };\n\n var isBr = function (elem) {\n return name(elem) === 'br';\n };\n var gatherer = function (cand, gather, isRoot) {\n return gather(cand, isRoot).bind(function (target) {\n return isText(target) && get$3(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Option.some(target);\n });\n };\n var handleBr = function (isRoot, element, direction) {\n return direction.traverse(element).orThunk(function () {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n var findBr = function (element, offset) {\n return child(element, offset).filter(isBr).orThunk(function () {\n return child(element, offset - 1).filter(isBr);\n });\n };\n var handleParent = function (isRoot, element, offset, direction) {\n return findBr(element, offset).bind(function (br) {\n return direction.traverse(br).fold(function () {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, function (adjacent) {\n return indexInParent(adjacent).map(function (info) {\n return Situ.on(info.parent(), info.index());\n });\n });\n });\n };\n var tryBr = function (isRoot, element, offset, direction) {\n var target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(function (tgt) {\n return {\n start: constant(tgt),\n finish: constant(tgt)\n };\n });\n };\n var process = function (analysis) {\n return BeforeAfter.cata(analysis, function (message) {\n return Option.none();\n }, function () {\n return Option.none();\n }, function (cell) {\n return Option.some(point(cell, 0));\n }, function (cell) {\n return Option.some(point(cell, getEnd(cell)));\n });\n };\n var BrTags = {\n tryBr: tryBr,\n process: process\n };\n\n var nu$3 = MixedBag([\n 'left',\n 'top',\n 'right',\n 'bottom'\n ], []);\n var moveDown = function (caret, amount) {\n return nu$3({\n left: caret.left(),\n top: caret.top() + amount,\n right: caret.right(),\n bottom: caret.bottom() + amount\n });\n };\n var moveUp = function (caret, amount) {\n return nu$3({\n left: caret.left(),\n top: caret.top() - amount,\n right: caret.right(),\n bottom: caret.bottom() - amount\n });\n };\n var moveBottomTo = function (caret, bottom) {\n var height = caret.bottom() - caret.top();\n return nu$3({\n left: caret.left(),\n top: bottom - height,\n right: caret.right(),\n bottom: bottom\n });\n };\n var moveTopTo = function (caret, top) {\n var height = caret.bottom() - caret.top();\n return nu$3({\n left: caret.left(),\n top: top,\n right: caret.right(),\n bottom: top + height\n });\n };\n var translate = function (caret, xDelta, yDelta) {\n return nu$3({\n left: caret.left() + xDelta,\n top: caret.top() + yDelta,\n right: caret.right() + xDelta,\n bottom: caret.bottom() + yDelta\n });\n };\n var getTop$1 = function (caret) {\n return caret.top();\n };\n var getBottom = function (caret) {\n return caret.bottom();\n };\n var toString = function (caret) {\n return '(' + caret.left() + ', ' + caret.top() + ') -> (' + caret.right() + ', ' + caret.bottom() + ')';\n };\n var Carets = {\n nu: nu$3,\n moveUp: moveUp,\n moveDown: moveDown,\n moveBottomTo: moveBottomTo,\n moveTopTo: moveTopTo,\n getTop: getTop$1,\n getBottom: getBottom,\n translate: translate,\n toString: toString\n };\n\n var getPartialBox = function (bridge, element, offset) {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Option.none();\n };\n var toCaret = function (rect) {\n return Carets.nu({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n });\n };\n var getElemBox = function (bridge, element) {\n return Option.some(bridge.getRect(element));\n };\n var getBoxAt = function (bridge, element, offset) {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return getPartialBox(bridge, element, offset).map(toCaret);\n } else {\n return Option.none();\n }\n };\n var getEntireBox = function (bridge, element) {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n } else {\n return Option.none();\n }\n };\n var Rectangles = {\n getBoxAt: getBoxAt,\n getEntireBox: getEntireBox\n };\n\n var JUMP_SIZE = 5;\n var NUM_RETRIES = 100;\n var adt$6 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n var isOutside = function (caret, box) {\n return caret.left() < box.left() || Math.abs(box.right() - caret.left()) < 1 || caret.left() > box.right();\n };\n var inOutsideBlock = function (bridge, element, caret) {\n return closest(element, DomStructure.isBlock).fold(constant(false), function (cell) {\n return Rectangles.getEntireBox(bridge, cell).exists(function (box) {\n return isOutside(caret, box);\n });\n });\n };\n var adjustDown = function (bridge, element, guessBox, original, caret) {\n var lowerCaret = Carets.moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom() - original.bottom()) < 1) {\n return adt$6.retry(lowerCaret);\n } else if (guessBox.top() > caret.bottom()) {\n return adt$6.retry(lowerCaret);\n } else if (guessBox.top() === caret.bottom()) {\n return adt$6.retry(Carets.moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(lowerCaret, JUMP_SIZE, 0)) : adt$6.none();\n }\n };\n var adjustUp = function (bridge, element, guessBox, original, caret) {\n var higherCaret = Carets.moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top() - original.top()) < 1) {\n return adt$6.retry(higherCaret);\n } else if (guessBox.bottom() < caret.top()) {\n return adt$6.retry(higherCaret);\n } else if (guessBox.bottom() === caret.top()) {\n return adt$6.retry(Carets.moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(higherCaret, JUMP_SIZE, 0)) : adt$6.none();\n }\n };\n var upMovement = {\n point: Carets.getTop,\n adjuster: adjustUp,\n move: Carets.moveUp,\n gather: before$4\n };\n var downMovement = {\n point: Carets.getBottom,\n adjuster: adjustDown,\n move: Carets.moveDown,\n gather: after$5\n };\n var isAtTable = function (bridge, x, y) {\n return bridge.elementFromPoint(x, y).filter(function (elm) {\n return name(elm) === 'table';\n }).isSome();\n };\n var adjustForTable = function (bridge, movement, original, caret, numRetries) {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n var adjustTil = function (bridge, movement, original, caret, numRetries) {\n if (numRetries === 0) {\n return Option.some(caret);\n }\n if (isAtTable(bridge, caret.left(), movement.point(caret))) {\n return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n }\n return bridge.situsFromPoint(caret.left(), movement.point(caret)).bind(function (guess) {\n return guess.start().fold(Option.none, function (element) {\n return Rectangles.getEntireBox(bridge, element).bind(function (guessBox) {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Option.none, function (newCaret) {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(function () {\n return Option.some(caret);\n });\n }, Option.none);\n });\n };\n var ieTryDown = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left(), caret.bottom() + JUMP_SIZE);\n };\n var ieTryUp = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left(), caret.top() - JUMP_SIZE);\n };\n var checkScroll = function (movement, adjusted, bridge) {\n if (movement.point(adjusted) > bridge.getInnerHeight()) {\n return Option.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Option.some(-movement.point(adjusted));\n } else {\n return Option.none();\n }\n };\n var retry = function (movement, bridge, caret) {\n var moved = movement.move(caret, JUMP_SIZE);\n var adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(function () {\n return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted));\n }, function (delta) {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted) - delta);\n });\n };\n var Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n ieTryUp: ieTryUp,\n ieTryDown: ieTryDown,\n getJumpSize: constant(JUMP_SIZE)\n };\n\n var MAX_RETRIES = 20;\n var platform$2 = detect$3();\n var findSpot = function (bridge, isRoot, direction) {\n return bridge.getSelection().bind(function (sel) {\n return BrTags.tryBr(isRoot, sel.finish(), sel.foffset(), direction).fold(function () {\n return Option.some(point(sel.finish(), sel.foffset()));\n }, function (brNeighbour) {\n var range = bridge.fromSitus(brNeighbour);\n var analysis = BeforeAfter.verify(bridge, sel.finish(), sel.foffset(), range.finish(), range.foffset(), direction.failure, isRoot);\n return BrTags.process(analysis);\n });\n });\n };\n var scan$1 = function (bridge, isRoot, element, offset, direction, numRetries) {\n if (numRetries === 0) {\n return Option.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(function (situs) {\n var range = bridge.fromSitus(situs);\n var analysis = BeforeAfter.verify(bridge, element, offset, range.finish(), range.foffset(), direction.failure, isRoot);\n return BeforeAfter.cata(analysis, function () {\n return Option.none();\n }, function () {\n return Option.some(situs);\n }, function (cell) {\n if (eq(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, Carets.moveUp, direction);\n } else {\n return scan$1(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, function (cell) {\n if (eq(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, Carets.moveDown, direction);\n } else {\n return scan$1(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n var tryAgain = function (bridge, element, offset, move, direction) {\n return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n var tryAt = function (bridge, direction, box) {\n if (platform$2.browser.isChrome() || platform$2.browser.isSafari() || platform$2.browser.isFirefox() || platform$2.browser.isEdge()) {\n return direction.otherRetry(bridge, box);\n } else if (platform$2.browser.isIE()) {\n return direction.ieRetry(bridge, box);\n } else {\n return Option.none();\n }\n };\n var tryCursor = function (bridge, isRoot, element, offset, direction) {\n return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, box);\n });\n };\n var handle$2 = function (bridge, isRoot, direction) {\n return findSpot(bridge, isRoot, direction).bind(function (spot) {\n return scan$1(bridge, isRoot, spot.element(), spot.offset(), direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n var TableKeys = { handle: handle$2 };\n\n var detection = detect$3();\n var inSameTable = function (elem, table) {\n return ancestor$2(elem, function (e) {\n return parent(e).exists(function (p) {\n return eq(p, table);\n });\n });\n };\n var simulate = function (bridge, isRoot, direction, initial, anchor) {\n return closest$1(initial, 'td,th', isRoot).bind(function (start) {\n return closest$1(start, 'table', isRoot).bind(function (table) {\n if (!inSameTable(anchor, table)) {\n return Option.none();\n }\n return TableKeys.handle(bridge, isRoot, direction).bind(function (range) {\n return closest$1(range.finish(), 'td,th', isRoot).map(function (finish) {\n return {\n start: constant(start),\n finish: constant(finish),\n range: constant(range)\n };\n });\n });\n });\n });\n };\n var navigate = function (bridge, isRoot, direction, initial, anchor, precheck) {\n if (detection.browser.isIE()) {\n return Option.none();\n } else {\n return precheck(initial, isRoot).orThunk(function () {\n return simulate(bridge, isRoot, direction, initial, anchor).map(function (info) {\n var range = info.range();\n return Response.create(Option.some(Util.makeSitus(range.start(), range.soffset(), range.finish(), range.foffset())), true);\n });\n });\n }\n };\n var firstUpCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants$1(table, 'tr');\n if (eq(startRow, rows[0])) {\n return seekLeft$1(table, function (element) {\n return last$1(element).isSome();\n }, isRoot).map(function (last) {\n var lastOffset = getEnd(last);\n return Response.create(Option.some(Util.makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Option.none();\n }\n });\n });\n };\n var lastDownCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants$1(table, 'tr');\n if (eq(startRow, rows[rows.length - 1])) {\n return seekRight$1(table, function (element) {\n return first(element).isSome();\n }, isRoot).map(function (first) {\n return Response.create(Option.some(Util.makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Option.none();\n }\n });\n });\n };\n var select = function (bridge, container, isRoot, direction, initial, anchor, selectRange) {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(function (info) {\n return KeySelection.detect(container, isRoot, info.start(), info.finish(), selectRange);\n });\n };\n var VerticalMovement = {\n navigate: navigate,\n select: select,\n firstUpCheck: firstUpCheck,\n lastDownCheck: lastDownCheck\n };\n\n var findCell = function (target, isRoot) {\n return closest$1(target, 'td,th', isRoot);\n };\n function MouseSelection (bridge, container, isRoot, annotations) {\n var cursor = Option.none();\n var clearState = function () {\n cursor = Option.none();\n };\n var mousedown = function (event) {\n annotations.clear(container);\n cursor = findCell(event.target(), isRoot);\n };\n var mouseover = function (event) {\n cursor.each(function (start) {\n annotations.clearBeforeUpdate(container);\n findCell(event.target(), isRoot).each(function (finish) {\n CellSelection.identify(start, finish, isRoot).each(function (cellSel) {\n var boxes = cellSel.boxes().getOr([]);\n if (boxes.length > 1 || boxes.length === 1 && !eq(start, finish)) {\n annotations.selectRange(container, boxes, cellSel.start(), cellSel.finish());\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n var mouseup = function (_event) {\n cursor.each(clearState);\n };\n return {\n mousedown: mousedown,\n mouseover: mouseover,\n mouseup: mouseup\n };\n }\n\n var down = {\n traverse: nextSibling,\n gather: after$5,\n relative: Situ.before,\n otherRetry: Retries.tryDown,\n ieRetry: Retries.ieTryDown,\n failure: BeforeAfter.failedDown\n };\n var up = {\n traverse: prevSibling,\n gather: before$4,\n relative: Situ.before,\n otherRetry: Retries.tryUp,\n ieRetry: Retries.ieTryUp,\n failure: BeforeAfter.failedUp\n };\n var KeyDirection = {\n down: down,\n up: up\n };\n\n var isKey = function (key) {\n return function (keycode) {\n return keycode === key;\n };\n };\n var isUp = isKey(38);\n var isDown = isKey(40);\n var isNavigation = function (keycode) {\n return keycode >= 37 && keycode <= 40;\n };\n var SelectionKeys = {\n ltr: {\n isBackward: isKey(37),\n isForward: isKey(39)\n },\n rtl: {\n isBackward: isKey(39),\n isForward: isKey(37)\n },\n isUp: isUp,\n isDown: isDown,\n isNavigation: isNavigation\n };\n\n var toRaw = function (sr) {\n return {\n left: sr.left(),\n top: sr.top(),\n right: sr.right(),\n bottom: sr.bottom(),\n width: sr.width(),\n height: sr.height()\n };\n };\n var Rect = { toRaw: toRaw };\n\n var isSafari = detect$3().browser.isSafari();\n var get$b = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return Position(x, y);\n };\n var by = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var win = doc.defaultView;\n win.scrollBy(x, y);\n };\n\n var WindowBridge = function (win) {\n var elementFromPoint = function (x, y) {\n return Element.fromPoint(Element.fromDom(win.document), x, y);\n };\n var getRect = function (element) {\n return element.dom().getBoundingClientRect();\n };\n var getRangedRect = function (start, soffset, finish, foffset) {\n var sel = Selection.exact(start, soffset, finish, foffset);\n return getFirstRect$1(win, sel).map(Rect.toRaw);\n };\n var getSelection = function () {\n return get$a(win).map(function (exactAdt) {\n return Util.convertToRange(win, exactAdt);\n });\n };\n var fromSitus = function (situs) {\n var relative = Selection.relative(situs.start(), situs.finish());\n return Util.convertToRange(win, relative);\n };\n var situsFromPoint = function (x, y) {\n return getAtPoint(win, x, y).map(function (exact) {\n return Situs.create(exact.start(), exact.soffset(), exact.finish(), exact.foffset());\n });\n };\n var clearSelection = function () {\n clear(win);\n };\n var collapseSelection = function (toStart) {\n if (toStart === void 0) {\n toStart = false;\n }\n get$a(win).each(function (sel) {\n return sel.fold(function (rng) {\n return rng.collapse(toStart);\n }, function (startSitu, finishSitu) {\n var situ = toStart ? startSitu : finishSitu;\n setRelative(win, situ, situ);\n }, function (start, soffset, finish, foffset) {\n var node = toStart ? start : finish;\n var offset = toStart ? soffset : foffset;\n setExact(win, node, offset, node, offset);\n });\n });\n };\n var selectContents = function (element) {\n setToElement(win, element);\n };\n var setSelection = function (sel) {\n setExact(win, sel.start(), sel.soffset(), sel.finish(), sel.foffset());\n };\n var setRelativeSelection = function (start, finish) {\n setRelative(win, start, finish);\n };\n var getInnerHeight = function () {\n return win.innerHeight;\n };\n var getScrollY = function () {\n var pos = get$b(Element.fromDom(win.document));\n return pos.top();\n };\n var scrollBy = function (x, y) {\n by(x, y, Element.fromDom(win.document));\n };\n return {\n elementFromPoint: elementFromPoint,\n getRect: getRect,\n getRangedRect: getRangedRect,\n getSelection: getSelection,\n fromSitus: fromSitus,\n situsFromPoint: situsFromPoint,\n clearSelection: clearSelection,\n collapseSelection: collapseSelection,\n setSelection: setSelection,\n setRelativeSelection: setRelativeSelection,\n selectContents: selectContents,\n getInnerHeight: getInnerHeight,\n getScrollY: getScrollY,\n scrollBy: scrollBy\n };\n };\n\n var rc = Immutable('rows', 'cols');\n var mouse = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n mousedown: handlers.mousedown,\n mouseover: handlers.mouseover,\n mouseup: handlers.mouseup\n };\n };\n var keyboard = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var clearToNavigate = function () {\n annotations.clear(container);\n return Option.none();\n };\n var keydown = function (event, start, soffset, finish, foffset, direction) {\n var realEvent = event.raw();\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n var handler = CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\n if (SelectionKeys.isDown(keycode) && shiftKey) {\n return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.down, finish, start, annotations.selectRange);\n } else if (SelectionKeys.isUp(keycode) && shiftKey) {\n return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.up, finish, start, annotations.selectRange);\n } else if (SelectionKeys.isDown(keycode)) {\n return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.down, finish, start, VerticalMovement.lastDownCheck);\n } else if (SelectionKeys.isUp(keycode)) {\n return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.up, finish, start, VerticalMovement.firstUpCheck);\n } else {\n return Option.none;\n }\n }, function (selected) {\n var update = function (attempts) {\n return function () {\n var navigation = findMap(attempts, function (delta) {\n return KeySelection.update(delta.rows(), delta.cols(), container, selected, annotations);\n });\n return navigation.fold(function () {\n return CellSelection.getEdges(container, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(function (edges) {\n var relative = SelectionKeys.isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first(), 0), relative(edges.table()));\n annotations.clear(container);\n return Response.create(Option.none(), true);\n });\n }, function (_) {\n return Option.some(Response.create(Option.none(), true));\n });\n };\n };\n if (SelectionKeys.isDown(keycode) && shiftKey) {\n return update([rc(+1, 0)]);\n } else if (SelectionKeys.isUp(keycode) && shiftKey) {\n return update([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (SelectionKeys.isNavigation(keycode) && shiftKey === false) {\n return clearToNavigate;\n } else {\n return Option.none;\n }\n });\n return handler();\n };\n var keyup = function (event, start, soffset, finish, foffset) {\n return CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\n var realEvent = event.raw();\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n if (shiftKey === false) {\n return Option.none();\n }\n if (SelectionKeys.isNavigation(keycode)) {\n return KeySelection.sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Option.none();\n }\n }, Option.none);\n };\n return {\n keydown: keydown,\n keyup: keyup\n };\n };\n var external = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n return function (start, finish) {\n annotations.clearBeforeUpdate(container);\n CellSelection.identify(start, finish, isRoot).each(function (cellSel) {\n var boxes = cellSel.boxes().getOr([]);\n annotations.selectRange(container, boxes, cellSel.start(), cellSel.finish());\n bridge.selectContents(finish);\n bridge.collapseSelection();\n });\n };\n };\n var InputHandlers = {\n mouse: mouse,\n keyboard: keyboard,\n external: external\n };\n\n var remove$7 = function (element, classes) {\n each(classes, function (x) {\n remove$5(element, x);\n });\n };\n\n var addClass = function (clazz) {\n return function (element) {\n add$2(element, clazz);\n };\n };\n var removeClasses = function (classes) {\n return function (element) {\n remove$7(element, classes);\n };\n };\n\n var byClass = function (ephemera) {\n var addSelectionClass = addClass(ephemera.selected());\n var removeSelectionClasses = removeClasses([\n ephemera.selected(),\n ephemera.lastSelected(),\n ephemera.firstSelected()\n ]);\n var clear = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector());\n each(sels, removeSelectionClasses);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionClass);\n add$2(start, ephemera.firstSelected());\n add$2(finish, ephemera.lastSelected());\n };\n return {\n clearBeforeUpdate: clear,\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var byAttr = function (ephemera, onSelection, onClear) {\n var removeSelectionAttributes = function (element) {\n remove(element, ephemera.selected());\n remove(element, ephemera.firstSelected());\n remove(element, ephemera.lastSelected());\n };\n var addSelectionAttribute = function (element) {\n set(element, ephemera.selected(), '1');\n };\n var clear = function (container) {\n clearBeforeUpdate(container);\n onClear();\n };\n var clearBeforeUpdate = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector());\n each(sels, removeSelectionAttributes);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionAttribute);\n set(start, ephemera.firstSelected(), '1');\n set(finish, ephemera.lastSelected(), '1');\n onSelection(cells, start, finish);\n };\n return {\n clearBeforeUpdate: clearBeforeUpdate,\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var SelectionAnnotation = {\n byClass: byClass,\n byAttr: byAttr\n };\n\n var getUpOrLeftCells = function (grid, selectedCells, generators) {\n var upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row() + 1);\n var upDetails = toDetailList(upGrid, generators);\n return bind(upDetails, function (detail) {\n var slicedCells = detail.cells().slice(0, selectedCells[selectedCells.length - 1].column() + 1);\n return map(slicedCells, function (cell) {\n return cell.element();\n });\n });\n };\n var getDownOrRightCells = function (grid, selectedCells, generators) {\n var downGrid = grid.slice(selectedCells[0].row() + selectedCells[0].rowspan() - 1, grid.length);\n var downDetails = toDetailList(downGrid, generators);\n return bind(downDetails, function (detail) {\n var slicedCells = detail.cells().slice(selectedCells[0].column() + selectedCells[0].colspan() - 1, +detail.cells().length);\n return map(slicedCells, function (cell) {\n return cell.element();\n });\n });\n };\n var getOtherCells = function (table, target, generators) {\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var details = onCells(house, target);\n return details.map(function (selectedCells) {\n var grid = Transitions.toGrid(house, generators, false);\n var upOrLeftCells = getUpOrLeftCells(grid, selectedCells, generators);\n var downOrRightCells = getDownOrRightCells(grid, selectedCells, generators);\n return {\n upOrLeftCells: upOrLeftCells,\n downOrRightCells: downOrRightCells\n };\n });\n };\n var OtherCells = { getOtherCells: getOtherCells };\n\n var hasInternalTarget = function (e) {\n return has$2(Element.fromDom(e.target), 'ephox-snooker-resizer-bar') === false;\n };\n function CellSelection$1 (editor, lazyResize, selectionTargets) {\n var handlerStruct = MixedBag([\n 'mousedown',\n 'mouseover',\n 'mouseup',\n 'keyup',\n 'keydown'\n ], []);\n var handlers = Option.none();\n var cloneFormats = getCloneElements(editor);\n var onSelection = function (cells, start, finish) {\n selectionTargets.targets().each(function (targets) {\n var tableOpt = TableLookup.table(start);\n tableOpt.each(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.cellOperations(noop, doc, cloneFormats);\n var otherCells = OtherCells.getOtherCells(table, targets, generators);\n fireTableSelectionChange(editor, cells, start, finish, otherCells);\n });\n });\n };\n var onClear = function () {\n fireTableSelectionClear(editor);\n };\n var annotations = SelectionAnnotation.byAttr(Ephemera, onSelection, onClear);\n editor.on('init', function (e) {\n var win = editor.getWin();\n var body = getBody$1(editor);\n var isRoot = getIsRoot(editor);\n var syncSelection = function () {\n var sel = editor.selection;\n var start = Element.fromDom(sel.getStart());\n var end = Element.fromDom(sel.getEnd());\n var shared = DomParent.sharedOne(TableLookup.table, [\n start,\n end\n ]);\n shared.fold(function () {\n annotations.clear(body);\n }, noop);\n };\n var mouseHandlers = InputHandlers.mouse(win, body, isRoot, annotations);\n var keyHandlers = InputHandlers.keyboard(win, body, isRoot, annotations);\n var external = InputHandlers.external(win, body, isRoot, annotations);\n var hasShiftKey = function (event) {\n return event.raw().shiftKey === true;\n };\n editor.on('TableSelectorChange', function (e) {\n external(e.start, e.finish);\n });\n var handleResponse = function (event, response) {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill()) {\n event.kill();\n }\n response.selection().each(function (ns) {\n var relative = Selection.relative(ns.start(), ns.finish());\n var rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n var keyup = function (event) {\n var wrappedEvent = fromRawEvent$1(event);\n if (wrappedEvent.raw().shiftKey && SelectionKeys.isNavigation(wrappedEvent.raw().which)) {\n var rng = editor.selection.getRng();\n var start = Element.fromDom(rng.startContainer);\n var end = Element.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n var keydown = function (event) {\n var wrappedEvent = fromRawEvent$1(event);\n lazyResize().each(function (resize) {\n resize.hideBars();\n });\n var rng = editor.selection.getRng();\n var startContainer = Element.fromDom(editor.selection.getStart());\n var start = Element.fromDom(rng.startContainer);\n var end = Element.fromDom(rng.endContainer);\n var direction = Direction.directionAt(startContainer).isRtl() ? SelectionKeys.rtl : SelectionKeys.ltr;\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n lazyResize().each(function (resize) {\n resize.showBars();\n });\n };\n var isLeftMouse = function (raw) {\n return raw.button === 0;\n };\n var isLeftButtonPressed = function (raw) {\n if (raw.buttons === undefined) {\n return true;\n }\n if (global$2.browser.isEdge() && raw.buttons === 0) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n var mouseDown = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(fromRawEvent$1(e));\n }\n };\n var mouseOver = function (e) {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(fromRawEvent$1(e));\n }\n };\n var mouseUp = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(fromRawEvent$1(e));\n }\n };\n var getDoubleTap = function () {\n var lastTarget = Cell(Element.fromDom(body));\n var lastTimeStamp = Cell(0);\n var touchEnd = function (t) {\n var target = Element.fromDom(t.target);\n if (name(target) === 'td' || name(target) === 'th') {\n var lT = lastTarget.get();\n var lTS = lastTimeStamp.get();\n if (eq(lT, target) && t.timeStamp - lTS < 300) {\n t.preventDefault();\n external(target, target);\n }\n }\n lastTarget.set(target);\n lastTimeStamp.set(t.timeStamp);\n };\n return { touchEnd: touchEnd };\n };\n var doubleTap = getDoubleTap();\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('touchend', doubleTap.touchEnd);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('NodeChange', syncSelection);\n handlers = Option.some(handlerStruct({\n mousedown: mouseDown,\n mouseover: mouseOver,\n mouseup: mouseUp,\n keyup: keyup,\n keydown: keydown\n }));\n });\n var destroy = function () {\n handlers.each(function (handlers) {\n });\n };\n return {\n clear: annotations.clear,\n destroy: destroy\n };\n }\n\n var Selections = function (editor) {\n var get = function () {\n var body = getBody$1(editor);\n return TableSelection.retrieve(body, Ephemera.selectedSelector()).fold(function () {\n if (editor.selection.getStart() === undefined) {\n return SelectionTypes.none();\n } else {\n return SelectionTypes.single(editor.selection);\n }\n }, function (cells) {\n return SelectionTypes.multiple(cells);\n });\n };\n return { get: get };\n };\n\n var getSelectionTargets = function (editor, selections) {\n var targets = Cell(Option.none());\n var changeHandlers = Cell([]);\n var findTargets = function () {\n return getSelectionStartCellOrCaption(editor).bind(function (cellOrCaption) {\n var table = TableLookup.table(cellOrCaption);\n return table.map(function (table) {\n if (name(cellOrCaption) === 'caption') {\n return TableTargets.notCell(cellOrCaption);\n } else {\n return TableTargets.forMenu(selections, table, cellOrCaption);\n }\n });\n });\n };\n var resetTargets = function () {\n targets.set(cached(findTargets)());\n each(changeHandlers.get(), function (handler) {\n return handler();\n });\n };\n var onSetup = function (api, isDisabled) {\n var handler = function () {\n return targets.get().fold(function () {\n api.setDisabled(true);\n }, function (targets) {\n api.setDisabled(isDisabled(targets));\n });\n };\n handler();\n changeHandlers.set(changeHandlers.get().concat([handler]));\n return function () {\n changeHandlers.set(filter(changeHandlers.get(), function (h) {\n return h !== handler;\n }));\n };\n };\n var onSetupTable = function (api) {\n return onSetup(api, function (_) {\n return false;\n });\n };\n var onSetupCellOrRow = function (api) {\n return onSetup(api, function (targets) {\n return name(targets.element()) === 'caption';\n });\n };\n var onSetupMergeable = function (api) {\n return onSetup(api, function (targets) {\n return targets.mergable().isNone();\n });\n };\n var onSetupUnmergeable = function (api) {\n return onSetup(api, function (targets) {\n return targets.unmergable().isNone();\n });\n };\n editor.on('NodeChange TableSelectorChange', resetTargets);\n return {\n onSetupTable: onSetupTable,\n onSetupCellOrRow: onSetupCellOrRow,\n onSetupMergeable: onSetupMergeable,\n onSetupUnmergeable: onSetupUnmergeable,\n resetTargets: resetTargets,\n targets: function () {\n return targets.get();\n }\n };\n };\n\n var addButtons = function (editor, selectionTargets) {\n editor.ui.registry.addMenuButton('table', {\n tooltip: 'Table',\n icon: 'table',\n fetch: function (callback) {\n return callback('inserttable | cell row column | advtablesort | tableprops deletetable');\n }\n });\n var cmd = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n editor.ui.registry.addButton('tableprops', {\n tooltip: 'Table properties',\n onAction: cmd('mceTableProps'),\n icon: 'table',\n onSetup: selectionTargets.onSetupTable\n });\n editor.ui.registry.addButton('tabledelete', {\n tooltip: 'Delete table',\n onAction: cmd('mceTableDelete'),\n icon: 'table-delete-table',\n onSetup: selectionTargets.onSetupTable\n });\n editor.ui.registry.addButton('tablecellprops', {\n tooltip: 'Cell properties',\n onAction: cmd('mceTableCellProps'),\n icon: 'table-cell-properties',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablemergecells', {\n tooltip: 'Merge cells',\n onAction: cmd('mceTableMergeCells'),\n icon: 'table-merge-cells',\n onSetup: selectionTargets.onSetupMergeable\n });\n editor.ui.registry.addButton('tablesplitcells', {\n tooltip: 'Split cell',\n onAction: cmd('mceTableSplitCells'),\n icon: 'table-split-cells',\n onSetup: selectionTargets.onSetupUnmergeable\n });\n editor.ui.registry.addButton('tableinsertrowbefore', {\n tooltip: 'Insert row before',\n onAction: cmd('mceTableInsertRowBefore'),\n icon: 'table-insert-row-above',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tableinsertrowafter', {\n tooltip: 'Insert row after',\n onAction: cmd('mceTableInsertRowAfter'),\n icon: 'table-insert-row-after',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tabledeleterow', {\n tooltip: 'Delete row',\n onAction: cmd('mceTableDeleteRow'),\n icon: 'table-delete-row',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablerowprops', {\n tooltip: 'Row properties',\n onAction: cmd('mceTableRowProps'),\n icon: 'table-row-properties',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tableinsertcolbefore', {\n tooltip: 'Insert column before',\n onAction: cmd('mceTableInsertColBefore'),\n icon: 'table-insert-column-before',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tableinsertcolafter', {\n tooltip: 'Insert column after',\n onAction: cmd('mceTableInsertColAfter'),\n icon: 'table-insert-column-after',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tabledeletecol', {\n tooltip: 'Delete column',\n onAction: cmd('mceTableDeleteCol'),\n icon: 'table-delete-column',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablecutrow', {\n tooltip: 'Cut row',\n onAction: cmd('mceTableCutRow'),\n icon: 'temporary-placeholder',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablecopyrow', {\n tooltip: 'Copy row',\n onAction: cmd('mceTableCopyRow'),\n icon: 'temporary-placeholder',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablepasterowbefore', {\n tooltip: 'Paste row before',\n onAction: cmd('mceTablePasteRowBefore'),\n icon: 'temporary-placeholder',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tablepasterowafter', {\n tooltip: 'Paste row after',\n onAction: cmd('mceTablePasteRowAfter'),\n icon: 'temporary-placeholder',\n onSetup: selectionTargets.onSetupCellOrRow\n });\n editor.ui.registry.addButton('tableinsertdialog', {\n tooltip: 'Insert table',\n onAction: cmd('mceInsertTable'),\n icon: 'table'\n });\n };\n var addToolbars = function (editor) {\n var isTable = function (table) {\n return editor.dom.is(table, 'table') && editor.getBody().contains(table);\n };\n var toolbar = getToolbar(editor);\n if (toolbar.length > 0) {\n editor.ui.registry.addContextToolbar('table', {\n predicate: isTable,\n items: toolbar,\n scope: 'node',\n position: 'node'\n });\n }\n };\n var Buttons = {\n addButtons: addButtons,\n addToolbars: addToolbars\n };\n\n var addMenuItems = function (editor, selectionTargets) {\n var cmd = function (command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n var insertTableAction = function (_a) {\n var numRows = _a.numRows, numColumns = _a.numColumns;\n editor.undoManager.transact(function () {\n InsertTable.insert(editor, numColumns, numRows);\n });\n editor.addVisual();\n };\n var tableProperties = {\n text: 'Table properties',\n onSetup: selectionTargets.onSetupTable,\n onAction: cmd('mceTableProps')\n };\n var deleteTable = {\n text: 'Delete table',\n icon: 'table-delete-table',\n onSetup: selectionTargets.onSetupTable,\n onAction: cmd('mceTableDelete')\n };\n var rowItems = [\n {\n type: 'menuitem',\n text: 'Insert row before',\n icon: 'table-insert-row-above',\n onAction: cmd('mceTableInsertRowBefore'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Insert row after',\n icon: 'table-insert-row-after',\n onAction: cmd('mceTableInsertRowAfter'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Delete row',\n icon: 'table-delete-row',\n onAction: cmd('mceTableDeleteRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Row properties',\n icon: 'table-row-properties',\n onAction: cmd('mceTableRowProps'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n { type: 'separator' },\n {\n type: 'menuitem',\n text: 'Cut row',\n onAction: cmd('mceTableCutRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Copy row',\n onAction: cmd('mceTableCopyRow'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Paste row before',\n onAction: cmd('mceTablePasteRowBefore'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Paste row after',\n onAction: cmd('mceTablePasteRowAfter'),\n onSetup: selectionTargets.onSetupCellOrRow\n }\n ];\n var row = {\n type: 'nestedmenuitem',\n text: 'Row',\n getSubmenuItems: function () {\n return rowItems;\n }\n };\n var columnItems = [\n {\n type: 'menuitem',\n text: 'Insert column before',\n icon: 'table-insert-column-before',\n onAction: cmd('mceTableInsertColBefore'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Insert column after',\n icon: 'table-insert-column-after',\n onAction: cmd('mceTableInsertColAfter'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Delete column',\n icon: 'table-delete-column',\n onAction: cmd('mceTableDeleteCol'),\n onSetup: selectionTargets.onSetupCellOrRow\n }\n ];\n var column = {\n type: 'nestedmenuitem',\n text: 'Column',\n getSubmenuItems: function () {\n return columnItems;\n }\n };\n var cellItems = [\n {\n type: 'menuitem',\n text: 'Cell properties',\n icon: 'table-cell-properties',\n onAction: cmd('mceTableCellProps'),\n onSetup: selectionTargets.onSetupCellOrRow\n },\n {\n type: 'menuitem',\n text: 'Merge cells',\n icon: 'table-merge-cells',\n onAction: cmd('mceTableMergeCells'),\n onSetup: selectionTargets.onSetupMergeable\n },\n {\n type: 'menuitem',\n text: 'Split cell',\n icon: 'table-split-cells',\n onAction: cmd('mceTableSplitCells'),\n onSetup: selectionTargets.onSetupUnmergeable\n }\n ];\n var cell = {\n type: 'nestedmenuitem',\n text: 'Cell',\n getSubmenuItems: function () {\n return cellItems;\n }\n };\n if (hasTableGrid(editor) === false) {\n editor.ui.registry.addMenuItem('inserttable', {\n text: 'Table',\n icon: 'table',\n onAction: cmd('mceInsertTable')\n });\n } else {\n editor.ui.registry.addNestedMenuItem('inserttable', {\n text: 'Table',\n icon: 'table',\n getSubmenuItems: function () {\n return [{\n type: 'fancymenuitem',\n fancytype: 'inserttable',\n onAction: insertTableAction\n }];\n }\n });\n }\n editor.ui.registry.addMenuItem('inserttabledialog', {\n text: 'Insert table',\n icon: 'table',\n onAction: cmd('mceInsertTable')\n });\n editor.ui.registry.addMenuItem('tableprops', tableProperties);\n editor.ui.registry.addMenuItem('deletetable', deleteTable);\n editor.ui.registry.addNestedMenuItem('row', row);\n editor.ui.registry.addNestedMenuItem('column', column);\n editor.ui.registry.addNestedMenuItem('cell', cell);\n editor.ui.registry.addContextMenu('table', {\n update: function () {\n selectionTargets.resetTargets();\n return selectionTargets.targets().fold(function () {\n return '';\n }, function (targets) {\n if (name(targets.element()) === 'caption') {\n return 'tableprops deletetable';\n } else {\n return 'cell row column | advtablesort | tableprops deletetable';\n }\n });\n }\n });\n };\n var MenuItems = { addMenuItems: addMenuItems };\n\n var getClipboardRows = function (clipboardRows) {\n return clipboardRows.get().fold(function () {\n return;\n }, function (rows) {\n return map(rows, function (row) {\n return row.dom();\n });\n });\n };\n var setClipboardRows = function (rows, clipboardRows) {\n var sugarRows = map(rows, Element.fromDom);\n clipboardRows.set(Option.from(sugarRows));\n };\n var getApi = function (editor, clipboardRows, resizeHandler, selectionTargets) {\n return {\n insertTable: function (columns, rows) {\n return InsertTable.insert(editor, columns, rows);\n },\n setClipboardRows: function (rows) {\n return setClipboardRows(rows, clipboardRows);\n },\n getClipboardRows: function () {\n return getClipboardRows(clipboardRows);\n },\n resizeHandler: resizeHandler,\n selectionTargets: selectionTargets\n };\n };\n\n function Plugin(editor) {\n var selections = Selections(editor);\n var selectionTargets = getSelectionTargets(editor, selections);\n var resizeHandler = getResizeHandler(editor);\n var cellSelection = CellSelection$1(editor, resizeHandler.lazyResize, selectionTargets);\n var actions = TableActions(editor, resizeHandler.lazyWire);\n var clipboardRows = Cell(Option.none());\n Commands.registerCommands(editor, actions, cellSelection, selections, clipboardRows);\n Clipboard.registerEvents(editor, selections, actions, cellSelection);\n MenuItems.addMenuItems(editor, selectionTargets);\n Buttons.addButtons(editor, selectionTargets);\n Buttons.addToolbars(editor);\n editor.on('PreInit', function () {\n editor.serializer.addTempAttr(Ephemera.firstSelected());\n editor.serializer.addTempAttr(Ephemera.lastSelected());\n });\n if (hasTabNavigation(editor)) {\n editor.on('keydown', function (e) {\n TabContext.handle(e, editor, actions, resizeHandler.lazyWire);\n });\n }\n editor.on('remove', function () {\n resizeHandler.destroy();\n cellSelection.destroy();\n });\n return getApi(editor, clipboardRows, resizeHandler, selectionTargets);\n }\n function Plugin$1 () {\n global.add('table', Plugin);\n }\n\n Plugin$1();\n\n}(window));\n","module.exports = __webpack_public_path__ + \"/tinymce/skins/content/document//content.min.css\";","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var getDateFormat = function (editor) {\n return editor.getParam('insertdatetime_dateformat', editor.translate('%Y-%m-%d'));\n };\n var getTimeFormat = function (editor) {\n return editor.getParam('insertdatetime_timeformat', editor.translate('%H:%M:%S'));\n };\n var getFormats = function (editor) {\n return editor.getParam('insertdatetime_formats', [\n '%H:%M:%S',\n '%Y-%m-%d',\n '%I:%M:%S %p',\n '%D'\n ]);\n };\n var getDefaultDateTime = function (editor) {\n var formats = getFormats(editor);\n return formats.length > 0 ? formats[0] : getTimeFormat(editor);\n };\n var shouldInsertTimeElement = function (editor) {\n return editor.getParam('insertdatetime_element', false);\n };\n var Settings = {\n getDateFormat: getDateFormat,\n getTimeFormat: getTimeFormat,\n getFormats: getFormats,\n getDefaultDateTime: getDefaultDateTime,\n shouldInsertTimeElement: shouldInsertTimeElement\n };\n\n var daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');\n var daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ');\n var monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');\n var monthsLong = 'January February March April May June July August September October November December'.split(' ');\n var addZeros = function (value, len) {\n value = '' + value;\n if (value.length < len) {\n for (var i = 0; i < len - value.length; i++) {\n value = '0' + value;\n }\n }\n return value;\n };\n var getDateTime = function (editor, fmt, date) {\n date = date || new Date();\n fmt = fmt.replace('%D', '%m/%d/%Y');\n fmt = fmt.replace('%r', '%I:%M:%S %p');\n fmt = fmt.replace('%Y', '' + date.getFullYear());\n fmt = fmt.replace('%y', '' + date.getYear());\n fmt = fmt.replace('%m', addZeros(date.getMonth() + 1, 2));\n fmt = fmt.replace('%d', addZeros(date.getDate(), 2));\n fmt = fmt.replace('%H', '' + addZeros(date.getHours(), 2));\n fmt = fmt.replace('%M', '' + addZeros(date.getMinutes(), 2));\n fmt = fmt.replace('%S', '' + addZeros(date.getSeconds(), 2));\n fmt = fmt.replace('%I', '' + ((date.getHours() + 11) % 12 + 1));\n fmt = fmt.replace('%p', '' + (date.getHours() < 12 ? 'AM' : 'PM'));\n fmt = fmt.replace('%B', '' + editor.translate(monthsLong[date.getMonth()]));\n fmt = fmt.replace('%b', '' + editor.translate(monthsShort[date.getMonth()]));\n fmt = fmt.replace('%A', '' + editor.translate(daysLong[date.getDay()]));\n fmt = fmt.replace('%a', '' + editor.translate(daysShort[date.getDay()]));\n fmt = fmt.replace('%%', '%');\n return fmt;\n };\n var updateElement = function (editor, timeElm, computerTime, userTime) {\n var newTimeElm = editor.dom.create('time', { datetime: computerTime }, userTime);\n timeElm.parentNode.insertBefore(newTimeElm, timeElm);\n editor.dom.remove(timeElm);\n editor.selection.select(newTimeElm, true);\n editor.selection.collapse(false);\n };\n var insertDateTime = function (editor, format) {\n if (Settings.shouldInsertTimeElement(editor)) {\n var userTime = getDateTime(editor, format);\n var computerTime = void 0;\n if (/%[HMSIp]/.test(format)) {\n computerTime = getDateTime(editor, '%Y-%m-%dT%H:%M');\n } else {\n computerTime = getDateTime(editor, '%Y-%m-%d');\n }\n var timeElm = editor.dom.getParent(editor.selection.getStart(), 'time');\n if (timeElm) {\n updateElement(editor, timeElm, computerTime, userTime);\n } else {\n editor.insertContent('');\n }\n } else {\n editor.insertContent(getDateTime(editor, format));\n }\n };\n var Actions = {\n insertDateTime: insertDateTime,\n getDateTime: getDateTime\n };\n\n var register = function (editor) {\n editor.addCommand('mceInsertDate', function () {\n Actions.insertDateTime(editor, Settings.getDateFormat(editor));\n });\n editor.addCommand('mceInsertTime', function () {\n Actions.insertDateTime(editor, Settings.getTimeFormat(editor));\n });\n };\n var Commands = { register: register };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\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 register$1 = function (editor) {\n var formats = Settings.getFormats(editor);\n var defaultFormat = Cell(Settings.getDefaultDateTime(editor));\n editor.ui.registry.addSplitButton('insertdatetime', {\n icon: 'insert-time',\n tooltip: 'Insert date/time',\n select: function (value) {\n return value === defaultFormat.get();\n },\n fetch: function (done) {\n done(global$1.map(formats, function (format) {\n return {\n type: 'choiceitem',\n text: Actions.getDateTime(editor, format),\n value: format\n };\n }));\n },\n onAction: function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n Actions.insertDateTime(editor, defaultFormat.get());\n },\n onItemAction: function (_, value) {\n defaultFormat.set(value);\n Actions.insertDateTime(editor, value);\n }\n });\n var makeMenuItemHandler = function (format) {\n return function () {\n defaultFormat.set(format);\n Actions.insertDateTime(editor, format);\n };\n };\n editor.ui.registry.addNestedMenuItem('insertdatetime', {\n icon: 'insert-time',\n text: 'Date/time',\n getSubmenuItems: function () {\n return global$1.map(formats, function (format) {\n return {\n type: 'menuitem',\n text: Actions.getDateTime(editor, format),\n onAction: makeMenuItemHandler(format)\n };\n });\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('insertdatetime', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n }\n\n Plugin();\n\n}());\n","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide-dark//skin.mobile.min.css\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/content/default//content.min.css\";","// Exports the \"paste\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/paste')\n// ES2015:\n// import 'tinymce/plugins/paste'\nrequire('./plugin.js');","module.exports = __webpack_public_path__ + \"/tinymce/skins/content/document//content.css\";","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.VK');\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\n var assumeExternalTargets = function (editor) {\n var externalTargets = editor.getParam('link_assume_external_targets', false);\n if (isBoolean(externalTargets) && externalTargets) {\n return 1;\n } else if (isString(externalTargets) && (externalTargets === 'http' || externalTargets === 'https')) {\n return externalTargets;\n }\n return 0;\n };\n var hasContextToolbar = function (editor) {\n return editor.getParam('link_context_toolbar', false, 'boolean');\n };\n var getLinkList = function (editor) {\n return editor.getParam('link_list');\n };\n var getDefaultLinkTarget = function (editor) {\n return editor.getParam('default_link_target');\n };\n var getTargetList = function (editor) {\n return editor.getParam('target_list', true);\n };\n var getRelList = function (editor) {\n return editor.getParam('rel_list', [], 'array');\n };\n var getLinkClassList = function (editor) {\n return editor.getParam('link_class_list', [], 'array');\n };\n var shouldShowLinkTitle = function (editor) {\n return editor.getParam('link_title', true, 'boolean');\n };\n var allowUnsafeLinkTarget = function (editor) {\n return editor.getParam('allow_unsafe_link_target', false, 'boolean');\n };\n var useQuickLink = function (editor) {\n return editor.getParam('link_quicklink', false, 'boolean');\n };\n var getDefaultLinkProtocol = function (editor) {\n return editor.getParam('link_default_protocol', 'http', 'string');\n };\n var Settings = {\n assumeExternalTargets: assumeExternalTargets,\n hasContextToolbar: hasContextToolbar,\n getLinkList: getLinkList,\n getDefaultLinkTarget: getDefaultLinkTarget,\n getTargetList: getTargetList,\n getRelList: getRelList,\n getLinkClassList: getLinkClassList,\n shouldShowLinkTitle: shouldShowLinkTitle,\n allowUnsafeLinkTarget: allowUnsafeLinkTarget,\n useQuickLink: useQuickLink,\n getDefaultLinkProtocol: getDefaultLinkProtocol\n };\n\n var appendClickRemove = function (link, evt) {\n domGlobals.document.body.appendChild(link);\n link.dispatchEvent(evt);\n domGlobals.document.body.removeChild(link);\n };\n var open = function (url) {\n var link = domGlobals.document.createElement('a');\n link.target = '_blank';\n link.href = url;\n link.rel = 'noreferrer noopener';\n var evt = domGlobals.document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, domGlobals.window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n appendClickRemove(link, evt);\n };\n var OpenUrl = { open: open };\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\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 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 contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\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 foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\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 return flatten(map(xs, f));\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Option.none();\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var hasProtocol = function (url) {\n return /^\\w+:/i.test(url);\n };\n var getHref = function (elm) {\n var href = elm.getAttribute('data-mce-href');\n return href ? href : elm.getAttribute('href');\n };\n var applyRelTargetRules = function (rel, isUnsafe) {\n var rules = ['noopener'];\n var rels = rel ? rel.split(/\\s+/) : [];\n var toString = function (rels) {\n return global$3.trim(rels.sort().join(' '));\n };\n var addTargetRules = function (rels) {\n rels = removeTargetRules(rels);\n return rels.length > 0 ? rels.concat(rules) : rules;\n };\n var removeTargetRules = function (rels) {\n return rels.filter(function (val) {\n return global$3.inArray(rules, val) === -1;\n });\n };\n var newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels);\n return newRels.length > 0 ? toString(newRels) : '';\n };\n var trimCaretContainers = function (text) {\n return text.replace(/\\uFEFF/g, '');\n };\n var getAnchorElement = function (editor, selectedElm) {\n selectedElm = selectedElm || editor.selection.getNode();\n if (isImageFigure(selectedElm)) {\n return editor.dom.select('a[href]', selectedElm)[0];\n } else {\n return editor.dom.getParent(selectedElm, 'a[href]');\n }\n };\n var getAnchorText = function (selection, anchorElm) {\n var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' });\n return trimCaretContainers(text);\n };\n var isLink = function (elm) {\n return elm && elm.nodeName === 'A' && !!getHref(elm);\n };\n var hasLinks = function (elements) {\n return global$3.grep(elements, isLink).length > 0;\n };\n var isOnlyTextSelected = function (html) {\n if (/]+>[^<]+<\\/a>$/.test(html) || html.indexOf('href=') === -1)) {\n return false;\n }\n return true;\n };\n var isImageFigure = function (elm) {\n return elm && elm.nodeName === 'FIGURE' && /\\bimage\\b/i.test(elm.className);\n };\n var getLinkAttrs = function (data) {\n return foldl([\n 'title',\n 'rel',\n 'class',\n 'target'\n ], function (acc, key) {\n data[key].each(function (value) {\n acc[key] = value.length > 0 ? value : null;\n });\n return acc;\n }, { href: data.href });\n };\n var handleExternalTargets = function (href, assumeExternalTargets) {\n if ((assumeExternalTargets === 'http' || assumeExternalTargets === 'https') && !hasProtocol(href)) {\n return assumeExternalTargets + '://' + href;\n }\n return href;\n };\n var applyLinkOverrides = function (editor, linkAttrs) {\n var newLinkAttrs = __assign({}, linkAttrs);\n if (!(Settings.getRelList(editor).length > 0) && Settings.allowUnsafeLinkTarget(editor) === false) {\n var newRel = applyRelTargetRules(newLinkAttrs.rel, newLinkAttrs.target === '_blank');\n newLinkAttrs.rel = newRel ? newRel : null;\n }\n if (Option.from(newLinkAttrs.target).isNone() && Settings.getTargetList(editor) === false) {\n newLinkAttrs.target = Settings.getDefaultLinkTarget(editor);\n }\n newLinkAttrs.href = handleExternalTargets(newLinkAttrs.href, Settings.assumeExternalTargets(editor));\n return newLinkAttrs;\n };\n var updateLink = function (editor, anchorElm, text, linkAttrs) {\n text.each(function (text) {\n if (anchorElm.hasOwnProperty('innerText')) {\n anchorElm.innerText = text;\n } else {\n anchorElm.textContent = text;\n }\n });\n editor.dom.setAttribs(anchorElm, linkAttrs);\n editor.selection.select(anchorElm);\n };\n var createLink = function (editor, selectedElm, text, linkAttrs) {\n if (isImageFigure(selectedElm)) {\n linkImageFigure(editor, selectedElm, linkAttrs);\n } else {\n text.fold(function () {\n editor.execCommand('mceInsertLink', false, linkAttrs);\n }, function (text) {\n editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(text)));\n });\n }\n };\n var link = function (editor, attachState, data) {\n var selectedElm = editor.selection.getNode();\n var anchorElm = getAnchorElement(editor, selectedElm);\n var linkAttrs = applyLinkOverrides(editor, getLinkAttrs(data));\n editor.undoManager.transact(function () {\n if (data.href === attachState.href) {\n attachState.attach();\n }\n if (anchorElm) {\n editor.focus();\n updateLink(editor, anchorElm, data.text, linkAttrs);\n } else {\n createLink(editor, selectedElm, data.text, linkAttrs);\n }\n });\n };\n var unlink = function (editor) {\n editor.undoManager.transact(function () {\n var node = editor.selection.getNode();\n if (isImageFigure(node)) {\n unlinkImageFigure(editor, node);\n } else {\n var anchorElm = editor.dom.getParent(node, 'a[href]', editor.getBody());\n if (anchorElm) {\n editor.dom.remove(anchorElm, true);\n }\n }\n editor.focus();\n });\n };\n var unlinkImageFigure = function (editor, fig) {\n var img = editor.dom.select('img', fig)[0];\n if (img) {\n var a = editor.dom.getParents(img, 'a[href]', fig)[0];\n if (a) {\n a.parentNode.insertBefore(img, a);\n editor.dom.remove(a);\n }\n }\n };\n var linkImageFigure = function (editor, fig, attrs) {\n var img = editor.dom.select('img', fig)[0];\n if (img) {\n var a = editor.dom.create('a', attrs);\n img.parentNode.insertBefore(a, img);\n a.appendChild(img);\n }\n };\n var Utils = {\n link: link,\n unlink: unlink,\n isLink: isLink,\n hasLinks: hasLinks,\n getHref: getHref,\n isOnlyTextSelected: isOnlyTextSelected,\n getAnchorElement: getAnchorElement,\n getAnchorText: getAnchorText,\n applyRelTargetRules: applyRelTargetRules,\n hasProtocol: hasProtocol\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n\n var getValue = function (item) {\n return isString(item.value) ? item.value : '';\n };\n var sanitizeList = function (list, extractValue) {\n var out = [];\n global$3.each(list, function (item) {\n var text = isString(item.text) ? item.text : isString(item.title) ? item.title : '';\n if (item.menu !== undefined) ; else {\n var value = extractValue(item);\n out.push({\n text: text,\n value: value\n });\n }\n });\n return out;\n };\n var sanitizeWith = function (extracter) {\n if (extracter === void 0) {\n extracter = getValue;\n }\n return function (list) {\n return Option.from(list).map(function (list) {\n return sanitizeList(list, extracter);\n });\n };\n };\n var sanitize = function (list) {\n return sanitizeWith(getValue)(list);\n };\n var createUi = function (name, label) {\n return function (items) {\n return {\n name: name,\n type: 'selectbox',\n label: label,\n items: items\n };\n };\n };\n var ListOptions = {\n sanitize: sanitize,\n sanitizeWith: sanitizeWith,\n createUi: createUi,\n getValue: getValue\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 findTextByValue = function (value, catalog) {\n return findMap(catalog, function (item) {\n return Option.some(item).filter(function (i) {\n return i.value === value;\n });\n });\n };\n var getDelta = function (persistentText, fieldName, catalog, data) {\n var value = data[fieldName];\n var hasPersistentText = persistentText.length > 0;\n return value !== undefined ? findTextByValue(value, catalog).map(function (i) {\n return {\n url: {\n value: i.value,\n meta: {\n text: hasPersistentText ? persistentText : i.text,\n attach: noop\n }\n },\n text: hasPersistentText ? persistentText : i.text\n };\n }) : Option.none();\n };\n var findCatalog = function (settings, fieldName) {\n if (fieldName === 'link') {\n return settings.catalogs.link;\n } else if (fieldName === 'anchor') {\n return settings.catalogs.anchor;\n } else {\n return Option.none();\n }\n };\n var init = function (initialData, linkSettings) {\n var persistentText = Cell(initialData.text);\n var onUrlChange = function (data) {\n if (persistentText.get().length <= 0) {\n var urlText = data.url.meta.text !== undefined ? data.url.meta.text : data.url.value;\n var urlTitle = data.url.meta.title !== undefined ? data.url.meta.title : '';\n return Option.some({\n text: urlText,\n title: urlTitle\n });\n } else {\n return Option.none();\n }\n };\n var onCatalogChange = function (data, change) {\n var catalog = findCatalog(linkSettings, change.name).getOr([]);\n return getDelta(persistentText.get(), change.name, catalog, data);\n };\n var onChange = function (getData, change) {\n if (change.name === 'url') {\n return onUrlChange(getData());\n } else if (contains([\n 'anchor',\n 'link'\n ], change.name)) {\n return onCatalogChange(getData(), change);\n } else if (change.name === 'text') {\n persistentText.set(getData().text);\n return Option.none();\n } else {\n return Option.none();\n }\n };\n return { onChange: onChange };\n };\n var DialogChanges = {\n init: init,\n getDelta: getDelta\n };\n\n var exports$1 = {}, module = { 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, undefined));\n var Promise = module.exports.boltExport;\n\n var nu = function (baseFn) {\n var data = Option.none();\n var callbacks = [];\n var map = function (f) {\n return nu(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(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu,\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$1 = 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$1,\n pure: pure$1\n };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var delayedConfirm = function (editor, message, callback) {\n var rng = editor.selection.getRng();\n global$4.setEditorTimeout(editor, function () {\n editor.windowManager.confirm(message, function (state) {\n editor.selection.setRng(rng);\n callback(state);\n });\n });\n };\n var tryEmailTransform = function (data) {\n var url = data.href;\n var suggestMailTo = url.indexOf('@') > 0 && url.indexOf('//') === -1 && url.indexOf('mailto:') === -1;\n return suggestMailTo ? Option.some({\n message: 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?',\n preprocess: function (oldData) {\n return __assign(__assign({}, oldData), { href: 'mailto:' + url });\n }\n }) : Option.none();\n };\n var tryProtocolTransform = function (assumeExternalTargets, defaultLinkProtocol) {\n return function (data) {\n var url = data.href;\n var suggestProtocol = assumeExternalTargets === 1 && !Utils.hasProtocol(url) || assumeExternalTargets === 0 && /^\\s*www[\\.|\\d\\.]/i.test(url);\n return suggestProtocol ? Option.some({\n message: 'The URL you entered seems to be an external link. Do you want to add the required ' + defaultLinkProtocol + ':// prefix?',\n preprocess: function (oldData) {\n return __assign(__assign({}, oldData), { href: defaultLinkProtocol + '://' + url });\n }\n }) : Option.none();\n };\n };\n var preprocess = function (editor, data) {\n return findMap([\n tryEmailTransform,\n tryProtocolTransform(Settings.assumeExternalTargets(editor), Settings.getDefaultLinkProtocol(editor))\n ], function (f) {\n return f(data);\n }).fold(function () {\n return Future.pure(data);\n }, function (transform) {\n return Future.nu(function (callback) {\n delayedConfirm(editor, transform.message, function (state) {\n callback(state ? transform.preprocess(data) : data);\n });\n });\n });\n };\n var DialogConfirms = { preprocess: preprocess };\n\n var getAnchors = function (editor) {\n var anchorNodes = editor.dom.select('a:not([href])');\n var anchors = bind(anchorNodes, function (anchor) {\n var id = anchor.name || anchor.id;\n return id ? [{\n text: id,\n value: '#' + id\n }] : [];\n });\n return anchors.length > 0 ? Option.some([{\n text: 'None',\n value: ''\n }].concat(anchors)) : Option.none();\n };\n var AnchorListOptions = { getAnchors: getAnchors };\n\n var getClasses = function (editor) {\n var list = Settings.getLinkClassList(editor);\n if (list.length > 0) {\n return ListOptions.sanitize(list);\n }\n return Option.none();\n };\n var ClassListOptions = { getClasses: getClasses };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var parseJson = function (text) {\n try {\n return Option.some(JSON.parse(text));\n } catch (err) {\n return Option.none();\n }\n };\n var getLinks = function (editor) {\n var extractor = function (item) {\n return editor.convertURL(item.value || item.url, 'href');\n };\n var linkList = Settings.getLinkList(editor);\n return Future.nu(function (callback) {\n if (isString(linkList)) {\n global$5.send({\n url: linkList,\n success: function (text) {\n return callback(parseJson(text));\n },\n error: function (_) {\n return callback(Option.none());\n }\n });\n } else if (isFunction(linkList)) {\n linkList(function (output) {\n return callback(Option.some(output));\n });\n } else {\n callback(Option.from(linkList));\n }\n }).map(function (optItems) {\n return optItems.bind(ListOptions.sanitizeWith(extractor)).map(function (items) {\n if (items.length > 0) {\n return [{\n text: 'None',\n value: ''\n }].concat(items);\n } else {\n return items;\n }\n });\n });\n };\n var LinkListOptions = { getLinks: getLinks };\n\n var getRels = function (editor, initialTarget) {\n var list = Settings.getRelList(editor);\n if (list.length > 0) {\n var isTargetBlank_1 = initialTarget.is('_blank');\n var enforceSafe = Settings.allowUnsafeLinkTarget(editor) === false;\n var safeRelExtractor = function (item) {\n return Utils.applyRelTargetRules(ListOptions.getValue(item), isTargetBlank_1);\n };\n var sanitizer = enforceSafe ? ListOptions.sanitizeWith(safeRelExtractor) : ListOptions.sanitize;\n return sanitizer(list);\n }\n return Option.none();\n };\n var RelOptions = { getRels: getRels };\n\n var fallbacks = [\n {\n text: 'Current window',\n value: ''\n },\n {\n text: 'New window',\n value: '_blank'\n }\n ];\n var getTargets = function (editor) {\n var list = Settings.getTargetList(editor);\n if (isArray(list)) {\n return ListOptions.sanitize(list).orThunk(function () {\n return Option.some(fallbacks);\n });\n } else if (list === false) {\n return Option.none();\n }\n return Option.some(fallbacks);\n };\n var TargetOptions = { getTargets: getTargets };\n\n var nonEmptyAttr = function (dom, elem, name) {\n var val = dom.getAttrib(elem, name);\n return val !== null && val.length > 0 ? Option.some(val) : Option.none();\n };\n var extractFromAnchor = function (editor, anchor) {\n var dom = editor.dom;\n var onlyText = Utils.isOnlyTextSelected(editor.selection.getContent());\n var text = onlyText ? Option.some(Utils.getAnchorText(editor.selection, anchor)) : Option.none();\n var url = anchor ? Option.some(dom.getAttrib(anchor, 'href')) : Option.none();\n var target = anchor ? Option.from(dom.getAttrib(anchor, 'target')) : Option.none();\n var rel = nonEmptyAttr(dom, anchor, 'rel');\n var linkClass = nonEmptyAttr(dom, anchor, 'class');\n var title = nonEmptyAttr(dom, anchor, 'title');\n return {\n url: url,\n text: text,\n title: title,\n target: target,\n rel: rel,\n linkClass: linkClass\n };\n };\n var collect = function (editor, linkNode) {\n return LinkListOptions.getLinks(editor).map(function (links) {\n var anchor = extractFromAnchor(editor, linkNode);\n return {\n anchor: anchor,\n catalogs: {\n targets: TargetOptions.getTargets(editor),\n rels: RelOptions.getRels(editor, anchor.target),\n classes: ClassListOptions.getClasses(editor),\n anchor: AnchorListOptions.getAnchors(editor),\n link: links\n },\n optNode: Option.from(linkNode),\n flags: { titleEnabled: Settings.shouldShowLinkTitle(editor) }\n };\n });\n };\n var DialogInfo = { collect: collect };\n\n var handleSubmit = function (editor, info) {\n return function (api) {\n var data = api.getData();\n if (!data.url.value) {\n Utils.unlink(editor);\n api.close();\n return;\n }\n var getChangedValue = function (key) {\n return Option.from(data[key]).filter(function (value) {\n return !info.anchor[key].is(value);\n });\n };\n var changedData = {\n href: data.url.value,\n text: getChangedValue('text'),\n target: getChangedValue('target'),\n rel: getChangedValue('rel'),\n class: getChangedValue('linkClass'),\n title: getChangedValue('title')\n };\n var attachState = {\n href: data.url.value,\n attach: data.url.meta !== undefined && data.url.meta.attach ? data.url.meta.attach : function () {\n }\n };\n DialogConfirms.preprocess(editor, changedData).get(function (pData) {\n Utils.link(editor, attachState, pData);\n });\n api.close();\n };\n };\n var collectData = function (editor) {\n var anchorNode = Utils.getAnchorElement(editor);\n return DialogInfo.collect(editor, anchorNode);\n };\n var getInitialData = function (info, defaultTarget) {\n return {\n url: {\n value: info.anchor.url.getOr(''),\n meta: {\n attach: function () {\n },\n text: info.anchor.url.fold(function () {\n return '';\n }, function () {\n return info.anchor.text.getOr('');\n }),\n original: { value: info.anchor.url.getOr('') }\n }\n },\n text: info.anchor.text.getOr(''),\n title: info.anchor.title.getOr(''),\n anchor: info.anchor.url.getOr(''),\n link: info.anchor.url.getOr(''),\n rel: info.anchor.rel.getOr(''),\n target: info.anchor.target.or(defaultTarget).getOr(''),\n linkClass: info.anchor.linkClass.getOr('')\n };\n };\n var makeDialog = function (settings, onSubmit, editor) {\n var urlInput = [{\n name: 'url',\n type: 'urlinput',\n filetype: 'file',\n label: 'URL'\n }];\n var displayText = settings.anchor.text.map(function () {\n return {\n name: 'text',\n type: 'input',\n label: 'Text to display'\n };\n }).toArray();\n var titleText = settings.flags.titleEnabled ? [{\n name: 'title',\n type: 'input',\n label: 'Title'\n }] : [];\n var defaultTarget = Option.from(Settings.getDefaultLinkTarget(editor));\n var initialData = getInitialData(settings, defaultTarget);\n var dialogDelta = DialogChanges.init(initialData, settings);\n var catalogs = settings.catalogs;\n var body = {\n type: 'panel',\n items: flatten([\n urlInput,\n displayText,\n titleText,\n cat([\n catalogs.anchor.map(ListOptions.createUi('anchor', 'Anchors')),\n catalogs.rels.map(ListOptions.createUi('rel', 'Rel')),\n catalogs.targets.map(ListOptions.createUi('target', 'Open link in...')),\n catalogs.link.map(ListOptions.createUi('link', 'Link list')),\n catalogs.classes.map(ListOptions.createUi('linkClass', 'Class'))\n ])\n ])\n };\n return {\n title: 'Insert/Edit Link',\n size: 'normal',\n body: body,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: initialData,\n onChange: function (api, _a) {\n var name = _a.name;\n dialogDelta.onChange(api.getData, { name: name }).each(function (newData) {\n api.setData(newData);\n });\n },\n onSubmit: onSubmit\n };\n };\n var open$1 = function (editor) {\n var data = collectData(editor);\n data.map(function (info) {\n var onSubmit = handleSubmit(editor, info);\n return makeDialog(info, onSubmit, editor);\n }).get(function (spec) {\n editor.windowManager.open(spec);\n });\n };\n var Dialog = { open: open$1 };\n\n var getLink = function (editor, elm) {\n return editor.dom.getParent(elm, 'a[href]');\n };\n var getSelectedLink = function (editor) {\n return getLink(editor, editor.selection.getStart());\n };\n var hasOnlyAltModifier = function (e) {\n return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;\n };\n var gotoLink = function (editor, a) {\n if (a) {\n var href = Utils.getHref(a);\n if (/^#/.test(href)) {\n var targetEl = editor.$(href);\n if (targetEl.length) {\n editor.selection.scrollIntoView(targetEl[0], true);\n }\n } else {\n OpenUrl.open(a.href);\n }\n }\n };\n var openDialog = function (editor) {\n return function () {\n Dialog.open(editor);\n };\n };\n var gotoSelectedLink = function (editor) {\n return function () {\n gotoLink(editor, getSelectedLink(editor));\n };\n };\n var leftClickedOnAHref = function (editor) {\n return function (elm) {\n var sel, rng, node;\n if (Settings.hasContextToolbar(editor) && Utils.isLink(elm)) {\n sel = editor.selection;\n rng = sel.getRng();\n node = rng.startContainer;\n if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) {\n return true;\n }\n }\n return false;\n };\n };\n var setupGotoLinks = function (editor) {\n editor.on('click', function (e) {\n var link = getLink(editor, e.target);\n if (link && global$2.metaKeyPressed(e)) {\n e.preventDefault();\n gotoLink(editor, link);\n }\n });\n editor.on('keydown', function (e) {\n var link = getSelectedLink(editor);\n if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) {\n e.preventDefault();\n gotoLink(editor, link);\n }\n });\n };\n var toggleActiveState = function (editor) {\n return function (api) {\n var nodeChangeHandler = function (e) {\n return api.setActive(!editor.mode.isReadOnly() && !!Utils.getAnchorElement(editor, e.element));\n };\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\n };\n };\n };\n var toggleEnabledState = function (editor) {\n return function (api) {\n var parents = editor.dom.getParents(editor.selection.getStart());\n api.setDisabled(!Utils.hasLinks(parents));\n var nodeChangeHandler = function (e) {\n return api.setDisabled(!Utils.hasLinks(e.parents));\n };\n editor.on('NodeChange', nodeChangeHandler);\n return function () {\n return editor.off('NodeChange', nodeChangeHandler);\n };\n };\n };\n var Actions = {\n openDialog: openDialog,\n gotoSelectedLink: gotoSelectedLink,\n leftClickedOnAHref: leftClickedOnAHref,\n setupGotoLinks: setupGotoLinks,\n toggleActiveState: toggleActiveState,\n toggleEnabledState: toggleEnabledState\n };\n\n var register = function (editor) {\n editor.addCommand('mceLink', function () {\n if (Settings.useQuickLink(editor)) {\n editor.fire('contexttoolbar-show', { toolbarKey: 'quicklink' });\n } else {\n Actions.openDialog(editor)();\n }\n });\n };\n var Commands = { register: register };\n\n var setup = function (editor) {\n editor.addShortcut('Meta+K', '', function () {\n editor.execCommand('mceLink');\n });\n };\n var Keyboard = { setup: setup };\n\n var setupButtons = function (editor) {\n editor.ui.registry.addToggleButton('link', {\n icon: 'link',\n tooltip: 'Insert/edit link',\n onAction: Actions.openDialog(editor),\n onSetup: Actions.toggleActiveState(editor)\n });\n editor.ui.registry.addButton('openlink', {\n icon: 'new-tab',\n tooltip: 'Open link',\n onAction: Actions.gotoSelectedLink(editor),\n onSetup: Actions.toggleEnabledState(editor)\n });\n editor.ui.registry.addButton('unlink', {\n icon: 'unlink',\n tooltip: 'Remove link',\n onAction: function () {\n return Utils.unlink(editor);\n },\n onSetup: Actions.toggleEnabledState(editor)\n });\n };\n var setupMenuItems = function (editor) {\n editor.ui.registry.addMenuItem('openlink', {\n text: 'Open link',\n icon: 'new-tab',\n onAction: Actions.gotoSelectedLink(editor),\n onSetup: Actions.toggleEnabledState(editor)\n });\n editor.ui.registry.addMenuItem('link', {\n icon: 'link',\n text: 'Link...',\n shortcut: 'Meta+K',\n onAction: Actions.openDialog(editor)\n });\n editor.ui.registry.addMenuItem('unlink', {\n icon: 'unlink',\n text: 'Remove link',\n onAction: function () {\n return Utils.unlink(editor);\n },\n onSetup: Actions.toggleEnabledState(editor)\n });\n };\n var setupContextMenu = function (editor) {\n var inLink = 'link unlink openlink';\n var noLink = 'link';\n editor.ui.registry.addContextMenu('link', {\n update: function (element) {\n return Utils.hasLinks(editor.dom.getParents(element, 'a')) ? inLink : noLink;\n }\n });\n };\n var setupContextToolbars = function (editor) {\n var collapseSelectionToEnd = function (editor) {\n editor.selection.collapse(false);\n };\n var onSetupLink = function (buttonApi) {\n var node = editor.selection.getNode();\n buttonApi.setDisabled(!Utils.getAnchorElement(editor, node));\n return function () {\n };\n };\n editor.ui.registry.addContextForm('quicklink', {\n launch: {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n onSetup: Actions.toggleActiveState(editor)\n },\n label: 'Link',\n predicate: function (node) {\n return !!Utils.getAnchorElement(editor, node) && Settings.hasContextToolbar(editor);\n },\n initValue: function () {\n var elm = Utils.getAnchorElement(editor);\n return !!elm ? Utils.getHref(elm) : '';\n },\n commands: [\n {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n primary: true,\n onSetup: function (buttonApi) {\n var node = editor.selection.getNode();\n buttonApi.setActive(!!Utils.getAnchorElement(editor, node));\n return Actions.toggleActiveState(editor)(buttonApi);\n },\n onAction: function (formApi) {\n var anchor = Utils.getAnchorElement(editor);\n var value = formApi.getValue();\n if (!anchor) {\n var attachState = {\n href: value,\n attach: function () {\n }\n };\n var onlyText = Utils.isOnlyTextSelected(editor.selection.getContent());\n var text = onlyText ? Option.some(Utils.getAnchorText(editor.selection, anchor)).filter(function (t) {\n return t.length > 0;\n }).or(Option.from(value)) : Option.none();\n Utils.link(editor, attachState, {\n href: value,\n text: text,\n title: Option.none(),\n rel: Option.none(),\n target: Option.none(),\n class: Option.none()\n });\n formApi.hide();\n } else {\n editor.dom.setAttrib(anchor, 'href', value);\n collapseSelectionToEnd(editor);\n formApi.hide();\n }\n }\n },\n {\n type: 'contextformbutton',\n icon: 'unlink',\n tooltip: 'Remove link',\n onSetup: onSetupLink,\n onAction: function (formApi) {\n Utils.unlink(editor);\n formApi.hide();\n }\n },\n {\n type: 'contextformbutton',\n icon: 'new-tab',\n tooltip: 'Open link',\n onSetup: onSetupLink,\n onAction: function (formApi) {\n Actions.gotoSelectedLink(editor)();\n formApi.hide();\n }\n }\n ]\n });\n };\n var Controls = {\n setupButtons: setupButtons,\n setupMenuItems: setupMenuItems,\n setupContextMenu: setupContextMenu,\n setupContextToolbars: setupContextToolbars\n };\n\n function Plugin () {\n global$1.add('link', function (editor) {\n Controls.setupButtons(editor);\n Controls.setupMenuItems(editor);\n Controls.setupContextMenu(editor);\n Controls.setupContextToolbars(editor);\n Actions.setupGotoLinks(editor);\n Commands.register(editor);\n Keyboard.setup(editor);\n });\n }\n\n Plugin();\n\n}(window));\n","// Exports the \"charmap\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/charmap')\n// ES2015:\n// import 'tinymce/plugins/charmap'\nrequire('./plugin.js');","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar getGlobal = function () { return (typeof window !== 'undefined' ? window : global); };\nvar getTinymce = function () {\n var global = getGlobal();\n return global && global.tinymce ? global.tinymce : null;\n};\nexport { getTinymce };\n","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide-dark//content.inline.min.css\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide//skin.mobile.css\";","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar validEvents = [\n 'onActivate',\n 'onAddUndo',\n 'onBeforeAddUndo',\n 'onBeforeExecCommand',\n 'onBeforeGetContent',\n 'onBeforeRenderUI',\n 'onBeforeSetContent',\n 'onBeforePaste',\n 'onBlur',\n 'onChange',\n 'onClearUndos',\n 'onClick',\n 'onContextMenu',\n 'onCopy',\n 'onCut',\n 'onDblclick',\n 'onDeactivate',\n 'onDirty',\n 'onDrag',\n 'onDragDrop',\n 'onDragEnd',\n 'onDragGesture',\n 'onDragOver',\n 'onDrop',\n 'onExecCommand',\n 'onFocus',\n 'onFocusIn',\n 'onFocusOut',\n 'onGetContent',\n 'onHide',\n 'onInit',\n 'onKeyDown',\n 'onKeyPress',\n 'onKeyUp',\n 'onLoadContent',\n 'onMouseDown',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseMove',\n 'onMouseOut',\n 'onMouseOver',\n 'onMouseUp',\n 'onNodeChange',\n 'onObjectResizeStart',\n 'onObjectResized',\n 'onObjectSelected',\n 'onPaste',\n 'onPostProcess',\n 'onPostRender',\n 'onPreProcess',\n 'onProgressState',\n 'onRedo',\n 'onRemove',\n 'onReset',\n 'onSaveContent',\n 'onSelectionChange',\n 'onSetAttrib',\n 'onSetContent',\n 'onShow',\n 'onSubmit',\n 'onUndo',\n 'onVisualAid'\n];\nvar isValidKey = function (key) { return validEvents.indexOf(key) !== -1; };\nvar bindHandlers = function (initEvent, listeners, editor) {\n Object.keys(listeners)\n .filter(isValidKey)\n .forEach(function (key) {\n var handler = listeners[key];\n if (typeof handler === 'function') {\n if (key === 'onInit') {\n handler(initEvent, editor);\n }\n else {\n editor.on(key.substring(2), function (e) { return handler(e, editor); });\n }\n }\n });\n};\nvar bindModelHandlers = function (ctx, editor) {\n var modelEvents = ctx.$props.modelEvents ? ctx.$props.modelEvents : null;\n var normalizedEvents = Array.isArray(modelEvents) ? modelEvents.join(' ') : modelEvents;\n ctx.$watch('value', function (val, prevVal) {\n if (editor && typeof val === 'string' && val !== prevVal && val !== editor.getContent()) {\n editor.setContent(val);\n }\n });\n editor.on(normalizedEvents ? normalizedEvents : 'change keyup undo redo', function () {\n ctx.$emit('input', editor.getContent({ format: ctx.$props.outputFormat }));\n });\n};\nvar initEditor = function (initEvent, ctx, editor) {\n var value = ctx.$props.value ? ctx.$props.value : '';\n var initialValue = ctx.$props.initialValue ? ctx.$props.initialValue : '';\n editor.setContent(value || initialValue);\n // checks if the v-model shorthand is used (which sets an v-on:input listener) and then binds either\n // specified the events or defaults to \"change keyup\" event and emits the editor content on that event\n if (ctx.$listeners.input) {\n bindModelHandlers(ctx, editor);\n }\n bindHandlers(initEvent, ctx.$listeners, editor);\n};\nvar unique = 0;\nvar uuid = function (prefix) {\n var time = Date.now();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n};\nvar isTextarea = function (element) {\n return element !== null && element.tagName.toLowerCase() === 'textarea';\n};\nvar normalizePluginArray = function (plugins) {\n if (typeof plugins === 'undefined' || plugins === '') {\n return [];\n }\n return Array.isArray(plugins) ? plugins : plugins.split(' ');\n};\nvar mergePlugins = function (initPlugins, inputPlugins) {\n return normalizePluginArray(initPlugins).concat(normalizePluginArray(inputPlugins));\n};\nvar isNullOrUndefined = function (value) { return value === null || value === undefined; };\nexport { bindHandlers, bindModelHandlers, initEditor, uuid, isTextarea, mergePlugins, isNullOrUndefined };\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { uuid } from './Utils';\nvar createState = function () {\n return {\n listeners: [],\n scriptId: uuid('tiny-script'),\n scriptLoaded: false\n };\n};\nvar CreateScriptLoader = function () {\n var state = createState();\n var injectScriptTag = function (scriptId, doc, url, callback) {\n var scriptTag = doc.createElement('script');\n scriptTag.referrerPolicy = 'origin';\n scriptTag.type = 'application/javascript';\n scriptTag.id = scriptId;\n scriptTag.src = url;\n var handler = function () {\n scriptTag.removeEventListener('load', handler);\n callback();\n };\n scriptTag.addEventListener('load', handler);\n if (doc.head) {\n doc.head.appendChild(scriptTag);\n }\n };\n var load = function (doc, url, callback) {\n if (state.scriptLoaded) {\n callback();\n }\n else {\n state.listeners.push(callback);\n if (!doc.getElementById(state.scriptId)) {\n injectScriptTag(state.scriptId, doc, url, function () {\n state.listeners.forEach(function (fn) { return fn(); });\n state.scriptLoaded = true;\n });\n }\n }\n };\n // Only to be used by tests.\n var reinitialize = function () {\n state = createState();\n };\n return {\n load: load,\n reinitialize: reinitialize\n };\n};\nvar ScriptLoader = CreateScriptLoader();\nexport { ScriptLoader };\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nexport var editorProps = {\n apiKey: String,\n cloudChannel: String,\n id: String,\n init: Object,\n initialValue: String,\n inline: Boolean,\n modelEvents: [String, Array],\n plugins: [String, Array],\n tagName: String,\n toolbar: [String, Array],\n value: String,\n disabled: Boolean,\n tinymceScriptSrc: String,\n outputFormat: {\n type: String,\n validator: function (prop) { return prop === 'html' || prop === 'text'; }\n },\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ScriptLoader } from '../ScriptLoader';\nimport { getTinymce } from '../TinyMCE';\nimport { initEditor, isTextarea, mergePlugins, uuid, isNullOrUndefined } from '../Utils';\nimport { editorProps } from './EditorPropTypes';\nvar renderInline = function (h, id, tagName) {\n return h(tagName ? tagName : 'div', {\n attrs: { id: id }\n });\n};\nvar renderIframe = function (h, id) {\n return h('textarea', {\n attrs: { id: id },\n style: { visibility: 'hidden' }\n });\n};\nvar initialise = function (ctx) { return function () {\n var finalInit = __assign(__assign({}, ctx.$props.init), { readonly: ctx.$props.disabled, selector: \"#\" + ctx.elementId, plugins: mergePlugins(ctx.$props.init && ctx.$props.init.plugins, ctx.$props.plugins), toolbar: ctx.$props.toolbar || (ctx.$props.init && ctx.$props.init.toolbar), inline: ctx.inlineEditor, setup: function (editor) {\n ctx.editor = editor;\n editor.on('init', function (e) { return initEditor(e, ctx, editor); });\n if (ctx.$props.init && typeof ctx.$props.init.setup === 'function') {\n ctx.$props.init.setup(editor);\n }\n } });\n if (isTextarea(ctx.element)) {\n ctx.element.style.visibility = '';\n }\n getTinymce().init(finalInit);\n}; };\nexport var Editor = {\n props: editorProps,\n created: function () {\n this.elementId = this.$props.id || uuid('tiny-vue');\n this.inlineEditor = (this.$props.init && this.$props.init.inline) || this.$props.inline;\n },\n watch: {\n disabled: function () {\n this.editor.setMode(this.disabled ? 'readonly' : 'design');\n }\n },\n mounted: function () {\n this.element = this.$el;\n if (getTinymce() !== null) {\n initialise(this)();\n }\n else if (this.element && this.element.ownerDocument) {\n var channel = this.$props.cloudChannel ? this.$props.cloudChannel : '5';\n var apiKey = this.$props.apiKey ? this.$props.apiKey : 'no-api-key';\n var scriptSrc = isNullOrUndefined(this.$props.tinymceScriptSrc) ?\n \"https://cdn.tiny.cloud/1/\" + apiKey + \"/tinymce/\" + channel + \"/tinymce.min.js\" :\n this.$props.tinymceScriptSrc;\n ScriptLoader.load(this.element.ownerDocument, scriptSrc, initialise(this));\n }\n },\n beforeDestroy: function () {\n if (getTinymce() !== null) {\n getTinymce().remove(this.editor);\n }\n },\n render: function (h) {\n return this.inlineEditor ? renderInline(h, this.elementId, this.$props.tagName) : renderIframe(h, this.elementId);\n }\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { Editor } from './components/Editor';\nexport default Editor;\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\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 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 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 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 head = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Option.none();\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\n var exports$1 = {}, module = { 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, undefined));\n var Promise = module.exports.boltExport;\n\n var nu = function (baseFn) {\n var data = Option.none();\n var callbacks = [];\n var map = function (f) {\n return nu(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(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu,\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$1 = 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$1,\n pure: pure$1\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 var wrap = function (delegate) {\n var toCached = function () {\n return wrap(delegate.toCached());\n };\n var bindFuture = function (f) {\n return wrap(delegate.bind(function (resA) {\n return resA.fold(function (err) {\n return Future.pure(Result.error(err));\n }, function (a) {\n return f(a);\n });\n }));\n };\n var bindResult = function (f) {\n return wrap(delegate.map(function (resA) {\n return resA.bind(f);\n }));\n };\n var mapResult = function (f) {\n return wrap(delegate.map(function (resA) {\n return resA.map(f);\n }));\n };\n var mapError = function (f) {\n return wrap(delegate.map(function (resA) {\n return resA.mapError(f);\n }));\n };\n var foldResult = function (whenError, whenValue) {\n return delegate.map(function (res) {\n return res.fold(whenError, whenValue);\n });\n };\n var withTimeout = function (timeout, errorThunk) {\n return wrap(Future.nu(function (callback) {\n var timedOut = false;\n var timer = domGlobals.setTimeout(function () {\n timedOut = true;\n callback(Result.error(errorThunk()));\n }, timeout);\n delegate.get(function (result) {\n if (!timedOut) {\n domGlobals.clearTimeout(timer);\n callback(result);\n }\n });\n }));\n };\n return __assign(__assign({}, delegate), {\n toCached: toCached,\n bindFuture: bindFuture,\n bindResult: bindResult,\n mapResult: mapResult,\n mapError: mapError,\n foldResult: foldResult,\n withTimeout: withTimeout\n });\n };\n var nu$2 = function (worker) {\n return wrap(Future.nu(worker));\n };\n var value$1 = function (value) {\n return wrap(Future.pure(Result.value(value)));\n };\n var error$1 = function (error) {\n return wrap(Future.pure(Result.error(error)));\n };\n var fromResult = function (result) {\n return wrap(Future.pure(result));\n };\n var fromFuture = function (future) {\n return wrap(future.map(Result.value));\n };\n var fromPromise = function (promise) {\n return nu$2(function (completer) {\n promise.then(function (value) {\n completer(Result.value(value));\n }, function (error) {\n completer(Result.error(error));\n });\n });\n };\n var FutureResult = {\n nu: nu$2,\n wrap: wrap,\n pure: value$1,\n value: value$1,\n error: error$1,\n fromResult: fromResult,\n fromFuture: fromFuture,\n fromPromise: fromPromise\n };\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var deep = function (old, nu) {\n var bothObjects = isObject(old) && isObject(nu);\n return bothObjects ? deepMerge(old, nu) : 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 deepMerge = baseMerge(deep);\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 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\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 global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var hasDimensions = function (editor) {\n return editor.getParam('image_dimensions', true, 'boolean');\n };\n var hasAdvTab = function (editor) {\n return editor.getParam('image_advtab', false, 'boolean');\n };\n var hasUploadTab = function (editor) {\n return editor.getParam('image_uploadtab', true, 'boolean');\n };\n var getPrependUrl = function (editor) {\n return editor.getParam('image_prepend_url', '', 'string');\n };\n var getClassList = function (editor) {\n return editor.getParam('image_class_list');\n };\n var hasDescription = function (editor) {\n return editor.getParam('image_description', true, 'boolean');\n };\n var hasImageTitle = function (editor) {\n return editor.getParam('image_title', false, 'boolean');\n };\n var hasImageCaption = function (editor) {\n return editor.getParam('image_caption', false, 'boolean');\n };\n var getImageList = function (editor) {\n return editor.getParam('image_list', false);\n };\n var hasUploadUrl = function (editor) {\n return !!getUploadUrl(editor);\n };\n var hasUploadHandler = function (editor) {\n return !!getUploadHandler(editor);\n };\n var getUploadUrl = function (editor) {\n return editor.getParam('images_upload_url', '', 'string');\n };\n var getUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler', undefined, 'function');\n };\n var getUploadBasePath = function (editor) {\n return editor.getParam('images_upload_base_path', undefined, 'string');\n };\n var getUploadCredentials = function (editor) {\n return editor.getParam('images_upload_credentials', false, 'boolean');\n };\n var showAccessibilityOptions = function (editor) {\n return editor.getParam('a11y_advanced_options', false, 'boolean');\n };\n var isAutomaticUploadsEnabled = function (editor) {\n return editor.getParam('automatic_uploads', true, 'boolean');\n };\n var Settings = {\n hasDimensions: hasDimensions,\n hasUploadTab: hasUploadTab,\n hasAdvTab: hasAdvTab,\n getPrependUrl: getPrependUrl,\n getClassList: getClassList,\n hasDescription: hasDescription,\n hasImageTitle: hasImageTitle,\n hasImageCaption: hasImageCaption,\n getImageList: getImageList,\n hasUploadUrl: hasUploadUrl,\n hasUploadHandler: hasUploadHandler,\n getUploadUrl: getUploadUrl,\n getUploadHandler: getUploadHandler,\n getUploadBasePath: getUploadBasePath,\n getUploadCredentials: getUploadCredentials,\n showAccessibilityOptions: showAccessibilityOptions,\n isAutomaticUploadsEnabled: isAutomaticUploadsEnabled\n };\n\n var parseIntAndGetMax = function (val1, val2) {\n return Math.max(parseInt(val1, 10), parseInt(val2, 10));\n };\n var getImageSize = function (url, callback) {\n var img = domGlobals.document.createElement('img');\n var done = function (dimensions) {\n if (img.parentNode) {\n img.parentNode.removeChild(img);\n }\n callback(dimensions);\n };\n img.onload = function () {\n var width = parseIntAndGetMax(img.width, img.clientWidth);\n var height = parseIntAndGetMax(img.height, img.clientHeight);\n var dimensions = {\n width: width,\n height: height\n };\n done(Result.value(dimensions));\n };\n img.onerror = function () {\n done(Result.error('Failed to get image dimensions for: ' + url));\n };\n var style = img.style;\n style.visibility = 'hidden';\n style.position = 'fixed';\n style.bottom = style.left = '0px';\n style.width = style.height = 'auto';\n domGlobals.document.body.appendChild(img);\n img.src = url;\n };\n var removePixelSuffix = function (value) {\n if (value) {\n value = value.replace(/px$/, '');\n }\n return value;\n };\n var addPixelSuffix = function (value) {\n if (value.length > 0 && /^[0-9]+$/.test(value)) {\n value += 'px';\n }\n return value;\n };\n var mergeMargins = function (css) {\n if (css.margin) {\n var splitMargin = String(css.margin).split(' ');\n switch (splitMargin.length) {\n case 1:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[0];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n css['margin-left'] = css['margin-left'] || splitMargin[0];\n break;\n case 2:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n css['margin-left'] = css['margin-left'] || splitMargin[1];\n break;\n case 3:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n css['margin-left'] = css['margin-left'] || splitMargin[1];\n break;\n case 4:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n css['margin-left'] = css['margin-left'] || splitMargin[3];\n }\n delete css.margin;\n }\n return css;\n };\n var createImageList = function (editor, callback) {\n var imageList = Settings.getImageList(editor);\n if (typeof imageList === 'string') {\n global$4.send({\n url: imageList,\n success: function (text) {\n callback(JSON.parse(text));\n }\n });\n } else if (typeof imageList === 'function') {\n imageList(callback);\n } else {\n callback(imageList);\n }\n };\n var waitLoadImage = function (editor, data, imgElm) {\n var selectImage = function () {\n imgElm.onload = imgElm.onerror = null;\n if (editor.selection) {\n editor.selection.select(imgElm);\n editor.nodeChanged();\n }\n };\n imgElm.onload = function () {\n if (!data.width && !data.height && Settings.hasDimensions(editor)) {\n editor.dom.setAttribs(imgElm, {\n width: String(imgElm.clientWidth),\n height: String(imgElm.clientHeight)\n });\n }\n selectImage();\n };\n imgElm.onerror = selectImage;\n };\n var blobToDataUri = function (blob) {\n return new global$3(function (resolve, reject) {\n var reader = new domGlobals.FileReader();\n reader.onload = function () {\n resolve(reader.result);\n };\n reader.onerror = function () {\n reject(reader.error.message);\n };\n reader.readAsDataURL(blob);\n });\n };\n var isPlaceholderImage = function (imgElm) {\n return imgElm.nodeName === 'IMG' && (imgElm.hasAttribute('data-mce-object') || imgElm.hasAttribute('data-mce-placeholder'));\n };\n var Utils = {\n getImageSize: getImageSize,\n removePixelSuffix: removePixelSuffix,\n addPixelSuffix: addPixelSuffix,\n mergeMargins: mergeMargins,\n createImageList: createImageList,\n waitLoadImage: waitLoadImage,\n blobToDataUri: blobToDataUri,\n isPlaceholderImage: isPlaceholderImage\n };\n\n var DOM = global$2.DOM;\n var getHspace = function (image) {\n if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {\n return Utils.removePixelSuffix(image.style.marginLeft);\n } else {\n return '';\n }\n };\n var getVspace = function (image) {\n if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) {\n return Utils.removePixelSuffix(image.style.marginTop);\n } else {\n return '';\n }\n };\n var getBorder = function (image) {\n if (image.style.borderWidth) {\n return Utils.removePixelSuffix(image.style.borderWidth);\n } else {\n return '';\n }\n };\n var getAttrib = function (image, name) {\n if (image.hasAttribute(name)) {\n return image.getAttribute(name);\n } else {\n return '';\n }\n };\n var getStyle = function (image, name) {\n return image.style[name] ? image.style[name] : '';\n };\n var hasCaption = function (image) {\n return image.parentNode !== null && image.parentNode.nodeName === 'FIGURE';\n };\n var setAttrib = function (image, name, value) {\n image.setAttribute(name, value);\n };\n var wrapInFigure = function (image) {\n var figureElm = DOM.create('figure', { class: 'image' });\n DOM.insertAfter(figureElm, image);\n figureElm.appendChild(image);\n figureElm.appendChild(DOM.create('figcaption', { contentEditable: 'true' }, 'Caption'));\n figureElm.contentEditable = 'false';\n };\n var removeFigure = function (image) {\n var figureElm = image.parentNode;\n DOM.insertAfter(image, figureElm);\n DOM.remove(figureElm);\n };\n var toggleCaption = function (image) {\n if (hasCaption(image)) {\n removeFigure(image);\n } else {\n wrapInFigure(image);\n }\n };\n var normalizeStyle = function (image, normalizeCss) {\n var attrValue = image.getAttribute('style');\n var value = normalizeCss(attrValue !== null ? attrValue : '');\n if (value.length > 0) {\n image.setAttribute('style', value);\n image.setAttribute('data-mce-style', value);\n } else {\n image.removeAttribute('style');\n }\n };\n var setSize = function (name, normalizeCss) {\n return function (image, name, value) {\n if (image.style[name]) {\n image.style[name] = Utils.addPixelSuffix(value);\n normalizeStyle(image, normalizeCss);\n } else {\n setAttrib(image, name, value);\n }\n };\n };\n var getSize = function (image, name) {\n if (image.style[name]) {\n return Utils.removePixelSuffix(image.style[name]);\n } else {\n return getAttrib(image, name);\n }\n };\n var setHspace = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.marginLeft = pxValue;\n image.style.marginRight = pxValue;\n };\n var setVspace = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.marginTop = pxValue;\n image.style.marginBottom = pxValue;\n };\n var setBorder = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.borderWidth = pxValue;\n };\n var setBorderStyle = function (image, value) {\n image.style.borderStyle = value;\n };\n var getBorderStyle = function (image) {\n return getStyle(image, 'borderStyle');\n };\n var isFigure = function (elm) {\n return elm.nodeName === 'FIGURE';\n };\n var isImage = function (elm) {\n return elm.nodeName === 'IMG';\n };\n var getIsDecorative = function (image) {\n return DOM.getAttrib(image, 'alt').length === 0 && DOM.getAttrib(image, 'role') === 'presentation';\n };\n var getAlt = function (image) {\n if (getIsDecorative(image)) {\n return '';\n } else {\n return getAttrib(image, 'alt');\n }\n };\n var defaultData = function () {\n return {\n src: '',\n alt: '',\n title: '',\n width: '',\n height: '',\n class: '',\n style: '',\n caption: false,\n hspace: '',\n vspace: '',\n border: '',\n borderStyle: '',\n isDecorative: false\n };\n };\n var getStyleValue = function (normalizeCss, data) {\n var image = domGlobals.document.createElement('img');\n setAttrib(image, 'style', data.style);\n if (getHspace(image) || data.hspace !== '') {\n setHspace(image, data.hspace);\n }\n if (getVspace(image) || data.vspace !== '') {\n setVspace(image, data.vspace);\n }\n if (getBorder(image) || data.border !== '') {\n setBorder(image, data.border);\n }\n if (getBorderStyle(image) || data.borderStyle !== '') {\n setBorderStyle(image, data.borderStyle);\n }\n return normalizeCss(image.getAttribute('style'));\n };\n var create = function (normalizeCss, data, info) {\n var image = domGlobals.document.createElement('img');\n write(normalizeCss, __assign(__assign({}, data), { caption: false }), image, info);\n setAlt(image, data.alt, data.isDecorative, info);\n if (data.caption) {\n var figure = DOM.create('figure', { class: 'image' });\n figure.appendChild(image);\n figure.appendChild(DOM.create('figcaption', { contentEditable: 'true' }, 'Caption'));\n figure.contentEditable = 'false';\n return figure;\n } else {\n return image;\n }\n };\n var read = function (normalizeCss, image) {\n return {\n src: getAttrib(image, 'src'),\n alt: getAlt(image),\n title: getAttrib(image, 'title'),\n width: getSize(image, 'width'),\n height: getSize(image, 'height'),\n class: getAttrib(image, 'class'),\n style: normalizeCss(getAttrib(image, 'style')),\n caption: hasCaption(image),\n hspace: getHspace(image),\n vspace: getVspace(image),\n border: getBorder(image),\n borderStyle: getStyle(image, 'borderStyle'),\n isDecorative: getIsDecorative(image)\n };\n };\n var updateProp = function (image, oldData, newData, name, set) {\n if (newData[name] !== oldData[name]) {\n set(image, name, newData[name]);\n }\n };\n var setAlt = function (image, alt, isDecorative, info) {\n if (isDecorative) {\n DOM.setAttrib(image, 'role', 'presentation');\n var sugarImage = Element.fromDom(image);\n set(sugarImage, 'alt', '');\n } else {\n if (info.hasAccessibilityOptions) {\n DOM.setAttrib(image, 'alt', alt);\n } else {\n var sugarImage = Element.fromDom(image);\n set(sugarImage, 'alt', alt);\n }\n if (DOM.getAttrib(image, 'role') === 'presentation') {\n DOM.setAttrib(image, 'role', '');\n }\n }\n };\n var updateAlt = function (image, oldData, newData, info) {\n if (newData.alt !== oldData.alt || newData.isDecorative !== oldData.isDecorative) {\n setAlt(image, newData.alt, newData.isDecorative, info);\n }\n };\n var normalized = function (set, normalizeCss) {\n return function (image, name, value) {\n set(image, value);\n normalizeStyle(image, normalizeCss);\n };\n };\n var write = function (normalizeCss, newData, image, info) {\n var oldData = read(normalizeCss, image);\n updateProp(image, oldData, newData, 'caption', function (image, _name, _value) {\n return toggleCaption(image);\n });\n updateProp(image, oldData, newData, 'src', setAttrib);\n updateProp(image, oldData, newData, 'title', setAttrib);\n updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss));\n updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss));\n updateProp(image, oldData, newData, 'class', setAttrib);\n updateProp(image, oldData, newData, 'style', normalized(function (image, value) {\n return setAttrib(image, 'style', value);\n }, normalizeCss));\n updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss));\n updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss));\n updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss));\n updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss));\n updateAlt(image, oldData, newData, info);\n };\n\n var normalizeCss = function (editor, cssText) {\n var css = editor.dom.styles.parse(cssText);\n var mergedCss = Utils.mergeMargins(css);\n var compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss));\n return editor.dom.styles.serialize(compressed);\n };\n var getSelectedImage = function (editor) {\n var imgElm = editor.selection.getNode();\n var figureElm = editor.dom.getParent(imgElm, 'figure.image');\n if (figureElm) {\n return editor.dom.select('img', figureElm)[0];\n }\n if (imgElm && (imgElm.nodeName !== 'IMG' || Utils.isPlaceholderImage(imgElm))) {\n return null;\n }\n return imgElm;\n };\n var splitTextBlock = function (editor, figure) {\n var dom = editor.dom;\n var textBlock = dom.getParent(figure.parentNode, function (node) {\n return !!editor.schema.getTextBlockElements()[node.nodeName];\n }, editor.getBody());\n if (textBlock) {\n return dom.split(textBlock, figure);\n } else {\n return figure;\n }\n };\n var readImageDataFromSelection = function (editor) {\n var image = getSelectedImage(editor);\n return image ? read(function (css) {\n return normalizeCss(editor, css);\n }, image) : defaultData();\n };\n var insertImageAtCaret = function (editor, data, info) {\n var elm = create(function (css) {\n return normalizeCss(editor, css);\n }, data, info);\n editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew');\n editor.focus();\n editor.selection.setContent(elm.outerHTML);\n var insertedElm = editor.dom.select('*[data-mce-id=\"__mcenew\"]')[0];\n editor.dom.setAttrib(insertedElm, 'data-mce-id', null);\n if (isFigure(insertedElm)) {\n var figure = splitTextBlock(editor, insertedElm);\n editor.selection.select(figure);\n } else {\n editor.selection.select(insertedElm);\n }\n };\n var syncSrcAttr = function (editor, image) {\n editor.dom.setAttrib(image, 'src', image.getAttribute('src'));\n };\n var deleteImage = function (editor, image) {\n if (image) {\n var elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image;\n editor.dom.remove(elm);\n editor.focus();\n editor.nodeChanged();\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n }\n }\n };\n var writeImageDataToSelection = function (editor, data, info) {\n var image = getSelectedImage(editor);\n write(function (css) {\n return normalizeCss(editor, css);\n }, data, image, info);\n syncSrcAttr(editor, image);\n if (isFigure(image.parentNode)) {\n var figure = image.parentNode;\n splitTextBlock(editor, figure);\n editor.selection.select(image.parentNode);\n } else {\n editor.selection.select(image);\n Utils.waitLoadImage(editor, data, image);\n }\n };\n var insertOrUpdateImage = function (editor, data, info) {\n var image = getSelectedImage(editor);\n if (image) {\n if (data.src) {\n writeImageDataToSelection(editor, data, info);\n } else {\n deleteImage(editor, image);\n }\n } else if (data.src) {\n insertImageAtCaret(editor, data, info);\n }\n };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getValue = function (item) {\n return isString(item.value) ? item.value : '';\n };\n var sanitizeList = function (list, extractValue) {\n var out = [];\n global$5.each(list, function (item) {\n var text = isString(item.text) ? item.text : isString(item.title) ? item.title : '';\n if (item.menu !== undefined) {\n var items = sanitizeList(item.menu, extractValue);\n out.push({\n text: text,\n items: items\n });\n } else {\n var value = extractValue(item);\n out.push({\n text: text,\n value: value\n });\n }\n });\n return out;\n };\n var sanitizer = function (extracter) {\n if (extracter === void 0) {\n extracter = getValue;\n }\n return function (list) {\n if (list) {\n return Option.from(list).map(function (list) {\n return sanitizeList(list, extracter);\n });\n } else {\n return Option.none();\n }\n };\n };\n var sanitize = function (list) {\n return sanitizer(getValue)(list);\n };\n var isGroup = function (item) {\n return Object.prototype.hasOwnProperty.call(item, 'items');\n };\n var findEntryDelegate = function (list, value) {\n return findMap(list, function (item) {\n if (isGroup(item)) {\n return findEntryDelegate(item.items, value);\n } else if (item.value === value) {\n return Option.some(item);\n } else {\n return Option.none();\n }\n });\n };\n var findEntry = function (optList, value) {\n return optList.bind(function (list) {\n return findEntryDelegate(list, value);\n });\n };\n var ListUtils = {\n sanitizer: sanitizer,\n sanitize: sanitize,\n findEntry: findEntry\n };\n\n var pathJoin = function (path1, path2) {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n function Uploader (settings) {\n var defaultHandler = function (blobInfo, success, failure, progress) {\n var xhr, formData;\n xhr = new domGlobals.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 uploadBlob = function (blobInfo, handler) {\n return new global$3(function (resolve, reject) {\n try {\n handler(blobInfo, resolve, reject, noop);\n } catch (ex) {\n reject(ex.message);\n }\n });\n };\n var isDefaultHandler = function (handler) {\n return handler === defaultHandler;\n };\n var upload = function (blobInfo) {\n return !settings.url && isDefaultHandler(settings.handler) ? global$3.reject('Upload url missing from the settings.') : uploadBlob(blobInfo, settings.handler);\n };\n settings = global$5.extend({\n credentials: false,\n handler: defaultHandler\n }, settings);\n return { upload: upload };\n }\n\n var makeTab = function (info) {\n return {\n title: 'Advanced',\n name: 'advanced',\n items: [\n {\n type: 'input',\n label: 'Style',\n name: 'style'\n },\n {\n type: 'grid',\n columns: 2,\n items: [\n {\n type: 'input',\n label: 'Vertical space',\n name: 'vspace',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n label: 'Horizontal space',\n name: 'hspace',\n inputMode: 'numeric'\n },\n {\n type: 'input',\n label: 'Border width',\n name: 'border',\n inputMode: 'numeric'\n },\n {\n type: 'selectbox',\n name: 'borderstyle',\n label: 'Border style',\n items: [\n {\n text: 'Select...',\n value: ''\n },\n {\n text: 'Solid',\n value: 'solid'\n },\n {\n text: 'Dotted',\n value: 'dotted'\n },\n {\n text: 'Dashed',\n value: 'dashed'\n },\n {\n text: 'Double',\n value: 'double'\n },\n {\n text: 'Groove',\n value: 'groove'\n },\n {\n text: 'Ridge',\n value: 'ridge'\n },\n {\n text: 'Inset',\n value: 'inset'\n },\n {\n text: 'Outset',\n value: 'outset'\n },\n {\n text: 'None',\n value: 'none'\n },\n {\n text: 'Hidden',\n value: 'hidden'\n }\n ]\n }\n ]\n }\n ]\n };\n };\n var AdvTab = { makeTab: makeTab };\n\n var collect = function (editor) {\n var urlListSanitizer = ListUtils.sanitizer(function (item) {\n return editor.convertURL(item.value || item.url, 'src');\n });\n var futureImageList = Future.nu(function (completer) {\n Utils.createImageList(editor, function (imageList) {\n completer(urlListSanitizer(imageList).map(function (items) {\n return flatten([\n [{\n text: 'None',\n value: ''\n }],\n items\n ]);\n }));\n });\n });\n var classList = ListUtils.sanitize(Settings.getClassList(editor));\n var hasAdvTab = Settings.hasAdvTab(editor);\n var hasUploadTab = Settings.hasUploadTab(editor);\n var hasUploadUrl = Settings.hasUploadUrl(editor);\n var hasUploadHandler = Settings.hasUploadHandler(editor);\n var image = readImageDataFromSelection(editor);\n var hasDescription = Settings.hasDescription(editor);\n var hasImageTitle = Settings.hasImageTitle(editor);\n var hasDimensions = Settings.hasDimensions(editor);\n var hasImageCaption = Settings.hasImageCaption(editor);\n var hasAccessibilityOptions = Settings.showAccessibilityOptions(editor);\n var url = Settings.getUploadUrl(editor);\n var basePath = Settings.getUploadBasePath(editor);\n var credentials = Settings.getUploadCredentials(editor);\n var handler = Settings.getUploadHandler(editor);\n var automaticUploads = Settings.isAutomaticUploadsEnabled(editor);\n var prependURL = Option.some(Settings.getPrependUrl(editor)).filter(function (preUrl) {\n return isString(preUrl) && preUrl.length > 0;\n });\n return futureImageList.map(function (imageList) {\n return {\n image: image,\n imageList: imageList,\n classList: classList,\n hasAdvTab: hasAdvTab,\n hasUploadTab: hasUploadTab,\n hasUploadUrl: hasUploadUrl,\n hasUploadHandler: hasUploadHandler,\n hasDescription: hasDescription,\n hasImageTitle: hasImageTitle,\n hasDimensions: hasDimensions,\n hasImageCaption: hasImageCaption,\n url: url,\n basePath: basePath,\n credentials: credentials,\n handler: handler,\n prependURL: prependURL,\n hasAccessibilityOptions: hasAccessibilityOptions,\n automaticUploads: automaticUploads\n };\n });\n };\n\n var makeItems = function (info) {\n var imageUrl = {\n name: 'src',\n type: 'urlinput',\n filetype: 'image',\n label: 'Source'\n };\n var imageList = info.imageList.map(function (items) {\n return {\n name: 'images',\n type: 'selectbox',\n label: 'Image list',\n items: items\n };\n });\n var imageDescription = {\n name: 'alt',\n type: 'input',\n label: 'Alternative description',\n disabled: info.hasAccessibilityOptions && info.image.isDecorative\n };\n var imageTitle = {\n name: 'title',\n type: 'input',\n label: 'Image title'\n };\n var imageDimensions = {\n name: 'dimensions',\n type: 'sizeinput'\n };\n var isDecorative = {\n type: 'label',\n label: 'Accessibility',\n items: [{\n name: 'isDecorative',\n type: 'checkbox',\n label: 'Image is decorative'\n }]\n };\n var classList = info.classList.map(function (items) {\n return {\n name: 'classes',\n type: 'selectbox',\n label: 'Class',\n items: items\n };\n });\n var caption = {\n type: 'label',\n label: 'Caption',\n items: [{\n type: 'checkbox',\n name: 'caption',\n label: 'Show caption'\n }]\n };\n return flatten([\n [imageUrl],\n imageList.toArray(),\n info.hasAccessibilityOptions && info.hasDescription ? [isDecorative] : [],\n info.hasDescription ? [imageDescription] : [],\n info.hasImageTitle ? [imageTitle] : [],\n info.hasDimensions ? [imageDimensions] : [],\n [{\n type: 'grid',\n columns: 2,\n items: flatten([\n classList.toArray(),\n info.hasImageCaption ? [caption] : []\n ])\n }]\n ]);\n };\n var makeTab$1 = function (info) {\n return {\n title: 'General',\n name: 'general',\n items: makeItems(info)\n };\n };\n var MainTab = {\n makeTab: makeTab$1,\n makeItems: makeItems\n };\n\n var makeTab$2 = function (info) {\n var items = [{\n type: 'dropzone',\n name: 'fileinput'\n }];\n return {\n title: 'Upload',\n name: 'upload',\n items: items\n };\n };\n var UploadTab = { makeTab: makeTab$2 };\n\n var createState = function (info) {\n return {\n prevImage: ListUtils.findEntry(info.imageList, info.image.src),\n prevAlt: info.image.alt,\n open: true\n };\n };\n var fromImageData = function (image) {\n return {\n src: {\n value: image.src,\n meta: {}\n },\n images: image.src,\n alt: image.alt,\n title: image.title,\n dimensions: {\n width: image.width,\n height: image.height\n },\n classes: image.class,\n caption: image.caption,\n style: image.style,\n vspace: image.vspace,\n border: image.border,\n hspace: image.hspace,\n borderstyle: image.borderStyle,\n fileinput: [],\n isDecorative: image.isDecorative\n };\n };\n var toImageData = function (data) {\n return {\n src: data.src.value,\n alt: data.alt,\n title: data.title,\n width: data.dimensions.width,\n height: data.dimensions.height,\n class: data.classes,\n style: data.style,\n caption: data.caption,\n hspace: data.hspace,\n vspace: data.vspace,\n border: data.border,\n borderStyle: data.borderstyle,\n isDecorative: data.isDecorative\n };\n };\n var addPrependUrl2 = function (info, srcURL) {\n if (!/^(?:[a-zA-Z]+:)?\\/\\//.test(srcURL)) {\n return info.prependURL.bind(function (prependUrl) {\n if (srcURL.substring(0, prependUrl.length) !== prependUrl) {\n return Option.some(prependUrl + srcURL);\n }\n return Option.none();\n });\n }\n return Option.none();\n };\n var addPrependUrl = function (info, api) {\n var data = api.getData();\n addPrependUrl2(info, data.src.value).each(function (srcURL) {\n api.setData({\n src: {\n value: srcURL,\n meta: data.src.meta\n }\n });\n });\n };\n var formFillFromMeta2 = function (info, data, meta) {\n if (info.hasDescription && isString(meta.alt)) {\n data.alt = meta.alt;\n }\n if (info.hasAccessibilityOptions) {\n data.isDecorative = meta.isDecorative || data.isDecorative || false;\n }\n if (info.hasImageTitle && isString(meta.title)) {\n data.title = meta.title;\n }\n if (info.hasDimensions) {\n if (isString(meta.width)) {\n data.dimensions.width = meta.width;\n }\n if (isString(meta.height)) {\n data.dimensions.height = meta.height;\n }\n }\n if (isString(meta.class)) {\n ListUtils.findEntry(info.classList, meta.class).each(function (entry) {\n data.classes = entry.value;\n });\n }\n if (info.hasImageCaption) {\n if (isBoolean(meta.caption)) {\n data.caption = meta.caption;\n }\n }\n if (info.hasAdvTab) {\n if (isString(meta.style)) {\n data.style = meta.style;\n }\n if (isString(meta.vspace)) {\n data.vspace = meta.vspace;\n }\n if (isString(meta.border)) {\n data.border = meta.border;\n }\n if (isString(meta.hspace)) {\n data.hspace = meta.hspace;\n }\n if (isString(meta.borderstyle)) {\n data.borderstyle = meta.borderstyle;\n }\n }\n };\n var formFillFromMeta = function (info, api) {\n var data = api.getData();\n var meta = data.src.meta;\n if (meta !== undefined) {\n var newData = deepMerge({}, data);\n formFillFromMeta2(info, newData, meta);\n api.setData(newData);\n }\n };\n var calculateImageSize = function (helpers, info, state, api) {\n var data = api.getData();\n var url = data.src.value;\n var meta = data.src.meta || {};\n if (!meta.width && !meta.height && info.hasDimensions) {\n helpers.imageSize(url).get(function (result) {\n result.each(function (size) {\n if (state.open) {\n api.setData({ dimensions: size });\n }\n });\n });\n }\n };\n var updateImagesDropdown = function (info, state, api) {\n var data = api.getData();\n var image = ListUtils.findEntry(info.imageList, data.src.value);\n state.prevImage = image;\n api.setData({\n images: image.map(function (entry) {\n return entry.value;\n }).getOr('')\n });\n };\n var changeSrc = function (helpers, info, state, api) {\n addPrependUrl(info, api);\n formFillFromMeta(info, api);\n calculateImageSize(helpers, info, state, api);\n updateImagesDropdown(info, state, api);\n };\n var changeImages = function (helpers, info, state, api) {\n var data = api.getData();\n var image = ListUtils.findEntry(info.imageList, data.images);\n image.each(function (img) {\n var updateAlt = data.alt === '' || state.prevImage.map(function (image) {\n return image.text === data.alt;\n }).getOr(false);\n if (updateAlt) {\n if (img.value === '') {\n api.setData({\n src: img,\n alt: state.prevAlt\n });\n } else {\n api.setData({\n src: img,\n alt: img.text\n });\n }\n } else {\n api.setData({ src: img });\n }\n });\n state.prevImage = image;\n changeSrc(helpers, info, state, api);\n };\n var calcVSpace = function (css) {\n var matchingTopBottom = css['margin-top'] && css['margin-bottom'] && css['margin-top'] === css['margin-bottom'];\n return matchingTopBottom ? Utils.removePixelSuffix(String(css['margin-top'])) : '';\n };\n var calcHSpace = function (css) {\n var matchingLeftRight = css['margin-right'] && css['margin-left'] && css['margin-right'] === css['margin-left'];\n return matchingLeftRight ? Utils.removePixelSuffix(String(css['margin-right'])) : '';\n };\n var calcBorderWidth = function (css) {\n return css['border-width'] ? Utils.removePixelSuffix(String(css['border-width'])) : '';\n };\n var calcBorderStyle = function (css) {\n return css['border-style'] ? String(css['border-style']) : '';\n };\n var calcStyle = function (parseStyle, serializeStyle, css) {\n return serializeStyle(parseStyle(serializeStyle(css)));\n };\n var changeStyle2 = function (parseStyle, serializeStyle, data) {\n var css = Utils.mergeMargins(parseStyle(data.style));\n var dataCopy = deepMerge({}, data);\n dataCopy.vspace = calcVSpace(css);\n dataCopy.hspace = calcHSpace(css);\n dataCopy.border = calcBorderWidth(css);\n dataCopy.borderstyle = calcBorderStyle(css);\n dataCopy.style = calcStyle(parseStyle, serializeStyle, css);\n return dataCopy;\n };\n var changeStyle = function (helpers, api) {\n var data = api.getData();\n var newData = changeStyle2(helpers.parseStyle, helpers.serializeStyle, data);\n api.setData(newData);\n };\n var changeAStyle = function (helpers, info, api) {\n var data = deepMerge(fromImageData(info.image), api.getData());\n var style = getStyleValue(helpers.normalizeCss, toImageData(data));\n api.setData({ style: style });\n };\n var changeFileInput = function (helpers, info, state, api) {\n var data = api.getData();\n api.block('Uploading image');\n head(data.fileinput).fold(function () {\n api.unblock();\n }, function (file) {\n var blobUri = domGlobals.URL.createObjectURL(file);\n var uploader = Uploader({\n url: info.url,\n basePath: info.basePath,\n credentials: info.credentials,\n handler: info.handler\n });\n var finalize = function () {\n api.unblock();\n domGlobals.URL.revokeObjectURL(blobUri);\n };\n var updateSrcAndSwitchTab = function (url) {\n api.setData({\n src: {\n value: url,\n meta: {}\n }\n });\n api.showTab('general');\n changeSrc(helpers, info, state, api);\n };\n Utils.blobToDataUri(file).then(function (dataUrl) {\n var blobInfo = helpers.createBlobCache(file, blobUri, dataUrl);\n if (info.automaticUploads) {\n uploader.upload(blobInfo).then(function (url) {\n updateSrcAndSwitchTab(url);\n finalize();\n }).catch(function (err) {\n finalize();\n helpers.alertErr(api, err);\n });\n } else {\n helpers.addToBlobCache(blobInfo);\n updateSrcAndSwitchTab(blobInfo.blobUri());\n api.unblock();\n }\n });\n });\n };\n var changeHandler = function (helpers, info, state) {\n return function (api, evt) {\n if (evt.name === 'src') {\n changeSrc(helpers, info, state, api);\n } else if (evt.name === 'images') {\n changeImages(helpers, info, state, api);\n } else if (evt.name === 'alt') {\n state.prevAlt = api.getData().alt;\n } else if (evt.name === 'style') {\n changeStyle(helpers, api);\n } else if (evt.name === 'vspace' || evt.name === 'hspace' || evt.name === 'border' || evt.name === 'borderstyle') {\n changeAStyle(helpers, info, api);\n } else if (evt.name === 'fileinput') {\n changeFileInput(helpers, info, state, api);\n } else if (evt.name === 'isDecorative') {\n if (api.getData().isDecorative) {\n api.disable('alt');\n } else {\n api.enable('alt');\n }\n }\n };\n };\n var closeHandler = function (state) {\n return function () {\n state.open = false;\n };\n };\n var makeDialogBody = function (info) {\n if (info.hasAdvTab || info.hasUploadUrl || info.hasUploadHandler) {\n var tabPanel = {\n type: 'tabpanel',\n tabs: flatten([\n [MainTab.makeTab(info)],\n info.hasAdvTab ? [AdvTab.makeTab(info)] : [],\n info.hasUploadTab && (info.hasUploadUrl || info.hasUploadHandler) ? [UploadTab.makeTab(info)] : []\n ])\n };\n return tabPanel;\n } else {\n var panel = {\n type: 'panel',\n items: MainTab.makeItems(info)\n };\n return panel;\n }\n };\n var makeDialog = function (helpers) {\n return function (info) {\n var state = createState(info);\n return {\n title: 'Insert/Edit Image',\n size: 'normal',\n body: makeDialogBody(info),\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: fromImageData(info.image),\n onSubmit: helpers.onSubmit(info),\n onChange: changeHandler(helpers, info, state),\n onClose: closeHandler(state)\n };\n };\n };\n var submitHandler = function (editor) {\n return function (info) {\n return function (api) {\n var data = deepMerge(fromImageData(info.image), api.getData());\n editor.undoManager.transact(function () {\n insertOrUpdateImage(editor, toImageData(data), info);\n });\n editor.editorUpload.uploadImagesAuto();\n api.close();\n };\n };\n };\n var imageSize = function (editor) {\n return function (url) {\n return FutureResult.nu(function (completer) {\n Utils.getImageSize(editor.documentBaseURI.toAbsolute(url), function (data) {\n var result = data.map(function (dimensions) {\n return {\n width: String(dimensions.width),\n height: String(dimensions.height)\n };\n });\n completer(result);\n });\n });\n };\n };\n var createBlobCache = function (editor) {\n return function (file, blobUri, dataUrl) {\n return editor.editorUpload.blobCache.create({\n blob: file,\n blobUri: blobUri,\n name: file.name ? file.name.replace(/\\.[^\\.]+$/, '') : null,\n base64: dataUrl.split(',')[1]\n });\n };\n };\n var addToBlobCache = function (editor) {\n return function (blobInfo) {\n editor.editorUpload.blobCache.add(blobInfo);\n };\n };\n var alertErr = function (editor) {\n return function (api, message) {\n editor.windowManager.alert(message, api.close);\n };\n };\n var normalizeCss$1 = function (editor) {\n return function (cssText) {\n return normalizeCss(editor, cssText);\n };\n };\n var parseStyle = function (editor) {\n return function (cssText) {\n return editor.dom.parseStyle(cssText);\n };\n };\n var serializeStyle = function (editor) {\n return function (stylesArg, name) {\n return editor.dom.serializeStyle(stylesArg, name);\n };\n };\n var Dialog = function (editor) {\n var helpers = {\n onSubmit: submitHandler(editor),\n imageSize: imageSize(editor),\n addToBlobCache: addToBlobCache(editor),\n createBlobCache: createBlobCache(editor),\n alertErr: alertErr(editor),\n normalizeCss: normalizeCss$1(editor),\n parseStyle: parseStyle(editor),\n serializeStyle: serializeStyle(editor)\n };\n var open = function () {\n return collect(editor).map(makeDialog(helpers)).get(function (spec) {\n editor.windowManager.open(spec);\n });\n };\n return { open: open };\n };\n\n var register = function (editor) {\n editor.addCommand('mceImage', Dialog(editor).open);\n };\n var Commands = { register: register };\n\n var hasImageClass = function (node) {\n var className = node.attr('class');\n return className && /\\bimage\\b/.test(className);\n };\n var toggleContentEditableState = function (state) {\n return function (nodes) {\n var i = nodes.length;\n var toggleContentEditable = function (node) {\n node.attr('contenteditable', state ? 'true' : null);\n };\n while (i--) {\n var node = nodes[i];\n if (hasImageClass(node)) {\n node.attr('contenteditable', state ? 'false' : null);\n global$5.each(node.getAll('figcaption'), toggleContentEditable);\n }\n }\n };\n };\n var setup = function (editor) {\n editor.on('PreInit', function () {\n editor.parser.addNodeFilter('figure', toggleContentEditableState(true));\n editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));\n });\n };\n var FilterContent = { setup: setup };\n\n var register$1 = function (editor) {\n editor.ui.registry.addToggleButton('image', {\n icon: 'image',\n tooltip: 'Insert/edit image',\n onAction: Dialog(editor).open,\n onSetup: function (buttonApi) {\n return editor.selection.selectorChangedWithUnbind('img:not([data-mce-object],[data-mce-placeholder]),figure.image', buttonApi.setActive).unbind;\n }\n });\n editor.ui.registry.addMenuItem('image', {\n icon: 'image',\n text: 'Image...',\n onAction: Dialog(editor).open\n });\n editor.ui.registry.addContextMenu('image', {\n update: function (element) {\n return isFigure(element) || isImage(element) && !Utils.isPlaceholderImage(element) ? ['image'] : [];\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global$1.add('image', function (editor) {\n FilterContent.setup(editor);\n Buttons.register(editor);\n Commands.register(editor);\n });\n }\n\n Plugin();\n\n}(window));\n","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide-dark/fonts//tinymce-mobile.woff\";","// Exports the \"anchor\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/anchor')\n// ES2015:\n// import 'tinymce/plugins/anchor'\nrequire('./plugin.js');","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var register = function (editor) {\n editor.addCommand('mcePrint', function () {\n if (global$1.browser.isIE()) {\n editor.getDoc().execCommand('print', false, null);\n } else {\n editor.getWin().print();\n }\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.ui.registry.addButton('print', {\n icon: 'print',\n tooltip: 'Print',\n onAction: function () {\n return editor.execCommand('mcePrint');\n }\n });\n editor.ui.registry.addMenuItem('print', {\n text: 'Print...',\n icon: 'print',\n onAction: function () {\n return editor.execCommand('mcePrint');\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('print', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n editor.addShortcut('Meta+P', '', 'mcePrint');\n });\n }\n\n Plugin();\n\n}());\n","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide//content.mobile.css\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide-dark//content.mobile.css\";","module.exports = __webpack_public_path__ + \"/tinymce/skins/ui/oxide//content.inline.min.css\";","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\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 return flatten(map(xs, f));\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 keys = Object.keys;\n var hasOwnProperty = Object.hasOwnProperty;\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 var map$1 = 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$1(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each$1(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var bifilter = function (obj, pred) {\n var t = {};\n var f = {};\n internalFilter(obj, pred, objAcc(t), objAcc(f));\n return {\n t: t,\n f: f\n };\n };\n var filter$1 = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var get = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\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 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 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 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 chromeos = 'ChromeOS';\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 isChromeOS: isOS(chromeos, 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 chromeos: constant(chromeos)\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var isDesktop = !isPhone && !isTablet && !iOSwebview;\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 isDesktop: constant(isDesktop)\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 checkRange = function (str, substr, start) {\n if (substr === '') {\n return true;\n }\n if (str.length < substr.length) {\n return false;\n }\n var x = str.substr(start, start + substr.length);\n return x === substr;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var startsWith = function (str, prefix) {\n return checkRange(str, prefix, 0);\n };\n var trim = 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$1(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$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(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$1(uastring, 'chrome') && !contains$1(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$1(uastring, 'msie') || contains$1(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$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(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$1(uastring, 'iphone') || contains$1(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('mac os x'),\n versionRegexes: [/.*?mac\\ 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 name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent, mediaMatch) {\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, mediaMatch);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var mediaMatch = function (query) {\n return domGlobals.window.matchMedia(query).matches;\n };\n var platform = Cell(PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch));\n var detect$3 = function () {\n return platform.get();\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 = 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 };\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, domGlobals.Node.DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\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 ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\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 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 = detect$3().browser;\n var contains$2 = 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 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 = 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(rogue);\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 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(wrapper);\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\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 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 r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: constant(left),\n top: constant(top),\n translate: translate\n };\n };\n var Position = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return Position(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n return a !== undefined ? a : b !== undefined ? b : 0;\n };\n var absolute = function (element) {\n var doc = element.dom().ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom()) {\n return Position(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom();\n var doc = dom.ownerDocument;\n var body = doc.body;\n if (body === dom) {\n return Position(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return Position(0, 0);\n }\n return boxPosition(dom);\n };\n\n var isSafari = detect$3().browser.isSafari();\n var get$1 = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return Position(x, y);\n };\n var to = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var win = doc.defaultView;\n win.scrollTo(x, y);\n };\n var intoView = function (element, alignToTop) {\n if (isSafari && isFunction(element.dom().scrollIntoViewIfNeeded)) {\n element.dom().scrollIntoViewIfNeeded(false);\n } else {\n element.dom().scrollIntoView(alignToTop);\n }\n };\n\n var get$2 = function (_win) {\n var win = _win === undefined ? domGlobals.window : _win;\n return Option.from(win['visualViewport']);\n };\n var bounds = function (x, y, width, height) {\n return {\n x: constant(x),\n y: constant(y),\n width: constant(width),\n height: constant(height),\n right: constant(x + width),\n bottom: constant(y + height)\n };\n };\n var getBounds = function (_win) {\n var win = _win === undefined ? domGlobals.window : _win;\n var doc = win.document;\n var scroll = get$1(Element.fromDom(doc));\n return get$2(win).fold(function () {\n var html = win.document.documentElement;\n var width = html.clientWidth;\n var height = html.clientHeight;\n return bounds(scroll.left(), scroll.top(), width, height);\n }, function (visualViewport) {\n return bounds(Math.max(visualViewport.pageLeft, scroll.left()), Math.max(visualViewport.pageTop, scroll.top()), visualViewport.width, visualViewport.height);\n });\n };\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 lowercasedNames = names.map(function (s) {\n return s.toLowerCase();\n });\n return function (node) {\n if (node && node.nodeName) {\n var nodeName = node.nodeName.toLowerCase();\n return contains(lowercasedNames, nodeName);\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 isTextareaOrInput = matchNodeNames([\n 'textarea',\n 'input'\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 = 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,\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 isTextareaOrInput: isTextareaOrInput\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\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$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get$3 = function (element, key) {\n var v = element.dom().getAttribute(key);\n return v === null ? undefined : v;\n };\n var getOpt = function (element, key) {\n return Option.from(get$3(element, key));\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$1 = function (element, key) {\n element.dom().removeAttribute(key);\n };\n\n var get$4 = 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 var reflow = function (e) {\n return e.dom().offsetWidth;\n };\n\n var browser$1 = detect$3().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 hasChild = function (elm, child) {\n return elm.children && contains(elm.children, child);\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$4(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 && !hasChild(offsetParent, rootElm)) {\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 && !hasChild(offsetParent, rootElm)) {\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$1 = { 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 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 domGlobals.setImmediate === 'function' && domGlobals.setImmediate || function (fn) {\n domGlobals.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 domGlobals.setTimeout(callback, time);\n };\n var wrappedSetInterval = function (callback, time) {\n if (typeof time !== 'number') {\n time = 1;\n }\n return domGlobals.setInterval(callback, time);\n };\n var wrappedClearTimeout = function (id) {\n return domGlobals.clearTimeout(id);\n };\n var wrappedClearInterval = function (id) {\n return domGlobals.clearInterval(id);\n };\n var debounce = function (callback, time) {\n var timer, func;\n func = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n domGlobals.clearTimeout(timer);\n timer = wrappedSetTimeout(function () {\n callback.apply(this, args);\n }, time);\n };\n func.stop = function () {\n domGlobals.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 domGlobals.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 userAgent = domGlobals.navigator.userAgent;\n var platform$1 = detect$3();\n var browser$2 = platform$1.browser;\n var os = platform$1.os;\n var deviceType = platform$1.deviceType;\n var webkit = /WebKit/.test(userAgent) && !browser$2.isEdge();\n var fileApi = 'FormData' in domGlobals.window && 'FileReader' in domGlobals.window && 'URL' in domGlobals.window && !!domGlobals.URL.createObjectURL;\n var windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n var Env = {\n opera: browser$2.isOpera(),\n webkit: webkit,\n ie: browser$2.isIE() || browser$2.isEdge() ? browser$2.version.major : false,\n gecko: browser$2.isFirefox(),\n mac: os.isOSX() || os.isiOS(),\n iOS: deviceType.isiPad() || deviceType.isiPhone(),\n android: os.isAndroid(),\n contentEditable: true,\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n caretAfter: true,\n range: domGlobals.window.getSelection && 'Range' in domGlobals.window,\n documentMode: browser$2.isIE() ? domGlobals.document.documentMode || 7 : 10,\n fileApi: fileApi,\n ceFalse: true,\n cacheSuffix: null,\n container: null,\n experimentalShadowDom: false,\n canHaveCSP: !browser$2.isIE(),\n desktop: deviceType.isDesktop(),\n windowsPhone: windowsPhone,\n browser: {\n current: browser$2.current,\n version: browser$2.version,\n isChrome: browser$2.isChrome,\n isEdge: browser$2.isEdge,\n isFirefox: browser$2.isFirefox,\n isIE: browser$2.isIE,\n isOpera: browser$2.isOpera,\n isSafari: browser$2.isSafari\n },\n os: {\n current: os.current,\n version: os.version,\n isAndroid: os.isAndroid,\n isChromeOS: os.isChromeOS,\n isFreeBSD: os.isFreeBSD,\n isiOS: os.isiOS,\n isLinux: os.isLinux,\n isOSX: os.isOSX,\n isSolaris: os.isSolaris,\n isWindows: os.isWindows\n },\n deviceType: {\n isDesktop: deviceType.isDesktop,\n isiPad: deviceType.isiPad,\n isiPhone: deviceType.isiPhone,\n isPhone: deviceType.isPhone,\n isTablet: deviceType.isTablet,\n isTouch: deviceType.isTouch,\n isWebView: deviceType.isWebView\n }\n };\n\n var isArray$1 = Array.isArray;\n var toArray$1 = 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$2 = 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$2 = function (array, callback) {\n var out = [];\n each$2(array, function (item, index) {\n out.push(callback(item, index, array));\n });\n return out;\n };\n var filter$2 = function (a, f) {\n var o = [];\n each$2(a, function (v, index) {\n if (!f || f(v, index, a)) {\n o.push(v);\n }\n });\n return o;\n };\n var indexOf$1 = 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$2 = 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$1,\n each: each$2,\n map: map$2,\n filter: filter$2,\n indexOf: indexOf$1,\n reduce: reduce,\n findIndex: findIndex$1,\n find: find$2,\n last: last$1\n };\n\n var whiteSpaceRegExp = /^\\s*|\\s*$/g;\n var trim$1 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');\n };\n var is$1 = 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$1 = 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 = 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$1(s, 'array')) {\n return s;\n }\n return ArrUtils.map(s.split(d || ','), trim$1);\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$1,\n isArray: ArrUtils.isArray,\n is: is$1,\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$1,\n extend: extend,\n create: create,\n walk: walk,\n createNS: createNS,\n resolve: resolve,\n explode: explode,\n _addCacheSuffix: _addCacheSuffix\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 _setReferrerPolicy = function (referrerPolicy) {\n settings.referrerPolicy = referrerPolicy;\n };\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 resolve = function (status) {\n state.status = status;\n state.passed = [];\n state.failed = [];\n if (link) {\n link.onload = null;\n link.onerror = null;\n link = null;\n }\n };\n var passed = function () {\n var callbacks = state.passed;\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\n resolve(2);\n };\n var failed = function () {\n var callbacks = state.failed;\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\n resolve(3);\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 (settings.referrerPolicy) {\n set(Element.fromDom(link), 'referrerpolicy', settings.referrerPolicy);\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 _setReferrerPolicy: _setReferrerPolicy\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 isTable$1 = function (node) {\n return name(node) === 'table';\n };\n var isInline = function (node) {\n return isElement(node) && !isBlock(node);\n };\n var isBr$1 = 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 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 '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '&': '&',\n '`': '`'\n };\n reverseEntities = {\n '<': '<',\n '>': '>',\n '&': '&',\n '"': '\"',\n ''': '\\''\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$3 = Tools.each, extend$1 = Tools.extend, explode$1 = Tools.explode, inArray = 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$3(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$3(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');\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('img', 'loading');\n addAttrs('iframe', 'sandbox seamless allowfullscreen loading');\n }\n each$3(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$3(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$3((settings.special || 'script noscript noframes noembed title style textarea xmp').split(' '), function (name) {\n specialElements[name] = new RegExp(']*>', '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(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$3(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$3(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$3(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$3(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$3(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$3(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$3(split('strong/b em/i'), function (item) {\n item = split(item, '/');\n elements[item[1]].outputName = item[0];\n });\n }\n each$3(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$3(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$3(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$3({\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$3(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 zeroWidth = '\\uFEFF';\n var nbsp = '\\xA0';\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 var Styles = function (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 = zeroWidth;\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 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 mozPressure: 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 removeEvent(win, 'DOMContentLoaded', readyHandler);\n removeEvent(win, 'load', readyHandler);\n if (!eventUtils.domLoaded) {\n eventUtils.domLoaded = true;\n callback(event);\n }\n };\n if (isDocReady()) {\n readyHandler();\n } else {\n addEvent(win, 'DOMContentLoaded', readyHandler);\n }\n addEvent(win, 'load', readyHandler);\n };\n var EventUtils = function () {\n function EventUtils() {\n this.domLoaded = false;\n this.events = {};\n this.count = 1;\n this.expando = eventExpandoPrefix + (+new Date()).toString(32);\n this.hasMouseEnterLeave = 'onmouseenter' in domGlobals.document.documentElement;\n this.hasFocusIn = 'onfocusin' in domGlobals.document.documentElement;\n this.count = 1;\n }\n EventUtils.prototype.bind = function (target, names, callback, scope) {\n var self = this;\n var id, callbackList, i, name, fakeName, nativeHandler, capture;\n var win = domGlobals.window;\n var defaultNativeHandler = function (evt) {\n self.executeHandlers(fix(evt || win.event), id);\n };\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return;\n }\n if (!target[self.expando]) {\n id = self.count++;\n target[self.expando] = id;\n self.events[id] = {};\n } else {\n id = target[self.expando];\n }\n scope = scope || target;\n var namesList = names.split(' ');\n i = namesList.length;\n while (i--) {\n name = namesList[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 (!self.hasMouseEnterLeave) {\n fakeName = self.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 self.executeHandlers(evt, id);\n }\n };\n }\n }\n if (!self.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 self.executeHandlers(evt, id);\n };\n }\n callbackList = self.events[id][name];\n if (!callbackList) {\n self.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(fix({ 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 EventUtils.prototype.unbind = function (target, names, callback) {\n var id, callbackList, i, ci, name, eventMap;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return this;\n }\n id = target[this.expando];\n if (id) {\n eventMap = this.events[id];\n if (names) {\n var namesList = names.split(' ');\n i = namesList.length;\n while (i--) {\n name = namesList[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 this;\n }\n delete this.events[id];\n try {\n delete target[this.expando];\n } catch (ex) {\n target[this.expando] = null;\n }\n }\n return this;\n };\n EventUtils.prototype.fire = function (target, name, args) {\n var id;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return this;\n }\n var event = fix(null, args);\n event.type = name;\n event.target = target;\n do {\n id = target[this.expando];\n if (id) {\n this.executeHandlers(event, id);\n }\n target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n } while (target && !event.isPropagationStopped());\n return this;\n };\n EventUtils.prototype.clean = function (target) {\n var i, children;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return this;\n }\n if (target[this.expando]) {\n this.unbind(target);\n }\n if (!target.getElementsByTagName) {\n target = target.document;\n }\n if (target && target.getElementsByTagName) {\n this.unbind(target);\n children = target.getElementsByTagName('*');\n i = children.length;\n while (i--) {\n target = children[i];\n if (target[this.expando]) {\n this.unbind(target);\n }\n }\n }\n return this;\n };\n EventUtils.prototype.destroy = function () {\n this.events = {};\n };\n EventUtils.prototype.cancel = function (e) {\n if (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n return false;\n };\n EventUtils.prototype.executeHandlers = function (evt, id) {\n var callbackList, i, l, callback;\n var container = this.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 EventUtils.Event = new EventUtils();\n return EventUtils;\n }();\n\n var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains$3, 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$2 = 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$3(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$3 = 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$3(preferredDoc, a)) {\n return -1;\n }\n if (b === doc || b.ownerDocument === preferredDoc && contains$3(preferredDoc, b)) {\n return 1;\n }\n return sortInput ? indexOf$2.call(sortInput, a) - indexOf$2.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$2.call(sortInput, a) - indexOf$2.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$3(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$2.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 (!Expr.filter.hasOwnProperty(type))\n continue;\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$2.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$2.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 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$1 = 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 DomQueryConstructor = function (selector, context) {\n return new DomQuery.fn.init(selector, context);\n };\n var inArray$1 = 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$2 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\n };\n var each$4 = 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$4(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 DomQueryConstructor.fn = DomQueryConstructor.prototype = {\n constructor: DomQueryConstructor,\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$4(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$4(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$4(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$1(this, content);\n },\n wrapAll: function (content) {\n return wrap$1(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$4(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$2((' ' + 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$4(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: Array.prototype.sort,\n splice: Array.prototype.splice\n };\n Tools.extend(DomQueryConstructor, {\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$1,\n isArray: Tools.isArray,\n each: each$4,\n trim: trim$2,\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$4({\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 DomQueryConstructor.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 var wrappedResult = DomQuery(result);\n if (selector) {\n return wrappedResult.filter(selector);\n }\n return wrappedResult;\n };\n });\n each$4({\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 DomQueryConstructor.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 var wrappedResult = DomQuery(result);\n if (filter) {\n return wrappedResult.filter(filter);\n }\n return wrappedResult;\n };\n });\n DomQueryConstructor.fn.is = function (selector) {\n return !!selector && this.filter(selector).length > 0;\n };\n DomQueryConstructor.fn.init.prototype = DomQueryConstructor.fn;\n DomQueryConstructor.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 DomQueryConstructor.attrHooks = attrHooks;\n DomQueryConstructor.cssHooks = cssHooks;\n var DomQuery = DomQueryConstructor;\n\n var TreeWalker = function () {\n function TreeWalker(startNode, rootNode) {\n this.node = startNode;\n this.rootNode = rootNode;\n this.current = this.current.bind(this);\n this.next = this.next.bind(this);\n this.prev = this.prev.bind(this);\n this.prev2 = this.prev2.bind(this);\n }\n TreeWalker.prototype.current = function () {\n return this.node;\n };\n TreeWalker.prototype.next = function (shallow) {\n this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow);\n return this.node;\n };\n TreeWalker.prototype.prev = function (shallow) {\n this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n };\n TreeWalker.prototype.prev2 = function (shallow) {\n this.node = this.findPreviousNode(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n };\n TreeWalker.prototype.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 !== this.rootNode) {\n sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (parent = node.parentNode; parent && parent !== this.rootNode; parent = parent.parentNode) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n }\n };\n TreeWalker.prototype.findPreviousNode = function (node, startName, siblingName, shallow) {\n var sibling, parent, child;\n if (node) {\n sibling = node[siblingName];\n if (this.rootNode && sibling === this.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 !== this.rootNode) {\n return parent;\n }\n }\n };\n return TreeWalker;\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 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 var 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 if (value !== null && typeof value === 'string') {\n $elm.removeAttr('style');\n $elm.css(styles.parse(value));\n } else {\n $elm.attr('style', value);\n }\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, {\n contentCssCors: settings.contentCssCors,\n referrerPolicy: settings.referrerPolicy\n });\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() : 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 vp = getBounds(argWin);\n return {\n x: vp.x(),\n y: vp.y(),\n w: vp.width(),\n h: vp.height()\n };\n };\n var getPos = function (elm, rootElm) {\n return Position$1.getPos(doc.body, get(elm), rootElm);\n };\n var setStyle = function (elm, name, value) {\n var $elm = isString(name) ? $$(elm).css(name, value) : $$(elm).css(name);\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.browser.isIE() ? '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 = '
    ' + html;\n target.removeChild(target.firstChild);\n } catch (ex) {\n DomQuery('
    ').html('
    ' + 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 + '';\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', __assign(__assign({\n rel: 'stylesheet',\n type: 'text/css',\n href: url\n }, settings.contentCssCors ? { crossOrigin: 'anonymous' } : {}), settings.referrerPolicy ? { referrerPolicy: settings.referrerPolicy } : {}));\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('
    ').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 isNonEmptyElement = function (node) {\n if (NodeType.isElement(node)) {\n var isNamedAnchor = node.nodeName.toLowerCase() === 'a' && !getAttrib(node, 'href') && getAttrib(node, 'id');\n if (getAttrib(node, 'name') || getAttrib(node, 'data-mce-bookmark') || isNamedAnchor) {\n return true;\n }\n }\n return false;\n };\n var isEmpty = function (node, elements) {\n var type, name, brCount = 0;\n if (isNonEmptyElement(node)) {\n return false;\n }\n node = node.firstChild;\n if (node) {\n var walker = new TreeWalker(node, node.parentNode);\n var whitespace = schema ? schema.getWhiteSpaceElements() : {};\n elements = elements || (schema ? schema.getNonEmptyElements() : null);\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 if (isNonEmptyElement(node)) {\n return false;\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 var rv = [];\n while (i--) {\n rv[i] = bind(target[i], name, func, scope);\n }\n return rv;\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 var rv = [];\n while (i--) {\n rv[i] = unbind(target[i], name, func);\n }\n return rv;\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 QUEUED = 0;\n var LOADING = 1;\n var LOADED = 2;\n var FAILED = 3;\n var ScriptLoader = function () {\n function ScriptLoader(settings) {\n if (settings === void 0) {\n settings = {};\n }\n this.states = {};\n this.queue = [];\n this.scriptLoadedCallbacks = {};\n this.queueLoadedCallbacks = [];\n this.loading = 0;\n this.settings = settings;\n }\n ScriptLoader.prototype._setReferrerPolicy = function (referrerPolicy) {\n this.settings.referrerPolicy = referrerPolicy;\n };\n ScriptLoader.prototype.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(failure)) {\n failure();\n } else {\n if (typeof domGlobals.console !== 'undefined' && domGlobals.console.log) {\n domGlobals.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 if (this.settings.referrerPolicy) {\n dom.setAttrib(elm, 'referrerpolicy', this.settings.referrerPolicy);\n }\n elm.onload = done;\n elm.onerror = error;\n (domGlobals.document.getElementsByTagName('head')[0] || domGlobals.document.body).appendChild(elm);\n };\n ScriptLoader.prototype.isDone = function (url) {\n return this.states[url] === LOADED;\n };\n ScriptLoader.prototype.markDone = function (url) {\n this.states[url] = LOADED;\n };\n ScriptLoader.prototype.add = function (url, success, scope, failure) {\n var state = this.states[url];\n if (state === undefined) {\n this.queue.push(url);\n this.states[url] = QUEUED;\n }\n if (success) {\n if (!this.scriptLoadedCallbacks[url]) {\n this.scriptLoadedCallbacks[url] = [];\n }\n this.scriptLoadedCallbacks[url].push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n }\n };\n ScriptLoader.prototype.load = function (url, success, scope, failure) {\n return this.add(url, success, scope, failure);\n };\n ScriptLoader.prototype.remove = function (url) {\n delete this.states[url];\n delete this.scriptLoadedCallbacks[url];\n };\n ScriptLoader.prototype.loadQueue = function (success, scope, failure) {\n this.loadScripts(this.queue, success, scope, failure);\n };\n ScriptLoader.prototype.loadScripts = function (scripts, success, scope, failure) {\n var self = this;\n var loadScripts;\n var failures = [];\n var execCallbacks = function (name, url) {\n each$6(self.scriptLoadedCallbacks[url], function (callback) {\n if (isFunction(callback[name])) {\n callback[name].call(callback.scope);\n }\n });\n self.scriptLoadedCallbacks[url] = undefined;\n };\n self.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 (self.states[url] === LOADED) {\n execCallbacks('success', url);\n return;\n }\n if (self.states[url] === FAILED) {\n execCallbacks('failure', url);\n return;\n }\n if (self.states[url] !== LOADING) {\n self.states[url] = LOADING;\n self.loading++;\n self.loadScript(url, function () {\n self.states[url] = LOADED;\n self.loading--;\n execCallbacks('success', url);\n loadScripts();\n }, function () {\n self.states[url] = FAILED;\n self.loading--;\n failures.push(url);\n execCallbacks('failure', url);\n loadScripts();\n });\n }\n });\n if (!self.loading) {\n var notifyCallbacks = self.queueLoadedCallbacks.slice(0);\n self.queueLoadedCallbacks.length = 0;\n each$6(notifyCallbacks, function (callback) {\n if (failures.length === 0) {\n if (isFunction(callback.success)) {\n callback.success.call(callback.scope);\n }\n } else {\n if (isFunction(callback.failure)) {\n callback.failure.call(callback.scope, failures);\n }\n }\n });\n }\n };\n loadScripts();\n };\n ScriptLoader.ScriptLoader = new ScriptLoader();\n return ScriptLoader;\n }();\n\n var isRaw = function (str) {\n return isObject(str) && has(str, 'raw');\n };\n var isTokenised = function (str) {\n return isArray(str) && str.length > 1;\n };\n var data = {};\n var currentCode = Cell('en');\n var getLanguageData = function () {\n return get(data, currentCode.get());\n };\n var getData = function () {\n return map$1(data, function (value) {\n return __assign({}, value);\n });\n };\n var setCode = function (newCode) {\n if (newCode) {\n currentCode.set(newCode);\n }\n };\n var getCode = function () {\n return currentCode.get();\n };\n var add = function (code, items) {\n var langData = data[code];\n if (!langData) {\n data[code] = langData = {};\n }\n each$1(items, function (translation, name) {\n langData[name.toLowerCase()] = translation;\n });\n };\n var translate = function (text) {\n var langData = getLanguageData().getOr({});\n var toString = function (obj) {\n if (isFunction(obj)) {\n return Object.prototype.toString.call(obj);\n }\n return !isEmpty(obj) ? '' + obj : '';\n };\n var isEmpty = function (text) {\n return text === '' || text === null || text === undefined;\n };\n var getLangData = function (text) {\n var textstr = toString(text);\n return get(langData, textstr.toLowerCase()).map(toString).getOr(textstr);\n };\n var removeContext = function (str) {\n return str.replace(/{context:\\w+}$/, '');\n };\n var translated = function (text) {\n return text;\n };\n if (isEmpty(text)) {\n return translated('');\n }\n if (isRaw(text)) {\n return translated(toString(text.raw));\n }\n if (isTokenised(text)) {\n var values_1 = text.slice(1);\n var substitued = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, function ($1, $2) {\n return has(values_1, $2) ? toString(values_1[$2]) : $1;\n });\n return translated(removeContext(substitued));\n }\n return translated(removeContext(getLangData(text)));\n };\n var isRtl = function () {\n return getLanguageData().bind(function (items) {\n return get(items, '_dir');\n }).exists(function (dir) {\n return dir === 'rtl';\n });\n };\n var hasCode = function (code) {\n return has(data, code);\n };\n var I18n = {\n getData: getData,\n setCode: setCode,\n getCode: getCode,\n add: add,\n translate: translate,\n isRtl: isRtl,\n hasCode: hasCode\n };\n\n function AddOnManager() {\n var _this = this;\n var items = [];\n var urls = {};\n var lookup = {};\n var _listeners = [];\n var runListeners = function (name, state) {\n var matchedListeners = filter(_listeners, function (listener) {\n return listener.name === name && listener.state === state;\n });\n each(matchedListeners, function (listener) {\n return listener.callback();\n });\n };\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 if (AddOnManager.languageLoad !== false) {\n waitFor(name, function () {\n var language = I18n.getCode();\n var wrappedLanguages = ',' + (languages || '') + ',';\n if (!language || languages && wrappedLanguages.indexOf(',' + language + ',') === -1) {\n return;\n }\n ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n }, 'loaded');\n }\n };\n var add = function (id, addOn, dependencies) {\n var addOnConstructor = addOn;\n items.push(addOnConstructor);\n lookup[id] = {\n instance: addOnConstructor,\n dependencies: dependencies\n };\n runListeners(id, 'added');\n return addOnConstructor;\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(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(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 var done = function () {\n runListeners(name, 'loaded');\n loadDependencies(name, addOnUrl, success, scope);\n };\n if (lookup[name]) {\n done();\n } else {\n ScriptLoader.ScriptLoader.add(urlString, done, scope, failure);\n }\n };\n var waitFor = function (name, callback, state) {\n if (state === void 0) {\n state = 'added';\n }\n if (has(lookup, name) && state === 'added') {\n callback();\n } else if (has(urls, name) && state === 'loaded') {\n callback();\n } else {\n _listeners.push({\n name: name,\n state: state,\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 var AddOnManager$1 = AddOnManager;\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 read = function (element, attr) {\n var value = get$3(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add$1 = 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$1(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom().classList !== undefined;\n };\n var get$5 = function (element) {\n return read(element, 'class');\n };\n var add$2 = function (element, clazz) {\n return add$1(element, 'class', clazz);\n };\n var remove$3 = function (element, clazz) {\n return remove$2(element, 'class', clazz);\n };\n\n var add$3 = function (element, clazz) {\n if (supports(element)) {\n element.dom().classList.add(clazz);\n } else {\n add$2(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom().classList : get$5(element);\n if (classList.length === 0) {\n remove$1(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(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, 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$3(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$3(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 return Option.from(span.attr(dataAnnotation())).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 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$4 = function (element, classes) {\n each(classes, function (x) {\n add$3(element, x);\n });\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$6 = 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 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 ZWSP = zeroWidth;\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([\n 'script',\n 'style',\n 'textarea'\n ]);\n var isAtomicInline = NodeType.matchNodeNames([\n 'img',\n 'input',\n 'textarea',\n 'hr',\n 'iframe',\n 'video',\n 'audio',\n 'object'\n ]);\n var isTable$2 = 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$2(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 if (rect1.bottom - rect1.height / 2 < 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\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 var someIf = function (b, a) {\n return b ? Option.some(a) : 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$1 = doc.createTextNode(nbsp);\n var parentNode = brNode.parentNode;\n var clientRect;\n parentNode.insertBefore(nbsp$1, brNode);\n rng.setStart(nbsp$1, 0);\n rng.setEnd(nbsp$1, 1);\n clientRect = clone$1(rng.getBoundingClientRect());\n parentNode.removeChild(nbsp$1);\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$1 = 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, '') : 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 TextWalker = function (startNode, rootNode, isBoundary) {\n if (isBoundary === void 0) {\n isBoundary = never;\n }\n var walker = new TreeWalker(startNode, rootNode);\n var walk = function (direction) {\n var next;\n do {\n next = walker[direction]();\n } while (next && !NodeType.isText(next) && !isBoundary(next));\n return Option.from(next).filter(NodeType.isText);\n };\n return {\n current: function () {\n return Option.from(walker.current()).filter(NodeType.isText);\n },\n next: function () {\n return walk('next');\n },\n prev: function () {\n return walk('prev');\n },\n prev2: function () {\n return walk('prev2');\n }\n };\n };\n\n var TextSeeker = function (dom, isBoundary) {\n var isBlockBoundary = isBoundary ? isBoundary : function (node) {\n return dom.isBlock(node) || NodeType.isBr(node) || NodeType.isContentEditableFalse(node);\n };\n var walk = function (node, offset, walker, process) {\n if (NodeType.isText(node)) {\n var newOffset = process(node, offset, node.data);\n if (newOffset !== -1) {\n return Option.some({\n container: node,\n offset: newOffset\n });\n }\n }\n return walker().bind(function (next) {\n return walk(next.container, next.offset, walker, process);\n });\n };\n var backwards = function (node, offset, process, root) {\n var walker = TextWalker(node, root, isBlockBoundary);\n return walk(node, offset, function () {\n return walker.prev().map(function (prev) {\n return {\n container: prev,\n offset: prev.length\n };\n });\n }, process).getOrNull();\n };\n var forwards = function (node, offset, process, root) {\n var walker = TextWalker(node, root, isBlockBoundary);\n return walk(node, offset, function () {\n return walker.next().map(function (next) {\n return {\n container: next,\n offset: 0\n };\n });\n }, process).getOrNull();\n };\n return {\n backwards: backwards,\n forwards: forwards\n };\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 DOM$1 = DOMUtils$1.DOM;\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', '');\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 if (block === false) {\n return '';\n } else if (block === true) {\n return 'p';\n } else {\n return block;\n }\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', 'xx-small,x-small,small,medium,large,x-large,xx-large'));\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 getIconPackName = function (editor) {\n return editor.getParam('icons', '', 'string');\n };\n var getIconsUrl = function (editor) {\n return editor.getParam('icons_url', '', 'string');\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 getReferrerPolicy = function (editor) {\n return editor.getParam('referrer_policy', '', 'string');\n };\n var getLanguageCode = function (editor) {\n return editor.getParam('language', 'en', 'string');\n };\n var getLanguageUrl = function (editor) {\n return editor.getParam('language_url', '', 'string');\n };\n var shouldIndentUseMargin = function (editor) {\n return editor.getParam('indent_use_margin', false);\n };\n var getIndentation = function (editor) {\n return editor.getParam('indentation', '40px', 'string');\n };\n var getContentCss = function (editor) {\n var contentCss = editor.settings.content_css;\n if (isString(contentCss)) {\n return map(contentCss.split(','), trim);\n } else if (isArray(contentCss)) {\n return contentCss;\n } else if (contentCss === false || editor.inline) {\n return [];\n } else {\n return ['default'];\n }\n };\n var getDirectionality = function (editor) {\n return editor.getParam('directionality', I18n.isRtl() ? 'rtl' : undefined);\n };\n var getInlineBoundarySelector = function (editor) {\n return editor.getParam('inline_boundaries_selector', 'a[href],code,.mce-annotation', 'string');\n };\n var getObjectResizing = function (editor) {\n return editor.getParam('object_resizing');\n };\n var getResizeImgProportional = function (editor) {\n return editor.getParam('resize_img_proportional', true, 'boolean');\n };\n var getPlaceholder = function (editor) {\n return editor.getParam('placeholder', DOM$1.getAttrib(editor.getElement(), 'placeholder'), '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 getIconPackName: getIconPackName,\n getIconsUrl: getIconsUrl,\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 getReferrerPolicy: getReferrerPolicy,\n getLanguageCode: getLanguageCode,\n getLanguageUrl: getLanguageUrl,\n shouldIndentUseMargin: shouldIndentUseMargin,\n getIndentation: getIndentation,\n getContentCss: getContentCss,\n getDirectionality: getDirectionality,\n getInlineBoundarySelector: getInlineBoundarySelector,\n getObjectResizing: getObjectResizing,\n getResizeImgProportional: getResizeImgProportional,\n getPlaceholder: getPlaceholder\n };\n\n var browser$3 = detect$3().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 (editor, root, isBlock, hasFocus) {\n var lastVisualCaret = Cell(Option.none());\n var cursorInterval, caretContainerNode;\n var rootBlock = Settings.getForcedRootBlock(editor);\n var caretBlock = rootBlock.length > 0 ? rootBlock : 'p';\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(caretBlock, element, before);\n clientRect = getAbsoluteClientRect(root, element, before);\n DomQuery(caretContainerNode).css('top', clientRect.top);\n var caret = DomQuery('
    ').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 Delay.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(__assign({}, 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$3.isIE() || browser$3.isEdge() || browser$3.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 = '
    ';\n }\n return node;\n };\n var resolveCaretPositionBookmark = function (dom, bookmark) {\n var rng, pos;\n rng = dom.createRng();\n pos = resolve$1(dom.getRoot(), bookmark.start);\n rng.setStart(pos.container(), pos.offset());\n pos = resolve$1(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 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, endPos.or(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$2 = 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$2 };\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 is$2 = function (expected) {\n return function (actual) {\n return expected === actual;\n };\n };\n var isNbsp = is$2(nbsp);\n var isWhiteSpace$1 = function (chr) {\n return chr !== '' && ' \\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n };\n var isContent = function (chr) {\n return !isWhiteSpace$1(chr) && !isNbsp(chr);\n };\n\n var isNode = function (node) {\n return !!node.nodeType;\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 var nextName = next ? 'nextSibling' : 'previousSibling';\n for (node = inc ? node : node[nextName]; node; node = node[nextName]) {\n if (node.nodeType === 1 || !isWhiteSpaceNode(node)) {\n return node;\n }\n }\n }\n };\n var isTextBlock$1 = function (editor, name) {\n if (isNode(name)) {\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 && NodeType.isText(node) && /^([\\t \\r\\n]+|)$/.test(node.nodeValue);\n };\n var isEmptyTextNode = function (node) {\n return node && NodeType.isText(node) && node.length === 0;\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\n var isBookmarkNode$2 = Bookmarks.isBookmarkNode;\n var getParents$2 = getParents$1, isWhiteSpaceNode$1 = isWhiteSpaceNode, isTextBlock$2 = isTextBlock$1;\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 (NodeType.isElement(parent) && dom.getContentEditable(parent)) {\n return dom.getContentEditable(parent) === 'false' ? parent : node;\n }\n parent = parent.parentNode;\n }\n return node;\n };\n var walkText = function (start, node, offset, predicate) {\n var str = node.data;\n for (var i = offset; start ? i >= 0 : i < str.length; start ? i-- : i++) {\n if (predicate(str.charAt(i))) {\n return start ? i + 1 : i;\n }\n }\n return -1;\n };\n var findSpace = function (start, node, offset) {\n return walkText(start, node, offset, function (c) {\n return isNbsp(c) || isWhiteSpace$1(c);\n });\n };\n var findContent = function (start, node, offset) {\n return walkText(start, node, offset, isContent);\n };\n var findWordEndPoint = function (dom, body, container, offset, start, includeTrailingSpaces) {\n var lastTextNode;\n var rootNode = dom.getParent(container, dom.isBlock) || body;\n var walk = function (container, offset, pred) {\n var textSeeker = TextSeeker(dom);\n var walker = start ? textSeeker.backwards : textSeeker.forwards;\n return Option.from(walker(container, offset, function (text, textOffset) {\n if (isBookmarkNode$2(text.parentNode)) {\n return -1;\n } else {\n lastTextNode = text;\n return pred(start, text, textOffset);\n }\n }, rootNode));\n };\n var spaceResult = walk(container, offset, findSpace);\n return spaceResult.bind(function (result) {\n return includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Option.some(result);\n }).orThunk(function () {\n return lastTextNode ? Option.some({\n container: lastTextNode,\n offset: start ? 0 : lastTextNode.length\n }) : Option.none();\n });\n };\n var findSelectorEndPoint = function (dom, format, rng, container, siblingName) {\n if (NodeType.isText(container) && container.nodeValue.length === 0 && container[siblingName]) {\n container = container[siblingName];\n }\n var parents = getParents$2(dom, container);\n for (var i = 0; i < parents.length; i++) {\n for (var y = 0; y < format.length; y++) {\n var 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(NodeType.isText(container) ? 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 (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 (NodeType.isText(container) && !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, includeTrailingSpace) {\n if (includeTrailingSpace === void 0) {\n includeTrailingSpace = false;\n }\n var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n var dom = editor.dom;\n if (NodeType.isElement(startContainer) && startContainer.hasChildNodes()) {\n startContainer = getNode(startContainer, startOffset);\n if (NodeType.isText(startContainer)) {\n startOffset = 0;\n }\n }\n if (NodeType.isElement(endContainer) && endContainer.hasChildNodes()) {\n endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (NodeType.isText(endContainer)) {\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 (NodeType.isText(startContainer)) {\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 (NodeType.isText(endContainer)) {\n endOffset = rng.collapsed ? 0 : endContainer.length;\n }\n }\n if (rng.collapsed) {\n var startPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, includeTrailingSpace);\n startPoint.each(function (_a) {\n var container = _a.container, offset = _a.offset;\n startContainer = container;\n startOffset = offset;\n });\n var endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, includeTrailingSpace);\n endPoint.each(function (_a) {\n var container = _a.container, offset = _a.offset;\n endContainer = container;\n endOffset = offset;\n });\n }\n if (format[0].inline || format[0].block_expand) {\n if (!format[0].inline || (!NodeType.isText(startContainer) || startOffset === 0)) {\n startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\n }\n if (!format[0].inline || (!NodeType.isText(endContainer) || 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 (NodeType.isElement(startContainer)) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (NodeType.isElement(endContainer)) {\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\n var each$7 = Tools.each;\n var clampToExistingChildren = function (container, index) {\n var childNodes = container.childNodes;\n if (index >= childNodes.length) {\n index = childNodes.length - 1;\n } else if (index < 0) {\n index = 0;\n }\n return childNodes[index] || container;\n };\n var getEndChild = function (container, index) {\n return clampToExistingChildren(container, index - 1);\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 nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');\n if (nodes.length > 0) {\n each$7(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 (var node = startNode, parent_1 = node.parentNode; node && node !== endNode; node = parent_1) {\n parent_1 = node.parentNode;\n var siblings_1 = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n if (siblings_1.length) {\n if (!next) {\n siblings_1.reverse();\n }\n callback(exclude(siblings_1));\n }\n }\n };\n if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\n startContainer = clampToExistingChildren(startContainer, 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 var ancestor = dom.findCommonAncestor(startContainer, endContainer);\n for (var 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 (var 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 var startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n var endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n walkBoundary(startContainer, startPoint, true);\n var 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 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$7 = function (element) {\n return api.get(element);\n };\n\n var isZeroWidth = function (elem) {\n return isText(elem) && get$7(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 (!isValid(editor, wrapName, nodeName) || !isValid(editor, name(parent), wrapName)) {\n return 'invalid-child';\n } else {\n return 'valid';\n }\n });\n };\n\n var applyWordGrab = function (editor, rng) {\n var r = expandRng(editor, rng, [{ inline: true }]);\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$3(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$4(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(elem, w);\n break;\n }\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, nbsp);\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 var Annotator = function (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$1(directory, function (elems) {\n return map(elems, function (elem) {\n return elem.dom();\n });\n });\n }\n };\n };\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 startName = prev ? 'lastChild' : 'firstChild';\n var siblingName = prev ? 'prev' : 'next';\n if (node[startName]) {\n return node[startName];\n }\n if (node !== root) {\n var sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (var parent_1 = node.parent; parent_1 && parent_1 !== root; parent_1 = parent_1.parent) {\n sibling = parent_1[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n };\n var isEmptyTextNode$1 = function (node) {\n if (!whiteSpaceRegExp$3.test(node.value)) {\n return false;\n }\n var parentNode = node.parent;\n if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(node.value)) {\n return false;\n }\n return true;\n };\n var isNonEmptyElement = function (node) {\n var isNamedAnchor = node.name === 'a' && !node.attr('href') && node.attr('id');\n return node.attr('name') || node.attr('id') && !node.firstChild || node.attr('data-mce-bookmark') || isNamedAnchor;\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 = new Node(name, typeLookup[name] || 1);\n if (attrs) {\n for (var 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;\n if (typeof name !== 'string') {\n for (var key in name) {\n self.attr(key, name[key]);\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 var i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs.splice(i, 1);\n return self;\n }\n }\n }\n return self;\n }\n if (name in attrs.map) {\n var 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 selfAttrs;\n if (selfAttrs = self.attributes) {\n var cloneAttrs = [];\n cloneAttrs.map = {};\n for (var i = 0, l = selfAttrs.length; i < l; i++) {\n var 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 for (var node = self.firstChild; node;) {\n var 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 if (node.parent) {\n node.remove();\n }\n var 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 if (node.parent) {\n node.remove();\n }\n var 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 collection = [];\n for (var 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 if (self.firstChild) {\n var nodes = [];\n for (var node = self.firstChild; node; node = walk$2(node, self)) {\n nodes.push(node);\n }\n var i = nodes.length;\n while (i--) {\n var 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 if (whitespace === void 0) {\n whitespace = {};\n }\n var self = this;\n var node = self.firstChild;\n if (isNonEmptyElement(self)) {\n return false;\n }\n if (node) {\n do {\n if (node.type === 1) {\n if (node.attr('data-mce-bogus')) {\n continue;\n }\n if (elements[node.name]) {\n return false;\n }\n if (isNonEmptyElement(node)) {\n return false;\n }\n }\n if (node.type === 8) {\n return false;\n }\n if (node.type === 3 && !isEmptyTextNode$1(node)) {\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 isValidPrefixAttrName = function (name) {\n return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;\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 isConditionalComment = function (html, startIndex) {\n return /^\\s*\\[if [\\w\\W]+\\]>.*/.test(html.substr(startIndex));\n };\n var findCommentEndIndex = function (html, isBogus, startIndex) {\n if (startIndex === void 0) {\n startIndex = 0;\n }\n var lcHtml = html.toLowerCase();\n if (lcHtml.indexOf('[if ', startIndex) !== -1 && isConditionalComment(lcHtml, startIndex)) {\n var endIfIndex = lcHtml.indexOf('[endif]', startIndex);\n return lcHtml.indexOf('>', endIfIndex);\n } else {\n if (isBogus) {\n var endIndex = lcHtml.indexOf('>', startIndex);\n return endIndex !== -1 ? endIndex : lcHtml.length;\n } else {\n var endCommentRegexp = /--!?>/;\n endCommentRegexp.lastIndex = startIndex;\n var match = endCommentRegexp.exec(html);\n return match ? match.index + match[0].length : lcHtml.length;\n }\n }\n };\n var checkBogusAttribute = function (regExp, attrString) {\n var matches = regExp.exec(attrString);\n if (matches) {\n var name_1 = matches[1];\n var value = matches[2];\n return typeof name_1 === 'string' && name_1.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, format) {\n if (format === void 0) {\n format = 'html';\n }\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 parsingMode = format === 'html' ? 0 : 1;\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 processComment = function (value) {\n if (value === '') {\n return;\n }\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 };\n var processMalformedComment = function (value, startIndex) {\n var startTag = value || '';\n var isBogus = !startsWith(startTag, '--');\n var endIndex = findCommentEndIndex(html, isBogus, startIndex);\n value = html.substr(startIndex, endIndex - startIndex);\n processComment(isBogus ? startTag + value : value);\n return endIndex + 1;\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]*?)\\\\]\\\\]>)|' + '(?:![Dd][Oo][Cc][Tt][Yy][Pp][Ee]([\\\\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 var matchText = matches[0];\n if (index < matches.index) {\n text(decode(html.substr(index, matches.index - index)));\n }\n if (value = matches[7]) {\n value = value.toLowerCase();\n if (value.charAt(0) === ':') {\n value = value.substr(1);\n }\n processEndTag(value);\n } else if (value = matches[8]) {\n if (matches.index + matchText.length > html.length) {\n text(decode(html.substr(matches.index)));\n index = matches.index + matchText.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[9]);\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[9]) {\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 + matchText.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 processComment(value);\n } else if (value = matches[2]) {\n var isValidCdataSection = parsingMode === 1 || settings.preserve_cdata || stack.length > 0 && schema.isValidChild(stack[stack.length - 1].name, '#cdata');\n if (isValidCdataSection) {\n cdata(value);\n } else {\n index = processMalformedComment('', matches.index + 2);\n tokenRegExp.lastIndex = index;\n continue;\n }\n } else if (value = matches[3]) {\n doctype(value);\n } else if ((value = matches[4]) || matchText === '= 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 defaultFormat = 'html';\n var trimEmptyContents = function (editor, html) {\n var blockName = Settings.getForcedRootBlock(editor);\n var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\\\s|\\xA0|
    |)<\\\\/' + blockName + '>[\\r\\n]*|
    [\\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 = 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 makeMap$3 = Tools.makeMap;\n var Writer = function (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('');\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('');\n },\n comment: function (text) {\n html.push('');\n },\n pi: function (name, text) {\n if (text) {\n html.push('');\n } else {\n html.push('');\n }\n if (indent) {\n html.push('\\n');\n }\n },\n doctype: function (text) {\n html.push('', 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 var Serializer = function (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 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_1 in nodeMatches) {\n if (nodeMatches.hasOwnProperty(name_1)) {\n matches.push(nodeMatches[name_1]);\n }\n }\n for (var name_2 in attrMatches) {\n if (attrMatches.hasOwnProperty(name_2)) {\n matches.push(attrMatches[name_2]);\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 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 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 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$3 = adt.before;\n var on = adt.on;\n var after$2 = adt.after;\n var Situ = {\n before: before$3,\n on: on,\n after: after$2,\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$4 = detect$3().browser;\n var clamp = function (offset, element) {\n var max = isText(element) ? get$7(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$2(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$4.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(function (x) {\n return validate(Element.fromDom(editor.getBody()), x);\n }).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 isEditorUIElement = function (elm) {\n var className = elm.className.toString();\n return className.indexOf('tox-') !== -1 || className.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 = detect$3().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 = function (editor) {\n var throttledStore = first(function () {\n SelectionBookmark.store(editor);\n }, 0);\n editor.on('init', function () {\n if (editor.inline) {\n registerPageMouseUp(editor, throttledStore);\n }\n registerEditorEvents(editor, throttledStore);\n });\n editor.on('remove', function () {\n throttledStore.cancel();\n });\n };\n var SelectionRestore = { register: register };\n\n var documentFocusInHandler;\n var DOM$2 = DOMUtils$1.DOM;\n var isEditorUIElement$1 = function (elm) {\n return FocusManager.isEditorUIElement(elm);\n };\n var isEditorContentAreaElement = function (elm) {\n var classList = elm.classList;\n if (classList !== undefined) {\n return classList.contains('tox-edit-area') || classList.contains('tox-edit-area__iframe') || classList.contains('mce-content-body');\n } else {\n return false;\n }\n };\n var isUIElement = function (editor, elm) {\n var customSelector = editor ? editor.settings.custom_ui_selector : '';\n var parent = DOM$2.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$2.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$2.unbind(domGlobals.document, 'focusin', documentFocusInHandler);\n documentFocusInHandler = null;\n }\n };\n var setup$2 = function (editorManager) {\n editorManager.on('AddEditor', curry(registerEvents, editorManager));\n editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n };\n var FocusController = {\n setup: setup$2,\n isEditorUIElement: isEditorUIElement$1,\n isEditorContentAreaElement: isEditorContentAreaElement,\n isUIElement: isUIElement\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$2(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 hasUiFocus = function (editor) {\n return active().filter(function (elem) {\n return !FocusController.isEditorContentAreaElement(elem.dom()) && FocusController.isUIElement(editor, elem.dom());\n }).isSome();\n };\n var hasFocus$1 = function (editor) {\n return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n };\n var hasEditorOrUiFocus = function (editor) {\n return hasFocus$1(editor) || hasUiFocus(editor);\n };\n var focusEditor = function (editor) {\n var selection = editor.selection;\n var body = editor.getBody();\n var rng = selection.getRng();\n editor.quirks.refreshContentEditable();\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 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.inline) {\n if (!Env.opera) {\n focusBody(body);\n }\n editor.getWin().focus();\n }\n if (Env.gecko || editor.inline) {\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 hasEditorOrUiFocus: hasEditorOrUiFocus\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 = '
    ';\n if (body.nodeName === 'TABLE') {\n content = '' + padd + '';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = '
  • ' + padd + '
  • ';\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 = '
    ';\n }\n setEditorHtml(editor, content);\n editor.fire('SetContent', args);\n } else {\n if (args.format !== 'raw') {\n content = Serializer({ 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 = Serializer({ 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 = 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 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 firePreInit = function (editor) {\n return editor.fire('PreInit');\n };\n var firePostRender = function (editor) {\n return editor.fire('PostRender');\n };\n var fireInit = function (editor) {\n return editor.fire('Init');\n };\n var firePlaceholderToggle = function (editor, state) {\n return editor.fire('PlaceholderToggle', { state: state });\n };\n var fireError = function (editor, errorType, error) {\n return editor.fire(errorType, error);\n };\n\n var DOM$3 = DOMUtils$1.DOM;\n var restoreOriginalStyles = function (editor) {\n DOM$3.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$3.unbind(form, 'submit reset', editor.formEventDelegate);\n }\n };\n var remove$6 = 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$3.remove(element.nextSibling);\n }\n fireRemove(editor);\n editor.editorManager.remove(editor);\n if (!editor.inline && body) {\n restoreOriginalStyles(editor);\n }\n fireDetach(editor);\n DOM$3.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 hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n var deep$1 = function (old, nu) {\n var bothObjects = isObject(old) && isObject(nu);\n return bothObjects ? deepMerge(old, nu) : 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 deepMerge = baseMerge(deep$1);\n\n var sectionResult = Immutable('sections', 'settings');\n var deviceDetection = detect$3().deviceType;\n var isTouch = deviceDetection.isTouch();\n var isPhone = deviceDetection.isPhone();\n var isTablet = deviceDetection.isTablet();\n var legacyMobilePlugins = [\n 'lists',\n 'autolink',\n 'autosave'\n ];\n var defaultTouchSettings = {\n table_grid: false,\n object_resizing: false,\n resize: false\n };\n var normalizePlugins = function (plugins) {\n var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;\n var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim);\n return filter(trimmedPlugins, function (item) {\n return item.length > 0;\n });\n };\n var filterLegacyMobilePlugins = function (plugins) {\n return filter(plugins, curry(contains, legacyMobilePlugins));\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 if (defaults === void 0) {\n defaults = {};\n }\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 isSectionTheme = function (sectionResult, name, theme) {\n var section = sectionResult.sections();\n return hasSection(sectionResult, name) && section[name].theme === theme;\n };\n var getSectionConfig = function (sectionResult, name) {\n return hasSection(sectionResult, name) ? sectionResult.sections()[name] : {};\n };\n var getToolbarMode = function (settings, defaultVal) {\n return get(settings, 'toolbar_mode').orThunk(function () {\n return get(settings, 'toolbar_drawer').map(function (val) {\n return val === false ? 'wrap' : val;\n });\n }).getOr(defaultVal);\n };\n var getDefaultSettings = function (settings, id, documentBaseUrl, isTouch, editor) {\n var baseDefaults = {\n id: id,\n theme: 'silver',\n toolbar_mode: getToolbarMode(settings, 'floating'),\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: '',\n visual: true,\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 inline_styles: true,\n convert_fonts_to_spans: true,\n indent: true,\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 };\n return __assign(__assign({}, baseDefaults), isTouch ? defaultTouchSettings : {});\n };\n var getDefaultMobileSettings = function (settings, isPhone) {\n var defaultMobileSettings = {\n resize: false,\n toolbar_mode: getToolbarMode(settings, 'scrolling'),\n toolbar_sticky: false\n };\n var defaultPhoneSettings = { menubar: false };\n return __assign(__assign(__assign({}, defaultTouchSettings), defaultMobileSettings), isPhone ? defaultPhoneSettings : {});\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 (isMobileDevice, sectionResult, defaultOverrideSettings, settings) {\n var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);\n var desktopPlugins = normalizePlugins(settings.plugins);\n var mobileConfig = getSectionConfig(sectionResult, 'mobile');\n var mobilePlugins = mobileConfig.plugins ? normalizePlugins(mobileConfig.plugins) : desktopPlugins;\n var platformPlugins = isMobileDevice && isSectionTheme(sectionResult, 'mobile', 'mobile') ? filterLegacyMobilePlugins(mobilePlugins) : isMobileDevice && hasSection(sectionResult, 'mobile') ? mobilePlugins : desktopPlugins;\n var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });\n };\n var isOnMobile = function (isMobileDevice, sectionResult) {\n return isMobileDevice && hasSection(sectionResult, 'mobile');\n };\n var combineSettings = function (isMobileDevice, isPhone, defaultSettings, defaultOverrideSettings, settings) {\n var defaultDeviceSettings = isMobileDevice ? { mobile: getDefaultMobileSettings(settings, isPhone) } : {};\n var sectionResult = extractSections(['mobile'], deepMerge(defaultDeviceSettings, settings));\n var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isMobileDevice, sectionResult) ? getSection(sectionResult, 'mobile') : {}, {\n validate: true,\n external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())\n });\n return processPlugins(isMobileDevice, sectionResult, defaultOverrideSettings, extendedSettings);\n };\n var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {\n var defaultSettings = getDefaultSettings(settings, id, documentBaseUrl, isTouch, editor);\n return combineSettings(isPhone || isTablet, isPhone, 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[0]);\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 CreateIconManager = function () {\n var lookup = {};\n var add = function (id, iconPack) {\n lookup[id] = iconPack;\n };\n var get = function (id) {\n if (lookup[id]) {\n return lookup[id];\n }\n return { icons: {} };\n };\n var has$1 = function (id) {\n return has(lookup, id);\n };\n return {\n add: add,\n get: get,\n has: has$1\n };\n };\n var IconManager = CreateIconManager();\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$4(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$2(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 (spec) {\n if (editor.removed || !EditorView.isEditorAttachedToDom(editor)) {\n return;\n }\n return find(notifications, function (notification) {\n return isEqual(getImplementation().getArgs(notification), spec);\n }).getOrThunk(function () {\n editor.editorManager.setActive(editor);\n var notification = getImplementation().open(spec, 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 });\n }\n });\n editor.on('ResizeEditor ResizeWindow NodeChange', 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 var PluginManager = AddOnManager$1.PluginManager;\n\n var ThemeManager = AddOnManager$1.ThemeManager;\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 openUrl: unimplemented,\n alert: unimplemented,\n confirm: unimplemented,\n close: unimplemented,\n getParams: unimplemented,\n setParams: unimplemented\n };\n }\n\n var WindowManager = function (editor) {\n var dialogs = [];\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 (dialog) {\n editor.fire('OpenWindow', { dialog: dialog });\n };\n var fireCloseEvent = function (dialog) {\n editor.fire('CloseWindow', { dialog: dialog });\n };\n var addDialog = function (dialog) {\n dialogs.push(dialog);\n fireOpenEvent(dialog);\n };\n var closeDialog = function (dialog) {\n fireCloseEvent(dialog);\n dialogs = filter(dialogs, function (otherDialog) {\n return otherDialog !== dialog;\n });\n if (dialogs.length === 0) {\n editor.focus();\n }\n };\n var getTopDialog = function () {\n return Option.from(dialogs[dialogs.length - 1]);\n };\n var storeSelectionAndOpenDialog = function (openDialog) {\n editor.editorManager.setActive(editor);\n SelectionBookmark.store(editor);\n var dialog = openDialog();\n addDialog(dialog);\n return dialog;\n };\n var open = function (args, params) {\n return storeSelectionAndOpenDialog(function () {\n return getImplementation().open(args, params, closeDialog);\n });\n };\n var openUrl = function (args) {\n return storeSelectionAndOpenDialog(function () {\n return getImplementation().openUrl(args, closeDialog);\n });\n };\n var alert = function (message, callback, scope) {\n getImplementation().alert(message, funcBind(scope ? scope : this, callback));\n };\n var confirm = function (message, callback, scope) {\n getImplementation().confirm(message, funcBind(scope ? scope : this, callback));\n };\n var close = function () {\n getTopDialog().each(function (dialog) {\n getImplementation().close(dialog);\n closeDialog(dialog);\n });\n };\n editor.on('remove', function () {\n each(dialogs, function (dialog) {\n getImplementation().close(dialog);\n });\n });\n return {\n open: open,\n openUrl: openUrl,\n alert: alert,\n confirm: confirm,\n close: close\n };\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 logError = function (editor, errorType, msg) {\n fireError(editor, errorType, { message: msg });\n domGlobals.console.error(msg);\n };\n var createLoadError = function (type, url, name) {\n return name ? 'Failed to load ' + type + ': ' + name + ' from url ' + url : 'Failed to load ' + type + ' url: ' + url;\n };\n var pluginLoadError = function (editor, url, name) {\n logError(editor, 'PluginLoadError', createLoadError('plugin', url, name));\n };\n var iconsLoadError = function (editor, url, name) {\n logError(editor, 'IconsLoadError', createLoadError('icons', url, name));\n };\n var languageLoadError = function (editor, url, name) {\n logError(editor, 'LanguageLoadError', createLoadError('language', url, name));\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 iconsLoadError: iconsLoadError,\n languageLoadError: languageLoadError,\n pluginInitError: pluginInitError,\n uploadError: uploadError,\n displayError: displayError,\n initError: initError\n };\n\n var getAll = function () {\n return {\n 'accessibility-check': '',\n 'action-next': '',\n 'action-prev': '',\n 'align-center': '',\n 'align-justify': '',\n 'align-left': '',\n 'align-none': '',\n 'align-right': '',\n 'arrow-left': '',\n 'arrow-right': '',\n 'bold': '',\n 'bookmark': '',\n 'border-width': '',\n 'brightness': '',\n 'browse': '',\n 'cancel': '',\n 'change-case': '',\n 'character-count': '',\n 'checklist-rtl': '',\n 'checklist': '',\n 'checkmark': '',\n 'chevron-down': '',\n 'chevron-left': '',\n 'chevron-right': '',\n 'chevron-up': '',\n 'close': '',\n 'code-sample': '',\n 'color-levels': '',\n 'color-picker': '',\n 'color-swatch-remove-color': '',\n 'color-swatch': '',\n 'comment-add': '',\n 'comment': '',\n 'contrast': '',\n 'copy': '',\n 'crop': '',\n 'cut': '',\n 'document-properties': '',\n 'drag': '',\n 'duplicate': '',\n 'edit-block': '',\n 'edit-image': '',\n 'embed-page': '',\n 'embed': '',\n 'emoji': '',\n 'fill': '',\n 'flip-horizontally': '',\n 'flip-vertically': '',\n 'format-painter': '',\n 'format': '',\n 'fullscreen': '',\n 'gallery': '',\n 'gamma': '',\n 'help': '',\n 'highlight-bg-color': '',\n 'home': '',\n 'horizontal-rule': '',\n 'image-options': '',\n 'image': '',\n 'indent': '',\n 'info': '',\n 'insert-character': '',\n 'insert-time': '',\n 'invert': '',\n 'italic': '',\n 'line': '',\n 'link': '',\n 'list-bull-circle': '',\n 'list-bull-default': '',\n 'list-bull-square': '',\n 'list-num-default-rtl': '',\n 'list-num-default': '',\n 'list-num-lower-alpha-rtl': '',\n 'list-num-lower-alpha': '',\n 'list-num-lower-greek-rtl': '',\n 'list-num-lower-greek': '',\n 'list-num-lower-roman-rtl': '',\n 'list-num-lower-roman': '',\n 'list-num-upper-alpha-rtl': '',\n 'list-num-upper-alpha': '',\n 'list-num-upper-roman-rtl': '',\n 'list-num-upper-roman': '',\n 'lock': '',\n 'ltr': '',\n 'more-drawer': '',\n 'new-document': '',\n 'new-tab': '',\n 'non-breaking': '',\n 'notice': '',\n 'ordered-list-rtl': '',\n 'ordered-list': '',\n 'orientation': '',\n 'outdent': '',\n 'page-break': '',\n 'paragraph': '',\n 'paste-text': '',\n 'paste': '',\n 'permanent-pen': '',\n 'plus': '',\n 'preferences': '',\n 'preview': '',\n 'print': '',\n 'quote': '',\n 'redo': '',\n 'reload': '',\n 'remove-formatting': '',\n 'remove': '',\n 'resize-handle': '',\n 'resize': '',\n 'restore-draft': '',\n 'rotate-left': '',\n 'rotate-right': '',\n 'rtl': '',\n 'save': '',\n 'search': '',\n 'select-all': '',\n 'selected': '',\n 'settings': '',\n 'sharpen': '',\n 'sort-asc': '',\n 'sort-dsc': '',\n 'sourcecode': '',\n 'spell-check': '',\n 'strike-through': '',\n 'subscript': '',\n 'superscript': '',\n 'table-cell-properties': '',\n 'table-cell-select-all': '',\n 'table-cell-select-inner': '',\n 'table-delete-column': '',\n 'table-delete-row': '',\n 'table-delete-table': '',\n 'table-insert-column-after': '',\n 'table-insert-column-before': '',\n 'table-insert-row-above': '',\n 'table-insert-row-after': '',\n 'table-left-header': '',\n 'table-merge-cells': '',\n 'table-row-properties': '',\n 'table-split-cells': '',\n 'table-top-header': '',\n 'table': '',\n 'template': '',\n 'temporary-placeholder': '',\n 'text-color': '',\n 'toc': '',\n 'translate': '',\n 'underline': '',\n 'undo': '',\n 'unlink': '',\n 'unlock': '',\n 'unordered-list': '',\n 'unselected': '',\n 'upload': '',\n 'user': '',\n 'visualblocks': '',\n 'visualchars': '',\n 'warning': '',\n 'zoom-in': '',\n 'zoom-out': ''\n };\n };\n\n var isContentCssSkinName = function (url) {\n return /^[a-z0-9\\-]+$/i.test(url);\n };\n var getContentCssUrls = function (editor) {\n var contentCss = Settings.getContentCss(editor);\n var skinUrl = editor.editorManager.baseURL + '/skins/content';\n var suffix = editor.editorManager.suffix;\n var contentCssFile = 'content' + suffix + '.css';\n var inline = editor.inline === true;\n return map(contentCss, function (url) {\n if (isContentCssSkinName(url) && !inline) {\n return skinUrl + '/' + url + '/' + contentCssFile;\n } else {\n return editor.documentBaseURI.toAbsolute(url);\n }\n });\n };\n var appendContentCssFromSettings = function (editor) {\n editor.contentCSS = editor.contentCSS.concat(getContentCssUrls(editor));\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 isXYWithinRange = function (clientX, clientY, range) {\n if (range.collapsed) {\n return false;\n }\n if (Env.browser.isIE() && 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 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 isContentEditableFalse$6 = NodeType.isContentEditableFalse;\n var isContentEditableTrue$2 = NodeType.isContentEditableTrue;\n var getContentEditableRoot = function (root, node) {\n while (node && node !== root) {\n if (isContentEditableTrue$2(node) || isContentEditableFalse$6(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 isImage = function (elm) {\n return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));\n };\n var isEventOnImageOutsideRange = function (evt, range) {\n if (evt.type === 'longpress' || evt.type.indexOf('touch') === 0) {\n var touch = evt.touches[0];\n return isImage(evt.target) && !RangePoint.isXYWithinRange(touch.clientX, touch.clientY, range);\n } else {\n return isImage(evt.target) && !RangePoint.isXYWithinRange(evt.clientX, evt.clientY, range);\n }\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 = Settings.getObjectResizing(editor);\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(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) && Settings.getResizeImgProportional(editor) !== false) {\n proportional = !VK.modifierPressed(e);\n } else {\n proportional = VK.modifierPressed(e);\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 + ' × ' + 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 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 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 + ' × ' + 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$6(getContentEditableRoot(editor.getBody(), elm));\n };\n var unbindResizeHandleEvents = function () {\n for (var name_1 in resizeHandles) {\n var handle = resizeHandles[name_1];\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.browser.isIE() || Env.browser.isEdge()) {\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 var handleMSControlSelect_1 = function (e) {\n var delayedSelect = function (node) {\n Delay.setEditorTimeout(editor, function () {\n return 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 dom.bind(rootElement, 'mscontrolselect', handleMSControlSelect_1);\n editor.on('remove', function () {\n return dom.unbind(rootElement, 'mscontrolselect', handleMSControlSelect_1);\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 longpress', contextMenuSelectImage, true);\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 function Dimension (name, getOffset) {\n var set = function (element, h) {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n var dom = element.dom();\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$4(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$4(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n }\n\n var api$1 = Dimension('height', function (element) {\n var dom = element.dom();\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$8 = function (element) {\n return api$1.get(element);\n };\n\n var walkUp = function (navigation, doc) {\n var frame = navigation.view(doc);\n return frame.fold(constant([]), function (f) {\n var parent = navigation.owner(f);\n var rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n var pathTo = function (element, navigation) {\n var d = navigation.owner(element);\n return walkUp(navigation, d);\n };\n\n var view = function (doc) {\n var element = doc.dom() === domGlobals.document ? Option.none() : Option.from(doc.dom().defaultView.frameElement);\n return element.map(Element.fromDom);\n };\n var owner$1 = function (element) {\n return owner(element);\n };\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner$1\n });\n\n var find$3 = function (element) {\n var doc = Element.fromDom(domGlobals.document);\n var scroll = get$1(doc);\n var frames = pathTo(element, Navigation);\n var offset = viewport(element);\n var r = foldr(frames, function (b, a) {\n var loc = viewport(a);\n return {\n left: b.left + loc.left(),\n top: b.top + loc.top()\n };\n }, {\n left: 0,\n top: 0\n });\n return Position(r.left + offset.left() + scroll.left(), r.top + offset.top() + scroll.top());\n };\n\n var excludeFromDescend = function (element) {\n return name(element) === 'textarea';\n };\n var fireScrollIntoViewEvent = function (editor, data) {\n var scrollEvent = editor.fire('ScrollIntoView', data);\n return scrollEvent.isDefaultPrevented();\n };\n var fireAfterScrollIntoViewEvent = function (editor, data) {\n editor.fire('AfterScrollIntoView', data);\n };\n var descend = function (element, offset) {\n var children$1 = children(element);\n if (children$1.length === 0 || excludeFromDescend(element)) {\n return {\n element: element,\n offset: offset\n };\n } else if (offset < children$1.length && !excludeFromDescend(children$1[offset])) {\n return {\n element: children$1[offset],\n offset: 0\n };\n } else {\n var last = children$1[children$1.length - 1];\n if (excludeFromDescend(last)) {\n return {\n element: element,\n offset: offset\n };\n } else {\n if (name(last) === 'img') {\n return {\n element: last,\n offset: 1\n };\n } else if (isText(last)) {\n return {\n element: last,\n offset: get$7(last).length\n };\n } else {\n return {\n element: last,\n offset: children(last).length\n };\n }\n }\n }\n };\n var markerInfo = function (element, cleanupFun) {\n var pos = absolute(element);\n var height = get$8(element);\n return {\n element: element,\n bottom: pos.top() + height,\n height: height,\n pos: pos,\n cleanup: cleanupFun\n };\n };\n var createMarker = function (element, offset) {\n var startPoint = descend(element, offset);\n var span = Element.fromHtml('' + Zwsp.ZWSP + '');\n before(startPoint.element, span);\n return markerInfo(span, function () {\n return remove(span);\n });\n };\n var elementMarker = function (element) {\n return markerInfo(Element.fromDom(element), noop);\n };\n var withMarker = function (editor, f, rng, alignToTop) {\n preserveWith(editor, function (_s, _e) {\n return applyWithMarker(editor, f, rng, alignToTop);\n }, rng);\n };\n var withScrollEvents = function (editor, doc, f, marker, alignToTop) {\n var data = {\n elm: marker.element.dom(),\n alignToTop: alignToTop\n };\n if (fireScrollIntoViewEvent(editor, data)) {\n return;\n }\n var scrollTop = get$1(doc).top();\n f(doc, scrollTop, marker, alignToTop);\n fireAfterScrollIntoViewEvent(editor, data);\n };\n var applyWithMarker = function (editor, f, rng, alignToTop) {\n var body = Element.fromDom(editor.getBody());\n var doc = Element.fromDom(editor.getDoc());\n reflow(body);\n var marker = createMarker(Element.fromDom(rng.startContainer), rng.startOffset);\n withScrollEvents(editor, doc, f, marker, alignToTop);\n marker.cleanup();\n };\n var withElement = function (editor, element, f, alignToTop) {\n var doc = Element.fromDom(editor.getDoc());\n withScrollEvents(editor, doc, f, elementMarker(element), alignToTop);\n };\n var preserveWith = function (editor, f, rng) {\n var startElement = rng.startContainer;\n var startOffset = rng.startOffset;\n var endElement = rng.endContainer;\n var endOffset = rng.endOffset;\n f(Element.fromDom(startElement), Element.fromDom(endElement));\n var newRng = editor.dom.createRng();\n newRng.setStart(startElement, startOffset);\n newRng.setEnd(endElement, endOffset);\n editor.selection.setRng(rng);\n };\n var scrollToMarker = function (marker, viewHeight, alignToTop, doc) {\n var pos = marker.pos;\n if (alignToTop) {\n to(pos.left(), pos.top(), doc);\n } else {\n var y = pos.top() - viewHeight + marker.height;\n to(pos.left(), y, doc);\n }\n };\n var intoWindowIfNeeded = function (doc, scrollTop, viewHeight, marker, alignToTop) {\n var viewportBottom = viewHeight + scrollTop;\n var markerTop = marker.pos.top();\n var markerBottom = marker.bottom;\n var largerThanViewport = markerBottom - markerTop >= viewHeight;\n if (markerTop < scrollTop) {\n scrollToMarker(marker, viewHeight, alignToTop !== false, doc);\n } else if (markerTop > viewportBottom) {\n var align = largerThanViewport ? alignToTop !== false : alignToTop === true;\n scrollToMarker(marker, viewHeight, align, doc);\n } else if (markerBottom > viewportBottom && !largerThanViewport) {\n scrollToMarker(marker, viewHeight, alignToTop === true, doc);\n }\n };\n var intoWindow = function (doc, scrollTop, marker, alignToTop) {\n var viewHeight = doc.dom().defaultView.innerHeight;\n intoWindowIfNeeded(doc, scrollTop, viewHeight, marker, alignToTop);\n };\n var intoFrame = function (doc, scrollTop, marker, alignToTop) {\n var frameViewHeight = doc.dom().defaultView.innerHeight;\n intoWindowIfNeeded(doc, scrollTop, frameViewHeight, marker, alignToTop);\n var op = find$3(marker.element);\n var viewportBounds = getBounds(domGlobals.window);\n if (op.top() < viewportBounds.y()) {\n intoView(marker.element, alignToTop !== false);\n } else if (op.top() > viewportBounds.bottom()) {\n intoView(marker.element, alignToTop === true);\n }\n };\n var rangeIntoWindow = function (editor, rng, alignToTop) {\n return withMarker(editor, intoWindow, rng, alignToTop);\n };\n var elementIntoWindow = function (editor, element, alignToTop) {\n return withElement(editor, element, intoWindow, alignToTop);\n };\n var rangeIntoFrame = function (editor, rng, alignToTop) {\n return withMarker(editor, intoFrame, rng, alignToTop);\n };\n var elementIntoFrame = function (editor, element, alignToTop) {\n return withElement(editor, element, intoFrame, alignToTop);\n };\n var elementIntoView = function (editor, element, alignToTop) {\n var scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n scroller(editor, element, alignToTop);\n };\n var rangeIntoView = function (editor, rng, alignToTop) {\n var scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n scroller(editor, rng, alignToTop);\n };\n var ScrollIntoView = {\n scrollElementIntoView: elementIntoView,\n scrollRangeIntoView: rangeIntoView\n };\n\n var hasCeProperty = function (node) {\n return NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node);\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 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(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 dropLast = function (xs) {\n return xs.slice(0, -1);\n };\n var parentsUntil$1 = function (start, root, predicate) {\n if (contains$2(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 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 = 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(sibling));\n }).getOr([]);\n } else {\n return [node].concat(getLastChildren(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(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 } 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 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$3(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$1(td, 'colspan');\n remove$1(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 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 return descendants$1(elm, 'td[data-mce-selected],th[data-mce-selected]');\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 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$2 = 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$2(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$1 = 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$1 };\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$1 = 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$1 };\n\n var isEq$1 = 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$1 };\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 hasParent = function (node, rootNode, predicate) {\n return findParent$1(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$3 = function (node) {\n return node && node.nodeName === 'TABLE';\n };\n var isTableCell$2 = 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 lastInlineElement;\n var body = dom.getRoot();\n var node;\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n var 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 var 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;\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$3(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$3(container)) {\n return Option.none();\n }\n if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) {\n return Option.none();\n }\n if (container.hasChildNodes() && isTable$3(container) === false) {\n node = container;\n var 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$2(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 = 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 };\n\n var prependData = function (target, data) {\n target.insertData(0, data);\n };\n var removeEmpty = function (text) {\n if (text.dom().length === 0) {\n remove(text);\n return Option.none();\n }\n return Option.some(text);\n };\n var rngSetContent = function (rng, fragment) {\n var firstChild = Option.from(fragment.firstChild).map(Element.fromDom);\n var lastChild = Option.from(fragment.lastChild).map(Element.fromDom);\n rng.deleteContents();\n rng.insertNode(fragment);\n var prevText = firstChild.bind(prevSibling).filter(isText).bind(removeEmpty);\n var nextText = lastChild.bind(nextSibling).filter(isText).bind(removeEmpty);\n lift2(prevText, firstChild.filter(isText), function (prev, start) {\n prependData(start.dom(), prev.dom().data);\n remove(prev);\n });\n lift2(nextText, lastChild.filter(isText), function (next, end) {\n var oldLength = end.dom().length;\n end.dom().appendData(next.dom().data);\n rng.setEnd(end.dom(), oldLength);\n remove(next);\n });\n rng.collapse(false);\n };\n var setupArgs = function (args, content) {\n args = args || { format: 'html' };\n args.set = true;\n args.selection = true;\n args.content = content;\n return args;\n };\n var setContent$1 = function (editor, content, args) {\n args = setupArgs(args, content);\n if (!args.no_events) {\n args = editor.fire('BeforeSetContent', args);\n if (args.isDefaultPrevented()) {\n editor.fire('SetContent', args);\n return;\n }\n }\n var rng = editor.selection.getRng();\n rngSetContent(rng, rng.createContextualFragment(args.content));\n editor.selection.setRng(rng);\n ScrollIntoView.scrollRangeIntoView(editor, rng);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n };\n var SetSelectionContent = { setContent: setContent$1 };\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 deleteFromCallbackMap = function (callbackMap, selector, callback) {\n if (callbackMap && callbackMap.hasOwnProperty(selector)) {\n var newCallbacks = filter(callbackMap[selector], function (cb) {\n return cb !== callback;\n });\n if (newCallbacks.length === 0) {\n delete callbackMap[selector];\n } else {\n callbackMap[selector] = newCallbacks;\n }\n }\n };\n function SelectorChanged (dom, editor) {\n var selectorChangedData;\n var currentSelectors;\n return {\n selectorChangedWithUnbind: function (selector, callback) {\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 Tools.each(selectorChangedData, function (callbacks, selector) {\n Tools.each(parents, function (node) {\n if (dom.is(node, selector)) {\n if (!currentSelectors[selector]) {\n Tools.each(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 Tools.each(currentSelectors, function (callbacks, selector) {\n if (!matchedSelectors[selector]) {\n delete currentSelectors[selector];\n Tools.each(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 {\n unbind: function () {\n deleteFromCallbackMap(selectorChangedData, selector, callback);\n deleteFromCallbackMap(currentSelectors, selector, callback);\n }\n };\n }\n };\n }\n\n var isNativeIeSelection = function (rng) {\n return !!rng.select;\n };\n var isAttachedToDom = function (node) {\n return !!(node && node.ownerDocument) && contains$2(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;\n var controlSelection;\n var selectedRange;\n var explicitRange;\n var selectorChangedWithUnbind = SelectorChanged(dom, editor).selectorChangedWithUnbind;\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 selectorChangedWithUnbind(selector, 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 selectorChangedWithUnbind: selectorChangedWithUnbind,\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 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 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 = nbsp;\n }\n };\n var isPaddedWithNbsp = function (node) {\n return hasOnlyChild(node, '#text') && node.firstChild.value === nbsp;\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$1 = 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.getNonEmptyElements();\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$1(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 = nbsp;\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$8 = Tools.each, explode$2 = Tools.explode, extend$2 = Tools.extend;\n var DomParser = function (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$1(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$1(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$8(explode$2(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_1 in nodeFilters) {\n if (nodeFilters.hasOwnProperty(name_1)) {\n out.push({\n name: name_1,\n callbacks: nodeFilters[name_1]\n });\n }\n }\n return out;\n };\n var addAttributeFilter = function (name, callback) {\n each$8(explode$2(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 var getRootBlockName = function (name) {\n if (name === false) {\n return '';\n } else if (name === true) {\n return 'p';\n } else {\n return name;\n }\n };\n args = args || {};\n matchedNodes = {};\n matchedAttributes = {};\n blockElements = extend$2(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 forcedRootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;\n var rootBlockName = getRootBlockName(forcedRootBlockName);\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 preserve_cdata: settings.preserve_cdata,\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$1(schema, nonEmptyElements, whiteSpaceElements, node)) {\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 if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isEmpty$1(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, args.format);\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 if (!matchedNodes.hasOwnProperty(name)) {\n continue;\n }\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 register$3 = 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.attr('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.attr(internalName);\n if (value !== undefined) {\n node.attr(name, value.length > 0 ? value : null);\n node.attr(internalName, null);\n } else {\n value = node.attr(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.attr('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(/()/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\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 = '// ';\n }\n } else {\n if (settings.element_format === 'xhtml' && value.length > 0) {\n node.firstChild.value = '';\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 (settings.preserve_cdata && node.value.indexOf('[CDATA[') === 0) {\n node.name = '#cdata';\n node.type = 4;\n node.value = dom.decode(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' && !node.attr('type')) {\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,data-mce-placeholder', 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$3,\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 firePreProcess(editor, __assign(__assign({}, 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 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 = function (editor, args, content) {\n if (!args.no_events && editor) {\n var outArgs = firePostProcess(editor, __assign(__assign({}, 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 ? __assign({ 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 = Serializer(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(editor, args, content);\n };\n var DomSerializer = function (settings, editor) {\n var tempAttrs = ['data-mce-selected'];\n var dom = editor && editor.dom ? editor.dom : DOMUtils$1.DOM;\n var 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 var htmlParser = DomParser(settings, schema);\n DomSerializerFilters.register(htmlParser, settings, dom);\n var serialize = function (node, parserArgs) {\n if (parserArgs === void 0) {\n parserArgs = {};\n }\n var args = __assign({ format: 'html' }, 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 getNodeFilters: htmlParser.getNodeFilters,\n getAttributeFilters: htmlParser.getAttributeFilters\n };\n };\n\n var Serializer$1 = function (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 getNodeFilters: domSerializer.getNodeFilters,\n getAttributeFilters: domSerializer.getAttributeFilters\n };\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 = new domGlobals.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 = domGlobals.atob(uriParts.data);\n } catch (e) {\n resolve(new domGlobals.Blob([]));\n return;\n }\n arr = new 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 = new domGlobals.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 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 = new domGlobals.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 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 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 var BlobCache = function () {\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 || domGlobals.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 domGlobals.URL.revokeObjectURL(blobInfo.blobUri());\n return false;\n }\n return true;\n });\n };\n var destroy = function () {\n each(cache, function (cachedBlobInfo) {\n domGlobals.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 var EditorUpload = function (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 (url) {\n return url + (url.indexOf('?') === -1 ? '?' : '&') + 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) ? cacheInvalidator(resultUri) : 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 = 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 getLastChildren$1 = 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$1(elm).slice(-1), isBr$1);\n if (allBrs.length === brs.length) {\n each(brs, remove);\n }\n };\n var fillWithPaddingBr = function (elm) {\n empty(elm);\n append(elm, Element.fromHtml('
    '));\n };\n var isPaddingContents = function (elm) {\n return isText(elm) ? get$7(elm) === nbsp : isBr$1(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$1(lastChild) && isBlock(lastChildPrevSibling)) {\n remove(lastChild);\n }\n });\n });\n };\n var PaddingBr = {\n removeTrailingBr: removeTrailingBr,\n fillWithPaddingBr: fillWithPaddingBr,\n isPaddedElement: isPaddedElement,\n trimBlockTrailingBr: trimBlockTrailingBr\n };\n\n var isEq$2 = 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 = getStyle(dom, node, key);\n }\n if (similar && !value && !format.exact) {\n return;\n }\n if ((!similar || format.exact) && !isEq$2(value, normalizeStyleValue(dom, 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]) : 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 = getParents$1(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\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\n var normalizeContent = function (content, isStartOfContent, isEndOfContent) {\n var result = foldl(content, function (acc, c) {\n if (isWhiteSpace$1(c) || isNbsp(c)) {\n if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) {\n return {\n previousCharIsSpace: false,\n str: acc.str + nbsp\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(Element.fromDom(nextNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(prevNode, whitespaceOffset);\n }\n return prevNode;\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$1 = 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, skipBogus) {\n var node, brCount = 0;\n if (isContent$1(targetNode, targetNode)) {\n return false;\n } else {\n node = targetNode.firstChild;\n if (!node) {\n return true;\n }\n var walker = new TreeWalker(node, targetNode);\n do {\n if (skipBogus) {\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 }\n if (NodeType.isBr(node)) {\n brCount++;\n node = walker.next();\n continue;\n }\n if (isContent$1(targetNode, node)) {\n return false;\n }\n node = walker.next();\n } while (node);\n return brCount <= 1;\n }\n };\n var isEmpty$2 = function (elm, skipBogus) {\n if (skipBogus === void 0) {\n skipBogus = true;\n }\n return isEmptyNode(elm.dom(), skipBogus);\n };\n var Empty = { isEmpty: isEmpty$2 };\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('
    ');\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(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 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 if (node) {\n var walker = new TreeWalker(node, node);\n for (node = walker.current(); node; node = walker.next()) {\n if (NodeType.isText(node)) {\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(isTextBlock$1, 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();\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 = expandRng(editor, rng, editor.formatter.get(name));\n rng = split$1(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 (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 = expandRng(editor, rng, editor.formatter.get(name), true);\n expandedRng = split$1(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$3 = 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(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 postProcessHooks = {}, filter$4 = ArrUtils.filter, each$9 = 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$1 = function (name, editor) {\n each$9(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('

    ').append(pre2.childNodes);\n };\n isPre = NodeType.matchNodeNames(['pre']);\n if (!rng.collapsed) {\n blocks = editor.selection.getSelectedBlocks();\n each$9(filter$4(filter$4(blocks, isPre), hasPreSibling), function (pre) {\n joinPre(pre.previousSibling, pre);\n });\n }\n });\n\n var each$a = 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$a(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 MCE_ATTR_RE = /^(src|href|style)$/;\n var each$b = Tools.each;\n var isEq$3 = isEq;\n var isTableCell$3 = 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;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (NodeType.isElement(container)) {\n var 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$3 = 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$3(node, format.inline)) {\n return true;\n }\n if (isEq$3(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.nodeName === 'A';\n };\n var find$4 = function (dom, node, next, inc) {\n node = 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 = Settings.getForcedRootBlock(ed);\n if (format.block) {\n if (!forcedRootBlock) {\n if (dom.isBlock(node) && !dom.isBlock(parentNode)) {\n if (!find$4(dom, node, false) && !find$4(dom, node.firstChild, true, true)) {\n node.insertBefore(dom.create('br'), node.firstChild);\n }\n if (!find$4(dom, node, true) && !find$4(dom, node.lastChild, false, true)) {\n node.appendChild(dom.create('br'));\n }\n }\n } else {\n if (parentNode === dom.getRoot()) {\n if (!format.list_block || !isEq$3(node, format.list_block)) {\n each$b(Tools.grep(node.childNodes), function (node) {\n if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n if (!rootBlockElm) {\n rootBlockElm = wrap$3(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$3(format.inline, node)) {\n return;\n }\n dom.remove(node, true);\n };\n var removeFormat = function (ed, format, vars, node, compareNode) {\n var stylesModified;\n var dom = ed.dom;\n if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n return false;\n }\n var elm = node;\n if (format.remove !== 'all') {\n each$b(format.styles, function (value, name) {\n value = normalizeStyleValue(dom, replaceVars(value, vars), name);\n if (typeof name === 'number') {\n name = value;\n compareNode = null;\n }\n if (format.remove_similar || (!compareNode || isEq$3(getStyle(dom, compareNode, name), value))) {\n dom.setStyle(elm, name, '');\n }\n stylesModified = true;\n });\n if (stylesModified && dom.getAttrib(elm, 'style') === '') {\n elm.removeAttribute('style');\n elm.removeAttribute('data-mce-style');\n }\n each$b(format.attributes, function (value, name) {\n var valueOut;\n value = replaceVars(value, vars);\n if (typeof name === 'number') {\n name = value;\n compareNode = null;\n }\n if (format.remove_similar || (!compareNode || isEq$3(dom.getAttrib(compareNode, name), value))) {\n if (name === 'class') {\n value = dom.getAttrib(elm, name);\n if (value) {\n valueOut = '';\n each$b(value.split(/\\s+/), function (cls) {\n if (/mce\\-\\w+/.test(cls)) {\n valueOut += (valueOut ? ' ' : '') + cls;\n }\n });\n if (valueOut) {\n dom.setAttrib(elm, name, valueOut);\n return;\n }\n }\n }\n if (name === 'class') {\n elm.removeAttribute('className');\n }\n if (MCE_ATTR_RE.test(name)) {\n elm.removeAttribute('data-mce-' + name);\n }\n elm.removeAttribute(name);\n }\n });\n each$b(format.classes, function (value) {\n value = replaceVars(value, vars);\n if (!compareNode || dom.hasClass(compareNode, value)) {\n dom.removeClass(elm, value);\n }\n });\n var attrs = dom.getAttribs(elm);\n for (var 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, elm, format);\n return true;\n }\n };\n var findFormatRoot = function (editor, container, name, vars, similar) {\n var formatRoot;\n each$b(getParents$1(editor.dom, container.parentNode).reverse(), function (parent) {\n var format;\n if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {\n format = 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$7 = 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 var expandedRng = expandRng(ed, rng, formatList, true);\n if (format.split) {\n expandedRng = split$1(expandedRng);\n startContainer = getContainer(ed, expandedRng, true);\n endContainer = getContainer(ed, expandedRng);\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$3(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$3(dom, startContainer, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n });\n endContainer = wrap$3(dom, endContainer, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n });\n var newRng = dom.createRng();\n newRng.setStartAfter(startContainer);\n newRng.setEndBefore(endContainer);\n RangeWalk.walk(dom, newRng, function (nodes) {\n each(nodes, function (n) {\n if (!Bookmarks.isBookmarkNode(n) && !Bookmarks.isBookmarkNode(n.parentNode)) {\n splitToFormatRoot(n);\n }\n });\n });\n splitToFormatRoot(startContainer);\n splitToFormatRoot(endContainer);\n startContainer = unwrap(true);\n endContainer = unwrap();\n } else {\n startContainer = endContainer = splitToFormatRoot(startContainer);\n }\n expandedRng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n expandedRng.startOffset = dom.nodeIndex(startContainer);\n expandedRng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n expandedRng.endOffset = dom.nodeIndex(endContainer) + 1;\n }\n RangeWalk.walk(dom, expandedRng, function (nodes) {\n each$b(nodes, function (node) {\n process(node);\n if (NodeType.isElement(node) && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && 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 (isNode(node)) {\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 && match(ed, name, vars, selection.getStart())) {\n moveStart(dom, selection, selection.getRng());\n }\n ed.nodeChanged();\n } else {\n removeCaretFormat(ed, name, vars, similar);\n }\n };\n\n var each$c = Tools.each;\n var isElementNode = function (node) {\n return NodeType.isElement(node) && !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 (NodeType.isText(sibling) && sibling.nodeValue.length !== 0) {\n return node;\n }\n if (NodeType.isElement(sibling) && !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$c(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 && 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 processTextDecorationsAndColor = function (dom, node) {\n if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {\n var textDecoration = 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 mergeTextDecorationsAndColor = function (dom, format, vars, node) {\n if (format.styles && (format.styles.color || format.styles.textDecoration)) {\n Tools.walk(node, curry(processTextDecorationsAndColor, dom), 'childNodes');\n processTextDecorationsAndColor(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', 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, getNonWhiteSpaceSibling(node), node);\n node = mergeSiblingsNodes(dom, node, 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$c(dom.select(selector, node), function (node) {\n if (isElementNode(node)) {\n each$c(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$c(formatList, function (format) {\n each$c(editor.dom.select(format.inline, node), function (child) {\n if (!isElementNode(child)) {\n return;\n }\n 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 (matchNode(editor, node.parentNode, name, vars)) {\n if (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 (matchNode(editor, parent, name, vars)) {\n removeFormat(editor, format, vars, node);\n return true;\n }\n });\n }\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$2 = function (rng) {\n return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n };\n var RangeNormalizer = { normalize: normalize$2 };\n\n var each$d = 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$d(fmt.styles, function (value, name) {\n dom.setStyle(elm, name, replaceVars(value, vars));\n });\n if (fmt.styles) {\n var styleVal = dom.getAttrib(elm, 'style');\n if (styleVal) {\n dom.setAttrib(elm, 'data-mce-style', styleVal);\n }\n }\n each$d(fmt.attributes, function (value, name) {\n dom.setAttrib(elm, name, replaceVars(value, vars));\n });\n each$d(fmt.classes, function (value) {\n value = 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$d(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 hasContentEditableState = false;\n var lastContentEditable = contentEditable;\n var nodeName = node.nodeName.toLowerCase();\n var parentName = node.parentNode.nodeName.toLowerCase();\n if (NodeType.isElement(node) && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n if (isEq(nodeName, 'br')) {\n currentWrapElm = 0;\n if (format.block) {\n dom.remove(node);\n }\n return;\n }\n if (format.wrapper && matchNode(ed, node, name, vars)) {\n currentWrapElm = 0;\n return;\n }\n if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && isTextBlock$1(ed, nodeName) && 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 && isValid(ed, wrapName, nodeName) && 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$d(Tools.grep(node.childNodes), process);\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm = 0;\n }\n };\n each$d(nodes, process);\n });\n if (format.links === true) {\n each$d(newWrappers, function (node) {\n var process = function (node) {\n if (node.nodeName === 'A') {\n setElementFormat(node, format);\n }\n each$d(Tools.grep(node.childNodes), process);\n };\n process(node);\n });\n }\n each$d(newWrappers, function (node) {\n var childCount;\n var getChildCount = function (node) {\n var count = 0;\n each$d(node.childNodes, function (node) {\n if (!isEmptyTextNode(node) && !Bookmarks.isBookmarkNode(node)) {\n count++;\n }\n });\n return count;\n };\n var getChildElementNode = function (root) {\n var child = false;\n each$d(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) && matchName(dom, child, format)) {\n clone = dom.clone(child, false);\n setElementFormat(clone);\n dom.replace(clone, node, true);\n dom.remove(child, true);\n }\n return clone || node;\n };\n childCount = getChildCount(node);\n if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n dom.remove(node, true);\n return;\n }\n if (format.inline || format.wrapper) {\n if (!format.exact && childCount === 1) {\n node = mergeStyles(node);\n }\n mergeWithChildren(ed, formatList, vars, node);\n mergeWithParents(ed, format, name, vars, node);\n mergeBackgroundColorAndFontSize(dom, format, vars, node);\n mergeTextDecorationsAndColor(dom, format, vars, node);\n mergeSubSup(dom, format, vars, node);\n 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 (isNode(node)) {\n if (!applyNodeStyle(formatList, node)) {\n rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n applyRngStyle(dom, 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, expandRng(ed, selection.getRng(), formatList));\n selection.moveToBookmark(bookmark);\n moveStart(dom, selection, selection.getRng());\n ed.nodeChanged();\n } else {\n applyCaretFormat(ed, name, vars);\n }\n }\n postProcess$1(name, ed);\n }\n };\n\n var setup$4 = function (registeredFormatListeners, editor) {\n var currentFormats = Cell({});\n registeredFormatListeners.set({});\n editor.on('NodeChange', function (e) {\n updateAndFireChangeCallbacks(editor, e.element, currentFormats, registeredFormatListeners.get());\n });\n };\n var updateAndFireChangeCallbacks = function (editor, elm, currentFormats, formatChangeData) {\n var formatsList = keys(currentFormats.get());\n var newFormats = {};\n var matchedFormats = {};\n var parents = filter(getParents$1(editor.dom, elm), function (node) {\n return node.nodeType === 1 && !node.getAttribute('data-mce-bogus');\n });\n each$1(formatChangeData, function (data, format) {\n Tools.each(parents, function (node) {\n if (editor.formatter.matchNode(node, format, {}, data.similar)) {\n if (formatsList.indexOf(format) === -1) {\n each(data.callbacks, function (callback) {\n callback(true, {\n node: node,\n format: format,\n parents: parents\n });\n });\n newFormats[format] = data.callbacks;\n }\n matchedFormats[format] = data.callbacks;\n return false;\n }\n if (matchesUnInheritedFormatSelector(editor, node, format)) {\n return false;\n }\n });\n });\n var remainingFormats = filterRemainingFormats(currentFormats.get(), matchedFormats, elm, parents);\n currentFormats.set(__assign(__assign({}, newFormats), remainingFormats));\n };\n var filterRemainingFormats = function (currentFormats, matchedFormats, elm, parents) {\n return bifilter(currentFormats, function (callbacks, format) {\n if (!has(matchedFormats, format)) {\n each(callbacks, function (callback) {\n callback(false, {\n node: elm,\n format: format,\n parents: parents\n });\n });\n return false;\n } else {\n return true;\n }\n }).t;\n };\n var addListeners = function (registeredFormatListeners, formats, callback, similar) {\n var formatChangeItems = registeredFormatListeners.get();\n each(formats.split(','), function (format) {\n if (!formatChangeItems[format]) {\n formatChangeItems[format] = {\n similar: similar,\n callbacks: []\n };\n }\n formatChangeItems[format].callbacks.push(callback);\n });\n registeredFormatListeners.set(formatChangeItems);\n };\n var removeListeners = function (registeredFormatListeners, formats, callback) {\n var formatChangeItems = registeredFormatListeners.get();\n each(formats.split(','), function (format) {\n formatChangeItems[format].callbacks = filter(formatChangeItems[format].callbacks, function (c) {\n return c !== callback;\n });\n if (formatChangeItems[format].callbacks.length === 0) {\n delete formatChangeItems[format];\n }\n });\n registeredFormatListeners.set(formatChangeItems);\n };\n var formatChanged = function (editor, registeredFormatListeners, formats, callback, similar) {\n if (registeredFormatListeners.get() === null) {\n setup$4(registeredFormatListeners, editor);\n }\n addListeners(registeredFormatListeners, formats, callback, similar);\n return {\n unbind: function () {\n return removeListeners(registeredFormatListeners, formats, callback);\n }\n };\n };\n\n var get$9 = 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: true,\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$9 };\n\n function FormatRegistry(editor) {\n var formats = {};\n var get = function (name) {\n return name ? formats[name] : formats;\n };\n var has$1 = function (name) {\n return has(formats, name);\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 if (!isArray(format)) {\n format = [format];\n }\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 has: has$1,\n register: register,\n unregister: unregister\n };\n }\n\n var each$e = 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 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$e(format.styles, function (value, name) {\n value = removeVars(value);\n if (value) {\n dom.setStyle(previewElm, name, value);\n }\n });\n each$e(format.attributes, function (value, name) {\n value = removeVars(value);\n if (value) {\n dom.setAttrib(previewElm, name, value);\n }\n });\n each$e(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$e(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\n var toggle = function (editor, formats, name, vars, node) {\n var fmt = formats.get(name);\n if (match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n remove$7(editor, name, vars, node);\n } else {\n applyFormat(editor, name, vars, node);\n }\n };\n\n var setup$5 = 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$5 };\n\n var Formatter = function (editor) {\n var formats = FormatRegistry(editor);\n var formatChangeState = Cell(null);\n FormatShortcuts.setup(editor);\n setup$3(editor);\n return {\n get: formats.get,\n has: formats.has,\n register: formats.register,\n unregister: formats.unregister,\n apply: curry(applyFormat, editor),\n remove: curry(remove$7, editor),\n toggle: curry(toggle, editor, formats),\n match: curry(match, editor),\n matchAll: curry(matchAll, editor),\n matchNode: curry(matchNode, editor),\n canApply: curry(canApply, editor),\n formatChanged: curry(formatChanged, editor, formatChangeState),\n getCssText: curry(getCssText, editor)\n };\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 '';\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$2 = 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$2,\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('') !== -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$6(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 var isUnlocked = function (locks) {\n return locks.get() === 0;\n };\n\n var setTyping = function (undoManager, typing, locks) {\n if (isUnlocked(locks)) {\n undoManager.typing = typing;\n }\n };\n var endTyping = function (undoManager, locks) {\n if (undoManager.typing) {\n setTyping(undoManager, false, locks);\n undoManager.add();\n }\n };\n var endTypingLevelIgnoreLocks = function (undoManager) {\n if (undoManager.typing) {\n undoManager.typing = false;\n undoManager.add();\n }\n };\n\n var beforeChange = function (editor, locks, beforeBookmark) {\n if (isUnlocked(locks)) {\n beforeBookmark.set(Option.some(GetBookmark.getUndoBookmark(editor.selection)));\n }\n };\n var addUndoLevel = function (editor, undoManager, index, locks, beforeBookmark, level, event) {\n var settings = editor.settings;\n var currentLevel = Levels.createFromEditor(editor);\n level = level || {};\n level = Tools.extend(level, currentLevel);\n if (isUnlocked(locks) === false || editor.removed) {\n return null;\n }\n var lastLevel = undoManager.data[index.get()];\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 (undoManager.data[index.get()]) {\n beforeBookmark.get().each(function (bm) {\n undoManager.data[index.get()].beforeBookmark = bm;\n });\n }\n if (settings.custom_undo_redo_levels) {\n if (undoManager.data.length > settings.custom_undo_redo_levels) {\n for (var i = 0; i < undoManager.data.length - 1; i++) {\n undoManager.data[i] = undoManager.data[i + 1];\n }\n undoManager.data.length--;\n index.set(undoManager.data.length);\n }\n }\n level.bookmark = GetBookmark.getUndoBookmark(editor.selection);\n if (index.get() < undoManager.data.length - 1) {\n undoManager.data.length = index.get() + 1;\n }\n undoManager.data.push(level);\n index.set(undoManager.data.length - 1);\n var args = {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n };\n editor.fire('AddUndo', args);\n if (index.get() > 0) {\n editor.setDirty(true);\n editor.fire('change', args);\n }\n return level;\n };\n var clear = function (editor, undoManager, index) {\n undoManager.data = [];\n index.set(0);\n undoManager.typing = false;\n editor.fire('ClearUndos');\n };\n var extra = function (editor, undoManager, index, callback1, callback2) {\n if (undoManager.transact(callback1)) {\n var bookmark = undoManager.data[index.get()].bookmark;\n var lastLevel = undoManager.data[index.get() - 1];\n Levels.applyToEditor(editor, lastLevel, true);\n if (undoManager.transact(callback2)) {\n undoManager.data[index.get() - 1].beforeBookmark = bookmark;\n }\n }\n };\n var redo = function (editor, index, data) {\n var level;\n if (index.get() < data.length - 1) {\n index.set(index.get() + 1);\n level = data[index.get()];\n Levels.applyToEditor(editor, level, false);\n editor.setDirty(true);\n editor.fire('Redo', { level: level });\n }\n return level;\n };\n var undo = function (editor, undoManager, locks, index) {\n var level;\n if (undoManager.typing) {\n undoManager.add();\n undoManager.typing = false;\n setTyping(undoManager, false, locks);\n }\n if (index.get() > 0) {\n index.set(index.get() - 1);\n level = undoManager.data[index.get()];\n Levels.applyToEditor(editor, level, true);\n editor.setDirty(true);\n editor.fire('Undo', { level: level });\n }\n return level;\n };\n var reset = function (undoManager) {\n undoManager.clear();\n undoManager.add();\n };\n var hasUndo = function (editor, undoManager, index) {\n return index.get() > 0 || undoManager.typing && undoManager.data[0] && !Levels.isEq(Levels.createFromEditor(editor), undoManager.data[0]);\n };\n var hasRedo = function (undoManager, index) {\n return index.get() < undoManager.data.length - 1 && !undoManager.typing;\n };\n var transact = function (undoManager, locks, callback) {\n endTyping(undoManager, locks);\n undoManager.beforeChange();\n undoManager.ignore(callback);\n return undoManager.add();\n };\n var ignore = function (locks, callback) {\n try {\n locks.set(locks.get() + 1);\n callback();\n } finally {\n locks.set(locks.get() - 1);\n }\n };\n\n var registerEvents$1 = function (editor, undoManager, locks) {\n var isFirstTypedCharacter = Cell(false);\n var addNonTypingUndoLevel = function (e) {\n setTyping(undoManager, false, locks);\n undoManager.add({}, e);\n };\n editor.on('init', function () {\n undoManager.add();\n });\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command;\n if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {\n endTyping(undoManager, locks);\n undoManager.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 undoManager.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.get() && undoManager.typing && Levels.isEq(Levels.createFromEditor(editor), undoManager.data[0]) === false) {\n if (editor.isDirty() === false) {\n editor.setDirty(true);\n editor.fire('change', {\n level: undoManager.data[0],\n lastLevel: null\n });\n }\n editor.fire('TypingUndo');\n isFirstTypedCharacter.set(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 (undoManager.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 && !undoManager.typing && !modKey) {\n undoManager.beforeChange();\n setTyping(undoManager, true, locks);\n undoManager.add({}, e);\n isFirstTypedCharacter.set(true);\n }\n });\n editor.on('mousedown', function (e) {\n if (undoManager.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.on('AddUndo Undo Redo ClearUndos', function (e) {\n if (!e.isDefaultPrevented()) {\n editor.nodeChanged();\n }\n });\n };\n var addKeyboardShortcuts = function (editor) {\n editor.addShortcut('meta+z', '', 'Undo');\n editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n };\n\n var UndoManager = function (editor) {\n var beforeBookmark = Cell(Option.none());\n var locks = Cell(0);\n var index = Cell(0);\n var undoManager = {\n data: [],\n typing: false,\n beforeChange: function () {\n beforeChange(editor, locks, beforeBookmark);\n },\n add: function (level, event) {\n return addUndoLevel(editor, undoManager, index, locks, beforeBookmark, level, event);\n },\n undo: function () {\n return undo(editor, undoManager, locks, index);\n },\n redo: function () {\n return redo(editor, index, undoManager.data);\n },\n clear: function () {\n clear(editor, undoManager, index);\n },\n reset: function () {\n reset(undoManager);\n },\n hasUndo: function () {\n return hasUndo(editor, undoManager, index);\n },\n hasRedo: function () {\n return hasRedo(undoManager, index);\n },\n transact: function (callback) {\n return transact(undoManager, locks, callback);\n },\n ignore: function (callback) {\n ignore(locks, callback);\n },\n extra: function (callback1, callback2) {\n extra(editor, undoManager, index, callback1, callback2);\n }\n };\n registerEvents$1(editor, undoManager, locks);\n addKeyboardShortcuts(editor);\n return undoManager;\n };\n\n var nonTypingKeycodes = [\n 9,\n 27,\n VK.HOME,\n VK.END,\n 19,\n 20,\n 44,\n 144,\n 145,\n 33,\n 34,\n 45,\n 16,\n 17,\n 18,\n 91,\n 92,\n 93,\n VK.DOWN,\n VK.UP,\n VK.LEFT,\n VK.RIGHT\n ].concat(Env.browser.isFirefox() ? [224] : []);\n var placeholderAttr = 'data-mce-placeholder';\n var isKeyboardEvent = function (e) {\n return e.type === 'keydown' || e.type === 'keyup';\n };\n var isDeleteEvent = function (e) {\n var keyCode = e.keyCode;\n return keyCode === VK.BACKSPACE || keyCode === VK.DELETE;\n };\n var isNonTypingKeyboardEvent = function (e) {\n if (isKeyboardEvent(e)) {\n var keyCode = e.keyCode;\n return !isDeleteEvent(e) && (VK.metaKeyPressed(e) || e.altKey || keyCode >= 112 && keyCode <= 123 || contains(nonTypingKeycodes, keyCode));\n } else {\n return false;\n }\n };\n var isTypingKeyboardEvent = function (e) {\n return isKeyboardEvent(e) && !(isDeleteEvent(e) || e.type === 'keyup' && e.keyCode === 229);\n };\n var isVisuallyEmpty = function (dom, rootElm, forcedRootBlock) {\n if (Empty.isEmpty(Element.fromDom(rootElm), false)) {\n var isForcedRootBlockFalse = forcedRootBlock === '';\n var firstElement = rootElm.firstElementChild;\n if (!firstElement) {\n return true;\n } else if (dom.getStyle(rootElm.firstElementChild, 'padding-left') || dom.getStyle(rootElm.firstElementChild, 'padding-right')) {\n return false;\n } else {\n return isForcedRootBlockFalse ? !dom.isBlock(firstElement) : forcedRootBlock === firstElement.nodeName.toLowerCase();\n }\n } else {\n return false;\n }\n };\n var setup$6 = function (editor) {\n var dom = editor.dom;\n var rootBlock = Settings.getForcedRootBlock(editor);\n var placeholder = Settings.getPlaceholder(editor);\n var updatePlaceholder = function (e, initial) {\n if (isNonTypingKeyboardEvent(e)) {\n return;\n }\n var body = editor.getBody();\n var showPlaceholder = isTypingKeyboardEvent(e) ? false : isVisuallyEmpty(dom, body, rootBlock);\n var isPlaceholderShown = dom.getAttrib(body, placeholderAttr) !== '';\n if (isPlaceholderShown !== showPlaceholder || initial) {\n dom.setAttrib(body, placeholderAttr, showPlaceholder ? placeholder : null);\n dom.setAttrib(body, 'aria-placeholder', showPlaceholder ? placeholder : null);\n firePlaceholderToggle(editor, showPlaceholder);\n editor.on(showPlaceholder ? 'keydown' : 'keyup', updatePlaceholder);\n editor.off(showPlaceholder ? 'keyup' : 'keydown', updatePlaceholder);\n }\n };\n if (placeholder) {\n editor.on('init', function (e) {\n updatePlaceholder(e, true);\n editor.on('change SetContent ExecCommand', updatePlaceholder);\n editor.on('remove', function () {\n var body = editor.getBody();\n dom.setAttrib(body, placeholderAttr, null);\n dom.setAttrib(body, 'aria-placeholder', null);\n });\n });\n }\n };\n\n var SIGNIFICANT_MOVE = 5;\n var LONGPRESS_DELAY = 400;\n var getTouch = function (event) {\n if (event.touches === undefined || event.touches.length !== 1) {\n return Option.none();\n }\n return Option.some(event.touches[0]);\n };\n var isFarEnough = function (touch, data) {\n var distX = Math.abs(touch.clientX - data.x());\n var distY = Math.abs(touch.clientY - data.y());\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n var setup$7 = function (editor) {\n var startData = Cell(Option.none());\n var longpressFired = Cell(false);\n var debounceLongpress = last$2(function (e) {\n editor.fire('longpress', __assign(__assign({}, e), { type: 'longpress' }));\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n editor.on('touchstart', function (e) {\n getTouch(e).each(function (touch) {\n debounceLongpress.cancel();\n var data = {\n x: constant(touch.clientX),\n y: constant(touch.clientY),\n target: constant(e.target)\n };\n debounceLongpress.throttle(e);\n longpressFired.set(false);\n startData.set(Option.some(data));\n });\n }, true);\n editor.on('touchmove', function (e) {\n debounceLongpress.cancel();\n getTouch(e).each(function (touch) {\n startData.get().each(function (data) {\n if (isFarEnough(touch, data)) {\n startData.set(Option.none());\n longpressFired.set(false);\n editor.fire('longpresscancel');\n }\n });\n });\n }, true);\n editor.on('touchend touchcancel', function (e) {\n debounceLongpress.cancel();\n if (e.type === 'touchcancel') {\n return;\n }\n startData.get().filter(function (data) {\n return data.target().isEqualNode(e.target);\n }).each(function () {\n if (longpressFired.get()) {\n e.preventDefault();\n } else {\n editor.fire('tap', __assign(__assign({}, e), { type: 'tap' }));\n }\n });\n }, true);\n };\n var TouchEvents = { setup: setup$7 };\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 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;\n var forcedRootBlock = Settings.getForcedRootBlock(editor);\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, Settings.getForcedRootBlockAttrs(editor));\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$8 = function (editor) {\n if (Settings.getForcedRootBlock(editor)) {\n editor.on('NodeChange', curry(addRootBlocks, editor));\n }\n };\n var ForceBlocks = { setup: setup$8 };\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 = 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 = 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(node) : insertAfter(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 strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n var hasStrongRtl = function (text) {\n return strongRtl.test(text);\n };\n\n var isInlineTarget = function (editor, elm) {\n return is(Element.fromDom(elm), Settings.getInlineBoundarySelector(editor));\n };\n var isRtl$1 = 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$1,\n isAtZwsp: isAtZwsp,\n normalizePosition: normalizePosition,\n normalizeForwards: normalizeForwards,\n normalizeBackwards: normalizeBackwards,\n hasSameParentBlock: hasSameParentBlock\n };\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$4 = 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$3 = 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$4,\n start,\n end,\n after$3\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$5 = 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$5(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) && !(Env.browser.isIE() && e.initial)) {\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 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 isContentEditableTrue$3 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$8 = 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$8(caretPositionNode)) {\n return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n }\n var caretPositionBeforeNode = caretPosition.getNode(true);\n if (isContentEditableFalse$8(caretPositionBeforeNode)) {\n return showCaret(1, editor, caretPositionBeforeNode, false, false);\n }\n var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {\n return isContentEditableFalse$8(node) || isContentEditableTrue$3(node);\n });\n if (isContentEditableFalse$8(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\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 matchesElementPosition = function (before, predicate) {\n return function (pos) {\n return Option.from(getChildNodeAtRelativeOffset(before ? 0 : -1, pos)).filter(predicate).isSome();\n };\n };\n var isImageBlock = function (node) {\n return node.nodeName === 'IMG' && get$4(Element.fromDom(node), 'display') === 'block';\n };\n var isCefNode = function (node) {\n return NodeType.isContentEditableFalse(node) && !NodeType.isBogusAll(node);\n };\n var isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n var isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n var isBeforeTable = matchesElementPosition(true, NodeType.isTable);\n var isAfterTable = matchesElementPosition(false, NodeType.isTable);\n var isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n var isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\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 ? reverse(positions) : 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$9 = 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$9(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$9(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 = '
    ';\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 editor.selection.setRng(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 editor.selection.setRng(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 = 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, getBottomValue, isAbove$1);\n var getClosestCellBelow = curry(getClosestCell, 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 moveToRange = function (editor, rng) {\n editor.selection.setRng(rng);\n ScrollIntoView.scrollRangeIntoView(editor, rng);\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 __assign({\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 = detect$3().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$9 = 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$9 };\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$2(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 blockPosition = function (block, position) {\n return {\n block: constant(block),\n position: constant(position)\n };\n };\n var blockBoundary = function (from, to) {\n return {\n from: constant(from),\n to: constant(to)\n };\n };\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$3 = function (rootNode, forward, rng) {\n return rng.collapsed ? readFromRange(rootNode, forward, rng) : Option.none();\n };\n var BlockMergeBoundary = { read: read$3 };\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);\n return children;\n };\n var removeEmptyRoot = function (rootNode, block) {\n var parents = Parents.parentsAndSelf(block, rootNode);\n return find(parents.reverse(), function (element) {\n return Empty.isEmpty(element);\n }).each(remove);\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(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$2(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$1).each(remove);\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 rootNode = Element.fromDom(editor.getBody());\n var 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 isBr$5 = function (pos) {\n return getElementFromPosition(pos).exists(isBr$1);\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$1) || findBr(true, root, pos).isSome();\n };\n var isAfterBr = function (root, pos) {\n return getElementFromPrevPosition(pos).exists(isBr$1) || findBr(false, root, pos).isSome();\n };\n var findPreviousBr = curry(findBr, false);\n var findNextBr = curry(findBr, true);\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$4 = 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 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 getAncestorCe = function (editor, node) {\n return Option.from(getContentEditableRoot$1(editor.getBody(), node));\n };\n var backspaceDeleteCaret = function (editor, forward) {\n var selectedNode = editor.selection.getNode();\n return getAncestorCe(editor, selectedNode).filter(NodeType.isContentEditableFalse).fold(function () {\n var result = read$4(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 }, function () {\n return true;\n });\n };\n var deleteOffscreenSelection = function (rootElement) {\n each(descendants$1(rootElement, '.mce-offscreen-selection'), remove);\n };\n var backspaceDeleteRange = function (editor, forward) {\n var selectedNode = editor.selection.getNode();\n if (NodeType.isContentEditableFalse(selectedNode)) {\n var hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(NodeType.isContentEditableFalse);\n return hasCefAncestor.fold(function () {\n deleteOffscreenSelection(Element.fromDom(editor.getBody()));\n DeleteElement.deleteElement(editor, forward, Element.fromDom(editor.selection.getNode()));\n DeleteUtils.paddEmptyBody(editor);\n return true;\n }, function () {\n return true;\n });\n }\n return false;\n };\n var getContentEditableRoot$1 = 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$1(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 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 || !isMoveInsideSameBlock(caretPosition, 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$3 = function (editor, forward) {\n return deleteCefBoundaryText(editor, forward);\n };\n var CefBoundaryDelete = { backspaceDelete: backspaceDelete$3 };\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$4 = 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 BoundaryDelete = { backspaceDelete: backspaceDelete$4 };\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 = 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 = 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);\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(editor, forward) : false;\n };\n var InlineFormatDelete = { backspaceDelete: backspaceDelete$5 };\n\n var tableCellRng = function (start, end) {\n return {\n start: constant(start),\n end: constant(end)\n };\n };\n var tableSelection = function (rng, table, cells) {\n return {\n rng: constant(rng),\n table: constant(table),\n cells: constant(cells)\n };\n };\n var deleteAction = Adt.generate([\n { removeTable: ['element'] },\n { emptyCells: ['cells'] }\n ]);\n var isRootFromElement = function (root) {\n return function (cur) {\n return eq(root, cur);\n };\n };\n var getClosestCell$1 = 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 someIf(eq(startParentTable, endParentTable), startParentTable);\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$1(rng.startContainer, isRoot);\n var endCell = getClosestCell$1(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$1(rng.startContainer, isRoot);\n var endCell = getClosestCell$1(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 getActionFromRange = function (root, rng) {\n return getTableSelectionFromRng(root, rng).bind(getAction);\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 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 }).getOr(false);\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 isNearTable = function (forward, pos) {\n return forward ? isBeforeTable(pos) : isAfterTable(pos);\n };\n var isBeforeOrAfterTable = function (editor, forward) {\n var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return isNearTable(forward, fromPos) || CaretFinder.fromPosition(forward, editor.getBody(), fromPos).map(function (pos) {\n return isNearTable(forward, pos);\n }).getOr(false);\n };\n var deleteCaret$1 = 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) || isBeforeOrAfterTable(editor, forward);\n }, function (fromCaption) {\n return deleteCaretCaption(editor, forward, rootElm, fromCaption).getOr(false);\n });\n };\n var backspaceDelete$6 = 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$1(editor, forward, startElm) : deleteRange$1(editor, startElm);\n };\n var TableDelete = { backspaceDelete: backspaceDelete$6 };\n\n var deleteCaret$2 = function (editor, forward) {\n var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return CaretFinder.fromPosition(forward, editor.getBody(), fromPos).filter(function (pos) {\n return forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos);\n }).bind(function (pos) {\n return Option.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, pos));\n }).map(function (elm) {\n editor.selection.select(elm);\n return true;\n }).getOr(false);\n };\n var backspaceDelete$7 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : false;\n };\n var PageBreakDelete = { backspaceDelete: backspaceDelete$7 };\n\n var isEditable$1 = function (target) {\n return closest(target, function (elm) {\n return NodeType.isContentEditableTrue(elm.dom()) || NodeType.isContentEditableFalse(elm.dom());\n }).exists(function (elm) {\n return NodeType.isContentEditableTrue(elm.dom());\n });\n };\n var parseIndentValue = function (value) {\n var number = parseInt(value, 10);\n return isNaN(number) ? 0 : number;\n };\n var getIndentStyleName = function (useMargin, element) {\n var indentStyleName = useMargin || isTable$1(element) ? 'margin' : 'padding';\n var suffix = get$4(element, 'direction') === 'rtl' ? '-right' : '-left';\n return indentStyleName + suffix;\n };\n var indentElement = function (dom, command, useMargin, value, unit, element) {\n var indentStyleName = getIndentStyleName(useMargin, Element.fromDom(element));\n if (command === 'outdent') {\n var styleValue = Math.max(0, parseIndentValue(element.style[indentStyleName]) - value);\n dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n } else {\n var styleValue = parseIndentValue(element.style[indentStyleName]) + value + unit;\n dom.setStyle(element, indentStyleName, styleValue);\n }\n };\n var validateBlocks = function (editor, blocks) {\n return forall(blocks, function (block) {\n var indentStyleName = getIndentStyleName(Settings.shouldIndentUseMargin(editor), block);\n var intentValue = getRaw(block, indentStyleName).map(parseIndentValue).getOr(0);\n var contentEditable = editor.dom.getContentEditable(block.dom());\n return contentEditable !== 'false' && intentValue > 0;\n });\n };\n var canOutdent = function (editor) {\n var blocks = getBlocksToIndent(editor);\n return !editor.mode.isReadOnly() && (blocks.length > 1 || validateBlocks(editor, blocks));\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) && isEditable$1(el);\n });\n };\n var handle = function (editor, command) {\n var dom = editor.dom, selection = editor.selection, formatter = editor.formatter;\n var indentation = Settings.getIndentation(editor);\n var indentUnit = /[a-z%]+$/i.exec(indentation)[0];\n var indentValue = parseInt(indentation, 10);\n var useMargin = Settings.shouldIndentUseMargin(editor);\n var forcedRootBlock = Settings.getForcedRootBlock(editor);\n if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {\n if (forcedRootBlock === '' && !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 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$2(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 backspaceDelete$8 = function (editor, _caret, _forward) {\n if (editor.selection.isCollapsed() && canOutdent(editor)) {\n var dom = editor.dom;\n var rng = editor.selection.getRng();\n var pos = CaretPosition$1.fromRangeStart(rng);\n var block = dom.getParent(rng.startContainer, dom.isBlock);\n if (block !== null && isAtStartOfBlock(Element.fromDom(block), pos)) {\n handle(editor, 'outdent');\n return true;\n }\n }\n return false;\n };\n var Outdent = { backspaceDelete: backspaceDelete$8 };\n\n var executeKeydownOverride$1 = function (editor, caret, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(Outdent.backspaceDelete, editor, false)\n },\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(BoundaryDelete.backspaceDelete, editor, caret, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(BoundaryDelete.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(PageBreakDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(PageBreakDelete.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$a = 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$a };\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 node, rng, lastNode = root;\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(nbsp), root.firstChild);\n }\n }\n rng = dom.createRng();\n root.normalize();\n if (root.hasChildNodes()) {\n var 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 ScrollIntoView.scrollRangeIntoView(editor, rng);\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 = 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 };\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$4 = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var emptyBlock = function (elm) {\n elm.innerHTML = '
    ';\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 = filter$1(forcedRootBlockAttrs, function (_, attrs) {\n return !contains(appliedAttrs, attrs);\n });\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$4(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$1 = 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 node, name;\n var 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 var 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 && evt.shiftKey);\n var ctrlKey = !!(evt && evt.ctrlKey);\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' && !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$1 };\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', {}, ' ');\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$2 = 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$2 };\n\n var matchesSelector = function (editor, selector) {\n return NewLineUtils.getParentBlock(editor).filter(function (parentBlock) {\n return selector.length > 0 && is(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 && 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 handleEnterKeyEvent = function (editor, event) {\n if (event.isDefaultPrevented()) {\n return;\n }\n event.preventDefault();\n endTypingLevelIgnoreLocks(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$b = 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$b };\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, nbsp);\n var insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\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$4(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$1(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(chars[i - 1]) && isContent(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$c = 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$c };\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$d = function (editor) {\n editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n };\n var CaretContainerInput = { setup: setup$d };\n\n var browser$5 = detect$3().browser;\n var setupIeInput = function (editor) {\n var keypressThrotter = first(function () {\n if (!editor.composing) {\n normalizeNbspsInEditor(editor);\n }\n }, 0);\n if (browser$5.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$e = 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$f = 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$f };\n\n var setup$g = 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$e(editor);\n HomeEndKeys.setup(editor);\n };\n var KeyboardOverrides = { setup: setup$g };\n\n var NodeChange = function () {\n function NodeChange(editor) {\n this.lastPath = [];\n this.editor = editor;\n var lastRng;\n var self = this;\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) && !self.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 }\n NodeChange.prototype.nodeChanged = function (args) {\n var selection = this.editor.selection;\n var node, parents, root;\n if (this.editor.initialized && selection && !this.editor.settings.disable_nodechange && !this.editor.mode.isReadOnly()) {\n root = this.editor.getBody();\n node = selection.getStart(true) || root;\n if (node.ownerDocument !== this.editor.getDoc() || !this.editor.dom.isChildOf(node, root)) {\n node = root;\n }\n parents = [];\n this.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 this.editor.fire('NodeChange', args);\n }\n };\n NodeChange.prototype.isSameElementPath = function (startElm) {\n var i, currentPath;\n currentPath = this.editor.$(startElm).parentsUntil(this.editor.getBody()).add(startElm);\n if (currentPath.length === this.lastPath.length) {\n for (i = currentPath.length; i >= 0; i--) {\n if (currentPath[i] !== this.lastPath[i]) {\n break;\n }\n }\n if (i === -1) {\n this.lastPath = currentPath;\n return true;\n }\n }\n this.lastPath = currentPath;\n return false;\n };\n return NodeChange;\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$h = function (editor) {\n preventSummaryToggle(editor);\n filterDetails(editor);\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$i = function (editor) {\n editor.on('click', function (e) {\n if (e.detail >= 3) {\n normalizeSelection$1(editor);\n }\n });\n };\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$a = NodeType.isContentEditableFalse, isContentEditableTrue$4 = NodeType.isContentEditableTrue;\n var isDraggable = function (rootElm, elm) {\n return isContentEditableFalse$a(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 return !isContentEditableFalse$a(targetElement);\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$a, isContentEditableTrue$4)).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$a(realTarget) || isContentEditableFalse$a(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$j = function (editor) {\n var renderFocusCaret = first(function () {\n if (!editor.removed && editor.getBody().contains(domGlobals.document.activeElement)) {\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$j };\n\n var isContentEditableTrue$5 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$b = NodeType.isContentEditableFalse;\n var getContentEditableRoot$2 = function (editor, node) {\n var root = editor.getBody();\n while (node && node !== root) {\n if (isContentEditableTrue$5(node) || isContentEditableFalse$b(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, rootNode, 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 showBlockCaretContainer = function (blockCaretContainer) {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n setRange(getRange());\n editor.selection.scrollIntoView(blockCaretContainer);\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$2(editor, e.target);\n if (contentEditableRoot) {\n if (isContentEditableFalse$b(contentEditableRoot)) {\n e.preventDefault();\n editor.focus();\n }\n if (isContentEditableTrue$5(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 editor.on('tap', function (e) {\n var contentEditableRoot = getContentEditableRoot$2(editor, e.target);\n if (isContentEditableFalse$b(contentEditableRoot)) {\n e.preventDefault();\n setContentEditableSelection(selectNode(editor, contentEditableRoot));\n }\n }, true);\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$b(getContentEditableRoot$2(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$2(editor, targetElm);\n if (contentEditableRoot) {\n if (isContentEditableFalse$b(contentEditableRoot)) {\n e.preventDefault();\n setContentEditableSelection(selectNode(editor, contentEditableRoot));\n } else {\n removeContentEditableSelection();\n if (!(isContentEditableTrue$5(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$b(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 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, rootNode, 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, rootNode, 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$b(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$b(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 = $('
    ').attr('id', realSelectionId);\n $realSelectionContainer.appendTo(editor.getBody());\n }\n range = editor.dom.createRng();\n if (targetClone === origTargetClone && Env.ie) {\n $realSelectionContainer.empty().append('

    \\xA0

    ').append(targetClone);\n range.setStartAfter($realSelectionContainer[0].firstChild.firstChild);\n range.setEndAfter(targetClone);\n } else {\n $realSelectionContainer.empty().append(nbsp).append(targetClone).append(nbsp);\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 var nodeElm = Element.fromDom(node);\n each(descendants$1(Element.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {\n if (!eq(nodeElm, elm)) {\n remove$1(elm, 'data-mce-selected');\n }\n });\n if (!editor.dom.getAttrib(node, 'data-mce-selected')) {\n node.setAttribute('data-mce-selected', '1');\n }\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);\n selectedContentEditableNode = null;\n }\n descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove);\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 }\n return {\n showCaret: showCaret,\n showBlockCaretContainer: showBlockCaretContainer,\n hideFakeCaret: hideFakeCaret,\n destroy: destroy\n };\n };\n\n var Quirks = function (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.inline) {\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.getForcedRootBlock(editor));\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 var selection_1 = editor.selection.getSel();\n selection_1.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 false;\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 DOM$4 = 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, value;\n var dom = editor.dom;\n var internalName = 'data-mce-' + name;\n while (i--) {\n node = nodes[i];\n value = node.attr(name);\n if (value && !node.attr(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 if (editor.settings.preserve_cdata) {\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[' + editor.dom.encode(node.value) + ']]';\n }\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 moveSelectionToFirstCaretPosition = function (editor) {\n var root = editor.dom.getRoot();\n if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root)) {\n CaretFinder.firstPositionIn(root).each(function (pos) {\n var node = pos.getNode();\n var caretPos = NodeType.isTable(node) ? CaretFinder.firstPositionIn(node).getOr(pos) : pos;\n if (Env.browser.isIE()) {\n SelectionBookmark.storeNative(editor, caretPos.toRange());\n } else {\n editor.selection.setRng(caretPos.toRange());\n }\n });\n }\n };\n var initEditor = function (editor) {\n editor.bindPendingEventDelegates();\n editor.initialized = true;\n fireInit(editor);\n editor.focus(true);\n moveSelectionToFirstCaretPosition(editor);\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$4.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 && !editor.inline) {\n doc.open();\n doc.write(editor.iframeHTML);\n doc.close();\n }\n if (editor.inline) {\n editor.on('remove', function () {\n var bodyEl = this.getBody();\n DOM$4.removeClass(bodyEl, 'mce-content-body');\n DOM$4.removeClass(bodyEl, 'mce-edit-focus');\n DOM$4.setAttrib(bodyEl, 'contentEditable', null);\n });\n DOM$4.addClass(targetElm, 'mce-content-body');\n editor.contentDocument = doc = domGlobals.document;\n editor.contentWindow = domGlobals.window;\n editor.bodyElement = targetElm;\n editor.contentAreaContainer = targetElm;\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$4.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 update_styles: true,\n root_element: editor.inline ? editor.getBody() : null,\n collect: function () {\n return editor.inline;\n },\n schema: editor.schema,\n contentCssCors: Settings.shouldUseContentCssCors(editor),\n referrerPolicy: Settings.getReferrerPolicy(editor),\n onSetAttrib: function (e) {\n editor.fire('SetAttrib', e);\n }\n });\n editor.parser = createParser(editor);\n editor.serializer = Serializer$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 TouchEvents.setup(editor);\n setup$h(editor);\n setup$i(editor);\n KeyboardOverrides.setup(editor);\n ForceBlocks.setup(editor);\n setup$6(editor);\n firePreInit(editor);\n if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {\n doc.body.spellcheck = false;\n DOM$4.setAttrib(body, 'spellcheck', 'false');\n }\n editor.quirks = Quirks(editor);\n firePostRender(editor);\n var directionality = Settings.getDirectionality(editor);\n if (directionality !== undefined) {\n body.dir = directionality;\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 '';\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$5 = DOMUtils$1.DOM;\n var relaxDomain = function (editor, ifr) {\n if (domGlobals.document.domain !== domGlobals.window.location.hostname && Env.browser.isIE()) {\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$5.setAttrib(ifr, 'src', domainRelaxUrl);\n return true;\n }\n return false;\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 add$3(iframe, 'tox-edit-area__iframe');\n return iframe;\n };\n var getIframeHtml = function (editor) {\n var bodyId, bodyClass, iframeHTML;\n iframeHTML = Settings.getDocType(editor) + '';\n if (Settings.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '';\n }\n iframeHTML += '';\n bodyId = Settings.getBodyId(editor);\n bodyClass = Settings.getBodyClass(editor);\n if (Settings.getContentSecurityPolicy(editor)) {\n iframeHTML += '';\n }\n iframeHTML += '
    ';\n return iframeHTML;\n };\n var createIframe = function (editor, o) {\n var title = editor.editorManager.translate('Rich Text Area. 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$5.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$5.get(boxInfo.editorContainer).style.display = editor.orgDisplay;\n editor.hidden = DOM$5.isHidden(boxInfo.editorContainer);\n }\n editor.getElement().style.display = 'none';\n DOM$5.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$6 = DOMUtils$1.DOM;\n var initPlugin = function (editor, initializedPlugins, plugin) {\n var Plugin = PluginManager.get(plugin);\n var pluginUrl = PluginManager.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n plugin = Tools.trim(plugin);\n if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n Tools.each(PluginManager.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 initIcons = function (editor) {\n var iconPackName = Tools.trim(editor.settings.icons);\n var currentIcons = editor.ui.registry.getAll().icons;\n var defaultIcons = getAll();\n var loadIcons = __assign(__assign({}, defaultIcons), IconManager.get(iconPackName).icons);\n each$1(loadIcons, function (svgData, icon) {\n if (!has(currentIcons, icon)) {\n editor.ui.registry.addIcon(icon, svgData);\n }\n });\n };\n var initTheme = function (editor) {\n var theme = editor.settings.theme;\n if (isString(theme)) {\n editor.settings.theme = trimLegacyPrefix(theme);\n var 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 return editor.theme.renderUI();\n };\n var renderFromThemeFunc = function (editor) {\n var elm = editor.getElement();\n var theme = editor.settings.theme;\n var info = 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$6.create('div');\n DOM$6.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 elm = editor.getElement();\n editor.orgDisplay = elm.style.display;\n if (isString(editor.settings.theme)) {\n return renderFromLoadedTheme(editor);\n } else if (isFunction(editor.settings.theme)) {\n return renderFromThemeFunc(editor);\n } else {\n return renderThemeFalse(editor);\n }\n };\n var init$2 = function (editor) {\n editor.fire('ScriptsLoaded');\n initIcons(editor);\n initTheme(editor);\n initPlugins(editor);\n var boxInfo = renderThemeUi(editor);\n editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;\n appendContentCssFromSettings(editor);\n if (editor.inline) {\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$7 = DOMUtils$1.DOM;\n var hasSkipLoadPrefix = function (name) {\n return name.charAt(0) === '-';\n };\n var loadLanguage = function (scriptLoader, editor) {\n var languageCode = Settings.getLanguageCode(editor);\n var languageUrl = Settings.getLanguageUrl(editor);\n if (I18n.hasCode(languageCode) === false && languageCode !== 'en') {\n var url_1 = languageUrl !== '' ? languageUrl : editor.editorManager.baseURL + '/langs/' + languageCode + '.js';\n scriptLoader.add(url_1, noop, undefined, function () {\n ErrorReporter.languageLoadError(editor, url_1, languageCode);\n });\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 getIconsUrlMetaFromUrl = function (editor) {\n return Option.from(Settings.getIconsUrl(editor)).filter(function (url) {\n return url.length > 0;\n }).map(function (url) {\n return {\n url: url,\n name: Option.none()\n };\n });\n };\n var getIconsUrlMetaFromName = function (editor) {\n return Option.from(Settings.getIconPackName(editor)).filter(function (name) {\n return name.length > 0 && !IconManager.has(name);\n }).map(function (name) {\n return {\n url: editor.editorManager.baseURL + '/icons/' + name + '/icons.js',\n name: Option.some(name)\n };\n });\n };\n var loadIcons = function (scriptLoader, editor) {\n getIconsUrlMetaFromUrl(editor).orThunk(function () {\n return getIconsUrlMetaFromName(editor);\n }).each(function (urlMeta) {\n scriptLoader.add(urlMeta.url, noop, undefined, function () {\n ErrorReporter.iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined());\n });\n });\n };\n var loadPlugins = function (editor, settings, suffix) {\n if (isArray(settings.plugins)) {\n settings.plugins = settings.plugins.join(' ');\n }\n Tools.each(settings.external_plugins, function (url, name) {\n PluginManager.load(name, url, noop, undefined, function () {\n ErrorReporter.pluginLoadError(editor, url, name);\n });\n settings.plugins += ' ' + name;\n });\n Tools.each(settings.plugins.split(/[ ,]/), function (plugin) {\n plugin = Tools.trim(plugin);\n if (plugin && !PluginManager.urls[plugin]) {\n if (hasSkipLoadPrefix(plugin)) {\n plugin = plugin.substr(1, plugin.length);\n var dependencies = PluginManager.dependencies(plugin);\n Tools.each(dependencies, function (depPlugin) {\n var defaultSettings = {\n prefix: 'plugins/',\n resource: depPlugin,\n suffix: '/plugin' + suffix + '.js'\n };\n var dep = PluginManager.createUrl(defaultSettings, depPlugin);\n PluginManager.load(dep.resource, dep, noop, undefined, function () {\n ErrorReporter.pluginLoadError(editor, dep.prefix + dep.resource + dep.suffix, dep.resource);\n });\n });\n } else {\n var url_2 = {\n prefix: 'plugins/',\n resource: plugin,\n suffix: '/plugin' + suffix + '.js'\n };\n PluginManager.load(plugin, url_2, noop, undefined, function () {\n ErrorReporter.pluginLoadError(editor, url_2.prefix + url_2.resource + url_2.suffix, plugin);\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 loadIcons(scriptLoader, editor);\n loadPlugins(editor, editor.settings, suffix);\n scriptLoader.loadQueue(function () {\n if (!editor.removed) {\n Init.init(editor);\n }\n }, editor, function () {\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 I18n.setCode(Settings.getLanguageCode(editor));\n var readyHandler = function () {\n DOM$7.unbind(domGlobals.window, 'ready', readyHandler);\n editor.render();\n };\n if (!EventUtils.Event.domLoaded) {\n DOM$7.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$7.getParent(id, 'form');\n if (form) {\n editor.formElement = form;\n if (settings.hidden_input && !NodeType.isTextareaOrInput(editor.getElement())) {\n DOM$7.insertAfter(DOM$7.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$7.bind(form, 'submit reset', editor.formEventDelegate);\n editor.on('reset', function () {\n editor.resetContent();\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$7.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 hasOnlyOneChild$1 = function (node) {\n return node.firstChild && node.firstChild === node.lastChild;\n };\n var isPaddingNode = function (node) {\n return node.name === 'br' || node.value === nbsp;\n };\n var isPaddedEmptyBlock = function (schema, node) {\n var blockElements = schema.getBlockElements();\n return blockElements[node.name] && hasOnlyOneChild$1(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 === nbsp || 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$1 = 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$1 = 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$1(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter$1(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 isAfterNbsp = function (container, offset) {\n return NodeType.isText(container) && container.nodeValue[offset - 1] === nbsp;\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(/^ /, ' ');\n } else if (!hasSiblingText('previousSibling')) {\n html = html.replace(/^ /, ' ');\n }\n if (offset < container.length) {\n html = html.replace(/ (
    |)$/, ' ');\n } else if (!hasSiblingText('nextSibling')) {\n html = html.replace(/( | )(
    |)$/, ' ');\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] === nbsp) {\n container.deleteData(offset, 1);\n if (!/[\\u00a0| ]$/.test(value)) {\n value += ' ';\n }\n } else if (container.data[offset - 1] === nbsp) {\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$5 = NodeType.matchNodeNames([\n 'td',\n 'th'\n ]);\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$5(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 = Serializer({ validate: editor.settings.validate }, editor.schema);\n bookmarkHtml = '​';\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(//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 nativeCommand = function (editor, command) {\n editor.getDoc().execCommand(command, false, null);\n };\n var deleteCommand = function (editor) {\n if (Outdent.backspaceDelete(editor, false)) {\n return;\n } else if (CefDelete.backspaceDelete(editor, false)) {\n return;\n } else if (CefBoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (BoundaryDelete.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 (BoundaryDelete.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 ancestor$3 = function (scope, transform, 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 var transformed = transform(el);\n if (transformed.isSome()) {\n return transformed;\n } else if (stop(el)) {\n break;\n }\n }\n return Option.none();\n };\n var closest$2 = function (scope, transform, isRoot) {\n var current = transform(scope);\n return current.orThunk(function () {\n return isRoot(scope) ? Option.none() : ancestor$3(scope, transform, isRoot);\n });\n };\n\n var legacyPropNames = {\n 'font-size': 'size',\n 'font-family': 'face'\n };\n var getSpecifiedFontProp = function (propName, rootElm, elm) {\n var getProperty = function (elm) {\n return getRaw(elm, propName).orThunk(function () {\n if (name(elm) === 'font') {\n return get(legacyPropNames, propName).bind(function (legacyPropName) {\n return getOpt(elm, legacyPropName);\n });\n } else {\n return Option.none();\n }\n });\n };\n var isRoot = function (elm) {\n return eq(Element.fromDom(rootElm), elm);\n };\n return closest$2(Element.fromDom(elm), function (elm) {\n return getProperty(elm);\n }, isRoot);\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 normalizeFontNames = function (font) {\n var fonts = font.split(/\\s*,\\s*/);\n return map(fonts, function (font) {\n if (font.indexOf(' ') !== -1 && !(startsWith(font, '\"') || startsWith(font, '\\''))) {\n return '\\'' + font + '\\'';\n } else {\n return font;\n }\n }).join(',');\n };\n var fontNameAction = function (editor, value) {\n var font = fromFontSizeNumber(editor, value);\n editor.formatter.toggle('fontname', { value: normalizeFontNames(font) });\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 each$f = Tools.each;\n var map$3 = Tools.map, inArray$2 = Tools.inArray;\n var EditorCommands = function () {\n function EditorCommands(editor) {\n this.commands = {\n state: {},\n exec: {},\n value: {}\n };\n this.editor = editor;\n this.setupCommands(editor);\n }\n EditorCommands.prototype.execCommand = function (command, ui, value, args) {\n var func, customCommand, state = false;\n var self = this;\n if (self.editor.removed) {\n return;\n }\n if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {\n self.editor.focus();\n } else {\n SelectionBookmark.restore(self.editor);\n }\n args = self.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 = self.commands.exec[customCommand]) {\n func(customCommand, ui, value);\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n each$f(this.editor.plugins, function (p) {\n if (p.execCommand && p.execCommand(command, ui, value)) {\n self.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 (self.editor.theme && self.editor.theme.execCommand && self.editor.theme.execCommand(command, ui, value)) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n try {\n state = self.editor.getDoc().execCommand(command, ui, value);\n } catch (ex) {\n }\n if (state) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n return false;\n };\n EditorCommands.prototype.queryCommandState = function (command) {\n var func;\n if (this.editor.quirks.isHidden() || this.editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = this.commands.state[command]) {\n return func(command);\n }\n try {\n return this.editor.getDoc().queryCommandState(command);\n } catch (ex) {\n }\n return false;\n };\n EditorCommands.prototype.queryCommandValue = function (command) {\n var func;\n if (this.editor.quirks.isHidden() || this.editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = this.commands.value[command]) {\n return func(command);\n }\n try {\n return this.editor.getDoc().queryCommandValue(command);\n } catch (ex) {\n }\n };\n EditorCommands.prototype.addCommands = function (commandList, type) {\n var self = this;\n type = type || 'exec';\n each$f(commandList, function (callback, command) {\n each$f(command.toLowerCase().split(','), function (command) {\n self.commands[type][command] = callback;\n });\n });\n };\n EditorCommands.prototype.addCommand = function (command, callback, scope) {\n var _this = this;\n command = command.toLowerCase();\n this.commands.exec[command] = function (command, ui, value, args) {\n return callback.call(scope || _this.editor, ui, value, args);\n };\n };\n EditorCommands.prototype.queryCommandSupported = function (command) {\n command = command.toLowerCase();\n if (this.commands.exec[command]) {\n return true;\n }\n try {\n return this.editor.getDoc().queryCommandSupported(command);\n } catch (ex) {\n }\n return false;\n };\n EditorCommands.prototype.addQueryStateHandler = function (command, callback, scope) {\n var _this = this;\n command = command.toLowerCase();\n this.commands.state[command] = function () {\n return callback.call(scope || _this.editor);\n };\n };\n EditorCommands.prototype.addQueryValueHandler = function (command, callback, scope) {\n var _this = this;\n command = command.toLowerCase();\n this.commands.value[command] = function () {\n return callback.call(scope || _this.editor);\n };\n };\n EditorCommands.prototype.hasCustomCommand = function (command) {\n command = command.toLowerCase();\n return !!this.commands.exec[command];\n };\n EditorCommands.prototype.execNativeCommand = function (command, ui, value) {\n if (ui === undefined) {\n ui = false;\n }\n if (value === undefined) {\n value = null;\n }\n return this.editor.getDoc().execCommand(command, ui, value);\n };\n EditorCommands.prototype.isFormatMatch = function (name) {\n return this.editor.formatter.match(name);\n };\n EditorCommands.prototype.toggleFormat = function (name, value) {\n this.editor.formatter.toggle(name, value ? { value: value } : undefined);\n this.editor.nodeChanged();\n };\n EditorCommands.prototype.storeSelection = function (type) {\n this.selectionBookmark = this.editor.selection.getBookmark(type);\n };\n EditorCommands.prototype.restoreSelection = function () {\n this.editor.selection.moveToBookmark(this.selectionBookmark);\n };\n EditorCommands.prototype.setupCommands = function (editor) {\n var self = this;\n this.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 self.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 (editor.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 editor.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$f('left,center,right,justify'.split(','), function (name) {\n if (align !== name) {\n editor.formatter.remove('align' + name);\n }\n });\n if (align !== 'none') {\n self.toggleFormat('align' + align);\n }\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var listElm, listParent;\n self.execNativeCommand(command);\n listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n if (listElm) {\n listParent = listElm.parentNode;\n if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n self.storeSelection();\n editor.dom.split(listParent, listElm);\n self.restoreSelection();\n }\n }\n },\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n self.toggleFormat(command);\n },\n 'ForeColor,HiliteColor': function (command, ui, value) {\n self.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 editor.formatter.remove(command);\n },\n 'mceBlockQuote': function () {\n self.toggleFormat('blockquote');\n },\n 'FormatBlock': function (command, ui, value) {\n return self.toggleFormat(value || 'p');\n },\n 'mceCleanup': function () {\n var bookmark = editor.selection.getBookmark();\n editor.setContent(editor.getContent());\n editor.selection.moveToBookmark(bookmark);\n },\n 'mceRemoveNode': function (command, ui, value) {\n var node = value || editor.selection.getNode();\n if (node !== editor.getBody()) {\n self.storeSelection();\n editor.dom.remove(node, true);\n self.restoreSelection();\n }\n },\n 'mceSelectNodeDepth': function (command, ui, value) {\n var counter = 0;\n editor.dom.getParent(editor.selection.getNode(), function (node) {\n if (node.nodeType === 1 && counter++ === value) {\n editor.selection.select(node);\n return false;\n }\n }, editor.getBody());\n },\n 'mceSelectNode': function (command, ui, value) {\n editor.selection.select(value);\n },\n 'mceInsertContent': function (command, ui, value) {\n InsertContent.insertAtCaret(editor, value);\n },\n 'mceInsertRawHTML': function (command, ui, value) {\n editor.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 'mceInsertNewLine': function (command, ui, value) {\n InsertNewLine.insert(editor, value);\n },\n 'mceToggleFormat': function (command, ui, value) {\n self.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, '
    ');\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, editor.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 = editor.dom.getParent(editor.selection.getNode(), 'a');\n value.href = value.href.replace(/ /g, '%20');\n if (!anchor || !value.href) {\n editor.formatter.remove('link');\n }\n if (value.href) {\n editor.formatter.apply('link', value, anchor);\n }\n },\n 'selectAll': function () {\n var editingHost = editor.dom.getParent(editor.selection.getStart(), NodeType.isContentEditableTrue);\n if (editingHost) {\n var rng = editor.dom.createRng();\n rng.selectNodeContents(editingHost);\n editor.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 = editor.selection.isCollapsed() ? [editor.dom.getParent(editor.selection.getNode(), editor.dom.isBlock)] : editor.selection.getSelectedBlocks();\n var matches = map$3(nodes, function (node) {\n return !!editor.formatter.matchNode(node, name);\n });\n return inArray$2(matches, true) !== -1;\n };\n };\n self.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 self.isFormatMatch(command);\n },\n 'mceBlockQuote': function () {\n return self.isFormatMatch('blockquote');\n },\n 'Outdent': function () {\n return canOutdent(editor);\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var list = editor.dom.getParent(editor.selection.getNode(), 'ul,ol');\n return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');\n }\n }, 'state');\n self.addCommands({\n Undo: function () {\n editor.undoManager.undo();\n },\n Redo: function () {\n editor.undoManager.redo();\n }\n });\n self.addQueryValueHandler('FontName', function () {\n return fontNameQuery(editor);\n }, this);\n self.addQueryValueHandler('FontSize', function () {\n return fontSizeQuery(editor);\n }, this);\n };\n return EditorCommands;\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 beforeinput contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel', ' ');\n var EventDispatcher = function () {\n function EventDispatcher(settings) {\n this.bindings = {};\n this.settings = settings || {};\n this.scope = this.settings.scope || this;\n this.toggleEvent = this.settings.toggleEvent || never;\n }\n EventDispatcher.isNative = function (name) {\n return !!nativeEvents[name.toLowerCase()];\n };\n EventDispatcher.prototype.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 = this.scope;\n }\n if (!args.preventDefault) {\n args.preventDefault = function () {\n args.isDefaultPrevented = always;\n };\n args.stopPropagation = function () {\n args.isPropagationStopped = always;\n };\n args.stopImmediatePropagation = function () {\n args.isImmediatePropagationStopped = always;\n };\n args.isDefaultPrevented = never;\n args.isPropagationStopped = never;\n args.isImmediatePropagationStopped = never;\n }\n if (this.settings.beforeFire) {\n this.settings.beforeFire(args);\n }\n handlers = this.bindings[name];\n if (handlers) {\n for (i = 0, l = handlers.length; i < l; i++) {\n callback = handlers[i];\n if (callback.once) {\n this.off(name, callback.func);\n }\n if (args.isImmediatePropagationStopped()) {\n args.stopPropagation();\n return args;\n }\n if (callback.func.call(this.scope, args) === false) {\n args.preventDefault();\n return args;\n }\n }\n }\n return args;\n };\n EventDispatcher.prototype.on = function (name, callback, prepend, extra) {\n var handlers, names, i;\n if (callback === false) {\n callback = never;\n }\n if (callback) {\n var wrappedCallback = { func: callback };\n if (extra) {\n Tools.extend(wrappedCallback, extra);\n }\n names = name.toLowerCase().split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n handlers = this.bindings[name];\n if (!handlers) {\n handlers = this.bindings[name] = [];\n this.toggleEvent(name, true);\n }\n if (prepend) {\n handlers.unshift(wrappedCallback);\n } else {\n handlers.push(wrappedCallback);\n }\n }\n }\n return this;\n };\n EventDispatcher.prototype.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 = this.bindings[name];\n if (!name) {\n for (bindingName in this.bindings) {\n this.toggleEvent(bindingName, false);\n delete this.bindings[bindingName];\n }\n return this;\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 this.bindings[name] = handlers;\n }\n }\n }\n if (!handlers.length) {\n this.toggleEvent(name, false);\n delete this.bindings[name];\n }\n }\n }\n } else {\n for (name in this.bindings) {\n this.toggleEvent(name, false);\n }\n this.bindings = {};\n }\n return this;\n };\n EventDispatcher.prototype.once = function (name, callback, prepend) {\n return this.on(name, callback, prepend, { once: true });\n };\n EventDispatcher.prototype.has = function (name) {\n name = name.toLowerCase();\n return !(!this.bindings[name] || this.bindings[name].length === 0);\n };\n return EventDispatcher;\n }();\n\n var getEventDispatcher = function (obj) {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new EventDispatcher({\n scope: obj,\n toggleEvent: function (name, state) {\n if (EventDispatcher.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 var dispatcherArgs = getEventDispatcher(self).fire(name, args);\n if (bubble !== false && self.parent) {\n var parent_1 = self.parent();\n while (parent_1 && !dispatcherArgs.isPropagationStopped()) {\n parent_1.fire(name, dispatcherArgs, false);\n parent_1 = parent_1.parent();\n }\n }\n return dispatcherArgs;\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 internalContentEditableAttr = 'data-mce-contenteditable';\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$3(elm, cls);\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 setContentEditable = function (elm, state) {\n elm.dom().contentEditable = state ? 'true' : 'false';\n };\n var switchOffContentEditableTrue = function (elm) {\n each(descendants$1(elm, '*[contenteditable=\"true\"]'), function (elm) {\n set(elm, internalContentEditableAttr, 'true');\n setContentEditable(elm, false);\n });\n };\n var switchOnContentEditableTrue = function (elm) {\n each(descendants$1(elm, '*[' + internalContentEditableAttr + '=\"true\"]'), function (elm) {\n remove$1(elm, internalContentEditableAttr);\n setContentEditable(elm, true);\n });\n };\n var removeFakeSelection = function (editor) {\n Option.from(editor.selection.getNode()).each(function (elm) {\n elm.removeAttribute('data-mce-selected');\n });\n };\n var restoreFakeSelection = function (editor) {\n editor.selection.setRng(editor.selection.getRng());\n };\n var toggleReadOnly = function (editor, state) {\n var body = Element.fromDom(editor.getBody());\n toggleClass(body, 'mce-content-readonly', state);\n if (state) {\n editor.selection.controlSelection.hideResizeRect();\n editor._selectionOverrides.hideFakeCaret();\n removeFakeSelection(editor);\n editor.readonly = true;\n setContentEditable(body, false);\n switchOffContentEditableTrue(body);\n } else {\n editor.readonly = false;\n setContentEditable(body, true);\n switchOnContentEditableTrue(body);\n setEditorCommandState(editor, 'StyleWithCSS', false);\n setEditorCommandState(editor, 'enableInlineTableEditing', false);\n setEditorCommandState(editor, 'enableObjectResizing', false);\n if (EditorFocus.hasEditorOrUiFocus(editor)) {\n editor.focus();\n }\n restoreFakeSelection(editor);\n editor.nodeChanged();\n }\n };\n var isReadOnly = function (editor) {\n return editor.readonly;\n };\n var registerFilters = function (editor) {\n editor.parser.addAttributeFilter('contenteditable', function (nodes) {\n if (isReadOnly(editor)) {\n each(nodes, function (node) {\n node.attr(internalContentEditableAttr, node.attr('contenteditable'));\n node.attr('contenteditable', 'false');\n });\n }\n });\n editor.serializer.addAttributeFilter(internalContentEditableAttr, function (nodes) {\n if (isReadOnly(editor)) {\n each(nodes, function (node) {\n node.attr('contenteditable', node.attr(internalContentEditableAttr));\n });\n }\n });\n editor.serializer.addTempAttr(internalContentEditableAttr);\n };\n var registerReadOnlyContentFilters = function (editor) {\n if (editor.serializer) {\n registerFilters(editor);\n } else {\n editor.on('PreInit', function () {\n registerFilters(editor);\n });\n }\n };\n var isClickEvent = function (e) {\n return e.type === 'click';\n };\n var isInAnchor = function (editor, target) {\n return editor.dom.getParent(target, 'a') !== null;\n };\n var preventReadOnlyEvents = function (editor, e) {\n var target = e.target;\n if (isClickEvent(e) && !VK.metaKeyPressed(e) && isInAnchor(editor, target)) {\n e.preventDefault();\n }\n };\n var registerReadOnlySelectionBlockers = function (editor) {\n editor.on('ShowCaret', function (e) {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n editor.on('ObjectSelected', function (e) {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n };\n\n var DOM$8 = 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$8.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 && !isReadOnly(editor);\n };\n var fireEvent = function (editor, eventName, e) {\n if (isListening(editor)) {\n editor.fire(eventName, e);\n } else if (isReadOnly(editor)) {\n preventReadOnlyEvents(editor, e);\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$8.isChildOf(target, body)) {\n fireEvent(editors[i], eventName, e);\n }\n }\n };\n customEventRootDelegates[eventName] = delegate;\n DOM$8.bind(eventRootElm, eventName, delegate);\n } else {\n delegate = function (e) {\n fireEvent(editor, eventName, e);\n };\n DOM$8.bind(eventRootElm, eventName, delegate);\n editor.delegates[eventName] = delegate;\n }\n };\n var EditorObservable = __assign(__assign({}, Observable), {\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\n var defaultModes = [\n 'design',\n 'readonly'\n ];\n var switchToMode = function (editor, activeMode, availableModes, mode) {\n var oldMode = availableModes[activeMode.get()];\n var newMode = availableModes[mode];\n try {\n newMode.activate();\n } catch (e) {\n domGlobals.console.error('problem while activating editor mode ' + mode + ':', e);\n return;\n }\n oldMode.deactivate();\n if (oldMode.editorReadOnly !== newMode.editorReadOnly) {\n toggleReadOnly(editor, newMode.editorReadOnly);\n }\n activeMode.set(mode);\n fireSwitchMode(editor, mode);\n };\n var setMode = function (editor, availableModes, activeMode, mode) {\n if (mode === activeMode.get()) {\n return;\n } else if (!has(availableModes, mode)) {\n throw new Error('Editor mode \\'' + mode + '\\' is invalid');\n }\n if (editor.initialized) {\n switchToMode(editor, activeMode, availableModes, mode);\n } else {\n editor.on('init', function () {\n return switchToMode(editor, activeMode, availableModes, mode);\n });\n }\n };\n var registerMode = function (availableModes, mode, api) {\n var _a;\n if (contains(defaultModes, mode)) {\n throw new Error('Cannot override default mode ' + mode);\n }\n return __assign(__assign({}, availableModes), (_a = {}, _a[mode] = __assign(__assign({}, api), {\n deactivate: function () {\n try {\n api.deactivate();\n } catch (e) {\n domGlobals.console.error('problem while deactivating editor mode ' + mode + ':', e);\n }\n }\n }), _a));\n };\n\n var create$4 = function (editor) {\n var activeMode = Cell('design');\n var availableModes = Cell({\n design: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: false\n },\n readonly: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: true\n }\n });\n registerReadOnlyContentFilters(editor);\n registerReadOnlySelectionBlockers(editor);\n return {\n isReadOnly: function () {\n return isReadOnly(editor);\n },\n set: function (mode) {\n return setMode(editor, availableModes.get(), activeMode, mode);\n },\n get: function () {\n return activeMode.get();\n },\n register: function (mode, api) {\n availableModes.set(registerMode(availableModes.get(), mode, api));\n }\n };\n };\n\n var each$g = Tools.each, explode$3 = 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 var Shortcuts = function () {\n function Shortcuts(editor) {\n this.shortcuts = {};\n this.pendingPatterns = [];\n this.editor = editor;\n var self = this;\n editor.on('keyup keypress keydown', function (e) {\n if ((self.hasModifier(e) || self.isFunctionKey(e)) && !e.isDefaultPrevented()) {\n each$g(self.shortcuts, function (shortcut) {\n if (self.matchShortcut(e, shortcut)) {\n self.pendingPatterns = shortcut.subpatterns.slice(0);\n if (e.type === 'keydown') {\n self.executeShortcutAction(shortcut);\n }\n return true;\n }\n });\n if (self.matchShortcut(e, self.pendingPatterns[0])) {\n if (self.pendingPatterns.length === 1) {\n if (e.type === 'keydown') {\n self.executeShortcutAction(self.pendingPatterns[0]);\n }\n }\n self.pendingPatterns.shift();\n }\n }\n });\n }\n Shortcuts.prototype.add = function (pattern, desc, cmdFunc, scope) {\n var self = this;\n var cmd;\n cmd = cmdFunc;\n if (typeof cmdFunc === 'string') {\n cmdFunc = function () {\n self.editor.execCommand(cmd, false, null);\n };\n } else if (Tools.isArray(cmd)) {\n cmdFunc = function () {\n self.editor.execCommand(cmd[0], cmd[1], cmd[2]);\n };\n }\n each$g(explode$3(Tools.trim(pattern)), function (pattern) {\n var shortcut = self.createShortcut(pattern, desc, cmdFunc, scope);\n self.shortcuts[shortcut.id] = shortcut;\n });\n return true;\n };\n Shortcuts.prototype.remove = function (pattern) {\n var shortcut = this.createShortcut(pattern);\n if (this.shortcuts[shortcut.id]) {\n delete this.shortcuts[shortcut.id];\n return true;\n }\n return false;\n };\n Shortcuts.prototype.parseShortcut = function (pattern) {\n var id, key;\n var shortcut = {};\n each$g(explode$3(pattern.toLowerCase(), '+'), 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 Shortcuts.prototype.createShortcut = function (pattern, desc, cmdFunc, scope) {\n var shortcuts;\n shortcuts = Tools.map(explode$3(pattern, '>'), this.parseShortcut);\n shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n func: cmdFunc,\n scope: scope || this.editor\n });\n return Tools.extend(shortcuts[0], {\n desc: this.editor.translate(desc),\n subpatterns: shortcuts.slice(1)\n });\n };\n Shortcuts.prototype.hasModifier = function (e) {\n return e.altKey || e.ctrlKey || e.metaKey;\n };\n Shortcuts.prototype.isFunctionKey = function (e) {\n return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n };\n Shortcuts.prototype.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 Shortcuts.prototype.executeShortcutAction = function (shortcut) {\n return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n };\n return Shortcuts;\n }();\n\n var create$5 = function () {\n var buttons = {};\n var menuItems = {};\n var popups = {};\n var icons = {};\n var contextMenus = {};\n var contextToolbars = {};\n var sidebars = {};\n var add = function (collection, type) {\n return function (name, spec) {\n return collection[name.toLowerCase()] = __assign(__assign({}, spec), { type: type });\n };\n };\n var addIcon = function (name, svgData) {\n return icons[name.toLowerCase()] = svgData;\n };\n return {\n addButton: add(buttons, 'button'),\n addGroupToolbarButton: add(buttons, 'grouptoolbarbutton'),\n addToggleButton: add(buttons, 'togglebutton'),\n addMenuButton: add(buttons, 'menubutton'),\n addSplitButton: add(buttons, 'splitbutton'),\n addMenuItem: add(menuItems, 'menuitem'),\n addNestedMenuItem: add(menuItems, 'nestedmenuitem'),\n addToggleMenuItem: add(menuItems, 'togglemenuitem'),\n addAutocompleter: add(popups, 'autocompleter'),\n addContextMenu: add(contextMenus, 'contextmenu'),\n addContextToolbar: add(contextToolbars, 'contexttoolbar'),\n addContextForm: add(contextToolbars, 'contextform'),\n addSidebar: add(sidebars, 'sidebar'),\n addIcon: addIcon,\n getAll: function () {\n return {\n buttons: buttons,\n menuItems: menuItems,\n icons: icons,\n popups: popups,\n contextMenus: contextMenus,\n contextToolbars: contextToolbars,\n sidebars: sidebars\n };\n }\n };\n };\n\n var registry = function () {\n var bridge = create$5();\n return {\n addAutocompleter: bridge.addAutocompleter,\n addButton: bridge.addButton,\n addContextForm: bridge.addContextForm,\n addContextMenu: bridge.addContextMenu,\n addContextToolbar: bridge.addContextToolbar,\n addIcon: bridge.addIcon,\n addMenuButton: bridge.addMenuButton,\n addMenuItem: bridge.addMenuItem,\n addNestedMenuItem: bridge.addNestedMenuItem,\n addSidebar: bridge.addSidebar,\n addSplitButton: bridge.addSplitButton,\n addToggleButton: bridge.addToggleButton,\n addGroupToolbarButton: bridge.addGroupToolbarButton,\n addToggleMenuItem: bridge.addToggleMenuItem,\n getAll: bridge.getAll\n };\n };\n\n var each$h = 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 () {\n function URI(url, settings) {\n url = trim$4(url);\n this.settings = settings || {};\n var baseUri = this.settings.base_uri;\n var self = this;\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 var baseUrl = this.settings.base_uri ? this.settings.base_uri.path : new URI(domGlobals.document.location.href).directory;\n if (this.settings.base_uri && this.settings.base_uri.protocol == '') {\n url = '//mce_host' + self.toAbsPath(baseUrl, url);\n } else {\n var match = /([^#?]*)([#?]?.*)/.exec(url);\n url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, match[1]) + match[2];\n }\n }\n url = url.replace(/@@/g, '(mce_at)');\n var urlMatch = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n each$h(queryParts, function (v, i) {\n var part = urlMatch[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.parseDataUri = function (uri) {\n var type;\n var uriComponents = decodeURIComponent(uri).split(',');\n var matches = /data:([^;]+)/.exec(uriComponents[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type: type,\n data: uriComponents[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 URI.prototype.setPath = function (path) {\n var pathMatch = /^(.*?)\\/?(\\w+)?$/.exec(path);\n this.path = pathMatch[0];\n this.directory = pathMatch[1];\n this.file = pathMatch[2];\n this.source = '';\n this.getURI();\n };\n URI.prototype.toRelative = function (uri) {\n var output;\n if (uri === './') {\n return uri;\n }\n var relativeUri = new URI(uri, { base_uri: this });\n if (relativeUri.host !== 'mce_host' && this.host !== relativeUri.host && relativeUri.host || this.port !== relativeUri.port || this.protocol !== relativeUri.protocol && relativeUri.protocol !== '') {\n return relativeUri.getURI();\n }\n var tu = this.getURI(), uu = relativeUri.getURI();\n if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {\n return tu;\n }\n output = this.toRelPath(this.path, relativeUri.path);\n if (relativeUri.query) {\n output += '?' + relativeUri.query;\n }\n if (relativeUri.anchor) {\n output += '#' + relativeUri.anchor;\n }\n return output;\n };\n URI.prototype.toAbsolute = function (uri, noHost) {\n var absoluteUri = new URI(uri, { base_uri: this });\n return absoluteUri.getURI(noHost && this.isSameOrigin(absoluteUri));\n };\n URI.prototype.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 URI.prototype.toRelPath = function (base, path) {\n var items, breakPoint = 0, out = '', i, l;\n var normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/');\n items = path.split('/');\n if (normalizedBase.length >= items.length) {\n for (i = 0, l = normalizedBase.length; i < l; i++) {\n if (i >= items.length || normalizedBase[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (normalizedBase.length < items.length) {\n for (i = 0, l = items.length; i < l; i++) {\n if (i >= normalizedBase.length || normalizedBase[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 = normalizedBase.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 URI.prototype.toAbsPath = function (base, path) {\n var i, nb = 0, o = [], tr, outPath;\n tr = /\\/$/.test(path) ? '/' : '';\n var normalizedBase = base.split('/');\n var normalizedPath = path.split('/');\n each$h(normalizedBase, function (k) {\n if (k) {\n o.push(k);\n }\n });\n normalizedBase = o;\n for (i = normalizedPath.length - 1, o = []; i >= 0; i--) {\n if (normalizedPath[i].length === 0 || normalizedPath[i] === '.') {\n continue;\n }\n if (normalizedPath[i] === '..') {\n nb++;\n continue;\n }\n if (nb > 0) {\n nb--;\n continue;\n }\n o.push(normalizedPath[i]);\n }\n i = normalizedBase.length - nb;\n if (i <= 0) {\n outPath = reverse(o).join('/');\n } else {\n outPath = normalizedBase.slice(0, i).join('/') + '/' + reverse(o).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 URI.prototype.getURI = function (noProtoHost) {\n if (noProtoHost === void 0) {\n noProtoHost = false;\n }\n var s;\n if (!this.source || noProtoHost) {\n s = '';\n if (!noProtoHost) {\n if (this.protocol) {\n s += this.protocol + '://';\n } else {\n s += '//';\n }\n if (this.userInfo) {\n s += this.userInfo + '@';\n }\n if (this.host) {\n s += this.host;\n }\n if (this.port) {\n s += ':' + this.port;\n }\n }\n if (this.path) {\n s += this.path;\n }\n if (this.query) {\n s += '?' + this.query;\n }\n if (this.anchor) {\n s += '#' + this.anchor;\n }\n this.source = s;\n }\n return this.source;\n };\n return URI;\n }();\n\n var DOM$9 = DOMUtils$1.DOM;\n var extend$3 = Tools.extend, each$i = Tools.each;\n var resolve$3 = Tools.resolve;\n var ie$1 = Env.ie;\n var Editor = function () {\n function Editor(id, settings, editorManager) {\n var _this = this;\n this.plugins = {};\n this.contentCSS = [];\n this.contentStyles = [];\n this.loadedCSS = {};\n this.isNotDirty = false;\n this.editorManager = editorManager;\n this.documentBaseUrl = editorManager.documentBaseURL;\n extend$3(this, EditorObservable);\n this.settings = getEditorSettings(this, id, this.documentBaseUrl, editorManager.defaultSettings, settings);\n if (this.settings.suffix) {\n editorManager.suffix = this.settings.suffix;\n }\n this.suffix = editorManager.suffix;\n if (this.settings.base_url) {\n editorManager._setBaseUrl(this.settings.base_url);\n }\n this.baseUri = editorManager.baseURI;\n if (this.settings.referrer_policy) {\n ScriptLoader.ScriptLoader._setReferrerPolicy(this.settings.referrer_policy);\n DOMUtils$1.DOM.styleSheetLoader._setReferrerPolicy(this.settings.referrer_policy);\n }\n AddOnManager$1.languageLoad = this.settings.language_load;\n AddOnManager$1.baseURL = editorManager.baseURL;\n this.id = id;\n this.setDirty(false);\n this.documentBaseURI = new URI(this.settings.document_base_url, { base_uri: this.baseUri });\n this.baseURI = this.baseUri;\n this.inline = !!this.settings.inline;\n this.shortcuts = new Shortcuts(this);\n this.editorCommands = new EditorCommands(this);\n if (this.settings.cache_suffix) {\n Env.cacheSuffix = this.settings.cache_suffix.replace(/^[\\?\\&]+/, '');\n }\n this.ui = { registry: registry() };\n var self = this;\n var modeInstance = create$4(self);\n this.mode = modeInstance;\n this.setMode = modeInstance.set;\n editorManager.fire('SetupEditor', { editor: this });\n this.execCallback('setup', this);\n this.$ = DomQuery.overrideDefaults(function () {\n return {\n context: _this.inline ? _this.getBody() : _this.getDoc(),\n element: _this.getBody()\n };\n });\n }\n Editor.prototype.render = function () {\n Render.render(this);\n };\n Editor.prototype.focus = function (skipFocus) {\n EditorFocus.focus(this, skipFocus);\n };\n Editor.prototype.hasFocus = function () {\n return EditorFocus.hasFocus(this);\n };\n Editor.prototype.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$3(scope) : 0;\n callback = resolve$3(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 Editor.prototype.translate = function (text) {\n return I18n.translate(text);\n };\n Editor.prototype.getParam = function (name, defaultVal, type) {\n return getParam(this, name, defaultVal, type);\n };\n Editor.prototype.nodeChanged = function (args) {\n this._nodeChangeDispatcher.nodeChanged(args);\n };\n Editor.prototype.addCommand = function (name, callback, scope) {\n this.editorCommands.addCommand(name, callback, scope);\n };\n Editor.prototype.addQueryStateHandler = function (name, callback, scope) {\n this.editorCommands.addQueryStateHandler(name, callback, scope);\n };\n Editor.prototype.addQueryValueHandler = function (name, callback, scope) {\n this.editorCommands.addQueryValueHandler(name, callback, scope);\n };\n Editor.prototype.addShortcut = function (pattern, desc, cmdFunc, scope) {\n this.shortcuts.add(pattern, desc, cmdFunc, scope);\n };\n Editor.prototype.execCommand = function (cmd, ui, value, args) {\n return this.editorCommands.execCommand(cmd, ui, value, args);\n };\n Editor.prototype.queryCommandState = function (cmd) {\n return this.editorCommands.queryCommandState(cmd);\n };\n Editor.prototype.queryCommandValue = function (cmd) {\n return this.editorCommands.queryCommandValue(cmd);\n };\n Editor.prototype.queryCommandSupported = function (cmd) {\n return this.editorCommands.queryCommandSupported(cmd);\n };\n Editor.prototype.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$9.show(self.getContainer());\n DOM$9.hide(self.id);\n }\n self.load();\n self.fire('show');\n }\n };\n Editor.prototype.hide = function () {\n var self = this, doc = self.getDoc();\n if (!self.hidden) {\n if (ie$1 && 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$9.hide(self.getContainer());\n DOM$9.setStyle(self.id, 'display', self.orgDisplay);\n }\n self.hidden = true;\n self.fire('hide');\n }\n };\n Editor.prototype.isHidden = function () {\n return !!this.hidden;\n };\n Editor.prototype.setProgressState = function (state, time) {\n this.fire('ProgressState', {\n state: state,\n time: time\n });\n };\n Editor.prototype.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 var value = NodeType.isTextareaOrInput(elm) ? elm.value : elm.innerHTML;\n html = self.setContent(value, 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 Editor.prototype.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 (!NodeType.isTextareaOrInput(elm)) {\n if (args.is_removing || !self.inline) {\n elm.innerHTML = html;\n }\n if (form = DOM$9.getParent(self.id, 'form')) {\n each$i(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 Editor.prototype.setContent = function (content, args) {\n return setContent(this, content, args);\n };\n Editor.prototype.getContent = function (args) {\n return getContent(this, args);\n };\n Editor.prototype.insertContent = function (content, args) {\n if (args) {\n content = extend$3({ content: content }, args);\n }\n this.execCommand('mceInsertContent', false, content);\n };\n Editor.prototype.resetContent = function (initialContent) {\n if (initialContent === undefined) {\n setContent(this, this.startContent, { format: 'raw' });\n } else {\n setContent(this, initialContent);\n }\n this.undoManager.reset();\n this.setDirty(false);\n this.nodeChanged();\n };\n Editor.prototype.isDirty = function () {\n return !this.isNotDirty;\n };\n Editor.prototype.setDirty = function (state) {\n var oldState = !this.isNotDirty;\n this.isNotDirty = !state;\n if (state && state !== oldState) {\n this.fire('dirty');\n }\n };\n Editor.prototype.getContainer = function () {\n var self = this;\n if (!self.container) {\n self.container = DOM$9.get(self.editorContainer || self.id + '_parent');\n }\n return self.container;\n };\n Editor.prototype.getContentAreaContainer = function () {\n return this.contentAreaContainer;\n };\n Editor.prototype.getElement = function () {\n if (!this.targetElm) {\n this.targetElm = DOM$9.get(this.id);\n }\n return this.targetElm;\n };\n Editor.prototype.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 Editor.prototype.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 Editor.prototype.getBody = function () {\n var doc = this.getDoc();\n return this.bodyElement || (doc ? doc.body : null);\n };\n Editor.prototype.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 Editor.prototype.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$i(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 Editor.prototype.remove = function () {\n remove$6(this);\n };\n Editor.prototype.destroy = function (automatic) {\n destroy(this, automatic);\n };\n Editor.prototype.uploadImages = function (callback) {\n return this.editorUpload.uploadImages(callback);\n };\n Editor.prototype._scanForImages = function () {\n return this.editorUpload.scanForImages();\n };\n Editor.prototype.addButton = function () {\n throw new Error('editor.addButton has been removed in tinymce 5x, use editor.ui.registry.addButton or editor.ui.registry.addToggleButton or editor.ui.registry.addSplitButton instead');\n };\n Editor.prototype.addSidebar = function () {\n throw new Error('editor.addSidebar has been removed in tinymce 5x, use editor.ui.registry.addSidebar instead');\n };\n Editor.prototype.addMenuItem = function () {\n throw new Error('editor.addMenuItem has been removed in tinymce 5x, use editor.ui.registry.addMenuItem instead');\n };\n Editor.prototype.addContextToolbar = function () {\n throw new Error('editor.addContextToolbar has been removed in tinymce 5x, use editor.ui.registry.addContextToolbar instead');\n };\n return Editor;\n }();\n\n var DOM$a = DOMUtils$1.DOM;\n var explode$4 = Tools.explode, each$j = Tools.each, extend$4 = Tools.extend;\n var instanceCounter = 0, boundGlobalEvents = false;\n var beforeUnloadDelegate;\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$j(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 var isQuirksMode = domGlobals.document.compatMode !== 'CSS1Compat';\n var EditorManager = __assign(__assign({}, Observable), {\n baseURI: null,\n baseURL: null,\n defaultSettings: {},\n documentBaseURL: null,\n suffix: null,\n $: DomQuery,\n majorVersion: '5',\n minorVersion: '2.2',\n releaseDate: '2020-04-23',\n editors: legacyEditors,\n i18n: I18n,\n activeEditor: null,\n focusedEditor: 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._setBaseUrl(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_1 in pluginBaseUrls) {\n AddOnManager$1.PluginManager.urls[name_1] = pluginBaseUrls[name_1];\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 table tbody tfoot thead tr th td 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$a.get(id)) {\n id = elm.name;\n } else {\n id = DOM$a.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$a.hasClass(elm, className);\n };\n var findTargets = function (settings) {\n var l, targets = [];\n if (Env.browser.isIE() && Env.browser.version.major < 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 } else if (isQuirksMode) {\n ErrorReporter.initError('Failed to initialize the editor as the document is not in standards mode. ' + 'TinyMCE requires standards mode.');\n return [];\n }\n if (settings.types) {\n each$j(settings.types, function (type) {\n targets = targets.concat(DOM$a.select(type.selector));\n });\n return targets;\n } else if (settings.selector) {\n return DOM$a.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$j(explode$4(l), function (id) {\n var elm;\n if (elm = DOM$a.get(id)) {\n targets.push(elm);\n } else {\n each$j(domGlobals.document.forms, function (f) {\n each$j(f.elements, function (e) {\n if (e.name === id) {\n id = 'mce_editor_' + instanceCounter++;\n DOM$a.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$j(DOM$a.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$a.unbind(window, 'ready', initEditors);\n execCallback('onpageload');\n targets = DomQuery.unique(findTargets(settings));\n if (settings.types) {\n each$j(settings.types, function (type) {\n Tools.each(targets, function (elm) {\n if (DOM$a.is(elm, type.selector)) {\n createEditor(createId(elm), extend$4({}, 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$j(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$a.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 (e) {\n var event = self.fire('BeforeUnload');\n if (event.returnValue) {\n e.preventDefault();\n e.returnValue = event.returnValue;\n return event.returnValue;\n }\n };\n window.addEventListener('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$j(DOM$a.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 window.removeEventListener('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$j(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 _setBaseUrl: function (baseUrl) {\n this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, ''));\n this.baseURI = new URI(this.baseURL);\n }\n });\n EditorManager.setup();\n\n function RangeUtils(dom) {\n var walk = function (rng, callback) {\n return RangeWalk.walk(dom, rng, callback);\n };\n var split = split$1;\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 awaiter = function (resolveCb, rejectCb, timeout) {\n if (timeout === void 0) {\n timeout = 1000;\n }\n var done = false;\n var timer = null;\n var complete = function (completer) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!done) {\n done = true;\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n timer = null;\n }\n completer.apply(null, args);\n }\n };\n };\n var resolve = complete(resolveCb);\n var reject = complete(rejectCb);\n var start = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!done && timer === null) {\n timer = domGlobals.setTimeout(function () {\n return reject.apply(null, args);\n }, timeout);\n }\n };\n return {\n start: start,\n resolve: resolve,\n reject: reject\n };\n };\n var create$6 = function () {\n var tasks = {};\n var resultFns = {};\n var load = function (id, url) {\n var loadErrMsg = 'Script at URL \"' + url + '\" failed to load';\n var runErrMsg = 'Script at URL \"' + url + '\" did not call `tinymce.Resource.add(\\'' + id + '\\', data)` within 1 second';\n if (tasks[id] !== undefined) {\n return tasks[id];\n } else {\n var task = new promiseObj(function (resolve, reject) {\n var waiter = awaiter(resolve, reject);\n resultFns[id] = waiter.resolve;\n ScriptLoader.ScriptLoader.loadScript(url, function () {\n return waiter.start(runErrMsg);\n }, function () {\n return waiter.reject(loadErrMsg);\n });\n });\n tasks[id] = task;\n return task;\n }\n };\n var add = function (id, data) {\n if (resultFns[id] !== undefined) {\n resultFns[id](data);\n delete resultFns[id];\n }\n tasks[id] = promiseObj.resolve(data);\n };\n return {\n load: load,\n add: add\n };\n };\n var Resource = create$6();\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$7(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$7(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$7(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$7(x1, y1, x2 - x1, y2 - y1);\n };\n var create$7 = 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$7(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$7,\n fromClientRect: fromClientRect\n };\n\n var each$k = Tools.each, extend$5 = 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$k(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$k(prop.Methods.split(','), function (name) {\n prop[name] = dummy;\n });\n }\n if (prop.Properties) {\n each$k(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$k(prop.Statics, function (func, name) {\n Class[name] = func;\n });\n }\n if (prop.Defaults && _super.Defaults) {\n prop.Defaults = extend$5({}, _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 (obj) {\n var data = JSON.stringify(obj);\n if (!isString(data)) {\n return data;\n }\n return data.replace(/[\\u0080-\\uFFFF]/g, function (match) {\n var hexCode = match.charCodeAt(0).toString(16);\n return '\\\\u' + '0000'.substring(hexCode.length) + hexCode;\n });\n };\n var JSONUtils = {\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 = __assign(__assign({}, Observable), {\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 Delay.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;\n settings.data = settings.data || '';\n XHR.fire('beforeInitialize', { settings: settings });\n xhr = new domGlobals.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 Delay.setTimeout(ready, 10);\n }\n }\n });\n\n var extend$6 = Tools.extend;\n var JSONRequest = function () {\n function JSONRequest(settings) {\n this.settings = extend$6({}, settings);\n this.count = 0;\n }\n JSONRequest.sendRPC = function (o) {\n return new JSONRequest().send(o);\n };\n JSONRequest.prototype.send = function (args) {\n var ecb = args.error, scb = args.success;\n var xhrArgs = extend$6(this.settings, args);\n xhrArgs.success = function (c, x) {\n c = JSONUtils.parse(c);\n if (typeof c === 'undefined') {\n c = { error: 'JSON Parse error.' };\n }\n if (c.error) {\n ecb.call(xhrArgs.error_scope || xhrArgs.scope, c.error, x);\n } else {\n scb.call(xhrArgs.success_scope || xhrArgs.scope, c.result);\n }\n };\n xhrArgs.error = function (ty, x) {\n if (ecb) {\n ecb.call(xhrArgs.error_scope || xhrArgs.scope, ty, x);\n }\n };\n xhrArgs.data = JSONUtils.serialize({\n id: args.id || 'c' + this.count++,\n method: args.method,\n params: args.params\n });\n xhrArgs.content_type = 'application/json';\n XHR.send(xhrArgs);\n };\n return JSONRequest;\n }();\n\n var create$8 = 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$8();\n }\n var LocalStorage = localStorage;\n\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: EventDispatcher,\n Observable: Observable,\n I18n: I18n,\n XHR: XHR,\n JSON: JSONUtils,\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 TextSeeker: TextSeeker,\n DOMUtils: DOMUtils$1,\n ScriptLoader: ScriptLoader,\n RangeUtils: RangeUtils$1,\n Serializer: Serializer$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: Serializer\n },\n Env: Env,\n AddOnManager: AddOnManager$1,\n Annotator: Annotator,\n Formatter: Formatter,\n UndoManager: UndoManager,\n EditorCommands: EditorCommands,\n WindowManager: WindowManager,\n NotificationManager: NotificationManager,\n EditorObservable: EditorObservable,\n Shortcuts: Shortcuts,\n Editor: Editor,\n FocusManager: FocusManager,\n EditorManager: EditorManager,\n DOM: DOMUtils$1.DOM,\n ScriptLoader: ScriptLoader.ScriptLoader,\n PluginManager: AddOnManager$1.PluginManager,\n ThemeManager: AddOnManager$1.ThemeManager,\n IconManager: IconManager,\n Resource: Resource,\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 var tinymce = Tools.extend(EditorManager, publicApi);\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","module.exports = __webpack_public_path__ + \"/tinymce/default/content.css\";","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n var never = constant(false);\n var always = constant(true);\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\n var punctuationStr = '[!-#%-*,-\\\\/:;?@\\\\[-\\\\]_{}\\xA1\\xAB\\xB7\\xBB\\xBF;\\xB7\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1361-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u3008\\u3009\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30\\u2E31\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uff3f\\uFF5B\\uFF5D\\uFF5F-\\uFF65]';\n var regExps = {\n aletter: '[A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05F3\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u10a0-\\u10c5\\u10d0-\\u10fa\\u10fc\\u1100-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1a00-\\u1a16\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bc0-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u24B6-\\u24E9\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2d00-\\u2d25\\u2d30-\\u2d65\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005\\u303b\\u303c\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790\\ua791\\ua7a0-\\ua7a9\\ua7fa-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uffa0-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]',\n midnumlet: '[-\\'\\\\.\\u2018\\u2019\\u2024\\uFE52\\uFF07\\uFF0E]',\n midletter: '[:\\xB7\\xB7\\u05F4\\u2027\\uFE13\\uFE55\\uFF1A]',\n midnum: '[\\xB1+*/,;;\\u0589\\u060C\\u060D\\u066C\\u07F8\\u2044\\uFE10\\uFE14\\uFE50\\uFE54\\uFF0C\\uFF1B]',\n numeric: '[0-9\\u0660-\\u0669\\u066B\\u06f0-\\u06f9\\u07c0-\\u07c9\\u0966-\\u096f\\u09e6-\\u09ef\\u0a66-\\u0a6f\\u0ae6-\\u0aef\\u0b66-\\u0b6f\\u0be6-\\u0bef\\u0c66-\\u0c6f\\u0ce6-\\u0cef\\u0d66-\\u0d6f\\u0e50-\\u0e59\\u0ed0-\\u0ed9\\u0f20-\\u0f29\\u1040-\\u1049\\u1090-\\u1099\\u17e0-\\u17e9\\u1810-\\u1819\\u1946-\\u194f\\u19d0-\\u19d9\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1b50-\\u1b59\\u1bb0-\\u1bb9\\u1c40-\\u1c49\\u1c50-\\u1c59\\ua620-\\ua629\\ua8d0-\\ua8d9\\ua900-\\ua909\\ua9d0-\\ua9d9\\uaa50-\\uaa59\\uabf0-\\uabf9]',\n cr: '\\\\r',\n lf: '\\\\n',\n newline: '[\\x0B\\f\\x85\\u2028\\u2029]',\n extend: '[\\u0300-\\u036f\\u0483-\\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\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0c01-\\u0c03\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d02\\u0d03\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f\\u109a-\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b6-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u19b0-\\u19c0\\u19c8\\u19c9\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1baa\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2\\u1dc0-\\u1de6\\u1dfc-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\uA672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa7b\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe3-\\uabea\\uabec\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]',\n format: '[\\xAD\\u0600-\\u0603\\u06DD\\u070F\\u17b4\\u17b5\\u200E\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u206A-\\u206F\\uFEFF\\uFFF9-\\uFFFB]',\n katakana: '[\\u3031-\\u3035\\u309B\\u309C\\u30A0-\\u30fa\\u30fc-\\u30ff\\u31f0-\\u31ff\\u32D0-\\u32FE\\u3300-\\u3357\\uff66-\\uff9d]',\n extendnumlet: '[=_\\u203f\\u2040\\u2054\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff3f\\u2200-\\u22FF<>]',\n punctuation: punctuationStr\n };\n var characterIndices = {\n ALETTER: 0,\n MIDNUMLET: 1,\n MIDLETTER: 2,\n MIDNUM: 3,\n NUMERIC: 4,\n CR: 5,\n LF: 6,\n NEWLINE: 7,\n EXTEND: 8,\n FORMAT: 9,\n KATAKANA: 10,\n EXTENDNUMLET: 11,\n AT: 12,\n OTHER: 13\n };\n var SETS = [\n new RegExp(regExps.aletter),\n new RegExp(regExps.midnumlet),\n new RegExp(regExps.midletter),\n new RegExp(regExps.midnum),\n new RegExp(regExps.numeric),\n new RegExp(regExps.cr),\n new RegExp(regExps.lf),\n new RegExp(regExps.newline),\n new RegExp(regExps.extend),\n new RegExp(regExps.format),\n new RegExp(regExps.katakana),\n new RegExp(regExps.extendnumlet),\n new RegExp('@')\n ];\n var EMPTY_STRING = '';\n var PUNCTUATION = new RegExp('^' + regExps.punctuation + '$');\n var WHITESPACE = /^\\s+$/;\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\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 isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\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 from = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var SETS$1 = SETS;\n var OTHER = characterIndices.OTHER;\n var getType = function (char) {\n var type = OTHER;\n var setsLength = SETS$1.length;\n for (var j = 0; j < setsLength; ++j) {\n var set = SETS$1[j];\n if (set && set.test(char)) {\n type = j;\n break;\n }\n }\n return type;\n };\n var memoize = function (func) {\n var cache = {};\n return function (char) {\n if (cache[char]) {\n return cache[char];\n } else {\n var result = func(char);\n cache[char] = result;\n return result;\n }\n };\n };\n var classify = function (characters) {\n var memoized = memoize(getType);\n return map(characters, memoized);\n };\n\n var isWordBoundary = function (map, index) {\n var prevType;\n var type = map[index];\n var nextType = map[index + 1];\n var nextNextType;\n if (index < 0 || index > map.length - 1 && index !== 0) {\n return false;\n }\n if (type === characterIndices.ALETTER && nextType === characterIndices.ALETTER) {\n return false;\n }\n nextNextType = map[index + 2];\n if (type === characterIndices.ALETTER && (nextType === characterIndices.MIDLETTER || nextType === characterIndices.MIDNUMLET || nextType === characterIndices.AT) && nextNextType === characterIndices.ALETTER) {\n return false;\n }\n prevType = map[index - 1];\n if ((type === characterIndices.MIDLETTER || type === characterIndices.MIDNUMLET || nextType === characterIndices.AT) && nextType === characterIndices.ALETTER && prevType === characterIndices.ALETTER) {\n return false;\n }\n if ((type === characterIndices.NUMERIC || type === characterIndices.ALETTER) && (nextType === characterIndices.NUMERIC || nextType === characterIndices.ALETTER)) {\n return false;\n }\n if ((type === characterIndices.MIDNUM || type === characterIndices.MIDNUMLET) && nextType === characterIndices.NUMERIC && prevType === characterIndices.NUMERIC) {\n return false;\n }\n if (type === characterIndices.NUMERIC && (nextType === characterIndices.MIDNUM || nextType === characterIndices.MIDNUMLET) && nextNextType === characterIndices.NUMERIC) {\n return false;\n }\n if (type === characterIndices.EXTEND || type === characterIndices.FORMAT || prevType === characterIndices.EXTEND || prevType === characterIndices.FORMAT || nextType === characterIndices.EXTEND || nextType === characterIndices.FORMAT) {\n return false;\n }\n if (type === characterIndices.CR && nextType === characterIndices.LF) {\n return false;\n }\n if (type === characterIndices.NEWLINE || type === characterIndices.CR || type === characterIndices.LF) {\n return true;\n }\n if (nextType === characterIndices.NEWLINE || nextType === characterIndices.CR || nextType === characterIndices.LF) {\n return true;\n }\n if (type === characterIndices.KATAKANA && nextType === characterIndices.KATAKANA) {\n return false;\n }\n if (nextType === characterIndices.EXTENDNUMLET && (type === characterIndices.ALETTER || type === characterIndices.NUMERIC || type === characterIndices.KATAKANA || type === characterIndices.EXTENDNUMLET)) {\n return false;\n }\n if (type === characterIndices.EXTENDNUMLET && (nextType === characterIndices.ALETTER || nextType === characterIndices.NUMERIC || nextType === characterIndices.KATAKANA)) {\n return false;\n }\n if (type === characterIndices.AT) {\n return false;\n }\n return true;\n };\n\n var zeroWidth = '\\uFEFF';\n\n var EMPTY_STRING$1 = EMPTY_STRING;\n var WHITESPACE$1 = WHITESPACE;\n var PUNCTUATION$1 = PUNCTUATION;\n var isProtocol = function (str) {\n return str === 'http' || str === 'https';\n };\n var findWordEnd = function (characters, startIndex) {\n var i;\n for (i = startIndex; i < characters.length; i++) {\n if (WHITESPACE$1.test(characters[i])) {\n break;\n }\n }\n return i;\n };\n var findUrlEnd = function (characters, startIndex) {\n var endIndex = findWordEnd(characters, startIndex + 1);\n var peakedWord = characters.slice(startIndex + 1, endIndex).join(EMPTY_STRING$1);\n return peakedWord.substr(0, 3) === '://' ? endIndex : startIndex;\n };\n var findWords = function (chars, sChars, characterMap, options) {\n var words = [];\n var word = [];\n for (var i = 0; i < characterMap.length; ++i) {\n word.push(chars[i]);\n if (isWordBoundary(characterMap, i)) {\n var ch = sChars[i];\n if ((options.includeWhitespace || !WHITESPACE$1.test(ch)) && (options.includePunctuation || !PUNCTUATION$1.test(ch))) {\n var startOfWord = i - word.length + 1;\n var endOfWord = i + 1;\n var str = sChars.slice(startOfWord, endOfWord).join(EMPTY_STRING$1);\n if (isProtocol(str)) {\n var endOfUrl = findUrlEnd(sChars, i);\n var url = chars.slice(endOfWord, endOfUrl);\n Array.prototype.push.apply(word, url);\n i = endOfUrl;\n }\n words.push(word);\n }\n word = [];\n }\n }\n return words;\n };\n var getDefaultOptions = function () {\n return {\n includeWhitespace: false,\n includePunctuation: false\n };\n };\n var getWords = function (chars, extract, options) {\n options = __assign(__assign({}, getDefaultOptions()), options);\n var filteredChars = [];\n var extractedChars = [];\n for (var i = 0; i < chars.length; i++) {\n var ch = extract(chars[i]);\n if (ch !== zeroWidth) {\n filteredChars.push(chars[i]);\n extractedChars.push(ch);\n }\n }\n var characterMap = classify(extractedChars);\n return findWords(filteredChars, extractedChars, characterMap, options);\n };\n\n var getWords$1 = getWords;\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var getText = function (node, schema) {\n var blockElements = schema.getBlockElements();\n var shortEndedElements = schema.getShortEndedElements();\n var isNewline = function (node) {\n return blockElements[node.nodeName] || shortEndedElements[node.nodeName];\n };\n var textBlocks = [];\n var txt = '';\n var treeWalker = new global$1(node, node);\n while (node = treeWalker.next()) {\n if (node.nodeType === 3) {\n txt += node.data;\n } else if (isNewline(node) && txt.length) {\n textBlocks.push(txt);\n txt = '';\n }\n }\n if (txt.length) {\n textBlocks.push(txt);\n }\n return textBlocks;\n };\n\n var strLen = function (str) {\n return str.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, '_').length;\n };\n var countWords = function (node, schema) {\n var text = getText(node, schema).join('\\n');\n return getWords$1(text.split(''), identity).length;\n };\n var countCharacters = function (node, schema) {\n var text = getText(node, schema).join('');\n return strLen(text);\n };\n var countCharactersWithoutSpaces = function (node, schema) {\n var text = getText(node, schema).join('').replace(/\\s/g, '');\n return strLen(text);\n };\n\n var createBodyCounter = function (editor, count) {\n return function () {\n return count(editor.getBody(), editor.schema);\n };\n };\n var createSelectionCounter = function (editor, count) {\n return function () {\n return count(editor.selection.getRng().cloneContents(), editor.schema);\n };\n };\n var createBodyWordCounter = function (editor) {\n return createBodyCounter(editor, countWords);\n };\n var get = function (editor) {\n return {\n body: {\n getWordCount: createBodyWordCounter(editor),\n getCharacterCount: createBodyCounter(editor, countCharacters),\n getCharacterCountWithoutSpaces: createBodyCounter(editor, countCharactersWithoutSpaces)\n },\n selection: {\n getWordCount: createSelectionCounter(editor, countWords),\n getCharacterCount: createSelectionCounter(editor, countCharacters),\n getCharacterCountWithoutSpaces: createSelectionCounter(editor, countCharactersWithoutSpaces)\n },\n getCount: createBodyWordCounter(editor)\n };\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var fireWordCountUpdate = function (editor, api) {\n editor.fire('wordCountUpdate', {\n wordCount: {\n words: api.body.getWordCount(),\n characters: api.body.getCharacterCount(),\n charactersWithoutSpaces: api.body.getCharacterCountWithoutSpaces()\n }\n });\n };\n\n var updateCount = function (editor, api) {\n fireWordCountUpdate(editor, api);\n };\n var setup = function (editor, api, delay) {\n var debouncedUpdate = global$2.debounce(function () {\n return updateCount(editor, api);\n }, delay);\n editor.on('init', function () {\n updateCount(editor, api);\n global$2.setEditorTimeout(editor, function () {\n editor.on('SetContent BeforeAddUndo Undo Redo keyup', debouncedUpdate);\n }, 0);\n });\n };\n\n var open = function (editor, api) {\n editor.windowManager.open({\n title: 'Word Count',\n body: {\n type: 'panel',\n items: [{\n type: 'table',\n header: [\n 'Count',\n 'Document',\n 'Selection'\n ],\n cells: [\n [\n 'Words',\n String(api.body.getWordCount()),\n String(api.selection.getWordCount())\n ],\n [\n 'Characters (no spaces)',\n String(api.body.getCharacterCountWithoutSpaces()),\n String(api.selection.getCharacterCountWithoutSpaces())\n ],\n [\n 'Characters',\n String(api.body.getCharacterCount()),\n String(api.selection.getCharacterCount())\n ]\n ]\n }]\n },\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }]\n });\n };\n\n var register = function (editor, api) {\n editor.ui.registry.addButton('wordcount', {\n tooltip: 'Word count',\n icon: 'character-count',\n onAction: function () {\n return open(editor, api);\n }\n });\n editor.ui.registry.addMenuItem('wordcount', {\n text: 'Word count',\n icon: 'character-count',\n onAction: function () {\n return open(editor, api);\n }\n });\n };\n\n function Plugin (delay) {\n if (delay === void 0) {\n delay = 300;\n }\n global.add('wordcount', function (editor) {\n var api = get(editor);\n register(editor, api);\n setup(editor, api, delay);\n return api;\n });\n }\n\n Plugin();\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var setContent = function (editor, html) {\n editor.focus();\n editor.undoManager.transact(function () {\n editor.setContent(html);\n });\n editor.selection.setCursorLocation();\n editor.nodeChanged();\n };\n var getContent = function (editor) {\n return editor.getContent({ source_view: true });\n };\n var Content = {\n setContent: setContent,\n getContent: getContent\n };\n\n var open = function (editor) {\n var editorContent = Content.getContent(editor);\n editor.windowManager.open({\n title: 'Source Code',\n size: 'large',\n body: {\n type: 'panel',\n items: [{\n type: 'textarea',\n name: 'code'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: { code: editorContent },\n onSubmit: function (api) {\n Content.setContent(editor, api.getData().code);\n api.close();\n }\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mceCodeEditor', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.ui.registry.addButton('code', {\n icon: 'sourcecode',\n tooltip: 'Source code',\n onAction: function () {\n return Dialog.open(editor);\n }\n });\n editor.ui.registry.addMenuItem('code', {\n icon: 'sourcecode',\n text: 'Source code',\n onAction: function () {\n return Dialog.open(editor);\n }\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('code', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n return {};\n });\n }\n\n Plugin();\n\n}());\n","var map = {\n\t\"./content.css\": \"e89c\",\n\t\"./content.min.css\": \"450c\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"efc3\";","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.2.2 (2020-04-23)\n */\n(function (domGlobals) {\n 'use strict';\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 global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var get = function (fullscreenState) {\n return {\n isFullscreen: function () {\n return fullscreenState.get() !== null;\n }\n };\n };\n var Api = { get: get };\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 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 revocable = function (doRevoke) {\n var subject = Cell(Option.none());\n var revoke = function () {\n subject.get().each(doRevoke);\n };\n var clear = function () {\n revoke();\n subject.set(Option.none());\n };\n var set = function (s) {\n revoke();\n subject.set(Option.some(s));\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n return {\n clear: clear,\n isSet: isSet,\n set: set\n };\n };\n var unbindable = function () {\n return revocable(function (s) {\n s.unbind();\n });\n };\n var value = function () {\n var subject = Cell(Option.none());\n var clear = function () {\n subject.set(Option.none());\n };\n var set = function (s) {\n subject.set(Option.some(s));\n };\n var on = function (f) {\n subject.get().each(f);\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\n };\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 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 return flatten(map(xs, f));\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\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 contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\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 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 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 isText = isType$1(TEXT);\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 get$1 = function (element, key) {\n var v = element.dom().getAttribute(key);\n return v === null ? undefined : v;\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 = function (element, css) {\n var dom = element.dom();\n each$1(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$2 = 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\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: constant(target),\n x: constant(x),\n y: constant(y),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(raw)\n };\n };\n var fromRawEvent = function (rawEvent) {\n var target = Element.fromDom(rawEvent.target);\n var stop = function () {\n rawEvent.stopPropagation();\n };\n var prevent = function () {\n rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\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 chromeos = 'ChromeOS';\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 isChromeOS: isOS(chromeos, 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 chromeos: constant(chromeos)\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var isDesktop = !isPhone && !isTablet && !iOSwebview;\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 isDesktop: constant(isDesktop)\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 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('mac os x'),\n versionRegexes: [/.*?mac\\ 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 name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent, mediaMatch) {\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, mediaMatch);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var mediaMatch = function (query) {\n return domGlobals.window.matchMedia(query).matches;\n };\n var platform = Cell(PlatformDetection.detect(domGlobals.navigator.userAgent, mediaMatch));\n var detect$3 = function () {\n return platform.get();\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 compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.Node.DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, domGlobals.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 = 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\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 = detect$3().browser;\n var contains$1 = browser.isIE() ? ieContains : regularContains;\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 siblings = function (element) {\n var filterSelf = function (elements) {\n return filter(elements, function (x) {\n return !eq(element, x);\n });\n };\n return parent(element).map(children).map(filterSelf).getOr([]);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var spot = Immutable('element', 'offset');\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: constant(left),\n top: constant(top),\n translate: translate\n };\n };\n var Position = r;\n\n var isSafari = detect$3().browser.isSafari();\n var get$3 = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return Position(x, y);\n };\n\n var get$4 = function (_win) {\n var win = _win === undefined ? domGlobals.window : _win;\n return Option.from(win['visualViewport']);\n };\n var bounds = function (x, y, width, height) {\n return {\n x: constant(x),\n y: constant(y),\n width: constant(width),\n height: constant(height),\n right: constant(x + width),\n bottom: constant(y + height)\n };\n };\n var getBounds = function (_win) {\n var win = _win === undefined ? domGlobals.window : _win;\n var doc = win.document;\n var scroll = get$3(Element.fromDom(doc));\n return get$4(win).fold(function () {\n var html = win.document.documentElement;\n var width = html.clientWidth;\n var height = html.clientHeight;\n return bounds(scroll.left(), scroll.top(), width, height);\n }, function (visualViewport) {\n return bounds(Math.max(visualViewport.pageLeft, scroll.left()), Math.max(visualViewport.pageTop, scroll.top()), visualViewport.width, visualViewport.height);\n });\n };\n var bind$1 = function (name, callback, _win) {\n return get$4(_win).map(function (visualViewport) {\n var handler = function (e) {\n return fromRawEvent(e);\n };\n visualViewport.addEventListener(name, handler);\n return {\n unbind: function () {\n return visualViewport.removeEventListener(name, handler);\n }\n };\n }).getOrThunk(function () {\n return { unbind: noop };\n });\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var fireFullscreenStateChanged = function (editor, state) {\n editor.fire('FullscreenStateChanged', { state: state });\n };\n var Events = { fireFullscreenStateChanged: fireFullscreenStateChanged };\n\n var ancestors = function (scope, predicate, isRoot) {\n return filter(parents(scope, isRoot), predicate);\n };\n var siblings$1 = function (scope, predicate) {\n return filter(siblings(scope), predicate);\n };\n\n var all$1 = function (selector) {\n return all(selector);\n };\n var ancestors$1 = function (scope, selector, isRoot) {\n return ancestors(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var siblings$2 = function (scope, selector) {\n return siblings$1(scope, function (e) {\n return is(e, selector);\n });\n };\n\n var attr = 'data-ephox-mobile-fullscreen-style';\n var siblingStyles = 'display:none!important;';\n var ancestorPosition = 'position:absolute!important;';\n var ancestorStyles = 'top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;';\n var bgFallback = 'background-color:rgb(255,255,255)!important;';\n var isAndroid = global$2.os.isAndroid();\n var matchColor = function (editorBody) {\n var color = get$2(editorBody, 'background-color');\n return color !== undefined && color !== '' ? 'background-color:' + color + '!important' : bgFallback;\n };\n var clobberStyles = function (dom, container, editorBody) {\n var gatherSibilings = function (element) {\n return siblings$2(element, '*:not(.tox-silver-sink)');\n };\n var clobber = function (clobberStyle) {\n return function (element) {\n var styles = get$1(element, 'style');\n var backup = styles === undefined ? 'no-styles' : styles.trim();\n if (backup === clobberStyle) {\n return;\n } else {\n set(element, attr, backup);\n setAll(element, dom.parseStyle(clobberStyle));\n }\n };\n };\n var ancestors = ancestors$1(container, '*');\n var siblings = bind(ancestors, gatherSibilings);\n var bgColor = matchColor(editorBody);\n each(siblings, clobber(siblingStyles));\n each(ancestors, clobber(ancestorPosition + ancestorStyles + bgColor));\n var containerStyles = isAndroid === true ? '' : ancestorPosition;\n clobber(containerStyles + ancestorStyles + bgColor)(container);\n };\n var restoreStyles = function (dom) {\n var clobberedEls = all$1('[' + attr + ']');\n each(clobberedEls, function (element) {\n var restore = get$1(element, attr);\n if (restore !== 'no-styles') {\n setAll(element, dom.parseStyle(restore));\n } else {\n remove(element, 'style');\n }\n remove(element, attr);\n });\n };\n var Thor = {\n clobberStyles: clobberStyles,\n restoreStyles: restoreStyles\n };\n\n var DOM = global$1.DOM;\n var getScrollPos = function () {\n var vp = getBounds(domGlobals.window);\n return {\n x: vp.x(),\n y: vp.y()\n };\n };\n var setScrollPos = function (pos) {\n domGlobals.window.scrollTo(pos.x, pos.y);\n };\n var viewportUpdate = get$4().fold(function () {\n return {\n bind: noop,\n unbind: noop\n };\n }, function (visualViewport) {\n var editorContainer = value();\n var resizeBinder = unbindable();\n var scrollBinder = unbindable();\n var refreshScroll = function () {\n domGlobals.document.body.scrollTop = 0;\n domGlobals.document.documentElement.scrollTop = 0;\n };\n var refreshVisualViewport = function () {\n domGlobals.window.requestAnimationFrame(function () {\n editorContainer.on(function (container) {\n return setAll(container, {\n top: visualViewport.offsetTop + 'px',\n left: visualViewport.offsetLeft + 'px',\n height: visualViewport.height + 'px',\n width: visualViewport.width + 'px'\n });\n });\n });\n };\n var update = global$3.throttle(function () {\n refreshScroll();\n refreshVisualViewport();\n }, 50);\n var bind = function (element) {\n editorContainer.set(element);\n update();\n resizeBinder.set(bind$1('resize'));\n scrollBinder.set(bind$1('scroll'));\n };\n var unbind = function () {\n editorContainer.on(function () {\n resizeBinder.clear();\n scrollBinder.clear();\n });\n editorContainer.clear();\n };\n return {\n bind: bind,\n unbind: unbind\n };\n });\n var toggleFullscreen = function (editor, fullscreenState) {\n var body = domGlobals.document.body;\n var documentElement = domGlobals.document.documentElement;\n var editorContainerStyle;\n var editorContainer, iframe, iframeStyle;\n editorContainer = editor.getContainer();\n var editorContainerS = Element.fromDom(editorContainer);\n var fullscreenInfo = fullscreenState.get();\n var editorBody = Element.fromDom(editor.getBody());\n var isTouch = global$2.deviceType.isTouch();\n editorContainerStyle = editorContainer.style;\n iframe = editor.getContentAreaContainer().firstChild;\n iframeStyle = iframe.style;\n if (!fullscreenInfo) {\n var newFullScreenInfo = {\n scrollPos: getScrollPos(),\n containerWidth: editorContainerStyle.width,\n containerHeight: editorContainerStyle.height,\n containerTop: editorContainerStyle.top,\n containerLeft: editorContainerStyle.left,\n iframeWidth: iframeStyle.width,\n iframeHeight: iframeStyle.height\n };\n if (isTouch) {\n Thor.clobberStyles(editor.dom, editorContainerS, editorBody);\n }\n iframeStyle.width = iframeStyle.height = '100%';\n editorContainerStyle.width = editorContainerStyle.height = '';\n DOM.addClass(body, 'tox-fullscreen');\n DOM.addClass(documentElement, 'tox-fullscreen');\n DOM.addClass(editorContainer, 'tox-fullscreen');\n viewportUpdate.bind(editorContainerS);\n editor.on('remove', viewportUpdate.unbind);\n fullscreenState.set(newFullScreenInfo);\n Events.fireFullscreenStateChanged(editor, true);\n } else {\n iframeStyle.width = fullscreenInfo.iframeWidth;\n iframeStyle.height = fullscreenInfo.iframeHeight;\n editorContainerStyle.width = fullscreenInfo.containerWidth;\n editorContainerStyle.height = fullscreenInfo.containerHeight;\n editorContainerStyle.top = fullscreenInfo.containerTop;\n editorContainerStyle.left = fullscreenInfo.containerLeft;\n if (isTouch) {\n Thor.restoreStyles(editor.dom);\n }\n DOM.removeClass(body, 'tox-fullscreen');\n DOM.removeClass(documentElement, 'tox-fullscreen');\n DOM.removeClass(editorContainer, 'tox-fullscreen');\n setScrollPos(fullscreenInfo.scrollPos);\n fullscreenState.set(null);\n Events.fireFullscreenStateChanged(editor, false);\n viewportUpdate.unbind();\n editor.off('remove', viewportUpdate.unbind);\n }\n };\n var Actions = { toggleFullscreen: toggleFullscreen };\n\n var register = function (editor, fullscreenState) {\n editor.addCommand('mceFullScreen', function () {\n Actions.toggleFullscreen(editor, fullscreenState);\n });\n };\n var Commands = { register: register };\n\n var makeSetupHandler = function (editor, fullscreenState) {\n return function (api) {\n api.setActive(fullscreenState.get() !== null);\n var editorEventCallback = function (e) {\n return api.setActive(e.state);\n };\n editor.on('FullscreenStateChanged', editorEventCallback);\n return function () {\n return editor.off('FullscreenStateChanged', editorEventCallback);\n };\n };\n };\n var register$1 = function (editor, fullscreenState) {\n editor.ui.registry.addToggleMenuItem('fullscreen', {\n text: 'Fullscreen',\n shortcut: 'Meta+Shift+F',\n onAction: function () {\n return editor.execCommand('mceFullScreen');\n },\n onSetup: makeSetupHandler(editor, fullscreenState)\n });\n editor.ui.registry.addToggleButton('fullscreen', {\n tooltip: 'Fullscreen',\n icon: 'fullscreen',\n onAction: function () {\n return editor.execCommand('mceFullScreen');\n },\n onSetup: makeSetupHandler(editor, fullscreenState)\n });\n };\n var Buttons = { register: register$1 };\n\n function Plugin () {\n global.add('fullscreen', function (editor) {\n var fullscreenState = Cell(null);\n if (editor.settings.inline) {\n return Api.get(fullscreenState);\n }\n Commands.register(editor, fullscreenState);\n Buttons.register(editor, fullscreenState);\n editor.addShortcut('Meta+Shift+F', '', 'mceFullScreen');\n return Api.get(fullscreenState);\n });\n }\n\n Plugin();\n\n}(window));\n"],"sourceRoot":""}