{"version":3,"file":"js/174-ca74730d007728a71329.js","mappings":"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","sources":["webpack://app/./node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js","webpack://app/./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.esm.js","webpack://app/./node_modules/brace/index.js","webpack://app/./node_modules/brace/mode/html.js","webpack://app/./node_modules/brace/mode/json.js","webpack://app/./node_modules/brace/mode/liquid.js","webpack://app/./node_modules/brace/theme/solarized_light.js","webpack://app/./node_modules/brace/worker/css.js","webpack://app/./node_modules/brace/worker/html.js","webpack://app/./node_modules/brace/worker/javascript.js","webpack://app/./node_modules/brace/worker/json.js","webpack://app/./node_modules/debounce/index.js","webpack://app/./node_modules/ev-emitter/ev-emitter.js","webpack://app/./node_modules/fizzy-ui-utils/utils.js","webpack://app/./node_modules/glightbox/dist/js/glightbox.min.js","webpack://app/./node_modules/infinite-scroll/js/button.js","webpack://app/./node_modules/infinite-scroll/js/core.js","webpack://app/./node_modules/infinite-scroll/js/history.js","webpack://app/./node_modules/infinite-scroll/js/index.js","webpack://app/./node_modules/infinite-scroll/js/page-load.js","webpack://app/./node_modules/infinite-scroll/js/scroll-watch.js","webpack://app/./node_modules/infinite-scroll/js/status.js","webpack://app/./node_modules/ultimate_turbo_modal/node_modules/@hotwired/stimulus/dist/stimulus.js","webpack://app/./node_modules/ultimate_turbo_modal/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack://app/./node_modules/ultimate_turbo_modal/node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack://app/./node_modules/ultimate_turbo_modal/node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js","webpack://app/./node_modules/ultimate_turbo_modal/node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack://app/./node_modules/ultimate_turbo_modal/node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js","webpack://app/./node_modules/ultimate_turbo_modal/node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js","webpack://app/./node_modules/ultimate_turbo_modal/dist/ultimate_turbo_modal.min.js","webpack://app/./node_modules/@kanety/stimulus-static-actions/dist/index.module.mjs","webpack://app/./node_modules/@kanety/stimulus-tree/dist/index.module.mjs","webpack://app/./node_modules/@stimulus-components/notification/node_modules/stimulus-use/dist/index.js","webpack://app/./node_modules/@stimulus-components/notification/dist/stimulus-notification.mjs","webpack://app/./node_modules/dropzone/node_modules/just-extend/index.esm.js","webpack://app/./node_modules/dropzone/dist/dropzone.mjs","webpack://app/./node_modules/stimulus-autocomplete/src/autocomplete.js","webpack://app/./node_modules/stimulus-datepicker/src/iso_date.js","webpack://app/./node_modules/stimulus-datepicker/src/datepicker.js"],"sourcesContent":["/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n","var sparkMd5 = {\n exports: {}\n};\n\n(function(module, exports) {\n (function(factory) {\n {\n module.exports = factory();\n }\n })((function(undefined$1) {\n var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n function md5cycle(x, k) {\n var a = x[0], b = x[1], c = x[2], d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n function md5blk(s) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n function md5blk_array(a) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n function md51(s) {\n var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function md51_array(a) {\n var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function rhex(n) {\n var s = \"\", j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n return s;\n }\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join(\"\");\n }\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function() {\n function clamp(val, length) {\n val = val | 0 || 0;\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n return Math.min(val, length);\n }\n ArrayBuffer.prototype.slice = function(from, to) {\n var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n if (to !== undefined$1) {\n end = clamp(to, length);\n }\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n return str;\n }\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n return returnUInt8Array ? arr : buff;\n }\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n function hexToBinaryString(hex) {\n var bytes = [], length = hex.length, x;\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n return String.fromCharCode.apply(String, bytes);\n }\n function SparkMD5() {\n this.reset();\n }\n SparkMD5.prototype.append = function(str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n SparkMD5.prototype.appendBinary = function(contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length, i;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n SparkMD5.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.prototype.reset = function() {\n this._buff = \"\";\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.prototype.getState = function() {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash.slice()\n };\n };\n SparkMD5.prototype.setState = function(state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n SparkMD5.prototype.destroy = function() {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n SparkMD5.prototype._finish = function(tail, length) {\n var i = length, tmp, lo, hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n SparkMD5.hash = function(str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n SparkMD5.hashBinary = function(content, raw) {\n var hash = md51(content), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n SparkMD5.ArrayBuffer = function() {\n this.reset();\n };\n SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n this._length += arr.byteLength;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.ArrayBuffer.prototype.reset = function() {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.getState = function() {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n return SparkMD5;\n }));\n})(sparkMd5);\n\nvar SparkMD5 = sparkMd5.exports;\n\nconst fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\nclass FileChecksum {\n static create(file, callback) {\n const instance = new FileChecksum(file);\n instance.create(callback);\n }\n constructor(file) {\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n create(callback) {\n this.callback = callback;\n this.md5Buffer = new SparkMD5.ArrayBuffer;\n this.fileReader = new FileReader;\n this.fileReader.addEventListener(\"load\", (event => this.fileReaderDidLoad(event)));\n this.fileReader.addEventListener(\"error\", (event => this.fileReaderDidError(event)));\n this.readNextChunk();\n }\n fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n if (!this.readNextChunk()) {\n const binaryDigest = this.md5Buffer.end(true);\n const base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n fileReaderDidError(event) {\n this.callback(`Error reading ${this.file.name}`);\n }\n readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n const start = this.chunkIndex * this.chunkSize;\n const end = Math.min(start + this.chunkSize, this.file.size);\n const bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n}\n\nfunction getMetaValue(name) {\n const element = findElement(document.head, `meta[name=\"${name}\"]`);\n if (element) {\n return element.getAttribute(\"content\");\n }\n}\n\nfunction findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n const elements = root.querySelectorAll(selector);\n return toArray(elements);\n}\n\nfunction findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n return root.querySelector(selector);\n}\n\nfunction dispatchEvent(element, type, eventInit = {}) {\n const {disabled: disabled} = element;\n const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;\n const event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n return event;\n}\n\nfunction toArray(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n}\n\nclass BlobRecord {\n constructor(file, checksum, url) {\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest;\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n const csrfToken = getMetaValue(\"csrf-token\");\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n }\n get status() {\n return this.xhr.status;\n }\n get response() {\n const {responseType: responseType, response: response} = this.xhr;\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n const {response: response} = this;\n const {direct_upload: direct_upload} = response;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n requestDidError(event) {\n this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n }\n toJSON() {\n const result = {};\n for (const key in this.attributes) {\n result[key] = this.attributes[key];\n }\n return result;\n }\n}\n\nclass BlobUpload {\n constructor(blob) {\n this.blob = blob;\n this.file = blob.file;\n const {url: url, headers: headers} = blob.directUploadData;\n this.xhr = new XMLHttpRequest;\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n for (const key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n }\n create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n requestDidLoad(event) {\n const {status: status, response: response} = this.xhr;\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n requestDidError(event) {\n this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n }\n}\n\nlet id = 0;\n\nclass DirectUpload {\n constructor(file, url, delegate) {\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n }\n create(callback) {\n FileChecksum.create(this.file, ((error, checksum) => {\n if (error) {\n callback(error);\n return;\n }\n const blob = new BlobRecord(this.file, checksum, this.url);\n notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create((error => {\n if (error) {\n callback(error);\n } else {\n const upload = new BlobUpload(blob);\n notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create((error => {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n }));\n }\n }));\n }));\n }\n}\n\nfunction notify(object, methodName, ...messages) {\n if (object && typeof object[methodName] == \"function\") {\n return object[methodName](...messages);\n }\n}\n\nclass DirectUploadController {\n constructor(input, file) {\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n start(callback) {\n const hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(((error, attributes) => {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n this.dispatch(\"end\");\n callback(error);\n }));\n }\n uploadRequestDidProgress(event) {\n const progress = event.loaded / event.total * 100;\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n get url() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n dispatch(name, detail = {}) {\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, `direct-upload:${name}`, {\n detail: detail\n });\n }\n dispatchError(error) {\n const event = this.dispatch(\"error\", {\n error: error\n });\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n directUploadWillStoreFileWithXHR(xhr) {\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", (event => this.uploadRequestDidProgress(event)));\n }\n}\n\nconst inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\nclass DirectUploadsController {\n constructor(form) {\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter((input => input.files.length));\n }\n start(callback) {\n const controllers = this.createDirectUploadControllers();\n const startNextController = () => {\n const controller = controllers.shift();\n if (controller) {\n controller.start((error => {\n if (error) {\n callback(error);\n this.dispatch(\"end\");\n } else {\n startNextController();\n }\n }));\n } else {\n callback();\n this.dispatch(\"end\");\n }\n };\n this.dispatch(\"start\");\n startNextController();\n }\n createDirectUploadControllers() {\n const controllers = [];\n this.inputs.forEach((input => {\n toArray(input.files).forEach((file => {\n const controller = new DirectUploadController(input, file);\n controllers.push(controller);\n }));\n }));\n return controllers;\n }\n dispatch(name, detail = {}) {\n return dispatchEvent(this.form, `direct-uploads:${name}`, {\n detail: detail\n });\n }\n}\n\nconst processingAttribute = \"data-direct-uploads-processing\";\n\nconst submitButtonsByForm = new WeakMap;\n\nlet started = false;\n\nfunction start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm, true);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n}\n\nfunction didClick(event) {\n const {target: target} = event;\n if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n submitButtonsByForm.set(target.form, target);\n }\n}\n\nfunction didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n}\n\nfunction didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n}\n\nfunction handleFormSubmissionEvent(event) {\n const form = event.target;\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n const controller = new DirectUploadsController(form);\n const {inputs: inputs} = controller;\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start((error => {\n form.removeAttribute(processingAttribute);\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n }));\n }\n}\n\nfunction submitForm(form) {\n let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n if (button) {\n const {disabled: disabled} = button;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n submitButtonsByForm.delete(form);\n}\n\nfunction disable(input) {\n input.disabled = true;\n}\n\nfunction enable(input) {\n input.disabled = false;\n}\n\nfunction autostart() {\n if (window.ActiveStorage) {\n start();\n }\n}\n\nsetTimeout(autostart, 1);\n\nexport { DirectUpload, start };\n","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (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/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\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar lang = acequire(\"../lib/lang\");\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|acequired|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n var keywordMapper = this.createKeywordMapper({\n \"support.function\": supportFunction,\n \"support.constant\": supportConstant,\n \"support.type\": supportType,\n \"support.constant.color\": supportConstantColor,\n \"support.constant.fonts\": supportConstantFonts\n }, \"text\", true);\n\n this.$rules = {\n \"start\" : [{\n include : [\"strings\", \"url\", \"comments\"]\n }, {\n token: \"paren.lparen\",\n regex: \"\\\\{\",\n next: \"ruleset\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\"\n }, {\n token: \"string\",\n regex: \"@\",\n next: \"media\"\n }, {\n token: \"keyword\",\n regex: \"#[a-z0-9-_]+\"\n }, {\n token: \"keyword\",\n regex: \"%\"\n }, {\n token: \"variable\",\n regex: \"\\\\.[a-z0-9-_]+\"\n }, {\n token: \"string\",\n regex: \":[a-z0-9-_]+\"\n }, {\n token : \"constant.numeric\",\n regex : numRe\n }, {\n token: \"constant\",\n regex: \"[a-z0-9-_]+\"\n }, {\n caseInsensitive: true\n }],\n\n \"media\": [{\n include : [\"strings\", \"url\", \"comments\"]\n }, {\n token: \"paren.lparen\",\n regex: \"\\\\{\",\n next: \"start\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\",\n next: \"start\"\n }, {\n token: \"string\",\n regex: \";\",\n next: \"start\"\n }, {\n token: \"keyword\",\n regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n }],\n\n \"comments\" : [{\n token: \"comment\", // multi line comment\n regex: \"\\\\/\\\\*\",\n push: [{\n token : \"comment\",\n regex : \"\\\\*\\\\/\",\n next : \"pop\"\n }, {\n defaultToken : \"comment\"\n }]\n }],\n\n \"ruleset\" : [{\n regex : \"-(webkit|ms|moz|o)-\",\n token : \"text\"\n }, {\n token : \"paren.rparen\",\n regex : \"\\\\}\",\n next : \"start\"\n }, {\n include : [\"strings\", \"url\", \"comments\"]\n }, {\n token : [\"constant.numeric\", \"keyword\"],\n regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n }, {\n token : \"constant.numeric\",\n regex : numRe\n }, {\n token : \"constant.numeric\", // hex6 color\n regex : \"#[a-f0-9]{6}\"\n }, {\n token : \"constant.numeric\", // hex3 color\n regex : \"#[a-f0-9]{3}\"\n }, {\n token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n regex : pseudoElements\n }, {\n token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n regex : pseudoClasses\n }, {\n include: \"url\"\n }, {\n token : keywordMapper,\n regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n }, {\n caseInsensitive: true\n }],\n\n url: [{\n token : \"support.function\",\n regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n push: [{\n token : \"support.function\",\n regex : \"\\\\)\",\n next : \"pop\"\n }, {\n defaultToken: \"string\"\n }]\n }],\n\n strings: [{\n token : \"string.start\",\n regex : \"'\",\n push : [{\n token : \"string.end\",\n regex : \"'|$\",\n next: \"pop\"\n }, {\n include : \"escapes\"\n }, {\n token : \"constant.language.escape\",\n regex : /\\\\$/,\n consumeLineEnd: true\n }, {\n defaultToken: \"string\"\n }]\n }, {\n token : \"string.start\",\n regex : '\"',\n push : [{\n token : \"string.end\",\n regex : '\"|$',\n next: \"pop\"\n }, {\n include : \"escapes\"\n }, {\n token : \"constant.language.escape\",\n regex : /\\\\$/,\n consumeLineEnd: true\n }, {\n defaultToken: \"string\"\n }]\n }],\n escapes: [{\n token : \"constant.language.escape\",\n regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n }]\n\n };\n\n this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n \"background\": {\"#$0\": 1},\n \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n \"background-image\": {\"url('/$0')\": 1},\n \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n \"background-size\": {\"cover\": 1, \"contain\": 1},\n \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n \"border-color\": {\"#$0\": 1},\n \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n \"empty-cells\": {\"show\": 1, \"hide\": 1},\n \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"font-weight\": {\"bold\": 1, \"normal\": 1},\n \"font-style\": {\"italic\": 1, \"normal\": 1},\n \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"letter-spacing\": {\"normal\": 1},\n \"line-height\": {\"normal\": 1},\n \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n \"visibility\": {\"hidden\": 1, \"visible\": 1},\n \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n \"word-spacing\": {\"normal\": 1},\n \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n \"-moz-border-radius\": 1,\n \"-moz-border-radius-topright\": 1,\n \"-moz-border-radius-bottomright\": 1,\n \"-moz-border-radius-topleft\": 1,\n \"-moz-border-radius-bottomleft\": 1,\n \"-webkit-border-radius\": 1,\n \"-webkit-border-top-right-radius\": 1,\n \"-webkit-border-top-left-radius\": 1,\n \"-webkit-border-bottom-right-radius\": 1,\n \"-webkit-border-bottom-left-radius\": 1,\n \"-moz-box-shadow\": 1,\n \"-webkit-box-shadow\": 1,\n \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n this.completionsDefined = false;\n\n this.defineCompletions = function() {\n if (document) {\n var style = document.createElement('c').style;\n\n for (var i in style) {\n if (typeof style[i] !== 'string')\n continue;\n\n var name = i.replace(/[A-Z]/g, function(x) {\n return '-' + x.toLowerCase();\n });\n\n if (!propertyMap.hasOwnProperty(name))\n propertyMap[name] = 1;\n }\n }\n\n this.completionsDefined = true;\n };\n\n this.getCompletions = function(state, session, pos, prefix) {\n if (!this.completionsDefined) {\n this.defineCompletions();\n }\n\n var token = session.getTokenAt(pos.row, pos.column);\n\n if (!token)\n return [];\n if (state==='ruleset'){\n var line = session.getLine(pos.row).substr(0, pos.column);\n if (/:[^;]+$/.test(line)) {\n /([\\w\\-]+):[^:]*$/.test(line);\n\n return this.getPropertyValueCompletions(state, session, pos, prefix);\n } else {\n return this.getPropertyCompletions(state, session, pos, prefix);\n }\n }\n\n return [];\n };\n\n this.getPropertyCompletions = function(state, session, pos, prefix) {\n var properties = Object.keys(propertyMap);\n return properties.map(function(property){\n return {\n caption: property,\n snippet: property + ': $0;',\n meta: \"property\",\n score: Number.MAX_VALUE\n };\n });\n };\n\n this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n var line = session.getLine(pos.row).substr(0, pos.column);\n var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n if (!property)\n return [];\n var values = [];\n if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n values = Object.keys(propertyMap[property]);\n }\n return values.map(function(value){\n return {\n caption: value,\n snippet: value,\n meta: \"property value\",\n score: Number.MAX_VALUE\n };\n });\n };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../../lib/oop\");\nvar Behaviour = acequire(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = acequire(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = acequire(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n this.inherit(CstyleBehaviour);\n\n this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n if (text === ':') {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n if (token && token.value.match(/\\s+/)) {\n token = iterator.stepBackward();\n }\n if (token && token.type === 'support.type') {\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === ':') {\n return {\n text: '',\n selection: [1, 1]\n };\n }\n if (!line.substring(cursor.column).match(/^\\s*;/)) {\n return {\n text: ':;',\n selection: [1, 1]\n };\n }\n }\n }\n });\n\n this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected === ':') {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n if (token && token.value.match(/\\s+/)) {\n token = iterator.stepBackward();\n }\n if (token && token.type === 'support.type') {\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 }\n }\n }\n });\n\n this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n if (text === ';') {\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 return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n });\n\n};\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextMode = acequire(\"./text\").Mode;\nvar CssHighlightRules = acequire(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = acequire(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = acequire(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = acequire(\"./css_completions\").CssCompletions;\nvar CssBehaviour = acequire(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = acequire(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.$completer = new CssCompletions();\n this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n this.foldingRules = \"cStyle\";\n this.blockComment = {start: \"/*\", end: \"*/\"};\n\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n return indent;\n }\n\n var match = line.match(/^.*\\{\\s*$/);\n if (match) {\n indent += tab;\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.getCompletions = function(state, session, pos, prefix) {\n return this.$completer.getCompletions(state, session, pos, prefix);\n };\n\n this.createWorker = function(session) {\n var worker = new WorkerClient([\"ace\"], require(\"../worker/css\"), \"Worker\");\n worker.attachToDocument(session.getDocument());\n\n worker.on(\"annotate\", function(e) {\n session.setAnnotations(e.data);\n });\n\n worker.on(\"terminate\", function() {\n session.clearAnnotations();\n });\n\n return worker;\n };\n\n this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_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 XmlHighlightRules = function(normalize) {\n var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n this.$rules = {\n start : [\n {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n {\n token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n },\n {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n {\n token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n },\n {include : \"tag\"},\n {token : \"text.end-tag-open.xml\", regex: \"\",\n next : \"start\"\n }],\n\n doctype : [\n {include : \"whitespace\"},\n {include : \"string\"},\n {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n ],\n\n int_subset : [{\n token : \"text.xml\",\n regex : \"\\\\s+\"\n }, {\n token: \"punctuation.int-subset.xml\",\n regex: \"]\",\n next: \"pop\"\n }, {\n token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n regex : \"(<\\\\!)(\" + tagRegex + \")\",\n push : [{\n token : \"text\",\n regex : \"\\\\s+\"\n },\n {\n token : \"punctuation.markup-decl.xml\",\n regex : \">\",\n next : \"pop\"\n },\n {include : \"string\"}]\n }],\n\n cdata : [\n {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n {token : \"text.xml\", regex : \"\\\\s+\"},\n {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n ],\n\n comment : [\n {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n {defaultToken : \"comment.xml\"}\n ],\n\n reference : [{\n token : \"constant.language.escape.reference.xml\",\n regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }],\n\n attr_reference : [{\n token : \"constant.language.escape.reference.attribute-value.xml\",\n regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }],\n\n tag : [{\n token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n regex : \"(?:(<)|(\", next : \"start\"}\n ]\n }],\n\n tag_whitespace : [\n {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n ],\n whitespace : [\n {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n ],\n string: [{\n token : \"string.xml\",\n regex : \"'\",\n push : [\n {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n {defaultToken : \"string.xml\"}\n ]\n }, {\n token : \"string.xml\",\n regex : '\"',\n push : [\n {token : \"string.xml\", regex: '\"', next: \"pop\"},\n {defaultToken : \"string.xml\"}\n ]\n }],\n\n attributes: [{\n token : \"entity.other.attribute-name.xml\",\n regex : tagRegex\n }, {\n token : \"keyword.operator.attribute-equals.xml\",\n regex : \"=\"\n }, {\n include: \"tag_whitespace\"\n }, {\n include: \"attribute_value\"\n }],\n\n attribute_value: [{\n token : \"string.attribute-value.xml\",\n regex : \"'\",\n push : [\n {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n {include : \"attr_reference\"},\n {defaultToken : \"string.attribute-value.xml\"}\n ]\n }, {\n token : \"string.attribute-value.xml\",\n regex : '\"',\n push : [\n {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n {include : \"attr_reference\"},\n {defaultToken : \"string.attribute-value.xml\"}\n ]\n }]\n };\n\n if (this.constructor === XmlHighlightRules)\n this.normalizeRules();\n};\n\n\n(function() {\n\n this.embedTagRules = function(HighlightRules, prefix, tag){\n this.$rules.tag.unshift({\n token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n next: [\n {include : \"attributes\"},\n {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n ]\n });\n\n this.$rules[tag + \"-end\"] = [\n {include : \"attributes\"},\n {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next: \"start\",\n onMatch : function(value, currentState, stack) {\n stack.splice(0);\n return this.token;\n }}\n ];\n\n this.embedRules(HighlightRules, prefix, [{\n token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n regex : \"(|$))\",\n next: tag + \"-end\"\n }, {\n token: \"string.cdata.xml\",\n regex : \"<\\\\!\\\\[CDATA\\\\[\"\n }, {\n token: \"string.cdata.xml\",\n regex : \"\\\\]\\\\]>\"\n }]);\n };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar lang = acequire(\"../lib/lang\");\nvar CssHighlightRules = acequire(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = acequire(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = acequire(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n a : 'anchor',\n button \t : 'form',\n form : 'form',\n img : 'image',\n input : 'form',\n label : 'form',\n option : 'form',\n script : 'script',\n select : 'form',\n textarea : 'form',\n style : 'style',\n table : 'table',\n tbody : 'table',\n td : 'table',\n tfoot : 'table',\n th : 'table',\n tr : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n XmlHighlightRules.call(this);\n\n this.addRules({\n attributes: [{\n include : \"tag_whitespace\"\n }, {\n token : \"entity.other.attribute-name.xml\",\n regex : \"[-_a-zA-Z0-9:.]+\"\n }, {\n token : \"keyword.operator.attribute-equals.xml\",\n regex : \"=\",\n push : [{\n include: \"tag_whitespace\"\n }, {\n token : \"string.unquoted.attribute-value.html\",\n regex : \"[^<>='\\\"`\\\\s]+\",\n next : \"pop\"\n }, {\n token : \"empty\",\n regex : \"\",\n next : \"pop\"\n }]\n }, {\n include : \"attribute_value\"\n }],\n tag: [{\n token : function(start, tag) {\n var group = tagMap[tag];\n return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n },\n regex : \"(\", next : \"start\"}\n ]\n });\n\n this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n if (this.constructor === HtmlHighlightRules)\n this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"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\nfunction is(token, type) {\n return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '\"' || text == \"'\") {\n var quote = text;\n var selected = session.doc.getTextRange(editor.getSelectionRange());\n if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n return {\n text: quote + selected + quote,\n selection: false\n };\n }\n\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n return {\n text: \"\",\n selection: [1, 1]\n };\n }\n\n if (!token)\n token = iterator.stepBackward();\n\n if (!token)\n return;\n\n while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n token = iterator.stepBackward();\n }\n var rightSpace = !rightChar || rightChar.match(/\\s/);\n if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n return {\n text: 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 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 this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '>') {\n var position = editor.getSelectionRange().start;\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken() || iterator.stepBackward();\n if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n return;\n if (is(token, \"reference.attribute-value\"))\n return;\n if (is(token, \"attribute-value\")) {\n var firstChar = token.value.charAt(0);\n if (firstChar == '\"' || firstChar == \"'\") {\n var lastChar = token.value.charAt(token.value.length - 1);\n var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length;\n if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar)\n return;\n }\n }\n while (!is(token, \"tag-name\")) {\n token = iterator.stepBackward();\n if (token.value == \"<\") {\n token = iterator.stepForward();\n break;\n }\n }\n\n var tokenRow = iterator.getCurrentTokenRow();\n var tokenColumn = iterator.getCurrentTokenColumn();\n if (is(iterator.stepBackward(), \"end-tag-open\"))\n return;\n\n var element = token.value;\n if (tokenRow == position.row)\n element = element.substring(0, position.column - tokenColumn);\n\n if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n return;\n\n return {\n text: \">\" + \"\",\n selection: [1, 1]\n };\n }\n });\n\n this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n if (text == \"\\n\") {\n var cursor = editor.getCursorPosition();\n var line = session.getLine(cursor.row);\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n if (token && token.type.indexOf(\"tag-close\") !== -1) {\n if (token.value == \"/>\")\n return;\n while (token && token.type.indexOf(\"tag-name\") === -1) {\n token = iterator.stepBackward();\n }\n\n if (!token) {\n return;\n }\n\n var tag = token.value;\n var row = iterator.getCurrentTokenRow();\n token = iterator.stepBackward();\n if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n return;\n }\n\n if (this.voidElements && !this.voidElements[tag]) {\n var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n var line = session.getLine(row);\n var nextIndent = this.$getIndent(line);\n var indent = nextIndent + session.getTabString();\n\n if (nextToken && nextToken.value === \" -1;\n}\n\n(function() {\n\n this.getFoldWidget = function(session, foldStyle, row) {\n var tag = this._getFirstTagInLine(session, row);\n\n if (!tag)\n return this.getCommentFoldWidget(session, row);\n\n if (tag.closing || (!tag.tagName && tag.selfClosing))\n return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n return \"\";\n\n if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n return \"\";\n\n return \"start\";\n };\n\n this.getCommentFoldWidget = function(session, row) {\n if (/comment/.test(session.getState(row)) && /';\n break;\n }\n }\n return tag;\n } else if (is(token, \"tag-close\")) {\n tag.selfClosing = token.value == '/>';\n return tag;\n }\n tag.start.column += token.value.length;\n }\n\n return null;\n };\n\n this._findEndTagInLine = function(session, row, tagName, startColumn) {\n var tokens = session.getTokens(row);\n var column = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n column += token.value.length;\n if (column < startColumn)\n continue;\n if (is(token, \"end-tag-open\")) {\n token = tokens[i + 1];\n if (token && token.value == tagName)\n return true;\n }\n }\n return false;\n };\n this._readTagForward = function(iterator) {\n var token = iterator.getCurrentToken();\n if (!token)\n return null;\n\n var tag = new Tag();\n do {\n if (is(token, \"tag-open\")) {\n tag.closing = is(token, \"end-tag-open\");\n tag.start.row = iterator.getCurrentTokenRow();\n tag.start.column = iterator.getCurrentTokenColumn();\n } else if (is(token, \"tag-name\")) {\n tag.tagName = token.value;\n } else if (is(token, \"tag-close\")) {\n tag.selfClosing = token.value == \"/>\";\n tag.end.row = iterator.getCurrentTokenRow();\n tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n iterator.stepForward();\n return tag;\n }\n } while(token = iterator.stepForward());\n\n return null;\n };\n \n this._readTagBackward = function(iterator) {\n var token = iterator.getCurrentToken();\n if (!token)\n return null;\n\n var tag = new Tag();\n do {\n if (is(token, \"tag-open\")) {\n tag.closing = is(token, \"end-tag-open\");\n tag.start.row = iterator.getCurrentTokenRow();\n tag.start.column = iterator.getCurrentTokenColumn();\n iterator.stepBackward();\n return tag;\n } else if (is(token, \"tag-name\")) {\n tag.tagName = token.value;\n } else if (is(token, \"tag-close\")) {\n tag.selfClosing = token.value == \"/>\";\n tag.end.row = iterator.getCurrentTokenRow();\n tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n }\n } while(token = iterator.stepBackward());\n\n return null;\n };\n \n this._pop = function(stack, tag) {\n while (stack.length) {\n \n var top = stack[stack.length-1];\n if (!tag || top.tagName == tag.tagName) {\n return stack.pop();\n }\n else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n stack.pop();\n continue;\n } else {\n return null;\n }\n }\n };\n \n this.getFoldWidgetRange = function(session, foldStyle, row) {\n var firstTag = this._getFirstTagInLine(session, row);\n \n if (!firstTag) {\n return this.getCommentFoldWidget(session, row)\n && session.getCommentFoldRange(row, session.getLine(row).length);\n }\n \n var isBackward = firstTag.closing || firstTag.selfClosing;\n var stack = [];\n var tag;\n \n if (!isBackward) {\n var iterator = new TokenIterator(session, row, firstTag.start.column);\n var start = {\n row: row,\n column: firstTag.start.column + firstTag.tagName.length + 2\n };\n if (firstTag.start.row == firstTag.end.row)\n start.column = firstTag.end.column;\n while (tag = this._readTagForward(iterator)) {\n if (tag.selfClosing) {\n if (!stack.length) {\n tag.start.column += tag.tagName.length + 2;\n tag.end.column -= 2;\n return Range.fromPoints(tag.start, tag.end);\n } else\n continue;\n }\n \n if (tag.closing) {\n this._pop(stack, tag);\n if (stack.length == 0)\n return Range.fromPoints(start, tag.start);\n }\n else {\n stack.push(tag);\n }\n }\n }\n else {\n var iterator = new TokenIterator(session, row, firstTag.end.column);\n var end = {\n row: row,\n column: firstTag.start.column\n };\n \n while (tag = this._readTagBackward(iterator)) {\n if (tag.selfClosing) {\n if (!stack.length) {\n tag.start.column += tag.tagName.length + 2;\n tag.end.column -= 2;\n return Range.fromPoints(tag.start, tag.end);\n } else\n continue;\n }\n \n if (!tag.closing) {\n this._pop(stack, tag);\n if (stack.length == 0) {\n tag.start.column += tag.tagName.length + 2;\n if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n tag.start.column = tag.end.column;\n return Range.fromPoints(tag.start, end);\n }\n }\n else {\n stack.push(tag);\n }\n }\n }\n \n };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../../lib/oop\");\nvar MixedFoldMode = acequire(\"./mixed\").FoldMode;\nvar XmlFoldMode = acequire(\"./xml\").FoldMode;\nvar CStyleFoldMode = acequire(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n \"js-\": new CStyleFoldMode(),\n \"css-\": new CStyleFoldMode()\n });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar TokenIterator = acequire(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n \"accesskey\",\n \"class\",\n \"contenteditable\",\n \"contextmenu\",\n \"dir\",\n \"draggable\",\n \"dropzone\",\n \"hidden\",\n \"id\",\n \"inert\",\n \"itemid\",\n \"itemprop\",\n \"itemref\",\n \"itemscope\",\n \"itemtype\",\n \"lang\",\n \"spellcheck\",\n \"style\",\n \"tabindex\",\n \"title\",\n \"translate\"\n];\n\nvar eventAttributes = [\n \"onabort\",\n \"onblur\",\n \"oncancel\",\n \"oncanplay\",\n \"oncanplaythrough\",\n \"onchange\",\n \"onclick\",\n \"onclose\",\n \"oncontextmenu\",\n \"oncuechange\",\n \"ondblclick\",\n \"ondrag\",\n \"ondragend\",\n \"ondragenter\",\n \"ondragleave\",\n \"ondragover\",\n \"ondragstart\",\n \"ondrop\",\n \"ondurationchange\",\n \"onemptied\",\n \"onended\",\n \"onerror\",\n \"onfocus\",\n \"oninput\",\n \"oninvalid\",\n \"onkeydown\",\n \"onkeypress\",\n \"onkeyup\",\n \"onload\",\n \"onloadeddata\",\n \"onloadedmetadata\",\n \"onloadstart\",\n \"onmousedown\",\n \"onmousemove\",\n \"onmouseout\",\n \"onmouseover\",\n \"onmouseup\",\n \"onmousewheel\",\n \"onpause\",\n \"onplay\",\n \"onplaying\",\n \"onprogress\",\n \"onratechange\",\n \"onreset\",\n \"onscroll\",\n \"onseeked\",\n \"onseeking\",\n \"onselect\",\n \"onshow\",\n \"onstalled\",\n \"onsubmit\",\n \"onsuspend\",\n \"ontimeupdate\",\n \"onvolumechange\",\n \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n \"html\": {\"manifest\": 1},\n \"head\": {},\n \"title\": {},\n \"base\": {\"href\": 1, \"target\": 1},\n \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n \"noscript\": {\"href\": 1},\n \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n \"section\": {},\n \"nav\": {},\n \"article\": {\"pubdate\": 1},\n \"aside\": {},\n \"h1\": {},\n \"h2\": {},\n \"h3\": {},\n \"h4\": {},\n \"h5\": {},\n \"h6\": {},\n \"header\": {},\n \"footer\": {},\n \"address\": {},\n \"main\": {},\n \"p\": {},\n \"hr\": {},\n \"pre\": {},\n \"blockquote\": {\"cite\": 1},\n \"ol\": {\"start\": 1, \"reversed\": 1},\n \"ul\": {},\n \"li\": {\"value\": 1},\n \"dl\": {},\n \"dt\": {},\n \"dd\": {},\n \"figure\": {},\n \"figcaption\": {},\n \"div\": {},\n \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n \"em\": {},\n \"strong\": {},\n \"small\": {},\n \"s\": {},\n \"cite\": {},\n \"q\": {\"cite\": 1},\n \"dfn\": {},\n \"abbr\": {},\n \"data\": {},\n \"time\": {\"datetime\": 1},\n \"code\": {},\n \"var\": {},\n \"samp\": {},\n \"kbd\": {},\n \"sub\": {},\n \"sup\": {},\n \"i\": {},\n \"b\": {},\n \"u\": {},\n \"mark\": {},\n \"ruby\": {},\n \"rt\": {},\n \"rp\": {},\n \"bdi\": {},\n \"bdo\": {},\n \"span\": {},\n \"br\": {},\n \"wbr\": {},\n \"ins\": {\"cite\": 1, \"datetime\": 1},\n \"del\": {\"cite\": 1, \"datetime\": 1},\n \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n \"param\": {\"name\": 1, \"value\": 1},\n \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n \"canvas\": {\"width\": 1, \"height\": 1},\n \"map\": {\"name\": 1},\n \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n \"svg\": {},\n \"math\": {},\n \"table\": {\"summary\": 1},\n \"caption\": {},\n \"colgroup\": {\"span\": 1},\n \"col\": {\"span\": 1},\n \"tbody\": {},\n \"thead\": {},\n \"tfoot\": {},\n \"tr\": {},\n \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n \"legend\": {},\n \"label\": {\"form\": 1, \"for\": 1},\n \"input\": {\n \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"acequired\": {\"acequired\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n \"datalist\": {},\n \"optgroup\": {\"disabled\": 1, \"label\": 1},\n \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"acequired\": {\"acequired\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n \"progress\": {\"value\": 1, \"max\": 1},\n \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n \"details\": {\"open\": 1},\n \"summary\": {},\n \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n \"menu\": {\"type\": 1, \"label\": 1},\n \"dialog\": {\"open\": 1}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n while (token && !is(token, \"tag-name\")){\n token = iterator.stepBackward();\n }\n if (token)\n return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n while (token && !is(token, \"attribute-name\")){\n token = iterator.stepBackward();\n }\n if (token)\n return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n this.getCompletions = function(state, session, pos, prefix) {\n var token = session.getTokenAt(pos.row, pos.column);\n\n if (!token)\n return [];\n if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n return this.getTagCompletions(state, session, pos, prefix);\n if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n return this.getAttributeCompletions(state, session, pos, prefix);\n if (is(token, \"attribute-value\"))\n return this.getAttributeValueCompletions(state, session, pos, prefix);\n var line = session.getLine(pos.row).substr(0, pos.column);\n if (/&[a-z]*$/i.test(line))\n return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n return [];\n };\n\n this.getTagCompletions = function(state, session, pos, prefix) {\n return elements.map(function(element){\n return {\n value: element,\n meta: \"tag\",\n score: Number.MAX_VALUE\n };\n });\n };\n\n this.getAttributeCompletions = function(state, session, pos, prefix) {\n var tagName = findTagName(session, pos);\n if (!tagName)\n return [];\n var attributes = globalAttributes;\n if (tagName in attributeMap) {\n attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n }\n return attributes.map(function(attribute){\n return {\n caption: attribute,\n snippet: attribute + '=\"$0\"',\n meta: \"attribute\",\n score: Number.MAX_VALUE\n };\n });\n };\n\n this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n var tagName = findTagName(session, pos);\n var attributeName = findAttributeName(session, pos);\n \n if (!tagName)\n return [];\n var values = [];\n if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n values = Object.keys(attributeMap[tagName][attributeName]);\n }\n return values.map(function(value){\n return {\n caption: value,\n snippet: value,\n meta: \"attribute value\",\n score: Number.MAX_VALUE\n };\n });\n };\n\n this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n return values.map(function(value){\n return {\n caption: value,\n snippet: value,\n meta: \"html entity\",\n score: Number.MAX_VALUE\n };\n });\n };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar lang = acequire(\"../lib/lang\");\nvar TextMode = acequire(\"./text\").Mode;\nvar JavaScriptMode = acequire(\"./javascript\").Mode;\nvar CssMode = acequire(\"./css\").Mode;\nvar HtmlHighlightRules = acequire(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = acequire(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = acequire(\"./folding/html\").FoldMode;\nvar HtmlCompletions = acequire(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = acequire(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n this.fragmentContext = options && options.fragmentContext;\n this.HighlightRules = HtmlHighlightRules;\n this.$behaviour = new XmlBehaviour();\n this.$completer = new HtmlCompletions();\n \n this.createModeDelegates({\n \"js-\": JavaScriptMode,\n \"css-\": CssMode\n });\n \n this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n this.blockComment = {start: \"\"};\n\n this.voidElements = lang.arrayToMap(voidElements);\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.getCompletions = function(state, session, pos, prefix) {\n return this.$completer.getCompletions(state, session, pos, prefix);\n };\n\n this.createWorker = function(session) {\n if (this.constructor != Mode)\n return;\n var worker = new WorkerClient([\"ace\"], require(\"../worker/html\"), \"Worker\");\n worker.attachToDocument(session.getDocument());\n\n if (this.fragmentContext)\n worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n worker.on(\"error\", function(e) {\n session.setAnnotations(e.data);\n });\n\n worker.on(\"terminate\", function() {\n session.clearAnnotations();\n });\n\n return worker;\n };\n\n this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n","ace.define(\"ace/mode/json_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 JsonHighlightRules = function() {\n this.$rules = {\n \"start\" : [\n {\n token : \"variable\", // single line\n regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n }, {\n token : \"string\", // single line\n regex : '\"',\n next : \"string\"\n }, {\n token : \"constant.numeric\", // hex\n regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n }, {\n token : \"constant.numeric\", // float\n regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token : \"constant.language.boolean\",\n regex : \"(?:true|false)\\\\b\"\n }, {\n token : \"text\", // single quoted strings are not allowed\n regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n }, {\n token : \"comment\", // comments are not allowed, but who cares?\n regex : \"\\\\/\\\\/.*$\"\n }, {\n token : \"comment.start\", // comments are not allowed, but who cares?\n regex : \"\\\\/\\\\*\",\n next : \"comment\"\n }, {\n token : \"paren.lparen\",\n regex : \"[[({]\"\n }, {\n token : \"paren.rparen\",\n regex : \"[\\\\])}]\"\n }, {\n token : \"text\",\n regex : \"\\\\s+\"\n }\n ],\n \"string\" : [\n {\n token : \"constant.language.escape\",\n regex : /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n }, {\n token : \"string\",\n regex : '\"|$',\n next : \"start\"\n }, {\n defaultToken : \"string\"\n }\n ],\n \"comment\" : [\n {\n token : \"comment.end\", // comments are not allowed, but who cares?\n regex : \"\\\\*\\\\/\",\n next : \"start\"\n }, {\n defaultToken: \"comment\"\n }\n ]\n };\n \n};\n\noop.inherits(JsonHighlightRules, TextHighlightRules);\n\nexports.JsonHighlightRules = JsonHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(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/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextMode = acequire(\"./text\").Mode;\nvar HighlightRules = acequire(\"./json_highlight_rules\").JsonHighlightRules;\nvar MatchingBraceOutdent = acequire(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CstyleBehaviour = acequire(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = acequire(\"./folding/cstyle\").FoldMode;\nvar WorkerClient = acequire(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n this.HighlightRules = HighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n this.getNextLineIndent = function(state, line, tab) {\n var indent = this.$getIndent(line);\n\n if (state == \"start\") {\n var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n if (match) {\n indent += tab;\n }\n }\n\n return indent;\n };\n\n this.checkOutdent = function(state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n\n this.autoOutdent = function(state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n\n this.createWorker = function(session) {\n var worker = new WorkerClient([\"ace\"], require(\"../worker/json\"), \"JsonWorker\");\n worker.attachToDocument(session.getDocument());\n\n worker.on(\"annotate\", function(e) {\n session.setAnnotations(e.data);\n });\n\n worker.on(\"terminate\", function() {\n session.clearAnnotations();\n });\n\n return worker;\n };\n\n\n this.$id = \"ace/mode/json\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n","ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar lang = acequire(\"../lib/lang\");\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\";\nvar supportConstantColor = exports.supportConstantColor = \"aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses = exports.pseudoClasses = \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|acequired|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n var keywordMapper = this.createKeywordMapper({\n \"support.function\": supportFunction,\n \"support.constant\": supportConstant,\n \"support.type\": supportType,\n \"support.constant.color\": supportConstantColor,\n \"support.constant.fonts\": supportConstantFonts\n }, \"text\", true);\n\n this.$rules = {\n \"start\" : [{\n include : [\"strings\", \"url\", \"comments\"]\n }, {\n token: \"paren.lparen\",\n regex: \"\\\\{\",\n next: \"ruleset\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\"\n }, {\n token: \"string\",\n regex: \"@\",\n next: \"media\"\n }, {\n token: \"keyword\",\n regex: \"#[a-z0-9-_]+\"\n }, {\n token: \"keyword\",\n regex: \"%\"\n }, {\n token: \"variable\",\n regex: \"\\\\.[a-z0-9-_]+\"\n }, {\n token: \"string\",\n regex: \":[a-z0-9-_]+\"\n }, {\n token : \"constant.numeric\",\n regex : numRe\n }, {\n token: \"constant\",\n regex: \"[a-z0-9-_]+\"\n }, {\n caseInsensitive: true\n }],\n\n \"media\": [{\n include : [\"strings\", \"url\", \"comments\"]\n }, {\n token: \"paren.lparen\",\n regex: \"\\\\{\",\n next: \"start\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\",\n next: \"start\"\n }, {\n token: \"string\",\n regex: \";\",\n next: \"start\"\n }, {\n token: \"keyword\",\n regex: \"(?:media|supports|document|charset|import|namespace|media|supports|document\"\n + \"|page|font|keyframes|viewport|counter-style|font-feature-values\"\n + \"|swash|ornaments|annotation|stylistic|styleset|character-variant)\"\n }],\n\n \"comments\" : [{\n token: \"comment\", // multi line comment\n regex: \"\\\\/\\\\*\",\n push: [{\n token : \"comment\",\n regex : \"\\\\*\\\\/\",\n next : \"pop\"\n }, {\n defaultToken : \"comment\"\n }]\n }],\n\n \"ruleset\" : [{\n regex : \"-(webkit|ms|moz|o)-\",\n token : \"text\"\n }, {\n token : \"paren.rparen\",\n regex : \"\\\\}\",\n next : \"start\"\n }, {\n include : [\"strings\", \"url\", \"comments\"]\n }, {\n token : [\"constant.numeric\", \"keyword\"],\n regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n }, {\n token : \"constant.numeric\",\n regex : numRe\n }, {\n token : \"constant.numeric\", // hex6 color\n regex : \"#[a-f0-9]{6}\"\n }, {\n token : \"constant.numeric\", // hex3 color\n regex : \"#[a-f0-9]{3}\"\n }, {\n token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n regex : pseudoElements\n }, {\n token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n regex : pseudoClasses\n }, {\n include: \"url\"\n }, {\n token : keywordMapper,\n regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n }, {\n caseInsensitive: true\n }],\n\n url: [{\n token : \"support.function\",\n regex : \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n push: [{\n token : \"support.function\",\n regex : \"\\\\)\",\n next : \"pop\"\n }, {\n defaultToken: \"string\"\n }]\n }],\n\n strings: [{\n token : \"string.start\",\n regex : \"'\",\n push : [{\n token : \"string.end\",\n regex : \"'|$\",\n next: \"pop\"\n }, {\n include : \"escapes\"\n }, {\n token : \"constant.language.escape\",\n regex : /\\\\$/,\n consumeLineEnd: true\n }, {\n defaultToken: \"string\"\n }]\n }, {\n token : \"string.start\",\n regex : '\"',\n push : [{\n token : \"string.end\",\n regex : '\"|$',\n next: \"pop\"\n }, {\n include : \"escapes\"\n }, {\n token : \"constant.language.escape\",\n regex : /\\\\$/,\n consumeLineEnd: true\n }, {\n defaultToken: \"string\"\n }]\n }],\n escapes: [{\n token : \"constant.language.escape\",\n regex : /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n }]\n\n };\n\n this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.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/xml_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 XmlHighlightRules = function(normalize) {\n var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n this.$rules = {\n start : [\n {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n {\n token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n },\n {token : \"comment.start.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n {\n token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n },\n {include : \"tag\"},\n {token : \"text.end-tag-open.xml\", regex: \"\",\n next : \"start\"\n }],\n\n doctype : [\n {include : \"whitespace\"},\n {include : \"string\"},\n {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n ],\n\n int_subset : [{\n token : \"text.xml\",\n regex : \"\\\\s+\"\n }, {\n token: \"punctuation.int-subset.xml\",\n regex: \"]\",\n next: \"pop\"\n }, {\n token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n regex : \"(<\\\\!)(\" + tagRegex + \")\",\n push : [{\n token : \"text\",\n regex : \"\\\\s+\"\n },\n {\n token : \"punctuation.markup-decl.xml\",\n regex : \">\",\n next : \"pop\"\n },\n {include : \"string\"}]\n }],\n\n cdata : [\n {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n {token : \"text.xml\", regex : \"\\\\s+\"},\n {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n ],\n\n comment : [\n {token : \"comment.end.xml\", regex : \"-->\", next : \"start\"},\n {defaultToken : \"comment.xml\"}\n ],\n\n reference : [{\n token : \"constant.language.escape.reference.xml\",\n regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }],\n\n attr_reference : [{\n token : \"constant.language.escape.reference.attribute-value.xml\",\n regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }],\n\n tag : [{\n token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n regex : \"(?:(<)|(\", next : \"start\"}\n ]\n }],\n\n tag_whitespace : [\n {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n ],\n whitespace : [\n {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n ],\n string: [{\n token : \"string.xml\",\n regex : \"'\",\n push : [\n {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n {defaultToken : \"string.xml\"}\n ]\n }, {\n token : \"string.xml\",\n regex : '\"',\n push : [\n {token : \"string.xml\", regex: '\"', next: \"pop\"},\n {defaultToken : \"string.xml\"}\n ]\n }],\n\n attributes: [{\n token : \"entity.other.attribute-name.xml\",\n regex : tagRegex\n }, {\n token : \"keyword.operator.attribute-equals.xml\",\n regex : \"=\"\n }, {\n include: \"tag_whitespace\"\n }, {\n include: \"attribute_value\"\n }],\n\n attribute_value: [{\n token : \"string.attribute-value.xml\",\n regex : \"'\",\n push : [\n {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n {include : \"attr_reference\"},\n {defaultToken : \"string.attribute-value.xml\"}\n ]\n }, {\n token : \"string.attribute-value.xml\",\n regex : '\"',\n push : [\n {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n {include : \"attr_reference\"},\n {defaultToken : \"string.attribute-value.xml\"}\n ]\n }]\n };\n\n if (this.constructor === XmlHighlightRules)\n this.normalizeRules();\n};\n\n\n(function() {\n\n this.embedTagRules = function(HighlightRules, prefix, tag){\n this.$rules.tag.unshift({\n token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n next: [\n {include : \"attributes\"},\n {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n ]\n });\n\n this.$rules[tag + \"-end\"] = [\n {include : \"attributes\"},\n {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next: \"start\",\n onMatch : function(value, currentState, stack) {\n stack.splice(0);\n return this.token;\n }}\n ];\n\n this.embedRules(HighlightRules, prefix, [{\n token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n regex : \"(|$))\",\n next: tag + \"-end\"\n }, {\n token: \"string.cdata.xml\",\n regex : \"<\\\\!\\\\[CDATA\\\\[\"\n }, {\n token: \"string.cdata.xml\",\n regex : \"\\\\]\\\\]>\"\n }]);\n };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar lang = acequire(\"../lib/lang\");\nvar CssHighlightRules = acequire(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = acequire(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = acequire(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n a : 'anchor',\n button \t : 'form',\n form : 'form',\n img : 'image',\n input : 'form',\n label : 'form',\n option : 'form',\n script : 'script',\n select : 'form',\n textarea : 'form',\n style : 'style',\n table : 'table',\n tbody : 'table',\n td : 'table',\n tfoot : 'table',\n th : 'table',\n tr : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n XmlHighlightRules.call(this);\n\n this.addRules({\n attributes: [{\n include : \"tag_whitespace\"\n }, {\n token : \"entity.other.attribute-name.xml\",\n regex : \"[-_a-zA-Z0-9:.]+\"\n }, {\n token : \"keyword.operator.attribute-equals.xml\",\n regex : \"=\",\n push : [{\n include: \"tag_whitespace\"\n }, {\n token : \"string.unquoted.attribute-value.html\",\n regex : \"[^<>='\\\"`\\\\s]+\",\n next : \"pop\"\n }, {\n token : \"empty\",\n regex : \"\",\n next : \"pop\"\n }]\n }, {\n include : \"attribute_value\"\n }],\n tag: [{\n token : function(start, tag) {\n var group = tagMap[tag];\n return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n },\n regex : \"(\", next : \"start\"}\n ]\n });\n\n this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n if (this.constructor === HtmlHighlightRules)\n this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/liquid_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(acequire, exports, module) {\n\"use strict\";\n\nvar oop = acequire(\"../lib/oop\");\nvar TextHighlightRules = acequire(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = acequire(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar LiquidHighlightRules = function() {\n HtmlHighlightRules.call(this);\n var functions = (\n \"date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|\" +\n \"escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|\" +\n \"truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split\"\n );\n\n var keywords = (\n \"capture|endcapture|case|endcase|when|comment|endcomment|\" +\n \"cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|\" +\n \"style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow\"\n );\n\n var builtinVariables = 'forloop|tablerowloop';\n\n var definitions = (\"assign\");\n\n var keywordMapper = this.createKeywordMapper({\n \"variable.language\": builtinVariables,\n \"keyword\": keywords,\n \"support.function\": functions,\n \"keyword.definition\": definitions\n }, \"identifier\");\n for (var rule in this.$rules) {\n this.$rules[rule].unshift({\n token : \"variable\",\n regex : \"{%\",\n push : \"liquid-start\"\n }, {\n token : \"variable\",\n regex : \"{{\",\n push : \"liquid-start\"\n });\n }\n\n this.addRules({\n \"liquid-start\" : [{\n token: \"variable\",\n regex: \"}}\",\n next: \"pop\"\n }, {\n token: \"variable\",\n regex: \"%}\",\n next: \"pop\"\n }, {\n token : \"string\", // single line\n regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n }, {\n token : \"string\", // single line\n regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n }, {\n token : \"constant.numeric\", // hex\n regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n }, {\n token : \"constant.numeric\", // float\n regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token : \"constant.language.boolean\",\n regex : \"(?:true|false)\\\\b\"\n }, {\n token : keywordMapper,\n regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n }, {\n token : \"keyword.operator\",\n regex : \"/|\\\\*|\\\\-|\\\\+|=|!=|\\\\?\\\\:\"\n }, {\n token : \"paren.lparen\",\n regex : /[\\[\\({]/\n }, {\n token : \"paren.rparen\",\n regex : /[\\])}]/\n }, {\n token : \"text\",\n regex : \"\\\\s+\"\n }]\n });\n\n this.normalizeRules();\n};\noop.inherits(LiquidHighlightRules, TextHighlightRules);\n\nexports.LiquidHighlightRules = LiquidHighlightRules;\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/liquid\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/liquid_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(acequire, exports, module) {\n\nvar oop = acequire(\"../lib/oop\");\nvar TextMode = acequire(\"./text\").Mode;\nvar LiquidHighlightRules = acequire(\"./liquid_highlight_rules\").LiquidHighlightRules;\nvar MatchingBraceOutdent = acequire(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n this.HighlightRules = LiquidHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n this.blockComment = {start: \"\"};\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\") {\n var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n if (match) {\n indent += tab;\n }\n }\n\n return indent;\n };\n\n this.checkOutdent = function(state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n\n this.autoOutdent = function(state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n\n this.$id = \"ace/mode/liquid\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n","ace.define(\"ace/theme/solarized_light\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-solarized-light\";\nexports.cssText = \".ace-solarized-light .ace_gutter {\\\nbackground: #fbf1d3;\\\ncolor: #333\\\n}\\\n.ace-solarized-light .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-solarized-light {\\\nbackground-color: #FDF6E3;\\\ncolor: #586E75\\\n}\\\n.ace-solarized-light .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_selection {\\\nbackground: rgba(7, 54, 67, 0.09)\\\n}\\\n.ace-solarized-light.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FDF6E3;\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_active-line {\\\nbackground: #EEE8D5\\\n}\\\n.ace-solarized-light .ace_gutter-active-line {\\\nbackground-color : #EDE5C1\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #073642\\\n}\\\n.ace-solarized-light .ace_invisible {\\\ncolor: rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-light .ace_keyword,\\\n.ace-solarized-light .ace_meta,\\\n.ace-solarized-light .ace_support.ace_class,\\\n.ace-solarized-light .ace_support.ace_type {\\\ncolor: #859900\\\n}\\\n.ace-solarized-light .ace_constant.ace_character,\\\n.ace-solarized-light .ace_constant.ace_other {\\\ncolor: #CB4B16\\\n}\\\n.ace-solarized-light .ace_constant.ace_language {\\\ncolor: #B58900\\\n}\\\n.ace-solarized-light .ace_constant.ace_numeric {\\\ncolor: #D33682\\\n}\\\n.ace-solarized-light .ace_fold {\\\nbackground-color: #268BD2;\\\nborder-color: #586E75\\\n}\\\n.ace-solarized-light .ace_entity.ace_name.ace_function,\\\n.ace-solarized-light .ace_entity.ace_name.ace_tag,\\\n.ace-solarized-light .ace_support.ace_function,\\\n.ace-solarized-light .ace_variable,\\\n.ace-solarized-light .ace_variable.ace_language {\\\ncolor: #268BD2\\\n}\\\n.ace-solarized-light .ace_storage {\\\ncolor: #073642\\\n}\\\n.ace-solarized-light .ace_string {\\\ncolor: #2AA198\\\n}\\\n.ace-solarized-light .ace_string.ace_regexp {\\\ncolor: #D30102\\\n}\\\n.ace-solarized-light .ace_comment,\\\n.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #93A1A1\\\n}\\\n.ace-solarized-light .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = acequire(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n","module.exports.id = 'ace/mode/css_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/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(/ [\\\"+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/worker/mirror\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\",\\\"ace/range\\\",\\\"ace/document\\\",\\\"ace/lib/lang\\\"],function(acequire,exports){\\\"use strict\\\";acequire(\\\"../range\\\").Range;var Document=acequire(\\\"../document\\\").Document,lang=acequire(\\\"../lib/lang\\\"),Mirror=exports.Mirror=function(sender){this.sender=sender;var doc=this.doc=new Document(\\\"\\\"),deferredUpdate=this.deferredUpdate=lang.delayedCall(this.onUpdate.bind(this)),_self=this;sender.on(\\\"change\\\",function(e){var data=e.data;if(data[0].start)doc.applyDeltas(data);else for(var i=0;data.length>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/css/csslint\\\",[\\\"require\\\",\\\"exports\\\",\\\"module\\\"],function(acequire,exports,module){function objectToString(o){return Object.prototype.toString.call(o)}function clone(parent,circular,depth,prototype){function _clone(parent,depth){if(null===parent)return null;if(0==depth)return parent;var child;if(\\\"object\\\"!=typeof parent)return parent;if(util.isArray(parent))child=[];else if(util.isRegExp(parent))child=RegExp(parent.source,util.getRegExpFlags(parent)),parent.lastIndex&&(child.lastIndex=parent.lastIndex);else if(util.isDate(parent))child=new Date(parent.getTime());else{if(useBuffer&&Buffer.isBuffer(parent))return child=new Buffer(parent.length),parent.copy(child),child;child=prototype===void 0?Object.create(Object.getPrototypeOf(parent)):Object.create(prototype)}if(circular){var index=allParents.indexOf(parent);if(-1!=index)return allChildren[index];allParents.push(parent),allChildren.push(child)}for(var i in parent)child[i]=_clone(parent[i],depth-1);return child}var allParents=[],allChildren=[],useBuffer=\\\"undefined\\\"!=typeof Buffer;return circular===void 0&&(circular=!0),depth===void 0&&(depth=1/0),_clone(parent,depth)}function Reporter(lines,ruleset){this.messages=[],this.stats=[],this.lines=lines,this.ruleset=ruleset}var parserlib={};(function(){function EventTarget(){this._listeners={}}function StringReader(text){this._input=text.replace(/\\\\n\\\\r?/g,\\\"\\\\n\\\"),this._line=1,this._col=1,this._cursor=0}function SyntaxError(message,line,col){this.col=col,this.line=line,this.message=message}function SyntaxUnit(text,line,col,type){this.col=col,this.line=line,this.text=text,this.type=type}function TokenStreamBase(input,tokenData){this._reader=input?new StringReader(\\\"\\\"+input):null,this._token=null,this._tokenData=tokenData,this._lt=[],this._ltIndex=0,this._ltIndexCache=[]}EventTarget.prototype={constructor:EventTarget,addListener:function(type,listener){this._listeners[type]||(this._listeners[type]=[]),this._listeners[type].push(listener)},fire:function(event){if(\\\"string\\\"==typeof event&&(event={type:event}),event.target!==void 0&&(event.target=this),event.type===void 0)throw Error(\\\"Event object missing 'type' property.\\\");if(this._listeners[event.type])for(var listeners=this._listeners[event.type].concat(),i=0,len=listeners.length;len>i;i++)listeners[i].call(this,event)},removeListener:function(type,listener){if(this._listeners[type])for(var listeners=this._listeners[type],i=0,len=listeners.length;len>i;i++)if(listeners[i]===listener){listeners.splice(i,1);break}}},StringReader.prototype={constructor:StringReader,getCol:function(){return this._col},getLine:function(){return this._line},eof:function(){return this._cursor==this._input.length},peek:function(count){var c=null;return count=count===void 0?1:count,this._cursori;i++)nameMap.push(tokenData[i].name),tokenData[tokenData[i].name]=i,tokenData[i].text&&(typeMap[tokenData[i].text]=i);return tokenData.name=function(tt){return nameMap[tt]},tokenData.type=function(c){return typeMap[c]},tokenData},TokenStreamBase.prototype={constructor:TokenStreamBase,match:function(tokenTypes,channel){tokenTypes instanceof Array||(tokenTypes=[tokenTypes]);\\nfor(var tt=this.get(channel),i=0,len=tokenTypes.length;len>i;)if(tt==tokenTypes[i++])return!0;return this.unget(),!1},mustMatch:function(tokenTypes){var token;if(tokenTypes instanceof Array||(tokenTypes=[tokenTypes]),!this.match.apply(this,arguments))throw token=this.LT(1),new SyntaxError(\\\"Expected \\\"+this._tokenData[tokenTypes[0]].name+\\\" at line \\\"+token.startLine+\\\", col \\\"+token.startCol+\\\".\\\",token.startLine,token.startCol)},advance:function(tokenTypes,channel){for(;0!==this.LA(0)&&!this.match(tokenTypes,channel);)this.get();return this.LA(0)},get:function(channel){var token,info,tokenInfo=this._tokenData,i=(this._reader,0);if(tokenInfo.length,this._lt.length&&this._ltIndex>=0&&this._ltIndex-1&&!tokenInfo[token.type].hide&&(token.channel=tokenInfo[token.type].channel,this._token=token,this._lt.push(token),this._ltIndexCache.push(this._lt.length-this._ltIndex+i),this._lt.length>5&&this._lt.shift(),this._ltIndexCache.length>5&&this._ltIndexCache.shift(),this._ltIndex=this._lt.length),info=tokenInfo[token.type],info&&(info.hide||void 0!==info.channel&&channel!==info.channel)?this.get(channel):token.type},LA:function(index){var tt,total=index;if(index>0){if(index>5)throw Error(\\\"Too much lookahead.\\\");for(;total;)tt=this.get(),total--;for(;index>total;)this.unget(),total++}else if(0>index){if(!this._lt[this._ltIndex+index])throw Error(\\\"Too much lookbehind.\\\");tt=this._lt[this._ltIndex+index].type}else tt=this._token.type;return tt},LT:function(index){return this.LA(index),this._lt[this._ltIndex+index-1]},peek:function(){return this.LA(1)},token:function(){return this._token},tokenName:function(tokenType){return 0>tokenType||tokenType>this._tokenData.length?\\\"UNKNOWN_TOKEN\\\":this._tokenData[tokenType].name},tokenType:function(tokenName){return this._tokenData[tokenName]||-1},unget:function(){if(!this._ltIndexCache.length)throw Error(\\\"Too much lookahead.\\\");this._ltIndex-=this._ltIndexCache.pop(),this._token=this._lt[this._ltIndex-1]}},parserlib.util={StringReader:StringReader,SyntaxError:SyntaxError,SyntaxUnit:SyntaxUnit,EventTarget:EventTarget,TokenStreamBase:TokenStreamBase}})(),function(){function Combinator(text,line,col){SyntaxUnit.call(this,text,line,col,Parser.COMBINATOR_TYPE),this.type=\\\"unknown\\\",/^\\\\s+$/.test(text)?this.type=\\\"descendant\\\":\\\">\\\"==text?this.type=\\\"child\\\":\\\"+\\\"==text?this.type=\\\"adjacent-sibling\\\":\\\"~\\\"==text&&(this.type=\\\"sibling\\\")}function MediaFeature(name,value){SyntaxUnit.call(this,\\\"(\\\"+name+(null!==value?\\\":\\\"+value:\\\"\\\")+\\\")\\\",name.startLine,name.startCol,Parser.MEDIA_FEATURE_TYPE),this.name=name,this.value=value}function MediaQuery(modifier,mediaType,features,line,col){SyntaxUnit.call(this,(modifier?modifier+\\\" \\\":\\\"\\\")+(mediaType?mediaType:\\\"\\\")+(mediaType&&features.length>0?\\\" and \\\":\\\"\\\")+features.join(\\\" and \\\"),line,col,Parser.MEDIA_QUERY_TYPE),this.modifier=modifier,this.mediaType=mediaType,this.features=features}function Parser(options){EventTarget.call(this),this.options=options||{},this._tokenStream=null}function PropertyName(text,hack,line,col){SyntaxUnit.call(this,text,line,col,Parser.PROPERTY_NAME_TYPE),this.hack=hack}function PropertyValue(parts,line,col){SyntaxUnit.call(this,parts.join(\\\" \\\"),line,col,Parser.PROPERTY_VALUE_TYPE),this.parts=parts}function PropertyValueIterator(value){this._i=0,this._parts=value.parts,this._marks=[],this.value=value}function PropertyValuePart(text,line,col){SyntaxUnit.call(this,text,line,col,Parser.PROPERTY_VALUE_PART_TYPE),this.type=\\\"unknown\\\";var temp;if(/^([+\\\\-]?[\\\\d\\\\.]+)([a-z]+)$/i.test(text))switch(this.type=\\\"dimension\\\",this.value=+RegExp.$1,this.units=RegExp.$2,this.units.toLowerCase()){case\\\"em\\\":case\\\"rem\\\":case\\\"ex\\\":case\\\"px\\\":case\\\"cm\\\":case\\\"mm\\\":case\\\"in\\\":case\\\"pt\\\":case\\\"pc\\\":case\\\"ch\\\":case\\\"vh\\\":case\\\"vw\\\":case\\\"vmax\\\":case\\\"vmin\\\":this.type=\\\"length\\\";break;case\\\"deg\\\":case\\\"rad\\\":case\\\"grad\\\":this.type=\\\"angle\\\";break;case\\\"ms\\\":case\\\"s\\\":this.type=\\\"time\\\";break;case\\\"hz\\\":case\\\"khz\\\":this.type=\\\"frequency\\\";break;case\\\"dpi\\\":case\\\"dpcm\\\":this.type=\\\"resolution\\\"}else/^([+\\\\-]?[\\\\d\\\\.]+)%$/i.test(text)?(this.type=\\\"percentage\\\",this.value=+RegExp.$1):/^([+\\\\-]?\\\\d+)$/i.test(text)?(this.type=\\\"integer\\\",this.value=+RegExp.$1):/^([+\\\\-]?[\\\\d\\\\.]+)$/i.test(text)?(this.type=\\\"number\\\",this.value=+RegExp.$1):/^#([a-f0-9]{3,6})/i.test(text)?(this.type=\\\"color\\\",temp=RegExp.$1,3==temp.length?(this.red=parseInt(temp.charAt(0)+temp.charAt(0),16),this.green=parseInt(temp.charAt(1)+temp.charAt(1),16),this.blue=parseInt(temp.charAt(2)+temp.charAt(2),16)):(this.red=parseInt(temp.substring(0,2),16),this.green=parseInt(temp.substring(2,4),16),this.blue=parseInt(temp.substring(4,6),16))):/^rgb\\\\(\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*\\\\)/i.test(text)?(this.type=\\\"color\\\",this.red=+RegExp.$1,this.green=+RegExp.$2,this.blue=+RegExp.$3):/^rgb\\\\(\\\\s*(\\\\d+)%\\\\s*,\\\\s*(\\\\d+)%\\\\s*,\\\\s*(\\\\d+)%\\\\s*\\\\)/i.test(text)?(this.type=\\\"color\\\",this.red=255*+RegExp.$1/100,this.green=255*+RegExp.$2/100,this.blue=255*+RegExp.$3/100):/^rgba\\\\(\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*,\\\\s*([\\\\d\\\\.]+)\\\\s*\\\\)/i.test(text)?(this.type=\\\"color\\\",this.red=+RegExp.$1,this.green=+RegExp.$2,this.blue=+RegExp.$3,this.alpha=+RegExp.$4):/^rgba\\\\(\\\\s*(\\\\d+)%\\\\s*,\\\\s*(\\\\d+)%\\\\s*,\\\\s*(\\\\d+)%\\\\s*,\\\\s*([\\\\d\\\\.]+)\\\\s*\\\\)/i.test(text)?(this.type=\\\"color\\\",this.red=255*+RegExp.$1/100,this.green=255*+RegExp.$2/100,this.blue=255*+RegExp.$3/100,this.alpha=+RegExp.$4):/^hsl\\\\(\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)%\\\\s*,\\\\s*(\\\\d+)%\\\\s*\\\\)/i.test(text)?(this.type=\\\"color\\\",this.hue=+RegExp.$1,this.saturation=+RegExp.$2/100,this.lightness=+RegExp.$3/100):/^hsla\\\\(\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)%\\\\s*,\\\\s*(\\\\d+)%\\\\s*,\\\\s*([\\\\d\\\\.]+)\\\\s*\\\\)/i.test(text)?(this.type=\\\"color\\\",this.hue=+RegExp.$1,this.saturation=+RegExp.$2/100,this.lightness=+RegExp.$3/100,this.alpha=+RegExp.$4):/^url\\\\([\\\"']?([^\\\\)\\\"']+)[\\\"']?\\\\)/i.test(text)?(this.type=\\\"uri\\\",this.uri=RegExp.$1):/^([^\\\\(]+)\\\\(/i.test(text)?(this.type=\\\"function\\\",this.name=RegExp.$1,this.value=text):/^[\\\"'][^\\\"']*[\\\"']/.test(text)?(this.type=\\\"string\\\",this.value=eval(text)):Colors[text.toLowerCase()]?(this.type=\\\"color\\\",temp=Colors[text.toLowerCase()].substring(1),this.red=parseInt(temp.substring(0,2),16),this.green=parseInt(temp.substring(2,4),16),this.blue=parseInt(temp.substring(4,6),16)):/^[\\\\,\\\\/]$/.test(text)?(this.type=\\\"operator\\\",this.value=text):/^[a-z\\\\-_\\\\u0080-\\\\uFFFF][a-z0-9\\\\-_\\\\u0080-\\\\uFFFF]*$/i.test(text)&&(this.type=\\\"identifier\\\",this.value=text)}function Selector(parts,line,col){SyntaxUnit.call(this,parts.join(\\\" \\\"),line,col,Parser.SELECTOR_TYPE),this.parts=parts,this.specificity=Specificity.calculate(this)}function SelectorPart(elementName,modifiers,text,line,col){SyntaxUnit.call(this,text,line,col,Parser.SELECTOR_PART_TYPE),this.elementName=elementName,this.modifiers=modifiers}function SelectorSubPart(text,type,line,col){SyntaxUnit.call(this,text,line,col,Parser.SELECTOR_SUB_PART_TYPE),this.type=type,this.args=[]}function Specificity(a,b,c,d){this.a=a,this.b=b,this.c=c,this.d=d}function isHexDigit(c){return null!==c&&h.test(c)}function isDigit(c){return null!==c&&/\\\\d/.test(c)}function isWhitespace(c){return null!==c&&/\\\\s/.test(c)}function isNewLine(c){return null!==c&&nl.test(c)}function isNameStart(c){return null!==c&&/[a-z_\\\\u0080-\\\\uFFFF\\\\\\\\]/i.test(c)}function isNameChar(c){return null!==c&&(isNameStart(c)||/[0-9\\\\-\\\\\\\\]/.test(c))}function isIdentStart(c){return null!==c&&(isNameStart(c)||/\\\\-\\\\\\\\/.test(c))}function mix(receiver,supplier){for(var prop in supplier)supplier.hasOwnProperty(prop)&&(receiver[prop]=supplier[prop]);return receiver}function TokenStream(input){TokenStreamBase.call(this,input,Tokens)}function ValidationError(message,line,col){this.col=col,this.line=line,this.message=message}var EventTarget=parserlib.util.EventTarget,TokenStreamBase=parserlib.util.TokenStreamBase,StringReader=parserlib.util.StringReader,SyntaxError=parserlib.util.SyntaxError,SyntaxUnit=parserlib.util.SyntaxUnit,Colors={aliceblue:\\\"#f0f8ff\\\",antiquewhite:\\\"#faebd7\\\",aqua:\\\"#00ffff\\\",aquamarine:\\\"#7fffd4\\\",azure:\\\"#f0ffff\\\",beige:\\\"#f5f5dc\\\",bisque:\\\"#ffe4c4\\\",black:\\\"#000000\\\",blanchedalmond:\\\"#ffebcd\\\",blue:\\\"#0000ff\\\",blueviolet:\\\"#8a2be2\\\",brown:\\\"#a52a2a\\\",burlywood:\\\"#deb887\\\",cadetblue:\\\"#5f9ea0\\\",chartreuse:\\\"#7fff00\\\",chocolate:\\\"#d2691e\\\",coral:\\\"#ff7f50\\\",cornflowerblue:\\\"#6495ed\\\",cornsilk:\\\"#fff8dc\\\",crimson:\\\"#dc143c\\\",cyan:\\\"#00ffff\\\",darkblue:\\\"#00008b\\\",darkcyan:\\\"#008b8b\\\",darkgoldenrod:\\\"#b8860b\\\",darkgray:\\\"#a9a9a9\\\",darkgrey:\\\"#a9a9a9\\\",darkgreen:\\\"#006400\\\",darkkhaki:\\\"#bdb76b\\\",darkmagenta:\\\"#8b008b\\\",darkolivegreen:\\\"#556b2f\\\",darkorange:\\\"#ff8c00\\\",darkorchid:\\\"#9932cc\\\",darkred:\\\"#8b0000\\\",darksalmon:\\\"#e9967a\\\",darkseagreen:\\\"#8fbc8f\\\",darkslateblue:\\\"#483d8b\\\",darkslategray:\\\"#2f4f4f\\\",darkslategrey:\\\"#2f4f4f\\\",darkturquoise:\\\"#00ced1\\\",darkviolet:\\\"#9400d3\\\",deeppink:\\\"#ff1493\\\",deepskyblue:\\\"#00bfff\\\",dimgray:\\\"#696969\\\",dimgrey:\\\"#696969\\\",dodgerblue:\\\"#1e90ff\\\",firebrick:\\\"#b22222\\\",floralwhite:\\\"#fffaf0\\\",forestgreen:\\\"#228b22\\\",fuchsia:\\\"#ff00ff\\\",gainsboro:\\\"#dcdcdc\\\",ghostwhite:\\\"#f8f8ff\\\",gold:\\\"#ffd700\\\",goldenrod:\\\"#daa520\\\",gray:\\\"#808080\\\",grey:\\\"#808080\\\",green:\\\"#008000\\\",greenyellow:\\\"#adff2f\\\",honeydew:\\\"#f0fff0\\\",hotpink:\\\"#ff69b4\\\",indianred:\\\"#cd5c5c\\\",indigo:\\\"#4b0082\\\",ivory:\\\"#fffff0\\\",khaki:\\\"#f0e68c\\\",lavender:\\\"#e6e6fa\\\",lavenderblush:\\\"#fff0f5\\\",lawngreen:\\\"#7cfc00\\\",lemonchiffon:\\\"#fffacd\\\",lightblue:\\\"#add8e6\\\",lightcoral:\\\"#f08080\\\",lightcyan:\\\"#e0ffff\\\",lightgoldenrodyellow:\\\"#fafad2\\\",lightgray:\\\"#d3d3d3\\\",lightgrey:\\\"#d3d3d3\\\",lightgreen:\\\"#90ee90\\\",lightpink:\\\"#ffb6c1\\\",lightsalmon:\\\"#ffa07a\\\",lightseagreen:\\\"#20b2aa\\\",lightskyblue:\\\"#87cefa\\\",lightslategray:\\\"#778899\\\",lightslategrey:\\\"#778899\\\",lightsteelblue:\\\"#b0c4de\\\",lightyellow:\\\"#ffffe0\\\",lime:\\\"#00ff00\\\",limegreen:\\\"#32cd32\\\",linen:\\\"#faf0e6\\\",magenta:\\\"#ff00ff\\\",maroon:\\\"#800000\\\",mediumaquamarine:\\\"#66cdaa\\\",mediumblue:\\\"#0000cd\\\",mediumorchid:\\\"#ba55d3\\\",mediumpurple:\\\"#9370d8\\\",mediumseagreen:\\\"#3cb371\\\",mediumslateblue:\\\"#7b68ee\\\",mediumspringgreen:\\\"#00fa9a\\\",mediumturquoise:\\\"#48d1cc\\\",mediumvioletred:\\\"#c71585\\\",midnightblue:\\\"#191970\\\",mintcream:\\\"#f5fffa\\\",mistyrose:\\\"#ffe4e1\\\",moccasin:\\\"#ffe4b5\\\",navajowhite:\\\"#ffdead\\\",navy:\\\"#000080\\\",oldlace:\\\"#fdf5e6\\\",olive:\\\"#808000\\\",olivedrab:\\\"#6b8e23\\\",orange:\\\"#ffa500\\\",orangered:\\\"#ff4500\\\",orchid:\\\"#da70d6\\\",palegoldenrod:\\\"#eee8aa\\\",palegreen:\\\"#98fb98\\\",paleturquoise:\\\"#afeeee\\\",palevioletred:\\\"#d87093\\\",papayawhip:\\\"#ffefd5\\\",peachpuff:\\\"#ffdab9\\\",peru:\\\"#cd853f\\\",pink:\\\"#ffc0cb\\\",plum:\\\"#dda0dd\\\",powderblue:\\\"#b0e0e6\\\",purple:\\\"#800080\\\",red:\\\"#ff0000\\\",rosybrown:\\\"#bc8f8f\\\",royalblue:\\\"#4169e1\\\",saddlebrown:\\\"#8b4513\\\",salmon:\\\"#fa8072\\\",sandybrown:\\\"#f4a460\\\",seagreen:\\\"#2e8b57\\\",seashell:\\\"#fff5ee\\\",sienna:\\\"#a0522d\\\",silver:\\\"#c0c0c0\\\",skyblue:\\\"#87ceeb\\\",slateblue:\\\"#6a5acd\\\",slategray:\\\"#708090\\\",slategrey:\\\"#708090\\\",snow:\\\"#fffafa\\\",springgreen:\\\"#00ff7f\\\",steelblue:\\\"#4682b4\\\",tan:\\\"#d2b48c\\\",teal:\\\"#008080\\\",thistle:\\\"#d8bfd8\\\",tomato:\\\"#ff6347\\\",turquoise:\\\"#40e0d0\\\",violet:\\\"#ee82ee\\\",wheat:\\\"#f5deb3\\\",white:\\\"#ffffff\\\",whitesmoke:\\\"#f5f5f5\\\",yellow:\\\"#ffff00\\\",yellowgreen:\\\"#9acd32\\\",activeBorder:\\\"Active window border.\\\",activecaption:\\\"Active window caption.\\\",appworkspace:\\\"Background color of multiple document interface.\\\",background:\\\"Desktop background.\\\",buttonface:\\\"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.\\\",buttonhighlight:\\\"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\\\",buttonshadow:\\\"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\\\",buttontext:\\\"Text on push buttons.\\\",captiontext:\\\"Text in caption, size box, and scrollbar arrow box.\\\",graytext:\\\"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.\\\",greytext:\\\"Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.\\\",highlight:\\\"Item(s) selected in a control.\\\",highlighttext:\\\"Text of item(s) selected in a control.\\\",inactiveborder:\\\"Inactive window border.\\\",inactivecaption:\\\"Inactive window caption.\\\",inactivecaptiontext:\\\"Color of text in an inactive caption.\\\",infobackground:\\\"Background color for tooltip controls.\\\",infotext:\\\"Text color for tooltip controls.\\\",menu:\\\"Menu background.\\\",menutext:\\\"Text in menus.\\\",scrollbar:\\\"Scroll bar gray area.\\\",threeddarkshadow:\\\"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\\\",threedface:\\\"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\\\",threedhighlight:\\\"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\\\",threedlightshadow:\\\"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\\\",threedshadow:\\\"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\\\",window:\\\"Window background.\\\",windowframe:\\\"Window frame.\\\",windowtext:\\\"Text in windows.\\\"};Combinator.prototype=new SyntaxUnit,Combinator.prototype.constructor=Combinator,MediaFeature.prototype=new SyntaxUnit,MediaFeature.prototype.constructor=MediaFeature,MediaQuery.prototype=new SyntaxUnit,MediaQuery.prototype.constructor=MediaQuery,Parser.DEFAULT_TYPE=0,Parser.COMBINATOR_TYPE=1,Parser.MEDIA_FEATURE_TYPE=2,Parser.MEDIA_QUERY_TYPE=3,Parser.PROPERTY_NAME_TYPE=4,Parser.PROPERTY_VALUE_TYPE=5,Parser.PROPERTY_VALUE_PART_TYPE=6,Parser.SELECTOR_TYPE=7,Parser.SELECTOR_PART_TYPE=8,Parser.SELECTOR_SUB_PART_TYPE=9,Parser.prototype=function(){var prop,proto=new EventTarget,additions={constructor:Parser,DEFAULT_TYPE:0,COMBINATOR_TYPE:1,MEDIA_FEATURE_TYPE:2,MEDIA_QUERY_TYPE:3,PROPERTY_NAME_TYPE:4,PROPERTY_VALUE_TYPE:5,PROPERTY_VALUE_PART_TYPE:6,SELECTOR_TYPE:7,SELECTOR_PART_TYPE:8,SELECTOR_SUB_PART_TYPE:9,_stylesheet:function(){var count,token,tt,tokenStream=this._tokenStream;for(this.fire(\\\"startstylesheet\\\"),this._charset(),this._skipCruft();tokenStream.peek()==Tokens.IMPORT_SYM;)this._import(),this._skipCruft();for(;tokenStream.peek()==Tokens.NAMESPACE_SYM;)this._namespace(),this._skipCruft();for(tt=tokenStream.peek();tt>Tokens.EOF;){try{switch(tt){case Tokens.MEDIA_SYM:this._media(),this._skipCruft();break;case Tokens.PAGE_SYM:this._page(),this._skipCruft();break;case Tokens.FONT_FACE_SYM:this._font_face(),this._skipCruft();break;case Tokens.KEYFRAMES_SYM:this._keyframes(),this._skipCruft();break;case Tokens.VIEWPORT_SYM:this._viewport(),this._skipCruft();break;case Tokens.UNKNOWN_SYM:if(tokenStream.get(),this.options.strict)throw new SyntaxError(\\\"Unknown @ rule.\\\",tokenStream.LT(0).startLine,tokenStream.LT(0).startCol);for(this.fire({type:\\\"error\\\",error:null,message:\\\"Unknown @ rule: \\\"+tokenStream.LT(0).value+\\\".\\\",line:tokenStream.LT(0).startLine,col:tokenStream.LT(0).startCol}),count=0;tokenStream.advance([Tokens.LBRACE,Tokens.RBRACE])==Tokens.LBRACE;)count++;for(;count;)tokenStream.advance([Tokens.RBRACE]),count--;break;case Tokens.S:this._readWhitespace();break;default:if(!this._ruleset())switch(tt){case Tokens.CHARSET_SYM:throw token=tokenStream.LT(1),this._charset(!1),new SyntaxError(\\\"@charset not allowed here.\\\",token.startLine,token.startCol);case Tokens.IMPORT_SYM:throw token=tokenStream.LT(1),this._import(!1),new SyntaxError(\\\"@import not allowed here.\\\",token.startLine,token.startCol);case Tokens.NAMESPACE_SYM:throw token=tokenStream.LT(1),this._namespace(!1),new SyntaxError(\\\"@namespace not allowed here.\\\",token.startLine,token.startCol);default:tokenStream.get(),this._unexpectedToken(tokenStream.token())}}}catch(ex){if(!(ex instanceof SyntaxError)||this.options.strict)throw ex;this.fire({type:\\\"error\\\",error:ex,message:ex.message,line:ex.line,col:ex.col})}tt=tokenStream.peek()}tt!=Tokens.EOF&&this._unexpectedToken(tokenStream.token()),this.fire(\\\"endstylesheet\\\")},_charset:function(emit){var charset,token,line,col,tokenStream=this._tokenStream;tokenStream.match(Tokens.CHARSET_SYM)&&(line=tokenStream.token().startLine,col=tokenStream.token().startCol,this._readWhitespace(),tokenStream.mustMatch(Tokens.STRING),token=tokenStream.token(),charset=token.value,this._readWhitespace(),tokenStream.mustMatch(Tokens.SEMICOLON),emit!==!1&&this.fire({type:\\\"charset\\\",charset:charset,line:line,col:col}))},_import:function(emit){var uri,importToken,tokenStream=this._tokenStream,mediaList=[];tokenStream.mustMatch(Tokens.IMPORT_SYM),importToken=tokenStream.token(),this._readWhitespace(),tokenStream.mustMatch([Tokens.STRING,Tokens.URI]),uri=tokenStream.token().value.replace(/^(?:url\\\\()?[\\\"']?([^\\\"']+?)[\\\"']?\\\\)?$/,\\\"$1\\\"),this._readWhitespace(),mediaList=this._media_query_list(),tokenStream.mustMatch(Tokens.SEMICOLON),this._readWhitespace(),emit!==!1&&this.fire({type:\\\"import\\\",uri:uri,media:mediaList,line:importToken.startLine,col:importToken.startCol})},_namespace:function(emit){var line,col,prefix,uri,tokenStream=this._tokenStream;tokenStream.mustMatch(Tokens.NAMESPACE_SYM),line=tokenStream.token().startLine,col=tokenStream.token().startCol,this._readWhitespace(),tokenStream.match(Tokens.IDENT)&&(prefix=tokenStream.token().value,this._readWhitespace()),tokenStream.mustMatch([Tokens.STRING,Tokens.URI]),uri=tokenStream.token().value.replace(/(?:url\\\\()?[\\\"']([^\\\"']+)[\\\"']\\\\)?/,\\\"$1\\\"),this._readWhitespace(),tokenStream.mustMatch(Tokens.SEMICOLON),this._readWhitespace(),emit!==!1&&this.fire({type:\\\"namespace\\\",prefix:prefix,uri:uri,line:line,col:col})},_media:function(){var line,col,mediaList,tokenStream=this._tokenStream;for(tokenStream.mustMatch(Tokens.MEDIA_SYM),line=tokenStream.token().startLine,col=tokenStream.token().startCol,this._readWhitespace(),mediaList=this._media_query_list(),tokenStream.mustMatch(Tokens.LBRACE),this._readWhitespace(),this.fire({type:\\\"startmedia\\\",media:mediaList,line:line,col:col});;)if(tokenStream.peek()==Tokens.PAGE_SYM)this._page();else if(tokenStream.peek()==Tokens.FONT_FACE_SYM)this._font_face();else if(tokenStream.peek()==Tokens.VIEWPORT_SYM)this._viewport();else if(!this._ruleset())break;tokenStream.mustMatch(Tokens.RBRACE),this._readWhitespace(),this.fire({type:\\\"endmedia\\\",media:mediaList,line:line,col:col})},_media_query_list:function(){var tokenStream=this._tokenStream,mediaList=[];for(this._readWhitespace(),(tokenStream.peek()==Tokens.IDENT||tokenStream.peek()==Tokens.LPAREN)&&mediaList.push(this._media_query());tokenStream.match(Tokens.COMMA);)this._readWhitespace(),mediaList.push(this._media_query());return mediaList},_media_query:function(){var tokenStream=this._tokenStream,type=null,ident=null,token=null,expressions=[];if(tokenStream.match(Tokens.IDENT)&&(ident=tokenStream.token().value.toLowerCase(),\\\"only\\\"!=ident&&\\\"not\\\"!=ident?(tokenStream.unget(),ident=null):token=tokenStream.token()),this._readWhitespace(),tokenStream.peek()==Tokens.IDENT?(type=this._media_type(),null===token&&(token=tokenStream.token())):tokenStream.peek()==Tokens.LPAREN&&(null===token&&(token=tokenStream.LT(1)),expressions.push(this._media_expression())),null===type&&0===expressions.length)return null;for(this._readWhitespace();tokenStream.match(Tokens.IDENT);)\\\"and\\\"!=tokenStream.token().value.toLowerCase()&&this._unexpectedToken(tokenStream.token()),this._readWhitespace(),expressions.push(this._media_expression());return new MediaQuery(ident,type,expressions,token.startLine,token.startCol)},_media_type:function(){return this._media_feature()},_media_expression:function(){var token,tokenStream=this._tokenStream,feature=null,expression=null;return tokenStream.mustMatch(Tokens.LPAREN),this._readWhitespace(),feature=this._media_feature(),this._readWhitespace(),tokenStream.match(Tokens.COLON)&&(this._readWhitespace(),token=tokenStream.LT(1),expression=this._expression()),tokenStream.mustMatch(Tokens.RPAREN),this._readWhitespace(),new MediaFeature(feature,expression?new SyntaxUnit(expression,token.startLine,token.startCol):null)},_media_feature:function(){var tokenStream=this._tokenStream;return tokenStream.mustMatch(Tokens.IDENT),SyntaxUnit.fromToken(tokenStream.token())},_page:function(){var line,col,tokenStream=this._tokenStream,identifier=null,pseudoPage=null;tokenStream.mustMatch(Tokens.PAGE_SYM),line=tokenStream.token().startLine,col=tokenStream.token().startCol,this._readWhitespace(),tokenStream.match(Tokens.IDENT)&&(identifier=tokenStream.token().value,\\\"auto\\\"===identifier.toLowerCase()&&this._unexpectedToken(tokenStream.token())),tokenStream.peek()==Tokens.COLON&&(pseudoPage=this._pseudo_page()),this._readWhitespace(),this.fire({type:\\\"startpage\\\",id:identifier,pseudo:pseudoPage,line:line,col:col}),this._readDeclarations(!0,!0),this.fire({type:\\\"endpage\\\",id:identifier,pseudo:pseudoPage,line:line,col:col})},_margin:function(){var line,col,tokenStream=this._tokenStream,marginSym=this._margin_sym();return marginSym?(line=tokenStream.token().startLine,col=tokenStream.token().startCol,this.fire({type:\\\"startpagemargin\\\",margin:marginSym,line:line,col:col}),this._readDeclarations(!0),this.fire({type:\\\"endpagemargin\\\",margin:marginSym,line:line,col:col}),!0):!1},_margin_sym:function(){var tokenStream=this._tokenStream;return tokenStream.match([Tokens.TOPLEFTCORNER_SYM,Tokens.TOPLEFT_SYM,Tokens.TOPCENTER_SYM,Tokens.TOPRIGHT_SYM,Tokens.TOPRIGHTCORNER_SYM,Tokens.BOTTOMLEFTCORNER_SYM,Tokens.BOTTOMLEFT_SYM,Tokens.BOTTOMCENTER_SYM,Tokens.BOTTOMRIGHT_SYM,Tokens.BOTTOMRIGHTCORNER_SYM,Tokens.LEFTTOP_SYM,Tokens.LEFTMIDDLE_SYM,Tokens.LEFTBOTTOM_SYM,Tokens.RIGHTTOP_SYM,Tokens.RIGHTMIDDLE_SYM,Tokens.RIGHTBOTTOM_SYM])?SyntaxUnit.fromToken(tokenStream.token()):null},_pseudo_page:function(){var tokenStream=this._tokenStream;return tokenStream.mustMatch(Tokens.COLON),tokenStream.mustMatch(Tokens.IDENT),tokenStream.token().value},_font_face:function(){var line,col,tokenStream=this._tokenStream;tokenStream.mustMatch(Tokens.FONT_FACE_SYM),line=tokenStream.token().startLine,col=tokenStream.token().startCol,this._readWhitespace(),this.fire({type:\\\"startfontface\\\",line:line,col:col}),this._readDeclarations(!0),this.fire({type:\\\"endfontface\\\",line:line,col:col})},_viewport:function(){var line,col,tokenStream=this._tokenStream;tokenStream.mustMatch(Tokens.VIEWPORT_SYM),line=tokenStream.token().startLine,col=tokenStream.token().startCol,this._readWhitespace(),this.fire({type:\\\"startviewport\\\",line:line,col:col}),this._readDeclarations(!0),this.fire({type:\\\"endviewport\\\",line:line,col:col})},_operator:function(inFunction){var tokenStream=this._tokenStream,token=null;return(tokenStream.match([Tokens.SLASH,Tokens.COMMA])||inFunction&&tokenStream.match([Tokens.PLUS,Tokens.STAR,Tokens.MINUS]))&&(token=tokenStream.token(),this._readWhitespace()),token?PropertyValuePart.fromToken(token):null},_combinator:function(){var token,tokenStream=this._tokenStream,value=null;return tokenStream.match([Tokens.PLUS,Tokens.GREATER,Tokens.TILDE])&&(token=tokenStream.token(),value=new Combinator(token.value,token.startLine,token.startCol),this._readWhitespace()),value},_unary_operator:function(){var tokenStream=this._tokenStream;return tokenStream.match([Tokens.MINUS,Tokens.PLUS])?tokenStream.token().value:null},_property:function(){var tokenValue,token,line,col,tokenStream=this._tokenStream,value=null,hack=null;return tokenStream.peek()==Tokens.STAR&&this.options.starHack&&(tokenStream.get(),token=tokenStream.token(),hack=token.value,line=token.startLine,col=token.startCol),tokenStream.match(Tokens.IDENT)&&(token=tokenStream.token(),tokenValue=token.value,\\\"_\\\"==tokenValue.charAt(0)&&this.options.underscoreHack&&(hack=\\\"_\\\",tokenValue=tokenValue.substring(1)),value=new PropertyName(tokenValue,hack,line||token.startLine,col||token.startCol),this._readWhitespace()),value},_ruleset:function(){var tt,selectors,tokenStream=this._tokenStream;try{selectors=this._selectors_group()}catch(ex){if(!(ex instanceof SyntaxError)||this.options.strict)throw ex;if(this.fire({type:\\\"error\\\",error:ex,message:ex.message,line:ex.line,col:ex.col}),tt=tokenStream.advance([Tokens.RBRACE]),tt!=Tokens.RBRACE)throw ex;return!0}return selectors&&(this.fire({type:\\\"startrule\\\",selectors:selectors,line:selectors[0].line,col:selectors[0].col}),this._readDeclarations(!0),this.fire({type:\\\"endrule\\\",selectors:selectors,line:selectors[0].line,col:selectors[0].col})),selectors},_selectors_group:function(){var selector,tokenStream=this._tokenStream,selectors=[];if(selector=this._selector(),null!==selector)for(selectors.push(selector);tokenStream.match(Tokens.COMMA);)this._readWhitespace(),selector=this._selector(),null!==selector?selectors.push(selector):this._unexpectedToken(tokenStream.LT(1));return selectors.length?selectors:null},_selector:function(){var tokenStream=this._tokenStream,selector=[],nextSelector=null,combinator=null,ws=null;if(nextSelector=this._simple_selector_sequence(),null===nextSelector)return null;for(selector.push(nextSelector);;)if(combinator=this._combinator(),null!==combinator)selector.push(combinator),nextSelector=this._simple_selector_sequence(),null===nextSelector?this._unexpectedToken(tokenStream.LT(1)):selector.push(nextSelector);else{if(!this._readWhitespace())break;ws=new Combinator(tokenStream.token().value,tokenStream.token().startLine,tokenStream.token().startCol),combinator=this._combinator(),nextSelector=this._simple_selector_sequence(),null===nextSelector?null!==combinator&&this._unexpectedToken(tokenStream.LT(1)):(null!==combinator?selector.push(combinator):selector.push(ws),selector.push(nextSelector))}return new Selector(selector,selector[0].line,selector[0].col)},_simple_selector_sequence:function(){var line,col,tokenStream=this._tokenStream,elementName=null,modifiers=[],selectorText=\\\"\\\",components=[function(){return tokenStream.match(Tokens.HASH)?new SelectorSubPart(tokenStream.token().value,\\\"id\\\",tokenStream.token().startLine,tokenStream.token().startCol):null},this._class,this._attrib,this._pseudo,this._negation],i=0,len=components.length,component=null;for(line=tokenStream.LT(1).startLine,col=tokenStream.LT(1).startCol,elementName=this._type_selector(),elementName||(elementName=this._universal()),null!==elementName&&(selectorText+=elementName);;){if(tokenStream.peek()===Tokens.S)break;for(;len>i&&null===component;)component=components[i++].call(this);if(null===component){if(\\\"\\\"===selectorText)return null;break}i=0,modifiers.push(component),selectorText+=\\\"\\\"+component,component=null}return\\\"\\\"!==selectorText?new SelectorPart(elementName,modifiers,selectorText,line,col):null},_type_selector:function(){var tokenStream=this._tokenStream,ns=this._namespace_prefix(),elementName=this._element_name();return elementName?(ns&&(elementName.text=ns+elementName.text,elementName.col-=ns.length),elementName):(ns&&(tokenStream.unget(),ns.length>1&&tokenStream.unget()),null)},_class:function(){var token,tokenStream=this._tokenStream;return tokenStream.match(Tokens.DOT)?(tokenStream.mustMatch(Tokens.IDENT),token=tokenStream.token(),new SelectorSubPart(\\\".\\\"+token.value,\\\"class\\\",token.startLine,token.startCol-1)):null},_element_name:function(){var token,tokenStream=this._tokenStream;return tokenStream.match(Tokens.IDENT)?(token=tokenStream.token(),new SelectorSubPart(token.value,\\\"elementName\\\",token.startLine,token.startCol)):null},_namespace_prefix:function(){var tokenStream=this._tokenStream,value=\\\"\\\";return(tokenStream.LA(1)===Tokens.PIPE||tokenStream.LA(2)===Tokens.PIPE)&&(tokenStream.match([Tokens.IDENT,Tokens.STAR])&&(value+=tokenStream.token().value),tokenStream.mustMatch(Tokens.PIPE),value+=\\\"|\\\"),value.length?value:null},_universal:function(){var ns,tokenStream=this._tokenStream,value=\\\"\\\";return ns=this._namespace_prefix(),ns&&(value+=ns),tokenStream.match(Tokens.STAR)&&(value+=\\\"*\\\"),value.length?value:null},_attrib:function(){var ns,token,tokenStream=this._tokenStream,value=null;return tokenStream.match(Tokens.LBRACKET)?(token=tokenStream.token(),value=token.value,value+=this._readWhitespace(),ns=this._namespace_prefix(),ns&&(value+=ns),tokenStream.mustMatch(Tokens.IDENT),value+=tokenStream.token().value,value+=this._readWhitespace(),tokenStream.match([Tokens.PREFIXMATCH,Tokens.SUFFIXMATCH,Tokens.SUBSTRINGMATCH,Tokens.EQUALS,Tokens.INCLUDES,Tokens.DASHMATCH])&&(value+=tokenStream.token().value,value+=this._readWhitespace(),tokenStream.mustMatch([Tokens.IDENT,Tokens.STRING]),value+=tokenStream.token().value,value+=this._readWhitespace()),tokenStream.mustMatch(Tokens.RBRACKET),new SelectorSubPart(value+\\\"]\\\",\\\"attribute\\\",token.startLine,token.startCol)):null},_pseudo:function(){var line,col,tokenStream=this._tokenStream,pseudo=null,colons=\\\":\\\";return tokenStream.match(Tokens.COLON)&&(tokenStream.match(Tokens.COLON)&&(colons+=\\\":\\\"),tokenStream.match(Tokens.IDENT)?(pseudo=tokenStream.token().value,line=tokenStream.token().startLine,col=tokenStream.token().startCol-colons.length):tokenStream.peek()==Tokens.FUNCTION&&(line=tokenStream.LT(1).startLine,col=tokenStream.LT(1).startCol-colons.length,pseudo=this._functional_pseudo()),pseudo&&(pseudo=new SelectorSubPart(colons+pseudo,\\\"pseudo\\\",line,col))),pseudo},_functional_pseudo:function(){var tokenStream=this._tokenStream,value=null;return tokenStream.match(Tokens.FUNCTION)&&(value=tokenStream.token().value,value+=this._readWhitespace(),value+=this._expression(),tokenStream.mustMatch(Tokens.RPAREN),value+=\\\")\\\"),value},_expression:function(){for(var tokenStream=this._tokenStream,value=\\\"\\\";tokenStream.match([Tokens.PLUS,Tokens.MINUS,Tokens.DIMENSION,Tokens.NUMBER,Tokens.STRING,Tokens.IDENT,Tokens.LENGTH,Tokens.FREQ,Tokens.ANGLE,Tokens.TIME,Tokens.RESOLUTION,Tokens.SLASH]);)value+=tokenStream.token().value,value+=this._readWhitespace();return value.length?value:null},_negation:function(){var line,col,arg,tokenStream=this._tokenStream,value=\\\"\\\",subpart=null;return tokenStream.match(Tokens.NOT)&&(value=tokenStream.token().value,line=tokenStream.token().startLine,col=tokenStream.token().startCol,value+=this._readWhitespace(),arg=this._negation_arg(),value+=arg,value+=this._readWhitespace(),tokenStream.match(Tokens.RPAREN),value+=tokenStream.token().value,subpart=new SelectorSubPart(value,\\\"not\\\",line,col),subpart.args.push(arg)),subpart},_negation_arg:function(){var line,col,part,tokenStream=this._tokenStream,args=[this._type_selector,this._universal,function(){return tokenStream.match(Tokens.HASH)?new SelectorSubPart(tokenStream.token().value,\\\"id\\\",tokenStream.token().startLine,tokenStream.token().startCol):null},this._class,this._attrib,this._pseudo],arg=null,i=0,len=args.length;for(line=tokenStream.LT(1).startLine,col=tokenStream.LT(1).startCol;len>i&&null===arg;)arg=args[i].call(this),i++;return null===arg&&this._unexpectedToken(tokenStream.LT(1)),part=\\\"elementName\\\"==arg.type?new SelectorPart(arg,[],\\\"\\\"+arg,line,col):new SelectorPart(null,[arg],\\\"\\\"+arg,line,col)},_declaration:function(){var tokenStream=this._tokenStream,property=null,expr=null,prio=null,invalid=null,propertyName=\\\"\\\";if(property=this._property(),null!==property){tokenStream.mustMatch(Tokens.COLON),this._readWhitespace(),expr=this._expr(),expr&&0!==expr.length||this._unexpectedToken(tokenStream.LT(1)),prio=this._prio(),propertyName=\\\"\\\"+property,(this.options.starHack&&\\\"*\\\"==property.hack||this.options.underscoreHack&&\\\"_\\\"==property.hack)&&(propertyName=property.text);try{this._validateProperty(propertyName,expr)}catch(ex){invalid=ex}return this.fire({type:\\\"property\\\",property:property,value:expr,important:prio,line:property.line,col:property.col,invalid:invalid}),!0}return!1},_prio:function(){var tokenStream=this._tokenStream,result=tokenStream.match(Tokens.IMPORTANT_SYM);return this._readWhitespace(),result},_expr:function(inFunction){var values=(this._tokenStream,[]),value=null,operator=null;if(value=this._term(inFunction),null!==value)for(values.push(value);;){if(operator=this._operator(inFunction),operator&&values.push(operator),value=this._term(inFunction),null===value)break;\\nvalues.push(value)}return values.length>0?new PropertyValue(values,values[0].line,values[0].col):null},_term:function(inFunction){var token,line,col,tokenStream=this._tokenStream,unary=null,value=null,endChar=null;return unary=this._unary_operator(),null!==unary&&(line=tokenStream.token().startLine,col=tokenStream.token().startCol),tokenStream.peek()==Tokens.IE_FUNCTION&&this.options.ieFilters?(value=this._ie_function(),null===unary&&(line=tokenStream.token().startLine,col=tokenStream.token().startCol)):inFunction&&tokenStream.match([Tokens.LPAREN,Tokens.LBRACE,Tokens.LBRACKET])?(token=tokenStream.token(),endChar=token.endChar,value=token.value+this._expr(inFunction).text,null===unary&&(line=tokenStream.token().startLine,col=tokenStream.token().startCol),tokenStream.mustMatch(Tokens.type(endChar)),value+=endChar,this._readWhitespace()):tokenStream.match([Tokens.NUMBER,Tokens.PERCENTAGE,Tokens.LENGTH,Tokens.ANGLE,Tokens.TIME,Tokens.FREQ,Tokens.STRING,Tokens.IDENT,Tokens.URI,Tokens.UNICODE_RANGE])?(value=tokenStream.token().value,null===unary&&(line=tokenStream.token().startLine,col=tokenStream.token().startCol),this._readWhitespace()):(token=this._hexcolor(),null===token?(null===unary&&(line=tokenStream.LT(1).startLine,col=tokenStream.LT(1).startCol),null===value&&(value=tokenStream.LA(3)==Tokens.EQUALS&&this.options.ieFilters?this._ie_function():this._function())):(value=token.value,null===unary&&(line=token.startLine,col=token.startCol))),null!==value?new PropertyValuePart(null!==unary?unary+value:value,line,col):null},_function:function(){var lt,tokenStream=this._tokenStream,functionText=null,expr=null;if(tokenStream.match(Tokens.FUNCTION)){if(functionText=tokenStream.token().value,this._readWhitespace(),expr=this._expr(!0),functionText+=expr,this.options.ieFilters&&tokenStream.peek()==Tokens.EQUALS)do for(this._readWhitespace()&&(functionText+=tokenStream.token().value),tokenStream.LA(0)==Tokens.COMMA&&(functionText+=tokenStream.token().value),tokenStream.match(Tokens.IDENT),functionText+=tokenStream.token().value,tokenStream.match(Tokens.EQUALS),functionText+=tokenStream.token().value,lt=tokenStream.peek();lt!=Tokens.COMMA&<!=Tokens.S&<!=Tokens.RPAREN;)tokenStream.get(),functionText+=tokenStream.token().value,lt=tokenStream.peek();while(tokenStream.match([Tokens.COMMA,Tokens.S]));tokenStream.match(Tokens.RPAREN),functionText+=\\\")\\\",this._readWhitespace()}return functionText},_ie_function:function(){var lt,tokenStream=this._tokenStream,functionText=null;if(tokenStream.match([Tokens.IE_FUNCTION,Tokens.FUNCTION])){functionText=tokenStream.token().value;do for(this._readWhitespace()&&(functionText+=tokenStream.token().value),tokenStream.LA(0)==Tokens.COMMA&&(functionText+=tokenStream.token().value),tokenStream.match(Tokens.IDENT),functionText+=tokenStream.token().value,tokenStream.match(Tokens.EQUALS),functionText+=tokenStream.token().value,lt=tokenStream.peek();lt!=Tokens.COMMA&<!=Tokens.S&<!=Tokens.RPAREN;)tokenStream.get(),functionText+=tokenStream.token().value,lt=tokenStream.peek();while(tokenStream.match([Tokens.COMMA,Tokens.S]));tokenStream.match(Tokens.RPAREN),functionText+=\\\")\\\",this._readWhitespace()}return functionText},_hexcolor:function(){var color,tokenStream=this._tokenStream,token=null;if(tokenStream.match(Tokens.HASH)){if(token=tokenStream.token(),color=token.value,!/#[a-f0-9]{3,6}/i.test(color))throw new SyntaxError(\\\"Expected a hex color but found '\\\"+color+\\\"' at line \\\"+token.startLine+\\\", col \\\"+token.startCol+\\\".\\\",token.startLine,token.startCol);this._readWhitespace()}return token},_keyframes:function(){var token,tt,name,tokenStream=this._tokenStream,prefix=\\\"\\\";for(tokenStream.mustMatch(Tokens.KEYFRAMES_SYM),token=tokenStream.token(),/^@\\\\-([^\\\\-]+)\\\\-/.test(token.value)&&(prefix=RegExp.$1),this._readWhitespace(),name=this._keyframe_name(),this._readWhitespace(),tokenStream.mustMatch(Tokens.LBRACE),this.fire({type:\\\"startkeyframes\\\",name:name,prefix:prefix,line:token.startLine,col:token.startCol}),this._readWhitespace(),tt=tokenStream.peek();tt==Tokens.IDENT||tt==Tokens.PERCENTAGE;)this._keyframe_rule(),this._readWhitespace(),tt=tokenStream.peek();this.fire({type:\\\"endkeyframes\\\",name:name,prefix:prefix,line:token.startLine,col:token.startCol}),this._readWhitespace(),tokenStream.mustMatch(Tokens.RBRACE)},_keyframe_name:function(){var tokenStream=this._tokenStream;return tokenStream.mustMatch([Tokens.IDENT,Tokens.STRING]),SyntaxUnit.fromToken(tokenStream.token())},_keyframe_rule:function(){var keyList=(this._tokenStream,this._key_list());this.fire({type:\\\"startkeyframerule\\\",keys:keyList,line:keyList[0].line,col:keyList[0].col}),this._readDeclarations(!0),this.fire({type:\\\"endkeyframerule\\\",keys:keyList,line:keyList[0].line,col:keyList[0].col})},_key_list:function(){var tokenStream=this._tokenStream,keyList=[];for(keyList.push(this._key()),this._readWhitespace();tokenStream.match(Tokens.COMMA);)this._readWhitespace(),keyList.push(this._key()),this._readWhitespace();return keyList},_key:function(){var token,tokenStream=this._tokenStream;if(tokenStream.match(Tokens.PERCENTAGE))return SyntaxUnit.fromToken(tokenStream.token());if(tokenStream.match(Tokens.IDENT)){if(token=tokenStream.token(),/from|to/i.test(token.value))return SyntaxUnit.fromToken(token);tokenStream.unget()}this._unexpectedToken(tokenStream.LT(1))},_skipCruft:function(){for(;this._tokenStream.match([Tokens.S,Tokens.CDO,Tokens.CDC]););},_readDeclarations:function(checkStart,readMargins){var tt,tokenStream=this._tokenStream;this._readWhitespace(),checkStart&&tokenStream.mustMatch(Tokens.LBRACE),this._readWhitespace();try{for(;;){if(tokenStream.match(Tokens.SEMICOLON)||readMargins&&this._margin());else{if(!this._declaration())break;if(!tokenStream.match(Tokens.SEMICOLON))break}this._readWhitespace()}tokenStream.mustMatch(Tokens.RBRACE),this._readWhitespace()}catch(ex){if(!(ex instanceof SyntaxError)||this.options.strict)throw ex;if(this.fire({type:\\\"error\\\",error:ex,message:ex.message,line:ex.line,col:ex.col}),tt=tokenStream.advance([Tokens.SEMICOLON,Tokens.RBRACE]),tt==Tokens.SEMICOLON)this._readDeclarations(!1,readMargins);else if(tt!=Tokens.RBRACE)throw ex}},_readWhitespace:function(){for(var tokenStream=this._tokenStream,ws=\\\"\\\";tokenStream.match(Tokens.S);)ws+=tokenStream.token().value;return ws},_unexpectedToken:function(token){throw new SyntaxError(\\\"Unexpected token '\\\"+token.value+\\\"' at line \\\"+token.startLine+\\\", col \\\"+token.startCol+\\\".\\\",token.startLine,token.startCol)},_verifyEnd:function(){this._tokenStream.LA(1)!=Tokens.EOF&&this._unexpectedToken(this._tokenStream.LT(1))},_validateProperty:function(property,value){Validation.validate(property,value)},parse:function(input){this._tokenStream=new TokenStream(input,Tokens),this._stylesheet()},parseStyleSheet:function(input){return this.parse(input)},parseMediaQuery:function(input){this._tokenStream=new TokenStream(input,Tokens);var result=this._media_query();return this._verifyEnd(),result},parsePropertyValue:function(input){this._tokenStream=new TokenStream(input,Tokens),this._readWhitespace();var result=this._expr();return this._readWhitespace(),this._verifyEnd(),result},parseRule:function(input){this._tokenStream=new TokenStream(input,Tokens),this._readWhitespace();var result=this._ruleset();return this._readWhitespace(),this._verifyEnd(),result},parseSelector:function(input){this._tokenStream=new TokenStream(input,Tokens),this._readWhitespace();var result=this._selector();return this._readWhitespace(),this._verifyEnd(),result},parseStyleAttribute:function(input){input+=\\\"}\\\",this._tokenStream=new TokenStream(input,Tokens),this._readDeclarations()}};for(prop in additions)additions.hasOwnProperty(prop)&&(proto[prop]=additions[prop]);return proto}();var Properties={\\\"align-items\\\":\\\"flex-start | flex-end | center | baseline | stretch\\\",\\\"align-content\\\":\\\"flex-start | flex-end | center | space-between | space-around | stretch\\\",\\\"align-self\\\":\\\"auto | flex-start | flex-end | center | baseline | stretch\\\",\\\"-webkit-align-items\\\":\\\"flex-start | flex-end | center | baseline | stretch\\\",\\\"-webkit-align-content\\\":\\\"flex-start | flex-end | center | space-between | space-around | stretch\\\",\\\"-webkit-align-self\\\":\\\"auto | flex-start | flex-end | center | baseline | stretch\\\",\\\"alignment-adjust\\\":\\\"auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | | \\\",\\\"alignment-baseline\\\":\\\"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\\\",animation:1,\\\"animation-delay\\\":{multi:\\\"