'no use strict'
!(function (e) {
	function t(e, t) {
		var n = e,
			r = ''
		while (n) {
			var i = t[n]
			if (typeof i == 'string') return i + r
			if (i) return i.location.replace(/\/*$/, '/') + (r || i.main || i.name)
			if (i === !1) return ''
			var s = n.lastIndexOf('/')
			if (s === -1) break
			;(r = n.substr(s) + r), (n = n.slice(0, s))
		}
		return e
	}
	if (typeof e.window != 'undefined' && e.document) return
	if (e.require && e.define) return
	e.console ||
		((e.console = function () {
			var e = Array.prototype.slice.call(arguments, 0)
			postMessage({ type: 'log', data: e })
		}),
		(e.console.error = e.console.warn = e.console.log = e.console.trace = e.console)),
		(e.window = e),
		(e.ace = e),
		(e.onerror = function (e, t, n, r, i) {
			postMessage({
				type: 'error',
				data: { message: e, data: i.data, file: t, line: n, col: r, stack: i.stack },
			})
		}),
		(e.normalizeModule = function (t, n) {
			if (n.indexOf('!') !== -1) {
				var r = n.split('!')
				return e.normalizeModule(t, r[0]) + '!' + e.normalizeModule(t, r[1])
			}
			if (n.charAt(0) == '.') {
				var i = t.split('/').slice(0, -1).join('/')
				n = (i ? i + '/' : '') + n
				while (n.indexOf('.') !== -1 && s != n) {
					var s = n
					n = n
						.replace(/^\.\//, '')
						.replace(/\/\.\//, '/')
						.replace(/[^\/]+\/\.\.\//, '')
				}
			}
			return n
		}),
		(e.require = function (r, i) {
			i || ((i = r), (r = null))
			if (!i.charAt) throw new Error('worker.js require() accepts only (parentId, id) as arguments')
			i = e.normalizeModule(r, i)
			var s = e.require.modules[i]
			if (s)
				return s.initialized || ((s.initialized = !0), (s.exports = s.factory().exports)), s.exports
			if (!e.require.tlns) return console.log('unable to load ' + i)
			var o = t(i, e.require.tlns)
			return (
				o.slice(-3) != '.js' && (o += '.js'),
				(e.require.id = i),
				(e.require.modules[i] = {}),
				importScripts(o),
				e.require(r, i)
			)
		}),
		(e.require.modules = {}),
		(e.require.tlns = {}),
		(e.define = function (t, n, r) {
			arguments.length == 2
				? ((r = n), typeof t != 'string' && ((n = t), (t = e.require.id)))
				: arguments.length == 1 && ((r = t), (n = []), (t = e.require.id))
			if (typeof r != 'function') {
				e.require.modules[t] = { exports: r, initialized: !0 }
				return
			}
			n.length || (n = ['require', 'exports', 'module'])
			var i = function (n) {
				return e.require(t, n)
			}
			e.require.modules[t] = {
				exports: {},
				factory: function () {
					var e = this,
						t = r.apply(
							this,
							n.slice(0, r.length).map(function (t) {
								switch (t) {
									case 'require':
										return i
									case 'exports':
										return e.exports
									case 'module':
										return e
									default:
										return i(t)
								}
							})
						)
					return t && (e.exports = t), e
				},
			}
		}),
		(e.define.amd = {}),
		(require.tlns = {}),
		(e.initBaseUrls = function (t) {
			for (var n in t) require.tlns[n] = t[n]
		}),
		(e.initSender = function () {
			var n = e.require('ace/lib/event_emitter').EventEmitter,
				r = e.require('ace/lib/oop'),
				i = function () {}
			return (
				function () {
					r.implement(this, n),
						(this.callback = function (e, t) {
							postMessage({ type: 'call', id: t, data: e })
						}),
						(this.emit = function (e, t) {
							postMessage({ type: 'event', name: e, data: t })
						})
				}.call(i.prototype),
				new i()
			)
		})
	var n = (e.main = null),
		r = (e.sender = null)
	e.onmessage = function (t) {
		var i = t.data
		if (i.event && r) r._signal(i.event, i.data)
		else if (i.command)
			if (n[i.command]) n[i.command].apply(n, i.args)
			else {
				if (!e[i.command]) throw new Error('Unknown command:' + i.command)
				e[i.command].apply(e, i.args)
			}
		else if (i.init) {
			e.initBaseUrls(i.tlns), (r = e.sender = e.initSender())
			var s = require(i.module)[i.classname]
			n = e.main = new s(r)
		}
	}
})(this),
	ace.define('ace/lib/oop', [], function (e, t, n) {
		'use strict'
		;(t.inherits = function (e, t) {
			;(e.super_ = t),
				(e.prototype = Object.create(t.prototype, {
					constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 },
				}))
		}),
			(t.mixin = function (e, t) {
				for (var n in t) e[n] = t[n]
				return e
			}),
			(t.implement = function (e, n) {
				t.mixin(e, n)
			})
	}),
	ace.define('ace/range', [], function (e, t, n) {
		'use strict'
		var r = function (e, t) {
				return e.row - t.row || e.column - t.column
			},
			i = function (e, t, n, r) {
				;(this.start = { row: e, column: t }), (this.end = { row: n, column: r })
			}
		;(function () {
			;(this.isEqual = function (e) {
				return (
					this.start.row === e.start.row &&
					this.end.row === e.end.row &&
					this.start.column === e.start.column &&
					this.end.column === e.end.column
				)
			}),
				(this.toString = function () {
					return (
						'Range: [' +
						this.start.row +
						'/' +
						this.start.column +
						'] -> [' +
						this.end.row +
						'/' +
						this.end.column +
						']'
					)
				}),
				(this.contains = function (e, t) {
					return this.compare(e, t) == 0
				}),
				(this.compareRange = function (e) {
					var t,
						n = e.end,
						r = e.start
					return (
						(t = this.compare(n.row, n.column)),
						t == 1
							? ((t = this.compare(r.row, r.column)), t == 1 ? 2 : t == 0 ? 1 : 0)
							: t == -1
							  ? -2
							  : ((t = this.compare(r.row, r.column)), t == -1 ? -1 : t == 1 ? 42 : 0)
					)
				}),
				(this.comparePoint = function (e) {
					return this.compare(e.row, e.column)
				}),
				(this.containsRange = function (e) {
					return this.comparePoint(e.start) == 0 && this.comparePoint(e.end) == 0
				}),
				(this.intersects = function (e) {
					var t = this.compareRange(e)
					return t == -1 || t == 0 || t == 1
				}),
				(this.isEnd = function (e, t) {
					return this.end.row == e && this.end.column == t
				}),
				(this.isStart = function (e, t) {
					return this.start.row == e && this.start.column == t
				}),
				(this.setStart = function (e, t) {
					typeof e == 'object'
						? ((this.start.column = e.column), (this.start.row = e.row))
						: ((this.start.row = e), (this.start.column = t))
				}),
				(this.setEnd = function (e, t) {
					typeof e == 'object'
						? ((this.end.column = e.column), (this.end.row = e.row))
						: ((this.end.row = e), (this.end.column = t))
				}),
				(this.inside = function (e, t) {
					return this.compare(e, t) == 0 ? (this.isEnd(e, t) || this.isStart(e, t) ? !1 : !0) : !1
				}),
				(this.insideStart = function (e, t) {
					return this.compare(e, t) == 0 ? (this.isEnd(e, t) ? !1 : !0) : !1
				}),
				(this.insideEnd = function (e, t) {
					return this.compare(e, t) == 0 ? (this.isStart(e, t) ? !1 : !0) : !1
				}),
				(this.compare = function (e, t) {
					return !this.isMultiLine() && e === this.start.row
						? t < this.start.column
							? -1
							: t > this.end.column
							  ? 1
							  : 0
						: e < this.start.row
						  ? -1
						  : e > this.end.row
						    ? 1
						    : this.start.row === e
						      ? t >= this.start.column
										? 0
										: -1
						      : this.end.row === e
						        ? t <= this.end.column
											? 0
											: 1
						        : 0
				}),
				(this.compareStart = function (e, t) {
					return this.start.row == e && this.start.column == t ? -1 : this.compare(e, t)
				}),
				(this.compareEnd = function (e, t) {
					return this.end.row == e && this.end.column == t ? 1 : this.compare(e, t)
				}),
				(this.compareInside = function (e, t) {
					return this.end.row == e && this.end.column == t
						? 1
						: this.start.row == e && this.start.column == t
						  ? -1
						  : this.compare(e, t)
				}),
				(this.clipRows = function (e, t) {
					if (this.end.row > t) var n = { row: t + 1, column: 0 }
					else if (this.end.row < e) var n = { row: e, column: 0 }
					if (this.start.row > t) var r = { row: t + 1, column: 0 }
					else if (this.start.row < e) var r = { row: e, column: 0 }
					return i.fromPoints(r || this.start, n || this.end)
				}),
				(this.extend = function (e, t) {
					var n = this.compare(e, t)
					if (n == 0) return this
					if (n == -1) var r = { row: e, column: t }
					else var s = { row: e, column: t }
					return i.fromPoints(r || this.start, s || 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 i.fromPoints(this.start, this.end)
				}),
				(this.collapseRows = function () {
					return this.end.column == 0
						? new i(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0)
						: new i(this.start.row, 0, this.end.row, 0)
				}),
				(this.toScreenRange = function (e) {
					var t = e.documentToScreenPosition(this.start),
						n = e.documentToScreenPosition(this.end)
					return new i(t.row, t.column, n.row, n.column)
				}),
				(this.moveBy = function (e, t) {
					;(this.start.row += e),
						(this.start.column += t),
						(this.end.row += e),
						(this.end.column += t)
				})
		}).call(i.prototype),
			(i.fromPoints = function (e, t) {
				return new i(e.row, e.column, t.row, t.column)
			}),
			(i.comparePoints = r),
			(i.comparePoints = function (e, t) {
				return e.row - t.row || e.column - t.column
			}),
			(t.Range = i)
	}),
	ace.define('ace/apply_delta', [], function (e, t, n) {
		'use strict'
		function r(e, t) {
			throw (console.log('Invalid Delta:', e), 'Invalid Delta: ' + t)
		}
		function i(e, t) {
			return t.row >= 0 && t.row < e.length && t.column >= 0 && t.column <= e[t.row].length
		}
		function s(e, t) {
			t.action != 'insert' &&
				t.action != 'remove' &&
				r(t, "delta.action must be 'insert' or 'remove'"),
				t.lines instanceof Array || r(t, 'delta.lines must be an Array'),
				(!t.start || !t.end) && r(t, 'delta.start/end must be an present')
			var n = t.start
			i(e, t.start) || r(t, 'delta.start must be contained in document')
			var s = t.end
			t.action == 'remove' &&
				!i(e, s) &&
				r(t, "delta.end must contained in document for 'remove' actions")
			var o = s.row - n.row,
				u = s.column - (o == 0 ? n.column : 0)
			;(o != t.lines.length - 1 || t.lines[o].length != u) &&
				r(t, 'delta.range must match delta lines')
		}
		t.applyDelta = function (e, t, n) {
			var r = t.start.row,
				i = t.start.column,
				s = e[r] || ''
			switch (t.action) {
				case 'insert':
					var o = t.lines
					if (o.length === 1) e[r] = s.substring(0, i) + t.lines[0] + s.substring(i)
					else {
						var u = [r, 1].concat(t.lines)
						e.splice.apply(e, u),
							(e[r] = s.substring(0, i) + e[r]),
							(e[r + t.lines.length - 1] += s.substring(i))
					}
					break
				case 'remove':
					var a = t.end.column,
						f = t.end.row
					r === f
						? (e[r] = s.substring(0, i) + s.substring(a))
						: e.splice(r, f - r + 1, s.substring(0, i) + e[f].substring(a))
			}
		}
	}),
	ace.define('ace/lib/event_emitter', [], function (e, t, n) {
		'use strict'
		var r = {},
			i = function () {
				this.propagationStopped = !0
			},
			s = function () {
				this.defaultPrevented = !0
			}
		;(r._emit = r._dispatchEvent =
			function (e, t) {
				this._eventRegistry || (this._eventRegistry = {}),
					this._defaultHandlers || (this._defaultHandlers = {})
				var n = this._eventRegistry[e] || [],
					r = this._defaultHandlers[e]
				if (!n.length && !r) return
				if (typeof t != 'object' || !t) t = {}
				t.type || (t.type = e),
					t.stopPropagation || (t.stopPropagation = i),
					t.preventDefault || (t.preventDefault = s),
					(n = n.slice())
				for (var o = 0; o < n.length; o++) {
					n[o](t, this)
					if (t.propagationStopped) break
				}
				if (r && !t.defaultPrevented) return r(t, this)
			}),
			(r._signal = function (e, t) {
				var n = (this._eventRegistry || {})[e]
				if (!n) return
				n = n.slice()
				for (var r = 0; r < n.length; r++) n[r](t, this)
			}),
			(r.once = function (e, t) {
				var n = this
				this.on(e, function r() {
					n.off(e, r), t.apply(null, arguments)
				})
				if (!t)
					return new Promise(function (e) {
						t = e
					})
			}),
			(r.setDefaultHandler = function (e, t) {
				var n = this._defaultHandlers
				n || (n = this._defaultHandlers = { _disabled_: {} })
				if (n[e]) {
					var r = n[e],
						i = n._disabled_[e]
					i || (n._disabled_[e] = i = []), i.push(r)
					var s = i.indexOf(t)
					s != -1 && i.splice(s, 1)
				}
				n[e] = t
			}),
			(r.removeDefaultHandler = function (e, t) {
				var n = this._defaultHandlers
				if (!n) return
				var r = n._disabled_[e]
				if (n[e] == t) r && this.setDefaultHandler(e, r.pop())
				else if (r) {
					var i = r.indexOf(t)
					i != -1 && r.splice(i, 1)
				}
			}),
			(r.on = r.addEventListener =
				function (e, t, n) {
					this._eventRegistry = this._eventRegistry || {}
					var r = this._eventRegistry[e]
					return (
						r || (r = this._eventRegistry[e] = []),
						r.indexOf(t) == -1 && r[n ? 'unshift' : 'push'](t),
						t
					)
				}),
			(r.off =
				r.removeListener =
				r.removeEventListener =
					function (e, t) {
						this._eventRegistry = this._eventRegistry || {}
						var n = this._eventRegistry[e]
						if (!n) return
						var r = n.indexOf(t)
						r !== -1 && n.splice(r, 1)
					}),
			(r.removeAllListeners = function (e) {
				e || (this._eventRegistry = this._defaultHandlers = undefined),
					this._eventRegistry && (this._eventRegistry[e] = undefined),
					this._defaultHandlers && (this._defaultHandlers[e] = undefined)
			}),
			(t.EventEmitter = r)
	}),
	ace.define('ace/anchor', [], function (e, t, n) {
		'use strict'
		var r = e('./lib/oop'),
			i = e('./lib/event_emitter').EventEmitter,
			s = (t.Anchor = function (e, t, n) {
				;(this.$onChange = this.onChange.bind(this)),
					this.attach(e),
					typeof n == 'undefined' ? this.setPosition(t.row, t.column) : this.setPosition(t, n)
			})
		;(function () {
			function e(e, t, n) {
				var r = n ? e.column <= t.column : e.column < t.column
				return e.row < t.row || (e.row == t.row && r)
			}
			function t(t, n, r) {
				var i = t.action == 'insert',
					s = (i ? 1 : -1) * (t.end.row - t.start.row),
					o = (i ? 1 : -1) * (t.end.column - t.start.column),
					u = t.start,
					a = i ? u : t.end
				return e(n, u, r)
					? { row: n.row, column: n.column }
					: e(a, n, !r)
					  ? { row: n.row + s, column: n.column + (n.row == a.row ? o : 0) }
					  : { row: u.row, column: u.column }
			}
			r.implement(this, i),
				(this.getPosition = function () {
					return this.$clipPositionToDocument(this.row, this.column)
				}),
				(this.getDocument = function () {
					return this.document
				}),
				(this.$insertRight = !1),
				(this.onChange = function (e) {
					if (e.start.row == e.end.row && e.start.row != this.row) return
					if (e.start.row > this.row) return
					var n = t(e, { row: this.row, column: this.column }, this.$insertRight)
					this.setPosition(n.row, n.column, !0)
				}),
				(this.setPosition = function (e, t, n) {
					var r
					n ? (r = { row: e, column: t }) : (r = this.$clipPositionToDocument(e, t))
					if (this.row == r.row && this.column == r.column) return
					var i = { row: this.row, column: this.column }
					;(this.row = r.row),
						(this.column = r.column),
						this._signal('change', { old: i, value: r })
				}),
				(this.detach = function () {
					this.document.off('change', this.$onChange)
				}),
				(this.attach = function (e) {
					;(this.document = e || this.document), this.document.on('change', this.$onChange)
				}),
				(this.$clipPositionToDocument = function (e, t) {
					var n = {}
					return (
						e >= this.document.getLength()
							? ((n.row = Math.max(0, this.document.getLength() - 1)),
							  (n.column = this.document.getLine(n.row).length))
							: e < 0
							  ? ((n.row = 0), (n.column = 0))
							  : ((n.row = e),
							    (n.column = Math.min(this.document.getLine(n.row).length, Math.max(0, t)))),
						t < 0 && (n.column = 0),
						n
					)
				})
		}).call(s.prototype)
	}),
	ace.define('ace/document', [], function (e, t, n) {
		'use strict'
		var r = e('./lib/oop'),
			i = e('./apply_delta').applyDelta,
			s = e('./lib/event_emitter').EventEmitter,
			o = e('./range').Range,
			u = e('./anchor').Anchor,
			a = function (e) {
				;(this.$lines = ['']),
					e.length === 0
						? (this.$lines = [''])
						: Array.isArray(e)
						  ? this.insertMergedLines({ row: 0, column: 0 }, e)
						  : this.insert({ row: 0, column: 0 }, e)
			}
		;(function () {
			r.implement(this, s),
				(this.setValue = function (e) {
					var t = this.getLength() - 1
					this.remove(new o(0, 0, t, this.getLine(t).length)), this.insert({ row: 0, column: 0 }, e)
				}),
				(this.getValue = function () {
					return this.getAllLines().join(this.getNewLineCharacter())
				}),
				(this.createAnchor = function (e, t) {
					return new u(this, e, t)
				}),
				'aaa'.split(/a/).length === 0
					? (this.$split = function (e) {
							return e.replace(/\r\n|\r/g, '\n').split('\n')
					  })
					: (this.$split = function (e) {
							return e.split(/\r\n|\r|\n/)
					  }),
				(this.$detectNewLine = function (e) {
					var t = e.match(/^.*?(\r\n|\r|\n)/m)
					;(this.$autoNewLine = t ? t[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 (e) {
					if (this.$newLineMode === e) return
					;(this.$newLineMode = e), this._signal('changeNewLineMode')
				}),
				(this.getNewLineMode = function () {
					return this.$newLineMode
				}),
				(this.isNewLine = function (e) {
					return e == '\r\n' || e == '\r' || e == '\n'
				}),
				(this.getLine = function (e) {
					return this.$lines[e] || ''
				}),
				(this.getLines = function (e, t) {
					return this.$lines.slice(e, t + 1)
				}),
				(this.getAllLines = function () {
					return this.getLines(0, this.getLength())
				}),
				(this.getLength = function () {
					return this.$lines.length
				}),
				(this.getTextRange = function (e) {
					return this.getLinesForRange(e).join(this.getNewLineCharacter())
				}),
				(this.getLinesForRange = function (e) {
					var t
					if (e.start.row === e.end.row)
						t = [this.getLine(e.start.row).substring(e.start.column, e.end.column)]
					else {
						;(t = this.getLines(e.start.row, e.end.row)),
							(t[0] = (t[0] || '').substring(e.start.column))
						var n = t.length - 1
						e.end.row - e.start.row == n && (t[n] = t[n].substring(0, e.end.column))
					}
					return t
				}),
				(this.insertLines = function (e, t) {
					return (
						console.warn(
							'Use of document.insertLines is deprecated. Use the insertFullLines method instead.'
						),
						this.insertFullLines(e, t)
					)
				}),
				(this.removeLines = function (e, t) {
					return (
						console.warn(
							'Use of document.removeLines is deprecated. Use the removeFullLines method instead.'
						),
						this.removeFullLines(e, t)
					)
				}),
				(this.insertNewLine = function (e) {
					return (
						console.warn(
							"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."
						),
						this.insertMergedLines(e, ['', ''])
					)
				}),
				(this.insert = function (e, t) {
					return (
						this.getLength() <= 1 && this.$detectNewLine(t),
						this.insertMergedLines(e, this.$split(t))
					)
				}),
				(this.insertInLine = function (e, t) {
					var n = this.clippedPos(e.row, e.column),
						r = this.pos(e.row, e.column + t.length)
					return (
						this.applyDelta({ start: n, end: r, action: 'insert', lines: [t] }, !0),
						this.clonePos(r)
					)
				}),
				(this.clippedPos = function (e, t) {
					var n = this.getLength()
					e === undefined ? (e = n) : e < 0 ? (e = 0) : e >= n && ((e = n - 1), (t = undefined))
					var r = this.getLine(e)
					return (
						t == undefined && (t = r.length),
						(t = Math.min(Math.max(t, 0), r.length)),
						{ row: e, column: t }
					)
				}),
				(this.clonePos = function (e) {
					return { row: e.row, column: e.column }
				}),
				(this.pos = function (e, t) {
					return { row: e, column: t }
				}),
				(this.$clipPosition = function (e) {
					var t = this.getLength()
					return (
						e.row >= t
							? ((e.row = Math.max(0, t - 1)), (e.column = this.getLine(t - 1).length))
							: ((e.row = Math.max(0, e.row)),
							  (e.column = Math.min(Math.max(e.column, 0), this.getLine(e.row).length))),
						e
					)
				}),
				(this.insertFullLines = function (e, t) {
					e = Math.min(Math.max(e, 0), this.getLength())
					var n = 0
					e < this.getLength()
						? ((t = t.concat([''])), (n = 0))
						: ((t = [''].concat(t)), e--, (n = this.$lines[e].length)),
						this.insertMergedLines({ row: e, column: n }, t)
				}),
				(this.insertMergedLines = function (e, t) {
					var n = this.clippedPos(e.row, e.column),
						r = {
							row: n.row + t.length - 1,
							column: (t.length == 1 ? n.column : 0) + t[t.length - 1].length,
						}
					return this.applyDelta({ start: n, end: r, action: 'insert', lines: t }), this.clonePos(r)
				}),
				(this.remove = function (e) {
					var t = this.clippedPos(e.start.row, e.start.column),
						n = this.clippedPos(e.end.row, e.end.column)
					return (
						this.applyDelta({
							start: t,
							end: n,
							action: 'remove',
							lines: this.getLinesForRange({ start: t, end: n }),
						}),
						this.clonePos(t)
					)
				}),
				(this.removeInLine = function (e, t, n) {
					var r = this.clippedPos(e, t),
						i = this.clippedPos(e, n)
					return (
						this.applyDelta(
							{
								start: r,
								end: i,
								action: 'remove',
								lines: this.getLinesForRange({ start: r, end: i }),
							},
							!0
						),
						this.clonePos(r)
					)
				}),
				(this.removeFullLines = function (e, t) {
					;(e = Math.min(Math.max(0, e), this.getLength() - 1)),
						(t = Math.min(Math.max(0, t), this.getLength() - 1))
					var n = t == this.getLength() - 1 && e > 0,
						r = t < this.getLength() - 1,
						i = n ? e - 1 : e,
						s = n ? this.getLine(i).length : 0,
						u = r ? t + 1 : t,
						a = r ? 0 : this.getLine(u).length,
						f = new o(i, s, u, a),
						l = this.$lines.slice(e, t + 1)
					return (
						this.applyDelta({
							start: f.start,
							end: f.end,
							action: 'remove',
							lines: this.getLinesForRange(f),
						}),
						l
					)
				}),
				(this.removeNewLine = function (e) {
					e < this.getLength() - 1 &&
						e >= 0 &&
						this.applyDelta({
							start: this.pos(e, this.getLine(e).length),
							end: this.pos(e + 1, 0),
							action: 'remove',
							lines: ['', ''],
						})
				}),
				(this.replace = function (e, t) {
					e instanceof o || (e = o.fromPoints(e.start, e.end))
					if (t.length === 0 && e.isEmpty()) return e.start
					if (t == this.getTextRange(e)) return e.end
					this.remove(e)
					var n
					return t ? (n = this.insert(e.start, t)) : (n = e.start), n
				}),
				(this.applyDeltas = function (e) {
					for (var t = 0; t < e.length; t++) this.applyDelta(e[t])
				}),
				(this.revertDeltas = function (e) {
					for (var t = e.length - 1; t >= 0; t--) this.revertDelta(e[t])
				}),
				(this.applyDelta = function (e, t) {
					var n = e.action == 'insert'
					if (n ? e.lines.length <= 1 && !e.lines[0] : !o.comparePoints(e.start, e.end)) return
					n && e.lines.length > 2e4
						? this.$splitAndapplyLargeDelta(e, 2e4)
						: (i(this.$lines, e, t), this._signal('change', e))
				}),
				(this.$safeApplyDelta = function (e) {
					var t = this.$lines.length
					;((e.action == 'remove' && e.start.row < t && e.end.row < t) ||
						(e.action == 'insert' && e.start.row <= t)) &&
						this.applyDelta(e)
				}),
				(this.$splitAndapplyLargeDelta = function (e, t) {
					var n = e.lines,
						r = n.length - t + 1,
						i = e.start.row,
						s = e.start.column
					for (var o = 0, u = 0; o < r; o = u) {
						u += t - 1
						var a = n.slice(o, u)
						a.push(''),
							this.applyDelta(
								{
									start: this.pos(i + o, s),
									end: this.pos(i + u, (s = 0)),
									action: e.action,
									lines: a,
								},
								!0
							)
					}
					;(e.lines = n.slice(o)),
						(e.start.row = i + o),
						(e.start.column = s),
						this.applyDelta(e, !0)
				}),
				(this.revertDelta = function (e) {
					this.$safeApplyDelta({
						start: this.clonePos(e.start),
						end: this.clonePos(e.end),
						action: e.action == 'insert' ? 'remove' : 'insert',
						lines: e.lines.slice(),
					})
				}),
				(this.indexToPosition = function (e, t) {
					var n = this.$lines || this.getAllLines(),
						r = this.getNewLineCharacter().length
					for (var i = t || 0, s = n.length; i < s; i++) {
						e -= n[i].length + r
						if (e < 0) return { row: i, column: e + n[i].length + r }
					}
					return { row: s - 1, column: e + n[s - 1].length + r }
				}),
				(this.positionToIndex = function (e, t) {
					var n = this.$lines || this.getAllLines(),
						r = this.getNewLineCharacter().length,
						i = 0,
						s = Math.min(e.row, n.length)
					for (var o = t || 0; o < s; ++o) i += n[o].length + r
					return i + e.column
				})
		}).call(a.prototype),
			(t.Document = a)
	}),
	ace.define('ace/lib/lang', [], function (e, t, n) {
		'use strict'
		;(t.last = function (e) {
			return e[e.length - 1]
		}),
			(t.stringReverse = function (e) {
				return e.split('').reverse().join('')
			}),
			(t.stringRepeat = function (e, t) {
				var n = ''
				while (t > 0) {
					t & 1 && (n += e)
					if ((t >>= 1)) e += e
				}
				return n
			})
		var r = /^\s\s*/,
			i = /\s\s*$/
		;(t.stringTrimLeft = function (e) {
			return e.replace(r, '')
		}),
			(t.stringTrimRight = function (e) {
				return e.replace(i, '')
			}),
			(t.copyObject = function (e) {
				var t = {}
				for (var n in e) t[n] = e[n]
				return t
			}),
			(t.copyArray = function (e) {
				var t = []
				for (var n = 0, r = e.length; n < r; n++)
					e[n] && typeof e[n] == 'object' ? (t[n] = this.copyObject(e[n])) : (t[n] = e[n])
				return t
			}),
			(t.deepCopy = function s(e) {
				if (typeof e != 'object' || !e) return e
				var t
				if (Array.isArray(e)) {
					t = []
					for (var n = 0; n < e.length; n++) t[n] = s(e[n])
					return t
				}
				if (Object.prototype.toString.call(e) !== '[object Object]') return e
				t = {}
				for (var n in e) t[n] = s(e[n])
				return t
			}),
			(t.arrayToMap = function (e) {
				var t = {}
				for (var n = 0; n < e.length; n++) t[e[n]] = 1
				return t
			}),
			(t.createMap = function (e) {
				var t = Object.create(null)
				for (var n in e) t[n] = e[n]
				return t
			}),
			(t.arrayRemove = function (e, t) {
				for (var n = 0; n <= e.length; n++) t === e[n] && e.splice(n, 1)
			}),
			(t.escapeRegExp = function (e) {
				return e.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1')
			}),
			(t.escapeHTML = function (e) {
				return ('' + e)
					.replace(/&/g, '&#38;')
					.replace(/"/g, '&#34;')
					.replace(/'/g, '&#39;')
					.replace(/</g, '&#60;')
			}),
			(t.getMatchOffsets = function (e, t) {
				var n = []
				return (
					e.replace(t, function (e) {
						n.push({ offset: arguments[arguments.length - 2], length: e.length })
					}),
					n
				)
			}),
			(t.deferredCall = function (e) {
				var t = null,
					n = function () {
						;(t = null), e()
					},
					r = function (e) {
						return r.cancel(), (t = setTimeout(n, e || 0)), r
					}
				return (
					(r.schedule = r),
					(r.call = function () {
						return this.cancel(), e(), r
					}),
					(r.cancel = function () {
						return clearTimeout(t), (t = null), r
					}),
					(r.isPending = function () {
						return t
					}),
					r
				)
			}),
			(t.delayedCall = function (e, t) {
				var n = null,
					r = function () {
						;(n = null), e()
					},
					i = function (e) {
						n == null && (n = setTimeout(r, e || t))
					}
				return (
					(i.delay = function (e) {
						n && clearTimeout(n), (n = setTimeout(r, e || t))
					}),
					(i.schedule = i),
					(i.call = function () {
						this.cancel(), e()
					}),
					(i.cancel = function () {
						n && clearTimeout(n), (n = null)
					}),
					(i.isPending = function () {
						return n
					}),
					i
				)
			})
	}),
	ace.define('ace/worker/mirror', [], function (e, t, n) {
		'use strict'
		var r = e('../range').Range,
			i = e('../document').Document,
			s = e('../lib/lang'),
			o = (t.Mirror = function (e) {
				this.sender = e
				var t = (this.doc = new i('')),
					n = (this.deferredUpdate = s.delayedCall(this.onUpdate.bind(this))),
					r = this
				e.on('change', function (e) {
					var i = e.data
					if (i[0].start) t.applyDeltas(i)
					else
						for (var s = 0; s < i.length; s += 2) {
							if (Array.isArray(i[s + 1]))
								var o = { action: 'insert', start: i[s], lines: i[s + 1] }
							else var o = { action: 'remove', start: i[s], end: i[s + 1] }
							t.applyDelta(o, !0)
						}
					if (r.$timeout) return n.schedule(r.$timeout)
					r.onUpdate()
				})
			})
		;(function () {
			;(this.$timeout = 500),
				(this.setTimeout = function (e) {
					this.$timeout = e
				}),
				(this.setValue = function (e) {
					this.doc.setValue(e), this.deferredUpdate.schedule(this.$timeout)
				}),
				(this.getValue = function (e) {
					this.sender.callback(this.doc.getValue(), e)
				}),
				(this.onUpdate = function () {}),
				(this.isPending = function () {
					return this.deferredUpdate.isPending()
				})
		}).call(o.prototype)
	}),
	ace.define('ace/mode/json/json_parse', [], function (e, t, n) {
		'use strict'
		var r,
			i,
			s = { '"': '"', '\\': '\\', '/': '/', b: '\b', f: '\f', n: '\n', r: '\r', t: '	' },
			o,
			u = function (e) {
				throw { name: 'SyntaxError', message: e, at: r, text: o }
			},
			a = function (e) {
				return (
					e && e !== i && u("Expected '" + e + "' instead of '" + i + "'"),
					(i = o.charAt(r)),
					(r += 1),
					i
				)
			},
			f = function () {
				var e,
					t = ''
				i === '-' && ((t = '-'), a('-'))
				while (i >= '0' && i <= '9') (t += i), a()
				if (i === '.') {
					t += '.'
					while (a() && i >= '0' && i <= '9') t += i
				}
				if (i === 'e' || i === 'E') {
					;(t += i), a()
					if (i === '-' || i === '+') (t += i), a()
					while (i >= '0' && i <= '9') (t += i), a()
				}
				e = +t
				if (!isNaN(e)) return e
				u('Bad number')
			},
			l = function () {
				var e,
					t,
					n = '',
					r
				if (i === '"')
					while (a()) {
						if (i === '"') return a(), n
						if (i === '\\') {
							a()
							if (i === 'u') {
								r = 0
								for (t = 0; t < 4; t += 1) {
									e = parseInt(a(), 16)
									if (!isFinite(e)) break
									r = r * 16 + e
								}
								n += String.fromCharCode(r)
							} else {
								if (typeof s[i] != 'string') break
								n += s[i]
							}
						} else {
							if (i == '\n' || i == '\r') break
							n += i
						}
					}
				u('Bad string')
			},
			c = function () {
				while (i && i <= ' ') a()
			},
			h = function () {
				switch (i) {
					case 't':
						return a('t'), a('r'), a('u'), a('e'), !0
					case 'f':
						return a('f'), a('a'), a('l'), a('s'), a('e'), !1
					case 'n':
						return a('n'), a('u'), a('l'), a('l'), null
				}
				u("Unexpected '" + i + "'")
			},
			p,
			d = function () {
				var e = []
				if (i === '[') {
					a('['), c()
					if (i === ']') return a(']'), e
					while (i) {
						e.push(p()), c()
						if (i === ']') return a(']'), e
						a(','), c()
					}
				}
				u('Bad array')
			},
			v = function () {
				var e,
					t = {}
				if (i === '{') {
					a('{'), c()
					if (i === '}') return a('}'), t
					while (i) {
						;(e = l()),
							c(),
							a(':'),
							Object.hasOwnProperty.call(t, e) && u('Duplicate key "' + e + '"'),
							(t[e] = p()),
							c()
						if (i === '}') return a('}'), t
						a(','), c()
					}
				}
				u('Bad object')
			}
		return (
			(p = function () {
				c()
				switch (i) {
					case '{':
						return v()
					case '[':
						return d()
					case '"':
						return l()
					case '-':
						return f()
					default:
						return i >= '0' && i <= '9' ? f() : h()
				}
			}),
			function (e, t) {
				var n
				return (
					(o = e),
					(r = 0),
					(i = ' '),
					(n = p()),
					c(),
					i && u('Syntax error'),
					typeof t == 'function'
						? (function s(e, n) {
								var r,
									i,
									o = e[n]
								if (o && typeof o == 'object')
									for (r in o)
										Object.hasOwnProperty.call(o, r) &&
											((i = s(o, r)), i !== undefined ? (o[r] = i) : delete o[r])
								return t.call(e, n, o)
						  })({ '': n }, '')
						: n
				)
			}
		)
	}),
	ace.define('ace/mode/json_worker', [], function (e, t, n) {
		'use strict'
		var r = e('../lib/oop'),
			i = e('../worker/mirror').Mirror,
			s = e('./json/json_parse'),
			o = (t.JsonWorker = function (e) {
				i.call(this, e), this.setTimeout(200)
			})
		r.inherits(o, i),
			function () {
				this.onUpdate = function () {
					var e = this.doc.getValue(),
						t = []
					try {
						e && s(e)
					} catch (n) {
						var r = this.doc.indexToPosition(n.at - 1)
						t.push({ row: r.row, column: r.column, text: n.message, type: 'error' })
					}
					this.sender.emit('annotate', t)
				}
			}.call(o.prototype)
	})
