{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///(webpack)/buildin/amd-define.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./app/assets/packs/application.js","webpack:///./node_modules/ace-builds/src-noconflict/ace.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-sql.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-ambiance.js","webpack:///./app/assets/javascripts/scuttle.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Error","this","Rails","linkClickSelector","buttonClickSelector","selector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","ref","document","querySelector","content","cspNonce","expando","Element","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","element","getData","setData","$","Array","slice","querySelectorAll","csrfParam","csrfToken","meta","CSRFProtection","xhr","token","setRequestHeader","refreshCSRFTokens","param","forEach","input","CustomEvent","fire","preventDefault","window","event","params","evt","createEvent","initCustomEvent","bubbles","cancelable","detail","Event","result","defaultPrevented","obj","data","dispatchEvent","stopEverything","e","target","stopPropagation","stopImmediatePropagation","delegate","eventType","handler","addEventListener","parentNode","AcceptHeaders","createXHR","prepareOptions","processResponse","text","html","xml","json","script","ajax","options","response","responseText","getResponseHeader","Math","floor","status","success","statusText","error","complete","beforeSend","readyState","XMLHttpRequest","OPENED","send","url","location","href","type","toUpperCase","indexOf","dataType","accept","done","open","crossDomain","withCredentials","onreadystatechange","DONE","parser","match","JSON","parse","createElement","setAttribute","head","appendChild","removeChild","DOMParser","replace","parseFromString","isCrossDomain","originAnchor","urlAnchor","protocol","host","toArray","serializeElement","additionalParam","inputs","elements","disabled","option","selected","push","checked","map","encodeURIComponent","join","formElements","form","filter","el","allowAction","handleConfirm","confirm","message","answer","callback","getAttribute","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","innerHTML","originalText","removeEventListener","handleMethod","formContent","link","method","action","style","display","body","click","isRemote","handleRemote","button","enctype","FormData","append","args","arguments","length","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","metaKey","ctrlKey","jQuery","rails","ajaxPrefilter","originalOptions","start","_rails_loaded","setTimeout","global","define","deps","payload","payloads","original","apply","console","trace","root","_require","parentId","lookup","undefined","toString","dep","require","packagedModule","normalizeModule","moduleName","chunks","split","charAt","previous","mod","id","uri","packaged","ace","x","real","exec","RegExp","test","String","compliantExecNpcg","compliantLastIndexIncrement","lastIndex","str","r2","regex","array","item","from","source","ignoreCase","multiline","extended","sticky","index","_xregexp","captureNames","Empty","Function","that","TypeError","bound","concat","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","prototypeOfArray","prototypeOfObject","_toString","owns","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","splice","makeArray","a","lengthBefore","array_splice","deleteCount","pos","removeCount","max","removed","insert","add","remove","min","tailOldPos","tailNewPos","tailCount","lengthAfterRemove","isArray","createEmpty","freezeObject","boxedString","splitString","fun","toObject","self","thisp","every","some","reduce","reduceRight","sought","toInteger","lastIndexOf","abs","getPrototypeOf","__proto__","constructor","getOwnPropertyDescriptor","descriptor","configurable","setter","set","getOwnPropertyNames","keys","empty","propertyIsEnumerable","isPrototypeOf","toLocaleString","valueOf","properties","Type","defineProperties","doesDefinePropertyWork","exception","definePropertyWorksOnObject","definePropertyWorksOnDom","definePropertyFallback","seal","freeze","preventExtensions","isSealed","isFrozen","isExtensible","returnValue","hasDontEnumBug","dontEnums","dontEnumsLength","ii","dontEnum","Date","now","getTime","ws","trim","trimBeginRegexp","trimEndRegexp","getDocumentHead","doc","getElementsByTagName","documentElement","tag","createElementNS","hasCssClass","className","addCssClass","removeCssClass","classes","toggleCssClass","setCssClass","node","include","hasCssString","sheets","createStyleSheet","styleSheets","owningElement","importCssString","cssText","createTextNode","importCssStylsheet","rel","getInnerWidth","parseInt","computedStyle","clientWidth","getInnerHeight","clientHeight","scrollbarWidth","inner","width","minWidth","height","outer","position","left","overflow","noScrollbar","offsetWidth","withScrollbar","pageYOffset","getPageScrollTop","getPageScrollLeft","pageXOffset","scrollTop","scrollLeft","getComputedStyle","currentStyle","setInnerHtml","innerHtml","cloneNode","replaceChild","setInnerText","innerText","textContent","getInnerText","getParentWindow","defaultView","parentWindow","inherits","ctor","superCtor","super_","writable","mixin","implement","proto","oop","Keys","ret","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","toLowerCase","enter","escape","esc","del","mods","pow","keyCodeToString","keyCode","keyString","fromCharCode","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","navigator","os","platform","ua","userAgent","isWin","isIE","appName","parseFloat","isOldIE","isGecko","isMozilla","Controllers","controllers","product","isOldGecko","isOpera","opera","isWebKit","isChrome","isAIR","isIPad","isChromeOS","isIOS","MSStream","useragent","pressedKeys","ts","addListener","elem","attachEvent","wrapper","_wrapper","removeListener","detachEvent","stopEvent","cancelBubble","getButton","altKey","shiftKey","capture","eventHandler","releaseCaptureHandler","onMouseUp","addTouchMoveListener","startx","starty","touchObj","touches","clientX","clientY","wheelX","wheelY","addMouseWheelListener","wheelDeltaX","wheelDeltaY","wheelDelta","deltaMode","DOM_DELTA_PIXEL","deltaX","deltaY","DOM_DELTA_LINE","DOM_DELTA_PAGE","axis","HORIZONTAL_AXIS","addMultiMouseDownListener","timeouts","callbackName","startX","startY","timer","clicks","eventNames","onMousedown","isNewClick","clearTimeout","_clicks","onDblclick","getModifierHash","normalizeCommandKeys","hashId","getModifierState","altGr","keyLocation","timeStamp","resetPressedKeys","getModifierString","addCommandKeyListener","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","nextTick","win","messageName","listener","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","last","stringReverse","string","reverse","stringRepeat","count","stringTrimLeft","stringTrimRight","copyObject","copy","copyArray","deepCopy","arrayToMap","arr","createMap","props","arrayRemove","escapeRegExp","escapeHTML","getMatchOffsets","regExp","offset","deferredCall","fcn","deferred","timeout","cancel","schedule","isPending","delayedCall","defaultTimeout","_self","delay","dom","lang","KEYS","MODS","BROKEN_SETDATA","USE_IE_MIME_TYPE","TextInput","isTouchPad","opacity","insertBefore","firstChild","PLACEHOLDER","copied","cut","pasted","inComposition","tempStyle","isSelectionEmpty","isFocused","activeElement","onBlur","onFocus","resetSelection","focus","blur","syncSelection","syncValue","isEmpty","inputHandler","selectionStart","selectionEnd","setSelectionRange","resetValue","selection","setInputHandler","cb","getInputHandler","afterContextMenu","sendText","onPaste","substr","execCommand","substring","onTextInput","onInput","handleClipboardData","forceIEMime","clipboardData","mime","doCopy","isCut","getCopyText","onCut","onCopy","select","onCommandKey","isAllSelected","selectAll","closeTimeout","onCompositionUpdate","$readOnly","val","lastValue","undo","canUndo","getRange","session","markUndoGroup","range","setRange","clearSelection","onCompositionEnd","syncComposition","onContextMenuClose","renderer","$keepTextAreaAtCursor","$moveTextAreaToCursor","onCompositionStart","$undoManager","on","getElement","setReadOnly","readOnly","onContextMenu","_emit","domEvent","moveToMouse","bringToFront","rect","container","getBoundingClientRect","top","borderTopWidth","borderLeftWidth","maxTop","bottom","move","textInput","scroller","typingResetTimeout","typing","detectArrowKeys","up","home","right","end","down","shift","TextInputIOS","DefaultHandlers","mouseHandler","$clickSelection","editor","setDefaultHandler","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","onTouchMove","selectByLines","extendSelectionBy","selectByWords","calcRangeOrientation","cursor","row","cmp","column","anchor","ev","inSelection","getDocumentPosition","mousedownEvent","selectionEmpty","getSelectionRange","$blockScrolling","moveToPosition","time","$focusTimout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","y","getShiftKey","selectToPosition","setCapture","setStyle","comparePoint","orientedRange","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","ax","ay","bx","by","distance","sqrt","getBracketRange","getWordRange","isMultiLine","contains","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","dt","direction","canScroll","isScrollableBy","speed","scrollBy","stop","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","setPosition","setClassName","show","hide","getHeight","offsetHeight","getWidth","destroy","GutterTooltip","windowWidth","innerWidth","windowHeight","innerHeight","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","tooltip","hideTooltip","_signal","moveTooltip","getRegion","selectTo","srcElement","$tooltipFollowsMouse","isMousePressed","annotation","$annotations","getLength","screenRow","pixelToScreenCoordinates","$pos","documentToScreenRow","showTooltip","$gutter","MouseEvent","$inSelection","propagationStopped","selectionRange","AUTOSCROLL_DELAY","SCROLL_CURSOR_DELAY","SCROLL_CURSOR_HYSTERESIS","DragdropHandler","blankImage","src","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","onDragInterval","prevCursor","vMovement","hMovement","moveCursorToPosition","calcDistance","lineHeight","layerConfig","characterWidth","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","autoScroll","addDragMarker","toOrientedRange","addMarker","getSelectionStyle","$cursorLayer","setBlinking","clearInterval","setInterval","onMouseMove","clearDragMarker","removeMarker","fromOrientedRange","getReadOnly","onDragStart","cancelDrag","draggable","dataTransfer","effectAllowed","setDragImage","clearData","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","types","copyAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","state","dragDrop","$dragEnabled","eventTarget","unselectable","loadScript","path","onload","_","isAbort","qualifyURL","EventEmitter","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","once","newCallback","handlers","_disabled_","old","removeDefaultHandler","pop","capturing","off","removeAllListeners","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","$options","getOption","opt","warn","forwardTo","handlesSet","reportError","msg","AppConfig","$defaultOptions","defineOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","init","scriptOptions","scriptUrl","currentScript","_currentScript","scripts","ownerDocument","attributes","j","attr","m1","base","all","moduleUrl","component","parts","sep","re","setModuleUrl","subst","$loading","loadModule","onLoad","moduleType","afterLoad","DefaultGutterHandler","config","MouseHandler","focusEditor","hasFocus","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","$dragDelay","character","insideStart","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","onCaptureEnd","onCaptureInterval","$onCaptureMouseMove","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","getLine","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","commands","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","h","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","command","passEvent","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","RTL","L","R","EN","AN","ON","B","S","AL","WS","CS","ES","ET","NSM","LRE","RLE","PDF","LRO","RLO","BN","UnicodeTBL00","UnicodeTBL20","_invertLevel","lev","levels","_array","lo","hi","tmp","len","_getCharClass","chars","ix","wType","nType","cType","rtlCandidate","_getCharacterType","ch","uc","charCodeAt","ON_R","R_H","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","charTypes","impTab","prevState","newClass","newLevel","newState","condPos","_computeLevels","hasBidiCharacters","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","line","wrapIndent","isLastRow","EOF","seenBidi","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","onChange","delta","lines","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","$useWrapMode","splits","$wrapData","indent","size","isFullWidth","getScreenTabSize","endOfLine","markAsDirty","updateCharacterWidths","fontMetrics","$characterSize","bidiCharWidth","$measureCharWidth","getShowInvisibles","setShowInvisibles","setEolChar","eolChar","setTextDir","getPosLeft","col","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","logicalIdx","charWidth","Range","startRow","startColumn","endRow","endColumn","isEqual","compare","compareRange","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideEnd","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","extend","clone","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","Selection","getDocument","lead","selectionLead","createAnchor","selectionAnchor","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","getCursor","getPosition","getSelectionAnchor","getSelectionLead","shiftSelection","columns","moveCursorTo","isBackwards","$moveSelection","mover","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectWord","selectAWord","getAWordRange","excludeLastChar","rowEnd","rowStart","foldLine","getFoldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getTabSize","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","leadingSpace","getDisplayLine","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","search","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","screenPos","$bidiHandler","round","docPos","lineWidgets","keepDesiredColumn","moveCursorToScreen","desiredColumn","getRangeOfMovements","func","toJSON","rangeCount","ranges","r1","fromJSON","rangeList","toSingleRange","addRange","MAX_TOKEN_COUNT","Tokenizer","rules","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","defaultToken","flag","splitterRurles","rule","caseInsensitive","adjustedregex","matchcount","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","digit","removeCapturingGroups","splitRegex","createSplitterRegexp","$setMaxTokenCount","values","tokens","stack","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","next","consumeLineEnd","merge","unshift","TextHighlightRules","$rules","addRules","prefix","nextState","getRules","embedRules","HighlightRules","escapeRules","$embeds","getEmbeds","pushState","popState","normalizeRules","processState","processed","toInsert","stateName","includeName","noEscape","keywordMap","createKeywordMapper","splitChar","keywords","list","$keywordList","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","rowCount","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","getCurrentTokenRange","context","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","CstyleBehaviour","getCursorPosition","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","findMatchingBracket","next_indent","$getIndent","getTabString","quotes","$mode","$quotes","lineCommentStart","quote","leftChar","rightChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","iterator","$matchTokenType","iterator2","bracket","packages","pack","codePoint","addUnicodePackage","Ll","Lu","Lt","Lm","Lo","M","Mn","Mc","Me","N","Nd","Nl","No","P","Pd","Ps","Pe","Pi","Pf","Pc","Po","Sm","Sc","Sk","So","Z","Zs","Zl","Zp","C","Cc","Cf","Co","Cs","Cn","unicode","Mode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","removeInLine","commentWithSpace","comment","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","minEmptyLength","toggleBlockComment","colDiff","initialRange","startRange","endRange","getNextLineIndent","tab","checkOutdent","autoOutdent","createWorker","createModeDelegates","$modes","delegations","scope","functionName","$delegator","transformAction","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","word","score","$id","applyDelta","docLines","doNotValidate","Anchor","$onChange","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","$clipPositionToDocument","$insertRight","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$getTransformedPoint","noClip","Document","textOrLines","$lines","insertMergedLines","setValue","getValue","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","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","cache","update","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","sort","b","containsRow","walk","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","RangeList","pointIndex","excludeEdges","startIndex","endIndex","addList","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","consumePoint","restorePoint","subFold","collapseChildren","addSubFold","afterStart","restoreRange","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","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","depth","getFoldWidget","getFoldWidgetRange","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","charBeforeCursor","$findClosingBracket","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","setMode","bgTokenizer","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","ignore","$deltasDoc","$deltasFold","$informUndoManager","$deltas","setUndoManager","getUndoManager","reset","getSelection","undoManager","$syncInformUndoManager","group","execute","mergeUndoDeltas","$defaultUndoManager","redo","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","$overwrite","setOverwrite","overwrite","getOverwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","marker","addDynamicMarker","markerId","markers","getMarkers","highlight","$searchHighlight","highlightLines","setAnnotations","annotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","getMode","$scrollTop","setScrollTop","isNaN","getScrollTop","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","w","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","lastUndoRange","$getUndoSelection","foldDelta","redoChanges","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","diff","$clipRowToDocument","Number","MAX_VALUE","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","setUseWrapMode","useWrapMode","getUseWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","addSplit","displayed","indentation","getWrapIndent","minSplit","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","maxRow","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","wrap","$wrap","firstLineNumber","useSoftTabs","Search","find","$matchIterator","sr","sc","er","ec","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","preserveCase","$disableFakeMultiline","wholeWord","wordBoundary","addWordBoundary","modifier","caseSensitive","$assembleMultilineRegExp","backwards","forEachInLine","HashHandler","commandKeyBinding","addCommands","$singleCommand","MultiHashHandler","bindKey","isDefault","addCommand","removeCommand","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","removeCommands","bindKeys","keyList","findKeyCommand","$keyChain","CommandManager","byName","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","prompt","gotoLine","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","firstLineEndCol","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","Editor","getContainerElement","getTextAreaContainer","textarea","$mouseHandler","keyBinding","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","startOperation","endOperation","$opResetTimer","curOp","docChanged","selectionChanged","prevOp","commadEvent","previousCommand","scrollSelectionIntoView","animateScrolling","$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","cursorPos","resize","onResize","setTheme","theme","getTheme","getFontSize","setFontSize","$highlightBrackets","$bracketHighlight","$highlightPending","getMatching","$highlightTags","$highlightTagPending","$tagHighlight","prevToken","sbm","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","updateLines","$updateHighlightActiveLine","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","startOuter","endOuter","lineCols","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","inVirtualSelectionMode","getBehavioursEnabled","transform","$mergeNextCommand","lineState","shouldOutdent","lineIndent","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","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","sel","endPoint","moved","totalDiff","rangeIndex","subRows","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","center","animate","alignCursor","getCursorPositionScreen","expand","matchType","bracketType","found","brackets","lineNumber","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","preventScroll","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$resetCursorStyle","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","behavioursEnabled","wrapBehavioursEnabled","autoScrollEditorIntoView","keybindingId","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","showLineNumbers","showGutter","displayIndentGuides","fontSize","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","foldStyle","UndoManager","$serializeDelta","$deserializeDelta","cloneDeltaSetsObj","deltaSets_old","fnGetModifiedDelta","deltaSets_new","deltaSet_old","deltaSet_new","delta_old","deltaSets","$doc","hasUndo","dirtyCounter","$undoStack","$redoStack","NaN","undoSelectionRange","redoSelectionRange","$deserializeDeltas","hasRedo","markClean","isClean","$serializeDeltas","Gutter","parentEl","$showFoldWidgets","gutterWidth","$updateAnnotations","$cells","rowInfo","annoText","gutterOffset","breakpoints","decorations","$firstLineNumber","lastLineNumber","gutterRenderer","$renderer","cell","textNode","foldWidget","getText","minHeight","$fixedWidth","padding","$padding","$computePadding","ceil","$showLineNumbers","setShowLineNumbers","getShowLineNumbers","paddingLeft","paddingRight","Marker","setPadding","setMarkers","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","drawBidiSingleLineMarker","firstRowScreen","stringBuilder","extraStyle","curr","clazzModified","lineRange","range1","radiusClass","extraLength","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","$tabStrings","tabStr","$indentGuideRe","spaceClass","tabClass","spaceContent","tabContent","scrollLines","lineElements","childNodes","lineElementsIdx","lineElement","$renderLine","$useLineGroups","oldConfig","lastChild","fragment","$renderLinesFragment","createDocumentFragment","$textToken","$renderToken","output","tabIdx","idx4","classToUse","space","renderIndentGuide","cols","$renderWrappedLine","onlyContents","splitChars","$renderSimpleLine","$getFoldLineTokens","renderTokens","addTokens","$measureNode","isIE8","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateVisibility","$updateOpacity","visibility","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","blink","getPixelPosition","onScreen","$selectionMarkers","cursorIndex","pixelPos","drawCursor","$setOverwrite","MAX_SCROLL_H","ScrollBar","parent","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","scrollHeight","$scrollbarWidth","$minWidth","setHeight","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","pending","changes","change","CHAR_COUNT","FontMetrics","$setMeasureNodeStyles","$main","$testFractionalRect","isRoot","whiteSpace","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","setPolling","GutterLayer","MarkerLayer","TextLayer","CursorLayer","VirtualRenderer","onGutterResize","$markerBack","textLayer","$textLayer","canvas","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","maxHeight","v","$loop","$renderChanges","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_GUTTER","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","$updateGutterLineHighlight","$gutterLineHighlight","$printMarginEl","containerEl","posTop","posLeft","$composition","setScrollMargin","sm","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","unfreeze","st","marginTop","marginLeft","$highlightGutterLine","$updateLines","$autosize","desiredHeight","$maxPixelHeight","$gutterWidth","hideScrollbars","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","x_min","steps","initialScroll","oldSteps","$timer","scrollTo","canvasPos","textToScreenCoordinates","pageX","pageY","keepTextAreaAtCursor","$themeId","cssClass","$theme","isDark","setMouseCursor","maxPixelHeight","workerUrl","blob","Blob","blobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","getBlob","$workerBlob","blobURL","URL","webkitURL","createObjectURL","Worker","WorkerClient","topLevelNamespaces","classname","importScripts","$sendDeltaQueue","changeListener","onMessage","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","callbackId","callbacks","onmessage","err","deltaQueue","cmd","emit","ex","attachToDocument","q","UIWorkerClient","messageBuffer","main","emitSync","sender","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undostack","$undoStackDepth","setup","selectionBefore","other","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","otherPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","onSelectionInterval","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","selectMoreLines","selectMore","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","yBackwards","docEnd","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","altCursor","altDown","addAltCursorListeners","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","forEachSelection","keepOrder","$byLines","reg","cmdResult","anim","buf","nl","additive","skip","screenLead","toRemove","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","hidden","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","oldWidget","gutterAnno","comparator","binarySearch","matched","findAnnotations","arrow","onmousedown","Renderer","edit","_id","getElementById","env","tagName","oldNode","createEditSession","version","SqlHighlightRules","keywordMapper","_event","timeoutHandle","chkUseArelHelpers","chkSimplifyArelNodes","selRailsVersion","fetch","then","arel","showErrorMessage","onclick","onchange"],"mappings":"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","file":"js/application-bb9a85078b7ddf1b8b98.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/assets/javascripts\nReleased under the MIT license\n */;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form:not([data-turbo=true])',\n formInputClickSelector: 'form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n expando = '_ujsData';\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n return element[expando][key] = value;\n };\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function (event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n }\n return result;\n };\n }\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n prepareOptions = function (options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n options.accept = AcceptHeaders[options.dataType];\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n return options;\n };\n createXHR = function (options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n CSRFProtection(xhr);\n }\n xhr.withCredentials = !!options.withCredentials;\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n return xhr;\n };\n processResponse = function (response, type) {\n var parser, script;\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n return response;\n };\n Rails.href = function (element) {\n return element.href;\n };\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n toArray = function (e) {\n return Array.prototype.slice.call(e);\n };\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n if (matches(input, 'fieldset[disabled] *')) {\n return;\n }\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n if (additionalParam) {\n params.push(additionalParam);\n }\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n Rails.confirm = function (message, element) {\n return confirm(message);\n };\n allowAction = function (element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n if (!message) {\n return true;\n }\n answer = false;\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n callback = fire(element, 'confirm:complete', [answer]);\n }\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n Rails.enableElement = function (e) {\n var element;\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n element = e.target;\n } else {\n element = e;\n }\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n disableLinkElement = function (element) {\n var replacement;\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n replacement = element.getAttribute('data-disable-with');\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n enableLinkElement = function (element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n disableFormElements = function (form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n disableFormElement = function (element) {\n var replacement;\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n replacement = element.getAttribute('data-disable-with');\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n enableFormElements = function (form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n enableFormElement = function (element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n setData(element, 'ujs:enable-with', null);\n }\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n isXhrRedirect = function (event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n if (!method) {\n return;\n }\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n isRemote = function (element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n if (!isRemote(element)) {\n return true;\n }\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function (xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function () {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function () {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function () {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n if (!form) {\n return;\n }\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n if (typeof module === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\nimport Rails from \"@rails/ujs\"\n// import Turbolinks from \"turbolinks\"\n// import * as ActiveStorage from \"@rails/activestorage\"\n// import \"channels\"\n\nimport 'ace-builds/src-noconflict/ace'\nimport 'ace-builds/src-noconflict/mode-sql'\nimport 'ace-builds/src-noconflict/theme-ambiance'\n\nimport '../javascripts/scuttle'\n\n// css\nimport 'bootstrap/dist/css/bootstrap.css'\n\nRails.start()\n// Turbolinks.start()\n// ActiveStorage.start()\n","/* ***** 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 var ACE_NAMESPACE = \"ace\";\n var global = function () {\n return this;\n }();\n if (!global && typeof window != \"undefined\") global = window; // strict mode\n\n if (!ACE_NAMESPACE && typeof requirejs !== \"undefined\") return;\n var define = function (module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original) define.original.apply(this, arguments);else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2) payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n };\n define.modules = {};\n define.payloads = {};\n\n /**\n * Get at functionality define()ed using the function above\n */\n var _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) return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n };\n var require = function (module, callback) {\n var packagedModule = _require(\"\", module, callback);\n if (packagedModule == undefined && require.original) return require.original.apply(this, arguments);\n return packagedModule;\n };\n var 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 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 */\n var lookup = function (parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\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 var req = function (module, callback) {\n return _require(moduleName, module, callback);\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 function exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns]) global[ns] = {};\n root = global[ns];\n }\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\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 exportAce(ACE_NAMESPACE);\n})();\nace.define(\"ace/lib/regexp\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var real = {\n exec: RegExp.prototype.exec,\n test: RegExp.prototype.test,\n match: String.prototype.match,\n replace: String.prototype.replace,\n split: String.prototype.split\n },\n compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined,\n // check `exec` handling of nonparticipating capturing groups\n compliantLastIndexIncrement = function () {\n var x = /^/g;\n real.test.call(x, \"\");\n return !x.lastIndex;\n }();\n if (compliantLastIndexIncrement && compliantExecNpcg) return;\n RegExp.prototype.exec = function (str) {\n var match = real.exec.apply(this, arguments),\n name,\n r2;\n if (typeof str == 'string' && match) {\n if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n real.replace.call(str.slice(match.index), r2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n if (this._xregexp && this._xregexp.captureNames) {\n for (var i = 1; i < match.length; i++) {\n name = this._xregexp.captureNames[i - 1];\n if (name) match[name] = match[i];\n }\n }\n if (!compliantLastIndexIncrement && this.global && !match[0].length && this.lastIndex > match.index) this.lastIndex--;\n }\n return match;\n };\n if (!compliantLastIndexIncrement) {\n RegExp.prototype.test = function (str) {\n var match = real.exec.call(this, str);\n if (match && this.global && !match[0].length && this.lastIndex > match.index) this.lastIndex--;\n return !!match;\n };\n }\n function getNativeFlags(regex) {\n return (regex.global ? \"g\" : \"\") + (regex.ignoreCase ? \"i\" : \"\") + (regex.multiline ? \"m\" : \"\") + (regex.extended ? \"x\" : \"\") + (\n // Proposed for ES4; included in AS3\n regex.sticky ? \"y\" : \"\");\n }\n function indexOf(array, item, from) {\n if (Array.prototype.indexOf)\n // Use the native array method if available\n return array.indexOf(item, from);\n for (var i = from || 0; i < array.length; i++) {\n if (array[i] === item) return i;\n }\n return -1;\n }\n});\nace.define(\"ace/lib/es5-shim\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n function Empty() {}\n if (!Function.prototype.bind) {\n Function.prototype.bind = function bind(that) {\n // .length is 1\n var target = this;\n if (typeof target != \"function\") {\n throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n }\n var args = slice.call(arguments, 1); // for normal call\n var bound = function () {\n if (this instanceof bound) {\n var result = target.apply(this, args.concat(slice.call(arguments)));\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(that, args.concat(slice.call(arguments)));\n }\n };\n if (target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n return bound;\n };\n }\n var call = Function.prototype.call;\n var prototypeOfArray = Array.prototype;\n var prototypeOfObject = Object.prototype;\n var slice = prototypeOfArray.slice;\n var _toString = call.bind(prototypeOfObject.toString);\n var owns = call.bind(prototypeOfObject.hasOwnProperty);\n var defineGetter;\n var defineSetter;\n var lookupGetter;\n var lookupSetter;\n var supportsAccessors;\n if (supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\")) {\n defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n }\n if ([1, 2].splice(0).length != 2) {\n if (function () {\n // test IE < 9 to splice bug - see issue #138\n function makeArray(l) {\n var a = new Array(l + 2);\n a[0] = a[1] = 0;\n return a;\n }\n var array = [],\n lengthBefore;\n array.splice.apply(array, makeArray(20));\n array.splice.apply(array, makeArray(26));\n lengthBefore = array.length; //46\n array.splice(5, 0, \"XXX\"); // add one element\n\n lengthBefore + 1 == array.length;\n if (lengthBefore + 1 == array.length) {\n return true; // has right splice implementation without bugs\n }\n }()) {\n //IE 6/7\n var array_splice = Array.prototype.splice;\n Array.prototype.splice = function (start, deleteCount) {\n if (!arguments.length) {\n return [];\n } else {\n return array_splice.apply(this, [start === void 0 ? 0 : start, deleteCount === void 0 ? this.length - start : deleteCount].concat(slice.call(arguments, 2)));\n }\n };\n } else {\n //IE8\n Array.prototype.splice = function (pos, removeCount) {\n var length = this.length;\n if (pos > 0) {\n if (pos > length) pos = length;\n } else if (pos == void 0) {\n pos = 0;\n } else if (pos < 0) {\n pos = Math.max(length + pos, 0);\n }\n if (!(pos + removeCount < length)) removeCount = length - pos;\n var removed = this.slice(pos, pos + removeCount);\n var insert = slice.call(arguments, 2);\n var add = insert.length;\n if (pos === length) {\n if (add) {\n this.push.apply(this, insert);\n }\n } else {\n var remove = Math.min(removeCount, length - pos);\n var tailOldPos = pos + remove;\n var tailNewPos = tailOldPos + add - remove;\n var tailCount = length - tailOldPos;\n var lengthAfterRemove = length - remove;\n if (tailNewPos < tailOldPos) {\n // case A\n for (var i = 0; i < tailCount; ++i) {\n this[tailNewPos + i] = this[tailOldPos + i];\n }\n } else if (tailNewPos > tailOldPos) {\n // case B\n for (i = tailCount; i--;) {\n this[tailNewPos + i] = this[tailOldPos + i];\n }\n } // else, add == remove (nothing to do)\n\n if (add && pos === lengthAfterRemove) {\n this.length = lengthAfterRemove; // truncate array\n this.push.apply(this, insert);\n } else {\n this.length = lengthAfterRemove + add; // reserves space\n for (i = 0; i < add; ++i) {\n this[pos + i] = insert[i];\n }\n }\n }\n return removed;\n };\n }\n }\n if (!Array.isArray) {\n Array.isArray = function isArray(obj) {\n return _toString(obj) == \"[object Array]\";\n };\n }\n var boxedString = Object(\"a\"),\n splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n if (!Array.prototype.forEach) {\n Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n thisp = arguments[1],\n i = -1,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(); // TODO message\n }\n\n while (++i < length) {\n if (i in self) {\n fun.call(thisp, self[i], i, object);\n }\n }\n };\n }\n if (!Array.prototype.map) {\n Array.prototype.map = function map(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n result = Array(length),\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n for (var i = 0; i < length; i++) {\n if (i in self) result[i] = fun.call(thisp, self[i], i, object);\n }\n return result;\n };\n }\n if (!Array.prototype.filter) {\n Array.prototype.filter = function filter(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n result = [],\n value,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n for (var i = 0; i < length; i++) {\n if (i in self) {\n value = self[i];\n if (fun.call(thisp, value, i, object)) {\n result.push(value);\n }\n }\n }\n return result;\n };\n }\n if (!Array.prototype.every) {\n Array.prototype.every = function every(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n for (var i = 0; i < length; i++) {\n if (i in self && !fun.call(thisp, self[i], i, object)) {\n return false;\n }\n }\n return true;\n };\n }\n if (!Array.prototype.some) {\n Array.prototype.some = function some(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0,\n thisp = arguments[1];\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n for (var i = 0; i < length; i++) {\n if (i in self && fun.call(thisp, self[i], i, object)) {\n return true;\n }\n }\n return false;\n };\n }\n if (!Array.prototype.reduce) {\n Array.prototype.reduce = function reduce(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n var i = 0;\n var result;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i++];\n break;\n }\n if (++i >= length) {\n throw new TypeError(\"reduce of empty array with no initial value\");\n }\n } while (true);\n }\n for (; i < length; i++) {\n if (i in self) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n }\n return result;\n };\n }\n if (!Array.prototype.reduceRight) {\n Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : object,\n length = self.length >>> 0;\n if (_toString(fun) != \"[object Function]\") {\n throw new TypeError(fun + \" is not a function\");\n }\n if (!length && arguments.length == 1) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n var result,\n i = length - 1;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i--];\n break;\n }\n if (--i < 0) {\n throw new TypeError(\"reduceRight of empty array with no initial value\");\n }\n } while (true);\n }\n do {\n if (i in this) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n } while (i--);\n return result;\n };\n }\n if (!Array.prototype.indexOf || [0, 1].indexOf(1, 2) != -1) {\n Array.prototype.indexOf = function indexOf(sought /*, fromIndex */) {\n var self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : toObject(this),\n length = self.length >>> 0;\n if (!length) {\n return -1;\n }\n var i = 0;\n if (arguments.length > 1) {\n i = toInteger(arguments[1]);\n }\n i = i >= 0 ? i : Math.max(0, length + i);\n for (; i < length; i++) {\n if (i in self && self[i] === sought) {\n return i;\n }\n }\n return -1;\n };\n }\n if (!Array.prototype.lastIndexOf || [0, 1].lastIndexOf(0, -3) != -1) {\n Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n var self = splitString && _toString(this) == \"[object String]\" ? this.split(\"\") : toObject(this),\n length = self.length >>> 0;\n if (!length) {\n return -1;\n }\n var i = length - 1;\n if (arguments.length > 1) {\n i = Math.min(i, toInteger(arguments[1]));\n }\n i = i >= 0 ? i : length - Math.abs(i);\n for (; i >= 0; i--) {\n if (i in self && sought === self[i]) {\n return i;\n }\n }\n return -1;\n };\n }\n if (!Object.getPrototypeOf) {\n Object.getPrototypeOf = function getPrototypeOf(object) {\n return object.__proto__ || (object.constructor ? object.constructor.prototype : prototypeOfObject);\n };\n }\n if (!Object.getOwnPropertyDescriptor) {\n var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" + \"non-object: \";\n Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n if (typeof object != \"object\" && typeof object != \"function\" || object === null) throw new TypeError(ERR_NON_OBJECT + object);\n if (!owns(object, property)) return;\n var descriptor, getter, setter;\n descriptor = {\n enumerable: true,\n configurable: true\n };\n if (supportsAccessors) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n var getter = lookupGetter(object, property);\n var setter = lookupSetter(object, property);\n object.__proto__ = prototype;\n if (getter || setter) {\n if (getter) descriptor.get = getter;\n if (setter) descriptor.set = setter;\n return descriptor;\n }\n }\n descriptor.value = object[property];\n return descriptor;\n };\n }\n if (!Object.getOwnPropertyNames) {\n Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n return Object.keys(object);\n };\n }\n if (!Object.create) {\n var createEmpty;\n if (Object.prototype.__proto__ === null) {\n createEmpty = function () {\n return {\n \"__proto__\": null\n };\n };\n } else {\n createEmpty = function () {\n var empty = {};\n for (var i in empty) empty[i] = null;\n empty.constructor = empty.hasOwnProperty = empty.propertyIsEnumerable = empty.isPrototypeOf = empty.toLocaleString = empty.toString = empty.valueOf = empty.__proto__ = null;\n return empty;\n };\n }\n Object.create = function create(prototype, properties) {\n var object;\n if (prototype === null) {\n object = createEmpty();\n } else {\n if (typeof prototype != \"object\") throw new TypeError(\"typeof prototype[\" + typeof prototype + \"] != 'object'\");\n var Type = function () {};\n Type.prototype = prototype;\n object = new Type();\n object.__proto__ = prototype;\n }\n if (properties !== void 0) Object.defineProperties(object, properties);\n return object;\n };\n }\n function doesDefinePropertyWork(object) {\n try {\n Object.defineProperty(object, \"sentinel\", {});\n return \"sentinel\" in object;\n } catch (exception) {}\n }\n if (Object.defineProperty) {\n var definePropertyWorksOnObject = doesDefinePropertyWork({});\n var definePropertyWorksOnDom = typeof document == \"undefined\" || doesDefinePropertyWork(document.createElement(\"div\"));\n if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n var definePropertyFallback = Object.defineProperty;\n }\n }\n if (!Object.defineProperty || definePropertyFallback) {\n var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \";\n var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" + \"on this javascript engine\";\n Object.defineProperty = function defineProperty(object, property, descriptor) {\n if (typeof object != \"object\" && typeof object != \"function\" || object === null) throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n if (typeof descriptor != \"object\" && typeof descriptor != \"function\" || descriptor === null) throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n if (definePropertyFallback) {\n try {\n return definePropertyFallback.call(Object, object, property, descriptor);\n } catch (exception) {}\n }\n if (owns(descriptor, \"value\")) {\n if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n delete object[property];\n object[property] = descriptor.value;\n object.__proto__ = prototype;\n } else {\n object[property] = descriptor.value;\n }\n } else {\n if (!supportsAccessors) throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n if (owns(descriptor, \"get\")) defineGetter(object, property, descriptor.get);\n if (owns(descriptor, \"set\")) defineSetter(object, property, descriptor.set);\n }\n return object;\n };\n }\n if (!Object.defineProperties) {\n Object.defineProperties = function defineProperties(object, properties) {\n for (var property in properties) {\n if (owns(properties, property)) Object.defineProperty(object, property, properties[property]);\n }\n return object;\n };\n }\n if (!Object.seal) {\n Object.seal = function seal(object) {\n return object;\n };\n }\n if (!Object.freeze) {\n Object.freeze = function freeze(object) {\n return object;\n };\n }\n try {\n Object.freeze(function () {});\n } catch (exception) {\n Object.freeze = function freeze(freezeObject) {\n return function freeze(object) {\n if (typeof object == \"function\") {\n return object;\n } else {\n return freezeObject(object);\n }\n };\n }(Object.freeze);\n }\n if (!Object.preventExtensions) {\n Object.preventExtensions = function preventExtensions(object) {\n return object;\n };\n }\n if (!Object.isSealed) {\n Object.isSealed = function isSealed(object) {\n return false;\n };\n }\n if (!Object.isFrozen) {\n Object.isFrozen = function isFrozen(object) {\n return false;\n };\n }\n if (!Object.isExtensible) {\n Object.isExtensible = function isExtensible(object) {\n if (Object(object) === object) {\n throw new TypeError(); // TODO message\n }\n\n var name = '';\n while (owns(object, name)) {\n name += '?';\n }\n object[name] = true;\n var returnValue = owns(object, name);\n delete object[name];\n return returnValue;\n };\n }\n if (!Object.keys) {\n var hasDontEnumBug = true,\n dontEnums = [\"toString\", \"toLocaleString\", \"valueOf\", \"hasOwnProperty\", \"isPrototypeOf\", \"propertyIsEnumerable\", \"constructor\"],\n dontEnumsLength = dontEnums.length;\n for (var key in {\n \"toString\": null\n }) {\n hasDontEnumBug = false;\n }\n Object.keys = function keys(object) {\n if (typeof object != \"object\" && typeof object != \"function\" || object === null) {\n throw new TypeError(\"Object.keys called on a non-object\");\n }\n var keys = [];\n for (var name in object) {\n if (owns(object, name)) {\n keys.push(name);\n }\n }\n if (hasDontEnumBug) {\n for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n var dontEnum = dontEnums[i];\n if (owns(object, dontEnum)) {\n keys.push(dontEnum);\n }\n }\n }\n return keys;\n };\n }\n if (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n }\n var ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" + \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" + \"\\u2029\\uFEFF\";\n if (!String.prototype.trim || ws.trim()) {\n ws = \"[\" + ws + \"]\";\n var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n trimEndRegexp = new RegExp(ws + ws + \"*$\");\n String.prototype.trim = function trim() {\n return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n };\n }\n function toInteger(n) {\n n = +n;\n if (n !== n) {\n // isNaN\n n = 0;\n } else if (n !== 0 && n !== 1 / 0 && n !== -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n return n;\n }\n function isPrimitive(input) {\n var type = typeof input;\n return input === null || type === \"undefined\" || type === \"boolean\" || type === \"number\" || type === \"string\";\n }\n function toPrimitive(input) {\n var val, valueOf, toString;\n if (isPrimitive(input)) {\n return input;\n }\n valueOf = input.valueOf;\n if (typeof valueOf === \"function\") {\n val = valueOf.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n toString = input.toString;\n if (typeof toString === \"function\") {\n val = toString.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n throw new TypeError();\n }\n var toObject = function (o) {\n if (o == null) {\n // this matches both null and undefined\n throw new TypeError(\"can't convert \" + o + \" to object\");\n }\n return Object(o);\n };\n});\nace.define(\"ace/lib/fixoldbrowsers\", [\"require\", \"exports\", \"module\", \"ace/lib/regexp\", \"ace/lib/es5-shim\"], function (require, exports, module) {\n \"use strict\";\n\n require(\"./regexp\");\n require(\"./es5-shim\");\n});\nace.define(\"ace/lib/dom\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n exports.getDocumentHead = function (doc) {\n if (!doc) doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n };\n exports.createElement = function (tag, ns) {\n return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag);\n };\n exports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n };\n exports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n };\n exports.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 exports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g),\n 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) classes.push(name);\n el.className = classes.join(\" \");\n return add;\n };\n exports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n };\n exports.hasCssString = function (id, doc) {\n var index = 0,\n sheets;\n doc = doc || document;\n if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\n while (index < sheets.length) if (sheets[index++].owningElement.id === id) return true;\n } else if (sheets = doc.getElementsByTagName(\"style\")) {\n while (index < sheets.length) if (sheets[index++].id === id) return true;\n }\n return false;\n };\n exports.importCssString = function importCssString(cssText, id, doc) {\n doc = doc || document;\n if (id && exports.hasCssString(id, doc)) return null;\n var style;\n if (id) cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n if (doc.createStyleSheet) {\n style = doc.createStyleSheet();\n style.cssText = cssText;\n if (id) style.owningElement.id = id;\n } else {\n style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id) style.id = id;\n exports.getDocumentHead(doc).appendChild(style);\n }\n };\n exports.importCssStylsheet = function (uri, doc) {\n if (doc.createStyleSheet) {\n doc.createStyleSheet(uri);\n } else {\n var link = exports.createElement('link');\n link.rel = 'stylesheet';\n link.href = uri;\n exports.getDocumentHead(doc).appendChild(link);\n }\n };\n exports.getInnerWidth = function (element) {\n return parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) + parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + element.clientWidth;\n };\n exports.getInnerHeight = function (element) {\n return parseInt(exports.computedStyle(element, \"paddingTop\"), 10) + parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) + element.clientHeight;\n };\n exports.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 var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\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 outer.appendChild(inner);\n var body = document.documentElement;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n body.removeChild(outer);\n return noScrollbar - withScrollbar;\n };\n if (typeof document == \"undefined\") {\n exports.importCssString = function () {};\n return;\n }\n if (window.pageYOffset !== undefined) {\n exports.getPageScrollTop = function () {\n return window.pageYOffset;\n };\n exports.getPageScrollLeft = function () {\n return window.pageXOffset;\n };\n } else {\n exports.getPageScrollTop = function () {\n return document.body.scrollTop;\n };\n exports.getPageScrollLeft = function () {\n return document.body.scrollLeft;\n };\n }\n if (window.getComputedStyle) exports.computedStyle = function (element, style) {\n if (style) return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\n return window.getComputedStyle(element, \"\") || {};\n };else exports.computedStyle = function (element, style) {\n if (style) return element.currentStyle[style];\n return element.currentStyle;\n };\n exports.setInnerHtml = function (el, innerHtml) {\n var element = el.cloneNode(false); //document.createElement(\"div\");\n element.innerHTML = innerHtml;\n el.parentNode.replaceChild(element, el);\n return element;\n };\n if (\"textContent\" in document.documentElement) {\n exports.setInnerText = function (el, innerText) {\n el.textContent = innerText;\n };\n exports.getInnerText = function (el) {\n return el.textContent;\n };\n } else {\n exports.setInnerText = function (el, innerText) {\n el.innerText = innerText;\n };\n exports.getInnerText = function (el) {\n return el.innerText;\n };\n }\n exports.getParentWindow = function (document) {\n return document.defaultView || document.parentWindow;\n };\n});\nace.define(\"ace/lib/oop\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n exports.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 exports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n };\n exports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n };\n});\nace.define(\"ace/lib/keys\", [\"require\", \"exports\", \"module\", \"ace/lib/fixoldbrowsers\", \"ace/lib/oop\"], function (require, exports, module) {\n \"use strict\";\n\n require(\"./fixoldbrowsers\");\n var oop = require(\"./oop\");\n var Keys = function () {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift',\n 17: 'Ctrl',\n 18: 'Alt',\n 224: 'Meta'\n },\n KEY_MODS: {\n \"ctrl\": 1,\n \"alt\": 2,\n \"option\": 2,\n \"shift\": 4,\n \"super\": 8,\n \"meta\": 8,\n \"command\": 8,\n \"cmd\": 8\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 PRINTABLE_KEYS: {\n 32: ' ',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 61: '=',\n 65: 'a',\n 66: 'b',\n 67: 'c',\n 68: 'd',\n 69: 'e',\n 70: 'f',\n 71: 'g',\n 72: 'h',\n 73: 'i',\n 74: 'j',\n 75: 'k',\n 76: 'l',\n 77: 'm',\n 78: 'n',\n 79: 'o',\n 80: 'p',\n 81: 'q',\n 82: 'r',\n 83: 's',\n 84: 't',\n 85: 'u',\n 86: 'v',\n 87: 'w',\n 88: 'x',\n 89: 'y',\n 90: 'z',\n 107: '+',\n 109: '-',\n 110: '.',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\",\n 111: '/',\n 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 (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 ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n return ret;\n }();\n oop.mixin(exports, Keys);\n exports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\") keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n };\n});\nace.define(\"ace/lib/useragent\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n exports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n };\n exports.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 };\n if (typeof navigator != \"object\") return;\n var os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\n var ua = navigator.userAgent;\n exports.isWin = os == \"win\";\n exports.isMac = os == \"mac\";\n exports.isLinux = os == \"linux\";\n exports.isIE = navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0 ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]) : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\n\n exports.isOldIE = exports.isIE && exports.isIE < 9;\n exports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\n exports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv:(\\d+)/) || [])[1], 10) < 4;\n exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\n exports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n exports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n exports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n exports.isIPad = ua.indexOf(\"iPad\") >= 0;\n exports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n exports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n if (exports.isIOS) exports.isMac = true;\n});\nace.define(\"ace/lib/event\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var keys = require(\"./keys\");\n var useragent = require(\"./useragent\");\n var pressedKeys = null;\n var ts = 0;\n exports.addListener = function (elem, type, callback) {\n if (elem.addEventListener) {\n return elem.addEventListener(type, callback, false);\n }\n if (elem.attachEvent) {\n var wrapper = function () {\n callback.call(elem, window.event);\n };\n callback._wrapper = wrapper;\n elem.attachEvent(\"on\" + type, wrapper);\n }\n };\n exports.removeListener = function (elem, type, callback) {\n if (elem.removeEventListener) {\n return elem.removeEventListener(type, callback, false);\n }\n if (elem.detachEvent) {\n elem.detachEvent(\"on\" + type, callback._wrapper || callback);\n }\n };\n exports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n };\n exports.stopPropagation = function (e) {\n if (e.stopPropagation) e.stopPropagation();else e.cancelBubble = true;\n };\n exports.preventDefault = function (e) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n };\n exports.getButton = function (e) {\n if (e.type == \"dblclick\") return 0;\n if (e.type == \"contextmenu\" || useragent.isMac && e.ctrlKey && !e.altKey && !e.shiftKey) return 2;\n if (e.preventDefault) {\n return e.button;\n } else {\n return {\n 1: 0,\n 2: 2,\n 4: 1\n }[e.button];\n }\n };\n exports.capture = function (el, eventHandler, releaseCaptureHandler) {\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n exports.removeListener(document, \"mousemove\", eventHandler, true);\n exports.removeListener(document, \"mouseup\", onMouseUp, true);\n exports.removeListener(document, \"dragstart\", onMouseUp, true);\n }\n exports.addListener(document, \"mousemove\", eventHandler, true);\n exports.addListener(document, \"mouseup\", onMouseUp, true);\n exports.addListener(document, \"dragstart\", onMouseUp, true);\n return onMouseUp;\n };\n exports.addTouchMoveListener = function (el, callback) {\n var startx, starty;\n exports.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n var touchObj = touches[0];\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n });\n exports.addListener(el, \"touchmove\", function (e) {\n var touches = e.touches;\n if (touches.length > 1) return;\n var touchObj = touches[0];\n e.wheelX = startx - touchObj.clientX;\n e.wheelY = starty - touchObj.clientY;\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n callback(e);\n });\n };\n exports.addMouseWheelListener = function (el, callback) {\n if (\"onmousewheel\" in el) {\n exports.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 });\n } else if (\"onwheel\" in el) {\n exports.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 callback(e);\n });\n } else {\n exports.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 });\n }\n };\n exports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\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) 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) clicks = 1;\n if (timer) clearTimeout(timer);\n timer = setTimeout(function () {\n timer = null;\n }, timeouts[clicks - 1] || 600);\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4) clicks = 0;else if (clicks > 1) return eventHandler[callbackName](eventNames[clicks], e);\n }\n function onDblclick(e) {\n clicks = 2;\n if (timer) clearTimeout(timer);\n timer = setTimeout(function () {\n timer = null;\n }, timeouts[clicks - 1] || 600);\n eventHandler[callbackName](\"mousedown\", e);\n eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements)) elements = [elements];\n elements.forEach(function (el) {\n exports.addListener(el, \"mousedown\", onMousedown);\n if (useragent.isOldIE) exports.addListener(el, \"dblclick\", onDblclick);\n });\n };\n var getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window) ? function (e) {\n return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n } : function (e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n };\n exports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n };\n function normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\"))) hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3) pressedKeys.altGr = 0;else 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) ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50) pressedKeys.altGr = true;\n }\n }\n }\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (hashId & 8 && keyCode >= 91 && keyCode <= 93) {\n keyCode = -1;\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) return;\n }\n }\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented) return;else hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n return callback(e, hashId, keyCode);\n }\n exports.addCommandKeyListener = function (el, callback) {\n var addListener = exports.addListener;\n if (useragent.isOldGecko || useragent.isOpera && !(\"KeyboardEvent\" in window)) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function (e) {\n lastKeyDownKeyCode = e.keyCode;\n });\n addListener(el, \"keypress\", function (e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n });\n } else {\n var lastDefaultPrevented = null;\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 });\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 });\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n });\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n };\n function resetPressedKeys() {\n pressedKeys = Object.create(null);\n }\n if (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 exports.addListener(win, \"message\", function listener(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n exports.removeListener(win, \"message\", listener);\n callback();\n }\n });\n win.postMessage(messageName, \"*\");\n };\n }\n exports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame);\n if (exports.nextFrame) exports.nextFrame = exports.nextFrame.bind(window);else exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n});\nace.define(\"ace/lib/lang\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n exports.last = function (a) {\n return a[a.length - 1];\n };\n exports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n };\n exports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1) result += string;\n if (count >>= 1) string += string;\n }\n return result;\n };\n var trimBeginRegexp = /^\\s\\s*/;\n var trimEndRegexp = /\\s\\s*$/;\n exports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n };\n exports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n };\n exports.copyObject = function (obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n };\n exports.copyArray = function (array) {\n var copy = [];\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && typeof array[i] == \"object\") copy[i] = this.copyObject(array[i]);else copy[i] = array[i];\n }\n return copy;\n };\n exports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj) return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\") return obj;\n copy = {};\n for (var key in obj) copy[key] = deepCopy(obj[key]);\n return copy;\n };\n exports.arrayToMap = function (arr) {\n var map = {};\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n };\n exports.createMap = function (props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n };\n exports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n };\n exports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n };\n exports.escapeHTML = function (str) {\n return str.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/ PLACEHOLDER.length) data = data.substr(9);else if (data.substr(0, 4) == PLACEHOLDER.substr(0, 4)) data = data.substr(4, data.length - PLACEHOLDER.length + 1);else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1);\n if (data == PLACEHOLDER.charAt(0)) {} else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1);\n if (data) host.onTextInput(data);\n }\n if (copied) {\n copied = false;\n }\n if (afterContextMenu) afterContextMenu = false;\n };\n var onInput = function (e) {\n if (inComposition) return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n var handleClipboardData = function (e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA) 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) return handleClipboardData(e, data, true);\n }\n };\n var doCopy = function (e, isCut) {\n var data = host.getCopyText();\n if (!data) return event.preventDefault(e);\n if (handleClipboardData(e, data)) {\n if (useragent.isIOS) {\n cut = isCut;\n text.value = \"\\n aa\" + data + \"a a\\n\";\n text.setSelectionRange(4, 4 + data.length);\n copied = {\n value: data\n };\n }\n isCut ? host.onCut() : host.onCopy();\n if (!useragent.isIOS) event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function () {\n copied = false;\n resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n var onCut = function (e) {\n doCopy(e, true);\n };\n var onCopy = function (e) {\n doCopy(e, false);\n };\n var onPaste = function (e) {\n var data = handleClipboardData(e);\n if (typeof data == \"string\") {\n if (data) host.onPaste(data, e);\n if (useragent.isIE) setTimeout(resetSelection);\n event.preventDefault(e);\n } else {\n text.value = \"\";\n pasted = true;\n }\n };\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n event.addListener(text, \"select\", onSelect);\n event.addListener(text, \"input\", onInput);\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\n var onCompositionStart = function (e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n host.session.markUndoGroup();\n };\n var onCompositionUpdate = function () {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly) return;\n var val = text.value.replace(/\\x01/g, \"\");\n if (inComposition.lastValue === val) return;\n host.onCompositionUpdate(val);\n if (inComposition.lastValue) host.undo();\n if (inComposition.canUndo) inComposition.lastValue = val;\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n var onCompositionEnd = function (e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function () {\n timer = null;\n var str = text.value.replace(/\\x01/g, \"\");\n if (inComposition) return;else if (str == c.lastValue) resetValue();else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n inputHandler = function compositionInputHandler(str) {\n if (timer) clearTimeout(timer);\n str = str.replace(/\\x01/g, \"\");\n if (str == c.lastValue) return \"\";\n if (c.lastValue && timer) host.undo();\n return str;\n };\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n var needsOnInput = !!useragent.isChrome && useragent.isChrome >= 53 || !!useragent.isWebKit && useragent.isWebKit >= 603;\n if (needsOnInput) {\n onInput();\n }\n };\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n event.addListener(text, \"compositionstart\", onCompositionStart);\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function () {\n syncComposition.schedule();\n });\n } else {\n event.addListener(text, \"keyup\", function () {\n syncComposition.schedule();\n });\n event.addListener(text, \"keydown\", function () {\n syncComposition.schedule();\n });\n }\n event.addListener(text, \"compositionend\", onCompositionEnd);\n this.getElement = function () {\n return text;\n };\n this.setReadOnly = function (readOnly) {\n text.readOnly = readOnly;\n };\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n host._emit(\"nativecontextmenu\", {\n target: host,\n domEvent: e\n });\n this.moveToMouse(e, true);\n };\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle) tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + \"height:\" + text.style.height + \";\" + (useragent.isIE ? \"opacity:0.1;\" : \"\");\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 text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n };\n move(e);\n if (e.type != \"mousedown\") return;\n if (host.renderer.$keepTextAreaAtCursor) host.renderer.$keepTextAreaAtCursor = null;\n clearTimeout(closeTimeout);\n if (useragent.isWin) event.capture(host.container, move, onContextMenuClose);\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 if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\n var onContextMenu = function (e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n if (useragent.isIOS) {\n var typingResetTimeout = null;\n var typing = false;\n parentNode.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n });\n parentNode.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n });\n var detectArrowKeys = function (e) {\n if (document.activeElement !== text) return;\n if (typing) return;\n if (cut) {\n return setTimeout(function () {\n cut = false;\n }, 100);\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n text.setSelectionRange(4, 5);\n if (selectionStart == selectionEnd) {\n switch (selectionStart) {\n case 0:\n host.onCommandKey(null, 0, KEYS.up);\n break;\n case 1:\n host.onCommandKey(null, 0, KEYS.home);\n break;\n case 2:\n host.onCommandKey(null, MODS.option, KEYS.left);\n break;\n case 4:\n host.onCommandKey(null, 0, KEYS.left);\n break;\n case 5:\n host.onCommandKey(null, 0, KEYS.right);\n break;\n case 7:\n host.onCommandKey(null, MODS.option, KEYS.right);\n break;\n case 8:\n host.onCommandKey(null, 0, KEYS.end);\n break;\n case 9:\n host.onCommandKey(null, 0, KEYS.down);\n break;\n }\n } else {\n switch (selectionEnd) {\n case 6:\n host.onCommandKey(null, MODS.shift, KEYS.right);\n break;\n case 7:\n host.onCommandKey(null, MODS.shift | MODS.option, KEYS.right);\n break;\n case 8:\n host.onCommandKey(null, MODS.shift, KEYS.end);\n break;\n case 9:\n host.onCommandKey(null, MODS.shift, KEYS.down);\n break;\n }\n switch (selectionStart) {\n case 0:\n host.onCommandKey(null, MODS.shift, KEYS.up);\n break;\n case 1:\n host.onCommandKey(null, MODS.shift, KEYS.home);\n break;\n case 2:\n host.onCommandKey(null, MODS.shift | MODS.option, KEYS.left);\n break;\n case 3:\n host.onCommandKey(null, MODS.shift, KEYS.left);\n break;\n }\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n };\n exports.TextInput = TextInput;\n});\nace.define(\"ace/keyboard/textinput\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/keyboard/textinput_ios\"], function (require, exports, module) {\n \"use strict\";\n\n var event = require(\"../lib/event\");\n var useragent = require(\"../lib/useragent\");\n var dom = require(\"../lib/dom\");\n var lang = require(\"../lib/lang\");\n var BROKEN_SETDATA = useragent.isChrome < 18;\n var USE_IE_MIME_TYPE = useragent.isIE;\n var TextInputIOS = require(\"./textinput_ios\").TextInput;\n var TextInput = function (parentNode, host) {\n if (useragent.isIOS) return TextInputIOS.call(this, parentNode, host);\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n var PLACEHOLDER = \"\\u2028\\u2028\";\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var tempStyle = '';\n var isSelectionEmpty = true;\n try {\n var isFocused = document.activeElement === text;\n } catch (e) {}\n event.addListener(text, \"blur\", function (e) {\n host.onBlur(e);\n isFocused = false;\n });\n event.addListener(text, \"focus\", function (e) {\n isFocused = true;\n host.onFocus(e);\n resetSelection();\n });\n this.focus = function () {\n if (tempStyle) return text.focus();\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n text.focus();\n setTimeout(function () {\n text.style.position = \"\";\n if (text.style.top == \"0px\") text.style.top = top;\n }, 0);\n };\n this.blur = function () {\n text.blur();\n };\n this.isFocused = function () {\n return isFocused;\n };\n var syncSelection = lang.delayedCall(function () {\n isFocused && resetSelection(isSelectionEmpty);\n });\n var syncValue = lang.delayedCall(function () {\n if (!inComposition) {\n text.value = PLACEHOLDER;\n isFocused && resetSelection();\n }\n });\n function resetSelection(isEmpty) {\n if (inComposition) return;\n inComposition = true;\n if (inputHandler) {\n var selectionStart = 0;\n var selectionEnd = isEmpty ? 0 : text.value.length - 1;\n } else {\n var selectionStart = isEmpty ? 2 : 1;\n var selectionEnd = 2;\n }\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n } catch (e) {}\n inComposition = false;\n }\n function resetValue() {\n if (inComposition) return;\n text.value = PLACEHOLDER;\n if (useragent.isWebKit) syncValue.schedule();\n }\n useragent.isWebKit || host.addEventListener('changeSelection', function () {\n if (host.selection.isEmpty() != isSelectionEmpty) {\n isSelectionEmpty = !isSelectionEmpty;\n syncSelection.schedule();\n }\n });\n resetValue();\n if (isFocused) host.onFocus();\n var isAllSelected = function (text) {\n return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n };\n var onSelect = function (e) {\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (inputHandler) {\n resetSelection(host.selection.isEmpty());\n }\n };\n var inputHandler = null;\n this.setInputHandler = function (cb) {\n inputHandler = cb;\n };\n this.getInputHandler = function () {\n return inputHandler;\n };\n var afterContextMenu = false;\n var sendText = function (data) {\n if (inputHandler) {\n data = inputHandler(data);\n inputHandler = null;\n }\n if (pasted) {\n resetSelection();\n if (data) host.onPaste(data);\n pasted = false;\n } else if (data == PLACEHOLDER.charAt(0)) {\n if (afterContextMenu) host.execCommand(\"del\", {\n source: \"ace\"\n });else\n // some versions of android do not fire keydown when pressing backspace\n host.execCommand(\"backspace\", {\n source: \"ace\"\n });\n } else {\n if (data.substring(0, 2) == PLACEHOLDER) data = data.substr(2);else if (data.charAt(0) == PLACEHOLDER.charAt(0)) data = data.substr(1);else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1);\n if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1);\n if (data) host.onTextInput(data);\n }\n if (afterContextMenu) afterContextMenu = false;\n };\n var onInput = function (e) {\n if (inComposition) return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n var handleClipboardData = function (e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA) 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) return handleClipboardData(e, data, true);\n }\n };\n var doCopy = function (e, isCut) {\n var data = host.getCopyText();\n if (!data) return event.preventDefault(e);\n if (handleClipboardData(e, data)) {\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 resetValue();\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n var onCut = function (e) {\n doCopy(e, true);\n };\n var onCopy = function (e) {\n doCopy(e, false);\n };\n var onPaste = function (e) {\n var data = handleClipboardData(e);\n if (typeof data == \"string\") {\n if (data) host.onPaste(data, e);\n if (useragent.isIE) setTimeout(resetSelection);\n event.preventDefault(e);\n } else {\n text.value = \"\";\n pasted = true;\n }\n };\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n event.addListener(text, \"select\", onSelect);\n event.addListener(text, \"input\", onInput);\n event.addListener(text, \"cut\", onCut);\n event.addListener(text, \"copy\", onCopy);\n event.addListener(text, \"paste\", onPaste);\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) return;\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 });\n }\n var onCompositionStart = function (e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) return;\n inComposition = {};\n inComposition.canUndo = host.session.$undoManager;\n host.onCompositionStart();\n setTimeout(onCompositionUpdate, 0);\n host.on(\"mousedown\", onCompositionEnd);\n if (inComposition.canUndo && !host.selection.isEmpty()) {\n host.insert(\"\");\n host.session.markUndoGroup();\n host.selection.clearSelection();\n }\n host.session.markUndoGroup();\n };\n var onCompositionUpdate = function () {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly) return;\n var val = text.value.replace(/\\u2028/g, \"\");\n if (inComposition.lastValue === val) return;\n host.onCompositionUpdate(val);\n if (inComposition.lastValue) host.undo();\n if (inComposition.canUndo) inComposition.lastValue = val;\n if (inComposition.lastValue) {\n var r = host.selection.getRange();\n host.insert(inComposition.lastValue);\n host.session.markUndoGroup();\n inComposition.range = host.selection.getRange();\n host.selection.setRange(r);\n host.selection.clearSelection();\n }\n };\n var onCompositionEnd = function (e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n var c = inComposition;\n inComposition = false;\n var timer = setTimeout(function () {\n timer = null;\n var str = text.value.replace(/\\u2028/g, \"\");\n if (inComposition) return;else if (str == c.lastValue) resetValue();else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n inputHandler = function compositionInputHandler(str) {\n if (timer) clearTimeout(timer);\n str = str.replace(/\\u2028/g, \"\");\n if (str == c.lastValue) return \"\";\n if (c.lastValue && timer) host.undo();\n return str;\n };\n host.onCompositionEnd();\n host.removeListener(\"mousedown\", onCompositionEnd);\n if (e.type == \"compositionend\" && c.range) {\n host.selection.setRange(c.range);\n }\n var needsOnInput = !!useragent.isChrome && useragent.isChrome >= 53 || !!useragent.isWebKit && useragent.isWebKit >= 603;\n if (needsOnInput) {\n onInput();\n }\n };\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n event.addListener(text, \"compositionstart\", onCompositionStart);\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function () {\n syncComposition.schedule();\n });\n } else {\n event.addListener(text, \"keyup\", function () {\n syncComposition.schedule();\n });\n event.addListener(text, \"keydown\", function () {\n syncComposition.schedule();\n });\n }\n event.addListener(text, \"compositionend\", onCompositionEnd);\n this.getElement = function () {\n return text;\n };\n this.setReadOnly = function (readOnly) {\n text.readOnly = readOnly;\n };\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n host._emit(\"nativecontextmenu\", {\n target: host,\n domEvent: e\n });\n this.moveToMouse(e, true);\n };\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle) tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + \"height:\" + text.style.height + \";\" + (useragent.isIE ? \"opacity:0.1;\" : \"\");\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 text.style.left = e.clientX - left - 2 + \"px\";\n text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n };\n move(e);\n if (e.type != \"mousedown\") return;\n if (host.renderer.$keepTextAreaAtCursor) host.renderer.$keepTextAreaAtCursor = null;\n clearTimeout(closeTimeout);\n if (useragent.isWin) event.capture(host.container, move, onContextMenuClose);\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 if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\n var onContextMenu = function (e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n event.addListener(text, \"mouseup\", onContextMenu);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n });\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n event.addListener(text, \"contextmenu\", onContextMenu);\n };\n exports.TextInput = TextInput;\n});\nace.define(\"ace/mouse/default_handlers\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n var event = require(\"../lib/event\");\n var useragent = require(\"../lib/useragent\");\n var DRAG_OFFSET = 0; // pixels\n var SCROLL_COOLDOWN_T = 250; // milliseconds\n\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\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 editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\", \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n (function () {\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 var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n editor.$blockScrolling++;\n if (selectionEmpty || button == 1) editor.selection.moveToPosition(pos);\n editor.$blockScrolling--;\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla) ev.preventDefault();\n }\n return;\n }\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n this.startSelect = function (pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n editor.$blockScrolling++;\n if (this.mousedownEvent.getShiftKey()) editor.selection.selectToPosition(pos);else if (!waitForClickSelection) editor.selection.moveToPosition(pos);\n if (!waitForClickSelection) this.select();\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n editor.$blockScrolling--;\n };\n this.select = function () {\n var anchor,\n editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n editor.$blockScrolling++;\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\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.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n this.extendSelectionBy = function (unitName) {\n var anchor,\n editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n editor.$blockScrolling++;\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column) 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) 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.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n this.selectEnd = this.selectAllEnd = this.selectByWordsEnd = 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 this.focusWait = function () {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout) this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n this.onDoubleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\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 this.onTripleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\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 this.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n this.onMouseWheel = function (ev) {\n if (ev.getAccelKey()) return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n var editor = this.editor;\n if (!this.$lastScroll) this.$lastScroll = {\n t: 0,\n vx: 0,\n vy: 0,\n allowed: 0\n };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = ev.wheelX / dt;\n var vy = ev.wheelY / dt;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n var direction = Math.abs(vx / vy);\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0)) canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed)) canScroll = true;\n if (canScroll) {\n prevScroll.allowed = t;\n } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.1 * Math.abs(prevScroll.vx) && Math.abs(vy) <= 1.1 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n } else {\n prevScroll.allowed = 0;\n }\n }\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n this.onTouchMove = function (ev) {\n this.editor._emit(\"mousewheel\", ev);\n };\n }).call(DefaultHandlers.prototype);\n exports.DefaultHandlers = DefaultHandlers;\n function calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n }\n function calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row) var cmp = 2 * cursor.column - range.start.column - range.end.column;else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) var cmp = cursor.column - 4;else var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0) return {\n cursor: range.start,\n anchor: range.end\n };else return {\n cursor: range.end,\n anchor: range.start\n };\n }\n});\nace.define(\"ace/tooltip\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n var dom = require(\"./lib/dom\");\n function Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\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 dom.setInnerText(this.getElement(), 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) this.setText(text);\n if (x != null && y != null) this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\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 this.destroy = function () {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n }).call(Tooltip.prototype);\n exports.Tooltip = Tooltip;\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\";\n\n var dom = require(\"../lib/dom\");\n var oop = require(\"../lib/oop\");\n var event = require(\"../lib/event\");\n var Tooltip = require(\"../tooltip\").Tooltip;\n function GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0) return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\") return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey()) selection.selectTo(row, 0);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 var tooltipTimeout, mouseEvent, tooltipAnnotation;\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation) return hideTooltip();\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)) return hideTooltip();\n }\n if (tooltipAnnotation == annotation) return;\n tooltipAnnotation = annotation.text.join(\"
\");\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\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 function hideTooltip() {\n if (tooltipTimeout) tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\n editor.removeEventListener(\"mousewheel\", hideTooltip);\n }\n }\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\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\")) return hideTooltip();\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse) moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout) return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed) showTooltip();else hideTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout) return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n });\n editor.on(\"changeSession\", hideTooltip);\n }\n function GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n }\n oop.inherits(GutterTooltip, Tooltip);\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 }).call(GutterTooltip.prototype);\n exports.GutterHandler = GutterHandler;\n});\nace.define(\"ace/mouse/mouse_event\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var event = require(\"../lib/event\");\n var useragent = require(\"../lib/useragent\");\n var MouseEvent = exports.MouseEvent = function (domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n };\n (function () {\n this.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n this.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n this.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n this.getDocumentPosition = function () {\n if (this.$pos) return this.$pos;\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) return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty()) this.$inSelection = false;else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\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 this.getAccelKey = useragent.isMac ? function () {\n return this.domEvent.metaKey;\n } : function () {\n return this.domEvent.ctrlKey;\n };\n }).call(MouseEvent.prototype);\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\n var dom = require(\"../lib/dom\");\n var event = require(\"../lib/event\");\n var useragent = require(\"../lib/useragent\");\n var AUTOSCROLL_DELAY = 200;\n var SCROLL_CURSOR_DELAY = 200;\n var SCROLL_CURSOR_HYSTERESIS = 5;\n function DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var blankImage = dom.createElement(\"img\");\n blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (useragent.isOpera) blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor,\n counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\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 var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n if (useragent.isOpera) {\n editor.container.appendChild(blankImage);\n blankImage.scrollTop = 0;\n }\n dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n if (useragent.isOpera) {\n editor.container.removeChild(blankImage);\n }\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\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\") editor.session.remove(editor.getSelectionRange());\n editor.renderer.$cursorLayer.setBlinking(true);\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null) onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\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 this.onDrop = function (e) {\n if (!dragCursor) 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 event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\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.$blockScrolling += 1;\n editor.moveCursorToPosition(cursor);\n editor.$blockScrolling -= 1;\n cursorMovedTime = now;\n cursorPointOnCaretMoved = {\n x: x,\n y: y\n };\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 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 = {\n row: cursor.row,\n column: cursor.column\n };\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) autoScrollStartTime = now;else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) editor.renderer.scrollCursorIntoView(scrollCursor);\n } else {\n autoScrollStartTime = null;\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 function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused()) 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 function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.$blockScrolling += 1;\n editor.selection.fromOrientedRange(range);\n editor.$blockScrolling -= 1;\n if (editor.isFocused() && !isInternal) editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\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) clearDragMarker();\n }, 20);\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 function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\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 if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"copy\";else if (moveAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"move\";else if (copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"copy\";\n return dropEffect;\n }\n }\n (function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay()) this.startDrag();\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 this.dragReadyEnd = function (e) {\n this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\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 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) 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 this.onMouseDown = function (e) {\n if (!this.$dragEnabled) return;\n this.mousedownEvent = e;\n var editor = this.editor;\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())) return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget) 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 }).call(DragdropHandler.prototype);\n function calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n }\n exports.DragdropHandler = DragdropHandler;\n});\nace.define(\"ace/lib/net\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"./dom\");\n exports.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 exports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n s.src = path;\n head.appendChild(s);\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) callback();\n }\n };\n };\n exports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n };\n});\nace.define(\"ace/lib/event_emitter\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var EventEmitter = {};\n var stopPropagation = function () {\n this.propagationStopped = true;\n };\n var preventDefault = function () {\n this.defaultPrevented = true;\n };\n EventEmitter._emit = EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler) return;\n if (typeof e != \"object\" || !e) e = {};\n if (!e.type) e.type = eventName;\n if (!e.stopPropagation) e.stopPropagation = stopPropagation;\n if (!e.preventDefault) e.preventDefault = preventDefault;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped) break;\n }\n if (defaultHandler && !e.defaultPrevented) return defaultHandler(e, this);\n };\n EventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners) return;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++) listeners[i](e, this);\n };\n EventEmitter.once = function (eventName, callback) {\n var _self = this;\n callback && this.addEventListener(eventName, function newCallback() {\n _self.removeEventListener(eventName, newCallback);\n callback.apply(null, arguments);\n });\n };\n EventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers) handlers = this._defaultHandlers = {\n _disabled_: {}\n };\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled) handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1) disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n };\n EventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers) return;\n var disabled = handlers._disabled_[eventName];\n if (handlers[eventName] == callback) {\n var old = handlers[eventName];\n if (disabled) this.setDefaultHandler(eventName, disabled.pop());\n } else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1) disabled.splice(i, 1);\n }\n };\n EventEmitter.on = EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners) listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1) listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\n EventEmitter.off = EventEmitter.removeListener = EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners) return;\n var index = listeners.indexOf(callback);\n if (index !== -1) listeners.splice(index, 1);\n };\n EventEmitter.removeAllListeners = function (eventName) {\n if (this._eventRegistry) this._eventRegistry[eventName] = [];\n };\n exports.EventEmitter = EventEmitter;\n});\nace.define(\"ace/lib/app_config\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"no use strict\";\n\n var oop = require(\"./oop\");\n var EventEmitter = require(\"./event_emitter\").EventEmitter;\n var optionsProvider = {\n setOptions: function (optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function (optionNames) {\n var result = {};\n if (!optionNames) {\n optionNames = Object.keys(this.$options);\n } else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function (name, value) {\n if (this[\"$\" + name] === value) return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo) return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet) this[\"$\" + name] = value;\n if (opt && opt.set) opt.set.call(this, value);\n },\n getOption: function (name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo) return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n };\n function warn(message) {\n if (typeof console != \"undefined\" && console.warn) console.warn.apply(console, arguments);\n }\n function reportError(msg, data) {\n var e = new Error(msg);\n e.data = data;\n if (typeof console == \"object\" && console.error) console.error(e);\n setTimeout(function () {\n throw e;\n });\n }\n var AppConfig = function () {\n this.$defaultOptions = {};\n };\n (function () {\n oop.implement(this, EventEmitter);\n this.defineOptions = function (obj, path, options) {\n if (!obj.$options) this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\") opt = {\n forwardTo: opt\n };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt) obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n this.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt) obj.setOption(key, opt.value);\n });\n };\n this.setDefaultValue = function (path, name, value) {\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo) this.setDefaultValue(opts.forwardTo, name, value);else opts[name].value = value;\n }\n };\n this.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n this.warn = warn;\n this.reportError = reportError;\n }).call(AppConfig.prototype);\n exports.AppConfig = AppConfig;\n});\nace.define(\"ace/config\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/lib/net\", \"ace/lib/app_config\"], function (require, exports, module) {\n \"no use strict\";\n\n var lang = require(\"./lib/lang\");\n var oop = require(\"./lib/oop\");\n var net = require(\"./lib/net\");\n var AppConfig = require(\"./lib/app_config\").AppConfig;\n module.exports = exports = new AppConfig();\n var global = function () {\n return this || typeof window != \"undefined\" && window;\n }();\n var options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {}\n };\n exports.get = function (key) {\n if (!options.hasOwnProperty(key)) throw new Error(\"Unknown config key: \" + key);\n return options[key];\n };\n exports.set = function (key, value) {\n if (!options.hasOwnProperty(key)) throw new Error(\"Unknown config key: \" + key);\n options[key] = value;\n };\n exports.all = function () {\n return lang.copyObject(options);\n };\n exports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name]) return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n if ((!base || base == component) && parts.length > 1) 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) != \"/\") path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n };\n exports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n };\n exports.$loading = {};\n exports.loadModule = function (moduleName, onLoad) {\n var module, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n try {\n module = require(moduleName);\n } catch (e) {}\n if (module && !exports.$loading[moduleName]) return onLoad && onLoad(module);\n if (!exports.$loading[moduleName]) exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1) return;\n var afterLoad = function () {\n require([moduleName], function (module) {\n exports._emit(\"load.module\", {\n name: moduleName,\n module: module\n });\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function (onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n if (!exports.get(\"packaged\")) return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n };\n init(true);\n function init(packaged) {\n if (!global || !global.document) return;\n options.packaged = packaged || require.packaged || module.packaged || global.define && define.packaged;\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = document.currentScript || document._currentScript; // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n var src = script.src || script.getAttribute(\"src\");\n if (!src) continue;\n var attributes = script.attributes;\n for (var j = 0, l = attributes.length; j < l; j++) {\n var attr = attributes[j];\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n if (m) scriptUrl = m[1];\n }\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n for (var key in scriptOptions) if (typeof scriptOptions[key] !== \"undefined\") exports.set(key, scriptOptions[key]);\n }\n exports.init = init;\n function deHyphenate(str) {\n return str.replace(/-(.)/g, function (m, m1) {\n return m1.toUpperCase();\n });\n }\n});\nace.define(\"ace/mouse/mouse_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/mouse/default_handlers\", \"ace/mouse/default_gutter_handler\", \"ace/mouse/mouse_event\", \"ace/mouse/dragdrop_handler\", \"ace/config\"], function (require, exports, module) {\n \"use strict\";\n\n var event = require(\"../lib/event\");\n var useragent = require(\"../lib/useragent\");\n var DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\n var DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\n var MouseEvent = require(\"./mouse_event\").MouseEvent;\n var DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\n var config = require(\"../config\");\n var MouseHandler = function (editor) {\n var _self = this;\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n var focusEditor = function (e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus() || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred) window.focus();\n editor.focus();\n };\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"));\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"));\n event.addMultiMouseDownListener([mouseTarget, editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner, editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner, editor.textInput && editor.textInput.getElement()].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\");\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"));\n event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, \"touchmove\"));\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"));\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"));\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"));\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"));\n event.addListener(mouseTarget, \"mousedown\", focusEditor);\n event.addListener(gutterEl, \"mousedown\", focusEditor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor);\n }\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled) return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n } else {\n renderer.setCursorStyle(\"\");\n }\n });\n };\n (function () {\n this.onMouseEvent = function (name, e) {\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n this.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length) return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n this.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n this.onTouchMove = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = 1; //this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n this.setState = function (state) {\n this.state = state;\n };\n this.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var renderer = this.editor.renderer;\n if (renderer.$keepTextAreaAtCursor) renderer.$keepTextAreaAtCursor = null;\n var self = this;\n var onMouseMove = function (e) {\n if (!e) return;\n if (useragent.isWebKit && !e.which && self.releaseMouse) return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n var onCaptureEnd = function (e) {\n clearInterval(timerId);\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n if (renderer.$keepTextAreaAtCursor == null) {\n renderer.$keepTextAreaAtCursor = true;\n renderer.$moveTextAreaToCursor();\n }\n self.isMousePressed = false;\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n };\n var onCaptureInterval = function () {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () {\n onCaptureEnd(ev);\n });\n }\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n this.releaseMouse = null;\n this.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\") return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent) event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n }).call(MouseHandler.prototype);\n config.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: {\n initialValue: 2\n },\n dragDelay: {\n initialValue: useragent.isMac ? 150 : 0\n },\n dragEnabled: {\n initialValue: true\n },\n focusTimout: {\n initialValue: 0\n },\n tooltipFollowsMouse: {\n initialValue: true\n }\n });\n exports.MouseHandler = MouseHandler;\n});\nace.define(\"ace/mouse/fold_handler\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey()) session.removeFold(fold);else session.expandFold(fold);\n e.stop();\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row]) editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused()) editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n if (fold) {\n session.removeFold(fold);\n } else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({\n row: range.start.row,\n column: 0\n });\n }\n }\n e.stop();\n }\n });\n }\n exports.FoldHandler = FoldHandler;\n});\nace.define(\"ace/keyboard/keybinding\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/event\"], function (require, exports, module) {\n \"use strict\";\n\n var keyUtil = require(\"../lib/keys\");\n var event = require(\"../lib/event\");\n var KeyBinding = function (editor) {\n this.$editor = editor;\n this.$data = {\n editor: editor\n };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n };\n (function () {\n this.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n this.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb) return;\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler) this.removeKeyboardHandler(h[h.length - 1]);\n this.addKeyboardHandler(kb, 1);\n };\n this.addKeyboardHandler = function (kb, pos) {\n if (!kb) return;\n if (typeof kb == \"function\" && !kb.handleKeyboard) kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1) this.$handlers.splice(i, 1);\n if (pos == undefined) this.$handlers.push(kb);else this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach) kb.attach(this.$editor);\n };\n this.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1) return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n this.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n this.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n this.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command) continue;\n if (toExecute.command == \"null\") {\n success = true;\n } else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 && toExecute.passEvent != true && toExecute.command.passEvent != true) {\n event.stopEvent(e);\n }\n if (success) break;\n }\n if (!success && hashId == -1) {\n toExecute = {\n command: \"insertstring\"\n };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n if (success && this.$editor._signal) this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n this.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n this.onTextInput = function (text) {\n this.$callKeyboardHandlers(-1, text);\n };\n }).call(KeyBinding.prototype);\n exports.KeyBinding = KeyBinding;\n});\nace.define(\"ace/lib/bidiutil\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\n var ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\n var dir = 0,\n hiLevel = 0;\n var lastArabic = false,\n hasUBAT_AL = false,\n hasUBAT_B = false,\n hasUBAT_S = false,\n hasBlockSep = false,\n hasSegSep = false;\n var impTab_LTR = [[0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]];\n var impTab_RTL = [[2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]];\n var LTR = 0,\n RTL = 1;\n var L = 0;\n var R = 1;\n var EN = 2;\n var AN = 3;\n var ON = 4;\n var B = 5;\n var S = 6;\n var AL = 7;\n var WS = 8;\n var CS = 9;\n var ES = 10;\n var ET = 11;\n var NSM = 12;\n var LRE = 13;\n var RLE = 14;\n var PDF = 15;\n var LRO = 16;\n var RLO = 17;\n var BN = 18;\n var UnicodeTBL00 = [BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S, WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN, BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON, ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON];\n var UnicodeTBL20 = [WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS, ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS];\n function _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR,\n prevState = null,\n newClass = null,\n newLevel = null,\n newState = 0,\n action = null,\n cond = null,\n condPos = -1,\n i = null,\n ix = null,\n classes = [];\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n } else {\n condPos = -1;\n }\n }\n cond = impTab[newState][6];\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n } else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n hiLevel |= newLevel;\n }\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n } else {\n break;\n }\n }\n }\n }\n }\n }\n function _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n return;\n }\n var len = _array.length,\n start = 0,\n end,\n lo,\n hi,\n tmp;\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n while (end < len && levels[end] >= lev) {\n end++;\n }\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n start = end;\n }\n start++;\n }\n }\n function _getCharClass(chars, types, classes, ix) {\n var cType = types[ix],\n wType,\n nType,\n len,\n i;\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n case ON:\n case AN:\n return cType;\n case EN:\n return lastArabic ? AN : EN;\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n case WS:\n return ON;\n case CS:\n if (ix < 1 || ix + 1 >= types.length || (wType = classes[ix - 1]) != EN && wType != AN || (nType = types[ix + 1]) != EN && nType != AN) {\n return ON;\n }\n if (lastArabic) {\n nType = AN;\n }\n return nType == wType ? nType : ON;\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n if (wType == EN && ix + 1 < types.length && types[ix + 1] == EN) {\n return EN;\n }\n return ON;\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n if (lastArabic) {\n return ON;\n }\n i = ix + 1;\n len = types.length;\n while (i < len && types[i] == ET) {\n i++;\n }\n if (i < len && types[i] == EN) {\n return EN;\n }\n return ON;\n case NSM:\n len = types.length;\n i = ix + 1;\n while (i < len && types[i] == NSM) {\n i++;\n }\n if (i < len) {\n var c = chars[ix],\n rtlCandidate = c >= 0x0591 && c <= 0x08FF || c == 0xFB1E;\n wType = types[i];\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n return classes[ix - 1];\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n case S:\n hasUBAT_S = true;\n return ON;\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n case BN:\n return ON;\n }\n }\n function _getCharacterType(ch) {\n var uc = ch.charCodeAt(0),\n hi = uc >> 8;\n if (hi == 0) {\n return uc > 0x00BF ? L : UnicodeTBL00[uc];\n } else if (hi == 5) {\n return /[\\u0591-\\u05f4]/.test(ch) ? R : L;\n } else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch)) return NSM;else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch)) return AN;else if (uc == 0x066A) return ET;else if (/[\\u06f0-\\u06f9]/.test(ch)) return EN;else return AL;\n } else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n } else if (hi == 0xFE) {\n return uc >= 0xFE70 ? AL : ON;\n }\n return ON;\n }\n function _isArabicDiacritics(ch) {\n return ch >= '\\u064b' && ch <= '\\u0655';\n }\n exports.L = L;\n exports.R = R;\n exports.EN = EN;\n exports.ON_R = 3;\n exports.AN = 4;\n exports.R_H = 5;\n exports.B = 6;\n exports.DOT = \"\\xB7\";\n exports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2) return {};\n var chars = text.split(\"\"),\n logicalFromVisual = new Array(chars.length),\n bidiLevels = new Array(chars.length),\n levels = [];\n dir = isRtl ? RTL : LTR;\n _computeLevels(chars, levels, chars.length, textCharTypes);\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++);\n _invertLevel(2, levels, logicalFromVisual);\n _invertLevel(1, levels, logicalFromVisual);\n for (var i = 0; i < logicalFromVisual.length - 1; i++) {\n //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n } else if (levels[i] === R && (textCharTypes[i] > AL && textCharTypes[i] < LRE || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n } else if (i > 0 && chars[i - 1] === '\\u0644' && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n if (chars[chars.length - 1] === exports.DOT) levels[chars.length - 1] = exports.B;\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n return {\n 'logicalFromVisual': logicalFromVisual,\n 'bidiLevels': bidiLevels\n };\n };\n exports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL)) ret = true;\n }\n return ret;\n };\n exports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx) return i;\n }\n return 0;\n };\n});\nace.define(\"ace/bidihandler\", [\"require\", \"exports\", \"module\", \"ace/lib/bidiutil\", \"ace/lib/lang\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var bidiUtil = require(\"./lib/bidiutil\");\n var lang = require(\"./lib/lang\");\n var useragent = require(\"./lib/useragent\");\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var 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.line = \"\";\n this.wrapIndent = 0;\n this.isLastRow = false;\n this.EOF = \"\\xB6\";\n this.seenBidi = false;\n };\n (function () {\n this.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi) 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 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 } else {\n this.currentRow = null;\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) docRow = this.session.$docRowCache[index];\n }\n return docRow;\n };\n this.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex,\n 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) break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n return splitIndex;\n };\n this.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined) docRow = this.getDocumentRow();\n this.wrapIndent = 0;\n this.isLastRow = docRow === this.session.getLength() - 1;\n this.line = this.session.getLine(docRow);\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined) splitIndex = this.getSplitIndex();\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.line = splitIndex < splits.length ? this.line.substring(splits[splitIndex - 1], splits[splits.length - 1]) : this.line.substring(splits[splits.length - 1]);\n } else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n }\n }\n var session = this.session,\n shift = 0,\n 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 this.updateBidiMap = function () {\n var textCharTypes = [],\n endOfLine = this.isLastRow ? this.EOF : this.EOL;\n var line = this.line + (this.showInvisibles ? endOfLine : bidiUtil.DOT);\n if (bidiUtil.hasBidiCharacters(line, textCharTypes)) {\n this.bidiMap = bidiUtil.doBidiReorder(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.seenBidi) return;\n if (this.characterWidth === fontMetrics.$characterSize.width) return;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\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] = useragent.isChrome ? bidiCharWidth : bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = 0;\n this.currentRow = null;\n };\n this.getShowInvisibles = function () {\n return this.showInvisibles;\n };\n this.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n this.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n this.setTextDir = function (isRtlDir) {\n this.isRtlDir = isRtlDir;\n };\n this.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(col > 0 ? col - 1 : 0, this.bidiMap),\n levels = this.bidiMap.bidiLevels,\n left = 0;\n if (col === 0 && levels[visualIdx] % 2 !== 0) visualIdx++;\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n if (col !== 0 && levels[visualIdx] % 2 === 0) left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent) left += this.wrapIndent * this.charWidths[bidiUtil.L];\n return left;\n };\n this.getSelections = function (startCol, endCol) {\n var map = this.bidiMap,\n levels = map.bidiLevels,\n level,\n offset = this.wrapIndent * this.charWidths[bidiUtil.L],\n selections = [],\n selColMin = Math.min(startCol, endCol) - this.wrapIndent,\n selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false,\n isSelectedPrev = false,\n selectionStart = 0;\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({\n left: selectionStart,\n width: offset - selectionStart\n });\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n if (isSelected && visIdx === levels.length) {\n selections.push({\n left: selectionStart,\n width: offset - selectionStart\n });\n }\n return selections;\n };\n this.offsetToCol = function (posX) {\n var logicalIdx = 0,\n posX = Math.max(posX, 0),\n offset = 0,\n visualIdx = 0,\n levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent) {\n posX -= this.wrapIndent * this.charWidths[bidiUtil.L];\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 if (visualIdx > 0 && levels[visualIdx - 1] % 2 !== 0 && levels[visualIdx] % 2 === 0) {\n if (posX < offset) visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n } else if (visualIdx > 0 && levels[visualIdx - 1] % 2 === 0 && levels[visualIdx] % 2 !== 0) {\n logicalIdx = 1 + (posX > offset ? this.bidiMap.logicalFromVisual[visualIdx] : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n } else if (this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && levels[visualIdx - 1] % 2 === 0 || !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) visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n return logicalIdx + this.wrapIndent;\n };\n }).call(BidiHandler.prototype);\n exports.BidiHandler = BidiHandler;\n});\nace.define(\"ace/range\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n };\n var Range = function (startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n this.end = {\n row: endRow,\n column: endColumn\n };\n };\n (function () {\n this.isEqual = function (range) {\n return this.start.row === range.start.row && this.end.row === range.end.row && this.start.column === range.start.column && this.end.column === range.end.column;\n };\n this.toString = function () {\n return \"Range: [\" + this.start.row + \"/\" + this.start.column + \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\";\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 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 if (row < this.start.row) return -1;\n if (row > this.end.row) return 1;\n if (this.start.row === row) return column >= this.start.column ? 0 : -1;\n if (this.end.row === row) return column <= this.end.column ? 0 : 1;\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) var end = {\n row: lastRow + 1,\n column: 0\n };else if (this.end.row < firstRow) var end = {\n row: firstRow,\n column: 0\n };\n if (this.start.row > lastRow) var start = {\n row: lastRow + 1,\n column: 0\n };else if (this.start.row < firstRow) var start = {\n row: firstRow,\n 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 if (cmp == 0) return this;else if (cmp == -1) var start = {\n row: row,\n column: column\n };else var end = {\n row: row,\n column: column\n };\n return Range.fromPoints(start || this.start, end || this.end);\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) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);else 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 return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\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 }).call(Range.prototype);\n Range.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n };\n Range.comparePoints = comparePoints;\n Range.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n };\n exports.Range = Range;\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\n var oop = require(\"./lib/oop\");\n var lang = require(\"./lib/lang\");\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n var Range = require(\"./range\").Range;\n var Selection = function (session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\n this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\n var self = this;\n this.lead.on(\"change\", function (e) {\n self._emit(\"changeCursor\");\n if (!self.$isEmpty) self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) self.$desiredColumn = null;\n });\n this.selectionAnchor.on(\"change\", function () {\n if (!self.$isEmpty) self._emit(\"changeSelection\");\n });\n };\n (function () {\n oop.implement(this, EventEmitter);\n this.isEmpty = function () {\n return this.$isEmpty || this.anchor.row == this.lead.row && this.anchor.column == this.lead.column;\n };\n this.isMultiLine = function () {\n if (this.isEmpty()) {\n return false;\n }\n return this.getRange().isMultiLine();\n };\n this.getCursor = function () {\n return this.lead.getPosition();\n };\n this.setSelectionAnchor = function (row, column) {\n this.anchor.setPosition(row, column);\n if (this.$isEmpty) {\n this.$isEmpty = false;\n this._emit(\"changeSelection\");\n }\n };\n this.getSelectionAnchor = function () {\n if (this.$isEmpty) return this.getSelectionLead();else return this.anchor.getPosition();\n };\n this.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n this.shiftSelection = function (columns) {\n if (this.$isEmpty) {\n this.moveCursorTo(this.lead.row, this.lead.column + columns);\n return;\n }\n var anchor = this.getSelectionAnchor();\n var lead = this.getSelectionLead();\n var isBackwards = this.isBackwards();\n if (!isBackwards || anchor.column !== 0) this.setSelectionAnchor(anchor.row, anchor.column + columns);\n if (isBackwards || lead.column !== 0) {\n this.$moveSelection(function () {\n this.moveCursorTo(lead.row, lead.column + columns);\n });\n }\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 if (this.isEmpty()) return Range.fromPoints(lead, lead);\n if (this.isBackwards()) {\n return Range.fromPoints(lead, anchor);\n } else {\n return Range.fromPoints(anchor, lead);\n }\n };\n this.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n this.selectAll = function () {\n var lastRow = this.doc.getLength() - 1;\n this.setSelectionAnchor(0, 0);\n this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\n };\n this.setRange = this.setSelectionRange = function (range, reverse) {\n if (reverse) {\n this.setSelectionAnchor(range.end.row, range.end.column);\n this.selectTo(range.start.row, range.start.column);\n } else {\n this.setSelectionAnchor(range.start.row, range.start.column);\n this.selectTo(range.end.row, range.end.column);\n }\n if (this.getRange().isEmpty()) this.$isEmpty = true;\n this.$desiredColumn = null;\n };\n this.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty) this.setSelectionAnchor(lead.row, lead.column);\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 this.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\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) return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);else 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 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 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 } 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 } 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 } 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(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) 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) lineEnd.column = textEnd;\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 var match;\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 (match = 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) this.moveCursorWordRight();\n return;\n }\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\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 var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n var leftOfCursor = lang.stringReverse(str);\n var match;\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (match = 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) this.moveCursorWordLeft();\n return;\n }\n if (match = this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n this.$shortWordEndIndex = function (rightOfCursor) {\n var match,\n index = 0,\n ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n if (match = this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) index++;\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)) index++;\n if (index > 2) break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n return index;\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 var fold = this.session.getFoldAt(row, column, 1);\n if (fold) return this.moveCursorTo(fold.end.row, fold.end.column);\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 if (!/^\\s+/.test(rightOfCursor)) rightOfCursor = \"\";\n column = 0;\n }\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n this.moveCursorShortWordLeft = 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)) return this.moveCursorTo(fold.start.row, fold.start.column);\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 column = line.length;\n if (!/\\s+$/.test(line)) line = \"\";\n }\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n this.moveCursorWordRight = function () {\n if (this.session.$selectLongWords) this.moveCursorLongWordRight();else this.moveCursorShortWordRight();\n };\n this.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords) this.moveCursorLongWordLeft();else this.moveCursorShortWordLeft();\n };\n this.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\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 if (this.$desiredColumn) screenPos.column = this.$desiredColumn;else this.$desiredColumn = screenPos.column;\n }\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n if (docPos.row > 0 || rows > 0) docPos.row++;\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 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) column = column - 1;else column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn) 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 this.session = this.doc = null;\n };\n this.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\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 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 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 this.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList) {\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) r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n } else data = data[0];\n }\n if (this.rangeList) this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n this.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount) return false;\n if (!data.length || !this.ranges) return this.getRange().isEqual(data);\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i])) return false;\n }\n return true;\n };\n }).call(Selection.prototype);\n exports.Selection = Selection;\n});\nace.define(\"ace/tokenizer\", [\"require\", \"exports\", \"module\", \"ace/config\"], function (require, exports, module) {\n \"use strict\";\n\n var config = require(\"./config\");\n var MAX_TOKEN_COUNT = 2000;\n var Tokenizer = function (rules) {\n this.states = rules;\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] = {\n defaultToken: \"text\"\n };\n var flag = \"g\";\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken) mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive) flag = \"gi\";\n if (rule.regex == null) continue;\n if (rule.regex instanceof RegExp) 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) rule.onMatch = this.$applyToken;else rule.onMatch = rule.token;\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\") splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch) rule.onMatch = null;\n }\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n };\n (function () {\n this.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\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\") return [{\n type: types,\n value: str\n }];\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i]) tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n this.$arrayTokens = function (str) {\n if (!str) return [];\n var values = this.splitRegex.exec(str);\n if (!values) 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]) tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n this.removeCapturingGroups = function (src) {\n var r = src.replace(/\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g, function (x, y) {\n return y ? \"(?:\" : x;\n });\n return r;\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 (m, esc, parenOpen, parenClose, square, index) {\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 if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end))) 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 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 var stack = [];\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 var match,\n tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = {\n type: null,\n 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 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) tokens.push(token);\n token = {\n type: type,\n value: skipped\n };\n }\n }\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined) continue;\n rule = state[mapping[i]];\n if (rule.onMatch) type = rule.onMatch(value, currentState, stack, line);else type = rule.token;\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\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) lastIndex = index;\n break;\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) tokens.push(token);\n token = {\n type: type,\n value: value\n };\n }\n } else if (type) {\n if (token.type) tokens.push(token);\n token = {\n type: null,\n value: \"\"\n };\n for (var i = 0; i < type.length; i++) tokens.push(type[i]);\n }\n }\n if (lastIndex == line.length) break;\n lastIndex = index;\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) tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 2000),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n if (token.type) tokens.push(token);\n if (stack.length > 1) {\n if (stack[0] !== currentState) stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n this.reportError = config.reportError;\n }).call(Tokenizer.prototype);\n exports.Tokenizer = Tokenizer;\n});\nace.define(\"ace/mode/text_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\"], function (require, exports, module) {\n \"use strict\";\n\n var lang = require(\"../lib/lang\");\n var TextHighlightRules = function () {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n };\n (function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules) 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) rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n this.getRules = function () {\n return this.$rules;\n };\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\" ? new HighlightRules().getRules() : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++) states[i] = prefix + states[i];\n } else {\n states = [];\n for (var key in embedRules) states.push(prefix + key);\n }\n this.addRules(embedRules, prefix);\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++) addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n if (!this.$embeds) this.$embeds = [];\n this.$embeds.push(prefix);\n };\n this.getEmbeds = function () {\n return this.$embeds;\n };\n var pushState = function (currentState, stack) {\n if (currentState != \"start\" || stack.length) 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 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) 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\") stateName = stateName[0] || \"\";\n if (rules[stateName]) 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 if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push) 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)) toInsert = includeName.map(function (x) {\n return rules[x];\n });else toInsert = rules[includeName];\n }\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape) args = args.filter(function (x) {\n return !x.next;\n });\n state.splice.apply(state, args);\n i--;\n }\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n if (ignoreCase) a = a.toLowerCase();\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--;) keywords[list[i]] = className;\n });\n if (Object.getPrototypeOf(keywords)) {\n keywords.__proto__ = null;\n }\n this.$keywordList = Object.keys(keywords);\n map = null;\n return ignoreCase ? function (value) {\n return keywords[value.toLowerCase()] || defaultToken;\n } : function (value) {\n return keywords[value] || defaultToken;\n };\n };\n this.getKeywords = function () {\n return this.$keywords;\n };\n }).call(TextHighlightRules.prototype);\n exports.TextHighlightRules = TextHighlightRules;\n});\nace.define(\"ace/mode/behaviour\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var Behaviour = function () {\n this.$behaviours = {};\n };\n (function () {\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 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 this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\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 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 }).call(Behaviour.prototype);\n exports.Behaviour = Behaviour;\n});\nace.define(\"ace/token_iterator\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"./range\").Range;\n var TokenIterator = function (session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n };\n (function () {\n this.stepBackward = function () {\n this.$tokenIndex -= 1;\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\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) rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\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) return column;\n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n return column;\n };\n this.getCurrentTokenPosition = function () {\n return {\n row: this.$row,\n column: this.getCurrentTokenColumn()\n };\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 }).call(TokenIterator.prototype);\n exports.TokenIterator = TokenIterator;\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\n var oop = require(\"../../lib/oop\");\n var Behaviour = require(\"../behaviour\").Behaviour;\n var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n var lang = require(\"../../lib/lang\");\n var SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"punctuation.operator\"];\n var SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n var context;\n var contextCache = {};\n var defaultQuotes = {\n '\"': '\"',\n \"'\": \"'\"\n };\n var initContext = function (editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {\n rangeCount: editor.multiSelect.rangeCount\n };\n }\n if (contextCache[id]) 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 var getWrapped = function (selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [0, selection.start.column + 1, rowDiff, selection.end.column + (rowDiff ? 0 : 1)]\n };\n };\n var 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('}', {\n column: cursor.column + 1,\n row: cursor.row\n });\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({\n row: cursor.row,\n column: cursor.column + 1\n }, '}');\n if (!openBracePos) 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 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 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 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(')', {\n column: cursor.column + 1,\n row: cursor.row\n });\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 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 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(']', {\n column: cursor.column + 1,\n row: cursor.row\n });\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 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 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) 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 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)) return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type)) pair = false;\n } else {\n if (stringBefore && !stringAfter) return null; // wrap string with different quote\n if (stringBefore && stringAfter) 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) return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && (selected == '\"' || 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 CstyleBehaviour.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 var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n };\n CstyleBehaviour.$matchTokenType = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n };\n CstyleBehaviour.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])) context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n };\n CstyleBehaviour.recordMaybeInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line)) 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 CstyleBehaviour.isAutoInsertedClosing = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd;\n };\n CstyleBehaviour.isMaybeInsertedClosing = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n };\n CstyleBehaviour.popAutoInsertedClosing = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n };\n CstyleBehaviour.clearMaybeInsertedClosing = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n };\n oop.inherits(CstyleBehaviour, Behaviour);\n exports.CstyleBehaviour = CstyleBehaviour;\n});\nace.define(\"ace/unicode\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n exports.packages = {};\n addUnicodePackage({\n L: \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\n Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\n Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\n Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\n Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n M: \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\n Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\n Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\n Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\n N: \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\n No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\n P: \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\n Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\n Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\n Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\n Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\n Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\n Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\n Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\n S: \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\n Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\n Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\n Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\n So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\n Z: \"002000A01680180E2000-200A20282029202F205F3000\",\n Zs: \"002000A01680180E2000-200A202F205F3000\",\n Zl: \"2028\",\n Zp: \"2029\",\n C: \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\n Cc: \"0000-001F007F-009F\",\n Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\n Co: \"E000-F8FF\",\n Cs: \"D800-DFFF\",\n Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\n });\n function addUnicodePackage(pack) {\n var codePoint = /\\w{4}/g;\n for (var name in pack) exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\n }\n});\nace.define(\"ace/mode/text\", [\"require\", \"exports\", \"module\", \"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\";\n\n var Tokenizer = require(\"../tokenizer\").Tokenizer;\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n var CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n var unicode = require(\"../unicode\");\n var lang = require(\"../lib/lang\");\n var TokenIterator = require(\"../token_iterator\").TokenIterator;\n var Range = require(\"../range\").Range;\n var Mode = function () {\n this.HighlightRules = TextHighlightRules;\n };\n (function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\");\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 this.lineCommentStart = \"\";\n this.blockComment = \"\";\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n if (!this.lineCommentStart) {\n if (!this.blockComment) 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 var comment = function (line, i) {\n if (testRemove(line, i)) return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({\n row: i,\n column: line.length\n }, lineCommentEnd);\n doc.insertInLine({\n row: i,\n column: minIndent\n }, lineCommentStart);\n }\n };\n var uncomment = function (line, i) {\n var m;\n if (m = line.match(regexpEnd)) doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart)) doc.removeInLine(i, m[1].length, m[0].length);\n };\n var testRemove = function (line, row) {\n if (regexpStart.test(line)) return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\") 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 insertAtTabStop = session.getUseSoftTabs();\n var uncomment = function (line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length,\n end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \") 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)) doc.insertInLine({\n row: i,\n column: minIndent\n }, commentWithSpace);else doc.insertInLine({\n row: i,\n column: minIndent\n }, lineCommentStart);\n }\n };\n var testRemove = function (line, i) {\n return regexpStart.test(line);\n };\n var shouldInsertSpace = function (line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \") spaces++;\n if (spaces % tabSize != 0) return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \") spaces++;\n if (tabSize > 2) return spaces % tabSize != tabSize - 1;else return spaces % tabSize == 0;\n return true;\n };\n }\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++) fun(doc.getLine(i), i);\n }\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent) minIndent = indent;\n if (shouldRemove && !testRemove(line, i)) shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n if (insertAtTabStop && minIndent % tabSize != 0) minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment) return;\n if (!comment.start && comment[0]) comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\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 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) 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) initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow) initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n this.autoOutdent = function (state, doc, row) {};\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n this.createWorker = function (session) {\n return null;\n };\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n this.$embeds.push(i);\n this.$modes[i] = new mapping[i]();\n }\n }\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\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 this.$delegator = function (method, args, defaultHandler) {\n var state = args[0];\n if (typeof state != \"string\") state = state[0];\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\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 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 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)) completionKeywords.push(ruleItr[r].regex);\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) return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n this.$createKeywordList = function () {\n if (!this.$highlightRules) this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\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 this.$id = \"ace/mode/text\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});\nace.define(\"ace/apply_delta\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n function throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n }\n function positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length && position.column >= 0 && position.column <= docLines[position.row].length;\n }\n function validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\") throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array)) throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end) throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start)) throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end)) 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) throwDeltaError(delta, \"delta.range must match delta lines\");\n }\n exports.applyDelta = function (docLines, delta, doNotValidate) {\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(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n break;\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\n var oop = require(\"./lib/oop\");\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n var Anchor = exports.Anchor = function (doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof column == \"undefined\") this.setPosition(row.row, row.column);else this.setPosition(row, column);\n };\n (function () {\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) return;\n if (delta.start.row > this.row) return;\n var point = $getTransformedPoint(delta, {\n row: this.row,\n column: this.column\n }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\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 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 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 if (this.row == pos.row && this.column == pos.column) return;\n var old = {\n row: this.row,\n column: this.column\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.removeEventListener(\"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 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 } else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n } else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n if (column < 0) pos.column = 0;\n return pos;\n };\n }).call(Anchor.prototype);\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\n var oop = require(\"./lib/oop\");\n var applyDelta = require(\"./apply_delta\").applyDelta;\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n var Range = require(\"./range\").Range;\n var Anchor = require(\"./anchor\").Anchor;\n var Document = function (textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({\n row: 0,\n column: 0\n }, textOrLines);\n } else {\n this.insert({\n row: 0,\n column: 0\n }, textOrLines);\n }\n };\n (function () {\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({\n row: 0,\n column: 0\n }, 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 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 this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n this.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode) return;\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) 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) this.$detectNewLine(text);\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 this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\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) column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {\n row: row,\n column: column\n };\n };\n this.clonePos = function (pos) {\n return {\n row: pos.row,\n column: pos.column\n };\n };\n this.pos = function (row, column) {\n return {\n row: row,\n 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({\n row: row,\n column: column\n }, 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 this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\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({\n start: start,\n end: end\n })\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 this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({\n start: start,\n end: end\n })\n }, true);\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 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)) range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty()) return range.start;\n if (text == this.getTextRange(range)) return range.end;\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n } else {\n end = range.start;\n }\n return end;\n };\n this.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n this.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; 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] : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n if (isInsert && delta.lines.length > 20000) this.$splitAndapplyLargeDelta(delta, 20000);\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n };\n this.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length;\n var row = delta.start.row;\n var column = delta.start.column;\n var from = 0,\n to = 0;\n do {\n from = to;\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n if (to > l) {\n delta.lines = chunk;\n delta.start.row = row + from;\n delta.start.column = column;\n break;\n }\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 } while (true);\n };\n this.revertDelta = function (delta) {\n this.applyDelta({\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) return {\n row: i,\n column: index + lines[i].length + newlineLength\n };\n }\n return {\n row: l - 1,\n column: lines[l - 1].length\n };\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) index += lines[i].length + newlineLength;\n return index + pos.column;\n };\n }).call(Document.prototype);\n exports.Document = Document;\n});\nace.define(\"ace/background_tokenizer\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n var BackgroundTokenizer = function (tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n while (self.lines[currentLine]) currentLine++;\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 if (endLine == -1) endLine = currentLine;\n if (startLine <= endLine) self.fireUpdateEvent(startLine, endLine);\n };\n };\n (function () {\n oop.implement(this, EventEmitter);\n this.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n this.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n this.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", {\n data: data\n });\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 this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n this.scheduleStart = function () {\n if (!this.running) this.running = setTimeout(this.$worker, 700);\n };\n this.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\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 this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n this.stop = function () {\n if (this.running) 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) this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n this.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\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) this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n return this.lines[row] = data.tokens;\n };\n }).call(BackgroundTokenizer.prototype);\n exports.BackgroundTokenizer = BackgroundTokenizer;\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\n var lang = require(\"./lib/lang\");\n var oop = require(\"./lib/oop\");\n var Range = require(\"./range\").Range;\n var SearchHighlight = function (regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n };\n (function () {\n this.MAX_RANGES = 500;\n this.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\") return;\n this.regExp = regExp;\n this.cache = [];\n };\n this.update = function (html, markerLayer, session, config) {\n if (!this.regExp) return;\n var start = config.firstRow,\n end = config.lastRow;\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) 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 for (var j = ranges.length; j--;) {\n markerLayer.drawSingleLineMarker(html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n }).call(SearchHighlight.prototype);\n exports.SearchHighlight = SearchHighlight;\n});\nace.define(\"ace/edit_session/fold_line\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n function 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 var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\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 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 this.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n this.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp,\n stop,\n isNewRow = true;\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\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 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 this.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold,\n folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\" && fold.start.column != column && fold.start.row != row) {\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 this.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\") return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\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 var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\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 this.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n this.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\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 idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n lastFoldEndColumn = fold.end.column;\n }\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n }).call(FoldLine.prototype);\n exports.FoldLine = FoldLine;\n});\nace.define(\"ace/range_list\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"./range\").Range;\n var comparePoints = Range.comparePoints;\n var RangeList = function () {\n this.ranges = [];\n };\n (function () {\n this.comparePoints = comparePoints;\n this.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\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) continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0) return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || cmpStart === 0 && !excludeEdges) return i;\n return -i - 1;\n }\n return -i - 1;\n };\n this.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0) startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0) endIndex = -endIndex - 1;else endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\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 this.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0) return this.ranges.splice(i, 1);\n };\n this.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0],\n 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) continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) continue;\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n this.ranges = list;\n return removed;\n };\n this.contains = function (row, column) {\n return this.pointIndex({\n row: row,\n column: column\n }) >= 0;\n };\n this.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n this.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0) return this.ranges[i];\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) return [];\n var startIndex = this.pointIndex({\n row: startRow,\n column: 0\n });\n if (startIndex < 0) startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({\n row: endRow,\n column: 0\n }, startIndex);\n if (endIndex < 0) endIndex = -endIndex - 1;\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n this.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n this.attach = function (session) {\n if (this.session) this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n this.detach = function () {\n if (!this.session) return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n this.$onChange = function (delta) {\n if (delta.action == \"insert\") {\n var start = delta.start;\n var end = delta.end;\n } else {\n var end = delta.start;\n var start = delta.end;\n }\n var startRow = start.row;\n var endRow = end.row;\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\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) continue;\n if (r.start.row > startRow) break;\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$insertRight) {} 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.$insertRight) {\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) r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\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 }).call(RangeList.prototype);\n exports.RangeList = RangeList;\n});\nace.define(\"ace/edit_session/fold\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/range_list\", \"ace/lib/oop\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n var RangeList = require(\"../range_list\").RangeList;\n var oop = require(\"../lib/oop\");\n var 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 this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n };\n oop.inherits(Fold, RangeList);\n (function () {\n this.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n this.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\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 this.addSubFold = function (fold) {\n if (this.range.isEqual(fold)) return;\n if (!this.range.containsRange(fold)) throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n consumeRange(fold, this.start);\n var row = fold.start.row,\n 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) break;\n }\n var afterStart = this.subFolds[i];\n if (cmp == 0) return afterStart.addSubFold(fold);\n var row = fold.range.end.row,\n 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) break;\n }\n var afterEnd = this.subFolds[j];\n if (cmp == 0) throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n this.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n }).call(Fold.prototype);\n function consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0) point.column -= anchor.column;\n }\n function consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n }\n function restorePoint(point, anchor) {\n if (point.row == 0) point.column += anchor.column;\n point.row += anchor.row;\n }\n function restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\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\n var Range = require(\"../range\").Range;\n var FoldLine = require(\"./fold_line\").FoldLine;\n var Fold = require(\"./fold\").Fold;\n var TokenIterator = require(\"../token_iterator\").TokenIterator;\n function Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) return null;\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var fold = folds[i];\n if (fold.range.contains(row, column)) {\n if (side == 1 && fold.range.isEnd(row, column)) {\n continue;\n } else if (side == -1 && fold.range.isStart(row, column)) {\n continue;\n }\n return fold;\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 start.column += 1;\n end.column -= 1;\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n } else if (cmp == -2) {\n break;\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 if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n return foundFolds;\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 for (var i = 0; i < foldLines.length; i++) for (var j = 0; j < foldLines[i].folds.length; j++) folds.push(foldLines[i].folds[j]);\n return folds;\n };\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine) return null;\n var lastFold = {\n end: {\n column: 0\n }\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.getLine(fold.start.row).substring(lastFold.end.column, fold.start.column);\n break;\n } else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str) str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1) return str.substring(0, column - lastFold.end.column);else if (trim == 1) return str.substring(column - lastFold.end.column);else return str;\n };\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine) i = foldData.indexOf(startFoldLine);\n if (i == -1) 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) i = foldData.indexOf(startFoldLine);\n if (i == -1) 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 this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData,\n 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) rowCount -= last - start;else rowCount = 0; // in one fold\n }\n\n break;\n } else if (end >= first) {\n if (start >= first)\n // fold inside range\n rowCount -= end - start;else rowCount -= end - first + 1;\n }\n }\n return rowCount;\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 if (placeholder instanceof Fold) fold = placeholder;else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\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 if (!(startRow < endRow || startRow == endRow && startColumn <= endColumn - 2)) throw new Error(\"The range has to be at least 2 characters width\");\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold) return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn)) this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn)) this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\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 if (!added) foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode) this.$updateWrapData(foldLine.start.row, foldLine.start.row);else this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", {\n data: fold,\n action: \"add\"\n });\n return fold;\n };\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else 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 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 if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else {\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 if (!this.$updating) {\n if (this.$useWrapMode) this.$updateWrapData(startRow, endRow);else this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", {\n data: fold,\n 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 cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\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 this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\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 expandInner = true;\n } else if (typeof location == \"number\") range = new Range(location, 0, location, this.getLine(location).length);else if (\"row\" in location) range = Range.fromPoints(location, location);else range = location;\n folds = this.getFoldsInRangeList(range);\n if (expandInner) {\n this.removeFolds(folds);\n } else {\n var subFolds = folds;\n while (subFolds.length) {\n this.expandFolds(subFolds);\n subFolds = this.getFoldsInRangeList(range);\n }\n }\n if (folds.length) return folds;\n };\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null) startRow = foldLine.start.row;\n if (startColumn == null) startColumn = 0;\n if (endRow == null) endRow = foldLine.end.row;\n if (endColumn == null) endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow) return;\n if (row == startRow) {\n if (column < startColumn) return;\n lastColumn = Math.max(startColumn, lastColumn);\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 this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\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(foldLine, row, endColumn, startRow, startColumn);\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 return fd;\n };\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\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({\n row: cursor.row,\n column: cursor.column + 1\n })) {\n if (range.comparePoint(bracketPos) == 1) range.end = bracketPos;else range.start = bracketPos;\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 if (!fold) fold = this.getFoldAt(range.start.row, range.start.column);\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4) return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n this.addFold(placeholder, range);\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.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\") 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 range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n iterator = new TokenIterator(this, row, column);\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)) 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 token = iterator.getCurrentToken();\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n this.foldAll = function (startRow, endRow, depth) {\n if (depth == undefined) depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets) 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) foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\") continue;\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine() && range.end.row <= endRow && range.start.row >= startRow) {\n row = range.end.row;\n try {\n var fold = this.addFold(\"...\", range);\n if (fold) fold.collapseChildren = depth;\n } catch (e) {}\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]) throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style) return;\n this.$foldStyle = style;\n if (style == \"manual\") this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode) return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\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 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 this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || ignoreCurrent && fw[row]) return {};\n var i = row - 1,\n firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null) c = fw[i] = this.getFoldWidget(i);\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange) firstRange = range;\n if (range && range.end.row >= row) break;\n }\n i--;\n }\n return {\n range: i !== -1 && range,\n firstRange: firstRange\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 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)) el.className += \" ace_invalid\";\n }\n };\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget) return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n if (fold) {\n if (options.children || options.all) this.removeFold(fold);else this.expandFold(fold);\n return fold;\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 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) range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n return range;\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 if (range) return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\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) this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n }\n exports.Folding = Folding;\n});\nace.define(\"ace/edit_session/bracket_match\", [\"require\", \"exports\", \"module\", \"ace/token_iterator\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var TokenIterator = require(\"../token_iterator\").TokenIterator;\n var Range = require(\"../range\").Range;\n function BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0) return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\") return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) return null;\n if (match[1]) return this.$findClosingBracket(match[1], position);else return this.$findOpeningBracket(match[2], position);\n };\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true,\n range;\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 = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match) return null;\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos) 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) 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 return range;\n };\n this.$brackets = {\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 var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token) token = iterator.stepForward();\n if (!token) return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" + token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\").replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\") + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return {\n 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 if (token == null) break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n return null;\n };\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token) token = iterator.stepForward();\n if (!token) return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" + token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\").replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\") + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n while (true) {\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 {\n 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 if (token == null) break;\n valueIndex = 0;\n }\n return null;\n };\n }\n exports.BracketMatch = BracketMatch;\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\n var oop = require(\"./lib/oop\");\n var lang = require(\"./lib/lang\");\n var BidiHandler = require(\"./bidihandler\").BidiHandler;\n var config = require(\"./config\");\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n var Selection = require(\"./selection\").Selection;\n var TextMode = require(\"./mode/text\").Mode;\n var Range = require(\"./range\").Range;\n var Document = require(\"./document\").Document;\n var BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\n var SearchHighlight = require(\"./search_highlight\").SearchHighlight;\n var 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 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 if (typeof text != \"object\" || !text.getLine) text = new Document(text);\n this.$bidiHandler = new BidiHandler(this);\n this.setDocument(text);\n this.selection = new Selection(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n };\n EditSession.$uid = 0;\n (function () {\n oop.implement(this, EventEmitter);\n this.setDocument = function (doc) {\n if (this.doc) this.doc.removeListener(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n if (this.bgTokenizer) this.bgTokenizer.setDocument(this.getDocument());\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 this.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n while (low <= hi) {\n var mid = low + hi >> 1;\n var c = cacheArray[mid];\n if (val > c) low = mid + 1;else if (val < c) hi = mid - 1;else return mid;\n }\n return low - 1;\n };\n this.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer) this.bgTokenizer.start(0);\n };\n this.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n this.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager && !delta.ignore) {\n this.$deltasDoc.push(delta);\n if (removedFolds && removedFolds.length != 0) {\n this.$deltasFold.push({\n action: \"removeFolds\",\n folds: removedFolds\n });\n }\n this.$informUndoManager.schedule();\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 this.$resetRowCache(0);\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n this.getValue = 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,\n 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) break;\n }\n }\n token = tokens[i];\n if (!token) 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 this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n if (this.$informUndoManager) this.$informUndoManager.cancel();\n if (undoManager) {\n var self = this;\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n if (self.$deltasFold.length) {\n self.$deltas.push({\n group: \"fold\",\n deltas: self.$deltasFold\n });\n self.$deltasFold = [];\n }\n if (self.$deltasDoc.length) {\n self.$deltas.push({\n group: \"doc\",\n deltas: self.$deltasDoc\n });\n self.$deltasDoc = [];\n }\n if (self.$deltas.length > 0) {\n undoManager.execute({\n action: \"aceupdate\",\n args: [self.$deltas, self],\n merge: self.mergeUndoDeltas\n });\n }\n self.mergeUndoDeltas = false;\n self.$deltas = [];\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n };\n this.markUndoGroup = function () {\n if (this.$syncInformUndoManager) this.$syncInformUndoManager();\n };\n this.$defaultUndoManager = {\n undo: function () {},\n redo: function () {},\n reset: 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 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]) 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 < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n this.clearBreakpoints = function () {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n this.setBreakpoint = function (row, className) {\n if (className === undefined) className = \"ace_breakpoint\";\n if (className) this.$breakpoints[row] = className;else delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return id;\n };\n this.addDynamicMarker = function (marker, inFront) {\n if (!marker.update) return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return marker;\n };\n this.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker) return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n if (marker) {\n delete markers[markerId];\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n }\n };\n this.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n this.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n this.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz) clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n this.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n this.getAnnotations = function () {\n return this.$annotations || [];\n };\n this.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n this.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n } else {\n this.$autoNewLine = \"\\n\";\n }\n };\n this.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0) inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken) inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken) var re = this.tokenRe;else if (/^\\s+$/.test(line.slice(column - 1, column + 1))) var re = /\\s/;else var re = this.nonTokenRe;\n var start = column;\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\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 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) {\n this.setOption(\"useWorker\", useWorker);\n };\n this.getUseWorker = function () {\n return this.$useWorker;\n };\n this.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n this.$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) 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\"]) this.$modes[\"ace/mode/text\"] = new TextMode();\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) 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) this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n this.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder) this.$modeId = mode.$id;\n if (this.$mode === mode) return;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker) this.$startWorker();\n var tokenizer = mode.getTokenizer();\n if (tokenizer.addEventListener !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.addEventListener(\"update\", onReloadTokenizer);\n }\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n var _self = this;\n this.bgTokenizer.addEventListener(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n if (!$isPlaceholder) {\n if (mode.attachToSession) 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\");\n }\n };\n this.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\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 this.$scrollTop = 0;\n this.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop)) return;\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n this.getScrollTop = function () {\n return this.$scrollTop;\n };\n this.$scrollLeft = 0;\n this.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) return;\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) return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\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) width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n this.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode) return this.screenWidth = this.$wrapLimit;\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 for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len) break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (cache[i] == null) cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine) 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) return;\n this.$fromUndo = true;\n var lastUndoRange = null;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.group == \"doc\") {\n this.doc.revertDeltas(delta.deltas);\n lastUndoRange = this.$getUndoSelection(delta.deltas, true, lastUndoRange);\n } else {\n delta.deltas.forEach(function (foldDelta) {\n this.addFolds(foldDelta.folds);\n }, this);\n }\n }\n this.$fromUndo = false;\n lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n this.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length) return;\n this.$fromUndo = true;\n var lastUndoRange = null;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.group == \"doc\") {\n this.doc.applyDeltas(delta.deltas);\n lastUndoRange = this.$getUndoSelection(delta.deltas, false, lastUndoRange);\n }\n }\n this.$fromUndo = false;\n lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n this.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n this.$getUndoSelection = function (deltas, isUndo, lastUndoRange) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n var delta = deltas[0];\n var range, point;\n var lastDeltaIsInsert = false;\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n lastDeltaIsInsert = true;\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n lastDeltaIsInsert = false;\n }\n for (var i = 1; i < deltas.length; i++) {\n delta = deltas[i];\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 lastDeltaIsInsert = true;\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 lastDeltaIsInsert = false;\n }\n }\n if (lastUndoRange != null) {\n if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {\n lastUndoRange.start.column += range.end.column - range.start.column;\n lastUndoRange.end.column += range.end.column - range.start.column;\n }\n var cmp = lastUndoRange.compareRange(range);\n if (cmp == 1) {\n range.setStart(lastUndoRange.start);\n } else if (cmp == -1) {\n range.setEnd(lastUndoRange.end);\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 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) toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) 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 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) x.start.column += collDiff;\n if (x.end.row == oldStart.row) x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\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++) this.doc.insertInLine({\n row: row,\n column: 0\n }, 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 for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j) if (line.charAt(j) != ' ') 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 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 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 var lines = dir == 0 ? this.doc.getLines(firstRow, lastRow) : 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 this.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n this.$clipColumnToRow = function (row, column) {\n if (column < 0) return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n this.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\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 return {\n row: row,\n column: column\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(range.start.row, range.start.column);\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(range.end.row, range.end.column);\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 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 = {\n min: min,\n max: max\n };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode) this._signal(\"changeWrapMode\");\n }\n };\n this.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0) limits = {\n min: $printMargin,\n max: $printMargin\n };\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 this.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min) wrapLimit = Math.max(min, wrapLimit);\n if (max) wrapLimit = Math.min(max, wrapLimit);\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 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 this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\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 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 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 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 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 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 len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\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 if (useWrapMode) this.$updateWrapData(firstRow, lastRow);else this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n this.$updateRowLengthCache = function (firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\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 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(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(lines[row].substring(lastColumn, column), tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\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 this.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0,\n lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0) return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE) indentation += 1;else if (token == TAB) indentation += tabSize;else if (token == TAB_SPACE) continue;else break;\n }\n }\n if (isCode && indentedSoftWrap !== false) indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var displayed = tokens.slice(lastSplit, screenPos);\n var len = displayed.length;\n displayed.join(\"\").replace(/12/g, function () {\n len -= 1;\n }).replace(/2/g, function () {\n len -= 1;\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\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) 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 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 } else if (c == 32) {\n arr.push(SPACE);\n } else if (c > 39 && c < 48 || c > 57 && c < 64) {\n arr.push(PUNCTUATION);\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) return [0, 0];\n if (maxScreenColumn == null) maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\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 } else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n this.lineWidgets = null;\n this.getRowLength = function (row) {\n if (this.lineWidgets) var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;else 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 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 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;\n };\n this.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\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) return {\n row: 0,\n 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 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 var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\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 if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\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,\n 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 if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex)) screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column) docColumn = column - 1;\n if (foldLine) return foldLine.idxToPosition(docColumn);\n return {\n row: docRow,\n column: docColumn\n };\n };\n this.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\") var pos = this.$clipPositionToDocument(docRow.row, docRow.column);else pos = this.$clipPositionToDocument(docRow, docColumn);\n docRow = pos.row;\n docColumn = pos.column;\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 var rowEnd,\n row = 0;\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 var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow) break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n } else {\n rowEnd = row + 1;\n }\n screenRow += this.getRowLength(row);\n row = rowEnd;\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(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\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,\n i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\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) screenRows += this.$getWidgetScreenLength();\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) return [0, 0];\n if (!maxScreenColumn) maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\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 return [screenColumn, column];\n };\n };\n this.destroy = function () {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n this.$stopWorker();\n };\n this.isFullWidth = isFullWidth;\n function isFullWidth(c) {\n if (c < 0x1100) return false;\n return c >= 0x1100 && c <= 0x115F || c >= 0x11A3 && c <= 0x11A7 || c >= 0x11FA && c <= 0x11FF || c >= 0x2329 && c <= 0x232A || c >= 0x2E80 && c <= 0x2E99 || c >= 0x2E9B && c <= 0x2EF3 || c >= 0x2F00 && c <= 0x2FD5 || c >= 0x2FF0 && c <= 0x2FFB || c >= 0x3000 && c <= 0x303E || c >= 0x3041 && c <= 0x3096 || c >= 0x3099 && c <= 0x30FF || c >= 0x3105 && c <= 0x312D || c >= 0x3131 && c <= 0x318E || c >= 0x3190 && c <= 0x31BA || c >= 0x31C0 && c <= 0x31E3 || c >= 0x31F0 && c <= 0x321E || c >= 0x3220 && c <= 0x3247 || c >= 0x3250 && c <= 0x32FE || c >= 0x3300 && c <= 0x4DBF || c >= 0x4E00 && c <= 0xA48C || c >= 0xA490 && c <= 0xA4C6 || c >= 0xA960 && c <= 0xA97C || c >= 0xAC00 && c <= 0xD7A3 || c >= 0xD7B0 && c <= 0xD7C6 || c >= 0xD7CB && c <= 0xD7FB || c >= 0xF900 && c <= 0xFAFF || c >= 0xFE10 && c <= 0xFE19 || c >= 0xFE30 && c <= 0xFE52 || c >= 0xFE54 && c <= 0xFE66 || c >= 0xFE68 && c <= 0xFE6B || c >= 0xFF01 && c <= 0xFF60 || c >= 0xFFE0 && c <= 0xFFE6;\n }\n }).call(EditSession.prototype);\n require(\"./edit_session/folding\").Folding.call(EditSession.prototype);\n require(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n config.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function (value) {\n if (!value || value == \"off\") value = false;else if (value == \"free\") value = true;else if (value == \"printMargin\") value = -1;else if (typeof value == \"string\") value = parseInt(value, 10) || false;\n if (this.$wrap == value) 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) return \"printMargin\";\n if (!this.getWrapLimitRange().min) 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\" ? this.$mode.type != \"text\" : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$modified = true;\n this.$resetRowCache(0);\n this.$updateWrapData(0, this.getLength() - 1);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n initialValue: true\n },\n firstLineNumber: {\n set: function () {\n this._signal(\"changeBreakpoint\");\n },\n initialValue: 1\n },\n useWorker: {\n set: function (useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker) this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {\n initialValue: true\n },\n tabSize: {\n set: function (tabSize) {\n if (isNaN(tabSize) || this.$tabSize === tabSize) return;\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: {\n initialValue: false\n },\n overwrite: {\n set: function (val) {\n this._signal(\"changeOverwrite\");\n },\n initialValue: false\n },\n newLineMode: {\n set: function (val) {\n this.doc.setNewLineMode(val);\n },\n get: function () {\n return this.doc.getNewLineMode();\n },\n handlesSet: true\n },\n mode: {\n set: function (val) {\n this.setMode(val);\n },\n get: function () {\n return this.$modeId;\n }\n }\n });\n exports.EditSession = EditSession;\n});\nace.define(\"ace/search\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var lang = require(\"./lib/lang\");\n var oop = require(\"./lib/oop\");\n var Range = require(\"./range\").Range;\n var Search = function () {\n this.$options = {};\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) return false;\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 && options.skipCurrent != false && firstRange.isEqual(options.start)) {\n firstRange = null;\n return false;\n }\n return true;\n });\n return firstRange;\n };\n this.findAll = function (session) {\n var options = this.$options;\n if (!options.needle) return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range ? session.getLines(range.start.row, range.end.row) : session.doc.getAllLines();\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++) if (lines[row + j].search(re[j]) == -1) continue outer;\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 if (prevRange && prevRange.end.row === row && prevRange.end.column > startIndex) {\n continue;\n }\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2) 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 if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0,\n j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row) i++;\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row) j--;\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 return ranges;\n };\n this.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine) return replacement;\n if (!re) return;\n var match = re.exec(input);\n if (!match || match[0].length != input.length) return null;\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) replacement[i] = replacement[i].toUpperCase();else replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n return replacement;\n };\n this.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp) return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle) return options.re = false;\n if (!options.regExp) needle = lang.escapeRegExp(needle);\n if (options.wholeWord) needle = addWordBoundary(needle, options);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine) return options.re = this.$assembleMultilineRegExp(needle, modifier);\n try {\n var re = new RegExp(needle, modifier);\n } catch (e) {\n re = false;\n }\n return options.re = re;\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 this.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re) return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var range = options.range;\n var start = options.start;\n if (!start) start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start) start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n if (backwards) {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback)) return;\n for (row--; row >= firstRow; row--) if (forEachInLine(row, Number.MAX_VALUE, callback)) return;\n if (options.wrap == false) return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--) if (forEachInLine(row, Number.MAX_VALUE, callback)) return;\n };\n } else {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback)) return;\n for (row = row + 1; row <= lastRow; row++) if (forEachInLine(row, 0, callback)) return;\n if (options.wrap == false) return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++) if (forEachInLine(row, 0, callback)) return;\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) 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) 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)) return true;\n };\n } else if (backwards) {\n var forEachInLine = function (row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m,\n 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) 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)) return true;\n }\n };\n } else {\n var forEachInLine = function (row, startIndex, callback) {\n var line = session.getLine(row);\n var m;\n var last = startIndex;\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)) return true;\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length) return false;\n }\n }\n };\n }\n return {\n forEach: forEach\n };\n };\n }).call(Search.prototype);\n function 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 + wordBoundary(needle[needle.length - 1]);\n }\n exports.Search = Search;\n});\nace.define(\"ace/keyboard/hash_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var keyUtil = require(\"../lib/keys\");\n var useragent = require(\"../lib/useragent\");\n var KEY_MODS = keyUtil.KEY_MODS;\n function 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 function MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n }\n MultiHashHandler.prototype = HashHandler.prototype;\n (function () {\n this.addCommand = function (command) {\n if (this.commands[command.name]) this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey) this._buildKeyHash(command);\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) 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) ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n this.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined) position = key.position;\n key = key[this.platform];\n }\n if (!key) return;\n if (typeof command == \"function\") return this.addCommand({\n exec: command,\n bindKey: key,\n 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 function getPosition(command) {\n return typeof command == \"object\" && command.bindKey && command.bindKey.position || (command.isDefault ? -100 : 0);\n }\n this._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding,\n 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 if (typeof position != \"number\") {\n position = getPosition(command);\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) break;\n }\n commands.splice(i, 0, command);\n }\n };\n this.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command) return;\n if (typeof command === \"string\") return this.bindKey(command, name);\n if (typeof command === \"function\") command = {\n exec: command\n };\n if (typeof command !== \"object\") return;\n if (!command.name) command.name = name;\n this.addCommand(command);\n }, this);\n };\n this.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n this.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\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) {\n return x;\n });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode]) key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();else if (!parts.length) return {\n key: key,\n hashId: -1\n };else if (parts.length == 1 && parts[0] == \"shift\") return {\n key: key.toUpperCase(),\n 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\") console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return {\n key: key,\n 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 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 if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {\n command: \"null\"\n };\n }\n }\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1) data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0) data.$keyChain = \"\"; // reset keyChain\n }\n\n return {\n command: command\n };\n };\n this.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n }).call(HashHandler.prototype);\n exports.HashHandler = HashHandler;\n exports.MultiHashHandler = MultiHashHandler;\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\n var oop = require(\"../lib/oop\");\n var MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n var 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 oop.inherits(CommandManager, MultiHashHandler);\n (function () {\n oop.implement(this, EventEmitter);\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 if (typeof command === \"string\") command = this.commands[command];\n if (!command) return false;\n if (editor && editor.$readOnly && !command.readOnly) return false;\n if (command.isAvailable && !command.isAvailable(editor)) return false;\n var e = {\n editor: editor,\n command: command,\n args: args\n };\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n return e.returnValue === false ? false : true;\n };\n this.toggleRecording = function (editor) {\n if (this.$inReplay) return;\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.removeEventListener(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length) this.macro = this.oldMacro;\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 this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n this.replay = function (editor) {\n if (this.$inReplay || !this.macro) return;\n if (this.recording) return this.toggleRecording(editor);\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\") this.exec(x, editor);else this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n this.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\") x[0] = x[0].name;\n if (!x[1]) x = x[0];\n return x;\n });\n };\n }).call(CommandManager.prototype);\n exports.CommandManager = CommandManager;\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\n var lang = require(\"../lib/lang\");\n var config = require(\"../config\");\n var Range = require(\"../range\").Range;\n function bindKey(win, mac) {\n return {\n win: win,\n mac: mac\n };\n }\n exports.commands = [{\n name: \"showSettingsMenu\",\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 bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function (editor) {\n editor.selectAll();\n },\n readOnly: true\n }, {\n name: \"centerselection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function (editor) {\n editor.centerSelection();\n },\n readOnly: true\n }, {\n name: \"gotoline\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function (editor) {\n var line = parseInt(prompt(\"Enter line number:\"), 10);\n if (!isNaN(line)) {\n editor.gotoLine(line);\n }\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function (editor) {\n editor.session.toggleFold(false);\n },\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) {\n editor.session.toggleFold(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function (editor) {\n editor.session.toggleFoldWidget();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function (editor) {\n editor.session.toggleFoldWidget(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) {\n editor.session.foldAll();\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\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 bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function (editor) {\n editor.session.unfold();\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function (editor) {\n editor.findNext();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function (editor) {\n editor.findPrevious();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty()) editor.selection.selectWord();else editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty()) editor.selection.selectWord();else editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) {\n e.Search(editor);\n });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n bindKey: \"Insert\",\n exec: function (editor) {\n editor.toggleOverwrite();\n },\n readOnly: true\n }, {\n name: \"selecttostart\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function (editor) {\n editor.getSelection().selectFileStart();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function (editor) {\n editor.navigateFileStart();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function (editor) {\n editor.getSelection().selectUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function (editor, args) {\n editor.navigateUp(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function (editor) {\n editor.getSelection().selectFileEnd();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function (editor) {\n editor.navigateFileEnd();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function (editor) {\n editor.getSelection().selectDown();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function (editor, args) {\n editor.navigateDown(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function (editor) {\n editor.getSelection().selectWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function (editor) {\n editor.navigateWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function (editor) {\n editor.getSelection().selectLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function (editor) {\n editor.navigateLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function (editor) {\n editor.getSelection().selectLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function (editor, args) {\n editor.navigateLeft(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function (editor) {\n editor.getSelection().selectWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function (editor) {\n editor.navigateWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function (editor) {\n editor.getSelection().selectLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function (editor) {\n editor.navigateLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function (editor) {\n editor.getSelection().selectRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function (editor, args) {\n editor.navigateRight(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n bindKey: \"Shift-PageDown\",\n exec: function (editor) {\n editor.selectPageDown();\n },\n readOnly: true\n }, {\n name: \"pagedown\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function (editor) {\n editor.scrollPageDown();\n },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function (editor) {\n editor.gotoPageDown();\n },\n readOnly: true\n }, {\n name: \"selectpageup\",\n bindKey: \"Shift-PageUp\",\n exec: function (editor) {\n editor.selectPageUp();\n },\n readOnly: true\n }, {\n name: \"pageup\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function (editor) {\n editor.scrollPageUp();\n },\n readOnly: true\n }, {\n name: \"gotopageup\",\n bindKey: \"PageUp\",\n exec: function (editor) {\n editor.gotoPageUp();\n },\n readOnly: true\n }, {\n name: \"scrollup\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function (e) {\n e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight);\n },\n readOnly: true\n }, {\n name: \"scrolldown\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function (e) {\n e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight);\n },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n bindKey: \"Shift-Home\",\n exec: function (editor) {\n editor.getSelection().selectLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n bindKey: \"Shift-End\",\n exec: function (editor) {\n editor.getSelection().selectLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function (editor) {\n editor.commands.toggleRecording(editor);\n },\n readOnly: true\n }, {\n name: \"replaymacro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function (editor) {\n editor.commands.replay(editor);\n },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\n exec: function (editor) {\n editor.jumpToMatching();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\n exec: function (editor) {\n editor.jumpToMatching(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function (editor) {\n editor.jumpToMatching(true, true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n bindKey: bindKey(null, null),\n exec: function () {},\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n exec: function (editor) {},\n readOnly: true\n }, {\n name: \"cut\",\n exec: function (editor) {\n var range = editor.getSelectionRange();\n editor._emit(\"cut\", range);\n if (!editor.selection.isEmpty()) {\n editor.session.remove(range);\n editor.clearSelection();\n }\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n exec: function (editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function (editor) {\n editor.removeLines();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function (editor) {\n editor.duplicateSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function (editor) {\n editor.sortLines();\n },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function (editor) {\n editor.toggleCommentLines();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function (editor) {\n editor.toggleBlockComment();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function (editor) {\n editor.modifyNumber(1);\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function (editor) {\n editor.modifyNumber(-1);\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) {\n e.Search(editor, true);\n });\n }\n }, {\n name: \"undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function (editor) {\n editor.undo();\n }\n }, {\n name: \"redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function (editor) {\n editor.redo();\n }\n }, {\n name: \"copylinesup\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function (editor) {\n editor.copyLinesUp();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function (editor) {\n editor.moveLinesUp();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function (editor) {\n editor.copyLinesDown();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function (editor) {\n editor.moveLinesDown();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function (editor) {\n editor.remove(\"right\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function (editor) {\n editor.remove(\"left\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"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 bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function (editor) {\n editor.removeToLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function (editor) {\n editor.removeToLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\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 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 bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function (editor) {\n editor.removeWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function (editor) {\n editor.removeWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function (editor) {\n editor.blockOutdent();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function (editor) {\n editor.indent();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function (editor) {\n editor.blockOutdent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function (editor) {\n editor.blockIndent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n exec: function (editor, str) {\n editor.insert(str);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\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 bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function (editor) {\n editor.splitLine();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function (editor) {\n editor.transposeLetters();\n },\n multiSelectAction: function (editor) {\n editor.transposeSelections(1);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function (editor) {\n editor.toUpperCase();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function (editor) {\n editor.toLowerCase();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"expandtoline\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function (editor) {\n var range = editor.selection.getRange();\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 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 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 if (selectionEnd.row + 1 < editor.session.doc.getLength() - 1) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\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 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 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 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 editor.exitMultiSelectMode();\n editor.clearSelection();\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});\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\"], function (require, exports, module) {\n \"use strict\";\n\n require(\"./lib/fixoldbrowsers\");\n var oop = require(\"./lib/oop\");\n var dom = require(\"./lib/dom\");\n var lang = require(\"./lib/lang\");\n var useragent = require(\"./lib/useragent\");\n var TextInput = require(\"./keyboard/textinput\").TextInput;\n var MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\n var FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\n var KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\n var EditSession = require(\"./edit_session\").EditSession;\n var Search = require(\"./search\").Search;\n var Range = require(\"./range\").Range;\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n var CommandManager = require(\"./commands/command_manager\").CommandManager;\n var defaultCommands = require(\"./commands/default_commands\").commands;\n var config = require(\"./config\");\n var TokenIterator = require(\"./token_iterator\").TokenIterator;\n var Editor = function (renderer, session) {\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + ++Editor.$uid;\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 this.keyBinding = new KeyBinding(this);\n this.$blockScrolling = 0;\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n if (this.session && this.session.bgTokenizer) this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || new EditSession(\"\"));\n config.resetOptions(this);\n config._signal(\"editor\", this);\n };\n Editor.$uid = 0;\n (function () {\n oop.implement(this, EventEmitter);\n this.$initOperationListeners = function () {\n function last(a) {\n return a[a.length - 1];\n }\n this.selections = [];\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\n this.on(\"change\", function () {\n this.curOp || this.startOperation();\n this.curOp.docChanged = true;\n }.bind(this), true);\n this.on(\"changeSelection\", function () {\n this.curOp || this.startOperation();\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n this.curOp = null;\n this.prevOp = {};\n this.startOperation = function (commadEvent) {\n if (this.curOp) {\n if (!commadEvent || this.curOp.command) return;\n this.prevOp = this.curOp;\n }\n if (!commadEvent) {\n this.previousCommand = null;\n commadEvent = {};\n }\n this.$opResetTimer.schedule();\n this.curOp = {\n command: commadEvent.command || {},\n args: commadEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined) this.$blockScrolling++;\n };\n this.endOperation = function (e) {\n if (this.curOp) {\n if (e && e.returnValue === false) return this.curOp = null;\n this._signal(\"beforeEndOperation\");\n var command = this.curOp.command;\n if (command.name && this.$blockScrolling > 0) this.$blockScrolling--;\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\") this.renderer.animateScrolling(this.curOp.scrollTop);\n }\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) return;\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) this.mergeNextCommand = true;\n shouldMerge = shouldMerge && 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 && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (this.$mergeUndoDeltas != \"always\" && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge) this.session.mergeUndoDeltas = true;else if (mergeableCommands.indexOf(e.command.name) !== -1) this.sequenceStartTime = Date.now();\n };\n this.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler) _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) return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\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 var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\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 this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.onChangeMode();\n this.$blockScrolling += 1;\n this.onCursorChange();\n this.$blockScrolling -= 1;\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 this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", {\n oldEditor: this\n });\n session && session._signal(\"changeEditor\", {\n editor: this\n });\n if (session && session.bgTokenizer) 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 if (!cursorPos) this.selectAll();else if (cursorPos == 1) this.navigateFileEnd();else if (cursorPos == -1) this.navigateFileStart();\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\") || dom.computedStyle(this.container, \"fontSize\");\n };\n this.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n this.$highlightBrackets = function () {\n if (this.session.$bracketHighlight) {\n this.session.removeMarker(this.session.$bracketHighlight);\n this.session.$bracketHighlight = null;\n }\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 var pos = session.findMatchingBracket(self.getCursorPosition());\n if (pos) {\n var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\n } else if (session.$mode.getMatching) {\n var range = session.$mode.getMatching(self.session);\n }\n if (range) session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n this.$highlightTags = function () {\n if (this.$highlightTagPending) return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function () {\n self.$highlightTagPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n if (token.type.indexOf(\"tag-open\") != -1) {\n token = iterator.stepForward();\n if (!token) return;\n }\n var tag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n if (prevToken.value == '<') {\n do {\n prevToken = token;\n token = iterator.stepForward();\n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === ' 1)) highlight = false;\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 this.onSelectionChange = function (e) {\n var session = this.session;\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\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 var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n this._signal(\"changeSelection\");\n };\n this.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine()) return;\n var startOuter = selection.start.column - 1;\n var endOuter = selection.end.column + 1;\n var line = session.getLine(selection.start.row);\n var lineCols = line.length;\n var needle = line.substring(Math.max(startOuter, 0), Math.min(endOuter, lineCols));\n if (startOuter >= 0 && /^[\\w\\d]/.test(needle) || endOuter <= lineCols && /[\\w\\d]$/.test(needle)) return;\n needle = line.substring(selection.start.column, selection.end.column);\n if (!/^[\\w\\d]+$/.test(needle)) return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n return re;\n };\n this.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n this.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n this.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n this.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n this.onChangeMode = function (e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n this.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n this.onChangeWrapMode = function () {\n this.renderer.onResize(true);\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 this._signal(\"copy\", text);\n return 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 = {\n text: text,\n event: event\n };\n this.commands.exec(\"paste\", this, e);\n };\n this.$handlePaste = function (e) {\n if (typeof e == \"string\") e = {\n text: e\n };\n this._signal(\"paste\", e);\n var text = e.text;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n this.insert(text);\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n if (lines.length > ranges.length || lines.length < 2 || !lines[1]) return this.commands.exec(\"insertstring\", this, text);\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty()) this.session.remove(range);\n this.session.insert(range.start, lines[i]);\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 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 this.session.mergeUndoDeltas = false;\n this.$mergeNextCommand = false;\n }\n text = transform.text;\n }\n }\n if (text == \"\\t\") text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\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 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 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 var end = session.insert(cursor, text);\n if (transform && transform.selection) {\n if (transform.selection.length == 2) {\n // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n } else {\n // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({\n row: cursor.row + 1,\n column: 0\n }, lineIndent);\n }\n if (shouldOutdent) mode.autoOutdent(lineState, session, cursor.row);\n };\n this.onTextInput = function (text) {\n this.keyBinding.onTextInput(text);\n };\n this.onCommandKey = function (e, hashId, keyCode) {\n 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 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 this.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\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 this.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\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 this.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n this.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\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\") this.selection.selectLeft();else this.selection.selectRight();\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 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) range = new_range;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n this.removeWordRight = function () {\n if (this.selection.isEmpty()) this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeWordLeft = function () {\n if (this.selection.isEmpty()) this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineStart = function () {\n if (this.selection.isEmpty()) this.selection.selectLineStart();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineEnd = function () {\n if (this.selection.isEmpty()) this.selection.selectLineEnd();\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 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 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 var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0) return;\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 } 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 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 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 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 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 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 var lines = [];\n for (var i = rows.first; i <= rows.last; i++) lines.push(session.getLine(i));\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 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 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 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 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 var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\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 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 };\n this.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\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 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 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) break;else if (!copy && subRows.first > last + 1) 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 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 return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n this.onCompositionStart = function (text) {\n this.renderer.showComposition(this.getCursorPosition());\n };\n this.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\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 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 this.$blockScrolling++;\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 this.$blockScrolling--;\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null) renderer.scrollCursorIntoView(null, 0.5);\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.$blockScrolling += 1;\n this.selection.selectAll();\n this.$blockScrolling -= 1;\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 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 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 bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\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 if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n } else if (token && token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n if (prevToken.value === '<') {\n depth[token.value]++;\n } else if (prevToken.value === '= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n this.selection.setSelectionRange(selection);\n this.$blockScrolling -= 1;\n return replaced;\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) options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp) options.needle = needle;else if (typeof needle == \"object\") oop.mixin(options, needle);\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range) || 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({\n needle: needle\n });\n }\n this.$search.set(options);\n if (!options.start) this.$search.set({\n start: range\n });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll) return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards) range.start = range.end;else range.end = range.start;\n this.selection.setRange(range);\n };\n this.findNext = function (options, animate) {\n this.find({\n skipCurrent: true,\n backwards: false\n }, options, animate);\n };\n this.findPrevious = function (options, animate) {\n this.find(options, {\n skipCurrent: true,\n backwards: true\n }, animate);\n };\n this.revealRange = function (range, animate) {\n this.$blockScrolling += 1;\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n this.$blockScrolling -= 1;\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false) this.renderer.animateScrolling(scrollTop);\n };\n this.undo = function () {\n this.$blockScrolling++;\n this.session.getUndoManager().undo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.redo = function () {\n this.$blockScrolling++;\n this.session.getUndoManager().redo();\n this.$blockScrolling--;\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.destroy = function () {\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session) {\n this.session.destroy();\n }\n };\n this.setAutoScrollEditorIntoView = function (enable) {\n if (!enable) return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor) 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) rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused() || self.searchBox && self.searchBox.isFocused())) {\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 && 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) 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 this.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer) 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 }).call(Editor.prototype);\n config.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function (style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", {\n data: style\n });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function () {\n this.$updateHighlightActiveLine();\n },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function (shouldHighlight) {\n this.$onSelectionChange();\n },\n initialValue: true\n },\n readOnly: {\n set: function (readOnly) {\n this.$resetCursorStyle();\n },\n initialValue: false\n },\n cursorStyle: {\n set: function (val) {\n this.$resetCursorStyle();\n },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {\n initialValue: true\n },\n wrapBehavioursEnabled: {\n initialValue: true\n },\n autoScrollEditorIntoView: {\n set: function (val) {\n this.setAutoScrollEditorIntoView(val);\n }\n },\n keyboardHandler: {\n set: function (val) {\n this.setKeyboardHandler(val);\n },\n get: function () {\n return this.keybindingId;\n },\n handlesSet: true\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 showLineNumbers: \"renderer\",\n showGutter: \"renderer\",\n displayIndentGuides: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n });\n exports.Editor = Editor;\n});\nace.define(\"ace/undomanager\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var UndoManager = function () {\n this.reset();\n };\n (function () {\n this.execute = function (options) {\n var deltaSets = options.args[0];\n this.$doc = options.args[1];\n if (options.merge && this.hasUndo()) {\n this.dirtyCounter--;\n deltaSets = this.$undoStack.pop().concat(deltaSets);\n }\n this.$undoStack.push(deltaSets);\n this.$redoStack = [];\n if (this.dirtyCounter < 0) {\n this.dirtyCounter = NaN;\n }\n this.dirtyCounter++;\n };\n this.undo = function (dontSelect) {\n var deltaSets = this.$undoStack.pop();\n var undoSelectionRange = null;\n if (deltaSets) {\n undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);\n this.$redoStack.push(deltaSets);\n this.dirtyCounter--;\n }\n return undoSelectionRange;\n };\n this.redo = function (dontSelect) {\n var deltaSets = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSets) {\n redoSelectionRange = this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);\n this.$undoStack.push(deltaSets);\n this.dirtyCounter++;\n }\n return redoSelectionRange;\n };\n this.reset = function () {\n this.$undoStack = [];\n this.$redoStack = [];\n this.dirtyCounter = 0;\n };\n this.hasUndo = function () {\n return this.$undoStack.length > 0;\n };\n this.hasRedo = function () {\n return this.$redoStack.length > 0;\n };\n this.markClean = function () {\n this.dirtyCounter = 0;\n };\n this.isClean = function () {\n return this.dirtyCounter === 0;\n };\n this.$serializeDeltas = function (deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $serializeDelta);\n };\n this.$deserializeDeltas = function (deltaSets) {\n return cloneDeltaSetsObj(deltaSets, $deserializeDelta);\n };\n function $serializeDelta(delta) {\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines.length == 1 ? null : delta.lines,\n text: delta.lines.length == 1 ? delta.lines[0] : null\n };\n }\n function $deserializeDelta(delta) {\n return {\n action: delta.action,\n start: delta.start,\n end: delta.end,\n lines: delta.lines || [delta.text]\n };\n }\n function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {\n var deltaSets_new = new Array(deltaSets_old.length);\n for (var i = 0; i < deltaSets_old.length; i++) {\n var deltaSet_old = deltaSets_old[i];\n var deltaSet_new = {\n group: deltaSet_old.group,\n deltas: new Array(deltaSet_old.length)\n };\n for (var j = 0; j < deltaSet_old.deltas.length; j++) {\n var delta_old = deltaSet_old.deltas[j];\n deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);\n }\n deltaSets_new[i] = deltaSet_new;\n }\n return deltaSets_new;\n }\n }).call(UndoManager.prototype);\n exports.UndoManager = UndoManager;\n});\nace.define(\"ace/layer/gutter\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n var oop = require(\"../lib/oop\");\n var lang = require(\"../lib/lang\");\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n var Gutter = function (parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$cells = [];\n };\n (function () {\n oop.implement(this, EventEmitter);\n this.setSession = function (session) {\n if (this.session) this.session.removeEventListener(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session) session.on(\"change\", this.$updateAnnotations);\n };\n this.addGutterDecoration = function (row, className) {\n if (window.console) console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function (row, className) {\n if (window.console) console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n this.setAnnotations = function (annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo) rowInfo = this.$annotations[row] = {\n text: []\n };\n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) rowInfo.text.push(annoText);\n var type = annotation.type;\n if (type == \"error\") rowInfo.className = \" ace_error\";else if (type == \"warning\" && rowInfo.className != \" ace_error\") rowInfo.className = \" ace_warning\";else if (type == \"info\" && !rowInfo.className) rowInfo.className = \" ace_info\";\n }\n };\n this.$updateAnnotations = function (delta) {\n if (!this.$annotations.length) return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {} else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n } else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n this.update = function (config) {\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset,\n // needed to compensate for hor scollbar\n session.getLength() - 1);\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineNumber = 0;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > 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.$cells.length > index + 1) {\n cell = this.$cells.pop();\n this.element.removeChild(cell.element);\n }\n break;\n }\n cell = this.$cells[++index];\n if (!cell) {\n cell = {\n element: null,\n textNode: null,\n foldWidget: null\n };\n cell.element = dom.createElement(\"div\");\n cell.textNode = document.createTextNode('');\n cell.element.appendChild(cell.textNode);\n this.element.appendChild(cell.element);\n this.$cells[index] = cell;\n }\n var className = \"ace_gutter-cell \";\n if (breakpoints[row]) className += breakpoints[row];\n if (decorations[row]) className += decorations[row];\n if (this.$annotations[row]) className += this.$annotations[row].className;\n if (cell.element.className != className) cell.element.className = className;\n var height = session.getRowLength(row) * config.lineHeight + \"px\";\n if (height != cell.element.style.height) cell.element.style.height = height;\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null) c = foldWidgets[row] = session.getFoldWidget(row);\n }\n if (c) {\n if (!cell.foldWidget) {\n cell.foldWidget = dom.createElement(\"span\");\n cell.element.appendChild(cell.foldWidget);\n }\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row) className += \" ace_closed\";else className += \" ace_open\";\n if (cell.foldWidget.className != className) cell.foldWidget.className = className;\n var height = config.lineHeight + \"px\";\n if (cell.foldWidget.style.height != height) cell.foldWidget.style.height = height;\n } else {\n if (cell.foldWidget) {\n cell.element.removeChild(cell.foldWidget);\n cell.foldWidget = null;\n }\n }\n var text = lastLineNumber = gutterRenderer ? gutterRenderer.getText(session, row) : row + firstLineNumber;\n if (text !== cell.textNode.data) cell.textNode.data = text;\n row++;\n }\n this.element.style.height = config.minHeight + \"px\";\n if (this.$fixedWidth || session.$useWrapMode) lastLineNumber = session.getLength() + firstLineNumber;\n var gutterWidth = gutterRenderer ? gutterRenderer.getWidth(session, lastLineNumber, config) : lastLineNumber.toString().length * config.characterWidth;\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.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._emit(\"changeGutterWidth\", gutterWidth);\n }\n };\n this.$fixedWidth = false;\n this.$showLineNumbers = true;\n this.$renderer = \"\";\n this.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function () {\n return \"\";\n },\n getText: function () {\n return \"\";\n }\n };\n };\n this.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n this.$showFoldWidgets = true;\n this.setShowFoldWidgets = function (show) {\n if (show) dom.addCssClass(this.element, \"ace_folding-enabled\");else dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n this.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n this.$computePadding = function () {\n if (!this.element.firstChild) return {\n left: 0,\n right: 0\n };\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\n this.$padding.right = parseInt(style.paddingRight) || 0;\n return this.$padding;\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) return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right) return \"foldWidgets\";\n };\n }).call(Gutter.prototype);\n exports.Gutter = Gutter;\n});\nace.define(\"ace/layer/marker\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n var dom = require(\"../lib/dom\");\n var 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 (function () {\n this.$padding = 0;\n this.setPadding = function (padding) {\n this.$padding = padding;\n };\n this.setSession = function (session) {\n this.session = session;\n };\n this.setMarkers = function (markers) {\n this.markers = markers;\n };\n this.update = function (config) {\n if (!config) return;\n this.config = config;\n var html = [];\n for (var key in this.markers) {\n var marker = this.markers[key];\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + (this.session.$bidiHandler.isBidiRow(range.start.row) ? this.session.$bidiHandler.getPosLeft(range.start.column) : 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\") this.drawTextMarker(html, range, marker.clazz, config);else this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n this.drawBidiSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n } else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n }\n this.element.innerHTML = html.join(\"\");\n };\n this.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\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 clazzModified = null;\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 clazzModified = clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\" + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end);\n if (this.session.$bidiHandler.isBidiRow(row)) {\n this.drawBidiSingleLineMarker(stringBuilder, lineRange, clazzModified, layerConfig, row == end ? 0 : 1, extraStyle);\n } else {\n this.drawSingleLineMarker(stringBuilder, lineRange, clazzModified, layerConfig, row == end ? 0 : 1, extraStyle);\n }\n }\n };\n this.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height, top, left;\n extraStyle = extraStyle || \"\";\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 height = config.lineHeight;\n top = this.$getTop(range.start.row, config);\n left = padding + range.start.column * config.characterWidth;\n stringBuilder.push(\"
\");\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 var width = range.end.column * config.characterWidth;\n height = config.lineHeight;\n top = this.$getTop(range.end.row, config);\n stringBuilder.push(\"
\");\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0) return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n stringBuilder.push(\"
\");\n };\n this.drawSingleLineMarker = function (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 var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n stringBuilder.push(\"
\");\n };\n this.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight,\n top = this.$getTop(range.start.row, config),\n padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n stringBuilder.push(\"
\");\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) height += this.$getTop(range.end.row, config) - top;\n stringBuilder.push(\"
\");\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 stringBuilder.push(\"
\");\n };\n }).call(Marker.prototype);\n exports.Marker = Marker;\n});\nace.define(\"ace/layer/text\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/lib/useragent\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n var dom = require(\"../lib/dom\");\n var lang = require(\"../lib/lang\");\n var useragent = require(\"../lib/useragent\");\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n var Text = function (parentEl) {\n this.element = 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 };\n (function () {\n oop.implement(this, EventEmitter);\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.$updateEolChar = function () {\n var EOL_CHAR = this.session.doc.getNewLineCharacter() == \"\\n\" ? 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 this.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.padding = \"0 \" + padding + \"px\";\n };\n this.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n this.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\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 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) this.$computeTabString();\n };\n this.showInvisibles = false;\n this.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles) return false;\n this.showInvisibles = showInvisibles;\n this.$computeTabString();\n return true;\n };\n this.displayIndentGuides = true;\n this.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display) return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n this.$tabStrings = [];\n this.onChangeTabSize = 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.showInvisibles) {\n tabStr.push(\"\" + lang.stringRepeat(this.TAB_CHAR, i) + \"\");\n } else {\n tabStr.push(lang.stringRepeat(\" \", i));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = \"\";\n var tabClass = \"\";\n if (this.showInvisibles) {\n className += \" ace_invisible\";\n spaceClass = \" ace_invisible_space\";\n tabClass = \" ace_invisible_tab\";\n var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\n var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\n } else {\n var spaceContent = lang.stringRepeat(\" \", this.tabSize);\n var tabContent = spaceContent;\n }\n this.$tabStrings[\" \"] = \"\" + spaceContent + \"\";\n this.$tabStrings[\"\\t\"] = \"\" + tabContent + \"\";\n }\n };\n this.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow || this.config.firstRow != config.firstRow) {\n this.scrollLines(config);\n }\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\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 var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\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) break;\n var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n var html = [];\n this.$renderLine(html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false);\n lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n lineElement.innerHTML = html.join(\"\");\n }\n row++;\n }\n };\n this.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (!oldConfig || oldConfig.lastRow < config.firstRow) return this.update(config);\n if (config.lastRow < oldConfig.firstRow) return this.update(config);\n var el = this.element;\n if (oldConfig.firstRow < config.firstRow) for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) el.removeChild(el.firstChild);\n if (oldConfig.lastRow > config.lastRow) for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--) el.removeChild(el.lastChild);\n if (config.firstRow < oldConfig.firstRow) {\n var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);\n if (el.firstChild) el.insertBefore(fragment, el.firstChild);else el.appendChild(fragment);\n }\n if (config.lastRow > oldConfig.lastRow) {\n var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);\n el.appendChild(fragment);\n }\n };\n this.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = this.element.ownerDocument.createDocumentFragment();\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\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) break;\n var container = dom.createElement(\"div\");\n var html = [];\n this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n container.innerHTML = html.join(\"\");\n if (this.$useLineGroups()) {\n container.className = 'ace_line_group';\n fragment.appendChild(container);\n container.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n } else {\n while (container.firstChild) fragment.appendChild(container.firstChild);\n }\n row++;\n }\n return fragment;\n };\n this.update = function (config) {\n this.config = config;\n var html = [];\n var firstRow = config.firstRow,\n lastRow = config.lastRow;\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\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) break;\n if (this.$useLineGroups()) html.push(\"
\");\n this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n if (this.$useLineGroups()) html.push(\"
\"); // end the line group\n\n row++;\n }\n this.element.innerHTML = html.join(\"\");\n };\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n this.$renderToken = function (stringBuilder, screenColumn, token, value) {\n var self = this;\n var replaceReg = /\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\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 var replaceFunc = function (c, a, b, tabIdx, idx4) {\n if (a) {\n return self.showInvisibles ? \"\" + lang.stringRepeat(self.SPACE_CHAR, c.length) + \"\" : c;\n } else if (c == \"&\") {\n return \"&\";\n } else if (c == \"<\") {\n return \"<\";\n } else if (c == \">\") {\n return \">\";\n } else if (c == \"\\t\") {\n var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);\n screenColumn += tabSize - 1;\n return self.$tabStrings[tabSize];\n } else if (c == \"\\u3000\") {\n var classToUse = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\n screenColumn += 1;\n return \"\" + space + \"\";\n } else if (b) {\n return \"\" + self.SPACE_CHAR + \"\";\n } else {\n screenColumn += 1;\n return \"\" + c + \"\";\n }\n };\n var output = value.replace(replaceReg, replaceFunc);\n if (!this.$textToken[token.type]) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var style = \"\";\n if (token.type == \"fold\") style = \" style='width:\" + token.value.length * this.config.characterWidth + \"px;' \";\n stringBuilder.push(\"\", output, \"\");\n } else {\n stringBuilder.push(output);\n }\n return screenColumn + value.length;\n };\n this.renderIndentGuide = function (stringBuilder, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max) return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n stringBuilder.push(lang.stringRepeat(this.$tabStrings[\" \"], cols / this.tabSize));\n return value.substr(cols);\n } else if (value[0] == \"\\t\") {\n stringBuilder.push(lang.stringRepeat(this.$tabStrings[\"\\t\"], cols));\n return value.substr(cols);\n }\n return value;\n };\n this.$renderWrappedLine = function (stringBuilder, tokens, splits, onlyContents) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(stringBuilder, value, splitChars);\n if (!value) continue;\n chars -= value.length;\n }\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n chars += value.length;\n } else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n if (!onlyContents) {\n stringBuilder.push(\"\", \"
\");\n }\n stringBuilder.push(lang.stringRepeat(\"\\xa0\", splits.indent));\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(stringBuilder, screenColumn, token, value);\n }\n }\n }\n };\n this.$renderSimpleLine = function (stringBuilder, tokens) {\n var screenColumn = 0;\n var token = tokens[0];\n var value = token.value;\n if (this.displayIndentGuides) value = this.renderIndentGuide(stringBuilder, value);\n if (value) screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n for (var i = 1; i < tokens.length; i++) {\n token = tokens[i];\n value = token.value;\n screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n }\n };\n this.$renderLine = function (stringBuilder, row, onlyContents, foldLine) {\n if (!foldLine && foldLine != false) foldLine = this.session.getFoldLine(row);\n if (foldLine) var tokens = this.$getFoldLineTokens(row, foldLine);else var tokens = this.session.getTokens(row);\n if (!onlyContents) {\n stringBuilder.push(\"
\");\n }\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);else this.$renderSimpleLine(stringBuilder, tokens);\n }\n if (this.showInvisibles) {\n if (foldLine) row = foldLine.end.row;\n stringBuilder.push(\"\", row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR, \"\");\n }\n if (!onlyContents) stringBuilder.push(\"
\");\n };\n this.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n function addTokens(tokens, from, to) {\n var idx = 0,\n col = 0;\n while (col + tokens[idx].value.length < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length) return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > to - from) value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\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 renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\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) tokens = session.getTokens(row);\n if (tokens.length) addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n this.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n this.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$measureNode) this.$measureNode.parentNode.removeChild(this.$measureNode);\n delete this.$measureNode;\n };\n }).call(Text.prototype);\n exports.Text = Text;\n});\nace.define(\"ace/layer/cursor\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n var isIE8;\n var Cursor = function (parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n if (isIE8 === undefined) isIE8 = !(\"opacity\" in this.element.style);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = (isIE8 ? this.$updateVisibility : this.$updateOpacity).bind(this);\n };\n (function () {\n this.$updateVisibility = function (val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;) cursors[i].style.visibility = val ? \"\" : \"hidden\";\n };\n this.$updateOpacity = function (val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;) cursors[i].style.opacity = val ? \"\" : \"0\";\n };\n this.$padding = 0;\n this.setPadding = function (padding) {\n this.$padding = padding;\n };\n this.setSession = function (session) {\n this.session = session;\n };\n this.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n this.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n this.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking && !isIE8) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.$updateCursors = this.$updateOpacity.bind(this);\n this.restartTimer();\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 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 this.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n this.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n this.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n if (this.smoothBlinking) {\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n update(true);\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) return;\n if (this.smoothBlinking) {\n setTimeout(function () {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }.bind(this));\n }\n var blink = function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n };\n this.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session) return {\n left: 0,\n top: 0\n };\n if (!position) 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) ? this.session.$bidiHandler.getPosLeft(pos.column) : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * this.config.lineHeight;\n return {\n left: cursorLeft,\n top: cursorTop\n };\n };\n this.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0,\n cursorIndex = 0;\n if (selections === undefined || selections.length === 0) {\n selections = [{\n 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 || pixelPos.top < 0) && i > 1) {\n continue;\n }\n var style = (this.cursors[cursorIndex++] || this.addCursor()).style;\n if (!this.drawCursor) {\n style.left = pixelPos.left + \"px\";\n style.top = pixelPos.top + \"px\";\n style.width = config.characterWidth + \"px\";\n style.height = config.lineHeight + \"px\";\n } else {\n this.drawCursor(style, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex) this.removeCursor();\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n this.drawCursor = null;\n this.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite) dom.addCssClass(this.element, \"ace_overwrite-cursors\");else dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n this.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n }).call(Cursor.prototype);\n exports.Cursor = Cursor;\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\n var oop = require(\"./lib/oop\");\n var dom = require(\"./lib/dom\");\n var event = require(\"./lib/event\");\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n var MAX_SCROLL_H = 0x8000;\n var ScrollBar = function (parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n };\n (function () {\n oop.implement(this, EventEmitter);\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);\n var VScrollBar = function (parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n renderer.$scrollbarWidth = this.width = dom.scrollbarWidth(parent.ownerDocument);\n this.inner.style.width = this.element.style.width = (this.width || 15) + 5 + \"px\";\n this.$minWidth = 0;\n };\n oop.inherits(VScrollBar, ScrollBar);\n (function () {\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\", {\n data: this.scrollTop\n });\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 = 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 }).call(VScrollBar.prototype);\n var HScrollBar = function (parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.height = renderer.$scrollbarWidth;\n this.inner.style.height = this.element.style.height = (this.height || 15) + 5 + \"px\";\n };\n oop.inherits(HScrollBar, ScrollBar);\n (function () {\n this.classSuffix = '-h';\n this.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", {\n data: this.scrollLeft\n });\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 }).call(HScrollBar.prototype);\n exports.ScrollBar = VScrollBar; // backward compatibility\n exports.ScrollBarV = VScrollBar; // backward compatibility\n exports.ScrollBarH = HScrollBar; // backward compatibility\n\n exports.VScrollBar = VScrollBar;\n exports.HScrollBar = HScrollBar;\n});\nace.define(\"ace/renderloop\", [\"require\", \"exports\", \"module\", \"ace/lib/event\"], function (require, exports, module) {\n \"use strict\";\n\n var event = require(\"./lib/event\");\n var RenderLoop = function (onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.window = win || window;\n };\n (function () {\n this.schedule = function (change) {\n this.changes = this.changes | change;\n if (!this.pending && this.changes) {\n this.pending = true;\n var _self = this;\n event.nextFrame(function () {\n _self.pending = false;\n var changes;\n while (changes = _self.changes) {\n _self.changes = 0;\n _self.onRender(changes);\n }\n }, this.window);\n }\n };\n }).call(RenderLoop.prototype);\n exports.RenderLoop = RenderLoop;\n});\nace.define(\"ace/layer/font_metrics\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/lib/useragent\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n var oop = require(\"../lib/oop\");\n var dom = require(\"../lib/dom\");\n var lang = require(\"../lib/lang\");\n var useragent = require(\"../lib/useragent\");\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n var CHAR_COUNT = 0;\n var FontMetrics = exports.FontMetrics = function (parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n if (!CHAR_COUNT) this.$testFractionalRect();\n this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = {\n width: 0,\n height: 0\n };\n this.checkForSizeChanges();\n };\n (function () {\n oop.implement(this, EventEmitter);\n this.$characterSize = {\n width: 0,\n height: 0\n };\n this.$testFractionalRect = function () {\n var el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(el.style);\n el.style.width = \"0.2px\";\n document.documentElement.appendChild(el);\n var w = el.getBoundingClientRect().width;\n if (w > 0 && w < 1) CHAR_COUNT = 50;else CHAR_COUNT = 100;\n el.parentNode.removeChild(el);\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 if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n } else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n this.checkForSizeChanges = function () {\n var 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\", {\n data: size\n });\n }\n };\n this.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer) return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = setInterval(function () {\n self.checkForSizeChanges();\n }, 500);\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 this.$measureSizes = function () {\n if (CHAR_COUNT === 50) {\n var rect = null;\n try {\n rect = this.$measureNode.getBoundingClientRect();\n } catch (e) {\n rect = {\n width: 0,\n height: 0\n };\n }\n var size = {\n height: rect.height,\n width: rect.width / CHAR_COUNT\n };\n } else {\n var size = {\n height: this.$measureNode.clientHeight,\n width: this.$measureNode.clientWidth / CHAR_COUNT\n };\n }\n if (size.width === 0 || size.height === 0) return null;\n return size;\n };\n this.$measureCharWidth = function (ch) {\n this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\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 this.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.el && this.el.parentNode) this.el.parentNode.removeChild(this.el);\n };\n }).call(FontMetrics.prototype);\n});\nace.define(\"ace/virtual_renderer\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/config\", \"ace/lib/useragent\", \"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\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n var dom = require(\"./lib/dom\");\n var config = require(\"./config\");\n var useragent = require(\"./lib/useragent\");\n var GutterLayer = require(\"./layer/gutter\").Gutter;\n var MarkerLayer = require(\"./layer/marker\").Marker;\n var TextLayer = require(\"./layer/text\").Text;\n var CursorLayer = require(\"./layer/cursor\").Cursor;\n var HScrollBar = require(\"./scrollbar\").HScrollBar;\n var VScrollBar = require(\"./scrollbar\").VScrollBar;\n var RenderLoop = require(\"./renderloop\").RenderLoop;\n var FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n var editorCss = \".ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\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;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\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;\\\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 {\\\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 {\\\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;\\\ntext-indent: -1em;\\\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: inherit;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\ntext-indent: 0;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\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;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\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_smooth-blinking .ace_cursor {\\\n-webkit-transition: opacity 0.18s;\\\ntransition: opacity 0.18s;\\\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_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\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: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\\\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;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\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 {\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\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_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\n-webkit-transition: opacity 0.4s ease 0.05s;\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\n-webkit-transition: opacity 0.05s ease 0.05s;\\\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_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_text-input-ios {\\\nposition: absolute !important;\\\ntop: -100000px !important;\\\nleft: -100000px !important;\\\n}\\\n\";\n dom.importCssString(editorCss, \"ace_editor.css\");\n var VirtualRenderer = function (container, theme) {\n var _self = this;\n this.container = container || dom.createElement(\"div\");\n this.$keepTextAreaAtCursor = !useragent.isOldIE;\n dom.addCssClass(this.container, \"ace_editor\");\n this.setTheme(theme);\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 this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar = this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation) _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation) _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.addEventListener(\"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 this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\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 this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n config._emit(\"renderer\", this);\n };\n (function () {\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 oop.implement(this, EventEmitter);\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 this.layerConfig.characterWidth = this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight = this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n };\n this.setSession = function (session) {\n if (this.session) this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0) session.setScrollTop(-this.scrollMargin.top);\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) return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\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) lastRow = Infinity;\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n } else {\n if (this.$changedLines.firstRow > firstRow) this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow) this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force) this.$changedLines.lastRow = this.layerConfig.lastRow;else return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow) return;\n this.$loop.schedule(this.CHANGE_LINES);\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 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) this.$renderChanges(this.CHANGE_FULL, true);else this.$loop.schedule(this.CHANGE_FULL);\n };\n this.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n this.$changes = 0;\n this.$updateSizeAsync = function () {\n if (this.$loop.pending) this.$size.$dirty = true;else this.onResize();\n };\n this.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2) return;else if (this.resizing > 0) this.resizing++;else this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height) height = el.clientHeight || el.scrollHeight;\n if (!width) width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (!this.$size.scrollerHeight || !width && !height) return this.resizing = 0;\n if (force) this.$gutterLayer.$padding = null;\n if (force) this.$renderChanges(changes | this.$changes, true);else this.$loop.schedule(changes | this.$changes);\n if (this.resizing) this.resizing = 0;\n this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\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 size.scrollerHeight = size.height;\n if (this.$horizScroll) size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null) gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n this.scrollBarH.element.style.left = this.scroller.style.left = gutterWidth + \"px\";\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth());\n this.scrollBarH.element.style.right = this.scroller.style.right = this.scrollBarV.getWidth() + \"px\";\n this.scroller.style.bottom = this.scrollBarH.getHeight() + \"px\";\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) changes |= this.CHANGE_FULL;\n }\n size.$dirty = !width || !height;\n if (changes) this._signal(\"resize\", oldSize);\n return changes;\n };\n this.onGutterResize = function () {\n var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n if (gutterWidth != this.gutterWidth) this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\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 this.$loop.schedule(this.CHANGE_MARKER);\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 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 this.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n this.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n this.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n this.$updateGutterLineHighlight = function () {\n var pos = this.$cursorLayer.$pixelPos;\n var height = this.layerConfig.lineHeight;\n if (this.session.getUseWrapMode()) {\n var cursor = this.session.selection.getCursor();\n cursor.column = 0;\n pos = this.$cursorLayer.getPixelPosition(cursor, true);\n height *= this.session.getRowLength(cursor.row);\n }\n this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + \"px\";\n this.$gutterLineHighlight.style.height = height + \"px\";\n };\n this.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl) return;\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 var style = this.$printMarginEl.style;\n style.left = this.characterWidth * this.$printMarginColumn + this.$padding + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1) 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.$keepTextAreaAtCursor) return;\n var config = this.layerConfig;\n var posTop = this.$cursorLayer.$pixelPos.top;\n var posLeft = this.$cursorLayer.$pixelPos.left;\n posTop -= config.offset;\n var style = this.textarea.style;\n var h = this.lineHeight;\n if (posTop < 0 || posTop > config.height - h) {\n style.top = style.left = \"0\";\n return;\n }\n var w = this.characterWidth;\n if (this.$composition) {\n var val = this.textarea.value.replace(/^\\x01+/, \"\");\n w *= this.session.$getStringScreenWidth(val)[0] + 2;\n h += 2;\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w) posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth;\n style.height = h + \"px\";\n style.width = w + \"px\";\n style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + \"px\";\n style.top = Math.min(posTop, this.$size.height - h) + \"px\";\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) return lastRow - 1;\n return lastRow;\n };\n this.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\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 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) this.session.setScrollTop(-sm.top);\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 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 this.$frozen = false;\n this.freeze = function () {\n this.$frozen = true;\n };\n this.unfreeze = function () {\n this.$frozen = false;\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 this._signal(\"beforeRender\");\n if (this.session && this.session.$bidiHandler) this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL || changes & this.CHANGE_SIZE || changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES || changes & this.CHANGE_SCROLL || changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig();\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();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL) this.$updateScrollBarH();\n this.$gutterLayer.element.style.marginTop = -config.offset + \"px\";\n this.content.style.marginTop = -config.offset + \"px\";\n this.content.style.width = config.width + 2 * this.$padding + \"px\";\n this.content.style.height = config.minHeight + \"px\";\n }\n if (changes & this.CHANGE_H_SCROLL) {\n this.content.style.marginLeft = -this.scrollLeft + \"px\";\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n }\n if (changes & this.CHANGE_FULL) {\n this.$textLayer.update(config);\n if (this.$showGutter) this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n this._signal(\"afterRender\");\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) this.$textLayer.update(config);else this.$textLayer.scrollLines(config);\n if (this.$showGutter) this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\");\n return;\n }\n if (changes & this.CHANGE_TEXT) {\n this.$textLayer.update(config);\n if (this.$showGutter) this.$gutterLayer.update(config);\n } else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || changes & this.CHANGE_GUTTER && this.$showGutter) this.$gutterLayer.update(config);\n } else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter) this.$gutterLayer.update(config);\n }\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n this._signal(\"afterRender\");\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, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll) desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight) desiredHeight = this.$maxPixelHeight;\n var vScroll = height > maxHeight;\n if (desiredHeight != this.desiredHeight || this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\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 this._signal(\"autosize\");\n }\n };\n this.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || size.scrollerWidth - longestLine - 2 * this.$padding < 0);\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) this.$autosize();\n var offset = this.scrollTop % this.lineHeight;\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || 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 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 firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n var changes = 0;\n if (this.layerConfig.width != longestLine) 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) longestLine = this.$getLongestLine();\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 return changes;\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 var layerConfig = this.layerConfig;\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n if (lastRow === Infinity) {\n if (this.$showGutter) this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n this.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode) charCount += 1;\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 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) return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var left = pos.left;\n var top = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight) top -= offset * this.$size.scrollerHeight;\n if (top === 0) 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) top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\n }\n var scrollLeft = this.scrollLeft;\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth) 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 this.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\") cursor = {\n row: cursor,\n 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 this.session.setScrollTop(offset);\n return offset;\n };\n this.STEPS = 8;\n this.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n var func = function (t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n for (i = 0; i < l; ++i) steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n return steps;\n };\n this.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({\n row: line,\n column: 0\n });\n var offset = pos.top;\n if (center) offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false) this.animateScrolling(initialScroll, callback);\n };\n this.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll) return;\n var _self = this;\n if (fromValue == toValue) return;\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue) return;\n }\n }\n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = {\n from: fromValue,\n to: toValue,\n steps: steps\n };\n clearInterval(this.$timer);\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function () {\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) 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(y);\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) return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth - this.layerConfig.width < -1 + this.scrollMargin.right) return true;\n };\n this.pixelToScreenCoordinates = function (x, y) {\n var canvasPos = this.scroller.getBoundingClientRect();\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 = Math.round(offset);\n return {\n row: row,\n column: col,\n side: offset - col > 0 ? 1 : -1,\n offsetX: offsetX\n };\n };\n this.screenToTextCoordinates = function (x, y) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var col = Math.round(offsetX / this.characterWidth);\n var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\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 var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row) ? this.session.$bidiHandler.getPosLeft(pos.column) : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\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 (position) {\n if (!this.$composition) this.$composition = {\n keepTextAreaAtCursor: this.$keepTextAreaAtCursor,\n cssText: this.textarea.style.cssText\n };\n this.$keepTextAreaAtCursor = true;\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n };\n this.setCompositionText = function (text) {\n this.$moveTextAreaToCursor();\n };\n this.hideComposition = function () {\n if (!this.$composition) return;\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\n this.textarea.style.cssText = this.$composition.cssText;\n this.$composition = null;\n };\n this.setTheme = function (theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange', {\n 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 function afterLoad(module) {\n if (_self.$themeId != theme) return cb && cb();\n if (!module || !module.cssClass) throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n dom.importCssString(module.cssText, module.cssClass, _self.container.ownerDocument);\n if (_self.theme) dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding) _self.setPadding(padding);\n _self.$theme = module.cssClass;\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 _self._dispatchEvent('themeLoaded', {\n theme: module\n });\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 this.setCursorStyle = function (style) {\n if (this.scroller.style.cursor != style) this.scroller.style.cursor = style;\n };\n this.setMouseCursor = function (cursorStyle) {\n this.scroller.style.cursor = cursorStyle;\n };\n this.destroy = function () {\n this.$textLayer.destroy();\n this.$cursorLayer.destroy();\n };\n }).call(VirtualRenderer.prototype);\n config.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n animatedScroll: {\n initialValue: false\n },\n showInvisibles: {\n set: function (value) {\n if (this.$textLayer.setShowInvisibles(value)) this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function () {\n this.$updatePrintMargin();\n },\n initialValue: true\n },\n printMarginColumn: {\n set: function () {\n this.$updatePrintMargin();\n },\n initialValue: 80\n },\n printMargin: {\n set: function (val) {\n if (typeof val == \"number\") 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 },\n initialValue: true\n },\n showLineNumbers: {\n set: function (show) {\n this.$gutterLayer.setShowLineNumbers(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)) this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function (shouldHighlight) {\n if (!this.$gutterLineHighlight) {\n this.$gutterLineHighlight = dom.createElement(\"div\");\n this.$gutterLineHighlight.className = \"ace_gutter-active-line\";\n this.$gutter.appendChild(this.$gutterLineHighlight);\n return;\n }\n this.$gutterLineHighlight.style.display = shouldHighlight ? \"\" : \"none\";\n if (this.$cursorLayer.$pixelPos) this.$updateGutterLineHighlight();\n },\n initialValue: false,\n value: true\n },\n hScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function (size) {\n if (typeof size == \"number\") 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 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) 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) {\n this.setTheme(val);\n },\n get: function () {\n return this.$themeId || this.theme;\n },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n }\n });\n exports.VirtualRenderer = VirtualRenderer;\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\n var oop = require(\"../lib/oop\");\n var net = require(\"../lib/net\");\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n var config = require(\"../config\");\n function $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\n \"type\": \"application/javascript\"\n });\n } catch (e) {\n // 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 function createWorker(workerUrl) {\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 var WorkerClient = function (topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n if (require.nameToUrl && !require.toUrl) require.toUrl = require.nameToUrl;\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 var tlns = {};\n topLevelNamespaces.forEach(function (ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\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 this.callbackId = 1;\n this.callbacks = {};\n this.$worker.onmessage = this.onMessage;\n };\n (function () {\n oop.implement(this, EventEmitter);\n this.onMessage = function (e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {\n data: msg.data\n });\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 this.reportError = function (err) {\n window.console && console.error && console.error(err);\n };\n this.$normalizePath = function (path) {\n return net.qualifyURL(path);\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) this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n this.send = function (cmd, args) {\n this.$worker.postMessage({\n command: cmd,\n 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 this.emit = function (event, data) {\n try {\n this.$worker.postMessage({\n event: event,\n data: {\n data: data.data\n }\n });\n } catch (ex) {\n console.error(ex.stack);\n }\n };\n this.attachToDocument = function (doc) {\n if (this.$doc) this.terminate();\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener);\n };\n this.changeListener = function (delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\") this.deltaQueue.push(delta.start, delta.lines);else this.deltaQueue.push(delta.start, delta.end);\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 this.emit(\"change\", {\n data: q\n });\n };\n }).call(WorkerClient.prototype);\n var UIWorkerClient = function (topLevelNamespaces, mod, classname) {\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.callbackId = 1;\n this.callbacks = {};\n this.messageBuffer = [];\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n var _self = this;\n this.$worker = {};\n this.$worker.terminate = function () {};\n this.$worker.postMessage = function (e) {\n _self.messageBuffer.push(e);\n if (main) {\n if (emitSync) setTimeout(processNext);else processNext();\n }\n };\n this.setEmitSync = function (val) {\n emitSync = val;\n };\n var processNext = function () {\n var msg = _self.messageBuffer.shift();\n if (msg.command) main[msg.command].apply(main, msg.args);else if (msg.event) sender._signal(msg.event, msg.data);\n };\n sender.postMessage = function (msg) {\n _self.onMessage({\n data: msg\n });\n };\n sender.callback = function (data, callbackId) {\n this.postMessage({\n type: \"call\",\n id: callbackId,\n data: data\n });\n };\n sender.emit = function (name, data) {\n this.postMessage({\n type: \"event\",\n name: name,\n data: data\n });\n };\n config.loadModule([\"worker\", mod], function (Main) {\n main = new Main[classname](sender);\n while (_self.messageBuffer.length) processNext();\n });\n };\n UIWorkerClient.prototype = WorkerClient.prototype;\n exports.UIWorkerClient = UIWorkerClient;\n exports.WorkerClient = WorkerClient;\n exports.createWorker = createWorker;\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\n var Range = require(\"./range\").Range;\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n var oop = require(\"./lib/oop\");\n var 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 this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {\n length: -1\n };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n };\n (function () {\n oop.implement(this, EventEmitter);\n this.setup = function () {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode) session.selection.toSingleRange();\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) return this.updateAnchors(delta);\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 this.updateAnchors(delta);\n if (inMainRange) this.length += lengthDiff;\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 = {\n row: otherPos.row,\n column: otherPos.column + distanceFromStart\n };\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 = {\n row: otherPos.row,\n column: otherPos.column + distanceFromStart\n };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n this.$updating = false;\n this.updateMarkers();\n };\n this.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;) this.others[i].onChange(delta);\n this.updateMarkers();\n };\n this.updateMarkers = function () {\n if (this.$updating) 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--;) updateMarker(this.others[i], this.othersClass);\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.removeEventListener(\"change\", this.$onUpdate);\n this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n this.cancel = function () {\n if (this.$undoStackDepth === -1) 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(true);\n }\n if (this.selectionBefore) this.session.selection.fromJSON(this.selectionBefore);\n };\n }).call(PlaceHolder.prototype);\n exports.PlaceHolder = PlaceHolder;\n});\nace.define(\"ace/mouse/multi_select_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\"], function (require, exports, module) {\n var event = require(\"../lib/event\");\n var useragent = require(\"../lib/useragent\");\n function isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n }\n function 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 if (ctrl && useragent.isMac) button = ev.button;\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode) e.editor.exitMultiSelectMode();\n return;\n }\n if (button !== 0) return;\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 var mouseX = e.x,\n mouseY = e.y;\n var onMouseSelection = function (e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt) selectionMode = shift ? \"block\" : \"add\";else if (alt && editor.$blockSelectEnabled) selectionMode = \"block\";\n } else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift) return;\n } else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection) return; // dragging\n\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.$blockScrolling++;\n editor.inVirtualSelectionMode = true;\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 if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) selection.substractPoint(tmpSel.cursor);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.$blockScrolling--;\n editor.inVirtualSelectionMode = false;\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 if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead)) return;\n screenCursor = newCursor;\n editor.$blockScrolling++;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty()) rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n editor.$blockScrolling--;\n };\n editor.$blockScrolling++;\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n } else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n if (shift) screenAnchor = session.documentToScreenPosition(selection.lead);else selection.moveToPosition(pos);\n editor.$blockScrolling--;\n screenCursor = {\n row: -1,\n column: -1\n };\n var onMouseSelectionEnd = function (e) {\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length) rectSel = [selection.toOrientedRange()];\n editor.$blockScrolling++;\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++) selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n editor.$blockScrolling--;\n };\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () {\n onSelectionInterval();\n }, 20);\n return e.preventDefault();\n }\n }\n exports.onMouseDown = onMouseDown;\n});\nace.define(\"ace/commands/multi_select_commands\", [\"require\", \"exports\", \"module\", \"ace/keyboard/hash_handler\"], function (require, exports, module) {\n exports.defaultCommands = [{\n name: \"addCursorAbove\",\n exec: function (editor) {\n editor.selectMoreLines(-1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Up\",\n mac: \"Ctrl-Alt-Up\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n exec: function (editor) {\n editor.selectMoreLines(1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Down\",\n mac: \"Ctrl-Alt-Down\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n exec: function (editor) {\n editor.selectMoreLines(-1, true);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Up\",\n mac: \"Ctrl-Alt-Shift-Up\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n exec: function (editor) {\n editor.selectMoreLines(1, true);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Down\",\n mac: \"Ctrl-Alt-Shift-Down\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n exec: function (editor) {\n editor.selectMore(-1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Left\",\n mac: \"Ctrl-Alt-Left\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n exec: function (editor) {\n editor.selectMore(1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Right\",\n mac: \"Ctrl-Alt-Right\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n exec: function (editor) {\n editor.selectMore(-1, true);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Left\",\n mac: \"Ctrl-Alt-Shift-Left\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n exec: function (editor) {\n editor.selectMore(1, true);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Right\",\n mac: \"Ctrl-Alt-Shift-Right\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"splitIntoLines\",\n exec: function (editor) {\n editor.multiSelect.splitIntoLines();\n },\n bindKey: {\n win: \"Ctrl-Alt-L\",\n mac: \"Ctrl-Alt-L\"\n },\n readOnly: true\n }, {\n name: \"alignCursors\",\n exec: function (editor) {\n editor.alignCursors();\n },\n bindKey: {\n win: \"Ctrl-Alt-A\",\n mac: \"Ctrl-Alt-A\"\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n exec: function (editor) {\n editor.findAll();\n },\n bindKey: {\n win: \"Ctrl-Alt-K\",\n mac: \"Ctrl-Alt-G\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\n exports.multiSelectCommands = [{\n name: \"singleSelection\",\n bindKey: \"esc\",\n exec: function (editor) {\n editor.exitMultiSelectMode();\n },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function (editor) {\n return editor && editor.inMultiSelectMode;\n }\n }];\n var HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\n exports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\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 var RangeList = require(\"./range_list\").RangeList;\n var Range = require(\"./range\").Range;\n var Selection = require(\"./selection\").Selection;\n var onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\n var event = require(\"./lib/event\");\n var lang = require(\"./lib/lang\");\n var commands = require(\"./commands/multi_select_commands\");\n exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\n var Search = require(\"./search\").Search;\n var search = new Search();\n function 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 }\n var 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) return;\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 if (!range.cursor) range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length) this.$onRemoveRange(removed);\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 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) this.$onRemoveRange(removed);\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) this.$onRemoveRange(removed);else if (this.ranges[0]) this.fromOrientedRange(this.ranges[0]);\n };\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", {\n 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 for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n this._signal(\"removeRange\", {\n 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 lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange())) this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function () {\n if (this.rangeList) return;\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 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 this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var range = this.getRange();\n var isBackwards = this.isBackwards();\n var startRow = range.start.row;\n var endRow = range.end.row;\n if (startRow == endRow) {\n if (isBackwards) var start = range.end,\n end = range.start;else var start = range.start,\n end = range.end;\n this.addRange(Range.fromPoints(end, end));\n this.addRange(Range.fromPoints(start, start));\n return;\n }\n var rectSel = [];\n var r = this.getLineRange(startRow, true);\n r.start.column = range.start.column;\n rectSel.push(r);\n for (var i = startRow + 1; i < endRow; i++) rectSel.push(this.getLineRange(i, true));\n r = this.getLineRange(endRow, true);\n r.end.column = range.end.column;\n rectSel.push(r);\n rectSel.forEach(this.addRange, this);\n }\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 this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var cursor = this.session.documentToScreenPosition(this.selectionLead);\n var anchor = this.session.documentToScreenPosition(this.selectionAnchor);\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 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 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 if (startColumn < 0) startColumn = 0;\n if (startRow < 0) startRow = 0;\n if (startRow == endRow) includeEmptyLines = true;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd)) break;\n var docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n if (yBackwards) rectSel.reverse();\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0) end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty()) start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty()) rectSel.splice(i, 1);\n }\n }\n return rectSel;\n };\n }).call(Selection.prototype);\n var 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) orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\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) return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1) this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\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) continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1) markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode) return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode) return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect) 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) 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 if (!ranges.length) return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\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) 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) result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to) this.renderer.animateScrolling(anim.from);\n return result;\n };\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) return;\n this.multiSelect.toSingleRange();\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) text = \"\";\n } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\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) return;\n var pos = anchor == this.multiSelect.anchor ? range.cursor == range.start ? range.end : range.start : range.cursor;\n if (pos.row != anchor.row || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column) this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\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() ? this.selection.getWordRange() : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length) return 0;\n this.$blockScrolling += 1;\n var selection = this.multiSelect;\n if (!additive) selection.toSingleRange(ranges[0]);\n for (var i = ranges.length; i--;) selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start)) selection.addRange(range, true);\n this.$blockScrolling -= 1;\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 var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn) screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\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 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 newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n } else {\n if (skip) var toRemove = range.cursor;\n }\n this.selection.addRange(newRange);\n if (toRemove) 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 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 var words = [];\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n if (dir < 0) words.unshift(words.pop());else words.push(words.shift());\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 };\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\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) return;\n }\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.$blockScrolling += 1;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.$blockScrolling -= 1;\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip) 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) return true;\n row = r.cursor.row;\n });\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row,\n 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 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({\n row: fr,\n column: 0\n }, 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 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) spaceOffset = 0;\n if (p.column > maxCol) maxCol = p.column;\n if (spaceOffset < minSpace) 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) session.insert(p, lang.stringRepeat(\" \", l - d));else session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\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 this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true,\n isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m) return [line];\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length) isRightAligned = false;\n if (startW != m[1].length) isLeftAligned = false;\n if (startW > m[1].length) startW = m[1].length;\n if (textW < m[2].length) textW = m[2].length;\n if (endW > m[3].length) endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft : isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(textW - m[2].length + endW) + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] + spaces(endW, \" \") + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(endW) + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n }).call(Editor.prototype);\n function isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n }\n exports.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 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 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 if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode) this.$onMultiSelect();else this.$onSingleSelect();\n }\n };\n function MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange) 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 editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n }\n function addAltCursorListeners(editor) {\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 });\n event.addListener(el, \"keyup\", reset);\n event.addListener(el, \"blur\", reset);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n }\n exports.MultiSelect = MultiSelect;\n require(\"./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});\nace.define(\"ace/mode/folding/fold_mode\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../../range\").Range;\n var FoldMode = exports.FoldMode = function () {};\n (function () {\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)) return \"start\";\n if (foldStyle == \"markbeginend\" && this.foldingStopMarker && this.foldingStopMarker.test(line)) return \"end\";\n return \"\";\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\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) return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1) continue;\n if (level <= startLevel) break;\n endRow = row;\n }\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = {\n row: row,\n column: column + 1\n };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end) return;\n var fw = session.foldWidgets[end.row];\n if (fw == null) fw = session.getFoldWidget(end.row);\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 this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = {\n row: row,\n column: column\n };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start) return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n }).call(FoldMode.prototype);\n});\nace.define(\"ace/theme/textmate\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n exports.isDark = false;\n exports.cssClass = \"ace-tm\";\n exports.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\";\n var dom = require(\"../lib/dom\");\n dom.importCssString(exports.cssText, exports.cssClass);\n});\nace.define(\"ace/line_widgets\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n var dom = require(\"./lib/dom\");\n var Range = require(\"./range\").Range;\n function 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 this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n (function () {\n this.getRowLength = function (row) {\n var h;\n if (this.lineWidgets) h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;else 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 this.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden) screenRows += w.rowCount;\n });\n return screenRows;\n };\n this.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n this.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this) editor.widgetManager.detach();\n if (this.editor == editor) return;\n this.detach();\n this.editor = editor;\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) return;\n this.editor = null;\n editor.widgetManager = null;\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 this.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action) 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]) lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start]) lineWidgets[start] = lineWidgets[end];else lineWidgets[end].hidden = hide;\n } else {\n if (lineWidgets[start] == lineWidgets[end]) lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n this.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {} else if (delta.action == 'remove') {\n var removed = lineWidgets.splice(startRow + 1, len);\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n } else {\n var args = new Array(len);\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\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) this.session.lineWidgets = null;\n };\n this.addLineWidget = function (w) {\n if (!this.session.lineWidgets) this.session.lineWidgets = new Array(this.session.getLength());\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 this.session.lineWidgets[w.row] = w;\n w.session = this.session;\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 if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\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]) lineWidgets[fold.start.row] = w;else w.hidden = true;\n }\n this.session._emit(\"changeFold\", {\n data: {\n start: {\n row: w.row\n }\n }\n });\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n this.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode) 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) 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\", {\n data: {\n start: {\n row: w.row\n }\n }\n });\n this.$updateRows();\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 this.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n this.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\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) continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n w.h = w.el.offsetHeight;\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0) rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min) min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", {\n data: {\n start: {\n row: min\n }\n }\n });\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n this.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n while (first > 0 && !lineWidgets[first]) first--;\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\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({\n row: i,\n column: 0\n }, true).top;\n if (!w.coverLine) top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth) left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\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 }).call(LineWidgets.prototype);\n exports.LineWidgets = LineWidgets;\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\";\n\n var LineWidgets = require(\"../line_widgets\").LineWidgets;\n var dom = require(\"../lib/dom\");\n var Range = require(\"../range\").Range;\n function binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n while (first <= last) {\n var mid = first + last >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0) first = mid + 1;else if (c < 0) last = mid - 1;else return mid;\n }\n return -(first + 1);\n }\n function findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length) return;\n var i = binarySearch(annotations, {\n row: row,\n column: -1\n }, Range.comparePoints);\n if (i < 0) i = -i - 1;\n if (i >= annotations.length) i = dir > 0 ? 0 : annotations.length - 1;else if (i === 0 && dir < 0) i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir) return;\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation) return annotations.slice();\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 exports.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 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\" ? annotation.pos.sc : 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 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 var left = editor.renderer.$cursorLayer.getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"
\");\n el.appendChild(dom.createElement(\"div\"));\n var kb = function (_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return {\n command: \"null\"\n };\n }\n };\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed) 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 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 editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, {\n bottom: w.el.offsetHeight\n });\n };\n dom.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\", \"\");\n});\nace.define(\"ace/ace\", [\"require\", \"exports\", \"module\", \"ace/lib/fixoldbrowsers\", \"ace/lib/dom\", \"ace/lib/event\", \"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\n require(\"./lib/fixoldbrowsers\");\n var dom = require(\"./lib/dom\");\n var event = require(\"./lib/event\");\n var Editor = require(\"./editor\").Editor;\n var EditSession = require(\"./edit_session\").EditSession;\n var UndoManager = require(\"./undomanager\").UndoManager;\n var Renderer = require(\"./virtual_renderer\").VirtualRenderer;\n require(\"./worker/worker_client\");\n require(\"./keyboard/hash_handler\");\n require(\"./placeholder\");\n require(\"./multi_select\");\n require(\"./mode/folding/fold_mode\");\n require(\"./theme/textmate\");\n require(\"./ext/error_marker\");\n exports.config = require(\"./config\");\n exports.require = require;\n if (typeof define === \"function\") exports.define = define;\n exports.edit = function (el) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el) throw new Error(\"ace.edit can't find div #\" + _id);\n }\n if (el && el.env && el.env.editor instanceof Editor) return el.env.editor;\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 = dom.getInnerText(el);\n el.innerHTML = \"\";\n }\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el));\n editor.setSession(doc);\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\n editor.container.env = editor.env = env;\n return editor;\n };\n exports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n };\n exports.EditSession = EditSession;\n exports.UndoManager = UndoManager;\n exports.version = \"1.2.9\";\n});\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) window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key)) window.ace[key] = a[key];\n });\n})();","ace.define(\"ace/mode/sql_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n var SqlHighlightRules = function () {\n var keywords = \"select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|\" + \"when|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|\" + \"foreign|not|references|default|null|inner|cross|natural|database|drop|grant\";\n var builtinConstants = \"true|false\";\n var builtinFunctions = \"avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|\" + \"coalesce|ifnull|isnull|nvl\";\n var dataTypes = \"int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|\" + \"money|real|number|integer\";\n var keywordMapper = this.createKeywordMapper({\n \"support.function\": builtinFunctions,\n \"keyword\": keywords,\n \"constant.language\": builtinConstants,\n \"storage.type\": dataTypes\n }, \"identifier\", true);\n this.$rules = {\n \"start\": [{\n token: \"comment\",\n regex: \"--.*$\"\n }, {\n token: \"comment\",\n start: \"/\\\\*\",\n end: \"\\\\*/\"\n }, {\n token: \"string\",\n // \" string\n regex: '\".*?\"'\n }, {\n token: \"string\",\n // ' string\n regex: \"'.*?'\"\n }, {\n token: \"string\",\n // ` string (apache drill)\n regex: \"`.*?`\"\n }, {\n token: \"constant.numeric\",\n // float\n regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token: keywordMapper,\n regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n }, {\n token: \"keyword.operator\",\n regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n }, {\n token: \"paren.lparen\",\n regex: \"[\\\\(]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\)]\"\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }]\n };\n this.normalizeRules();\n };\n oop.inherits(SqlHighlightRules, TextHighlightRules);\n exports.SqlHighlightRules = SqlHighlightRules;\n});\nace.define(\"ace/mode/sql\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/text\", \"ace/mode/sql_highlight_rules\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n var TextMode = require(\"./text\").Mode;\n var SqlHighlightRules = require(\"./sql_highlight_rules\").SqlHighlightRules;\n var Mode = function () {\n this.HighlightRules = SqlHighlightRules;\n this.$behaviour = this.$defaultBehaviour;\n };\n oop.inherits(Mode, TextMode);\n (function () {\n this.lineCommentStart = \"--\";\n this.$id = \"ace/mode/sql\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});","ace.define(\"ace/theme/ambiance\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n exports.isDark = true;\n exports.cssClass = \"ace-ambiance\";\n exports.cssText = \".ace-ambiance .ace_gutter {\\\nbackground-color: #3d3d3d;\\\nbackground-image: -moz-linear-gradient(left, #3D3D3D, #333);\\\nbackground-image: -ms-linear-gradient(left, #3D3D3D, #333);\\\nbackground-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3D3D3D), to(#333));\\\nbackground-image: -webkit-linear-gradient(left, #3D3D3D, #333);\\\nbackground-image: -o-linear-gradient(left, #3D3D3D, #333);\\\nbackground-image: linear-gradient(left, #3D3D3D, #333);\\\nbackground-repeat: repeat-x;\\\nborder-right: 1px solid #4d4d4d;\\\ntext-shadow: 0px 1px 1px #4d4d4d;\\\ncolor: #222;\\\n}\\\n.ace-ambiance .ace_gutter-layer {\\\nbackground: repeat left top;\\\n}\\\n.ace-ambiance .ace_gutter-active-line {\\\nbackground-color: #3F3F3F;\\\n}\\\n.ace-ambiance .ace_fold-widget {\\\ntext-align: center;\\\n}\\\n.ace-ambiance .ace_fold-widget:hover {\\\ncolor: #777;\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_start,\\\n.ace-ambiance .ace_fold-widget.ace_end,\\\n.ace-ambiance .ace_fold-widget.ace_closed{\\\nbackground: none;\\\nborder: none;\\\nbox-shadow: none;\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_start:after {\\\ncontent: '▾'\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_end:after {\\\ncontent: '▴'\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_closed:after {\\\ncontent: '‣'\\\n}\\\n.ace-ambiance .ace_print-margin {\\\nborder-left: 1px dotted #2D2D2D;\\\nright: 0;\\\nbackground: #262626;\\\n}\\\n.ace-ambiance .ace_scroller {\\\n-webkit-box-shadow: inset 0 0 10px black;\\\n-moz-box-shadow: inset 0 0 10px black;\\\n-o-box-shadow: inset 0 0 10px black;\\\nbox-shadow: inset 0 0 10px black;\\\n}\\\n.ace-ambiance {\\\ncolor: #E6E1DC;\\\nbackground-color: #202020;\\\n}\\\n.ace-ambiance .ace_cursor {\\\nborder-left: 1px solid #7991E8;\\\n}\\\n.ace-ambiance .ace_overwrite-cursors .ace_cursor {\\\nborder: 1px solid #FFE300;\\\nbackground: #766B13;\\\n}\\\n.ace-ambiance.normal-mode .ace_cursor-layer {\\\nz-index: 0;\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_selection {\\\nbackground: rgba(221, 240, 255, 0.20);\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_selected-word {\\\nborder-radius: 4px;\\\nborder: 8px solid #3f475d;\\\nbox-shadow: 0 0 4px black;\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174);\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.25);\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_active-line {\\\nbackground: rgba(255, 255, 255, 0.031);\\\n}\\\n.ace-ambiance .ace_invisible {\\\ncolor: #333;\\\n}\\\n.ace-ambiance .ace_paren {\\\ncolor: #24C2C7;\\\n}\\\n.ace-ambiance .ace_keyword {\\\ncolor: #cda869;\\\n}\\\n.ace-ambiance .ace_keyword.ace_operator {\\\ncolor: #fa8d6a;\\\n}\\\n.ace-ambiance .ace_punctuation.ace_operator {\\\ncolor: #fa8d6a;\\\n}\\\n.ace-ambiance .ace_identifier {\\\n}\\\n.ace-ambiance .ace-statement {\\\ncolor: #cda869;\\\n}\\\n.ace-ambiance .ace_constant {\\\ncolor: #CF7EA9;\\\n}\\\n.ace-ambiance .ace_constant.ace_language {\\\ncolor: #CF7EA9;\\\n}\\\n.ace-ambiance .ace_constant.ace_library {\\\n}\\\n.ace-ambiance .ace_constant.ace_numeric {\\\ncolor: #78CF8A;\\\n}\\\n.ace-ambiance .ace_invalid {\\\ntext-decoration: underline;\\\n}\\\n.ace-ambiance .ace_invalid.ace_illegal {\\\ncolor:#F8F8F8;\\\nbackground-color: rgba(86, 45, 86, 0.75);\\\n}\\\n.ace-ambiance .ace_invalid,\\\n.ace-ambiance .ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #D2A8A1;\\\n}\\\n.ace-ambiance .ace_support {\\\ncolor: #9B859D;\\\n}\\\n.ace-ambiance .ace_support.ace_function {\\\ncolor: #DAD085;\\\n}\\\n.ace-ambiance .ace_function.ace_buildin {\\\ncolor: #9b859d;\\\n}\\\n.ace-ambiance .ace_string {\\\ncolor: #8f9d6a;\\\n}\\\n.ace-ambiance .ace_string.ace_regexp {\\\ncolor: #DAD085;\\\n}\\\n.ace-ambiance .ace_comment {\\\nfont-style: italic;\\\ncolor: #555;\\\n}\\\n.ace-ambiance .ace_comment.ace_doc {\\\n}\\\n.ace-ambiance .ace_comment.ace_doc.ace_tag {\\\ncolor: #666;\\\nfont-style: normal;\\\n}\\\n.ace-ambiance .ace_definition,\\\n.ace-ambiance .ace_type {\\\ncolor: #aac6e3;\\\n}\\\n.ace-ambiance .ace_variable {\\\ncolor: #9999cc;\\\n}\\\n.ace-ambiance .ace_variable.ace_language {\\\ncolor: #9b859d;\\\n}\\\n.ace-ambiance .ace_xml-pe {\\\ncolor: #494949;\\\n}\\\n.ace-ambiance .ace_gutter-layer,\\\n.ace-ambiance .ace_text-layer {\\\nbackground-image: url(\\\"data:image/png;base64,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\\\");\\\n}\\\n.ace-ambiance .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\\\") right repeat-y;\\\n}\";\n var dom = require(\"../lib/dom\");\n dom.importCssString(exports.cssText, exports.cssClass);\n});","document.addEventListener(\"DOMContentLoaded\", function(_event) {\n var timeoutHandle = null;\n var editor = ace.edit(document.querySelector(\".editor\"));\n var chkUseArelHelpers = document.querySelector(\"#chk-use-arel-helpers\");\n var chkSimplifyArelNodes = document.querySelector(\"#chk-simplify-arel-nodes\");\n var selRailsVersion = document.querySelector(\"#sel-rails-version\");\n\n editor.getSession().setMode(\"ace/mode/sql\");\n editor.setTheme(\"ace/theme/ambiance\");\n editor.setShowPrintMargin(false);\n editor.renderer.setScrollMargin(7, 7, 7, 0);\n editor.session.setUseWrapMode(true);\n editor.setFontSize(14);\n\n if (editor.getValue() == \"\") {\n editor.setValue(\"SELECT COUNT(*)\\nFROM posts\\nWHERE posts.author = 'Mark Twain'\\nORDER BY created_at DESC\");\n editor.getSelection().clearSelection();\n }\n\n var update = function() {\n var body = new FormData();\n body.append(\"conversion[sql]\", editor.getValue());\n body.append(\"conversion[use_arel_helpers]\", chkUseArelHelpers.checked);\n body.append(\"conversion[use_arel_nodes_prefix]\", !chkSimplifyArelNodes.checked);\n body.append(\"conversion[use_rails_version]\", selRailsVersion.value);\n\n hideErrorMessage('.conversion-error-message');\n\n fetch('convert.json', { method: 'POST', body }).then((response) => {\n return response.json();\n }).then((data) => {\n if (data.result == 'succeeded') {\n if (data.arel) {\n document.querySelector('.arel').innerHTML = data.arel.replace(\"\\n\", \"
\").replace(\" \", \" \")\n }\n } else {\n showErrorMessage('.conversion-error-message', data.message);\n }\n }).catch((error) => {\n showErrorMessage('.conversion-error-message', 'An internal error occurred.');\n });\n };\n\n var updateWithDelay = function() {\n if (timeoutHandle != null) {\n window.clearTimeout(timeoutHandle);\n }\n\n timeoutHandle = window.setTimeout(update, 2000);\n };\n\n editor.addEventListener('change', updateWithDelay)\n chkUseArelHelpers.onclick = update;\n chkSimplifyArelNodes.onclick = update;\n selRailsVersion.onchange = update;\n\n update();\n\n var beautifySql = function(text) {\n var regex = /(SELECT|FROM|WHERE|GROUP BY|ORDER BY|RIGHT JOIN|LEFT JOIN|INNER JOIN|OUTER JOIN|JOIN|UNION)/g\n return text.replace(/\\n/g, \"\").replace(regex, function(match) {\n return \"\\n\" + match;\n }).substring(1);\n };\n\n document.querySelector('.btn-beautify').onclick = function() {\n editor.setValue(beautifySql(editor.getValue()));\n };\n\n function showErrorMessage(selector, message) {\n var container = document.querySelector(selector);\n var messageEl = container.querySelector('span');\n messageEl.text = message;\n container.style.display = \"inline\";\n }\n\n function hideErrorMessage(selector) {\n document.querySelector(selector).style.display = \"none\";\n }\n});\n"],"sourceRoot":""}