{"version":3,"sources":["webpack:///./node_modules/core-js/internals/engine-ff-version.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/core-js/internals/array-species-constructor.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/core-js/internals/array-method-has-species-support.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/core-js/modules/es.string.includes.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/core-js/internals/path.js","webpack:///./node_modules/node-libs-browser/mock/process.js","webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///./node_modules/core-js/internals/is-regexp.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-one_dark.js","webpack:///./node_modules/core-js/modules/es.array.filter.js","webpack:///./node_modules/core-js/internals/array-from.js","webpack:///./node_modules/core-js/modules/es.array.sort.js","webpack:///./node_modules/core-js/internals/engine-webkit-version.js","webpack:///./src/cloud-functions/prepareWorkout.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-json.js","webpack:///./node_modules/core-js/internals/not-a-regexp.js","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/axios/lib/env/data.js","webpack:///./node_modules/axios/lib/helpers/isAxiosError.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/core-js/internals/array-species-create.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/ace-builds/src-noconflict/ace.js","webpack:///./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","webpack:///./node_modules/core-js/internals/define-well-known-symbol.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/core-js/internals/create-property.js","webpack:///./node_modules/axios/lib/helpers/validator.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/vue3-youtube/dist/vue3-youtube.umd.min.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/core-js/modules/es.array.concat.js","webpack:///./node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack:///./node_modules/core-js/modules/es.symbol.js","webpack:///./node_modules/core-js/modules/es.array.from.js","webpack:///./node_modules/core-js/internals/array-method-is-strict.js","webpack:///./node_modules/core-js/internals/correct-is-regexp-logic.js","webpack:///./node_modules/core-js/internals/array-sort.js","webpack:///./node_modules/core-js/modules/es.function.name.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/core-js/modules/es.object.keys.js","webpack:///./node_modules/core-js/internals/array-iteration.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/core-js/modules/es.array.includes.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/core-js/modules/es.symbol.iterator.js","webpack:///./node_modules/core-js/modules/es.array.map.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/core-js/internals/engine-is-ie-or-edge.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/core-js/modules/es.symbol.description.js","webpack:///./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/core-js/internals/is-array.js","webpack:///./src/cloud-functions/generateNextWorkout.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/core-js/modules/es.array.slice.js","webpack:///./src/views/Workout.vue","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack:///./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack:///./node_modules/vue3-ace-editor/index.js","webpack:///./src/api/authentication.js","webpack:///./src/views/Workout.vue?a213"],"names":["userAgent","firefox","match","module","exports","toIndexedObject","$getOwnPropertyNames","f","toString","windowNames","window","Object","getOwnPropertyNames","getWindowNames","it","error","slice","call","_nonIterableSpread","TypeError","__esModule","Error","utils","buildURL","InterceptorManager","dispatchRequest","mergeConfig","validator","validators","Axios","instanceConfig","this","defaults","interceptors","request","response","prototype","config","arguments","url","method","toLowerCase","transitional","undefined","assertOptions","silentJSONParsing","boolean","forcedJSONParsing","clarifyTimeoutError","requestInterceptorChain","synchronousRequestInterceptors","forEach","interceptor","runWhen","synchronous","unshift","fulfilled","rejected","promise","responseInterceptorChain","push","chain","Array","apply","concat","Promise","resolve","length","then","shift","newConfig","onFulfilled","onRejected","reject","getUri","params","paramsSerializer","replace","data","isArray","isConstructor","isObject","wellKnownSymbol","SPECIES","originalArray","C","constructor","callback","arr","_iterableToArray","iter","Symbol","iterator","from","fn","thisArg","args","i","fails","V8_VERSION","METHOD_NAME","array","foo","Boolean","arrayLikeToArray","require","_arrayWithoutHoles","normalizeHeaderName","enhanceError","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","headers","value","isUndefined","getDefaultAdapter","adapter","XMLHttpRequest","process","stringifySafely","rawValue","parser","encoder","isString","JSON","parse","trim","e","name","stringify","transformRequest","isFormData","isArrayBuffer","isBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isURLSearchParams","transformResponse","strictJSONParsing","responseType","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","status","common","merge","$","notARegExp","requireObjectCoercible","correctIsRegExpLogic","target","proto","forced","includes","searchString","indexOf","message","code","__CANCEL__","encode","val","encodeURIComponent","serializedParams","parts","key","v","isDate","toISOString","join","hashmarkIndex","isAxiosError","toJSON","description","number","fileName","lineNumber","columnNumber","stack","isStandardBrowserEnv","originURL","msie","test","navigator","urlParsingNode","document","createElement","resolveURL","href","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","location","requestURL","parsed","global","nextTick","setTimeout","platform","arch","execPath","title","pid","browser","env","argv","binding","path","cwd","chdir","dir","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","_toConsumableArray","classof","MATCH","isRegExp","createError","config1","config2","getMergedValue","source","isPlainObject","mergeDeepProperties","prop","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","keys","configValue","ace","isDark","cssClass","cssText","dom","importCssString","m","$filter","filter","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","callbackfn","bind","toObject","callWithSafeIterationClosing","isArrayIteratorMethod","lengthOfArrayLike","createProperty","getIterator","getIteratorMethod","arrayLike","O","IS_CONSTRUCTOR","argumentsLength","mapfn","mapping","result","step","next","iteratorMethod","index","done","aCallable","internalSort","arrayMethodIsStrict","FF","IE_OR_EDGE","V8","WEBKIT","nativeSort","sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STRICT_METHOD","STABLE_SORT","chr","String","fromCharCode","k","a","b","FORCED","getSortCompare","comparefn","x","y","itemsLength","items","arrayLength","webkit","prepareWorkout","input","today","Date","now","futureExercises","readyExercises","almostReadyExercises","todaysExercises","map","futureExercise","todayNumber","Math","floor","restDayCount","isDoneResting","workedOutDayNumber","restDayStart","daysPassed","exercise","lastWorkedOut","exerciseHistogram","almostReadyExercise","muscleGroupKeys","muscleGroupSettings","muscleGroup","exercisesOfThisTypeInOneWorkout","transformData","isCancel","Cancel","throwIfCancellationRequested","cancelToken","throwIfRequested","signal","aborted","reason","oop","TextHighlightRules","JsonHighlightRules","$rules","token","regex","defaultToken","inherits","define","Range","MatchingBraceOutdent","checkOutdent","line","autoOutdent","doc","row","getLine","column","openBracePos","findMatchingBracket","indent","$getIndent","BaseFoldMode","FoldMode","commentRegex","foldingStartMarker","RegExp","start","foldingStopMarker","end","singleLineBlockCommentRe","tripleStarBlockCommentRe","startRegionRe","_getFoldWidgetBase","getFoldWidget","session","foldStyle","fw","getFoldWidgetRange","forceMultiline","getCommentRegionBlock","openingBracketBlock","range","getCommentFoldRange","isMultiLine","getSectionRange","closingBracketBlock","startIndent","startRow","startColumn","endRow","maxRow","getLength","subRange","re","depth","exec","TextMode","Mode","HighlightRules","CstyleBehaviour","CStyleFoldMode","WorkerClient","$outdent","$behaviour","foldingRules","lineCommentStart","blockComment","getNextLineIndent","state","tab","createWorker","worker","attachToDocument","getDocument","on","setAnnotations","clearAnnotations","$id","_arrayLikeToArray","len","arr2","payload","webpackPolyfill","deprecate","paths","children","defineProperty","enumerable","get","l","arraySpeciesConstructor","_unsupportedIterableToArray","o","minLen","n","ACE_NAMESPACE","requirejs","deps","modules","payloads","original","console","trace","_require","parentId","lookup","dep","packagedModule","normalizeModule","moduleName","chunks","split","base","previous","mod","id","uri","packaged","req","returnValue","exportAce","ns","root","Element","remove","writable","configurable","parentNode","removeChild","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","os","ua","appName","isWin","isIE","parseFloat","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isEdge","isAIR","isAndroid","isChromeOS","isIOS","MSStream","isMobile","strictCSP","useragent","XHTML_NS","buildDom","parent","refs","txt","createTextNode","appendChild","els","ch","el","options","childIndex","className","style","getDocumentHead","head","getElementsByTagName","documentElement","tag","createElementNS","removeChildren","element","innerHTML","textContent","ownerDocument","createFragment","createDocumentFragment","hasCssClass","classes","addCssClass","removeCssClass","splice","toggleCssClass","add","setCssClass","node","include","hasCssString","sheets","querySelectorAll","cssCache","insertPendingStyles","cache","item","container","getRootNode","insertBefore","firstChild","useStrictCSP","importCssStylsheet","rel","scrollbarWidth","inner","width","minWidth","height","display","outer","position","left","overflow","body","noScrollbar","offsetWidth","withScrollbar","clientWidth","computedStyle","getComputedStyle","setStyle","styles","property","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","div","transform","animationName","translate","tx","ty","round","top","ctor","superCtor","super_","create","mixin","obj","implement","Keys","ret","MODIFIER_KEYS","16","17","18","224","91","92","93","KEY_MODS","FUNCTION_KEYS","8","9","13","19","27","32","33","34","35","36","37","38","39","40","44","45","46","96","97","98","99","100","101","102","103","104","105","112","113","114","115","116","117","118","119","120","121","122","123","144","145","PRINTABLE_KEYS","48","49","50","51","52","53","54","55","56","57","59","61","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","107","109","110","186","187","188","189","190","191","192","219","220","221","222","111","106","parseInt","enter","escape","esc","del","mods","pow","keyCodeToString","keyCode","keyString","activeListenerOptions","pressedKeys","ts","detectListenerOptionsSupport","createComment","addEventListener","passive","getListenerOptions","EventListener","elem","type","destroy","removeListener","addListener","destroyer","$toDestroy","removeEventListener","stopEvent","stopPropagation","preventDefault","getButton","ctrlKey","altKey","shiftKey","button","capture","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","factor","wheelDeltaX","wheelX","wheelY","wheelDeltaY","wheelDelta","deltaMode","DOM_DELTA_PIXEL","deltaX","deltaY","DOM_DELTA_LINE","DOM_DELTA_PAGE","axis","HORIZONTAL_AXIS","detail","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","timer","clicks","eventNames","2","3","4","onMousedown","isNewClick","abs","clientX","clientY","clearTimeout","_clicks","getModifierHash","metaKey","normalizeCommandKeys","hashId","getModifierState","altGr","keyLocation","timeStamp","dt","defaultPrevented","resetPressedKeys","getModifierString","addCommandKeyListener","isOldGecko","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","postMessageId","win","messageName","listener","$idleBlocked","onIdle","cb","handler","$idleBlockId","blockIdle","delay","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","comparePoints","p1","p2","endColumn","isEqual","contains","compare","compareRange","cmp","comparePoint","p","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","extend","isEmpty","clone","collapseRows","max","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","last","stringReverse","string","reverse","stringRepeat","count","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copy","copyArray","deepCopy","arrayToMap","createMap","props","arrayRemove","escapeRegExp","str","escapeHTML","getMatchOffsets","regExp","matches","offset","deferredCall","fcn","deferred","cancel","schedule","isPending","delayedCall","defaultTimeout","_self","$cancelT","lineMode","pasteCancelled","event","lang","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","valueResetRegex","TextInput","text","opacity","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","isFocused","activeElement","onBlur","hasFocus","onFocus","resetSelection","$focusScroll","focus","preventScroll","isTransformed","getBoundingClientRect","ancestors","t","parentElement","nodeType","removeAttribute","blur","curOp","commandName","command","isUserAction","docChanged","selectionChanged","onCompositionEnd","newValue","selectionStart","selectionEnd","selection","setSelectionRange","afterContextMenu","getRange","cursor","prevLine","nextLine","isAllSelected","onSelect","selectAll","inputHandler","setInputHandler","getInputHandler","sendText","fromInput","onPaste","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","shouldReset","onTextInput","onInput","onCompositionUpdate","inputType","execCommand","handleClipboardData","forceIEMime","clipboardData","mime","setData","getData","doCopy","isCut","getCopyText","onCut","onCopy","select","onCommandKey","onCompositionStart","$readOnly","useTextareaForIME","_signal","cancelComposition","getSelectionRange","markerRange","msGetInputContext","context","getInputContext","compositionStartOffset","off","closeTimeout","syncComposition","onKeyup","onContextMenuClose","renderer","$isMousePressed","$keepTextAreaAtCursor","$moveTextAreaToCursor","getElement","setCommandMode","readOnly","setReadOnly","setCopyWithEmptySelection","onContextMenu","_emit","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","bottom","clientHeight","move","min","textInput","addIosSelectionHandler","typingResetTimeout","typing","detectArrowKeys","$mouseHandler","isMousePressed","modifier","up","home","option","down","right","commands","findKeyCommand","scroller","$setUserAgentForTests","_isMobile","_isIOS","DRAG_OFFSET","SCROLL_COOLDOWN_T","DefaultHandlers","mouseHandler","$clickSelection","editor","setDefaultHandler","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","selectByLines","extendSelectionBy","selectByWords","calcDistance","ax","ay","bx","by","sqrt","calcRangeOrientation","anchor","ev","inSelection","pos","getDocumentPosition","mousedownEvent","selectionRange","selectionEmpty","moveToPosition","time","$focusTimeout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","setCapture","orientedRange","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","distance","getBracketRange","getWordRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","direction","canScroll","isScrollableBy","speed","isSlower","scrollBy","stop","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","html","setPosition","setClassName","show","hide","getHeight","offsetHeight","getWidth","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","tooltip","GutterTooltip","showTooltip","annotation","$annotations","hideTooltip","screenRow","pixelToScreenCoordinates","$pos","documentToScreenRow","$tooltipFollowsMouse","moveTooltip","gutterElement","gutterRegion","getRegion","selectTo","srcElement","$gutter","windowWidth","innerWidth","windowHeight","innerHeight","MouseEvent","$inSelection","propagationStopped","AUTOSCROLL_DELAY","SCROLL_CURSOR_DELAY","SCROLL_CURSOR_HYSTERESIS","DragdropHandler","dragImage","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","prevCursor","vMovement","hMovement","moveCursorToPosition","autoScroll","lineHeight","layerConfig","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","onDragInterval","addDragMarker","toOrientedRange","addMarker","getSelectionStyle","clearSelection","$cursorLayer","setBlinking","clearInterval","setInterval","onMouseMove","clearDragMarker","removeMarker","fromOrientedRange","$resetCursorStyle","onDragStart","cancelDrag","draggable","self","dataTransfer","effectAllowed","getReadOnly","setDragImage","clearData","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","insert","types","some","copyAllowed","moveAllowed","copyModifierState","dragWait","interval","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","dragDrop","$dragEnabled","clickCount","eventTarget","unselectable","addTouchListeners","touchStartT","lastT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","vX","vY","createContextMenu","updateMenu","selected","hasUndo","getUndoManager","replaceChild","class","action","handleClick","getAttribute","readText","writeText","ontouchstart","ontouchend","onclick","showContextMenu","pagePos","textToScreenCoordinates","leftOffset","pageX","scrollLeft","pageY","hideContextMenu","handleLongTap","selectWord","switchToSelectionMode","setRange","animate","oldScrollTop","getScrollTop","textarea","touches","h","w","touchObj","cursorPos","getPixelPosition","anchorPos","offsetTop","offsetLeft","weightedDistance","diff1","diff2","xhr","open","onreadystatechange","readyState","responseText","send","loadScript","s","src","onload","_","isAbort","qualifyURL","EventEmitter","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","once","newCallback","handlers","_disabled_","old","disabled","removeDefaultHandler","pop","capturing","removeAllListeners","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","$options","hidden","getOption","opt","warn","forwardTo","handlesSet","set","reportError","msg","AppConfig","$defaultOptions","defineOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","hasOwnProperty","all","$modes","moduleUrl","component","sep","setModuleUrl","subst","$loading","loadModule","onLoad","moduleType","afterLoad","reportErrorIfPathIsNotConfigured","init","scriptOptions","scriptUrl","currentScript","_currentScript","currentDocument","scripts","script","attributes","j","attr","deHyphenate","m1","toUpperCase","version","DefaultGutterHandler","MouseHandler","focusEditor","windowBlurred","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","gutterEl","$dragDelay","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","endOperation","startOperation","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","passEvent","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","LTR","RTL","L","R","EN","AN","ON","B","S","AL","WS","CS","ES","ET","NSM","LRE","RLE","PDF","LRO","RLO","BN","UnicodeTBL00","UnicodeTBL20","_computeLevels","chars","levels","charTypes","impTab","prevState","newClass","newLevel","newState","cond","condPos","ix","_getCharacterType","_getCharClass","_invertLevel","lev","_array","lo","hi","tmp","wType","nType","cType","c","rtlCandidate","uc","charCodeAt","ON_R","R_H","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","hasBidiCharacters","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","getValue","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","onChange","delta","lines","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","isLastRow","endOfLine","$useWrapMode","splits","$wrapData","substring","size","isFullWidth","getScreenTabSize","$main","substr","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getCursorPosition","getSelectionAnchor","$bidiHandler","removeInLine","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","lead","createAnchor","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","getAnchor","getSelectionLead","isBackwards","$setSelection","Number","MAX_VALUE","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","moveCursorTo","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","excludeLastChar","rowEnd","rowStart","foldLine","getFoldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getTabSize","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","beforeCursor","getDisplayLine","leadingSpace","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","moveCursorLongWordRight","rightOfCursor","nonTokenRe","lastIndex","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","screenPos","lineWidgets","widget","rowsAbove","rowCount","docPos","keepDesiredColumn","moveCursorToScreen","desiredColumn","r","getRangeOfMovements","func","rangeCount","ranges","r1","fromJSON","rangeList","toSingleRange","addRange","MAX_TOKEN_COUNT","Tokenizer","rules","states","regExps","matchMappings","ruleRegExps","matchTotal","flag","splitterRurles","rule","caseInsensitive","adjustedregex","matchcount","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","digit","removeCapturingGroups","splitRegex","createSplitterRegexp","$setMaxTokenCount","values","tokens","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","consumeLineEnd","addRules","prefix","nextState","getRules","embedRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","normalizeRules","processState","processed","toInsert","stateName","includeName","noEscape","keywordMap","createKeywordMapper","ignoreCase","splitChar","keywords","$keywordList","list","word","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","getCurrentTokenRange","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","rightChar","matching","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","next_indent","getTabString","quotes","$mode","$quotes","quote","leftChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","charBefore","$matchTokenType","iterator2","bracket","wordChars","unicode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","commentWithSpace","comment","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","fun","minEmptyLength","toggleBlockComment","colDiff","initialRange","startRange","endRange","createModeDelegates","delegations","scope","functionName","$delegator","language","transformAction","param","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","score","meta","applyDelta","docLines","doNotValidate","Anchor","$onChange","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","$getTransformedPoint","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$clipPositionToDocument","$insertRight","noClip","Document","textOrLines","$lines","insertMergedLines","setValue","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","$safeApplyDelta","docLength","MAX","to","chunk","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","$updateOnChange","getState","SearchHighlight","clazz","setRegexp","MAX_RANGES","update","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","walk","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","RangeList","$bias","pointIndex","excludeEdges","startIndex","addList","removed","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","consumePoint","consumeRange","restorePoint","restoreRange","subFold","collapseChildren","addSubFold","afterStart","firstConsumed","consumedFolds","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","outermostFolds","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","foldToLevel","foldAllComments","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","charBeforeCursor","$findClosingBracket","getMatchingBracketRanges","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","setMode","bgTokenizer","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","reset","getSelection","undoManager","addSession","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","undo","redo","hasRedo","addSelection","startNewGroup","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","$overwrite","setOverwrite","overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","marker","addDynamicMarker","markerId","markers","getMarkers","highlight","$searchHighlight","highlightLines","annotations","getAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","terminate","getMode","$scrollTop","setScrollTop","scrollTop","isNaN","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","selectionBefore","$getUndoSelection","redoChanges","selectionAfter","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","diff","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","setUseWrapMode","useWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","CHAR","CHAR_EXT","PUNCTUATION","SPACE","TAB","TAB_SPACE","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","getWrapIndent","indentation","addSplit","minSplit","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","wrap","$wrap","firstLineNumber","useSoftTabs","Search","addWordBoundary","needle","wordBoundary","find","$matchIterator","sr","sc","er","ec","skipCurrent","findAll","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","wholeWord","caseSensitive","$assembleMultilineRegExp","backwards","forEachInLine","HashHandler","commandKeyBinding","addCommands","$singleCommand","MultiHashHandler","bindKey","isDefault","addCommand","removeCommand","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","parseKeys","_addCommandToBinding","other","otherPos","removeCommands","bindKeys","keyList","$keyChain","CommandManager","byName","$checkCommandState","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","gotoLine","prompt","$type","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","cutLine","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","autoIndent","firstLineEndCol","selectedText","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","Editor","getContainerElement","getTextAreaContainer","keyBinding","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","$opResetTimer","$lastSel","prevOp","commandEvent","previousCommand","scrollSelectionIntoView","animateScrolling","sel","$mergeableCommands","$mergeUndoDeltas","prev","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","updateFull","oldEditor","getSession","resize","onResize","setTheme","theme","getTheme","getFontSize","setFontSize","$highlightBrackets","$highlightPending","$bracketHighlight","markerIds","getMatching","markerType","$highlightTags","$highlightTagPending","$tagHighlight","currentTag","prevToken","stepCount","tmpToken","sbm","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","$updateHighlightActiveLine","updateLines","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","inVirtualSelectionMode","isFullLine","getBehavioursEnabled","d","lineState","shouldOutdent","$enableAutoIndent","lineIndent","selectedRange","currIndent","prevLineState","composition","applyComposition","forEachSelection","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","setShowPrintMargin","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","$toggleWordPairs","currWordStart","wordParts","curLength","itLength","that","reg","wordPairs","negate","firstCondition","secondCondition","res","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","center","alignCursor","getCursorPositionScreen","expand","matchType","bracketType","found","brackets","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","copyWithEmptySelection","behavioursEnabled","wrapBehavioursEnabled","enableAutoIndent","autoScrollEditorIntoView","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeNumberRenderer","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","$composition","placeholderNode","$placeholder","content","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","getText","lastLineNumber","$renderer","UndoManager","$maxRev","rearrangeUndoStack","deltaSet","ignore","swapped","swapGroups","allowMerge","$lastDelta","$keepRedoStack","$redoStack","lastDeltas","$undoStack","$rev","rev","markIgnored","getRevision","getDeltas","getChangedRanges","getChangedLines","$redoStackBaseRev","undoSelectionRange","$syncRev","rebaseRedoStack","redoSelectionRange","nextDelta","mark","canUndo","canRedo","bookmark","isAtBookmark","isClean","markClean","$prettyPrint","stringifyDelta","cloneDelta","stringifyRange","d1","d2","i1","i2","ds1","ds2","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","rest","moveDeltasByOne","redoStack","xformed","deltaSets","Lines","canvasHeight","cells","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","computeLineTop","screenTop","screenPage","lineTop","computeLineHeight","$cacheCell","cell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","gutterWidth","$updateAnnotations","onCreateCell","textNode","foldWidget","rowInfo","annoText","gutterOffset","oldLastRow","$updateCursorRow","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","padding","$padding","$computePadding","ceil","$highlightGutterLine","$cursorRow","updateLineHighlight","$cursorCell","scrollLines","$renderLines","childNodes","breakpoints","decorations","foldHeight","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","getBorderClass","tl","tr","br","bl","setPadding","setMarkers","elt","css","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","curr","lineRange","range1","drawBidiSingleLineMarker","radiusClass","extraLength","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","unixMode","margin","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","showSpaces","showTabs","showEOL","$tabStrings","tabStr","span","$indentGuideRe","spaceClass","spaceContent","tabClass","tabContent","lineElements","lineElementsIdx","heightChanged","lineElement","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$textToken","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","com","renderIndentGuide","cols","$createLineElement","$renderWrappedLine","splitChars","$renderOverflowMessage","$renderSimpleLine","overflowEl","$getFoldLineTokens","lastLineEl","invisibleEl","renderTokens","addTokens","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$isAnimating","$stopCssAnimation","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","$isSmoothBlinking","blink","onScreen","cursorLeft","cursorTop","isCursorInView","pixelPos","maxHeight","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","MAX_SCROLL_H","ScrollBar","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","scrollHeight","$scrollbarWidth","$minWidth","setHeight","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","pending","changes","$recursionLimit","_flush","change","clear","CHAR_COUNT","USE_OBSERVER","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","isRoot","visibility","whiteSpace","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","observe","setPolling","disconnect","$getZoom","getZoom","zoom","$initTransformMeasureNodes","transformCoordinates","clientPos","elPos","mul","solve","l1","l2","det","sub","m2","ut","u","GutterLayer","MarkerLayer","TextLayer","CursorLayer","editorCss","HIDE_TEXTAREA","VirtualRenderer","onGutterResize","$markerBack","textLayer","$textLayer","canvas","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","$renderChanges","defaultView","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","scrollWidth","$updateCachedSize","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$printMarginEl","containerEl","posTop","posLeft","setScrollMargin","sm","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","freeze","unfreeze","st","$updateLines","$autosize","desiredHeight","$maxPixelHeight","hideScrollbars","$gutterWidth","screenLines","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","steps","x_min","dx","initialScroll","oldSteps","$timer","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","$useTextareaForIME","addToken","removeExtraToken","newToken","$themeId","$theme","setMouseCursor","attachToShadowRoot","$workerBlob","workerUrl","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","blobBuilder","getBlob","Worker","blob","URL","webkitURL","blobURL","createObjectURL","$createWorkerFromOldConfig","$sendDeltaQueue","changeListener","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","err","deltaQueue","$doc","cmd","emit","ex","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undostack","$undoStackDepth","setup","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","onMouseSelection","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onMouseSelectionEnd","onSelectionInterval","selectMoreLines","selectMore","joinSelections","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","docEnd","yBackwards","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","addAltCursorListeners","altCursor","altDown","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","keepOrder","$byLines","cmdResult","anim","buf","additive","skip","screenLead","toRemove","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","alignRight","unAlign","enableMultiselect","enableBlockSelect","indentationBlock","startLevel","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","$registerLineWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","binarySearch","comparator","findAnnotations","matched","oldWidget","gutterAnno","arrow","onmousedown","Renderer","edit","_id","getElementById","tagName","oldNode","createEditSession","MapShim","Map","getIndex","entry","class_1","__entries__","delete","entries","has","ctx","_i","_a","isBrowser","global$1","Function","requestAnimationFrame$1","trailingTimeout","throttle","leadingCall","trailingCall","lastCallTime","resolvePending","proxy","timeoutCallback","REFRESH_DELAY","transitionKeys","mutationObserverSupported","MutationObserver","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","refresh","addObserver","observer","connect_","removeObserver","observers","disconnect_","changesDetected","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","childList","characterData","subtree","_b","propertyName","isReflowProperty","getInstance","instance_","defineConfigurable","getWindowOf","ownerGlobal","emptyRect","createRectInit","toFloat","getBordersSize","positions","reduce","getPaddings","paddings","positions_1","getSVGContentRect","bbox","getBBox","getHTMLElementContentRect","horizPad","vertPad","boxSizing","isDocumentElement","vertScrollbar","horizScrollbar","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getContentRect","createReadOnlyRect","Constr","DOMRectReadOnly","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","isActive","broadcastRect","ResizeObserverEntry","rectInit","contentRect","ResizeObserverSPI","controller","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","observations","unobserve","clearActive","_this","observation","WeakMap","hasOwn","wrappedWellKnownSymbolModule","NAME","write","expires","domain","secure","cookie","isNumber","toGMTString","read","decodeURIComponent","isAbsoluteURL","combineURLs","baseURL","requestedURL","toPropertyKey","definePropertyModule","createPropertyDescriptor","object","propertyKey","VERSION","thing","deprecatedWarnings","schema","allowUnknown","formatMessage","desc","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","subscribe","unsubscribe","toStringTag","getOwnPropertyDescriptor","return","2266","stopped","g","stat","noTargetGet","sham","2626","setImmediate","clearImmediate","MessageChannel","Dispatch","P","E","port2","port1","versions","v8","defineProperties","4160","propertyIsEnumerable","4840","4930","getOwnPropertySymbols","5135","5692","copyright","5899","enforce","getterFor","unsafe","7156","7418","7839","close","parentWindow","contentWindow","F","ActiveXObject","8875","outerHTML","8925","inspectSource","random","9112","normalize","NATIVE","POLYFILL","fuzzy","a640","a691","a9e3","NaN","valueOf","ae40","ACCESSORS","b041","b575","WebKitMutationObserver","b622","withoutSetter","b727","every","findIndex","c04e","c430","c6b6","c6cd","c8ba","ca84","cc12","cdf9","ce4e","d012","d039","d066","d1e7","1","d2bb","setPrototypeOf","__proto__","d3b7","d44e","da84","globalThis","df75","e2cc","e667","e6cf","T","I","A","V","M","N","D","U","G","Y","z","H","createEvent","dispatchEvent","Q","W","X","K","J","Z","tt","et","PromiseRejectionEvent","nt","rt","ot","notified","reactions","ok","fail","rejection","at","ct","initEvent","ft","lt","catch","fetch","race","e893","e8b5","e95a","f069","f5df","callee","f772","fb15","wrapperStyle","ref","UNSTARTED","ENDED","PLAYING","PAUSED","BUFFERING","CUED","required","default","vars","computed","resolver","player","initiated","ready","iframeStyle","mounted","onYouTubeIframeAPIReadyResolvers","onYouTubeIframeAPIReady","initPlayer","methods","YT","Player","$refs","youtube","videoId","playerVars","events","onReady","$emit","onStateChange","onPlaybackQualityChange","onPlaybackRateChange","onError","onApiChange","cueVideoById","loadVideoById","cueVideoByUrl","loadVideoByUrl","cuePlaylist","loadPlaylist","playVideo","pauseVideo","stopVideo","seekTo","nextVideo","previousVideo","playVideoAt","mute","unMute","isMuted","setVolume","getVolume","getPlaybackRate","setPlaybackRate","getAvailablePlaybackRates","setLoop","setShuffle","getVideoLoadedFraction","getPlayerState","getCurrentTime","getPlaybackQuality","setPlaybackQuality","getAvailableQualityLevels","getDuration","getVideoUrl","getVideoEmbedCode","getPlaylist","getPlaylistIndex","watch","setSize","beforeUnmount","render","fc6a","fdbc","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","fdbf","fea9","runtime","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","makeInvokeMethod","tryCatch","arg","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","record","__await","unwrapped","previousPromise","enqueue","callInvokeWithMethodAndArg","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","displayName","isGeneratorFunction","genFun","awrap","async","skipTempReset","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","arraySpeciesCreate","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","anObject","iteratorClose","ENTRIES","getBuiltIn","IS_PURE","DESCRIPTORS","NATIVE_SYMBOL","isCallable","isSymbol","$toString","nativeObjectCreate","objectKeys","getOwnPropertyNamesModule","getOwnPropertyNamesExternal","getOwnPropertySymbolsModule","getOwnPropertyDescriptorModule","propertyIsEnumerableModule","redefine","shared","sharedKey","hiddenKeys","uid","defineWellKnownSymbol","setToStringTag","InternalStateModule","$forEach","HIDDEN","SYMBOL","PROTOTYPE","TO_PRIMITIVE","setInternalState","getInternalState","ObjectPrototype","$stringify","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","WellKnownSymbolsStore","QObject","USE_SETTER","findChild","setSymbolDescriptor","Attributes","ObjectPrototypeDescriptor","symbol","$defineProperty","$defineProperties","Properties","properties","$getOwnPropertySymbols","$propertyIsEnumerable","$create","$getOwnPropertyDescriptor","descriptor","names","IS_OBJECT_PROTOTYPE","setter","keyFor","sym","useSetter","useSimple","FORCED_JSON_STRINGIFY","replacer","space","$replacer","checkCorrectnessOfIteration","INCORRECT_ITERATION","argument","regexp","error1","error2","mergeSort","middle","insertionSort","llength","rlength","lindex","rindex","FUNCTION_NAME_EXISTS","EXISTS","FunctionPrototype","FunctionPrototypeToString","nameRE","settle","cookies","buildFullPath","parseHeaders","isURLSameOrigin","onCanceled","requestData","requestHeaders","auth","username","password","unescape","Authorization","btoa","fullPath","onloadend","responseHeaders","getAllResponseHeaders","responseData","statusText","responseURL","onabort","onerror","ontimeout","timeoutErrorMessage","xsrfValue","withCredentials","setRequestHeader","onDownloadProgress","onUploadProgress","upload","abort","nativeKeys","FAILS_ON_PRIMITIVES","IndexedObject","createMethod","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","$this","specificCreate","boundFunction","filterReject","ignoreDuplicateOf","fns","FormData","ArrayBuffer","isView","isFunction","pipe","URLSearchParams","product","assignValue","stripBOM","normalizedName","$includes","addToUnscopables","createInstance","defaultConfig","instance","axios","promises","spread","$map","UA","normalizeArray","allowAboveRoot","basename","matchedSlash","xs","resolvedPath","resolvedAbsolute","isAbsolute","trailingSlash","relative","fromParts","toParts","samePartsLength","outputParts","delimiter","dirname","hasRoot","ext","extname","startDot","startPart","preDotState","copyConstructorProperties","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","nativeSymbol","relativeURL","generateNextWorkout","validation","equipmentSettings","finishedExercises","nextWorkout","finishedExercise","repsHistory","goalReps","restTheExercise","successAndRest","maxSetValue","equipment","sets","minSetValue","setIncrement","increment","maxRepValue","reps","minRepValue","repIncrement","nextSetLength","foundRepsLessThanMax","nextWeights","weight","nextWeight","weightIsDifferent","restStartsToday","use","eject","toAbsoluteIndex","nativeSlice","Constructor","fin","editorInit","readied","errors","userStartsWorkout","currentExercise","isPlaying","userPausesWorkout","startWorkout","userEndsWorkout","repHistory","pattern","actualReps","videoUrl","ytHeight","ytVars","workoutActive","userCompletesSet","readyExercise","userRemovesExerciseFromReadyList","userStartsExercise","restingExercises","restingExercise","userRemovesExerciseFromRestingList","restTimeLeft","addRestTimeExercise","zoneReadied","_typeof","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","Events","VAceEditor","readonly","emits","_editor","$el","_contentBackup","_isSettingContent","vnode","_ro","authentication","authenticateKey","autoPlay","restTime","ytIsReady","controls","playsinline","disablekb","fs","workoutReport","components","YouTube","performValidations","outErrors","refreshWorkoutView","newCurrentExercise","newReadyExercises","queuedUpExercise","advanceExercise","defaultExercise","removingReadyExercise","removingRestingExercise","newRestingExercises","restingExcercise","resetWorkout","tryToParseJson","user","allExercises","hasTodaysExercises","hasFutureExercises","equipmentIsMissing","equipmentForExercise","repAmount","restNormal","json","workoutLoop","setCurrentExercise","videoEnd","videoStart","newExercise","created","errorMessages","notes","doutube","__exports__"],"mappings":"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AAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,KAAK,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,G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","file":"js/about.4f66b439.js","sourcesContent":["var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","var isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\nvar enhanceError = require('./core/enhanceError');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n },\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw enhanceError(e, this, 'E_JSON_PARSE');\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~toString(requireObjectCoercible(this))\n .indexOf(toString(notARegExp(searchString)), arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","exports.nextTick = function nextTick(fn) {\n var args = Array.prototype.slice.call(arguments);\n args.shift();\n setTimeout(function () {\n fn.apply(null, args);\n }, 0);\n};\n\nexports.platform = exports.arch = \nexports.execPath = exports.title = 'browser';\nexports.pid = 1;\nexports.browser = true;\nexports.env = {};\nexports.argv = [];\n\nexports.binding = function (name) {\n\tthrow new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n var cwd = '/';\n var path;\n exports.cwd = function () { return cwd };\n exports.chdir = function (dir) {\n if (!path) path = require('path');\n cwd = path.resolve(dir, cwd);\n };\n})();\n\nexports.exit = exports.kill = \nexports.umask = exports.dlopen = \nexports.uptime = exports.memoryUsage = \nexports.uvCounters = function() {};\nexports.features = {};\n","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","ace.define(\"ace/theme/one_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\n exports.isDark = true;\n exports.cssClass = \"ace-one-dark\";\n exports.cssText = \".ace-one-dark .ace_gutter {\\\nbackground: #282c34;\\\ncolor: #6a6f7a\\\n}\\\n.ace-one-dark .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-one-dark {\\\nbackground-color: #282c34;\\\ncolor: #abb2bf\\\n}\\\n.ace-one-dark .ace_cursor {\\\ncolor: #528bff\\\n}\\\n.ace-one-dark .ace_marker-layer .ace_selection {\\\nbackground: #3d4350\\\n}\\\n.ace-one-dark.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0 #282c34;\\\nborder-radius: 2px\\\n}\\\n.ace-one-dark .ace_marker-layer .ace_step {\\\nbackground: #c6dbae\\\n}\\\n.ace-one-dark .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #747369\\\n}\\\n.ace-one-dark .ace_marker-layer .ace_active-line {\\\nbackground: rgba(76, 87, 103, .19)\\\n}\\\n.ace-one-dark .ace_gutter-active-line {\\\nbackground-color: rgba(76, 87, 103, .19)\\\n}\\\n.ace-one-dark .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #3d4350\\\n}\\\n.ace-one-dark .ace_fold {\\\nbackground-color: #61afef;\\\nborder-color: #abb2bf\\\n}\\\n.ace-one-dark .ace_keyword {\\\ncolor: #c678dd\\\n}\\\n.ace-one-dark .ace_keyword.ace_operator {\\\ncolor: #c678dd\\\n}\\\n.ace-one-dark .ace_keyword.ace_other.ace_unit {\\\ncolor: #d19a66\\\n}\\\n.ace-one-dark .ace_constant.ace_language {\\\ncolor: #d19a66\\\n}\\\n.ace-one-dark .ace_constant.ace_numeric {\\\ncolor: #d19a66\\\n}\\\n.ace-one-dark .ace_constant.ace_character {\\\ncolor: #56b6c2\\\n}\\\n.ace-one-dark .ace_constant.ace_other {\\\ncolor: #56b6c2\\\n}\\\n.ace-one-dark .ace_support.ace_function {\\\ncolor: #61afef\\\n}\\\n.ace-one-dark .ace_support.ace_constant {\\\ncolor: #d19a66\\\n}\\\n.ace-one-dark .ace_support.ace_class {\\\ncolor: #e5c07b\\\n}\\\n.ace-one-dark .ace_support.ace_type {\\\ncolor: #e5c07b\\\n}\\\n.ace-one-dark .ace_storage {\\\ncolor: #c678dd\\\n}\\\n.ace-one-dark .ace_storage.ace_type {\\\ncolor: #c678dd\\\n}\\\n.ace-one-dark .ace_invalid {\\\ncolor: #fff;\\\nbackground-color: #f2777a\\\n}\\\n.ace-one-dark .ace_invalid.ace_deprecated {\\\ncolor: #272b33;\\\nbackground-color: #d27b53\\\n}\\\n.ace-one-dark .ace_string {\\\ncolor: #98c379\\\n}\\\n.ace-one-dark .ace_string.ace_regexp {\\\ncolor: #e06c75\\\n}\\\n.ace-one-dark .ace_comment {\\\nfont-style: italic;\\\ncolor: #5c6370\\\n}\\\n.ace-one-dark .ace_variable {\\\ncolor: #e06c75\\\n}\\\n.ace-one-dark .ace_variable.ace_parameter {\\\ncolor: #d19a66\\\n}\\\n.ace-one-dark .ace_meta.ace_tag {\\\ncolor: #e06c75\\\n}\\\n.ace-one-dark .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #e06c75\\\n}\\\n.ace-one-dark .ace_entity.ace_name.ace_function {\\\ncolor: #61afef\\\n}\\\n.ace-one-dark .ace_entity.ace_name.ace_tag {\\\ncolor: #e06c75\\\n}\\\n.ace-one-dark .ace_markup.ace_heading {\\\ncolor: #98c379\\\n}\\\n.ace-one-dark .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y\\\n}\\\n\";\n \n var dom = require(\"../lib/dom\");\n dom.importCssString(exports.cssText, exports.cssClass, false);\n }); (function() {\n ace.require([\"ace/theme/one_dark\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n result = IS_CONSTRUCTOR ? new this() : [];\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : Array(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar nativeSort = test.sort;\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? nativeSort.call(array) : nativeSort.call(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) items.push(array[index]);\n }\n\n items = internalSort(items, getSortCompare(comparefn));\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","exports.prepareWorkout = (\n input,\n today = Date.now(),\n) => {\n // add any ready future exercises\n const futureExercises = [];\n const readyExercises = [];\n let almostReadyExercises = input.todaysExercises;\n\n input.futureExercises.map((futureExercise) => {\n const todayNumber = Math.floor(today / 86400000);\n\n if (typeof futureExercise.restDayCount === 'undefined') {\n futureExercise.restDayCount = 0;\n }\n let isDoneResting = false;\n if (futureExercise.restDayCount <= 0) {\n isDoneResting = true;\n } else {\n const workedOutDayNumber = Math.floor(futureExercise.restDayStart / 86400000);\n const daysPassed = todayNumber - workedOutDayNumber;\n isDoneResting = (futureExercise.restDayCount - daysPassed) <= 0;\n }\n\n if (isDoneResting) {\n almostReadyExercises.push(futureExercise);\n } else {\n futureExercises.push(futureExercise);\n }\n return null;\n });\n\n almostReadyExercises = almostReadyExercises.map((exercise) => {\n if (typeof exercise.lastWorkedOut === 'undefined') {\n exercise.lastWorkedOut = 0;\n }\n return exercise;\n });\n\n almostReadyExercises.sort((a, b) => a.lastWorkedOut - b.lastWorkedOut);\n\n // filter out duplicate muscle groups\n const exerciseHistogram = {};\n\n almostReadyExercises.map((almostReadyExercise) => {\n const muscleGroupKeys = Object.keys(input.muscleGroupSettings);\n\n if (muscleGroupKeys.includes(almostReadyExercise.muscleGroup)) {\n const name = almostReadyExercise.muscleGroup;\n const muscleGroup = input.muscleGroupSettings[name];\n if (typeof exerciseHistogram[name] === 'undefined') {\n exerciseHistogram[name] = 0;\n }\n if (exerciseHistogram[name] >= muscleGroup.exercisesOfThisTypeInOneWorkout) {\n futureExercises.push(almostReadyExercise);\n return null;\n }\n readyExercises.push(almostReadyExercise);\n exerciseHistogram[name] += 1;\n } else {\n readyExercises.push(almostReadyExercise);\n }\n return null;\n });\n\n return {\n readyExercises,\n futureExercises,\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new Cancel('canceled');\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar JsonHighlightRules = function() {\n this.$rules = {\n \"start\" : [\n {\n token : \"variable\", // single line\n regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n }, {\n token : \"string\", // single line\n regex : '\"',\n next : \"string\"\n }, {\n token : \"constant.numeric\", // hex\n regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n }, {\n token : \"constant.numeric\", // float\n regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token : \"constant.language.boolean\",\n regex : \"(?:true|false)\\\\b\"\n }, {\n token : \"text\", // single quoted strings are not allowed\n regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n }, {\n token : \"comment\", // comments are not allowed, but who cares?\n regex : \"\\\\/\\\\/.*$\"\n }, {\n token : \"comment.start\", // comments are not allowed, but who cares?\n regex : \"\\\\/\\\\*\",\n next : \"comment\"\n }, {\n token : \"paren.lparen\",\n regex : \"[[({]\"\n }, {\n token : \"paren.rparen\",\n regex : \"[\\\\])}]\"\n }, {\n token : \"text\",\n regex : \"\\\\s+\"\n }\n ],\n \"string\" : [\n {\n token : \"constant.language.escape\",\n regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n }, {\n token : \"string\",\n regex : '\"|$',\n next : \"start\"\n }, {\n defaultToken : \"string\"\n }\n ],\n \"comment\" : [\n {\n token : \"comment.end\", // comments are not allowed, but who cares?\n regex : \"\\\\*\\\\/\",\n next : \"start\"\n }, {\n defaultToken: \"comment\"\n }\n ]\n };\n \n};\n\noop.inherits(JsonHighlightRules, TextHighlightRules);\n\nexports.JsonHighlightRules = JsonHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n this.checkOutdent = function(line, input) {\n if (! /^\\s+$/.test(line))\n return false;\n\n return /^\\s*\\}/.test(input);\n };\n\n this.autoOutdent = function(doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n\n if (!match) return 0;\n\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n if (!openBracePos || openBracePos.row == row) return 0;\n\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column-1), indent);\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(\n this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n );\n this.foldingStopMarker = new RegExp(\n this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n );\n }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n \n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n \n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n return \"\";\n }\n \n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n \n if (!fw && this.startRegionRe.test(line))\n return \"start\"; // lineCommentRegionStart\n \n return fw;\n };\n\n this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n \n if (this.startRegionRe.test(line))\n return this.getCommentRegionBlock(session, line, row);\n \n var match = line.match(this.foldingStartMarker);\n if (match) {\n var i = match.index;\n\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, i);\n \n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n \n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n } else if (foldStyle != \"all\")\n range = null;\n }\n \n return range;\n }\n\n if (foldStyle === \"markbegin\")\n return;\n\n var match = line.match(this.foldingStopMarker);\n if (match) {\n var i = match.index + match[0].length;\n\n if (match[1])\n return this.closingBracketBlock(session, match[1], row, i);\n\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n \n this.getSectionRange = function(session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1)\n continue;\n if (startIndent > indent)\n break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n \n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n } else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n } else if (startIndent == indent) {\n break;\n }\n }\n endRow = row;\n }\n \n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n this.getCommentRegionBlock = function(session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n \n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m) continue;\n if (m[1]) depth--;\n else depth++;\n\n if (!depth) break;\n }\n\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar HighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n this.HighlightRules = HighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n this.lineCommentStart = \"//\";\n this.blockComment = {start: \"/*\", end: \"*/\"};\n \n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n\n if (state == \"start\") {\n var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n if (match) {\n indent += tab;\n }\n }\n\n return indent;\n };\n\n this.checkOutdent = function(state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n\n this.autoOutdent = function(state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n\n this.createWorker = function(session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/json_worker\", \"JsonWorker\");\n worker.attachToDocument(session.getDocument());\n\n worker.on(\"annotate\", function(e) {\n session.setAnnotations(e.data);\n });\n\n worker.on(\"terminate\", function() {\n session.clearAnnotations();\n });\n\n return worker;\n };\n\n\n this.$id = \"ace/mode/json\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n}); (function() {\n ace.require([\"ace/mode/json\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","var isRegExp = require('../internals/is-regexp');\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","module.exports = {\n \"version\": \"0.24.0\"\n};","'use strict';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;\nmodule.exports[\"default\"] = module.exports, module.exports.__esModule = true;","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar require = function(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n if (packagedModule == undefined && require.original)\n return require.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative requires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nif (typeof Element != \"undefined\" && !Element.prototype.remove) {\n Object.defineProperty(Element.prototype, \"remove\", {\n enumerable: false,\n writable: true,\n configurable: true,\n value: function() { this.parentNode && this.parentNode.removeChild(this); }\n });\n}\n\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function() {\n if (exports.isMac) {\n return exports.OS.MAC;\n } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\n\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE = \n (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\n \nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n\nif (exports.isIOS) exports.isMac = true;\n\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"./useragent\"); \nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\nexports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent)\n parent.appendChild(txt);\n return txt;\n }\n \n if (!Array.isArray(arr)) {\n if (arr && arr.appendChild && parent)\n parent.appendChild(arr);\n return arr;\n }\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n return els;\n }\n \n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && typeof options == \"object\" && !Array.isArray(options))\n childIndex = 2;\n for (var i = childIndex; i < arr.length; i++)\n buildDom(arr[i], el, refs);\n if (childIndex == 2) {\n Object.keys(options).forEach(function(n) {\n var val = options[n];\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n } else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n } else if (n === \"ref\") {\n if (refs) refs[val] = el;\n } else if (n === \"style\") {\n if (typeof val == \"string\") el.style.cssText = val;\n } else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\n\nexports.getDocumentHead = function(doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\n\nexports.createElement = function(tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\n\nexports.removeChildren = function(element) {\n element.innerHTML = \"\";\n};\n\nexports.createTextNode = function(textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\n\nexports.createFragment = function(element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\n\nexports.hasCssClass = function(el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function(el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\n\nexports.toggleCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function(node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n};\n\nexports.hasCssString = function(id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n if ((sheets = doc.querySelectorAll(\"style\"))) {\n while (index < sheets.length)\n if (sheets[index++].id === id)\n return true;\n }\n};\n\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function(value) {\n strictCSP = value;\n if (value == false) insertPendingStyles();\n else if (!cssCache) cssCache = [];\n};\n\nfunction insertPendingStyles() {\n var cache = cssCache;\n cssCache = null;\n cache && cache.forEach(function(item) {\n importCssString(item[0], item[1]);\n });\n}\n\nfunction importCssString(cssText, id, target) {\n if (typeof document == \"undefined\")\n return;\n if (cssCache) {\n if (target) {\n insertPendingStyles();\n } else if (target === false) {\n return cssCache.push([cssText, id]);\n }\n }\n if (strictCSP) return;\n\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n } else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n \n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n \n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n \n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\n\nexports.importCssStylsheet = function(uri, doc) {\n exports.buildDom([\"link\", {rel: \"stylesheet\", href: uri}], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function(document) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n\n outer.appendChild(inner);\n\n var body = document.documentElement;\n body.appendChild(outer);\n\n var noScrollbar = inner.offsetWidth;\n\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n\n return noScrollbar-withScrollbar;\n};\n\nexports.computedStyle = function(element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\n\nexports.setStyle = function(styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n};\n\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n : true;\n\nif (useragent.isChromeOS) exports.HI_DPI = false;\n\nif (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined)\n exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n exports.HAS_CSS_ANIMATION = true;\n div = null;\n}\n\nif (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function(element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) +\"px)\";\n };\n} else {\n exports.translate = function(element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n}\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\n\nexports.mixin = function(obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\n\nexports.implement = function(proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./oop\");\nvar Keys = (function() {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n },\n\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8, \n \"control\": 1\n },\n\n FUNCTION_KEYS : {\n 8 : \"Backspace\",\n 9 : \"Tab\",\n 13 : \"Return\",\n 19 : \"Pause\",\n 27 : \"Esc\",\n 32 : \"Space\",\n 33 : \"PageUp\",\n 34 : \"PageDown\",\n 35 : \"End\",\n 36 : \"Home\",\n 37 : \"Left\",\n 38 : \"Up\",\n 39 : \"Right\",\n 40 : \"Down\",\n 44 : \"Print\",\n 45 : \"Insert\",\n 46 : \"Delete\",\n 96 : \"Numpad0\",\n 97 : \"Numpad1\",\n 98 : \"Numpad2\",\n 99 : \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n\n PRINTABLE_KEYS: {\n 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n };\n var name, i;\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n ret[173] = '-';\n \n (function() {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) { \n ret.KEY_MODS[i] = mods.filter(function(x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n\n return ret;\n})();\noop.mixin(exports, Keys);\n\nexports.keyCodeToString = function(keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n activeListenerOptions = false;\n try {\n document.createComment(\"\").addEventListener(\"test\", function() {}, { \n get passive() { \n activeListenerOptions = {passive: false};\n }\n });\n } catch(e) {}\n}\n\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\n\nfunction EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n}\nEventListener.prototype.destroy = function() {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n};\n\nvar addListener = exports.addListener = function(elem, type, callback, destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer)\n destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\n\nvar removeListener = exports.removeListener = function(elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function(e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\n\nexports.stopPropagation = function(e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\n\nexports.preventDefault = function(e) {\n if (e.preventDefault)\n e.preventDefault();\n};\nexports.getButton = function(e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n return e.button;\n};\n\nexports.capture = function(el, eventHandler, releaseCaptureHandler) {\n var ownerDocument = el && el.ownerDocument || document;\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n \n return onMouseUp;\n};\n\nexports.addMouseWheelListener = function(el, callback, destroyer) {\n if (\"onmousewheel\" in el) {\n addListener(el, \"mousewheel\", function(e) {\n var factor = 8;\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n } else {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n callback(e);\n }, destroyer);\n } else if (\"onwheel\" in el) {\n addListener(el, \"wheel\", function(e) {\n var factor = 0.35;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = e.deltaX * factor || 0;\n e.wheelY = e.deltaY * factor || 0;\n break;\n case e.DOM_DELTA_LINE:\n case e.DOM_DELTA_PAGE:\n e.wheelX = (e.deltaX || 0) * 5;\n e.wheelY = (e.deltaY || 0) * 5;\n break;\n }\n \n callback(e);\n }, destroyer);\n } else {\n addListener(el, \"DOMMouseScroll\", function(e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n } else {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n callback(e);\n }, destroyer);\n }\n};\n\nexports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer; \n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n } else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n \n e._clicks = clicks;\n\n eventHandler[callbackName](\"mousedown\", e);\n\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function(el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n};\n\nvar getModifierHash = function(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n};\n\nexports.getModifierString = function(e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n \n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n \n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n \n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n \n return callback(e, hashId, keyCode);\n}\n\n\nexports.addCommandKeyListener = function(el, callback, destroyer) {\n if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function(e) {\n lastKeyDownKeyCode = e.keyCode;\n }, destroyer);\n addListener(el, \"keypress\", function(e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n }, destroyer);\n } else {\n var lastDefaultPrevented = null;\n\n addListener(el, \"keydown\", function(e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n }, destroyer);\n\n addListener(el, \"keypress\", function(e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n }, destroyer);\n\n addListener(el, \"keyup\", function(e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\n\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function(callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + (postMessageId++);\n \n var listener = function(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n \n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\n\nexports.$idleBlocked = false;\nexports.onIdle = function(cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n } else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\n\nexports.$idleBlockId = null;\nexports.blockIdle = function(delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n \n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function() {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || window.msRequestAnimationFrame\n || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function(callback) {\n setTimeout(callback, 17);\n };\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n\n this.end = {\n row: endRow,\n column: endColumn\n };\n};\n\n(function() {\n this.isEqual = function(range) {\n return this.start.row === range.start.row &&\n this.end.row === range.end.row &&\n this.start.column === range.start.column &&\n this.end.column === range.end.column;\n };\n this.toString = function() {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n\n this.contains = function(row, column) {\n return this.compare(row, column) == 0;\n };\n this.compareRange = function(range) {\n var cmp,\n end = range.end,\n start = range.start;\n\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n this.comparePoint = function(p) {\n return this.compare(p.row, p.column);\n };\n this.containsRange = function(range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n this.intersects = function(range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n this.isEnd = function(row, column) {\n return this.end.row == row && this.end.column == column;\n };\n this.isStart = function(row, column) {\n return this.start.row == row && this.start.column == column;\n };\n this.setStart = function(row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n } else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n this.setEnd = function(row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n } else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n this.inside = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideStart = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideEnd = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.compare = function(row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n\n if (row < this.start.row)\n return -1;\n\n if (row > this.end.row)\n return 1;\n\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n\n return 0;\n };\n this.compareStart = function(row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareEnd = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareInside = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.clipRows = function(firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = {row: lastRow + 1, column: 0};\n else if (this.end.row < firstRow)\n var end = {row: firstRow, column: 0};\n\n if (this.start.row > lastRow)\n var start = {row: lastRow + 1, column: 0};\n else if (this.start.row < firstRow)\n var start = {row: firstRow, column: 0};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n this.extend = function(row, column) {\n var cmp = this.compare(row, column);\n\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = {row: row, column: column};\n else\n var end = {row: row, column: column};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.isEmpty = function() {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n this.isMultiLine = function() {\n return (this.start.row !== this.end.row);\n };\n this.clone = function() {\n return Range.fromPoints(this.start, this.end);\n };\n this.collapseRows = function() {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n this.toScreenRange = function(session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n\n return new Range(\n screenPosStart.row, screenPosStart.column,\n screenPosEnd.row, screenPosEnd.column\n );\n };\n this.moveBy = function(row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n\n if (count >>= 1)\n string += string;\n }\n return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\n\nexports.copyArray = function(array){\n var copy = [];\n for (var i=0, l=array.length; i Date.now() - 50)\n return true;\n return $cancelT = false;\n },\n cancel: function() {\n $cancelT = Date.now();\n }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\n\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\n\nvar TextInput = function(parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var sendingText = false;\n var tempStyle = '';\n \n if (!isMobile)\n text.style.fontSize = \"1px\";\n\n var commandMode = false;\n var ignoreFocusEvents = false;\n \n var lastValue = \"\";\n var lastSelectionStart = 0;\n var lastSelectionEnd = 0;\n var lastRestoreEnd = 0;\n try { var isFocused = document.activeElement === text; } catch(e) {}\n \n event.addListener(text, \"blur\", function(e) {\n if (ignoreFocusEvents) return;\n host.onBlur(e);\n isFocused = false;\n }, host);\n event.addListener(text, \"focus\", function(e) {\n if (ignoreFocusEvents) return;\n isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\n } catch(e) {}\n }\n host.onFocus(e);\n if (useragent.isEdge)\n setTimeout(resetSelection);\n else\n resetSelection();\n }, host);\n this.$focusScroll = false;\n this.focus = function() {\n if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return text.focus({ preventScroll: true });\n\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n try {\n var isTransformed = text.getBoundingClientRect().top != 0;\n } catch(e) {\n return;\n }\n var ancestors = [];\n if (isTransformed) {\n var t = text.parentElement;\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", true);\n if (!t.parentElement && t.getRootNode)\n t = t.getRootNode().host;\n else\n t = t.parentElement;\n }\n }\n text.focus({ preventScroll: true });\n if (isTransformed) {\n ancestors.forEach(function(p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n setTimeout(function() {\n text.style.position = \"\";\n if (text.style.top == \"0px\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function() {\n text.blur();\n };\n this.isFocused = function() {\n return isFocused;\n };\n \n host.on(\"beforeEndOperation\", function() {\n var curOp = host.curOp;\n var commandName = curOp && curOp.command && curOp.command.name;\n if (commandName == \"insertstring\")\n return;\n var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n if (inComposition && isUserAction) {\n lastValue = text.value = \"\";\n onCompositionEnd();\n }\n resetSelection();\n });\n \n var resetSelection = isIOS\n ? function(value) {\n if (!isFocused || (copied && !value) || sendingText) return;\n if (!value) \n value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != text.value)\n text.value = lastValue = newValue;\n \n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n\n if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n text.setSelectionRange(selectionStart, selectionEnd);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n }\n : function() {\n if (inComposition || sendingText)\n return;\n if (!isFocused && !afterContextMenu)\n return;\n inComposition = true;\n \n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n\n if (host.session) {\n var selection = host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n selectionStart = range.start.column;\n selectionEnd = range.end.column;\n line = host.session.getLine(row);\n\n if (range.start.row != row) {\n var prevLine = host.session.getLine(row - 1);\n selectionStart = range.start.row < row - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row != row) {\n var nextLine = host.session.getLine(row + 1);\n selectionEnd = range.end.row > row + 1 ? nextLine.length : selectionEnd;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n }\n else if (isMobile && row > 0) {\n line = \"\\n\" + line;\n selectionEnd += 1;\n selectionStart += 1;\n }\n\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n } else {\n line = \"\\n\";\n if (selectionStart == selectionEnd) {\n selectionStart = selectionEnd = 0;\n }\n else {\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n }\n }\n\n var newValue = line + \"\\n\\n\";\n if (newValue != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\n }\n if (afterContextMenu) {\n lastSelectionStart = text.selectionStart;\n lastSelectionEnd = text.selectionEnd;\n }\n if (\n lastSelectionEnd != selectionEnd \n || lastSelectionStart != selectionStart \n || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n } catch(e){}\n }\n inComposition = false;\n };\n this.resetSelection = resetSelection;\n\n if (isFocused)\n host.onFocus();\n\n\n var isAllSelected = function(text) {\n return text.selectionStart === 0 && text.selectionEnd >= lastValue.length\n && text.value === lastValue && lastValue\n && text.selectionEnd !== lastSelectionEnd;\n };\n\n var onSelect = function(e) {\n if (inComposition)\n return;\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (isMobile && text.selectionStart != lastSelectionStart) {\n resetSelection();\n }\n };\n\n var inputHandler = null;\n this.setInputHandler = function(cb) {inputHandler = cb;};\n this.getInputHandler = function() {return inputHandler;};\n var afterContextMenu = false;\n \n var sendText = function(value, fromInput) {\n if (afterContextMenu)\n afterContextMenu = false;\n if (pasted) {\n resetSelection();\n if (value)\n host.onPaste(value);\n pasted = false;\n return \"\";\n } else {\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n \n var extendLeft = lastSelectionStart;\n var extendRight = lastValue.length - lastSelectionEnd;\n \n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n \n var i = 0;\n while (extendLeft > 0 && lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n inserted = inserted.slice(i);\n i = 1;\n while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1 && lastValue[lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n restoreStart -= i-1;\n restoreEnd -= i-1;\n var endIndex = inserted.length - i + 1;\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n } \n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n return \"\";\n sendingText = true;\n var shouldReset = false;\n if (useragent.isAndroid && inserted == \". \") {\n inserted = \" \";\n shouldReset = true;\n }\n \n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n host.onTextInput(inserted);\n } else {\n host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n sendingText = false;\n \n lastValue = value;\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n lastRestoreEnd = restoreEnd;\n return shouldReset ? \"\\n\" : inserted;\n }\n };\n var onInput = function(e) {\n if (inComposition)\n return onCompositionUpdate();\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\") return host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\") return host.execCommand(\"redo\");\n }\n var data = text.value;\n var inserted = sendText(data, true);\n if (\n data.length > MAX_LINE_LENGTH + 100 \n || valueResetRegex.test(inserted)\n || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd\n ) {\n resetSelection();\n }\n };\n \n var handleClipboardData = function(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n if (isIOS) {\n resetSelection(data);\n copied = data;\n setTimeout(function () {\n copied = false;\n }, 10);\n }\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function(){\n copied = false;\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n \n var onCut = function(e) {\n doCopy(e, true);\n };\n \n var onCopy = function(e) {\n doCopy(e, false);\n };\n \n var onPaste = function(e) {\n var data = handleClipboardData(e);\n if (clipboard.pasteCancelled())\n return;\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host), host);\n\n event.addListener(text, \"select\", onSelect, host);\n event.addListener(text, \"input\", onInput, host);\n\n event.addListener(text, \"cut\", onCut, host);\n event.addListener(text, \"copy\", onCopy, host);\n event.addListener(text, \"paste\", onPaste, host);\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function(e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n }, host);\n }\n var onCompositionStart = function(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) \n return;\n \n inComposition = {};\n\n if (commandMode)\n return;\n \n if (e.data)\n inComposition.useTextareaForIME = false;\n \n setTimeout(onCompositionUpdate, 0);\n host._signal(\"compositionStart\");\n host.on(\"mousedown\", cancelComposition);\n \n var range = host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n inComposition.markerRange = range;\n inComposition.selectionStart = lastSelectionStart;\n host.onCompositionStart(inComposition);\n \n if (inComposition.useTextareaForIME) {\n lastValue = text.value = \"\";\n lastSelectionStart = 0;\n lastSelectionEnd = 0;\n }\n else {\n if (text.msGetInputContext)\n inComposition.context = text.msGetInputContext();\n if (text.getInputContext)\n inComposition.context = text.getInputContext();\n }\n };\n\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n if (commandMode)\n return cancelComposition();\n \n if (inComposition.useTextareaForIME) {\n host.onCompositionUpdate(text.value);\n }\n else {\n var data = text.value;\n sendText(data);\n if (inComposition.markerRange) {\n if (inComposition.context) {\n inComposition.markerRange.start.column = inComposition.selectionStart\n = inComposition.context.compositionStartOffset;\n }\n inComposition.markerRange.end.column = inComposition.markerRange.start.column\n + lastSelectionEnd - inComposition.selectionStart + lastRestoreEnd;\n }\n }\n };\n\n var onCompositionEnd = function(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n inComposition = false;\n host.onCompositionEnd();\n host.off(\"mousedown\", cancelComposition);\n if (e) onInput();\n };\n \n\n function cancelComposition() {\n ignoreFocusEvents = true;\n text.blur();\n text.focus();\n ignoreFocusEvents = false;\n }\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n \n function onKeyup(e) {\n if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n if (!inComposition)\n lastValue = text.value;\n lastSelectionStart = lastSelectionEnd = -1;\n resetSelection();\n }\n syncComposition();\n }\n\n event.addListener(text, \"compositionstart\", onCompositionStart, host);\n event.addListener(text, \"compositionupdate\", onCompositionUpdate, host);\n event.addListener(text, \"keyup\", onKeyup, host);\n event.addListener(text, \"keydown\", syncComposition, host);\n event.addListener(text, \"compositionend\", onCompositionEnd, host);\n\n this.getElement = function() {\n return text;\n };\n this.setCommandMode = function(value) {\n commandMode = value;\n text.readOnly = false;\n };\n \n this.setReadOnly = function(readOnly) {\n if (!commandMode)\n text.readOnly = readOnly;\n };\n\n this.setCopyWithEmptySelection = function(value) {\n };\n\n this.onContextMenu = function(e) {\n afterContextMenu = true;\n resetSelection();\n host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n this.moveToMouse(e, true);\n };\n \n this.moveToMouse = function(e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight -2;\n var move = function(e) {\n dom.translate(text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n }; \n move(e);\n\n if (e.type != \"mousedown\")\n return;\n\n host.renderer.$isMousePressed = true;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n host.renderer.$isMousePressed = false;\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$moveTextAreaToCursor();\n }, 0);\n }\n\n var onContextMenu = function(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu, host);\n event.addListener(text, \"mousedown\", function(e) {\n e.preventDefault();\n onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu, host);\n event.addListener(text, \"contextmenu\", onContextMenu, host);\n \n if (isIOS)\n addIosSelectionHandler(parentNode, host, text);\n\n function addIosSelectionHandler(parentNode, host, text) {\n var typingResetTimeout = null;\n var typing = false;\n \n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n var detectArrowKeys = function(e) {\n if (document.activeElement !== text) return;\n if (typing || inComposition || host.$mouseHandler.isMousePressed) return;\n\n if (copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n \n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n } else if (selectionStart == 1) {\n key = KEYS.home;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n } else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n } else if (\n selectionStart < lastSelectionStart\n || (\n selectionStart == lastSelectionStart \n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd\n )\n ) {\n key = KEYS.left;\n } else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n } else if (\n selectionEnd > lastSelectionEnd\n || (\n selectionEnd == lastSelectionEnd \n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd\n )\n ) {\n key = KEYS.right;\n }\n \n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command)\n host.execCommand(command);\n }\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n resetSelection(\"\");\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function() {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n};\n\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function(_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\n\nfunction DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n this.onMouseDown = function(ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n\n this.startSelect = function(pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent) return;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n\n this.select = function() {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n } else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n\n this.extendSelectionBy = function(unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n } else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n\n this.selectEnd =\n this.selectAllEnd =\n this.selectByWordsEnd =\n this.selectByLinesEnd = function() {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\n\n this.focusWait = function() {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n\n this.onQuadClick = function(ev) {\n var editor = this.editor;\n\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.onMouseWheel = function(ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n \n var editor = this.editor;\n \n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n \n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n \n var direction = Math.abs(vx / vy);\n \n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n \n if (canScroll) {\n prevScroll.allowed = t;\n } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n \n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n\n if (cmp < 0)\n return {cursor: range.start, anchor: range.end};\n else\n return {cursor: range.end, anchor: range.start};\n}\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n}\n\n(function() {\n this.$init = function() {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n this.getElement = function() {\n return this.$element || this.$init();\n };\n this.setText = function(text) {\n this.getElement().textContent = text;\n };\n this.setHtml = function(html) {\n this.getElement().innerHTML = html;\n };\n this.setPosition = function(x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n this.setClassName = function(className) {\n dom.addCssClass(this.getElement(), className);\n };\n this.show = function(text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n\n this.hide = function() {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n }\n };\n this.getHeight = function() {\n return this.getElement().offsetHeight;\n };\n this.getWidth = function() {\n return this.getElement().offsetWidth;\n };\n \n this.destroy = function() {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\")\n return;\n\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n\n\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation)\n return hideTooltip();\n\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n\n if (tooltipAnnotation == annotation)\n return;\n tooltipAnnotation = annotation.text.join(\"
\");\n\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n } else {\n var gutterElement = mouseEvent.domEvent.target;\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n }\n\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\n editor.off(\"mousewheel\", hideTooltip);\n }\n }\n\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n\n event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout)\n return;\n\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n \n editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n this.setPosition = function(x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n \n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n\n this.$pos = null;\n this.$inSelection = null;\n \n this.propagationStopped = false;\n this.defaultPrevented = false;\n};\n\n(function() { \n \n this.stopPropagation = function() {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n \n this.preventDefault = function() {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n \n this.stop = function() {\n this.stopPropagation();\n this.preventDefault();\n };\n this.getDocumentPosition = function() {\n if (this.$pos)\n return this.$pos;\n \n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n this.inSelection = function() {\n if (this.$inSelection !== null)\n return this.$inSelection;\n \n var editor = this.editor;\n \n\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n\n return this.$inSelection;\n };\n this.getButton = function() {\n return event.getButton(this.domEvent);\n };\n this.getShiftKey = function() {\n return this.domEvent.shiftKey;\n };\n \n this.getAccelKey = useragent.isMac\n ? function() { return this.domEvent.metaKey; }\n : function() { return this.domEvent.ctrlKey; };\n \n}).call(MouseEvent.prototype);\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n var editor = mouseHandler.editor;\n\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n\n this.onDragStart = function(e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function(){\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function() {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n\n isInternal = true;\n this.setState(\"drag\");\n };\n\n this.onDragEnd = function(e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n\n this.onDragEnter = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragOver = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragLeave = function(e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n\n this.onDrop = function(e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n } else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n } else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = {x: x, y: y};\n } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = {row: cursor.row, column: cursor.column};\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n } else {\n autoScrollStartTime = null;\n }\n }\n\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function() {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function(type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n var dropEffect = \"none\";\n\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n\n return dropEffect;\n }\n}\n\n(function() {\n\n this.dragWait = function() {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n\n this.dragWaitEnd = function() {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n\n this.dragReadyEnd = function(e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n\n this.startDrag = function(){\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n\n this.onMouseDrag = function(e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n\n this.onMouseDown = function(e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n } else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\n\nexports.addTouchListeners = function(el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n \n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function() {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(\n dom.buildDom(isOpen ? [\"span\",\n !selected && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPallete\" }, \"Pallete\"]\n ] : [\"span\"]),\n contextMenu.firstChild\n );\n };\n var handleClick = function(e) {\n var action = e.target.getAttribute(\"action\");\n\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPallete\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function(e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function(e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!contextMenu) createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n } else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n } else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function(e) {\n if (!pressed) return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n \n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n \n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n \n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n } else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n \n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n var weightedDistance = function(x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n \n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n \n var diff1 = weightedDistance(\n e.clientX - rect.left - cursorPos.left + offsetLeft,\n e.clientY - rect.top - cursorPos.top + offsetTop\n );\n var diff2 = weightedDistance(\n e.clientX - rect.left - anchorPos.left + offsetLeft,\n e.clientY - rect.top - anchorPos.top + offsetTop\n );\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n \n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer) clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n } else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n } else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n } else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\") return;\n\n var touchObj = touches[0];\n\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY)) wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX)) wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function() {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01) vX = 0;\n if (Math.abs(vY) < 0.01) vY = 0;\n if (animationSteps < 20) vX = 0.9 * vX;\n if (animationSteps < 20) vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"./dom\");\n\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\n\nexports.loadScript = function(path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n\n s.src = path;\n head.appendChild(s);\n\n s.onload = s.onreadystatechange = function(_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function(url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n\n if (typeof e != \"object\" || !e)\n e = {};\n\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n\n listeners = listeners.slice();\n for (var i=0; i 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n } else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\n\nexports.setModuleUrl = function(name, subst) {\n return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n var module, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = require(moduleName);\n } catch (e) {}\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n\n exports.$loading[moduleName].push(onLoad);\n\n if (exports.$loading[moduleName].length > 1)\n return;\n\n var afterLoad = function() {\n require([moduleName], function(module) {\n exports._emit(\"load.module\", {name: moduleName, module: module});\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function(onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n\n if (!exports.get(\"packaged\"))\n return afterLoad();\n \n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n};\n\nvar reportErrorIfPathIsNotConfigured = function() {\n if (\n !options.basePath && !options.workerPath \n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length\n ) {\n console.error(\n \"Unable to infer path to ace from script src,\",\n \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\",\n \"or with webpack use ace/webpack-resolver\"\n );\n reportErrorIfPathIsNotConfigured = function() {};\n }\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged);\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i 0){\n\t\t\tif (action == 0x10){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = 1;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t} else {\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tcond = impTab[newState][6];\n\t\tif (cond){\n\t\t\tif(condPos == -1){\n\t\t\t\tcondPos = ix;\n\t\t\t}\n\t\t}else{\n\t\t\tif (condPos > -1){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = newLevel;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tif (charTypes[ix] == B){\n\t\t\tlevels[ix] = 0;\n\t\t}\n\t\thiLevel |= newLevel;\n\t}\n\tif (hasUBAT_S){\n\t\tfor(i = 0; i < len; i++){\n\t\t\tif(charTypes[i] == S){\n\t\t\t\tlevels[i] = dir;\n\t\t\t\tfor(var j = i - 1; j >= 0; j--){\n\t\t\t\t\tif(charTypes[j] == WS){\n\t\t\t\t\t\tlevels[j] = dir;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction _invertLevel(lev, levels, _array) {\n\tif (hiLevel < lev){\n\t\treturn;\n\t}\n\tif (lev == 1 && dir == RTL && !hasUBAT_B){\n\t\t_array.reverse();\n\t\treturn;\n\t}\n\tvar len = _array.length, start = 0, end, lo, hi, tmp;\n\twhile(start < len){\n\t\tif (levels[start] >= lev){\n\t\t\tend = start + 1;\n\t\twhile(end < len && levels[end] >= lev){\n\t\t\tend++;\n\t\t}\n\t\tfor(lo = start, hi = end - 1 ; lo < hi; lo++, hi--){\n\t\t\ttmp = _array[lo];\n\t\t\t_array[lo] = _array[hi];\n\t\t\t_array[hi] = tmp;\n\t\t}\n\t\tstart = end;\n\t}\n\tstart++;\n\t}\n}\n\nfunction _getCharClass(chars, types, classes, ix) {\t\t\t\n\tvar cType = types[ix], wType, nType, len, i;\n\tswitch(cType){\n\t\tcase L:\n\t\tcase R:\n\t\t\tlastArabic = false;\n\t\tcase ON:\n\t\tcase AN:\n\t\t\treturn cType;\n\t\tcase EN:\n\t\t\treturn lastArabic ? AN : EN;\n\t\tcase AL:\n\t\t\tlastArabic = true;\n\t\t\thasUBAT_AL = true;\n\t\t\treturn R;\n\t\tcase WS:\n\t\t\treturn ON;\n\t\tcase CS:\n\t\t\tif (ix < 1 || (ix + 1) >= types.length ||\n\t\t\t\t((wType = classes[ix - 1]) != EN && wType != AN) ||\n\t\t\t\t((nType = types[ix + 1]) != EN && nType != AN)){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\tif (lastArabic){nType = AN;}\n\t\t\treturn nType == wType ? nType : ON;\n\t\tcase ES:\n\t\t\twType = ix > 0 ? classes[ix - 1] : B;\n\t\t\tif (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase ET:\n\t\t\tif (ix > 0 && classes[ix - 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\tif (lastArabic){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\ti = ix + 1;\n\t\t\tlen = types.length;\n\t\t\twhile (i < len && types[i] == ET){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len && types[i] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase NSM:\n\t\t\tlen = types.length;\n\t\t\ti = ix + 1;\n\t\t\twhile (i < len && types[i] == NSM){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len){\n\t\t\t\tvar c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n\t\t\t\t\n\t\t\t\twType = types[i];\n\t\t\t\tif (rtlCandidate && (wType == R || wType == AL)){\n\t\t\t\t\treturn R;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ix < 1 || (wType = types[ix - 1]) == B){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\treturn classes[ix - 1];\n\t\tcase B:\n\t\t\tlastArabic = false;\n\t\t\thasUBAT_B = true;\n\t\t\treturn dir;\n\t\tcase S:\n\t\t\thasUBAT_S = true;\n\t\t\treturn ON;\n\t\tcase LRE:\n\t\tcase RLE:\n\t\tcase LRO:\n\t\tcase RLO:\n\t\tcase PDF:\n\t\t\tlastArabic = false;\n\t\tcase BN:\n\t\t\treturn ON;\n\t}\n}\n\nfunction _getCharacterType( ch ) {\t\t\n\tvar uc = ch.charCodeAt(0), hi = uc >> 8;\n\t\n\tif (hi == 0) {\t\t\n\t\treturn ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n\t} else if (hi == 5) {\n\t\treturn (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n\t} else if (hi == 6) {\n\t\tif (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n\t\t\treturn NSM;\n\t\telse if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n\t\t\treturn AN;\n\t\telse if (uc == 0x066A)\n\t\t\treturn ET;\n\t\telse if (/[\\u06f0-\\u06f9]/.test(ch))\n\t\t\treturn EN;\t\t\t\n\t\telse\n\t\t\treturn AL;\n\t} else if (hi == 0x20 && uc <= 0x205F) {\n\t\treturn UnicodeTBL20[uc & 0xFF];\n\t} else if (hi == 0xFE) {\n\t\treturn (uc >= 0xFE70 ? AL : ON);\n\t}\t\t\n\treturn ON;\t\n}\n\nfunction _isArabicDiacritics( ch ) {\n\treturn (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\n\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function(text, textCharTypes, isRtl) {\n\tif (text.length < 2)\n\t\treturn {};\n\t\t\n\tvar chars = text.split(\"\"), logicalFromVisual = new Array(chars.length),\n\t\tbidiLevels = new Array(chars.length), levels = []; \n\n\tdir = isRtl ? RTL : LTR;\n\n\t_computeLevels(chars, levels, chars.length, textCharTypes);\n\n\tfor (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++);\n\n\t_invertLevel(2, levels, logicalFromVisual);\n\t_invertLevel(1, levels, logicalFromVisual);\n\n\tfor (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n\t\tif (textCharTypes[i] === AN) {\n\t\t\tlevels[i] = exports.AN;\n\t\t} else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE) \n\t\t\t|| textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n\t\t\tlevels[i] = exports.ON_R;\n\t\t} else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n\t\t\tlevels[i - 1] = levels[i] = exports.R_H;\n\t\t\ti++;\n\t\t}\n\t}\n\tif (chars[chars.length - 1] === exports.DOT)\n\t\tlevels[chars.length - 1] = exports.B;\n\t\t\t\t\n\tif (chars[0] === '\\u202B')\n\t\tlevels[0] = exports.RLE;\n\t\t\t\t\n\tfor (var i = 0; i < logicalFromVisual.length; i++) {\n\t\tbidiLevels[i] = levels[logicalFromVisual[i]];\n\t}\n\n\treturn {'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels};\n};\nexports.hasBidiCharacters = function(text, textCharTypes){\n\tvar ret = false;\n\tfor (var i = 0; i < text.length; i++){\n\t\ttextCharTypes[i] = _getCharacterType(text.charAt(i));\n\t\tif (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n\t\t\tret = true;\n\t}\n\treturn ret;\n};\t\nexports.getVisualFromLogicalIdx = function(logIdx, rowMap) {\n\tfor (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n\t\tif (rowMap.logicalFromVisual[i] == logIdx)\n\t\t\treturn i;\n\t}\n\treturn 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = function(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n};\n\n(function() {\n this.isBidiRow = function(screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n\n this.onChange = function(delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n } \n else {\n this.currentRow = null;\n }\n };\n\n this.getDocumentRow = function() {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n\n return docRow;\n };\n\n this.getSplitIndex = function() {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n\n prevIndex = currentIndex;\n splitIndex++;\n }\n } else {\n splitIndex = this.currentRow;\n }\n\n return splitIndex;\n };\n\n this.updateRowLine = function(docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n \n var isLastRow = (docRow === this.session.getLength() - 1),\n endOfLine = isLastRow ? this.EOF : this.EOL;\n\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n\n if(splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n } else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n }\n if (splitIndex == splits.length)\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n } else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function(ch, i){\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n \n this.updateBidiMap = function() {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n } else {\n this.bidiMap = {};\n }\n };\n this.markAsDirty = function() {\n this.currentRow = null;\n };\n this.updateCharacterWidths = function(fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n\n this.currentRow = null;\n };\n\n this.setShowInvisibles = function(showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n\n this.setEolChar = function(eolChar) {\n this.EOL = eolChar; \n };\n\n this.setContentWidth = function(width) {\n this.contentWidth = width;\n };\n\n this.isRtlLine = function(row) {\n if (this.$isRtl) return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir; \n };\n\n this.setRtlDirection = function(editor, isRtlDir) {\n var cursor = editor.getCursorPosition(); \n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({column: 0, row: row}, editor.session.$bidiHandler.RLE);\n }\n };\n this.getPosLeft = function(col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap),\n levels = this.bidiMap.bidiLevels, left = 0;\n\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n \n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n\n return left;\n };\n this.getSelections = function(startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0,\n selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false, isSelectedPrev = false, selectionStart = 0;\n \n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n } else if (!isSelected && isSelectedPrev) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n\n if (isSelected && (visIdx === levels.length)) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n\n if(this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n this.offsetToCol = function(posX) {\n if(this.isRtlDir)\n posX -= this.rtlLineOffset;\n\n var logicalIdx = 0, posX = Math.max(posX, 0),\n offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n \n while(posX > offset + charWidth/2) {\n offset += charWidth;\n if(visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n \n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)){\n if(posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n\n } else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)){\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n\n } else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))){\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n } else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n\n return (logicalIdx + this.wrapIndent);\n };\n\n}).call(BidiHandler.prototype);\n\nexports.BidiHandler = BidiHandler;\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = function(session) {\n this.session = session;\n this.doc = session.getDocument();\n\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n\n var self = this;\n this.cursor.on(\"change\", function(e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n\n this.anchor.on(\"change\", function() {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.isEmpty = function() {\n return this.$isEmpty || (\n this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column\n );\n };\n this.isMultiLine = function() {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n this.getCursor = function() {\n return this.lead.getPosition();\n };\n this.setSelectionAnchor = function(row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n this.getAnchor = \n this.getSelectionAnchor = function() {\n if (this.$isEmpty)\n return this.getSelectionLead();\n \n return this.anchor.getPosition();\n };\n this.getSelectionLead = function() {\n return this.lead.getPosition();\n };\n this.isBackwards = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n this.getRange = function() {\n var anchor = this.anchor;\n var lead = this.lead;\n\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n this.clearSelection = function() {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n this.selectAll = function() {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n this.setRange =\n this.setSelectionRange = function(range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n\n this.$setSelection = function(anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n\n this.$moveSelection = function(mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n\n mover.call(this);\n };\n this.selectTo = function(row, column) {\n this.$moveSelection(function() {\n this.moveCursorTo(row, column);\n });\n };\n this.selectToPosition = function(pos) {\n this.$moveSelection(function() {\n this.moveCursorToPosition(pos);\n });\n };\n this.moveTo = function(row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n this.moveToPosition = function(pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n this.selectUp = function() {\n this.$moveSelection(this.moveCursorUp);\n };\n this.selectDown = function() {\n this.$moveSelection(this.moveCursorDown);\n };\n this.selectRight = function() {\n this.$moveSelection(this.moveCursorRight);\n };\n this.selectLeft = function() {\n this.$moveSelection(this.moveCursorLeft);\n };\n this.selectLineStart = function() {\n this.$moveSelection(this.moveCursorLineStart);\n };\n this.selectLineEnd = function() {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n this.selectFileEnd = function() {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n this.selectFileStart = function() {\n this.$moveSelection(this.moveCursorFileStart);\n };\n this.selectWordRight = function() {\n this.$moveSelection(this.moveCursorWordRight);\n };\n this.selectWordLeft = function() {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n this.getWordRange = function(row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n this.selectWord = function() {\n this.setSelectionRange(this.getWordRange());\n };\n this.selectAWord = function() {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n\n this.getLineRange = function(row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n } else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n this.selectLine = function() {\n this.setSelectionRange(this.getLineRange());\n };\n this.moveCursorUp = function() {\n this.moveCursorBy(-1, 0);\n };\n this.moveCursorDown = function() {\n this.moveCursorBy(1, 0);\n };\n this.wouldMoveIntoSoftTab = function(cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length-1 == tabSize;\n };\n this.moveCursorLeft = function() {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n } else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n } else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n this.moveCursorRight = function() {\n var cursor = this.lead.getPosition(),\n fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n } else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n this.moveCursorLineStart = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(\n row, null, firstColumnPosition.row,\n firstColumnPosition.column\n );\n\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n this.moveCursorLineEnd = function() {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n this.moveCursorFileEnd = function() {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n this.moveCursorFileStart = function() {\n this.moveCursorTo(0, 0);\n };\n this.moveCursorLongWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n this.moveCursorLongWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function(rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index ++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n\n return index;\n };\n\n this.moveCursorShortWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n\n this.moveCursorWordLeft = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n this.moveCursorBy = function(rows, chars) {\n var screenPos = this.session.documentToScreenPosition(\n this.lead.row,\n this.lead.column\n );\n\n var offsetX;\n\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n } else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n \n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n \n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n \n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n \n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n this.moveCursorToPosition = function(position) {\n this.moveCursorTo(position.row, position.column);\n };\n this.moveCursorTo = function(row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n this.detach = function() {\n this.lead.detach();\n this.anchor.detach();\n };\n\n this.fromOrientedRange = function(range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n\n this.toOrientedRange = function(range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n } else {\n range = r;\n }\n\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n this.getRangeOfMovements = function(func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n } catch(e) {\n return Range.fromPoints(start, start);\n } finally {\n this.moveCursorToPosition(start);\n }\n };\n\n this.toJSON = function() {\n if (this.rangeCount) {\n var data = this.ranges.map(function(r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n\n this.fromJSON = function(data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--; ) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n } else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n\n this.isEqual = function(data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n\n for (var i = this.ranges.length; i--; ) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar config = require(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function(rules) {\n this.states = rules;\n\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\n var flag = \"g\";\n\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive)\n flag = \"gi\";\n if (rule.regex == null)\n continue;\n\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n } else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", { \n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n } else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n \n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n \n splitterRurles.forEach(function(rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n};\n\n(function() {\n this.$setMaxTokenCount = function(m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n \n this.$applyToken = function(str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{type: types, value: str}];\n\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n\n this.$arrayTokens = function(str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n\n this.removeCapturingGroups = function(src) {\n var r = src.replace(\n /\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g,\n function(x, y) {return y ? \"(?:\" : x;}\n );\n return r;\n };\n\n this.createSplitterRegexp = function(src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\n m, esc, parenOpen, parenClose, square, index\n ) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index+1;\n lastCapture.stack = -1;\n }\n stack--;\n } else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n \n return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n };\n this.getLineTokens = function(line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n } else\n var stack = [];\n\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n\n var token = {type: null, value: \"\"};\n\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: skipped};\n }\n }\n\n for (var i = 0; i < match.length-2; i++) {\n if (match[i + 1] === undefined)\n continue;\n\n rule = state[mapping[i]];\n\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\n \n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: value};\n }\n } else if (type) {\n if (token.type)\n tokens.push(token);\n token = {type: null, value: \"\"};\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n\n if (lastIndex == line.length)\n break;\n\n lastIndex = index;\n\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n\n if (token.type)\n tokens.push(token);\n \n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens : tokens,\n state : stack.length ? stack : currentState\n };\n };\n \n this.reportError = config.reportError;\n \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n this.$rules = {\n \"start\" : [{\n token : \"empty_line\",\n regex : '^$'\n }, {\n defaultToken : \"text\"\n }]\n };\n};\n\n(function() {\n\n this.addRules = function(rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n\n this.getRules = function() {\n return this.$rules;\n };\n\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n } else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n\n this.addRules(embedRules, prefix);\n\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function() {\n return this.$embeds;\n };\n\n var pushState = function(currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function(currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n\n this.normalizeRules = function() {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (Array.isArray(includeName))\n toInsert = includeName.map(function(x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function(x) {return !x.next;});\n state.splice.apply(state, args);\n i--;\n }\n \n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(\n rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n );\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n\n this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function(className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--; ) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase)\n word = word.toLowerCase(); \n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase\n ? function(value) {return keywords[value.toLowerCase()] || defaultToken; }\n : function(value) {return keywords[value] || defaultToken; };\n };\n\n this.getKeywords = function() {\n return this.$keywords;\n };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n this.$behaviours = {};\n};\n\n(function () {\n\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n \n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n \n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n \n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n \n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n } else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar TokenIterator = function(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() { \n this.stepBackward = function() {\n this.$tokenIndex -= 1;\n \n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n \n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.stepForward = function() {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentTokenRow = function () {\n return this.$row;\n }; \n this.getCurrentTokenColumn = function() {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n \n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n \n return column; \n };\n this.getCurrentTokenPosition = function() {\n return {row: this.$row, column: this.getCurrentTokenColumn()};\n };\n this.getCurrentTokenRange = function() {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n \n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar defaultQuotes = {'\"' : '\"', \"'\" : \"'\"};\n\nvar initContext = function(editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = {rangeCount: editor.multiSelect.rangeCount};\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\n\nvar CstyleBehaviour = function(options) {\n this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n } else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n } else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n\n this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n } else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n\n this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n } else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n } else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) \n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n } else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column-1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n \n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n \n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n \n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n } else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1,1]\n };\n }\n }\n });\n\n this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n\n};\n\n \nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar wordChars = [48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2];\n\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\n\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar config = require(\"../config\");\n\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n this.$defaultBehaviour = new CstyleBehaviour();\n\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n\n this.getTokenizer = function() {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function(state, session, startRow, endRow) {\n var doc = session.doc;\n\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n var comment = function(line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n\n var uncomment = function(line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n\n var testRemove = function(line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n \n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function(line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function(line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\n else\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n var testRemove = function(line, i) {\n return regexpStart.test(line);\n };\n \n var shouldInsertSpace = function(line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n\n\n var minEmptyLength = Infinity;\n iter(function(line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n iter(shouldRemove ? uncomment : comment);\n };\n\n this.toggleBlockComment = function(state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n } else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n\n this.getNextLineIndent = function(state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n\n this.autoOutdent = function(state, doc, row) {\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function(session) {\n return null;\n };\n\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n for (var i = 0; i < delegations.length; i++) {\n (function(scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function() {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\n }\n };\n\n this.$delegator = function(method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n \n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n\n this.transformAction = function(state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n \n this.getKeywords = function(append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n \n this.$createKeywordList = function() {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n\n this.getCompletions = function(state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function(word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n \n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n } else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n } else {\n docLines.splice(\n row, endRow - row + 1,\n line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n );\n }\n break;\n }\n};\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n \n if (typeof column == \"undefined\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n this.getDocument = function() {\n return this.document;\n };\n this.$insertRight = false;\n this.onChange = function(delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n\n if (delta.start.row > this.row)\n return;\n \n var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n \n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n }\n \n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n \n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column)\n return;\n\n var old = {\n row: this.row,\n column: this.column\n };\n\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n this.detach = function() {\n this.document.off(\"change\", this.$onChange);\n };\n this.attach = function(doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n\n if (column < 0)\n pos.column = 0;\n\n return pos;\n };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({row: 0, column: 0}, textOrLines);\n } else {\n this.insert({row: 0, column:0}, textOrLines);\n }\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setValue = function(text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({row: 0, column: 0}, text);\n };\n this.getValue = function() {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n this.createAnchor = function(row, column) {\n return new Anchor(this, row, column);\n };\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function(text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function(text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineCharacter = function() {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n this.setNewLineMode = function(newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineMode = function() {\n return this.$newLineMode;\n };\n this.isNewLine = function(text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n this.getLine = function(row) {\n return this.$lines[row] || \"\";\n };\n this.getLines = function(firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n this.getAllLines = function() {\n return this.getLines(0, this.getLength());\n };\n this.getLength = function() {\n return this.$lines.length;\n };\n this.getTextRange = function(range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n this.getLinesForRange = function(range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n } else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n this.insertLines = function(row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n this.removeLines = function(firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n this.insertNewLine = function(position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n this.insert = function(position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n \n return this.insertMergedLines(position, this.$split(text));\n };\n this.insertInLine = function(position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n \n return this.clonePos(end);\n };\n \n this.clippedPos = function(row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\n } else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {row: row, column: column};\n };\n \n this.clonePos = function(pos) {\n return {row: pos.row, column: pos.column};\n };\n \n this.pos = function(row, column) {\n return {row: row, column: column};\n };\n \n this.$clipPosition = function(position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n } else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n this.insertFullLines = function(row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({row: row, column: column}, lines);\n }; \n this.insertMergedLines = function(position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n \n return this.clonePos(end);\n };\n this.remove = function(range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n });\n return this.clonePos(start);\n };\n this.removeInLine = function(row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n }, true);\n \n return this.clonePos(start);\n };\n this.removeFullLines = function(firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );\n var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );\n var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );\n var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); \n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n \n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n this.removeNewLine = function(row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n this.replace = function(range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n \n return end;\n };\n this.applyDeltas = function(deltas) {\n for (var i=0; i=0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n this.applyDelta = function(delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n \n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n \n this.$safeApplyDelta = function(delta) {\n var docLength = this.$lines.length;\n if (\n delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength\n ) {\n this.applyDelta(delta);\n }\n };\n \n this.$splitAndapplyLargeDelta = function(delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row; \n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n this.revertDelta = function(delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n this.indexToPosition = function(index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return {row: i, column: index + lines[i].length + newlineLength};\n }\n return {row: l-1, column: index + lines[l-1].length + newlineLength};\n };\n this.positionToIndex = function(pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n\n return index + pos.column;\n };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n\n var self = this;\n\n this.$worker = function() {\n if (!self.running) { return; }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n \n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines ++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n \n if (endLine == -1)\n endLine = currentLine;\n \n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n this.setTokenizer = function(tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n\n this.start(0);\n };\n this.setDocument = function(doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n\n this.stop();\n };\n this.fireUpdateEvent = function(firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", {data: data});\n };\n this.start = function(startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n \n this.scheduleStart = function() {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n\n this.$updateOnChange = function(delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n this.stop();\n };\n this.stop = function() {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n this.getTokens = function(row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n this.getState = function(row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function(row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n\n var data = this.tokenizer.getLineTokens(line, state, row);\n\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n};\n\n(function() {\n this.MAX_RANGES = 500;\n \n this.setRegexp = function(regExp) {\n if (this.regExp+\"\" == regExp+\"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function(html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function(match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n\n for (var j = ranges.length; j --; ) {\n markerLayer.drawSingleLineMarker(\n html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [ folds ];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column,\n last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n\n this.folds.forEach(function(fold) {\n fold.setFoldLine(this);\n }, this);\n}\n\n(function() {\n this.shiftRow = function(shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function(fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n\n this.addFold = function(fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function(a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n } else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n\n this.containsRow = function(row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function(callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp, stop, isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n\n this.getNextFoldTo = function(row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n\n this.addRemoveChars = function(row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row)\n {\n window.console && window.console.log(row, column, fold);\n } else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n\n this.split = function(row, column) {\n var pos = this.getNextFoldTo(row, column);\n \n if (!pos || pos.kind == \"inside\")\n return null;\n \n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n \n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.merge = function(foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n\n this.toString = function() {\n var ret = [this.range.toString() + \": [\" ];\n\n this.folds.forEach(function(fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function(idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n this.ranges = [];\n this.$bias = 1;\n};\n\n(function() {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function(pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i-2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n\n return -i-1;\n }\n return -i - 1;\n };\n\n this.add = function(range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.addList = function(list) {\n var removed = [];\n for (var i = list.length; i--; ) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n\n this.substractPoint = function(pos) {\n var i = this.pointIndex(pos);\n\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n this.merge = function() {\n var removed = [];\n var list = this.ranges;\n \n list = list.sort(function(a, b) {\n return comparePoints(a.start, b.start);\n });\n \n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n \n this.ranges = list;\n\n return removed;\n };\n\n this.contains = function(row, column) {\n return this.pointIndex({row: row, column: column}) >= 0;\n };\n\n this.containsPoint = function(pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function(pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n\n\n this.clipRows = function(startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n\n var startIndex = this.pointIndex({row: startRow, column: 0});\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n\n this.removeAll = function() {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function(session) {\n if (this.session)\n this.detach();\n\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n\n this.session.on('change', this.onChange);\n };\n\n this.detach = function() {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$onChange = function(delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n \n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n \n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n } else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n } else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n \n if (r.start.row > endRow)\n break;\n \n if (r.end.row < endRow\n && (\n startRow < r.end.row \n || startRow == r.end.row && start.column < r.end.column\n )\n ) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n \n if (r.start.row < endRow\n && (\n startRow < r.start.row \n || startRow == r.start.row && start.column < r.start.column\n )\n ) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar RangeList = require(\"../range_list\").RangeList;\nvar oop = require(\"../lib/oop\");\nvar Fold = exports.Fold = function(range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n this.toString = function() {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function(foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function(fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.clone = function() {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function(subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n\n this.addSubFold = function(fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0) j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n\n return fold;\n };\n \n this.restoreRange = function(range) {\n return restoreRange(range, this.start);\n };\n\n}).call(Fold.prototype);\n\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n this.getFoldAt = function(row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n } else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function(range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n\n start.column += 1;\n end.column -= 1;\n\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n } else if (cmp == 2) {\n continue;\n } else\n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n\n return foundFolds;\n };\n\n this.getFoldsInRangeList = function(ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function(range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n } else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function() {\n var folds = [];\n var foldLines = this.$foldData;\n \n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n\n return folds;\n };\n this.getFoldStringAt = function(row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n\n this.getFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n } else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n\n this.getFoldedRowCount = function(first, last) {\n var foldData = this.$foldData, rowCount = last-first+1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i],\n end = foldLine.end.row,\n start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last-start;\n else\n rowCount = 0; // in one fold\n }\n break;\n } else if (end >= first){\n if (start >= first) // fold inside range\n rowCount -= end-start;\n else\n rowCount -= end-first+1;\n }\n }\n return rowCount;\n };\n\n this.$addFoldLine = function(foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function(a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function(placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n \n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n \n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n if (!fold.collapseChildren) {\n folds.forEach(function(subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n } else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n\n return fold;\n };\n\n this.addFolds = function(folds) {\n folds.forEach(function(fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function(fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else\n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n } else\n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n } else\n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else\n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n\n this.removeFolds = function(folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function(fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n\n this.expandFold = function(fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function(subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\n }\n fold.subFolds = [];\n };\n\n this.expandFolds = function(folds) {\n folds.forEach(function(fold) {\n this.expandFold(fold);\n }, this);\n };\n\n this.unfold = function(location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null) expandInner = true;\n } else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n } else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n } else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function(range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n } else {\n range = location;\n }\n \n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (\n folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0 \n && Range.comparePoints(folds[0].end, range.end) > 0\n ) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n \n if (expandInner != false) {\n this.removeFolds(folds);\n } else {\n this.expandFolds(folds);\n }\n if (outermostFolds.length)\n return outermostFolds;\n };\n this.isRowFolded = function(docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n\n this.getRowFoldEnd = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n\n this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(\n foldLine, row, endColumn, startRow, startColumn);\n }\n };\n\n this.$cloneFoldData = function() {\n var fd = [];\n fd = this.$foldData.map(function(foldLine) {\n var folds = foldLine.folds.map(function(fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n\n return fd;\n };\n\n this.toggleFold = function(tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1 ) {\n fold = folds[0];\n }\n }\n\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n\n this.addFold(placeholder, range);\n };\n\n this.getCommentFoldRange = function(row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n iterator.stepForward();\n }\n \n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n iterator = new TokenIterator(this, row, column);\n \n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state))\n lastRow = iterator.$row;\n } else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n } else\n token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n\n this.foldAll = function(startRow, endRow, depth, test) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n \n if (test && !test(row)) continue;\n\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow\n ) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n \n this.foldToLevel = function(level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\n \n this.foldAllComments = function() {\n var session = this;\n this.foldAll(null, null, null, function(row) {\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value))\n continue;\n if (/comment/.test(token.type))\n return true;\n return false;\n }\n });\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function(style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n \n if (this.$foldStyle == style)\n return;\n\n this.$foldStyle = style;\n \n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function(foldMode) {\n if (this.$foldMode == foldMode)\n return;\n \n this.$foldMode = foldMode;\n \n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n \n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n \n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n \n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function(row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n \n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n \n this.$toggleFoldWidget = function(row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n \n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) \n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n \n return range;\n };\n \n \n \n this.toggleFoldWidget = function(toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n \n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n \n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function(delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function(e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\n\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n this.findMatchingBracket = function(position, chr) {\n if (position.column == 0) return null;\n\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n if (charBeforeCursor == \"\") return null;\n\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n \n this.getBracketRange = function(pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {row: pos.row, column: pos.column + 1};\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n } else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n \n return range;\n };\n this.getMatchingBracketRanges = function(pos) {\n var line = this.getLine(pos.row);\n\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {row: pos.row, column: pos.column + 1};\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n }\n\n if (!match)\n return null;\n\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n\n return [startRange, endRange];\n };\n\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n\n this.$findOpeningBracket = function(bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n \n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n \n while (true) {\n \n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n \n value = token.value;\n valueIndex = value.length - 1;\n }\n \n return null;\n };\n\n this.$findClosingBracket = function(bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n\n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n\n valueIndex = 0;\n }\n \n return null;\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\n\nvar EditSession = function(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function() {\n return this.join(\"\\n\");\n };\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(text);\n\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$bidiHandler = new BidiHandler(this);\n\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n};\n\n\nEditSession.$uid = 0;\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setDocument = function(doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n\n if (this.bgTokenizer)\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.resetCaches();\n };\n this.getDocument = function() {\n return this.doc;\n };\n this.$resetRowCache = function(docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n\n this.$getRowCacheIndex = function(cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n\n return low -1;\n };\n\n this.resetCaches = function() {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer)\n this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function(e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function(delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n \n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n this.setValue = function(text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n this.getValue =\n this.toString = function() {\n return this.doc.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.getState = function(row) {\n return this.bgTokenizer.getState(row);\n };\n this.getTokens = function(row) {\n return this.bgTokenizer.getTokens(row);\n };\n this.getTokenAt = function(row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n } else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n this.setUndoManager = function(undoManager) {\n this.$undoManager = undoManager;\n \n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n \n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function() {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n } else {\n this.$syncInformUndoManager = function() {};\n }\n };\n this.markUndoGroup = function() {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n \n this.$defaultUndoManager = {\n undo: function() {},\n redo: function() {},\n hasUndo: function() {},\n hasRedo: function() {},\n reset: function() {},\n add: function() {},\n addSelection: function() {},\n startNewGroup: function() {},\n addSession: function() {}\n };\n this.getUndoManager = function() {\n return this.$undoManager || this.$defaultUndoManager;\n };\n this.getTabString = function() {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n } else {\n return \"\\t\";\n }\n };\n this.setUseSoftTabs = function(val) {\n this.setOption(\"useSoftTabs\", val);\n };\n this.getUseSoftTabs = function() {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n this.setTabSize = function(tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n this.getTabSize = function() {\n return this.$tabSize;\n };\n this.isTabStop = function(position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n this.getNavigateWithinSoftTabs = function() {\n return this.$navigateWithinSoftTabs;\n };\n\n this.$overwrite = false;\n this.setOverwrite = function(overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n this.getOverwrite = function() {\n return this.$overwrite;\n };\n this.toggleOverwrite = function() {\n this.setOverwrite(!this.$overwrite);\n };\n this.addGutterDecoration = function(row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n this.removeGutterDecoration = function(row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n this.getBreakpoints = function() {\n return this.$breakpoints;\n };\n this.setBreakpoints = function(rows) {\n this.$breakpoints = [];\n for (var i=0; i 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column-1, column+1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n\n var start = column;\n if (start > 0) {\n do {\n start--;\n }\n while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n this.getAWordRange = function(row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n this.setNewLineMode = function(newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n this.getNewLineMode = function() {\n return this.doc.getNewLineMode();\n };\n this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n this.getUseWorker = function() { return this.$useWorker; };\n this.onReloadTokenizer = function(e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = config.$modes;\n this.$mode = null;\n this.$modeId = null;\n this.setMode = function(mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n } else {\n path = mode || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function(m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n } else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n\n this.$onChangeMode = function(mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode) \n return;\n \n var oldMode = this.$mode;\n this.$mode = mode;\n\n this.$stopWorker();\n\n if (this.$useWorker)\n this.$startWorker();\n\n var tokenizer = mode.getTokenizer();\n\n if(tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n var _self = this;\n this.bgTokenizer.on(\"update\", function(e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n \n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", {oldMode: oldMode, mode: mode});\n }\n };\n\n this.$stopWorker = function() {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function() {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n this.getMode = function() {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n this.setScrollTop = function(scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n this.getScrollTop = function() {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n this.setScrollLeft = function(scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n this.getScrollLeft = function() {\n return this.$scrollLeft;\n };\n this.getScreenWidth = function() {\n this.$computeWidth();\n if (this.lineWidgets) \n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n \n this.getLineWidgetMaxWidth = function() {\n if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function(w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n\n this.$computeWidth = function(force) {\n if (this.$modified || force) {\n this.$modified = false;\n\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n this.getLine = function(row) {\n return this.doc.getLine(row);\n };\n this.getLines = function(firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n this.getLength = function() {\n return this.doc.getLength();\n };\n this.getTextRange = function(range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n this.insert = function(position, text) {\n return this.doc.insert(position, text);\n };\n this.remove = function(range) {\n return this.doc.remove(range);\n };\n this.removeFullLines = function(firstRow, lastRow){\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n this.undoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n } else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n this.redoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n this.setUndoSelect = function(enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function(deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n\n var range, point;\n\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start) continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n \n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n } else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n this.replace = function(range, text) {\n return this.doc.replace(range, text);\n };\n this.moveText = function(fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function(x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n\n return toRange;\n };\n this.indentRows = function(startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row=startRow; row<=endRow; row++)\n this.doc.insertInLine({row: row, column: 0}, indentString);\n };\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n\n this.$moveLines = function(firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0) return 0;\n var diff = row-firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength()-1) return 0;\n var diff = row-lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function(x){\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n \n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow+diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n this.moveLinesUp = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n this.moveLinesDown = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n this.duplicateLines = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n\n this.$clipRowToDocument = function(row) {\n return Math.max(0, Math.min(row, this.doc.getLength()-1));\n };\n\n this.$clipColumnToRow = function(row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n\n this.$clipPositionToDocument = function(row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\n } else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len-1).length;\n } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function(range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(\n range.start.row,\n range.start.column\n );\n }\n\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n } else {\n range.end.column = this.$clipColumnToRow(\n range.end.row,\n range.end.column\n );\n }\n return range;\n };\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min : null,\n max : null\n };\n this.setUseWrapMode = function(useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n\n this._signal(\"changeWrapMode\");\n }\n };\n this.getUseWrapMode = function() {\n return this.$useWrapMode;\n };\n this.setWrapLimitRange = function(min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n this.adjustWrapLimit = function(desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = {min: $printMargin, max: $printMargin};\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n\n this.$constrainWrapLimit = function(wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n\n return wrapLimit;\n };\n this.getWrapLimit = function() {\n return this.$wrapLimit;\n };\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n this.getWrapLimitRange = function() {\n return {\n min : this.$wrapLimitRange.min,\n max : this.$wrapLimitRange.max\n };\n };\n\n this.$updateInternalDataOnChange = function(delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n \n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n\n lastRow = firstRow;\n } else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n } else\n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n } else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$updateWrapData = function(firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row ++;\n } else {\n tokens = [];\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(\n placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(\n lines[row].substring(lastColumn, column),\n tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this),\n foldLine.end.row,\n lines[foldLine.end.row].length + 1\n );\n\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n\n this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n\n var isCode = this.$wrapAsCode;\n\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2) len -= 1;\n }\n\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split --;\n }\n } else {\n while (split > minSplit && tokens[split] < SPACE) {\n split --;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n this.$getDisplayTokens = function(str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n } else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n this.getRowLength = function(row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n \n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n this.getRowLineCount = function(row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.getRowWrapIndent = function(screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n } else {\n return 0;\n }\n };\n this.getScreenLastRowColumn = function(screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n this.getDocumentLastRowColumn = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n this.getRowSplitData = function(row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n this.getScreenTabSize = function(screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n\n\n this.screenToDocumentRow = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n\n this.screenToDocumentColumn = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n this.screenToDocumentPosition = function(screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return {row: 0, column: 0};\n\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n } else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row+1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n } else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if(splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n\n return {row: docRow, column: docColumn};\n };\n this.documentToScreenPosition = function(docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(docRow, docColumn);\n\n docRow = pos.row;\n docColumn = pos.column;\n\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n\n var rowEnd, row = 0;\n\n\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ?foldLine.start.row :Infinity;\n\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ?foldLine.start.row :Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n } else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow ++;\n screenRowOffset++;\n }\n textLine = textLine.substring(\n wrapRow[screenRowOffset - 1] || 0, textLine.length\n );\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n \n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n this.documentToScreenColumn = function(row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n this.documentToScreenRow = function(docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n this.getScreenLength = function() {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n } else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row :Infinity;\n\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row ++;\n if (row > foldStart) {\n row = fold.end.row+1;\n fold = this.$foldData[i++];\n foldStart = fold ?fold.start.row :Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n\n return screenRows;\n };\n this.$setFontMetrics = function(fm) {\n if (!this.$enableVarChar) return;\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n \n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n \n return [screenColumn, column];\n };\n };\n \n this.destroy = function() {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n this.selection.detach();\n };\n\n this.isFullWidth = isFullWidth;\n function isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n }\n\n}).call(EditSession.prototype);\n\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function(value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n } else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function() {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n }, \n wrapMethod: {\n set: function(val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function() {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true \n },\n firstLineNumber: {\n set: function() {this._signal(\"changeBreakpoint\");},\n initialValue: 1\n },\n useWorker: {\n set: function(useWorker) {\n this.$useWorker = useWorker;\n\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {initialValue: true},\n tabSize: {\n set: function(tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: {initialValue: false},\n foldStyle: {\n set: function(val) {this.setFoldStyle(val);},\n handlesSet: true\n },\n overwrite: {\n set: function(val) {this._signal(\"changeOverwrite\");},\n initialValue: false\n },\n newLineMode: {\n set: function(val) {this.doc.setNewLineMode(val);},\n get: function() {return this.doc.getNewLineMode();},\n handlesSet: true\n },\n mode: {\n set: function(val) { this.setMode(val); },\n get: function() { return this.$modeId; },\n handlesSet: true\n }\n});\n\nexports.EditSession = EditSession;\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar Search = function() {\n this.$options = {};\n};\n\n(function() {\n this.set = function(options) {\n oop.mixin(this.$options, options);\n return this;\n };\n this.getOptions = function() {\n return lang.copyObject(this.$options);\n };\n this.setOptions = function(options) {\n this.$options = options;\n };\n this.find = function(session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n\n var firstRange = null;\n iterator.forEach(function(sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(options.start)\n ) {\n firstRange = null;\n return false;\n }\n \n return true;\n });\n\n return firstRange;\n };\n this.findAll = function(session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n \n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n \n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex\n ) {\n continue;\n }\n ranges.push(prevRange = new Range(\n row, startIndex, row + len - 1, endIndex\n ));\n if (len > 2)\n row = row + len - 2;\n }\n } else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n i++;\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n j--;\n \n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n\n return ranges;\n };\n this.replace = function(input, replacement) {\n var options = this.$options;\n\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n\n if (!re)\n return;\n\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n \n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--; ) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n \n return replacement;\n };\n\n this.$assembleRegExp = function(options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n\n var needle = options.needle;\n\n if (!options.needle)\n return options.re = false;\n\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch(e) {\n re = false;\n }\n return options.re = re;\n };\n\n this.$assembleMultilineRegExp = function(needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++) try {\n re.push(new RegExp(parts[i], modifier));\n } catch(e) {\n return false;\n }\n return re;\n };\n\n this.$matchIterator = function(session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n \n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n \n if (backwards) {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n \n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function(row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength()) return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1) return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset) return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function(row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length) break;\n re.lastIndex = last += 1;\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function(row, startIndex, callback) {\n var line = session.getLine(row);\n var last;\n var m;\n re.lastIndex = startIndex;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row,last + length))\n return true;\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length) return false;\n }\n }\n };\n }\n return {forEach: forEach};\n };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n return wordBoundary(needle[0]) + needle\n + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n \n\n this.addCommand = function(command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n\n this.commands[command.name] = command;\n\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n\n this.removeCommand = function(command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n } else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n\n this.bindKey = function(key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({exec: command, bindKey: key, name: command.name || key});\n \n key.split(\"|\").forEach(function(keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function(keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n \n function getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position \n || (command.isDefault ? -100 : 0);\n }\n this._addCommandToBinding = function(keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n \n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n\n this.addCommands = function(commands) {\n commands && Object.keys(commands).forEach(function(name) {\n var command = commands[name];\n if (!command)\n return;\n \n if (typeof command === \"string\")\n return this.bindKey(command, name);\n\n if (typeof command === \"function\")\n command = { exec: command };\n\n if (typeof command !== \"object\")\n return;\n\n if (!command.name)\n command.name = name;\n\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function(commands) {\n Object.keys(commands).forEach(function(name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function(keyList) {\n Object.keys(keyList).forEach(function(key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function(command) {\n this.bindKey(command.bindKey, command);\n };\n this.parseKeys = function(keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x;});\n var key = parts.pop();\n\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return {key: key, hashId: -1};\n else if (parts.length == 1 && parts[0] == \"shift\")\n return {key: key.toUpperCase(), hashId: -1};\n\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return {key: key, hashId: hashId};\n };\n\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n if (keyCode < 0) return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n \n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {command: \"null\"};\n }\n }\n \n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return {command: command};\n };\n \n this.getStatusText = function(editor, data) {\n return data.$keyChain || \"\";\n };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CommandManager = function(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function(e) {\n return e.command.exec(e.editor, e.args || {});\n });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.exec = function(command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--; ) {\n if (this.exec(command[i], editor, args)) return true;\n }\n return false;\n }\n\n if (typeof command === \"string\")\n command = this.commands[command];\n\n if (!command)\n return false;\n\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n\n var e = {editor: editor, command: command, args: args};\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function(editor) {\n if (this.$inReplay)\n return;\n\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n\n if (!this.macro.length)\n this.macro = this.oldMacro;\n\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function(e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function(editor) {\n if (this.$inReplay || !this.macro)\n return;\n\n if (this.recording)\n return this.toggleRecording(editor);\n\n try {\n this.$inReplay = true;\n this.macro.forEach(function(x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n\n this.trimMacro = function(m) {\n return m.map(function(x){\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n\n}).call(CommandManager.prototype);\n\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\n\nfunction bindKey(win, mac) {\n return {win: win, mac: mac};\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/settings_menu\", function(module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n}, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function(editor) {\n config.loadModule(\"./ext/error_marker\", function(module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function(editor) {\n config.loadModule(\"./ext/error_marker\", function(module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function(editor) { editor.selectAll(); },\n readOnly: true\n}, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function(editor) { editor.centerSelection(); },\n readOnly: true\n}, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function(editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n}, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function(editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function(editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function(editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function(editor) { editor.session.foldAllComments(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function(editor) { \n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function(editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function(editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function(editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function(editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext(); \n },\n readOnly: true\n}, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function(editor) { \n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n}, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor);});\n },\n readOnly: true\n}, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function(editor) { editor.toggleOverwrite(); },\n readOnly: true\n}, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function(editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function(editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function(editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function(editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function(editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function(editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function(editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function(editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function(editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function(editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function(editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function(editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function(editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function(editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function(editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function(editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function(editor) { editor.selectPageDown(); },\n readOnly: true\n}, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function(editor) { editor.scrollPageDown(); },\n readOnly: true\n}, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function(editor) { editor.gotoPageDown(); },\n readOnly: true\n}, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function(editor) { editor.selectPageUp(); },\n readOnly: true\n}, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function(editor) { editor.scrollPageUp(); },\n readOnly: true\n}, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function(editor) { editor.gotoPageUp(); },\n readOnly: true\n}, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function(editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n}, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function(editor) { editor.commands.replay(editor); },\n readOnly: true\n}, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function(editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function(editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function(editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n}, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function() {},\n passEvent: true,\n readOnly: true\n}, {\n name: \"copy\",\n description: \"Copy\",\n exec: function(editor) {\n },\n readOnly: true\n},\n{\n name: \"cut\",\n description: \"Cut\",\n exec: function(editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"paste\",\n description: \"Paste\",\n exec: function(editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n}, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function(editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function(editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function(editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function(editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function(editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function(editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function(editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true);});\n }\n}, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function(editor) { editor.undo(); }\n}, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function(editor) { editor.redo(); }\n}, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function(editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function(editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function(editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function(editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function(editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\n \"Shift-Backspace|Backspace\",\n \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n ),\n exec: function(editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function(editor) { \n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n } else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function(editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function(editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function(editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function(editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function(editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function(editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function(editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function(editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function(editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function(editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function(editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function(editor) { editor.transposeLetters(); },\n multiSelectAction: function(editor) {editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function(editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function(editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function(editor) { editor.autoIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"animate\"\n}, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function(editor) {\n var range = editor.selection.getRange();\n\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n } else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n}, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n } else {\n newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\n for(var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n}, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function(editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function(editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0) editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"openCommandPallete\",\n description: \"Open command pallete\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function(editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n}, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n}];\n\nfor (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function(editor) { editor.session.foldToLevel(this.level); },\n scrollIntoView: \"center\",\n readOnly: true\n });\n}\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/clipboard\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\n\nvar clipboard = require(\"./clipboard\");\nvar Editor = function(renderer, session, options) {\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n\n this.keyBinding = new KeyBinding(this);\n\n this.$search = new Search().set({\n wrap: true\n });\n\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n\n this.$initOperationListeners();\n \n this._$emitInputEvent = lang.delayedCall(function() {\n this._signal(\"input\", {});\n if (this.session && this.session.bgTokenizer)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n \n this.on(\"change\", function(_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n};\n\nEditor.$uid = 0;\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function() {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n this.on(\"change\", function() {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.docChanged = true;\n }.bind(this), true);\n \n this.on(\"changeSelection\", function() {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n\n this.curOp = null;\n this.prevOp = {};\n this.startOperation = function(commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n this.previousCommand = null;\n commandEvent = {};\n }\n\n this.$opResetTimer.schedule();\n this.curOp = this.session.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n };\n\n this.endOperation = function(e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false || !this.session)\n return (this.curOp = null);\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n return;\n this._signal(\"beforeEndOperation\");\n if (!this.curOp) return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n var sel = this.selection.toJSON();\n this.curOp.selectionAfter = sel;\n this.$lastSel = this.selection.toJSON();\n this.session.getUndoManager().addSelection(sel);\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n this.$historyTracker = function(e) {\n if (!this.$mergeUndoDeltas)\n return;\n\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (\n this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000\n ) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n this.setKeyboardHandler = function(keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function(module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n this.getKeyboardHandler = function() {\n return this.keyBinding.getKeyboardHandler();\n };\n this.setSession = function(session) {\n if (this.session == session)\n return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n \n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n \n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n \n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n \n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n \n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n \n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n \n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n \n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n \n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n \n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n \n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n \n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n \n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n \n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n \n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n \n this.onChangeMode();\n \n this.onCursorChange();\n \n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n \n this.curOp = null;\n \n oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n session && session._signal(\"changeEditor\", {editor: this});\n \n if (session && session.bgTokenizer)\n session.bgTokenizer.scheduleStart();\n };\n this.getSession = function() {\n return this.session;\n };\n this.setValue = function(val, cursorPos) {\n this.session.doc.setValue(val);\n\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n\n return val;\n };\n this.getValue = function() {\n return this.session.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.resize = function(force) {\n this.renderer.onResize(force);\n };\n this.setTheme = function(theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n this.getTheme = function() {\n return this.renderer.getTheme();\n };\n this.setStyle = function(style) {\n this.renderer.setStyle(style);\n };\n this.unsetStyle = function(style) {\n this.renderer.unsetStyle(style);\n };\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n this.setFontSize = function(size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$highlightBrackets = function() {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function(id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var ranges = session.getMatchingBracketRanges(self.getCursorPosition());\n if (!ranges && session.$mode.getMatching) \n ranges = session.$mode.getMatching(self.session);\n if (!ranges)\n return;\n\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n } else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function(range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n }, 50);\n };\n this.$highlightTags = function() {\n if (this.$highlightTagPending)\n return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function() {\n self.$highlightTagPending = false;\n \n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n \n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n \n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n if (token.type.indexOf(\"tag-open\") !== -1) {\n token = iterator.stepForward();\n if (!token)\n return;\n }\n \n var tag = token.value;\n var currentTag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n \n if (prevToken.value === '<'){\n do {\n prevToken = token;\n token = iterator.stepForward();\n\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '') { // self closing tag\n depth--;\n }\n }\n \n } while (token && depth >= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '') { // self closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n } else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n iterator.stepForward();\n }\n \n if (!token) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn();\n var range = new Range(row, column, row, column+token.value.length);\n var sbm = session.$backMarkers[session.$tagHighlight];\n if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n }\n \n if (!session.$tagHighlight)\n session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n this.focus = function() {\n var _self = this;\n setTimeout(function() {\n if (!_self.isFocused())\n _self.textInput.focus();\n });\n this.textInput.focus();\n };\n this.isFocused = function() {\n return this.textInput.isFocused();\n };\n this.blur = function() {\n this.textInput.blur();\n };\n this.onFocus = function(e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n this.onBlur = function(e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n\n this.$cursorChange = function() {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$highlightTags();\n this.$updateHighlightActiveLine();\n };\n this.onDocumentChange = function(delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n\n this.onTokenizerUpdate = function(e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n\n\n this.onScrollTopChange = function() {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n\n this.onScrollLeftChange = function() {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n this.onCursorChange = function() {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n\n this.$updateHighlightActiveLine = function() {\n var session = this.getSession();\n\n var highlight;\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n } else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n } else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n\n this.onSelectionChange = function(e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function() {\n var session = this.session;\n\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n \n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n \n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n \n return re;\n };\n\n\n this.onChangeFrontMarker = function() {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function() {\n this.renderer.updateBackMarkers();\n };\n\n\n this.onChangeBreakpoint = function() {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function() {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n\n this.onChangeMode = function(e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n\n\n this.onChangeWrapLimit = function() {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function() {\n this.renderer.onResize(true);\n };\n\n\n this.onChangeFold = function() {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n this.getSelectedText = function() {\n return this.session.getTextRange(this.getSelectionRange());\n };\n this.getCopyText = function() {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine= false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = {text: text};\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n this.onCopy = function() {\n this.commands.exec(\"copy\", this);\n };\n this.onCut = function() {\n this.commands.exec(\"cut\", this);\n };\n this.onPaste = function(text, event) {\n var e = {text: text, event: event};\n this.commands.exec(\"paste\", this, e);\n };\n \n this.$handlePaste = function(e) {\n if (typeof e == \"string\") \n e = {text: e};\n this._signal(\"paste\", e);\n var text = e.text;\n\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n } else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function(range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n \n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n \n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n \n session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function(command, args) {\n return this.commands.exec(command, this, args);\n };\n this.insert = function(text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n\n }\n }\n \n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(\n new Range(cursor.row, start + transform.selection[0],\n cursor.row, start + transform.selection[1]));\n } else { // Transform relative to the current row.\n this.selection.setSelectionRange(\n new Range(cursor.row + transform.selection[0],\n transform.selection[1],\n cursor.row + transform.selection[2],\n transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n\n session.insert({row: cursor.row+1, column: 0}, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n\n this.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n\n var startRow, endRow;\n if (this.selection.isEmpty()) {\n startRow = 0;\n endRow = session.doc.getLength() - 1;\n } else {\n var selectedRange = this.getSelectionRange();\n\n startRow = selectedRange.start.row;\n endRow = selectedRange.end.row;\n }\n\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var line, currIndent, range;\n var tab = session.getTabString();\n\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n\n line = session.getLine(row);\n currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({row: row, column: 0}, lineIndent);\n }\n }\n\n mode.autoOutdent(prevLineState, session, row);\n }\n };\n\n\n this.onTextInput = function(text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n \n this.startOperation({command: { name: \"insertstring\" }});\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n \n this.applyComposition = function(text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n\n this.onCommandKey = function(e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n this.setOverwrite = function(overwrite) {\n this.session.setOverwrite(overwrite);\n };\n this.getOverwrite = function() {\n return this.session.getOverwrite();\n };\n this.toggleOverwrite = function() {\n this.session.toggleOverwrite();\n };\n this.setScrollSpeed = function(speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n this.getScrollSpeed = function() {\n return this.getOption(\"scrollSpeed\");\n };\n this.setDragDelay = function(dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n this.getDragDelay = function() {\n return this.getOption(\"dragDelay\");\n };\n this.setSelectionStyle = function(val) {\n this.setOption(\"selectionStyle\", val);\n };\n this.getSelectionStyle = function() {\n return this.getOption(\"selectionStyle\");\n };\n this.setHighlightActiveLine = function(shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n this.getHighlightActiveLine = function() {\n return this.getOption(\"highlightActiveLine\");\n };\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n this.setHighlightSelectedWord = function(shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n this.getHighlightSelectedWord = function() {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function(shouldAnimate){\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function(){\n return this.renderer.getAnimatedScroll();\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function() {\n return this.renderer.getDisplayIndentGuides();\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.renderer.getShowPrintMargin();\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.renderer.getPrintMarginColumn();\n };\n this.setReadOnly = function(readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n this.getReadOnly = function() {\n return this.getOption(\"readOnly\");\n };\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n this.setShowFoldWidgets = function(show) {\n this.setOption(\"showFoldWidgets\", show);\n\n };\n this.getShowFoldWidgets = function() {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function() {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.remove = function(dir) {\n if (this.selection.isEmpty()){\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.removeWordRight = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeWordLeft = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineStart = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineEnd = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.splitLine = function() {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n this.transposeLetters = function() {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column-1);\n range = new Range(cursor.row, column-1, cursor.row, column+1);\n }\n else {\n swap = line.charAt(column-1) + line.charAt(column-2);\n range = new Range(cursor.row, column-2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n this.toLowerCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.toUpperCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.indent = function() {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n } else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n \n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n } else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n this.blockIndent = function() {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n this.blockOutdent = function() {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n this.sortLines = function() {\n var rows = this.$getSelectedRows();\n var session = this.session;\n\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n\n lines.sort(function(a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\n\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i-rows.first]);\n }\n };\n this.toggleCommentLines = function() {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n\n this.toggleBlockComment = function() {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n this.getNumberAt = function(row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if(m.index <= column && m.index+m[0].length >= column){\n var number = {\n value: m[0],\n start: m.index,\n end: m.index+m[0].length\n };\n return number;\n }\n }\n return null;\n };\n this.modifyNumber = function(amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column-1, row, column);\n\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n\n if(fp !== nr.end && column < fp){\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\n\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\n\n }\n } else {\n this.toggleWord();\n }\n };\n\n this.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n ];\n\n this.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0) delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n } else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n this.removeLines = function() {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.duplicateSelection = function() {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n } else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n\n sel.setSelectionRange(range, reverse);\n }\n };\n this.moveLinesDown = function() {\n this.$moveLines(1, false);\n };\n this.moveLinesUp = function() {\n this.$moveLines(-1, false);\n };\n this.moveText = function(range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n this.copyLinesUp = function() {\n this.$moveLines(-1, true);\n };\n this.copyLinesDown = function() {\n this.$moveLines(1, true);\n };\n this.$moveLines = function(dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n \n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1) rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n \n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n this.$getSelectedRows = function(range) {\n range = (range || this.getSelectionRange()).collapseRows();\n\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function(compositionState) {\n this.renderer.showComposition(compositionState);\n };\n\n this.onCompositionUpdate = function(text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function() {\n this.renderer.hideComposition();\n };\n this.getFirstVisibleRow = function() {\n return this.renderer.getFirstVisibleRow();\n };\n this.getLastVisibleRow = function() {\n return this.renderer.getLastVisibleRow();\n };\n this.isRowVisible = function(row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n this.isRowFullyVisible = function(row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n this.$getVisibleRowCount = function() {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$moveByPage = function(dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n\n if (select === true) {\n this.selection.$moveSelection(function(){\n this.moveCursorBy(rows, 0);\n });\n } else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n\n var scrollTop = renderer.scrollTop;\n\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n\n renderer.animateScrolling(scrollTop);\n };\n this.selectPageDown = function() {\n this.$moveByPage(1, true);\n };\n this.selectPageUp = function() {\n this.$moveByPage(-1, true);\n };\n this.gotoPageDown = function() {\n this.$moveByPage(1, false);\n };\n this.gotoPageUp = function() {\n this.$moveByPage(-1, false);\n };\n this.scrollPageDown = function() {\n this.$moveByPage(1);\n };\n this.scrollPageUp = function() {\n this.$moveByPage(-1);\n };\n this.scrollToRow = function(row) {\n this.renderer.scrollToRow(row);\n };\n this.scrollToLine = function(line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n this.centerSelection = function() {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n this.getCursorPosition = function() {\n return this.selection.getCursor();\n };\n this.getCursorPositionScreen = function() {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n this.getSelectionRange = function() {\n return this.selection.getRange();\n };\n this.selectAll = function() {\n this.selection.selectAll();\n };\n this.clearSelection = function() {\n this.selection.clearSelection();\n };\n this.moveCursorTo = function(row, column) {\n this.selection.moveCursorTo(row, column);\n };\n this.moveCursorToPosition = function(pos) {\n this.selection.moveCursorToPosition(pos);\n };\n this.jumpToMatching = function(select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var token = prevToken || iterator.stepForward();\n\n if (!token) return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n \n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n \n if (prevToken.value === '<') {\n depth[token.value]++;\n }\n else if (prevToken.value === '= 0; --i) {\n if(this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n\n return replaced;\n };\n\n this.$tryReplace = function(range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n } else {\n return null;\n }\n };\n this.getLastSearchOptions = function() {\n return this.$search.getOptions();\n };\n this.find = function(needle, options, animate) {\n if (!options)\n options = {};\n\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({needle: needle});\n }\n\n this.$search.set(options);\n if (!options.start)\n this.$search.set({start: range});\n\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n this.findNext = function(options, animate) {\n this.find({skipCurrent: true, backwards: false}, options, animate);\n };\n this.findPrevious = function(options, animate) {\n this.find(options, {skipCurrent: true, backwards: true}, animate);\n };\n\n this.revealRange = function(range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n this.undo = function() {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.redo = function() {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.destroy = function() {\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function(el) {\n el.destroy();\n });\n this.$toDestroy = null;\n }\n if (this.$mouseHandler)\n this.$mouseHandler.destroy();\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n this.setAutoScrollEditorIntoView = function(enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function() {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function() {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())\n ) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n } else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n } else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function(enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n\n\n this.$resetCursorStyle = function() {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n this.prompt = function(message, options, callback) {\n var editor = this;\n config.loadModule(\"./ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n\n}).call(Editor.prototype);\n\n\n\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function(style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", {data: style});\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function() {this.$updateHighlightActiveLine();},\n initialValue: true\n },\n highlightSelectedWord: {\n set: function(shouldHighlight) {this.$onSelectionChange();},\n initialValue: true\n },\n readOnly: {\n set: function(readOnly) {\n this.textInput.setReadOnly(readOnly);\n this.$resetCursorStyle(); \n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function(value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function(val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {initialValue: true},\n wrapBehavioursEnabled: {initialValue: true},\n enableAutoIndent: {initialValue: true},\n autoScrollEditorIntoView: {\n set: function(val) {this.setAutoScrollEditorIntoView(val);}\n },\n keyboardHandler: {\n set: function(val) { this.setKeyboardHandler(val); },\n get: function() { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function(val) { this.session.setValue(val); },\n get: function() { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function(val) { this.setSession(val); },\n get: function() { return this.session; },\n handlesSet: true,\n hidden: true\n },\n \n showLineNumbers: {\n set: function(show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function(value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function(message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function() {\n var value = this.session && (this.renderer.$composition || this.getValue());\n if (value && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n } else if (!value && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n } else if (!value && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\n\n\nvar relativeNumberRenderer = {\n getText: function(session, row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function(session, lastLineNumber, config) {\n return Math.max(\n lastLineNumber.toString().length,\n (config.lastRow + 1).toString().length,\n 2\n ) * config.characterWidth;\n },\n update: function(e, editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function(editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function(editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\n\nexports.Editor = Editor;\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar UndoManager = function() {\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.reset();\n};\n\n(function() {\n \n this.addSession = function(session) {\n this.$session = session;\n };\n this.add = function(delta, allowMerge, session) {\n if (this.$fromUndo) return;\n if (delta == this.$lastDelta) return;\n if (!this.$keepRedoStack) this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n \n this.addSelection = function(selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n \n this.startNewGroup = function() {\n this.lastDeltas = null;\n return this.$rev;\n };\n \n this.markIgnored = function(from, to) {\n if (to == null) to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n \n this.getSelection = function(rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n \n this.getRevision = function() {\n return this.$rev;\n };\n \n this.getDeltas = function(from, to) {\n if (to == null) to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i+1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n \n this.getChangedRanges = function(from, to) {\n if (to == null) to = this.$rev + 1;\n \n };\n \n this.getChangedLines = function(from, to) {\n if (to == null) to = this.$rev + 1;\n \n };\n this.undo = function(session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n \n if (!rearrangeUndoStack(stack, stack.length))\n return;\n \n if (!session)\n session = this.$session;\n \n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n \n this.$fromUndo = true;\n \n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n \n this.$fromUndo = false;\n\n return undoSelectionRange;\n };\n this.redo = function(session, dontSelect) {\n this.lastDeltas = null;\n \n if (!session)\n session = this.$session;\n \n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function(x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n \n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n \n return redoSelectionRange;\n };\n \n this.$syncRev = function() {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n this.reset = function() {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n this.canUndo = function() {\n return this.$undoStack.length > 0;\n };\n this.canRedo = function() {\n return this.$redoStack.length > 0;\n };\n this.bookmark = function(rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n this.isAtBookmark = function() {\n return this.$rev === this.mark;\n };\n \n this.toJSON = function() {\n \n };\n \n this.fromJSON = function() {\n \n };\n \n this.hasUndo = this.canUndo;\n this.hasRedo = this.canRedo;\n this.isClean = this.isAtBookmark;\n this.markClean = this.bookmark;\n \n this.$prettyPrint = function(delta) {\n if (delta) return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n}).call(UndoManager.prototype);\n\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--; ) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while(i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\n\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\n\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert) end = start;\n\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\n\n\n\nfunction clonePos(pos) {\n return {row: pos.row,column: pos.column};\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n } else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n } else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column \n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\n\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n \n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n } else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n } else {\n return null;\n }\n } else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n } else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n } else {\n return null;\n }\n } else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n } else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n } else {\n return null;\n }\n } else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n } else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n } else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--; ) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n } \n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore = \n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n \n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n } else {\n shift(d1, c1, 1);\n }\n } else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n } else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n } else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n } else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n } else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n } else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n } else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n } else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n } else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\n \nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos); \n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n \n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col) ; \n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\n\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n } else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1); \n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\n\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\n\nvar Lines = function(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n \n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n};\n\n(function() {\n \n this.moveContainer = function(config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n }; \n \n this.pageChanged = function(oldConfig, newConfig) {\n return (\n Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight)\n );\n };\n \n this.computeLineTop = function(row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n \n this.computeLineHeight = function(row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n \n this.getLength = function() {\n return this.cells.length;\n };\n \n this.get = function(index) {\n return this.cells[index];\n };\n \n this.shift = function() {\n this.$cacheCell(this.cells.shift());\n };\n \n this.pop = function() {\n this.$cacheCell(this.cells.pop());\n };\n \n this.push = function(cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i=0; i foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1)\n this.$lines.pop();\n \n break;\n }\n\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n } else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n \n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n\n this.$updateGutterWidth = function(config) {\n var session = this.session;\n \n var gutterRenderer = session.gutterRenderer || this.$renderer;\n \n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n \n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n\n var gutterWidth = gutterRenderer \n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n \n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.parentNode.style.width = \n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n \n this.$updateCursorRow = function() {\n if (!this.$highlightGutterLine)\n return;\n \n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n \n this.$cursorRow = position.row;\n };\n \n this.updateLineHighlight = function() {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n \n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n \n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n \n this.$lines.moveContainer(config);\n\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n \n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n\n if (oldConfig.firstRow < config.firstRow)\n for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n this.$lines.shift();\n\n if (oldLastRow > lastRow)\n for (var row=this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row>0; row--)\n this.$lines.pop();\n\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n \n this.updateLineHighlight();\n \n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n\n this.$renderLines = function(config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n\n row++;\n }\n return fragment;\n };\n \n this.$renderCell = function(cell, config, fold, row) {\n var element = cell.element;\n \n var session = this.session;\n \n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n\n var firstLineNumber = session.$firstLineNumber;\n \n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n \n var className = \"ace_gutter-cell \";\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n \n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row])\n className += this.$annotations[row].className;\n if (element.className != className)\n element.className = className;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row)\n className += \" ace_closed\";\n else\n className += \" ace_open\";\n if (foldWidget.className != className)\n foldWidget.className = className;\n\n var foldHeight = config.lineHeight + \"px\";\n dom.setStyle(foldWidget.style, \"height\", foldHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n } else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n \n var text = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n \n if (text !== textNode.data) {\n textNode.data = text;\n }\n \n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n \n cell.text = text;\n return cell;\n };\n\n this.$fixedWidth = false;\n \n this.$highlightGutterLine = true;\n this.$renderer = \"\";\n this.setHighlightGutterLine = function(highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n \n this.$showLineNumbers = true;\n this.$renderer = \"\";\n this.setShowLineNumbers = function(show) {\n this.$renderer = !show && {\n getWidth: function() {return 0;},\n getText: function() {return \"\";}\n };\n };\n \n this.getShowLineNumbers = function() {\n return this.$showLineNumbers;\n };\n \n this.$showFoldWidgets = true;\n this.setShowFoldWidgets = function(show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n \n this.getShowFoldWidgets = function() {\n return this.$showFoldWidgets;\n };\n\n this.$computePadding = function() {\n if (!this.element.firstChild)\n return {left: 0, right: 0};\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n\n this.getRegion = function(point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n\n}).call(Gutter.prototype);\n\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n \n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n \n return element;\n}\n\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n};\n\n(function() {\n\n this.$padding = 0;\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n this.setSession = function(session) {\n this.session = session;\n };\n \n this.setMarkers = function(markers) {\n this.markers = markers;\n };\n \n this.elt = function(className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n } else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n\n this.update = function(config) {\n if (!config) return;\n\n this.config = config;\n\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n } else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i !=-1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n\n this.$getTop = function(row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0; \n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, \n clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),\n layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n } else {\n this.elt(\n clazz + \" ace_br1 ace_start\",\n \"height:\"+ height+ \"px;\"+ \"right:0;\"+ \"top:\"+top+ \"px;left:\"+ left+ \"px;\" + (extraStyle || \"\")\n );\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n } else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n\n this.elt(\n clazz + \" ace_br12\",\n \"height:\"+ height+ \"px;\"+\n \"width:\"+ width+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:\"+ padding+ \"px;\"+ (extraStyle || \"\")\n );\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n \n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n this.elt(\n clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"),\n \"height:\"+ height+ \"px;\"+\n \"right:0;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:\"+ padding+ \"px;\"+ (extraStyle || \"\")\n );\n };\n this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n\n this.elt(\n clazz,\n \"height:\"+ height+ \"px;\"+\n \"width:\"+ width+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:\"+ left+ \"px;\"+ (extraStyle || \"\")\n );\n };\n this.drawBidiSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n\n selections.forEach(function(selection) {\n this.elt(\n clazz,\n \"height:\" + height + \"px;\" +\n \"width:\" + selection.width + (extraLength || 0) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\")\n );\n }, this);\n };\n\n this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n\n this.elt(\n clazz,\n \"height:\"+ height+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:0;right:0;\"+ (extraStyle || \"\")\n );\n };\n \n this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n\n this.elt(\n clazz,\n \"height:\"+ height+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:0;right:0;\"+ (extraStyle || \"\")\n );\n };\n\n}).call(Marker.prototype);\n\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar Text = function(parentEl) {\n this.dom = dom; \n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n this.MAX_LINE_LENGTH = 10000;\n\n this.$updateEolChar = function() {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n\n this.getLineHeight = function() {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n\n this.getCharacterWidth = function() {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n \n this.$setFontMetrics = function(measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n\n this.checkForSizeChanges = function() {\n this.$fontMetrics.checkForSizeChanges();\n };\n this.$pollSizeChanges = function() {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n this.setSession = function(session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n\n this.showInvisibles = false;\n this.showSpaces = false;\n this.showTabs = false;\n this.showEOL = false;\n this.setShowInvisibles = function(showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n } else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n\n this.displayIndentGuides = true;\n this.setDisplayIndentGuides = function(display) {\n if (this.displayIndentGuides == display)\n return false;\n\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n\n this.$tabStrings = [];\n this.onChangeTabSize =\n this.$computeTabString = function() {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n } else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs \n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n \n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n\n this.updateLines = function(config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n \n this.config = config;\n\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n } else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx ++;\n }\n\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > last)\n break;\n\n var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(\n lineElement, row, row == foldStart ? foldLine : false\n );\n\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n\n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n \n this.$lines.moveContainer(config);\n \n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n\n if (oldConfig.firstRow < config.firstRow)\n for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n this.$lines.shift();\n\n if (oldConfig.lastRow > config.lastRow)\n for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\n this.$lines.pop();\n\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n };\n\n this.$renderLinesFragment = function(config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n\n var line = this.$lines.createCell(row, config, this.session);\n \n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n } else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n\n row++;\n }\n return fragment;\n };\n\n this.update = function(config) {\n this.$lines.moveContainer(config);\n \n this.config = config;\n\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n \n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n\n this.$renderToken = function(parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n \n var valueFragment = this.dom.createFragment(this.element);\n\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n \n if (!self.showSpaces && simpleSpace)\n continue;\n\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n\n i = m.index + m[0].length;\n \n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n \n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n screenColumn += tabSize - 1;\n } else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n } else {\n valueFragment.appendChild(this.com.createTextNode(simpleSpace, this.element));\n }\n } else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n } else if (cjkSpace) {\n screenColumn += 1;\n \n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n } else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n \n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n\n if (!this.$textToken[token.type]) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\")\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n \n span.className = classes;\n span.appendChild(valueFragment);\n \n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n \n return screenColumn + value.length;\n };\n\n this.renderIndentGuide = function(parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols/this.tabSize;\n for (var i=0; i= splitChars) {\n screenColumn = this.$renderToken(\n lineEl, screenColumn,\n token, value.substring(0, splitChars - chars)\n );\n value = value.substring(splitChars - chars);\n chars = splitChars;\n\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n\n lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n\n split ++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(\n lineEl, screenColumn, token, value\n );\n }\n }\n }\n \n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n\n this.$renderSimpleLine = function(parent, tokens) {\n var screenColumn = 0;\n var token = tokens[0];\n var value = token.value;\n if (this.displayIndentGuides)\n value = this.renderIndentGuide(parent, value);\n if (value)\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n for (var i = 1; i < tokens.length; i++) {\n token = tokens[i];\n value = token.value;\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n \n this.$renderOverflowMessage = function(parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token,\n value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n \n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"\" : \"\";\n \n parent.appendChild(overflowEl); \n };\n this.$renderLine = function(parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n } else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n } else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n \n lastLineEl.appendChild(invisibleEl);\n }\n };\n\n this.$getFoldLineTokens = function(row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n\n col = from + value.length;\n idx += 1;\n }\n\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n } else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n\n var tokens = session.getTokens(row);\n foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n } else {\n if (isNewRow)\n tokens = session.getTokens(row);\n\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n return renderTokens;\n };\n\n this.$useLineGroups = function() {\n return this.session.getUseWrapMode();\n };\n\n this.destroy = function() {};\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\n\nvar Cursor = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n \n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n};\n\n(function() {\n \n this.$updateOpacity = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n\n this.$startCssAnimation = function() {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n\n this.$isAnimating = true;\n setTimeout(function() {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n \n this.$stopCssAnimation = function() {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n\n this.$padding = 0;\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n\n this.setSession = function(session) {\n this.session = session;\n };\n\n this.setBlinking = function(blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n\n this.setBlinkInterval = function(blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n\n this.setSmoothBlinking = function(smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n\n this.addCursor = function() {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n\n this.removeCursor = function() {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n\n this.hideCursor = function() {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.showCursor = function() {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.restartTimer = function() {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n \n update(true);\n\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function() {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n \n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n } else {\n var blink = function(){\n this.timeoutId = setTimeout(function() {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n \n this.intervalId = setInterval(function() {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n\n this.getPixelPosition = function(position, onScreen) {\n if (!this.config || !this.session)\n return {left : 0, top : 0};\n\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n\n return {left : cursorLeft, top : cursorTop};\n };\n\n this.isCursorInView = function(pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n\n this.update = function(config) {\n this.config = config;\n\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n\n if (selections === undefined || selections.length === 0){\n selections = [{cursor: null}];\n }\n\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n \n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n } else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n } else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n \n this.drawCursor = null;\n\n this.$setOverwrite = function(overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n\n this.destroy = function() {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n\n}).call(Cursor.prototype);\n\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function(parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n\n parent.appendChild(this.element);\n\n this.setVisible(false);\n this.skipEvent = false;\n\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n\n this.setVisible = function(isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n renderer.$scrollbarWidth = \n this.width = dom.scrollbarWidth(parent.ownerDocument);\n this.inner.style.width =\n this.element.style.width = (this.width || 15) + 5 + \"px\";\n this.$minWidth = 0;\n};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-v';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", {data: this.scrollTop});\n }\n this.skipEvent = false;\n };\n this.getWidth = function() {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n this.setHeight = function(height) {\n this.element.style.height = height + \"px\";\n };\n this.setInnerHeight = \n this.setScrollHeight = function(height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n } else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n this.setScrollTop = function(scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n\n}).call(VScrollBar.prototype);\nvar HScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.height = renderer.$scrollbarWidth;\n this.inner.style.height =\n this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-h';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", {data: this.scrollLeft});\n }\n this.skipEvent = false;\n };\n this.getHeight = function() {\n return this.isVisible ? this.height : 0;\n };\n this.setWidth = function(width) {\n this.element.style.width = width + \"px\";\n };\n this.setInnerWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollLeft = function(scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"./lib/event\");\n\n\nvar RenderLoop = function(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function(ts) {\n _self.pending = false;\n var changes = _self.changes;\n\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n \n if (_self.changes) {\n if (_self.$recursionLimit-- < 0) return;\n _self.schedule();\n } else {\n _self.$recursionLimit = 2;\n }\n };\n};\n\n(function() {\n\n this.schedule = function(change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n\n this.clear = function(change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CHAR_COUNT = 256;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n \n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n \n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n \n \n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n \n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n \n this.$characterSize = {width: 0, height: 0};\n \n \n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n \n this.$characterSize = {width: 0, height: 0};\n \n this.$setMeasureNodeStyles = function(style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n } else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n\n this.checkForSizeChanges = function(size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", {data: size});\n }\n };\n \n this.$addObserver = function() {\n var self = this;\n this.$observer = new window.ResizeObserver(function(e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n\n this.$pollSizeChanges = function() {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n \n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n \n this.setPolling = function(val) {\n if (val) {\n this.$pollSizeChanges();\n } else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n\n this.$measureSizes = function(node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n\n this.$measureCharWidth = function(ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n \n this.getCharacterWidth = function(ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n\n \n this.$getZoom = function getZoom(element) {\n if (!element || !element.parentElement) return 1;\n return (window.getComputedStyle(element).zoom || 1) * getZoom(element.parentElement);\n };\n this.$initTransformMeasureNodes = function() {\n var t = function(t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n this.transformCoordinates = function(clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n\n if (!this.els)\n this.$initTransformMeasureNodes();\n \n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n \n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n \n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = \"\\\n.ace_br1 {border-top-left-radius : 3px;}\\\n.ace_br2 {border-top-right-radius : 3px;}\\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\n.ace_br4 {border-bottom-right-radius: 3px;}\\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\n.ace_br8 {border-bottom-left-radius : 3px;}\\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\npadding: 0;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\ncontain: style size layout;\\\nfont-variant-ligatures: no-common-ligatures;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncontain: style size layout;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\ncontain: strict;\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ncontain: strict;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: transparent;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\n}\\\n.ace_composition_placeholder { color: transparent }\\\n.ace_composition_marker { \\\nborder-bottom: 1px solid;\\\nposition: absolute;\\\nborder-radius: 0;\\\nmargin-top: 1px;\\\n}\\\n[ace_nocontext=true] {\\\ntransform: none!important;\\\nfilter: none!important;\\\nclip-path: none!important;\\\nmask : none!important;\\\ncontain: none!important;\\\nperspective: none!important;\\\nmix-blend-mode: initial!important;\\\nz-index: auto;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\nheight: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\nposition: absolute;\\\nheight: 1000000px;\\\nwidth: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\\ncontain: style size layout;\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_hidpi .ace_text-layer,\\\n.ace_hidpi .ace_gutter-layer,\\\n.ace_hidpi .ace_content,\\\n.ace_hidpi .ace_gutter {\\\ncontain: strict;\\\nwill-change: transform;\\\n}\\\n.ace_hidpi .ace_text-layer > .ace_line, \\\n.ace_hidpi .ace_text-layer > .ace_line_group {\\\ncontain: strict;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\\nopacity: 0;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_animate-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: step-end;\\\nanimation-name: blink-ace-animate;\\\nanimation-iteration-count: infinite;\\\n}\\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: ease-in-out;\\\nanimation-name: blink-ace-animate-smooth;\\\n}\\\n@keyframes blink-ace-animate {\\\nfrom, to { opacity: 1; }\\\n60% { opacity: 0; }\\\n}\\\n@keyframes blink-ace-animate-smooth {\\\nfrom, to { opacity: 1; }\\\n45% { opacity: 1; }\\\n60% { opacity: 0; }\\\n85% { opacity: 0; }\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_error_bracket {\\\nposition: absolute;\\\nborder-bottom: 1px solid #DE5555;\\\nborder-radius: 0;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block; \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_inline_button {\\\nborder: 1px solid lightgray;\\\ndisplay: inline-block;\\\nmargin: -1px 8px;\\\npadding: 0 5px;\\\npointer-events: auto;\\\ncursor: pointer;\\\n}\\\n.ace_inline_button:hover {\\\nborder-color: gray;\\\nbackground: rgba(200,200,200,0.2);\\\ndisplay: inline-block;\\\npointer-events: auto;\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n.ace_mobile-menu {\\\nposition: absolute;\\\nline-height: 1.5;\\\nborder-radius: 4px;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\nbackground: white;\\\nbox-shadow: 1px 3px 2px grey;\\\nborder: 1px solid #dcdcdc;\\\ncolor: black;\\\n}\\\n.ace_dark > .ace_mobile-menu {\\\nbackground: #333;\\\ncolor: #ccc;\\\nbox-shadow: 1px 3px 2px grey;\\\nborder: 1px solid #444;\\\n}\\\n.ace_mobile-button {\\\npadding: 2px;\\\ncursor: pointer;\\\noverflow: hidden;\\\n}\\\n.ace_mobile-button:hover {\\\nbackground-color: #eee;\\\nopacity:1;\\\n}\\\n.ace_mobile-button:active {\\\nbackground-color: #ddd;\\\n}\\\n.ace_placeholder {\\\nfont-family: arial;\\\ntransform: scale(0.9);\\\ntransform-origin: left;\\\nwhite-space: pre;\\\nopacity: 0.7;\\\nmargin: 0 10px;\\\n}\";\n\nvar useragent = require(\"./lib/useragent\");\nvar HIDE_TEXTAREA = useragent.isIE;\n\ndom.importCssString(editorCss, \"ace_editor.css\", false);\n\nvar VirtualRenderer = function(container, theme) {\n var _self = this;\n\n this.container = container || dom.createElement(\"div\");\n\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI) dom.addCssClass(this.container, \"ace_hidpi\");\n\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null) \n config.set(\"useStrictCSP\", false);\n\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", true);\n\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n \n this.container.appendChild(this.scroller);\n\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n this.$markerBack = new MarkerLayer(this.content);\n\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n\n this.$markerFront = new MarkerLayer(this.content);\n\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n\n this.scrollBar = \n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n\n this.scrollTop = 0;\n this.scrollLeft = 0;\n\n this.cursorPos = {\n row : 0,\n column : 0\n };\n\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function(e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n\n this.layerConfig = {\n width : 1,\n padding : 0,\n firstRow : 0,\n firstRowScreen: 0,\n lastRow : 0,\n lineHeight : 0,\n characterWidth : 0,\n minHeight : 1,\n maxHeight : 1,\n offset : 0,\n height : 1,\n gutterOffset: 1\n };\n \n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n \n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n \n this.$keepTextAreaAtCursor = !useragent.isIOS;\n\n this.$loop = new RenderLoop(\n this.$renderChanges.bind(this),\n this.container.ownerDocument.defaultView\n );\n this.$loop.schedule(this.CHANGE_FULL);\n\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n};\n\n(function() {\n\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n\n oop.implement(this, EventEmitter);\n\n this.updateCharacterSize = function() {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n this.setSession = function(session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n \n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n \n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n \n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n this.updateLines = function(firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n\n this.onChangeNewLineMode = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n \n this.onChangeTabSize = function() {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n this.updateText = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n this.updateFull = function(force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n this.updateFontSize = function() {\n this.$textLayer.checkForSizeChanges();\n };\n\n this.$changes = 0;\n this.$updateSizeAsync = function() {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n this.onResize = function(force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n\n \n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n\n if (force)\n this.$gutterLayer.$padding = null;\n\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n };\n \n this.$updateCachedSize = function(force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n changes = changes | this.CHANGE_SCROLL;\n }\n\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n \n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n \n this.gutterWidth = gutterWidth;\n \n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n \n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n \n size.$dirty = !width || !height;\n\n if (changes)\n this._signal(\"resize\", oldSize);\n\n return changes;\n };\n\n this.onGutterResize = function(width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else {\n this.$computeLayerConfig();\n }\n };\n this.adjustWrapLimit = function() {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n this.setAnimatedScroll = function(shouldAnimate){\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n this.getAnimatedScroll = function() {\n return this.$animatedScroll;\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.getOption(\"showInvisibles\");\n };\n this.getDisplayIndentGuides = function() {\n return this.getOption(\"displayIndentGuides\");\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.getOption(\"showPrintMargin\");\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.getOption(\"printMarginColumn\");\n };\n this.getShowGutter = function(){\n return this.getOption(\"showGutter\");\n };\n this.setShowGutter = function(show){\n return this.setOption(\"showGutter\", show);\n };\n\n this.getFadeFoldWidgets = function(){\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.$updatePrintMargin = function() {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n \n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n this.getContainerElement = function() {\n return this.container;\n };\n this.getMouseEventTarget = function() {\n return this.scroller;\n };\n this.getTextAreaContainer = function() {\n return this.container;\n };\n this.$moveTextAreaToCursor = function() {\n if (this.$isMousePressed) return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n \n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n\n var h = composition && composition.useTextareaForIME ? this.lineHeight : HIDE_TEXTAREA ? 0 : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n \n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n\n posLeft += this.gutterWidth + this.margin.left;\n\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n this.getFirstVisibleRow = function() {\n return this.layerConfig.firstRow;\n };\n this.getFirstFullyVisibleRow = function() {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n this.getLastFullyVisibleRow = function() {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n this.getLastVisibleRow = function() {\n return this.layerConfig.lastRow;\n };\n\n this.$padding = null;\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n \n this.setScrollMargin = function(top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top|0;\n sm.bottom = bottom|0;\n sm.right = right|0;\n sm.left = left|0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n \n this.setMargin = function(top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top|0;\n sm.bottom = bottom|0;\n sm.right = right|0;\n sm.left = left|0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n this.getHScrollBarAlwaysVisible = function() {\n return this.$hScrollBarAlwaysVisible;\n };\n this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.getVScrollBarAlwaysVisible = function() {\n return this.$vScrollBarAlwaysVisible;\n };\n this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.$updateScrollBarV = function() {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n this.$updateScrollBarH = function() {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n \n this.$frozen = false;\n this.freeze = function() {\n this.$frozen = true;\n };\n \n this.unfreeze = function() {\n this.$frozen = false;\n };\n\n this.$renderChanges = function(changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return; \n } \n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n \n this._signal(\"beforeRender\", changes);\n \n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL\n ) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n \n dom.translate(this.content, -this.scrollLeft, -config.offset);\n \n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n \n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n }\n\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n\n this._signal(\"afterRender\", changes);\n };\n\n \n this.$autosize = function() {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, \n Math.max((this.$minLines || 1) * this.lineHeight, height)\n ) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n \n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n \n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n \n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n \n this._signal(\"autosize\");\n }\n };\n \n this.$computeLayerConfig = function() {\n var session = this.session;\n var size = this.$size;\n \n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n\n var longestLine = this.$getLongestLine();\n \n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n\n var minHeight = size.scrollerHeight + this.lineHeight;\n \n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n \n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top,\n Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n \n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n\n offset = this.scrollTop - firstRowScreen * lineHeight;\n\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged) \n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n \n this.layerConfig = {\n width : longestLine,\n padding : this.$padding,\n firstRow : firstRow,\n firstRowScreen: firstRowScreen,\n lastRow : lastRow,\n lineHeight : lineHeight,\n characterWidth : this.characterWidth,\n minHeight : minHeight,\n maxHeight : maxHeight,\n offset : offset,\n gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height : this.$size.scrollerHeight\n };\n\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n\n return changes;\n };\n\n this.$updateLines = function() {\n if (!this.$changedLines) return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n\n var layerConfig = this.layerConfig;\n\n if (firstRow > layerConfig.lastRow + 1) { return; }\n if (lastRow < layerConfig.firstRow) { return; }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n\n this.$getLongestLine = function() {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n \n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n this.updateFrontMarkers = function() {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n this.updateBackMarkers = function() {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n this.addGutterDecoration = function(row, className){\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function(row, className){\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n this.updateBreakpoints = function(rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.setAnnotations = function(annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.updateCursor = function() {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n this.hideCursor = function() {\n this.$cursorLayer.hideCursor();\n };\n this.showCursor = function() {\n this.$cursorLayer.showCursor();\n };\n\n this.scrollSelectionIntoView = function(anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n var left = pos.left;\n var top = pos.top;\n \n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n \n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n \n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight)\n top -= offset * this.$size.scrollerHeight;\n if (top === 0)\n top = -this.scrollMargin.top;\n this.session.setScrollTop(top);\n } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\n top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n\n var scrollLeft = this.scrollLeft;\n\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n };\n this.getScrollTop = function() {\n return this.session.getScrollTop();\n };\n this.getScrollLeft = function() {\n return this.session.getScrollLeft();\n };\n this.getScrollTopRow = function() {\n return this.scrollTop / this.lineHeight;\n };\n this.getScrollBottomRow = function() {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n this.scrollToRow = function(row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n\n this.alignCursor = function(cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = {row: cursor, column: 0};\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n\n this.session.setScrollTop(offset);\n return offset;\n };\n\n this.STEPS = 8;\n this.$calcSteps = function(fromValue, toValue){\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n\n var func = function(t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n return steps;\n };\n this.scrollToLine = function(line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n\n this.animateScrolling = function(fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n \n if (fromValue == toValue)\n return;\n \n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n \n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n clearInterval(this.$timer);\n\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function() {\n if (!_self.session) \n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n } else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n } else {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n callback && callback();\n }\n }, 10);\n };\n this.scrollToY = function(scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n this.scrollToX = function(scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n this.scrollTo = function(x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n this.scrollBy = function(deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n this.isScrollableBy = function(deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n\n this.pixelToScreenCoordinates = function(x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = {top:0, left: 0};\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n } else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n \n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n\n return {row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX};\n };\n\n this.screenToTextCoordinates = function(x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = {top:0, left: 0};\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n } else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n this.textToScreenCoordinates = function(row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n \n var y = pos.row * this.lineHeight;\n\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n this.visualizeFocus = function() {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n this.visualizeBlur = function() {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n this.showComposition = function(composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n \n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n this.setCompositionText = function(text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n this.hideComposition = function() {\n if (!this.$composition)\n return;\n \n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n \n this.addToken = function(text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = {type: type, value: text};\n var tokens = session.getTokens(row);\n if (column == null) {\n tokens.push(newToken);\n } else {\n var l = 0;\n for (var i =0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n \n tokens.splice(i, 1, {type: token.type, value: before}, newToken, {type: token.type, value: after});\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n\n this.removeExtraToken = function(row, column) {\n this.updateLines(row, row);\n };\n this.setTheme = function(theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange',{theme:theme});\n\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n } else {\n afterLoad(theme);\n }\n\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(\n module.cssText,\n module.cssClass,\n _self.container\n );\n\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n\n var padding = \"padding\" in module ? module.padding \n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n\n _self._dispatchEvent('themeLoaded', {theme:module});\n cb && cb();\n }\n };\n this.getTheme = function() {\n return this.$themeId;\n };\n this.setStyle = function(style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n this.unsetStyle = function(style) {\n dom.removeCssClass(this.container, style);\n };\n \n this.setCursorStyle = function(style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n this.setMouseCursor = function(cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n \n this.attachToShadowRoot = function() {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n this.destroy = function() {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n };\n\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n animatedScroll: {initialValue: false},\n showInvisibles: {\n set: function(value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function(val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function() {\n return this.$showPrintMargin && this.$printMarginColumn; \n }\n },\n showGutter: {\n set: function(show){\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n fadeFoldWidgets: {\n set: function(show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function(show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function(show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function(shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function(size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function(name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function(val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function(val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function(val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function(val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n theme: {\n set: function(val) { this.setTheme(val); },\n get: function() { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {\n },\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\n\nvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate);\n this.$others = others;\n \n this.$onCursorChange = function() {\n setTimeout(function() {\n _self.onCursorChange();\n });\n };\n \n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\n this.$undoStackDepth = undoStack.length;\n this.setup();\n\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setup = function() {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n \n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function(other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n this.showOtherMarkers = function() {\n if (this.othersActive) return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function(anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\n });\n };\n this.hideOtherMarkers = function() {\n if (!this.othersActive) return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n this.onUpdate = function(delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n \n var range = delta;\n if (range.start.row !== range.end.row) return;\n if (range.start.row !== this.pos.row) return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n \n this.updateAnchors(delta);\n \n if (inMainRange)\n this.length += lengthDiff;\n\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n } else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n \n this.$updating = false;\n this.updateMarkers();\n };\n \n this.updateAnchors = function(delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n \n this.updateMarkers = function() {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function(pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n\n this.onCursorChange = function(event) {\n if (this.$updating || !this.session) return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n } else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n }; \n this.detach = function() {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n this.cancel = function() {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\n\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n \n if (ctrl && useragent.isMac)\n button = ev.button;\n\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n \n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n \n if (button !== 0)\n return;\n\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function(e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n \n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n \n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n } else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n } else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n \n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n \n editor.inVirtualSelectionMode = true;\n \n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function() {\n var tmpSel = selection.toOrientedRange();\n\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n } else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n\n } else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true; \n var initialRange;\n var rectSel = [];\n var blockSelect = function() {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n \n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n } else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n \n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead); \n else\n selection.moveToPosition(pos);\n \n screenCursor = {row: -1, column: -1};\n\n var onMouseSelectionEnd = function(e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n\n var onSelectionInterval = blockSelect;\n\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n return e.preventDefault();\n }\n}\n\n\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module) {\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function(editor) { editor.selectMoreLines(-1); },\n bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function(editor) { editor.selectMoreLines(1); },\n bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function(editor) { editor.selectMoreLines(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function(editor) { editor.selectMoreLines(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function(editor) { editor.selectMore(-1); },\n bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function(editor) { editor.selectMore(1); },\n bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function(editor) { editor.selectMore(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function(editor) { editor.selectMore(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function(editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\n readOnly: true\n}, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function(editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n}, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function(editor) { editor.alignCursors(); },\n bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\n scrollIntoView: \"cursor\"\n}, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function(editor) { editor.findAll(); },\n bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function(editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function(editor) {return editor && editor.inMultiSelectMode;}\n}];\n\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\n\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function() {\n this.getSelectionMarkers = function() {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function() {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function(range, $blockChangeEvents) {\n if (!range)\n return;\n\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n\n if (!range.cursor)\n range.cursor = range.end;\n\n var removed = this.rangeList.add(range);\n\n this.$onAddRange(range);\n\n if (removed.length)\n this.$onRemoveRange(removed);\n\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function(range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function(pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function() {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n\n this.$onAddRange = function(range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", {range: range});\n };\n\n this.$onRemoveRange = function(removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n\n for (var i = removed.length; i--; ) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n\n this._signal(\"removeRange\", {ranges: removed});\n\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function() {\n if (this.rangeList)\n return;\n\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function() {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n } else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n \n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n } else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n } else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n\n if (startRow == endRow)\n includeEmptyLines = true;\n\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(\n this.session.screenToDocumentPosition(row, startColumn, startOffsetX),\n this.session.screenToDocumentPosition(row, endColumn, endOffsetX)\n );\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n\n if (yBackwards)\n rectSel.reverse();\n\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function() {\n this.updateSelectionMarkers = function() {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function(orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function(range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n\n this.removeSelectionMarkers = function(ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--; ) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n\n this.$onAddRange = function(e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onRemoveRange = function(e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onMultiSelect = function(e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onSingleSelect = function(e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n\n this.$onMultiSelectExec = function(e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n } else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n } else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n } else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n } else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n }; \n this.forEachSelection = function(cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n \n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n \n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n \n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n \n return result;\n };\n this.exitMultiSelectMode = function() {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n\n this.getSelectedText = function() {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n \n this.$checkMultiselectChange = function(e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row \n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function(needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n } \n this.$search.set(options);\n \n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n\n var selection = this.multiSelect;\n\n if (!additive)\n selection.toSingleRange(ranges[0]);\n\n for (var i = ranges.length; i--; )\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n \n return ranges.length;\n };\n this.selectMoreLines = function(dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n } else {\n var anchor = lead;\n }\n\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n } else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n } else {\n if (skip)\n var toRemove = range.cursor;\n }\n\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function(dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n\n var words = [];\n for (var i = all.length; i--; ) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function(dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function() {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function(r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n \n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n \n if (fr < 0) fr = 0;\n if (lr >= max) lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n } else {\n sameRowRanges.forEach(function(r) {\n sel.substractPoint(r.cursor);\n });\n\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function(r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function(r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n\n this.$reAlignText = function(lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n\n return lines.map(function(line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\n\n\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function(e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n\n addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n if (!editor.textInput) return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function(e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n } else if (altCursor) {\n reset();\n }\n }, editor);\n\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\n\nexports.MultiSelect = MultiSelect;\n\n\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function(val) {\n MultiSelect(this);\n if (val) {\n this.on(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n } else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function(val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n\n this.getFoldWidgetRange = function(session, foldStyle, row) {\n return null;\n };\n\n this.indentationBlock = function(session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n\n if (level == -1)\n continue;\n\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n\n this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\n var start = {row: row, column: column + 1};\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n\n if (fw == \"start\" && end.row > start.row) {\n end.row --;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n\n this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n var end = {row: row, column: column};\n var start = session.$findOpeningBracket(bracket, end);\n\n if (!start)\n return;\n\n start.column++;\n end.column--;\n\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\nexports.$id = \"ace/theme/textmate\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"./lib/dom\");\n\nfunction LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n \n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n this.getRowLength = function(row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.$getWidgetScreenLength = function() {\n var screenRows = 0;\n this.lineWidgets.forEach(function(w){\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n }; \n \n this.$onChangeEditor = function(e) {\n this.attach(e.editor);\n };\n \n this.attach = function(editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n\n if (this.editor == editor)\n return;\n\n this.detach();\n this.editor = editor;\n \n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n this.detach = function(e) {\n var editor = this.editor;\n if (!editor)\n return;\n \n this.editor = null;\n editor.widgetManager = null;\n \n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function(w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n\n this.updateOnFold = function(e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n } else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n \n this.updateOnChange = function(delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n \n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n } else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function(w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n } else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n \n this.$updateRows = function() {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var noWidgets = true;\n lineWidgets.forEach(function(w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n\n this.$registerLineWidget = function(w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n \n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n \n this.session.lineWidgets[w.row] = w;\n return w;\n };\n \n this.addLineWidget = function(w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n \n if (!this.editor) return w;\n \n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n \n if (!w.coverGutter) {\n w.el.style.zIndex = 3;\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n \n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n \n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n \n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n \n this.removeLineWidget = function(w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy) try {\n w.editor.destroy();\n } catch(e){}\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n } else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n this.$updateRows();\n };\n \n this.getWidgetsAtRow = function(row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n \n this.onWidgetChanged = function(w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n \n this.measureWidgets = function(e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n \n if (!changedWidgets || !changedWidgets.length) return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el) continue;\n if (w.session != this.session) continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n \n w.h = w.el.offsetHeight;\n \n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n \n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", {data:{start:{row: min}}});\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n \n this.renderWidgets = function(e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n \n while (first > 0 && !lineWidgets[first])\n first--;\n \n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el) continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n \n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n \n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n \n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n } else {\n w.el.style.right = \"\";\n }\n }\n };\n \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\n\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n \n var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n \n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n \n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n \n \n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\n\nexports.showErrorMarker = function(editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n \n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n } else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n } else if (oldWidget) {\n return;\n } else {\n gutterAnno = {\n text: [\"Looks good!\"],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n \n var w = {\n row: pos.row, \n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n \n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n \n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"
\");\n \n el.appendChild(dom.createElement(\"div\"));\n \n var kb = function(_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return {command: \"null\"};\n }\n };\n \n w.destroy = function() {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n \n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n \n editor.session.widgetManager.addLineWidget(w);\n \n w.el.onmousedown = editor.focus.bind(editor);\n \n editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\n\ndom.importCssString(\"\\\n .error_widget_wrapper {\\\n background: inherit;\\\n color: inherit;\\\n border:none\\\n }\\\n .error_widget {\\\n border-top: solid 2px;\\\n border-bottom: solid 2px;\\\n margin: 5px 0;\\\n padding: 10px 40px;\\\n white-space: pre-wrap;\\\n }\\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n border-color: #ff5a5a\\\n }\\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n border-color: #F1D817\\\n }\\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n border-color: #5a5a5a\\\n }\\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n border-color: #5aaa5a\\\n }\\\n .error_widget_arrow {\\\n position: absolute;\\\n border: solid 5px;\\\n border-top-color: transparent!important;\\\n border-right-color: transparent!important;\\\n border-left-color: transparent!important;\\\n top: -5px;\\\n }\\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\n\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\n\nexports.config = require(\"./config\");\nexports.require = require;\n\nif (typeof define === \"function\")\n exports.define = define;\nexports.edit = function(el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n } else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n\n var doc = exports.createEditSession(value);\n\n var editor = new Editor(new Renderer(el), doc, options);\n\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode) env.textarea = oldNode;\n event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function() {\n event.removeListener(window, \"resize\", env.onResize);\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function(text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nexports.version = exports.config.version;\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n window.ace[\"default\"] = window.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = window.ace;\n }\n });\n })();\n ","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n","var path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\n\nvar VERSION = require('../env/data').version;\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","(function(t,e){\"object\"===typeof exports&&\"object\"===typeof module?module.exports=e(require(\"vue\")):\"function\"===typeof define&&define.amd?define([],e):\"object\"===typeof exports?exports[\"vue3-youtube\"]=e(require(\"vue\")):t[\"vue3-youtube\"]=e(t[\"Vue\"])})(\"undefined\"!==typeof self?self:this,(function(t){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){\"undefined\"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t[\"default\"]}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=\"fb15\")}({\"00ee\":function(t,e,n){var r=n(\"b622\"),o=r(\"toStringTag\"),i={};i[o]=\"z\",t.exports=\"[object z]\"===String(i)},\"0366\":function(t,e,n){var r=n(\"1c0b\");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},\"06cf\":function(t,e,n){var r=n(\"83ab\"),o=n(\"d1e7\"),i=n(\"5c6c\"),c=n(\"fc6a\"),u=n(\"c04e\"),a=n(\"5135\"),f=n(\"0cfb\"),s=Object.getOwnPropertyDescriptor;e.f=r?s:function(t,e){if(t=c(t),e=u(e,!0),f)try{return s(t,e)}catch(n){}if(a(t,e))return i(!o.f.call(t,e),t[e])}},\"0cfb\":function(t,e,n){var r=n(\"83ab\"),o=n(\"d039\"),i=n(\"cc12\");t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i(\"div\"),\"a\",{get:function(){return 7}}).a}))},\"159b\":function(t,e,n){var r=n(\"da84\"),o=n(\"fdbc\"),i=n(\"17c2\"),c=n(\"9112\");for(var u in o){var a=r[u],f=a&&a.prototype;if(f&&f.forEach!==i)try{c(f,\"forEach\",i)}catch(s){f.forEach=i}}},\"17c2\":function(t,e,n){\"use strict\";var r=n(\"b727\").forEach,o=n(\"a640\"),i=n(\"ae40\"),c=o(\"forEach\"),u=i(\"forEach\");t.exports=c&&u?[].forEach:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}},\"19aa\":function(t,e){t.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(\"Incorrect \"+(n?n+\" \":\"\")+\"invocation\");return t}},\"1be4\":function(t,e,n){var r=n(\"d066\");t.exports=r(\"document\",\"documentElement\")},\"1c0b\":function(t,e){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(String(t)+\" is not a function\");return t}},\"1c7e\":function(t,e,n){var r=n(\"b622\"),o=r(\"iterator\"),i=!1;try{var c=0,u={next:function(){return{done:!!c++}},return:function(){i=!0}};u[o]=function(){return this},Array.from(u,(function(){throw 2}))}catch(a){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var r={};r[o]=function(){return{next:function(){return{done:n=!0}}}},t(r)}catch(a){}return n}},\"1cdc\":function(t,e,n){var r=n(\"342f\");t.exports=/(iphone|ipod|ipad).*applewebkit/i.test(r)},\"1d80\":function(t,e){t.exports=function(t){if(void 0==t)throw TypeError(\"Can't call method on \"+t);return t}},2266:function(t,e,n){var r=n(\"825a\"),o=n(\"e95a\"),i=n(\"50c4\"),c=n(\"0366\"),u=n(\"35a1\"),a=n(\"9bdd\"),f=function(t,e){this.stopped=t,this.result=e},s=t.exports=function(t,e,n,s,l){var p,d,v,h,y,b,g,m=c(e,n,s?2:1);if(l)p=t;else{if(d=u(t),\"function\"!=typeof d)throw TypeError(\"Target is not iterable\");if(o(d)){for(v=0,h=i(t.length);h>v;v++)if(y=s?m(r(g=t[v])[0],g[1]):m(t[v]),y&&y instanceof f)return y;return new f(!1)}p=d.call(t)}b=p.next;while(!(g=b.call(p)).done)if(y=a(p,m,g.value,s),\"object\"==typeof y&&y&&y instanceof f)return y;return new f(!1)};s.stop=function(t){return new f(!0,t)}},\"23cb\":function(t,e,n){var r=n(\"a691\"),o=Math.max,i=Math.min;t.exports=function(t,e){var n=r(t);return n<0?o(n+e,0):i(n,e)}},\"23e7\":function(t,e,n){var r=n(\"da84\"),o=n(\"06cf\").f,i=n(\"9112\"),c=n(\"6eeb\"),u=n(\"ce4e\"),a=n(\"e893\"),f=n(\"94ca\");t.exports=function(t,e){var n,s,l,p,d,v,h=t.target,y=t.global,b=t.stat;if(s=y?r:b?r[h]||u(h,{}):(r[h]||{}).prototype,s)for(l in e){if(d=e[l],t.noTargetGet?(v=o(s,l),p=v&&v.value):p=s[l],n=f(y?l:h+(b?\".\":\"#\")+l,t.forced),!n&&void 0!==p){if(typeof d===typeof p)continue;a(d,p)}(t.sham||p&&p.sham)&&i(d,\"sham\",!0),c(s,l,d,t)}}},\"241c\":function(t,e,n){var r=n(\"ca84\"),o=n(\"7839\"),i=o.concat(\"length\",\"prototype\");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},2626:function(t,e,n){\"use strict\";var r=n(\"d066\"),o=n(\"9bf2\"),i=n(\"b622\"),c=n(\"83ab\"),u=i(\"species\");t.exports=function(t){var e=r(t),n=o.f;c&&e&&!e[u]&&n(e,u,{configurable:!0,get:function(){return this}})}},\"2cf4\":function(t,e,n){var r,o,i,c=n(\"da84\"),u=n(\"d039\"),a=n(\"c6b6\"),f=n(\"0366\"),s=n(\"1be4\"),l=n(\"cc12\"),p=n(\"1cdc\"),d=c.location,v=c.setImmediate,h=c.clearImmediate,y=c.process,b=c.MessageChannel,g=c.Dispatch,m=0,x={},w=\"onreadystatechange\",S=function(t){if(x.hasOwnProperty(t)){var e=x[t];delete x[t],e()}},j=function(t){return function(){S(t)}},P=function(t){S(t.data)},E=function(t){c.postMessage(t+\"\",d.protocol+\"//\"+d.host)};v&&h||(v=function(t){var e=[],n=1;while(arguments.length>n)e.push(arguments[n++]);return x[++m]=function(){(\"function\"==typeof t?t:Function(t)).apply(void 0,e)},r(m),m},h=function(t){delete x[t]},\"process\"==a(y)?r=function(t){y.nextTick(j(t))}:g&&g.now?r=function(t){g.now(j(t))}:b&&!p?(o=new b,i=o.port2,o.port1.onmessage=P,r=f(i.postMessage,i,1)):!c.addEventListener||\"function\"!=typeof postMessage||c.importScripts||u(E)||\"file:\"===d.protocol?r=w in l(\"script\")?function(t){s.appendChild(l(\"script\"))[w]=function(){s.removeChild(this),S(t)}}:function(t){setTimeout(j(t),0)}:(r=E,c.addEventListener(\"message\",P,!1))),t.exports={set:v,clear:h}},\"2d00\":function(t,e,n){var r,o,i=n(\"da84\"),c=n(\"342f\"),u=i.process,a=u&&u.versions,f=a&&a.v8;f?(r=f.split(\".\"),o=r[0]+r[1]):c&&(r=c.match(/Edge\\/(\\d+)/),(!r||r[1]>=74)&&(r=c.match(/Chrome\\/(\\d+)/),r&&(o=r[1]))),t.exports=o&&+o},\"342f\":function(t,e,n){var r=n(\"d066\");t.exports=r(\"navigator\",\"userAgent\")||\"\"},\"35a1\":function(t,e,n){var r=n(\"f5df\"),o=n(\"3f8c\"),i=n(\"b622\"),c=i(\"iterator\");t.exports=function(t){if(void 0!=t)return t[c]||t[\"@@iterator\"]||o[r(t)]}},\"37e8\":function(t,e,n){var r=n(\"83ab\"),o=n(\"9bf2\"),i=n(\"825a\"),c=n(\"df75\");t.exports=r?Object.defineProperties:function(t,e){i(t);var n,r=c(e),u=r.length,a=0;while(u>a)o.f(t,n=r[a++],e[n]);return t}},\"3bbe\":function(t,e,n){var r=n(\"861d\");t.exports=function(t){if(!r(t)&&null!==t)throw TypeError(\"Can't set \"+String(t)+\" as a prototype\");return t}},\"3f8c\":function(t,e){t.exports={}},4160:function(t,e,n){\"use strict\";var r=n(\"23e7\"),o=n(\"17c2\");r({target:\"Array\",proto:!0,forced:[].forEach!=o},{forEach:o})},\"428f\":function(t,e,n){var r=n(\"da84\");t.exports=r},\"44ad\":function(t,e,n){var r=n(\"d039\"),o=n(\"c6b6\"),i=\"\".split;t.exports=r((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"==o(t)?i.call(t,\"\"):Object(t)}:Object},\"44de\":function(t,e,n){var r=n(\"da84\");t.exports=function(t,e){var n=r.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,e))}},4840:function(t,e,n){var r=n(\"825a\"),o=n(\"1c0b\"),i=n(\"b622\"),c=i(\"species\");t.exports=function(t,e){var n,i=r(t).constructor;return void 0===i||void 0==(n=r(i)[c])?e:o(n)}},4930:function(t,e,n){var r=n(\"d039\");t.exports=!!Object.getOwnPropertySymbols&&!r((function(){return!String(Symbol())}))},\"4d64\":function(t,e,n){var r=n(\"fc6a\"),o=n(\"50c4\"),i=n(\"23cb\"),c=function(t){return function(e,n,c){var u,a=r(e),f=o(a.length),s=i(c,f);if(t&&n!=n){while(f>s)if(u=a[s++],u!=u)return!0}else for(;f>s;s++)if((t||s in a)&&a[s]===n)return t||s||0;return!t&&-1}};t.exports={includes:c(!0),indexOf:c(!1)}},\"50c4\":function(t,e,n){var r=n(\"a691\"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},5135:function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},5692:function(t,e,n){var r=n(\"c430\"),o=n(\"c6cd\");(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.6.5\",mode:r?\"pure\":\"global\",copyright:\"© 2020 Denis Pushkarev (zloirock.ru)\"})},\"56ef\":function(t,e,n){var r=n(\"d066\"),o=n(\"241c\"),i=n(\"7418\"),c=n(\"825a\");t.exports=r(\"Reflect\",\"ownKeys\")||function(t){var e=o.f(c(t)),n=i.f;return n?e.concat(n(t)):e}},5899:function(t,e){t.exports=\"\\t\\n\\v\\f\\r                 \\u2028\\u2029\\ufeff\"},\"58a8\":function(t,e,n){var r=n(\"1d80\"),o=n(\"5899\"),i=\"[\"+o+\"]\",c=RegExp(\"^\"+i+i+\"*\"),u=RegExp(i+i+\"*$\"),a=function(t){return function(e){var n=String(r(e));return 1&t&&(n=n.replace(c,\"\")),2&t&&(n=n.replace(u,\"\")),n}};t.exports={start:a(1),end:a(2),trim:a(3)}},\"5c6c\":function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},\"65f0\":function(t,e,n){var r=n(\"861d\"),o=n(\"e8b5\"),i=n(\"b622\"),c=i(\"species\");t.exports=function(t,e){var n;return o(t)&&(n=t.constructor,\"function\"!=typeof n||n!==Array&&!o(n.prototype)?r(n)&&(n=n[c],null===n&&(n=void 0)):n=void 0),new(void 0===n?Array:n)(0===e?0:e)}},\"69f3\":function(t,e,n){var r,o,i,c=n(\"7f9a\"),u=n(\"da84\"),a=n(\"861d\"),f=n(\"9112\"),s=n(\"5135\"),l=n(\"f772\"),p=n(\"d012\"),d=u.WeakMap,v=function(t){return i(t)?o(t):r(t,{})},h=function(t){return function(e){var n;if(!a(e)||(n=o(e)).type!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required\");return n}};if(c){var y=new d,b=y.get,g=y.has,m=y.set;r=function(t,e){return m.call(y,t,e),e},o=function(t){return b.call(y,t)||{}},i=function(t){return g.call(y,t)}}else{var x=l(\"state\");p[x]=!0,r=function(t,e){return f(t,x,e),e},o=function(t){return s(t,x)?t[x]:{}},i=function(t){return s(t,x)}}t.exports={set:r,get:o,has:i,enforce:v,getterFor:h}},\"6eeb\":function(t,e,n){var r=n(\"da84\"),o=n(\"9112\"),i=n(\"5135\"),c=n(\"ce4e\"),u=n(\"8925\"),a=n(\"69f3\"),f=a.get,s=a.enforce,l=String(String).split(\"String\");(t.exports=function(t,e,n,u){var a=!!u&&!!u.unsafe,f=!!u&&!!u.enumerable,p=!!u&&!!u.noTargetGet;\"function\"==typeof n&&(\"string\"!=typeof e||i(n,\"name\")||o(n,\"name\",e),s(n).source=l.join(\"string\"==typeof e?e:\"\")),t!==r?(a?!p&&t[e]&&(f=!0):delete t[e],f?t[e]=n:o(t,e,n)):f?t[e]=n:c(e,n)})(Function.prototype,\"toString\",(function(){return\"function\"==typeof this&&f(this).source||u(this)}))},7156:function(t,e,n){var r=n(\"861d\"),o=n(\"d2bb\");t.exports=function(t,e,n){var i,c;return o&&\"function\"==typeof(i=e.constructor)&&i!==n&&r(c=i.prototype)&&c!==n.prototype&&o(t,c),t}},7418:function(t,e){e.f=Object.getOwnPropertySymbols},7839:function(t,e){t.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},\"7b0b\":function(t,e,n){var r=n(\"1d80\");t.exports=function(t){return Object(r(t))}},\"7c73\":function(t,e,n){var r,o=n(\"825a\"),i=n(\"37e8\"),c=n(\"7839\"),u=n(\"d012\"),a=n(\"1be4\"),f=n(\"cc12\"),s=n(\"f772\"),l=\">\",p=\"<\",d=\"prototype\",v=\"script\",h=s(\"IE_PROTO\"),y=function(){},b=function(t){return p+v+l+t+p+\"/\"+v+l},g=function(t){t.write(b(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},m=function(){var t,e=f(\"iframe\"),n=\"java\"+v+\":\";return e.style.display=\"none\",a.appendChild(e),e.src=String(n),t=e.contentWindow.document,t.open(),t.write(b(\"document.F=Object\")),t.close(),t.F},x=function(){try{r=document.domain&&new ActiveXObject(\"htmlfile\")}catch(e){}x=r?g(r):m();var t=c.length;while(t--)delete x[d][c[t]];return x()};u[h]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(y[d]=o(t),n=new y,y[d]=null,n[h]=t):n=x(),void 0===e?n:i(n,e)}},\"7f9a\":function(t,e,n){var r=n(\"da84\"),o=n(\"8925\"),i=r.WeakMap;t.exports=\"function\"===typeof i&&/native code/.test(o(i))},\"825a\":function(t,e,n){var r=n(\"861d\");t.exports=function(t){if(!r(t))throw TypeError(String(t)+\" is not an object\");return t}},\"83ab\":function(t,e,n){var r=n(\"d039\");t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},\"861d\":function(t,e){t.exports=function(t){return\"object\"===typeof t?null!==t:\"function\"===typeof t}},8875:function(t,e,n){var r,o,i;(function(n,c){o=[],r=c,i=\"function\"===typeof r?r.apply(e,o):r,void 0===i||(t.exports=i)})(\"undefined\"!==typeof self&&self,(function(){function t(){var e=Object.getOwnPropertyDescriptor(document,\"currentScript\");if(!e&&\"currentScript\"in document&&document.currentScript)return document.currentScript;if(e&&e.get!==t&&document.currentScript)return document.currentScript;try{throw new Error}catch(d){var n,r,o,i=/.*at [^(]*\\((.*):(.+):(.+)\\)$/gi,c=/@([^@]*):(\\d+):(\\d+)\\s*$/gi,u=i.exec(d.stack)||c.exec(d.stack),a=u&&u[1]||!1,f=u&&u[2]||!1,s=document.location.href.replace(document.location.hash,\"\"),l=document.getElementsByTagName(\"script\");a===s&&(n=document.documentElement.outerHTML,r=new RegExp(\"(?:[^\\\\n]+?\\\\n){0,\"+(f-2)+\"}[^<]*\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","import ace from 'ace-builds';\r\nimport { capitalize, defineComponent, markRaw, h } from 'vue';\r\nimport ResizeObserver from 'resize-observer-polyfill';\r\nconst Events = [\r\n 'blur',\r\n 'input',\r\n 'change',\r\n 'changeSelectionStyle',\r\n 'changeSession',\r\n 'copy',\r\n 'focus',\r\n 'paste',\r\n];\r\nexport const VAceEditor = defineComponent({\r\n props: {\r\n value: {\r\n type: String,\r\n required: true,\r\n },\r\n lang: {\r\n type: String,\r\n default: 'text',\r\n },\r\n theme: {\r\n type: String,\r\n default: 'chrome',\r\n },\r\n options: Object,\r\n placeholder: String,\r\n readonly: Boolean,\r\n wrap: Boolean,\r\n printMargin: {\r\n type: [Boolean, Number],\r\n default: true,\r\n },\r\n minLines: Number,\r\n maxLines: Number,\r\n },\r\n emits: ['update:value', 'init', ...Events],\r\n render() {\r\n return h('div');\r\n },\r\n mounted() {\r\n const editor = this._editor = markRaw(ace.edit(this.$el, {\r\n placeholder: this.placeholder,\r\n readOnly: this.readonly,\r\n value: this.value,\r\n mode: 'ace/mode/' + this.lang,\r\n theme: 'ace/theme/' + this.theme,\r\n wrap: this.wrap,\r\n printMargin: this.printMargin,\r\n useWorker: false,\r\n minLines: this.minLines,\r\n maxLines: this.maxLines,\r\n ...this.options,\r\n }));\r\n this._contentBackup = this.value;\r\n this._isSettingContent = false;\r\n editor.on('change', () => {\r\n // ref: https://github.com/CarterLi/vue3-ace-editor/issues/11\r\n if (this._isSettingContent)\r\n return;\r\n const content = editor.getValue();\r\n this._contentBackup = content;\r\n this.$emit('update:value', content);\r\n });\r\n Events.forEach(x => {\r\n const eventName = 'on' + capitalize(x);\r\n if (typeof this.$.vnode.props[eventName] === 'function') {\r\n editor.on(x, this.$emit.bind(this, x));\r\n }\r\n });\r\n this._ro = new ResizeObserver(() => editor.resize());\r\n this._ro.observe(this.$el);\r\n this.$emit('init', editor);\r\n },\r\n beforeUnmount() {\r\n var _a, _b;\r\n (_a = this._ro) === null || _a === void 0 ? void 0 : _a.disconnect();\r\n (_b = this._editor) === null || _b === void 0 ? void 0 : _b.destroy();\r\n },\r\n methods: {\r\n focus() {\r\n this._editor.focus();\r\n },\r\n blur() {\r\n this._editor.blur();\r\n },\r\n selectAll() {\r\n this._editor.selectAll();\r\n },\r\n },\r\n watch: {\r\n value(val) {\r\n if (this._contentBackup !== val) {\r\n try {\r\n this._isSettingContent = true;\r\n this._editor.setValue(val, 1);\r\n }\r\n finally {\r\n this._isSettingContent = false;\r\n }\r\n this._contentBackup = val;\r\n }\r\n },\r\n theme(val) {\r\n this._editor.setTheme('ace/theme/' + val);\r\n },\r\n options(val) {\r\n this._editor.setOptions(val);\r\n },\r\n readonly(val) {\r\n this._editor.setReadOnly(val);\r\n },\r\n placeholder(val) {\r\n this._editor.setOption('placeholder', val);\r\n },\r\n wrap(val) {\r\n this._editor.setWrapBehavioursEnabled(val);\r\n },\r\n printMargin(val) {\r\n this._editor.setOption('printMargin', val);\r\n },\r\n lang(val) {\r\n this._editor.setOption('mode', 'ace/mode/' + val);\r\n },\r\n minLines(val) {\r\n this._editor.setOption('minLines', val);\r\n },\r\n maxLines(val) {\r\n this._editor.setOption('maxLines', val);\r\n },\r\n }\r\n});\r\n//# sourceMappingURL=index.js.map","import axios from 'axios';\n\nconst authentication = {\n async authenticateKey(key) {\n const config = {\n headers: {\n 'Content-Type': 'application/json',\n },\n params: {\n key,\n },\n };\n\n const url = `${process.env.VUE_APP_API_GATEWAY}/auth`;\n\n const response = await axios.get(url, config);\n return response;\n },\n};\n\nexport default authentication;\n","import { render } from \"./Workout.vue?vue&type=template&id=7373a540\"\nimport script from \"./Workout.vue?vue&type=script&lang=js\"\nexport * from \"./Workout.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/app/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"sourceRoot":""}