{"version":3,"file":"code_editor-CKba5LoR.js","sources":["../../../node_modules/brace/index.js","../../../node_modules/brace/theme/tomorrow.js","../../../node_modules/brace/worker/javascript.js","../../../node_modules/brace/mode/javascript.js"],"sourcesContent":["/* ***** 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 (acequire, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof acequirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _acequire = 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 && acequire.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar acequire = function(module, callback) {\n var packagedModule = _acequire(\"\", module, callback);\n if (packagedModule == undefined && acequire.original)\n return acequire.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin acequires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative acequires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _acequire(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.acequire || !root.acequire.packaged) {\n acequire.original = root.acequire;\n root.acequire = acequire;\n root.acequire.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(acequire, 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, // 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\n if (compliantLastIndexIncrement && compliantExecNpcg)\n return;\n RegExp.prototype.exec = function (str) {\n var match = real.exec.apply(this, arguments),\n name, 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)\n 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)\n match[name] = match[i];\n }\n }\n if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n 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))\n this.lastIndex--;\n return !!match;\n };\n }\n\n function getNativeFlags (regex) {\n return (regex.global ? \"g\" : \"\") +\n (regex.ignoreCase ? \"i\" : \"\") +\n (regex.multiline ? \"m\" : \"\") +\n (regex.extended ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n (regex.sticky ? \"y\" : \"\");\n }\n\n function indexOf (array, item, from) {\n if (Array.prototype.indexOf) // 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)\n return i;\n }\n return -1;\n }\n\n});\n\nace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n Function.prototype.bind = function bind(that) { // .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\n if (this instanceof bound) {\n\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n\n }\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}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((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}\nif ([1,2].splice(0).length != 2) {\n if(function() { // 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 = [], lengthBefore;\n \n array.splice.apply(array, makeArray(20));\n array.splice.apply(array, makeArray(26));\n\n lengthBefore = array.length; //46\n array.splice(5, 0, \"XXX\"); // add one element\n\n lengthBefore + 1 == array.length\n\n if (lengthBefore + 1 == array.length) {\n return true;// has right splice implementation without bugs\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, [\n start === void 0 ? 0 : start,\n deleteCount === void 0 ? (this.length - start) : deleteCount\n ].concat(slice.call(arguments, 2)))\n }\n };\n } else {//IE8\n Array.prototype.splice = function(pos, removeCount){\n var length = this.length;\n if (pos > 0) {\n if (pos > length)\n 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\n if (!(pos+removeCount < length))\n removeCount = length - pos;\n\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\n if (tailNewPos < tailOldPos) { // case A\n for (var i = 0; i < tailCount; ++i) {\n this[tailNewPos+i] = this[tailOldPos+i];\n }\n } else if (tailNewPos > tailOldPos) { // 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}\nif (!Array.isArray) {\n Array.isArray = function isArray(obj) {\n return _toString(obj) == \"[object Array]\";\n };\n}\nvar boxedString = Object(\"a\"),\n splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n 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}\nif (!Array.prototype.map) {\n Array.prototype.map = function map(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n 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\n for (var i = 0; i < length; i++) {\n if (i in self)\n result[i] = fun.call(thisp, self[i], i, object);\n }\n return result;\n };\n}\nif (!Array.prototype.filter) {\n Array.prototype.filter = function filter(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n 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\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}\nif (!Array.prototype.every) {\n Array.prototype.every = function every(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n 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\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}\nif (!Array.prototype.some) {\n Array.prototype.some = function some(fun /*, thisp */) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n 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\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}\nif (!Array.prototype.reduce) {\n Array.prototype.reduce = function reduce(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n 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\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\n for (; i < length; i++) {\n if (i in self) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n }\n\n return result;\n };\n}\nif (!Array.prototype.reduceRight) {\n Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n var object = toObject(this),\n self = splitString && _toString(this) == \"[object String]\" ?\n this.split(\"\") :\n 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\n var result, 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\n do {\n if (i in this) {\n result = fun.call(void 0, result, self[i], i, object);\n }\n } while (i--);\n\n return result;\n };\n}\nif (!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]\" ?\n this.split(\"\") :\n toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\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}\nif (!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]\" ?\n this.split(\"\") :\n toObject(this),\n length = self.length >>> 0;\n\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}\nif (!Object.getPrototypeOf) {\n Object.getPrototypeOf = function getPrototypeOf(object) {\n return object.__proto__ || (\n object.constructor ?\n object.constructor.prototype :\n prototypeOfObject\n );\n };\n}\nif (!Object.getOwnPropertyDescriptor) {\n var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n \"non-object: \";\n Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n throw new TypeError(ERR_NON_OBJECT + object);\n if (!owns(object, property))\n return;\n\n var descriptor, getter, setter;\n descriptor = { enumerable: true, configurable: true };\n if (supportsAccessors) {\n var prototype = object.__proto__;\n object.__proto__ = prototypeOfObject;\n\n var getter = lookupGetter(object, property);\n var setter = lookupSetter(object, property);\n object.__proto__ = prototype;\n\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}\nif (!Object.getOwnPropertyNames) {\n Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n return Object.keys(object);\n };\n}\nif (!Object.create) {\n var createEmpty;\n if (Object.prototype.__proto__ === null) {\n createEmpty = function () {\n return { \"__proto__\": null };\n };\n } else {\n createEmpty = function () {\n var empty = {};\n for (var i in empty)\n empty[i] = null;\n empty.constructor =\n empty.hasOwnProperty =\n empty.propertyIsEnumerable =\n empty.isPrototypeOf =\n empty.toLocaleString =\n empty.toString =\n empty.valueOf =\n empty.__proto__ = null;\n return empty;\n }\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\")\n 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)\n Object.defineProperties(object, properties);\n return object;\n };\n}\n\nfunction doesDefinePropertyWork(object) {\n try {\n Object.defineProperty(object, \"sentinel\", {});\n return \"sentinel\" in object;\n } catch (exception) {\n }\n}\nif (Object.defineProperty) {\n var definePropertyWorksOnObject = doesDefinePropertyWork({});\n var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n doesDefinePropertyWork(document.createElement(\"div\"));\n if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n var definePropertyFallback = Object.defineProperty;\n }\n}\n\nif (!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 \" +\n \"on this javascript engine\";\n\n Object.defineProperty = function defineProperty(object, property, descriptor) {\n if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n 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 }\n if (owns(descriptor, \"value\")) {\n\n if (supportsAccessors && (lookupGetter(object, property) ||\n lookupSetter(object, property)))\n {\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)\n throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n if (owns(descriptor, \"get\"))\n defineGetter(object, property, descriptor.get);\n if (owns(descriptor, \"set\"))\n defineSetter(object, property, descriptor.set);\n }\n\n return object;\n };\n}\nif (!Object.defineProperties) {\n Object.defineProperties = function defineProperties(object, properties) {\n for (var property in properties) {\n if (owns(properties, property))\n Object.defineProperty(object, property, properties[property]);\n }\n return object;\n };\n}\nif (!Object.seal) {\n Object.seal = function seal(object) {\n return object;\n };\n}\nif (!Object.freeze) {\n Object.freeze = function freeze(object) {\n return object;\n };\n}\ntry {\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}\nif (!Object.preventExtensions) {\n Object.preventExtensions = function preventExtensions(object) {\n return object;\n };\n}\nif (!Object.isSealed) {\n Object.isSealed = function isSealed(object) {\n return false;\n };\n}\nif (!Object.isFrozen) {\n Object.isFrozen = function isFrozen(object) {\n return false;\n };\n}\nif (!Object.isExtensible) {\n Object.isExtensible = function isExtensible(object) {\n if (Object(object) === object) {\n throw new TypeError(); // TODO message\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}\nif (!Object.keys) {\n var hasDontEnumBug = true,\n dontEnums = [\n \"toString\",\n \"toLocaleString\",\n \"valueOf\",\n \"hasOwnProperty\",\n \"isPrototypeOf\",\n \"propertyIsEnumerable\",\n \"constructor\"\n ],\n dontEnumsLength = dontEnums.length;\n\n for (var key in {\"toString\": null}) {\n hasDontEnumBug = false;\n }\n\n Object.keys = function keys(object) {\n\n if (\n (typeof object != \"object\" && typeof object != \"function\") ||\n object === null\n ) {\n throw new TypeError(\"Object.keys called on a non-object\");\n }\n\n var keys = [];\n for (var name in object) {\n if (owns(object, name)) {\n keys.push(name);\n }\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}\nif (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n \"\\u2029\\uFEFF\";\nif (!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\nfunction toInteger(n) {\n n = +n;\n if (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\nfunction isPrimitive(input) {\n var type = typeof input;\n return (\n input === null ||\n type === \"undefined\" ||\n type === \"boolean\" ||\n type === \"number\" ||\n type === \"string\"\n );\n}\n\nfunction 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}\nvar toObject = function (o) {\n if (o == null) { // this matches both null and undefined\n throw new TypeError(\"can't convert \"+o+\" to object\");\n }\n return Object(o);\n};\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./regexp\");\nacequire(\"./es5-shim\");\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\nexports.getDocumentHead = function(doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\n\nexports.createElement = function(tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\n\nexports.hasCssClass = function(el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function(el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\n\nexports.toggleCssClass = function(el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function(node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n};\n\nexports.hasCssString = function(id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n\n if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\n while (index < sheets.length)\n if (sheets[index++].owningElement.id === id) return true;\n } else if ((sheets = doc.getElementsByTagName(\"style\"))) {\n while (index < sheets.length)\n if (sheets[index++].id === id) return true;\n }\n\n return false;\n};\n\nexports.importCssString = function importCssString(cssText, id, doc) {\n doc = doc || document;\n if (id && exports.hasCssString(id, doc))\n return null;\n \n var style;\n \n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n \n if (doc.createStyleSheet) {\n style = doc.createStyleSheet();\n style.cssText = cssText;\n if (id)\n style.owningElement.id = id;\n } else {\n style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n\n exports.getDocumentHead(doc).appendChild(style);\n }\n};\n\nexports.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\n exports.getDocumentHead(doc).appendChild(link);\n }\n};\n\nexports.getInnerWidth = function(element) {\n return (\n parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) +\n parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + \n element.clientWidth\n );\n};\n\nexports.getInnerHeight = function(element) {\n return (\n parseInt(exports.computedStyle(element, \"paddingTop\"), 10) +\n parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) +\n element.clientHeight\n );\n};\n\nexports.scrollbarWidth = function(document) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n\n outer.appendChild(inner);\n\n var body = document.documentElement;\n body.appendChild(outer);\n\n var noScrollbar = inner.offsetWidth;\n\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n\n return noScrollbar-withScrollbar;\n};\n\nif (typeof document == \"undefined\") {\n exports.importCssString = function() {};\n return;\n}\n\nif (window.pageYOffset !== undefined) {\n exports.getPageScrollTop = function() {\n return window.pageYOffset;\n };\n\n exports.getPageScrollLeft = function() {\n return window.pageXOffset;\n };\n}\nelse {\n exports.getPageScrollTop = function() {\n return document.body.scrollTop;\n };\n\n exports.getPageScrollLeft = function() {\n return document.body.scrollLeft;\n };\n}\n\nif (window.getComputedStyle)\n exports.computedStyle = function(element, style) {\n if (style)\n return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\n return window.getComputedStyle(element, \"\") || {};\n };\nelse\n exports.computedStyle = function(element, style) {\n if (style)\n return element.currentStyle[style];\n return element.currentStyle;\n };\nexports.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\nif (\"textContent\" in document.documentElement) {\n exports.setInnerText = function(el, innerText) {\n el.textContent = innerText;\n };\n\n exports.getInnerText = function(el) {\n return el.textContent;\n };\n}\nelse {\n exports.setInnerText = function(el, innerText) {\n el.innerText = innerText;\n };\n\n exports.getInnerText = function(el) {\n return el.innerText;\n };\n}\n\nexports.getParentWindow = function(document) {\n return document.defaultView || document.parentWindow;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\n\nexports.mixin = function(obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\n\nexports.implement = function(proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./fixoldbrowsers\");\n\nvar oop = acequire(\"./oop\");\nvar Keys = (function() {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\n },\n\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\n },\n\n FUNCTION_KEYS : {\n 8 : \"Backspace\",\n 9 : \"Tab\",\n 13 : \"Return\",\n 19 : \"Pause\",\n 27 : \"Esc\",\n 32 : \"Space\",\n 33 : \"PageUp\",\n 34 : \"PageDown\",\n 35 : \"End\",\n 36 : \"Home\",\n 37 : \"Left\",\n 38 : \"Up\",\n 39 : \"Right\",\n 40 : \"Down\",\n 44 : \"Print\",\n 45 : \"Insert\",\n 46 : \"Delete\",\n 96 : \"Numpad0\",\n 97 : \"Numpad1\",\n 98 : \"Numpad2\",\n 99 : \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n\n PRINTABLE_KEYS: {\n 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n };\n var name, i;\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n ret[173] = '-';\n \n (function() {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) { \n ret.KEY_MODS[i] = mods.filter(function(x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n\n return ret;\n})();\noop.mixin(exports, Keys);\n\nexports.keyCodeToString = function(keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function() {\n if (exports.isMac) {\n return exports.OS.MAC;\n } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n};\nif (typeof navigator != \"object\")\n return;\n\nvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\nvar ua = navigator.userAgent;\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE = \n (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\n \nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\nexports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv:(\\d+)/)||[])[1], 10) < 4;\nexports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isIPad = ua.indexOf(\"iPad\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n\nif (exports.isIOS) exports.isMac = true;\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keys = acequire(\"./keys\");\nvar useragent = acequire(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\nexports.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\nexports.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};\nexports.stopEvent = function(e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\n\nexports.stopPropagation = function(e) {\n if (e.stopPropagation)\n e.stopPropagation();\n else\n e.cancelBubble = true;\n};\n\nexports.preventDefault = function(e) {\n if (e.preventDefault)\n e.preventDefault();\n else\n e.returnValue = false;\n};\nexports.getButton = function(e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n if (e.preventDefault) {\n return e.button;\n }\n else {\n return {1:0, 2:2, 4:1}[e.button];\n }\n};\n\nexports.capture = function(el, eventHandler, releaseCaptureHandler) {\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n\n exports.removeListener(document, \"mousemove\", eventHandler, true);\n exports.removeListener(document, \"mouseup\", onMouseUp, true);\n exports.removeListener(document, \"dragstart\", onMouseUp, true);\n }\n\n exports.addListener(document, \"mousemove\", eventHandler, true);\n exports.addListener(document, \"mouseup\", onMouseUp, true);\n exports.addListener(document, \"dragstart\", onMouseUp, true);\n \n return onMouseUp;\n};\n\nexports.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\n var touchObj = touches[0];\n\n e.wheelX = startx - touchObj.clientX;\n e.wheelY = starty - touchObj.clientY;\n\n startx = touchObj.clientX;\n starty = touchObj.clientY;\n\n callback(e);\n });\n};\n\nexports.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 \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\nexports.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\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n } else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n \n e._clicks = clicks;\n\n eventHandler[callbackName](\"mousedown\", e);\n\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n function onDblclick(e) {\n clicks = 2;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function() {timer = null;}, timeouts[clicks - 1] || 600);\n eventHandler[callbackName](\"mousedown\", e);\n eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function(el) {\n exports.addListener(el, \"mousedown\", onMousedown);\n if (useragent.isOldIE)\n exports.addListener(el, \"dblclick\", onDblclick);\n });\n};\n\nvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\n ? function(e) {\n return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n }\n : function(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n };\n\nexports.getModifierString = function(e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n \n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\n keyCode = -1;\n }\n \n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n \n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n \n return callback(e, hashId, keyCode);\n}\n\n\nexports.addCommandKeyListener = function(el, callback) {\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\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\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\n addListener(el, \"keyup\", function(e) {\n pressedKeys[e.keyCode] = null;\n });\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\n\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function(callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + postMessageId;\n 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\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || window.msRequestAnimationFrame\n || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function(callback) {\n setTimeout(callback, 17);\n };\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n\n if (count >>= 1)\n string += string;\n }\n return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\n\nexports.copyArray = function(array){\n var copy = [];\n for (var i=0, l=array.length; i PLACEHOLDER.length)\n data = data.substr(9);\n else if (data.substr(0, 4) == PLACEHOLDER.substr(0, 4))\n data = data.substr(4, data.length - PLACEHOLDER.length + 1);\n else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n if (data == PLACEHOLDER.charAt(0)) {\n } else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n\n if (data)\n host.onTextInput(data);\n }\n if (copied) {\n copied = false;\n }\n if (afterContextMenu)\n afterContextMenu = false;\n };\n var onInput = function(e) {\n if (inComposition)\n return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n\n var handleClipboardData = function(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n if (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\n var onCut = function(e) {\n doCopy(e, true);\n };\n\n var onCopy = function(e) {\n doCopy(e, false);\n };\n\n var onPaste = function(e) {\n var data = handleClipboardData(e);\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n event.addListener(text, \"select\", onSelect);\n\n event.addListener(text, \"input\", onInput);\n\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)\n 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\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n var val = text.value.replace(/\\x01/g, \"\");\n if (inComposition.lastValue === val) return;\n\n host.onCompositionUpdate(val);\n if (inComposition.lastValue)\n host.undo();\n if (inComposition.canUndo)\n 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\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)\n return;\n else if (str == c.lastValue)\n resetValue();\n else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n inputHandler = function compositionInputHandler(str) {\n if (timer)\n clearTimeout(timer);\n str = str.replace(/\\x01/g, \"\");\n if (str == c.lastValue)\n return \"\";\n if (c.lastValue && timer)\n 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 =\n (!!useragent.isChrome && useragent.isChrome >= 53) ||\n (!!useragent.isWebKit && useragent.isWebKit >= 603);\n\n if (needsOnInput) {\n onInput();\n }\n };\n\n\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n\n event.addListener(text, \"compositionstart\", onCompositionStart);\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function(){syncComposition.schedule();});\n } else {\n event.addListener(text, \"keyup\", function(){syncComposition.schedule();});\n event.addListener(text, \"keydown\", function(){syncComposition.schedule();});\n }\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function() {\n return text;\n };\n\n this.setReadOnly = function(readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function(e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n this.moveToMouse(e, true);\n };\n\n this.moveToMouse = function(e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + \"height:\" + text.style.height + \";\"\n + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight -2;\n var move = function(e) {\n 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\n if (e.type != \"mousedown\")\n return;\n\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$keepTextAreaAtCursor = null;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\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 if (useragent.isIOS) {\n var typingResetTimeout = null;\n var typing = false;\n\n parentNode.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n });\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\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: host.onCommandKey(null, 0, KEYS.up); break;\n case 1: host.onCommandKey(null, 0, KEYS.home); break;\n case 2: host.onCommandKey(null, MODS.option, KEYS.left); break;\n case 4: host.onCommandKey(null, 0, KEYS.left); break;\n case 5: host.onCommandKey(null, 0, KEYS.right); break;\n case 7: host.onCommandKey(null, MODS.option, KEYS.right); break;\n case 8: host.onCommandKey(null, 0, KEYS.end); break;\n case 9: host.onCommandKey(null, 0, KEYS.down); break;\n }\n } else {\n switch (selectionEnd) {\n case 6: host.onCommandKey(null, MODS.shift, KEYS.right); break;\n case 7: host.onCommandKey(null, MODS.shift | MODS.option, KEYS.right); break;\n case 8: host.onCommandKey(null, MODS.shift, KEYS.end); break;\n case 9: host.onCommandKey(null, MODS.shift, KEYS.down); break;\n }\n switch (selectionStart) {\n case 0: host.onCommandKey(null, MODS.shift, KEYS.up); break;\n case 1: host.onCommandKey(null, MODS.shift, KEYS.home); break;\n case 2: host.onCommandKey(null, MODS.shift | MODS.option, KEYS.left); break;\n case 3: host.onCommandKey(null, MODS.shift, KEYS.left); break;\n }\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function() {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n};\n\nexports.TextInput = TextInput;\n});\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(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\n\nvar TextInputIOS = acequire(\"./textinput_ios\").TextInput;\nvar TextInput = function(parentNode, host) {\n if (useragent.isIOS)\n return TextInputIOS.call(this, parentNode, host);\n\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n\n var PLACEHOLDER = \"\\u2028\\u2028\";\n\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var tempStyle = '';\n var isSelectionEmpty = true;\n try { var isFocused = document.activeElement === text; } catch(e) {}\n \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\")\n text.style.top = top;\n }, 0);\n };\n this.blur = function() {\n text.blur();\n };\n this.isFocused = function() {\n return isFocused;\n };\n 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\n function resetSelection(isEmpty) {\n if (inComposition)\n return;\n inComposition = true;\n \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 \n inComposition = false;\n }\n\n function resetValue() {\n if (inComposition)\n return;\n text.value = PLACEHOLDER;\n if (useragent.isWebKit)\n syncValue.schedule();\n }\n\n useragent.isWebKit || host.addEventListener('changeSelection', function() {\n if (host.selection.isEmpty() != isSelectionEmpty) {\n isSelectionEmpty = !isSelectionEmpty;\n syncSelection.schedule();\n }\n });\n\n resetValue();\n if (isFocused)\n host.onFocus();\n\n\n var isAllSelected = function(text) {\n return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n };\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\n var inputHandler = null;\n this.setInputHandler = function(cb) {inputHandler = cb;};\n this.getInputHandler = function() {return inputHandler;};\n var afterContextMenu = false;\n \n var sendText = function(data) {\n if (inputHandler) {\n data = inputHandler(data);\n inputHandler = null;\n }\n if (pasted) {\n resetSelection();\n if (data)\n host.onPaste(data);\n pasted = false;\n } else if (data == PLACEHOLDER.charAt(0)) {\n if (afterContextMenu)\n host.execCommand(\"del\", {source: \"ace\"});\n else // some versions of android do not fire keydown when pressing backspace\n host.execCommand(\"backspace\", {source: \"ace\"});\n } else {\n if (data.substring(0, 2) == PLACEHOLDER)\n data = data.substr(2);\n else if (data.charAt(0) == PLACEHOLDER.charAt(0))\n data = data.substr(1);\n else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n data = data.slice(0, -1);\n \n if (data)\n host.onTextInput(data);\n }\n if (afterContextMenu)\n afterContextMenu = false;\n };\n var onInput = function(e) {\n if (inComposition)\n return;\n var data = text.value;\n sendText(data);\n resetValue();\n };\n \n var handleClipboardData = function(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n 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 \n var onCut = function(e) {\n doCopy(e, true);\n };\n \n var onCopy = function(e) {\n doCopy(e, false);\n };\n \n var onPaste = function(e) {\n var data = handleClipboardData(e);\n if (typeof data == \"string\") {\n if (data)\n host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(resetSelection);\n event.preventDefault(e);\n }\n else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n event.addListener(text, \"select\", onSelect);\n\n event.addListener(text, \"input\", onInput);\n\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)\n return;\n\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n case 86:\n onPaste(e);\n break;\n case 88:\n onCut(e);\n break;\n }\n });\n }\n var onCompositionStart = function(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) \n 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\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n var val = text.value.replace(/\\u2028/g, \"\");\n if (inComposition.lastValue === val) return;\n \n host.onCompositionUpdate(val);\n if (inComposition.lastValue)\n host.undo();\n if (inComposition.canUndo)\n 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\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)\n return;\n else if (str == c.lastValue)\n resetValue();\n else if (!c.lastValue && str) {\n resetValue();\n sendText(str);\n }\n });\n inputHandler = function compositionInputHandler(str) {\n if (timer)\n clearTimeout(timer);\n str = str.replace(/\\u2028/g, \"\");\n if (str == c.lastValue)\n return \"\";\n if (c.lastValue && timer)\n 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 =\n (!!useragent.isChrome && useragent.isChrome >= 53) ||\n (!!useragent.isWebKit && useragent.isWebKit >= 603);\n\n if (needsOnInput) {\n onInput();\n }\n };\n \n \n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n\n event.addListener(text, \"compositionstart\", onCompositionStart);\n if (useragent.isGecko) {\n event.addListener(text, \"text\", function(){syncComposition.schedule();});\n } else {\n event.addListener(text, \"keyup\", function(){syncComposition.schedule();});\n event.addListener(text, \"keydown\", function(){syncComposition.schedule();});\n }\n event.addListener(text, \"compositionend\", onCompositionEnd);\n\n this.getElement = function() {\n return text;\n };\n\n this.setReadOnly = function(readOnly) {\n text.readOnly = readOnly;\n };\n\n this.onContextMenu = function(e) {\n afterContextMenu = true;\n resetSelection(host.selection.isEmpty());\n host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n this.moveToMouse(e, true);\n };\n \n this.moveToMouse = function(e, bringToFront) {\n if (!tempStyle)\n tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n + \"height:\" + text.style.height + \";\"\n + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight -2;\n var move = function(e) {\n 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\n if (e.type != \"mousedown\")\n return;\n\n if (host.renderer.$keepTextAreaAtCursor)\n host.renderer.$keepTextAreaAtCursor = null;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n if (host.renderer.$keepTextAreaAtCursor == null) {\n host.renderer.$keepTextAreaAtCursor = true;\n host.renderer.$moveTextAreaToCursor();\n }\n }, 0);\n }\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\nexports.TextInput = TextInput;\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 250; // milliseconds\n\nfunction DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\n\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n this.onMouseDown = function(ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n editor.$blockScrolling++;\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n editor.$blockScrolling--;\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n\n this.startSelect = function(pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n editor.$blockScrolling++;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n editor.$blockScrolling--;\n };\n\n this.select = function() {\n var anchor, 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\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\n this.extendSelectionBy = function(unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n editor.$blockScrolling++;\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n } else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.$blockScrolling--;\n editor.renderer.scrollCursorIntoView();\n };\n\n this.selectEnd =\n this.selectAllEnd =\n this.selectByWordsEnd =\n this.selectByLinesEnd = function() {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\n\n this.focusWait = function() {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n\n this.onQuadClick = function(ev) {\n var editor = this.editor;\n\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.onMouseWheel = function(ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n \n var editor = this.editor;\n\n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = 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\n var direction = Math.abs(vx / vy);\n\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n\n if (canScroll) {\n prevScroll.allowed = t;\n } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.1 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.1 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n\n this.onTouchMove = function(ev) {\n this.editor._emit(\"mousewheel\", ev);\n };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n\n if (cmp < 0)\n return {cursor: range.start, anchor: range.end};\n else\n return {cursor: range.end, anchor: range.start};\n}\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n}\n\n(function() {\n this.$init = function() {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n this.getElement = function() {\n return this.$element || this.$init();\n };\n this.setText = function(text) {\n 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)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n\n this.hide = function() {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n }\n };\n this.getHeight = function() {\n return this.getElement().offsetHeight;\n };\n this.getWidth = function() {\n return this.getElement().offsetWidth;\n };\n\n this.destroy = function() {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(acequire, exports, module) {\n\"use strict\";\nvar dom = acequire(\"../lib/dom\");\nvar oop = acequire(\"../lib/oop\");\nvar event = acequire(\"../lib/event\");\nvar Tooltip = acequire(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\")\n return;\n\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n\n\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation)\n return hideTooltip();\n\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n\n if (tooltipAnnotation == annotation)\n return;\n tooltipAnnotation = annotation.text.join(\"
\");\n\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n } else {\n var gutterElement = mouseEvent.domEvent.target;\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n }\n\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\n editor.removeEventListener(\"mousewheel\", hideTooltip);\n }\n }\n\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n\n event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout)\n return;\n\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n });\n \n editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n this.setPosition = function(x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n \n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n\n this.$pos = null;\n this.$inSelection = null;\n \n this.propagationStopped = false;\n this.defaultPrevented = false;\n};\n\n(function() { \n \n this.stopPropagation = function() {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n \n this.preventDefault = function() {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n \n this.stop = function() {\n this.stopPropagation();\n this.preventDefault();\n };\n this.getDocumentPosition = function() {\n if (this.$pos)\n return this.$pos;\n \n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n this.inSelection = function() {\n if (this.$inSelection !== null)\n return this.$inSelection;\n \n var editor = this.editor;\n \n\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n\n return this.$inSelection;\n };\n this.getButton = function() {\n return event.getButton(this.domEvent);\n };\n this.getShiftKey = function() {\n return this.domEvent.shiftKey;\n };\n \n this.getAccelKey = useragent.isMac\n ? function() { return this.domEvent.metaKey; }\n : function() { return this.domEvent.ctrlKey; };\n \n}).call(MouseEvent.prototype);\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n var editor = mouseHandler.editor;\n\n var blankImage = dom.createElement(\"img\");\n blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (useragent.isOpera)\n blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n\n this.onDragStart = function(e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function(){\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n 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\n isInternal = true;\n this.setState(\"drag\");\n };\n\n this.onDragEnd = function(e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.renderer.$cursorLayer.setBlinking(true);\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n\n this.onDragEnter = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragOver = function(e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragLeave = function(e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n\n this.onDrop = function(e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n } else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n } else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\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\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 = {x: x, y: y};\n } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = {row: cursor.row, column: cursor.column};\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n } else {\n autoScrollStartTime = null;\n }\n }\n\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.$blockScrolling += 1;\n editor.selection.fromOrientedRange(range);\n editor.$blockScrolling -= 1;\n if (editor.isFocused() && !isInternal)\n 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)\n clearDragMarker();\n }, 20);\n }\n }\n\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function(type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n var dropEffect = \"none\";\n\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n\n return dropEffect;\n }\n}\n\n(function() {\n\n this.dragWait = function() {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n\n this.dragWaitEnd = function() {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n\n this.dragReadyEnd = function(e) {\n this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n\n this.startDrag = function(){\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n\n this.onMouseDrag = function(e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n\n this.onMouseDown = function(e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n } else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\nvar dom = acequire(\"./dom\");\n\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\n\nexports.loadScript = function(path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n\n s.src = path;\n head.appendChild(s);\n\n s.onload = s.onreadystatechange = function(_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function(url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n\n if (typeof e != \"object\" || !e)\n e = {};\n\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n\n listeners = listeners.slice();\n for (var i=0; i 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n } else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\n\nexports.setModuleUrl = function(name, subst) {\n return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n var module, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = acequire(moduleName);\n } catch (e) {}\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n\n exports.$loading[moduleName].push(onLoad);\n\n if (exports.$loading[moduleName].length > 1)\n return;\n\n var afterLoad = function() {\n acequire([moduleName], function(module) {\n exports._emit(\"load.module\", {name: moduleName, module: module});\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function(onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n options.packaged = packaged || acequire.packaged || module.packaged || (global.define && define.packaged);\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i 0){\n\t\t\tif (action == 0x10){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = 1;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t} else {\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tcond = impTab[newState][6];\n\t\tif (cond){\n\t\t\tif(condPos == -1){\n\t\t\t\tcondPos = ix;\n\t\t\t}\n\t\t}else{\n\t\t\tif (condPos > -1){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = newLevel;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tif (charTypes[ix] == B){\n\t\t\tlevels[ix] = 0;\n\t\t}\n\t\thiLevel |= newLevel;\n\t}\n\tif (hasUBAT_S){\n\t\tfor(i = 0; i < len; i++){\n\t\t\tif(charTypes[i] == S){\n\t\t\t\tlevels[i] = dir;\n\t\t\t\tfor(var j = i - 1; j >= 0; j--){\n\t\t\t\t\tif(charTypes[j] == WS){\n\t\t\t\t\t\tlevels[j] = dir;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction _invertLevel(lev, levels, _array) {\n\tif (hiLevel < lev){\n\t\treturn;\n\t}\n\tif (lev == 1 && dir == RTL && !hasUBAT_B){\n\t\t_array.reverse();\n\t\treturn;\n\t}\n\tvar len = _array.length, start = 0, end, lo, hi, tmp;\n\twhile(start < len){\n\t\tif (levels[start] >= lev){\n\t\t\tend = start + 1;\n\t\twhile(end < len && levels[end] >= lev){\n\t\t\tend++;\n\t\t}\n\t\tfor(lo = start, hi = end - 1 ; lo < hi; lo++, hi--){\n\t\t\ttmp = _array[lo];\n\t\t\t_array[lo] = _array[hi];\n\t\t\t_array[hi] = tmp;\n\t\t}\n\t\tstart = end;\n\t}\n\tstart++;\n\t}\n}\n\nfunction _getCharClass(chars, types, classes, ix) {\n\tvar cType = types[ix], wType, nType, len, i;\n\tswitch(cType){\n\t\tcase L:\n\t\tcase R:\n\t\t\tlastArabic = false;\n\t\tcase ON:\n\t\tcase AN:\n\t\t\treturn cType;\n\t\tcase EN:\n\t\t\treturn lastArabic ? AN : EN;\n\t\tcase AL:\n\t\t\tlastArabic = true;\n\t\t\thasUBAT_AL = true;\n\t\t\treturn R;\n\t\tcase WS:\n\t\t\treturn ON;\n\t\tcase CS:\n\t\t\tif (ix < 1 || (ix + 1) >= types.length ||\n\t\t\t\t((wType = classes[ix - 1]) != EN && wType != AN) ||\n\t\t\t\t((nType = types[ix + 1]) != EN && nType != AN)){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\tif (lastArabic){nType = AN;}\n\t\t\treturn nType == wType ? nType : ON;\n\t\tcase ES:\n\t\t\twType = ix > 0 ? classes[ix - 1] : B;\n\t\t\tif (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase ET:\n\t\t\tif (ix > 0 && classes[ix - 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\tif (lastArabic){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\ti = ix + 1;\n\t\t\tlen = types.length;\n\t\t\twhile (i < len && types[i] == ET){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len && types[i] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase NSM:\n\t\t\tlen = types.length;\n\t\t\ti = ix + 1;\n\t\t\twhile (i < len && types[i] == NSM){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len){\n\t\t\t\tvar c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n\n\t\t\t\twType = types[i];\n\t\t\t\tif (rtlCandidate && (wType == R || wType == AL)){\n\t\t\t\t\treturn R;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ix < 1 || (wType = types[ix - 1]) == B){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\treturn classes[ix - 1];\n\t\tcase B:\n\t\t\tlastArabic = false;\n\t\t\thasUBAT_B = true;\n\t\t\treturn dir;\n\t\tcase S:\n\t\t\thasUBAT_S = true;\n\t\t\treturn ON;\n\t\tcase LRE:\n\t\tcase RLE:\n\t\tcase LRO:\n\t\tcase RLO:\n\t\tcase PDF:\n\t\t\tlastArabic = false;\n\t\tcase BN:\n\t\t\treturn ON;\n\t}\n}\n\nfunction _getCharacterType( ch ) {\n\tvar uc = ch.charCodeAt(0), hi = uc >> 8;\n\n\tif (hi == 0) {\n\t\treturn ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n\t} else if (hi == 5) {\n\t\treturn (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n\t} else if (hi == 6) {\n\t\tif (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n\t\t\treturn NSM;\n\t\telse if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n\t\t\treturn AN;\n\t\telse if (uc == 0x066A)\n\t\t\treturn ET;\n\t\telse if (/[\\u06f0-\\u06f9]/.test(ch))\n\t\t\treturn EN;\n\t\telse\n\t\t\treturn AL;\n\t} else if (hi == 0x20 && uc <= 0x205F) {\n\t\treturn UnicodeTBL20[uc & 0xFF];\n\t} else if (hi == 0xFE) {\n\t\treturn (uc >= 0xFE70 ? AL : ON);\n\t}\n\treturn ON;\n}\n\nfunction _isArabicDiacritics( ch ) {\n\treturn (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\n\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function(text, textCharTypes, isRtl) {\n\tif (text.length < 2)\n\t\treturn {};\n\n\tvar chars = text.split(\"\"), logicalFromVisual = new Array(chars.length),\n\t\tbidiLevels = new Array(chars.length), levels = [];\n\n\tdir = isRtl ? RTL : LTR;\n\n\t_computeLevels(chars, levels, chars.length, textCharTypes);\n\n\tfor (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++);\n\n\t_invertLevel(2, levels, logicalFromVisual);\n\t_invertLevel(1, levels, logicalFromVisual);\n\n\tfor (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n\t\tif (textCharTypes[i] === AN) {\n\t\t\tlevels[i] = exports.AN;\n\t\t} else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n\t\t\t|| textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n\t\t\tlevels[i] = exports.ON_R;\n\t\t} else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n\t\t\tlevels[i - 1] = levels[i] = exports.R_H;\n\t\t\ti++;\n\t\t}\n\t}\n\tif (chars[chars.length - 1] === exports.DOT)\n\t\tlevels[chars.length - 1] = exports.B;\n\n\tfor (var i = 0; i < logicalFromVisual.length; i++) {\n\t\tbidiLevels[i] = levels[logicalFromVisual[i]];\n\t}\n\n\treturn {'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels};\n};\nexports.hasBidiCharacters = function(text, textCharTypes){\n\tvar ret = false;\n\tfor (var i = 0; i < text.length; i++){\n\t\ttextCharTypes[i] = _getCharacterType(text.charAt(i));\n\t\tif (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL))\n\t\t\tret = true;\n\t}\n\treturn ret;\n};\nexports.getVisualFromLogicalIdx = function(logIdx, rowMap) {\n\tfor (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n\t\tif (rowMap.logicalFromVisual[i] == logIdx)\n\t\t\treturn i;\n\t}\n\treturn 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar bidiUtil = acequire(\"./lib/bidiutil\");\nvar lang = acequire(\"./lib/lang\");\nvar useragent = acequire(\"./lib/useragent\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\nvar BidiHandler = function(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.isLastRow = false;\n this.EOF = \"\\xB6\";\n this.seenBidi = false;\n};\n\n(function() {\n this.isBidiRow = function(screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n\n this.onChange = function(delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n\n this.getDocumentRow = function() {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n\n return docRow;\n };\n\n this.getSplitIndex = function() {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n\n return splitIndex;\n };\n\n this.updateRowLine = function(docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n\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)\n splitIndex = this.getSplitIndex();\n\n if(splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splits.length - 1]) :\n 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, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function(ch, i){\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n };\n\n this.updateBidiMap = function() {\n var textCharTypes = [], 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)\n return;\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = useragent.isChrome ? bidiCharWidth : bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = 0;\n\n this.currentRow = null;\n };\n\n this.getShowInvisibles = function() {\n return this.showInvisibles;\n };\n\n this.setShowInvisibles = function(showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n\n this.setEolChar = function(eolChar) {\n this.EOL = eolChar;\n };\n\n this.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, left = 0;\n\n if (col === 0 && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n\n if (col !== 0 && levels[visualIdx] % 2 === 0)\n left += this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent)\n left += this.wrapIndent * this.charWidths[bidiUtil.L];\n\n return left;\n };\n this.getSelections = function(startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, offset = this.wrapIndent * this.charWidths[bidiUtil.L], selections = [],\n selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false, isSelectedPrev = false, selectionStart = 0;\n\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n } else if (!isSelected && isSelectedPrev) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n\n if (isSelected && (visIdx === levels.length)) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n\n return selections;\n };\n this.offsetToCol = function(posX) {\n var logicalIdx = 0, posX = Math.max(posX, 0),\n offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent) {\n posX -= this.wrapIndent * this.charWidths[bidiUtil.L];\n }\n\n while(posX > offset + charWidth/2) {\n offset += charWidth;\n if(visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)){\n if(posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n\n } else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)){\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n\n } else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))){\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n } else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n\n return (logicalIdx + this.wrapIndent);\n };\n\n}).call(BidiHandler.prototype);\n\nexports.BidiHandler = BidiHandler;\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n\n this.end = {\n row: endRow,\n column: endColumn\n };\n};\n\n(function() {\n this.isEqual = function(range) {\n return this.start.row === range.start.row &&\n this.end.row === range.end.row &&\n this.start.column === range.start.column &&\n this.end.column === range.end.column;\n };\n this.toString = function() {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n\n this.contains = function(row, column) {\n return this.compare(row, column) == 0;\n };\n this.compareRange = function(range) {\n var cmp,\n end = range.end,\n start = range.start;\n\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n this.comparePoint = function(p) {\n return this.compare(p.row, p.column);\n };\n this.containsRange = function(range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n this.intersects = function(range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n this.isEnd = function(row, column) {\n return this.end.row == row && this.end.column == column;\n };\n this.isStart = function(row, column) {\n return this.start.row == row && this.start.column == column;\n };\n this.setStart = function(row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n } else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n this.setEnd = function(row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n } else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n this.inside = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideStart = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideEnd = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.compare = function(row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n\n if (row < this.start.row)\n return -1;\n\n if (row > this.end.row)\n return 1;\n\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n\n return 0;\n };\n this.compareStart = function(row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareEnd = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareInside = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.clipRows = function(firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = {row: lastRow + 1, column: 0};\n else if (this.end.row < firstRow)\n var end = {row: firstRow, column: 0};\n\n if (this.start.row > lastRow)\n var start = {row: lastRow + 1, column: 0};\n else if (this.start.row < firstRow)\n var start = {row: firstRow, column: 0};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n this.extend = function(row, column) {\n var cmp = this.compare(row, column);\n\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = {row: row, column: column};\n else\n var end = {row: row, column: column};\n\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.isEmpty = function() {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n this.isMultiLine = function() {\n return (this.start.row !== this.end.row);\n };\n this.clone = function() {\n return Range.fromPoints(this.start, this.end);\n };\n this.collapseRows = function() {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n this.toScreenRange = function(session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n\n return new Range(\n screenPosStart.row, screenPosStart.column,\n screenPosEnd.row, screenPosEnd.column\n );\n };\n this.moveBy = function(row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar lang = acequire(\"./lib/lang\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Range = acequire(\"./range\").Range;\nvar Selection = function(session) {\n this.session = session;\n this.doc = session.getDocument();\n\n this.clearSelection();\n this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\n this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\n\n var self = this;\n this.lead.on(\"change\", function(e) {\n self._emit(\"changeCursor\");\n if (!self.$isEmpty)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n\n this.selectionAnchor.on(\"change\", function() {\n if (!self.$isEmpty)\n self._emit(\"changeSelection\");\n });\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.isEmpty = function() {\n return (this.$isEmpty || (\n this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column\n ));\n };\n this.isMultiLine = function() {\n if (this.isEmpty()) {\n return false;\n }\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\n if (this.$isEmpty) {\n this.$isEmpty = false;\n this._emit(\"changeSelection\");\n }\n };\n this.getSelectionAnchor = function() {\n if (this.$isEmpty)\n return this.getSelectionLead();\n else\n 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\n var anchor = this.getSelectionAnchor();\n var lead = this.getSelectionLead();\n\n var isBackwards = this.isBackwards();\n\n if (!isBackwards || anchor.column !== 0)\n this.setSelectionAnchor(anchor.row, anchor.column + columns);\n\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\n if (this.isEmpty())\n return Range.fromPoints(lead, lead);\n\n if (this.isBackwards()) {\n return Range.fromPoints(lead, anchor);\n }\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 =\n 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())\n this.$isEmpty = true;\n this.$desiredColumn = null;\n };\n\n this.$moveSelection = function(mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n\n mover.call(this);\n };\n this.selectTo = function(row, column) {\n this.$moveSelection(function() {\n this.moveCursorTo(row, column);\n });\n };\n this.selectToPosition = function(pos) {\n this.$moveSelection(function() {\n this.moveCursorToPosition(pos);\n });\n };\n this.moveTo = function(row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n this.moveToPosition = function(pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n this.selectUp = function() {\n this.$moveSelection(this.moveCursorUp);\n };\n this.selectDown = function() {\n this.$moveSelection(this.moveCursorDown);\n };\n this.selectRight = function() {\n this.$moveSelection(this.moveCursorRight);\n };\n this.selectLeft = function() {\n this.$moveSelection(this.moveCursorLeft);\n };\n this.selectLineStart = function() {\n this.$moveSelection(this.moveCursorLineStart);\n };\n this.selectLineEnd = function() {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n this.selectFileEnd = function() {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n this.selectFileStart = function() {\n this.$moveSelection(this.moveCursorFileStart);\n };\n this.selectWordRight = function() {\n this.$moveSelection(this.moveCursorWordRight);\n };\n this.selectWordLeft = function() {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n this.getWordRange = function(row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n this.selectWord = function() {\n this.setSelectionRange(this.getWordRange());\n };\n this.selectAWord = function() {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n\n this.getLineRange = function(row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n } else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n this.selectLine = function() {\n this.setSelectionRange(this.getLineRange());\n };\n this.moveCursorUp = function() {\n this.moveCursorBy(-1, 0);\n };\n this.moveCursorDown = function() {\n this.moveCursorBy(1, 0);\n };\n this.wouldMoveIntoSoftTab = function(cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length-1 == tabSize;\n };\n this.moveCursorLeft = function() {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n } else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n } else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n this.moveCursorRight = function() {\n var cursor = this.lead.getPosition(),\n fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n } else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n this.moveCursorLineStart = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(\n row, null, firstColumnPosition.row,\n firstColumnPosition.column\n );\n\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n this.moveCursorLineEnd = function() {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n this.moveCursorFileEnd = function() {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n this.moveCursorFileStart = function() {\n this.moveCursorTo(0, 0);\n };\n this.moveCursorLongWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n 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)\n 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\n this.moveCursorTo(row, column);\n };\n this.moveCursorLongWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n\n var leftOfCursor = lang.stringReverse(str);\n 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)\n 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\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function(rightOfCursor) {\n var match, index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n\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))\n index ++;\n\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index ++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n\n return index;\n };\n\n this.moveCursorShortWordRight = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n\n this.moveCursorWordLeft = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n this.moveCursorBy = function(rows, chars) {\n var screenPos = this.session.documentToScreenPosition(\n this.lead.row,\n this.lead.column\n );\n\n var offsetX;\n\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n } else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n \n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n if (docPos.row > 0 || rows > 0)\n 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\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n this.detach = function() {\n this.lead.detach();\n this.anchor.detach();\n this.session = this.doc = null;\n };\n\n this.fromOrientedRange = function(range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n\n this.toOrientedRange = function(range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n } else {\n range = r;\n }\n\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n this.getRangeOfMovements = function(func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start,end);\n } catch(e) {\n return Range.fromPoints(start,start);\n } finally {\n this.moveCursorToPosition(start);\n }\n };\n\n this.toJSON = function() {\n if (this.rangeCount) {\n var data = this.ranges.map(function(r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n\n this.fromJSON = function(data) {\n if (data.start == undefined) {\n if (this.rangeList) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--; ) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n } else\n data = data[0];\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n\n this.isEqual = function(data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n\n for (var i = this.ranges.length; i--; ) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar config = acequire(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function(rules) {\n this.states = rules;\n\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\n var flag = \"g\";\n\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive)\n flag = \"gi\";\n if (rule.regex == null)\n continue;\n\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n } else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", { \n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n } else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n \n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n \n splitterRurles.forEach(function(rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n};\n\n(function() {\n this.$setMaxTokenCount = function(m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n \n this.$applyToken = function(str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{type: types, value: str}];\n\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n\n this.$arrayTokens = function(str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n\n this.removeCapturingGroups = function(src) {\n var r = src.replace(\n /\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,\n function(x, y) {return y ? \"(?:\" : x;}\n );\n return r;\n };\n\n this.createSplitterRegexp = function(src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\n m, esc, parenOpen, parenClose, square, index\n ) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index+1;\n lastCapture.stack = -1;\n }\n stack--;\n } else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n \n return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n };\n this.getLineTokens = function(line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n } else\n var stack = [];\n\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n\n var token = {type: null, value: \"\"};\n\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: skipped};\n }\n }\n\n for (var i = 0; i < match.length-2; i++) {\n if (match[i + 1] === undefined)\n continue;\n\n rule = state[mapping[i]];\n\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\n \n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: value};\n }\n } else if (type) {\n if (token.type)\n tokens.push(token);\n token = {type: null, value: \"\"};\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n\n if (lastIndex == line.length)\n break;\n\n lastIndex = index;\n\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 2000),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n\n if (token.type)\n tokens.push(token);\n \n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens : tokens,\n state : stack.length ? stack : currentState\n };\n };\n \n this.reportError = config.reportError;\n \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n this.$rules = {\n \"start\" : [{\n token : \"empty_line\",\n regex : '^$'\n }, {\n defaultToken : \"text\"\n }]\n };\n};\n\n(function() {\n\n this.addRules = function(rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n\n this.getRules = function() {\n return this.$rules;\n };\n\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n } else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n\n this.addRules(embedRules, prefix);\n\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function() {\n return this.$embeds;\n };\n\n var pushState = function(currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function(currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n\n this.normalizeRules = function() {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (Array.isArray(includeName))\n toInsert = includeName.map(function(x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function(x) {return !x.next;});\n state.splice.apply(state, args);\n i--;\n }\n \n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(\n rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n );\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n\n this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n Object.keys(map).forEach(function(className) {\n var a = map[className];\n if (ignoreCase)\n a = a.toLowerCase();\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--; )\n 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\n ? function(value) {return keywords[value.toLowerCase()] || defaultToken; }\n : function(value) {return keywords[value] || defaultToken; };\n };\n\n this.getKeywords = function() {\n return this.$keywords;\n };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n this.$behaviours = {};\n};\n\n(function () {\n\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n \n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n \n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n \n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n \n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n } else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"./range\").Range;\nvar TokenIterator = function(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() { \n this.stepBackward = function() {\n this.$tokenIndex -= 1;\n \n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n \n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.stepForward = function() {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentTokenRow = function () {\n return this.$row;\n }; \n this.getCurrentTokenColumn = function() {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n \n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n \n return column; \n };\n this.getCurrentTokenPosition = function() {\n return {row: this.$row, column: this.getCurrentTokenColumn()};\n };\n this.getCurrentTokenRange = function() {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n\n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../../lib/oop\");\nvar Behaviour = acequire(\"../behaviour\").Behaviour;\nvar TokenIterator = acequire(\"../../token_iterator\").TokenIterator;\nvar lang = acequire(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n [\"text\", \"paren.rparen\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar defaultQuotes = {'\"' : '\"', \"'\" : \"'\"};\n\nvar initContext = function(editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = {rangeCount: editor.multiSelect.rangeCount};\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\n\nvar CstyleBehaviour = function(options) {\n this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n } else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n } else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n\n this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n } else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n\n this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n } else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n } else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n\n this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n } else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column-1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n } else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1,1]\n };\n }\n }\n });\n\n this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n var 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};\n\n\nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nexports.packages = {};\n\naddUnicodePackage({\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\nfunction addUnicodePackage (pack) {\n var codePoint = /\\w{4}/g;\n for (var name in pack)\n exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\n}\n\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(acequire, exports, module) {\n\"use strict\";\n\nvar Tokenizer = acequire(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = acequire(\"../unicode\");\nvar lang = acequire(\"../lib/lang\");\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\nvar Range = acequire(\"../range\").Range;\n\nvar Mode = function() {\n this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n this.$defaultBehaviour = new CstyleBehaviour();\n\n this.tokenRe = new RegExp(\"^[\"\n + unicode.packages.L\n + unicode.packages.Mn + unicode.packages.Mc\n + unicode.packages.Nd\n + unicode.packages.Pc + \"\\\\$_]+\", \"g\"\n );\n\n this.nonTokenRe = new RegExp(\"^(?:[^\"\n + unicode.packages.L\n + unicode.packages.Mn + unicode.packages.Mc\n + unicode.packages.Nd\n + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\"\n );\n\n this.getTokenizer = function() {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function(state, session, startRow, endRow) {\n var doc = session.doc;\n\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n var comment = function(line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n\n var uncomment = function(line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n\n var testRemove = function(line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n \n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function(line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function(line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\n else\n doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n }\n };\n var testRemove = function(line, i) {\n return regexpStart.test(line);\n };\n \n var shouldInsertSpace = function(line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n return true;\n };\n }\n\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n\n\n var minEmptyLength = Infinity;\n iter(function(line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n iter(shouldRemove ? uncomment : comment);\n };\n\n this.toggleBlockComment = function(state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n } else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n\n this.getNextLineIndent = function(state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n\n this.autoOutdent = function(state, doc, row) {\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function(session) {\n return null;\n };\n\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n this.$embeds.push(i);\n this.$modes[i] = new mapping[i]();\n }\n }\n\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n for (var i = 0; i < delegations.length; i++) {\n (function(scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function() {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\n }\n };\n\n this.$delegator = function(method, args, defaultHandler) {\n var state = args[0];\n if (typeof state != \"string\")\n state = state[0];\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n\n this.transformAction = function(state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n \n this.getKeywords = function(append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { \n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n \n this.$createKeywordList = function() {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n\n this.getCompletions = function(state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function(word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n \n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n } else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n } else {\n docLines.splice(\n row, endRow - row + 1,\n line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n );\n }\n break;\n }\n};\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n \n if (typeof column == \"undefined\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n this.getDocument = function() {\n return this.document;\n };\n this.$insertRight = false;\n this.onChange = function(delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n\n if (delta.start.row > this.row)\n return;\n \n var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n \n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n }\n \n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n \n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column)\n return;\n\n var old = {\n row: this.row,\n column: this.column\n };\n\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n this.detach = function() {\n this.document.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\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n\n if (column < 0)\n pos.column = 0;\n\n return pos;\n };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar applyDelta = acequire(\"./apply_delta\").applyDelta;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Range = acequire(\"./range\").Range;\nvar Anchor = acequire(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({row: 0, column: 0}, textOrLines);\n } else {\n this.insert({row: 0, column:0}, textOrLines);\n }\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setValue = function(text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({row: 0, column: 0}, text);\n };\n this.getValue = function() {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n this.createAnchor = function(row, column) {\n return new Anchor(this, row, column);\n };\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function(text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function(text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineCharacter = function() {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n this.setNewLineMode = function(newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineMode = function() {\n return this.$newLineMode;\n };\n this.isNewLine = function(text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n this.getLine = function(row) {\n return this.$lines[row] || \"\";\n };\n this.getLines = function(firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n this.getAllLines = function() {\n return this.getLines(0, this.getLength());\n };\n this.getLength = function() {\n return this.$lines.length;\n };\n this.getTextRange = function(range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n this.getLinesForRange = function(range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n } else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n this.insertLines = function(row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n this.removeLines = function(firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n this.insertNewLine = function(position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n this.insert = function(position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n \n return this.insertMergedLines(position, this.$split(text));\n };\n this.insertInLine = function(position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n \n return this.clonePos(end);\n };\n \n this.clippedPos = function(row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\n } else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {row: row, column: column};\n };\n \n this.clonePos = function(pos) {\n return {row: pos.row, column: pos.column};\n };\n \n this.pos = function(row, column) {\n return {row: row, column: column};\n };\n \n this.$clipPosition = function(position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n } else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n this.insertFullLines = function(row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({row: row, column: column}, lines);\n }; \n this.insertMergedLines = function(position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n \n return this.clonePos(end);\n };\n this.remove = function(range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n });\n return this.clonePos(start);\n };\n this.removeInLine = function(row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n }, true);\n \n return this.clonePos(start);\n };\n this.removeFullLines = function(firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );\n var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );\n var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );\n var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); \n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n \n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n this.removeNewLine = function(row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n this.replace = function(range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n \n return end;\n };\n this.applyDeltas = function(deltas) {\n for (var i=0; i=0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n this.applyDelta = function(delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n \n if (isInsert && delta.lines.length > 20000)\n this.$splitAndapplyLargeDelta(delta, 20000);\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n };\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, 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)\n return {row: i, column: index + lines[i].length + newlineLength};\n }\n return {row: l-1, column: lines[l-1].length};\n };\n this.positionToIndex = function(pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n\n return index + pos.column;\n };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n\n var self = this;\n\n this.$worker = function() {\n if (!self.running) { return; }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n \n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines ++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { \n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n \n if (endLine == -1)\n endLine = currentLine;\n\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n this.setTokenizer = function(tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n\n this.start(0);\n };\n this.setDocument = function(doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n\n this.stop();\n };\n this.fireUpdateEvent = function(firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", {data: data});\n };\n this.start = function(startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n \n this.scheduleStart = function() {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n\n this.$updateOnChange = function(delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n this.stop();\n };\n this.stop = function() {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n this.getTokens = function(row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n this.getState = function(row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function(row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n\n var data = this.tokenizer.getLineTokens(line, state, row);\n\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar Range = acequire(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n};\n\n(function() {\n this.MAX_RANGES = 500;\n \n this.setRegexp = function(regExp) {\n if (this.regExp+\"\" == regExp+\"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function(html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function(match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n\n for (var j = ranges.length; j --; ) {\n markerLayer.drawSingleLineMarker(\n html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [ folds ];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column,\n last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n\n this.folds.forEach(function(fold) {\n fold.setFoldLine(this);\n }, this);\n}\n\n(function() {\n this.shiftRow = function(shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function(fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n\n this.addFold = function(fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function(a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n } else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n\n this.containsRow = function(row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function(callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp, stop, isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n\n this.getNextFoldTo = function(row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n\n this.addRemoveChars = function(row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row)\n {\n window.console && window.console.log(row, column, fold);\n } else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n\n this.split = function(row, column) {\n var pos = this.getNextFoldTo(row, column);\n \n if (!pos || pos.kind == \"inside\")\n return null;\n \n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n \n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.merge = function(foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n\n this.toString = function() {\n var ret = [this.range.toString() + \": [\" ];\n\n this.folds.forEach(function(fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function(idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\nvar Range = acequire(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n this.ranges = [];\n};\n\n(function() {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function(pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i-2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n\n return -i-1;\n }\n return -i - 1;\n };\n\n this.add = function(range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.addList = function(list) {\n var removed = [];\n for (var i = list.length; i--; ) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n\n this.substractPoint = function(pos) {\n var i = this.pointIndex(pos);\n\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n this.merge = function() {\n var removed = [];\n var list = this.ranges;\n \n list = list.sort(function(a, b) {\n return comparePoints(a.start, b.start);\n });\n \n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n \n this.ranges = list;\n\n return removed;\n };\n\n this.contains = function(row, column) {\n return this.pointIndex({row: row, column: column}) >= 0;\n };\n\n this.containsPoint = function(pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function(pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n\n\n this.clipRows = function(startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n\n var startIndex = this.pointIndex({row: startRow, column: 0});\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n\n this.removeAll = function() {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function(session) {\n if (this.session)\n this.detach();\n\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n\n this.session.on('change', this.onChange);\n };\n\n this.detach = function() {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$onChange = function(delta) {\n 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\n var colDiff = -start.column + end.column;\n var ranges = this.ranges;\n\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row < startRow)\n continue;\n if (r.start.row > startRow)\n break;\n\n if (r.start.row == startRow && r.start.column >= start.column ) {\n if (r.start.column == start.column && this.$insertRight) {\n } else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$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)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar RangeList = acequire(\"../range_list\").RangeList;\nvar oop = acequire(\"../lib/oop\");\nvar Fold = exports.Fold = function(range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n this.toString = function() {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function(foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function(fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.clone = function() {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function(subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n\n this.addSubFold = function(fold) {\n if (this.range.isEqual(fold))\n return;\n\n if (!this.range.containsRange(fold))\n throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n consumeRange(fold, this.start);\n\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n\n if (cmp == 0)\n return afterStart.addSubFold(fold);\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterEnd = this.subFolds[j];\n\n if (cmp == 0)\n throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n fold.setFoldLine(this.foldLine);\n\n return fold;\n };\n \n this.restoreRange = function(range) {\n return restoreRange(range, this.start);\n };\n\n}).call(Fold.prototype);\n\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar FoldLine = acequire(\"./fold_line\").FoldLine;\nvar Fold = acequire(\"./fold\").Fold;\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n this.getFoldAt = function(row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var 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\n start.column += 1;\n end.column -= 1;\n\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n } else if (cmp == 2) {\n continue;\n } else\n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n\n return foundFolds;\n };\n\n this.getFoldsInRangeList = function(ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function(range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n } else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function() {\n var folds = [];\n var foldLines = this.$foldData;\n \n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n\n return folds;\n };\n this.getFoldStringAt = function(row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n\n this.getFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n } else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function(docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n\n this.getFoldedRowCount = function(first, last) {\n var foldData = this.$foldData, rowCount = last-first+1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i],\n end = foldLine.end.row,\n start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last-start;\n else\n rowCount = 0; // in one fold\n }\n break;\n } else if (end >= first){\n if (start >= first) // fold inside range\n rowCount -= end-start;\n else\n rowCount -= end-first+1;\n }\n }\n return rowCount;\n };\n\n this.$addFoldLine = function(foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function(a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function(placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n \n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n if (!(startRow < endRow || \n startRow == endRow && startColumn <= endColumn - 2))\n throw new Error(\"The range has to be at least 2 characters width\");\n\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n \n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n folds.forEach(function(subFold) {\n fold.addSubFold(subFold);\n });\n }\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n } else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n\n return fold;\n };\n\n this.addFolds = function(folds) {\n folds.forEach(function(fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function(fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else\n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n } else\n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n } else\n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else\n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n\n this.removeFolds = function(folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function(fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n\n this.expandFold = function(fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function(subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\n }\n fold.subFolds = [];\n };\n\n this.expandFolds = function(folds) {\n folds.forEach(function(fold) {\n this.expandFold(fold);\n }, this);\n };\n\n this.unfold = function(location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n expandInner = true;\n } else if (typeof location == \"number\")\n range = new Range(location, 0, location, this.getLine(location).length);\n else if (\"row\" in location)\n range = Range.fromPoints(location, location);\n else\n range = location;\n \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)\n return folds;\n };\n this.isRowFolded = function(docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n\n this.getRowFoldEnd = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n\n this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(\n foldLine, row, endColumn, startRow, startColumn);\n }\n };\n\n this.$cloneFoldData = function() {\n var fd = [];\n fd = this.$foldData.map(function(foldLine) {\n var folds = foldLine.folds.map(function(fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n\n return fd;\n };\n\n this.toggleFold = function(tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1 ) {\n fold = folds[0];\n }\n }\n\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n\n this.addFold(placeholder, range);\n };\n\n this.getCommentFoldRange = function(row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n iterator.stepForward();\n }\n \n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n iterator = new TokenIterator(this, row, column);\n \n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state))\n lastRow = iterator.$row;\n } else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n } else\n token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n\n this.foldAll = function(startRow, endRow, depth) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow\n ) {\n row = range.end.row;\n try {\n var fold = this.addFold(\"...\", range);\n if (fold)\n 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])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n \n if (this.$foldStyle == style)\n return;\n\n this.$foldStyle = style;\n \n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function(foldMode) {\n if (this.$foldMode == foldMode)\n return;\n \n this.$foldMode = foldMode;\n \n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n \n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n \n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n \n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function(row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n \n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n \n this.$toggleFoldWidget = function(row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n \n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) \n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n \n return range;\n };\n \n \n \n this.toggleFoldWidget = function(toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n \n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n \n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function(delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function(e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\n\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\nvar Range = acequire(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n this.findMatchingBracket = function(position, chr) {\n if (position.column == 0) return null;\n\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n if (charBeforeCursor == \"\") return null;\n\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n \n this.getBracketRange = function(pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n\n var chr = line.charAt(pos.column-1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {row: pos.row, column: pos.column + 1};\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n } else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n \n return range;\n };\n\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\"\n };\n\n this.$findOpeningBracket = function(bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n \n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n \n while (true) {\n \n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n \n value = token.value;\n valueIndex = value.length - 1;\n }\n \n return null;\n };\n\n this.$findClosingBracket = function(bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n\n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return {row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()};\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null)\n break;\n\n valueIndex = 0;\n }\n \n return null;\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar lang = acequire(\"./lib/lang\");\nvar BidiHandler = acequire(\"./bidihandler\").BidiHandler;\nvar config = acequire(\"./config\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar Selection = acequire(\"./selection\").Selection;\nvar TextMode = acequire(\"./mode/text\").Mode;\nvar Range = acequire(\"./range\").Range;\nvar Document = acequire(\"./document\").Document;\nvar BackgroundTokenizer = acequire(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = acequire(\"./search_highlight\").SearchHighlight;\n\nvar EditSession = function(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function() {\n return this.join(\"\\n\");\n };\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(text);\n\n this.$bidiHandler = new BidiHandler(this);\n this.setDocument(text);\n this.selection = new Selection(this);\n\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n};\n\n\nEditSession.$uid = 0;\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setDocument = function(doc) {\n if (this.doc)\n this.doc.removeListener(\"change\", this.$onChange);\n\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n\n if (this.bgTokenizer)\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.resetCaches();\n };\n this.getDocument = function() {\n return this.doc;\n };\n this.$resetRowCache = function(docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n\n this.$getRowCacheIndex = function(cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n\n return low -1;\n };\n\n this.resetCaches = function() {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer)\n this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function(e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function(delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager && !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\n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n this.setValue = function(text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n\n this.$resetRowCache(0);\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n this.getValue =\n this.toString = function() {\n return this.doc.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.getState = function(row) {\n return this.bgTokenizer.getState(row);\n };\n this.getTokens = function(row) {\n return this.bgTokenizer.getTokens(row);\n };\n this.getTokenAt = function(row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n } else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n this.setUndoManager = function(undoManager) {\n this.$undoManager = undoManager;\n this.$deltas = [];\n this.$deltasDoc = [];\n this.$deltasFold = [];\n\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n\n if (undoManager) {\n var self = this;\n\n this.$syncInformUndoManager = function() {\n self.$informUndoManager.cancel();\n\n if (self.$deltasFold.length) {\n self.$deltas.push({\n group: \"fold\",\n deltas: self.$deltasFold\n });\n self.$deltasFold = [];\n }\n\n if (self.$deltasDoc.length) {\n self.$deltas.push({\n group: \"doc\",\n deltas: self.$deltasDoc\n });\n self.$deltasDoc = [];\n }\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)\n this.$syncInformUndoManager();\n };\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\n this.$overwrite = false;\n this.setOverwrite = function(overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n this.getOverwrite = function() {\n return this.$overwrite;\n };\n this.toggleOverwrite = function() {\n this.setOverwrite(!this.$overwrite);\n };\n this.addGutterDecoration = function(row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n this.removeGutterDecoration = function(row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n this.getBreakpoints = function() {\n return this.$breakpoints;\n };\n this.setBreakpoints = function(rows) {\n this.$breakpoints = [];\n for (var i=0; i 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column-1, column+1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n\n var start = column;\n if (start > 0) {\n do {\n start--;\n }\n while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n this.getAWordRange = function(row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n this.setNewLineMode = function(newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n this.getNewLineMode = function() {\n return this.doc.getNewLineMode();\n };\n this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n this.getUseWorker = function() { return this.$useWorker; };\n this.onReloadTokenizer = function(e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = {};\n this.$mode = null;\n this.$modeId = null;\n this.setMode = function(mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n } else {\n path = mode || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function(m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n } else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n\n this.$onChangeMode = function(mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode) \n return;\n\n this.$mode = mode;\n\n this.$stopWorker();\n\n if (this.$useWorker)\n this.$startWorker();\n\n var tokenizer = mode.getTokenizer();\n\n if(tokenizer.addEventListener !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.addEventListener(\"update\", onReloadTokenizer);\n }\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\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n \n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\");\n }\n };\n\n this.$stopWorker = function() {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function() {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n this.getMode = function() {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n this.setScrollTop = function(scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n this.getScrollTop = function() {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n this.setScrollLeft = function(scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n this.getScrollLeft = function() {\n return this.$scrollLeft;\n };\n this.getScreenWidth = function() {\n this.$computeWidth();\n if (this.lineWidgets) \n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n \n this.getLineWidgetMaxWidth = function() {\n if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function(w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n\n this.$computeWidth = function(force) {\n if (this.$modified || force) {\n this.$modified = false;\n\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n this.getLine = function(row) {\n return this.doc.getLine(row);\n };\n this.getLines = function(firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n this.getLength = function() {\n return this.doc.getLength();\n };\n this.getTextRange = function(range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n this.insert = function(position, text) {\n return this.doc.insert(position, text);\n };\n this.remove = function(range) {\n return this.doc.remove(range);\n };\n this.removeFullLines = function(firstRow, lastRow){\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n this.undoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\n this.$fromUndo = true;\n 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 =\n 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 &&\n this.$undoSelect &&\n !dontSelect &&\n this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n this.redoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\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 =\n this.$getUndoSelection(delta.deltas, false, lastUndoRange);\n }\n }\n this.$fromUndo = false;\n lastUndoRange &&\n this.$undoSelect &&\n !dontSelect &&\n this.selection.setSelectionRange(lastUndoRange);\n return lastUndoRange;\n };\n this.setUndoSelect = function(enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\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\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\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\n return range;\n };\n this.replace = function(range, text) {\n return this.doc.replace(range, text);\n };\n this.moveText = function(fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function(x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n\n return toRange;\n };\n this.indentRows = function(startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row=startRow; row<=endRow; row++)\n this.doc.insertInLine({row: row, column: 0}, indentString);\n };\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n\n this.$moveLines = function(firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0) return 0;\n var diff = row-firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength()-1) return 0;\n var diff = row-lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function(x){\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n \n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow+diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n this.moveLinesUp = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n this.moveLinesDown = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n this.duplicateLines = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n\n this.$clipRowToDocument = function(row) {\n return Math.max(0, Math.min(row, this.doc.getLength()-1));\n };\n\n this.$clipColumnToRow = function(row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n\n this.$clipPositionToDocument = function(row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\n } else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len-1).length;\n } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function(range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(\n range.start.row,\n range.start.column\n );\n }\n\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n } else {\n range.end.column = this.$clipColumnToRow(\n range.end.row,\n range.end.column\n );\n }\n return range;\n };\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min : null,\n max : null\n };\n this.setUseWrapMode = function(useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n\n this._signal(\"changeWrapMode\");\n }\n };\n this.getUseWrapMode = function() {\n return this.$useWrapMode;\n };\n this.setWrapLimitRange = function(min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n this.adjustWrapLimit = function(desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = {min: $printMargin, max: $printMargin};\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n\n this.$constrainWrapLimit = function(wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n\n return wrapLimit;\n };\n this.getWrapLimit = function() {\n return this.$wrapLimit;\n };\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n this.getWrapLimitRange = function() {\n return {\n min : this.$wrapLimitRange.min,\n max : this.$wrapLimitRange.max\n };\n };\n\n this.$updateInternalDataOnChange = function(delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n \n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n\n lastRow = firstRow;\n } else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n } else\n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n } else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$updateWrapData = function(firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row ++;\n } else {\n tokens = [];\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(\n placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(\n lines[row].substring(lastColumn, column),\n tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this),\n foldLine.end.row,\n lines[foldLine.end.row].length + 1\n );\n\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n\n this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n\n var isCode = this.$wrapAsCode;\n\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var displayed = tokens.slice(lastSplit, screenPos);\n var len = displayed.length;\n displayed.join(\"\")\n .replace(/12/g, function() {\n len -= 1;\n })\n .replace(/2/g, function() {\n len -= 1;\n });\n\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split --;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split --;\n }\n } else {\n while (split > minSplit && tokens[split] < SPACE) {\n split --;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n this.$getDisplayTokens = function(str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n } else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n this.getRowLength = function(row) {\n if (this.lineWidgets)\n var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n this.getRowLineCount = function(row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.getRowWrapIndent = function(screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n } else {\n return 0;\n }\n };\n this.getScreenLastRowColumn = function(screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n this.getDocumentLastRowColumn = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n this.getRowSplitData = function(row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n this.getScreenTabSize = function(screenColumn) {\n return this.$tabSize - screenColumn % this.$tabSize;\n };\n\n\n this.screenToDocumentRow = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n\n this.screenToDocumentColumn = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n this.screenToDocumentPosition = function(screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return {row: 0, column: 0};\n\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n } else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row+1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n } else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if(splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n\n return {row: docRow, column: docColumn};\n };\n this.documentToScreenPosition = function(docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(docRow, docColumn);\n\n docRow = pos.row;\n docColumn = pos.column;\n\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n\n var rowEnd, row = 0;\n\n\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ?foldLine.start.row :Infinity;\n\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ?foldLine.start.row :Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n } else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow ++;\n screenRowOffset++;\n }\n textLine = textLine.substring(\n wrapRow[screenRowOffset - 1] || 0, textLine.length\n );\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n this.documentToScreenColumn = function(row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n this.documentToScreenRow = function(docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n this.getScreenLength = function() {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n } else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row :Infinity;\n\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row ++;\n if (row > foldStart) {\n row = fold.end.row+1;\n fold = this.$foldData[i++];\n foldStart = fold ?fold.start.row :Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n\n return screenRows;\n };\n this.$setFontMetrics = function(fm) {\n if (!this.$enableVarChar) return;\n this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n \n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n \n return [screenColumn, column];\n };\n };\n \n this.destroy = function() {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n this.$stopWorker();\n };\n\n this.isFullWidth = isFullWidth;\n function isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n }\n\n}).call(EditSession.prototype);\n\nacequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nacequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function(value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n } else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function() {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n }, \n wrapMethod: {\n set: function(val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$modified = true;\n this.$resetRowCache(0);\n this.$updateWrapData(0, this.getLength() - 1);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: { initialValue: true },\n firstLineNumber: {\n set: function() {this._signal(\"changeBreakpoint\");},\n initialValue: 1\n },\n useWorker: {\n set: function(useWorker) {\n this.$useWorker = useWorker;\n\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {initialValue: true},\n tabSize: {\n set: function(tabSize) {\n if (isNaN(tabSize) || this.$tabSize === tabSize) return;\n\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: {initialValue: false},\n overwrite: {\n set: function(val) {this._signal(\"changeOverwrite\");},\n initialValue: false\n },\n newLineMode: {\n set: function(val) {this.doc.setNewLineMode(val);},\n get: function() {return this.doc.getNewLineMode();},\n handlesSet: true\n },\n mode: {\n set: function(val) { this.setMode(val); },\n get: function() { return this.$modeId; }\n }\n});\n\nexports.EditSession = EditSession;\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"./lib/lang\");\nvar oop = acequire(\"./lib/oop\");\nvar Range = acequire(\"./range\").Range;\n\nvar Search = function() {\n this.$options = {};\n};\n\n(function() {\n this.set = function(options) {\n oop.mixin(this.$options, options);\n return this;\n };\n this.getOptions = function() {\n return lang.copyObject(this.$options);\n };\n this.setOptions = function(options) {\n this.$options = options;\n };\n this.find = function(session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n\n var firstRange = null;\n iterator.forEach(function(sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(options.start)\n ) {\n firstRange = null;\n return false;\n }\n\n return true;\n });\n\n return firstRange;\n };\n this.findAll = function(session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n \n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n \n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex\n ) {\n continue;\n }\n ranges.push(prevRange = new Range(\n row, startIndex, row + len - 1, endIndex\n ));\n if (len > 2)\n row = row + len - 2;\n }\n } else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n i++;\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n j--;\n \n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n\n return ranges;\n };\n this.replace = function(input, replacement) {\n var options = this.$options;\n\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n\n if (!re)\n return;\n\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n \n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--; ) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n \n return replacement;\n };\n\n this.$assembleRegExp = function(options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n\n var needle = options.needle;\n\n if (!options.needle)\n return options.re = false;\n\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch(e) {\n re = false;\n }\n return options.re = re;\n };\n\n this.$assembleMultilineRegExp = function(needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++) try {\n re.push(new RegExp(parts[i], modifier));\n } catch(e) {\n return false;\n }\n return re;\n };\n\n this.$matchIterator = function(session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n \n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n\n if (backwards) {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n \n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function(row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0) return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1) return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset) return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function(row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length) break;\n re.lastIndex = last += 1;\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function(row, startIndex, callback) {\n var line = session.getLine(row);\n var 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))\n return true;\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length) return false;\n }\n }\n };\n }\n return {forEach: forEach};\n };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n return wordBoundary(needle[0]) + needle\n + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar keyUtil = acequire(\"../lib/keys\");\nvar useragent = acequire(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n \n\n this.addCommand = function(command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n\n this.commands[command.name] = command;\n\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n\n this.removeCommand = function(command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n } else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n\n this.bindKey = function(key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({exec: command, bindKey: key, name: command.name || key});\n \n key.split(\"|\").forEach(function(keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function(keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n \n function getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n }\n this._addCommandToBinding = function(keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n\n this.addCommands = function(commands) {\n commands && Object.keys(commands).forEach(function(name) {\n var command = commands[name];\n if (!command)\n return;\n \n if (typeof command === \"string\")\n return this.bindKey(command, name);\n\n if (typeof command === \"function\")\n command = { exec: command };\n\n if (typeof command !== \"object\")\n return;\n\n if (!command.name)\n command.name = name;\n\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function(commands) {\n Object.keys(commands).forEach(function(name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function(keyList) {\n Object.keys(keyList).forEach(function(key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function(command) {\n this.bindKey(command.bindKey, command);\n };\n this.parseKeys = function(keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x;});\n var key = parts.pop();\n\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return {key: key, hashId: -1};\n else if (parts.length == 1 && parts[0] == \"shift\")\n return {key: key.toUpperCase(), hashId: -1};\n\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return {key: key, hashId: hashId};\n };\n\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n if (keyCode < 0) return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n \n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {command: \"null\"};\n }\n }\n \n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return {command: command};\n };\n \n this.getStatusText = function(editor, data) {\n return data.$keyChain || \"\";\n };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar MultiHashHandler = acequire(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar CommandManager = function(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function(e) {\n return e.command.exec(e.editor, e.args || {});\n });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.exec = function(command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--; ) {\n if (this.exec(command[i], editor, args)) return true;\n }\n return false;\n }\n\n if (typeof command === \"string\")\n command = this.commands[command];\n\n if (!command)\n return false;\n\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n\n if (command.isAvailable && !command.isAvailable(editor))\n return false;\n\n var e = {editor: editor, command: command, args: args};\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function(editor) {\n if (this.$inReplay)\n return;\n\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.removeEventListener(\"exec\", this.$addCommandToMacro);\n\n if (!this.macro.length)\n this.macro = this.oldMacro;\n\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function(e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function(editor) {\n if (this.$inReplay || !this.macro)\n return;\n\n if (this.recording)\n return this.toggleRecording(editor);\n\n try {\n this.$inReplay = true;\n this.macro.forEach(function(x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n\n this.trimMacro = function(m) {\n return m.map(function(x){\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n\n}).call(CommandManager.prototype);\n\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar lang = acequire(\"../lib/lang\");\nvar config = acequire(\"../config\");\nvar Range = acequire(\"../range\").Range;\n\nfunction bindKey(win, mac) {\n return {win: win, mac: mac};\n}\nexports.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) { editor.selectAll(); },\n readOnly: true\n}, {\n name: \"centerselection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function(editor) { editor.centerSelection(); },\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) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function(editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleFoldWidget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"toggleParentFoldWidget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function(editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"foldall\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function(editor) { editor.session.foldAll(); },\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) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findnext\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function(editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"findprevious\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function(editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n}, {\n name: \"selectOrFindNext\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function(editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext(); \n },\n readOnly: true\n}, {\n name: \"selectOrFindPrevious\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function(editor) { \n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n}, {\n name: \"find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor);});\n },\n readOnly: true\n}, {\n name: \"overwrite\",\n bindKey: \"Insert\",\n exec: function(editor) { editor.toggleOverwrite(); },\n readOnly: true\n}, {\n name: \"selecttostart\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function(editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotostart\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function(editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectup\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function(editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golineup\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function(editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttoend\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function(editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"gotoend\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function(editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n}, {\n name: \"selectdown\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function(editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"golinedown\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function(editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordleft\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function(editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordleft\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function(editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolinestart\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolinestart\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function(editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectleft\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function(editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoleft\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function(editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectwordright\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotowordright\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function(editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selecttolineend\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotolineend\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function(editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectright\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function(editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"gotoright\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function(editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectpagedown\",\n bindKey: \"Shift-PageDown\",\n exec: function(editor) { editor.selectPageDown(); },\n readOnly: true\n}, {\n name: \"pagedown\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function(editor) { editor.scrollPageDown(); },\n readOnly: true\n}, {\n name: \"gotopagedown\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function(editor) { editor.gotoPageDown(); },\n readOnly: true\n}, {\n name: \"selectpageup\",\n bindKey: \"Shift-PageUp\",\n exec: function(editor) { editor.selectPageUp(); },\n readOnly: true\n}, {\n name: \"pageup\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function(editor) { editor.scrollPageUp(); },\n readOnly: true\n}, {\n name: \"gotopageup\",\n bindKey: \"PageUp\",\n exec: function(editor) { editor.gotoPageUp(); },\n readOnly: true\n}, {\n name: \"scrollup\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"scrolldown\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n}, {\n name: \"selectlinestart\",\n bindKey: \"Shift-Home\",\n exec: function(editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectlineend\",\n bindKey: \"Shift-End\",\n exec: function(editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"togglerecording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function(editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n}, {\n name: \"replaymacro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function(editor) { editor.commands.replay(editor); },\n readOnly: true\n}, {\n name: \"jumptomatching\",\n bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\n exec: function(editor) { editor.jumpToMatching(); },\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) { editor.jumpToMatching(true); },\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) { editor.jumpToMatching(true, true); },\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 },\n readOnly: true\n},\n{\n name: \"cut\",\n exec: function(editor) {\n var range = editor.getSelectionRange();\n editor._emit(\"cut\", range);\n\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) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"duplicateSelection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function(editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"sortlines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function(editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n}, {\n name: \"togglecomment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function(editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"toggleBlockComment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function(editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"modifyNumberUp\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function(editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"modifyNumberDown\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function(editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n}, {\n name: \"replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function(editor) {\n config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true);});\n }\n}, {\n name: \"undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function(editor) { editor.undo(); }\n}, {\n name: \"redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function(editor) { editor.redo(); }\n}, {\n name: \"copylinesup\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function(editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesup\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function(editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"copylinesdown\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function(editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"movelinesdown\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function(editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"del\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function(editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"backspace\",\n bindKey: bindKey(\n \"Shift-Backspace|Backspace\",\n \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n ),\n exec: function(editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"cut_or_delete\",\n 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) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolineend\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function(editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removetolinestarthard\",\n 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) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"removewordright\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function(editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function(editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockoutdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function(editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"blockindent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function(editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n}, {\n name: \"insertstring\",\n exec: function(editor, str) { editor.insert(str); },\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) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"transposeletters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function(editor) { editor.transposeLetters(); },\n multiSelectAction: function(editor) {editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n}, {\n name: \"touppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function(editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"tolowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function(editor) { editor.toLowerCase(); },\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\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\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n } else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n}, {\n name: \"invertSelection\",\n bindKey: bindKey(null, null),\n exec: function(editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n } else {\n newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\n for(var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n}];\n\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(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./lib/fixoldbrowsers\");\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar lang = acequire(\"./lib/lang\");\nvar useragent = acequire(\"./lib/useragent\");\nvar TextInput = acequire(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = acequire(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = acequire(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = acequire(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = acequire(\"./edit_session\").EditSession;\nvar Search = acequire(\"./search\").Search;\nvar Range = acequire(\"./range\").Range;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = acequire(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = acequire(\"./commands/default_commands\").commands;\nvar config = acequire(\"./config\");\nvar TokenIterator = acequire(\"./token_iterator\").TokenIterator;\nvar Editor = function(renderer, session) {\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n\n this.keyBinding = new KeyBinding(this);\n\n this.$blockScrolling = 0;\n this.$search = new Search().set({\n wrap: true\n });\n\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n\n this.$initOperationListeners();\n \n this._$emitInputEvent = lang.delayedCall(function() {\n this._signal(\"input\", {});\n if (this.session && this.session.bgTokenizer)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n \n this.on(\"change\", function(_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n\n this.setSession(session || new EditSession(\"\"));\n config.resetOptions(this);\n config._signal(\"editor\", this);\n};\n\nEditor.$uid = 0;\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function() {\n function last(a) {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\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\n\n this.on(\"change\", function() {\n this.curOp || this.startOperation();\n this.curOp.docChanged = true;\n }.bind(this), true);\n\n this.on(\"changeSelection\", function() {\n this.curOp || this.startOperation();\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n\n this.curOp = null;\n this.prevOp = {};\n this.startOperation = function(commadEvent) {\n if (this.curOp) {\n if (!commadEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commadEvent) {\n this.previousCommand = null;\n commadEvent = {};\n }\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)\n this.$blockScrolling++;\n };\n\n this.endOperation = function(e) {\n if (this.curOp) {\n if (e && e.returnValue === false)\n return this.curOp = null;\n this._signal(\"beforeEndOperation\");\n var command = this.curOp.command;\n if (command.name && this.$blockScrolling > 0)\n 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\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\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)\n return;\n\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (\n this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000\n ) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n this.setKeyboardHandler = function(keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function(module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n this.getKeyboardHandler = function() {\n return this.keyBinding.getKeyboardHandler();\n };\n this.setSession = function(session) {\n if (this.session == session)\n return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n \n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n \n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n \n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n \n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n \n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n \n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n \n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n \n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n \n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n \n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n \n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n \n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n \n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n \n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n \n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n \n this.onChangeMode();\n \n this.$blockScrolling += 1;\n this.onCursorChange();\n this.$blockScrolling -= 1;\n \n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n \n this.curOp = null;\n \n oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n session && session._signal(\"changeEditor\", {editor: this});\n\n if (session && session.bgTokenizer)\n session.bgTokenizer.scheduleStart();\n };\n this.getSession = function() {\n return this.session;\n };\n this.setValue = function(val, cursorPos) {\n this.session.doc.setValue(val);\n\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n\n return val;\n };\n this.getValue = function() {\n return this.session.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.resize = function(force) {\n this.renderer.onResize(force);\n };\n this.setTheme = function(theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n this.getTheme = function() {\n return this.renderer.getTheme();\n };\n this.setStyle = function(style) {\n this.renderer.setStyle(style);\n };\n this.unsetStyle = function(style) {\n this.renderer.unsetStyle(style);\n };\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container, \"fontSize\");\n };\n this.setFontSize = function(size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$highlightBrackets = function() {\n if (this.session.$bracketHighlight) {\n this.session.removeMarker(this.session.$bracketHighlight);\n this.session.$bracketHighlight = null;\n }\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)\n session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n this.$highlightTags = function() {\n if (this.$highlightTagPending)\n return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function() {\n self.$highlightTagPending = false;\n \n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n \n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n \n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n if (token.type.indexOf(\"tag-open\") != -1) {\n token = iterator.stepForward();\n if (!token)\n return;\n }\n \n var tag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n \n if (prevToken.value == '<'){\n do {\n prevToken = token;\n token = iterator.stepForward();\n \n if (token && 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 \n if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === ' 1))\n highlight = false;\n }\n\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n } else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n } else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n\n this.onSelectionChange = function(e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function() {\n var session = this.session;\n\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n\n var 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),\n Math.min(endOuter, lineCols));\n if ((startOuter >= 0 && /^[\\w\\d]/.test(needle)) ||\n (endOuter <= lineCols && /[\\w\\d]$/.test(needle)))\n return;\n\n needle = line.substring(selection.start.column, selection.end.column);\n if (!/^[\\w\\d]+$/.test(needle))\n return;\n\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n\n return re;\n };\n\n\n this.onChangeFrontMarker = function() {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function() {\n this.renderer.updateBackMarkers();\n };\n\n\n this.onChangeBreakpoint = function() {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function() {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n\n this.onChangeMode = function(e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n\n\n this.onChangeWrapLimit = function() {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function() {\n this.renderer.onResize(true);\n };\n\n\n this.onChangeFold = function() {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n this.getSelectedText = function() {\n return this.session.getTextRange(this.getSelectionRange());\n };\n this.getCopyText = function() {\n var text = this.getSelectedText();\n 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 = {text: text, event: event};\n this.commands.exec(\"paste\", this, e);\n };\n \n this.$handlePaste = function(e) {\n if (typeof e == \"string\") \n e = {text: e};\n this._signal(\"paste\", e);\n var text = e.text;\n 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 \n if (lines.length > ranges.length || lines.length < 2 || !lines[1])\n return this.commands.exec(\"insertstring\", this, text);\n \n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n this.session.remove(range);\n \n this.session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function(command, args) {\n return this.commands.exec(command, this, args);\n };\n this.insert = function(text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n this.session.mergeUndoDeltas = false;\n this.$mergeNextCommand = false;\n }\n text = transform.text;\n\n }\n }\n \n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n var end = session.insert(cursor, text);\n\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(\n new Range(cursor.row, start + transform.selection[0],\n cursor.row, start + transform.selection[1]));\n } else { // Transform relative to the current row.\n this.selection.setSelectionRange(\n new Range(cursor.row + transform.selection[0],\n transform.selection[1],\n cursor.row + transform.selection[2],\n transform.selection[3]));\n }\n }\n\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n\n session.insert({row: cursor.row+1, column: 0}, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n };\n\n this.onTextInput = function(text) {\n this.keyBinding.onTextInput(text);\n };\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\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n this.setHighlightSelectedWord = function(shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n this.getHighlightSelectedWord = function() {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function(shouldAnimate){\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function(){\n return this.renderer.getAnimatedScroll();\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function() {\n return this.renderer.getDisplayIndentGuides();\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.renderer.getShowPrintMargin();\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.renderer.getPrintMarginColumn();\n };\n this.setReadOnly = function(readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n this.getReadOnly = function() {\n return this.getOption(\"readOnly\");\n };\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n this.setShowFoldWidgets = function(show) {\n this.setOption(\"showFoldWidgets\", show);\n\n };\n this.getShowFoldWidgets = function() {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function() {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.remove = function(dir) {\n if (this.selection.isEmpty()){\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.removeWordRight = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeWordLeft = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineStart = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineEnd = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n this.splitLine = function() {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n this.transposeLetters = function() {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column-1);\n range = new Range(cursor.row, column-1, cursor.row, column+1);\n }\n else {\n swap = line.charAt(column-1) + line.charAt(column-2);\n range = new Range(cursor.row, column-2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n this.toLowerCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.toUpperCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.indent = function() {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n } else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n \n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n } else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n this.blockIndent = function() {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n this.blockOutdent = function() {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n this.sortLines = function() {\n var rows = this.$getSelectedRows();\n var session = this.session;\n\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n\n lines.sort(function(a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\n\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i-rows.first]);\n }\n };\n this.toggleCommentLines = function() {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n\n this.toggleBlockComment = function() {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n this.getNumberAt = function(row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if(m.index <= column && m.index+m[0].length >= column){\n var number = {\n value: m[0],\n start: m.index,\n end: m.index+m[0].length\n };\n return number;\n }\n }\n return null;\n };\n this.modifyNumber = function(amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column-1, row, column);\n\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n\n if(fp !== nr.end && column < fp){\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\n\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\n\n }\n }\n };\n this.removeLines = function() {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.duplicateSelection = function() {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n } else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n\n sel.setSelectionRange(range, reverse);\n }\n };\n this.moveLinesDown = function() {\n this.$moveLines(1, false);\n };\n this.moveLinesUp = function() {\n this.$moveLines(-1, false);\n };\n this.moveText = function(range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n this.copyLinesUp = function() {\n this.$moveLines(-1, true);\n };\n this.copyLinesDown = function() {\n this.$moveLines(1, true);\n };\n this.$moveLines = function(dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n \n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1) rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n \n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n this.$getSelectedRows = function(range) {\n range = (range || this.getSelectionRange()).collapseRows();\n\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function(text) {\n this.renderer.showComposition(this.getCursorPosition());\n };\n\n this.onCompositionUpdate = function(text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function() {\n this.renderer.hideComposition();\n };\n this.getFirstVisibleRow = function() {\n return this.renderer.getFirstVisibleRow();\n };\n this.getLastVisibleRow = function() {\n return this.renderer.getLastVisibleRow();\n };\n this.isRowVisible = function(row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n this.isRowFullyVisible = function(row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n this.$getVisibleRowCount = function() {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$moveByPage = function(dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n\n 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\n var scrollTop = renderer.scrollTop;\n\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n\n renderer.animateScrolling(scrollTop);\n };\n this.selectPageDown = function() {\n this.$moveByPage(1, true);\n };\n this.selectPageUp = function() {\n this.$moveByPage(-1, true);\n };\n this.gotoPageDown = function() {\n this.$moveByPage(1, false);\n };\n this.gotoPageUp = function() {\n this.$moveByPage(-1, false);\n };\n this.scrollPageDown = function() {\n this.$moveByPage(1);\n };\n this.scrollPageUp = function() {\n this.$moveByPage(-1);\n };\n this.scrollToRow = function(row) {\n this.renderer.scrollToRow(row);\n };\n this.scrollToLine = function(line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n this.centerSelection = function() {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n this.getCursorPosition = function() {\n return this.selection.getCursor();\n };\n this.getCursorPositionScreen = function() {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n this.getSelectionRange = function() {\n return this.selection.getRange();\n };\n this.selectAll = function() {\n this.$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\n if (!token) return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n \n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token && token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n \n if (prevToken.value === '<') {\n depth[token.value]++;\n }\n else if (prevToken.value === '= 0; --i) {\n if(this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n this.$blockScrolling -= 1;\n\n return replaced;\n };\n\n this.$tryReplace = function(range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n } else {\n return null;\n }\n };\n this.getLastSearchOptions = function() {\n return this.$search.getOptions();\n };\n this.find = function(needle, options, animate) {\n if (!options)\n options = {};\n\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({needle: needle});\n }\n\n this.$search.set(options);\n if (!options.start)\n this.$search.set({start: range});\n\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n this.findNext = function(options, animate) {\n this.find({skipCurrent: true, backwards: false}, options, animate);\n };\n this.findPrevious = function(options, animate) {\n this.find(options, {skipCurrent: true, backwards: true}, animate);\n };\n\n this.revealRange = function(range, animate) {\n this.$blockScrolling += 1;\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n this.$blockScrolling -= 1;\n\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n this.undo = function() {\n this.$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)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function() {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function() {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())\n ) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n } else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n } else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function(enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n\n\n this.$resetCursorStyle = function() {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n\n}).call(Editor.prototype);\n\n\n\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function(style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", {data: style});\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function() {this.$updateHighlightActiveLine();},\n initialValue: true\n },\n highlightSelectedWord: {\n set: function(shouldHighlight) {this.$onSelectionChange();},\n initialValue: true\n },\n readOnly: {\n set: function(readOnly) {\n this.$resetCursorStyle(); \n },\n initialValue: false\n },\n cursorStyle: {\n set: function(val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {initialValue: true},\n wrapBehavioursEnabled: {initialValue: true},\n autoScrollEditorIntoView: {\n set: function(val) {this.setAutoScrollEditorIntoView(val);}\n },\n keyboardHandler: {\n set: function(val) { this.setKeyboardHandler(val); },\n get: function() { return this.keybindingId; },\n handlesSet: true\n },\n\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\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n\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\nexports.Editor = Editor;\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\nvar UndoManager = function() {\n this.reset();\n};\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\n return undoSelectionRange;\n };\n this.redo = function(dontSelect) {\n var deltaSets = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSets) {\n redoSelectionRange =\n 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 \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 \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 \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 = { group: deltaSet_old.group, 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 \n deltaSets_new[i] = deltaSet_new;\n }\n return deltaSets_new;\n }\n \n}).call(UndoManager.prototype);\n\nexports.UndoManager = UndoManager;\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar oop = acequire(\"../lib/oop\");\nvar lang = acequire(\"../lib/lang\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar 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 \n this.gutterWidth = 0;\n\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n\n this.$cells = [];\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.setSession = function(session) {\n if (this.session)\n this.session.removeEventListener(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n\n this.addGutterDecoration = function(row, className){\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n\n this.removeGutterDecoration = function(row, className){\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\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)\n rowInfo = this.$annotations[row] = {text: []};\n \n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n\n if (rowInfo.text.indexOf(annoText) === -1)\n rowInfo.text.push(annoText);\n\n var type = annotation.type;\n if (type == \"error\")\n rowInfo.className = \" ace_error\";\n else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (type == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\n }\n };\n\n this.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n } 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\n this.update = function(config) {\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // 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 \n var gutterRenderer = session.gutterRenderer || this.$renderer;\n\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\n cell = this.$cells[++index];\n if (!cell) {\n cell = {element: null, textNode: null, foldWidget: null};\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\n var className = \"ace_gutter-cell \";\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row])\n className += this.$annotations[row].className;\n if (cell.element.className != className)\n cell.element.className = className;\n\n var height = session.getRowLength(row) * config.lineHeight + \"px\";\n if (height != cell.element.style.height)\n cell.element.style.height = height;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n 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)\n className += \" ace_closed\";\n else\n className += \" ace_open\";\n if (cell.foldWidget.className != className)\n cell.foldWidget.className = className;\n\n var height = config.lineHeight + \"px\";\n if (cell.foldWidget.style.height != height)\n cell.foldWidget.style.height = height;\n } else {\n if (cell.foldWidget) {\n cell.element.removeChild(cell.foldWidget);\n cell.foldWidget = null;\n }\n }\n \n var text = lastLineNumber = gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber;\n if (text !== cell.textNode.data)\n cell.textNode.data = text;\n\n row++;\n }\n\n this.element.style.height = config.minHeight + \"px\";\n\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineNumber = session.getLength() + firstLineNumber;\n\n var gutterWidth = gutterRenderer \n ? gutterRenderer.getWidth(session, lastLineNumber, config)\n : lastLineNumber.toString().length * config.characterWidth;\n \n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._emit(\"changeGutterWidth\", gutterWidth);\n }\n };\n\n this.$fixedWidth = false;\n \n this.$showLineNumbers = true;\n this.$renderer = \"\";\n this.setShowLineNumbers = function(show) {\n this.$renderer = !show && {\n getWidth: function() {return \"\";},\n getText: function() {return \"\";}\n };\n };\n \n this.getShowLineNumbers = function() {\n return this.$showLineNumbers;\n };\n \n this.$showFoldWidgets = true;\n this.setShowFoldWidgets = function(show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n \n this.getShowFoldWidgets = function() {\n return this.$showFoldWidgets;\n };\n\n this.$computePadding = function() {\n if (!this.element.firstChild)\n return {left: 0, right: 0};\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\n this.$padding.right = parseInt(style.paddingRight) || 0;\n return this.$padding;\n };\n\n this.getRegion = function(point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n\n}).call(Gutter.prototype);\n\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\nvar dom = acequire(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n};\n\n(function() {\n\n this.$padding = 0;\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n this.setSession = function(session) {\n this.session = session;\n };\n \n this.setMarkers = function(markers) {\n this.markers = markers;\n };\n\n this.update = function(config) {\n if (!config) return;\n\n this.config = config;\n\n\n var html = [];\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + (this.session.$bidiHandler.isBidiRow(range.start.row)\n ? this.session.$bidiHandler.getPosLeft(range.start.column)\n : range.start.column * config.characterWidth);\n marker.renderer(html, range, left, top, config);\n } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n } else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n 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\n this.$getTop = function(row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0; \n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var 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\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end);\n\n if (this.session.$bidiHandler.isBidiRow(row)) {\n this.drawBidiSingleLineMarker(stringBuilder, lineRange, clazzModified,\n layerConfig, row == end ? 0 : 1, extraStyle);\n } else {\n this.drawSingleLineMarker(stringBuilder, lineRange, clazzModified,\n 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 );\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 );\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n \n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n stringBuilder.push(\n \"
\"\n );\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\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n\n stringBuilder.push(\n \"
\"\n );\n };\n this.drawBidiSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n\n selections.forEach(function(selection) {\n stringBuilder.push(\n \"
\"\n );\n });\n };\n\n this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n\n stringBuilder.push(\n \"
\"\n );\n };\n \n this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n\n stringBuilder.push(\n \"
\"\n );\n };\n\n}).call(Marker.prototype);\n\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar useragent = acequire(\"../lib/useragent\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar 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\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n\n this.$updateEolChar = function() {\n var EOL_CHAR = this.session.doc.getNewLineCharacter() == \"\\n\"\n ? this.EOL_CHAR_LF\n : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.element.style.padding = \"0 \" + padding + \"px\";\n };\n\n this.getLineHeight = function() {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n\n this.getCharacterWidth = function() {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n \n this.$setFontMetrics = function(measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n\n this.checkForSizeChanges = function() {\n this.$fontMetrics.checkForSizeChanges();\n };\n this.$pollSizeChanges = function() {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n this.setSession = function(session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n\n this.showInvisibles = false;\n this.setShowInvisibles = function(showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n\n this.showInvisibles = showInvisibles;\n this.$computeTabString();\n return true;\n };\n\n this.displayIndentGuides = true;\n this.setDisplayIndentGuides = function(display) {\n if (this.displayIndentGuides == display)\n return false;\n\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n\n this.$tabStrings = [];\n this.onChangeTabSize =\n this.$computeTabString = function() {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showInvisibles) {\n tabStr.push(\"\"\n + lang.stringRepeat(this.TAB_CHAR, i)\n + \"\");\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\n this.$tabStrings[\" \"] = \"\" + spaceContent + \"\";\n this.$tabStrings[\"\\t\"] = \"\" + tabContent + \"\";\n }\n };\n\n this.updateLines = function(config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n this.scrollLines(config);\n }\n this.config = config;\n\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n } else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx ++;\n }\n\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > last)\n break;\n\n var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n var html = [];\n this.$renderLine(\n html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false\n );\n lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n lineElement.innerHTML = html.join(\"\");\n }\n row++;\n }\n };\n\n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n\n var el = this.element;\n if (oldConfig.firstRow < config.firstRow)\n for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n el.removeChild(el.firstChild);\n\n if (oldConfig.lastRow > config.lastRow)\n for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\n el.removeChild(el.lastChild);\n\n if (config.firstRow < oldConfig.firstRow) {\n var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);\n if (el.firstChild)\n el.insertBefore(fragment, el.firstChild);\n else\n el.appendChild(fragment);\n }\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\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\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n\n var container = dom.createElement(\"div\");\n\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\n } else {\n while(container.firstChild)\n fragment.appendChild(container.firstChild);\n }\n\n row++;\n }\n return fragment;\n };\n\n this.update = function(config) {\n this.config = config;\n\n var html = [];\n var firstRow = config.firstRow, lastRow = config.lastRow;\n\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row+1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row :Infinity;\n }\n if (row > lastRow)\n break;\n\n if (this.$useLineGroups())\n html.push(\"
\");\n\n this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n\n if (this.$useLineGroups())\n html.push(\"
\"); // end the line group\n\n row++;\n }\n this.element.innerHTML = html.join(\"\");\n };\n\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\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\n ? \"\" + lang.stringRepeat(self.SPACE_CHAR, c.length) + \"\"\n : 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\n var output = value.replace(replaceReg, replaceFunc);\n\n if (!this.$textToken[token.type]) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var style = \"\";\n if (token.type == \"fold\")\n style = \" style='width:\" + (token.value.length * this.config.characterWidth) + \"px;' \";\n stringBuilder.push(\"\", output, \"\");\n }\n else {\n stringBuilder.push(output);\n }\n return screenColumn + value.length;\n };\n\n this.renderIndentGuide = function(stringBuilder, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n 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\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\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)\n continue;\n chars -= value.length;\n }\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(\n stringBuilder, screenColumn,\n token, value.substring(0, splitChars - chars)\n );\n value = value.substring(splitChars - chars);\n chars = splitChars;\n\n if (!onlyContents) {\n stringBuilder.push(\"\",\n \"
\"\n );\n }\n\n stringBuilder.push(lang.stringRepeat(\"\\xa0\", splits.indent));\n\n split ++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(\n stringBuilder, screenColumn, token, value\n );\n }\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)\n value = this.renderIndentGuide(stringBuilder, value);\n if (value)\n 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)\n foldLine = this.session.getFoldLine(row);\n\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n\n\n if (!onlyContents) {\n stringBuilder.push(\n \"
\"\n );\n }\n\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length)\n this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);\n else\n this.$renderSimpleLine(stringBuilder, tokens);\n }\n\n if (this.showInvisibles) {\n if (foldLine)\n row = foldLine.end.row;\n\n stringBuilder.push(\n \"\",\n row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,\n \"\"\n );\n }\n if (!onlyContents)\n stringBuilder.push(\"
\");\n };\n\n this.$getFoldLineTokens = function(row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n\n col = from + value.length;\n idx += 1;\n }\n\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n } else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n\n var tokens = session.getTokens(row);\n foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n } else {\n if (isNewRow)\n tokens = session.getTokens(row);\n\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n return renderTokens;\n };\n\n this.$useLineGroups = function() {\n return this.session.getUseWrapMode();\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$measureNode)\n this.$measureNode.parentNode.removeChild(this.$measureNode);\n delete this.$measureNode;\n };\n\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar dom = acequire(\"../lib/dom\");\nvar isIE8;\n\nvar Cursor = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n \n if (isIE8 === undefined)\n isIE8 = !(\"opacity\" in this.element.style);\n\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = (isIE8\n ? this.$updateVisibility\n : this.$updateOpacity).bind(this);\n};\n\n(function() {\n \n this.$updateVisibility = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.visibility = val ? \"\" : \"hidden\";\n };\n this.$updateOpacity = function(val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.opacity = val ? \"\" : \"0\";\n };\n \n\n this.$padding = 0;\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n\n this.setSession = function(session) {\n this.session = session;\n };\n\n this.setBlinking = function(blinking) {\n if (blinking != this.isBlinking){\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n\n this.setBlinkInterval = function(blinkInterval) {\n if (blinkInterval != this.blinkInterval){\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n\n this.setSmoothBlinking = function(smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking && !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\n this.addCursor = function() {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n\n this.removeCursor = function() {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n\n this.hideCursor = function() {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.showCursor = function() {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.restartTimer = function() {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n if (this.smoothBlinking) {\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n \n update(true);\n\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible)\n return;\n\n if (this.smoothBlinking) {\n setTimeout(function(){\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }.bind(this));\n }\n \n var blink = function(){\n this.timeoutId = setTimeout(function() {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n\n this.intervalId = setInterval(function() {\n update(true);\n blink();\n }, this.blinkInterval);\n\n blink();\n };\n\n this.getPixelPosition = function(position, onScreen) {\n if (!this.config || !this.session)\n return {left : 0, top : 0};\n\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n\n return {left : cursorLeft, top : cursorTop};\n };\n\n this.update = function(config) {\n this.config = config;\n\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n\n if (selections === undefined || selections.length === 0){\n selections = [{cursor: null}];\n }\n\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n\n var style = (this.cursors[cursorIndex++] || this.addCursor()).style;\n \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)\n this.removeCursor();\n\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n \n this.drawCursor = null;\n\n this.$setOverwrite = function(overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n\n this.destroy = function() {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n\n}).call(Cursor.prototype);\n\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar event = acequire(\"./lib/event\");\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function(parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.element.appendChild(this.inner);\n\n parent.appendChild(this.element);\n\n this.setVisible(false);\n this.skipEvent = false;\n\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n\n this.setVisible = function(isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n renderer.$scrollbarWidth = \n this.width = dom.scrollbarWidth(parent.ownerDocument);\n this.inner.style.width =\n this.element.style.width = (this.width || 15) + 5 + \"px\";\n this.$minWidth = 0;\n};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-v';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", {data: this.scrollTop});\n }\n this.skipEvent = false;\n };\n this.getWidth = function() {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n this.setHeight = function(height) {\n this.element.style.height = height + \"px\";\n };\n this.setInnerHeight =\n this.setScrollHeight = function(height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n } else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n this.setScrollTop = function(scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n\n}).call(VScrollBar.prototype);\nvar HScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.height = renderer.$scrollbarWidth;\n this.inner.style.height =\n this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-h';\n this.onScroll = function() {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", {data: this.scrollLeft});\n }\n this.skipEvent = false;\n };\n this.getHeight = function() {\n return this.isVisible ? this.height : 0;\n };\n this.setWidth = function(width) {\n this.element.style.width = width + \"px\";\n };\n this.setInnerWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollLeft = function(scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar event = acequire(\"./lib/event\");\n\n\nvar RenderLoop = function(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.window = win || window;\n};\n\n(function() {\n\n\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\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(acequire, exports, module) {\n\nvar oop = acequire(\"../lib/oop\");\nvar dom = acequire(\"../lib/dom\");\nvar lang = acequire(\"../lib/lang\");\nvar useragent = acequire(\"../lib/useragent\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\n\nvar CHAR_COUNT = 0;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n \n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n \n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n \n \n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n \n if (!CHAR_COUNT)\n this.$testFractionalRect();\n this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\n \n this.$characterSize = {width: 0, height: 0};\n this.checkForSizeChanges();\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n \n this.$characterSize = {width: 0, 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)\n CHAR_COUNT = 50;\n else\n CHAR_COUNT = 100;\n el.parentNode.removeChild(el);\n };\n \n this.$setMeasureNodeStyles = function(style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n } else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n\n this.checkForSizeChanges = function() {\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\", {data: size});\n }\n };\n\n this.$pollSizeChanges = function() {\n if (this.$pollSizeChangesTimer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = setInterval(function() {\n self.checkForSizeChanges();\n }, 500);\n };\n \n this.setPolling = function(val) {\n if (val) {\n this.$pollSizeChanges();\n } else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n\n this.$measureSizes = function() {\n if (CHAR_COUNT === 50) {\n var rect = null;\n try { \n rect = this.$measureNode.getBoundingClientRect();\n } catch(e) {\n rect = {width: 0, height:0 };\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)\n return null;\n return size;\n };\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 \n this.getCharacterWidth = function(ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n\n this.destroy = function() {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n\n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/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(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar config = acequire(\"./config\");\nvar useragent = acequire(\"./lib/useragent\");\nvar GutterLayer = acequire(\"./layer/gutter\").Gutter;\nvar MarkerLayer = acequire(\"./layer/marker\").Marker;\nvar TextLayer = acequire(\"./layer/text\").Text;\nvar CursorLayer = acequire(\"./layer/cursor\").Cursor;\nvar HScrollBar = acequire(\"./scrollbar\").HScrollBar;\nvar VScrollBar = acequire(\"./scrollbar\").VScrollBar;\nvar RenderLoop = acequire(\"./renderloop\").RenderLoop;\nvar FontMetrics = acequire(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar 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\ndom.importCssString(editorCss, \"ace_editor.css\");\n\nvar VirtualRenderer = function(container, theme) {\n var _self = this;\n\n this.container = container || dom.createElement(\"div\");\n this.$keepTextAreaAtCursor = !useragent.isOldIE;\n\n dom.addCssClass(this.container, \"ace_editor\");\n\n this.setTheme(theme);\n\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", true);\n\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n this.$markerBack = new MarkerLayer(this.content);\n\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n\n this.$markerFront = new MarkerLayer(this.content);\n\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n\n this.scrollBar = \n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function(e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n\n this.scrollTop = 0;\n this.scrollLeft = 0;\n\n this.cursorPos = {\n row : 0,\n column : 0\n };\n\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.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\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n\n this.layerConfig = {\n width : 1,\n padding : 0,\n firstRow : 0,\n firstRowScreen: 0,\n lastRow : 0,\n lineHeight : 0,\n characterWidth : 0,\n minHeight : 1,\n maxHeight : 1,\n offset : 0,\n height : 1,\n gutterOffset: 1\n };\n \n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n\n this.$loop = new RenderLoop(\n this.$renderChanges.bind(this),\n this.container.ownerDocument.defaultView\n );\n this.$loop.schedule(this.CHANGE_FULL);\n\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n config._emit(\"renderer\", this);\n};\n\n(function() {\n\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n\n oop.implement(this, EventEmitter);\n\n this.updateCharacterSize = function() {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n };\n this.setSession = function(session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n \n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n \n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n \n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n this.updateLines = function(firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n\n this.onChangeNewLineMode = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n \n this.onChangeTabSize = function() {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n this.updateText = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n this.updateFull = function(force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n this.updateFontSize = function() {\n this.$textLayer.checkForSizeChanges();\n };\n\n this.$changes = 0;\n this.$updateSizeAsync = function() {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n this.onResize = function(force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n\n \n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n\n if (force)\n this.$gutterLayer.$padding = null;\n\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n };\n \n this.$updateCachedSize = function(force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n changes = changes | this.CHANGE_SCROLL;\n }\n\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n \n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n \n this.gutterWidth = gutterWidth;\n \n this.scrollBarH.element.style.left = \n this.scroller.style.left = gutterWidth + \"px\";\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); \n \n this.scrollBarH.element.style.right = \n this.scroller.style.right = this.scrollBarV.getWidth() + \"px\";\n this.scroller.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)\n changes |= this.CHANGE_FULL;\n }\n \n size.$dirty = !width || !height;\n\n if (changes)\n this._signal(\"resize\", oldSize);\n\n return changes;\n };\n\n this.onGutterResize = function() {\n var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else {\n this.$computeLayerConfig();\n 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\n this.setDisplayIndentGuides = function(display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.getOption(\"showPrintMargin\");\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.getOption(\"printMarginColumn\");\n };\n this.getShowGutter = function(){\n return this.getOption(\"showGutter\");\n };\n this.setShowGutter = function(show){\n return this.setOption(\"showGutter\", show);\n };\n\n this.getFadeFoldWidgets = function(){\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.$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\n this.$updatePrintMargin = function() {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n\n var style = this.$printMarginEl.style;\n style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n \n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n this.getContainerElement = function() {\n return this.container;\n };\n this.getMouseEventTarget = function() {\n return this.scroller;\n };\n this.getTextAreaContainer = function() {\n return this.container;\n };\n this.$moveTextAreaToCursor = function() {\n if (!this.$keepTextAreaAtCursor)\n 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\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\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)\n posLeft = this.$size.scrollerWidth - w;\n\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)\n return lastRow - 1;\n return lastRow;\n };\n this.getLastVisibleRow = function() {\n return this.layerConfig.lastRow;\n };\n\n this.$padding = null;\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n \n this.setScrollMargin = function(top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top|0;\n sm.bottom = bottom|0;\n sm.right = right|0;\n sm.left = left|0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n this.getHScrollBarAlwaysVisible = function() {\n return this.$hScrollBarAlwaysVisible;\n };\n this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.getVScrollBarAlwaysVisible = function() {\n return this.$vScrollBarAlwaysVisible;\n };\n this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.$updateScrollBarV = function() {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n this.$updateScrollBarH = function() {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n \n this.$frozen = false;\n this.freeze = function() {\n this.$frozen = true;\n };\n \n this.unfreeze = function() {\n this.$frozen = false;\n };\n\n this.$renderChanges = function(changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return; \n } \n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n \n this._signal(\"beforeRender\");\n\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL\n ) {\n changes |= this.$computeLayerConfig();\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)\n 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)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this.$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)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\");\n return;\n }\n\n if (changes & this.CHANGE_TEXT) {\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this.$highlightGutterLine && this.$updateGutterLineHighlight();\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n\n this._signal(\"afterRender\");\n };\n\n \n this.$autosize = function() {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight,\n Math.max((this.$minLines || 1) * this.lineHeight, height)\n ) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var vScroll = height > maxHeight;\n \n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n \n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n \n this._signal(\"autosize\");\n }\n };\n \n this.$computeLayerConfig = function() {\n var session = this.session;\n var size = this.$size;\n \n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n\n var longestLine = this.$getLongestLine();\n \n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n\n var offset = this.scrollTop % this.lineHeight;\n var minHeight = size.scrollerHeight + this.lineHeight;\n \n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n \n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top,\n Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n \n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n\n offset = this.scrollTop - firstRowScreen * lineHeight;\n\n var changes = 0;\n if (this.layerConfig.width != longestLine) \n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n \n this.layerConfig = {\n width : longestLine,\n padding : this.$padding,\n firstRow : firstRow,\n firstRowScreen: firstRowScreen,\n lastRow : lastRow,\n lineHeight : lineHeight,\n characterWidth : this.characterWidth,\n minHeight : minHeight,\n maxHeight : maxHeight,\n offset : offset,\n gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height : this.$size.scrollerHeight\n };\n\n return changes;\n };\n\n this.$updateLines = function() {\n if (!this.$changedLines) return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n\n var layerConfig = this.layerConfig;\n\n if (firstRow > layerConfig.lastRow + 1) { return; }\n if (lastRow < layerConfig.firstRow) { return; }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n\n this.$getLongestLine = function() {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n this.updateFrontMarkers = function() {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n this.updateBackMarkers = function() {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n this.addGutterDecoration = function(row, className){\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function(row, className){\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n this.updateBreakpoints = function(rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.setAnnotations = function(annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.updateCursor = function() {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n this.hideCursor = function() {\n this.$cursorLayer.hideCursor();\n };\n this.showCursor = function() {\n this.$cursorLayer.showCursor();\n };\n\n this.scrollSelectionIntoView = function(anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n var left = pos.left;\n var top = pos.top;\n \n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n \n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n \n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight)\n top -= offset * this.$size.scrollerHeight;\n if (top === 0)\n top = -this.scrollMargin.top;\n this.session.setScrollTop(top);\n } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\n top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\n }\n\n var scrollLeft = this.scrollLeft;\n\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n };\n this.getScrollTop = function() {\n return this.session.getScrollTop();\n };\n this.getScrollLeft = function() {\n return this.session.getScrollLeft();\n };\n this.getScrollTopRow = function() {\n return this.scrollTop / this.lineHeight;\n };\n this.getScrollBottomRow = function() {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n this.scrollToRow = function(row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n\n this.alignCursor = function(cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = {row: cursor, column: 0};\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n\n this.session.setScrollTop(offset);\n return offset;\n };\n\n this.STEPS = 8;\n this.$calcSteps = function(fromValue, toValue){\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n\n var func = function(t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n return steps;\n };\n this.scrollToLine = function(line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n\n this.animateScrolling = function(fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n \n if (fromValue == toValue)\n return;\n \n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n \n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n clearInterval(this.$timer);\n\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function() {\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n } else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n } else {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n callback && callback();\n }\n }, 10);\n };\n this.scrollToY = function(scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n this.scrollToX = function(scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n this.scrollTo = function(x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(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)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n\n this.pixelToScreenCoordinates = function(x, y) {\n var canvasPos = this.scroller.getBoundingClientRect();\n\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = Math.round(offset);\n\n return {row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX};\n };\n\n this.screenToTextCoordinates = function(x, y) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n\n var col = Math.round(offsetX / this.characterWidth);\n\n var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\n\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n this.textToScreenCoordinates = function(row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n\n var y = pos.row * this.lineHeight;\n\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n this.visualizeFocus = function() {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n this.visualizeBlur = function() {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n this.showComposition = function(position) {\n if (!this.$composition)\n this.$composition = {\n keepTextAreaAtCursor: this.$keepTextAreaAtCursor,\n cssText: this.textarea.style.cssText\n };\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)\n return;\n\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',{theme:theme});\n\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n } else {\n afterLoad(theme);\n }\n\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n dom.importCssString(\n module.cssText,\n module.cssClass,\n _self.container.ownerDocument\n );\n\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n\n var padding = \"padding\" in module ? module.padding \n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n\n _self._dispatchEvent('themeLoaded', {theme:module});\n cb && cb();\n }\n };\n this.getTheme = function() {\n return this.$themeId;\n };\n this.setStyle = function(style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n this.unsetStyle = function(style) {\n dom.removeCssClass(this.container, style);\n };\n \n this.setCursorStyle = function(style) {\n if (this.scroller.style.cursor != style)\n 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\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n animatedScroll: {initialValue: false},\n showInvisibles: {\n set: function(value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function() { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function(val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function() {\n return this.$showPrintMargin && this.$printMarginColumn; \n }\n },\n showGutter: {\n set: function(show){\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n fadeFoldWidgets: {\n set: function(show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function(show) {this.$gutterLayer.setShowFoldWidgets(show);},\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))\n 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\n this.$gutterLineHighlight.style.display = shouldHighlight ? \"\" : \"none\";\n if (this.$cursorLayer.$pixelPos)\n this.$updateGutterLineHighlight();\n },\n initialValue: false,\n value: true\n },\n hScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function(val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function(size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function(name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function(val) {\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function(val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function(val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function(val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n theme: {\n set: function(val) { this.setTheme(val); },\n get: function() { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar net = acequire(\"../lib/net\");\nvar EventEmitter = acequire(\"../lib/event_emitter\").EventEmitter;\nvar config = acequire(\"../config\");\n\nfunction $workerBlob(workerUrl, mod) {\n var script = mod.src;\"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl, mod) {\n var blob = $workerBlob(workerUrl, mod);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n}\n\nvar 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 (acequire.nameToUrl && !acequire.toUrl)\n acequire.toUrl = acequire.nameToUrl;\n \n if (config.get(\"packaged\") || !acequire.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod.id, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(acequire.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(acequire.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl, mod);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod.id,\n classname : classname\n });\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.callbackId = 1;\n this.callbacks = {};\n this.messageBuffer = [];\n\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n var _self = this;\n\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)\n setTimeout(processNext);\n else\n processNext();\n }\n };\n this.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = _self.messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n _self.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (_self.messageBuffer.length)\n processNext();\n });\n};\n\nUIWorkerClient.prototype = WorkerClient.prototype;\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"./range\").Range;\nvar EventEmitter = acequire(\"./lib/event_emitter\").EventEmitter;\nvar oop = acequire(\"./lib/oop\");\n\nvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate);\n this.$others = others;\n \n this.$onCursorChange = function() {\n setTimeout(function() {\n _self.onCursorChange();\n });\n };\n \n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\n this.$undoStackDepth = undoStack.length;\n this.setup();\n\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setup = function() {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n \n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function(other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n this.showOtherMarkers = function() {\n if (this.othersActive) return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function(anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\n });\n };\n this.hideOtherMarkers = function() {\n if (!this.othersActive) return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n this.onUpdate = function(delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n \n var range = delta;\n if (range.start.row !== range.end.row) return;\n if (range.start.row !== this.pos.row) return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n \n this.updateAnchors(delta);\n \n if (inMainRange)\n this.length += lengthDiff;\n\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n } else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n \n this.$updating = false;\n this.updateMarkers();\n };\n \n this.updateAnchors = function(delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n \n this.updateMarkers = function() {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function(pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n\n this.onCursorChange = function(event) {\n if (this.$updating || !this.session) return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n } else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n }; \n this.detach = function() {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.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)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(acequire, exports, module) {\n\nvar event = acequire(\"../lib/event\");\nvar useragent = acequire(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\n\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n \n if (ctrl && useragent.isMac)\n button = ev.button;\n\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n \n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n \n if (button !== 0)\n return;\n\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function(e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n \n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n \n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n } else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n } else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n \n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n \n \n editor.$blockScrolling++;\n editor.inVirtualSelectionMode = true;\n \n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function() {\n var tmpSel = selection.toOrientedRange();\n\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n } else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.$blockScrolling--;\n editor.inVirtualSelectionMode = false;\n });\n\n } else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true; \n var initialRange;\n var rectSel = [];\n var blockSelect = function() {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n \n editor.$blockScrolling++;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n 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 \n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead); \n else\n selection.moveToPosition(pos);\n editor.$blockScrolling--;\n \n screenCursor = {row: -1, column: -1};\n\n var onMouseSelectionEnd = function(e) {\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n 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++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n editor.$blockScrolling--;\n };\n\n var onSelectionInterval = blockSelect;\n\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n return e.preventDefault();\n }\n}\n\n\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(acequire, exports, module) {\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n exec: function(editor) { editor.selectMoreLines(-1); },\n bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelow\",\n exec: function(editor) { editor.selectMoreLines(1); },\n bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorAboveSkipCurrent\",\n exec: function(editor) { editor.selectMoreLines(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"addCursorBelowSkipCurrent\",\n exec: function(editor) { editor.selectMoreLines(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreBefore\",\n exec: function(editor) { editor.selectMore(-1); },\n bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectMoreAfter\",\n exec: function(editor) { editor.selectMore(1); },\n bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextBefore\",\n exec: function(editor) { editor.selectMore(-1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"selectNextAfter\",\n exec: function(editor) { editor.selectMore(1, true); },\n bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}, {\n name: \"splitIntoLines\",\n exec: function(editor) { editor.multiSelect.splitIntoLines(); },\n bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\n readOnly: true\n}, {\n name: \"alignCursors\",\n exec: function(editor) { editor.alignCursors(); },\n bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\n scrollIntoView: \"cursor\"\n}, {\n name: \"findAll\",\n exec: function(editor) { editor.findAll(); },\n bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\n scrollIntoView: \"cursor\",\n readOnly: true\n}];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n bindKey: \"esc\",\n exec: function(editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function(editor) {return editor && editor.inMultiSelectMode;}\n}];\n\nvar HashHandler = acequire(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(acequire, exports, module) {\n\nvar RangeList = acequire(\"./range_list\").RangeList;\nvar Range = acequire(\"./range\").Range;\nvar Selection = acequire(\"./selection\").Selection;\nvar onMouseDown = acequire(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = acequire(\"./lib/event\");\nvar lang = acequire(\"./lib/lang\");\nvar commands = acequire(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = acequire(\"./search\").Search;\nvar search = new Search();\n\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = acequire(\"./edit_session\").EditSession;\n(function() {\n this.getSelectionMarkers = function() {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function() {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function(range, $blockChangeEvents) {\n if (!range)\n return;\n\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n\n if (!range.cursor)\n range.cursor = range.end;\n\n var removed = this.rangeList.add(range);\n\n this.$onAddRange(range);\n\n if (removed.length)\n this.$onRemoveRange(removed);\n\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n\n this.toSingleRange = function(range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function(pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function() {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n else if(this.ranges[0])\n this.fromOrientedRange(this.ranges[0]);\n };\n\n this.$onAddRange = function(range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", {range: range});\n };\n\n this.$onRemoveRange = function(removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n\n for (var i = removed.length; i--; ) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n\n this._signal(\"removeRange\", {ranges: removed});\n\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function() {\n if (this.rangeList)\n return;\n\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function() {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n\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\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)\n var start = range.end, end = range.start;\n else\n var start = range.start, end = range.end;\n \n this.addRange(Range.fromPoints(end, end));\n this.addRange(Range.fromPoints(start, start));\n return;\n }\n\n var rectSel = [];\n var r = this.getLineRange(startRow, true);\n r.start.column = range.start.column;\n rectSel.push(r);\n\n for (var i = startRow + 1; i < endRow; i++)\n rectSel.push(this.getLineRange(i, true));\n\n r = this.getLineRange(endRow, true);\n r.end.column = range.end.column;\n rectSel.push(r);\n\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\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\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n } else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n } else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n\n if (startRow == endRow)\n includeEmptyLines = true;\n\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(\n this.session.screenToDocumentPosition(row, startColumn, startOffsetX),\n this.session.screenToDocumentPosition(row, endColumn, endOffsetX)\n );\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n var docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n\n if (yBackwards)\n rectSel.reverse();\n\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = acequire(\"./editor\").Editor;\n(function() {\n this.updateSelectionMarkers = function() {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function(orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function(range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n\n this.removeSelectionMarkers = function(ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--; ) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n\n this.$onAddRange = function(e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onRemoveRange = function(e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onMultiSelect = function(e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onSingleSelect = function(e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n\n this.$onMultiSelectExec = function(e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n } else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n } else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n } else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n } else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n }; \n this.forEachSelection = function(cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n \n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n \n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n \n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n \n return result;\n };\n this.exitMultiSelectMode = function() {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n\n this.getSelectedText = function() {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n \n this.$checkMultiselectChange = function(e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row \n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n }\n };\n this.findAll = function(needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n } \n this.$search.set(options);\n \n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n\n this.$blockScrolling += 1;\n var selection = this.multiSelect;\n\n if (!additive)\n selection.toSingleRange(ranges[0]);\n\n for (var i = ranges.length; i--; )\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n \n this.$blockScrolling -= 1;\n\n return ranges.length;\n };\n this.selectMoreLines = function(dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n } else {\n var anchor = lead;\n }\n\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n } else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n } else {\n if (skip)\n var toRemove = range.cursor;\n }\n\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function(dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n\n var words = [];\n for (var i = all.length; i--; ) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n\n for (var i = all.length; i--; ) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n };\n this.selectMore = function(dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.$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)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function() {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function(r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n \n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n \n if (fr < 0) fr = 0;\n if (lr >= max) lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n } else {\n sameRowRanges.forEach(function(r) {\n sel.substractPoint(r.cursor);\n });\n\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function(r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function(r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n\n this.$reAlignText = function(lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n\n return lines.map(function(line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW, \" \")\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\n\n\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function(e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n\n addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n 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\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\nexports.MultiSelect = MultiSelect;\n\n\nacequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function(val) {\n MultiSelect(this);\n if (val) {\n this.on(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n } else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function(val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n\n this.getFoldWidgetRange = function(session, foldStyle, row) {\n return null;\n };\n\n this.indentationBlock = function(session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n\n if (level == -1)\n continue;\n\n if (level <= startLevel)\n break;\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n\n this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\n var start = {row: row, column: column + 1};\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n\n if (fw == \"start\" && end.row > start.row) {\n end.row --;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n\n this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n var end = {row: row, column: column};\n var start = session.$findOpeningBracket(bracket, end);\n\n if (!start)\n return;\n\n start.column++;\n end.column--;\n\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = acequire(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"./lib/oop\");\nvar dom = acequire(\"./lib/dom\");\nvar Range = acequire(\"./range\").Range;\n\n\nfunction LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n \n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n this.getRowLength = function(row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else \n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.$getWidgetScreenLength = function() {\n var screenRows = 0;\n this.lineWidgets.forEach(function(w){\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n }; \n \n this.$onChangeEditor = function(e) {\n this.attach(e.editor);\n };\n \n this.attach = function(editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n\n if (this.editor == editor)\n return;\n\n this.detach();\n this.editor = editor;\n \n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n this.detach = function(e) {\n var editor = this.editor;\n if (!editor)\n return;\n \n this.editor = null;\n editor.widgetManager = null;\n \n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function(w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n\n this.updateOnFold = function(e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n } else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n \n this.updateOnChange = function(delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n \n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n } else if (delta.action == 'remove') {\n var removed = lineWidgets.splice(startRow + 1, len);\n 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 \n this.$updateRows = function() {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var noWidgets = true;\n lineWidgets.forEach(function(w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n\n this.addLineWidget = function(w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n \n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n \n this.session.lineWidgets[w.row] = w;\n \n w.session = this.session;\n \n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n }\n \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 \n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n \n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n \n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n \n this.removeLineWidget = function(w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy) try {\n w.editor.destroy();\n } catch(e){}\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n } else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n this.$updateRows();\n };\n \n this.getWidgetsAtRow = function(row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n \n this.onWidgetChanged = function(w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n \n this.measureWidgets = function(e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n \n if (!changedWidgets || !changedWidgets.length) return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el) continue;\n if (w.session != this.session) continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n \n w.h = w.el.offsetHeight;\n \n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n \n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", {data:{start:{row: min}}});\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n \n this.renderWidgets = function(e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n \n while (first > 0 && !lineWidgets[first])\n first--;\n \n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el) continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n \n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n \n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n \n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n } else {\n w.el.style.right = \"\";\n }\n }\n };\n \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\nvar LineWidgets = acequire(\"../line_widgets\").LineWidgets;\nvar dom = acequire(\"../lib/dom\");\nvar Range = acequire(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\n\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n \n var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n \n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n \n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n \n \n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\n\nexports.showErrorMarker = function(editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n \n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n } else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n } else if (oldWidget) {\n return;\n } else {\n gutterAnno = {\n text: [\"Looks good!\"],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n \n var w = {\n row: pos.row, \n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n \n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n \n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"
\");\n \n el.appendChild(dom.createElement(\"div\"));\n \n var kb = function(_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return {command: \"null\"};\n }\n };\n \n w.destroy = function() {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n \n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n \n editor.session.widgetManager.addLineWidget(w);\n \n w.el.onmousedown = editor.focus.bind(editor);\n \n editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\n\ndom.importCssString(\"\\\n .error_widget_wrapper {\\\n background: inherit;\\\n color: inherit;\\\n border:none\\\n }\\\n .error_widget {\\\n border-top: solid 2px;\\\n border-bottom: solid 2px;\\\n margin: 5px 0;\\\n padding: 10px 40px;\\\n white-space: pre-wrap;\\\n }\\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n border-color: #ff5a5a\\\n }\\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n border-color: #F1D817\\\n }\\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n border-color: #5a5a5a\\\n }\\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n border-color: #5aaa5a\\\n }\\\n .error_widget_arrow {\\\n position: absolute;\\\n border: solid 5px;\\\n border-top-color: transparent!important;\\\n border-right-color: transparent!important;\\\n border-left-color: transparent!important;\\\n top: -5px;\\\n }\\\n\", \"\");\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(acequire, exports, module) {\n\"use strict\";\n\nacequire(\"./lib/fixoldbrowsers\");\n\nvar dom = acequire(\"./lib/dom\");\nvar event = acequire(\"./lib/event\");\n\nvar Editor = acequire(\"./editor\").Editor;\nvar EditSession = acequire(\"./edit_session\").EditSession;\nvar UndoManager = acequire(\"./undomanager\").UndoManager;\nvar Renderer = acequire(\"./virtual_renderer\").VirtualRenderer;\nacequire(\"./worker/worker_client\");\nacequire(\"./keyboard/hash_handler\");\nacequire(\"./placeholder\");\nacequire(\"./multi_select\");\nacequire(\"./mode/folding/fold_mode\");\nacequire(\"./theme/textmate\");\nacequire(\"./ext/error_marker\");\n\nexports.config = acequire(\"./config\");\nexports.acequire = acequire;\n\nif (typeof define === \"function\")\n exports.define = define;\nexports.edit = function(el) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n } else if (el) {\n value = dom.getInnerText(el);\n el.innerHTML = \"\";\n }\n\n var doc = exports.createEditSession(value);\n\n var editor = new Editor(new Renderer(el));\n editor.setSession(doc);\n\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode) env.textarea = oldNode;\n event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function() {\n event.removeListener(window, \"resize\", env.onResize);\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function(text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.version = \"1.2.9\";\n});\n (function() {\n ace.acequire([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n });\n })();\n \nmodule.exports = window.ace.acequire(\"ace/ace\");","ace.define(\"ace/theme/tomorrow\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-tomorrow\";\nexports.cssText = \".ace-tomorrow .ace_gutter {\\\nbackground: #f6f6f6;\\\ncolor: #4D4D4C\\\n}\\\n.ace-tomorrow .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #f6f6f6\\\n}\\\n.ace-tomorrow {\\\nbackground-color: #FFFFFF;\\\ncolor: #4D4D4C\\\n}\\\n.ace-tomorrow .ace_cursor {\\\ncolor: #AEAFAD\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_selection {\\\nbackground: #D6D6D6\\\n}\\\n.ace-tomorrow.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FFFFFF;\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #D1D1D1\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_active-line {\\\nbackground: #EFEFEF\\\n}\\\n.ace-tomorrow .ace_gutter-active-line {\\\nbackground-color : #dcdcdc\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #D6D6D6\\\n}\\\n.ace-tomorrow .ace_invisible {\\\ncolor: #D1D1D1\\\n}\\\n.ace-tomorrow .ace_keyword,\\\n.ace-tomorrow .ace_meta,\\\n.ace-tomorrow .ace_storage,\\\n.ace-tomorrow .ace_storage.ace_type,\\\n.ace-tomorrow .ace_support.ace_type {\\\ncolor: #8959A8\\\n}\\\n.ace-tomorrow .ace_keyword.ace_operator {\\\ncolor: #3E999F\\\n}\\\n.ace-tomorrow .ace_constant.ace_character,\\\n.ace-tomorrow .ace_constant.ace_language,\\\n.ace-tomorrow .ace_constant.ace_numeric,\\\n.ace-tomorrow .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow .ace_support.ace_constant,\\\n.ace-tomorrow .ace_variable.ace_parameter {\\\ncolor: #F5871F\\\n}\\\n.ace-tomorrow .ace_constant.ace_other {\\\ncolor: #666969\\\n}\\\n.ace-tomorrow .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #C82829\\\n}\\\n.ace-tomorrow .ace_invalid.ace_deprecated {\\\ncolor: #FFFFFF;\\\nbackground-color: #8959A8\\\n}\\\n.ace-tomorrow .ace_fold {\\\nbackground-color: #4271AE;\\\nborder-color: #4D4D4C\\\n}\\\n.ace-tomorrow .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow .ace_support.ace_function,\\\n.ace-tomorrow .ace_variable {\\\ncolor: #4271AE\\\n}\\\n.ace-tomorrow .ace_support.ace_class,\\\n.ace-tomorrow .ace_support.ace_type {\\\ncolor: #C99E00\\\n}\\\n.ace-tomorrow .ace_heading,\\\n.ace-tomorrow .ace_markup.ace_heading,\\\n.ace-tomorrow .ace_string {\\\ncolor: #718C00\\\n}\\\n.ace-tomorrow .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow .ace_meta.ace_tag,\\\n.ace-tomorrow .ace_string.ace_regexp,\\\n.ace-tomorrow .ace_variable {\\\ncolor: #C82829\\\n}\\\n.ace-tomorrow .ace_comment {\\\ncolor: #8E908C\\\n}\\\n.ace-tomorrow .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y\\\n}\";\n\nvar dom = acequire(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n","module.exports.id = 'ace/mode/javascript_worker';\nmodule.exports.src = \"\\\"no use strict\\\";!function(window){function resolveModuleId(id,paths){for(var testPath=id,tail=\\\"\\\";testPath;){var alias=paths[testPath];if(\\\"string\\\"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\\\/*$/,\\\"/\\\")+(tail||alias.main||alias.name);if(alias===!1)return\\\"\\\";var i=testPath.lastIndexOf(\\\"/\\\");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:\\\"log\\\",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:\\\"error\\\",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf(\\\"!\\\")){var chunks=moduleName.split(\\\"!\\\");return window.normalizeModule(parentId,chunks[0])+\\\"!\\\"+window.normalizeModule(parentId,chunks[1])}if(\\\".\\\"==moduleName.charAt(0)){var base=parentId.split(\\\"/\\\").slice(0,-1).join(\\\"/\\\");for(moduleName=(base?base+\\\"/\\\":\\\"\\\")+moduleName;-1!==moduleName.indexOf(\\\".\\\")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\\\.\\\\//,\\\"\\\").replace(/\\\\/\\\\.\\\\//,\\\"/\\\").replace(/[^\\\\/]+\\\\/\\\\.\\\\.\\\\//,\\\"\\\")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error(\\\"worker.js acequire() accepts only (parentId, id) as arguments\\\");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log(\\\"unable to load \\\"+id);var path=resolveModuleId(id,window.acequire.tlns);return\\\".js\\\"!=path.slice(-3)&&(path+=\\\".js\\\"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,\\\"string\\\"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),\\\"function\\\"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=[\\\"require\\\",\\\"exports\\\",\\\"module\\\"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case\\\"require\\\":return req;case\\\"exports\\\":return module.exports;case\\\"module\\\":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire(\\\"ace/lib/event_emitter\\\").EventEmitter,oop=window.acequire(\\\"ace/lib/oop\\\"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:\\\"call\\\",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:\\\"event\\\",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error(\\\"Unknown command:\\\"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire(\\\"ace/lib/es5-shim\\\"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}}(this),ace.define(\\\"ace/lib/oop\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define(\\\"ace/range\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){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},this.toString=function(){return\\\"Range: [\\\"+this.start.row+\\\"/\\\"+this.start.column+\\\"] -> [\\\"+this.end.row+\\\"/\\\"+this.end.column+\\\"]\\\"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){\\\"object\\\"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){\\\"object\\\"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define(\\\"ace/apply_delta\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||\\\"\\\";switch(delta.action){case\\\"insert\\\":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case\\\"remove\\\":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define(\\\"ace/lib/event_emitter\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){\\\"object\\\"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?\\\"unshift\\\":\\\"push\\\"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define(\\\"ace/anchor\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/lib/event_emitter\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.columnthis.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal(\\\"change\\\",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener(\\\"change\\\",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on(\\\"change\\\",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define(\\\"ace/document\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/apply_delta\\\",\\\"ace/lib/event_emitter\\\",\\\"ace/range\\\",\\\"ace/anchor\\\"],function(acequire,exports){\\\"use strict\\\";var oop=acequire(\\\"./lib/oop\\\"),applyDelta=acequire(\\\"./apply_delta\\\").applyDelta,EventEmitter=acequire(\\\"./lib/event_emitter\\\").EventEmitter,Range=acequire(\\\"./range\\\").Range,Anchor=acequire(\\\"./anchor\\\").Anchor,Document=function(textOrLines){this.$lines=[\\\"\\\"],0===textOrLines.length?this.$lines=[\\\"\\\"]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0===\\\"aaa\\\".split(/a/).length?function(text){return text.replace(/\\\\r\\\\n|\\\\r/g,\\\"\\\\n\\\").split(\\\"\\\\n\\\")}:function(text){return text.split(/\\\\r\\\\n|\\\\r|\\\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\\\r\\\\n|\\\\r|\\\\n)/m);this.$autoNewLine=match?match[1]:\\\"\\\\n\\\",this._signal(\\\"changeNewLineMode\\\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\\\"windows\\\":return\\\"\\\\r\\\\n\\\";case\\\"unix\\\":return\\\"\\\\n\\\";default:return this.$autoNewLine||\\\"\\\\n\\\"}},this.$autoNewLine=\\\"\\\",this.$newLineMode=\\\"auto\\\",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal(\\\"changeNewLineMode\\\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return\\\"\\\\r\\\\n\\\"==text||\\\"\\\\r\\\"==text||\\\"\\\\n\\\"==text},this.getLine=function(row){return this.$lines[row]||\\\"\\\"},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||\\\"\\\").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn(\\\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\\\"),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn(\\\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\\\"),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn(\\\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\\\"),this.insertMergedLines(position,[\\\"\\\",\\\"\\\"])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([\\\"\\\"]),column=0):(lines=[\\\"\\\"].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:\\\"insert\\\",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:\\\"remove\\\",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:\\\"remove\\\",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\\\"remove\\\",lines:[\\\"\\\",\\\"\\\"]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert=\\\"insert\\\"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal(\\\"change\\\",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(\\\"\\\"),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:\\\"insert\\\"==delta.action?\\\"remove\\\":\\\"insert\\\",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define(\\\"ace/lib/lang\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports){\\\"use strict\\\";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split(\\\"\\\").reverse().join(\\\"\\\")},exports.stringRepeat=function(string,count){for(var result=\\\"\\\";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\\\s\\\\s*/,trimEndRegexp=/\\\\s\\\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,\\\"\\\")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,\\\"\\\")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&\\\"object\\\"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if(\\\"object\\\"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}if(\\\"[object Object]\\\"!==Object.prototype.toString.call(obj))return obj;copy={};for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\\\]\\\\/\\\\\\\\])/g,\\\"\\\\\\\\$1\\\")},exports.escapeHTML=function(str){return str.replace(/&/g,\\\"&\\\").replace(/\\\"/g,\\\""\\\").replace(/'/g,\\\"'\\\").replace(/i;i+=2){if(Array.isArray(data[i+1]))var d={action:\\\"insert\\\",start:data[i],lines:data[i+1]};else var d={action:\\\"remove\\\",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define(\\\"ace/mode/javascript/jshint\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports,module){module.exports=function outer(modules,cache,entry){function newRequire(name,jumped){if(!cache[name]){if(!modules[name]){var currentRequire=\\\"function\\\"==typeof acequire&&acequire;if(!jumped&¤tRequire)return currentRequire(name,!0);if(previousRequire)return previousRequire(name,!0);var err=Error(\\\"Cannot find module '\\\"+name+\\\"'\\\");throw err.code=\\\"MODULE_NOT_FOUND\\\",err}var m=cache[name]={exports:{}};modules[name][0].call(m.exports,function(x){var id=modules[name][1][x];return newRequire(id?id:x)},m,m.exports,outer,modules,cache,entry)}return cache[name].exports}for(var previousRequire=\\\"function\\\"==typeof acequire&&acequire,i=0;entry.length>i;i++)newRequire(entry[i]);return newRequire(entry[0])}({\\\"/node_modules/browserify/node_modules/events/events.js\\\":[function(_dereq_,module){function EventEmitter(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function isFunction(arg){return\\\"function\\\"==typeof arg}function isNumber(arg){return\\\"number\\\"==typeof arg}function isObject(arg){return\\\"object\\\"==typeof arg&&null!==arg}function isUndefined(arg){return void 0===arg}module.exports=EventEmitter,EventEmitter.EventEmitter=EventEmitter,EventEmitter.prototype._events=void 0,EventEmitter.prototype._maxListeners=void 0,EventEmitter.defaultMaxListeners=10,EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||0>n||isNaN(n))throw TypeError(\\\"n must be a positive number\\\");return this._maxListeners=n,this},EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(this._events||(this._events={}),\\\"error\\\"===type&&(!this._events.error||isObject(this._events.error)&&!this._events.error.length)){if(er=arguments[1],er instanceof Error)throw er;throw TypeError('Uncaught, unspecified \\\"error\\\" event.')}if(handler=this._events[type],isUndefined(handler))return!1;if(isFunction(handler))switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:for(len=arguments.length,args=Array(len-1),i=1;len>i;i++)args[i-1]=arguments[i];handler.apply(this,args)}else if(isObject(handler)){for(len=arguments.length,args=Array(len-1),i=1;len>i;i++)args[i-1]=arguments[i];for(listeners=handler.slice(),len=listeners.length,i=0;len>i;i++)listeners[i].apply(this,args)}return!0},EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener))throw TypeError(\\\"listener must be a function\\\");if(this._events||(this._events={}),this._events.newListener&&this.emit(\\\"newListener\\\",type,isFunction(listener.listener)?listener.listener:listener),this._events[type]?isObject(this._events[type])?this._events[type].push(listener):this._events[type]=[this._events[type],listener]:this._events[type]=listener,isObject(this._events[type])&&!this._events[type].warned){var m;m=isUndefined(this._maxListeners)?EventEmitter.defaultMaxListeners:this._maxListeners,m&&m>0&&this._events[type].length>m&&(this._events[type].warned=!0,console.error(\\\"(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.\\\",this._events[type].length),\\\"function\\\"==typeof console.trace&&console.trace())}return this},EventEmitter.prototype.on=EventEmitter.prototype.addListener,EventEmitter.prototype.once=function(type,listener){function g(){this.removeListener(type,g),fired||(fired=!0,listener.apply(this,arguments))}if(!isFunction(listener))throw TypeError(\\\"listener must be a function\\\");var fired=!1;return g.listener=listener,this.on(type,g),this},EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError(\\\"listener must be a function\\\");if(!this._events||!this._events[type])return this;if(list=this._events[type],length=list.length,position=-1,list===listener||isFunction(list.listener)&&list.listener===listener)delete this._events[type],this._events.removeListener&&this.emit(\\\"removeListener\\\",type,listener);else if(isObject(list)){for(i=length;i-->0;)if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}if(0>position)return this;1===list.length?(list.length=0,delete this._events[type]):list.splice(position,1),this._events.removeListener&&this.emit(\\\"removeListener\\\",type,listener)}return this},EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[type]&&delete this._events[type],this;if(0===arguments.length){for(key in this._events)\\\"removeListener\\\"!==key&&this.removeAllListeners(key);return this.removeAllListeners(\\\"removeListener\\\"),this._events={},this\\n}if(listeners=this._events[type],isFunction(listeners))this.removeListener(type,listeners);else for(;listeners.length;)this.removeListener(type,listeners[listeners.length-1]);return delete this._events[type],this},EventEmitter.prototype.listeners=function(type){var ret;return ret=this._events&&this._events[type]?isFunction(this._events[type])?[this._events[type]]:this._events[type].slice():[]},EventEmitter.listenerCount=function(emitter,type){var ret;return ret=emitter._events&&emitter._events[type]?isFunction(emitter._events[type])?1:emitter._events[type].length:0}},{}],\\\"/node_modules/jshint/data/ascii-identifier-data.js\\\":[function(_dereq_,module){for(var identifierStartTable=[],i=0;128>i;i++)identifierStartTable[i]=36===i||i>=65&&90>=i||95===i||i>=97&&122>=i;for(var identifierPartTable=[],i=0;128>i;i++)identifierPartTable[i]=identifierStartTable[i]||i>=48&&57>=i;module.exports={asciiIdentifierStartTable:identifierStartTable,asciiIdentifierPartTable:identifierPartTable}},{}],\\\"/node_modules/jshint/lodash.js\\\":[function(_dereq_,module,exports){(function(global){(function(){function baseFindIndex(array,predicate,fromRight){for(var length=array.length,index=fromRight?length:-1;fromRight?index--:length>++index;)if(predicate(array[index],index,array))return index;return-1}function baseIndexOf(array,value,fromIndex){if(value!==value)return indexOfNaN(array,fromIndex);for(var index=fromIndex-1,length=array.length;length>++index;)if(array[index]===value)return index;return-1}function baseIsFunction(value){return\\\"function\\\"==typeof value||!1}function baseToString(value){return\\\"string\\\"==typeof value?value:null==value?\\\"\\\":value+\\\"\\\"}function indexOfNaN(array,fromIndex,fromRight){for(var length=array.length,index=fromIndex+(fromRight?0:-1);fromRight?index--:length>++index;){var other=array[index];if(other!==other)return index}return-1}function isObjectLike(value){return!!value&&\\\"object\\\"==typeof value}function lodash(){}function arrayCopy(source,array){var index=-1,length=source.length;for(array||(array=Array(length));length>++index;)array[index]=source[index];return array}function arrayEach(array,iteratee){for(var index=-1,length=array.length;length>++index&&iteratee(array[index],index,array)!==!1;);return array}function arrayFilter(array,predicate){for(var index=-1,length=array.length,resIndex=-1,result=[];length>++index;){var value=array[index];predicate(value,index,array)&&(result[++resIndex]=value)}return result}function arrayMap(array,iteratee){for(var index=-1,length=array.length,result=Array(length);length>++index;)result[index]=iteratee(array[index],index,array);return result}function arrayMax(array){for(var index=-1,length=array.length,result=NEGATIVE_INFINITY;length>++index;){var value=array[index];value>result&&(result=value)}return result}function arraySome(array,predicate){for(var index=-1,length=array.length;length>++index;)if(predicate(array[index],index,array))return!0;return!1}function assignWith(object,source,customizer){var props=keys(source);push.apply(props,getSymbols(source));for(var index=-1,length=props.length;length>++index;){var key=props[index],value=object[key],result=customizer(value,source[key],key,object,source);(result===result?result===value:value!==value)&&(value!==undefined||key in object)||(object[key]=result)}return object}function baseCopy(source,props,object){object||(object={});for(var index=-1,length=props.length;length>++index;){var key=props[index];object[key]=source[key]}return object}function baseCallback(func,thisArg,argCount){var type=typeof func;return\\\"function\\\"==type?thisArg===undefined?func:bindCallback(func,thisArg,argCount):null==func?identity:\\\"object\\\"==type?baseMatches(func):thisArg===undefined?property(func):baseMatchesProperty(func,thisArg)}function baseClone(value,isDeep,customizer,key,object,stackA,stackB){var result;if(customizer&&(result=object?customizer(value,key,object):customizer(value)),result!==undefined)return result;if(!isObject(value))return value;var isArr=isArray(value);if(isArr){if(result=initCloneArray(value),!isDeep)return arrayCopy(value,result)}else{var tag=objToString.call(value),isFunc=tag==funcTag;if(tag!=objectTag&&tag!=argsTag&&(!isFunc||object))return cloneableTags[tag]?initCloneByTag(value,tag,isDeep):object?value:{};if(result=initCloneObject(isFunc?{}:value),!isDeep)return baseAssign(result,value)}stackA||(stackA=[]),stackB||(stackB=[]);for(var length=stackA.length;length--;)if(stackA[length]==value)return stackB[length];return stackA.push(value),stackB.push(result),(isArr?arrayEach:baseForOwn)(value,function(subValue,key){result[key]=baseClone(subValue,isDeep,customizer,key,value,stackA,stackB)}),result}function baseFilter(collection,predicate){var result=[];return baseEach(collection,function(value,index,collection){predicate(value,index,collection)&&result.push(value)}),result}function baseForIn(object,iteratee){return baseFor(object,iteratee,keysIn)}function baseForOwn(object,iteratee){return baseFor(object,iteratee,keys)}function baseGet(object,path,pathKey){if(null!=object){pathKey!==undefined&&pathKey in toObject(object)&&(path=[pathKey]);for(var index=-1,length=path.length;null!=object&&length>++index;)var result=object=object[path[index]];return result}}function baseIsEqual(value,other,customizer,isLoose,stackA,stackB){if(value===other)return 0!==value||1/value==1/other;var valType=typeof value,othType=typeof other;return\\\"function\\\"!=valType&&\\\"object\\\"!=valType&&\\\"function\\\"!=othType&&\\\"object\\\"!=othType||null==value||null==other?value!==value&&other!==other:baseIsEqualDeep(value,other,baseIsEqual,customizer,isLoose,stackA,stackB)}function baseIsEqualDeep(object,other,equalFunc,customizer,isLoose,stackA,stackB){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=arrayTag,othTag=arrayTag;objIsArr||(objTag=objToString.call(object),objTag==argsTag?objTag=objectTag:objTag!=objectTag&&(objIsArr=isTypedArray(object))),othIsArr||(othTag=objToString.call(other),othTag==argsTag?othTag=objectTag:othTag!=objectTag&&(othIsArr=isTypedArray(other)));var objIsObj=objTag==objectTag,othIsObj=othTag==objectTag,isSameTag=objTag==othTag;if(isSameTag&&!objIsArr&&!objIsObj)return equalByTag(object,other,objTag);if(!isLoose){var valWrapped=objIsObj&&hasOwnProperty.call(object,\\\"__wrapped__\\\"),othWrapped=othIsObj&&hasOwnProperty.call(other,\\\"__wrapped__\\\");if(valWrapped||othWrapped)return equalFunc(valWrapped?object.value():object,othWrapped?other.value():other,customizer,isLoose,stackA,stackB)}if(!isSameTag)return!1;stackA||(stackA=[]),stackB||(stackB=[]);for(var length=stackA.length;length--;)if(stackA[length]==object)return stackB[length]==other;stackA.push(object),stackB.push(other);var result=(objIsArr?equalArrays:equalObjects)(object,other,equalFunc,customizer,isLoose,stackA,stackB);return stackA.pop(),stackB.pop(),result}function baseIsMatch(object,props,values,strictCompareFlags,customizer){for(var index=-1,length=props.length,noCustomizer=!customizer;length>++index;)if(noCustomizer&&strictCompareFlags[index]?values[index]!==object[props[index]]:!(props[index]in object))return!1;for(index=-1;length>++index;){var key=props[index],objValue=object[key],srcValue=values[index];if(noCustomizer&&strictCompareFlags[index])var result=objValue!==undefined||key in object;else result=customizer?customizer(objValue,srcValue,key):undefined,result===undefined&&(result=baseIsEqual(srcValue,objValue,customizer,!0));if(!result)return!1}return!0}function baseMatches(source){var props=keys(source),length=props.length;if(!length)return constant(!0);if(1==length){var key=props[0],value=source[key];if(isStrictComparable(value))return function(object){return null==object?!1:object[key]===value&&(value!==undefined||key in toObject(object))}}for(var values=Array(length),strictCompareFlags=Array(length);length--;)value=source[props[length]],values[length]=value,strictCompareFlags[length]=isStrictComparable(value);return function(object){return null!=object&&baseIsMatch(toObject(object),props,values,strictCompareFlags)}}function baseMatchesProperty(path,value){var isArr=isArray(path),isCommon=isKey(path)&&isStrictComparable(value),pathKey=path+\\\"\\\";return path=toPath(path),function(object){if(null==object)return!1;var key=pathKey;if(object=toObject(object),!(!isArr&&isCommon||key in object)){if(object=1==path.length?object:baseGet(object,baseSlice(path,0,-1)),null==object)return!1;key=last(path),object=toObject(object)}return object[key]===value?value!==undefined||key in object:baseIsEqual(value,object[key],null,!0)}}function baseMerge(object,source,customizer,stackA,stackB){if(!isObject(object))return object;var isSrcArr=isLength(source.length)&&(isArray(source)||isTypedArray(source));if(!isSrcArr){var props=keys(source);push.apply(props,getSymbols(source))}return arrayEach(props||source,function(srcValue,key){if(props&&(key=srcValue,srcValue=source[key]),isObjectLike(srcValue))stackA||(stackA=[]),stackB||(stackB=[]),baseMergeDeep(object,source,key,baseMerge,customizer,stackA,stackB);else{var value=object[key],result=customizer?customizer(value,srcValue,key,object,source):undefined,isCommon=result===undefined;isCommon&&(result=srcValue),!isSrcArr&&result===undefined||!isCommon&&(result===result?result===value:value!==value)||(object[key]=result)}}),object}function baseMergeDeep(object,source,key,mergeFunc,customizer,stackA,stackB){for(var length=stackA.length,srcValue=source[key];length--;)if(stackA[length]==srcValue)return object[key]=stackB[length],undefined;var value=object[key],result=customizer?customizer(value,srcValue,key,object,source):undefined,isCommon=result===undefined;isCommon&&(result=srcValue,isLength(srcValue.length)&&(isArray(srcValue)||isTypedArray(srcValue))?result=isArray(value)?value:getLength(value)?arrayCopy(value):[]:isPlainObject(srcValue)||isArguments(srcValue)?result=isArguments(value)?toPlainObject(value):isPlainObject(value)?value:{}:isCommon=!1),stackA.push(srcValue),stackB.push(result),isCommon?object[key]=mergeFunc(result,srcValue,customizer,stackA,stackB):(result===result?result!==value:value===value)&&(object[key]=result)}function baseProperty(key){return function(object){return null==object?undefined:object[key]}}function basePropertyDeep(path){var pathKey=path+\\\"\\\";return path=toPath(path),function(object){return baseGet(object,path,pathKey)}}function baseSlice(array,start,end){var index=-1,length=array.length;start=null==start?0:+start||0,0>start&&(start=-start>length?0:length+start),end=end===undefined||end>length?length:+end||0,0>end&&(end+=length),length=start>end?0:end-start>>>0,start>>>=0;for(var result=Array(length);length>++index;)result[index]=array[index+start];return result}function baseSome(collection,predicate){var result;return baseEach(collection,function(value,index,collection){return result=predicate(value,index,collection),!result}),!!result}function baseValues(object,props){for(var index=-1,length=props.length,result=Array(length);length>++index;)result[index]=object[props[index]];return result}function binaryIndex(array,value,retHighest){var low=0,high=array?array.length:low;if(\\\"number\\\"==typeof value&&value===value&&HALF_MAX_ARRAY_LENGTH>=high){for(;high>low;){var mid=low+high>>>1,computed=array[mid];(retHighest?value>=computed:value>computed)?low=mid+1:high=mid}return high}return binaryIndexBy(array,value,identity,retHighest)}function binaryIndexBy(array,value,iteratee,retHighest){value=iteratee(value);for(var low=0,high=array?array.length:0,valIsNaN=value!==value,valIsUndef=value===undefined;high>low;){var mid=floor((low+high)/2),computed=iteratee(array[mid]),isReflexive=computed===computed;if(valIsNaN)var setLow=isReflexive||retHighest;else setLow=valIsUndef?isReflexive&&(retHighest||computed!==undefined):retHighest?value>=computed:value>computed;setLow?low=mid+1:high=mid}return nativeMin(high,MAX_ARRAY_INDEX)}function bindCallback(func,thisArg,argCount){if(\\\"function\\\"!=typeof func)return identity;if(thisArg===undefined)return func;switch(argCount){case 1:return function(value){return func.call(thisArg,value)};case 3:return function(value,index,collection){return func.call(thisArg,value,index,collection)};case 4:return function(accumulator,value,index,collection){return func.call(thisArg,accumulator,value,index,collection)};case 5:return function(value,other,key,object,source){return func.call(thisArg,value,other,key,object,source)}}return function(){return func.apply(thisArg,arguments)}}function bufferClone(buffer){return bufferSlice.call(buffer,0)}function createAssigner(assigner){return restParam(function(object,sources){var index=-1,length=null==object?0:sources.length,customizer=length>2&&sources[length-2],guard=length>2&&sources[2],thisArg=length>1&&sources[length-1];for(\\\"function\\\"==typeof customizer?(customizer=bindCallback(customizer,thisArg,5),length-=2):(customizer=\\\"function\\\"==typeof thisArg?thisArg:null,length-=customizer?1:0),guard&&isIterateeCall(sources[0],sources[1],guard)&&(customizer=3>length?null:customizer,length=1);length>++index;){var source=sources[index];source&&assigner(object,source,customizer)}return object})}function createBaseEach(eachFunc,fromRight){return function(collection,iteratee){var length=collection?getLength(collection):0;if(!isLength(length))return eachFunc(collection,iteratee);for(var index=fromRight?length:-1,iterable=toObject(collection);(fromRight?index--:length>++index)&&iteratee(iterable[index],index,iterable)!==!1;);return collection}}function createBaseFor(fromRight){return function(object,iteratee,keysFunc){for(var iterable=toObject(object),props=keysFunc(object),length=props.length,index=fromRight?length:-1;fromRight?index--:length>++index;){var key=props[index];if(iteratee(iterable[key],key,iterable)===!1)break}return object}}function createFindIndex(fromRight){return function(array,predicate,thisArg){return array&&array.length?(predicate=getCallback(predicate,thisArg,3),baseFindIndex(array,predicate,fromRight)):-1}}function createForEach(arrayFunc,eachFunc){return function(collection,iteratee,thisArg){return\\\"function\\\"==typeof iteratee&&thisArg===undefined&&isArray(collection)?arrayFunc(collection,iteratee):eachFunc(collection,bindCallback(iteratee,thisArg,3))}}function equalArrays(array,other,equalFunc,customizer,isLoose,stackA,stackB){var index=-1,arrLength=array.length,othLength=other.length,result=!0;if(arrLength!=othLength&&!(isLoose&&othLength>arrLength))return!1;for(;result&&arrLength>++index;){var arrValue=array[index],othValue=other[index];if(result=undefined,customizer&&(result=isLoose?customizer(othValue,arrValue,index):customizer(arrValue,othValue,index)),result===undefined)if(isLoose)for(var othIndex=othLength;othIndex--&&(othValue=other[othIndex],!(result=arrValue&&arrValue===othValue||equalFunc(arrValue,othValue,customizer,isLoose,stackA,stackB))););else result=arrValue&&arrValue===othValue||equalFunc(arrValue,othValue,customizer,isLoose,stackA,stackB)}return!!result}function equalByTag(object,other,tag){switch(tag){case boolTag:case dateTag:return+object==+other;case errorTag:return object.name==other.name&&object.message==other.message;case numberTag:return object!=+object?other!=+other:0==object?1/object==1/other:object==+other;case regexpTag:case stringTag:return object==other+\\\"\\\"}return!1}function equalObjects(object,other,equalFunc,customizer,isLoose,stackA,stackB){var objProps=keys(object),objLength=objProps.length,othProps=keys(other),othLength=othProps.length;if(objLength!=othLength&&!isLoose)return!1;for(var skipCtor=isLoose,index=-1;objLength>++index;){var key=objProps[index],result=isLoose?key in other:hasOwnProperty.call(other,key);if(result){var objValue=object[key],othValue=other[key];result=undefined,customizer&&(result=isLoose?customizer(othValue,objValue,key):customizer(objValue,othValue,key)),result===undefined&&(result=objValue&&objValue===othValue||equalFunc(objValue,othValue,customizer,isLoose,stackA,stackB))}if(!result)return!1;skipCtor||(skipCtor=\\\"constructor\\\"==key)}if(!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;if(objCtor!=othCtor&&\\\"constructor\\\"in object&&\\\"constructor\\\"in other&&!(\\\"function\\\"==typeof objCtor&&objCtor instanceof objCtor&&\\\"function\\\"==typeof othCtor&&othCtor instanceof othCtor))return!1}return!0}function getCallback(func,thisArg,argCount){var result=lodash.callback||callback;return result=result===callback?baseCallback:result,argCount?result(func,thisArg,argCount):result}function getIndexOf(collection,target,fromIndex){var result=lodash.indexOf||indexOf;return result=result===indexOf?baseIndexOf:result,collection?result(collection,target,fromIndex):result}function initCloneArray(array){var length=array.length,result=new array.constructor(length);return length&&\\\"string\\\"==typeof array[0]&&hasOwnProperty.call(array,\\\"index\\\")&&(result.index=array.index,result.input=array.input),result}function initCloneObject(object){var Ctor=object.constructor;return\\\"function\\\"==typeof Ctor&&Ctor instanceof Ctor||(Ctor=Object),new Ctor}function initCloneByTag(object,tag,isDeep){var Ctor=object.constructor;switch(tag){case arrayBufferTag:return bufferClone(object);case boolTag:case dateTag:return new Ctor(+object);case float32Tag:case float64Tag:case int8Tag:case int16Tag:case int32Tag:case uint8Tag:case uint8ClampedTag:case uint16Tag:case uint32Tag:var buffer=object.buffer;return new Ctor(isDeep?bufferClone(buffer):buffer,object.byteOffset,object.length);case numberTag:case stringTag:return new Ctor(object);case regexpTag:var result=new Ctor(object.source,reFlags.exec(object));result.lastIndex=object.lastIndex}return result}function isIndex(value,length){return value=+value,length=null==length?MAX_SAFE_INTEGER:length,value>-1&&0==value%1&&length>value}function isIterateeCall(value,index,object){if(!isObject(object))return!1;var type=typeof index;if(\\\"number\\\"==type)var length=getLength(object),prereq=isLength(length)&&isIndex(index,length);else prereq=\\\"string\\\"==type&&index in object;if(prereq){var other=object[index];return value===value?value===other:other!==other}return!1}function isKey(value,object){var type=typeof value;if(\\\"string\\\"==type&&reIsPlainProp.test(value)||\\\"number\\\"==type)return!0;if(isArray(value))return!1;var result=!reIsDeepProp.test(value);return result||null!=object&&value in toObject(object)}function isLength(value){return\\\"number\\\"==typeof value&&value>-1&&0==value%1&&MAX_SAFE_INTEGER>=value}function isStrictComparable(value){return value===value&&(0===value?1/value>0:!isObject(value))}function shimIsPlainObject(value){var Ctor;if(lodash.support,!isObjectLike(value)||objToString.call(value)!=objectTag||!hasOwnProperty.call(value,\\\"constructor\\\")&&(Ctor=value.constructor,\\\"function\\\"==typeof Ctor&&!(Ctor instanceof Ctor)))return!1;var result;return baseForIn(value,function(subValue,key){result=key}),result===undefined||hasOwnProperty.call(value,result)}function shimKeys(object){for(var props=keysIn(object),propsLength=props.length,length=propsLength&&object.length,support=lodash.support,allowIndexes=length&&isLength(length)&&(isArray(object)||support.nonEnumArgs&&isArguments(object)),index=-1,result=[];propsLength>++index;){var key=props[index];(allowIndexes&&isIndex(key,length)||hasOwnProperty.call(object,key))&&result.push(key)}return result}function toObject(value){return isObject(value)?value:Object(value)}function toPath(value){if(isArray(value))return value;var result=[];return baseToString(value).replace(rePropName,function(match,number,quote,string){result.push(quote?string.replace(reEscapeChar,\\\"$1\\\"):number||match)}),result}function indexOf(array,value,fromIndex){var length=array?array.length:0;if(!length)return-1;if(\\\"number\\\"==typeof fromIndex)fromIndex=0>fromIndex?nativeMax(length+fromIndex,0):fromIndex;else if(fromIndex){var index=binaryIndex(array,value),other=array[index];return(value===value?value===other:other!==other)?index:-1}return baseIndexOf(array,value,fromIndex||0)}function last(array){var length=array?array.length:0;return length?array[length-1]:undefined}function slice(array,start,end){var length=array?array.length:0;return length?(end&&\\\"number\\\"!=typeof end&&isIterateeCall(array,start,end)&&(start=0,end=length),baseSlice(array,start,end)):[]}function unzip(array){for(var index=-1,length=(array&&array.length&&arrayMax(arrayMap(array,getLength)))>>>0,result=Array(length);length>++index;)result[index]=arrayMap(array,baseProperty(index));return result}function includes(collection,target,fromIndex,guard){var length=collection?getLength(collection):0;return isLength(length)||(collection=values(collection),length=collection.length),length?(fromIndex=\\\"number\\\"!=typeof fromIndex||guard&&isIterateeCall(target,fromIndex,guard)?0:0>fromIndex?nativeMax(length+fromIndex,0):fromIndex||0,\\\"string\\\"==typeof collection||!isArray(collection)&&isString(collection)?length>fromIndex&&collection.indexOf(target,fromIndex)>-1:getIndexOf(collection,target,fromIndex)>-1):!1}function reject(collection,predicate,thisArg){var func=isArray(collection)?arrayFilter:baseFilter;return predicate=getCallback(predicate,thisArg,3),func(collection,function(value,index,collection){return!predicate(value,index,collection)})}function some(collection,predicate,thisArg){var func=isArray(collection)?arraySome:baseSome;return thisArg&&isIterateeCall(collection,predicate,thisArg)&&(predicate=null),(\\\"function\\\"!=typeof predicate||thisArg!==undefined)&&(predicate=getCallback(predicate,thisArg,3)),func(collection,predicate)}function restParam(func,start){if(\\\"function\\\"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return start=nativeMax(start===undefined?func.length-1:+start||0,0),function(){for(var args=arguments,index=-1,length=nativeMax(args.length-start,0),rest=Array(length);length>++index;)rest[index]=args[start+index];switch(start){case 0:return func.call(this,rest);case 1:return func.call(this,args[0],rest);case 2:return func.call(this,args[0],args[1],rest)}var otherArgs=Array(start+1);for(index=-1;start>++index;)otherArgs[index]=args[index];return otherArgs[start]=rest,func.apply(this,otherArgs)}}function clone(value,isDeep,customizer,thisArg){return isDeep&&\\\"boolean\\\"!=typeof isDeep&&isIterateeCall(value,isDeep,customizer)?isDeep=!1:\\\"function\\\"==typeof isDeep&&(thisArg=customizer,customizer=isDeep,isDeep=!1),customizer=\\\"function\\\"==typeof customizer&&bindCallback(customizer,thisArg,1),baseClone(value,isDeep,customizer)}function isArguments(value){var length=isObjectLike(value)?value.length:undefined;return isLength(length)&&objToString.call(value)==argsTag}function isEmpty(value){if(null==value)return!0;var length=getLength(value);return isLength(length)&&(isArray(value)||isString(value)||isArguments(value)||isObjectLike(value)&&isFunction(value.splice))?!length:!keys(value).length}function isObject(value){var type=typeof value;return\\\"function\\\"==type||!!value&&\\\"object\\\"==type}function isNative(value){return null==value?!1:objToString.call(value)==funcTag?reIsNative.test(fnToString.call(value)):isObjectLike(value)&&reIsHostCtor.test(value)}function isNumber(value){return\\\"number\\\"==typeof value||isObjectLike(value)&&objToString.call(value)==numberTag}function isString(value){return\\\"string\\\"==typeof value||isObjectLike(value)&&objToString.call(value)==stringTag}function isTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[objToString.call(value)]}function toPlainObject(value){return baseCopy(value,keysIn(value))}function has(object,path){if(null==object)return!1;var result=hasOwnProperty.call(object,path);return result||isKey(path)||(path=toPath(path),object=1==path.length?object:baseGet(object,baseSlice(path,0,-1)),path=last(path),result=null!=object&&hasOwnProperty.call(object,path)),result}function keysIn(object){if(null==object)return[];isObject(object)||(object=Object(object));var length=object.length;length=length&&isLength(length)&&(isArray(object)||support.nonEnumArgs&&isArguments(object))&&length||0;for(var Ctor=object.constructor,index=-1,isProto=\\\"function\\\"==typeof Ctor&&Ctor.prototype===object,result=Array(length),skipIndexes=length>0;length>++index;)result[index]=index+\\\"\\\";for(var key in object)skipIndexes&&isIndex(key,length)||\\\"constructor\\\"==key&&(isProto||!hasOwnProperty.call(object,key))||result.push(key);return result}function values(object){return baseValues(object,keys(object))}function escapeRegExp(string){return string=baseToString(string),string&&reHasRegExpChars.test(string)?string.replace(reRegExpChars,\\\"\\\\\\\\$&\\\"):string}function callback(func,thisArg,guard){return guard&&isIterateeCall(func,thisArg,guard)&&(thisArg=null),baseCallback(func,thisArg)}function constant(value){return function(){return value}}function identity(value){return value}function property(path){return isKey(path)?baseProperty(path):basePropertyDeep(path)}var undefined,VERSION=\\\"3.7.0\\\",FUNC_ERROR_TEXT=\\\"Expected a function\\\",argsTag=\\\"[object Arguments]\\\",arrayTag=\\\"[object Array]\\\",boolTag=\\\"[object Boolean]\\\",dateTag=\\\"[object Date]\\\",errorTag=\\\"[object Error]\\\",funcTag=\\\"[object Function]\\\",mapTag=\\\"[object Map]\\\",numberTag=\\\"[object Number]\\\",objectTag=\\\"[object Object]\\\",regexpTag=\\\"[object RegExp]\\\",setTag=\\\"[object Set]\\\",stringTag=\\\"[object String]\\\",weakMapTag=\\\"[object WeakMap]\\\",arrayBufferTag=\\\"[object ArrayBuffer]\\\",float32Tag=\\\"[object Float32Array]\\\",float64Tag=\\\"[object Float64Array]\\\",int8Tag=\\\"[object Int8Array]\\\",int16Tag=\\\"[object Int16Array]\\\",int32Tag=\\\"[object Int32Array]\\\",uint8Tag=\\\"[object Uint8Array]\\\",uint8ClampedTag=\\\"[object Uint8ClampedArray]\\\",uint16Tag=\\\"[object Uint16Array]\\\",uint32Tag=\\\"[object Uint32Array]\\\",reIsDeepProp=/\\\\.|\\\\[(?:[^[\\\\]]+|([\\\"'])(?:(?!\\\\1)[^\\\\n\\\\\\\\]|\\\\\\\\.)*?)\\\\1\\\\]/,reIsPlainProp=/^\\\\w*$/,rePropName=/[^.[\\\\]]+|\\\\[(?:(-?\\\\d+(?:\\\\.\\\\d+)?)|([\\\"'])((?:(?!\\\\2)[^\\\\n\\\\\\\\]|\\\\\\\\.)*?)\\\\2)\\\\]/g,reRegExpChars=/[.*+?^${}()|[\\\\]\\\\/\\\\\\\\]/g,reHasRegExpChars=RegExp(reRegExpChars.source),reEscapeChar=/\\\\\\\\(\\\\\\\\)?/g,reFlags=/\\\\w*$/,reIsHostCtor=/^\\\\[object .+?Constructor\\\\]$/,typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0,typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=!1;var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[stringTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=!0,cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[mapTag]=cloneableTags[setTag]=cloneableTags[weakMapTag]=!1;var objectTypes={\\\"function\\\":!0,object:!0},freeExports=objectTypes[typeof exports]&&exports&&!exports.nodeType&&exports,freeModule=objectTypes[typeof module]&&module&&!module.nodeType&&module,freeGlobal=freeExports&&freeModule&&\\\"object\\\"==typeof global&&global&&global.Object&&global,freeSelf=objectTypes[typeof self]&&self&&self.Object&&self,freeWindow=objectTypes[typeof window]&&window&&window.Object&&window,moduleExports=freeModule&&freeModule.exports===freeExports&&freeExports,root=freeGlobal||freeWindow!==(this&&this.window)&&freeWindow||freeSelf||this,arrayProto=Array.prototype,objectProto=Object.prototype,fnToString=Function.prototype.toString,hasOwnProperty=objectProto.hasOwnProperty,objToString=objectProto.toString,reIsNative=RegExp(\\\"^\\\"+escapeRegExp(objToString).replace(/toString|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g,\\\"$1.*?\\\")+\\\"$\\\"),ArrayBuffer=isNative(ArrayBuffer=root.ArrayBuffer)&&ArrayBuffer,bufferSlice=isNative(bufferSlice=ArrayBuffer&&new ArrayBuffer(0).slice)&&bufferSlice,floor=Math.floor,getOwnPropertySymbols=isNative(getOwnPropertySymbols=Object.getOwnPropertySymbols)&&getOwnPropertySymbols,getPrototypeOf=isNative(getPrototypeOf=Object.getPrototypeOf)&&getPrototypeOf,push=arrayProto.push,preventExtensions=isNative(Object.preventExtensions=Object.preventExtensions)&&preventExtensions,propertyIsEnumerable=objectProto.propertyIsEnumerable,Uint8Array=isNative(Uint8Array=root.Uint8Array)&&Uint8Array,Float64Array=function(){try{var func=isNative(func=root.Float64Array)&&func,result=new func(new ArrayBuffer(10),0,1)&&func}catch(e){}return result}(),nativeAssign=function(){var object={1:0},func=preventExtensions&&isNative(func=Object.assign)&&func;try{func(preventExtensions(object),\\\"xo\\\")}catch(e){}return!object[1]&&func}(),nativeIsArray=isNative(nativeIsArray=Array.isArray)&&nativeIsArray,nativeKeys=isNative(nativeKeys=Object.keys)&&nativeKeys,nativeMax=Math.max,nativeMin=Math.min,NEGATIVE_INFINITY=Number.NEGATIVE_INFINITY,MAX_ARRAY_LENGTH=Math.pow(2,32)-1,MAX_ARRAY_INDEX=MAX_ARRAY_LENGTH-1,HALF_MAX_ARRAY_LENGTH=MAX_ARRAY_LENGTH>>>1,FLOAT64_BYTES_PER_ELEMENT=Float64Array?Float64Array.BYTES_PER_ELEMENT:0,MAX_SAFE_INTEGER=Math.pow(2,53)-1,support=lodash.support={};(function(x){var Ctor=function(){this.x=x},props=[];Ctor.prototype={valueOf:x,y:x};for(var key in new Ctor)props.push(key);support.funcDecomp=/\\\\bthis\\\\b/.test(function(){return this}),support.funcNames=\\\"string\\\"==typeof Function.name;try{support.nonEnumArgs=!propertyIsEnumerable.call(arguments,1)}catch(e){support.nonEnumArgs=!0}})(1,0);var baseAssign=nativeAssign||function(object,source){return null==source?object:baseCopy(source,getSymbols(source),baseCopy(source,keys(source),object))},baseEach=createBaseEach(baseForOwn),baseFor=createBaseFor();bufferSlice||(bufferClone=ArrayBuffer&&Uint8Array?function(buffer){var byteLength=buffer.byteLength,floatLength=Float64Array?floor(byteLength/FLOAT64_BYTES_PER_ELEMENT):0,offset=floatLength*FLOAT64_BYTES_PER_ELEMENT,result=new ArrayBuffer(byteLength);if(floatLength){var view=new Float64Array(result,0,floatLength);view.set(new Float64Array(buffer,0,floatLength))}return byteLength!=offset&&(view=new Uint8Array(result,offset),view.set(new Uint8Array(buffer,offset))),result}:constant(null));var getLength=baseProperty(\\\"length\\\"),getSymbols=getOwnPropertySymbols?function(object){return getOwnPropertySymbols(toObject(object))}:constant([]),findLastIndex=createFindIndex(!0),zip=restParam(unzip),forEach=createForEach(arrayEach,baseEach),isArray=nativeIsArray||function(value){return isObjectLike(value)&&isLength(value.length)&&objToString.call(value)==arrayTag},isFunction=baseIsFunction(/x/)||Uint8Array&&!baseIsFunction(Uint8Array)?function(value){return objToString.call(value)==funcTag}:baseIsFunction,isPlainObject=getPrototypeOf?function(value){if(!value||objToString.call(value)!=objectTag)return!1;var valueOf=value.valueOf,objProto=isNative(valueOf)&&(objProto=getPrototypeOf(valueOf))&&getPrototypeOf(objProto);return objProto?value==objProto||getPrototypeOf(value)==objProto:shimIsPlainObject(value)}:shimIsPlainObject,assign=createAssigner(function(object,source,customizer){return customizer?assignWith(object,source,customizer):baseAssign(object,source)}),keys=nativeKeys?function(object){if(object)var Ctor=object.constructor,length=object.length;return\\\"function\\\"==typeof Ctor&&Ctor.prototype===object||\\\"function\\\"!=typeof object&&isLength(length)?shimKeys(object):isObject(object)?nativeKeys(object):[]}:shimKeys,merge=createAssigner(baseMerge);lodash.assign=assign,lodash.callback=callback,lodash.constant=constant,lodash.forEach=forEach,lodash.keys=keys,lodash.keysIn=keysIn,lodash.merge=merge,lodash.property=property,lodash.reject=reject,lodash.restParam=restParam,lodash.slice=slice,lodash.toPlainObject=toPlainObject,lodash.unzip=unzip,lodash.values=values,lodash.zip=zip,lodash.each=forEach,lodash.extend=assign,lodash.iteratee=callback,lodash.clone=clone,lodash.escapeRegExp=escapeRegExp,lodash.findLastIndex=findLastIndex,lodash.has=has,lodash.identity=identity,lodash.includes=includes,lodash.indexOf=indexOf,lodash.isArguments=isArguments,lodash.isArray=isArray,lodash.isEmpty=isEmpty,lodash.isFunction=isFunction,lodash.isNative=isNative,lodash.isNumber=isNumber,lodash.isObject=isObject,lodash.isPlainObject=isPlainObject,lodash.isString=isString,lodash.isTypedArray=isTypedArray,lodash.last=last,lodash.some=some,lodash.any=some,lodash.contains=includes,lodash.include=includes,lodash.VERSION=VERSION,freeExports&&freeModule?moduleExports?(freeModule.exports=lodash)._=lodash:freeExports._=lodash:root._=lodash\\n}).call(this)}).call(this,\\\"undefined\\\"!=typeof global?global:\\\"undefined\\\"!=typeof self?self:\\\"undefined\\\"!=typeof window?window:{})},{}],\\\"/node_modules/jshint/src/jshint.js\\\":[function(_dereq_,module,exports){var _=_dereq_(\\\"../lodash\\\"),events=_dereq_(\\\"events\\\"),vars=_dereq_(\\\"./vars.js\\\"),messages=_dereq_(\\\"./messages.js\\\"),Lexer=_dereq_(\\\"./lex.js\\\").Lexer,reg=_dereq_(\\\"./reg.js\\\"),state=_dereq_(\\\"./state.js\\\").state,style=_dereq_(\\\"./style.js\\\"),options=_dereq_(\\\"./options.js\\\"),scopeManager=_dereq_(\\\"./scope-manager.js\\\"),JSHINT=function(){\\\"use strict\\\";function checkOption(name,t){return name=name.trim(),/^[+-]W\\\\d{3}$/g.test(name)?!0:-1!==options.validNames.indexOf(name)||\\\"jslint\\\"===t.type||_.has(options.removed,name)?!0:(error(\\\"E001\\\",t,name),!1)}function isString(obj){return\\\"[object String]\\\"===Object.prototype.toString.call(obj)}function isIdentifier(tkn,value){return tkn?tkn.identifier&&tkn.value===value?!0:!1:!1}function isReserved(token){if(!token.reserved)return!1;var meta=token.meta;if(meta&&meta.isFutureReservedWord&&state.inES5()){if(!meta.es5)return!1;if(meta.strictOnly&&!state.option.strict&&!state.isStrict())return!1;if(token.isProperty)return!1}return!0}function supplant(str,data){return str.replace(/\\\\{([^{}]*)\\\\}/g,function(a,b){var r=data[b];return\\\"string\\\"==typeof r||\\\"number\\\"==typeof r?r:a})}function combine(dest,src){Object.keys(src).forEach(function(name){_.has(JSHINT.blacklist,name)||(dest[name]=src[name])})}function processenforceall(){if(state.option.enforceall){for(var enforceopt in options.bool.enforcing)void 0!==state.option[enforceopt]||options.noenforceall[enforceopt]||(state.option[enforceopt]=!0);for(var relaxopt in options.bool.relaxing)void 0===state.option[relaxopt]&&(state.option[relaxopt]=!1)}}function assume(){processenforceall(),state.option.esversion||state.option.moz||(state.option.esversion=state.option.es3?3:state.option.esnext?6:5),state.inES5()&&combine(predefined,vars.ecmaIdentifiers[5]),state.inES6()&&combine(predefined,vars.ecmaIdentifiers[6]),state.option.module&&(state.option.strict===!0&&(state.option.strict=\\\"global\\\"),state.inES6()||warning(\\\"W134\\\",state.tokens.next,\\\"module\\\",6)),state.option.couch&&combine(predefined,vars.couch),state.option.qunit&&combine(predefined,vars.qunit),state.option.rhino&&combine(predefined,vars.rhino),state.option.shelljs&&(combine(predefined,vars.shelljs),combine(predefined,vars.node)),state.option.typed&&combine(predefined,vars.typed),state.option.phantom&&(combine(predefined,vars.phantom),state.option.strict===!0&&(state.option.strict=\\\"global\\\")),state.option.prototypejs&&combine(predefined,vars.prototypejs),state.option.node&&(combine(predefined,vars.node),combine(predefined,vars.typed),state.option.strict===!0&&(state.option.strict=\\\"global\\\")),state.option.devel&&combine(predefined,vars.devel),state.option.dojo&&combine(predefined,vars.dojo),state.option.browser&&(combine(predefined,vars.browser),combine(predefined,vars.typed)),state.option.browserify&&(combine(predefined,vars.browser),combine(predefined,vars.typed),combine(predefined,vars.browserify),state.option.strict===!0&&(state.option.strict=\\\"global\\\")),state.option.nonstandard&&combine(predefined,vars.nonstandard),state.option.jasmine&&combine(predefined,vars.jasmine),state.option.jquery&&combine(predefined,vars.jquery),state.option.mootools&&combine(predefined,vars.mootools),state.option.worker&&combine(predefined,vars.worker),state.option.wsh&&combine(predefined,vars.wsh),state.option.globalstrict&&state.option.strict!==!1&&(state.option.strict=\\\"global\\\"),state.option.yui&&combine(predefined,vars.yui),state.option.mocha&&combine(predefined,vars.mocha)}function quit(code,line,chr){var percentage=Math.floor(100*(line/state.lines.length)),message=messages.errors[code].desc;throw{name:\\\"JSHintError\\\",line:line,character:chr,message:message+\\\" (\\\"+percentage+\\\"% scanned).\\\",raw:message,code:code}}function removeIgnoredMessages(){var ignored=state.ignoredLines;_.isEmpty(ignored)||(JSHINT.errors=_.reject(JSHINT.errors,function(err){return ignored[err.line]}))}function warning(code,t,a,b,c,d){var ch,l,w,msg;if(/^W\\\\d{3}$/.test(code)){if(state.ignored[code])return;msg=messages.warnings[code]}else/E\\\\d{3}/.test(code)?msg=messages.errors[code]:/I\\\\d{3}/.test(code)&&(msg=messages.info[code]);return t=t||state.tokens.next||{},\\\"(end)\\\"===t.id&&(t=state.tokens.curr),l=t.line||0,ch=t.from||0,w={id:\\\"(error)\\\",raw:msg.desc,code:msg.code,evidence:state.lines[l-1]||\\\"\\\",line:l,character:ch,scope:JSHINT.scope,a:a,b:b,c:c,d:d},w.reason=supplant(msg.desc,w),JSHINT.errors.push(w),removeIgnoredMessages(),JSHINT.errors.length>=state.option.maxerr&&quit(\\\"E043\\\",l,ch),w}function warningAt(m,l,ch,a,b,c,d){return warning(m,{line:l,from:ch},a,b,c,d)}function error(m,t,a,b,c,d){warning(m,t,a,b,c,d)}function errorAt(m,l,ch,a,b,c,d){return error(m,{line:l,from:ch},a,b,c,d)}function addInternalSrc(elem,src){var i;return i={id:\\\"(internal)\\\",elem:elem,value:src},JSHINT.internals.push(i),i}function doOption(){var nt=state.tokens.next,body=nt.body.match(/(-\\\\s+)?[^\\\\s,:]+(?:\\\\s*:\\\\s*(-\\\\s+)?[^\\\\s,]+)?/g)||[],predef={};if(\\\"globals\\\"===nt.type){body.forEach(function(g,idx){g=g.split(\\\":\\\");var key=(g[0]||\\\"\\\").trim(),val=(g[1]||\\\"\\\").trim();if(\\\"-\\\"===key||!key.length){if(idx>0&&idx===body.length-1)return;return error(\\\"E002\\\",nt),void 0}\\\"-\\\"===key.charAt(0)?(key=key.slice(1),val=!1,JSHINT.blacklist[key]=key,delete predefined[key]):predef[key]=\\\"true\\\"===val}),combine(predefined,predef);for(var key in predef)_.has(predef,key)&&(declared[key]=nt)}\\\"exported\\\"===nt.type&&body.forEach(function(e,idx){if(!e.length){if(idx>0&&idx===body.length-1)return;return error(\\\"E002\\\",nt),void 0}state.funct[\\\"(scope)\\\"].addExported(e)}),\\\"members\\\"===nt.type&&(membersOnly=membersOnly||{},body.forEach(function(m){var ch1=m.charAt(0),ch2=m.charAt(m.length-1);ch1!==ch2||'\\\"'!==ch1&&\\\"'\\\"!==ch1||(m=m.substr(1,m.length-2).replace('\\\\\\\\\\\"','\\\"')),membersOnly[m]=!1}));var numvals=[\\\"maxstatements\\\",\\\"maxparams\\\",\\\"maxdepth\\\",\\\"maxcomplexity\\\",\\\"maxerr\\\",\\\"maxlen\\\",\\\"indent\\\"];(\\\"jshint\\\"===nt.type||\\\"jslint\\\"===nt.type)&&(body.forEach(function(g){g=g.split(\\\":\\\");var key=(g[0]||\\\"\\\").trim(),val=(g[1]||\\\"\\\").trim();if(checkOption(key,nt))if(numvals.indexOf(key)>=0)if(\\\"false\\\"!==val){if(val=+val,\\\"number\\\"!=typeof val||!isFinite(val)||0>=val||Math.floor(val)!==val)return error(\\\"E032\\\",nt,g[1].trim()),void 0;state.option[key]=val}else state.option[key]=\\\"indent\\\"===key?4:!1;else{if(\\\"validthis\\\"===key)return state.funct[\\\"(global)\\\"]?void error(\\\"E009\\\"):\\\"true\\\"!==val&&\\\"false\\\"!==val?void error(\\\"E002\\\",nt):(state.option.validthis=\\\"true\\\"===val,void 0);if(\\\"quotmark\\\"!==key)if(\\\"shadow\\\"!==key)if(\\\"unused\\\"!==key)if(\\\"latedef\\\"!==key)if(\\\"ignore\\\"!==key)if(\\\"strict\\\"!==key){\\\"module\\\"===key&&(hasParsedCode(state.funct)||error(\\\"E055\\\",state.tokens.next,\\\"module\\\"));var esversions={es3:3,es5:5,esnext:6};if(!_.has(esversions,key)){if(\\\"esversion\\\"===key){switch(val){case\\\"5\\\":state.inES5(!0)&&warning(\\\"I003\\\");case\\\"3\\\":case\\\"6\\\":state.option.moz=!1,state.option.esversion=+val;break;case\\\"2015\\\":state.option.moz=!1,state.option.esversion=6;break;default:error(\\\"E002\\\",nt)}return hasParsedCode(state.funct)||error(\\\"E055\\\",state.tokens.next,\\\"esversion\\\"),void 0}var match=/^([+-])(W\\\\d{3})$/g.exec(key);if(match)return state.ignored[match[2]]=\\\"-\\\"===match[1],void 0;var tn;return\\\"true\\\"===val||\\\"false\\\"===val?(\\\"jslint\\\"===nt.type?(tn=options.renamed[key]||key,state.option[tn]=\\\"true\\\"===val,void 0!==options.inverted[tn]&&(state.option[tn]=!state.option[tn])):state.option[key]=\\\"true\\\"===val,\\\"newcap\\\"===key&&(state.option[\\\"(explicitNewcap)\\\"]=!0),void 0):(error(\\\"E002\\\",nt),void 0)}switch(val){case\\\"true\\\":state.option.moz=!1,state.option.esversion=esversions[key];break;case\\\"false\\\":state.option.moz||(state.option.esversion=5);break;default:error(\\\"E002\\\",nt)}}else switch(val){case\\\"true\\\":state.option.strict=!0;break;case\\\"false\\\":state.option.strict=!1;break;case\\\"func\\\":case\\\"global\\\":case\\\"implied\\\":state.option.strict=val;break;default:error(\\\"E002\\\",nt)}else switch(val){case\\\"line\\\":state.ignoredLines[nt.line]=!0,removeIgnoredMessages();break;default:error(\\\"E002\\\",nt)}else switch(val){case\\\"true\\\":state.option.latedef=!0;break;case\\\"false\\\":state.option.latedef=!1;break;case\\\"nofunc\\\":state.option.latedef=\\\"nofunc\\\";break;default:error(\\\"E002\\\",nt)}else switch(val){case\\\"true\\\":state.option.unused=!0;break;case\\\"false\\\":state.option.unused=!1;break;case\\\"vars\\\":case\\\"strict\\\":state.option.unused=val;break;default:error(\\\"E002\\\",nt)}else switch(val){case\\\"true\\\":state.option.shadow=!0;break;case\\\"outer\\\":state.option.shadow=\\\"outer\\\";break;case\\\"false\\\":case\\\"inner\\\":state.option.shadow=\\\"inner\\\";break;default:error(\\\"E002\\\",nt)}else switch(val){case\\\"true\\\":case\\\"false\\\":state.option.quotmark=\\\"true\\\"===val;break;case\\\"double\\\":case\\\"single\\\":state.option.quotmark=val;break;default:error(\\\"E002\\\",nt)}}}),assume())}function peek(p){var t,i=p||0,j=lookahead.length;if(j>i)return lookahead[i];for(;i>=j;)t=lookahead[j],t||(t=lookahead[j]=lex.token()),j+=1;return t||\\\"(end)\\\"!==state.tokens.next.id?t:state.tokens.next}function peekIgnoreEOL(){var t,i=0;do t=peek(i++);while(\\\"(endline)\\\"===t.id);return t}function advance(id,t){switch(state.tokens.curr.id){case\\\"(number)\\\":\\\".\\\"===state.tokens.next.id&&warning(\\\"W005\\\",state.tokens.curr);break;case\\\"-\\\":(\\\"-\\\"===state.tokens.next.id||\\\"--\\\"===state.tokens.next.id)&&warning(\\\"W006\\\");break;case\\\"+\\\":(\\\"+\\\"===state.tokens.next.id||\\\"++\\\"===state.tokens.next.id)&&warning(\\\"W007\\\")}for(id&&state.tokens.next.id!==id&&(t?\\\"(end)\\\"===state.tokens.next.id?error(\\\"E019\\\",t,t.id):error(\\\"E020\\\",state.tokens.next,id,t.id,t.line,state.tokens.next.value):(\\\"(identifier)\\\"!==state.tokens.next.type||state.tokens.next.value!==id)&&warning(\\\"W116\\\",state.tokens.next,id,state.tokens.next.value)),state.tokens.prev=state.tokens.curr,state.tokens.curr=state.tokens.next;;){if(state.tokens.next=lookahead.shift()||lex.token(),state.tokens.next||quit(\\\"E041\\\",state.tokens.curr.line),\\\"(end)\\\"===state.tokens.next.id||\\\"(error)\\\"===state.tokens.next.id)return;if(state.tokens.next.check&&state.tokens.next.check(),state.tokens.next.isSpecial)\\\"falls through\\\"===state.tokens.next.type?state.tokens.curr.caseFallsThrough=!0:doOption();else if(\\\"(endline)\\\"!==state.tokens.next.id)break}}function isInfix(token){return token.infix||!token.identifier&&!token.template&&!!token.led}function isEndOfExpr(){var curr=state.tokens.curr,next=state.tokens.next;return\\\";\\\"===next.id||\\\"}\\\"===next.id||\\\":\\\"===next.id?!0:isInfix(next)===isInfix(curr)||\\\"yield\\\"===curr.id&&state.inMoz()?curr.line!==startLine(next):!1}function isBeginOfExpr(prev){return!prev.left&&\\\"unary\\\"!==prev.arity}function expression(rbp,initial){var left,isArray=!1,isObject=!1,isLetExpr=!1;state.nameStack.push(),initial||\\\"let\\\"!==state.tokens.next.value||\\\"(\\\"!==peek(0).value||(state.inMoz()||warning(\\\"W118\\\",state.tokens.next,\\\"let expressions\\\"),isLetExpr=!0,state.funct[\\\"(scope)\\\"].stack(),advance(\\\"let\\\"),advance(\\\"(\\\"),state.tokens.prev.fud(),advance(\\\")\\\")),\\\"(end)\\\"===state.tokens.next.id&&error(\\\"E006\\\",state.tokens.curr);var isDangerous=state.option.asi&&state.tokens.prev.line!==startLine(state.tokens.curr)&&_.contains([\\\"]\\\",\\\")\\\"],state.tokens.prev.id)&&_.contains([\\\"[\\\",\\\"(\\\"],state.tokens.curr.id);if(isDangerous&&warning(\\\"W014\\\",state.tokens.curr,state.tokens.curr.id),advance(),initial&&(state.funct[\\\"(verb)\\\"]=state.tokens.curr.value,state.tokens.curr.beginsStmt=!0),initial===!0&&state.tokens.curr.fud)left=state.tokens.curr.fud();else for(state.tokens.curr.nud?left=state.tokens.curr.nud():error(\\\"E030\\\",state.tokens.curr,state.tokens.curr.id);(state.tokens.next.lbp>rbp||\\\"(template)\\\"===state.tokens.next.type)&&!isEndOfExpr();)isArray=\\\"Array\\\"===state.tokens.curr.value,isObject=\\\"Object\\\"===state.tokens.curr.value,left&&(left.value||left.first&&left.first.value)&&(\\\"new\\\"!==left.value||left.first&&left.first.value&&\\\".\\\"===left.first.value)&&(isArray=!1,left.value!==state.tokens.curr.value&&(isObject=!1)),advance(),isArray&&\\\"(\\\"===state.tokens.curr.id&&\\\")\\\"===state.tokens.next.id&&warning(\\\"W009\\\",state.tokens.curr),isObject&&\\\"(\\\"===state.tokens.curr.id&&\\\")\\\"===state.tokens.next.id&&warning(\\\"W010\\\",state.tokens.curr),left&&state.tokens.curr.led?left=state.tokens.curr.led(left):error(\\\"E033\\\",state.tokens.curr,state.tokens.curr.id);return isLetExpr&&state.funct[\\\"(scope)\\\"].unstack(),state.nameStack.pop(),left}function startLine(token){return token.startLine||token.line}function nobreaknonadjacent(left,right){left=left||state.tokens.curr,right=right||state.tokens.next,state.option.laxbreak||left.line===startLine(right)||warning(\\\"W014\\\",right,right.value)}function nolinebreak(t){t=t||state.tokens.curr,t.line!==startLine(state.tokens.next)&&warning(\\\"E022\\\",t,t.value)}function nobreakcomma(left,right){left.line!==startLine(right)&&(state.option.laxcomma||(comma.first&&(warning(\\\"I001\\\"),comma.first=!1),warning(\\\"W014\\\",left,right.value)))}function comma(opts){if(opts=opts||{},opts.peek?nobreakcomma(state.tokens.prev,state.tokens.curr):(nobreakcomma(state.tokens.curr,state.tokens.next),advance(\\\",\\\")),state.tokens.next.identifier&&(!opts.property||!state.inES5()))switch(state.tokens.next.value){case\\\"break\\\":case\\\"case\\\":case\\\"catch\\\":case\\\"continue\\\":case\\\"default\\\":case\\\"do\\\":case\\\"else\\\":case\\\"finally\\\":case\\\"for\\\":case\\\"if\\\":case\\\"in\\\":case\\\"instanceof\\\":case\\\"return\\\":case\\\"switch\\\":case\\\"throw\\\":case\\\"try\\\":case\\\"var\\\":case\\\"let\\\":case\\\"while\\\":case\\\"with\\\":return error(\\\"E024\\\",state.tokens.next,state.tokens.next.value),!1}if(\\\"(punctuator)\\\"===state.tokens.next.type)switch(state.tokens.next.value){case\\\"}\\\":case\\\"]\\\":case\\\",\\\":if(opts.allowTrailing)return!0;case\\\")\\\":return error(\\\"E024\\\",state.tokens.next,state.tokens.next.value),!1}return!0}function symbol(s,p){var x=state.syntax[s];return x&&\\\"object\\\"==typeof x||(state.syntax[s]=x={id:s,lbp:p,value:s}),x}function delim(s){var x=symbol(s,0);return x.delim=!0,x}function stmt(s,f){var x=delim(s);return x.identifier=x.reserved=!0,x.fud=f,x}function blockstmt(s,f){var x=stmt(s,f);return x.block=!0,x}function reserveName(x){var c=x.id.charAt(0);return(c>=\\\"a\\\"&&\\\"z\\\">=c||c>=\\\"A\\\"&&\\\"Z\\\">=c)&&(x.identifier=x.reserved=!0),x}function prefix(s,f){var x=symbol(s,150);return reserveName(x),x.nud=\\\"function\\\"==typeof f?f:function(){return this.arity=\\\"unary\\\",this.right=expression(150),(\\\"++\\\"===this.id||\\\"--\\\"===this.id)&&(state.option.plusplus?warning(\\\"W016\\\",this,this.id):!this.right||this.right.identifier&&!isReserved(this.right)||\\\".\\\"===this.right.id||\\\"[\\\"===this.right.id||warning(\\\"W017\\\",this),this.right&&this.right.isMetaProperty?error(\\\"E031\\\",this):this.right&&this.right.identifier&&state.funct[\\\"(scope)\\\"].block.modify(this.right.value,this)),this},x}function type(s,f){var x=delim(s);return x.type=s,x.nud=f,x}function reserve(name,func){var x=type(name,func);return x.identifier=!0,x.reserved=!0,x}function FutureReservedWord(name,meta){var x=type(name,meta&&meta.nud||function(){return this});return meta=meta||{},meta.isFutureReservedWord=!0,x.value=name,x.identifier=!0,x.reserved=!0,x.meta=meta,x}function reservevar(s,v){return reserve(s,function(){return\\\"function\\\"==typeof v&&v(this),this})}function infix(s,f,p,w){var x=symbol(s,p);return reserveName(x),x.infix=!0,x.led=function(left){return w||nobreaknonadjacent(state.tokens.prev,state.tokens.curr),\\\"in\\\"!==s&&\\\"instanceof\\\"!==s||\\\"!\\\"!==left.id||warning(\\\"W018\\\",left,\\\"!\\\"),\\\"function\\\"==typeof f?f(left,this):(this.left=left,this.right=expression(p),this)},x}function application(s){var x=symbol(s,42);return x.led=function(left){return nobreaknonadjacent(state.tokens.prev,state.tokens.curr),this.left=left,this.right=doFunction({type:\\\"arrow\\\",loneArg:left}),this},x}function relation(s,f){var x=symbol(s,100);return x.led=function(left){nobreaknonadjacent(state.tokens.prev,state.tokens.curr),this.left=left;var right=this.right=expression(100);return isIdentifier(left,\\\"NaN\\\")||isIdentifier(right,\\\"NaN\\\")?warning(\\\"W019\\\",this):f&&f.apply(this,[left,right]),left&&right||quit(\\\"E041\\\",state.tokens.curr.line),\\\"!\\\"===left.id&&warning(\\\"W018\\\",left,\\\"!\\\"),\\\"!\\\"===right.id&&warning(\\\"W018\\\",right,\\\"!\\\"),this},x}function isPoorRelation(node){return node&&(\\\"(number)\\\"===node.type&&0===+node.value||\\\"(string)\\\"===node.type&&\\\"\\\"===node.value||\\\"null\\\"===node.type&&!state.option.eqnull||\\\"true\\\"===node.type||\\\"false\\\"===node.type||\\\"undefined\\\"===node.type)}function isTypoTypeof(left,right,state){var values;return state.option.notypeof?!1:left&&right?(values=state.inES6()?typeofValues.es6:typeofValues.es3,\\\"(identifier)\\\"===right.type&&\\\"typeof\\\"===right.value&&\\\"(string)\\\"===left.type?!_.contains(values,left.value):!1):!1}function isGlobalEval(left,state){var isGlobal=!1;return\\\"this\\\"===left.type&&null===state.funct[\\\"(context)\\\"]?isGlobal=!0:\\\"(identifier)\\\"===left.type&&(state.option.node&&\\\"global\\\"===left.value?isGlobal=!0:!state.option.browser||\\\"window\\\"!==left.value&&\\\"document\\\"!==left.value||(isGlobal=!0)),isGlobal}function findNativePrototype(left){function walkPrototype(obj){return\\\"object\\\"==typeof obj?\\\"prototype\\\"===obj.right?obj:walkPrototype(obj.left):void 0}function walkNative(obj){for(;!obj.identifier&&\\\"object\\\"==typeof obj.left;)obj=obj.left;return obj.identifier&&natives.indexOf(obj.value)>=0?obj.value:void 0}var natives=[\\\"Array\\\",\\\"ArrayBuffer\\\",\\\"Boolean\\\",\\\"Collator\\\",\\\"DataView\\\",\\\"Date\\\",\\\"DateTimeFormat\\\",\\\"Error\\\",\\\"EvalError\\\",\\\"Float32Array\\\",\\\"Float64Array\\\",\\\"Function\\\",\\\"Infinity\\\",\\\"Intl\\\",\\\"Int16Array\\\",\\\"Int32Array\\\",\\\"Int8Array\\\",\\\"Iterator\\\",\\\"Number\\\",\\\"NumberFormat\\\",\\\"Object\\\",\\\"RangeError\\\",\\\"ReferenceError\\\",\\\"RegExp\\\",\\\"StopIteration\\\",\\\"String\\\",\\\"SyntaxError\\\",\\\"TypeError\\\",\\\"Uint16Array\\\",\\\"Uint32Array\\\",\\\"Uint8Array\\\",\\\"Uint8ClampedArray\\\",\\\"URIError\\\"],prototype=walkPrototype(left);return prototype?walkNative(prototype):void 0}function checkLeftSideAssign(left,assignToken,options){var allowDestructuring=options&&options.allowDestructuring;if(assignToken=assignToken||left,state.option.freeze){var nativeObject=findNativePrototype(left);nativeObject&&warning(\\\"W121\\\",left,nativeObject)}return left.identifier&&!left.isMetaProperty&&state.funct[\\\"(scope)\\\"].block.reassign(left.value,left),\\\".\\\"===left.id?((!left.left||\\\"arguments\\\"===left.left.value&&!state.isStrict())&&warning(\\\"E031\\\",assignToken),state.nameStack.set(state.tokens.prev),!0):\\\"{\\\"===left.id||\\\"[\\\"===left.id?(allowDestructuring&&state.tokens.curr.left.destructAssign?state.tokens.curr.left.destructAssign.forEach(function(t){t.id&&state.funct[\\\"(scope)\\\"].block.modify(t.id,t.token)}):\\\"{\\\"!==left.id&&left.left?\\\"arguments\\\"!==left.left.value||state.isStrict()||warning(\\\"E031\\\",assignToken):warning(\\\"E031\\\",assignToken),\\\"[\\\"===left.id&&state.nameStack.set(left.right),!0):left.isMetaProperty?(error(\\\"E031\\\",assignToken),!0):left.identifier&&!isReserved(left)?(\\\"exception\\\"===state.funct[\\\"(scope)\\\"].labeltype(left.value)&&warning(\\\"W022\\\",left),state.nameStack.set(left),!0):(left===state.syntax[\\\"function\\\"]&&warning(\\\"W023\\\",state.tokens.curr),!1)}function assignop(s,f,p){var x=infix(s,\\\"function\\\"==typeof f?f:function(left,that){return that.left=left,left&&checkLeftSideAssign(left,that,{allowDestructuring:!0})?(that.right=expression(10),that):(error(\\\"E031\\\",that),void 0)},p);return x.exps=!0,x.assign=!0,x}function bitwise(s,f,p){var x=symbol(s,p);return reserveName(x),x.led=\\\"function\\\"==typeof f?f:function(left){return state.option.bitwise&&warning(\\\"W016\\\",this,this.id),this.left=left,this.right=expression(p),this},x}function bitwiseassignop(s){return assignop(s,function(left,that){return state.option.bitwise&&warning(\\\"W016\\\",that,that.id),left&&checkLeftSideAssign(left,that)?(that.right=expression(10),that):(error(\\\"E031\\\",that),void 0)},20)}function suffix(s){var x=symbol(s,150);return x.led=function(left){return state.option.plusplus?warning(\\\"W016\\\",this,this.id):left.identifier&&!isReserved(left)||\\\".\\\"===left.id||\\\"[\\\"===left.id||warning(\\\"W017\\\",this),left.isMetaProperty?error(\\\"E031\\\",this):left&&left.identifier&&state.funct[\\\"(scope)\\\"].block.modify(left.value,left),this.left=left,this},x}function optionalidentifier(fnparam,prop,preserve){if(state.tokens.next.identifier){preserve||advance();var curr=state.tokens.curr,val=state.tokens.curr.value;return isReserved(curr)?prop&&state.inES5()?val:fnparam&&\\\"undefined\\\"===val?val:(warning(\\\"W024\\\",state.tokens.curr,state.tokens.curr.id),val):val}}function identifier(fnparam,prop){var i=optionalidentifier(fnparam,prop,!1);if(i)return i;if(\\\"...\\\"===state.tokens.next.value){if(state.inES6(!0)||warning(\\\"W119\\\",state.tokens.next,\\\"spread/rest operator\\\",\\\"6\\\"),advance(),checkPunctuator(state.tokens.next,\\\"...\\\"))for(warning(\\\"E024\\\",state.tokens.next,\\\"...\\\");checkPunctuator(state.tokens.next,\\\"...\\\");)advance();return state.tokens.next.identifier?identifier(fnparam,prop):(warning(\\\"E024\\\",state.tokens.curr,\\\"...\\\"),void 0)}error(\\\"E030\\\",state.tokens.next,state.tokens.next.value),\\\";\\\"!==state.tokens.next.id&&advance()}function reachable(controlToken){var t,i=0;if(\\\";\\\"===state.tokens.next.id&&!controlToken.inBracelessBlock)for(;;){do t=peek(i),i+=1;while(\\\"(end)\\\"!==t.id&&\\\"(comment)\\\"===t.id);if(t.reach)return;if(\\\"(endline)\\\"!==t.id){if(\\\"function\\\"===t.id){state.option.latedef===!0&&warning(\\\"W026\\\",t);break}warning(\\\"W027\\\",t,t.value,controlToken.value);break}}}function parseFinalSemicolon(){if(\\\";\\\"!==state.tokens.next.id){if(state.tokens.next.isUnclosed)return advance();var sameLine=startLine(state.tokens.next)===state.tokens.curr.line&&\\\"(end)\\\"!==state.tokens.next.id,blockEnd=checkPunctuator(state.tokens.next,\\\"}\\\");sameLine&&!blockEnd?errorAt(\\\"E058\\\",state.tokens.curr.line,state.tokens.curr.character):state.option.asi||(blockEnd&&!state.option.lastsemic||!sameLine)&&warningAt(\\\"W033\\\",state.tokens.curr.line,state.tokens.curr.character)}else advance(\\\";\\\")}function statement(){var r,i=indent,t=state.tokens.next,hasOwnScope=!1;if(\\\";\\\"===t.id)return advance(\\\";\\\"),void 0;var res=isReserved(t);if(res&&t.meta&&t.meta.isFutureReservedWord&&\\\":\\\"===peek().id&&(warning(\\\"W024\\\",t,t.id),res=!1),t.identifier&&!res&&\\\":\\\"===peek().id&&(advance(),advance(\\\":\\\"),hasOwnScope=!0,state.funct[\\\"(scope)\\\"].stack(),state.funct[\\\"(scope)\\\"].block.addBreakLabel(t.value,{token:state.tokens.curr}),state.tokens.next.labelled||\\\"{\\\"===state.tokens.next.value||warning(\\\"W028\\\",state.tokens.next,t.value,state.tokens.next.value),state.tokens.next.label=t.value,t=state.tokens.next),\\\"{\\\"===t.id){var iscase=\\\"case\\\"===state.funct[\\\"(verb)\\\"]&&\\\":\\\"===state.tokens.curr.value;return block(!0,!0,!1,!1,iscase),void 0}return r=expression(0,!0),!r||r.identifier&&\\\"function\\\"===r.value||\\\"(punctuator)\\\"===r.type&&r.left&&r.left.identifier&&\\\"function\\\"===r.left.value||state.isStrict()||\\\"global\\\"!==state.option.strict||warning(\\\"E007\\\"),t.block||(state.option.expr||r&&r.exps?state.option.nonew&&r&&r.left&&\\\"(\\\"===r.id&&\\\"new\\\"===r.left.id&&warning(\\\"W031\\\",t):warning(\\\"W030\\\",state.tokens.curr),parseFinalSemicolon()),indent=i,hasOwnScope&&state.funct[\\\"(scope)\\\"].unstack(),r}function statements(){for(var p,a=[];!state.tokens.next.reach&&\\\"(end)\\\"!==state.tokens.next.id;)\\\";\\\"===state.tokens.next.id?(p=peek(),(!p||\\\"(\\\"!==p.id&&\\\"[\\\"!==p.id)&&warning(\\\"W032\\\"),advance(\\\";\\\")):a.push(statement());return a}function directives(){for(var i,p,pn;\\\"(string)\\\"===state.tokens.next.id;){if(p=peek(0),\\\"(endline)\\\"===p.id){i=1;do pn=peek(i++);while(\\\"(endline)\\\"===pn.id);if(\\\";\\\"===pn.id)p=pn;else{if(\\\"[\\\"===pn.value||\\\".\\\"===pn.value)break;state.option.asi&&\\\"(\\\"!==pn.value||warning(\\\"W033\\\",state.tokens.next)}}else{if(\\\".\\\"===p.id||\\\"[\\\"===p.id)break;\\\";\\\"!==p.id&&warning(\\\"W033\\\",p)}advance();var directive=state.tokens.curr.value;(state.directive[directive]||\\\"use strict\\\"===directive&&\\\"implied\\\"===state.option.strict)&&warning(\\\"W034\\\",state.tokens.curr,directive),state.directive[directive]=!0,\\\";\\\"===p.id&&advance(\\\";\\\")}state.isStrict()&&(state.option[\\\"(explicitNewcap)\\\"]||(state.option.newcap=!0),state.option.undef=!0)}function block(ordinary,stmt,isfunc,isfatarrow,iscase){var a,m,t,line,d,b=inblock,old_indent=indent;inblock=ordinary,t=state.tokens.next;var metrics=state.funct[\\\"(metrics)\\\"];if(metrics.nestedBlockDepth+=1,metrics.verifyMaxNestedBlockDepthPerFunction(),\\\"{\\\"===state.tokens.next.id){if(advance(\\\"{\\\"),state.funct[\\\"(scope)\\\"].stack(),line=state.tokens.curr.line,\\\"}\\\"!==state.tokens.next.id){for(indent+=state.option.indent;!ordinary&&state.tokens.next.from>indent;)indent+=state.option.indent;if(isfunc){m={};for(d in state.directive)_.has(state.directive,d)&&(m[d]=state.directive[d]);directives(),state.option.strict&&state.funct[\\\"(context)\\\"][\\\"(global)\\\"]&&(m[\\\"use strict\\\"]||state.isStrict()||warning(\\\"E007\\\"))}a=statements(),metrics.statementCount+=a.length,indent-=state.option.indent}advance(\\\"}\\\",t),isfunc&&(state.funct[\\\"(scope)\\\"].validateParams(),m&&(state.directive=m)),state.funct[\\\"(scope)\\\"].unstack(),indent=old_indent}else if(ordinary)state.funct[\\\"(noblockscopedvar)\\\"]=\\\"for\\\"!==state.tokens.next.id,state.funct[\\\"(scope)\\\"].stack(),(!stmt||state.option.curly)&&warning(\\\"W116\\\",state.tokens.next,\\\"{\\\",state.tokens.next.value),state.tokens.next.inBracelessBlock=!0,indent+=state.option.indent,a=[statement()],indent-=state.option.indent,state.funct[\\\"(scope)\\\"].unstack(),delete state.funct[\\\"(noblockscopedvar)\\\"];else if(isfunc){if(state.funct[\\\"(scope)\\\"].stack(),m={},!stmt||isfatarrow||state.inMoz()||error(\\\"W118\\\",state.tokens.curr,\\\"function closure expressions\\\"),!stmt)for(d in state.directive)_.has(state.directive,d)&&(m[d]=state.directive[d]);expression(10),state.option.strict&&state.funct[\\\"(context)\\\"][\\\"(global)\\\"]&&(m[\\\"use strict\\\"]||state.isStrict()||warning(\\\"E007\\\")),state.funct[\\\"(scope)\\\"].unstack()}else error(\\\"E021\\\",state.tokens.next,\\\"{\\\",state.tokens.next.value);switch(state.funct[\\\"(verb)\\\"]){case\\\"break\\\":case\\\"continue\\\":case\\\"return\\\":case\\\"throw\\\":if(iscase)break;default:state.funct[\\\"(verb)\\\"]=null}return inblock=b,!ordinary||!state.option.noempty||a&&0!==a.length||warning(\\\"W035\\\",state.tokens.prev),metrics.nestedBlockDepth-=1,a}function countMember(m){membersOnly&&\\\"boolean\\\"!=typeof membersOnly[m]&&warning(\\\"W036\\\",state.tokens.curr,m),\\\"number\\\"==typeof member[m]?member[m]+=1:member[m]=1}function comprehensiveArrayExpression(){var res={};res.exps=!0,state.funct[\\\"(comparray)\\\"].stack();var reversed=!1;return\\\"for\\\"!==state.tokens.next.value&&(reversed=!0,state.inMoz()||warning(\\\"W116\\\",state.tokens.next,\\\"for\\\",state.tokens.next.value),state.funct[\\\"(comparray)\\\"].setState(\\\"use\\\"),res.right=expression(10)),advance(\\\"for\\\"),\\\"each\\\"===state.tokens.next.value&&(advance(\\\"each\\\"),state.inMoz()||warning(\\\"W118\\\",state.tokens.curr,\\\"for each\\\")),advance(\\\"(\\\"),state.funct[\\\"(comparray)\\\"].setState(\\\"define\\\"),res.left=expression(130),_.contains([\\\"in\\\",\\\"of\\\"],state.tokens.next.value)?advance():error(\\\"E045\\\",state.tokens.curr),state.funct[\\\"(comparray)\\\"].setState(\\\"generate\\\"),expression(10),advance(\\\")\\\"),\\\"if\\\"===state.tokens.next.value&&(advance(\\\"if\\\"),advance(\\\"(\\\"),state.funct[\\\"(comparray)\\\"].setState(\\\"filter\\\"),res.filter=expression(10),advance(\\\")\\\")),reversed||(state.funct[\\\"(comparray)\\\"].setState(\\\"use\\\"),res.right=expression(10)),advance(\\\"]\\\"),state.funct[\\\"(comparray)\\\"].unstack(),res}function isMethod(){return state.funct[\\\"(statement)\\\"]&&\\\"class\\\"===state.funct[\\\"(statement)\\\"].type||state.funct[\\\"(context)\\\"]&&\\\"class\\\"===state.funct[\\\"(context)\\\"][\\\"(verb)\\\"]}function isPropertyName(token){return token.identifier||\\\"(string)\\\"===token.id||\\\"(number)\\\"===token.id}function propertyName(preserveOrToken){var id,preserve=!0;return\\\"object\\\"==typeof preserveOrToken?id=preserveOrToken:(preserve=preserveOrToken,id=optionalidentifier(!1,!0,preserve)),id?\\\"object\\\"==typeof id&&(\\\"(string)\\\"===id.id||\\\"(identifier)\\\"===id.id?id=id.value:\\\"(number)\\\"===id.id&&(id=\\\"\\\"+id.value)):\\\"(string)\\\"===state.tokens.next.id?(id=state.tokens.next.value,preserve||advance()):\\\"(number)\\\"===state.tokens.next.id&&(id=\\\"\\\"+state.tokens.next.value,preserve||advance()),\\\"hasOwnProperty\\\"===id&&warning(\\\"W001\\\"),id}function functionparams(options){function addParam(addParamArgs){state.funct[\\\"(scope)\\\"].addParam.apply(state.funct[\\\"(scope)\\\"],addParamArgs)}var next,ident,t,paramsIds=[],tokens=[],pastDefault=!1,pastRest=!1,arity=0,loneArg=options&&options.loneArg;if(loneArg&&loneArg.identifier===!0)return state.funct[\\\"(scope)\\\"].addParam(loneArg.value,loneArg),{arity:1,params:[loneArg.value]};if(next=state.tokens.next,options&&options.parsedOpening||advance(\\\"(\\\"),\\\")\\\"===state.tokens.next.id)return advance(\\\")\\\"),void 0;for(;;){arity++;var currentParams=[];if(_.contains([\\\"{\\\",\\\"[\\\"],state.tokens.next.id)){tokens=destructuringPattern();for(t in tokens)t=tokens[t],t.id&&(paramsIds.push(t.id),currentParams.push([t.id,t.token]))}else if(checkPunctuator(state.tokens.next,\\\"...\\\")&&(pastRest=!0),ident=identifier(!0))paramsIds.push(ident),currentParams.push([ident,state.tokens.curr]);else for(;!checkPunctuators(state.tokens.next,[\\\",\\\",\\\")\\\"]);)advance();if(pastDefault&&\\\"=\\\"!==state.tokens.next.id&&error(\\\"W138\\\",state.tokens.current),\\\"=\\\"===state.tokens.next.id&&(state.inES6()||warning(\\\"W119\\\",state.tokens.next,\\\"default parameters\\\",\\\"6\\\"),advance(\\\"=\\\"),pastDefault=!0,expression(10)),currentParams.forEach(addParam),\\\",\\\"!==state.tokens.next.id)return advance(\\\")\\\",next),{arity:arity,params:paramsIds};pastRest&&warning(\\\"W131\\\",state.tokens.next),comma()}}function functor(name,token,overwrites){var funct={\\\"(name)\\\":name,\\\"(breakage)\\\":0,\\\"(loopage)\\\":0,\\\"(tokens)\\\":{},\\\"(properties)\\\":{},\\\"(catch)\\\":!1,\\\"(global)\\\":!1,\\\"(line)\\\":null,\\\"(character)\\\":null,\\\"(metrics)\\\":null,\\\"(statement)\\\":null,\\\"(context)\\\":null,\\\"(scope)\\\":null,\\\"(comparray)\\\":null,\\\"(generator)\\\":null,\\\"(arrow)\\\":null,\\\"(params)\\\":null};return token&&_.extend(funct,{\\\"(line)\\\":token.line,\\\"(character)\\\":token.character,\\\"(metrics)\\\":createMetrics(token)}),_.extend(funct,overwrites),funct[\\\"(context)\\\"]&&(funct[\\\"(scope)\\\"]=funct[\\\"(context)\\\"][\\\"(scope)\\\"],funct[\\\"(comparray)\\\"]=funct[\\\"(context)\\\"][\\\"(comparray)\\\"]),funct}function isFunctor(token){return\\\"(scope)\\\"in token}function hasParsedCode(funct){return funct[\\\"(global)\\\"]&&!funct[\\\"(verb)\\\"]}function doTemplateLiteral(left){function end(){if(state.tokens.curr.template&&state.tokens.curr.tail&&state.tokens.curr.context===ctx)return!0;var complete=state.tokens.next.template&&state.tokens.next.tail&&state.tokens.next.context===ctx;return complete&&advance(),complete||state.tokens.next.isUnclosed}var ctx=this.context,noSubst=this.noSubst,depth=this.depth;if(!noSubst)for(;!end();)!state.tokens.next.template||state.tokens.next.depth>depth?expression(0):advance();return{id:\\\"(template)\\\",type:\\\"(template)\\\",tag:left}}function doFunction(options){var f,token,name,statement,classExprBinding,isGenerator,isArrow,ignoreLoopFunc,oldOption=state.option,oldIgnored=state.ignored;options&&(name=options.name,statement=options.statement,classExprBinding=options.classExprBinding,isGenerator=\\\"generator\\\"===options.type,isArrow=\\\"arrow\\\"===options.type,ignoreLoopFunc=options.ignoreLoopFunc),state.option=Object.create(state.option),state.ignored=Object.create(state.ignored),state.funct=functor(name||state.nameStack.infer(),state.tokens.next,{\\\"(statement)\\\":statement,\\\"(context)\\\":state.funct,\\\"(arrow)\\\":isArrow,\\\"(generator)\\\":isGenerator}),f=state.funct,token=state.tokens.curr,token.funct=state.funct,functions.push(state.funct),state.funct[\\\"(scope)\\\"].stack(\\\"functionouter\\\");var internallyAccessibleName=name||classExprBinding;internallyAccessibleName&&state.funct[\\\"(scope)\\\"].block.add(internallyAccessibleName,classExprBinding?\\\"class\\\":\\\"function\\\",state.tokens.curr,!1),state.funct[\\\"(scope)\\\"].stack(\\\"functionparams\\\");var paramsInfo=functionparams(options);return paramsInfo?(state.funct[\\\"(params)\\\"]=paramsInfo.params,state.funct[\\\"(metrics)\\\"].arity=paramsInfo.arity,state.funct[\\\"(metrics)\\\"].verifyMaxParametersPerFunction()):state.funct[\\\"(metrics)\\\"].arity=0,isArrow&&(state.inES6(!0)||warning(\\\"W119\\\",state.tokens.curr,\\\"arrow function syntax (=>)\\\",\\\"6\\\"),options.loneArg||advance(\\\"=>\\\")),block(!1,!0,!0,isArrow),!state.option.noyield&&isGenerator&&\\\"yielded\\\"!==state.funct[\\\"(generator)\\\"]&&warning(\\\"W124\\\",state.tokens.curr),state.funct[\\\"(metrics)\\\"].verifyMaxStatementsPerFunction(),state.funct[\\\"(metrics)\\\"].verifyMaxComplexityPerFunction(),state.funct[\\\"(unusedOption)\\\"]=state.option.unused,state.option=oldOption,state.ignored=oldIgnored,state.funct[\\\"(last)\\\"]=state.tokens.curr.line,state.funct[\\\"(lastcharacter)\\\"]=state.tokens.curr.character,state.funct[\\\"(scope)\\\"].unstack(),state.funct[\\\"(scope)\\\"].unstack(),state.funct=state.funct[\\\"(context)\\\"],ignoreLoopFunc||state.option.loopfunc||!state.funct[\\\"(loopage)\\\"]||f[\\\"(isCapturing)\\\"]&&warning(\\\"W083\\\",token),f}function createMetrics(functionStartToken){return{statementCount:0,nestedBlockDepth:-1,ComplexityCount:1,arity:0,verifyMaxStatementsPerFunction:function(){state.option.maxstatements&&this.statementCount>state.option.maxstatements&&warning(\\\"W071\\\",functionStartToken,this.statementCount)\\n},verifyMaxParametersPerFunction:function(){_.isNumber(state.option.maxparams)&&this.arity>state.option.maxparams&&warning(\\\"W072\\\",functionStartToken,this.arity)},verifyMaxNestedBlockDepthPerFunction:function(){state.option.maxdepth&&this.nestedBlockDepth>0&&this.nestedBlockDepth===state.option.maxdepth+1&&warning(\\\"W073\\\",null,this.nestedBlockDepth)},verifyMaxComplexityPerFunction:function(){var max=state.option.maxcomplexity,cc=this.ComplexityCount;max&&cc>max&&warning(\\\"W074\\\",functionStartToken,cc)}}}function increaseComplexityCount(){state.funct[\\\"(metrics)\\\"].ComplexityCount+=1}function checkCondAssignment(expr){var id,paren;switch(expr&&(id=expr.id,paren=expr.paren,\\\",\\\"===id&&(expr=expr.exprs[expr.exprs.length-1])&&(id=expr.id,paren=paren||expr.paren)),id){case\\\"=\\\":case\\\"+=\\\":case\\\"-=\\\":case\\\"*=\\\":case\\\"%=\\\":case\\\"&=\\\":case\\\"|=\\\":case\\\"^=\\\":case\\\"/=\\\":paren||state.option.boss||warning(\\\"W084\\\")}}function checkProperties(props){if(state.inES5())for(var name in props)props[name]&&props[name].setterToken&&!props[name].getterToken&&warning(\\\"W078\\\",props[name].setterToken)}function metaProperty(name,c){if(checkPunctuator(state.tokens.next,\\\".\\\")){var left=state.tokens.curr.id;advance(\\\".\\\");var id=identifier();return state.tokens.curr.isMetaProperty=!0,name!==id?error(\\\"E057\\\",state.tokens.prev,left,id):c(),state.tokens.curr}}function destructuringPattern(options){var isAssignment=options&&options.assignment;return state.inES6()||warning(\\\"W104\\\",state.tokens.curr,isAssignment?\\\"destructuring assignment\\\":\\\"destructuring binding\\\",\\\"6\\\"),destructuringPatternRecursive(options)}function destructuringPatternRecursive(options){var ids,identifiers=[],openingParsed=options&&options.openingParsed,isAssignment=options&&options.assignment,recursiveOptions=isAssignment?{assignment:isAssignment}:null,firstToken=openingParsed?state.tokens.curr:state.tokens.next,nextInnerDE=function(){var ident;if(checkPunctuators(state.tokens.next,[\\\"[\\\",\\\"{\\\"])){ids=destructuringPatternRecursive(recursiveOptions);for(var id in ids)id=ids[id],identifiers.push({id:id.id,token:id.token})}else if(checkPunctuator(state.tokens.next,\\\",\\\"))identifiers.push({id:null,token:state.tokens.curr});else{if(!checkPunctuator(state.tokens.next,\\\"(\\\")){var is_rest=checkPunctuator(state.tokens.next,\\\"...\\\");if(isAssignment){var identifierToken=is_rest?peek(0):state.tokens.next;identifierToken.identifier||warning(\\\"E030\\\",identifierToken,identifierToken.value);var assignTarget=expression(155);assignTarget&&(checkLeftSideAssign(assignTarget),assignTarget.identifier&&(ident=assignTarget.value))}else ident=identifier();return ident&&identifiers.push({id:ident,token:state.tokens.curr}),is_rest}advance(\\\"(\\\"),nextInnerDE(),advance(\\\")\\\")}return!1},assignmentProperty=function(){var id;checkPunctuator(state.tokens.next,\\\"[\\\")?(advance(\\\"[\\\"),expression(10),advance(\\\"]\\\"),advance(\\\":\\\"),nextInnerDE()):\\\"(string)\\\"===state.tokens.next.id||\\\"(number)\\\"===state.tokens.next.id?(advance(),advance(\\\":\\\"),nextInnerDE()):(id=identifier(),checkPunctuator(state.tokens.next,\\\":\\\")?(advance(\\\":\\\"),nextInnerDE()):id&&(isAssignment&&checkLeftSideAssign(state.tokens.curr),identifiers.push({id:id,token:state.tokens.curr})))};if(checkPunctuator(firstToken,\\\"[\\\")){openingParsed||advance(\\\"[\\\"),checkPunctuator(state.tokens.next,\\\"]\\\")&&warning(\\\"W137\\\",state.tokens.curr);for(var element_after_rest=!1;!checkPunctuator(state.tokens.next,\\\"]\\\");)nextInnerDE()&&!element_after_rest&&checkPunctuator(state.tokens.next,\\\",\\\")&&(warning(\\\"W130\\\",state.tokens.next),element_after_rest=!0),checkPunctuator(state.tokens.next,\\\"=\\\")&&(checkPunctuator(state.tokens.prev,\\\"...\\\")?advance(\\\"]\\\"):advance(\\\"=\\\"),\\\"undefined\\\"===state.tokens.next.id&&warning(\\\"W080\\\",state.tokens.prev,state.tokens.prev.value),expression(10)),checkPunctuator(state.tokens.next,\\\"]\\\")||advance(\\\",\\\");advance(\\\"]\\\")}else if(checkPunctuator(firstToken,\\\"{\\\")){for(openingParsed||advance(\\\"{\\\"),checkPunctuator(state.tokens.next,\\\"}\\\")&&warning(\\\"W137\\\",state.tokens.curr);!checkPunctuator(state.tokens.next,\\\"}\\\")&&(assignmentProperty(),checkPunctuator(state.tokens.next,\\\"=\\\")&&(advance(\\\"=\\\"),\\\"undefined\\\"===state.tokens.next.id&&warning(\\\"W080\\\",state.tokens.prev,state.tokens.prev.value),expression(10)),checkPunctuator(state.tokens.next,\\\"}\\\")||(advance(\\\",\\\"),!checkPunctuator(state.tokens.next,\\\"}\\\"))););advance(\\\"}\\\")}return identifiers}function destructuringPatternMatch(tokens,value){var first=value.first;first&&_.zip(tokens,Array.isArray(first)?first:[first]).forEach(function(val){var token=val[0],value=val[1];token&&value?token.first=value:token&&token.first&&!value&&warning(\\\"W080\\\",token.first,token.first.value)})}function blockVariableStatement(type,statement,context){var tokens,lone,value,letblock,prefix=context&&context.prefix,inexport=context&&context.inexport,isLet=\\\"let\\\"===type,isConst=\\\"const\\\"===type;for(state.inES6()||warning(\\\"W104\\\",state.tokens.curr,type,\\\"6\\\"),isLet&&\\\"(\\\"===state.tokens.next.value?(state.inMoz()||warning(\\\"W118\\\",state.tokens.next,\\\"let block\\\"),advance(\\\"(\\\"),state.funct[\\\"(scope)\\\"].stack(),letblock=!0):state.funct[\\\"(noblockscopedvar)\\\"]&&error(\\\"E048\\\",state.tokens.curr,isConst?\\\"Const\\\":\\\"Let\\\"),statement.first=[];;){var names=[];_.contains([\\\"{\\\",\\\"[\\\"],state.tokens.next.value)?(tokens=destructuringPattern(),lone=!1):(tokens=[{id:identifier(),token:state.tokens.curr}],lone=!0),!prefix&&isConst&&\\\"=\\\"!==state.tokens.next.id&&warning(\\\"E012\\\",state.tokens.curr,state.tokens.curr.value);for(var t in tokens)tokens.hasOwnProperty(t)&&(t=tokens[t],state.funct[\\\"(scope)\\\"].block.isGlobal()&&predefined[t.id]===!1&&warning(\\\"W079\\\",t.token,t.id),t.id&&!state.funct[\\\"(noblockscopedvar)\\\"]&&(state.funct[\\\"(scope)\\\"].addlabel(t.id,{type:type,token:t.token}),names.push(t.token),lone&&inexport&&state.funct[\\\"(scope)\\\"].setExported(t.token.value,t.token)));if(\\\"=\\\"===state.tokens.next.id&&(advance(\\\"=\\\"),prefix||\\\"undefined\\\"!==state.tokens.next.id||warning(\\\"W080\\\",state.tokens.prev,state.tokens.prev.value),!prefix&&\\\"=\\\"===peek(0).id&&state.tokens.next.identifier&&warning(\\\"W120\\\",state.tokens.next,state.tokens.next.value),value=expression(prefix?120:10),lone?tokens[0].first=value:destructuringPatternMatch(names,value)),statement.first=statement.first.concat(names),\\\",\\\"!==state.tokens.next.id)break;comma()}return letblock&&(advance(\\\")\\\"),block(!0,!0),statement.block=!0,state.funct[\\\"(scope)\\\"].unstack()),statement}function classdef(isStatement){return state.inES6()||warning(\\\"W104\\\",state.tokens.curr,\\\"class\\\",\\\"6\\\"),isStatement?(this.name=identifier(),state.funct[\\\"(scope)\\\"].addlabel(this.name,{type:\\\"class\\\",token:state.tokens.curr})):state.tokens.next.identifier&&\\\"extends\\\"!==state.tokens.next.value?(this.name=identifier(),this.namedExpr=!0):this.name=state.nameStack.infer(),classtail(this),this}function classtail(c){var wasInClassBody=state.inClassBody;\\\"extends\\\"===state.tokens.next.value&&(advance(\\\"extends\\\"),c.heritage=expression(10)),state.inClassBody=!0,advance(\\\"{\\\"),c.body=classbody(c),advance(\\\"}\\\"),state.inClassBody=wasInClassBody}function classbody(c){for(var name,isStatic,isGenerator,getset,computed,props=Object.create(null),staticProps=Object.create(null),i=0;\\\"}\\\"!==state.tokens.next.id;++i)if(name=state.tokens.next,isStatic=!1,isGenerator=!1,getset=null,\\\";\\\"!==name.id){if(\\\"*\\\"===name.id&&(isGenerator=!0,advance(\\\"*\\\"),name=state.tokens.next),\\\"[\\\"===name.id)name=computedPropertyName(),computed=!0;else{if(!isPropertyName(name)){warning(\\\"W052\\\",state.tokens.next,state.tokens.next.value||state.tokens.next.type),advance();continue}advance(),computed=!1,name.identifier&&\\\"static\\\"===name.value&&(checkPunctuator(state.tokens.next,\\\"*\\\")&&(isGenerator=!0,advance(\\\"*\\\")),(isPropertyName(state.tokens.next)||\\\"[\\\"===state.tokens.next.id)&&(computed=\\\"[\\\"===state.tokens.next.id,isStatic=!0,name=state.tokens.next,\\\"[\\\"===state.tokens.next.id?name=computedPropertyName():advance())),!name.identifier||\\\"get\\\"!==name.value&&\\\"set\\\"!==name.value||(isPropertyName(state.tokens.next)||\\\"[\\\"===state.tokens.next.id)&&(computed=\\\"[\\\"===state.tokens.next.id,getset=name,name=state.tokens.next,\\\"[\\\"===state.tokens.next.id?name=computedPropertyName():advance())}if(!checkPunctuator(state.tokens.next,\\\"(\\\")){for(error(\\\"E054\\\",state.tokens.next,state.tokens.next.value);\\\"}\\\"!==state.tokens.next.id&&!checkPunctuator(state.tokens.next,\\\"(\\\");)advance();\\\"(\\\"!==state.tokens.next.value&&doFunction({statement:c})}if(computed||(getset?saveAccessor(getset.value,isStatic?staticProps:props,name.value,name,!0,isStatic):(\\\"constructor\\\"===name.value?state.nameStack.set(c):state.nameStack.set(name),saveProperty(isStatic?staticProps:props,name.value,name,!0,isStatic))),getset&&\\\"constructor\\\"===name.value){var propDesc=\\\"get\\\"===getset.value?\\\"class getter method\\\":\\\"class setter method\\\";error(\\\"E049\\\",name,propDesc,\\\"constructor\\\")}else\\\"prototype\\\"===name.value&&error(\\\"E049\\\",name,\\\"class method\\\",\\\"prototype\\\");propertyName(name),doFunction({statement:c,type:isGenerator?\\\"generator\\\":null,classExprBinding:c.namedExpr?c.name:null})}else warning(\\\"W032\\\"),advance(\\\";\\\");checkProperties(props)}function saveProperty(props,name,tkn,isClass,isStatic){var msg=[\\\"key\\\",\\\"class method\\\",\\\"static class method\\\"];msg=msg[(isClass||!1)+(isStatic||!1)],tkn.identifier&&(name=tkn.value),props[name]&&\\\"__proto__\\\"!==name?warning(\\\"W075\\\",state.tokens.next,msg,name):props[name]=Object.create(null),props[name].basic=!0,props[name].basictkn=tkn}function saveAccessor(accessorType,props,name,tkn,isClass,isStatic){var flagName=\\\"get\\\"===accessorType?\\\"getterToken\\\":\\\"setterToken\\\",msg=\\\"\\\";isClass?(isStatic&&(msg+=\\\"static \\\"),msg+=accessorType+\\\"ter method\\\"):msg=\\\"key\\\",state.tokens.curr.accessorType=accessorType,state.nameStack.set(tkn),props[name]?(props[name].basic||props[name][flagName])&&\\\"__proto__\\\"!==name&&warning(\\\"W075\\\",state.tokens.next,msg,name):props[name]=Object.create(null),props[name][flagName]=tkn}function computedPropertyName(){advance(\\\"[\\\"),state.inES6()||warning(\\\"W119\\\",state.tokens.curr,\\\"computed property names\\\",\\\"6\\\");var value=expression(10);return advance(\\\"]\\\"),value}function checkPunctuators(token,values){return\\\"(punctuator)\\\"===token.type?_.contains(values,token.value):!1}function checkPunctuator(token,value){return\\\"(punctuator)\\\"===token.type&&token.value===value}function destructuringAssignOrJsonValue(){var block=lookupBlockType();block.notJson?(!state.inES6()&&block.isDestAssign&&warning(\\\"W104\\\",state.tokens.curr,\\\"destructuring assignment\\\",\\\"6\\\"),statements()):(state.option.laxbreak=!0,state.jsonMode=!0,jsonValue())}function jsonValue(){function jsonObject(){var o={},t=state.tokens.next;if(advance(\\\"{\\\"),\\\"}\\\"!==state.tokens.next.id)for(;;){if(\\\"(end)\\\"===state.tokens.next.id)error(\\\"E026\\\",state.tokens.next,t.line);else{if(\\\"}\\\"===state.tokens.next.id){warning(\\\"W094\\\",state.tokens.curr);break}\\\",\\\"===state.tokens.next.id?error(\\\"E028\\\",state.tokens.next):\\\"(string)\\\"!==state.tokens.next.id&&warning(\\\"W095\\\",state.tokens.next,state.tokens.next.value)}if(o[state.tokens.next.value]===!0?warning(\\\"W075\\\",state.tokens.next,\\\"key\\\",state.tokens.next.value):\\\"__proto__\\\"===state.tokens.next.value&&!state.option.proto||\\\"__iterator__\\\"===state.tokens.next.value&&!state.option.iterator?warning(\\\"W096\\\",state.tokens.next,state.tokens.next.value):o[state.tokens.next.value]=!0,advance(),advance(\\\":\\\"),jsonValue(),\\\",\\\"!==state.tokens.next.id)break;advance(\\\",\\\")}advance(\\\"}\\\")}function jsonArray(){var t=state.tokens.next;if(advance(\\\"[\\\"),\\\"]\\\"!==state.tokens.next.id)for(;;){if(\\\"(end)\\\"===state.tokens.next.id)error(\\\"E027\\\",state.tokens.next,t.line);else{if(\\\"]\\\"===state.tokens.next.id){warning(\\\"W094\\\",state.tokens.curr);break}\\\",\\\"===state.tokens.next.id&&error(\\\"E028\\\",state.tokens.next)}if(jsonValue(),\\\",\\\"!==state.tokens.next.id)break;advance(\\\",\\\")}advance(\\\"]\\\")}switch(state.tokens.next.id){case\\\"{\\\":jsonObject();break;case\\\"[\\\":jsonArray();break;case\\\"true\\\":case\\\"false\\\":case\\\"null\\\":case\\\"(number)\\\":case\\\"(string)\\\":advance();break;case\\\"-\\\":advance(\\\"-\\\"),advance(\\\"(number)\\\");break;default:error(\\\"E003\\\",state.tokens.next)}}var api,declared,functions,inblock,indent,lookahead,lex,member,membersOnly,predefined,stack,urls,bang={\\\"<\\\":!0,\\\"<=\\\":!0,\\\"==\\\":!0,\\\"===\\\":!0,\\\"!==\\\":!0,\\\"!=\\\":!0,\\\">\\\":!0,\\\">=\\\":!0,\\\"+\\\":!0,\\\"-\\\":!0,\\\"*\\\":!0,\\\"/\\\":!0,\\\"%\\\":!0},functionicity=[\\\"closure\\\",\\\"exception\\\",\\\"global\\\",\\\"label\\\",\\\"outer\\\",\\\"unused\\\",\\\"var\\\"],extraModules=[],emitter=new events.EventEmitter,typeofValues={};typeofValues.legacy=[\\\"xml\\\",\\\"unknown\\\"],typeofValues.es3=[\\\"undefined\\\",\\\"boolean\\\",\\\"number\\\",\\\"string\\\",\\\"function\\\",\\\"object\\\"],typeofValues.es3=typeofValues.es3.concat(typeofValues.legacy),typeofValues.es6=typeofValues.es3.concat(\\\"symbol\\\"),type(\\\"(number)\\\",function(){return this}),type(\\\"(string)\\\",function(){return this}),state.syntax[\\\"(identifier)\\\"]={type:\\\"(identifier)\\\",lbp:0,identifier:!0,nud:function(){var v=this.value;return\\\"=>\\\"===state.tokens.next.id?this:(state.funct[\\\"(comparray)\\\"].check(v)||state.funct[\\\"(scope)\\\"].block.use(v,state.tokens.curr),this)},led:function(){error(\\\"E033\\\",state.tokens.next,state.tokens.next.value)}};var baseTemplateSyntax={lbp:0,identifier:!1,template:!0};state.syntax[\\\"(template)\\\"]=_.extend({type:\\\"(template)\\\",nud:doTemplateLiteral,led:doTemplateLiteral,noSubst:!1},baseTemplateSyntax),state.syntax[\\\"(template middle)\\\"]=_.extend({type:\\\"(template middle)\\\",middle:!0,noSubst:!1},baseTemplateSyntax),state.syntax[\\\"(template tail)\\\"]=_.extend({type:\\\"(template tail)\\\",tail:!0,noSubst:!1},baseTemplateSyntax),state.syntax[\\\"(no subst template)\\\"]=_.extend({type:\\\"(template)\\\",nud:doTemplateLiteral,led:doTemplateLiteral,noSubst:!0,tail:!0},baseTemplateSyntax),type(\\\"(regexp)\\\",function(){return this}),delim(\\\"(endline)\\\"),delim(\\\"(begin)\\\"),delim(\\\"(end)\\\").reach=!0,delim(\\\"(error)\\\").reach=!0,delim(\\\"}\\\").reach=!0,delim(\\\")\\\"),delim(\\\"]\\\"),delim('\\\"').reach=!0,delim(\\\"'\\\").reach=!0,delim(\\\";\\\"),delim(\\\":\\\").reach=!0,delim(\\\"#\\\"),reserve(\\\"else\\\"),reserve(\\\"case\\\").reach=!0,reserve(\\\"catch\\\"),reserve(\\\"default\\\").reach=!0,reserve(\\\"finally\\\"),reservevar(\\\"arguments\\\",function(x){state.isStrict()&&state.funct[\\\"(global)\\\"]&&warning(\\\"E008\\\",x)}),reservevar(\\\"eval\\\"),reservevar(\\\"false\\\"),reservevar(\\\"Infinity\\\"),reservevar(\\\"null\\\"),reservevar(\\\"this\\\",function(x){state.isStrict()&&!isMethod()&&!state.option.validthis&&(state.funct[\\\"(statement)\\\"]&&state.funct[\\\"(name)\\\"].charAt(0)>\\\"Z\\\"||state.funct[\\\"(global)\\\"])&&warning(\\\"W040\\\",x)}),reservevar(\\\"true\\\"),reservevar(\\\"undefined\\\"),assignop(\\\"=\\\",\\\"assign\\\",20),assignop(\\\"+=\\\",\\\"assignadd\\\",20),assignop(\\\"-=\\\",\\\"assignsub\\\",20),assignop(\\\"*=\\\",\\\"assignmult\\\",20),assignop(\\\"/=\\\",\\\"assigndiv\\\",20).nud=function(){error(\\\"E014\\\")},assignop(\\\"%=\\\",\\\"assignmod\\\",20),bitwiseassignop(\\\"&=\\\"),bitwiseassignop(\\\"|=\\\"),bitwiseassignop(\\\"^=\\\"),bitwiseassignop(\\\"<<=\\\"),bitwiseassignop(\\\">>=\\\"),bitwiseassignop(\\\">>>=\\\"),infix(\\\",\\\",function(left,that){var expr;if(that.exprs=[left],state.option.nocomma&&warning(\\\"W127\\\"),!comma({peek:!0}))return that;for(;;){if(!(expr=expression(10)))break;if(that.exprs.push(expr),\\\",\\\"!==state.tokens.next.value||!comma())break}return that},10,!0),infix(\\\"?\\\",function(left,that){return increaseComplexityCount(),that.left=left,that.right=expression(10),advance(\\\":\\\"),that[\\\"else\\\"]=expression(10),that},30);var orPrecendence=40;infix(\\\"||\\\",function(left,that){return increaseComplexityCount(),that.left=left,that.right=expression(orPrecendence),that},orPrecendence),infix(\\\"&&\\\",\\\"and\\\",50),bitwise(\\\"|\\\",\\\"bitor\\\",70),bitwise(\\\"^\\\",\\\"bitxor\\\",80),bitwise(\\\"&\\\",\\\"bitand\\\",90),relation(\\\"==\\\",function(left,right){var eqnull=state.option.eqnull&&(\\\"null\\\"===(left&&left.value)||\\\"null\\\"===(right&&right.value));switch(!0){case!eqnull&&state.option.eqeqeq:this.from=this.character,warning(\\\"W116\\\",this,\\\"===\\\",\\\"==\\\");break;case isPoorRelation(left):warning(\\\"W041\\\",this,\\\"===\\\",left.value);break;case isPoorRelation(right):warning(\\\"W041\\\",this,\\\"===\\\",right.value);break;case isTypoTypeof(right,left,state):warning(\\\"W122\\\",this,right.value);break;case isTypoTypeof(left,right,state):warning(\\\"W122\\\",this,left.value)}return this}),relation(\\\"===\\\",function(left,right){return isTypoTypeof(right,left,state)?warning(\\\"W122\\\",this,right.value):isTypoTypeof(left,right,state)&&warning(\\\"W122\\\",this,left.value),this}),relation(\\\"!=\\\",function(left,right){var eqnull=state.option.eqnull&&(\\\"null\\\"===(left&&left.value)||\\\"null\\\"===(right&&right.value));return!eqnull&&state.option.eqeqeq?(this.from=this.character,warning(\\\"W116\\\",this,\\\"!==\\\",\\\"!=\\\")):isPoorRelation(left)?warning(\\\"W041\\\",this,\\\"!==\\\",left.value):isPoorRelation(right)?warning(\\\"W041\\\",this,\\\"!==\\\",right.value):isTypoTypeof(right,left,state)?warning(\\\"W122\\\",this,right.value):isTypoTypeof(left,right,state)&&warning(\\\"W122\\\",this,left.value),this}),relation(\\\"!==\\\",function(left,right){return isTypoTypeof(right,left,state)?warning(\\\"W122\\\",this,right.value):isTypoTypeof(left,right,state)&&warning(\\\"W122\\\",this,left.value),this}),relation(\\\"<\\\"),relation(\\\">\\\"),relation(\\\"<=\\\"),relation(\\\">=\\\"),bitwise(\\\"<<\\\",\\\"shiftleft\\\",120),bitwise(\\\">>\\\",\\\"shiftright\\\",120),bitwise(\\\">>>\\\",\\\"shiftrightunsigned\\\",120),infix(\\\"in\\\",\\\"in\\\",120),infix(\\\"instanceof\\\",\\\"instanceof\\\",120),infix(\\\"+\\\",function(left,that){var right;return that.left=left,that.right=right=expression(130),left&&right&&\\\"(string)\\\"===left.id&&\\\"(string)\\\"===right.id?(left.value+=right.value,left.character=right.character,!state.option.scripturl&®.javascriptURL.test(left.value)&&warning(\\\"W050\\\",left),left):that},130),prefix(\\\"+\\\",\\\"num\\\"),prefix(\\\"+++\\\",function(){return warning(\\\"W007\\\"),this.arity=\\\"unary\\\",this.right=expression(150),this}),infix(\\\"+++\\\",function(left){return warning(\\\"W007\\\"),this.left=left,this.right=expression(130),this},130),infix(\\\"-\\\",\\\"sub\\\",130),prefix(\\\"-\\\",\\\"neg\\\"),prefix(\\\"---\\\",function(){return warning(\\\"W006\\\"),this.arity=\\\"unary\\\",this.right=expression(150),this}),infix(\\\"---\\\",function(left){return warning(\\\"W006\\\"),this.left=left,this.right=expression(130),this},130),infix(\\\"*\\\",\\\"mult\\\",140),infix(\\\"/\\\",\\\"div\\\",140),infix(\\\"%\\\",\\\"mod\\\",140),suffix(\\\"++\\\"),prefix(\\\"++\\\",\\\"preinc\\\"),state.syntax[\\\"++\\\"].exps=!0,suffix(\\\"--\\\"),prefix(\\\"--\\\",\\\"predec\\\"),state.syntax[\\\"--\\\"].exps=!0,prefix(\\\"delete\\\",function(){var p=expression(10);return p?(\\\".\\\"!==p.id&&\\\"[\\\"!==p.id&&warning(\\\"W051\\\"),this.first=p,p.identifier&&!state.isStrict()&&(p.forgiveUndef=!0),this):this}).exps=!0,prefix(\\\"~\\\",function(){return state.option.bitwise&&warning(\\\"W016\\\",this,\\\"~\\\"),this.arity=\\\"unary\\\",this.right=expression(150),this}),prefix(\\\"...\\\",function(){return state.inES6(!0)||warning(\\\"W119\\\",this,\\\"spread/rest operator\\\",\\\"6\\\"),state.tokens.next.identifier||\\\"(string)\\\"===state.tokens.next.type||checkPunctuators(state.tokens.next,[\\\"[\\\",\\\"(\\\"])||error(\\\"E030\\\",state.tokens.next,state.tokens.next.value),expression(150),this}),prefix(\\\"!\\\",function(){return this.arity=\\\"unary\\\",this.right=expression(150),this.right||quit(\\\"E041\\\",this.line||0),bang[this.right.id]===!0&&warning(\\\"W018\\\",this,\\\"!\\\"),this}),prefix(\\\"typeof\\\",function(){var p=expression(150);return this.first=this.right=p,p||quit(\\\"E041\\\",this.line||0,this.character||0),p.identifier&&(p.forgiveUndef=!0),this}),prefix(\\\"new\\\",function(){var mp=metaProperty(\\\"target\\\",function(){state.inES6(!0)||warning(\\\"W119\\\",state.tokens.prev,\\\"new.target\\\",\\\"6\\\");for(var inFunction,c=state.funct;c&&(inFunction=!c[\\\"(global)\\\"],c[\\\"(arrow)\\\"]);)c=c[\\\"(context)\\\"];inFunction||warning(\\\"W136\\\",state.tokens.prev,\\\"new.target\\\")});if(mp)return mp;var i,c=expression(155);if(c&&\\\"function\\\"!==c.id)if(c.identifier)switch(c[\\\"new\\\"]=!0,c.value){case\\\"Number\\\":case\\\"String\\\":case\\\"Boolean\\\":case\\\"Math\\\":case\\\"JSON\\\":warning(\\\"W053\\\",state.tokens.prev,c.value);break;case\\\"Symbol\\\":state.inES6()&&warning(\\\"W053\\\",state.tokens.prev,c.value);break;case\\\"Function\\\":state.option.evil||warning(\\\"W054\\\");break;case\\\"Date\\\":case\\\"RegExp\\\":case\\\"this\\\":break;default:\\\"function\\\"!==c.id&&(i=c.value.substr(0,1),state.option.newcap&&(\\\"A\\\">i||i>\\\"Z\\\")&&!state.funct[\\\"(scope)\\\"].isPredefined(c.value)&&warning(\\\"W055\\\",state.tokens.curr))}else\\\".\\\"!==c.id&&\\\"[\\\"!==c.id&&\\\"(\\\"!==c.id&&warning(\\\"W056\\\",state.tokens.curr);else state.option.supernew||warning(\\\"W057\\\",this);return\\\"(\\\"===state.tokens.next.id||state.option.supernew||warning(\\\"W058\\\",state.tokens.curr,state.tokens.curr.value),this.first=this.right=c,this}),state.syntax[\\\"new\\\"].exps=!0,prefix(\\\"void\\\").exps=!0,infix(\\\".\\\",function(left,that){var m=identifier(!1,!0);return\\\"string\\\"==typeof m&&countMember(m),that.left=left,that.right=m,m&&\\\"hasOwnProperty\\\"===m&&\\\"=\\\"===state.tokens.next.value&&warning(\\\"W001\\\"),!left||\\\"arguments\\\"!==left.value||\\\"callee\\\"!==m&&\\\"caller\\\"!==m?state.option.evil||!left||\\\"document\\\"!==left.value||\\\"write\\\"!==m&&\\\"writeln\\\"!==m||warning(\\\"W060\\\",left):state.option.noarg?warning(\\\"W059\\\",left,m):state.isStrict()&&error(\\\"E008\\\"),state.option.evil||\\\"eval\\\"!==m&&\\\"execScript\\\"!==m||isGlobalEval(left,state)&&warning(\\\"W061\\\"),that},160,!0),infix(\\\"(\\\",function(left,that){state.option.immed&&left&&!left.immed&&\\\"function\\\"===left.id&&warning(\\\"W062\\\");var n=0,p=[];if(left&&\\\"(identifier)\\\"===left.type&&left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)&&-1===\\\"Array Number String Boolean Date Object Error Symbol\\\".indexOf(left.value)&&(\\\"Math\\\"===left.value?warning(\\\"W063\\\",left):state.option.newcap&&warning(\\\"W064\\\",left)),\\\")\\\"!==state.tokens.next.id)for(;p[p.length]=expression(10),n+=1,\\\",\\\"===state.tokens.next.id;)comma();return advance(\\\")\\\"),\\\"object\\\"==typeof left&&(state.inES5()||\\\"parseInt\\\"!==left.value||1!==n||warning(\\\"W065\\\",state.tokens.curr),state.option.evil||(\\\"eval\\\"===left.value||\\\"Function\\\"===left.value||\\\"execScript\\\"===left.value?(warning(\\\"W061\\\",left),p[0]&&\\\"(string)\\\"===[0].id&&addInternalSrc(left,p[0].value)):!p[0]||\\\"(string)\\\"!==p[0].id||\\\"setTimeout\\\"!==left.value&&\\\"setInterval\\\"!==left.value?!p[0]||\\\"(string)\\\"!==p[0].id||\\\".\\\"!==left.value||\\\"window\\\"!==left.left.value||\\\"setTimeout\\\"!==left.right&&\\\"setInterval\\\"!==left.right||(warning(\\\"W066\\\",left),addInternalSrc(left,p[0].value)):(warning(\\\"W066\\\",left),addInternalSrc(left,p[0].value))),left.identifier||\\\".\\\"===left.id||\\\"[\\\"===left.id||\\\"=>\\\"===left.id||\\\"(\\\"===left.id||\\\"&&\\\"===left.id||\\\"||\\\"===left.id||\\\"?\\\"===left.id||state.inES6()&&left[\\\"(name)\\\"]||warning(\\\"W067\\\",that)),that.left=left,that},155,!0).exps=!0,prefix(\\\"(\\\",function(){var pn1,ret,triggerFnExpr,first,last,pn=state.tokens.next,i=-1,parens=1,opening=state.tokens.curr,preceeding=state.tokens.prev,isNecessary=!state.option.singleGroups;do\\\"(\\\"===pn.value?parens+=1:\\\")\\\"===pn.value&&(parens-=1),i+=1,pn1=pn,pn=peek(i);while((0!==parens||\\\")\\\"!==pn1.value)&&\\\";\\\"!==pn.value&&\\\"(end)\\\"!==pn.type);if(\\\"function\\\"===state.tokens.next.id&&(triggerFnExpr=state.tokens.next.immed=!0),\\\"=>\\\"===pn.value)return doFunction({type:\\\"arrow\\\",parsedOpening:!0});var exprs=[];if(\\\")\\\"!==state.tokens.next.id)for(;exprs.push(expression(10)),\\\",\\\"===state.tokens.next.id;)state.option.nocomma&&warning(\\\"W127\\\"),comma();return advance(\\\")\\\",this),state.option.immed&&exprs[0]&&\\\"function\\\"===exprs[0].id&&\\\"(\\\"!==state.tokens.next.id&&\\\".\\\"!==state.tokens.next.id&&\\\"[\\\"!==state.tokens.next.id&&warning(\\\"W068\\\",this),exprs.length?(exprs.length>1?(ret=Object.create(state.syntax[\\\",\\\"]),ret.exprs=exprs,first=exprs[0],last=exprs[exprs.length-1],isNecessary||(isNecessary=preceeding.assign||preceeding.delim)):(ret=first=last=exprs[0],isNecessary||(isNecessary=opening.beginsStmt&&(\\\"{\\\"===ret.id||triggerFnExpr||isFunctor(ret))||triggerFnExpr&&(!isEndOfExpr()||\\\"}\\\"!==state.tokens.prev.id)||isFunctor(ret)&&!isEndOfExpr()||\\\"{\\\"===ret.id&&\\\"=>\\\"===preceeding.id||\\\"(number)\\\"===ret.type&&checkPunctuator(pn,\\\".\\\")&&/^\\\\d+$/.test(ret.value))),ret&&(!isNecessary&&(first.left||first.right||ret.exprs)&&(isNecessary=!isBeginOfExpr(preceeding)&&first.lbp<=preceeding.lbp||!isEndOfExpr()&&last.lbp\\\"),infix(\\\"[\\\",function(left,that){var s,e=expression(10);return e&&\\\"(string)\\\"===e.type&&(state.option.evil||\\\"eval\\\"!==e.value&&\\\"execScript\\\"!==e.value||isGlobalEval(left,state)&&warning(\\\"W061\\\"),countMember(e.value),!state.option.sub&®.identifier.test(e.value)&&(s=state.syntax[e.value],s&&isReserved(s)||warning(\\\"W069\\\",state.tokens.prev,e.value))),advance(\\\"]\\\",that),e&&\\\"hasOwnProperty\\\"===e.value&&\\\"=\\\"===state.tokens.next.value&&warning(\\\"W001\\\"),that.left=left,that.right=e,that},160,!0),prefix(\\\"[\\\",function(){var blocktype=lookupBlockType();if(blocktype.isCompArray)return state.option.esnext||state.inMoz()||warning(\\\"W118\\\",state.tokens.curr,\\\"array comprehension\\\"),comprehensiveArrayExpression();if(blocktype.isDestAssign)return this.destructAssign=destructuringPattern({openingParsed:!0,assignment:!0}),this;var b=state.tokens.curr.line!==startLine(state.tokens.next);for(this.first=[],b&&(indent+=state.option.indent,state.tokens.next.from===indent+state.option.indent&&(indent+=state.option.indent));\\\"(end)\\\"!==state.tokens.next.id;){for(;\\\",\\\"===state.tokens.next.id;){if(!state.option.elision){if(state.inES5()){warning(\\\"W128\\\");do advance(\\\",\\\");while(\\\",\\\"===state.tokens.next.id);continue}warning(\\\"W070\\\")}advance(\\\",\\\")}if(\\\"]\\\"===state.tokens.next.id)break;if(this.first.push(expression(10)),\\\",\\\"!==state.tokens.next.id)break;if(comma({allowTrailing:!0}),\\\"]\\\"===state.tokens.next.id&&!state.inES5()){warning(\\\"W070\\\",state.tokens.curr);break}}return b&&(indent-=state.option.indent),advance(\\\"]\\\",this),this}),function(x){x.nud=function(){var b,f,i,p,t,nextVal,isGeneratorMethod=!1,props=Object.create(null);b=state.tokens.curr.line!==startLine(state.tokens.next),b&&(indent+=state.option.indent,state.tokens.next.from===indent+state.option.indent&&(indent+=state.option.indent));var blocktype=lookupBlockType();if(blocktype.isDestAssign)return this.destructAssign=destructuringPattern({openingParsed:!0,assignment:!0}),this;for(;\\\"}\\\"!==state.tokens.next.id;){if(nextVal=state.tokens.next.value,!state.tokens.next.identifier||\\\",\\\"!==peekIgnoreEOL().id&&\\\"}\\\"!==peekIgnoreEOL().id)if(\\\":\\\"===peek().id||\\\"get\\\"!==nextVal&&\\\"set\\\"!==nextVal){if(\\\"*\\\"===state.tokens.next.value&&\\\"(punctuator)\\\"===state.tokens.next.type?(state.inES6()||warning(\\\"W104\\\",state.tokens.next,\\\"generator functions\\\",\\\"6\\\"),advance(\\\"*\\\"),isGeneratorMethod=!0):isGeneratorMethod=!1,\\\"[\\\"===state.tokens.next.id)i=computedPropertyName(),state.nameStack.set(i);else if(state.nameStack.set(state.tokens.next),i=propertyName(),saveProperty(props,i,state.tokens.next),\\\"string\\\"!=typeof i)break;\\\"(\\\"===state.tokens.next.value?(state.inES6()||warning(\\\"W104\\\",state.tokens.curr,\\\"concise methods\\\",\\\"6\\\"),doFunction({type:isGeneratorMethod?\\\"generator\\\":null})):(advance(\\\":\\\"),expression(10))}else advance(nextVal),state.inES5()||error(\\\"E034\\\"),i=propertyName(),i||state.inES6()||error(\\\"E035\\\"),i&&saveAccessor(nextVal,props,i,state.tokens.curr),t=state.tokens.next,f=doFunction(),p=f[\\\"(params)\\\"],\\\"get\\\"===nextVal&&i&&p?warning(\\\"W076\\\",t,p[0],i):\\\"set\\\"!==nextVal||!i||p&&1===p.length||warning(\\\"W077\\\",t,i);else state.inES6()||warning(\\\"W104\\\",state.tokens.next,\\\"object short notation\\\",\\\"6\\\"),i=propertyName(!0),saveProperty(props,i,state.tokens.next),expression(10);if(countMember(i),\\\",\\\"!==state.tokens.next.id)break;comma({allowTrailing:!0,property:!0}),\\\",\\\"===state.tokens.next.id?warning(\\\"W070\\\",state.tokens.curr):\\\"}\\\"!==state.tokens.next.id||state.inES5()||warning(\\\"W070\\\",state.tokens.curr)}return b&&(indent-=state.option.indent),advance(\\\"}\\\",this),checkProperties(props),this},x.fud=function(){error(\\\"E036\\\",state.tokens.curr)}}(delim(\\\"{\\\"));var conststatement=stmt(\\\"const\\\",function(context){return blockVariableStatement(\\\"const\\\",this,context)});conststatement.exps=!0;var letstatement=stmt(\\\"let\\\",function(context){return blockVariableStatement(\\\"let\\\",this,context)});letstatement.exps=!0;var varstatement=stmt(\\\"var\\\",function(context){var tokens,lone,value,prefix=context&&context.prefix,inexport=context&&context.inexport,implied=context&&context.implied,report=!(context&&context.ignore);for(this.first=[];;){var names=[];_.contains([\\\"{\\\",\\\"[\\\"],state.tokens.next.value)?(tokens=destructuringPattern(),lone=!1):(tokens=[{id:identifier(),token:state.tokens.curr}],lone=!0),prefix&&implied||!report||!state.option.varstmt||warning(\\\"W132\\\",this),this.first=this.first.concat(names);for(var t in tokens)tokens.hasOwnProperty(t)&&(t=tokens[t],!implied&&state.funct[\\\"(global)\\\"]&&(predefined[t.id]===!1?warning(\\\"W079\\\",t.token,t.id):state.option.futurehostile===!1&&(!state.inES5()&&vars.ecmaIdentifiers[5][t.id]===!1||!state.inES6()&&vars.ecmaIdentifiers[6][t.id]===!1)&&warning(\\\"W129\\\",t.token,t.id)),t.id&&(\\\"for\\\"===implied?(state.funct[\\\"(scope)\\\"].has(t.id)||report&&warning(\\\"W088\\\",t.token,t.id),state.funct[\\\"(scope)\\\"].block.use(t.id,t.token)):(state.funct[\\\"(scope)\\\"].addlabel(t.id,{type:\\\"var\\\",token:t.token}),lone&&inexport&&state.funct[\\\"(scope)\\\"].setExported(t.id,t.token)),names.push(t.token)));if(\\\"=\\\"===state.tokens.next.id&&(state.nameStack.set(state.tokens.curr),advance(\\\"=\\\"),prefix||!report||state.funct[\\\"(loopage)\\\"]||\\\"undefined\\\"!==state.tokens.next.id||warning(\\\"W080\\\",state.tokens.prev,state.tokens.prev.value),\\\"=\\\"===peek(0).id&&state.tokens.next.identifier&&(!prefix&&report&&!state.funct[\\\"(params)\\\"]||-1===state.funct[\\\"(params)\\\"].indexOf(state.tokens.next.value))&&warning(\\\"W120\\\",state.tokens.next,state.tokens.next.value),value=expression(prefix?120:10),lone?tokens[0].first=value:destructuringPatternMatch(names,value)),\\\",\\\"!==state.tokens.next.id)break;comma()}return this});varstatement.exps=!0,blockstmt(\\\"class\\\",function(){return classdef.call(this,!0)}),blockstmt(\\\"function\\\",function(context){var inexport=context&&context.inexport,generator=!1;\\\"*\\\"===state.tokens.next.value&&(advance(\\\"*\\\"),state.inES6({strict:!0})?generator=!0:warning(\\\"W119\\\",state.tokens.curr,\\\"function*\\\",\\\"6\\\")),inblock&&warning(\\\"W082\\\",state.tokens.curr);var i=optionalidentifier();return state.funct[\\\"(scope)\\\"].addlabel(i,{type:\\\"function\\\",token:state.tokens.curr}),void 0===i?warning(\\\"W025\\\"):inexport&&state.funct[\\\"(scope)\\\"].setExported(i,state.tokens.prev),doFunction({name:i,statement:this,type:generator?\\\"generator\\\":null,ignoreLoopFunc:inblock}),\\\"(\\\"===state.tokens.next.id&&state.tokens.next.line===state.tokens.curr.line&&error(\\\"E039\\\"),this}),prefix(\\\"function\\\",function(){var generator=!1;\\\"*\\\"===state.tokens.next.value&&(state.inES6()||warning(\\\"W119\\\",state.tokens.curr,\\\"function*\\\",\\\"6\\\"),advance(\\\"*\\\"),generator=!0);var i=optionalidentifier();return doFunction({name:i,type:generator?\\\"generator\\\":null}),this}),blockstmt(\\\"if\\\",function(){var t=state.tokens.next;increaseComplexityCount(),state.condition=!0,advance(\\\"(\\\");var expr=expression(0);checkCondAssignment(expr);var forinifcheck=null;state.option.forin&&state.forinifcheckneeded&&(state.forinifcheckneeded=!1,forinifcheck=state.forinifchecks[state.forinifchecks.length-1],forinifcheck.type=\\\"(punctuator)\\\"===expr.type&&\\\"!\\\"===expr.value?\\\"(negative)\\\":\\\"(positive)\\\"),advance(\\\")\\\",t),state.condition=!1;var s=block(!0,!0);return forinifcheck&&\\\"(negative)\\\"===forinifcheck.type&&s&&s[0]&&\\\"(identifier)\\\"===s[0].type&&\\\"continue\\\"===s[0].value&&(forinifcheck.type=\\\"(negative-with-continue)\\\"),\\\"else\\\"===state.tokens.next.id&&(advance(\\\"else\\\"),\\\"if\\\"===state.tokens.next.id||\\\"switch\\\"===state.tokens.next.id?statement():block(!0,!0)),this}),blockstmt(\\\"try\\\",function(){function doCatch(){if(advance(\\\"catch\\\"),advance(\\\"(\\\"),state.funct[\\\"(scope)\\\"].stack(\\\"catchparams\\\"),checkPunctuators(state.tokens.next,[\\\"[\\\",\\\"{\\\"])){var tokens=destructuringPattern();_.each(tokens,function(token){token.id&&state.funct[\\\"(scope)\\\"].addParam(token.id,token,\\\"exception\\\")})}else\\\"(identifier)\\\"!==state.tokens.next.type?warning(\\\"E030\\\",state.tokens.next,state.tokens.next.value):state.funct[\\\"(scope)\\\"].addParam(identifier(),state.tokens.curr,\\\"exception\\\");\\\"if\\\"===state.tokens.next.value&&(state.inMoz()||warning(\\\"W118\\\",state.tokens.curr,\\\"catch filter\\\"),advance(\\\"if\\\"),expression(0)),advance(\\\")\\\"),block(!1),state.funct[\\\"(scope)\\\"].unstack()}var b;for(block(!0);\\\"catch\\\"===state.tokens.next.id;)increaseComplexityCount(),b&&!state.inMoz()&&warning(\\\"W118\\\",state.tokens.next,\\\"multiple catch blocks\\\"),doCatch(),b=!0;return\\\"finally\\\"===state.tokens.next.id?(advance(\\\"finally\\\"),block(!0),void 0):(b||error(\\\"E021\\\",state.tokens.next,\\\"catch\\\",state.tokens.next.value),this)}),blockstmt(\\\"while\\\",function(){var t=state.tokens.next;return state.funct[\\\"(breakage)\\\"]+=1,state.funct[\\\"(loopage)\\\"]+=1,increaseComplexityCount(),advance(\\\"(\\\"),checkCondAssignment(expression(0)),advance(\\\")\\\",t),block(!0,!0),state.funct[\\\"(breakage)\\\"]-=1,state.funct[\\\"(loopage)\\\"]-=1,this}).labelled=!0,blockstmt(\\\"with\\\",function(){var t=state.tokens.next;return state.isStrict()?error(\\\"E010\\\",state.tokens.curr):state.option.withstmt||warning(\\\"W085\\\",state.tokens.curr),advance(\\\"(\\\"),expression(0),advance(\\\")\\\",t),block(!0,!0),this}),blockstmt(\\\"switch\\\",function(){var t=state.tokens.next,g=!1,noindent=!1;\\nfor(state.funct[\\\"(breakage)\\\"]+=1,advance(\\\"(\\\"),checkCondAssignment(expression(0)),advance(\\\")\\\",t),t=state.tokens.next,advance(\\\"{\\\"),state.tokens.next.from===indent&&(noindent=!0),noindent||(indent+=state.option.indent),this.cases=[];;)switch(state.tokens.next.id){case\\\"case\\\":switch(state.funct[\\\"(verb)\\\"]){case\\\"yield\\\":case\\\"break\\\":case\\\"case\\\":case\\\"continue\\\":case\\\"return\\\":case\\\"switch\\\":case\\\"throw\\\":break;default:state.tokens.curr.caseFallsThrough||warning(\\\"W086\\\",state.tokens.curr,\\\"case\\\")}advance(\\\"case\\\"),this.cases.push(expression(0)),increaseComplexityCount(),g=!0,advance(\\\":\\\"),state.funct[\\\"(verb)\\\"]=\\\"case\\\";break;case\\\"default\\\":switch(state.funct[\\\"(verb)\\\"]){case\\\"yield\\\":case\\\"break\\\":case\\\"continue\\\":case\\\"return\\\":case\\\"throw\\\":break;default:this.cases.length&&(state.tokens.curr.caseFallsThrough||warning(\\\"W086\\\",state.tokens.curr,\\\"default\\\"))}advance(\\\"default\\\"),g=!0,advance(\\\":\\\");break;case\\\"}\\\":return noindent||(indent-=state.option.indent),advance(\\\"}\\\",t),state.funct[\\\"(breakage)\\\"]-=1,state.funct[\\\"(verb)\\\"]=void 0,void 0;case\\\"(end)\\\":return error(\\\"E023\\\",state.tokens.next,\\\"}\\\"),void 0;default:if(indent+=state.option.indent,g)switch(state.tokens.curr.id){case\\\",\\\":return error(\\\"E040\\\"),void 0;case\\\":\\\":g=!1,statements();break;default:return error(\\\"E025\\\",state.tokens.curr),void 0}else{if(\\\":\\\"!==state.tokens.curr.id)return error(\\\"E021\\\",state.tokens.next,\\\"case\\\",state.tokens.next.value),void 0;advance(\\\":\\\"),error(\\\"E024\\\",state.tokens.curr,\\\":\\\"),statements()}indent-=state.option.indent}return this}).labelled=!0,stmt(\\\"debugger\\\",function(){return state.option.debug||warning(\\\"W087\\\",this),this}).exps=!0,function(){var x=stmt(\\\"do\\\",function(){state.funct[\\\"(breakage)\\\"]+=1,state.funct[\\\"(loopage)\\\"]+=1,increaseComplexityCount(),this.first=block(!0,!0),advance(\\\"while\\\");var t=state.tokens.next;return advance(\\\"(\\\"),checkCondAssignment(expression(0)),advance(\\\")\\\",t),state.funct[\\\"(breakage)\\\"]-=1,state.funct[\\\"(loopage)\\\"]-=1,this});x.labelled=!0,x.exps=!0}(),blockstmt(\\\"for\\\",function(){var s,t=state.tokens.next,letscope=!1,foreachtok=null;\\\"each\\\"===t.value&&(foreachtok=t,advance(\\\"each\\\"),state.inMoz()||warning(\\\"W118\\\",state.tokens.curr,\\\"for each\\\")),increaseComplexityCount(),advance(\\\"(\\\");var nextop,comma,initializer,i=0,inof=[\\\"in\\\",\\\"of\\\"],level=0;checkPunctuators(state.tokens.next,[\\\"{\\\",\\\"[\\\"])&&++level;do{if(nextop=peek(i),++i,checkPunctuators(nextop,[\\\"{\\\",\\\"[\\\"])?++level:checkPunctuators(nextop,[\\\"}\\\",\\\"]\\\"])&&--level,0>level)break;0===level&&(!comma&&checkPunctuator(nextop,\\\",\\\")?comma=nextop:!initializer&&checkPunctuator(nextop,\\\"=\\\")&&(initializer=nextop))}while(level>0||!_.contains(inof,nextop.value)&&\\\";\\\"!==nextop.value&&\\\"(end)\\\"!==nextop.type);if(_.contains(inof,nextop.value)){state.inES6()||\\\"of\\\"!==nextop.value||warning(\\\"W104\\\",nextop,\\\"for of\\\",\\\"6\\\");var ok=!(initializer||comma);if(initializer&&error(\\\"W133\\\",comma,nextop.value,\\\"initializer is forbidden\\\"),comma&&error(\\\"W133\\\",comma,nextop.value,\\\"more than one ForBinding\\\"),\\\"var\\\"===state.tokens.next.id?(advance(\\\"var\\\"),state.tokens.curr.fud({prefix:!0})):\\\"let\\\"===state.tokens.next.id||\\\"const\\\"===state.tokens.next.id?(advance(state.tokens.next.id),letscope=!0,state.funct[\\\"(scope)\\\"].stack(),state.tokens.curr.fud({prefix:!0})):Object.create(varstatement).fud({prefix:!0,implied:\\\"for\\\",ignore:!ok}),advance(nextop.value),expression(20),advance(\\\")\\\",t),\\\"in\\\"===nextop.value&&state.option.forin&&(state.forinifcheckneeded=!0,void 0===state.forinifchecks&&(state.forinifchecks=[]),state.forinifchecks.push({type:\\\"(none)\\\"})),state.funct[\\\"(breakage)\\\"]+=1,state.funct[\\\"(loopage)\\\"]+=1,s=block(!0,!0),\\\"in\\\"===nextop.value&&state.option.forin){if(state.forinifchecks&&state.forinifchecks.length>0){var check=state.forinifchecks.pop();(s&&s.length>0&&(\\\"object\\\"!=typeof s[0]||\\\"if\\\"!==s[0].value)||\\\"(positive)\\\"===check.type&&s.length>1||\\\"(negative)\\\"===check.type)&&warning(\\\"W089\\\",this)}state.forinifcheckneeded=!1}state.funct[\\\"(breakage)\\\"]-=1,state.funct[\\\"(loopage)\\\"]-=1}else{if(foreachtok&&error(\\\"E045\\\",foreachtok),\\\";\\\"!==state.tokens.next.id)if(\\\"var\\\"===state.tokens.next.id)advance(\\\"var\\\"),state.tokens.curr.fud();else if(\\\"let\\\"===state.tokens.next.id)advance(\\\"let\\\"),letscope=!0,state.funct[\\\"(scope)\\\"].stack(),state.tokens.curr.fud();else for(;expression(0,\\\"for\\\"),\\\",\\\"===state.tokens.next.id;)comma();if(nolinebreak(state.tokens.curr),advance(\\\";\\\"),state.funct[\\\"(loopage)\\\"]+=1,\\\";\\\"!==state.tokens.next.id&&checkCondAssignment(expression(0)),nolinebreak(state.tokens.curr),advance(\\\";\\\"),\\\";\\\"===state.tokens.next.id&&error(\\\"E021\\\",state.tokens.next,\\\")\\\",\\\";\\\"),\\\")\\\"!==state.tokens.next.id)for(;expression(0,\\\"for\\\"),\\\",\\\"===state.tokens.next.id;)comma();advance(\\\")\\\",t),state.funct[\\\"(breakage)\\\"]+=1,block(!0,!0),state.funct[\\\"(breakage)\\\"]-=1,state.funct[\\\"(loopage)\\\"]-=1}return letscope&&state.funct[\\\"(scope)\\\"].unstack(),this}).labelled=!0,stmt(\\\"break\\\",function(){var v=state.tokens.next.value;return state.option.asi||nolinebreak(this),\\\";\\\"===state.tokens.next.id||state.tokens.next.reach||state.tokens.curr.line!==startLine(state.tokens.next)?0===state.funct[\\\"(breakage)\\\"]&&warning(\\\"W052\\\",state.tokens.next,this.value):(state.funct[\\\"(scope)\\\"].funct.hasBreakLabel(v)||warning(\\\"W090\\\",state.tokens.next,v),this.first=state.tokens.next,advance()),reachable(this),this}).exps=!0,stmt(\\\"continue\\\",function(){var v=state.tokens.next.value;return 0===state.funct[\\\"(breakage)\\\"]&&warning(\\\"W052\\\",state.tokens.next,this.value),state.funct[\\\"(loopage)\\\"]||warning(\\\"W052\\\",state.tokens.next,this.value),state.option.asi||nolinebreak(this),\\\";\\\"===state.tokens.next.id||state.tokens.next.reach||state.tokens.curr.line===startLine(state.tokens.next)&&(state.funct[\\\"(scope)\\\"].funct.hasBreakLabel(v)||warning(\\\"W090\\\",state.tokens.next,v),this.first=state.tokens.next,advance()),reachable(this),this}).exps=!0,stmt(\\\"return\\\",function(){return this.line===startLine(state.tokens.next)?\\\";\\\"===state.tokens.next.id||state.tokens.next.reach||(this.first=expression(0),!this.first||\\\"(punctuator)\\\"!==this.first.type||\\\"=\\\"!==this.first.value||this.first.paren||state.option.boss||warningAt(\\\"W093\\\",this.first.line,this.first.character)):\\\"(punctuator)\\\"===state.tokens.next.type&&[\\\"[\\\",\\\"{\\\",\\\"+\\\",\\\"-\\\"].indexOf(state.tokens.next.value)>-1&&nolinebreak(this),reachable(this),this}).exps=!0,function(x){x.exps=!0,x.lbp=25}(prefix(\\\"yield\\\",function(){var prev=state.tokens.prev;state.inES6(!0)&&!state.funct[\\\"(generator)\\\"]?\\\"(catch)\\\"===state.funct[\\\"(name)\\\"]&&state.funct[\\\"(context)\\\"][\\\"(generator)\\\"]||error(\\\"E046\\\",state.tokens.curr,\\\"yield\\\"):state.inES6()||warning(\\\"W104\\\",state.tokens.curr,\\\"yield\\\",\\\"6\\\"),state.funct[\\\"(generator)\\\"]=\\\"yielded\\\";var delegatingYield=!1;return\\\"*\\\"===state.tokens.next.value&&(delegatingYield=!0,advance(\\\"*\\\")),this.line!==startLine(state.tokens.next)&&state.inMoz()?state.option.asi||nolinebreak(this):((delegatingYield||\\\";\\\"!==state.tokens.next.id&&!state.option.asi&&!state.tokens.next.reach&&state.tokens.next.nud)&&(nobreaknonadjacent(state.tokens.curr,state.tokens.next),this.first=expression(10),\\\"(punctuator)\\\"!==this.first.type||\\\"=\\\"!==this.first.value||this.first.paren||state.option.boss||warningAt(\\\"W093\\\",this.first.line,this.first.character)),state.inMoz()&&\\\")\\\"!==state.tokens.next.id&&(prev.lbp>30||!prev.assign&&!isEndOfExpr()||\\\"yield\\\"===prev.id)&&error(\\\"E050\\\",this)),this})),stmt(\\\"throw\\\",function(){return nolinebreak(this),this.first=expression(20),reachable(this),this}).exps=!0,stmt(\\\"import\\\",function(){if(state.inES6()||warning(\\\"W119\\\",state.tokens.curr,\\\"import\\\",\\\"6\\\"),\\\"(string)\\\"===state.tokens.next.type)return advance(\\\"(string)\\\"),this;if(state.tokens.next.identifier){if(this.name=identifier(),state.funct[\\\"(scope)\\\"].addlabel(this.name,{type:\\\"const\\\",token:state.tokens.curr}),\\\",\\\"!==state.tokens.next.value)return advance(\\\"from\\\"),advance(\\\"(string)\\\"),this;advance(\\\",\\\")}if(\\\"*\\\"===state.tokens.next.id)advance(\\\"*\\\"),advance(\\\"as\\\"),state.tokens.next.identifier&&(this.name=identifier(),state.funct[\\\"(scope)\\\"].addlabel(this.name,{type:\\\"const\\\",token:state.tokens.curr}));else for(advance(\\\"{\\\");;){if(\\\"}\\\"===state.tokens.next.value){advance(\\\"}\\\");break}var importName;if(\\\"default\\\"===state.tokens.next.type?(importName=\\\"default\\\",advance(\\\"default\\\")):importName=identifier(),\\\"as\\\"===state.tokens.next.value&&(advance(\\\"as\\\"),importName=identifier()),state.funct[\\\"(scope)\\\"].addlabel(importName,{type:\\\"const\\\",token:state.tokens.curr}),\\\",\\\"!==state.tokens.next.value){if(\\\"}\\\"===state.tokens.next.value){advance(\\\"}\\\");break}error(\\\"E024\\\",state.tokens.next,state.tokens.next.value);break}advance(\\\",\\\")}return advance(\\\"from\\\"),advance(\\\"(string)\\\"),this}).exps=!0,stmt(\\\"export\\\",function(){var token,identifier,ok=!0;if(state.inES6()||(warning(\\\"W119\\\",state.tokens.curr,\\\"export\\\",\\\"6\\\"),ok=!1),state.funct[\\\"(scope)\\\"].block.isGlobal()||(error(\\\"E053\\\",state.tokens.curr),ok=!1),\\\"*\\\"===state.tokens.next.value)return advance(\\\"*\\\"),advance(\\\"from\\\"),advance(\\\"(string)\\\"),this;if(\\\"default\\\"===state.tokens.next.type){state.nameStack.set(state.tokens.next),advance(\\\"default\\\");var exportType=state.tokens.next.id;return(\\\"function\\\"===exportType||\\\"class\\\"===exportType)&&(this.block=!0),token=peek(),expression(10),identifier=token.value,this.block&&(state.funct[\\\"(scope)\\\"].addlabel(identifier,{type:exportType,token:token}),state.funct[\\\"(scope)\\\"].setExported(identifier,token)),this}if(\\\"{\\\"===state.tokens.next.value){advance(\\\"{\\\");for(var exportedTokens=[];;){if(state.tokens.next.identifier||error(\\\"E030\\\",state.tokens.next,state.tokens.next.value),advance(),exportedTokens.push(state.tokens.curr),\\\"as\\\"===state.tokens.next.value&&(advance(\\\"as\\\"),state.tokens.next.identifier||error(\\\"E030\\\",state.tokens.next,state.tokens.next.value),advance()),\\\",\\\"!==state.tokens.next.value){if(\\\"}\\\"===state.tokens.next.value){advance(\\\"}\\\");break}error(\\\"E024\\\",state.tokens.next,state.tokens.next.value);break}advance(\\\",\\\")}return\\\"from\\\"===state.tokens.next.value?(advance(\\\"from\\\"),advance(\\\"(string)\\\")):ok&&exportedTokens.forEach(function(token){state.funct[\\\"(scope)\\\"].setExported(token.value,token)}),this}if(\\\"var\\\"===state.tokens.next.id)advance(\\\"var\\\"),state.tokens.curr.fud({inexport:!0});else if(\\\"let\\\"===state.tokens.next.id)advance(\\\"let\\\"),state.tokens.curr.fud({inexport:!0});else if(\\\"const\\\"===state.tokens.next.id)advance(\\\"const\\\"),state.tokens.curr.fud({inexport:!0});else if(\\\"function\\\"===state.tokens.next.id)this.block=!0,advance(\\\"function\\\"),state.syntax[\\\"function\\\"].fud({inexport:!0});else if(\\\"class\\\"===state.tokens.next.id){this.block=!0,advance(\\\"class\\\");var classNameToken=state.tokens.next;state.syntax[\\\"class\\\"].fud(),state.funct[\\\"(scope)\\\"].setExported(classNameToken.value,classNameToken)}else error(\\\"E024\\\",state.tokens.next,state.tokens.next.value);return this}).exps=!0,FutureReservedWord(\\\"abstract\\\"),FutureReservedWord(\\\"boolean\\\"),FutureReservedWord(\\\"byte\\\"),FutureReservedWord(\\\"char\\\"),FutureReservedWord(\\\"class\\\",{es5:!0,nud:classdef}),FutureReservedWord(\\\"double\\\"),FutureReservedWord(\\\"enum\\\",{es5:!0}),FutureReservedWord(\\\"export\\\",{es5:!0}),FutureReservedWord(\\\"extends\\\",{es5:!0}),FutureReservedWord(\\\"final\\\"),FutureReservedWord(\\\"float\\\"),FutureReservedWord(\\\"goto\\\"),FutureReservedWord(\\\"implements\\\",{es5:!0,strictOnly:!0}),FutureReservedWord(\\\"import\\\",{es5:!0}),FutureReservedWord(\\\"int\\\"),FutureReservedWord(\\\"interface\\\",{es5:!0,strictOnly:!0}),FutureReservedWord(\\\"long\\\"),FutureReservedWord(\\\"native\\\"),FutureReservedWord(\\\"package\\\",{es5:!0,strictOnly:!0}),FutureReservedWord(\\\"private\\\",{es5:!0,strictOnly:!0}),FutureReservedWord(\\\"protected\\\",{es5:!0,strictOnly:!0}),FutureReservedWord(\\\"public\\\",{es5:!0,strictOnly:!0}),FutureReservedWord(\\\"short\\\"),FutureReservedWord(\\\"static\\\",{es5:!0,strictOnly:!0}),FutureReservedWord(\\\"super\\\",{es5:!0}),FutureReservedWord(\\\"synchronized\\\"),FutureReservedWord(\\\"transient\\\"),FutureReservedWord(\\\"volatile\\\");var lookupBlockType=function(){var pn,pn1,prev,i=-1,bracketStack=0,ret={};checkPunctuators(state.tokens.curr,[\\\"[\\\",\\\"{\\\"])&&(bracketStack+=1);do{if(prev=-1===i?state.tokens.curr:pn,pn=-1===i?state.tokens.next:peek(i),pn1=peek(i+1),i+=1,checkPunctuators(pn,[\\\"[\\\",\\\"{\\\"])?bracketStack+=1:checkPunctuators(pn,[\\\"]\\\",\\\"}\\\"])&&(bracketStack-=1),1===bracketStack&&pn.identifier&&\\\"for\\\"===pn.value&&!checkPunctuator(prev,\\\".\\\")){ret.isCompArray=!0,ret.notJson=!0;break}if(0===bracketStack&&checkPunctuators(pn,[\\\"}\\\",\\\"]\\\"])){if(\\\"=\\\"===pn1.value){ret.isDestAssign=!0,ret.notJson=!0;break}if(\\\".\\\"===pn1.value){ret.notJson=!0;break}}checkPunctuator(pn,\\\";\\\")&&(ret.isBlock=!0,ret.notJson=!0)}while(bracketStack>0&&\\\"(end)\\\"!==pn.id);return ret},arrayComprehension=function(){function declare(v){var l=_current.variables.filter(function(elt){return elt.value===v?(elt.undef=!1,v):void 0}).length;return 0!==l}function use(v){var l=_current.variables.filter(function(elt){return elt.value!==v||elt.undef?void 0:(elt.unused===!0&&(elt.unused=!1),v)}).length;return 0===l}var _current,CompArray=function(){this.mode=\\\"use\\\",this.variables=[]},_carrays=[];return{stack:function(){_current=new CompArray,_carrays.push(_current)},unstack:function(){_current.variables.filter(function(v){v.unused&&warning(\\\"W098\\\",v.token,v.raw_text||v.value),v.undef&&state.funct[\\\"(scope)\\\"].block.use(v.value,v.token)}),_carrays.splice(-1,1),_current=_carrays[_carrays.length-1]},setState:function(s){_.contains([\\\"use\\\",\\\"define\\\",\\\"generate\\\",\\\"filter\\\"],s)&&(_current.mode=s)},check:function(v){return _current?_current&&\\\"use\\\"===_current.mode?(use(v)&&_current.variables.push({funct:state.funct,token:state.tokens.curr,value:v,undef:!0,unused:!1}),!0):_current&&\\\"define\\\"===_current.mode?(declare(v)||_current.variables.push({funct:state.funct,token:state.tokens.curr,value:v,undef:!1,unused:!0}),!0):_current&&\\\"generate\\\"===_current.mode?(state.funct[\\\"(scope)\\\"].block.use(v,state.tokens.curr),!0):_current&&\\\"filter\\\"===_current.mode?(use(v)&&state.funct[\\\"(scope)\\\"].block.use(v,state.tokens.curr),!0):!1:void 0}}},escapeRegex=function(str){return str.replace(/[-\\\\/\\\\\\\\^$*+?.()|[\\\\]{}]/g,\\\"\\\\\\\\$&\\\")},itself=function(s,o,g){function each(obj,cb){obj&&(Array.isArray(obj)||\\\"object\\\"!=typeof obj||(obj=Object.keys(obj)),obj.forEach(cb))}var i,k,x,reIgnoreStr,reIgnore,optionKeys,newOptionObj={},newIgnoredObj={};o=_.clone(o),state.reset(),o&&o.scope?JSHINT.scope=o.scope:(JSHINT.errors=[],JSHINT.undefs=[],JSHINT.internals=[],JSHINT.blacklist={},JSHINT.scope=\\\"(main)\\\"),predefined=Object.create(null),combine(predefined,vars.ecmaIdentifiers[3]),combine(predefined,vars.reservedVars),combine(predefined,g||{}),declared=Object.create(null);var exported=Object.create(null);if(o)for(each(o.predef||null,function(item){var slice,prop;\\\"-\\\"===item[0]?(slice=item.slice(1),JSHINT.blacklist[slice]=slice,delete predefined[slice]):(prop=Object.getOwnPropertyDescriptor(o.predef,item),predefined[item]=prop?prop.value:!1)}),each(o.exported||null,function(item){exported[item]=!0}),delete o.predef,delete o.exported,optionKeys=Object.keys(o),x=0;optionKeys.length>x;x++)if(/^-W\\\\d{3}$/g.test(optionKeys[x]))newIgnoredObj[optionKeys[x].slice(1)]=!0;else{var optionKey=optionKeys[x];newOptionObj[optionKey]=o[optionKey],(\\\"esversion\\\"===optionKey&&5===o[optionKey]||\\\"es5\\\"===optionKey&&o[optionKey])&&warning(\\\"I003\\\"),\\\"newcap\\\"===optionKeys[x]&&o[optionKey]===!1&&(newOptionObj[\\\"(explicitNewcap)\\\"]=!0)}state.option=newOptionObj,state.ignored=newIgnoredObj,state.option.indent=state.option.indent||4,state.option.maxerr=state.option.maxerr||50,indent=1;var scopeManagerInst=scopeManager(state,predefined,exported,declared);if(scopeManagerInst.on(\\\"warning\\\",function(ev){warning.apply(null,[ev.code,ev.token].concat(ev.data))}),scopeManagerInst.on(\\\"error\\\",function(ev){error.apply(null,[ev.code,ev.token].concat(ev.data))}),state.funct=functor(\\\"(global)\\\",null,{\\\"(global)\\\":!0,\\\"(scope)\\\":scopeManagerInst,\\\"(comparray)\\\":arrayComprehension(),\\\"(metrics)\\\":createMetrics(state.tokens.next)}),functions=[state.funct],urls=[],stack=null,member={},membersOnly=null,inblock=!1,lookahead=[],!isString(s)&&!Array.isArray(s))return errorAt(\\\"E004\\\",0),!1;api={get isJSON(){return state.jsonMode},getOption:function(name){return state.option[name]||null},getCache:function(name){return state.cache[name]},setCache:function(name,value){state.cache[name]=value},warn:function(code,data){warningAt.apply(null,[code,data.line,data.char].concat(data.data))},on:function(names,listener){names.split(\\\" \\\").forEach(function(name){emitter.on(name,listener)}.bind(this))}},emitter.removeAllListeners(),(extraModules||[]).forEach(function(func){func(api)}),state.tokens.prev=state.tokens.curr=state.tokens.next=state.syntax[\\\"(begin)\\\"],o&&o.ignoreDelimiters&&(Array.isArray(o.ignoreDelimiters)||(o.ignoreDelimiters=[o.ignoreDelimiters]),o.ignoreDelimiters.forEach(function(delimiterPair){delimiterPair.start&&delimiterPair.end&&(reIgnoreStr=escapeRegex(delimiterPair.start)+\\\"[\\\\\\\\s\\\\\\\\S]*?\\\"+escapeRegex(delimiterPair.end),reIgnore=RegExp(reIgnoreStr,\\\"ig\\\"),s=s.replace(reIgnore,function(match){return match.replace(/./g,\\\" \\\")}))})),lex=new Lexer(s),lex.on(\\\"warning\\\",function(ev){warningAt.apply(null,[ev.code,ev.line,ev.character].concat(ev.data))}),lex.on(\\\"error\\\",function(ev){errorAt.apply(null,[ev.code,ev.line,ev.character].concat(ev.data))}),lex.on(\\\"fatal\\\",function(ev){quit(\\\"E041\\\",ev.line,ev.from)}),lex.on(\\\"Identifier\\\",function(ev){emitter.emit(\\\"Identifier\\\",ev)}),lex.on(\\\"String\\\",function(ev){emitter.emit(\\\"String\\\",ev)}),lex.on(\\\"Number\\\",function(ev){emitter.emit(\\\"Number\\\",ev)}),lex.start();for(var name in o)_.has(o,name)&&checkOption(name,state.tokens.curr);assume(),combine(predefined,g||{}),comma.first=!0;try{switch(advance(),state.tokens.next.id){case\\\"{\\\":case\\\"[\\\":destructuringAssignOrJsonValue();break;default:directives(),state.directive[\\\"use strict\\\"]&&\\\"global\\\"!==state.option.strict&&warning(\\\"W097\\\",state.tokens.prev),statements()}\\\"(end)\\\"!==state.tokens.next.id&&quit(\\\"E041\\\",state.tokens.curr.line),state.funct[\\\"(scope)\\\"].unstack()}catch(err){if(!err||\\\"JSHintError\\\"!==err.name)throw err;var nt=state.tokens.next||{};JSHINT.errors.push({scope:\\\"(main)\\\",raw:err.raw,code:err.code,reason:err.message,line:err.line||nt.line,character:err.character||nt.from},null)}if(\\\"(main)\\\"===JSHINT.scope)for(o=o||{},i=0;JSHINT.internals.length>i;i+=1)k=JSHINT.internals[i],o.scope=k.elem,itself(k.value,o,g);return 0===JSHINT.errors.length};return itself.addModule=function(func){extraModules.push(func)},itself.addModule(style.register),itself.data=function(){var fu,f,i,j,n,globals,data={functions:[],options:state.option};itself.errors.length&&(data.errors=itself.errors),state.jsonMode&&(data.json=!0);var impliedGlobals=state.funct[\\\"(scope)\\\"].getImpliedGlobals();for(impliedGlobals.length>0&&(data.implieds=impliedGlobals),urls.length>0&&(data.urls=urls),globals=state.funct[\\\"(scope)\\\"].getUsedOrDefinedGlobals(),globals.length>0&&(data.globals=globals),i=1;functions.length>i;i+=1){for(f=functions[i],fu={},j=0;functionicity.length>j;j+=1)fu[functionicity[j]]=[];for(j=0;functionicity.length>j;j+=1)0===fu[functionicity[j]].length&&delete fu[functionicity[j]];fu.name=f[\\\"(name)\\\"],fu.param=f[\\\"(params)\\\"],fu.line=f[\\\"(line)\\\"],fu.character=f[\\\"(character)\\\"],fu.last=f[\\\"(last)\\\"],fu.lastcharacter=f[\\\"(lastcharacter)\\\"],fu.metrics={complexity:f[\\\"(metrics)\\\"].ComplexityCount,parameters:f[\\\"(metrics)\\\"].arity,statements:f[\\\"(metrics)\\\"].statementCount},data.functions.push(fu)}var unuseds=state.funct[\\\"(scope)\\\"].getUnuseds();unuseds.length>0&&(data.unused=unuseds);for(n in member)if(\\\"number\\\"==typeof member[n]){data.member=member;break}return data},itself.jshint=itself,itself}();\\\"object\\\"==typeof exports&&exports&&(exports.JSHINT=JSHINT)},{\\\"../lodash\\\":\\\"/node_modules/jshint/lodash.js\\\",\\\"./lex.js\\\":\\\"/node_modules/jshint/src/lex.js\\\",\\\"./messages.js\\\":\\\"/node_modules/jshint/src/messages.js\\\",\\\"./options.js\\\":\\\"/node_modules/jshint/src/options.js\\\",\\\"./reg.js\\\":\\\"/node_modules/jshint/src/reg.js\\\",\\\"./scope-manager.js\\\":\\\"/node_modules/jshint/src/scope-manager.js\\\",\\\"./state.js\\\":\\\"/node_modules/jshint/src/state.js\\\",\\\"./style.js\\\":\\\"/node_modules/jshint/src/style.js\\\",\\\"./vars.js\\\":\\\"/node_modules/jshint/src/vars.js\\\",events:\\\"/node_modules/browserify/node_modules/events/events.js\\\"}],\\\"/node_modules/jshint/src/lex.js\\\":[function(_dereq_,module,exports){\\\"use strict\\\";function asyncTrigger(){var _checks=[];return{push:function(fn){_checks.push(fn)},check:function(){for(var check=0;_checks.length>check;++check)_checks[check]();_checks.splice(0,_checks.length)}}}function Lexer(source){var lines=source;\\\"string\\\"==typeof lines&&(lines=lines.replace(/\\\\r\\\\n/g,\\\"\\\\n\\\").replace(/\\\\r/g,\\\"\\\\n\\\").split(\\\"\\\\n\\\")),lines[0]&&\\\"#!\\\"===lines[0].substr(0,2)&&(-1!==lines[0].indexOf(\\\"node\\\")&&(state.option.node=!0),lines[0]=\\\"\\\"),this.emitter=new events.EventEmitter,this.source=source,this.setLines(lines),this.prereg=!0,this.line=0,this.char=1,this.from=1,this.input=\\\"\\\",this.inComment=!1,this.context=[],this.templateStarts=[];for(var i=0;state.option.indent>i;i+=1)state.tab+=\\\" \\\";this.ignoreLinterErrors=!1}var _=_dereq_(\\\"../lodash\\\"),events=_dereq_(\\\"events\\\"),reg=_dereq_(\\\"./reg.js\\\"),state=_dereq_(\\\"./state.js\\\").state,unicodeData=_dereq_(\\\"../data/ascii-identifier-data.js\\\"),asciiIdentifierStartTable=unicodeData.asciiIdentifierStartTable,asciiIdentifierPartTable=unicodeData.asciiIdentifierPartTable,Token={Identifier:1,Punctuator:2,NumericLiteral:3,StringLiteral:4,Comment:5,Keyword:6,NullLiteral:7,BooleanLiteral:8,RegExp:9,TemplateHead:10,TemplateMiddle:11,TemplateTail:12,NoSubstTemplate:13},Context={Block:1,Template:2};Lexer.prototype={_lines:[],inContext:function(ctxType){return this.context.length>0&&this.context[this.context.length-1].type===ctxType},pushContext:function(ctxType){this.context.push({type:ctxType})},popContext:function(){return this.context.pop()},isContext:function(context){return this.context.length>0&&this.context[this.context.length-1]===context},currentContext:function(){return this.context.length>0&&this.context[this.context.length-1]},getLines:function(){return this._lines=state.lines,this._lines},setLines:function(val){this._lines=val,state.lines=this._lines},peek:function(i){return this.input.charAt(i||0)},skip:function(i){i=i||1,this.char+=i,this.input=this.input.slice(i)},on:function(names,listener){names.split(\\\" \\\").forEach(function(name){this.emitter.on(name,listener)}.bind(this))},trigger:function(){this.emitter.emit.apply(this.emitter,Array.prototype.slice.call(arguments))},triggerAsync:function(type,args,checks,fn){checks.push(function(){fn()&&this.trigger(type,args)}.bind(this))},scanPunctuator:function(){var ch2,ch3,ch4,ch1=this.peek();switch(ch1){case\\\".\\\":if(/^[0-9]$/.test(this.peek(1)))return null;if(\\\".\\\"===this.peek(1)&&\\\".\\\"===this.peek(2))return{type:Token.Punctuator,value:\\\"...\\\"};case\\\"(\\\":case\\\")\\\":case\\\";\\\":case\\\",\\\":case\\\"[\\\":case\\\"]\\\":case\\\":\\\":case\\\"~\\\":case\\\"?\\\":return{type:Token.Punctuator,value:ch1};case\\\"{\\\":return this.pushContext(Context.Block),{type:Token.Punctuator,value:ch1};case\\\"}\\\":return this.inContext(Context.Block)&&this.popContext(),{type:Token.Punctuator,value:ch1};case\\\"#\\\":return{type:Token.Punctuator,value:ch1};case\\\"\\\":return null}return ch2=this.peek(1),ch3=this.peek(2),ch4=this.peek(3),\\\">\\\"===ch1&&\\\">\\\"===ch2&&\\\">\\\"===ch3&&\\\"=\\\"===ch4?{type:Token.Punctuator,value:\\\">>>=\\\"}:\\\"=\\\"===ch1&&\\\"=\\\"===ch2&&\\\"=\\\"===ch3?{type:Token.Punctuator,value:\\\"===\\\"}:\\\"!\\\"===ch1&&\\\"=\\\"===ch2&&\\\"=\\\"===ch3?{type:Token.Punctuator,value:\\\"!==\\\"}:\\\">\\\"===ch1&&\\\">\\\"===ch2&&\\\">\\\"===ch3?{type:Token.Punctuator,value:\\\">>>\\\"}:\\\"<\\\"===ch1&&\\\"<\\\"===ch2&&\\\"=\\\"===ch3?{type:Token.Punctuator,value:\\\"<<=\\\"}:\\\">\\\"===ch1&&\\\">\\\"===ch2&&\\\"=\\\"===ch3?{type:Token.Punctuator,value:\\\">>=\\\"}:\\\"=\\\"===ch1&&\\\">\\\"===ch2?{type:Token.Punctuator,value:ch1+ch2}:ch1===ch2&&\\\"+-<>&|\\\".indexOf(ch1)>=0?{type:Token.Punctuator,value:ch1+ch2}:\\\"<>=!+-*%&|^\\\".indexOf(ch1)>=0?\\\"=\\\"===ch2?{type:Token.Punctuator,value:ch1+ch2}:{type:Token.Punctuator,value:ch1}:\\\"/\\\"===ch1?\\\"=\\\"===ch2?{type:Token.Punctuator,value:\\\"/=\\\"}:{type:Token.Punctuator,value:\\\"/\\\"}:null},scanComments:function(){function commentToken(label,body,opt){var special=[\\\"jshint\\\",\\\"jslint\\\",\\\"members\\\",\\\"member\\\",\\\"globals\\\",\\\"global\\\",\\\"exported\\\"],isSpecial=!1,value=label+body,commentType=\\\"plain\\\";return opt=opt||{},opt.isMultiline&&(value+=\\\"*/\\\"),body=body.replace(/\\\\n/g,\\\" \\\"),\\\"/*\\\"===label&®.fallsThrough.test(body)&&(isSpecial=!0,commentType=\\\"falls through\\\"),special.forEach(function(str){if(!isSpecial&&(\\\"//\\\"!==label||\\\"jshint\\\"===str)&&(\\\" \\\"===body.charAt(str.length)&&body.substr(0,str.length)===str&&(isSpecial=!0,label+=str,body=body.substr(str.length)),isSpecial||\\\" \\\"!==body.charAt(0)||\\\" \\\"!==body.charAt(str.length+1)||body.substr(1,str.length)!==str||(isSpecial=!0,label=label+\\\" \\\"+str,body=body.substr(str.length+1)),isSpecial))switch(str){case\\\"member\\\":commentType=\\\"members\\\";break;case\\\"global\\\":commentType=\\\"globals\\\";break;default:var options=body.split(\\\":\\\").map(function(v){return v.replace(/^\\\\s+/,\\\"\\\").replace(/\\\\s+$/,\\\"\\\")});if(2===options.length)switch(options[0]){case\\\"ignore\\\":switch(options[1]){case\\\"start\\\":self.ignoringLinterErrors=!0,isSpecial=!1;break;case\\\"end\\\":self.ignoringLinterErrors=!1,isSpecial=!1}}commentType=str}}),{type:Token.Comment,commentType:commentType,value:value,body:body,isSpecial:isSpecial,isMultiline:opt.isMultiline||!1,isMalformed:opt.isMalformed||!1}}var ch1=this.peek(),ch2=this.peek(1),rest=this.input.substr(2),startLine=this.line,startChar=this.char,self=this;if(\\\"*\\\"===ch1&&\\\"/\\\"===ch2)return this.trigger(\\\"error\\\",{code:\\\"E018\\\",line:startLine,character:startChar}),this.skip(2),null;if(\\\"/\\\"!==ch1||\\\"*\\\"!==ch2&&\\\"/\\\"!==ch2)return null;if(\\\"/\\\"===ch2)return this.skip(this.input.length),commentToken(\\\"//\\\",rest);var body=\\\"\\\";if(\\\"*\\\"===ch2){for(this.inComment=!0,this.skip(2);\\\"*\\\"!==this.peek()||\\\"/\\\"!==this.peek(1);)if(\\\"\\\"===this.peek()){if(body+=\\\"\\\\n\\\",!this.nextLine())return this.trigger(\\\"error\\\",{code:\\\"E017\\\",line:startLine,character:startChar}),this.inComment=!1,commentToken(\\\"/*\\\",body,{isMultiline:!0,isMalformed:!0})}else body+=this.peek(),this.skip();return this.skip(2),this.inComment=!1,commentToken(\\\"/*\\\",body,{isMultiline:!0})}},scanKeyword:function(){var result=/^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input),keywords=[\\\"if\\\",\\\"in\\\",\\\"do\\\",\\\"var\\\",\\\"for\\\",\\\"new\\\",\\\"try\\\",\\\"let\\\",\\\"this\\\",\\\"else\\\",\\\"case\\\",\\\"void\\\",\\\"with\\\",\\\"enum\\\",\\\"while\\\",\\\"break\\\",\\\"catch\\\",\\\"throw\\\",\\\"const\\\",\\\"yield\\\",\\\"class\\\",\\\"super\\\",\\\"return\\\",\\\"typeof\\\",\\\"delete\\\",\\\"switch\\\",\\\"export\\\",\\\"import\\\",\\\"default\\\",\\\"finally\\\",\\\"extends\\\",\\\"function\\\",\\\"continue\\\",\\\"debugger\\\",\\\"instanceof\\\"];return result&&keywords.indexOf(result[0])>=0?{type:Token.Keyword,value:result[0]}:null},scanIdentifier:function(){function isNonAsciiIdentifierStart(code){return code>256}function isNonAsciiIdentifierPart(code){return code>256}function isHexDigit(str){return/^[0-9a-fA-F]$/.test(str)}function removeEscapeSequences(id){return id.replace(/\\\\\\\\u([0-9a-fA-F]{4})/g,function(m0,codepoint){return String.fromCharCode(parseInt(codepoint,16))})}var type,char,id=\\\"\\\",index=0,readUnicodeEscapeSequence=function(){if(index+=1,\\\"u\\\"!==this.peek(index))return null;var code,ch1=this.peek(index+1),ch2=this.peek(index+2),ch3=this.peek(index+3),ch4=this.peek(index+4);return isHexDigit(ch1)&&isHexDigit(ch2)&&isHexDigit(ch3)&&isHexDigit(ch4)?(code=parseInt(ch1+ch2+ch3+ch4,16),asciiIdentifierPartTable[code]||isNonAsciiIdentifierPart(code)?(index+=5,\\\"\\\\\\\\u\\\"+ch1+ch2+ch3+ch4):null):null}.bind(this),getIdentifierStart=function(){var chr=this.peek(index),code=chr.charCodeAt(0);return 92===code?readUnicodeEscapeSequence():128>code?asciiIdentifierStartTable[code]?(index+=1,chr):null:isNonAsciiIdentifierStart(code)?(index+=1,chr):null}.bind(this),getIdentifierPart=function(){var chr=this.peek(index),code=chr.charCodeAt(0);return 92===code?readUnicodeEscapeSequence():128>code?asciiIdentifierPartTable[code]?(index+=1,chr):null:isNonAsciiIdentifierPart(code)?(index+=1,chr):null}.bind(this);if(char=getIdentifierStart(),null===char)return null;for(id=char;char=getIdentifierPart(),null!==char;)id+=char;switch(id){case\\\"true\\\":case\\\"false\\\":type=Token.BooleanLiteral;break;case\\\"null\\\":type=Token.NullLiteral;break;default:type=Token.Identifier}return{type:type,value:removeEscapeSequences(id),text:id,tokenLength:id.length}},scanNumericLiteral:function(){function isDecimalDigit(str){return/^[0-9]$/.test(str)}function isOctalDigit(str){return/^[0-7]$/.test(str)}function isBinaryDigit(str){return/^[01]$/.test(str)}function isHexDigit(str){return/^[0-9a-fA-F]$/.test(str)}function isIdentifierStart(ch){return\\\"$\\\"===ch||\\\"_\\\"===ch||\\\"\\\\\\\\\\\"===ch||ch>=\\\"a\\\"&&\\\"z\\\">=ch||ch>=\\\"A\\\"&&\\\"Z\\\">=ch}var bad,index=0,value=\\\"\\\",length=this.input.length,char=this.peek(index),isAllowedDigit=isDecimalDigit,base=10,isLegacy=!1;if(\\\".\\\"!==char&&!isDecimalDigit(char))return null;if(\\\".\\\"!==char){for(value=this.peek(index),index+=1,char=this.peek(index),\\\"0\\\"===value&&((\\\"x\\\"===char||\\\"X\\\"===char)&&(isAllowedDigit=isHexDigit,base=16,index+=1,value+=char),(\\\"o\\\"===char||\\\"O\\\"===char)&&(isAllowedDigit=isOctalDigit,base=8,state.inES6(!0)||this.trigger(\\\"warning\\\",{code:\\\"W119\\\",line:this.line,character:this.char,data:[\\\"Octal integer literal\\\",\\\"6\\\"]}),index+=1,value+=char),(\\\"b\\\"===char||\\\"B\\\"===char)&&(isAllowedDigit=isBinaryDigit,base=2,state.inES6(!0)||this.trigger(\\\"warning\\\",{code:\\\"W119\\\",line:this.line,character:this.char,data:[\\\"Binary integer literal\\\",\\\"6\\\"]}),index+=1,value+=char),isOctalDigit(char)&&(isAllowedDigit=isOctalDigit,base=8,isLegacy=!0,bad=!1,index+=1,value+=char),!isOctalDigit(char)&&isDecimalDigit(char)&&(index+=1,value+=char));length>index;){if(char=this.peek(index),isLegacy&&isDecimalDigit(char))bad=!0;else if(!isAllowedDigit(char))break;value+=char,index+=1}if(isAllowedDigit!==isDecimalDigit)return!isLegacy&&2>=value.length?{type:Token.NumericLiteral,value:value,isMalformed:!0}:length>index&&(char=this.peek(index),isIdentifierStart(char))?null:{type:Token.NumericLiteral,value:value,base:base,isLegacy:isLegacy,isMalformed:!1}}if(\\\".\\\"===char)for(value+=char,index+=1;length>index&&(char=this.peek(index),isDecimalDigit(char));)value+=char,index+=1;if(\\\"e\\\"===char||\\\"E\\\"===char){if(value+=char,index+=1,char=this.peek(index),(\\\"+\\\"===char||\\\"-\\\"===char)&&(value+=this.peek(index),index+=1),char=this.peek(index),!isDecimalDigit(char))return null;for(value+=char,index+=1;length>index&&(char=this.peek(index),isDecimalDigit(char));)value+=char,index+=1}return length>index&&(char=this.peek(index),isIdentifierStart(char))?null:{type:Token.NumericLiteral,value:value,base:base,isMalformed:!isFinite(value)}},scanEscapeSequence:function(checks){var allowNewLine=!1,jump=1;this.skip();var char=this.peek();switch(char){case\\\"'\\\":this.triggerAsync(\\\"warning\\\",{code:\\\"W114\\\",line:this.line,character:this.char,data:[\\\"\\\\\\\\'\\\"]},checks,function(){return state.jsonMode});break;case\\\"b\\\":char=\\\"\\\\\\\\b\\\";break;case\\\"f\\\":char=\\\"\\\\\\\\f\\\";break;case\\\"n\\\":char=\\\"\\\\\\\\n\\\";break;case\\\"r\\\":char=\\\"\\\\\\\\r\\\";break;case\\\"t\\\":char=\\\"\\\\\\\\t\\\";break;case\\\"0\\\":char=\\\"\\\\\\\\0\\\";var n=parseInt(this.peek(1),10);this.triggerAsync(\\\"warning\\\",{code:\\\"W115\\\",line:this.line,character:this.char},checks,function(){return n>=0&&7>=n&&state.isStrict()});break;case\\\"u\\\":var hexCode=this.input.substr(1,4),code=parseInt(hexCode,16);isNaN(code)&&this.trigger(\\\"warning\\\",{code:\\\"W052\\\",line:this.line,character:this.char,data:[\\\"u\\\"+hexCode]}),char=String.fromCharCode(code),jump=5;break;case\\\"v\\\":this.triggerAsync(\\\"warning\\\",{code:\\\"W114\\\",line:this.line,character:this.char,data:[\\\"\\\\\\\\v\\\"]},checks,function(){return state.jsonMode}),char=\\\"\\u000b\\\";break;case\\\"x\\\":var x=parseInt(this.input.substr(1,2),16);this.triggerAsync(\\\"warning\\\",{code:\\\"W114\\\",line:this.line,character:this.char,data:[\\\"\\\\\\\\x-\\\"]},checks,function(){return state.jsonMode}),char=String.fromCharCode(x),jump=3;break;case\\\"\\\\\\\\\\\":char=\\\"\\\\\\\\\\\\\\\\\\\";break;case'\\\"':char='\\\\\\\\\\\"';break;case\\\"/\\\":break;case\\\"\\\":allowNewLine=!0,char=\\\"\\\"}return{\\\"char\\\":char,jump:jump,allowNewLine:allowNewLine}},scanTemplateLiteral:function(checks){var tokenType,ch,value=\\\"\\\",startLine=this.line,startChar=this.char,depth=this.templateStarts.length;if(!state.inES6(!0))return null;if(\\\"`\\\"===this.peek())tokenType=Token.TemplateHead,this.templateStarts.push({line:this.line,\\\"char\\\":this.char}),depth=this.templateStarts.length,this.skip(1),this.pushContext(Context.Template);else{if(!this.inContext(Context.Template)||\\\"}\\\"!==this.peek())return null;tokenType=Token.TemplateMiddle}for(;\\\"`\\\"!==this.peek();){for(;\\\"\\\"===(ch=this.peek());)if(value+=\\\"\\\\n\\\",!this.nextLine()){var startPos=this.templateStarts.pop();return this.trigger(\\\"error\\\",{code:\\\"E052\\\",line:startPos.line,character:startPos.char}),{type:tokenType,value:value,startLine:startLine,startChar:startChar,isUnclosed:!0,depth:depth,context:this.popContext()}}if(\\\"$\\\"===ch&&\\\"{\\\"===this.peek(1))return value+=\\\"${\\\",this.skip(2),{type:tokenType,value:value,startLine:startLine,startChar:startChar,isUnclosed:!1,depth:depth,context:this.currentContext()};\\nif(\\\"\\\\\\\\\\\"===ch){var escape=this.scanEscapeSequence(checks);value+=escape.char,this.skip(escape.jump)}else\\\"`\\\"!==ch&&(value+=ch,this.skip(1))}return tokenType=tokenType===Token.TemplateHead?Token.NoSubstTemplate:Token.TemplateTail,this.skip(1),this.templateStarts.pop(),{type:tokenType,value:value,startLine:startLine,startChar:startChar,isUnclosed:!1,depth:depth,context:this.popContext()}},scanStringLiteral:function(checks){var quote=this.peek();if('\\\"'!==quote&&\\\"'\\\"!==quote)return null;this.triggerAsync(\\\"warning\\\",{code:\\\"W108\\\",line:this.line,character:this.char},checks,function(){return state.jsonMode&&'\\\"'!==quote});var value=\\\"\\\",startLine=this.line,startChar=this.char,allowNewLine=!1;for(this.skip();this.peek()!==quote;)if(\\\"\\\"===this.peek()){if(allowNewLine?(allowNewLine=!1,this.triggerAsync(\\\"warning\\\",{code:\\\"W043\\\",line:this.line,character:this.char},checks,function(){return!state.option.multistr}),this.triggerAsync(\\\"warning\\\",{code:\\\"W042\\\",line:this.line,character:this.char},checks,function(){return state.jsonMode&&state.option.multistr})):this.trigger(\\\"warning\\\",{code:\\\"W112\\\",line:this.line,character:this.char}),!this.nextLine())return this.trigger(\\\"error\\\",{code:\\\"E029\\\",line:startLine,character:startChar}),{type:Token.StringLiteral,value:value,startLine:startLine,startChar:startChar,isUnclosed:!0,quote:quote}}else{allowNewLine=!1;var char=this.peek(),jump=1;if(\\\" \\\">char&&this.trigger(\\\"warning\\\",{code:\\\"W113\\\",line:this.line,character:this.char,data:[\\\"\\\"]}),\\\"\\\\\\\\\\\"===char){var parsed=this.scanEscapeSequence(checks);char=parsed.char,jump=parsed.jump,allowNewLine=parsed.allowNewLine}value+=char,this.skip(jump)}return this.skip(),{type:Token.StringLiteral,value:value,startLine:startLine,startChar:startChar,isUnclosed:!1,quote:quote}},scanRegExp:function(){var terminated,index=0,length=this.input.length,char=this.peek(),value=char,body=\\\"\\\",flags=[],malformed=!1,isCharSet=!1,scanUnexpectedChars=function(){\\\" \\\">char&&(malformed=!0,this.trigger(\\\"warning\\\",{code:\\\"W048\\\",line:this.line,character:this.char})),\\\"<\\\"===char&&(malformed=!0,this.trigger(\\\"warning\\\",{code:\\\"W049\\\",line:this.line,character:this.char,data:[char]}))}.bind(this);if(!this.prereg||\\\"/\\\"!==char)return null;for(index+=1,terminated=!1;length>index;)if(char=this.peek(index),value+=char,body+=char,isCharSet)\\\"]\\\"===char&&(\\\"\\\\\\\\\\\"!==this.peek(index-1)||\\\"\\\\\\\\\\\"===this.peek(index-2))&&(isCharSet=!1),\\\"\\\\\\\\\\\"===char&&(index+=1,char=this.peek(index),body+=char,value+=char,scanUnexpectedChars()),index+=1;else{if(\\\"\\\\\\\\\\\"===char){if(index+=1,char=this.peek(index),body+=char,value+=char,scanUnexpectedChars(),\\\"/\\\"===char){index+=1;continue}if(\\\"[\\\"===char){index+=1;continue}}if(\\\"[\\\"!==char){if(\\\"/\\\"===char){body=body.substr(0,body.length-1),terminated=!0,index+=1;break}index+=1}else isCharSet=!0,index+=1}if(!terminated)return this.trigger(\\\"error\\\",{code:\\\"E015\\\",line:this.line,character:this.from}),void this.trigger(\\\"fatal\\\",{line:this.line,from:this.from});for(;length>index&&(char=this.peek(index),/[gim]/.test(char));)flags.push(char),value+=char,index+=1;try{RegExp(body,flags.join(\\\"\\\"))}catch(err){malformed=!0,this.trigger(\\\"error\\\",{code:\\\"E016\\\",line:this.line,character:this.char,data:[err.message]})}return{type:Token.RegExp,value:value,flags:flags,isMalformed:malformed}},scanNonBreakingSpaces:function(){return state.option.nonbsp?this.input.search(/(\\\\u00A0)/):-1},scanUnsafeChars:function(){return this.input.search(reg.unsafeChars)},next:function(checks){this.from=this.char;var start;if(/\\\\s/.test(this.peek()))for(start=this.char;/\\\\s/.test(this.peek());)this.from+=1,this.skip();var match=this.scanComments()||this.scanStringLiteral(checks)||this.scanTemplateLiteral(checks);return match?match:(match=this.scanRegExp()||this.scanPunctuator()||this.scanKeyword()||this.scanIdentifier()||this.scanNumericLiteral(),match?(this.skip(match.tokenLength||match.value.length),match):null)},nextLine:function(){var char;if(this.line>=this.getLines().length)return!1;this.input=this.getLines()[this.line],this.line+=1,this.char=1,this.from=1;var inputTrimmed=this.input.trim(),startsWith=function(){return _.some(arguments,function(prefix){return 0===inputTrimmed.indexOf(prefix)})},endsWith=function(){return _.some(arguments,function(suffix){return-1!==inputTrimmed.indexOf(suffix,inputTrimmed.length-suffix.length)})};if(this.ignoringLinterErrors===!0&&(startsWith(\\\"/*\\\",\\\"//\\\")||this.inComment&&endsWith(\\\"*/\\\")||(this.input=\\\"\\\")),char=this.scanNonBreakingSpaces(),char>=0&&this.trigger(\\\"warning\\\",{code:\\\"W125\\\",line:this.line,character:char+1}),this.input=this.input.replace(/\\\\t/g,state.tab),char=this.scanUnsafeChars(),char>=0&&this.trigger(\\\"warning\\\",{code:\\\"W100\\\",line:this.line,character:char}),!this.ignoringLinterErrors&&state.option.maxlen&&state.option.maxlen=0;--i){var scopeLabels=_scopeStack[i][\\\"(labels)\\\"];if(scopeLabels[labelName])return scopeLabels}}function usedSoFarInCurrentFunction(labelName){for(var i=_scopeStack.length-1;i>=0;i--){var current=_scopeStack[i];if(current[\\\"(usages)\\\"][labelName])return current[\\\"(usages)\\\"][labelName];if(current===_currentFunctBody)break}return!1}function _checkOuterShadow(labelName,token){if(\\\"outer\\\"===state.option.shadow)for(var isGlobal=\\\"global\\\"===_currentFunctBody[\\\"(type)\\\"],isNewFunction=\\\"functionparams\\\"===_current[\\\"(type)\\\"],outsideCurrentFunction=!isGlobal,i=0;_scopeStack.length>i;i++){var stackItem=_scopeStack[i];isNewFunction||_scopeStack[i+1]!==_currentFunctBody||(outsideCurrentFunction=!1),outsideCurrentFunction&&stackItem[\\\"(labels)\\\"][labelName]&&warning(\\\"W123\\\",token,labelName),stackItem[\\\"(breakLabels)\\\"][labelName]&&warning(\\\"W123\\\",token,labelName)}}function _latedefWarning(type,labelName,token){state.option.latedef&&(state.option.latedef===!0&&\\\"function\\\"===type||\\\"function\\\"!==type)&&warning(\\\"W003\\\",token,labelName)}var _current,_scopeStack=[];_newScope(\\\"global\\\"),_current[\\\"(predefined)\\\"]=predefined;var _currentFunctBody=_current,usedPredefinedAndGlobals=Object.create(null),impliedGlobals=Object.create(null),unuseds=[],emitter=new events.EventEmitter,_getUnusedOption=function(unused_opt){return void 0===unused_opt&&(unused_opt=state.option.unused),unused_opt===!0&&(unused_opt=\\\"last-param\\\"),unused_opt},_warnUnused=function(name,tkn,type,unused_opt){var line=tkn.line,chr=tkn.from,raw_name=tkn.raw_text||name;unused_opt=_getUnusedOption(unused_opt);var warnable_types={vars:[\\\"var\\\"],\\\"last-param\\\":[\\\"var\\\",\\\"param\\\"],strict:[\\\"var\\\",\\\"param\\\",\\\"last-param\\\"]};unused_opt&&warnable_types[unused_opt]&&-1!==warnable_types[unused_opt].indexOf(type)&&warning(\\\"W098\\\",{line:line,from:chr},raw_name),(unused_opt||\\\"var\\\"===type)&&unuseds.push({name:name,line:line,character:chr})},scopeManagerInst={on:function(names,listener){names.split(\\\" \\\").forEach(function(name){emitter.on(name,listener)})},isPredefined:function(labelName){return!this.has(labelName)&&_.has(_scopeStack[0][\\\"(predefined)\\\"],labelName)},stack:function(type){var previousScope=_current;_newScope(type),type||\\\"functionparams\\\"!==previousScope[\\\"(type)\\\"]||(_current[\\\"(isFuncBody)\\\"]=!0,_current[\\\"(context)\\\"]=_currentFunctBody,_currentFunctBody=_current)},unstack:function(){var i,j,subScope=_scopeStack.length>1?_scopeStack[_scopeStack.length-2]:null,isUnstackingFunctionBody=_current===_currentFunctBody,isUnstackingFunctionParams=\\\"functionparams\\\"===_current[\\\"(type)\\\"],isUnstackingFunctionOuter=\\\"functionouter\\\"===_current[\\\"(type)\\\"],currentUsages=_current[\\\"(usages)\\\"],currentLabels=_current[\\\"(labels)\\\"],usedLabelNameList=Object.keys(currentUsages);for(currentUsages.__proto__&&-1===usedLabelNameList.indexOf(\\\"__proto__\\\")&&usedLabelNameList.push(\\\"__proto__\\\"),i=0;usedLabelNameList.length>i;i++){var usedLabelName=usedLabelNameList[i],usage=currentUsages[usedLabelName],usedLabel=currentLabels[usedLabelName];if(usedLabel){var usedLabelType=usedLabel[\\\"(type)\\\"];if(usedLabel[\\\"(useOutsideOfScope)\\\"]&&!state.option.funcscope){var usedTokens=usage[\\\"(tokens)\\\"];if(usedTokens)for(j=0;usedTokens.length>j;j++)usedLabel[\\\"(function)\\\"]===usedTokens[j][\\\"(function)\\\"]&&error(\\\"W038\\\",usedTokens[j],usedLabelName)}if(_current[\\\"(labels)\\\"][usedLabelName][\\\"(unused)\\\"]=!1,\\\"const\\\"===usedLabelType&&usage[\\\"(modified)\\\"])for(j=0;usage[\\\"(modified)\\\"].length>j;j++)error(\\\"E013\\\",usage[\\\"(modified)\\\"][j],usedLabelName);if((\\\"function\\\"===usedLabelType||\\\"class\\\"===usedLabelType)&&usage[\\\"(reassigned)\\\"])for(j=0;usage[\\\"(reassigned)\\\"].length>j;j++)error(\\\"W021\\\",usage[\\\"(reassigned)\\\"][j],usedLabelName,usedLabelType)}else if(isUnstackingFunctionOuter&&(state.funct[\\\"(isCapturing)\\\"]=!0),subScope)if(subScope[\\\"(usages)\\\"][usedLabelName]){var subScopeUsage=subScope[\\\"(usages)\\\"][usedLabelName];subScopeUsage[\\\"(modified)\\\"]=subScopeUsage[\\\"(modified)\\\"].concat(usage[\\\"(modified)\\\"]),subScopeUsage[\\\"(tokens)\\\"]=subScopeUsage[\\\"(tokens)\\\"].concat(usage[\\\"(tokens)\\\"]),subScopeUsage[\\\"(reassigned)\\\"]=subScopeUsage[\\\"(reassigned)\\\"].concat(usage[\\\"(reassigned)\\\"]),subScopeUsage[\\\"(onlyUsedSubFunction)\\\"]=!1}else subScope[\\\"(usages)\\\"][usedLabelName]=usage,isUnstackingFunctionBody&&(subScope[\\\"(usages)\\\"][usedLabelName][\\\"(onlyUsedSubFunction)\\\"]=!0);else if(\\\"boolean\\\"==typeof _current[\\\"(predefined)\\\"][usedLabelName]){if(delete declared[usedLabelName],usedPredefinedAndGlobals[usedLabelName]=marker,_current[\\\"(predefined)\\\"][usedLabelName]===!1&&usage[\\\"(reassigned)\\\"])for(j=0;usage[\\\"(reassigned)\\\"].length>j;j++)warning(\\\"W020\\\",usage[\\\"(reassigned)\\\"][j])}else if(usage[\\\"(tokens)\\\"])for(j=0;usage[\\\"(tokens)\\\"].length>j;j++){var undefinedToken=usage[\\\"(tokens)\\\"][j];undefinedToken.forgiveUndef||(state.option.undef&&!undefinedToken.ignoreUndef&&warning(\\\"W117\\\",undefinedToken,usedLabelName),impliedGlobals[usedLabelName]?impliedGlobals[usedLabelName].line.push(undefinedToken.line):impliedGlobals[usedLabelName]={name:usedLabelName,line:[undefinedToken.line]})}}if(subScope||Object.keys(declared).forEach(function(labelNotUsed){_warnUnused(labelNotUsed,declared[labelNotUsed],\\\"var\\\")}),subScope&&!isUnstackingFunctionBody&&!isUnstackingFunctionParams&&!isUnstackingFunctionOuter){var labelNames=Object.keys(currentLabels);for(i=0;labelNames.length>i;i++){var defLabelName=labelNames[i];currentLabels[defLabelName][\\\"(blockscoped)\\\"]||\\\"exception\\\"===currentLabels[defLabelName][\\\"(type)\\\"]||this.funct.has(defLabelName,{excludeCurrent:!0})||(subScope[\\\"(labels)\\\"][defLabelName]=currentLabels[defLabelName],\\\"global\\\"!==_currentFunctBody[\\\"(type)\\\"]&&(subScope[\\\"(labels)\\\"][defLabelName][\\\"(useOutsideOfScope)\\\"]=!0),delete currentLabels[defLabelName])}}_checkForUnused(),_scopeStack.pop(),isUnstackingFunctionBody&&(_currentFunctBody=_scopeStack[_.findLastIndex(_scopeStack,function(scope){return scope[\\\"(isFuncBody)\\\"]||\\\"global\\\"===scope[\\\"(type)\\\"]})]),_current=subScope},addParam:function(labelName,token,type){if(type=type||\\\"param\\\",\\\"exception\\\"===type){var previouslyDefinedLabelType=this.funct.labeltype(labelName);previouslyDefinedLabelType&&\\\"exception\\\"!==previouslyDefinedLabelType&&(state.option.node||warning(\\\"W002\\\",state.tokens.next,labelName))}if(_.has(_current[\\\"(labels)\\\"],labelName)?_current[\\\"(labels)\\\"][labelName].duplicated=!0:(_checkOuterShadow(labelName,token,type),_current[\\\"(labels)\\\"][labelName]={\\\"(type)\\\":type,\\\"(token)\\\":token,\\\"(unused)\\\":!0},_current[\\\"(params)\\\"].push(labelName)),_.has(_current[\\\"(usages)\\\"],labelName)){var usage=_current[\\\"(usages)\\\"][labelName];usage[\\\"(onlyUsedSubFunction)\\\"]?_latedefWarning(type,labelName,token):warning(\\\"E056\\\",token,labelName,type)}},validateParams:function(){if(\\\"global\\\"!==_currentFunctBody[\\\"(type)\\\"]){var isStrict=state.isStrict(),currentFunctParamScope=_currentFunctBody[\\\"(parent)\\\"];currentFunctParamScope[\\\"(params)\\\"]&¤tFunctParamScope[\\\"(params)\\\"].forEach(function(labelName){var label=currentFunctParamScope[\\\"(labels)\\\"][labelName];label&&label.duplicated&&(isStrict?warning(\\\"E011\\\",label[\\\"(token)\\\"],labelName):state.option.shadow!==!0&&warning(\\\"W004\\\",label[\\\"(token)\\\"],labelName))})}},getUsedOrDefinedGlobals:function(){var list=Object.keys(usedPredefinedAndGlobals);return usedPredefinedAndGlobals.__proto__===marker&&-1===list.indexOf(\\\"__proto__\\\")&&list.push(\\\"__proto__\\\"),list},getImpliedGlobals:function(){var values=_.values(impliedGlobals),hasProto=!1;return impliedGlobals.__proto__&&(hasProto=values.some(function(value){return\\\"__proto__\\\"===value.name}),hasProto||values.push(impliedGlobals.__proto__)),values},getUnuseds:function(){return unuseds},has:function(labelName){return Boolean(_getLabel(labelName))},labeltype:function(labelName){var scopeLabels=_getLabel(labelName);return scopeLabels?scopeLabels[labelName][\\\"(type)\\\"]:null},addExported:function(labelName){var globalLabels=_scopeStack[0][\\\"(labels)\\\"];if(_.has(declared,labelName))delete declared[labelName];else if(_.has(globalLabels,labelName))globalLabels[labelName][\\\"(unused)\\\"]=!1;else{for(var i=1;_scopeStack.length>i;i++){var scope=_scopeStack[i];if(scope[\\\"(type)\\\"])break;if(_.has(scope[\\\"(labels)\\\"],labelName)&&!scope[\\\"(labels)\\\"][labelName][\\\"(blockscoped)\\\"])return scope[\\\"(labels)\\\"][labelName][\\\"(unused)\\\"]=!1,void 0}exported[labelName]=!0}},setExported:function(labelName,token){this.block.use(labelName,token)\\n},addlabel:function(labelName,opts){var type=opts.type,token=opts.token,isblockscoped=\\\"let\\\"===type||\\\"const\\\"===type||\\\"class\\\"===type,isexported=\\\"global\\\"===(isblockscoped?_current:_currentFunctBody)[\\\"(type)\\\"]&&_.has(exported,labelName);if(_checkOuterShadow(labelName,token,type),isblockscoped){var declaredInCurrentScope=_current[\\\"(labels)\\\"][labelName];if(declaredInCurrentScope||_current!==_currentFunctBody||\\\"global\\\"===_current[\\\"(type)\\\"]||(declaredInCurrentScope=!!_currentFunctBody[\\\"(parent)\\\"][\\\"(labels)\\\"][labelName]),!declaredInCurrentScope&&_current[\\\"(usages)\\\"][labelName]){var usage=_current[\\\"(usages)\\\"][labelName];usage[\\\"(onlyUsedSubFunction)\\\"]?_latedefWarning(type,labelName,token):warning(\\\"E056\\\",token,labelName,type)}declaredInCurrentScope?warning(\\\"E011\\\",token,labelName):\\\"outer\\\"===state.option.shadow&&scopeManagerInst.funct.has(labelName)&&warning(\\\"W004\\\",token,labelName),scopeManagerInst.block.add(labelName,type,token,!isexported)}else{var declaredInCurrentFunctionScope=scopeManagerInst.funct.has(labelName);!declaredInCurrentFunctionScope&&usedSoFarInCurrentFunction(labelName)&&_latedefWarning(type,labelName,token),scopeManagerInst.funct.has(labelName,{onlyBlockscoped:!0})?warning(\\\"E011\\\",token,labelName):state.option.shadow!==!0&&declaredInCurrentFunctionScope&&\\\"__proto__\\\"!==labelName&&\\\"global\\\"!==_currentFunctBody[\\\"(type)\\\"]&&warning(\\\"W004\\\",token,labelName),scopeManagerInst.funct.add(labelName,type,token,!isexported),\\\"global\\\"===_currentFunctBody[\\\"(type)\\\"]&&(usedPredefinedAndGlobals[labelName]=marker)}},funct:{labeltype:function(labelName,options){for(var onlyBlockscoped=options&&options.onlyBlockscoped,excludeParams=options&&options.excludeParams,currentScopeIndex=_scopeStack.length-(options&&options.excludeCurrent?2:1),i=currentScopeIndex;i>=0;i--){var current=_scopeStack[i];if(current[\\\"(labels)\\\"][labelName]&&(!onlyBlockscoped||current[\\\"(labels)\\\"][labelName][\\\"(blockscoped)\\\"]))return current[\\\"(labels)\\\"][labelName][\\\"(type)\\\"];var scopeCheck=excludeParams?_scopeStack[i-1]:current;if(scopeCheck&&\\\"functionparams\\\"===scopeCheck[\\\"(type)\\\"])return null}return null},hasBreakLabel:function(labelName){for(var i=_scopeStack.length-1;i>=0;i--){var current=_scopeStack[i];if(current[\\\"(breakLabels)\\\"][labelName])return!0;if(\\\"functionparams\\\"===current[\\\"(type)\\\"])return!1}return!1},has:function(labelName,options){return Boolean(this.labeltype(labelName,options))},add:function(labelName,type,tok,unused){_current[\\\"(labels)\\\"][labelName]={\\\"(type)\\\":type,\\\"(token)\\\":tok,\\\"(blockscoped)\\\":!1,\\\"(function)\\\":_currentFunctBody,\\\"(unused)\\\":unused}}},block:{isGlobal:function(){return\\\"global\\\"===_current[\\\"(type)\\\"]},use:function(labelName,token){var paramScope=_currentFunctBody[\\\"(parent)\\\"];paramScope&¶mScope[\\\"(labels)\\\"][labelName]&&\\\"param\\\"===paramScope[\\\"(labels)\\\"][labelName][\\\"(type)\\\"]&&(scopeManagerInst.funct.has(labelName,{excludeParams:!0,onlyBlockscoped:!0})||(paramScope[\\\"(labels)\\\"][labelName][\\\"(unused)\\\"]=!1)),token&&(state.ignored.W117||state.option.undef===!1)&&(token.ignoreUndef=!0),_setupUsages(labelName),token&&(token[\\\"(function)\\\"]=_currentFunctBody,_current[\\\"(usages)\\\"][labelName][\\\"(tokens)\\\"].push(token))},reassign:function(labelName,token){this.modify(labelName,token),_current[\\\"(usages)\\\"][labelName][\\\"(reassigned)\\\"].push(token)},modify:function(labelName,token){_setupUsages(labelName),_current[\\\"(usages)\\\"][labelName][\\\"(modified)\\\"].push(token)},add:function(labelName,type,tok,unused){_current[\\\"(labels)\\\"][labelName]={\\\"(type)\\\":type,\\\"(token)\\\":tok,\\\"(blockscoped)\\\":!0,\\\"(unused)\\\":unused}},addBreakLabel:function(labelName,opts){var token=opts.token;scopeManagerInst.funct.hasBreakLabel(labelName)?warning(\\\"E011\\\",token,labelName):\\\"outer\\\"===state.option.shadow&&(scopeManagerInst.funct.has(labelName)?warning(\\\"W004\\\",token,labelName):_checkOuterShadow(labelName,token)),_current[\\\"(breakLabels)\\\"][labelName]=token}}};return scopeManagerInst};module.exports=scopeManager},{\\\"../lodash\\\":\\\"/node_modules/jshint/lodash.js\\\",events:\\\"/node_modules/browserify/node_modules/events/events.js\\\"}],\\\"/node_modules/jshint/src/state.js\\\":[function(_dereq_,module,exports){\\\"use strict\\\";var NameStack=_dereq_(\\\"./name-stack.js\\\"),state={syntax:{},isStrict:function(){return this.directive[\\\"use strict\\\"]||this.inClassBody||this.option.module||\\\"implied\\\"===this.option.strict},inMoz:function(){return this.option.moz},inES6:function(){return this.option.moz||this.option.esversion>=6},inES5:function(strict){return strict?!(this.option.esversion&&5!==this.option.esversion||this.option.moz):!this.option.esversion||this.option.esversion>=5||this.option.moz},reset:function(){this.tokens={prev:null,next:null,curr:null},this.option={},this.funct=null,this.ignored={},this.directive={},this.jsonMode=!1,this.jsonWarnings=[],this.lines=[],this.tab=\\\"\\\",this.cache={},this.ignoredLines={},this.forinifcheckneeded=!1,this.nameStack=new NameStack,this.inClassBody=!1}};exports.state=state},{\\\"./name-stack.js\\\":\\\"/node_modules/jshint/src/name-stack.js\\\"}],\\\"/node_modules/jshint/src/style.js\\\":[function(_dereq_,module,exports){\\\"use strict\\\";exports.register=function(linter){linter.on(\\\"Identifier\\\",function(data){linter.getOption(\\\"proto\\\")||\\\"__proto__\\\"===data.name&&linter.warn(\\\"W103\\\",{line:data.line,\\\"char\\\":data.char,data:[data.name,\\\"6\\\"]})}),linter.on(\\\"Identifier\\\",function(data){linter.getOption(\\\"iterator\\\")||\\\"__iterator__\\\"===data.name&&linter.warn(\\\"W103\\\",{line:data.line,\\\"char\\\":data.char,data:[data.name]})}),linter.on(\\\"Identifier\\\",function(data){linter.getOption(\\\"camelcase\\\")&&data.name.replace(/^_+|_+$/g,\\\"\\\").indexOf(\\\"_\\\")>-1&&!data.name.match(/^[A-Z0-9_]*$/)&&linter.warn(\\\"W106\\\",{line:data.line,\\\"char\\\":data.from,data:[data.name]})}),linter.on(\\\"String\\\",function(data){var code,quotmark=linter.getOption(\\\"quotmark\\\");quotmark&&(\\\"single\\\"===quotmark&&\\\"'\\\"!==data.quote&&(code=\\\"W109\\\"),\\\"double\\\"===quotmark&&'\\\"'!==data.quote&&(code=\\\"W108\\\"),quotmark===!0&&(linter.getCache(\\\"quotmark\\\")||linter.setCache(\\\"quotmark\\\",data.quote),linter.getCache(\\\"quotmark\\\")!==data.quote&&(code=\\\"W110\\\")),code&&linter.warn(code,{line:data.line,\\\"char\\\":data.char}))}),linter.on(\\\"Number\\\",function(data){\\\".\\\"===data.value.charAt(0)&&linter.warn(\\\"W008\\\",{line:data.line,\\\"char\\\":data.char,data:[data.value]}),\\\".\\\"===data.value.substr(data.value.length-1)&&linter.warn(\\\"W047\\\",{line:data.line,\\\"char\\\":data.char,data:[data.value]}),/^00+/.test(data.value)&&linter.warn(\\\"W046\\\",{line:data.line,\\\"char\\\":data.char,data:[data.value]})}),linter.on(\\\"String\\\",function(data){var re=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\\\\s*:/i;linter.getOption(\\\"scripturl\\\")||re.test(data.value)&&linter.warn(\\\"W107\\\",{line:data.line,\\\"char\\\":data.char})})}},{}],\\\"/node_modules/jshint/src/vars.js\\\":[function(_dereq_,module,exports){\\\"use strict\\\";exports.reservedVars={arguments:!1,NaN:!1},exports.ecmaIdentifiers={3:{Array:!1,Boolean:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,isFinite:!1,isNaN:!1,Math:!1,Number:!1,Object:!1,parseInt:!1,parseFloat:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,TypeError:!1,URIError:!1},5:{JSON:!1},6:{Map:!1,Promise:!1,Proxy:!1,Reflect:!1,Set:!1,Symbol:!1,WeakMap:!1,WeakSet:!1}},exports.browser={Audio:!1,Blob:!1,addEventListener:!1,applicationCache:!1,atob:!1,blur:!1,btoa:!1,cancelAnimationFrame:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,CSS:!1,clearInterval:!1,clearTimeout:!1,close:!1,closed:!1,Comment:!1,CustomEvent:!1,DOMParser:!1,defaultStatus:!1,Document:!1,document:!1,DocumentFragment:!1,Element:!1,ElementTimeControl:!1,Event:!1,event:!1,fetch:!1,FileReader:!1,FormData:!1,focus:!1,frames:!1,getComputedStyle:!1,HTMLElement:!1,HTMLAnchorElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLCollection:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPreElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTemplateElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLUListElement:!1,HTMLVideoElement:!1,history:!1,Image:!1,Intl:!1,length:!1,localStorage:!1,location:!1,matchMedia:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationObserver:!1,name:!1,Node:!1,NodeFilter:!1,NodeList:!1,Notification:!1,navigator:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,Option:!1,parent:!1,performance:!1,print:!1,Range:!1,requestAnimationFrame:!1,removeEventListener:!1,resizeBy:!1,resizeTo:!1,screen:!1,scroll:!1,scrollBy:!1,scrollTo:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,SharedWorker:!1,status:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimationElement:!1,SVGCSSRule:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLineElement:!1,SVGLinearGradientElement:!1,SVGLocatable:!1,SVGMPathElement:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGSVGElement:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformList:!1,SVGTransformable:!1,SVGURIReference:!1,SVGUnitTypes:!1,SVGUseElement:!1,SVGVKernElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGZoomAndPan:!1,Text:!1,TextDecoder:!1,TextEncoder:!1,TimeEvent:!1,top:!1,URL:!1,WebGLActiveInfo:!1,WebGLBuffer:!1,WebGLContextEvent:!1,WebGLFramebuffer:!1,WebGLProgram:!1,WebGLRenderbuffer:!1,WebGLRenderingContext:!1,WebGLShader:!1,WebGLShaderPrecisionFormat:!1,WebGLTexture:!1,WebGLUniformLocation:!1,WebSocket:!1,window:!1,Window:!1,Worker:!1,XDomainRequest:!1,XMLHttpRequest:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1},exports.devel={alert:!1,confirm:!1,console:!1,Debug:!1,opera:!1,prompt:!1},exports.worker={importScripts:!0,postMessage:!0,self:!0,FileReaderSync:!0},exports.nonstandard={escape:!1,unescape:!1},exports.couch={require:!1,respond:!1,getRow:!1,emit:!1,send:!1,start:!1,sum:!1,log:!1,exports:!1,module:!1,provides:!1},exports.node={__filename:!1,__dirname:!1,GLOBAL:!1,global:!1,module:!1,acequire:!1,Buffer:!0,console:!0,exports:!0,process:!0,setTimeout:!0,clearTimeout:!0,setInterval:!0,clearInterval:!0,setImmediate:!0,clearImmediate:!0},exports.browserify={__filename:!1,__dirname:!1,global:!1,module:!1,acequire:!1,Buffer:!0,exports:!0,process:!0},exports.phantom={phantom:!0,acequire:!0,WebPage:!0,console:!0,exports:!0},exports.qunit={asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,\\\"throws\\\":!1},exports.rhino={defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},exports.shelljs={target:!1,echo:!1,exit:!1,cd:!1,pwd:!1,ls:!1,find:!1,cp:!1,rm:!1,mv:!1,mkdir:!1,test:!1,cat:!1,sed:!1,grep:!1,which:!1,dirs:!1,pushd:!1,popd:!1,env:!1,exec:!1,chmod:!1,config:!1,error:!1,tempdir:!1},exports.typed={ArrayBuffer:!1,ArrayBufferView:!1,DataView:!1,Float32Array:!1,Float64Array:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1},exports.wsh={ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WSH:!0,WScript:!0,XDomainRequest:!0},exports.dojo={dojo:!1,dijit:!1,dojox:!1,define:!1,require:!1},exports.jquery={$:!1,jQuery:!1},exports.mootools={$:!1,$$:!1,Asset:!1,Browser:!1,Chain:!1,Class:!1,Color:!1,Cookie:!1,Core:!1,Document:!1,DomReady:!1,DOMEvent:!1,DOMReady:!1,Drag:!1,Element:!1,Elements:!1,Event:!1,Events:!1,Fx:!1,Group:!1,Hash:!1,HtmlTable:!1,IFrame:!1,IframeShim:!1,InputValidator:!1,instanceOf:!1,Keyboard:!1,Locale:!1,Mask:!1,MooTools:!1,Native:!1,Options:!1,OverText:!1,Request:!1,Scroller:!1,Slick:!1,Slider:!1,Sortables:!1,Spinner:!1,Swiff:!1,Tips:!1,Type:!1,typeOf:!1,URI:!1,Window:!1},exports.prototypejs={$:!1,$$:!1,$A:!1,$F:!1,$H:!1,$R:!1,$break:!1,$continue:!1,$w:!1,Abstract:!1,Ajax:!1,Class:!1,Enumerable:!1,Element:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Selector:!1,Template:!1,Toggle:!1,Try:!1,Autocompleter:!1,Builder:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Scriptaculous:!1},exports.yui={YUI:!1,Y:!1,YUI_config:!1},exports.mocha={mocha:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,context:!1,xcontext:!1,before:!1,after:!1,beforeEach:!1,afterEach:!1,suite:!1,test:!1,setup:!1,teardown:!1,suiteSetup:!1,suiteTeardown:!1},exports.jasmine={jasmine:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,beforeEach:!1,afterEach:!1,setFixtures:!1,loadFixtures:!1,spyOn:!1,expect:!1,runs:!1,waitsFor:!1,waits:!1,beforeAll:!1,afterAll:!1,fail:!1,fdescribe:!1,fit:!1,pending:!1}},{}]},{},[\\\"/node_modules/jshint/src/jshint.js\\\"])}),ace.define(\\\"ace/mode/javascript_worker\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/lib/oop\\\",\\\"ace/worker/mirror\\\",\\\"ace/mode/javascript/jshint\\\"],function(acequire,exports,module){\\\"use strict\\\";function startRegex(arr){return RegExp(\\\"^(\\\"+arr.join(\\\"|\\\")+\\\")\\\")}var oop=acequire(\\\"../lib/oop\\\"),Mirror=acequire(\\\"../worker/mirror\\\").Mirror,lint=acequire(\\\"./javascript/jshint\\\").JSHINT,disabledWarningsRe=startRegex([\\\"Bad for in variable '(.+)'.\\\",'Missing \\\"use strict\\\"']),errorsRe=startRegex([\\\"Unexpected\\\",\\\"Expected \\\",\\\"Confusing (plus|minus)\\\",\\\"\\\\\\\\{a\\\\\\\\} unterminated regular expression\\\",\\\"Unclosed \\\",\\\"Unmatched \\\",\\\"Unbegun comment\\\",\\\"Bad invocation\\\",\\\"Missing space after\\\",\\\"Missing operator at\\\"]),infoRe=startRegex([\\\"Expected an assignment\\\",\\\"Bad escapement of EOL\\\",\\\"Unexpected comma\\\",\\\"Unexpected space\\\",\\\"Missing radix parameter.\\\",\\\"A leading decimal point can\\\",\\\"\\\\\\\\['{a}'\\\\\\\\] is better written in dot notation.\\\",\\\"'{a}' used out of scope\\\"]),JavaScriptWorker=exports.JavaScriptWorker=function(sender){Mirror.call(this,sender),this.setTimeout(500),this.setOptions()};oop.inherits(JavaScriptWorker,Mirror),function(){this.setOptions=function(options){this.options=options||{esnext:!0,moz:!0,devel:!0,browser:!0,node:!0,laxcomma:!0,laxbreak:!0,lastsemic:!0,onevar:!1,passfail:!1,maxerr:100,expr:!0,multistr:!0,globalstrict:!0},this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.changeOptions=function(newOptions){oop.mixin(this.options,newOptions),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.isValidJS=function(str){try{eval(\\\"throw 0;\\\"+str)}catch(e){if(0===e)return!0}return!1},this.onUpdate=function(){var value=this.doc.getValue();if(value=value.replace(/^#!.*\\\\n/,\\\"\\\\n\\\"),!value)return this.sender.emit(\\\"annotate\\\",[]);var errors=[],maxErrorLevel=this.isValidJS(value)?\\\"warning\\\":\\\"error\\\";lint(value,this.options,this.options.globals);for(var results=lint.errors,errorAdded=!1,i=0;results.length>i;i++){var error=results[i];if(error){var raw=error.raw,type=\\\"warning\\\";if(\\\"Missing semicolon.\\\"==raw){var str=error.evidence.substr(error.character);str=str.charAt(str.search(/\\\\S/)),\\\"error\\\"==maxErrorLevel&&str&&/[\\\\w\\\\d{(['\\\"]/.test(str)?(error.reason='Missing \\\";\\\" before statement',type=\\\"error\\\"):type=\\\"info\\\"}else{if(disabledWarningsRe.test(raw))continue;infoRe.test(raw)?type=\\\"info\\\":errorsRe.test(raw)?(errorAdded=!0,type=maxErrorLevel):\\\"'{a}' is not defined.\\\"==raw?type=\\\"warning\\\":\\\"'{a}' is defined but never used.\\\"==raw&&(type=\\\"info\\\")}errors.push({row:error.line-1,column:error.character-1,text:error.reason,type:type,raw:raw})}}this.sender.emit(\\\"annotate\\\",errors)}}.call(JavaScriptWorker.prototype)}),ace.define(\\\"ace/lib/es5-shim\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,\\\"sentinel\\\",{}),\\\"sentinel\\\"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if(\\\"function\\\"!=typeof target)throw new TypeError(\\\"Function.prototype.bind called on incompatible \\\"+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,\\\"__defineGetter__\\\"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,\\\"XXX\\\"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return\\\"[object Array]\\\"==_toString(obj)});var boxedString=Object(\\\"a\\\"),splitString=\\\"a\\\"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,result=[],thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0,thisp=arguments[1];if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduce of empty array with no initial value\\\");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError(\\\"reduce of empty array with no initial value\\\")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):object,length=self.length>>>0;if(\\\"[object Function]\\\"!=_toString(fun))throw new TypeError(fun+\\\" is not a function\\\");if(!length&&1==arguments.length)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError(\\\"reduceRight of empty array with no initial value\\\")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&\\\"[object String]\\\"==_toString(this)?this.split(\\\"\\\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\\\"Object.getOwnPropertyDescriptor called on a non-object: \\\";Object.getOwnPropertyDescriptor=function(object,property){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if(\\\"object\\\"!=typeof prototype)throw new TypeError(\\\"typeof prototype[\\\"+typeof prototype+\\\"] != 'object'\\\");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom=\\\"undefined\\\"==typeof document||doesDefinePropertyWork(document.createElement(\\\"div\\\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\\\"Property description must be an object: \\\",ERR_NON_OBJECT_TARGET=\\\"Object.defineProperty called on non-object: \\\",ERR_ACCESSORS_NOT_SUPPORTED=\\\"getters & setters can not be defined on this javascript engine\\\";Object.defineProperty=function(object,property,descriptor){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(\\\"object\\\"!=typeof descriptor&&\\\"function\\\"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,\\\"value\\\"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,\\\"get\\\")&&defineGetter(object,property,descriptor.get),owns(descriptor,\\\"set\\\")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return\\\"function\\\"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name=\\\"\\\";owns(object,name);)name+=\\\"?\\\";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=[\\\"toString\\\",\\\"toLocaleString\\\",\\\"valueOf\\\",\\\"hasOwnProperty\\\",\\\"isPrototypeOf\\\",\\\"propertyIsEnumerable\\\",\\\"constructor\\\"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if(\\\"object\\\"!=typeof object&&\\\"function\\\"!=typeof object||null===object)throw new TypeError(\\\"Object.keys called on a non-object\\\");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws=\\\"\\t\\\\n\\u000b\\\\f\\\\r   ᠎              \\\\u2028\\\\u2029\\\";if(!String.prototype.trim||ws.trim()){ws=\\\"[\\\"+ws+\\\"]\\\";var trimBeginRegexp=RegExp(\\\"^\\\"+ws+ws+\\\"*\\\"),trimEndRegexp=RegExp(ws+ws+\\\"*$\\\");String.prototype.trim=function(){return(this+\\\"\\\").replace(trimBeginRegexp,\\\"\\\").replace(trimEndRegexp,\\\"\\\")}}var toObject=function(o){if(null==o)throw new TypeError(\\\"can't convert \\\"+o+\\\" to object\\\");return Object(o)}});\";","ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n this.$rules = {\n \"start\" : [ {\n token : \"comment.doc.tag\",\n regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n }, \n DocCommentHighlightRules.getTagRule(),\n {\n defaultToken : \"comment.doc\",\n caseInsensitive: true\n }]\n };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n return {\n token : \"comment.doc.tag.storage.type\",\n regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n };\n};\n\nDocCommentHighlightRules.getStartRule = function(start) {\n return {\n token : \"comment.doc\", // doc comment\n regex : \"\\\\/\\\\*(?=\\\\*)\",\n next : start\n };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n return {\n token : \"comment.doc\", // closing comment\n regex : \"\\\\*\\\\/\",\n next : start\n };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar DocCommentHighlightRules = acequire(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n var keywordMapper = this.createKeywordMapper({\n \"variable.language\":\n \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n \"Namespace|QName|XML|XMLList|\" + // E4X\n \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" +\n \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" +\n \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n \"SyntaxError|TypeError|URIError|\" +\n \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n \"isNaN|parseFloat|parseInt|\" +\n \"JSON|Math|\" + // Other\n \"this|arguments|prototype|window|document\" , // Pseudo\n \"keyword\":\n \"const|yield|import|get|set|async|await|\" +\n \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n \"storage.type\":\n \"const|let|var|function\",\n \"constant.language\":\n \"null|Infinity|NaN|undefined\",\n \"support.function\":\n \"alert\",\n \"constant.language.boolean\": \"true|false\"\n }, \"identifier\");\n var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n \"u[0-9a-fA-F]{4}|\" + // unicode\n \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n \"[0-2][0-7]{0,2}|\" + // oct\n \"3[0-7][0-7]?|\" + // oct\n \"[4-7][0-7]?|\" + //oct\n \".)\";\n\n this.$rules = {\n \"no_regex\" : [\n DocCommentHighlightRules.getStartRule(\"doc-start\"),\n comments(\"no_regex\"),\n {\n token : \"string\",\n regex : \"'(?=.)\",\n next : \"qstring\"\n }, {\n token : \"string\",\n regex : '\"(?=.)',\n next : \"qqstring\"\n }, {\n token : \"constant.numeric\", // hexadecimal, octal and binary\n regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n }, {\n token : \"constant.numeric\", // decimal integers and floats\n regex : /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n }, {\n token : [\n \"storage.type\", \"punctuation.operator\", \"support.function\",\n \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n ],\n regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n next: \"function_arguments\"\n }, {\n token : [\n \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n ],\n regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token : [\n \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n \"text\", \"paren.lparen\"\n ],\n regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token : [\n \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n \"keyword.operator\", \"text\",\n \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n ],\n regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token : [\n \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n ],\n regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token : [\n \"entity.name.function\", \"text\", \"punctuation.operator\",\n \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n ],\n regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token : [\n \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n ],\n regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token : \"keyword\",\n regex : \"from(?=\\\\s*('|\\\"))\"\n }, {\n token : \"keyword\",\n regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n next : \"start\"\n }, {\n token : [\"support.constant\"],\n regex : /that\\b/\n }, {\n token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n }, {\n token : keywordMapper,\n regex : identifierRe\n }, {\n token : \"punctuation.operator\",\n regex : /[.](?![.])/,\n next : \"property\"\n }, {\n token : \"storage.type\",\n regex : /=>/\n }, {\n token : \"keyword.operator\",\n regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n next : \"start\"\n }, {\n token : \"punctuation.operator\",\n regex : /[?:,;.]/,\n next : \"start\"\n }, {\n token : \"paren.lparen\",\n regex : /[\\[({]/,\n next : \"start\"\n }, {\n token : \"paren.rparen\",\n regex : /[\\])}]/\n }, {\n token: \"comment\",\n regex: /^#!.*$/\n }\n ],\n property: [{\n token : \"text\",\n regex : \"\\\\s+\"\n }, {\n token : [\n \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n \"keyword.operator\", \"text\",\n \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n ],\n regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token : \"punctuation.operator\",\n regex : /[.](?![.])/\n }, {\n token : \"support.function\",\n regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n }, {\n token : \"support.function.dom\",\n regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n }, {\n token : \"support.constant\",\n regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n }, {\n token : \"identifier\",\n regex : identifierRe\n }, {\n regex: \"\",\n token: \"empty\",\n next: \"no_regex\"\n }\n ],\n \"start\": [\n DocCommentHighlightRules.getStartRule(\"doc-start\"),\n comments(\"start\"),\n {\n token: \"string.regexp\",\n regex: \"\\\\/\",\n next: \"regex\"\n }, {\n token : \"text\",\n regex : \"\\\\s+|^$\",\n next : \"start\"\n }, {\n token: \"empty\",\n regex: \"\",\n next: \"no_regex\"\n }\n ],\n \"regex\": [\n {\n token: \"regexp.keyword.operator\",\n regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n }, {\n token: \"string.regexp\",\n regex: \"/[sxngimy]*\",\n next: \"no_regex\"\n }, {\n token : \"invalid\",\n regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n }, {\n token : \"constant.language.escape\",\n regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n }, {\n token : \"constant.language.delimiter\",\n regex: /\\|/\n }, {\n token: \"constant.language.escape\",\n regex: /\\[\\^?/,\n next: \"regex_character_class\"\n }, {\n token: \"empty\",\n regex: \"$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string.regexp\"\n }\n ],\n \"regex_character_class\": [\n {\n token: \"regexp.charclass.keyword.operator\",\n regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n }, {\n token: \"constant.language.escape\",\n regex: \"]\",\n next: \"regex\"\n }, {\n token: \"constant.language.escape\",\n regex: \"-\"\n }, {\n token: \"empty\",\n regex: \"$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string.regexp.charachterclass\"\n }\n ],\n \"function_arguments\": [\n {\n token: \"variable.parameter\",\n regex: identifierRe\n }, {\n token: \"punctuation.operator\",\n regex: \"[, ]+\"\n }, {\n token: \"punctuation.operator\",\n regex: \"$\"\n }, {\n token: \"empty\",\n regex: \"\",\n next: \"no_regex\"\n }\n ],\n \"qqstring\" : [\n {\n token : \"constant.language.escape\",\n regex : escapedRe\n }, {\n token : \"string\",\n regex : \"\\\\\\\\$\",\n consumeLineEnd : true\n }, {\n token : \"string\",\n regex : '\"|$',\n next : \"no_regex\"\n }, {\n defaultToken: \"string\"\n }\n ],\n \"qstring\" : [\n {\n token : \"constant.language.escape\",\n regex : escapedRe\n }, {\n token : \"string\",\n regex : \"\\\\\\\\$\",\n consumeLineEnd : true\n }, {\n token : \"string\",\n regex : \"'|$\",\n next : \"no_regex\"\n }, {\n defaultToken: \"string\"\n }\n ]\n };\n\n\n if (!options || !options.noES6) {\n this.$rules.no_regex.unshift({\n regex: \"[{}]\", onMatch: function(val, state, stack) {\n this.next = val == \"{\" ? this.nextState : \"\";\n if (val == \"{\" && stack.length) {\n stack.unshift(\"start\", state);\n }\n else if (val == \"}\" && stack.length) {\n stack.shift();\n this.next = stack.shift();\n if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n return \"paren.quasi.end\";\n }\n return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n },\n nextState: \"start\"\n }, {\n token : \"string.quasi.start\",\n regex : /`/,\n push : [{\n token : \"constant.language.escape\",\n regex : escapedRe\n }, {\n token : \"paren.quasi.start\",\n regex : /\\${/,\n push : \"start\"\n }, {\n token : \"string.quasi.end\",\n regex : /`/,\n next : \"pop\"\n }, {\n defaultToken: \"string.quasi\"\n }]\n });\n\n if (!options || options.jsx != false)\n JSX.call(this);\n }\n\n this.embedRules(DocCommentHighlightRules, \"doc-\",\n [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n\n this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n var jsxTag = {\n onMatch : function(val, state, stack) {\n var offset = val.charAt(1) == \"/\" ? 2 : 1;\n if (offset == 1) {\n if (state != this.nextState)\n stack.unshift(this.next, this.nextState, 0);\n else\n stack.unshift(this.next);\n stack[2]++;\n } else if (offset == 2) {\n if (state == this.nextState) {\n stack[1]--;\n if (!stack[1] || stack[1] < 0) {\n stack.shift();\n stack.shift();\n }\n }\n }\n return [{\n type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n value: val.slice(0, offset)\n }, {\n type: \"meta.tag.tag-name.xml\",\n value: val.substr(offset)\n }];\n },\n regex : \"\",\n onMatch : function(value, currentState, stack) {\n if (currentState == stack[0])\n stack.shift();\n if (value.length == 2) {\n if (stack[0] == this.nextState)\n stack[1]--;\n if (!stack[1] || stack[1] < 0) {\n stack.splice(0, 2);\n }\n }\n this.next = stack[0] || \"start\";\n return [{type: this.token, value: value}];\n },\n nextState: \"jsx\"\n },\n jsxJsRule,\n comments(\"jsxAttributes\"),\n {\n token : \"entity.other.attribute-name.xml\",\n regex : tagRegex\n }, {\n token : \"keyword.operator.attribute-equals.xml\",\n regex : \"=\"\n }, {\n token : \"text.tag-whitespace.xml\",\n regex : \"\\\\s+\"\n }, {\n token : \"string.attribute-value.xml\",\n regex : \"'\",\n stateName : \"jsx_attr_q\",\n push : [\n {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n {include : \"reference\"},\n {defaultToken : \"string.attribute-value.xml\"}\n ]\n }, {\n token : \"string.attribute-value.xml\",\n regex : '\"',\n stateName : \"jsx_attr_qq\",\n push : [\n {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n {include : \"reference\"},\n {defaultToken : \"string.attribute-value.xml\"}\n ]\n },\n jsxTag\n ];\n this.$rules.reference = [{\n token : \"constant.language.escape.reference.xml\",\n regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }];\n}\n\nfunction comments(next) {\n return [\n {\n token : \"comment\", // multi line comment\n regex : /\\/\\*/,\n next: [\n DocCommentHighlightRules.getTagRule(),\n {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n {defaultToken : \"comment\", caseInsensitive: true}\n ]\n }, {\n token : \"comment\",\n regex : \"\\\\/\\\\/\",\n next: [\n DocCommentHighlightRules.getTagRule(),\n {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n {defaultToken : \"comment\", caseInsensitive: true}\n ]\n }\n ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar Range = acequire(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n this.checkOutdent = function(line, input) {\n if (! /^\\s+$/.test(line))\n return false;\n\n return /^\\s*\\}/.test(input);\n };\n\n this.autoOutdent = function(doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n\n if (!match) return 0;\n\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n if (!openBracePos || openBracePos.row == row) return 0;\n\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column-1), indent);\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../../lib/oop\");\nvar Range = acequire(\"../../range\").Range;\nvar BaseFoldMode = acequire(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(\n this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n );\n this.foldingStopMarker = new RegExp(\n this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n );\n }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n \n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function(session, foldStyle, row) {\n var line = session.getLine(row);\n \n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n return \"\";\n }\n \n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n \n if (!fw && this.startRegionRe.test(line))\n return \"start\"; // lineCommentRegionStart\n \n return fw;\n };\n\n this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n \n if (this.startRegionRe.test(line))\n return this.getCommentRegionBlock(session, line, row);\n \n var match = line.match(this.foldingStartMarker);\n if (match) {\n var i = match.index;\n\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, i);\n \n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n \n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n } else if (foldStyle != \"all\")\n range = null;\n }\n \n return range;\n }\n\n if (foldStyle === \"markbegin\")\n return;\n\n var match = line.match(this.foldingStopMarker);\n if (match) {\n var i = match.index + match[0].length;\n\n if (match[1])\n return this.closingBracketBlock(session, match[1], row, i);\n\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n \n this.getSectionRange = function(session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1)\n continue;\n if (startIndent > indent)\n break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n \n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n } else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n } else if (startIndent == indent) {\n break;\n }\n }\n endRow = row;\n }\n \n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n this.getCommentRegionBlock = function(session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n \n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m) continue;\n if (m[1]) depth--;\n else depth++;\n\n if (!depth) break;\n }\n\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextMode = acequire(\"./text\").Mode;\nvar JavaScriptHighlightRules = acequire(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = acequire(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = acequire(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = acequire(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n this.HighlightRules = JavaScriptHighlightRules;\n \n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n this.lineCommentStart = \"//\";\n this.blockComment = {start: \"/*\", end: \"*/\"};\n this.$quotes = {'\"': '\"', \"'\": \"'\", \"`\": \"`\"};\n\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n\n var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n\n if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n return indent;\n }\n\n if (state == \"start\" || state == \"no_regex\") {\n var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n if (match) {\n indent += tab;\n }\n } else if (state == \"doc-start\") {\n if (endState == \"start\" || endState == \"no_regex\") {\n return \"\";\n }\n var match = line.match(/^\\s*(\\/?)\\*/);\n if (match) {\n if (match[1]) {\n indent += \" \";\n }\n indent += \"* \";\n }\n }\n\n return indent;\n };\n\n this.checkOutdent = function(state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n\n this.autoOutdent = function(state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n\n this.createWorker = function(session) {\n var worker = new WorkerClient([\"ace\"], require(\"../worker/javascript\"), \"JavaScriptWorker\");\n worker.attachToDocument(session.getDocument());\n\n worker.on(\"annotate\", function(results) {\n session.setAnnotations(results.data);\n });\n\n worker.on(\"terminate\", function() {\n session.clearAnnotations();\n });\n\n return worker;\n };\n\n this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"],"names":["ACE_NAMESPACE","global","define","module","deps","payload","_acequire","parentId","callback","lookup","params","i","l","dep","acequire","packagedModule","normalizeModule","moduleName","chunks","base","previous","exports","mod","req","returnValue","exportAce","ns","root","real","compliantExecNpcg","compliantLastIndexIncrement","x","str","match","name","r2","indexOf","getNativeFlags","regex","array","item","from","Empty","that","target","args","slice","bound","result","call","prototypeOfArray","prototypeOfObject","_toString","owns","defineGetter","defineSetter","lookupGetter","lookupSetter","supportsAccessors","makeArray","a","lengthBefore","array_splice","start","deleteCount","pos","removeCount","length","removed","insert","add","remove","tailOldPos","tailNewPos","tailCount","lengthAfterRemove","obj","boxedString","splitString","fun","object","toObject","self","thisp","value","sought","toInteger","ERR_NON_OBJECT","property","descriptor","getter","setter","prototype","createEmpty","empty","properties","Type","doesDefinePropertyWork","definePropertyWorksOnObject","definePropertyWorksOnDom","definePropertyFallback","ERR_NON_OBJECT_DESCRIPTOR","ERR_NON_OBJECT_TARGET","ERR_ACCESSORS_NOT_SUPPORTED","freezeObject","hasDontEnumBug","dontEnums","dontEnumsLength","key","keys","ii","dontEnum","ws","trimBeginRegexp","trimEndRegexp","n","o","XHTML_NS","doc","tag","el","classes","index","node","className","include","id","sheets","cssText","style","uri","link","element","document","inner","outer","body","noScrollbar","withScrollbar","innerHtml","innerText","ctor","superCtor","mixin","proto","oop","Keys","ret","mods","keyCode","keyString","os","ua","useragent","pressedKeys","ts","elem","type","wrapper","e","eventHandler","releaseCaptureHandler","onMouseUp","startx","starty","touches","touchObj","factor","elements","timeouts","callbackName","clicks","startX","startY","timer","eventNames","onMousedown","isNewClick","onDblclick","getModifierHash","normalizeCommandKeys","hashId","location","dt","addListener","lastKeyDownKeyCode","lastDefaultPrevented","resetPressedKeys","postMessageId","win","messageName","listener","string","count","copy","deepCopy","arr","map","props","regExp","matches","fcn","deferred","timeout","defaultTimeout","_self","event","dom","lang","KEYS","MODS","BROKEN_SETDATA","USE_IE_MIME_TYPE","TextInput","parentNode","host","text","PLACEHOLDER","copied","cut","pasted","inComposition","tempStyle","isSelectionEmpty","isFocused","resetSelection","syncSelection","syncValue","isEmpty","inputHandler","selectionStart","selectionEnd","resetValue","isAllSelected","onSelect","cb","afterContextMenu","sendText","data","onInput","handleClipboardData","forceIEMime","clipboardData","mime","doCopy","isCut","onCut","onCopy","onPaste","onCompositionStart","onCompositionUpdate","onCompositionEnd","val","r","c","needsOnInput","syncComposition","readOnly","bringToFront","rect","top","left","maxTop","move","closeTimeout","onContextMenuClose","onContextMenu","typingResetTimeout","typing","detectArrowKeys","TextInputIOS","DRAG_OFFSET","SCROLL_COOLDOWN_T","DefaultHandlers","mouseHandler","editor","ev","inSelection","button","selectionRange","selectionEmpty","waitForClickSelection","anchor","cursor","cmp","orientedRange","calcRangeOrientation","unitName","range","cmpStart","cmpEnd","distance","calcDistance","time","session","prevScroll","t","vx","vy","direction","canScroll","isSlower","ax","ay","bx","by","Tooltip","html","y","GutterHandler","gutter","tooltip","GutterTooltip","gutterRegion","row","selection","tooltipTimeout","mouseEvent","tooltipAnnotation","showTooltip","annotation","hideTooltip","maxRow","screenRow","moveTooltip","gutterElement","windowWidth","windowHeight","width","height","MouseEvent","domEvent","AUTOSCROLL_DELAY","SCROLL_CURSOR_DELAY","SCROLL_CURSOR_HYSTERESIS","DragdropHandler","blankImage","mouseTarget","dragSelectionMarker","timerId","dragCursor","counter","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","dataTransfer","dropEffect","canAccept","addDragMarker","getDropEffect","onMouseMoveTimer","clearDragMarker","dropData","scrollCursorIntoView","prevCursor","now","vMovement","hMovement","autoScroll","lineHeight","characterWidth","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","onDragInterval","onMouseMove","types","copyAllowed","moveAllowed","copyModifierState","effectAllowed","interval","cursorStyle","clickCount","eventTarget","url","xhr","path","head","_","isAbort","EventEmitter","stopPropagation","preventDefault","eventName","listeners","defaultHandler","newCallback","handlers","old","disabled","capturing","optionsProvider","optList","optionNames","opt","warn","message","reportError","msg","AppConfig","options","opts","optionHash","net","component","parts","sep","re","subst","onLoad","moduleType","afterLoad","init","packaged","scriptOptions","scriptUrl","currentScript","currentDocument","scripts","script","src","attributes","j","attr","deHyphenate","m","m1","DefaultGutterHandler","config","MouseHandler","focusEditor","windowBlurred","gutterEl","character","renderer","state","mouseMoveHandler","onCaptureEnd","onCaptureInterval","stop","FoldHandler","position","fold","keyUtil","KeyBinding","kb","h","toExecute","success","commands","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","LTR","RTL","L","R","EN","AN","ON","B","S","AL","WS","CS","ES","ET","NSM","LRE","RLE","PDF","LRO","RLO","BN","UnicodeTBL00","UnicodeTBL20","_computeLevels","chars","levels","len","charTypes","impTab","prevState","newClass","newLevel","newState","action","cond","condPos","ix","_getCharacterType","_getCharClass","_invertLevel","lev","_array","end","lo","hi","tmp","cType","wType","nType","rtlCandidate","ch","uc","textCharTypes","isRtl","logicalFromVisual","bidiLevels","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","docRow","splitIndex","delta","rowCache","currentIndex","prevIndex","splits","shift","size","endOfLine","line","fontMetrics","bidiCharWidth","showInvisibles","eolChar","isRtlDir","col","visualIdx","startCol","endCol","level","offset","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","posX","logicalIdx","charWidth","comparePoints","p1","p2","Range","startRow","startColumn","endRow","endColumn","column","p","firstRow","lastRow","screenPosStart","screenPosEnd","Selection","columns","lead","isBackwards","reverse","mover","excludeLastChar","rowStart","rowEnd","foldLine","tabSize","firstColumnPosition","beforeCursor","leadingSpace","lineEnd","textEnd","rightOfCursor","leftOfCursor","whitespaceRe","tokenRe","rows","screenPos","offsetX","docPos","keepDesiredColumn","func","r1","MAX_TOKEN_COUNT","Tokenizer","rules","ruleRegExps","matchTotal","mapping","flag","splitterRurles","rule","adjustedregex","matchcount","digit","values","tokens","stack","inChClass","lastCapture","esc","parenOpen","parenClose","square","startState","currentState","lastIndex","matchAttempts","token","skipped","TextHighlightRules","prefix","HighlightRules","escapeRules","states","append","embedRules","addRules","pushState","popState","processState","toInsert","next","stateName","includeName","defaultToken","ignoreCase","splitChar","keywords","list","Behaviour","behaviours","mode","filter","TokenIterator","initialRow","initialColumn","rowCount","rowTokens","tokenIndex","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","context","contextCache","defaultQuotes","initContext","getWrapped","selected","opening","closing","rowDiff","CstyleBehaviour","rightChar","matching","openBracePos","next_indent","indent","quotes","quote","leftChar","rightToken","stringBefore","stringAfter","pair","wordRe","isWordBefore","isWordAfter","iterator","iterator2","bracket","addUnicodePackage","pack","codePoint","unicode","Mode","ignoreBlankLines","shouldRemove","minIndent","insertAtTabStop","regexpStart","lineCommentStart","uncomment","shouldInsertSpace","commentWithSpace","comment","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","minEmptyLength","initialRange","colDiff","startRange","endRange","tab","input","delegations","scope","functionName","method","split","param","completionKeywords","ruleItr","aLength","word","docLines","doNotValidate","lines","Anchor","point","$getTransformedPoint","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","noClip","applyDelta","Document","textOrLines","newLineMode","deleteFirstNewLine","deleteLastNewLine","deletedLines","deltas","isInsert","MAX","to","chunk","newlineLength","BackgroundTokenizer","tokenizer","workerStart","currentLine","endLine","startLine","processedLines","SearchHighlight","clazz","markerLayer","ranges","FoldLine","foldData","folds","last","b","lastEnd","isNewRow","foldBefore","newFoldLine","foldLineNext","idx","lastFoldEndColumn","RangeList","excludeEdges","startIndex","endIndex","clipped","lineDif","Fold","placeholder","subFold","consumeRange","afterStart","restoreRange","consumePoint","restorePoint","Folding","side","foldLines","foundFolds","trim","lastFold","startFoldLine","first","added","startFold","endFold","cloneFolds","expandInner","subFolds","startFoldRow","textLine","lastColumn","fd","tryToUnfold","bracketPos","depth","foldWidgets","foldMode","ignoreCurrent","fw","firstRange","toggleParent","BracketMatch","chr","charBeforeCursor","typeRe","openBracket","valueIndex","closingBracket","valueLength","TextMode","EditSession","cacheArray","low","mid","removedFolds","undoManager","navigateWithinSoftTabs","overwrite","inFront","marker","markerId","markers","highlight","annotations","inToken","wordRange","useWorker","$isPlaceholder","onReloadTokenizer","scrollTop","scrollLeft","w","force","cache","longestScreenLine","foldIndex","foldStart","dontSelect","lastUndoRange","foldDelta","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentString","rowRange","deleteRange","diff","useWrapMode","min","max","desiredLimit","$printMargin","limits","wrapLimit","limit","foldLineBefore","wrapData","walkTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","CHAR","CHAR_EXT","PUNCTUATION","SPACE","TAB","TAB_SPACE","displayLength","lastSplit","lastDocSplit","isCode","indentedSoftWrap","maxIndent","getWrapIndent","indentation","addSplit","displayed","minSplit","isFullWidth","maxScreenColumn","screenColumn","docColumn","rowLength","doCache","wrapIndent","foldStartRow","wrapRow","screenRowOffset","screenRows","fm","Search","sr","sc","er","ec","prevRange","replacement","$disableFakeMultiline","needle","addWordBoundary","modifier","backwards","skipCurrent","forEach","forEachInLine","wordBoundary","KEY_MODS","HashHandler","platform","MultiHashHandler","command","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","getPosition","other","otherPos","keyList","CommandManager","bindKey","mac","firstLineEndCol","selectedText","selectedCount","insertLine","curLine","newRanges","defaultCommands","Editor","container","commadEvent","scrollIntoView","prev","mergeableCommands","shouldMerge","keyboardHandler","oldSession","cursorPos","theme","prevToken","sbm","wrap","startOuter","endOuter","lineCols","transform","d","lineState","shouldOutdent","lineIndent","speed","dragDelay","shouldHighlight","shouldAnimate","display","showPrintMargin","enabled","show","fade","new_range","swap","originalRange","_numberRx","s","number","amount","charRange","nr","fp","decimals","nnr","replaceRange","sel","endPoint","moved","totalDiff","rangeIndex","subRows","select","center","animate","expand","matchType","found","bracketType","brackets","lineNumber","times","replaced","newRange","shouldScroll","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","cursorLayer","UndoManager","deltaSets","undoSelectionRange","redoSelectionRange","cloneDeltaSetsObj","$serializeDelta","$deserializeDelta","deltaSets_old","fnGetModifiedDelta","deltaSets_new","deltaSet_old","deltaSet_new","delta_old","Gutter","parentEl","rowInfo","annoText","breakpoints","decorations","firstLineNumber","lastLineNumber","gutterRenderer","cell","gutterWidth","padding","Marker","layerConfig","getBorderClass","tl","tr","br","bl","stringBuilder","extraStyle","curr","clazzModified","lineRange","range1","radiusClass","extraLength","Text","EOL_CHAR","measure","tabStr","spaceClass","tabClass","spaceContent","tabContent","lineElements","lineElementsIdx","lineElement","oldConfig","fragment","replaceReg","replaceFunc","tabIdx","idx4","classToUse","space","output","cols","onlyContents","splitChars","renderTokens","addTokens","isIE8","Cursor","cursors","blinking","blinkInterval","smoothBlinking","update","blink","onScreen","cursorLeft","cursorTop","cursorIndex","pixelPos","MAX_SCROLL_H","ScrollBar","parent","isVisible","VScrollBar","HScrollBar","RenderLoop","onRender","change","changes","CHAR_COUNT","FontMetrics","isRoot","boldSize","GutterLayer","MarkerLayer","TextLayer","CursorLayer","editorCss","VirtualRenderer","textLayer","oldSize","availableWidth","containerEl","posTop","posLeft","bottom","right","sm","alwaysVisible","scrollHeight","scrollerHeight","st","maxHeight","desiredHeight","hideScrollbars","screenLines","longestLine","horizScroll","hScrollChanged","vScrollBefore","minHeight","scrollPastEnd","vScrollChanged","lineCount","firstRowScreen","firstRowHeight","charCount","$viewMargin","topMargin","bottomMargin","alignment","fromValue","toValue","steps","x_min","dx","initialScroll","oldSteps","deltaX","deltaY","canvasPos","$workerBlob","workerUrl","BlobBuilder","blobBuilder","createWorker","blob","URL","blobURL","WorkerClient","topLevelNamespaces","classname","importScripts","normalizePath","tlns","err","cmd","ex","q","UIWorkerClient","main","emitSync","sender","processNext","callbackId","Main","PlaceHolder","others","mainClass","othersClass","undoStack","lengthDiff","inMainRange","distanceFromStart","newPos","updateMarker","undosRequired","isSamePoint","onMouseDown","alt","ctrl","accel","isMultiSelect","mouseX","mouseY","onMouseSelection","screenAnchor","screenCursor","selectionMode","oldRange","tmpSel","rectSel","blockSelect","newCursor","onMouseSelectionEnd","onSelectionInterval","search","find","$blockChangeEvents","lastRange","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","yBackwards","docEnd","markerList","keepOrder","$byLines","rangeList","reg","cmdResult","anim","buf","nl","additive","skip","screenLead","toRemove","all","words","stopAtFirst","sameRowRanges","fr","lr","guessRange","maxCol","minSpace","spaceOffsets","spaceOffset","forceLeft","isLeftAligned","isRightAligned","startW","textW","endW","alignLeft","alignRight","unAlign","MultiSelect","addAltCursorListeners","altCursor","altDown","reset","FoldMode","foldStyle","startLevel","LineWidgets","lineWidgets","hide","noWidgets","w1","changedWidgets","binarySearch","comparator","findAnnotations","matched","oldWidget","gutterAnno","arrow","Renderer","_id","oldNode","env","javascript","DocCommentHighlightRules","identifierRe","JavaScriptHighlightRules","keywordMapper","kwBeforeRe","escapedRe","comments","JSX","tagRegex","jsxTag","jsxJsRule","MatchingBraceOutdent","BaseFoldMode","commentRegex","forceMultiline","startIndent","subRange","CStyleFoldMode","tokenizedLine","endState","worker","require$$0","results"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}